{
  "version": 3,
  "sources": ["/cdn/shop/t/67/assets/app.js?t=08.10.2026"],
  "sourcesContent": ["/*\r\n * ATTENTION: An \"eval-source-map\" devtool has been used.\r\n * This devtool is neither made for production nor for readable output files.\r\n * It uses \"eval()\" calls to create a separate source file with attached SourceMaps in the browser devtools.\r\n * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)\r\n * or disable the default devtool with \"devtool: false\".\r\n * If you are looking for production-ready output files, see mode: \"production\" (https://webpack.js.org/configuration/mode/).\r\n */\r\n/******/ (() => { // webpackBootstrap\r\n/******/ \t\"use strict\";\r\n/******/ \tvar __webpack_modules__ = ({\r\n\r\n/***/ \"./libs/gsap/ScrollSmoother.js\":\r\n/*!*************************************!*\\\r\n  !*** ./libs/gsap/ScrollSmoother.js ***!\r\n  \\*************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"ScrollSmoother\\\": () => (/* binding */ ScrollSmoother),\\n/* harmony export */   \\\"default\\\": () => (/* binding */ ScrollSmoother)\\n/* harmony export */ });\\nfunction _defineProperties(target, props) {\\n  for (var i = 0; i < props.length; i++) {\\n    var descriptor = props[i];\\n    descriptor.enumerable = descriptor.enumerable || false;\\n    descriptor.configurable = true;\\n    if (\\\"value\\\" in descriptor) descriptor.writable = true;\\n    Object.defineProperty(target, descriptor.key, descriptor);\\n  }\\n}\\nfunction _createClass(Constructor, protoProps, staticProps) {\\n  if (protoProps) _defineProperties(Constructor.prototype, protoProps);\\n  if (staticProps) _defineProperties(Constructor, staticProps);\\n  return Constructor;\\n}\\n\\n/*!\\r\\n * ScrollSmoother 3.12.5\\r\\n * https://gsap.com\\r\\n *\\r\\n * @license Copyright 2008-2024, GreenSock. All rights reserved.\\r\\n * Subject to the terms at https://gsap.com/standard-license or for\\r\\n * Club GSAP members, the agreement issued with that membership.\\r\\n * @author: Jack Doyle, jack@greensock.com\\r\\n*/\\n\\n/* eslint-disable */\\nvar gsap,\\n  _coreInitted,\\n  _win,\\n  _doc,\\n  _docEl,\\n  _body,\\n  _root,\\n  _toArray,\\n  _clamp,\\n  ScrollTrigger,\\n  _mainInstance,\\n  _expo,\\n  _getVelocityProp,\\n  _inputObserver,\\n  _context,\\n  _onResizeDelayedCall,\\n  _windowExists = function _windowExists() {\\n    return typeof window !== \\\"undefined\\\";\\n  },\\n  _getGSAP = function _getGSAP() {\\n    return gsap || _windowExists() && (gsap = window.gsap) && gsap.registerPlugin && gsap;\\n  },\\n  _bonusValidated = 1,\\n  //<name>ScrollSmoother</name>\\n  _round = function _round(value) {\\n    return Math.round(value * 100000) / 100000 || 0;\\n  },\\n  _maxScroll = function _maxScroll(scroller) {\\n    return ScrollTrigger.maxScroll(scroller || _win);\\n  },\\n  _autoDistance = function _autoDistance(el, progress) {\\n    // for calculating the distance (and offset) for elements with speed: \\\"auto\\\". Progress is for if it's \\\"above the fold\\\" (negative start position), so we can crop as little as possible.\\n    var parent = el.parentNode || _docEl,\\n      b1 = el.getBoundingClientRect(),\\n      b2 = parent.getBoundingClientRect(),\\n      gapTop = b2.top - b1.top,\\n      gapBottom = b2.bottom - b1.bottom,\\n      change = (Math.abs(gapTop) > Math.abs(gapBottom) ? gapTop : gapBottom) / (1 - progress),\\n      offset = -change * progress,\\n      ratio,\\n      extraChange;\\n    if (change > 0) {\\n      // if the image starts at the BOTTOM of the container, adjust things so that it shows as much of the image as possible while still covering.\\n      ratio = b2.height / (_win.innerHeight + b2.height);\\n      extraChange = ratio === 0.5 ? b2.height * 2 : Math.min(b2.height, Math.abs(-change * ratio / (2 * ratio - 1))) * 2 * (progress || 1);\\n      offset += progress ? -extraChange * progress : -extraChange / 2; // whatever the offset, we must double that in the opposite direction to compensate.\\n\\n      change += extraChange;\\n    }\\n    return {\\n      change: change,\\n      offset: offset\\n    };\\n  },\\n  _wrap = function _wrap(el) {\\n    var wrapper = _doc.querySelector(\\\".ScrollSmoother-wrapper\\\"); // some frameworks load multiple times, so one already exists, just use that to avoid duplicates\\n\\n    if (!wrapper) {\\n      wrapper = _doc.createElement(\\\"div\\\");\\n      wrapper.classList.add(\\\"ScrollSmoother-wrapper\\\");\\n      el.parentNode.insertBefore(wrapper, el);\\n      wrapper.appendChild(el);\\n    }\\n    return wrapper;\\n  };\\nvar ScrollSmoother = /*#__PURE__*/function () {\\n  function ScrollSmoother(vars) {\\n    var _this = this;\\n    _coreInitted || ScrollSmoother.register(gsap) || console.warn(\\\"Please gsap.registerPlugin(ScrollSmoother)\\\");\\n    vars = this.vars = vars || {};\\n    _mainInstance && _mainInstance.kill();\\n    _mainInstance = this;\\n    _context(this);\\n    var _vars = vars,\\n      smoothTouch = _vars.smoothTouch,\\n      _onUpdate = _vars.onUpdate,\\n      onStop = _vars.onStop,\\n      smooth = _vars.smooth,\\n      onFocusIn = _vars.onFocusIn,\\n      normalizeScroll = _vars.normalizeScroll,\\n      wholePixels = _vars.wholePixels,\\n      content,\\n      wrapper,\\n      height,\\n      mainST,\\n      effects,\\n      sections,\\n      intervalID,\\n      wrapperCSS,\\n      contentCSS,\\n      paused,\\n      pausedNormalizer,\\n      recordedRefreshScroll,\\n      recordedRefreshScrub,\\n      allowUpdates,\\n      self = this,\\n      effectsPrefix = vars.effectsPrefix || \\\"\\\",\\n      scrollFunc = ScrollTrigger.getScrollFunc(_win),\\n      smoothDuration = ScrollTrigger.isTouch === 1 ? smoothTouch === true ? 0.8 : parseFloat(smoothTouch) || 0 : smooth === 0 || smooth === false ? 0 : parseFloat(smooth) || 0.8,\\n      speed = smoothDuration && +vars.speed || 1,\\n      currentY = 0,\\n      delta = 0,\\n      startupPhase = 1,\\n      tracker = _getVelocityProp(0),\\n      updateVelocity = function updateVelocity() {\\n        return tracker.update(-currentY);\\n      },\\n      scroll = {\\n        y: 0\\n      },\\n      removeScroll = function removeScroll() {\\n        return content.style.overflow = \\\"visible\\\";\\n      },\\n      isProxyScrolling,\\n      killScrub = function killScrub(trigger) {\\n        trigger.update(); // it's possible that it hasn't been synchronized with the actual scroll position yet, like if it's later in the _triggers Array. If it was already updated, it'll skip the processing anyway.\\n\\n        var scrub = trigger.getTween();\\n        if (scrub) {\\n          scrub.pause();\\n          scrub._time = scrub._dur; // force the playhead to completion without rendering just so that when it resumes, it doesn't jump back in the .resetTo().\\n\\n          scrub._tTime = scrub._tDur;\\n        }\\n        isProxyScrolling = false;\\n        trigger.animation.progress(trigger.progress, true);\\n      },\\n      render = function render(y, force) {\\n        if (y !== currentY && !paused || force) {\\n          wholePixels && (y = Math.round(y));\\n          if (smoothDuration) {\\n            content.style.transform = \\\"matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, \\\" + y + \\\", 0, 1)\\\"; //content.style.transform = \\\"translateY(\\\" + y + \\\"px)\\\"; // NOTE: when we used matrix3d() or set will-change: transform, it performed noticeably worse on iOS counter-intuitively!\\n\\n            content._gsap.y = y + \\\"px\\\";\\n          }\\n          delta = y - currentY;\\n          currentY = y;\\n          ScrollTrigger.isUpdating || ScrollSmoother.isRefreshing || ScrollTrigger.update(); // note: if we allowed an update() when in the middle of a refresh() it could render all the other ScrollTriggers and inside the update(), _refreshing would be true thus scrubs would jump instantly, but then on the very next update they'd continue from there. Basically this allowed update() to be called on OTHER ScrollTriggers during the refresh() of the mainST which could cause some complications. See https://gsap.com/forums/topic/35536-smoothscroller-ignoremobileresize-for-non-touch-devices\\n        }\\n      },\\n      scrollTop = function scrollTop(value) {\\n        if (arguments.length) {\\n          value < 0 && (value = 0);\\n          scroll.y = -value; // don't use currentY because we must accurately track the delta variable (in render() method)\\n\\n          isProxyScrolling = true; // otherwise, if snapping was applied (or anything that attempted to SET the scroll proxy's scroll position), we'd set the scroll here which would then (on the next tick) update the content tween/ScrollTrigger which would try to smoothly animate to that new value, thus the scrub tween would impede the progress. So we use this flag to respond accordingly in the ScrollTrigger's onUpdate and effectively force the scrub to its end immediately.\\n\\n          paused ? currentY = -value : render(-value);\\n          ScrollTrigger.isRefreshing ? mainST.update() : scrollFunc(value / speed); // during a refresh, we revert all scrollers to 0 and then put them back. We shouldn't force the window to that value too during the refresh.\\n\\n          return this;\\n        }\\n        return -currentY;\\n      },\\n      resizeObserver = typeof ResizeObserver !== \\\"undefined\\\" && vars.autoResize !== false && new ResizeObserver(function () {\\n        if (!ScrollTrigger.isRefreshing) {\\n          var max = _maxScroll(wrapper) * speed;\\n          max < -currentY && scrollTop(max); // if the user scrolled down to the bottom, for example, and then the page resizes smaller, we should adjust things accordingly right away so that the scroll position isn't past the very end.\\n\\n          _onResizeDelayedCall.restart(true);\\n        }\\n      }),\\n      lastFocusElement,\\n      _onFocusIn = function _onFocusIn(e) {\\n        // when the focus changes, make sure that element is on-screen\\n        wrapper.scrollTop = 0;\\n        if (e.target.contains && e.target.contains(wrapper) || onFocusIn && onFocusIn(_this, e) === false) {\\n          return;\\n        }\\n        ScrollTrigger.isInViewport(e.target) || e.target === lastFocusElement || _this.scrollTo(e.target, false, \\\"center center\\\");\\n        lastFocusElement = e.target;\\n      },\\n      _transformPosition = function _transformPosition(position, st) {\\n        // feed in a position (start or end scroll value) and a ScrollTrigger that's associated with a parallax effect and it'll spit back the adjusted position based on the movement of the trigger. For example, if the trigger goes at a speed of 0.5 while in the viewport, we must push the start/end values of OTHER ScrollTriggers that use that same trigger further down to compensate.\\n        if (position < st.start) {\\n          return position;\\n        }\\n        var ratio = isNaN(st.ratio) ? 1 : st.ratio,\\n          change = st.end - st.start,\\n          distance = position - st.start,\\n          offset = st.offset || 0,\\n          pins = st.pins || [],\\n          pinOffset = pins.offset || 0,\\n          progressOffset = st._startClamp && st.start <= 0 || st.pins && st.pins.offset ? 0 : st._endClamp && st.end === _maxScroll() ? 1 : 0.5;\\n        pins.forEach(function (p) {\\n          // remove any pinning space/distance\\n          change -= p.distance;\\n          if (p.nativeStart <= position) {\\n            distance -= p.distance;\\n          }\\n        });\\n        if (pinOffset) {\\n          // edge case when a clamped effect starts mid-pin; we've gotta compensate for the smaller change amount (the yOffset gets set to the st.pins.offset, so let's say it clamps such that the page starts with the element pinned 100px in, we have to set the yOffset to 100 but then subtract 100 from the change value to compensate, thus we must scale the positions accordingly based on the ratios. Like if it would normally have a change of 2000, and a pin would normally hit at 1000, but we're offsetting by 100, that means everything must scale now that we're only moving 1900px rather than 2000px.\\n          distance *= (change - pinOffset / ratio) / change;\\n        }\\n        return position + (distance - offset * progressOffset) / ratio - distance;\\n      },\\n      adjustEffectRelatedTriggers = function adjustEffectRelatedTriggers(st, triggers, partial) {\\n        // if we're using this method to do only a partial Array of triggers, we should NOT reset or rebuild the pin data. For example, we tap into this from the offset() method.\\n        partial || (st.pins.length = st.pins.offset = 0);\\n        var pins = st.pins,\\n          markers = st.markers,\\n          dif,\\n          isClamped,\\n          start,\\n          end,\\n          nativeStart,\\n          nativeEnd,\\n          i,\\n          trig;\\n        for (i = 0; i < triggers.length; i++) {\\n          trig = triggers[i];\\n          if (st.trigger && trig.trigger && st !== trig && (trig.trigger === st.trigger || trig.pinnedContainer === st.trigger || st.trigger.contains(trig.trigger))) {\\n            nativeStart = trig._startNative || trig._startClamp || trig.start;\\n            nativeEnd = trig._endNative || trig._endClamp || trig.end;\\n            start = _transformPosition(nativeStart, st); // note: _startClamp and _endClamp are populated with the unclamped values. For the sake of efficiency sake, we use the property both like a boolean to indicate that clamping is enabled AND the actual original unclamped value which we need in situations like if there's a data-speed=\\\"\\\" on an element that has something like start=\\\"clamp(top bottom)\\\". For in-viewport elements, it would clamp the values on the ScrollTrigger first, then feed it here and we'd adjust it on the clamped value which could throw things off - we need to apply the logic to the unclamped value and THEN re-apply clamping on the result.\\n\\n            end = trig.pin && nativeEnd > 0 ? start + (nativeEnd - nativeStart) : _transformPosition(nativeEnd, st);\\n            trig.setPositions(start, end, true, (trig._startClamp ? Math.max(0, start) : start) - nativeStart); // the last value (pinOffset) is to adjust the pinStart y value inside ScrollTrigger to accommodate for the y offset that gets applied by the parallax effect.\\n\\n            trig.markerStart && markers.push(gsap.quickSetter([trig.markerStart, trig.markerEnd], \\\"y\\\", \\\"px\\\"));\\n            if (trig.pin && trig.end > 0 && !partial) {\\n              dif = trig.end - trig.start;\\n              isClamped = st._startClamp && trig.start < 0;\\n              if (isClamped) {\\n                if (st.start > 0) {\\n                  // the trigger element on the effect must have been pinned BEFORE its starting position, so in this edge case we must adjust the start position to be 0 and end position to get pushed further by the amount of the overlap\\n                  st.setPositions(0, st.end + (st._startNative - st.start), true); // add the overlap amount\\n\\n                  adjustEffectRelatedTriggers(st, triggers);\\n                  return; // start over for this trigger element!\\n                }\\n\\n                dif += trig.start;\\n                pins.offset = -trig.start; // edge case when a clamped effect starts mid-pin, we've gotta compensate in the onUpdate algorithm.\\n              }\\n\\n              pins.push({\\n                start: trig.start,\\n                nativeStart: nativeStart,\\n                end: trig.end,\\n                distance: dif,\\n                trig: trig\\n              });\\n              st.setPositions(st.start, st.end + (isClamped ? -trig.start : dif), true);\\n            }\\n          }\\n        }\\n      },\\n      adjustParallaxPosition = function adjustParallaxPosition(triggers, createdAfterEffectWasApplied) {\\n        effects.forEach(function (st) {\\n          return adjustEffectRelatedTriggers(st, triggers, createdAfterEffectWasApplied);\\n        });\\n      },\\n      onRefresh = function onRefresh() {\\n        removeScroll();\\n        requestAnimationFrame(removeScroll);\\n        if (effects) {\\n          // adjust all the effect start/end positions including any pins!\\n          ScrollTrigger.getAll().forEach(function (st) {\\n            // record the native start/end positions because we'll be messing with them and need a way to have a \\\"source of truth\\\"\\n            st._startNative = st.start;\\n            st._endNative = st.end;\\n          });\\n          effects.forEach(function (st) {\\n            var start = st._startClamp || st.start,\\n              // if it was already clamped, we should base things on the unclamped value and then do the clamping here.\\n              end = st.autoSpeed ? Math.min(_maxScroll(), st.end) : start + Math.abs((st.end - start) / st.ratio),\\n              offset = end - st.end; // we split the difference so that it reaches its natural position in the MIDDLE of the viewport\\n\\n            start -= offset / 2;\\n            end -= offset / 2;\\n            if (start > end) {\\n              var s = start;\\n              start = end;\\n              end = s;\\n            }\\n            if (st._startClamp && start < 0) {\\n              end = st.ratio < 0 ? _maxScroll() : st.end / st.ratio;\\n              offset = end - st.end;\\n              start = 0;\\n            } else if (st.ratio < 0 || st._endClamp && end >= _maxScroll()) {\\n              end = _maxScroll();\\n              start = st.ratio < 0 ? 0 : st.ratio > 1 ? 0 : end - (end - st.start) / st.ratio;\\n              offset = (end - start) * st.ratio - (st.end - st.start);\\n            }\\n            st.offset = offset || 0.0001; // we assign at least a tiny value because we check in the onUpdate for .offset being set in order to apply values.\\n\\n            st.pins.length = st.pins.offset = 0;\\n            st.setPositions(start, end, true); // note: another way of getting only the amount of offset traveled for a certain ratio is: distanceBetweenStartAndEnd * (1 / ratio - 1)\\n          });\\n\\n          adjustParallaxPosition(ScrollTrigger.sort());\\n        }\\n        tracker.reset();\\n      },\\n      addOnRefresh = function addOnRefresh() {\\n        return ScrollTrigger.addEventListener(\\\"refresh\\\", onRefresh);\\n      },\\n      restoreEffects = function restoreEffects() {\\n        return effects && effects.forEach(function (st) {\\n          return st.vars.onRefresh(st);\\n        });\\n      },\\n      revertEffects = function revertEffects() {\\n        effects && effects.forEach(function (st) {\\n          return st.vars.onRefreshInit(st);\\n        });\\n        return restoreEffects;\\n      },\\n      effectValueGetter = function effectValueGetter(name, value, index, el) {\\n        return function () {\\n          var v = typeof value === \\\"function\\\" ? value(index, el) : value;\\n          v || v === 0 || (v = el.getAttribute(\\\"data-\\\" + effectsPrefix + name) || (name === \\\"speed\\\" ? 1 : 0));\\n          el.setAttribute(\\\"data-\\\" + effectsPrefix + name, v);\\n          var clamp = (v + \\\"\\\").substr(0, 6) === \\\"clamp(\\\";\\n          return {\\n            clamp: clamp,\\n            value: clamp ? v.substr(6, v.length - 7) : v\\n          };\\n        };\\n      },\\n      createEffect = function createEffect(el, speed, lag, index, effectsPadding) {\\n        effectsPadding = (typeof effectsPadding === \\\"function\\\" ? effectsPadding(index, el) : effectsPadding) || 0;\\n        var getSpeed = effectValueGetter(\\\"speed\\\", speed, index, el),\\n          getLag = effectValueGetter(\\\"lag\\\", lag, index, el),\\n          startY = gsap.getProperty(el, \\\"y\\\"),\\n          cache = el._gsap,\\n          ratio,\\n          st,\\n          autoSpeed,\\n          scrub,\\n          progressOffset,\\n          yOffset,\\n          pins = [],\\n          initDynamicValues = function initDynamicValues() {\\n            speed = getSpeed();\\n            lag = parseFloat(getLag().value);\\n            ratio = parseFloat(speed.value) || 1;\\n            autoSpeed = speed.value === \\\"auto\\\";\\n            progressOffset = autoSpeed || st && st._startClamp && st.start <= 0 || pins.offset ? 0 : st && st._endClamp && st.end === _maxScroll() ? 1 : 0.5;\\n            scrub && scrub.kill();\\n            scrub = lag && gsap.to(el, {\\n              ease: _expo,\\n              overwrite: false,\\n              y: \\\"+=0\\\",\\n              duration: lag\\n            });\\n            if (st) {\\n              st.ratio = ratio;\\n              st.autoSpeed = autoSpeed;\\n            }\\n          },\\n          revert = function revert() {\\n            cache.y = startY + \\\"px\\\";\\n            cache.renderTransform(1);\\n            initDynamicValues();\\n          },\\n          markers = [],\\n          change = 0,\\n          updateChange = function updateChange(self) {\\n            if (autoSpeed) {\\n              revert();\\n              var auto = _autoDistance(el, _clamp(0, 1, -self.start / (self.end - self.start)));\\n              change = auto.change;\\n              yOffset = auto.offset;\\n            } else {\\n              yOffset = pins.offset || 0;\\n              change = (self.end - self.start - yOffset) * (1 - ratio);\\n            }\\n            pins.forEach(function (p) {\\n              return change -= p.distance * (1 - ratio);\\n            });\\n            self.offset = change || 0.001;\\n            self.vars.onUpdate(self);\\n            scrub && scrub.progress(1);\\n          };\\n        initDynamicValues();\\n        if (ratio !== 1 || autoSpeed || scrub) {\\n          st = ScrollTrigger.create({\\n            trigger: autoSpeed ? el.parentNode : el,\\n            start: function start() {\\n              return speed.clamp ? \\\"clamp(top bottom+=\\\" + effectsPadding + \\\")\\\" : \\\"top bottom+=\\\" + effectsPadding;\\n            },\\n            end: function end() {\\n              return speed.value < 0 ? \\\"max\\\" : speed.clamp ? \\\"clamp(bottom top-=\\\" + effectsPadding + \\\")\\\" : \\\"bottom top-=\\\" + effectsPadding;\\n            },\\n            scroller: wrapper,\\n            scrub: true,\\n            refreshPriority: -999,\\n            // must update AFTER any other ScrollTrigger pins\\n            onRefreshInit: revert,\\n            onRefresh: updateChange,\\n            onKill: function onKill(self) {\\n              var i = effects.indexOf(self);\\n              i >= 0 && effects.splice(i, 1);\\n              revert();\\n            },\\n            onUpdate: function onUpdate(self) {\\n              var y = startY + change * (self.progress - progressOffset),\\n                i = pins.length,\\n                extraY = 0,\\n                pin,\\n                scrollY,\\n                end;\\n              if (self.offset) {\\n                // wait until the effects are adjusted.\\n                if (i) {\\n                  // pinning must be handled in a special way because when pinned, slope changes to 1.\\n                  scrollY = -currentY; // -scroll.y;\\n\\n                  end = self.end;\\n                  while (i--) {\\n                    pin = pins[i];\\n                    if (pin.trig.isActive || scrollY >= pin.start && scrollY <= pin.end) {\\n                      // currently pinned so no need to set anything\\n                      if (scrub) {\\n                        pin.trig.progress += pin.trig.direction < 0 ? 0.001 : -0.001; // just to make absolutely sure that it renders (if the progress didn't change, it'll skip)\\n\\n                        pin.trig.update(0, 0, 1);\\n                        scrub.resetTo(\\\"y\\\", parseFloat(cache.y), -delta, true);\\n                        startupPhase && scrub.progress(1);\\n                      }\\n                      return;\\n                    }\\n                    scrollY > pin.end && (extraY += pin.distance);\\n                    end -= pin.distance;\\n                  }\\n                  y = startY + extraY + change * ((gsap.utils.clamp(self.start, self.end, scrollY) - self.start - extraY) / (end - self.start) - progressOffset);\\n                }\\n                markers.length && !autoSpeed && markers.forEach(function (setter) {\\n                  return setter(y - extraY);\\n                });\\n                y = _round(y + yOffset);\\n                if (scrub) {\\n                  scrub.resetTo(\\\"y\\\", y, -delta, true);\\n                  startupPhase && scrub.progress(1);\\n                } else {\\n                  cache.y = y + \\\"px\\\";\\n                  cache.renderTransform(1);\\n                }\\n              }\\n            }\\n          });\\n          updateChange(st);\\n          gsap.core.getCache(st.trigger).stRevert = revertEffects; // if user calls ScrollSmoother.create() with effects and THEN creates a ScrollTrigger on the same trigger element, the effect would throw off the start/end positions thus we needed a way to revert things when creating a new ScrollTrigger in that scenario, so we use this stRevert property of the GSCache inside ScrollTrigger.\\n\\n          st.startY = startY;\\n          st.pins = pins;\\n          st.markers = markers;\\n          st.ratio = ratio;\\n          st.autoSpeed = autoSpeed;\\n          el.style.willChange = \\\"transform\\\";\\n        }\\n        return st;\\n      };\\n    addOnRefresh();\\n    ScrollTrigger.addEventListener(\\\"killAll\\\", addOnRefresh);\\n    gsap.delayedCall(0.5, function () {\\n      return startupPhase = 0;\\n    });\\n    this.scrollTop = scrollTop;\\n    this.scrollTo = function (target, smooth, position) {\\n      var p = gsap.utils.clamp(0, _maxScroll(), isNaN(target) ? _this.offset(target, position, !!smooth && !paused) : +target);\\n      !smooth ? scrollTop(p) : paused ? gsap.to(_this, {\\n        duration: smoothDuration,\\n        scrollTop: p,\\n        overwrite: \\\"auto\\\",\\n        ease: _expo\\n      }) : scrollFunc(p);\\n    };\\n    this.offset = function (target, position, ignoreSpeed) {\\n      target = _toArray(target)[0];\\n      var cssText = target.style.cssText,\\n        // because if there's an effect applied, we revert(). We need to restore.\\n        st = ScrollTrigger.create({\\n          trigger: target,\\n          start: position || \\\"top top\\\"\\n        }),\\n        y;\\n      if (effects) {\\n        startupPhase ? ScrollTrigger.refresh() : adjustParallaxPosition([st], true); // all the effects need to go through the initial full refresh() so that all the pins and ratios and offsets are set up. That's why we do a full refresh() if it's during the startupPhase.\\n      }\\n\\n      y = st.start / (ignoreSpeed ? speed : 1);\\n      st.kill(false);\\n      target.style.cssText = cssText;\\n      gsap.core.getCache(target).uncache = 1;\\n      return y;\\n    };\\n    function refreshHeight() {\\n      height = content.clientHeight;\\n      content.style.overflow = \\\"visible\\\";\\n      _body.style.height = _win.innerHeight + (height - _win.innerHeight) / speed + \\\"px\\\";\\n      return height - _win.innerHeight;\\n    }\\n    this.content = function (element) {\\n      if (arguments.length) {\\n        var newContent = _toArray(element || \\\"#smooth-content\\\")[0] || console.warn(\\\"ScrollSmoother needs a valid content element.\\\") || _body.children[0];\\n        if (newContent !== content) {\\n          content = newContent;\\n          contentCSS = content.getAttribute(\\\"style\\\") || \\\"\\\";\\n          resizeObserver && resizeObserver.observe(content);\\n          gsap.set(content, {\\n            overflow: \\\"visible\\\",\\n            width: \\\"100%\\\",\\n            boxSizing: \\\"border-box\\\",\\n            y: \\\"+=0\\\"\\n          });\\n          smoothDuration || gsap.set(content, {\\n            clearProps: \\\"transform\\\"\\n          });\\n        }\\n        return this;\\n      }\\n      return content;\\n    };\\n    this.wrapper = function (element) {\\n      if (arguments.length) {\\n        wrapper = _toArray(element || \\\"#smooth-wrapper\\\")[0] || _wrap(content);\\n        wrapperCSS = wrapper.getAttribute(\\\"style\\\") || \\\"\\\";\\n        refreshHeight();\\n        gsap.set(wrapper, smoothDuration ? {\\n          overflow: \\\"hidden\\\",\\n          position: \\\"fixed\\\",\\n          height: \\\"100%\\\",\\n          width: \\\"100%\\\",\\n          top: 0,\\n          left: 0,\\n          right: 0,\\n          bottom: 0\\n        } : {\\n          overflow: \\\"visible\\\",\\n          position: \\\"relative\\\",\\n          width: \\\"100%\\\",\\n          height: \\\"auto\\\",\\n          top: \\\"auto\\\",\\n          bottom: \\\"auto\\\",\\n          left: \\\"auto\\\",\\n          right: \\\"auto\\\"\\n        });\\n        return this;\\n      }\\n      return wrapper;\\n    };\\n    this.effects = function (targets, config) {\\n      var _effects;\\n      effects || (effects = []);\\n      if (!targets) {\\n        return effects.slice(0);\\n      }\\n      targets = _toArray(targets);\\n      targets.forEach(function (target) {\\n        var i = effects.length;\\n        while (i--) {\\n          effects[i].trigger === target && effects[i].kill(); // will automatically splice() it from the effects Array in the onKill\\n        }\\n      });\\n\\n      config = config || {};\\n      var _config = config,\\n        speed = _config.speed,\\n        lag = _config.lag,\\n        effectsPadding = _config.effectsPadding,\\n        effectsToAdd = [],\\n        i,\\n        st;\\n      for (i = 0; i < targets.length; i++) {\\n        st = createEffect(targets[i], speed, lag, i, effectsPadding);\\n        st && effectsToAdd.push(st);\\n      }\\n      (_effects = effects).push.apply(_effects, effectsToAdd);\\n      config.refresh !== false && ScrollTrigger.refresh(); // certain effects require a refresh to work properly\\n\\n      return effectsToAdd;\\n    };\\n    this.sections = function (targets, config) {\\n      var _sections;\\n      sections || (sections = []);\\n      if (!targets) {\\n        return sections.slice(0);\\n      }\\n      var newSections = _toArray(targets).map(function (el) {\\n        return ScrollTrigger.create({\\n          trigger: el,\\n          start: \\\"top 120%\\\",\\n          end: \\\"bottom -20%\\\",\\n          onToggle: function onToggle(self) {\\n            el.style.opacity = self.isActive ? \\\"1\\\" : \\\"0\\\";\\n            el.style.pointerEvents = self.isActive ? \\\"all\\\" : \\\"none\\\";\\n          }\\n        });\\n      });\\n      config && config.add ? (_sections = sections).push.apply(_sections, newSections) : sections = newSections.slice(0);\\n      return newSections;\\n    };\\n    this.content(vars.content);\\n    this.wrapper(vars.wrapper);\\n    this.render = function (y) {\\n      return render(y || y === 0 ? y : currentY);\\n    };\\n    this.getVelocity = function () {\\n      return tracker.getVelocity(-currentY);\\n    };\\n    ScrollTrigger.scrollerProxy(wrapper, {\\n      scrollTop: scrollTop,\\n      scrollHeight: function scrollHeight() {\\n        return refreshHeight() && _body.scrollHeight;\\n      },\\n      fixedMarkers: vars.fixedMarkers !== false && !!smoothDuration,\\n      content: content,\\n      getBoundingClientRect: function getBoundingClientRect() {\\n        return {\\n          top: 0,\\n          left: 0,\\n          width: _win.innerWidth,\\n          height: _win.innerHeight\\n        };\\n      }\\n    });\\n    ScrollTrigger.defaults({\\n      scroller: wrapper\\n    });\\n    var existingScrollTriggers = ScrollTrigger.getAll().filter(function (st) {\\n      return st.scroller === _win || st.scroller === wrapper;\\n    });\\n    existingScrollTriggers.forEach(function (st) {\\n      return st.revert(true, true);\\n    }); // in case it's in an environment like React where child components that have ScrollTriggers instantiate BEFORE the parent that does ScrollSmoother.create(...);\\n\\n    mainST = ScrollTrigger.create({\\n      animation: gsap.fromTo(scroll, {\\n        y: function y() {\\n          allowUpdates = 0;\\n          return 0;\\n        }\\n      }, {\\n        y: function y() {\\n          allowUpdates = 1;\\n          return -refreshHeight();\\n        },\\n        immediateRender: false,\\n        ease: \\\"none\\\",\\n        data: \\\"ScrollSmoother\\\",\\n        duration: 100,\\n        // for added precision\\n        onUpdate: function onUpdate() {\\n          if (allowUpdates) {\\n            // skip when it's the \\\"from\\\" part of the tween (setting the startAt)\\n            var force = isProxyScrolling;\\n            if (force) {\\n              killScrub(mainST);\\n              scroll.y = currentY;\\n            }\\n            render(scroll.y, force);\\n            updateVelocity();\\n            _onUpdate && !paused && _onUpdate(self);\\n          }\\n        }\\n      }),\\n      onRefreshInit: function onRefreshInit(self) {\\n        if (ScrollSmoother.isRefreshing) {\\n          // gets called on the onRefresh() when we do self.setPositions(...) in which case we should skip this\\n          return;\\n        }\\n        ScrollSmoother.isRefreshing = true;\\n        if (effects) {\\n          var _pins = ScrollTrigger.getAll().filter(function (st) {\\n            return !!st.pin;\\n          });\\n          effects.forEach(function (st) {\\n            if (!st.vars.pinnedContainer) {\\n              _pins.forEach(function (pinST) {\\n                if (pinST.pin.contains(st.trigger)) {\\n                  var v = st.vars;\\n                  v.pinnedContainer = pinST.pin;\\n                  st.vars = null; // otherwise, it'll self.kill(), triggering the onKill()\\n\\n                  st.init(v, st.animation);\\n                }\\n              });\\n            }\\n          });\\n        }\\n        var scrub = self.getTween();\\n        recordedRefreshScrub = scrub && scrub._end > scrub._dp._time; // don't use scrub.progress() < 1 because we may have called killScrub() recently in which case it'll report progress() as 1 when we were actually in the middle of a scrub. That's why we tap into the _end instead.\\n\\n        recordedRefreshScroll = currentY;\\n        scroll.y = 0;\\n        if (smoothDuration) {\\n          ScrollTrigger.isTouch === 1 && (wrapper.style.position = \\\"absolute\\\"); // Safari 16 has a major bug - if you set wrapper.scrollTop to 0 (even if it's already 0), it blocks the whole page from scrolling page non-scrollable! See https://bugs.webkit.org/show_bug.cgi?id=245300 and https://codepen.io/GreenSock/pen/YzLZVOz. Originally we set pointer-events: none on the wrapper temporarily, and set it back to all after setting scrollTop to 0, but that could cause mouseenter/mouseleave/etc. events to fire too, so we opted to set the position to absolute and then back to fixed after setting scrollTop.\\n\\n          wrapper.scrollTop = 0; // set wrapper.scrollTop to 0 because in some very rare situations, the browser will auto-set that, like if there's a hash in the link or changing focus to an off-screen input\\n\\n          ScrollTrigger.isTouch === 1 && (wrapper.style.position = \\\"fixed\\\");\\n        }\\n      },\\n      onRefresh: function onRefresh(self) {\\n        self.animation.invalidate(); // because pinnedContainers may have been found in ScrollTrigger's _refreshAll() that extend the height. Without this, it may prevent the user from being able to scroll all the way down.\\n\\n        self.setPositions(self.start, refreshHeight() / speed);\\n        recordedRefreshScrub || killScrub(self);\\n        scroll.y = -scrollFunc() * speed; // in 3.11.1, we shifted to forcing the scroll position to 0 during the entire refreshAll() in ScrollTrigger and then restored the scroll position AFTER everything had been updated, thus we should always make these adjustments AFTER a full refresh rather than putting it in the onRefresh() of the individual mainST ScrollTrigger which would fire before the scroll position was restored.\\n\\n        render(scroll.y);\\n        if (!startupPhase) {\\n          recordedRefreshScrub && (isProxyScrolling = false); // otherwise, we lose any in-progress scrub. When we set the progress(), it fires the onUpdate() which sets the scroll position immediately (jumps ahead if isProxyScrolling is true). See https://gsap.com/community/forums/topic/37515-dynamic-scrolltrigger-with-pin-inside-a-scrollsmoother/\\n\\n          self.animation.progress(gsap.utils.clamp(0, 1, recordedRefreshScroll / speed / -self.end));\\n        }\\n        if (recordedRefreshScrub) {\\n          // we need to trigger the scrub to happen again\\n          self.progress -= 0.001;\\n          self.update();\\n        }\\n        ScrollSmoother.isRefreshing = false;\\n      },\\n      id: \\\"ScrollSmoother\\\",\\n      scroller: _win,\\n      invalidateOnRefresh: true,\\n      start: 0,\\n      refreshPriority: -9999,\\n      // because all other pins, etc. should be calculated first before this figures out the height of the body. BUT this should also update FIRST so that the scroll position on the proxy is up-to-date when all the ScrollTriggers calculate their progress! -9999 is a special number that ScrollTrigger looks for to handle in this way.\\n      end: function end() {\\n        return refreshHeight() / speed;\\n      },\\n      onScrubComplete: function onScrubComplete() {\\n        tracker.reset();\\n        onStop && onStop(_this);\\n      },\\n      scrub: smoothDuration || true\\n    });\\n    this.smooth = function (value) {\\n      if (arguments.length) {\\n        smoothDuration = value || 0;\\n        speed = smoothDuration && +vars.speed || 1;\\n        mainST.scrubDuration(value);\\n      }\\n      return mainST.getTween() ? mainST.getTween().duration() : 0;\\n    };\\n    mainST.getTween() && (mainST.getTween().vars.ease = vars.ease || _expo);\\n    this.scrollTrigger = mainST;\\n    vars.effects && this.effects(vars.effects === true ? \\\"[data-\\\" + effectsPrefix + \\\"speed], [data-\\\" + effectsPrefix + \\\"lag]\\\" : vars.effects, {\\n      effectsPadding: vars.effectsPadding,\\n      refresh: false\\n    });\\n    vars.sections && this.sections(vars.sections === true ? \\\"[data-section]\\\" : vars.sections);\\n    existingScrollTriggers.forEach(function (st) {\\n      st.vars.scroller = wrapper;\\n      st.revert(false, true);\\n      st.init(st.vars, st.animation);\\n    });\\n    this.paused = function (value, allowNestedScroll) {\\n      if (arguments.length) {\\n        if (!!paused !== value) {\\n          if (value) {\\n            // pause\\n            mainST.getTween() && mainST.getTween().pause();\\n            scrollFunc(-currentY / speed);\\n            tracker.reset();\\n            pausedNormalizer = ScrollTrigger.normalizeScroll();\\n            pausedNormalizer && pausedNormalizer.disable(); // otherwise the normalizer would try to scroll the page on things like wheel events.\\n\\n            paused = ScrollTrigger.observe({\\n              preventDefault: true,\\n              type: \\\"wheel,touch,scroll\\\",\\n              debounce: false,\\n              allowClicks: true,\\n              onChangeY: function onChangeY() {\\n                return scrollTop(-currentY);\\n              } // refuse to scroll\\n            });\\n\\n            paused.nested = _inputObserver(_docEl, \\\"wheel,touch,scroll\\\", true, allowNestedScroll !== false); // allow nested scrolling, like modals\\n          } else {\\n            // resume\\n            paused.nested.kill();\\n            paused.kill();\\n            paused = 0;\\n            pausedNormalizer && pausedNormalizer.enable();\\n            mainST.progress = (-currentY / speed - mainST.start) / (mainST.end - mainST.start);\\n            killScrub(mainST);\\n          }\\n        }\\n        return this;\\n      }\\n      return !!paused;\\n    };\\n    this.kill = this.revert = function () {\\n      _this.paused(false);\\n      killScrub(mainST);\\n      mainST.kill();\\n      var triggers = (effects || []).concat(sections || []),\\n        i = triggers.length;\\n      while (i--) {\\n        // make sure we go backwards because the onKill() will effects.splice(index, 1) and we don't want to skip\\n        triggers[i].kill();\\n      }\\n      ScrollTrigger.scrollerProxy(wrapper);\\n      ScrollTrigger.removeEventListener(\\\"killAll\\\", addOnRefresh);\\n      ScrollTrigger.removeEventListener(\\\"refresh\\\", onRefresh);\\n      wrapper.style.cssText = wrapperCSS;\\n      content.style.cssText = contentCSS;\\n      var defaults = ScrollTrigger.defaults({});\\n      defaults && defaults.scroller === wrapper && ScrollTrigger.defaults({\\n        scroller: _win\\n      });\\n      _this.normalizer && ScrollTrigger.normalizeScroll(false);\\n      clearInterval(intervalID);\\n      _mainInstance = null;\\n      resizeObserver && resizeObserver.disconnect();\\n      _body.style.removeProperty(\\\"height\\\");\\n      _win.removeEventListener(\\\"focusin\\\", _onFocusIn);\\n    };\\n    this.refresh = function (soft, force) {\\n      return mainST.refresh(soft, force);\\n    };\\n    if (normalizeScroll) {\\n      this.normalizer = ScrollTrigger.normalizeScroll(normalizeScroll === true ? {\\n        debounce: true,\\n        content: !smoothDuration && content\\n      } : normalizeScroll);\\n    }\\n    ScrollTrigger.config(vars); // in case user passes in ignoreMobileResize for example\\n\\n    \\\"overscrollBehavior\\\" in _win.getComputedStyle(_body) && gsap.set([_body, _docEl], {\\n      overscrollBehavior: \\\"none\\\"\\n    });\\n    \\\"scrollBehavior\\\" in _win.getComputedStyle(_body) && gsap.set([_body, _docEl], {\\n      scrollBehavior: \\\"auto\\\"\\n    }); // if the user hits the tab key (or whatever) to shift focus to an element that's off-screen, center that element.\\n\\n    _win.addEventListener(\\\"focusin\\\", _onFocusIn);\\n    intervalID = setInterval(updateVelocity, 250);\\n    _doc.readyState === \\\"loading\\\" || requestAnimationFrame(function () {\\n      return ScrollTrigger.refresh();\\n    });\\n  }\\n  ScrollSmoother.register = function register(core) {\\n    if (!_coreInitted) {\\n      gsap = core || _getGSAP();\\n      if (_windowExists() && window.document) {\\n        _win = window;\\n        _doc = document;\\n        _docEl = _doc.documentElement;\\n        _body = _doc.body;\\n      }\\n      if (gsap) {\\n        _toArray = gsap.utils.toArray;\\n        _clamp = gsap.utils.clamp;\\n        _expo = gsap.parseEase(\\\"expo\\\");\\n        _context = gsap.core.context || function () {};\\n        ScrollTrigger = gsap.core.globals().ScrollTrigger;\\n        gsap.core.globals(\\\"ScrollSmoother\\\", ScrollSmoother); // must register the global manually because in Internet Explorer, functions (classes) don't have a \\\"name\\\" property.\\n\\n        if (_body && ScrollTrigger) {\\n          _onResizeDelayedCall = gsap.delayedCall(0.2, function () {\\n            return ScrollTrigger.isRefreshing || _mainInstance && _mainInstance.refresh();\\n          }).pause();\\n          _root = [_win, _doc, _docEl, _body];\\n          _getVelocityProp = ScrollTrigger.core._getVelocityProp;\\n          _inputObserver = ScrollTrigger.core._inputObserver;\\n          ScrollSmoother.refresh = ScrollTrigger.refresh;\\n          _coreInitted = 1;\\n        }\\n      }\\n    }\\n    return _coreInitted;\\n  };\\n  _createClass(ScrollSmoother, [{\\n    key: \\\"progress\\\",\\n    get: function get() {\\n      return this.scrollTrigger ? this.scrollTrigger.animation._time / 100 : 0;\\n    }\\n  }]);\\n  return ScrollSmoother;\\n}();\\nScrollSmoother.version = \\\"3.12.5\\\";\\nScrollSmoother.create = function (vars) {\\n  return _mainInstance && vars && _mainInstance.content() === _toArray(vars.content)[0] ? _mainInstance : new ScrollSmoother(vars);\\n};\\nScrollSmoother.get = function () {\\n  return _mainInstance;\\n};\\n_getGSAP() && gsap.registerPlugin(ScrollSmoother);\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHOUQsYUFBYSxHQUFHLElBQUk4QyxjQUFjLENBQUNDLElBQUksQ0FBQztBQUNsSSxDQUFDO0FBRURELGNBQWMsQ0FBQ3FQLEdBQUcsR0FBRyxZQUFZO0VBQy9CLE9BQU9uUyxhQUFhO0FBQ3RCLENBQUM7QUFFRFEsUUFBUSxFQUFFLElBQUlsQixJQUFJLENBQUNtQixjQUFjLENBQUNxQyxjQUFjLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL2xpYnMvZ3NhcC9TY3JvbGxTbW9vdGhlci5qcz8xNzQ2Il0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cclxuXHJcbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XHJcblxyXG4vKiFcclxuICogU2Nyb2xsU21vb3RoZXIgMy4xMi41XHJcbiAqIGh0dHBzOi8vZ3NhcC5jb21cclxuICpcclxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IDIwMDgtMjAyNCwgR3JlZW5Tb2NrLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhdCBodHRwczovL2dzYXAuY29tL3N0YW5kYXJkLWxpY2Vuc2Ugb3IgZm9yXHJcbiAqIENsdWIgR1NBUCBtZW1iZXJzLCB0aGUgYWdyZWVtZW50IGlzc3VlZCB3aXRoIHRoYXQgbWVtYmVyc2hpcC5cclxuICogQGF1dGhvcjogSmFjayBEb3lsZSwgamFja0BncmVlbnNvY2suY29tXHJcbiovXHJcblxyXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xyXG52YXIgZ3NhcCxcclxuICAgIF9jb3JlSW5pdHRlZCxcclxuICAgIF93aW4sXHJcbiAgICBfZG9jLFxyXG4gICAgX2RvY0VsLFxyXG4gICAgX2JvZHksXHJcbiAgICBfcm9vdCxcclxuICAgIF90b0FycmF5LFxyXG4gICAgX2NsYW1wLFxyXG4gICAgU2Nyb2xsVHJpZ2dlcixcclxuICAgIF9tYWluSW5zdGFuY2UsXHJcbiAgICBfZXhwbyxcclxuICAgIF9nZXRWZWxvY2l0eVByb3AsXHJcbiAgICBfaW5wdXRPYnNlcnZlcixcclxuICAgIF9jb250ZXh0LFxyXG4gICAgX29uUmVzaXplRGVsYXllZENhbGwsXHJcbiAgICBfd2luZG93RXhpc3RzID0gZnVuY3Rpb24gX3dpbmRvd0V4aXN0cygpIHtcclxuICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIjtcclxufSxcclxuICAgIF9nZXRHU0FQID0gZnVuY3Rpb24gX2dldEdTQVAoKSB7XHJcbiAgcmV0dXJuIGdzYXAgfHwgX3dpbmRvd0V4aXN0cygpICYmIChnc2FwID0gd2luZG93LmdzYXApICYmIGdzYXAucmVnaXN0ZXJQbHVnaW4gJiYgZ3NhcDtcclxufSxcclxuICAgIF9ib251c1ZhbGlkYXRlZCA9IDEsXHJcbiAgICAvLzxuYW1lPlNjcm9sbFNtb290aGVyPC9uYW1lPlxyXG5fcm91bmQgPSBmdW5jdGlvbiBfcm91bmQodmFsdWUpIHtcclxuICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIDEwMDAwMCkgLyAxMDAwMDAgfHwgMDtcclxufSxcclxuICAgIF9tYXhTY3JvbGwgPSBmdW5jdGlvbiBfbWF4U2Nyb2xsKHNjcm9sbGVyKSB7XHJcbiAgcmV0dXJuIFNjcm9sbFRyaWdnZXIubWF4U2Nyb2xsKHNjcm9sbGVyIHx8IF93aW4pO1xyXG59LFxyXG4gICAgX2F1dG9EaXN0YW5jZSA9IGZ1bmN0aW9uIF9hdXRvRGlzdGFuY2UoZWwsIHByb2dyZXNzKSB7XHJcbiAgLy8gZm9yIGNhbGN1bGF0aW5nIHRoZSBkaXN0YW5jZSAoYW5kIG9mZnNldCkgZm9yIGVsZW1lbnRzIHdpdGggc3BlZWQ6IFwiYXV0b1wiLiBQcm9ncmVzcyBpcyBmb3IgaWYgaXQncyBcImFib3ZlIHRoZSBmb2xkXCIgKG5lZ2F0aXZlIHN0YXJ0IHBvc2l0aW9uKSwgc28gd2UgY2FuIGNyb3AgYXMgbGl0dGxlIGFzIHBvc3NpYmxlLlxyXG4gIHZhciBwYXJlbnQgPSBlbC5wYXJlbnROb2RlIHx8IF9kb2NFbCxcclxuICAgICAgYjEgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcclxuICAgICAgYjIgPSBwYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXHJcbiAgICAgIGdhcFRvcCA9IGIyLnRvcCAtIGIxLnRvcCxcclxuICAgICAgZ2FwQm90dG9tID0gYjIuYm90dG9tIC0gYjEuYm90dG9tLFxyXG4gICAgICBjaGFuZ2UgPSAoTWF0aC5hYnMoZ2FwVG9wKSA+IE1hdGguYWJzKGdhcEJvdHRvbSkgPyBnYXBUb3AgOiBnYXBCb3R0b20pIC8gKDEgLSBwcm9ncmVzcyksXHJcbiAgICAgIG9mZnNldCA9IC1jaGFuZ2UgKiBwcm9ncmVzcyxcclxuICAgICAgcmF0aW8sXHJcbiAgICAgIGV4dHJhQ2hhbmdlO1xyXG5cclxuICBpZiAoY2hhbmdlID4gMCkge1xyXG4gICAgLy8gaWYgdGhlIGltYWdlIHN0YXJ0cyBhdCB0aGUgQk9UVE9NIG9mIHRoZSBjb250YWluZXIsIGFkanVzdCB0aGluZ3Mgc28gdGhhdCBpdCBzaG93cyBhcyBtdWNoIG9mIHRoZSBpbWFnZSBhcyBwb3NzaWJsZSB3aGlsZSBzdGlsbCBjb3ZlcmluZy5cclxuICAgIHJhdGlvID0gYjIuaGVpZ2h0IC8gKF93aW4uaW5uZXJIZWlnaHQgKyBiMi5oZWlnaHQpO1xyXG4gICAgZXh0cmFDaGFuZ2UgPSByYXRpbyA9PT0gMC41ID8gYjIuaGVpZ2h0ICogMiA6IE1hdGgubWluKGIyLmhlaWdodCwgTWF0aC5hYnMoLWNoYW5nZSAqIHJhdGlvIC8gKDIgKiByYXRpbyAtIDEpKSkgKiAyICogKHByb2dyZXNzIHx8IDEpO1xyXG4gICAgb2Zmc2V0ICs9IHByb2dyZXNzID8gLWV4dHJhQ2hhbmdlICogcHJvZ3Jlc3MgOiAtZXh0cmFDaGFuZ2UgLyAyOyAvLyB3aGF0ZXZlciB0aGUgb2Zmc2V0LCB3ZSBtdXN0IGRvdWJsZSB0aGF0IGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gdG8gY29tcGVuc2F0ZS5cclxuXHJcbiAgICBjaGFuZ2UgKz0gZXh0cmFDaGFuZ2U7XHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgY2hhbmdlOiBjaGFuZ2UsXHJcbiAgICBvZmZzZXQ6IG9mZnNldFxyXG4gIH07XHJcbn0sXHJcbiAgICBfd3JhcCA9IGZ1bmN0aW9uIF93cmFwKGVsKSB7XHJcbiAgdmFyIHdyYXBwZXIgPSBfZG9jLnF1ZXJ5U2VsZWN0b3IoXCIuU2Nyb2xsU21vb3RoZXItd3JhcHBlclwiKTsgLy8gc29tZSBmcmFtZXdvcmtzIGxvYWQgbXVsdGlwbGUgdGltZXMsIHNvIG9uZSBhbHJlYWR5IGV4aXN0cywganVzdCB1c2UgdGhhdCB0byBhdm9pZCBkdXBsaWNhdGVzXHJcblxyXG5cclxuICBpZiAoIXdyYXBwZXIpIHtcclxuICAgIHdyYXBwZXIgPSBfZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbiAgICB3cmFwcGVyLmNsYXNzTGlzdC5hZGQoXCJTY3JvbGxTbW9vdGhlci13cmFwcGVyXCIpO1xyXG4gICAgZWwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcHBlciwgZWwpO1xyXG4gICAgd3JhcHBlci5hcHBlbmRDaGlsZChlbCk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gd3JhcHBlcjtcclxufTtcclxuXHJcbmV4cG9ydCB2YXIgU2Nyb2xsU21vb3RoZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xyXG4gIGZ1bmN0aW9uIFNjcm9sbFNtb290aGVyKHZhcnMpIHtcclxuICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcblxyXG4gICAgX2NvcmVJbml0dGVkIHx8IFNjcm9sbFNtb290aGVyLnJlZ2lzdGVyKGdzYXApIHx8IGNvbnNvbGUud2FybihcIlBsZWFzZSBnc2FwLnJlZ2lzdGVyUGx1Z2luKFNjcm9sbFNtb290aGVyKVwiKTtcclxuICAgIHZhcnMgPSB0aGlzLnZhcnMgPSB2YXJzIHx8IHt9O1xyXG4gICAgX21haW5JbnN0YW5jZSAmJiBfbWFpbkluc3RhbmNlLmtpbGwoKTtcclxuICAgIF9tYWluSW5zdGFuY2UgPSB0aGlzO1xyXG5cclxuICAgIF9jb250ZXh0KHRoaXMpO1xyXG5cclxuICAgIHZhciBfdmFycyA9IHZhcnMsXHJcbiAgICAgICAgc21vb3RoVG91Y2ggPSBfdmFycy5zbW9vdGhUb3VjaCxcclxuICAgICAgICBfb25VcGRhdGUgPSBfdmFycy5vblVwZGF0ZSxcclxuICAgICAgICBvblN0b3AgPSBfdmFycy5vblN0b3AsXHJcbiAgICAgICAgc21vb3RoID0gX3ZhcnMuc21vb3RoLFxyXG4gICAgICAgIG9uRm9jdXNJbiA9IF92YXJzLm9uRm9jdXNJbixcclxuICAgICAgICBub3JtYWxpemVTY3JvbGwgPSBfdmFycy5ub3JtYWxpemVTY3JvbGwsXHJcbiAgICAgICAgd2hvbGVQaXhlbHMgPSBfdmFycy53aG9sZVBpeGVscyxcclxuICAgICAgICBjb250ZW50LFxyXG4gICAgICAgIHdyYXBwZXIsXHJcbiAgICAgICAgaGVpZ2h0LFxyXG4gICAgICAgIG1haW5TVCxcclxuICAgICAgICBlZmZlY3RzLFxyXG4gICAgICAgIHNlY3Rpb25zLFxyXG4gICAgICAgIGludGVydmFsSUQsXHJcbiAgICAgICAgd3JhcHBlckNTUyxcclxuICAgICAgICBjb250ZW50Q1NTLFxyXG4gICAgICAgIHBhdXNlZCxcclxuICAgICAgICBwYXVzZWROb3JtYWxpemVyLFxyXG4gICAgICAgIHJlY29yZGVkUmVmcmVzaFNjcm9sbCxcclxuICAgICAgICByZWNvcmRlZFJlZnJlc2hTY3J1YixcclxuICAgICAgICBhbGxvd1VwZGF0ZXMsXHJcbiAgICAgICAgc2VsZiA9IHRoaXMsXHJcbiAgICAgICAgZWZmZWN0c1ByZWZpeCA9IHZhcnMuZWZmZWN0c1ByZWZpeCB8fCBcIlwiLFxyXG4gICAgICAgIHNjcm9sbEZ1bmMgPSBTY3JvbGxUcmlnZ2VyLmdldFNjcm9sbEZ1bmMoX3dpbiksXHJcbiAgICAgICAgc21vb3RoRHVyYXRpb24gPSBTY3JvbGxUcmlnZ2VyLmlzVG91Y2ggPT09IDEgPyBzbW9vdGhUb3VjaCA9PT0gdHJ1ZSA/IDAuOCA6IHBhcnNlRmxvYXQoc21vb3RoVG91Y2gpIHx8IDAgOiBzbW9vdGggPT09IDAgfHwgc21vb3RoID09PSBmYWxzZSA/IDAgOiBwYXJzZUZsb2F0KHNtb290aCkgfHwgMC44LFxyXG4gICAgICAgIHNwZWVkID0gc21vb3RoRHVyYXRpb24gJiYgK3ZhcnMuc3BlZWQgfHwgMSxcclxuICAgICAgICBjdXJyZW50WSA9IDAsXHJcbiAgICAgICAgZGVsdGEgPSAwLFxyXG4gICAgICAgIHN0YXJ0dXBQaGFzZSA9IDEsXHJcbiAgICAgICAgdHJhY2tlciA9IF9nZXRWZWxvY2l0eVByb3AoMCksXHJcbiAgICAgICAgdXBkYXRlVmVsb2NpdHkgPSBmdW5jdGlvbiB1cGRhdGVWZWxvY2l0eSgpIHtcclxuICAgICAgcmV0dXJuIHRyYWNrZXIudXBkYXRlKC1jdXJyZW50WSk7XHJcbiAgICB9LFxyXG4gICAgICAgIHNjcm9sbCA9IHtcclxuICAgICAgeTogMFxyXG4gICAgfSxcclxuICAgICAgICByZW1vdmVTY3JvbGwgPSBmdW5jdGlvbiByZW1vdmVTY3JvbGwoKSB7XHJcbiAgICAgIHJldHVybiBjb250ZW50LnN0eWxlLm92ZXJmbG93ID0gXCJ2aXNpYmxlXCI7XHJcbiAgICB9LFxyXG4gICAgICAgIGlzUHJveHlTY3JvbGxpbmcsXHJcbiAgICAgICAga2lsbFNjcnViID0gZnVuY3Rpb24ga2lsbFNjcnViKHRyaWdnZXIpIHtcclxuICAgICAgdHJpZ2dlci51cGRhdGUoKTsgLy8gaXQncyBwb3NzaWJsZSB0aGF0IGl0IGhhc24ndCBiZWVuIHN5bmNocm9uaXplZCB3aXRoIHRoZSBhY3R1YWwgc2Nyb2xsIHBvc2l0aW9uIHlldCwgbGlrZSBpZiBpdCdzIGxhdGVyIGluIHRoZSBfdHJpZ2dlcnMgQXJyYXkuIElmIGl0IHdhcyBhbHJlYWR5IHVwZGF0ZWQsIGl0J2xsIHNraXAgdGhlIHByb2Nlc3NpbmcgYW55d2F5LlxyXG5cclxuICAgICAgdmFyIHNjcnViID0gdHJpZ2dlci5nZXRUd2VlbigpO1xyXG5cclxuICAgICAgaWYgKHNjcnViKSB7XHJcbiAgICAgICAgc2NydWIucGF1c2UoKTtcclxuICAgICAgICBzY3J1Yi5fdGltZSA9IHNjcnViLl9kdXI7IC8vIGZvcmNlIHRoZSBwbGF5aGVhZCB0byBjb21wbGV0aW9uIHdpdGhvdXQgcmVuZGVyaW5nIGp1c3Qgc28gdGhhdCB3aGVuIGl0IHJlc3VtZXMsIGl0IGRvZXNuJ3QganVtcCBiYWNrIGluIHRoZSAucmVzZXRUbygpLlxyXG5cclxuICAgICAgICBzY3J1Yi5fdFRpbWUgPSBzY3J1Yi5fdER1cjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaXNQcm94eVNjcm9sbGluZyA9IGZhbHNlO1xyXG4gICAgICB0cmlnZ2VyLmFuaW1hdGlvbi5wcm9ncmVzcyh0cmlnZ2VyLnByb2dyZXNzLCB0cnVlKTtcclxuICAgIH0sXHJcbiAgICAgICAgcmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKHksIGZvcmNlKSB7XHJcbiAgICAgIGlmICh5ICE9PSBjdXJyZW50WSAmJiAhcGF1c2VkIHx8IGZvcmNlKSB7XHJcbiAgICAgICAgd2hvbGVQaXhlbHMgJiYgKHkgPSBNYXRoLnJvdW5kKHkpKTtcclxuXHJcbiAgICAgICAgaWYgKHNtb290aER1cmF0aW9uKSB7XHJcbiAgICAgICAgICBjb250ZW50LnN0eWxlLnRyYW5zZm9ybSA9IFwibWF0cml4M2QoMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgXCIgKyB5ICsgXCIsIDAsIDEpXCI7IC8vY29udGVudC5zdHlsZS50cmFuc2Zvcm0gPSBcInRyYW5zbGF0ZVkoXCIgKyB5ICsgXCJweClcIjsgLy8gTk9URTogd2hlbiB3ZSB1c2VkIG1hdHJpeDNkKCkgb3Igc2V0IHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm0sIGl0IHBlcmZvcm1lZCBub3RpY2VhYmx5IHdvcnNlIG9uIGlPUyBjb3VudGVyLWludHVpdGl2ZWx5IVxyXG5cclxuICAgICAgICAgIGNvbnRlbnQuX2dzYXAueSA9IHkgKyBcInB4XCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkZWx0YSA9IHkgLSBjdXJyZW50WTtcclxuICAgICAgICBjdXJyZW50WSA9IHk7XHJcbiAgICAgICAgU2Nyb2xsVHJpZ2dlci5pc1VwZGF0aW5nIHx8IFNjcm9sbFNtb290aGVyLmlzUmVmcmVzaGluZyB8fCBTY3JvbGxUcmlnZ2VyLnVwZGF0ZSgpOyAvLyBub3RlOiBpZiB3ZSBhbGxvd2VkIGFuIHVwZGF0ZSgpIHdoZW4gaW4gdGhlIG1pZGRsZSBvZiBhIHJlZnJlc2goKSBpdCBjb3VsZCByZW5kZXIgYWxsIHRoZSBvdGhlciBTY3JvbGxUcmlnZ2VycyBhbmQgaW5zaWRlIHRoZSB1cGRhdGUoKSwgX3JlZnJlc2hpbmcgd291bGQgYmUgdHJ1ZSB0aHVzIHNjcnVicyB3b3VsZCBqdW1wIGluc3RhbnRseSwgYnV0IHRoZW4gb24gdGhlIHZlcnkgbmV4dCB1cGRhdGUgdGhleSdkIGNvbnRpbnVlIGZyb20gdGhlcmUuIEJhc2ljYWxseSB0aGlzIGFsbG93ZWQgdXBkYXRlKCkgdG8gYmUgY2FsbGVkIG9uIE9USEVSIFNjcm9sbFRyaWdnZXJzIGR1cmluZyB0aGUgcmVmcmVzaCgpIG9mIHRoZSBtYWluU1Qgd2hpY2ggY291bGQgY2F1c2Ugc29tZSBjb21wbGljYXRpb25zLiBTZWUgaHR0cHM6Ly9nc2FwLmNvbS9mb3J1bXMvdG9waWMvMzU1MzYtc21vb3Roc2Nyb2xsZXItaWdub3JlbW9iaWxlcmVzaXplLWZvci1ub24tdG91Y2gtZGV2aWNlc1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgICAgIHNjcm9sbFRvcCA9IGZ1bmN0aW9uIHNjcm9sbFRvcCh2YWx1ZSkge1xyXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHZhbHVlIDwgMCAmJiAodmFsdWUgPSAwKTtcclxuICAgICAgICBzY3JvbGwueSA9IC12YWx1ZTsgLy8gZG9uJ3QgdXNlIGN1cnJlbnRZIGJlY2F1c2Ugd2UgbXVzdCBhY2N1cmF0ZWx5IHRyYWNrIHRoZSBkZWx0YSB2YXJpYWJsZSAoaW4gcmVuZGVyKCkgbWV0aG9kKVxyXG5cclxuICAgICAgICBpc1Byb3h5U2Nyb2xsaW5nID0gdHJ1ZTsgLy8gb3RoZXJ3aXNlLCBpZiBzbmFwcGluZyB3YXMgYXBwbGllZCAob3IgYW55dGhpbmcgdGhhdCBhdHRlbXB0ZWQgdG8gU0VUIHRoZSBzY3JvbGwgcHJveHkncyBzY3JvbGwgcG9zaXRpb24pLCB3ZSdkIHNldCB0aGUgc2Nyb2xsIGhlcmUgd2hpY2ggd291bGQgdGhlbiAob24gdGhlIG5leHQgdGljaykgdXBkYXRlIHRoZSBjb250ZW50IHR3ZWVuL1Njcm9sbFRyaWdnZXIgd2hpY2ggd291bGQgdHJ5IHRvIHNtb290aGx5IGFuaW1hdGUgdG8gdGhhdCBuZXcgdmFsdWUsIHRodXMgdGhlIHNjcnViIHR3ZWVuIHdvdWxkIGltcGVkZSB0aGUgcHJvZ3Jlc3MuIFNvIHdlIHVzZSB0aGlzIGZsYWcgdG8gcmVzcG9uZCBhY2NvcmRpbmdseSBpbiB0aGUgU2Nyb2xsVHJpZ2dlcidzIG9uVXBkYXRlIGFuZCBlZmZlY3RpdmVseSBmb3JjZSB0aGUgc2NydWIgdG8gaXRzIGVuZCBpbW1lZGlhdGVseS5cclxuXHJcbiAgICAgICAgcGF1c2VkID8gY3VycmVudFkgPSAtdmFsdWUgOiByZW5kZXIoLXZhbHVlKTtcclxuICAgICAgICBTY3JvbGxUcmlnZ2VyLmlzUmVmcmVzaGluZyA/IG1haW5TVC51cGRhdGUoKSA6IHNjcm9sbEZ1bmModmFsdWUgLyBzcGVlZCk7IC8vIGR1cmluZyBhIHJlZnJlc2gsIHdlIHJldmVydCBhbGwgc2Nyb2xsZXJzIHRvIDAgYW5kIHRoZW4gcHV0IHRoZW0gYmFjay4gV2Ugc2hvdWxkbid0IGZvcmNlIHRoZSB3aW5kb3cgdG8gdGhhdCB2YWx1ZSB0b28gZHVyaW5nIHRoZSByZWZyZXNoLlxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIC1jdXJyZW50WTtcclxuICAgIH0sXHJcbiAgICAgICAgcmVzaXplT2JzZXJ2ZXIgPSB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09IFwidW5kZWZpbmVkXCIgJiYgdmFycy5hdXRvUmVzaXplICE9PSBmYWxzZSAmJiBuZXcgUmVzaXplT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xyXG4gICAgICBpZiAoIVNjcm9sbFRyaWdnZXIuaXNSZWZyZXNoaW5nKSB7XHJcbiAgICAgICAgdmFyIG1heCA9IF9tYXhTY3JvbGwod3JhcHBlcikgKiBzcGVlZDtcclxuICAgICAgICBtYXggPCAtY3VycmVudFkgJiYgc2Nyb2xsVG9wKG1heCk7IC8vIGlmIHRoZSB1c2VyIHNjcm9sbGVkIGRvd24gdG8gdGhlIGJvdHRvbSwgZm9yIGV4YW1wbGUsIGFuZCB0aGVuIHRoZSBwYWdlIHJlc2l6ZXMgc21hbGxlciwgd2Ugc2hvdWxkIGFkanVzdCB0aGluZ3MgYWNjb3JkaW5nbHkgcmlnaHQgYXdheSBzbyB0aGF0IHRoZSBzY3JvbGwgcG9zaXRpb24gaXNuJ3QgcGFzdCB0aGUgdmVyeSBlbmQuXHJcblxyXG4gICAgICAgIF9vblJlc2l6ZURlbGF5ZWRDYWxsLnJlc3RhcnQodHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0pLFxyXG4gICAgICAgIGxhc3RGb2N1c0VsZW1lbnQsXHJcbiAgICAgICAgX29uRm9jdXNJbiA9IGZ1bmN0aW9uIF9vbkZvY3VzSW4oZSkge1xyXG4gICAgICAvLyB3aGVuIHRoZSBmb2N1cyBjaGFuZ2VzLCBtYWtlIHN1cmUgdGhhdCBlbGVtZW50IGlzIG9uLXNjcmVlblxyXG4gICAgICB3cmFwcGVyLnNjcm9sbFRvcCA9IDA7XHJcblxyXG4gICAgICBpZiAoZS50YXJnZXQuY29udGFpbnMgJiYgZS50YXJnZXQuY29udGFpbnMod3JhcHBlcikgfHwgb25Gb2N1c0luICYmIG9uRm9jdXNJbihfdGhpcywgZSkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBTY3JvbGxUcmlnZ2VyLmlzSW5WaWV3cG9ydChlLnRhcmdldCkgfHwgZS50YXJnZXQgPT09IGxhc3RGb2N1c0VsZW1lbnQgfHwgX3RoaXMuc2Nyb2xsVG8oZS50YXJnZXQsIGZhbHNlLCBcImNlbnRlciBjZW50ZXJcIik7XHJcbiAgICAgIGxhc3RGb2N1c0VsZW1lbnQgPSBlLnRhcmdldDtcclxuICAgIH0sXHJcbiAgICAgICAgX3RyYW5zZm9ybVBvc2l0aW9uID0gZnVuY3Rpb24gX3RyYW5zZm9ybVBvc2l0aW9uKHBvc2l0aW9uLCBzdCkge1xyXG4gICAgICAvLyBmZWVkIGluIGEgcG9zaXRpb24gKHN0YXJ0IG9yIGVuZCBzY3JvbGwgdmFsdWUpIGFuZCBhIFNjcm9sbFRyaWdnZXIgdGhhdCdzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcmFsbGF4IGVmZmVjdCBhbmQgaXQnbGwgc3BpdCBiYWNrIHRoZSBhZGp1c3RlZCBwb3NpdGlvbiBiYXNlZCBvbiB0aGUgbW92ZW1lbnQgb2YgdGhlIHRyaWdnZXIuIEZvciBleGFtcGxlLCBpZiB0aGUgdHJpZ2dlciBnb2VzIGF0IGEgc3BlZWQgb2YgMC41IHdoaWxlIGluIHRoZSB2aWV3cG9ydCwgd2UgbXVzdCBwdXNoIHRoZSBzdGFydC9lbmQgdmFsdWVzIG9mIE9USEVSIFNjcm9sbFRyaWdnZXJzIHRoYXQgdXNlIHRoYXQgc2FtZSB0cmlnZ2VyIGZ1cnRoZXIgZG93biB0byBjb21wZW5zYXRlLlxyXG4gICAgICBpZiAocG9zaXRpb24gPCBzdC5zdGFydCkge1xyXG4gICAgICAgIHJldHVybiBwb3NpdGlvbjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdmFyIHJhdGlvID0gaXNOYU4oc3QucmF0aW8pID8gMSA6IHN0LnJhdGlvLFxyXG4gICAgICAgICAgY2hhbmdlID0gc3QuZW5kIC0gc3Quc3RhcnQsXHJcbiAgICAgICAgICBkaXN0YW5jZSA9IHBvc2l0aW9uIC0gc3Quc3RhcnQsXHJcbiAgICAgICAgICBvZmZzZXQgPSBzdC5vZmZzZXQgfHwgMCxcclxuICAgICAgICAgIHBpbnMgPSBzdC5waW5zIHx8IFtdLFxyXG4gICAgICAgICAgcGluT2Zmc2V0ID0gcGlucy5vZmZzZXQgfHwgMCxcclxuICAgICAgICAgIHByb2dyZXNzT2Zmc2V0ID0gc3QuX3N0YXJ0Q2xhbXAgJiYgc3Quc3RhcnQgPD0gMCB8fCBzdC5waW5zICYmIHN0LnBpbnMub2Zmc2V0ID8gMCA6IHN0Ll9lbmRDbGFtcCAmJiBzdC5lbmQgPT09IF9tYXhTY3JvbGwoKSA/IDEgOiAwLjU7XHJcbiAgICAgIHBpbnMuZm9yRWFjaChmdW5jdGlvbiAocCkge1xyXG4gICAgICAgIC8vIHJlbW92ZSBhbnkgcGlubmluZyBzcGFjZS9kaXN0YW5jZVxyXG4gICAgICAgIGNoYW5nZSAtPSBwLmRpc3RhbmNlO1xyXG5cclxuICAgICAgICBpZiAocC5uYXRpdmVTdGFydCA8PSBwb3NpdGlvbikge1xyXG4gICAgICAgICAgZGlzdGFuY2UgLT0gcC5kaXN0YW5jZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHBpbk9mZnNldCkge1xyXG4gICAgICAgIC8vIGVkZ2UgY2FzZSB3aGVuIGEgY2xhbXBlZCBlZmZlY3Qgc3RhcnRzIG1pZC1waW47IHdlJ3ZlIGdvdHRhIGNvbXBlbnNhdGUgZm9yIHRoZSBzbWFsbGVyIGNoYW5nZSBhbW91bnQgKHRoZSB5T2Zmc2V0IGdldHMgc2V0IHRvIHRoZSBzdC5waW5zLm9mZnNldCwgc28gbGV0J3Mgc2F5IGl0IGNsYW1wcyBzdWNoIHRoYXQgdGhlIHBhZ2Ugc3RhcnRzIHdpdGggdGhlIGVsZW1lbnQgcGlubmVkIDEwMHB4IGluLCB3ZSBoYXZlIHRvIHNldCB0aGUgeU9mZnNldCB0byAxMDAgYnV0IHRoZW4gc3VidHJhY3QgMTAwIGZyb20gdGhlIGNoYW5nZSB2YWx1ZSB0byBjb21wZW5zYXRlLCB0aHVzIHdlIG11c3Qgc2NhbGUgdGhlIHBvc2l0aW9ucyBhY2NvcmRpbmdseSBiYXNlZCBvbiB0aGUgcmF0aW9zLiBMaWtlIGlmIGl0IHdvdWxkIG5vcm1hbGx5IGhhdmUgYSBjaGFuZ2Ugb2YgMjAwMCwgYW5kIGEgcGluIHdvdWxkIG5vcm1hbGx5IGhpdCBhdCAxMDAwLCBidXQgd2UncmUgb2Zmc2V0dGluZyBieSAxMDAsIHRoYXQgbWVhbnMgZXZlcnl0aGluZyBtdXN0IHNjYWxlIG5vdyB0aGF0IHdlJ3JlIG9ubHkgbW92aW5nIDE5MDBweCByYXRoZXIgdGhhbiAyMDAwcHguXHJcbiAgICAgICAgZGlzdGFuY2UgKj0gKGNoYW5nZSAtIHBpbk9mZnNldCAvIHJhdGlvKSAvIGNoYW5nZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHBvc2l0aW9uICsgKGRpc3RhbmNlIC0gb2Zmc2V0ICogcHJvZ3Jlc3NPZmZzZXQpIC8gcmF0aW8gLSBkaXN0YW5jZTtcclxuICAgIH0sXHJcbiAgICAgICAgYWRqdXN0RWZmZWN0UmVsYXRlZFRyaWdnZXJzID0gZnVuY3Rpb24gYWRqdXN0RWZmZWN0UmVsYXRlZFRyaWdnZXJzKHN0LCB0cmlnZ2VycywgcGFydGlhbCkge1xyXG4gICAgICAvLyBpZiB3ZSdyZSB1c2luZyB0aGlzIG1ldGhvZCB0byBkbyBvbmx5IGEgcGFydGlhbCBBcnJheSBvZiB0cmlnZ2Vycywgd2Ugc2hvdWxkIE5PVCByZXNldCBvciByZWJ1aWxkIHRoZSBwaW4gZGF0YS4gRm9yIGV4YW1wbGUsIHdlIHRhcCBpbnRvIHRoaXMgZnJvbSB0aGUgb2Zmc2V0KCkgbWV0aG9kLlxyXG4gICAgICBwYXJ0aWFsIHx8IChzdC5waW5zLmxlbmd0aCA9IHN0LnBpbnMub2Zmc2V0ID0gMCk7XHJcbiAgICAgIHZhciBwaW5zID0gc3QucGlucyxcclxuICAgICAgICAgIG1hcmtlcnMgPSBzdC5tYXJrZXJzLFxyXG4gICAgICAgICAgZGlmLFxyXG4gICAgICAgICAgaXNDbGFtcGVkLFxyXG4gICAgICAgICAgc3RhcnQsXHJcbiAgICAgICAgICBlbmQsXHJcbiAgICAgICAgICBuYXRpdmVTdGFydCxcclxuICAgICAgICAgIG5hdGl2ZUVuZCxcclxuICAgICAgICAgIGksXHJcbiAgICAgICAgICB0cmlnO1xyXG5cclxuICAgICAgZm9yIChpID0gMDsgaSA8IHRyaWdnZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdHJpZyA9IHRyaWdnZXJzW2ldO1xyXG5cclxuICAgICAgICBpZiAoc3QudHJpZ2dlciAmJiB0cmlnLnRyaWdnZXIgJiYgc3QgIT09IHRyaWcgJiYgKHRyaWcudHJpZ2dlciA9PT0gc3QudHJpZ2dlciB8fCB0cmlnLnBpbm5lZENvbnRhaW5lciA9PT0gc3QudHJpZ2dlciB8fCBzdC50cmlnZ2VyLmNvbnRhaW5zKHRyaWcudHJpZ2dlcikpKSB7XHJcbiAgICAgICAgICBuYXRpdmVTdGFydCA9IHRyaWcuX3N0YXJ0TmF0aXZlIHx8IHRyaWcuX3N0YXJ0Q2xhbXAgfHwgdHJpZy5zdGFydDtcclxuICAgICAgICAgIG5hdGl2ZUVuZCA9IHRyaWcuX2VuZE5hdGl2ZSB8fCB0cmlnLl9lbmRDbGFtcCB8fCB0cmlnLmVuZDtcclxuICAgICAgICAgIHN0YXJ0ID0gX3RyYW5zZm9ybVBvc2l0aW9uKG5hdGl2ZVN0YXJ0LCBzdCk7IC8vIG5vdGU6IF9zdGFydENsYW1wIGFuZCBfZW5kQ2xhbXAgYXJlIHBvcHVsYXRlZCB3aXRoIHRoZSB1bmNsYW1wZWQgdmFsdWVzLiBGb3IgdGhlIHNha2Ugb2YgZWZmaWNpZW5jeSBzYWtlLCB3ZSB1c2UgdGhlIHByb3BlcnR5IGJvdGggbGlrZSBhIGJvb2xlYW4gdG8gaW5kaWNhdGUgdGhhdCBjbGFtcGluZyBpcyBlbmFibGVkIEFORCB0aGUgYWN0dWFsIG9yaWdpbmFsIHVuY2xhbXBlZCB2YWx1ZSB3aGljaCB3ZSBuZWVkIGluIHNpdHVhdGlvbnMgbGlrZSBpZiB0aGVyZSdzIGEgZGF0YS1zcGVlZD1cIlwiIG9uIGFuIGVsZW1lbnQgdGhhdCBoYXMgc29tZXRoaW5nIGxpa2Ugc3RhcnQ9XCJjbGFtcCh0b3AgYm90dG9tKVwiLiBGb3IgaW4tdmlld3BvcnQgZWxlbWVudHMsIGl0IHdvdWxkIGNsYW1wIHRoZSB2YWx1ZXMgb24gdGhlIFNjcm9sbFRyaWdnZXIgZmlyc3QsIHRoZW4gZmVlZCBpdCBoZXJlIGFuZCB3ZSdkIGFkanVzdCBpdCBvbiB0aGUgY2xhbXBlZCB2YWx1ZSB3aGljaCBjb3VsZCB0aHJvdyB0aGluZ3Mgb2ZmIC0gd2UgbmVlZCB0byBhcHBseSB0aGUgbG9naWMgdG8gdGhlIHVuY2xhbXBlZCB2YWx1ZSBhbmQgVEhFTiByZS1hcHBseSBjbGFtcGluZyBvbiB0aGUgcmVzdWx0LlxyXG5cclxuICAgICAgICAgIGVuZCA9IHRyaWcucGluICYmIG5hdGl2ZUVuZCA+IDAgPyBzdGFydCArIChuYXRpdmVFbmQgLSBuYXRpdmVTdGFydCkgOiBfdHJhbnNmb3JtUG9zaXRpb24obmF0aXZlRW5kLCBzdCk7XHJcbiAgICAgICAgICB0cmlnLnNldFBvc2l0aW9ucyhzdGFydCwgZW5kLCB0cnVlLCAodHJpZy5fc3RhcnRDbGFtcCA/IE1hdGgubWF4KDAsIHN0YXJ0KSA6IHN0YXJ0KSAtIG5hdGl2ZVN0YXJ0KTsgLy8gdGhlIGxhc3QgdmFsdWUgKHBpbk9mZnNldCkgaXMgdG8gYWRqdXN0IHRoZSBwaW5TdGFydCB5IHZhbHVlIGluc2lkZSBTY3JvbGxUcmlnZ2VyIHRvIGFjY29tbW9kYXRlIGZvciB0aGUgeSBvZmZzZXQgdGhhdCBnZXRzIGFwcGxpZWQgYnkgdGhlIHBhcmFsbGF4IGVmZmVjdC5cclxuXHJcbiAgICAgICAgICB0cmlnLm1hcmtlclN0YXJ0ICYmIG1hcmtlcnMucHVzaChnc2FwLnF1aWNrU2V0dGVyKFt0cmlnLm1hcmtlclN0YXJ0LCB0cmlnLm1hcmtlckVuZF0sIFwieVwiLCBcInB4XCIpKTtcclxuXHJcbiAgICAgICAgICBpZiAodHJpZy5waW4gJiYgdHJpZy5lbmQgPiAwICYmICFwYXJ0aWFsKSB7XHJcbiAgICAgICAgICAgIGRpZiA9IHRyaWcuZW5kIC0gdHJpZy5zdGFydDtcclxuICAgICAgICAgICAgaXNDbGFtcGVkID0gc3QuX3N0YXJ0Q2xhbXAgJiYgdHJpZy5zdGFydCA8IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNDbGFtcGVkKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHN0LnN0YXJ0ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gdGhlIHRyaWdnZXIgZWxlbWVudCBvbiB0aGUgZWZmZWN0IG11c3QgaGF2ZSBiZWVuIHBpbm5lZCBCRUZPUkUgaXRzIHN0YXJ0aW5nIHBvc2l0aW9uLCBzbyBpbiB0aGlzIGVkZ2UgY2FzZSB3ZSBtdXN0IGFkanVzdCB0aGUgc3RhcnQgcG9zaXRpb24gdG8gYmUgMCBhbmQgZW5kIHBvc2l0aW9uIHRvIGdldCBwdXNoZWQgZnVydGhlciBieSB0aGUgYW1vdW50IG9mIHRoZSBvdmVybGFwXHJcbiAgICAgICAgICAgICAgICBzdC5zZXRQb3NpdGlvbnMoMCwgc3QuZW5kICsgKHN0Ll9zdGFydE5hdGl2ZSAtIHN0LnN0YXJ0KSwgdHJ1ZSk7IC8vIGFkZCB0aGUgb3ZlcmxhcCBhbW91bnRcclxuXHJcbiAgICAgICAgICAgICAgICBhZGp1c3RFZmZlY3RSZWxhdGVkVHJpZ2dlcnMoc3QsIHRyaWdnZXJzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gc3RhcnQgb3ZlciBmb3IgdGhpcyB0cmlnZ2VyIGVsZW1lbnQhXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBkaWYgKz0gdHJpZy5zdGFydDtcclxuICAgICAgICAgICAgICBwaW5zLm9mZnNldCA9IC10cmlnLnN0YXJ0OyAvLyBlZGdlIGNhc2Ugd2hlbiBhIGNsYW1wZWQgZWZmZWN0IHN0YXJ0cyBtaWQtcGluLCB3ZSd2ZSBnb3R0YSBjb21wZW5zYXRlIGluIHRoZSBvblVwZGF0ZSBhbGdvcml0aG0uXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHBpbnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgc3RhcnQ6IHRyaWcuc3RhcnQsXHJcbiAgICAgICAgICAgICAgbmF0aXZlU3RhcnQ6IG5hdGl2ZVN0YXJ0LFxyXG4gICAgICAgICAgICAgIGVuZDogdHJpZy5lbmQsXHJcbiAgICAgICAgICAgICAgZGlzdGFuY2U6IGRpZixcclxuICAgICAgICAgICAgICB0cmlnOiB0cmlnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBzdC5zZXRQb3NpdGlvbnMoc3Quc3RhcnQsIHN0LmVuZCArIChpc0NsYW1wZWQgPyAtdHJpZy5zdGFydCA6IGRpZiksIHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgICAgICBhZGp1c3RQYXJhbGxheFBvc2l0aW9uID0gZnVuY3Rpb24gYWRqdXN0UGFyYWxsYXhQb3NpdGlvbih0cmlnZ2VycywgY3JlYXRlZEFmdGVyRWZmZWN0V2FzQXBwbGllZCkge1xyXG4gICAgICBlZmZlY3RzLmZvckVhY2goZnVuY3Rpb24gKHN0KSB7XHJcbiAgICAgICAgcmV0dXJuIGFkanVzdEVmZmVjdFJlbGF0ZWRUcmlnZ2VycyhzdCwgdHJpZ2dlcnMsIGNyZWF0ZWRBZnRlckVmZmVjdFdhc0FwcGxpZWQpO1xyXG4gICAgICB9KTtcclxuICAgIH0sXHJcbiAgICAgICAgb25SZWZyZXNoID0gZnVuY3Rpb24gb25SZWZyZXNoKCkge1xyXG4gICAgICByZW1vdmVTY3JvbGwoKTtcclxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlbW92ZVNjcm9sbCk7XHJcblxyXG4gICAgICBpZiAoZWZmZWN0cykge1xyXG4gICAgICAgIC8vIGFkanVzdCBhbGwgdGhlIGVmZmVjdCBzdGFydC9lbmQgcG9zaXRpb25zIGluY2x1ZGluZyBhbnkgcGlucyFcclxuICAgICAgICBTY3JvbGxUcmlnZ2VyLmdldEFsbCgpLmZvckVhY2goZnVuY3Rpb24gKHN0KSB7XHJcbiAgICAgICAgICAvLyByZWNvcmQgdGhlIG5hdGl2ZSBzdGFydC9lbmQgcG9zaXRpb25zIGJlY2F1c2Ugd2UnbGwgYmUgbWVzc2luZyB3aXRoIHRoZW0gYW5kIG5lZWQgYSB3YXkgdG8gaGF2ZSBhIFwic291cmNlIG9mIHRydXRoXCJcclxuICAgICAgICAgIHN0Ll9zdGFydE5hdGl2ZSA9IHN0LnN0YXJ0O1xyXG4gICAgICAgICAgc3QuX2VuZE5hdGl2ZSA9IHN0LmVuZDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBlZmZlY3RzLmZvckVhY2goZnVuY3Rpb24gKHN0KSB7XHJcbiAgICAgICAgICB2YXIgc3RhcnQgPSBzdC5fc3RhcnRDbGFtcCB8fCBzdC5zdGFydCxcclxuICAgICAgICAgICAgICAvLyBpZiBpdCB3YXMgYWxyZWFkeSBjbGFtcGVkLCB3ZSBzaG91bGQgYmFzZSB0aGluZ3Mgb24gdGhlIHVuY2xhbXBlZCB2YWx1ZSBhbmQgdGhlbiBkbyB0aGUgY2xhbXBpbmcgaGVyZS5cclxuICAgICAgICAgIGVuZCA9IHN0LmF1dG9TcGVlZCA/IE1hdGgubWluKF9tYXhTY3JvbGwoKSwgc3QuZW5kKSA6IHN0YXJ0ICsgTWF0aC5hYnMoKHN0LmVuZCAtIHN0YXJ0KSAvIHN0LnJhdGlvKSxcclxuICAgICAgICAgICAgICBvZmZzZXQgPSBlbmQgLSBzdC5lbmQ7IC8vIHdlIHNwbGl0IHRoZSBkaWZmZXJlbmNlIHNvIHRoYXQgaXQgcmVhY2hlcyBpdHMgbmF0dXJhbCBwb3NpdGlvbiBpbiB0aGUgTUlERExFIG9mIHRoZSB2aWV3cG9ydFxyXG5cclxuICAgICAgICAgIHN0YXJ0IC09IG9mZnNldCAvIDI7XHJcbiAgICAgICAgICBlbmQgLT0gb2Zmc2V0IC8gMjtcclxuXHJcbiAgICAgICAgICBpZiAoc3RhcnQgPiBlbmQpIHtcclxuICAgICAgICAgICAgdmFyIHMgPSBzdGFydDtcclxuICAgICAgICAgICAgc3RhcnQgPSBlbmQ7XHJcbiAgICAgICAgICAgIGVuZCA9IHM7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHN0Ll9zdGFydENsYW1wICYmIHN0YXJ0IDwgMCkge1xyXG4gICAgICAgICAgICBlbmQgPSBzdC5yYXRpbyA8IDAgPyBfbWF4U2Nyb2xsKCkgOiBzdC5lbmQgLyBzdC5yYXRpbztcclxuICAgICAgICAgICAgb2Zmc2V0ID0gZW5kIC0gc3QuZW5kO1xyXG4gICAgICAgICAgICBzdGFydCA9IDA7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0LnJhdGlvIDwgMCB8fCBzdC5fZW5kQ2xhbXAgJiYgZW5kID49IF9tYXhTY3JvbGwoKSkge1xyXG4gICAgICAgICAgICBlbmQgPSBfbWF4U2Nyb2xsKCk7XHJcbiAgICAgICAgICAgIHN0YXJ0ID0gc3QucmF0aW8gPCAwID8gMCA6IHN0LnJhdGlvID4gMSA/IDAgOiBlbmQgLSAoZW5kIC0gc3Quc3RhcnQpIC8gc3QucmF0aW87XHJcbiAgICAgICAgICAgIG9mZnNldCA9IChlbmQgLSBzdGFydCkgKiBzdC5yYXRpbyAtIChzdC5lbmQgLSBzdC5zdGFydCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgc3Qub2Zmc2V0ID0gb2Zmc2V0IHx8IDAuMDAwMTsgLy8gd2UgYXNzaWduIGF0IGxlYXN0IGEgdGlueSB2YWx1ZSBiZWNhdXNlIHdlIGNoZWNrIGluIHRoZSBvblVwZGF0ZSBmb3IgLm9mZnNldCBiZWluZyBzZXQgaW4gb3JkZXIgdG8gYXBwbHkgdmFsdWVzLlxyXG5cclxuICAgICAgICAgIHN0LnBpbnMubGVuZ3RoID0gc3QucGlucy5vZmZzZXQgPSAwO1xyXG4gICAgICAgICAgc3Quc2V0UG9zaXRpb25zKHN0YXJ0LCBlbmQsIHRydWUpOyAvLyBub3RlOiBhbm90aGVyIHdheSBvZiBnZXR0aW5nIG9ubHkgdGhlIGFtb3VudCBvZiBvZmZzZXQgdHJhdmVsZWQgZm9yIGEgY2VydGFpbiByYXRpbyBpczogZGlzdGFuY2VCZXR3ZWVuU3RhcnRBbmRFbmQgKiAoMSAvIHJhdGlvIC0gMSlcclxuICAgICAgICB9KTtcclxuICAgICAgICBhZGp1c3RQYXJhbGxheFBvc2l0aW9uKFNjcm9sbFRyaWdnZXIuc29ydCgpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdHJhY2tlci5yZXNldCgpO1xyXG4gICAgfSxcclxuICAgICAgICBhZGRPblJlZnJlc2ggPSBmdW5jdGlvbiBhZGRPblJlZnJlc2goKSB7XHJcbiAgICAgIHJldHVybiBTY3JvbGxUcmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJyZWZyZXNoXCIsIG9uUmVmcmVzaCk7XHJcbiAgICB9LFxyXG4gICAgICAgIHJlc3RvcmVFZmZlY3RzID0gZnVuY3Rpb24gcmVzdG9yZUVmZmVjdHMoKSB7XHJcbiAgICAgIHJldHVybiBlZmZlY3RzICYmIGVmZmVjdHMuZm9yRWFjaChmdW5jdGlvbiAoc3QpIHtcclxuICAgICAgICByZXR1cm4gc3QudmFycy5vblJlZnJlc2goc3QpO1xyXG4gICAgICB9KTtcclxuICAgIH0sXHJcbiAgICAgICAgcmV2ZXJ0RWZmZWN0cyA9IGZ1bmN0aW9uIHJldmVydEVmZmVjdHMoKSB7XHJcbiAgICAgIGVmZmVjdHMgJiYgZWZmZWN0cy5mb3JFYWNoKGZ1bmN0aW9uIChzdCkge1xyXG4gICAgICAgIHJldHVybiBzdC52YXJzLm9uUmVmcmVzaEluaXQoc3QpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHJlc3RvcmVFZmZlY3RzO1xyXG4gICAgfSxcclxuICAgICAgICBlZmZlY3RWYWx1ZUdldHRlciA9IGZ1bmN0aW9uIGVmZmVjdFZhbHVlR2V0dGVyKG5hbWUsIHZhbHVlLCBpbmRleCwgZWwpIHtcclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdiA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gdmFsdWUoaW5kZXgsIGVsKSA6IHZhbHVlO1xyXG4gICAgICAgIHYgfHwgdiA9PT0gMCB8fCAodiA9IGVsLmdldEF0dHJpYnV0ZShcImRhdGEtXCIgKyBlZmZlY3RzUHJlZml4ICsgbmFtZSkgfHwgKG5hbWUgPT09IFwic3BlZWRcIiA/IDEgOiAwKSk7XHJcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKFwiZGF0YS1cIiArIGVmZmVjdHNQcmVmaXggKyBuYW1lLCB2KTtcclxuICAgICAgICB2YXIgY2xhbXAgPSAodiArIFwiXCIpLnN1YnN0cigwLCA2KSA9PT0gXCJjbGFtcChcIjtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgY2xhbXA6IGNsYW1wLFxyXG4gICAgICAgICAgdmFsdWU6IGNsYW1wID8gdi5zdWJzdHIoNiwgdi5sZW5ndGggLSA3KSA6IHZcclxuICAgICAgICB9O1xyXG4gICAgICB9O1xyXG4gICAgfSxcclxuICAgICAgICBjcmVhdGVFZmZlY3QgPSBmdW5jdGlvbiBjcmVhdGVFZmZlY3QoZWwsIHNwZWVkLCBsYWcsIGluZGV4LCBlZmZlY3RzUGFkZGluZykge1xyXG4gICAgICBlZmZlY3RzUGFkZGluZyA9ICh0eXBlb2YgZWZmZWN0c1BhZGRpbmcgPT09IFwiZnVuY3Rpb25cIiA/IGVmZmVjdHNQYWRkaW5nKGluZGV4LCBlbCkgOiBlZmZlY3RzUGFkZGluZykgfHwgMDtcclxuXHJcbiAgICAgIHZhciBnZXRTcGVlZCA9IGVmZmVjdFZhbHVlR2V0dGVyKFwic3BlZWRcIiwgc3BlZWQsIGluZGV4LCBlbCksXHJcbiAgICAgICAgICBnZXRMYWcgPSBlZmZlY3RWYWx1ZUdldHRlcihcImxhZ1wiLCBsYWcsIGluZGV4LCBlbCksXHJcbiAgICAgICAgICBzdGFydFkgPSBnc2FwLmdldFByb3BlcnR5KGVsLCBcInlcIiksXHJcbiAgICAgICAgICBjYWNoZSA9IGVsLl9nc2FwLFxyXG4gICAgICAgICAgcmF0aW8sXHJcbiAgICAgICAgICBzdCxcclxuICAgICAgICAgIGF1dG9TcGVlZCxcclxuICAgICAgICAgIHNjcnViLFxyXG4gICAgICAgICAgcHJvZ3Jlc3NPZmZzZXQsXHJcbiAgICAgICAgICB5T2Zmc2V0LFxyXG4gICAgICAgICAgcGlucyA9IFtdLFxyXG4gICAgICAgICAgaW5pdER5bmFtaWNWYWx1ZXMgPSBmdW5jdGlvbiBpbml0RHluYW1pY1ZhbHVlcygpIHtcclxuICAgICAgICBzcGVlZCA9IGdldFNwZWVkKCk7XHJcbiAgICAgICAgbGFnID0gcGFyc2VGbG9hdChnZXRMYWcoKS52YWx1ZSk7XHJcbiAgICAgICAgcmF0aW8gPSBwYXJzZUZsb2F0KHNwZWVkLnZhbHVlKSB8fCAxO1xyXG4gICAgICAgIGF1dG9TcGVlZCA9IHNwZWVkLnZhbHVlID09PSBcImF1dG9cIjtcclxuICAgICAgICBwcm9ncmVzc09mZnNldCA9IGF1dG9TcGVlZCB8fCBzdCAmJiBzdC5fc3RhcnRDbGFtcCAmJiBzdC5zdGFydCA8PSAwIHx8IHBpbnMub2Zmc2V0ID8gMCA6IHN0ICYmIHN0Ll9lbmRDbGFtcCAmJiBzdC5lbmQgPT09IF9tYXhTY3JvbGwoKSA/IDEgOiAwLjU7XHJcbiAgICAgICAgc2NydWIgJiYgc2NydWIua2lsbCgpO1xyXG4gICAgICAgIHNjcnViID0gbGFnICYmIGdzYXAudG8oZWwsIHtcclxuICAgICAgICAgIGVhc2U6IF9leHBvLFxyXG4gICAgICAgICAgb3ZlcndyaXRlOiBmYWxzZSxcclxuICAgICAgICAgIHk6IFwiKz0wXCIsXHJcbiAgICAgICAgICBkdXJhdGlvbjogbGFnXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChzdCkge1xyXG4gICAgICAgICAgc3QucmF0aW8gPSByYXRpbztcclxuICAgICAgICAgIHN0LmF1dG9TcGVlZCA9IGF1dG9TcGVlZDtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgICAgICByZXZlcnQgPSBmdW5jdGlvbiByZXZlcnQoKSB7XHJcbiAgICAgICAgY2FjaGUueSA9IHN0YXJ0WSArIFwicHhcIjtcclxuICAgICAgICBjYWNoZS5yZW5kZXJUcmFuc2Zvcm0oMSk7XHJcbiAgICAgICAgaW5pdER5bmFtaWNWYWx1ZXMoKTtcclxuICAgICAgfSxcclxuICAgICAgICAgIG1hcmtlcnMgPSBbXSxcclxuICAgICAgICAgIGNoYW5nZSA9IDAsXHJcbiAgICAgICAgICB1cGRhdGVDaGFuZ2UgPSBmdW5jdGlvbiB1cGRhdGVDaGFuZ2Uoc2VsZikge1xyXG4gICAgICAgIGlmIChhdXRvU3BlZWQpIHtcclxuICAgICAgICAgIHJldmVydCgpO1xyXG5cclxuICAgICAgICAgIHZhciBhdXRvID0gX2F1dG9EaXN0YW5jZShlbCwgX2NsYW1wKDAsIDEsIC1zZWxmLnN0YXJ0IC8gKHNlbGYuZW5kIC0gc2VsZi5zdGFydCkpKTtcclxuXHJcbiAgICAgICAgICBjaGFuZ2UgPSBhdXRvLmNoYW5nZTtcclxuICAgICAgICAgIHlPZmZzZXQgPSBhdXRvLm9mZnNldDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeU9mZnNldCA9IHBpbnMub2Zmc2V0IHx8IDA7XHJcbiAgICAgICAgICBjaGFuZ2UgPSAoc2VsZi5lbmQgLSBzZWxmLnN0YXJ0IC0geU9mZnNldCkgKiAoMSAtIHJhdGlvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBpbnMuZm9yRWFjaChmdW5jdGlvbiAocCkge1xyXG4gICAgICAgICAgcmV0dXJuIGNoYW5nZSAtPSBwLmRpc3RhbmNlICogKDEgLSByYXRpbyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2VsZi5vZmZzZXQgPSBjaGFuZ2UgfHwgMC4wMDE7XHJcbiAgICAgICAgc2VsZi52YXJzLm9uVXBkYXRlKHNlbGYpO1xyXG4gICAgICAgIHNjcnViICYmIHNjcnViLnByb2dyZXNzKDEpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgaW5pdER5bmFtaWNWYWx1ZXMoKTtcclxuXHJcbiAgICAgIGlmIChyYXRpbyAhPT0gMSB8fCBhdXRvU3BlZWQgfHwgc2NydWIpIHtcclxuICAgICAgICBzdCA9IFNjcm9sbFRyaWdnZXIuY3JlYXRlKHtcclxuICAgICAgICAgIHRyaWdnZXI6IGF1dG9TcGVlZCA/IGVsLnBhcmVudE5vZGUgOiBlbCxcclxuICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbiBzdGFydCgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNwZWVkLmNsYW1wID8gXCJjbGFtcCh0b3AgYm90dG9tKz1cIiArIGVmZmVjdHNQYWRkaW5nICsgXCIpXCIgOiBcInRvcCBib3R0b20rPVwiICsgZWZmZWN0c1BhZGRpbmc7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZW5kOiBmdW5jdGlvbiBlbmQoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzcGVlZC52YWx1ZSA8IDAgPyBcIm1heFwiIDogc3BlZWQuY2xhbXAgPyBcImNsYW1wKGJvdHRvbSB0b3AtPVwiICsgZWZmZWN0c1BhZGRpbmcgKyBcIilcIiA6IFwiYm90dG9tIHRvcC09XCIgKyBlZmZlY3RzUGFkZGluZztcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzY3JvbGxlcjogd3JhcHBlcixcclxuICAgICAgICAgIHNjcnViOiB0cnVlLFxyXG4gICAgICAgICAgcmVmcmVzaFByaW9yaXR5OiAtOTk5LFxyXG4gICAgICAgICAgLy8gbXVzdCB1cGRhdGUgQUZURVIgYW55IG90aGVyIFNjcm9sbFRyaWdnZXIgcGluc1xyXG4gICAgICAgICAgb25SZWZyZXNoSW5pdDogcmV2ZXJ0LFxyXG4gICAgICAgICAgb25SZWZyZXNoOiB1cGRhdGVDaGFuZ2UsXHJcbiAgICAgICAgICBvbktpbGw6IGZ1bmN0aW9uIG9uS2lsbChzZWxmKSB7XHJcbiAgICAgICAgICAgIHZhciBpID0gZWZmZWN0cy5pbmRleE9mKHNlbGYpO1xyXG4gICAgICAgICAgICBpID49IDAgJiYgZWZmZWN0cy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgIHJldmVydCgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIG9uVXBkYXRlOiBmdW5jdGlvbiBvblVwZGF0ZShzZWxmKSB7XHJcbiAgICAgICAgICAgIHZhciB5ID0gc3RhcnRZICsgY2hhbmdlICogKHNlbGYucHJvZ3Jlc3MgLSBwcm9ncmVzc09mZnNldCksXHJcbiAgICAgICAgICAgICAgICBpID0gcGlucy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICBleHRyYVkgPSAwLFxyXG4gICAgICAgICAgICAgICAgcGluLFxyXG4gICAgICAgICAgICAgICAgc2Nyb2xsWSxcclxuICAgICAgICAgICAgICAgIGVuZDtcclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxmLm9mZnNldCkge1xyXG4gICAgICAgICAgICAgIC8vIHdhaXQgdW50aWwgdGhlIGVmZmVjdHMgYXJlIGFkanVzdGVkLlxyXG4gICAgICAgICAgICAgIGlmIChpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBwaW5uaW5nIG11c3QgYmUgaGFuZGxlZCBpbiBhIHNwZWNpYWwgd2F5IGJlY2F1c2Ugd2hlbiBwaW5uZWQsIHNsb3BlIGNoYW5nZXMgdG8gMS5cclxuICAgICAgICAgICAgICAgIHNjcm9sbFkgPSAtY3VycmVudFk7IC8vIC1zY3JvbGwueTtcclxuXHJcbiAgICAgICAgICAgICAgICBlbmQgPSBzZWxmLmVuZDtcclxuXHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoaS0tKSB7XHJcbiAgICAgICAgICAgICAgICAgIHBpbiA9IHBpbnNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICBpZiAocGluLnRyaWcuaXNBY3RpdmUgfHwgc2Nyb2xsWSA+PSBwaW4uc3RhcnQgJiYgc2Nyb2xsWSA8PSBwaW4uZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudGx5IHBpbm5lZCBzbyBubyBuZWVkIHRvIHNldCBhbnl0aGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzY3J1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcGluLnRyaWcucHJvZ3Jlc3MgKz0gcGluLnRyaWcuZGlyZWN0aW9uIDwgMCA/IDAuMDAxIDogLTAuMDAxOyAvLyBqdXN0IHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgaXQgcmVuZGVycyAoaWYgdGhlIHByb2dyZXNzIGRpZG4ndCBjaGFuZ2UsIGl0J2xsIHNraXApXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgcGluLnRyaWcudXBkYXRlKDAsIDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgc2NydWIucmVzZXRUbyhcInlcIiwgcGFyc2VGbG9hdChjYWNoZS55KSwgLWRlbHRhLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0dXBQaGFzZSAmJiBzY3J1Yi5wcm9ncmVzcygxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgc2Nyb2xsWSA+IHBpbi5lbmQgJiYgKGV4dHJhWSArPSBwaW4uZGlzdGFuY2UpO1xyXG4gICAgICAgICAgICAgICAgICBlbmQgLT0gcGluLmRpc3RhbmNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHkgPSBzdGFydFkgKyBleHRyYVkgKyBjaGFuZ2UgKiAoKGdzYXAudXRpbHMuY2xhbXAoc2VsZi5zdGFydCwgc2VsZi5lbmQsIHNjcm9sbFkpIC0gc2VsZi5zdGFydCAtIGV4dHJhWSkgLyAoZW5kIC0gc2VsZi5zdGFydCkgLSBwcm9ncmVzc09mZnNldCk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBtYXJrZXJzLmxlbmd0aCAmJiAhYXV0b1NwZWVkICYmIG1hcmtlcnMuZm9yRWFjaChmdW5jdGlvbiAoc2V0dGVyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2V0dGVyKHkgLSBleHRyYVkpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHkgPSBfcm91bmQoeSArIHlPZmZzZXQpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoc2NydWIpIHtcclxuICAgICAgICAgICAgICAgIHNjcnViLnJlc2V0VG8oXCJ5XCIsIHksIC1kZWx0YSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBzdGFydHVwUGhhc2UgJiYgc2NydWIucHJvZ3Jlc3MoMSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNhY2hlLnkgPSB5ICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgICAgY2FjaGUucmVuZGVyVHJhbnNmb3JtKDEpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHVwZGF0ZUNoYW5nZShzdCk7XHJcbiAgICAgICAgZ3NhcC5jb3JlLmdldENhY2hlKHN0LnRyaWdnZXIpLnN0UmV2ZXJ0ID0gcmV2ZXJ0RWZmZWN0czsgLy8gaWYgdXNlciBjYWxscyBTY3JvbGxTbW9vdGhlci5jcmVhdGUoKSB3aXRoIGVmZmVjdHMgYW5kIFRIRU4gY3JlYXRlcyBhIFNjcm9sbFRyaWdnZXIgb24gdGhlIHNhbWUgdHJpZ2dlciBlbGVtZW50LCB0aGUgZWZmZWN0IHdvdWxkIHRocm93IG9mZiB0aGUgc3RhcnQvZW5kIHBvc2l0aW9ucyB0aHVzIHdlIG5lZWRlZCBhIHdheSB0byByZXZlcnQgdGhpbmdzIHdoZW4gY3JlYXRpbmcgYSBuZXcgU2Nyb2xsVHJpZ2dlciBpbiB0aGF0IHNjZW5hcmlvLCBzbyB3ZSB1c2UgdGhpcyBzdFJldmVydCBwcm9wZXJ0eSBvZiB0aGUgR1NDYWNoZSBpbnNpZGUgU2Nyb2xsVHJpZ2dlci5cclxuXHJcbiAgICAgICAgc3Quc3RhcnRZID0gc3RhcnRZO1xyXG4gICAgICAgIHN0LnBpbnMgPSBwaW5zO1xyXG4gICAgICAgIHN0Lm1hcmtlcnMgPSBtYXJrZXJzO1xyXG4gICAgICAgIHN0LnJhdGlvID0gcmF0aW87XHJcbiAgICAgICAgc3QuYXV0b1NwZWVkID0gYXV0b1NwZWVkO1xyXG4gICAgICAgIGVsLnN0eWxlLndpbGxDaGFuZ2UgPSBcInRyYW5zZm9ybVwiO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gc3Q7XHJcbiAgICB9O1xyXG5cclxuICAgIGFkZE9uUmVmcmVzaCgpO1xyXG4gICAgU2Nyb2xsVHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKFwia2lsbEFsbFwiLCBhZGRPblJlZnJlc2gpO1xyXG4gICAgZ3NhcC5kZWxheWVkQ2FsbCgwLjUsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIHN0YXJ0dXBQaGFzZSA9IDA7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xyXG5cclxuICAgIHRoaXMuc2Nyb2xsVG8gPSBmdW5jdGlvbiAodGFyZ2V0LCBzbW9vdGgsIHBvc2l0aW9uKSB7XHJcbiAgICAgIHZhciBwID0gZ3NhcC51dGlscy5jbGFtcCgwLCBfbWF4U2Nyb2xsKCksIGlzTmFOKHRhcmdldCkgPyBfdGhpcy5vZmZzZXQodGFyZ2V0LCBwb3NpdGlvbiwgISFzbW9vdGggJiYgIXBhdXNlZCkgOiArdGFyZ2V0KTtcclxuICAgICAgIXNtb290aCA/IHNjcm9sbFRvcChwKSA6IHBhdXNlZCA/IGdzYXAudG8oX3RoaXMsIHtcclxuICAgICAgICBkdXJhdGlvbjogc21vb3RoRHVyYXRpb24sXHJcbiAgICAgICAgc2Nyb2xsVG9wOiBwLFxyXG4gICAgICAgIG92ZXJ3cml0ZTogXCJhdXRvXCIsXHJcbiAgICAgICAgZWFzZTogX2V4cG9cclxuICAgICAgfSkgOiBzY3JvbGxGdW5jKHApO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLm9mZnNldCA9IGZ1bmN0aW9uICh0YXJnZXQsIHBvc2l0aW9uLCBpZ25vcmVTcGVlZCkge1xyXG4gICAgICB0YXJnZXQgPSBfdG9BcnJheSh0YXJnZXQpWzBdO1xyXG4gICAgICB2YXIgY3NzVGV4dCA9IHRhcmdldC5zdHlsZS5jc3NUZXh0LFxyXG4gICAgICAgICAgLy8gYmVjYXVzZSBpZiB0aGVyZSdzIGFuIGVmZmVjdCBhcHBsaWVkLCB3ZSByZXZlcnQoKS4gV2UgbmVlZCB0byByZXN0b3JlLlxyXG4gICAgICBzdCA9IFNjcm9sbFRyaWdnZXIuY3JlYXRlKHtcclxuICAgICAgICB0cmlnZ2VyOiB0YXJnZXQsXHJcbiAgICAgICAgc3RhcnQ6IHBvc2l0aW9uIHx8IFwidG9wIHRvcFwiXHJcbiAgICAgIH0pLFxyXG4gICAgICAgICAgeTtcclxuXHJcbiAgICAgIGlmIChlZmZlY3RzKSB7XHJcbiAgICAgICAgc3RhcnR1cFBoYXNlID8gU2Nyb2xsVHJpZ2dlci5yZWZyZXNoKCkgOiBhZGp1c3RQYXJhbGxheFBvc2l0aW9uKFtzdF0sIHRydWUpOyAvLyBhbGwgdGhlIGVmZmVjdHMgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSBpbml0aWFsIGZ1bGwgcmVmcmVzaCgpIHNvIHRoYXQgYWxsIHRoZSBwaW5zIGFuZCByYXRpb3MgYW5kIG9mZnNldHMgYXJlIHNldCB1cC4gVGhhdCdzIHdoeSB3ZSBkbyBhIGZ1bGwgcmVmcmVzaCgpIGlmIGl0J3MgZHVyaW5nIHRoZSBzdGFydHVwUGhhc2UuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHkgPSBzdC5zdGFydCAvIChpZ25vcmVTcGVlZCA/IHNwZWVkIDogMSk7XHJcbiAgICAgIHN0LmtpbGwoZmFsc2UpO1xyXG4gICAgICB0YXJnZXQuc3R5bGUuY3NzVGV4dCA9IGNzc1RleHQ7XHJcbiAgICAgIGdzYXAuY29yZS5nZXRDYWNoZSh0YXJnZXQpLnVuY2FjaGUgPSAxO1xyXG4gICAgICByZXR1cm4geTtcclxuICAgIH07XHJcblxyXG4gICAgZnVuY3Rpb24gcmVmcmVzaEhlaWdodCgpIHtcclxuICAgICAgaGVpZ2h0ID0gY29udGVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgIGNvbnRlbnQuc3R5bGUub3ZlcmZsb3cgPSBcInZpc2libGVcIjtcclxuICAgICAgX2JvZHkuc3R5bGUuaGVpZ2h0ID0gX3dpbi5pbm5lckhlaWdodCArIChoZWlnaHQgLSBfd2luLmlubmVySGVpZ2h0KSAvIHNwZWVkICsgXCJweFwiO1xyXG4gICAgICByZXR1cm4gaGVpZ2h0IC0gX3dpbi5pbm5lckhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNvbnRlbnQgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHZhciBuZXdDb250ZW50ID0gX3RvQXJyYXkoZWxlbWVudCB8fCBcIiNzbW9vdGgtY29udGVudFwiKVswXSB8fCBjb25zb2xlLndhcm4oXCJTY3JvbGxTbW9vdGhlciBuZWVkcyBhIHZhbGlkIGNvbnRlbnQgZWxlbWVudC5cIikgfHwgX2JvZHkuY2hpbGRyZW5bMF07XHJcblxyXG4gICAgICAgIGlmIChuZXdDb250ZW50ICE9PSBjb250ZW50KSB7XHJcbiAgICAgICAgICBjb250ZW50ID0gbmV3Q29udGVudDtcclxuICAgICAgICAgIGNvbnRlbnRDU1MgPSBjb250ZW50LmdldEF0dHJpYnV0ZShcInN0eWxlXCIpIHx8IFwiXCI7XHJcbiAgICAgICAgICByZXNpemVPYnNlcnZlciAmJiByZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRlbnQpO1xyXG4gICAgICAgICAgZ3NhcC5zZXQoY29udGVudCwge1xyXG4gICAgICAgICAgICBvdmVyZmxvdzogXCJ2aXNpYmxlXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcclxuICAgICAgICAgICAgYm94U2l6aW5nOiBcImJvcmRlci1ib3hcIixcclxuICAgICAgICAgICAgeTogXCIrPTBcIlxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBzbW9vdGhEdXJhdGlvbiB8fCBnc2FwLnNldChjb250ZW50LCB7XHJcbiAgICAgICAgICAgIGNsZWFyUHJvcHM6IFwidHJhbnNmb3JtXCJcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBjb250ZW50O1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLndyYXBwZXIgPSBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIHdyYXBwZXIgPSBfdG9BcnJheShlbGVtZW50IHx8IFwiI3Ntb290aC13cmFwcGVyXCIpWzBdIHx8IF93cmFwKGNvbnRlbnQpO1xyXG4gICAgICAgIHdyYXBwZXJDU1MgPSB3cmFwcGVyLmdldEF0dHJpYnV0ZShcInN0eWxlXCIpIHx8IFwiXCI7XHJcbiAgICAgICAgcmVmcmVzaEhlaWdodCgpO1xyXG4gICAgICAgIGdzYXAuc2V0KHdyYXBwZXIsIHNtb290aER1cmF0aW9uID8ge1xyXG4gICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXHJcbiAgICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiLFxyXG4gICAgICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcclxuICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcclxuICAgICAgICAgIHRvcDogMCxcclxuICAgICAgICAgIGxlZnQ6IDAsXHJcbiAgICAgICAgICByaWdodDogMCxcclxuICAgICAgICAgIGJvdHRvbTogMFxyXG4gICAgICAgIH0gOiB7XHJcbiAgICAgICAgICBvdmVyZmxvdzogXCJ2aXNpYmxlXCIsXHJcbiAgICAgICAgICBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiLFxyXG4gICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxyXG4gICAgICAgICAgaGVpZ2h0OiBcImF1dG9cIixcclxuICAgICAgICAgIHRvcDogXCJhdXRvXCIsXHJcbiAgICAgICAgICBib3R0b206IFwiYXV0b1wiLFxyXG4gICAgICAgICAgbGVmdDogXCJhdXRvXCIsXHJcbiAgICAgICAgICByaWdodDogXCJhdXRvXCJcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHdyYXBwZXI7XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuZWZmZWN0cyA9IGZ1bmN0aW9uICh0YXJnZXRzLCBjb25maWcpIHtcclxuICAgICAgdmFyIF9lZmZlY3RzO1xyXG5cclxuICAgICAgZWZmZWN0cyB8fCAoZWZmZWN0cyA9IFtdKTtcclxuXHJcbiAgICAgIGlmICghdGFyZ2V0cykge1xyXG4gICAgICAgIHJldHVybiBlZmZlY3RzLnNsaWNlKDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0YXJnZXRzID0gX3RvQXJyYXkodGFyZ2V0cyk7XHJcbiAgICAgIHRhcmdldHMuZm9yRWFjaChmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgICAgICAgdmFyIGkgPSBlZmZlY3RzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgICAgZWZmZWN0c1tpXS50cmlnZ2VyID09PSB0YXJnZXQgJiYgZWZmZWN0c1tpXS5raWxsKCk7IC8vIHdpbGwgYXV0b21hdGljYWxseSBzcGxpY2UoKSBpdCBmcm9tIHRoZSBlZmZlY3RzIEFycmF5IGluIHRoZSBvbktpbGxcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25maWcgPSBjb25maWcgfHwge307XHJcbiAgICAgIHZhciBfY29uZmlnID0gY29uZmlnLFxyXG4gICAgICAgICAgc3BlZWQgPSBfY29uZmlnLnNwZWVkLFxyXG4gICAgICAgICAgbGFnID0gX2NvbmZpZy5sYWcsXHJcbiAgICAgICAgICBlZmZlY3RzUGFkZGluZyA9IF9jb25maWcuZWZmZWN0c1BhZGRpbmcsXHJcbiAgICAgICAgICBlZmZlY3RzVG9BZGQgPSBbXSxcclxuICAgICAgICAgIGksXHJcbiAgICAgICAgICBzdDtcclxuXHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0YXJnZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgc3QgPSBjcmVhdGVFZmZlY3QodGFyZ2V0c1tpXSwgc3BlZWQsIGxhZywgaSwgZWZmZWN0c1BhZGRpbmcpO1xyXG4gICAgICAgIHN0ICYmIGVmZmVjdHNUb0FkZC5wdXNoKHN0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgKF9lZmZlY3RzID0gZWZmZWN0cykucHVzaC5hcHBseShfZWZmZWN0cywgZWZmZWN0c1RvQWRkKTtcclxuXHJcbiAgICAgIGNvbmZpZy5yZWZyZXNoICE9PSBmYWxzZSAmJiBTY3JvbGxUcmlnZ2VyLnJlZnJlc2goKTsgLy8gY2VydGFpbiBlZmZlY3RzIHJlcXVpcmUgYSByZWZyZXNoIHRvIHdvcmsgcHJvcGVybHlcclxuXHJcbiAgICAgIHJldHVybiBlZmZlY3RzVG9BZGQ7XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2VjdGlvbnMgPSBmdW5jdGlvbiAodGFyZ2V0cywgY29uZmlnKSB7XHJcbiAgICAgIHZhciBfc2VjdGlvbnM7XHJcblxyXG4gICAgICBzZWN0aW9ucyB8fCAoc2VjdGlvbnMgPSBbXSk7XHJcblxyXG4gICAgICBpZiAoIXRhcmdldHMpIHtcclxuICAgICAgICByZXR1cm4gc2VjdGlvbnMuc2xpY2UoMCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciBuZXdTZWN0aW9ucyA9IF90b0FycmF5KHRhcmdldHMpLm1hcChmdW5jdGlvbiAoZWwpIHtcclxuICAgICAgICByZXR1cm4gU2Nyb2xsVHJpZ2dlci5jcmVhdGUoe1xyXG4gICAgICAgICAgdHJpZ2dlcjogZWwsXHJcbiAgICAgICAgICBzdGFydDogXCJ0b3AgMTIwJVwiLFxyXG4gICAgICAgICAgZW5kOiBcImJvdHRvbSAtMjAlXCIsXHJcbiAgICAgICAgICBvblRvZ2dsZTogZnVuY3Rpb24gb25Ub2dnbGUoc2VsZikge1xyXG4gICAgICAgICAgICBlbC5zdHlsZS5vcGFjaXR5ID0gc2VsZi5pc0FjdGl2ZSA/IFwiMVwiIDogXCIwXCI7XHJcbiAgICAgICAgICAgIGVsLnN0eWxlLnBvaW50ZXJFdmVudHMgPSBzZWxmLmlzQWN0aXZlID8gXCJhbGxcIiA6IFwibm9uZVwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbmZpZyAmJiBjb25maWcuYWRkID8gKF9zZWN0aW9ucyA9IHNlY3Rpb25zKS5wdXNoLmFwcGx5KF9zZWN0aW9ucywgbmV3U2VjdGlvbnMpIDogc2VjdGlvbnMgPSBuZXdTZWN0aW9ucy5zbGljZSgwKTtcclxuICAgICAgcmV0dXJuIG5ld1NlY3Rpb25zO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmNvbnRlbnQodmFycy5jb250ZW50KTtcclxuICAgIHRoaXMud3JhcHBlcih2YXJzLndyYXBwZXIpO1xyXG5cclxuICAgIHRoaXMucmVuZGVyID0gZnVuY3Rpb24gKHkpIHtcclxuICAgICAgcmV0dXJuIHJlbmRlcih5IHx8IHkgPT09IDAgPyB5IDogY3VycmVudFkpO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmdldFZlbG9jaXR5ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gdHJhY2tlci5nZXRWZWxvY2l0eSgtY3VycmVudFkpO1xyXG4gICAgfTtcclxuXHJcbiAgICBTY3JvbGxUcmlnZ2VyLnNjcm9sbGVyUHJveHkod3JhcHBlciwge1xyXG4gICAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcCxcclxuICAgICAgc2Nyb2xsSGVpZ2h0OiBmdW5jdGlvbiBzY3JvbGxIZWlnaHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlZnJlc2hIZWlnaHQoKSAmJiBfYm9keS5zY3JvbGxIZWlnaHQ7XHJcbiAgICAgIH0sXHJcbiAgICAgIGZpeGVkTWFya2VyczogdmFycy5maXhlZE1hcmtlcnMgIT09IGZhbHNlICYmICEhc21vb3RoRHVyYXRpb24sXHJcbiAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXHJcbiAgICAgIGdldEJvdW5kaW5nQ2xpZW50UmVjdDogZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB0b3A6IDAsXHJcbiAgICAgICAgICBsZWZ0OiAwLFxyXG4gICAgICAgICAgd2lkdGg6IF93aW4uaW5uZXJXaWR0aCxcclxuICAgICAgICAgIGhlaWdodDogX3dpbi5pbm5lckhlaWdodFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgU2Nyb2xsVHJpZ2dlci5kZWZhdWx0cyh7XHJcbiAgICAgIHNjcm9sbGVyOiB3cmFwcGVyXHJcbiAgICB9KTtcclxuICAgIHZhciBleGlzdGluZ1Njcm9sbFRyaWdnZXJzID0gU2Nyb2xsVHJpZ2dlci5nZXRBbGwoKS5maWx0ZXIoZnVuY3Rpb24gKHN0KSB7XHJcbiAgICAgIHJldHVybiBzdC5zY3JvbGxlciA9PT0gX3dpbiB8fCBzdC5zY3JvbGxlciA9PT0gd3JhcHBlcjtcclxuICAgIH0pO1xyXG4gICAgZXhpc3RpbmdTY3JvbGxUcmlnZ2Vycy5mb3JFYWNoKGZ1bmN0aW9uIChzdCkge1xyXG4gICAgICByZXR1cm4gc3QucmV2ZXJ0KHRydWUsIHRydWUpO1xyXG4gICAgfSk7IC8vIGluIGNhc2UgaXQncyBpbiBhbiBlbnZpcm9ubWVudCBsaWtlIFJlYWN0IHdoZXJlIGNoaWxkIGNvbXBvbmVudHMgdGhhdCBoYXZlIFNjcm9sbFRyaWdnZXJzIGluc3RhbnRpYXRlIEJFRk9SRSB0aGUgcGFyZW50IHRoYXQgZG9lcyBTY3JvbGxTbW9vdGhlci5jcmVhdGUoLi4uKTtcclxuXHJcbiAgICBtYWluU1QgPSBTY3JvbGxUcmlnZ2VyLmNyZWF0ZSh7XHJcbiAgICAgIGFuaW1hdGlvbjogZ3NhcC5mcm9tVG8oc2Nyb2xsLCB7XHJcbiAgICAgICAgeTogZnVuY3Rpb24geSgpIHtcclxuICAgICAgICAgIGFsbG93VXBkYXRlcyA9IDA7XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIHtcclxuICAgICAgICB5OiBmdW5jdGlvbiB5KCkge1xyXG4gICAgICAgICAgYWxsb3dVcGRhdGVzID0gMTtcclxuICAgICAgICAgIHJldHVybiAtcmVmcmVzaEhlaWdodCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaW1tZWRpYXRlUmVuZGVyOiBmYWxzZSxcclxuICAgICAgICBlYXNlOiBcIm5vbmVcIixcclxuICAgICAgICBkYXRhOiBcIlNjcm9sbFNtb290aGVyXCIsXHJcbiAgICAgICAgZHVyYXRpb246IDEwMCxcclxuICAgICAgICAvLyBmb3IgYWRkZWQgcHJlY2lzaW9uXHJcbiAgICAgICAgb25VcGRhdGU6IGZ1bmN0aW9uIG9uVXBkYXRlKCkge1xyXG4gICAgICAgICAgaWYgKGFsbG93VXBkYXRlcykge1xyXG4gICAgICAgICAgICAvLyBza2lwIHdoZW4gaXQncyB0aGUgXCJmcm9tXCIgcGFydCBvZiB0aGUgdHdlZW4gKHNldHRpbmcgdGhlIHN0YXJ0QXQpXHJcbiAgICAgICAgICAgIHZhciBmb3JjZSA9IGlzUHJveHlTY3JvbGxpbmc7XHJcblxyXG4gICAgICAgICAgICBpZiAoZm9yY2UpIHtcclxuICAgICAgICAgICAgICBraWxsU2NydWIobWFpblNUKTtcclxuICAgICAgICAgICAgICBzY3JvbGwueSA9IGN1cnJlbnRZO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZW5kZXIoc2Nyb2xsLnksIGZvcmNlKTtcclxuICAgICAgICAgICAgdXBkYXRlVmVsb2NpdHkoKTtcclxuICAgICAgICAgICAgX29uVXBkYXRlICYmICFwYXVzZWQgJiYgX29uVXBkYXRlKHNlbGYpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG9uUmVmcmVzaEluaXQ6IGZ1bmN0aW9uIG9uUmVmcmVzaEluaXQoc2VsZikge1xyXG4gICAgICAgIGlmIChTY3JvbGxTbW9vdGhlci5pc1JlZnJlc2hpbmcpIHtcclxuICAgICAgICAgIC8vIGdldHMgY2FsbGVkIG9uIHRoZSBvblJlZnJlc2goKSB3aGVuIHdlIGRvIHNlbGYuc2V0UG9zaXRpb25zKC4uLikgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgc2tpcCB0aGlzXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBTY3JvbGxTbW9vdGhlci5pc1JlZnJlc2hpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoZWZmZWN0cykge1xyXG4gICAgICAgICAgdmFyIF9waW5zID0gU2Nyb2xsVHJpZ2dlci5nZXRBbGwoKS5maWx0ZXIoZnVuY3Rpb24gKHN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhIXN0LnBpbjtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGVmZmVjdHMuZm9yRWFjaChmdW5jdGlvbiAoc3QpIHtcclxuICAgICAgICAgICAgaWYgKCFzdC52YXJzLnBpbm5lZENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICAgIF9waW5zLmZvckVhY2goZnVuY3Rpb24gKHBpblNUKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGluU1QucGluLmNvbnRhaW5zKHN0LnRyaWdnZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZhciB2ID0gc3QudmFycztcclxuICAgICAgICAgICAgICAgICAgdi5waW5uZWRDb250YWluZXIgPSBwaW5TVC5waW47XHJcbiAgICAgICAgICAgICAgICAgIHN0LnZhcnMgPSBudWxsOyAvLyBvdGhlcndpc2UsIGl0J2xsIHNlbGYua2lsbCgpLCB0cmlnZ2VyaW5nIHRoZSBvbktpbGwoKVxyXG5cclxuICAgICAgICAgICAgICAgICAgc3QuaW5pdCh2LCBzdC5hbmltYXRpb24pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBzY3J1YiA9IHNlbGYuZ2V0VHdlZW4oKTtcclxuICAgICAgICByZWNvcmRlZFJlZnJlc2hTY3J1YiA9IHNjcnViICYmIHNjcnViLl9lbmQgPiBzY3J1Yi5fZHAuX3RpbWU7IC8vIGRvbid0IHVzZSBzY3J1Yi5wcm9ncmVzcygpIDwgMSBiZWNhdXNlIHdlIG1heSBoYXZlIGNhbGxlZCBraWxsU2NydWIoKSByZWNlbnRseSBpbiB3aGljaCBjYXNlIGl0J2xsIHJlcG9ydCBwcm9ncmVzcygpIGFzIDEgd2hlbiB3ZSB3ZXJlIGFjdHVhbGx5IGluIHRoZSBtaWRkbGUgb2YgYSBzY3J1Yi4gVGhhdCdzIHdoeSB3ZSB0YXAgaW50byB0aGUgX2VuZCBpbnN0ZWFkLlxyXG5cclxuICAgICAgICByZWNvcmRlZFJlZnJlc2hTY3JvbGwgPSBjdXJyZW50WTtcclxuICAgICAgICBzY3JvbGwueSA9IDA7XHJcblxyXG4gICAgICAgIGlmIChzbW9vdGhEdXJhdGlvbikge1xyXG4gICAgICAgICAgU2Nyb2xsVHJpZ2dlci5pc1RvdWNoID09PSAxICYmICh3cmFwcGVyLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiKTsgLy8gU2FmYXJpIDE2IGhhcyBhIG1ham9yIGJ1ZyAtIGlmIHlvdSBzZXQgd3JhcHBlci5zY3JvbGxUb3AgdG8gMCAoZXZlbiBpZiBpdCdzIGFscmVhZHkgMCksIGl0IGJsb2NrcyB0aGUgd2hvbGUgcGFnZSBmcm9tIHNjcm9sbGluZyBwYWdlIG5vbi1zY3JvbGxhYmxlISBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0NTMwMCBhbmQgaHR0cHM6Ly9jb2RlcGVuLmlvL0dyZWVuU29jay9wZW4vWXpMWlZPei4gT3JpZ2luYWxseSB3ZSBzZXQgcG9pbnRlci1ldmVudHM6IG5vbmUgb24gdGhlIHdyYXBwZXIgdGVtcG9yYXJpbHksIGFuZCBzZXQgaXQgYmFjayB0byBhbGwgYWZ0ZXIgc2V0dGluZyBzY3JvbGxUb3AgdG8gMCwgYnV0IHRoYXQgY291bGQgY2F1c2UgbW91c2VlbnRlci9tb3VzZWxlYXZlL2V0Yy4gZXZlbnRzIHRvIGZpcmUgdG9vLCBzbyB3ZSBvcHRlZCB0byBzZXQgdGhlIHBvc2l0aW9uIHRvIGFic29sdXRlIGFuZCB0aGVuIGJhY2sgdG8gZml4ZWQgYWZ0ZXIgc2V0dGluZyBzY3JvbGxUb3AuXHJcblxyXG4gICAgICAgICAgd3JhcHBlci5zY3JvbGxUb3AgPSAwOyAvLyBzZXQgd3JhcHBlci5zY3JvbGxUb3AgdG8gMCBiZWNhdXNlIGluIHNvbWUgdmVyeSByYXJlIHNpdHVhdGlvbnMsIHRoZSBicm93c2VyIHdpbGwgYXV0by1zZXQgdGhhdCwgbGlrZSBpZiB0aGVyZSdzIGEgaGFzaCBpbiB0aGUgbGluayBvciBjaGFuZ2luZyBmb2N1cyB0byBhbiBvZmYtc2NyZWVuIGlucHV0XHJcblxyXG4gICAgICAgICAgU2Nyb2xsVHJpZ2dlci5pc1RvdWNoID09PSAxICYmICh3cmFwcGVyLnN0eWxlLnBvc2l0aW9uID0gXCJmaXhlZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uUmVmcmVzaDogZnVuY3Rpb24gb25SZWZyZXNoKHNlbGYpIHtcclxuICAgICAgICBzZWxmLmFuaW1hdGlvbi5pbnZhbGlkYXRlKCk7IC8vIGJlY2F1c2UgcGlubmVkQ29udGFpbmVycyBtYXkgaGF2ZSBiZWVuIGZvdW5kIGluIFNjcm9sbFRyaWdnZXIncyBfcmVmcmVzaEFsbCgpIHRoYXQgZXh0ZW5kIHRoZSBoZWlnaHQuIFdpdGhvdXQgdGhpcywgaXQgbWF5IHByZXZlbnQgdGhlIHVzZXIgZnJvbSBiZWluZyBhYmxlIHRvIHNjcm9sbCBhbGwgdGhlIHdheSBkb3duLlxyXG5cclxuICAgICAgICBzZWxmLnNldFBvc2l0aW9ucyhzZWxmLnN0YXJ0LCByZWZyZXNoSGVpZ2h0KCkgLyBzcGVlZCk7XHJcbiAgICAgICAgcmVjb3JkZWRSZWZyZXNoU2NydWIgfHwga2lsbFNjcnViKHNlbGYpO1xyXG4gICAgICAgIHNjcm9sbC55ID0gLXNjcm9sbEZ1bmMoKSAqIHNwZWVkOyAvLyBpbiAzLjExLjEsIHdlIHNoaWZ0ZWQgdG8gZm9yY2luZyB0aGUgc2Nyb2xsIHBvc2l0aW9uIHRvIDAgZHVyaW5nIHRoZSBlbnRpcmUgcmVmcmVzaEFsbCgpIGluIFNjcm9sbFRyaWdnZXIgYW5kIHRoZW4gcmVzdG9yZWQgdGhlIHNjcm9sbCBwb3NpdGlvbiBBRlRFUiBldmVyeXRoaW5nIGhhZCBiZWVuIHVwZGF0ZWQsIHRodXMgd2Ugc2hvdWxkIGFsd2F5cyBtYWtlIHRoZXNlIGFkanVzdG1lbnRzIEFGVEVSIGEgZnVsbCByZWZyZXNoIHJhdGhlciB0aGFuIHB1dHRpbmcgaXQgaW4gdGhlIG9uUmVmcmVzaCgpIG9mIHRoZSBpbmRpdmlkdWFsIG1haW5TVCBTY3JvbGxUcmlnZ2VyIHdoaWNoIHdvdWxkIGZpcmUgYmVmb3JlIHRoZSBzY3JvbGwgcG9zaXRpb24gd2FzIHJlc3RvcmVkLlxyXG5cclxuICAgICAgICByZW5kZXIoc2Nyb2xsLnkpO1xyXG5cclxuICAgICAgICBpZiAoIXN0YXJ0dXBQaGFzZSkge1xyXG4gICAgICAgICAgcmVjb3JkZWRSZWZyZXNoU2NydWIgJiYgKGlzUHJveHlTY3JvbGxpbmcgPSBmYWxzZSk7IC8vIG90aGVyd2lzZSwgd2UgbG9zZSBhbnkgaW4tcHJvZ3Jlc3Mgc2NydWIuIFdoZW4gd2Ugc2V0IHRoZSBwcm9ncmVzcygpLCBpdCBmaXJlcyB0aGUgb25VcGRhdGUoKSB3aGljaCBzZXRzIHRoZSBzY3JvbGwgcG9zaXRpb24gaW1tZWRpYXRlbHkgKGp1bXBzIGFoZWFkIGlmIGlzUHJveHlTY3JvbGxpbmcgaXMgdHJ1ZSkuIFNlZSBodHRwczovL2dzYXAuY29tL2NvbW11bml0eS9mb3J1bXMvdG9waWMvMzc1MTUtZHluYW1pYy1zY3JvbGx0cmlnZ2VyLXdpdGgtcGluLWluc2lkZS1hLXNjcm9sbHNtb290aGVyL1xyXG5cclxuICAgICAgICAgIHNlbGYuYW5pbWF0aW9uLnByb2dyZXNzKGdzYXAudXRpbHMuY2xhbXAoMCwgMSwgcmVjb3JkZWRSZWZyZXNoU2Nyb2xsIC8gc3BlZWQgLyAtc2VsZi5lbmQpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZWNvcmRlZFJlZnJlc2hTY3J1Yikge1xyXG4gICAgICAgICAgLy8gd2UgbmVlZCB0byB0cmlnZ2VyIHRoZSBzY3J1YiB0byBoYXBwZW4gYWdhaW5cclxuICAgICAgICAgIHNlbGYucHJvZ3Jlc3MgLT0gMC4wMDE7XHJcbiAgICAgICAgICBzZWxmLnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgU2Nyb2xsU21vb3RoZXIuaXNSZWZyZXNoaW5nID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGlkOiBcIlNjcm9sbFNtb290aGVyXCIsXHJcbiAgICAgIHNjcm9sbGVyOiBfd2luLFxyXG4gICAgICBpbnZhbGlkYXRlT25SZWZyZXNoOiB0cnVlLFxyXG4gICAgICBzdGFydDogMCxcclxuICAgICAgcmVmcmVzaFByaW9yaXR5OiAtOTk5OSxcclxuICAgICAgLy8gYmVjYXVzZSBhbGwgb3RoZXIgcGlucywgZXRjLiBzaG91bGQgYmUgY2FsY3VsYXRlZCBmaXJzdCBiZWZvcmUgdGhpcyBmaWd1cmVzIG91dCB0aGUgaGVpZ2h0IG9mIHRoZSBib2R5LiBCVVQgdGhpcyBzaG91bGQgYWxzbyB1cGRhdGUgRklSU1Qgc28gdGhhdCB0aGUgc2Nyb2xsIHBvc2l0aW9uIG9uIHRoZSBwcm94eSBpcyB1cC10by1kYXRlIHdoZW4gYWxsIHRoZSBTY3JvbGxUcmlnZ2VycyBjYWxjdWxhdGUgdGhlaXIgcHJvZ3Jlc3MhIC05OTk5IGlzIGEgc3BlY2lhbCBudW1iZXIgdGhhdCBTY3JvbGxUcmlnZ2VyIGxvb2tzIGZvciB0byBoYW5kbGUgaW4gdGhpcyB3YXkuXHJcbiAgICAgIGVuZDogZnVuY3Rpb24gZW5kKCkge1xyXG4gICAgICAgIHJldHVybiByZWZyZXNoSGVpZ2h0KCkgLyBzcGVlZDtcclxuICAgICAgfSxcclxuICAgICAgb25TY3J1YkNvbXBsZXRlOiBmdW5jdGlvbiBvblNjcnViQ29tcGxldGUoKSB7XHJcbiAgICAgICAgdHJhY2tlci5yZXNldCgpO1xyXG4gICAgICAgIG9uU3RvcCAmJiBvblN0b3AoX3RoaXMpO1xyXG4gICAgICB9LFxyXG4gICAgICBzY3J1Yjogc21vb3RoRHVyYXRpb24gfHwgdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zbW9vdGggPSBmdW5jdGlvbiAodmFsdWUpIHtcclxuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICBzbW9vdGhEdXJhdGlvbiA9IHZhbHVlIHx8IDA7XHJcbiAgICAgICAgc3BlZWQgPSBzbW9vdGhEdXJhdGlvbiAmJiArdmFycy5zcGVlZCB8fCAxO1xyXG4gICAgICAgIG1haW5TVC5zY3J1YkR1cmF0aW9uKHZhbHVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG1haW5TVC5nZXRUd2VlbigpID8gbWFpblNULmdldFR3ZWVuKCkuZHVyYXRpb24oKSA6IDA7XHJcbiAgICB9O1xyXG5cclxuICAgIG1haW5TVC5nZXRUd2VlbigpICYmIChtYWluU1QuZ2V0VHdlZW4oKS52YXJzLmVhc2UgPSB2YXJzLmVhc2UgfHwgX2V4cG8pO1xyXG4gICAgdGhpcy5zY3JvbGxUcmlnZ2VyID0gbWFpblNUO1xyXG4gICAgdmFycy5lZmZlY3RzICYmIHRoaXMuZWZmZWN0cyh2YXJzLmVmZmVjdHMgPT09IHRydWUgPyBcIltkYXRhLVwiICsgZWZmZWN0c1ByZWZpeCArIFwic3BlZWRdLCBbZGF0YS1cIiArIGVmZmVjdHNQcmVmaXggKyBcImxhZ11cIiA6IHZhcnMuZWZmZWN0cywge1xyXG4gICAgICBlZmZlY3RzUGFkZGluZzogdmFycy5lZmZlY3RzUGFkZGluZyxcclxuICAgICAgcmVmcmVzaDogZmFsc2VcclxuICAgIH0pO1xyXG4gICAgdmFycy5zZWN0aW9ucyAmJiB0aGlzLnNlY3Rpb25zKHZhcnMuc2VjdGlvbnMgPT09IHRydWUgPyBcIltkYXRhLXNlY3Rpb25dXCIgOiB2YXJzLnNlY3Rpb25zKTtcclxuICAgIGV4aXN0aW5nU2Nyb2xsVHJpZ2dlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3QpIHtcclxuICAgICAgc3QudmFycy5zY3JvbGxlciA9IHdyYXBwZXI7XHJcbiAgICAgIHN0LnJldmVydChmYWxzZSwgdHJ1ZSk7XHJcbiAgICAgIHN0LmluaXQoc3QudmFycywgc3QuYW5pbWF0aW9uKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucGF1c2VkID0gZnVuY3Rpb24gKHZhbHVlLCBhbGxvd05lc3RlZFNjcm9sbCkge1xyXG4gICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIGlmICghIXBhdXNlZCAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAvLyBwYXVzZVxyXG4gICAgICAgICAgICBtYWluU1QuZ2V0VHdlZW4oKSAmJiBtYWluU1QuZ2V0VHdlZW4oKS5wYXVzZSgpO1xyXG4gICAgICAgICAgICBzY3JvbGxGdW5jKC1jdXJyZW50WSAvIHNwZWVkKTtcclxuICAgICAgICAgICAgdHJhY2tlci5yZXNldCgpO1xyXG4gICAgICAgICAgICBwYXVzZWROb3JtYWxpemVyID0gU2Nyb2xsVHJpZ2dlci5ub3JtYWxpemVTY3JvbGwoKTtcclxuICAgICAgICAgICAgcGF1c2VkTm9ybWFsaXplciAmJiBwYXVzZWROb3JtYWxpemVyLmRpc2FibGUoKTsgLy8gb3RoZXJ3aXNlIHRoZSBub3JtYWxpemVyIHdvdWxkIHRyeSB0byBzY3JvbGwgdGhlIHBhZ2Ugb24gdGhpbmdzIGxpa2Ugd2hlZWwgZXZlbnRzLlxyXG5cclxuICAgICAgICAgICAgcGF1c2VkID0gU2Nyb2xsVHJpZ2dlci5vYnNlcnZlKHtcclxuICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdDogdHJ1ZSxcclxuICAgICAgICAgICAgICB0eXBlOiBcIndoZWVsLHRvdWNoLHNjcm9sbFwiLFxyXG4gICAgICAgICAgICAgIGRlYm91bmNlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBhbGxvd0NsaWNrczogdHJ1ZSxcclxuICAgICAgICAgICAgICBvbkNoYW5nZVk6IGZ1bmN0aW9uIG9uQ2hhbmdlWSgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzY3JvbGxUb3AoLWN1cnJlbnRZKTtcclxuICAgICAgICAgICAgICB9IC8vIHJlZnVzZSB0byBzY3JvbGxcclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBwYXVzZWQubmVzdGVkID0gX2lucHV0T2JzZXJ2ZXIoX2RvY0VsLCBcIndoZWVsLHRvdWNoLHNjcm9sbFwiLCB0cnVlLCBhbGxvd05lc3RlZFNjcm9sbCAhPT0gZmFsc2UpOyAvLyBhbGxvdyBuZXN0ZWQgc2Nyb2xsaW5nLCBsaWtlIG1vZGFsc1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gcmVzdW1lXHJcbiAgICAgICAgICAgIHBhdXNlZC5uZXN0ZWQua2lsbCgpO1xyXG4gICAgICAgICAgICBwYXVzZWQua2lsbCgpO1xyXG4gICAgICAgICAgICBwYXVzZWQgPSAwO1xyXG4gICAgICAgICAgICBwYXVzZWROb3JtYWxpemVyICYmIHBhdXNlZE5vcm1hbGl6ZXIuZW5hYmxlKCk7XHJcbiAgICAgICAgICAgIG1haW5TVC5wcm9ncmVzcyA9ICgtY3VycmVudFkgLyBzcGVlZCAtIG1haW5TVC5zdGFydCkgLyAobWFpblNULmVuZCAtIG1haW5TVC5zdGFydCk7XHJcbiAgICAgICAgICAgIGtpbGxTY3J1YihtYWluU1QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAhIXBhdXNlZDtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5raWxsID0gdGhpcy5yZXZlcnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIF90aGlzLnBhdXNlZChmYWxzZSk7XHJcblxyXG4gICAgICBraWxsU2NydWIobWFpblNUKTtcclxuICAgICAgbWFpblNULmtpbGwoKTtcclxuICAgICAgdmFyIHRyaWdnZXJzID0gKGVmZmVjdHMgfHwgW10pLmNvbmNhdChzZWN0aW9ucyB8fCBbXSksXHJcbiAgICAgICAgICBpID0gdHJpZ2dlcnMubGVuZ3RoO1xyXG5cclxuICAgICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBnbyBiYWNrd2FyZHMgYmVjYXVzZSB0aGUgb25LaWxsKCkgd2lsbCBlZmZlY3RzLnNwbGljZShpbmRleCwgMSkgYW5kIHdlIGRvbid0IHdhbnQgdG8gc2tpcFxyXG4gICAgICAgIHRyaWdnZXJzW2ldLmtpbGwoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgU2Nyb2xsVHJpZ2dlci5zY3JvbGxlclByb3h5KHdyYXBwZXIpO1xyXG4gICAgICBTY3JvbGxUcmlnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJraWxsQWxsXCIsIGFkZE9uUmVmcmVzaCk7XHJcbiAgICAgIFNjcm9sbFRyaWdnZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlZnJlc2hcIiwgb25SZWZyZXNoKTtcclxuICAgICAgd3JhcHBlci5zdHlsZS5jc3NUZXh0ID0gd3JhcHBlckNTUztcclxuICAgICAgY29udGVudC5zdHlsZS5jc3NUZXh0ID0gY29udGVudENTUztcclxuICAgICAgdmFyIGRlZmF1bHRzID0gU2Nyb2xsVHJpZ2dlci5kZWZhdWx0cyh7fSk7XHJcbiAgICAgIGRlZmF1bHRzICYmIGRlZmF1bHRzLnNjcm9sbGVyID09PSB3cmFwcGVyICYmIFNjcm9sbFRyaWdnZXIuZGVmYXVsdHMoe1xyXG4gICAgICAgIHNjcm9sbGVyOiBfd2luXHJcbiAgICAgIH0pO1xyXG4gICAgICBfdGhpcy5ub3JtYWxpemVyICYmIFNjcm9sbFRyaWdnZXIubm9ybWFsaXplU2Nyb2xsKGZhbHNlKTtcclxuICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElEKTtcclxuICAgICAgX21haW5JbnN0YW5jZSA9IG51bGw7XHJcbiAgICAgIHJlc2l6ZU9ic2VydmVyICYmIHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuXHJcbiAgICAgIF9ib2R5LnN0eWxlLnJlbW92ZVByb3BlcnR5KFwiaGVpZ2h0XCIpO1xyXG5cclxuICAgICAgX3dpbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNpblwiLCBfb25Gb2N1c0luKTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5yZWZyZXNoID0gZnVuY3Rpb24gKHNvZnQsIGZvcmNlKSB7XHJcbiAgICAgIHJldHVybiBtYWluU1QucmVmcmVzaChzb2Z0LCBmb3JjZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChub3JtYWxpemVTY3JvbGwpIHtcclxuICAgICAgdGhpcy5ub3JtYWxpemVyID0gU2Nyb2xsVHJpZ2dlci5ub3JtYWxpemVTY3JvbGwobm9ybWFsaXplU2Nyb2xsID09PSB0cnVlID8ge1xyXG4gICAgICAgIGRlYm91bmNlOiB0cnVlLFxyXG4gICAgICAgIGNvbnRlbnQ6ICFzbW9vdGhEdXJhdGlvbiAmJiBjb250ZW50XHJcbiAgICAgIH0gOiBub3JtYWxpemVTY3JvbGwpO1xyXG4gICAgfVxyXG5cclxuICAgIFNjcm9sbFRyaWdnZXIuY29uZmlnKHZhcnMpOyAvLyBpbiBjYXNlIHVzZXIgcGFzc2VzIGluIGlnbm9yZU1vYmlsZVJlc2l6ZSBmb3IgZXhhbXBsZVxyXG5cclxuICAgIFwib3ZlcnNjcm9sbEJlaGF2aW9yXCIgaW4gX3dpbi5nZXRDb21wdXRlZFN0eWxlKF9ib2R5KSAmJiBnc2FwLnNldChbX2JvZHksIF9kb2NFbF0sIHtcclxuICAgICAgb3ZlcnNjcm9sbEJlaGF2aW9yOiBcIm5vbmVcIlxyXG4gICAgfSk7XHJcbiAgICBcInNjcm9sbEJlaGF2aW9yXCIgaW4gX3dpbi5nZXRDb21wdXRlZFN0eWxlKF9ib2R5KSAmJiBnc2FwLnNldChbX2JvZHksIF9kb2NFbF0sIHtcclxuICAgICAgc2Nyb2xsQmVoYXZpb3I6IFwiYXV0b1wiXHJcbiAgICB9KTsgLy8gaWYgdGhlIHVzZXIgaGl0cyB0aGUgdGFiIGtleSAob3Igd2hhdGV2ZXIpIHRvIHNoaWZ0IGZvY3VzIHRvIGFuIGVsZW1lbnQgdGhhdCdzIG9mZi1zY3JlZW4sIGNlbnRlciB0aGF0IGVsZW1lbnQuXHJcblxyXG4gICAgX3dpbi5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNpblwiLCBfb25Gb2N1c0luKTtcclxuXHJcbiAgICBpbnRlcnZhbElEID0gc2V0SW50ZXJ2YWwodXBkYXRlVmVsb2NpdHksIDI1MCk7XHJcbiAgICBfZG9jLnJlYWR5U3RhdGUgPT09IFwibG9hZGluZ1wiIHx8IHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiBTY3JvbGxUcmlnZ2VyLnJlZnJlc2goKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgU2Nyb2xsU21vb3RoZXIucmVnaXN0ZXIgPSBmdW5jdGlvbiByZWdpc3Rlcihjb3JlKSB7XHJcbiAgICBpZiAoIV9jb3JlSW5pdHRlZCkge1xyXG4gICAgICBnc2FwID0gY29yZSB8fCBfZ2V0R1NBUCgpO1xyXG5cclxuICAgICAgaWYgKF93aW5kb3dFeGlzdHMoKSAmJiB3aW5kb3cuZG9jdW1lbnQpIHtcclxuICAgICAgICBfd2luID0gd2luZG93O1xyXG4gICAgICAgIF9kb2MgPSBkb2N1bWVudDtcclxuICAgICAgICBfZG9jRWwgPSBfZG9jLmRvY3VtZW50RWxlbWVudDtcclxuICAgICAgICBfYm9keSA9IF9kb2MuYm9keTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGdzYXApIHtcclxuICAgICAgICBfdG9BcnJheSA9IGdzYXAudXRpbHMudG9BcnJheTtcclxuICAgICAgICBfY2xhbXAgPSBnc2FwLnV0aWxzLmNsYW1wO1xyXG4gICAgICAgIF9leHBvID0gZ3NhcC5wYXJzZUVhc2UoXCJleHBvXCIpO1xyXG5cclxuICAgICAgICBfY29udGV4dCA9IGdzYXAuY29yZS5jb250ZXh0IHx8IGZ1bmN0aW9uICgpIHt9O1xyXG5cclxuICAgICAgICBTY3JvbGxUcmlnZ2VyID0gZ3NhcC5jb3JlLmdsb2JhbHMoKS5TY3JvbGxUcmlnZ2VyO1xyXG4gICAgICAgIGdzYXAuY29yZS5nbG9iYWxzKFwiU2Nyb2xsU21vb3RoZXJcIiwgU2Nyb2xsU21vb3RoZXIpOyAvLyBtdXN0IHJlZ2lzdGVyIHRoZSBnbG9iYWwgbWFudWFsbHkgYmVjYXVzZSBpbiBJbnRlcm5ldCBFeHBsb3JlciwgZnVuY3Rpb25zIChjbGFzc2VzKSBkb24ndCBoYXZlIGEgXCJuYW1lXCIgcHJvcGVydHkuXHJcblxyXG4gICAgICAgIGlmIChfYm9keSAmJiBTY3JvbGxUcmlnZ2VyKSB7XHJcbiAgICAgICAgICBfb25SZXNpemVEZWxheWVkQ2FsbCA9IGdzYXAuZGVsYXllZENhbGwoMC4yLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBTY3JvbGxUcmlnZ2VyLmlzUmVmcmVzaGluZyB8fCBfbWFpbkluc3RhbmNlICYmIF9tYWluSW5zdGFuY2UucmVmcmVzaCgpO1xyXG4gICAgICAgICAgfSkucGF1c2UoKTtcclxuICAgICAgICAgIF9yb290ID0gW193aW4sIF9kb2MsIF9kb2NFbCwgX2JvZHldO1xyXG4gICAgICAgICAgX2dldFZlbG9jaXR5UHJvcCA9IFNjcm9sbFRyaWdnZXIuY29yZS5fZ2V0VmVsb2NpdHlQcm9wO1xyXG4gICAgICAgICAgX2lucHV0T2JzZXJ2ZXIgPSBTY3JvbGxUcmlnZ2VyLmNvcmUuX2lucHV0T2JzZXJ2ZXI7XHJcbiAgICAgICAgICBTY3JvbGxTbW9vdGhlci5yZWZyZXNoID0gU2Nyb2xsVHJpZ2dlci5yZWZyZXNoO1xyXG4gICAgICAgICAgX2NvcmVJbml0dGVkID0gMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gX2NvcmVJbml0dGVkO1xyXG4gIH07XHJcblxyXG4gIF9jcmVhdGVDbGFzcyhTY3JvbGxTbW9vdGhlciwgW3tcclxuICAgIGtleTogXCJwcm9ncmVzc1wiLFxyXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNjcm9sbFRyaWdnZXIgPyB0aGlzLnNjcm9sbFRyaWdnZXIuYW5pbWF0aW9uLl90aW1lIC8gMTAwIDogMDtcclxuICAgIH1cclxuICB9XSk7XHJcblxyXG4gIHJldHVybiBTY3JvbGxTbW9vdGhlcjtcclxufSgpO1xyXG5TY3JvbGxTbW9vdGhlci52ZXJzaW9uID0gXCIzLjEyLjVcIjtcclxuXHJcblNjcm9sbFNtb290aGVyLmNyZWF0ZSA9IGZ1bmN0aW9uICh2YXJzKSB7XHJcbiAgcmV0dXJuIF9tYWluSW5zdGFuY2UgJiYgdmFycyAmJiBfbWFpbkluc3RhbmNlLmNvbnRlbnQoKSA9PT0gX3RvQXJyYXkodmFycy5jb250ZW50KVswXSA/IF9tYWluSW5zdGFuY2UgOiBuZXcgU2Nyb2xsU21vb3RoZXIodmFycyk7XHJcbn07XHJcblxyXG5TY3JvbGxTbW9vdGhlci5nZXQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgcmV0dXJuIF9tYWluSW5zdGFuY2U7XHJcbn07XHJcblxyXG5fZ2V0R1NBUCgpICYmIGdzYXAucmVnaXN0ZXJQbHVnaW4oU2Nyb2xsU21vb3RoZXIpO1xyXG5leHBvcnQgeyBTY3JvbGxTbW9vdGhlciBhcyBkZWZhdWx0IH07Il0sIm5hbWVzIjpbIl9kZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJpIiwibGVuZ3RoIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5Iiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwiQ29uc3RydWN0b3IiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJwcm90b3R5cGUiLCJnc2FwIiwiX2NvcmVJbml0dGVkIiwiX3dpbiIsIl9kb2MiLCJfZG9jRWwiLCJfYm9keSIsIl9yb290IiwiX3RvQXJyYXkiLCJfY2xhbXAiLCJTY3JvbGxUcmlnZ2VyIiwiX21haW5JbnN0YW5jZSIsIl9leHBvIiwiX2dldFZlbG9jaXR5UHJvcCIsIl9pbnB1dE9ic2VydmVyIiwiX2NvbnRleHQiLCJfb25SZXNpemVEZWxheWVkQ2FsbCIsIl93aW5kb3dFeGlzdHMiLCJ3aW5kb3ciLCJfZ2V0R1NBUCIsInJlZ2lzdGVyUGx1Z2luIiwiX2JvbnVzVmFsaWRhdGVkIiwiX3JvdW5kIiwidmFsdWUiLCJNYXRoIiwicm91bmQiLCJfbWF4U2Nyb2xsIiwic2Nyb2xsZXIiLCJtYXhTY3JvbGwiLCJfYXV0b0Rpc3RhbmNlIiwiZWwiLCJwcm9ncmVzcyIsInBhcmVudCIsInBhcmVudE5vZGUiLCJiMSIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImIyIiwiZ2FwVG9wIiwidG9wIiwiZ2FwQm90dG9tIiwiYm90dG9tIiwiY2hhbmdlIiwiYWJzIiwib2Zmc2V0IiwicmF0aW8iLCJleHRyYUNoYW5nZSIsImhlaWdodCIsImlubmVySGVpZ2h0IiwibWluIiwiX3dyYXAiLCJ3cmFwcGVyIiwicXVlcnlTZWxlY3RvciIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc0xpc3QiLCJhZGQiLCJpbnNlcnRCZWZvcmUiLCJhcHBlbmRDaGlsZCIsIlNjcm9sbFNtb290aGVyIiwidmFycyIsIl90aGlzIiwicmVnaXN0ZXIiLCJjb25zb2xlIiwid2FybiIsImtpbGwiLCJfdmFycyIsInNtb290aFRvdWNoIiwiX29uVXBkYXRlIiwib25VcGRhdGUiLCJvblN0b3AiLCJzbW9vdGgiLCJvbkZvY3VzSW4iLCJub3JtYWxpemVTY3JvbGwiLCJ3aG9sZVBpeGVscyIsImNvbnRlbnQiLCJtYWluU1QiLCJlZmZlY3RzIiwic2VjdGlvbnMiLCJpbnRlcnZhbElEIiwid3JhcHBlckNTUyIsImNvbnRlbnRDU1MiLCJwYXVzZWQiLCJwYXVzZWROb3JtYWxpemVyIiwicmVjb3JkZWRSZWZyZXNoU2Nyb2xsIiwicmVjb3JkZWRSZWZyZXNoU2NydWIiLCJhbGxvd1VwZGF0ZXMiLCJzZWxmIiwiZWZmZWN0c1ByZWZpeCIsInNjcm9sbEZ1bmMiLCJnZXRTY3JvbGxGdW5jIiwic21vb3RoRHVyYXRpb24iLCJpc1RvdWNoIiwicGFyc2VGbG9hdCIsInNwZWVkIiwiY3VycmVudFkiLCJkZWx0YSIsInN0YXJ0dXBQaGFzZSIsInRyYWNrZXIiLCJ1cGRhdGVWZWxvY2l0eSIsInVwZGF0ZSIsInNjcm9sbCIsInkiLCJyZW1vdmVTY3JvbGwiLCJzdHlsZSIsIm92ZXJmbG93IiwiaXNQcm94eVNjcm9sbGluZyIsImtpbGxTY3J1YiIsInRyaWdnZXIiLCJzY3J1YiIsImdldFR3ZWVuIiwicGF1c2UiLCJfdGltZSIsIl9kdXIiLCJfdFRpbWUiLCJfdER1ciIsImFuaW1hdGlvbiIsInJlbmRlciIsImZvcmNlIiwidHJhbnNmb3JtIiwiX2dzYXAiLCJpc1VwZGF0aW5nIiwiaXNSZWZyZXNoaW5nIiwic2Nyb2xsVG9wIiwiYXJndW1lbnRzIiwicmVzaXplT2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsImF1dG9SZXNpemUiLCJtYXgiLCJyZXN0YXJ0IiwibGFzdEZvY3VzRWxlbWVudCIsIl9vbkZvY3VzSW4iLCJlIiwiY29udGFpbnMiLCJpc0luVmlld3BvcnQiLCJzY3JvbGxUbyIsIl90cmFuc2Zvcm1Qb3NpdGlvbiIsInBvc2l0aW9uIiwic3QiLCJzdGFydCIsImlzTmFOIiwiZW5kIiwiZGlzdGFuY2UiLCJwaW5zIiwicGluT2Zmc2V0IiwicHJvZ3Jlc3NPZmZzZXQiLCJfc3RhcnRDbGFtcCIsIl9lbmRDbGFtcCIsImZvckVhY2giLCJwIiwibmF0aXZlU3RhcnQiLCJhZGp1c3RFZmZlY3RSZWxhdGVkVHJpZ2dlcnMiLCJ0cmlnZ2VycyIsInBhcnRpYWwiLCJtYXJrZXJzIiwiZGlmIiwiaXNDbGFtcGVkIiwibmF0aXZlRW5kIiwidHJpZyIsInBpbm5lZENvbnRhaW5lciIsIl9zdGFydE5hdGl2ZSIsIl9lbmROYXRpdmUiLCJwaW4iLCJzZXRQb3NpdGlvbnMiLCJtYXJrZXJTdGFydCIsInB1c2giLCJxdWlja1NldHRlciIsIm1hcmtlckVuZCIsImFkanVzdFBhcmFsbGF4UG9zaXRpb24iLCJjcmVhdGVkQWZ0ZXJFZmZlY3RXYXNBcHBsaWVkIiwib25SZWZyZXNoIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZ2V0QWxsIiwiYXV0b1NwZWVkIiwicyIsInNvcnQiLCJyZXNldCIsImFkZE9uUmVmcmVzaCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZXN0b3JlRWZmZWN0cyIsInJldmVydEVmZmVjdHMiLCJvblJlZnJlc2hJbml0IiwiZWZmZWN0VmFsdWVHZXR0ZXIiLCJuYW1lIiwiaW5kZXgiLCJ2IiwiZ2V0QXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwiY2xhbXAiLCJzdWJzdHIiLCJjcmVhdGVFZmZlY3QiLCJsYWciLCJlZmZlY3RzUGFkZGluZyIsImdldFNwZWVkIiwiZ2V0TGFnIiwic3RhcnRZIiwiZ2V0UHJvcGVydHkiLCJjYWNoZSIsInlPZmZzZXQiLCJpbml0RHluYW1pY1ZhbHVlcyIsInRvIiwiZWFzZSIsIm92ZXJ3cml0ZSIsImR1cmF0aW9uIiwicmV2ZXJ0IiwicmVuZGVyVHJhbnNmb3JtIiwidXBkYXRlQ2hhbmdlIiwiYXV0byIsImNyZWF0ZSIsInJlZnJlc2hQcmlvcml0eSIsIm9uS2lsbCIsImluZGV4T2YiLCJzcGxpY2UiLCJleHRyYVkiLCJzY3JvbGxZIiwiaXNBY3RpdmUiLCJkaXJlY3Rpb24iLCJyZXNldFRvIiwidXRpbHMiLCJzZXR0ZXIiLCJjb3JlIiwiZ2V0Q2FjaGUiLCJzdFJldmVydCIsIndpbGxDaGFuZ2UiLCJkZWxheWVkQ2FsbCIsImlnbm9yZVNwZWVkIiwiY3NzVGV4dCIsInJlZnJlc2giLCJ1bmNhY2hlIiwicmVmcmVzaEhlaWdodCIsImNsaWVudEhlaWdodCIsImVsZW1lbnQiLCJuZXdDb250ZW50IiwiY2hpbGRyZW4iLCJvYnNlcnZlIiwic2V0Iiwid2lkdGgiLCJib3hTaXppbmciLCJjbGVhclByb3BzIiwibGVmdCIsInJpZ2h0IiwidGFyZ2V0cyIsImNvbmZpZyIsIl9lZmZlY3RzIiwic2xpY2UiLCJfY29uZmlnIiwiZWZmZWN0c1RvQWRkIiwiYXBwbHkiLCJfc2VjdGlvbnMiLCJuZXdTZWN0aW9ucyIsIm1hcCIsIm9uVG9nZ2xlIiwib3BhY2l0eSIsInBvaW50ZXJFdmVudHMiLCJnZXRWZWxvY2l0eSIsInNjcm9sbGVyUHJveHkiLCJzY3JvbGxIZWlnaHQiLCJmaXhlZE1hcmtlcnMiLCJpbm5lcldpZHRoIiwiZGVmYXVsdHMiLCJleGlzdGluZ1Njcm9sbFRyaWdnZXJzIiwiZmlsdGVyIiwiZnJvbVRvIiwiaW1tZWRpYXRlUmVuZGVyIiwiZGF0YSIsIl9waW5zIiwicGluU1QiLCJpbml0IiwiX2VuZCIsIl9kcCIsImludmFsaWRhdGUiLCJpZCIsImludmFsaWRhdGVPblJlZnJlc2giLCJvblNjcnViQ29tcGxldGUiLCJzY3J1YkR1cmF0aW9uIiwic2Nyb2xsVHJpZ2dlciIsImFsbG93TmVzdGVkU2Nyb2xsIiwiZGlzYWJsZSIsInByZXZlbnREZWZhdWx0IiwidHlwZSIsImRlYm91bmNlIiwiYWxsb3dDbGlja3MiLCJvbkNoYW5nZVkiLCJuZXN0ZWQiLCJlbmFibGUiLCJjb25jYXQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibm9ybWFsaXplciIsImNsZWFySW50ZXJ2YWwiLCJkaXNjb25uZWN0IiwicmVtb3ZlUHJvcGVydHkiLCJzb2Z0IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsIm92ZXJzY3JvbGxCZWhhdmlvciIsInNjcm9sbEJlaGF2aW9yIiwic2V0SW50ZXJ2YWwiLCJyZWFkeVN0YXRlIiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJib2R5IiwidG9BcnJheSIsInBhcnNlRWFzZSIsImNvbnRleHQiLCJnbG9iYWxzIiwiZ2V0IiwidmVyc2lvbiIsImRlZmF1bHQiXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./libs/gsap/ScrollSmoother.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./libs/gsap/SplitText.js\":\r\n/*!********************************!*\\\r\n  !*** ./libs/gsap/SplitText.js ***!\r\n  \\********************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"SplitText\\\": () => (/* binding */ SplitText),\\n/* harmony export */   \\\"default\\\": () => (/* binding */ SplitText)\\n/* harmony export */ });\\n/* harmony import */ var _utils_strings_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/strings.js */ \\\"./libs/gsap/utils/strings.js\\\");\\n/*!\\r\\n * SplitText: 3.12.5\\r\\n * https://gsap.com\\r\\n *\\r\\n * @license Copyright 2008-2024, GreenSock. All rights reserved.\\r\\n * Subject to the terms at https://gsap.com/standard-license or for\\r\\n * Club GSAP members, the agreement issued with that membership.\\r\\n * @author: Jack Doyle, jack@greensock.com\\r\\n*/\\n\\n/* eslint-disable */\\n\\nvar _doc,\\n  _win,\\n  _coreInitted,\\n  gsap,\\n  _context,\\n  _toArray,\\n  _stripExp = /(?:\\\\r|\\\\n|\\\\t\\\\t)/g,\\n  //find carriage returns, new line feeds and double-tabs.\\n  _multipleSpacesExp = /(?:\\\\s\\\\s+)/g,\\n  _nonBreakingSpace = String.fromCharCode(160),\\n  _initCore = function _initCore(core) {\\n    _doc = document;\\n    _win = window;\\n    gsap = gsap || core || _win.gsap || console.warn(\\\"Please gsap.registerPlugin(SplitText)\\\");\\n    if (gsap) {\\n      _toArray = gsap.utils.toArray;\\n      _context = gsap.core.context || function () {};\\n      _coreInitted = 1;\\n    }\\n  },\\n  _bonusValidated = 1,\\n  //<name>SplitText</name>\\n  _getComputedStyle = function _getComputedStyle(element) {\\n    return _win.getComputedStyle(element);\\n  },\\n  _isAbsolute = function _isAbsolute(vars) {\\n    return vars.position === \\\"absolute\\\" || vars.absolute === true;\\n  },\\n  //some characters are combining marks (think diacritics/accents in European languages) which involve 2 or 4 characters that combine in the browser to form a single character. Pass in the remaining text and an array of the special characters to search for and if the text starts with one of those special characters, it'll spit back the number of characters to retain (often 2 or 4). Used in the specialChars features that was introduced in 0.6.0.\\n  _findSpecialChars = function _findSpecialChars(text, chars) {\\n    var i = chars.length,\\n      s;\\n    while (--i > -1) {\\n      s = chars[i];\\n      if (text.substr(0, s.length) === s) {\\n        return s.length;\\n      }\\n    }\\n  },\\n  _divStart = \\\" style='position:relative;display:inline-block;'\\\",\\n  _cssClassFunc = function _cssClassFunc(cssClass, tag) {\\n    if (cssClass === void 0) {\\n      cssClass = \\\"\\\";\\n    }\\n    var iterate = ~cssClass.indexOf(\\\"++\\\"),\\n      num = 1;\\n    if (iterate) {\\n      cssClass = cssClass.split(\\\"++\\\").join(\\\"\\\");\\n    }\\n    return function () {\\n      return \\\"<\\\" + tag + _divStart + (cssClass ? \\\" class='\\\" + cssClass + (iterate ? num++ : \\\"\\\") + \\\"'>\\\" : \\\">\\\");\\n    };\\n  },\\n  _swapText = function _swapText(element, oldText, newText) {\\n    var type = element.nodeType;\\n    if (type === 1 || type === 9 || type === 11) {\\n      for (element = element.firstChild; element; element = element.nextSibling) {\\n        _swapText(element, oldText, newText);\\n      }\\n    } else if (type === 3 || type === 4) {\\n      element.nodeValue = element.nodeValue.split(oldText).join(newText);\\n    }\\n  },\\n  _pushReversed = function _pushReversed(a, merge) {\\n    var i = merge.length;\\n    while (--i > -1) {\\n      a.push(merge[i]);\\n    }\\n  },\\n  _isBeforeWordDelimiter = function _isBeforeWordDelimiter(e, root, wordDelimiter) {\\n    var next;\\n    while (e && e !== root) {\\n      next = e._next || e.nextSibling;\\n      if (next) {\\n        return next.textContent.charAt(0) === wordDelimiter;\\n      }\\n      e = e.parentNode || e._parent;\\n    }\\n  },\\n  _deWordify = function _deWordify(e) {\\n    var children = _toArray(e.childNodes),\\n      l = children.length,\\n      i,\\n      child;\\n    for (i = 0; i < l; i++) {\\n      child = children[i];\\n      if (child._isSplit) {\\n        _deWordify(child);\\n      } else {\\n        if (i && child.previousSibling && child.previousSibling.nodeType === 3) {\\n          child.previousSibling.nodeValue += child.nodeType === 3 ? child.nodeValue : child.firstChild.nodeValue;\\n          e.removeChild(child);\\n        } else if (child.nodeType !== 3) {\\n          e.insertBefore(child.firstChild, child);\\n          e.removeChild(child);\\n        }\\n      }\\n    }\\n  },\\n  _getStyleAsNumber = function _getStyleAsNumber(name, computedStyle) {\\n    return parseFloat(computedStyle[name]) || 0;\\n  },\\n  _setPositionsAfterSplit = function _setPositionsAfterSplit(element, vars, allChars, allWords, allLines, origWidth, origHeight) {\\n    var cs = _getComputedStyle(element),\\n      paddingLeft = _getStyleAsNumber(\\\"paddingLeft\\\", cs),\\n      lineOffsetY = -999,\\n      borderTopAndBottom = _getStyleAsNumber(\\\"borderBottomWidth\\\", cs) + _getStyleAsNumber(\\\"borderTopWidth\\\", cs),\\n      borderLeftAndRight = _getStyleAsNumber(\\\"borderLeftWidth\\\", cs) + _getStyleAsNumber(\\\"borderRightWidth\\\", cs),\\n      padTopAndBottom = _getStyleAsNumber(\\\"paddingTop\\\", cs) + _getStyleAsNumber(\\\"paddingBottom\\\", cs),\\n      padLeftAndRight = _getStyleAsNumber(\\\"paddingLeft\\\", cs) + _getStyleAsNumber(\\\"paddingRight\\\", cs),\\n      lineThreshold = _getStyleAsNumber(\\\"fontSize\\\", cs) * (vars.lineThreshold || 0.2),\\n      textAlign = cs.textAlign,\\n      charArray = [],\\n      wordArray = [],\\n      lineArray = [],\\n      wordDelimiter = vars.wordDelimiter || \\\" \\\",\\n      tag = vars.tag ? vars.tag : vars.span ? \\\"span\\\" : \\\"div\\\",\\n      types = vars.type || vars.split || \\\"chars,words,lines\\\",\\n      lines = allLines && ~types.indexOf(\\\"lines\\\") ? [] : null,\\n      words = ~types.indexOf(\\\"words\\\"),\\n      chars = ~types.indexOf(\\\"chars\\\"),\\n      absolute = _isAbsolute(vars),\\n      linesClass = vars.linesClass,\\n      iterateLine = ~(linesClass || \\\"\\\").indexOf(\\\"++\\\"),\\n      spaceNodesToRemove = [],\\n      isFlex = cs.display === \\\"flex\\\",\\n      prevInlineDisplay = element.style.display,\\n      i,\\n      j,\\n      l,\\n      node,\\n      nodes,\\n      isChild,\\n      curLine,\\n      addWordSpaces,\\n      style,\\n      lineNode,\\n      lineWidth,\\n      offset;\\n    iterateLine && (linesClass = linesClass.split(\\\"++\\\").join(\\\"\\\"));\\n    isFlex && (element.style.display = \\\"block\\\"); //copy all the descendant nodes into an array (we can't use a regular nodeList because it's live and we may need to renest things)\\n\\n    j = element.getElementsByTagName(\\\"*\\\");\\n    l = j.length;\\n    nodes = [];\\n    for (i = 0; i < l; i++) {\\n      nodes[i] = j[i];\\n    } //for absolute positioning, we need to record the x/y offsets and width/height for every <div>. And even if we're not positioning things absolutely, in order to accommodate lines, we must figure out where the y offset changes so that we can sense where the lines break, and we populate the lines array.\\n\\n    if (lines || absolute) {\\n      for (i = 0; i < l; i++) {\\n        node = nodes[i];\\n        isChild = node.parentNode === element;\\n        if (isChild || absolute || chars && !words) {\\n          offset = node.offsetTop;\\n          if (lines && isChild && Math.abs(offset - lineOffsetY) > lineThreshold && (node.nodeName !== \\\"BR\\\" || i === 0)) {\\n            //we found some rare occasions where a certain character like &#8209; could cause the offsetTop to be off by 1 pixel, so we build in a threshold.\\n            curLine = [];\\n            lines.push(curLine);\\n            lineOffsetY = offset;\\n          }\\n          if (absolute) {\\n            //record offset x and y, as well as width and height so that we can access them later for positioning. Grabbing them at once ensures we don't trigger a browser paint & we maximize performance.\\n            node._x = node.offsetLeft;\\n            node._y = offset;\\n            node._w = node.offsetWidth;\\n            node._h = node.offsetHeight;\\n          }\\n          if (lines) {\\n            if (node._isSplit && isChild || !chars && isChild || words && isChild || !words && node.parentNode.parentNode === element && !node.parentNode._isSplit) {\\n              curLine.push(node);\\n              node._x -= paddingLeft;\\n              if (_isBeforeWordDelimiter(node, element, wordDelimiter)) {\\n                node._wordEnd = true;\\n              }\\n            }\\n            if (node.nodeName === \\\"BR\\\" && (node.nextSibling && node.nextSibling.nodeName === \\\"BR\\\" || i === 0)) {\\n              //two consecutive <br> tags signify a new [empty] line. Also, if the entire block of content STARTS with a <br>, add a line.\\n              lines.push([]);\\n            }\\n          }\\n        }\\n      }\\n    }\\n    for (i = 0; i < l; i++) {\\n      node = nodes[i];\\n      isChild = node.parentNode === element;\\n      if (node.nodeName === \\\"BR\\\") {\\n        if (lines || absolute) {\\n          node.parentNode && node.parentNode.removeChild(node);\\n          nodes.splice(i--, 1);\\n          l--;\\n        } else if (!words) {\\n          element.appendChild(node);\\n        }\\n        continue;\\n      }\\n      if (absolute) {\\n        style = node.style;\\n        if (!words && !isChild) {\\n          node._x += node.parentNode._x;\\n          node._y += node.parentNode._y;\\n        }\\n        style.left = node._x + \\\"px\\\";\\n        style.top = node._y + \\\"px\\\";\\n        style.position = \\\"absolute\\\";\\n        style.display = \\\"block\\\"; //if we don't set the width/height, things collapse in older versions of IE and the origin for transforms is thrown off in all browsers.\\n\\n        style.width = node._w + 1 + \\\"px\\\"; //IE is 1px short sometimes. Avoid wrapping\\n\\n        style.height = node._h + \\\"px\\\";\\n      }\\n      if (!words && chars) {\\n        //we always start out wrapping words in their own <div> so that line breaks happen correctly, but here we'll remove those <div> tags if necessary and re-nest the characters directly into the element rather than inside the word <div>\\n        if (node._isSplit) {\\n          node._next = j = node.nextSibling;\\n          node.parentNode.appendChild(node); //put it at the end to keep the order correct.\\n\\n          while (j && j.nodeType === 3 && j.textContent === \\\" \\\") {\\n            // if there are nodes that are just a space right afterward, go ahead and append them to the end so they're not out of order.\\n            node._next = j.nextSibling;\\n            node.parentNode.appendChild(j);\\n            j = j.nextSibling;\\n          }\\n        } else if (node.parentNode._isSplit) {\\n          node._parent = node.parentNode;\\n          if (!node.previousSibling && node.firstChild) {\\n            node.firstChild._isFirst = true;\\n          }\\n          if (node.nextSibling && node.nextSibling.textContent === \\\" \\\" && !node.nextSibling.nextSibling) {\\n            //if the last node inside a nested element is just a space (like T<span>nested </span>), remove it otherwise it'll get placed in the wrong order. Don't remove it right away, though, because we need to sense when words/characters are before a space like _isBeforeWordDelimiter(). Removing it now would make that a false negative.\\n            spaceNodesToRemove.push(node.nextSibling);\\n          }\\n          node._next = node.nextSibling && node.nextSibling._isFirst ? null : node.nextSibling;\\n          node.parentNode.removeChild(node);\\n          nodes.splice(i--, 1);\\n          l--;\\n        } else if (!isChild) {\\n          offset = !node.nextSibling && _isBeforeWordDelimiter(node.parentNode, element, wordDelimiter); //if this is the last letter in the word (and we're not breaking by lines and not positioning things absolutely), we need to add a space afterwards so that the characters don't just mash together\\n\\n          node.parentNode._parent && node.parentNode._parent.appendChild(node);\\n          offset && node.parentNode.appendChild(_doc.createTextNode(\\\" \\\"));\\n          if (tag === \\\"span\\\") {\\n            node.style.display = \\\"inline\\\"; //so that word breaks are honored properly.\\n          }\\n\\n          charArray.push(node);\\n        }\\n      } else if (node.parentNode._isSplit && !node._isSplit && node.innerHTML !== \\\"\\\") {\\n        wordArray.push(node);\\n      } else if (chars && !node._isSplit) {\\n        if (tag === \\\"span\\\") {\\n          node.style.display = \\\"inline\\\";\\n        }\\n        charArray.push(node);\\n      }\\n    }\\n    i = spaceNodesToRemove.length;\\n    while (--i > -1) {\\n      spaceNodesToRemove[i].parentNode.removeChild(spaceNodesToRemove[i]);\\n    }\\n    if (lines) {\\n      //the next 7 lines just give us the line width in the most reliable way and figure out the left offset (if position isn't relative or absolute). We must set the width along with text-align to ensure everything works properly for various alignments.\\n      if (absolute) {\\n        lineNode = _doc.createElement(tag);\\n        element.appendChild(lineNode);\\n        lineWidth = lineNode.offsetWidth + \\\"px\\\";\\n        offset = lineNode.offsetParent === element ? 0 : element.offsetLeft;\\n        element.removeChild(lineNode);\\n      }\\n      style = element.style.cssText;\\n      element.style.cssText = \\\"display:none;\\\"; //to improve performance, set display:none on the element so that the browser doesn't have to worry about reflowing or rendering while we're renesting things. We'll revert the cssText later.\\n      //we can't use element.innerHTML = \\\"\\\" because that causes IE to literally delete all the nodes and their content even though we've stored them in an array! So we must loop through the children and remove them.\\n\\n      while (element.firstChild) {\\n        element.removeChild(element.firstChild);\\n      }\\n      addWordSpaces = wordDelimiter === \\\" \\\" && (!absolute || !words && !chars);\\n      for (i = 0; i < lines.length; i++) {\\n        curLine = lines[i];\\n        lineNode = _doc.createElement(tag);\\n        lineNode.style.cssText = \\\"display:block;text-align:\\\" + textAlign + \\\";position:\\\" + (absolute ? \\\"absolute;\\\" : \\\"relative;\\\");\\n        if (linesClass) {\\n          lineNode.className = linesClass + (iterateLine ? i + 1 : \\\"\\\");\\n        }\\n        lineArray.push(lineNode);\\n        l = curLine.length;\\n        for (j = 0; j < l; j++) {\\n          if (curLine[j].nodeName !== \\\"BR\\\") {\\n            node = curLine[j];\\n            lineNode.appendChild(node);\\n            addWordSpaces && node._wordEnd && lineNode.appendChild(_doc.createTextNode(\\\" \\\"));\\n            if (absolute) {\\n              if (j === 0) {\\n                lineNode.style.top = node._y + \\\"px\\\";\\n                lineNode.style.left = paddingLeft + offset + \\\"px\\\";\\n              }\\n              node.style.top = \\\"0px\\\";\\n              if (offset) {\\n                node.style.left = node._x - offset + \\\"px\\\";\\n              }\\n            }\\n          }\\n        }\\n        if (l === 0) {\\n          //if there are no nodes in the line (typically meaning there were two consecutive <br> tags, just add a non-breaking space so that things display properly.\\n          lineNode.innerHTML = \\\"&nbsp;\\\";\\n        } else if (!words && !chars) {\\n          _deWordify(lineNode);\\n          _swapText(lineNode, String.fromCharCode(160), \\\" \\\");\\n        }\\n        if (absolute) {\\n          lineNode.style.width = lineWidth;\\n          lineNode.style.height = node._h + \\\"px\\\";\\n        }\\n        element.appendChild(lineNode);\\n      }\\n      element.style.cssText = style;\\n    } //if everything shifts to being position:absolute, the container can collapse in terms of height or width, so fix that here.\\n\\n    if (absolute) {\\n      if (origHeight > element.clientHeight) {\\n        element.style.height = origHeight - padTopAndBottom + \\\"px\\\";\\n        if (element.clientHeight < origHeight) {\\n          //IE8 and earlier use a different box model - we must include padding and borders\\n          element.style.height = origHeight + borderTopAndBottom + \\\"px\\\";\\n        }\\n      }\\n      if (origWidth > element.clientWidth) {\\n        element.style.width = origWidth - padLeftAndRight + \\\"px\\\";\\n        if (element.clientWidth < origWidth) {\\n          //IE8 and earlier use a different box model - we must include padding and borders\\n          element.style.width = origWidth + borderLeftAndRight + \\\"px\\\";\\n        }\\n      }\\n    }\\n    isFlex && (prevInlineDisplay ? element.style.display = prevInlineDisplay : element.style.removeProperty(\\\"display\\\"));\\n    _pushReversed(allChars, charArray);\\n    words && _pushReversed(allWords, wordArray);\\n    _pushReversed(allLines, lineArray);\\n  },\\n  _splitRawText = function _splitRawText(element, vars, wordStart, charStart) {\\n    var tag = vars.tag ? vars.tag : vars.span ? \\\"span\\\" : \\\"div\\\",\\n      types = vars.type || vars.split || \\\"chars,words,lines\\\",\\n      //words = (types.indexOf(\\\"words\\\") !== -1),\\n      chars = ~types.indexOf(\\\"chars\\\"),\\n      absolute = _isAbsolute(vars),\\n      wordDelimiter = vars.wordDelimiter || \\\" \\\",\\n      isWordDelimiter = function isWordDelimiter(_char) {\\n        return _char === wordDelimiter || _char === _nonBreakingSpace && wordDelimiter === \\\" \\\";\\n      },\\n      space = wordDelimiter !== \\\" \\\" ? \\\"\\\" : absolute ? \\\"&#173; \\\" : \\\" \\\",\\n      wordEnd = \\\"</\\\" + tag + \\\">\\\",\\n      wordIsOpen = 1,\\n      specialChars = vars.specialChars ? typeof vars.specialChars === \\\"function\\\" ? vars.specialChars : _findSpecialChars : null,\\n      //specialChars can be an array or a function. For performance reasons, we always set this local \\\"specialChars\\\" to a function to which we pass the remaining text and whatever the original vars.specialChars was so that if it's an array, it works with the _findSpecialChars() function.\\n      text,\\n      splitText,\\n      i,\\n      j,\\n      l,\\n      character,\\n      hasTagStart,\\n      testResult,\\n      container = _doc.createElement(\\\"div\\\"),\\n      parent = element.parentNode;\\n    parent.insertBefore(container, element);\\n    container.textContent = element.nodeValue;\\n    parent.removeChild(element);\\n    element = container;\\n    text = (0,_utils_strings_js__WEBPACK_IMPORTED_MODULE_0__.getText)(element);\\n    hasTagStart = text.indexOf(\\\"<\\\") !== -1;\\n    if (vars.reduceWhiteSpace !== false) {\\n      text = text.replace(_multipleSpacesExp, \\\" \\\").replace(_stripExp, \\\"\\\");\\n    }\\n    if (hasTagStart) {\\n      text = text.split(\\\"<\\\").join(\\\"{{LT}}\\\"); //we can't leave \\\"<\\\" in the string, or when we set the innerHTML, it can be interpreted as a node\\n    }\\n\\n    l = text.length;\\n    splitText = (text.charAt(0) === \\\" \\\" ? space : \\\"\\\") + wordStart();\\n    for (i = 0; i < l; i++) {\\n      character = text.charAt(i);\\n      if (specialChars && (testResult = specialChars(text.substr(i), vars.specialChars))) {\\n        // look for any specialChars that were declared. Remember, they can be passed in like {specialChars:[\\\"\u092E\u0940\\\", \\\"\u092A\u093E\\\", \\\"\u0939\u0948\\\"]} or a function could be defined instead. Either way, the function should return the number of characters that should be grouped together for this \\\"character\\\".\\n        character = text.substr(i, testResult || 1);\\n        splitText += chars && character !== \\\" \\\" ? charStart() + character + \\\"</\\\" + tag + \\\">\\\" : character;\\n        i += testResult - 1;\\n      } else if (isWordDelimiter(character) && !isWordDelimiter(text.charAt(i - 1)) && i) {\\n        splitText += wordIsOpen ? wordEnd : \\\"\\\";\\n        wordIsOpen = 0;\\n        while (isWordDelimiter(text.charAt(i + 1))) {\\n          //skip over empty spaces (to avoid making them words)\\n          splitText += space;\\n          i++;\\n        }\\n        if (i === l - 1) {\\n          splitText += space;\\n        } else if (text.charAt(i + 1) !== \\\")\\\") {\\n          splitText += space + wordStart();\\n          wordIsOpen = 1;\\n        }\\n      } else if (character === \\\"{\\\" && text.substr(i, 6) === \\\"{{LT}}\\\") {\\n        splitText += chars ? charStart() + \\\"{{LT}}\\\" + \\\"</\\\" + tag + \\\">\\\" : \\\"{{LT}}\\\";\\n        i += 5;\\n      } else if (character.charCodeAt(0) >= 0xD800 && character.charCodeAt(0) <= 0xDBFF || text.charCodeAt(i + 1) >= 0xFE00 && text.charCodeAt(i + 1) <= 0xFE0F) {\\n        //special emoji characters use 2 or 4 unicode characters that we must keep together.\\n        j = ((text.substr(i, 12).split(_utils_strings_js__WEBPACK_IMPORTED_MODULE_0__.emojiExp) || [])[1] || \\\"\\\").length || 2;\\n        splitText += chars && character !== \\\" \\\" ? charStart() + text.substr(i, j) + \\\"</\\\" + tag + \\\">\\\" : text.substr(i, j);\\n        i += j - 1;\\n      } else {\\n        splitText += chars && character !== \\\" \\\" ? charStart() + character + \\\"</\\\" + tag + \\\">\\\" : character;\\n      }\\n    }\\n    element.outerHTML = splitText + (wordIsOpen ? wordEnd : \\\"\\\");\\n    hasTagStart && _swapText(parent, \\\"{{LT}}\\\", \\\"<\\\"); //note: don't perform this on \\\"element\\\" because that gets replaced with all new elements when we set element.outerHTML.\\n  },\\n  _split = function _split(element, vars, wordStart, charStart) {\\n    var children = _toArray(element.childNodes),\\n      l = children.length,\\n      absolute = _isAbsolute(vars),\\n      i,\\n      child;\\n    if (element.nodeType !== 3 || l > 1) {\\n      vars.absolute = false;\\n      for (i = 0; i < l; i++) {\\n        child = children[i];\\n        child._next = child._isFirst = child._parent = child._wordEnd = null;\\n        if (child.nodeType !== 3 || /\\\\S+/.test(child.nodeValue)) {\\n          if (absolute && child.nodeType !== 3 && _getComputedStyle(child).display === \\\"inline\\\") {\\n            //if there's a child node that's display:inline, switch it to inline-block so that absolute positioning works properly (most browsers don't report offsetTop/offsetLeft properly inside a <span> for example)\\n            child.style.display = \\\"inline-block\\\";\\n            child.style.position = \\\"relative\\\";\\n          }\\n          child._isSplit = true;\\n          _split(child, vars, wordStart, charStart); //don't split lines on child elements\\n        }\\n      }\\n\\n      vars.absolute = absolute;\\n      element._isSplit = true;\\n      return;\\n    }\\n    _splitRawText(element, vars, wordStart, charStart);\\n  };\\nvar SplitText = /*#__PURE__*/function () {\\n  function SplitText(element, vars) {\\n    _coreInitted || _initCore();\\n    this.elements = _toArray(element);\\n    this.chars = [];\\n    this.words = [];\\n    this.lines = [];\\n    this._originals = [];\\n    this.vars = vars || {};\\n    _context(this);\\n    _bonusValidated && this.split(vars);\\n  }\\n  var _proto = SplitText.prototype;\\n  _proto.split = function split(vars) {\\n    this.isSplit && this.revert();\\n    this.vars = vars = vars || this.vars;\\n    this._originals.length = this.chars.length = this.words.length = this.lines.length = 0;\\n    var i = this.elements.length,\\n      tag = vars.tag ? vars.tag : vars.span ? \\\"span\\\" : \\\"div\\\",\\n      wordStart = _cssClassFunc(vars.wordsClass, tag),\\n      charStart = _cssClassFunc(vars.charsClass, tag),\\n      origHeight,\\n      origWidth,\\n      e; //we split in reversed order so that if/when we position:absolute elements, they don't affect the position of the ones after them in the document flow (shifting them up as they're taken out of the document flow).\\n\\n    while (--i > -1) {\\n      e = this.elements[i];\\n      this._originals[i] = {\\n        html: e.innerHTML,\\n        style: e.getAttribute(\\\"style\\\")\\n      };\\n      origHeight = e.clientHeight;\\n      origWidth = e.clientWidth;\\n      _split(e, vars, wordStart, charStart);\\n      _setPositionsAfterSplit(e, vars, this.chars, this.words, this.lines, origWidth, origHeight);\\n    }\\n    this.chars.reverse();\\n    this.words.reverse();\\n    this.lines.reverse();\\n    this.isSplit = true;\\n    return this;\\n  };\\n  _proto.revert = function revert() {\\n    var originals = this._originals;\\n    if (!originals) {\\n      throw \\\"revert() call wasn't scoped properly.\\\";\\n    }\\n    this.elements.forEach(function (e, i) {\\n      e.innerHTML = originals[i].html;\\n      e.setAttribute(\\\"style\\\", originals[i].style);\\n    });\\n    this.chars = [];\\n    this.words = [];\\n    this.lines = [];\\n    this.isSplit = false;\\n    return this;\\n  };\\n  SplitText.create = function create(element, vars) {\\n    return new SplitText(element, vars);\\n  };\\n  return SplitText;\\n}();\\nSplitText.version = \\\"3.12.5\\\";\\nSplitText.register = _initCore;\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9saWJzL2dzYXAvU3BsaXRUZXh0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUN1RDtBQUV2RCxJQUFJRSxJQUFJO0VBQ0pDLElBQUk7RUFDSkMsWUFBWTtFQUNaQyxJQUFJO0VBQ0pDLFFBQVE7RUFDUkMsUUFBUTtFQUNSQyxTQUFTLEdBQUcsaUJBQWlCO0VBQzdCO0VBQ0pDLGtCQUFrQixHQUFHLFlBQVk7RUFDN0JDLGlCQUFpQixHQUFHQyxNQUFNLENBQUNDLFlBQVksQ0FBQyxHQUFHLENBQUM7RUFDNUNDLFNBQVMsR0FBRyxTQUFTQSxTQUFTLENBQUNDLElBQUksRUFBRTtJQUN2Q1osSUFBSSxHQUFHYSxRQUFRO0lBQ2ZaLElBQUksR0FBR2EsTUFBTTtJQUNiWCxJQUFJLEdBQUdBLElBQUksSUFBSVMsSUFBSSxJQUFJWCxJQUFJLENBQUNFLElBQUksSUFBSVksT0FBTyxDQUFDQyxJQUFJLENBQUMsdUNBQXVDLENBQUM7SUFFekYsSUFBSWIsSUFBSSxFQUFFO01BQ1JFLFFBQVEsR0FBR0YsSUFBSSxDQUFDYyxLQUFLLENBQUNDLE9BQU87TUFFN0JkLFFBQVEsR0FBR0QsSUFBSSxDQUFDUyxJQUFJLENBQUNPLE9BQU8sSUFBSSxZQUFZLENBQUMsQ0FBQztNQUU5Q2pCLFlBQVksR0FBRyxDQUFDO0lBQ2xCO0VBQ0YsQ0FBQztFQUNHa0IsZUFBZSxHQUFHLENBQUM7RUFDbkI7RUFDSkMsaUJBQWlCLEdBQUcsU0FBU0EsaUJBQWlCLENBQUNDLE9BQU8sRUFBRTtJQUN0RCxPQUFPckIsSUFBSSxDQUFDc0IsZ0JBQWdCLENBQUNELE9BQU8sQ0FBQztFQUN2QyxDQUFDO0VBQ0dFLFdBQVcsR0FBRyxTQUFTQSxXQUFXLENBQUNDLElBQUksRUFBRTtJQUMzQyxPQUFPQSxJQUFJLENBQUNDLFFBQVEsS0FBSyxVQUFVLElBQUlELElBQUksQ0FBQ0UsUUFBUSxLQUFLLElBQUk7RUFDL0QsQ0FBQztFQUNHO0VBQ0pDLGlCQUFpQixHQUFHLFNBQVNBLGlCQUFpQixDQUFDQyxJQUFJLEVBQUVDLEtBQUssRUFBRTtJQUMxRCxJQUFJQyxDQUFDLEdBQUdELEtBQUssQ0FBQ0UsTUFBTTtNQUNoQkMsQ0FBQztJQUVMLE9BQU8sRUFBRUYsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO01BQ2ZFLENBQUMsR0FBR0gsS0FBSyxDQUFDQyxDQUFDLENBQUM7TUFFWixJQUFJRixJQUFJLENBQUNLLE1BQU0sQ0FBQyxDQUFDLEVBQUVELENBQUMsQ0FBQ0QsTUFBTSxDQUFDLEtBQUtDLENBQUMsRUFBRTtRQUNsQyxPQUFPQSxDQUFDLENBQUNELE1BQU07TUFDakI7SUFDRjtFQUNGLENBQUM7RUFDR0csU0FBUyxHQUFHLGtEQUFrRDtFQUM5REMsYUFBYSxHQUFHLFNBQVNBLGFBQWEsQ0FBQ0MsUUFBUSxFQUFFQyxHQUFHLEVBQUU7SUFDeEQsSUFBSUQsUUFBUSxLQUFLLEtBQUssQ0FBQyxFQUFFO01BQ3ZCQSxRQUFRLEdBQUcsRUFBRTtJQUNmO0lBRUEsSUFBSUUsT0FBTyxHQUFHLENBQUNGLFFBQVEsQ0FBQ0csT0FBTyxDQUFDLElBQUksQ0FBQztNQUNqQ0MsR0FBRyxHQUFHLENBQUM7SUFFWCxJQUFJRixPQUFPLEVBQUU7TUFDWEYsUUFBUSxHQUFHQSxRQUFRLENBQUNLLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMxQztJQUVBLE9BQU8sWUFBWTtNQUNqQixPQUFPLEdBQUcsR0FBR0wsR0FBRyxHQUFHSCxTQUFTLElBQUlFLFFBQVEsR0FBRyxVQUFVLEdBQUdBLFFBQVEsSUFBSUUsT0FBTyxHQUFHRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ3pHLENBQUM7RUFDSCxDQUFDO0VBQ0dHLFNBQVMsR0FBRyxTQUFTQSxTQUFTLENBQUN0QixPQUFPLEVBQUV1QixPQUFPLEVBQUVDLE9BQU8sRUFBRTtJQUM1RCxJQUFJQyxJQUFJLEdBQUd6QixPQUFPLENBQUMwQixRQUFRO0lBRTNCLElBQUlELElBQUksS0FBSyxDQUFDLElBQUlBLElBQUksS0FBSyxDQUFDLElBQUlBLElBQUksS0FBSyxFQUFFLEVBQUU7TUFDM0MsS0FBS3pCLE9BQU8sR0FBR0EsT0FBTyxDQUFDMkIsVUFBVSxFQUFFM0IsT0FBTyxFQUFFQSxPQUFPLEdBQUdBLE9BQU8sQ0FBQzRCLFdBQVcsRUFBRTtRQUN6RU4sU0FBUyxDQUFDdEIsT0FBTyxFQUFFdUIsT0FBTyxFQUFFQyxPQUFPLENBQUM7TUFDdEM7SUFDRixDQUFDLE1BQU0sSUFBSUMsSUFBSSxLQUFLLENBQUMsSUFBSUEsSUFBSSxLQUFLLENBQUMsRUFBRTtNQUNuQ3pCLE9BQU8sQ0FBQzZCLFNBQVMsR0FBRzdCLE9BQU8sQ0FBQzZCLFNBQVMsQ0FBQ1QsS0FBSyxDQUFDRyxPQUFPLENBQUMsQ0FBQ0YsSUFBSSxDQUFDRyxPQUFPLENBQUM7SUFDcEU7RUFDRixDQUFDO0VBQ0dNLGFBQWEsR0FBRyxTQUFTQSxhQUFhLENBQUNDLENBQUMsRUFBRUMsS0FBSyxFQUFFO0lBQ25ELElBQUl2QixDQUFDLEdBQUd1QixLQUFLLENBQUN0QixNQUFNO0lBRXBCLE9BQU8sRUFBRUQsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO01BQ2ZzQixDQUFDLENBQUNFLElBQUksQ0FBQ0QsS0FBSyxDQUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDbEI7RUFDRixDQUFDO0VBQ0d5QixzQkFBc0IsR0FBRyxTQUFTQSxzQkFBc0IsQ0FBQ0MsQ0FBQyxFQUFFQyxJQUFJLEVBQUVDLGFBQWEsRUFBRTtJQUNuRixJQUFJQyxJQUFJO0lBRVIsT0FBT0gsQ0FBQyxJQUFJQSxDQUFDLEtBQUtDLElBQUksRUFBRTtNQUN0QkUsSUFBSSxHQUFHSCxDQUFDLENBQUNJLEtBQUssSUFBSUosQ0FBQyxDQUFDUCxXQUFXO01BRS9CLElBQUlVLElBQUksRUFBRTtRQUNSLE9BQU9BLElBQUksQ0FBQ0UsV0FBVyxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUtKLGFBQWE7TUFDckQ7TUFFQUYsQ0FBQyxHQUFHQSxDQUFDLENBQUNPLFVBQVUsSUFBSVAsQ0FBQyxDQUFDUSxPQUFPO0lBQy9CO0VBQ0YsQ0FBQztFQUNHQyxVQUFVLEdBQUcsU0FBU0EsVUFBVSxDQUFDVCxDQUFDLEVBQUU7SUFDdEMsSUFBSVUsUUFBUSxHQUFHOUQsUUFBUSxDQUFDb0QsQ0FBQyxDQUFDVyxVQUFVLENBQUM7TUFDakNDLENBQUMsR0FBR0YsUUFBUSxDQUFDbkMsTUFBTTtNQUNuQkQsQ0FBQztNQUNEdUMsS0FBSztJQUVULEtBQUt2QyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdzQyxDQUFDLEVBQUV0QyxDQUFDLEVBQUUsRUFBRTtNQUN0QnVDLEtBQUssR0FBR0gsUUFBUSxDQUFDcEMsQ0FBQyxDQUFDO01BRW5CLElBQUl1QyxLQUFLLENBQUNDLFFBQVEsRUFBRTtRQUNsQkwsVUFBVSxDQUFDSSxLQUFLLENBQUM7TUFDbkIsQ0FBQyxNQUFNO1FBQ0wsSUFBSXZDLENBQUMsSUFBSXVDLEtBQUssQ0FBQ0UsZUFBZSxJQUFJRixLQUFLLENBQUNFLGVBQWUsQ0FBQ3hCLFFBQVEsS0FBSyxDQUFDLEVBQUU7VUFDdEVzQixLQUFLLENBQUNFLGVBQWUsQ0FBQ3JCLFNBQVMsSUFBSW1CLEtBQUssQ0FBQ3RCLFFBQVEsS0FBSyxDQUFDLEdBQUdzQixLQUFLLENBQUNuQixTQUFTLEdBQUdtQixLQUFLLENBQUNyQixVQUFVLENBQUNFLFNBQVM7VUFDdEdNLENBQUMsQ0FBQ2dCLFdBQVcsQ0FBQ0gsS0FBSyxDQUFDO1FBQ3RCLENBQUMsTUFBTSxJQUFJQSxLQUFLLENBQUN0QixRQUFRLEtBQUssQ0FBQyxFQUFFO1VBQy9CUyxDQUFDLENBQUNpQixZQUFZLENBQUNKLEtBQUssQ0FBQ3JCLFVBQVUsRUFBRXFCLEtBQUssQ0FBQztVQUN2Q2IsQ0FBQyxDQUFDZ0IsV0FBVyxDQUFDSCxLQUFLLENBQUM7UUFDdEI7TUFDRjtJQUNGO0VBQ0YsQ0FBQztFQUNHSyxpQkFBaUIsR0FBRyxTQUFTQSxpQkFBaUIsQ0FBQ0MsSUFBSSxFQUFFQyxhQUFhLEVBQUU7SUFDdEUsT0FBT0MsVUFBVSxDQUFDRCxhQUFhLENBQUNELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztFQUM3QyxDQUFDO0VBQ0dHLHVCQUF1QixHQUFHLFNBQVNBLHVCQUF1QixDQUFDekQsT0FBTyxFQUFFRyxJQUFJLEVBQUV1RCxRQUFRLEVBQUVDLFFBQVEsRUFBRUMsUUFBUSxFQUFFQyxTQUFTLEVBQUVDLFVBQVUsRUFBRTtJQUNqSSxJQUFJQyxFQUFFLEdBQUdoRSxpQkFBaUIsQ0FBQ0MsT0FBTyxDQUFDO01BQy9CZ0UsV0FBVyxHQUFHWCxpQkFBaUIsQ0FBQyxhQUFhLEVBQUVVLEVBQUUsQ0FBQztNQUNsREUsV0FBVyxHQUFHLENBQUMsR0FBRztNQUNsQkMsa0JBQWtCLEdBQUdiLGlCQUFpQixDQUFDLG1CQUFtQixFQUFFVSxFQUFFLENBQUMsR0FBR1YsaUJBQWlCLENBQUMsZ0JBQWdCLEVBQUVVLEVBQUUsQ0FBQztNQUN6R0ksa0JBQWtCLEdBQUdkLGlCQUFpQixDQUFDLGlCQUFpQixFQUFFVSxFQUFFLENBQUMsR0FBR1YsaUJBQWlCLENBQUMsa0JBQWtCLEVBQUVVLEVBQUUsQ0FBQztNQUN6R0ssZUFBZSxHQUFHZixpQkFBaUIsQ0FBQyxZQUFZLEVBQUVVLEVBQUUsQ0FBQyxHQUFHVixpQkFBaUIsQ0FBQyxlQUFlLEVBQUVVLEVBQUUsQ0FBQztNQUM5Rk0sZUFBZSxHQUFHaEIsaUJBQWlCLENBQUMsYUFBYSxFQUFFVSxFQUFFLENBQUMsR0FBR1YsaUJBQWlCLENBQUMsY0FBYyxFQUFFVSxFQUFFLENBQUM7TUFDOUZPLGFBQWEsR0FBR2pCLGlCQUFpQixDQUFDLFVBQVUsRUFBRVUsRUFBRSxDQUFDLElBQUk1RCxJQUFJLENBQUNtRSxhQUFhLElBQUksR0FBRyxDQUFDO01BQy9FQyxTQUFTLEdBQUdSLEVBQUUsQ0FBQ1EsU0FBUztNQUN4QkMsU0FBUyxHQUFHLEVBQUU7TUFDZEMsU0FBUyxHQUFHLEVBQUU7TUFDZEMsU0FBUyxHQUFHLEVBQUU7TUFDZHJDLGFBQWEsR0FBR2xDLElBQUksQ0FBQ2tDLGFBQWEsSUFBSSxHQUFHO01BQ3pDckIsR0FBRyxHQUFHYixJQUFJLENBQUNhLEdBQUcsR0FBR2IsSUFBSSxDQUFDYSxHQUFHLEdBQUdiLElBQUksQ0FBQ3dFLElBQUksR0FBRyxNQUFNLEdBQUcsS0FBSztNQUN0REMsS0FBSyxHQUFHekUsSUFBSSxDQUFDc0IsSUFBSSxJQUFJdEIsSUFBSSxDQUFDaUIsS0FBSyxJQUFJLG1CQUFtQjtNQUN0RHlELEtBQUssR0FBR2pCLFFBQVEsSUFBSSxDQUFDZ0IsS0FBSyxDQUFDMUQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJO01BQ3ZENEQsS0FBSyxHQUFHLENBQUNGLEtBQUssQ0FBQzFELE9BQU8sQ0FBQyxPQUFPLENBQUM7TUFDL0JWLEtBQUssR0FBRyxDQUFDb0UsS0FBSyxDQUFDMUQsT0FBTyxDQUFDLE9BQU8sQ0FBQztNQUMvQmIsUUFBUSxHQUFHSCxXQUFXLENBQUNDLElBQUksQ0FBQztNQUM1QjRFLFVBQVUsR0FBRzVFLElBQUksQ0FBQzRFLFVBQVU7TUFDNUJDLFdBQVcsR0FBRyxDQUFDLENBQUNELFVBQVUsSUFBSSxFQUFFLEVBQUU3RCxPQUFPLENBQUMsSUFBSSxDQUFDO01BQy9DK0Qsa0JBQWtCLEdBQUcsRUFBRTtNQUN2QkMsTUFBTSxHQUFHbkIsRUFBRSxDQUFDb0IsT0FBTyxLQUFLLE1BQU07TUFDOUJDLGlCQUFpQixHQUFHcEYsT0FBTyxDQUFDcUYsS0FBSyxDQUFDRixPQUFPO01BQ3pDMUUsQ0FBQztNQUNENkUsQ0FBQztNQUNEdkMsQ0FBQztNQUNEd0MsSUFBSTtNQUNKQyxLQUFLO01BQ0xDLE9BQU87TUFDUEMsT0FBTztNQUNQQyxhQUFhO01BQ2JOLEtBQUs7TUFDTE8sUUFBUTtNQUNSQyxTQUFTO01BQ1RDLE1BQU07SUFFVmQsV0FBVyxLQUFLRCxVQUFVLEdBQUdBLFVBQVUsQ0FBQzNELEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdENkQsTUFBTSxLQUFLbEYsT0FBTyxDQUFDcUYsS0FBSyxDQUFDRixPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQzs7SUFFN0NHLENBQUMsR0FBR3RGLE9BQU8sQ0FBQytGLG9CQUFvQixDQUFDLEdBQUcsQ0FBQztJQUNyQ2hELENBQUMsR0FBR3VDLENBQUMsQ0FBQzVFLE1BQU07SUFDWjhFLEtBQUssR0FBRyxFQUFFO0lBRVYsS0FBSy9FLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3NDLENBQUMsRUFBRXRDLENBQUMsRUFBRSxFQUFFO01BQ3RCK0UsS0FBSyxDQUFDL0UsQ0FBQyxDQUFDLEdBQUc2RSxDQUFDLENBQUM3RSxDQUFDLENBQUM7SUFDakIsQ0FBQyxDQUFDOztJQUdGLElBQUlvRSxLQUFLLElBQUl4RSxRQUFRLEVBQUU7TUFDckIsS0FBS0ksQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHc0MsQ0FBQyxFQUFFdEMsQ0FBQyxFQUFFLEVBQUU7UUFDdEI4RSxJQUFJLEdBQUdDLEtBQUssQ0FBQy9FLENBQUMsQ0FBQztRQUNmZ0YsT0FBTyxHQUFHRixJQUFJLENBQUM3QyxVQUFVLEtBQUsxQyxPQUFPO1FBRXJDLElBQUl5RixPQUFPLElBQUlwRixRQUFRLElBQUlHLEtBQUssSUFBSSxDQUFDc0UsS0FBSyxFQUFFO1VBQzFDZ0IsTUFBTSxHQUFHUCxJQUFJLENBQUNTLFNBQVM7VUFFdkIsSUFBSW5CLEtBQUssSUFBSVksT0FBTyxJQUFJUSxJQUFJLENBQUNDLEdBQUcsQ0FBQ0osTUFBTSxHQUFHN0IsV0FBVyxDQUFDLEdBQUdLLGFBQWEsS0FBS2lCLElBQUksQ0FBQ1ksUUFBUSxLQUFLLElBQUksSUFBSTFGLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUM3RztZQUNBaUYsT0FBTyxHQUFHLEVBQUU7WUFDWmIsS0FBSyxDQUFDNUMsSUFBSSxDQUFDeUQsT0FBTyxDQUFDO1lBQ25CekIsV0FBVyxHQUFHNkIsTUFBTTtVQUN0QjtVQUVBLElBQUl6RixRQUFRLEVBQUU7WUFDWjtZQUNBa0YsSUFBSSxDQUFDYSxFQUFFLEdBQUdiLElBQUksQ0FBQ2MsVUFBVTtZQUN6QmQsSUFBSSxDQUFDZSxFQUFFLEdBQUdSLE1BQU07WUFDaEJQLElBQUksQ0FBQ2dCLEVBQUUsR0FBR2hCLElBQUksQ0FBQ2lCLFdBQVc7WUFDMUJqQixJQUFJLENBQUNrQixFQUFFLEdBQUdsQixJQUFJLENBQUNtQixZQUFZO1VBQzdCO1VBRUEsSUFBSTdCLEtBQUssRUFBRTtZQUNULElBQUlVLElBQUksQ0FBQ3RDLFFBQVEsSUFBSXdDLE9BQU8sSUFBSSxDQUFDakYsS0FBSyxJQUFJaUYsT0FBTyxJQUFJWCxLQUFLLElBQUlXLE9BQU8sSUFBSSxDQUFDWCxLQUFLLElBQUlTLElBQUksQ0FBQzdDLFVBQVUsQ0FBQ0EsVUFBVSxLQUFLMUMsT0FBTyxJQUFJLENBQUN1RixJQUFJLENBQUM3QyxVQUFVLENBQUNPLFFBQVEsRUFBRTtjQUN0SnlDLE9BQU8sQ0FBQ3pELElBQUksQ0FBQ3NELElBQUksQ0FBQztjQUNsQkEsSUFBSSxDQUFDYSxFQUFFLElBQUlwQyxXQUFXO2NBRXRCLElBQUk5QixzQkFBc0IsQ0FBQ3FELElBQUksRUFBRXZGLE9BQU8sRUFBRXFDLGFBQWEsQ0FBQyxFQUFFO2dCQUN4RGtELElBQUksQ0FBQ29CLFFBQVEsR0FBRyxJQUFJO2NBQ3RCO1lBQ0Y7WUFFQSxJQUFJcEIsSUFBSSxDQUFDWSxRQUFRLEtBQUssSUFBSSxLQUFLWixJQUFJLENBQUMzRCxXQUFXLElBQUkyRCxJQUFJLENBQUMzRCxXQUFXLENBQUN1RSxRQUFRLEtBQUssSUFBSSxJQUFJMUYsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2NBQ2pHO2NBQ0FvRSxLQUFLLENBQUM1QyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2hCO1VBQ0Y7UUFDRjtNQUNGO0lBQ0Y7SUFFQSxLQUFLeEIsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHc0MsQ0FBQyxFQUFFdEMsQ0FBQyxFQUFFLEVBQUU7TUFDdEI4RSxJQUFJLEdBQUdDLEtBQUssQ0FBQy9FLENBQUMsQ0FBQztNQUNmZ0YsT0FBTyxHQUFHRixJQUFJLENBQUM3QyxVQUFVLEtBQUsxQyxPQUFPO01BRXJDLElBQUl1RixJQUFJLENBQUNZLFFBQVEsS0FBSyxJQUFJLEVBQUU7UUFDMUIsSUFBSXRCLEtBQUssSUFBSXhFLFFBQVEsRUFBRTtVQUNyQmtGLElBQUksQ0FBQzdDLFVBQVUsSUFBSTZDLElBQUksQ0FBQzdDLFVBQVUsQ0FBQ1MsV0FBVyxDQUFDb0MsSUFBSSxDQUFDO1VBQ3BEQyxLQUFLLENBQUNvQixNQUFNLENBQUNuRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7VUFDcEJzQyxDQUFDLEVBQUU7UUFDTCxDQUFDLE1BQU0sSUFBSSxDQUFDK0IsS0FBSyxFQUFFO1VBQ2pCOUUsT0FBTyxDQUFDNkcsV0FBVyxDQUFDdEIsSUFBSSxDQUFDO1FBQzNCO1FBRUE7TUFDRjtNQUVBLElBQUlsRixRQUFRLEVBQUU7UUFDWmdGLEtBQUssR0FBR0UsSUFBSSxDQUFDRixLQUFLO1FBRWxCLElBQUksQ0FBQ1AsS0FBSyxJQUFJLENBQUNXLE9BQU8sRUFBRTtVQUN0QkYsSUFBSSxDQUFDYSxFQUFFLElBQUliLElBQUksQ0FBQzdDLFVBQVUsQ0FBQzBELEVBQUU7VUFDN0JiLElBQUksQ0FBQ2UsRUFBRSxJQUFJZixJQUFJLENBQUM3QyxVQUFVLENBQUM0RCxFQUFFO1FBQy9CO1FBRUFqQixLQUFLLENBQUN5QixJQUFJLEdBQUd2QixJQUFJLENBQUNhLEVBQUUsR0FBRyxJQUFJO1FBQzNCZixLQUFLLENBQUMwQixHQUFHLEdBQUd4QixJQUFJLENBQUNlLEVBQUUsR0FBRyxJQUFJO1FBQzFCakIsS0FBSyxDQUFDakYsUUFBUSxHQUFHLFVBQVU7UUFDM0JpRixLQUFLLENBQUNGLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQzs7UUFFekJFLEtBQUssQ0FBQzJCLEtBQUssR0FBR3pCLElBQUksQ0FBQ2dCLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7O1FBRWxDbEIsS0FBSyxDQUFDNEIsTUFBTSxHQUFHMUIsSUFBSSxDQUFDa0IsRUFBRSxHQUFHLElBQUk7TUFDL0I7TUFFQSxJQUFJLENBQUMzQixLQUFLLElBQUl0RSxLQUFLLEVBQUU7UUFDbkI7UUFDQSxJQUFJK0UsSUFBSSxDQUFDdEMsUUFBUSxFQUFFO1VBQ2pCc0MsSUFBSSxDQUFDaEQsS0FBSyxHQUFHK0MsQ0FBQyxHQUFHQyxJQUFJLENBQUMzRCxXQUFXO1VBQ2pDMkQsSUFBSSxDQUFDN0MsVUFBVSxDQUFDbUUsV0FBVyxDQUFDdEIsSUFBSSxDQUFDLENBQUMsQ0FBQzs7VUFFbkMsT0FBT0QsQ0FBQyxJQUFJQSxDQUFDLENBQUM1RCxRQUFRLEtBQUssQ0FBQyxJQUFJNEQsQ0FBQyxDQUFDOUMsV0FBVyxLQUFLLEdBQUcsRUFBRTtZQUNyRDtZQUNBK0MsSUFBSSxDQUFDaEQsS0FBSyxHQUFHK0MsQ0FBQyxDQUFDMUQsV0FBVztZQUMxQjJELElBQUksQ0FBQzdDLFVBQVUsQ0FBQ21FLFdBQVcsQ0FBQ3ZCLENBQUMsQ0FBQztZQUM5QkEsQ0FBQyxHQUFHQSxDQUFDLENBQUMxRCxXQUFXO1VBQ25CO1FBQ0YsQ0FBQyxNQUFNLElBQUkyRCxJQUFJLENBQUM3QyxVQUFVLENBQUNPLFFBQVEsRUFBRTtVQUNuQ3NDLElBQUksQ0FBQzVDLE9BQU8sR0FBRzRDLElBQUksQ0FBQzdDLFVBQVU7VUFFOUIsSUFBSSxDQUFDNkMsSUFBSSxDQUFDckMsZUFBZSxJQUFJcUMsSUFBSSxDQUFDNUQsVUFBVSxFQUFFO1lBQzVDNEQsSUFBSSxDQUFDNUQsVUFBVSxDQUFDdUYsUUFBUSxHQUFHLElBQUk7VUFDakM7VUFFQSxJQUFJM0IsSUFBSSxDQUFDM0QsV0FBVyxJQUFJMkQsSUFBSSxDQUFDM0QsV0FBVyxDQUFDWSxXQUFXLEtBQUssR0FBRyxJQUFJLENBQUMrQyxJQUFJLENBQUMzRCxXQUFXLENBQUNBLFdBQVcsRUFBRTtZQUM3RjtZQUNBcUQsa0JBQWtCLENBQUNoRCxJQUFJLENBQUNzRCxJQUFJLENBQUMzRCxXQUFXLENBQUM7VUFDM0M7VUFFQTJELElBQUksQ0FBQ2hELEtBQUssR0FBR2dELElBQUksQ0FBQzNELFdBQVcsSUFBSTJELElBQUksQ0FBQzNELFdBQVcsQ0FBQ3NGLFFBQVEsR0FBRyxJQUFJLEdBQUczQixJQUFJLENBQUMzRCxXQUFXO1VBQ3BGMkQsSUFBSSxDQUFDN0MsVUFBVSxDQUFDUyxXQUFXLENBQUNvQyxJQUFJLENBQUM7VUFDakNDLEtBQUssQ0FBQ29CLE1BQU0sQ0FBQ25HLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztVQUNwQnNDLENBQUMsRUFBRTtRQUNMLENBQUMsTUFBTSxJQUFJLENBQUMwQyxPQUFPLEVBQUU7VUFDbkJLLE1BQU0sR0FBRyxDQUFDUCxJQUFJLENBQUMzRCxXQUFXLElBQUlNLHNCQUFzQixDQUFDcUQsSUFBSSxDQUFDN0MsVUFBVSxFQUFFMUMsT0FBTyxFQUFFcUMsYUFBYSxDQUFDLENBQUMsQ0FBQzs7VUFFL0ZrRCxJQUFJLENBQUM3QyxVQUFVLENBQUNDLE9BQU8sSUFBSTRDLElBQUksQ0FBQzdDLFVBQVUsQ0FBQ0MsT0FBTyxDQUFDa0UsV0FBVyxDQUFDdEIsSUFBSSxDQUFDO1VBQ3BFTyxNQUFNLElBQUlQLElBQUksQ0FBQzdDLFVBQVUsQ0FBQ21FLFdBQVcsQ0FBQ25JLElBQUksQ0FBQ3lJLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztVQUUvRCxJQUFJbkcsR0FBRyxLQUFLLE1BQU0sRUFBRTtZQUNsQnVFLElBQUksQ0FBQ0YsS0FBSyxDQUFDRixPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUM7VUFDakM7O1VBRUFYLFNBQVMsQ0FBQ3ZDLElBQUksQ0FBQ3NELElBQUksQ0FBQztRQUN0QjtNQUNGLENBQUMsTUFBTSxJQUFJQSxJQUFJLENBQUM3QyxVQUFVLENBQUNPLFFBQVEsSUFBSSxDQUFDc0MsSUFBSSxDQUFDdEMsUUFBUSxJQUFJc0MsSUFBSSxDQUFDNkIsU0FBUyxLQUFLLEVBQUUsRUFBRTtRQUM5RTNDLFNBQVMsQ0FBQ3hDLElBQUksQ0FBQ3NELElBQUksQ0FBQztNQUN0QixDQUFDLE1BQU0sSUFBSS9FLEtBQUssSUFBSSxDQUFDK0UsSUFBSSxDQUFDdEMsUUFBUSxFQUFFO1FBQ2xDLElBQUlqQyxHQUFHLEtBQUssTUFBTSxFQUFFO1VBQ2xCdUUsSUFBSSxDQUFDRixLQUFLLENBQUNGLE9BQU8sR0FBRyxRQUFRO1FBQy9CO1FBRUFYLFNBQVMsQ0FBQ3ZDLElBQUksQ0FBQ3NELElBQUksQ0FBQztNQUN0QjtJQUNGO0lBRUE5RSxDQUFDLEdBQUd3RSxrQkFBa0IsQ0FBQ3ZFLE1BQU07SUFFN0IsT0FBTyxFQUFFRCxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7TUFDZndFLGtCQUFrQixDQUFDeEUsQ0FBQyxDQUFDLENBQUNpQyxVQUFVLENBQUNTLFdBQVcsQ0FBQzhCLGtCQUFrQixDQUFDeEUsQ0FBQyxDQUFDLENBQUM7SUFDckU7SUFFQSxJQUFJb0UsS0FBSyxFQUFFO01BQ1Q7TUFDQSxJQUFJeEUsUUFBUSxFQUFFO1FBQ1p1RixRQUFRLEdBQUdsSCxJQUFJLENBQUMySSxhQUFhLENBQUNyRyxHQUFHLENBQUM7UUFDbENoQixPQUFPLENBQUM2RyxXQUFXLENBQUNqQixRQUFRLENBQUM7UUFDN0JDLFNBQVMsR0FBR0QsUUFBUSxDQUFDWSxXQUFXLEdBQUcsSUFBSTtRQUN2Q1YsTUFBTSxHQUFHRixRQUFRLENBQUMwQixZQUFZLEtBQUt0SCxPQUFPLEdBQUcsQ0FBQyxHQUFHQSxPQUFPLENBQUNxRyxVQUFVO1FBQ25FckcsT0FBTyxDQUFDbUQsV0FBVyxDQUFDeUMsUUFBUSxDQUFDO01BQy9CO01BRUFQLEtBQUssR0FBR3JGLE9BQU8sQ0FBQ3FGLEtBQUssQ0FBQ2tDLE9BQU87TUFDN0J2SCxPQUFPLENBQUNxRixLQUFLLENBQUNrQyxPQUFPLEdBQUcsZUFBZSxDQUFDLENBQUM7TUFDekM7O01BRUEsT0FBT3ZILE9BQU8sQ0FBQzJCLFVBQVUsRUFBRTtRQUN6QjNCLE9BQU8sQ0FBQ21ELFdBQVcsQ0FBQ25ELE9BQU8sQ0FBQzJCLFVBQVUsQ0FBQztNQUN6QztNQUVBZ0UsYUFBYSxHQUFHdEQsYUFBYSxLQUFLLEdBQUcsS0FBSyxDQUFDaEMsUUFBUSxJQUFJLENBQUN5RSxLQUFLLElBQUksQ0FBQ3RFLEtBQUssQ0FBQztNQUV4RSxLQUFLQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdvRSxLQUFLLENBQUNuRSxNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO1FBQ2pDaUYsT0FBTyxHQUFHYixLQUFLLENBQUNwRSxDQUFDLENBQUM7UUFDbEJtRixRQUFRLEdBQUdsSCxJQUFJLENBQUMySSxhQUFhLENBQUNyRyxHQUFHLENBQUM7UUFDbEM0RSxRQUFRLENBQUNQLEtBQUssQ0FBQ2tDLE9BQU8sR0FBRywyQkFBMkIsR0FBR2hELFNBQVMsR0FBRyxZQUFZLElBQUlsRSxRQUFRLEdBQUcsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUV4SCxJQUFJMEUsVUFBVSxFQUFFO1VBQ2RhLFFBQVEsQ0FBQzRCLFNBQVMsR0FBR3pDLFVBQVUsSUFBSUMsV0FBVyxHQUFHdkUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDOUQ7UUFFQWlFLFNBQVMsQ0FBQ3pDLElBQUksQ0FBQzJELFFBQVEsQ0FBQztRQUN4QjdDLENBQUMsR0FBRzJDLE9BQU8sQ0FBQ2hGLE1BQU07UUFFbEIsS0FBSzRFLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR3ZDLENBQUMsRUFBRXVDLENBQUMsRUFBRSxFQUFFO1VBQ3RCLElBQUlJLE9BQU8sQ0FBQ0osQ0FBQyxDQUFDLENBQUNhLFFBQVEsS0FBSyxJQUFJLEVBQUU7WUFDaENaLElBQUksR0FBR0csT0FBTyxDQUFDSixDQUFDLENBQUM7WUFDakJNLFFBQVEsQ0FBQ2lCLFdBQVcsQ0FBQ3RCLElBQUksQ0FBQztZQUMxQkksYUFBYSxJQUFJSixJQUFJLENBQUNvQixRQUFRLElBQUlmLFFBQVEsQ0FBQ2lCLFdBQVcsQ0FBQ25JLElBQUksQ0FBQ3lJLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVoRixJQUFJOUcsUUFBUSxFQUFFO2NBQ1osSUFBSWlGLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ1hNLFFBQVEsQ0FBQ1AsS0FBSyxDQUFDMEIsR0FBRyxHQUFHeEIsSUFBSSxDQUFDZSxFQUFFLEdBQUcsSUFBSTtnQkFDbkNWLFFBQVEsQ0FBQ1AsS0FBSyxDQUFDeUIsSUFBSSxHQUFHOUMsV0FBVyxHQUFHOEIsTUFBTSxHQUFHLElBQUk7Y0FDbkQ7Y0FFQVAsSUFBSSxDQUFDRixLQUFLLENBQUMwQixHQUFHLEdBQUcsS0FBSztjQUV0QixJQUFJakIsTUFBTSxFQUFFO2dCQUNWUCxJQUFJLENBQUNGLEtBQUssQ0FBQ3lCLElBQUksR0FBR3ZCLElBQUksQ0FBQ2EsRUFBRSxHQUFHTixNQUFNLEdBQUcsSUFBSTtjQUMzQztZQUNGO1VBQ0Y7UUFDRjtRQUVBLElBQUkvQyxDQUFDLEtBQUssQ0FBQyxFQUFFO1VBQ1g7VUFDQTZDLFFBQVEsQ0FBQ3dCLFNBQVMsR0FBRyxRQUFRO1FBQy9CLENBQUMsTUFBTSxJQUFJLENBQUN0QyxLQUFLLElBQUksQ0FBQ3RFLEtBQUssRUFBRTtVQUMzQm9DLFVBQVUsQ0FBQ2dELFFBQVEsQ0FBQztVQUVwQnRFLFNBQVMsQ0FBQ3NFLFFBQVEsRUFBRXpHLE1BQU0sQ0FBQ0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUNwRDtRQUVBLElBQUlpQixRQUFRLEVBQUU7VUFDWnVGLFFBQVEsQ0FBQ1AsS0FBSyxDQUFDMkIsS0FBSyxHQUFHbkIsU0FBUztVQUNoQ0QsUUFBUSxDQUFDUCxLQUFLLENBQUM0QixNQUFNLEdBQUcxQixJQUFJLENBQUNrQixFQUFFLEdBQUcsSUFBSTtRQUN4QztRQUVBekcsT0FBTyxDQUFDNkcsV0FBVyxDQUFDakIsUUFBUSxDQUFDO01BQy9CO01BRUE1RixPQUFPLENBQUNxRixLQUFLLENBQUNrQyxPQUFPLEdBQUdsQyxLQUFLO0lBQy9CLENBQUMsQ0FBQzs7SUFHRixJQUFJaEYsUUFBUSxFQUFFO01BQ1osSUFBSXlELFVBQVUsR0FBRzlELE9BQU8sQ0FBQ3lILFlBQVksRUFBRTtRQUNyQ3pILE9BQU8sQ0FBQ3FGLEtBQUssQ0FBQzRCLE1BQU0sR0FBR25ELFVBQVUsR0FBR00sZUFBZSxHQUFHLElBQUk7UUFFMUQsSUFBSXBFLE9BQU8sQ0FBQ3lILFlBQVksR0FBRzNELFVBQVUsRUFBRTtVQUNyQztVQUNBOUQsT0FBTyxDQUFDcUYsS0FBSyxDQUFDNEIsTUFBTSxHQUFHbkQsVUFBVSxHQUFHSSxrQkFBa0IsR0FBRyxJQUFJO1FBQy9EO01BQ0Y7TUFFQSxJQUFJTCxTQUFTLEdBQUc3RCxPQUFPLENBQUMwSCxXQUFXLEVBQUU7UUFDbkMxSCxPQUFPLENBQUNxRixLQUFLLENBQUMyQixLQUFLLEdBQUduRCxTQUFTLEdBQUdRLGVBQWUsR0FBRyxJQUFJO1FBRXhELElBQUlyRSxPQUFPLENBQUMwSCxXQUFXLEdBQUc3RCxTQUFTLEVBQUU7VUFDbkM7VUFDQTdELE9BQU8sQ0FBQ3FGLEtBQUssQ0FBQzJCLEtBQUssR0FBR25ELFNBQVMsR0FBR00sa0JBQWtCLEdBQUcsSUFBSTtRQUM3RDtNQUNGO0lBQ0Y7SUFFQWUsTUFBTSxLQUFLRSxpQkFBaUIsR0FBR3BGLE9BQU8sQ0FBQ3FGLEtBQUssQ0FBQ0YsT0FBTyxHQUFHQyxpQkFBaUIsR0FBR3BGLE9BQU8sQ0FBQ3FGLEtBQUssQ0FBQ3NDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUVuSDdGLGFBQWEsQ0FBQzRCLFFBQVEsRUFBRWMsU0FBUyxDQUFDO0lBRWxDTSxLQUFLLElBQUloRCxhQUFhLENBQUM2QixRQUFRLEVBQUVjLFNBQVMsQ0FBQztJQUUzQzNDLGFBQWEsQ0FBQzhCLFFBQVEsRUFBRWMsU0FBUyxDQUFDO0VBQ3BDLENBQUM7RUFDR2tELGFBQWEsR0FBRyxTQUFTQSxhQUFhLENBQUM1SCxPQUFPLEVBQUVHLElBQUksRUFBRTBILFNBQVMsRUFBRUMsU0FBUyxFQUFFO0lBQzlFLElBQUk5RyxHQUFHLEdBQUdiLElBQUksQ0FBQ2EsR0FBRyxHQUFHYixJQUFJLENBQUNhLEdBQUcsR0FBR2IsSUFBSSxDQUFDd0UsSUFBSSxHQUFHLE1BQU0sR0FBRyxLQUFLO01BQ3REQyxLQUFLLEdBQUd6RSxJQUFJLENBQUNzQixJQUFJLElBQUl0QixJQUFJLENBQUNpQixLQUFLLElBQUksbUJBQW1CO01BQ3REO01BQ0paLEtBQUssR0FBRyxDQUFDb0UsS0FBSyxDQUFDMUQsT0FBTyxDQUFDLE9BQU8sQ0FBQztNQUMzQmIsUUFBUSxHQUFHSCxXQUFXLENBQUNDLElBQUksQ0FBQztNQUM1QmtDLGFBQWEsR0FBR2xDLElBQUksQ0FBQ2tDLGFBQWEsSUFBSSxHQUFHO01BQ3pDMEYsZUFBZSxHQUFHLFNBQVNBLGVBQWUsQ0FBQ0MsS0FBSyxFQUFFO1FBQ3BELE9BQU9BLEtBQUssS0FBSzNGLGFBQWEsSUFBSTJGLEtBQUssS0FBSzlJLGlCQUFpQixJQUFJbUQsYUFBYSxLQUFLLEdBQUc7TUFDeEYsQ0FBQztNQUNHNEYsS0FBSyxHQUFHNUYsYUFBYSxLQUFLLEdBQUcsR0FBRyxFQUFFLEdBQUdoQyxRQUFRLEdBQUcsU0FBUyxHQUFHLEdBQUc7TUFDL0Q2SCxPQUFPLEdBQUcsSUFBSSxHQUFHbEgsR0FBRyxHQUFHLEdBQUc7TUFDMUJtSCxVQUFVLEdBQUcsQ0FBQztNQUNkQyxZQUFZLEdBQUdqSSxJQUFJLENBQUNpSSxZQUFZLEdBQUcsT0FBT2pJLElBQUksQ0FBQ2lJLFlBQVksS0FBSyxVQUFVLEdBQUdqSSxJQUFJLENBQUNpSSxZQUFZLEdBQUc5SCxpQkFBaUIsR0FBRyxJQUFJO01BQ3pIO01BQ0pDLElBQUk7TUFDQThILFNBQVM7TUFDVDVILENBQUM7TUFDRDZFLENBQUM7TUFDRHZDLENBQUM7TUFDRHVGLFNBQVM7TUFDVEMsV0FBVztNQUNYQyxVQUFVO01BQ1ZDLFNBQVMsR0FBRy9KLElBQUksQ0FBQzJJLGFBQWEsQ0FBQyxLQUFLLENBQUM7TUFDckNxQixNQUFNLEdBQUcxSSxPQUFPLENBQUMwQyxVQUFVO0lBRS9CZ0csTUFBTSxDQUFDdEYsWUFBWSxDQUFDcUYsU0FBUyxFQUFFekksT0FBTyxDQUFDO0lBQ3ZDeUksU0FBUyxDQUFDakcsV0FBVyxHQUFHeEMsT0FBTyxDQUFDNkIsU0FBUztJQUN6QzZHLE1BQU0sQ0FBQ3ZGLFdBQVcsQ0FBQ25ELE9BQU8sQ0FBQztJQUMzQkEsT0FBTyxHQUFHeUksU0FBUztJQUNuQmxJLElBQUksR0FBRzlCLDBEQUFPLENBQUN1QixPQUFPLENBQUM7SUFDdkJ1SSxXQUFXLEdBQUdoSSxJQUFJLENBQUNXLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFdEMsSUFBSWYsSUFBSSxDQUFDd0ksZ0JBQWdCLEtBQUssS0FBSyxFQUFFO01BQ25DcEksSUFBSSxHQUFHQSxJQUFJLENBQUNxSSxPQUFPLENBQUMzSixrQkFBa0IsRUFBRSxHQUFHLENBQUMsQ0FBQzJKLE9BQU8sQ0FBQzVKLFNBQVMsRUFBRSxFQUFFLENBQUM7SUFDckU7SUFFQSxJQUFJdUosV0FBVyxFQUFFO01BQ2ZoSSxJQUFJLEdBQUdBLElBQUksQ0FBQ2EsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN6Qzs7SUFFQTBCLENBQUMsR0FBR3hDLElBQUksQ0FBQ0csTUFBTTtJQUNmMkgsU0FBUyxHQUFHLENBQUM5SCxJQUFJLENBQUNrQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHd0YsS0FBSyxHQUFHLEVBQUUsSUFBSUosU0FBUyxFQUFFO0lBRS9ELEtBQUtwSCxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdzQyxDQUFDLEVBQUV0QyxDQUFDLEVBQUUsRUFBRTtNQUN0QjZILFNBQVMsR0FBRy9ILElBQUksQ0FBQ2tDLE1BQU0sQ0FBQ2hDLENBQUMsQ0FBQztNQUUxQixJQUFJMkgsWUFBWSxLQUFLSSxVQUFVLEdBQUdKLFlBQVksQ0FBQzdILElBQUksQ0FBQ0ssTUFBTSxDQUFDSCxDQUFDLENBQUMsRUFBRU4sSUFBSSxDQUFDaUksWUFBWSxDQUFDLENBQUMsRUFBRTtRQUNsRjtRQUNBRSxTQUFTLEdBQUcvSCxJQUFJLENBQUNLLE1BQU0sQ0FBQ0gsQ0FBQyxFQUFFK0gsVUFBVSxJQUFJLENBQUMsQ0FBQztRQUMzQ0gsU0FBUyxJQUFJN0gsS0FBSyxJQUFJOEgsU0FBUyxLQUFLLEdBQUcsR0FBR1IsU0FBUyxFQUFFLEdBQUdRLFNBQVMsR0FBRyxJQUFJLEdBQUd0SCxHQUFHLEdBQUcsR0FBRyxHQUFHc0gsU0FBUztRQUNoRzdILENBQUMsSUFBSStILFVBQVUsR0FBRyxDQUFDO01BQ3JCLENBQUMsTUFBTSxJQUFJVCxlQUFlLENBQUNPLFNBQVMsQ0FBQyxJQUFJLENBQUNQLGVBQWUsQ0FBQ3hILElBQUksQ0FBQ2tDLE1BQU0sQ0FBQ2hDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJQSxDQUFDLEVBQUU7UUFDbEY0SCxTQUFTLElBQUlGLFVBQVUsR0FBR0QsT0FBTyxHQUFHLEVBQUU7UUFDdENDLFVBQVUsR0FBRyxDQUFDO1FBRWQsT0FBT0osZUFBZSxDQUFDeEgsSUFBSSxDQUFDa0MsTUFBTSxDQUFDaEMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7VUFDMUM7VUFDQTRILFNBQVMsSUFBSUosS0FBSztVQUNsQnhILENBQUMsRUFBRTtRQUNMO1FBRUEsSUFBSUEsQ0FBQyxLQUFLc0MsQ0FBQyxHQUFHLENBQUMsRUFBRTtVQUNmc0YsU0FBUyxJQUFJSixLQUFLO1FBQ3BCLENBQUMsTUFBTSxJQUFJMUgsSUFBSSxDQUFDa0MsTUFBTSxDQUFDaEMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtVQUNyQzRILFNBQVMsSUFBSUosS0FBSyxHQUFHSixTQUFTLEVBQUU7VUFDaENNLFVBQVUsR0FBRyxDQUFDO1FBQ2hCO01BQ0YsQ0FBQyxNQUFNLElBQUlHLFNBQVMsS0FBSyxHQUFHLElBQUkvSCxJQUFJLENBQUNLLE1BQU0sQ0FBQ0gsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtRQUM5RDRILFNBQVMsSUFBSTdILEtBQUssR0FBR3NILFNBQVMsRUFBRSxHQUFHLFFBQVEsR0FBRyxJQUFJLEdBQUc5RyxHQUFHLEdBQUcsR0FBRyxHQUFHLFFBQVE7UUFDekVQLENBQUMsSUFBSSxDQUFDO01BQ1IsQ0FBQyxNQUFNLElBQUk2SCxTQUFTLENBQUNPLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLElBQUlQLFNBQVMsQ0FBQ08sVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLE1BQU0sSUFBSXRJLElBQUksQ0FBQ3NJLFVBQVUsQ0FBQ3BJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxNQUFNLElBQUlGLElBQUksQ0FBQ3NJLFVBQVUsQ0FBQ3BJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxNQUFNLEVBQUU7UUFDeko7UUFDQTZFLENBQUMsR0FBRyxDQUFDLENBQUMvRSxJQUFJLENBQUNLLE1BQU0sQ0FBQ0gsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDVyxLQUFLLENBQUM1Qyx1REFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRWtDLE1BQU0sSUFBSSxDQUFDO1FBQ3JFMkgsU0FBUyxJQUFJN0gsS0FBSyxJQUFJOEgsU0FBUyxLQUFLLEdBQUcsR0FBR1IsU0FBUyxFQUFFLEdBQUd2SCxJQUFJLENBQUNLLE1BQU0sQ0FBQ0gsQ0FBQyxFQUFFNkUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHdEUsR0FBRyxHQUFHLEdBQUcsR0FBR1QsSUFBSSxDQUFDSyxNQUFNLENBQUNILENBQUMsRUFBRTZFLENBQUMsQ0FBQztRQUNoSDdFLENBQUMsSUFBSTZFLENBQUMsR0FBRyxDQUFDO01BQ1osQ0FBQyxNQUFNO1FBQ0wrQyxTQUFTLElBQUk3SCxLQUFLLElBQUk4SCxTQUFTLEtBQUssR0FBRyxHQUFHUixTQUFTLEVBQUUsR0FBR1EsU0FBUyxHQUFHLElBQUksR0FBR3RILEdBQUcsR0FBRyxHQUFHLEdBQUdzSCxTQUFTO01BQ2xHO0lBQ0Y7SUFFQXRJLE9BQU8sQ0FBQzhJLFNBQVMsR0FBR1QsU0FBUyxJQUFJRixVQUFVLEdBQUdELE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDM0RLLFdBQVcsSUFBSWpILFNBQVMsQ0FBQ29ILE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztFQUNuRCxDQUFDO0VBQ0dLLE1BQU0sR0FBRyxTQUFTQSxNQUFNLENBQUMvSSxPQUFPLEVBQUVHLElBQUksRUFBRTBILFNBQVMsRUFBRUMsU0FBUyxFQUFFO0lBQ2hFLElBQUlqRixRQUFRLEdBQUc5RCxRQUFRLENBQUNpQixPQUFPLENBQUM4QyxVQUFVLENBQUM7TUFDdkNDLENBQUMsR0FBR0YsUUFBUSxDQUFDbkMsTUFBTTtNQUNuQkwsUUFBUSxHQUFHSCxXQUFXLENBQUNDLElBQUksQ0FBQztNQUM1Qk0sQ0FBQztNQUNEdUMsS0FBSztJQUVULElBQUloRCxPQUFPLENBQUMwQixRQUFRLEtBQUssQ0FBQyxJQUFJcUIsQ0FBQyxHQUFHLENBQUMsRUFBRTtNQUNuQzVDLElBQUksQ0FBQ0UsUUFBUSxHQUFHLEtBQUs7TUFFckIsS0FBS0ksQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHc0MsQ0FBQyxFQUFFdEMsQ0FBQyxFQUFFLEVBQUU7UUFDdEJ1QyxLQUFLLEdBQUdILFFBQVEsQ0FBQ3BDLENBQUMsQ0FBQztRQUNuQnVDLEtBQUssQ0FBQ1QsS0FBSyxHQUFHUyxLQUFLLENBQUNrRSxRQUFRLEdBQUdsRSxLQUFLLENBQUNMLE9BQU8sR0FBR0ssS0FBSyxDQUFDMkQsUUFBUSxHQUFHLElBQUk7UUFFcEUsSUFBSTNELEtBQUssQ0FBQ3RCLFFBQVEsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDc0gsSUFBSSxDQUFDaEcsS0FBSyxDQUFDbkIsU0FBUyxDQUFDLEVBQUU7VUFDdkQsSUFBSXhCLFFBQVEsSUFBSTJDLEtBQUssQ0FBQ3RCLFFBQVEsS0FBSyxDQUFDLElBQUkzQixpQkFBaUIsQ0FBQ2lELEtBQUssQ0FBQyxDQUFDbUMsT0FBTyxLQUFLLFFBQVEsRUFBRTtZQUNyRjtZQUNBbkMsS0FBSyxDQUFDcUMsS0FBSyxDQUFDRixPQUFPLEdBQUcsY0FBYztZQUNwQ25DLEtBQUssQ0FBQ3FDLEtBQUssQ0FBQ2pGLFFBQVEsR0FBRyxVQUFVO1VBQ25DO1VBRUE0QyxLQUFLLENBQUNDLFFBQVEsR0FBRyxJQUFJO1VBRXJCOEYsTUFBTSxDQUFDL0YsS0FBSyxFQUFFN0MsSUFBSSxFQUFFMEgsU0FBUyxFQUFFQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRTdDO01BQ0Y7O01BRUEzSCxJQUFJLENBQUNFLFFBQVEsR0FBR0EsUUFBUTtNQUN4QkwsT0FBTyxDQUFDaUQsUUFBUSxHQUFHLElBQUk7TUFDdkI7SUFDRjtJQUVBMkUsYUFBYSxDQUFDNUgsT0FBTyxFQUFFRyxJQUFJLEVBQUUwSCxTQUFTLEVBQUVDLFNBQVMsQ0FBQztFQUNwRCxDQUFDO0FBRU0sSUFBSW1CLFNBQVMsR0FBRyxhQUFhLFlBQVk7RUFDOUMsU0FBU0EsU0FBUyxDQUFDakosT0FBTyxFQUFFRyxJQUFJLEVBQUU7SUFDaEN2QixZQUFZLElBQUlTLFNBQVMsRUFBRTtJQUMzQixJQUFJLENBQUM2SixRQUFRLEdBQUduSyxRQUFRLENBQUNpQixPQUFPLENBQUM7SUFDakMsSUFBSSxDQUFDUSxLQUFLLEdBQUcsRUFBRTtJQUNmLElBQUksQ0FBQ3NFLEtBQUssR0FBRyxFQUFFO0lBQ2YsSUFBSSxDQUFDRCxLQUFLLEdBQUcsRUFBRTtJQUNmLElBQUksQ0FBQ3NFLFVBQVUsR0FBRyxFQUFFO0lBQ3BCLElBQUksQ0FBQ2hKLElBQUksR0FBR0EsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUV0QnJCLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFFZGdCLGVBQWUsSUFBSSxJQUFJLENBQUNzQixLQUFLLENBQUNqQixJQUFJLENBQUM7RUFDckM7RUFFQSxJQUFJaUosTUFBTSxHQUFHSCxTQUFTLENBQUNJLFNBQVM7RUFFaENELE1BQU0sQ0FBQ2hJLEtBQUssR0FBRyxTQUFTQSxLQUFLLENBQUNqQixJQUFJLEVBQUU7SUFDbEMsSUFBSSxDQUFDbUosT0FBTyxJQUFJLElBQUksQ0FBQ0MsTUFBTSxFQUFFO0lBQzdCLElBQUksQ0FBQ3BKLElBQUksR0FBR0EsSUFBSSxHQUFHQSxJQUFJLElBQUksSUFBSSxDQUFDQSxJQUFJO0lBQ3BDLElBQUksQ0FBQ2dKLFVBQVUsQ0FBQ3pJLE1BQU0sR0FBRyxJQUFJLENBQUNGLEtBQUssQ0FBQ0UsTUFBTSxHQUFHLElBQUksQ0FBQ29FLEtBQUssQ0FBQ3BFLE1BQU0sR0FBRyxJQUFJLENBQUNtRSxLQUFLLENBQUNuRSxNQUFNLEdBQUcsQ0FBQztJQUV0RixJQUFJRCxDQUFDLEdBQUcsSUFBSSxDQUFDeUksUUFBUSxDQUFDeEksTUFBTTtNQUN4Qk0sR0FBRyxHQUFHYixJQUFJLENBQUNhLEdBQUcsR0FBR2IsSUFBSSxDQUFDYSxHQUFHLEdBQUdiLElBQUksQ0FBQ3dFLElBQUksR0FBRyxNQUFNLEdBQUcsS0FBSztNQUN0RGtELFNBQVMsR0FBRy9HLGFBQWEsQ0FBQ1gsSUFBSSxDQUFDcUosVUFBVSxFQUFFeEksR0FBRyxDQUFDO01BQy9DOEcsU0FBUyxHQUFHaEgsYUFBYSxDQUFDWCxJQUFJLENBQUNzSixVQUFVLEVBQUV6SSxHQUFHLENBQUM7TUFDL0M4QyxVQUFVO01BQ1ZELFNBQVM7TUFDVDFCLENBQUMsQ0FBQyxDQUFDOztJQUdQLE9BQU8sRUFBRTFCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtNQUNmMEIsQ0FBQyxHQUFHLElBQUksQ0FBQytHLFFBQVEsQ0FBQ3pJLENBQUMsQ0FBQztNQUNwQixJQUFJLENBQUMwSSxVQUFVLENBQUMxSSxDQUFDLENBQUMsR0FBRztRQUNuQmlKLElBQUksRUFBRXZILENBQUMsQ0FBQ2lGLFNBQVM7UUFDakIvQixLQUFLLEVBQUVsRCxDQUFDLENBQUN3SCxZQUFZLENBQUMsT0FBTztNQUMvQixDQUFDO01BQ0Q3RixVQUFVLEdBQUczQixDQUFDLENBQUNzRixZQUFZO01BQzNCNUQsU0FBUyxHQUFHMUIsQ0FBQyxDQUFDdUYsV0FBVztNQUV6QnFCLE1BQU0sQ0FBQzVHLENBQUMsRUFBRWhDLElBQUksRUFBRTBILFNBQVMsRUFBRUMsU0FBUyxDQUFDO01BRXJDckUsdUJBQXVCLENBQUN0QixDQUFDLEVBQUVoQyxJQUFJLEVBQUUsSUFBSSxDQUFDSyxLQUFLLEVBQUUsSUFBSSxDQUFDc0UsS0FBSyxFQUFFLElBQUksQ0FBQ0QsS0FBSyxFQUFFaEIsU0FBUyxFQUFFQyxVQUFVLENBQUM7SUFDN0Y7SUFFQSxJQUFJLENBQUN0RCxLQUFLLENBQUNvSixPQUFPLEVBQUU7SUFDcEIsSUFBSSxDQUFDOUUsS0FBSyxDQUFDOEUsT0FBTyxFQUFFO0lBQ3BCLElBQUksQ0FBQy9FLEtBQUssQ0FBQytFLE9BQU8sRUFBRTtJQUNwQixJQUFJLENBQUNOLE9BQU8sR0FBRyxJQUFJO0lBQ25CLE9BQU8sSUFBSTtFQUNiLENBQUM7RUFFREYsTUFBTSxDQUFDRyxNQUFNLEdBQUcsU0FBU0EsTUFBTSxHQUFHO0lBQ2hDLElBQUlNLFNBQVMsR0FBRyxJQUFJLENBQUNWLFVBQVU7SUFFL0IsSUFBSSxDQUFDVSxTQUFTLEVBQUU7TUFDZCxNQUFNLHVDQUF1QztJQUMvQztJQUVBLElBQUksQ0FBQ1gsUUFBUSxDQUFDWSxPQUFPLENBQUMsVUFBVTNILENBQUMsRUFBRTFCLENBQUMsRUFBRTtNQUNwQzBCLENBQUMsQ0FBQ2lGLFNBQVMsR0FBR3lDLFNBQVMsQ0FBQ3BKLENBQUMsQ0FBQyxDQUFDaUosSUFBSTtNQUMvQnZILENBQUMsQ0FBQzRILFlBQVksQ0FBQyxPQUFPLEVBQUVGLFNBQVMsQ0FBQ3BKLENBQUMsQ0FBQyxDQUFDNEUsS0FBSyxDQUFDO0lBQzdDLENBQUMsQ0FBQztJQUNGLElBQUksQ0FBQzdFLEtBQUssR0FBRyxFQUFFO0lBQ2YsSUFBSSxDQUFDc0UsS0FBSyxHQUFHLEVBQUU7SUFDZixJQUFJLENBQUNELEtBQUssR0FBRyxFQUFFO0lBQ2YsSUFBSSxDQUFDeUUsT0FBTyxHQUFHLEtBQUs7SUFDcEIsT0FBTyxJQUFJO0VBQ2IsQ0FBQztFQUVETCxTQUFTLENBQUNlLE1BQU0sR0FBRyxTQUFTQSxNQUFNLENBQUNoSyxPQUFPLEVBQUVHLElBQUksRUFBRTtJQUNoRCxPQUFPLElBQUk4SSxTQUFTLENBQUNqSixPQUFPLEVBQUVHLElBQUksQ0FBQztFQUNyQyxDQUFDO0VBRUQsT0FBTzhJLFNBQVM7QUFDbEIsQ0FBQyxFQUFFO0FBQ0hBLFNBQVMsQ0FBQ2dCLE9BQU8sR0FBRyxRQUFRO0FBQzVCaEIsU0FBUyxDQUFDaUIsUUFBUSxHQUFHN0ssU0FBUyIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbGlicy9nc2FwL1NwbGl0VGV4dC5qcz8zNjJkIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIVxyXG4gKiBTcGxpdFRleHQ6IDMuMTIuNVxyXG4gKiBodHRwczovL2dzYXAuY29tXHJcbiAqXHJcbiAqIEBsaWNlbnNlIENvcHlyaWdodCAyMDA4LTIwMjQsIEdyZWVuU29jay4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogU3ViamVjdCB0byB0aGUgdGVybXMgYXQgaHR0cHM6Ly9nc2FwLmNvbS9zdGFuZGFyZC1saWNlbnNlIG9yIGZvclxyXG4gKiBDbHViIEdTQVAgbWVtYmVycywgdGhlIGFncmVlbWVudCBpc3N1ZWQgd2l0aCB0aGF0IG1lbWJlcnNoaXAuXHJcbiAqIEBhdXRob3I6IEphY2sgRG95bGUsIGphY2tAZ3JlZW5zb2NrLmNvbVxyXG4qL1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgKi9cclxuaW1wb3J0IHsgZW1vamlFeHAsIGdldFRleHQgfSBmcm9tIFwiLi91dGlscy9zdHJpbmdzLmpzXCI7XHJcblxyXG52YXIgX2RvYyxcclxuICAgIF93aW4sXHJcbiAgICBfY29yZUluaXR0ZWQsXHJcbiAgICBnc2FwLFxyXG4gICAgX2NvbnRleHQsXHJcbiAgICBfdG9BcnJheSxcclxuICAgIF9zdHJpcEV4cCA9IC8oPzpcXHJ8XFxufFxcdFxcdCkvZyxcclxuICAgIC8vZmluZCBjYXJyaWFnZSByZXR1cm5zLCBuZXcgbGluZSBmZWVkcyBhbmQgZG91YmxlLXRhYnMuXHJcbl9tdWx0aXBsZVNwYWNlc0V4cCA9IC8oPzpcXHNcXHMrKS9nLFxyXG4gICAgX25vbkJyZWFraW5nU3BhY2UgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDE2MCksXHJcbiAgICBfaW5pdENvcmUgPSBmdW5jdGlvbiBfaW5pdENvcmUoY29yZSkge1xyXG4gIF9kb2MgPSBkb2N1bWVudDtcclxuICBfd2luID0gd2luZG93O1xyXG4gIGdzYXAgPSBnc2FwIHx8IGNvcmUgfHwgX3dpbi5nc2FwIHx8IGNvbnNvbGUud2FybihcIlBsZWFzZSBnc2FwLnJlZ2lzdGVyUGx1Z2luKFNwbGl0VGV4dClcIik7XHJcblxyXG4gIGlmIChnc2FwKSB7XHJcbiAgICBfdG9BcnJheSA9IGdzYXAudXRpbHMudG9BcnJheTtcclxuXHJcbiAgICBfY29udGV4dCA9IGdzYXAuY29yZS5jb250ZXh0IHx8IGZ1bmN0aW9uICgpIHt9O1xyXG5cclxuICAgIF9jb3JlSW5pdHRlZCA9IDE7XHJcbiAgfVxyXG59LFxyXG4gICAgX2JvbnVzVmFsaWRhdGVkID0gMSxcclxuICAgIC8vPG5hbWU+U3BsaXRUZXh0PC9uYW1lPlxyXG5fZ2V0Q29tcHV0ZWRTdHlsZSA9IGZ1bmN0aW9uIF9nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcclxuICByZXR1cm4gX3dpbi5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xyXG59LFxyXG4gICAgX2lzQWJzb2x1dGUgPSBmdW5jdGlvbiBfaXNBYnNvbHV0ZSh2YXJzKSB7XHJcbiAgcmV0dXJuIHZhcnMucG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCB2YXJzLmFic29sdXRlID09PSB0cnVlO1xyXG59LFxyXG4gICAgLy9zb21lIGNoYXJhY3RlcnMgYXJlIGNvbWJpbmluZyBtYXJrcyAodGhpbmsgZGlhY3JpdGljcy9hY2NlbnRzIGluIEV1cm9wZWFuIGxhbmd1YWdlcykgd2hpY2ggaW52b2x2ZSAyIG9yIDQgY2hhcmFjdGVycyB0aGF0IGNvbWJpbmUgaW4gdGhlIGJyb3dzZXIgdG8gZm9ybSBhIHNpbmdsZSBjaGFyYWN0ZXIuIFBhc3MgaW4gdGhlIHJlbWFpbmluZyB0ZXh0IGFuZCBhbiBhcnJheSBvZiB0aGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIHNlYXJjaCBmb3IgYW5kIGlmIHRoZSB0ZXh0IHN0YXJ0cyB3aXRoIG9uZSBvZiB0aG9zZSBzcGVjaWFsIGNoYXJhY3RlcnMsIGl0J2xsIHNwaXQgYmFjayB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gcmV0YWluIChvZnRlbiAyIG9yIDQpLiBVc2VkIGluIHRoZSBzcGVjaWFsQ2hhcnMgZmVhdHVyZXMgdGhhdCB3YXMgaW50cm9kdWNlZCBpbiAwLjYuMC5cclxuX2ZpbmRTcGVjaWFsQ2hhcnMgPSBmdW5jdGlvbiBfZmluZFNwZWNpYWxDaGFycyh0ZXh0LCBjaGFycykge1xyXG4gIHZhciBpID0gY2hhcnMubGVuZ3RoLFxyXG4gICAgICBzO1xyXG5cclxuICB3aGlsZSAoLS1pID4gLTEpIHtcclxuICAgIHMgPSBjaGFyc1tpXTtcclxuXHJcbiAgICBpZiAodGV4dC5zdWJzdHIoMCwgcy5sZW5ndGgpID09PSBzKSB7XHJcbiAgICAgIHJldHVybiBzLmxlbmd0aDtcclxuICAgIH1cclxuICB9XHJcbn0sXHJcbiAgICBfZGl2U3RhcnQgPSBcIiBzdHlsZT0ncG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7J1wiLFxyXG4gICAgX2Nzc0NsYXNzRnVuYyA9IGZ1bmN0aW9uIF9jc3NDbGFzc0Z1bmMoY3NzQ2xhc3MsIHRhZykge1xyXG4gIGlmIChjc3NDbGFzcyA9PT0gdm9pZCAwKSB7XHJcbiAgICBjc3NDbGFzcyA9IFwiXCI7XHJcbiAgfVxyXG5cclxuICB2YXIgaXRlcmF0ZSA9IH5jc3NDbGFzcy5pbmRleE9mKFwiKytcIiksXHJcbiAgICAgIG51bSA9IDE7XHJcblxyXG4gIGlmIChpdGVyYXRlKSB7XHJcbiAgICBjc3NDbGFzcyA9IGNzc0NsYXNzLnNwbGl0KFwiKytcIikuam9pbihcIlwiKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gXCI8XCIgKyB0YWcgKyBfZGl2U3RhcnQgKyAoY3NzQ2xhc3MgPyBcIiBjbGFzcz0nXCIgKyBjc3NDbGFzcyArIChpdGVyYXRlID8gbnVtKysgOiBcIlwiKSArIFwiJz5cIiA6IFwiPlwiKTtcclxuICB9O1xyXG59LFxyXG4gICAgX3N3YXBUZXh0ID0gZnVuY3Rpb24gX3N3YXBUZXh0KGVsZW1lbnQsIG9sZFRleHQsIG5ld1RleHQpIHtcclxuICB2YXIgdHlwZSA9IGVsZW1lbnQubm9kZVR5cGU7XHJcblxyXG4gIGlmICh0eXBlID09PSAxIHx8IHR5cGUgPT09IDkgfHwgdHlwZSA9PT0gMTEpIHtcclxuICAgIGZvciAoZWxlbWVudCA9IGVsZW1lbnQuZmlyc3RDaGlsZDsgZWxlbWVudDsgZWxlbWVudCA9IGVsZW1lbnQubmV4dFNpYmxpbmcpIHtcclxuICAgICAgX3N3YXBUZXh0KGVsZW1lbnQsIG9sZFRleHQsIG5ld1RleHQpO1xyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gMyB8fCB0eXBlID09PSA0KSB7XHJcbiAgICBlbGVtZW50Lm5vZGVWYWx1ZSA9IGVsZW1lbnQubm9kZVZhbHVlLnNwbGl0KG9sZFRleHQpLmpvaW4obmV3VGV4dCk7XHJcbiAgfVxyXG59LFxyXG4gICAgX3B1c2hSZXZlcnNlZCA9IGZ1bmN0aW9uIF9wdXNoUmV2ZXJzZWQoYSwgbWVyZ2UpIHtcclxuICB2YXIgaSA9IG1lcmdlLmxlbmd0aDtcclxuXHJcbiAgd2hpbGUgKC0taSA+IC0xKSB7XHJcbiAgICBhLnB1c2gobWVyZ2VbaV0pO1xyXG4gIH1cclxufSxcclxuICAgIF9pc0JlZm9yZVdvcmREZWxpbWl0ZXIgPSBmdW5jdGlvbiBfaXNCZWZvcmVXb3JkRGVsaW1pdGVyKGUsIHJvb3QsIHdvcmREZWxpbWl0ZXIpIHtcclxuICB2YXIgbmV4dDtcclxuXHJcbiAgd2hpbGUgKGUgJiYgZSAhPT0gcm9vdCkge1xyXG4gICAgbmV4dCA9IGUuX25leHQgfHwgZS5uZXh0U2libGluZztcclxuXHJcbiAgICBpZiAobmV4dCkge1xyXG4gICAgICByZXR1cm4gbmV4dC50ZXh0Q29udGVudC5jaGFyQXQoMCkgPT09IHdvcmREZWxpbWl0ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZSA9IGUucGFyZW50Tm9kZSB8fCBlLl9wYXJlbnQ7XHJcbiAgfVxyXG59LFxyXG4gICAgX2RlV29yZGlmeSA9IGZ1bmN0aW9uIF9kZVdvcmRpZnkoZSkge1xyXG4gIHZhciBjaGlsZHJlbiA9IF90b0FycmF5KGUuY2hpbGROb2RlcyksXHJcbiAgICAgIGwgPSBjaGlsZHJlbi5sZW5ndGgsXHJcbiAgICAgIGksXHJcbiAgICAgIGNoaWxkO1xyXG5cclxuICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XHJcbiAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG5cclxuICAgIGlmIChjaGlsZC5faXNTcGxpdCkge1xyXG4gICAgICBfZGVXb3JkaWZ5KGNoaWxkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChpICYmIGNoaWxkLnByZXZpb3VzU2libGluZyAmJiBjaGlsZC5wcmV2aW91c1NpYmxpbmcubm9kZVR5cGUgPT09IDMpIHtcclxuICAgICAgICBjaGlsZC5wcmV2aW91c1NpYmxpbmcubm9kZVZhbHVlICs9IGNoaWxkLm5vZGVUeXBlID09PSAzID8gY2hpbGQubm9kZVZhbHVlIDogY2hpbGQuZmlyc3RDaGlsZC5ub2RlVmFsdWU7XHJcbiAgICAgICAgZS5yZW1vdmVDaGlsZChjaGlsZCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGQubm9kZVR5cGUgIT09IDMpIHtcclxuICAgICAgICBlLmluc2VydEJlZm9yZShjaGlsZC5maXJzdENoaWxkLCBjaGlsZCk7XHJcbiAgICAgICAgZS5yZW1vdmVDaGlsZChjaGlsZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn0sXHJcbiAgICBfZ2V0U3R5bGVBc051bWJlciA9IGZ1bmN0aW9uIF9nZXRTdHlsZUFzTnVtYmVyKG5hbWUsIGNvbXB1dGVkU3R5bGUpIHtcclxuICByZXR1cm4gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlW25hbWVdKSB8fCAwO1xyXG59LFxyXG4gICAgX3NldFBvc2l0aW9uc0FmdGVyU3BsaXQgPSBmdW5jdGlvbiBfc2V0UG9zaXRpb25zQWZ0ZXJTcGxpdChlbGVtZW50LCB2YXJzLCBhbGxDaGFycywgYWxsV29yZHMsIGFsbExpbmVzLCBvcmlnV2lkdGgsIG9yaWdIZWlnaHQpIHtcclxuICB2YXIgY3MgPSBfZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSxcclxuICAgICAgcGFkZGluZ0xlZnQgPSBfZ2V0U3R5bGVBc051bWJlcihcInBhZGRpbmdMZWZ0XCIsIGNzKSxcclxuICAgICAgbGluZU9mZnNldFkgPSAtOTk5LFxyXG4gICAgICBib3JkZXJUb3BBbmRCb3R0b20gPSBfZ2V0U3R5bGVBc051bWJlcihcImJvcmRlckJvdHRvbVdpZHRoXCIsIGNzKSArIF9nZXRTdHlsZUFzTnVtYmVyKFwiYm9yZGVyVG9wV2lkdGhcIiwgY3MpLFxyXG4gICAgICBib3JkZXJMZWZ0QW5kUmlnaHQgPSBfZ2V0U3R5bGVBc051bWJlcihcImJvcmRlckxlZnRXaWR0aFwiLCBjcykgKyBfZ2V0U3R5bGVBc051bWJlcihcImJvcmRlclJpZ2h0V2lkdGhcIiwgY3MpLFxyXG4gICAgICBwYWRUb3BBbmRCb3R0b20gPSBfZ2V0U3R5bGVBc051bWJlcihcInBhZGRpbmdUb3BcIiwgY3MpICsgX2dldFN0eWxlQXNOdW1iZXIoXCJwYWRkaW5nQm90dG9tXCIsIGNzKSxcclxuICAgICAgcGFkTGVmdEFuZFJpZ2h0ID0gX2dldFN0eWxlQXNOdW1iZXIoXCJwYWRkaW5nTGVmdFwiLCBjcykgKyBfZ2V0U3R5bGVBc051bWJlcihcInBhZGRpbmdSaWdodFwiLCBjcyksXHJcbiAgICAgIGxpbmVUaHJlc2hvbGQgPSBfZ2V0U3R5bGVBc051bWJlcihcImZvbnRTaXplXCIsIGNzKSAqICh2YXJzLmxpbmVUaHJlc2hvbGQgfHwgMC4yKSxcclxuICAgICAgdGV4dEFsaWduID0gY3MudGV4dEFsaWduLFxyXG4gICAgICBjaGFyQXJyYXkgPSBbXSxcclxuICAgICAgd29yZEFycmF5ID0gW10sXHJcbiAgICAgIGxpbmVBcnJheSA9IFtdLFxyXG4gICAgICB3b3JkRGVsaW1pdGVyID0gdmFycy53b3JkRGVsaW1pdGVyIHx8IFwiIFwiLFxyXG4gICAgICB0YWcgPSB2YXJzLnRhZyA/IHZhcnMudGFnIDogdmFycy5zcGFuID8gXCJzcGFuXCIgOiBcImRpdlwiLFxyXG4gICAgICB0eXBlcyA9IHZhcnMudHlwZSB8fCB2YXJzLnNwbGl0IHx8IFwiY2hhcnMsd29yZHMsbGluZXNcIixcclxuICAgICAgbGluZXMgPSBhbGxMaW5lcyAmJiB+dHlwZXMuaW5kZXhPZihcImxpbmVzXCIpID8gW10gOiBudWxsLFxyXG4gICAgICB3b3JkcyA9IH50eXBlcy5pbmRleE9mKFwid29yZHNcIiksXHJcbiAgICAgIGNoYXJzID0gfnR5cGVzLmluZGV4T2YoXCJjaGFyc1wiKSxcclxuICAgICAgYWJzb2x1dGUgPSBfaXNBYnNvbHV0ZSh2YXJzKSxcclxuICAgICAgbGluZXNDbGFzcyA9IHZhcnMubGluZXNDbGFzcyxcclxuICAgICAgaXRlcmF0ZUxpbmUgPSB+KGxpbmVzQ2xhc3MgfHwgXCJcIikuaW5kZXhPZihcIisrXCIpLFxyXG4gICAgICBzcGFjZU5vZGVzVG9SZW1vdmUgPSBbXSxcclxuICAgICAgaXNGbGV4ID0gY3MuZGlzcGxheSA9PT0gXCJmbGV4XCIsXHJcbiAgICAgIHByZXZJbmxpbmVEaXNwbGF5ID0gZWxlbWVudC5zdHlsZS5kaXNwbGF5LFxyXG4gICAgICBpLFxyXG4gICAgICBqLFxyXG4gICAgICBsLFxyXG4gICAgICBub2RlLFxyXG4gICAgICBub2RlcyxcclxuICAgICAgaXNDaGlsZCxcclxuICAgICAgY3VyTGluZSxcclxuICAgICAgYWRkV29yZFNwYWNlcyxcclxuICAgICAgc3R5bGUsXHJcbiAgICAgIGxpbmVOb2RlLFxyXG4gICAgICBsaW5lV2lkdGgsXHJcbiAgICAgIG9mZnNldDtcclxuXHJcbiAgaXRlcmF0ZUxpbmUgJiYgKGxpbmVzQ2xhc3MgPSBsaW5lc0NsYXNzLnNwbGl0KFwiKytcIikuam9pbihcIlwiKSk7XHJcbiAgaXNGbGV4ICYmIChlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCIpOyAvL2NvcHkgYWxsIHRoZSBkZXNjZW5kYW50IG5vZGVzIGludG8gYW4gYXJyYXkgKHdlIGNhbid0IHVzZSBhIHJlZ3VsYXIgbm9kZUxpc3QgYmVjYXVzZSBpdCdzIGxpdmUgYW5kIHdlIG1heSBuZWVkIHRvIHJlbmVzdCB0aGluZ3MpXHJcblxyXG4gIGogPSBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKTtcclxuICBsID0gai5sZW5ndGg7XHJcbiAgbm9kZXMgPSBbXTtcclxuXHJcbiAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykge1xyXG4gICAgbm9kZXNbaV0gPSBqW2ldO1xyXG4gIH0gLy9mb3IgYWJzb2x1dGUgcG9zaXRpb25pbmcsIHdlIG5lZWQgdG8gcmVjb3JkIHRoZSB4L3kgb2Zmc2V0cyBhbmQgd2lkdGgvaGVpZ2h0IGZvciBldmVyeSA8ZGl2Pi4gQW5kIGV2ZW4gaWYgd2UncmUgbm90IHBvc2l0aW9uaW5nIHRoaW5ncyBhYnNvbHV0ZWx5LCBpbiBvcmRlciB0byBhY2NvbW1vZGF0ZSBsaW5lcywgd2UgbXVzdCBmaWd1cmUgb3V0IHdoZXJlIHRoZSB5IG9mZnNldCBjaGFuZ2VzIHNvIHRoYXQgd2UgY2FuIHNlbnNlIHdoZXJlIHRoZSBsaW5lcyBicmVhaywgYW5kIHdlIHBvcHVsYXRlIHRoZSBsaW5lcyBhcnJheS5cclxuXHJcblxyXG4gIGlmIChsaW5lcyB8fCBhYnNvbHV0ZSkge1xyXG4gICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBub2RlID0gbm9kZXNbaV07XHJcbiAgICAgIGlzQ2hpbGQgPSBub2RlLnBhcmVudE5vZGUgPT09IGVsZW1lbnQ7XHJcblxyXG4gICAgICBpZiAoaXNDaGlsZCB8fCBhYnNvbHV0ZSB8fCBjaGFycyAmJiAhd29yZHMpIHtcclxuICAgICAgICBvZmZzZXQgPSBub2RlLm9mZnNldFRvcDtcclxuXHJcbiAgICAgICAgaWYgKGxpbmVzICYmIGlzQ2hpbGQgJiYgTWF0aC5hYnMob2Zmc2V0IC0gbGluZU9mZnNldFkpID4gbGluZVRocmVzaG9sZCAmJiAobm9kZS5ub2RlTmFtZSAhPT0gXCJCUlwiIHx8IGkgPT09IDApKSB7XHJcbiAgICAgICAgICAvL3dlIGZvdW5kIHNvbWUgcmFyZSBvY2Nhc2lvbnMgd2hlcmUgYSBjZXJ0YWluIGNoYXJhY3RlciBsaWtlICYjODIwOTsgY291bGQgY2F1c2UgdGhlIG9mZnNldFRvcCB0byBiZSBvZmYgYnkgMSBwaXhlbCwgc28gd2UgYnVpbGQgaW4gYSB0aHJlc2hvbGQuXHJcbiAgICAgICAgICBjdXJMaW5lID0gW107XHJcbiAgICAgICAgICBsaW5lcy5wdXNoKGN1ckxpbmUpO1xyXG4gICAgICAgICAgbGluZU9mZnNldFkgPSBvZmZzZXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYWJzb2x1dGUpIHtcclxuICAgICAgICAgIC8vcmVjb3JkIG9mZnNldCB4IGFuZCB5LCBhcyB3ZWxsIGFzIHdpZHRoIGFuZCBoZWlnaHQgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZW0gbGF0ZXIgZm9yIHBvc2l0aW9uaW5nLiBHcmFiYmluZyB0aGVtIGF0IG9uY2UgZW5zdXJlcyB3ZSBkb24ndCB0cmlnZ2VyIGEgYnJvd3NlciBwYWludCAmIHdlIG1heGltaXplIHBlcmZvcm1hbmNlLlxyXG4gICAgICAgICAgbm9kZS5feCA9IG5vZGUub2Zmc2V0TGVmdDtcclxuICAgICAgICAgIG5vZGUuX3kgPSBvZmZzZXQ7XHJcbiAgICAgICAgICBub2RlLl93ID0gbm9kZS5vZmZzZXRXaWR0aDtcclxuICAgICAgICAgIG5vZGUuX2ggPSBub2RlLm9mZnNldEhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChsaW5lcykge1xyXG4gICAgICAgICAgaWYgKG5vZGUuX2lzU3BsaXQgJiYgaXNDaGlsZCB8fCAhY2hhcnMgJiYgaXNDaGlsZCB8fCB3b3JkcyAmJiBpc0NoaWxkIHx8ICF3b3JkcyAmJiBub2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZSA9PT0gZWxlbWVudCAmJiAhbm9kZS5wYXJlbnROb2RlLl9pc1NwbGl0KSB7XHJcbiAgICAgICAgICAgIGN1ckxpbmUucHVzaChub2RlKTtcclxuICAgICAgICAgICAgbm9kZS5feCAtPSBwYWRkaW5nTGVmdDtcclxuXHJcbiAgICAgICAgICAgIGlmIChfaXNCZWZvcmVXb3JkRGVsaW1pdGVyKG5vZGUsIGVsZW1lbnQsIHdvcmREZWxpbWl0ZXIpKSB7XHJcbiAgICAgICAgICAgICAgbm9kZS5fd29yZEVuZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gXCJCUlwiICYmIChub2RlLm5leHRTaWJsaW5nICYmIG5vZGUubmV4dFNpYmxpbmcubm9kZU5hbWUgPT09IFwiQlJcIiB8fCBpID09PSAwKSkge1xyXG4gICAgICAgICAgICAvL3R3byBjb25zZWN1dGl2ZSA8YnI+IHRhZ3Mgc2lnbmlmeSBhIG5ldyBbZW1wdHldIGxpbmUuIEFsc28sIGlmIHRoZSBlbnRpcmUgYmxvY2sgb2YgY29udGVudCBTVEFSVFMgd2l0aCBhIDxicj4sIGFkZCBhIGxpbmUuXHJcbiAgICAgICAgICAgIGxpbmVzLnB1c2goW10pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykge1xyXG4gICAgbm9kZSA9IG5vZGVzW2ldO1xyXG4gICAgaXNDaGlsZCA9IG5vZGUucGFyZW50Tm9kZSA9PT0gZWxlbWVudDtcclxuXHJcbiAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gXCJCUlwiKSB7XHJcbiAgICAgIGlmIChsaW5lcyB8fCBhYnNvbHV0ZSkge1xyXG4gICAgICAgIG5vZGUucGFyZW50Tm9kZSAmJiBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XHJcbiAgICAgICAgbm9kZXMuc3BsaWNlKGktLSwgMSk7XHJcbiAgICAgICAgbC0tO1xyXG4gICAgICB9IGVsc2UgaWYgKCF3b3Jkcykge1xyXG4gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQobm9kZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChhYnNvbHV0ZSkge1xyXG4gICAgICBzdHlsZSA9IG5vZGUuc3R5bGU7XHJcblxyXG4gICAgICBpZiAoIXdvcmRzICYmICFpc0NoaWxkKSB7XHJcbiAgICAgICAgbm9kZS5feCArPSBub2RlLnBhcmVudE5vZGUuX3g7XHJcbiAgICAgICAgbm9kZS5feSArPSBub2RlLnBhcmVudE5vZGUuX3k7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0eWxlLmxlZnQgPSBub2RlLl94ICsgXCJweFwiO1xyXG4gICAgICBzdHlsZS50b3AgPSBub2RlLl95ICsgXCJweFwiO1xyXG4gICAgICBzdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgICAgc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjsgLy9pZiB3ZSBkb24ndCBzZXQgdGhlIHdpZHRoL2hlaWdodCwgdGhpbmdzIGNvbGxhcHNlIGluIG9sZGVyIHZlcnNpb25zIG9mIElFIGFuZCB0aGUgb3JpZ2luIGZvciB0cmFuc2Zvcm1zIGlzIHRocm93biBvZmYgaW4gYWxsIGJyb3dzZXJzLlxyXG5cclxuICAgICAgc3R5bGUud2lkdGggPSBub2RlLl93ICsgMSArIFwicHhcIjsgLy9JRSBpcyAxcHggc2hvcnQgc29tZXRpbWVzLiBBdm9pZCB3cmFwcGluZ1xyXG5cclxuICAgICAgc3R5bGUuaGVpZ2h0ID0gbm9kZS5faCArIFwicHhcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXdvcmRzICYmIGNoYXJzKSB7XHJcbiAgICAgIC8vd2UgYWx3YXlzIHN0YXJ0IG91dCB3cmFwcGluZyB3b3JkcyBpbiB0aGVpciBvd24gPGRpdj4gc28gdGhhdCBsaW5lIGJyZWFrcyBoYXBwZW4gY29ycmVjdGx5LCBidXQgaGVyZSB3ZSdsbCByZW1vdmUgdGhvc2UgPGRpdj4gdGFncyBpZiBuZWNlc3NhcnkgYW5kIHJlLW5lc3QgdGhlIGNoYXJhY3RlcnMgZGlyZWN0bHkgaW50byB0aGUgZWxlbWVudCByYXRoZXIgdGhhbiBpbnNpZGUgdGhlIHdvcmQgPGRpdj5cclxuICAgICAgaWYgKG5vZGUuX2lzU3BsaXQpIHtcclxuICAgICAgICBub2RlLl9uZXh0ID0gaiA9IG5vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKG5vZGUpOyAvL3B1dCBpdCBhdCB0aGUgZW5kIHRvIGtlZXAgdGhlIG9yZGVyIGNvcnJlY3QuXHJcblxyXG4gICAgICAgIHdoaWxlIChqICYmIGoubm9kZVR5cGUgPT09IDMgJiYgai50ZXh0Q29udGVudCA9PT0gXCIgXCIpIHtcclxuICAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSBub2RlcyB0aGF0IGFyZSBqdXN0IGEgc3BhY2UgcmlnaHQgYWZ0ZXJ3YXJkLCBnbyBhaGVhZCBhbmQgYXBwZW5kIHRoZW0gdG8gdGhlIGVuZCBzbyB0aGV5J3JlIG5vdCBvdXQgb2Ygb3JkZXIuXHJcbiAgICAgICAgICBub2RlLl9uZXh0ID0gai5uZXh0U2libGluZztcclxuICAgICAgICAgIG5vZGUucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChqKTtcclxuICAgICAgICAgIGogPSBqLm5leHRTaWJsaW5nO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChub2RlLnBhcmVudE5vZGUuX2lzU3BsaXQpIHtcclxuICAgICAgICBub2RlLl9wYXJlbnQgPSBub2RlLnBhcmVudE5vZGU7XHJcblxyXG4gICAgICAgIGlmICghbm9kZS5wcmV2aW91c1NpYmxpbmcgJiYgbm9kZS5maXJzdENoaWxkKSB7XHJcbiAgICAgICAgICBub2RlLmZpcnN0Q2hpbGQuX2lzRmlyc3QgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG5vZGUubmV4dFNpYmxpbmcgJiYgbm9kZS5uZXh0U2libGluZy50ZXh0Q29udGVudCA9PT0gXCIgXCIgJiYgIW5vZGUubmV4dFNpYmxpbmcubmV4dFNpYmxpbmcpIHtcclxuICAgICAgICAgIC8vaWYgdGhlIGxhc3Qgbm9kZSBpbnNpZGUgYSBuZXN0ZWQgZWxlbWVudCBpcyBqdXN0IGEgc3BhY2UgKGxpa2UgVDxzcGFuPm5lc3RlZCA8L3NwYW4+KSwgcmVtb3ZlIGl0IG90aGVyd2lzZSBpdCdsbCBnZXQgcGxhY2VkIGluIHRoZSB3cm9uZyBvcmRlci4gRG9uJ3QgcmVtb3ZlIGl0IHJpZ2h0IGF3YXksIHRob3VnaCwgYmVjYXVzZSB3ZSBuZWVkIHRvIHNlbnNlIHdoZW4gd29yZHMvY2hhcmFjdGVycyBhcmUgYmVmb3JlIGEgc3BhY2UgbGlrZSBfaXNCZWZvcmVXb3JkRGVsaW1pdGVyKCkuIFJlbW92aW5nIGl0IG5vdyB3b3VsZCBtYWtlIHRoYXQgYSBmYWxzZSBuZWdhdGl2ZS5cclxuICAgICAgICAgIHNwYWNlTm9kZXNUb1JlbW92ZS5wdXNoKG5vZGUubmV4dFNpYmxpbmcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbm9kZS5fbmV4dCA9IG5vZGUubmV4dFNpYmxpbmcgJiYgbm9kZS5uZXh0U2libGluZy5faXNGaXJzdCA/IG51bGwgOiBub2RlLm5leHRTaWJsaW5nO1xyXG4gICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcclxuICAgICAgICBub2Rlcy5zcGxpY2UoaS0tLCAxKTtcclxuICAgICAgICBsLS07XHJcbiAgICAgIH0gZWxzZSBpZiAoIWlzQ2hpbGQpIHtcclxuICAgICAgICBvZmZzZXQgPSAhbm9kZS5uZXh0U2libGluZyAmJiBfaXNCZWZvcmVXb3JkRGVsaW1pdGVyKG5vZGUucGFyZW50Tm9kZSwgZWxlbWVudCwgd29yZERlbGltaXRlcik7IC8vaWYgdGhpcyBpcyB0aGUgbGFzdCBsZXR0ZXIgaW4gdGhlIHdvcmQgKGFuZCB3ZSdyZSBub3QgYnJlYWtpbmcgYnkgbGluZXMgYW5kIG5vdCBwb3NpdGlvbmluZyB0aGluZ3MgYWJzb2x1dGVseSksIHdlIG5lZWQgdG8gYWRkIGEgc3BhY2UgYWZ0ZXJ3YXJkcyBzbyB0aGF0IHRoZSBjaGFyYWN0ZXJzIGRvbid0IGp1c3QgbWFzaCB0b2dldGhlclxyXG5cclxuICAgICAgICBub2RlLnBhcmVudE5vZGUuX3BhcmVudCAmJiBub2RlLnBhcmVudE5vZGUuX3BhcmVudC5hcHBlbmRDaGlsZChub2RlKTtcclxuICAgICAgICBvZmZzZXQgJiYgbm9kZS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKF9kb2MuY3JlYXRlVGV4dE5vZGUoXCIgXCIpKTtcclxuXHJcbiAgICAgICAgaWYgKHRhZyA9PT0gXCJzcGFuXCIpIHtcclxuICAgICAgICAgIG5vZGUuc3R5bGUuZGlzcGxheSA9IFwiaW5saW5lXCI7IC8vc28gdGhhdCB3b3JkIGJyZWFrcyBhcmUgaG9ub3JlZCBwcm9wZXJseS5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNoYXJBcnJheS5wdXNoKG5vZGUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG5vZGUucGFyZW50Tm9kZS5faXNTcGxpdCAmJiAhbm9kZS5faXNTcGxpdCAmJiBub2RlLmlubmVySFRNTCAhPT0gXCJcIikge1xyXG4gICAgICB3b3JkQXJyYXkucHVzaChub2RlKTtcclxuICAgIH0gZWxzZSBpZiAoY2hhcnMgJiYgIW5vZGUuX2lzU3BsaXQpIHtcclxuICAgICAgaWYgKHRhZyA9PT0gXCJzcGFuXCIpIHtcclxuICAgICAgICBub2RlLnN0eWxlLmRpc3BsYXkgPSBcImlubGluZVwiO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjaGFyQXJyYXkucHVzaChub2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGkgPSBzcGFjZU5vZGVzVG9SZW1vdmUubGVuZ3RoO1xyXG5cclxuICB3aGlsZSAoLS1pID4gLTEpIHtcclxuICAgIHNwYWNlTm9kZXNUb1JlbW92ZVtpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNwYWNlTm9kZXNUb1JlbW92ZVtpXSk7XHJcbiAgfVxyXG5cclxuICBpZiAobGluZXMpIHtcclxuICAgIC8vdGhlIG5leHQgNyBsaW5lcyBqdXN0IGdpdmUgdXMgdGhlIGxpbmUgd2lkdGggaW4gdGhlIG1vc3QgcmVsaWFibGUgd2F5IGFuZCBmaWd1cmUgb3V0IHRoZSBsZWZ0IG9mZnNldCAoaWYgcG9zaXRpb24gaXNuJ3QgcmVsYXRpdmUgb3IgYWJzb2x1dGUpLiBXZSBtdXN0IHNldCB0aGUgd2lkdGggYWxvbmcgd2l0aCB0ZXh0LWFsaWduIHRvIGVuc3VyZSBldmVyeXRoaW5nIHdvcmtzIHByb3Blcmx5IGZvciB2YXJpb3VzIGFsaWdubWVudHMuXHJcbiAgICBpZiAoYWJzb2x1dGUpIHtcclxuICAgICAgbGluZU5vZGUgPSBfZG9jLmNyZWF0ZUVsZW1lbnQodGFnKTtcclxuICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChsaW5lTm9kZSk7XHJcbiAgICAgIGxpbmVXaWR0aCA9IGxpbmVOb2RlLm9mZnNldFdpZHRoICsgXCJweFwiO1xyXG4gICAgICBvZmZzZXQgPSBsaW5lTm9kZS5vZmZzZXRQYXJlbnQgPT09IGVsZW1lbnQgPyAwIDogZWxlbWVudC5vZmZzZXRMZWZ0O1xyXG4gICAgICBlbGVtZW50LnJlbW92ZUNoaWxkKGxpbmVOb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBzdHlsZSA9IGVsZW1lbnQuc3R5bGUuY3NzVGV4dDtcclxuICAgIGVsZW1lbnQuc3R5bGUuY3NzVGV4dCA9IFwiZGlzcGxheTpub25lO1wiOyAvL3RvIGltcHJvdmUgcGVyZm9ybWFuY2UsIHNldCBkaXNwbGF5Om5vbmUgb24gdGhlIGVsZW1lbnQgc28gdGhhdCB0aGUgYnJvd3NlciBkb2Vzbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgcmVmbG93aW5nIG9yIHJlbmRlcmluZyB3aGlsZSB3ZSdyZSByZW5lc3RpbmcgdGhpbmdzLiBXZSdsbCByZXZlcnQgdGhlIGNzc1RleHQgbGF0ZXIuXHJcbiAgICAvL3dlIGNhbid0IHVzZSBlbGVtZW50LmlubmVySFRNTCA9IFwiXCIgYmVjYXVzZSB0aGF0IGNhdXNlcyBJRSB0byBsaXRlcmFsbHkgZGVsZXRlIGFsbCB0aGUgbm9kZXMgYW5kIHRoZWlyIGNvbnRlbnQgZXZlbiB0aG91Z2ggd2UndmUgc3RvcmVkIHRoZW0gaW4gYW4gYXJyYXkhIFNvIHdlIG11c3QgbG9vcCB0aHJvdWdoIHRoZSBjaGlsZHJlbiBhbmQgcmVtb3ZlIHRoZW0uXHJcblxyXG4gICAgd2hpbGUgKGVsZW1lbnQuZmlyc3RDaGlsZCkge1xyXG4gICAgICBlbGVtZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQuZmlyc3RDaGlsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkV29yZFNwYWNlcyA9IHdvcmREZWxpbWl0ZXIgPT09IFwiIFwiICYmICghYWJzb2x1dGUgfHwgIXdvcmRzICYmICFjaGFycyk7XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGN1ckxpbmUgPSBsaW5lc1tpXTtcclxuICAgICAgbGluZU5vZGUgPSBfZG9jLmNyZWF0ZUVsZW1lbnQodGFnKTtcclxuICAgICAgbGluZU5vZGUuc3R5bGUuY3NzVGV4dCA9IFwiZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOlwiICsgdGV4dEFsaWduICsgXCI7cG9zaXRpb246XCIgKyAoYWJzb2x1dGUgPyBcImFic29sdXRlO1wiIDogXCJyZWxhdGl2ZTtcIik7XHJcblxyXG4gICAgICBpZiAobGluZXNDbGFzcykge1xyXG4gICAgICAgIGxpbmVOb2RlLmNsYXNzTmFtZSA9IGxpbmVzQ2xhc3MgKyAoaXRlcmF0ZUxpbmUgPyBpICsgMSA6IFwiXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsaW5lQXJyYXkucHVzaChsaW5lTm9kZSk7XHJcbiAgICAgIGwgPSBjdXJMaW5lLmxlbmd0aDtcclxuXHJcbiAgICAgIGZvciAoaiA9IDA7IGogPCBsOyBqKyspIHtcclxuICAgICAgICBpZiAoY3VyTGluZVtqXS5ub2RlTmFtZSAhPT0gXCJCUlwiKSB7XHJcbiAgICAgICAgICBub2RlID0gY3VyTGluZVtqXTtcclxuICAgICAgICAgIGxpbmVOb2RlLmFwcGVuZENoaWxkKG5vZGUpO1xyXG4gICAgICAgICAgYWRkV29yZFNwYWNlcyAmJiBub2RlLl93b3JkRW5kICYmIGxpbmVOb2RlLmFwcGVuZENoaWxkKF9kb2MuY3JlYXRlVGV4dE5vZGUoXCIgXCIpKTtcclxuXHJcbiAgICAgICAgICBpZiAoYWJzb2x1dGUpIHtcclxuICAgICAgICAgICAgaWYgKGogPT09IDApIHtcclxuICAgICAgICAgICAgICBsaW5lTm9kZS5zdHlsZS50b3AgPSBub2RlLl95ICsgXCJweFwiO1xyXG4gICAgICAgICAgICAgIGxpbmVOb2RlLnN0eWxlLmxlZnQgPSBwYWRkaW5nTGVmdCArIG9mZnNldCArIFwicHhcIjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbm9kZS5zdHlsZS50b3AgPSBcIjBweFwiO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9mZnNldCkge1xyXG4gICAgICAgICAgICAgIG5vZGUuc3R5bGUubGVmdCA9IG5vZGUuX3ggLSBvZmZzZXQgKyBcInB4XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChsID09PSAwKSB7XHJcbiAgICAgICAgLy9pZiB0aGVyZSBhcmUgbm8gbm9kZXMgaW4gdGhlIGxpbmUgKHR5cGljYWxseSBtZWFuaW5nIHRoZXJlIHdlcmUgdHdvIGNvbnNlY3V0aXZlIDxicj4gdGFncywganVzdCBhZGQgYSBub24tYnJlYWtpbmcgc3BhY2Ugc28gdGhhdCB0aGluZ3MgZGlzcGxheSBwcm9wZXJseS5cclxuICAgICAgICBsaW5lTm9kZS5pbm5lckhUTUwgPSBcIiZuYnNwO1wiO1xyXG4gICAgICB9IGVsc2UgaWYgKCF3b3JkcyAmJiAhY2hhcnMpIHtcclxuICAgICAgICBfZGVXb3JkaWZ5KGxpbmVOb2RlKTtcclxuXHJcbiAgICAgICAgX3N3YXBUZXh0KGxpbmVOb2RlLCBTdHJpbmcuZnJvbUNoYXJDb2RlKDE2MCksIFwiIFwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGFic29sdXRlKSB7XHJcbiAgICAgICAgbGluZU5vZGUuc3R5bGUud2lkdGggPSBsaW5lV2lkdGg7XHJcbiAgICAgICAgbGluZU5vZGUuc3R5bGUuaGVpZ2h0ID0gbm9kZS5faCArIFwicHhcIjtcclxuICAgICAgfVxyXG5cclxuICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChsaW5lTm9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZWxlbWVudC5zdHlsZS5jc3NUZXh0ID0gc3R5bGU7XHJcbiAgfSAvL2lmIGV2ZXJ5dGhpbmcgc2hpZnRzIHRvIGJlaW5nIHBvc2l0aW9uOmFic29sdXRlLCB0aGUgY29udGFpbmVyIGNhbiBjb2xsYXBzZSBpbiB0ZXJtcyBvZiBoZWlnaHQgb3Igd2lkdGgsIHNvIGZpeCB0aGF0IGhlcmUuXHJcblxyXG5cclxuICBpZiAoYWJzb2x1dGUpIHtcclxuICAgIGlmIChvcmlnSGVpZ2h0ID4gZWxlbWVudC5jbGllbnRIZWlnaHQpIHtcclxuICAgICAgZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBvcmlnSGVpZ2h0IC0gcGFkVG9wQW5kQm90dG9tICsgXCJweFwiO1xyXG5cclxuICAgICAgaWYgKGVsZW1lbnQuY2xpZW50SGVpZ2h0IDwgb3JpZ0hlaWdodCkge1xyXG4gICAgICAgIC8vSUU4IGFuZCBlYXJsaWVyIHVzZSBhIGRpZmZlcmVudCBib3ggbW9kZWwgLSB3ZSBtdXN0IGluY2x1ZGUgcGFkZGluZyBhbmQgYm9yZGVyc1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gb3JpZ0hlaWdodCArIGJvcmRlclRvcEFuZEJvdHRvbSArIFwicHhcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcmlnV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoKSB7XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBvcmlnV2lkdGggLSBwYWRMZWZ0QW5kUmlnaHQgKyBcInB4XCI7XHJcblxyXG4gICAgICBpZiAoZWxlbWVudC5jbGllbnRXaWR0aCA8IG9yaWdXaWR0aCkge1xyXG4gICAgICAgIC8vSUU4IGFuZCBlYXJsaWVyIHVzZSBhIGRpZmZlcmVudCBib3ggbW9kZWwgLSB3ZSBtdXN0IGluY2x1ZGUgcGFkZGluZyBhbmQgYm9yZGVyc1xyXG4gICAgICAgIGVsZW1lbnQuc3R5bGUud2lkdGggPSBvcmlnV2lkdGggKyBib3JkZXJMZWZ0QW5kUmlnaHQgKyBcInB4XCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzRmxleCAmJiAocHJldklubGluZURpc3BsYXkgPyBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBwcmV2SW5saW5lRGlzcGxheSA6IGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJkaXNwbGF5XCIpKTtcclxuXHJcbiAgX3B1c2hSZXZlcnNlZChhbGxDaGFycywgY2hhckFycmF5KTtcclxuXHJcbiAgd29yZHMgJiYgX3B1c2hSZXZlcnNlZChhbGxXb3Jkcywgd29yZEFycmF5KTtcclxuXHJcbiAgX3B1c2hSZXZlcnNlZChhbGxMaW5lcywgbGluZUFycmF5KTtcclxufSxcclxuICAgIF9zcGxpdFJhd1RleHQgPSBmdW5jdGlvbiBfc3BsaXRSYXdUZXh0KGVsZW1lbnQsIHZhcnMsIHdvcmRTdGFydCwgY2hhclN0YXJ0KSB7XHJcbiAgdmFyIHRhZyA9IHZhcnMudGFnID8gdmFycy50YWcgOiB2YXJzLnNwYW4gPyBcInNwYW5cIiA6IFwiZGl2XCIsXHJcbiAgICAgIHR5cGVzID0gdmFycy50eXBlIHx8IHZhcnMuc3BsaXQgfHwgXCJjaGFycyx3b3JkcyxsaW5lc1wiLFxyXG4gICAgICAvL3dvcmRzID0gKHR5cGVzLmluZGV4T2YoXCJ3b3Jkc1wiKSAhPT0gLTEpLFxyXG4gIGNoYXJzID0gfnR5cGVzLmluZGV4T2YoXCJjaGFyc1wiKSxcclxuICAgICAgYWJzb2x1dGUgPSBfaXNBYnNvbHV0ZSh2YXJzKSxcclxuICAgICAgd29yZERlbGltaXRlciA9IHZhcnMud29yZERlbGltaXRlciB8fCBcIiBcIixcclxuICAgICAgaXNXb3JkRGVsaW1pdGVyID0gZnVuY3Rpb24gaXNXb3JkRGVsaW1pdGVyKF9jaGFyKSB7XHJcbiAgICByZXR1cm4gX2NoYXIgPT09IHdvcmREZWxpbWl0ZXIgfHwgX2NoYXIgPT09IF9ub25CcmVha2luZ1NwYWNlICYmIHdvcmREZWxpbWl0ZXIgPT09IFwiIFwiO1xyXG4gIH0sXHJcbiAgICAgIHNwYWNlID0gd29yZERlbGltaXRlciAhPT0gXCIgXCIgPyBcIlwiIDogYWJzb2x1dGUgPyBcIiYjMTczOyBcIiA6IFwiIFwiLFxyXG4gICAgICB3b3JkRW5kID0gXCI8L1wiICsgdGFnICsgXCI+XCIsXHJcbiAgICAgIHdvcmRJc09wZW4gPSAxLFxyXG4gICAgICBzcGVjaWFsQ2hhcnMgPSB2YXJzLnNwZWNpYWxDaGFycyA/IHR5cGVvZiB2YXJzLnNwZWNpYWxDaGFycyA9PT0gXCJmdW5jdGlvblwiID8gdmFycy5zcGVjaWFsQ2hhcnMgOiBfZmluZFNwZWNpYWxDaGFycyA6IG51bGwsXHJcbiAgICAgIC8vc3BlY2lhbENoYXJzIGNhbiBiZSBhbiBhcnJheSBvciBhIGZ1bmN0aW9uLiBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgd2UgYWx3YXlzIHNldCB0aGlzIGxvY2FsIFwic3BlY2lhbENoYXJzXCIgdG8gYSBmdW5jdGlvbiB0byB3aGljaCB3ZSBwYXNzIHRoZSByZW1haW5pbmcgdGV4dCBhbmQgd2hhdGV2ZXIgdGhlIG9yaWdpbmFsIHZhcnMuc3BlY2lhbENoYXJzIHdhcyBzbyB0aGF0IGlmIGl0J3MgYW4gYXJyYXksIGl0IHdvcmtzIHdpdGggdGhlIF9maW5kU3BlY2lhbENoYXJzKCkgZnVuY3Rpb24uXHJcbiAgdGV4dCxcclxuICAgICAgc3BsaXRUZXh0LFxyXG4gICAgICBpLFxyXG4gICAgICBqLFxyXG4gICAgICBsLFxyXG4gICAgICBjaGFyYWN0ZXIsXHJcbiAgICAgIGhhc1RhZ1N0YXJ0LFxyXG4gICAgICB0ZXN0UmVzdWx0LFxyXG4gICAgICBjb250YWluZXIgPSBfZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXHJcbiAgICAgIHBhcmVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcclxuXHJcbiAgcGFyZW50Lmluc2VydEJlZm9yZShjb250YWluZXIsIGVsZW1lbnQpO1xyXG4gIGNvbnRhaW5lci50ZXh0Q29udGVudCA9IGVsZW1lbnQubm9kZVZhbHVlO1xyXG4gIHBhcmVudC5yZW1vdmVDaGlsZChlbGVtZW50KTtcclxuICBlbGVtZW50ID0gY29udGFpbmVyO1xyXG4gIHRleHQgPSBnZXRUZXh0KGVsZW1lbnQpO1xyXG4gIGhhc1RhZ1N0YXJ0ID0gdGV4dC5pbmRleE9mKFwiPFwiKSAhPT0gLTE7XHJcblxyXG4gIGlmICh2YXJzLnJlZHVjZVdoaXRlU3BhY2UgIT09IGZhbHNlKSB7XHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKF9tdWx0aXBsZVNwYWNlc0V4cCwgXCIgXCIpLnJlcGxhY2UoX3N0cmlwRXhwLCBcIlwiKTtcclxuICB9XHJcblxyXG4gIGlmIChoYXNUYWdTdGFydCkge1xyXG4gICAgdGV4dCA9IHRleHQuc3BsaXQoXCI8XCIpLmpvaW4oXCJ7e0xUfX1cIik7IC8vd2UgY2FuJ3QgbGVhdmUgXCI8XCIgaW4gdGhlIHN0cmluZywgb3Igd2hlbiB3ZSBzZXQgdGhlIGlubmVySFRNTCwgaXQgY2FuIGJlIGludGVycHJldGVkIGFzIGEgbm9kZVxyXG4gIH1cclxuXHJcbiAgbCA9IHRleHQubGVuZ3RoO1xyXG4gIHNwbGl0VGV4dCA9ICh0ZXh0LmNoYXJBdCgwKSA9PT0gXCIgXCIgPyBzcGFjZSA6IFwiXCIpICsgd29yZFN0YXJ0KCk7XHJcblxyXG4gIGZvciAoaSA9IDA7IGkgPCBsOyBpKyspIHtcclxuICAgIGNoYXJhY3RlciA9IHRleHQuY2hhckF0KGkpO1xyXG5cclxuICAgIGlmIChzcGVjaWFsQ2hhcnMgJiYgKHRlc3RSZXN1bHQgPSBzcGVjaWFsQ2hhcnModGV4dC5zdWJzdHIoaSksIHZhcnMuc3BlY2lhbENoYXJzKSkpIHtcclxuICAgICAgLy8gbG9vayBmb3IgYW55IHNwZWNpYWxDaGFycyB0aGF0IHdlcmUgZGVjbGFyZWQuIFJlbWVtYmVyLCB0aGV5IGNhbiBiZSBwYXNzZWQgaW4gbGlrZSB7c3BlY2lhbENoYXJzOltcIuCkruClgFwiLCBcIuCkquCkvlwiLCBcIuCkueCliFwiXX0gb3IgYSBmdW5jdGlvbiBjb3VsZCBiZSBkZWZpbmVkIGluc3RlYWQuIEVpdGhlciB3YXksIHRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IHNob3VsZCBiZSBncm91cGVkIHRvZ2V0aGVyIGZvciB0aGlzIFwiY2hhcmFjdGVyXCIuXHJcbiAgICAgIGNoYXJhY3RlciA9IHRleHQuc3Vic3RyKGksIHRlc3RSZXN1bHQgfHwgMSk7XHJcbiAgICAgIHNwbGl0VGV4dCArPSBjaGFycyAmJiBjaGFyYWN0ZXIgIT09IFwiIFwiID8gY2hhclN0YXJ0KCkgKyBjaGFyYWN0ZXIgKyBcIjwvXCIgKyB0YWcgKyBcIj5cIiA6IGNoYXJhY3RlcjtcclxuICAgICAgaSArPSB0ZXN0UmVzdWx0IC0gMTtcclxuICAgIH0gZWxzZSBpZiAoaXNXb3JkRGVsaW1pdGVyKGNoYXJhY3RlcikgJiYgIWlzV29yZERlbGltaXRlcih0ZXh0LmNoYXJBdChpIC0gMSkpICYmIGkpIHtcclxuICAgICAgc3BsaXRUZXh0ICs9IHdvcmRJc09wZW4gPyB3b3JkRW5kIDogXCJcIjtcclxuICAgICAgd29yZElzT3BlbiA9IDA7XHJcblxyXG4gICAgICB3aGlsZSAoaXNXb3JkRGVsaW1pdGVyKHRleHQuY2hhckF0KGkgKyAxKSkpIHtcclxuICAgICAgICAvL3NraXAgb3ZlciBlbXB0eSBzcGFjZXMgKHRvIGF2b2lkIG1ha2luZyB0aGVtIHdvcmRzKVxyXG4gICAgICAgIHNwbGl0VGV4dCArPSBzcGFjZTtcclxuICAgICAgICBpKys7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpID09PSBsIC0gMSkge1xyXG4gICAgICAgIHNwbGl0VGV4dCArPSBzcGFjZTtcclxuICAgICAgfSBlbHNlIGlmICh0ZXh0LmNoYXJBdChpICsgMSkgIT09IFwiKVwiKSB7XHJcbiAgICAgICAgc3BsaXRUZXh0ICs9IHNwYWNlICsgd29yZFN0YXJ0KCk7XHJcbiAgICAgICAgd29yZElzT3BlbiA9IDE7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyID09PSBcIntcIiAmJiB0ZXh0LnN1YnN0cihpLCA2KSA9PT0gXCJ7e0xUfX1cIikge1xyXG4gICAgICBzcGxpdFRleHQgKz0gY2hhcnMgPyBjaGFyU3RhcnQoKSArIFwie3tMVH19XCIgKyBcIjwvXCIgKyB0YWcgKyBcIj5cIiA6IFwie3tMVH19XCI7XHJcbiAgICAgIGkgKz0gNTtcclxuICAgIH0gZWxzZSBpZiAoY2hhcmFjdGVyLmNoYXJDb2RlQXQoMCkgPj0gMHhEODAwICYmIGNoYXJhY3Rlci5jaGFyQ29kZUF0KDApIDw9IDB4REJGRiB8fCB0ZXh0LmNoYXJDb2RlQXQoaSArIDEpID49IDB4RkUwMCAmJiB0ZXh0LmNoYXJDb2RlQXQoaSArIDEpIDw9IDB4RkUwRikge1xyXG4gICAgICAvL3NwZWNpYWwgZW1vamkgY2hhcmFjdGVycyB1c2UgMiBvciA0IHVuaWNvZGUgY2hhcmFjdGVycyB0aGF0IHdlIG11c3Qga2VlcCB0b2dldGhlci5cclxuICAgICAgaiA9ICgodGV4dC5zdWJzdHIoaSwgMTIpLnNwbGl0KGVtb2ppRXhwKSB8fCBbXSlbMV0gfHwgXCJcIikubGVuZ3RoIHx8IDI7XHJcbiAgICAgIHNwbGl0VGV4dCArPSBjaGFycyAmJiBjaGFyYWN0ZXIgIT09IFwiIFwiID8gY2hhclN0YXJ0KCkgKyB0ZXh0LnN1YnN0cihpLCBqKSArIFwiPC9cIiArIHRhZyArIFwiPlwiIDogdGV4dC5zdWJzdHIoaSwgaik7XHJcbiAgICAgIGkgKz0gaiAtIDE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzcGxpdFRleHQgKz0gY2hhcnMgJiYgY2hhcmFjdGVyICE9PSBcIiBcIiA/IGNoYXJTdGFydCgpICsgY2hhcmFjdGVyICsgXCI8L1wiICsgdGFnICsgXCI+XCIgOiBjaGFyYWN0ZXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbGVtZW50Lm91dGVySFRNTCA9IHNwbGl0VGV4dCArICh3b3JkSXNPcGVuID8gd29yZEVuZCA6IFwiXCIpO1xyXG4gIGhhc1RhZ1N0YXJ0ICYmIF9zd2FwVGV4dChwYXJlbnQsIFwie3tMVH19XCIsIFwiPFwiKTsgLy9ub3RlOiBkb24ndCBwZXJmb3JtIHRoaXMgb24gXCJlbGVtZW50XCIgYmVjYXVzZSB0aGF0IGdldHMgcmVwbGFjZWQgd2l0aCBhbGwgbmV3IGVsZW1lbnRzIHdoZW4gd2Ugc2V0IGVsZW1lbnQub3V0ZXJIVE1MLlxyXG59LFxyXG4gICAgX3NwbGl0ID0gZnVuY3Rpb24gX3NwbGl0KGVsZW1lbnQsIHZhcnMsIHdvcmRTdGFydCwgY2hhclN0YXJ0KSB7XHJcbiAgdmFyIGNoaWxkcmVuID0gX3RvQXJyYXkoZWxlbWVudC5jaGlsZE5vZGVzKSxcclxuICAgICAgbCA9IGNoaWxkcmVuLmxlbmd0aCxcclxuICAgICAgYWJzb2x1dGUgPSBfaXNBYnNvbHV0ZSh2YXJzKSxcclxuICAgICAgaSxcclxuICAgICAgY2hpbGQ7XHJcblxyXG4gIGlmIChlbGVtZW50Lm5vZGVUeXBlICE9PSAzIHx8IGwgPiAxKSB7XHJcbiAgICB2YXJzLmFic29sdXRlID0gZmFsc2U7XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xyXG4gICAgICBjaGlsZC5fbmV4dCA9IGNoaWxkLl9pc0ZpcnN0ID0gY2hpbGQuX3BhcmVudCA9IGNoaWxkLl93b3JkRW5kID0gbnVsbDtcclxuXHJcbiAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSAhPT0gMyB8fCAvXFxTKy8udGVzdChjaGlsZC5ub2RlVmFsdWUpKSB7XHJcbiAgICAgICAgaWYgKGFic29sdXRlICYmIGNoaWxkLm5vZGVUeXBlICE9PSAzICYmIF9nZXRDb21wdXRlZFN0eWxlKGNoaWxkKS5kaXNwbGF5ID09PSBcImlubGluZVwiKSB7XHJcbiAgICAgICAgICAvL2lmIHRoZXJlJ3MgYSBjaGlsZCBub2RlIHRoYXQncyBkaXNwbGF5OmlubGluZSwgc3dpdGNoIGl0IHRvIGlubGluZS1ibG9jayBzbyB0aGF0IGFic29sdXRlIHBvc2l0aW9uaW5nIHdvcmtzIHByb3Blcmx5IChtb3N0IGJyb3dzZXJzIGRvbid0IHJlcG9ydCBvZmZzZXRUb3Avb2Zmc2V0TGVmdCBwcm9wZXJseSBpbnNpZGUgYSA8c3Bhbj4gZm9yIGV4YW1wbGUpXHJcbiAgICAgICAgICBjaGlsZC5zdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcclxuICAgICAgICAgIGNoaWxkLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY2hpbGQuX2lzU3BsaXQgPSB0cnVlO1xyXG5cclxuICAgICAgICBfc3BsaXQoY2hpbGQsIHZhcnMsIHdvcmRTdGFydCwgY2hhclN0YXJ0KTsgLy9kb24ndCBzcGxpdCBsaW5lcyBvbiBjaGlsZCBlbGVtZW50c1xyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhcnMuYWJzb2x1dGUgPSBhYnNvbHV0ZTtcclxuICAgIGVsZW1lbnQuX2lzU3BsaXQgPSB0cnVlO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgX3NwbGl0UmF3VGV4dChlbGVtZW50LCB2YXJzLCB3b3JkU3RhcnQsIGNoYXJTdGFydCk7XHJcbn07XHJcblxyXG5leHBvcnQgdmFyIFNwbGl0VGV4dCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XHJcbiAgZnVuY3Rpb24gU3BsaXRUZXh0KGVsZW1lbnQsIHZhcnMpIHtcclxuICAgIF9jb3JlSW5pdHRlZCB8fCBfaW5pdENvcmUoKTtcclxuICAgIHRoaXMuZWxlbWVudHMgPSBfdG9BcnJheShlbGVtZW50KTtcclxuICAgIHRoaXMuY2hhcnMgPSBbXTtcclxuICAgIHRoaXMud29yZHMgPSBbXTtcclxuICAgIHRoaXMubGluZXMgPSBbXTtcclxuICAgIHRoaXMuX29yaWdpbmFscyA9IFtdO1xyXG4gICAgdGhpcy52YXJzID0gdmFycyB8fCB7fTtcclxuXHJcbiAgICBfY29udGV4dCh0aGlzKTtcclxuXHJcbiAgICBfYm9udXNWYWxpZGF0ZWQgJiYgdGhpcy5zcGxpdCh2YXJzKTtcclxuICB9XHJcblxyXG4gIHZhciBfcHJvdG8gPSBTcGxpdFRleHQucHJvdG90eXBlO1xyXG5cclxuICBfcHJvdG8uc3BsaXQgPSBmdW5jdGlvbiBzcGxpdCh2YXJzKSB7XHJcbiAgICB0aGlzLmlzU3BsaXQgJiYgdGhpcy5yZXZlcnQoKTtcclxuICAgIHRoaXMudmFycyA9IHZhcnMgPSB2YXJzIHx8IHRoaXMudmFycztcclxuICAgIHRoaXMuX29yaWdpbmFscy5sZW5ndGggPSB0aGlzLmNoYXJzLmxlbmd0aCA9IHRoaXMud29yZHMubGVuZ3RoID0gdGhpcy5saW5lcy5sZW5ndGggPSAwO1xyXG5cclxuICAgIHZhciBpID0gdGhpcy5lbGVtZW50cy5sZW5ndGgsXHJcbiAgICAgICAgdGFnID0gdmFycy50YWcgPyB2YXJzLnRhZyA6IHZhcnMuc3BhbiA/IFwic3BhblwiIDogXCJkaXZcIixcclxuICAgICAgICB3b3JkU3RhcnQgPSBfY3NzQ2xhc3NGdW5jKHZhcnMud29yZHNDbGFzcywgdGFnKSxcclxuICAgICAgICBjaGFyU3RhcnQgPSBfY3NzQ2xhc3NGdW5jKHZhcnMuY2hhcnNDbGFzcywgdGFnKSxcclxuICAgICAgICBvcmlnSGVpZ2h0LFxyXG4gICAgICAgIG9yaWdXaWR0aCxcclxuICAgICAgICBlOyAvL3dlIHNwbGl0IGluIHJldmVyc2VkIG9yZGVyIHNvIHRoYXQgaWYvd2hlbiB3ZSBwb3NpdGlvbjphYnNvbHV0ZSBlbGVtZW50cywgdGhleSBkb24ndCBhZmZlY3QgdGhlIHBvc2l0aW9uIG9mIHRoZSBvbmVzIGFmdGVyIHRoZW0gaW4gdGhlIGRvY3VtZW50IGZsb3cgKHNoaWZ0aW5nIHRoZW0gdXAgYXMgdGhleSdyZSB0YWtlbiBvdXQgb2YgdGhlIGRvY3VtZW50IGZsb3cpLlxyXG5cclxuXHJcbiAgICB3aGlsZSAoLS1pID4gLTEpIHtcclxuICAgICAgZSA9IHRoaXMuZWxlbWVudHNbaV07XHJcbiAgICAgIHRoaXMuX29yaWdpbmFsc1tpXSA9IHtcclxuICAgICAgICBodG1sOiBlLmlubmVySFRNTCxcclxuICAgICAgICBzdHlsZTogZS5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKVxyXG4gICAgICB9O1xyXG4gICAgICBvcmlnSGVpZ2h0ID0gZS5jbGllbnRIZWlnaHQ7XHJcbiAgICAgIG9yaWdXaWR0aCA9IGUuY2xpZW50V2lkdGg7XHJcblxyXG4gICAgICBfc3BsaXQoZSwgdmFycywgd29yZFN0YXJ0LCBjaGFyU3RhcnQpO1xyXG5cclxuICAgICAgX3NldFBvc2l0aW9uc0FmdGVyU3BsaXQoZSwgdmFycywgdGhpcy5jaGFycywgdGhpcy53b3JkcywgdGhpcy5saW5lcywgb3JpZ1dpZHRoLCBvcmlnSGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYXJzLnJldmVyc2UoKTtcclxuICAgIHRoaXMud29yZHMucmV2ZXJzZSgpO1xyXG4gICAgdGhpcy5saW5lcy5yZXZlcnNlKCk7XHJcbiAgICB0aGlzLmlzU3BsaXQgPSB0cnVlO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfTtcclxuXHJcbiAgX3Byb3RvLnJldmVydCA9IGZ1bmN0aW9uIHJldmVydCgpIHtcclxuICAgIHZhciBvcmlnaW5hbHMgPSB0aGlzLl9vcmlnaW5hbHM7XHJcblxyXG4gICAgaWYgKCFvcmlnaW5hbHMpIHtcclxuICAgICAgdGhyb3cgXCJyZXZlcnQoKSBjYWxsIHdhc24ndCBzY29wZWQgcHJvcGVybHkuXCI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlLCBpKSB7XHJcbiAgICAgIGUuaW5uZXJIVE1MID0gb3JpZ2luYWxzW2ldLmh0bWw7XHJcbiAgICAgIGUuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgb3JpZ2luYWxzW2ldLnN0eWxlKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jaGFycyA9IFtdO1xyXG4gICAgdGhpcy53b3JkcyA9IFtdO1xyXG4gICAgdGhpcy5saW5lcyA9IFtdO1xyXG4gICAgdGhpcy5pc1NwbGl0ID0gZmFsc2U7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICBTcGxpdFRleHQuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGVsZW1lbnQsIHZhcnMpIHtcclxuICAgIHJldHVybiBuZXcgU3BsaXRUZXh0KGVsZW1lbnQsIHZhcnMpO1xyXG4gIH07XHJcblxyXG4gIHJldHVybiBTcGxpdFRleHQ7XHJcbn0oKTtcclxuU3BsaXRUZXh0LnZlcnNpb24gPSBcIjMuMTIuNVwiO1xyXG5TcGxpdFRleHQucmVnaXN0ZXIgPSBfaW5pdENvcmU7XHJcbmV4cG9ydCB7IFNwbGl0VGV4dCBhcyBkZWZhdWx0IH07Il0sIm5hbWVzIjpbImVtb2ppRXhwIiwiZ2V0VGV4dCIsIl9kb2MiLCJfd2luIiwiX2NvcmVJbml0dGVkIiwiZ3NhcCIsIl9jb250ZXh0IiwiX3RvQXJyYXkiLCJfc3RyaXBFeHAiLCJfbXVsdGlwbGVTcGFjZXNFeHAiLCJfbm9uQnJlYWtpbmdTcGFjZSIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsIl9pbml0Q29yZSIsImNvcmUiLCJkb2N1bWVudCIsIndpbmRvdyIsImNvbnNvbGUiLCJ3YXJuIiwidXRpbHMiLCJ0b0FycmF5IiwiY29udGV4dCIsIl9ib251c1ZhbGlkYXRlZCIsIl9nZXRDb21wdXRlZFN0eWxlIiwiZWxlbWVudCIsImdldENvbXB1dGVkU3R5bGUiLCJfaXNBYnNvbHV0ZSIsInZhcnMiLCJwb3NpdGlvbiIsImFic29sdXRlIiwiX2ZpbmRTcGVjaWFsQ2hhcnMiLCJ0ZXh0IiwiY2hhcnMiLCJpIiwibGVuZ3RoIiwicyIsInN1YnN0ciIsIl9kaXZTdGFydCIsIl9jc3NDbGFzc0Z1bmMiLCJjc3NDbGFzcyIsInRhZyIsIml0ZXJhdGUiLCJpbmRleE9mIiwibnVtIiwic3BsaXQiLCJqb2luIiwiX3N3YXBUZXh0Iiwib2xkVGV4dCIsIm5ld1RleHQiLCJ0eXBlIiwibm9kZVR5cGUiLCJmaXJzdENoaWxkIiwibmV4dFNpYmxpbmciLCJub2RlVmFsdWUiLCJfcHVzaFJldmVyc2VkIiwiYSIsIm1lcmdlIiwicHVzaCIsIl9pc0JlZm9yZVdvcmREZWxpbWl0ZXIiLCJlIiwicm9vdCIsIndvcmREZWxpbWl0ZXIiLCJuZXh0IiwiX25leHQiLCJ0ZXh0Q29udGVudCIsImNoYXJBdCIsInBhcmVudE5vZGUiLCJfcGFyZW50IiwiX2RlV29yZGlmeSIsImNoaWxkcmVuIiwiY2hpbGROb2RlcyIsImwiLCJjaGlsZCIsIl9pc1NwbGl0IiwicHJldmlvdXNTaWJsaW5nIiwicmVtb3ZlQ2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJfZ2V0U3R5bGVBc051bWJlciIsIm5hbWUiLCJjb21wdXRlZFN0eWxlIiwicGFyc2VGbG9hdCIsIl9zZXRQb3NpdGlvbnNBZnRlclNwbGl0IiwiYWxsQ2hhcnMiLCJhbGxXb3JkcyIsImFsbExpbmVzIiwib3JpZ1dpZHRoIiwib3JpZ0hlaWdodCIsImNzIiwicGFkZGluZ0xlZnQiLCJsaW5lT2Zmc2V0WSIsImJvcmRlclRvcEFuZEJvdHRvbSIsImJvcmRlckxlZnRBbmRSaWdodCIsInBhZFRvcEFuZEJvdHRvbSIsInBhZExlZnRBbmRSaWdodCIsImxpbmVUaHJlc2hvbGQiLCJ0ZXh0QWxpZ24iLCJjaGFyQXJyYXkiLCJ3b3JkQXJyYXkiLCJsaW5lQXJyYXkiLCJzcGFuIiwidHlwZXMiLCJsaW5lcyIsIndvcmRzIiwibGluZXNDbGFzcyIsIml0ZXJhdGVMaW5lIiwic3BhY2VOb2Rlc1RvUmVtb3ZlIiwiaXNGbGV4IiwiZGlzcGxheSIsInByZXZJbmxpbmVEaXNwbGF5Iiwic3R5bGUiLCJqIiwibm9kZSIsIm5vZGVzIiwiaXNDaGlsZCIsImN1ckxpbmUiLCJhZGRXb3JkU3BhY2VzIiwibGluZU5vZGUiLCJsaW5lV2lkdGgiLCJvZmZzZXQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsIm9mZnNldFRvcCIsIk1hdGgiLCJhYnMiLCJub2RlTmFtZSIsIl94Iiwib2Zmc2V0TGVmdCIsIl95IiwiX3ciLCJvZmZzZXRXaWR0aCIsIl9oIiwib2Zmc2V0SGVpZ2h0IiwiX3dvcmRFbmQiLCJzcGxpY2UiLCJhcHBlbmRDaGlsZCIsImxlZnQiLCJ0b3AiLCJ3aWR0aCIsImhlaWdodCIsIl9pc0ZpcnN0IiwiY3JlYXRlVGV4dE5vZGUiLCJpbm5lckhUTUwiLCJjcmVhdGVFbGVtZW50Iiwib2Zmc2V0UGFyZW50IiwiY3NzVGV4dCIsImNsYXNzTmFtZSIsImNsaWVudEhlaWdodCIsImNsaWVudFdpZHRoIiwicmVtb3ZlUHJvcGVydHkiLCJfc3BsaXRSYXdUZXh0Iiwid29yZFN0YXJ0IiwiY2hhclN0YXJ0IiwiaXNXb3JkRGVsaW1pdGVyIiwiX2NoYXIiLCJzcGFjZSIsIndvcmRFbmQiLCJ3b3JkSXNPcGVuIiwic3BlY2lhbENoYXJzIiwic3BsaXRUZXh0IiwiY2hhcmFjdGVyIiwiaGFzVGFnU3RhcnQiLCJ0ZXN0UmVzdWx0IiwiY29udGFpbmVyIiwicGFyZW50IiwicmVkdWNlV2hpdGVTcGFjZSIsInJlcGxhY2UiLCJjaGFyQ29kZUF0Iiwib3V0ZXJIVE1MIiwiX3NwbGl0IiwidGVzdCIsIlNwbGl0VGV4dCIsImVsZW1lbnRzIiwiX29yaWdpbmFscyIsIl9wcm90byIsInByb3RvdHlwZSIsImlzU3BsaXQiLCJyZXZlcnQiLCJ3b3Jkc0NsYXNzIiwiY2hhcnNDbGFzcyIsImh0bWwiLCJnZXRBdHRyaWJ1dGUiLCJyZXZlcnNlIiwib3JpZ2luYWxzIiwiZm9yRWFjaCIsInNldEF0dHJpYnV0ZSIsImNyZWF0ZSIsInZlcnNpb24iLCJyZWdpc3RlciIsImRlZmF1bHQiXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./libs/gsap/SplitText.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./libs/gsap/utils/strings.js\":\r\n/*!************************************!*\\\r\n  !*** ./libs/gsap/utils/strings.js ***!\r\n  \\************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"emojiExp\\\": () => (/* binding */ emojiExp),\\n/* harmony export */   \\\"emojiSafeSplit\\\": () => (/* binding */ emojiSafeSplit),\\n/* harmony export */   \\\"getText\\\": () => (/* binding */ getText),\\n/* harmony export */   \\\"splitInnerHTML\\\": () => (/* binding */ splitInnerHTML)\\n/* harmony export */ });\\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; }\\n/*!\\r\\n * strings: 3.12.5\\r\\n * https://gsap.com\\r\\n *\\r\\n * Copyright 2008-2024, GreenSock. All rights reserved.\\r\\n * Subject to the terms at https://gsap.com/standard-license or for\\r\\n * Club GSAP members, the agreement issued with that membership.\\r\\n * @author: Jack Doyle, jack@greensock.com\\r\\n*/\\n/* eslint-disable */\\n\\nvar _trimExp = /(?:^\\\\s+|\\\\s+$)/g;\\nvar emojiExp = /([\\\\uD800-\\\\uDBFF][\\\\uDC00-\\\\uDFFF](?:[\\\\u200D\\\\uFE0F][\\\\uD800-\\\\uDBFF][\\\\uDC00-\\\\uDFFF]){2,}|\\\\uD83D\\\\uDC69(?:\\\\u200D(?:(?:\\\\uD83D\\\\uDC69\\\\u200D)?\\\\uD83D\\\\uDC67|(?:\\\\uD83D\\\\uDC69\\\\u200D)?\\\\uD83D\\\\uDC66)|\\\\uD83C[\\\\uDFFB-\\\\uDFFF])|\\\\uD83D\\\\uDC69\\\\u200D(?:\\\\uD83D\\\\uDC69\\\\u200D)?\\\\uD83D\\\\uDC66\\\\u200D\\\\uD83D\\\\uDC66|\\\\uD83D\\\\uDC69\\\\u200D(?:\\\\uD83D\\\\uDC69\\\\u200D)?\\\\uD83D\\\\uDC67\\\\u200D(?:\\\\uD83D[\\\\uDC66\\\\uDC67])|\\\\uD83C\\\\uDFF3\\\\uFE0F\\\\u200D\\\\uD83C\\\\uDF08|(?:\\\\uD83C[\\\\uDFC3\\\\uDFC4\\\\uDFCA]|\\\\uD83D[\\\\uDC6E\\\\uDC71\\\\uDC73\\\\uDC77\\\\uDC81\\\\uDC82\\\\uDC86\\\\uDC87\\\\uDE45-\\\\uDE47\\\\uDE4B\\\\uDE4D\\\\uDE4E\\\\uDEA3\\\\uDEB4-\\\\uDEB6]|\\\\uD83E[\\\\uDD26\\\\uDD37-\\\\uDD39\\\\uDD3D\\\\uDD3E\\\\uDDD6-\\\\uDDDD])(?:\\\\uD83C[\\\\uDFFB-\\\\uDFFF])\\\\u200D[\\\\u2640\\\\u2642]\\\\uFE0F|\\\\uD83D\\\\uDC69(?:\\\\uD83C[\\\\uDFFB-\\\\uDFFF])\\\\u200D(?:\\\\uD83C[\\\\uDF3E\\\\uDF73\\\\uDF93\\\\uDFA4\\\\uDFA8\\\\uDFEB\\\\uDFED]|\\\\uD83D[\\\\uDCBB\\\\uDCBC\\\\uDD27\\\\uDD2C\\\\uDE80\\\\uDE92])|(?:\\\\uD83C[\\\\uDFC3\\\\uDFC4\\\\uDFCA]|\\\\uD83D[\\\\uDC6E\\\\uDC6F\\\\uDC71\\\\uDC73\\\\uDC77\\\\uDC81\\\\uDC82\\\\uDC86\\\\uDC87\\\\uDE45-\\\\uDE47\\\\uDE4B\\\\uDE4D\\\\uDE4E\\\\uDEA3\\\\uDEB4-\\\\uDEB6]|\\\\uD83E[\\\\uDD26\\\\uDD37-\\\\uDD39\\\\uDD3C-\\\\uDD3E\\\\uDDD6-\\\\uDDDF])\\\\u200D[\\\\u2640\\\\u2642]\\\\uFE0F|\\\\uD83C\\\\uDDFD\\\\uD83C\\\\uDDF0|\\\\uD83C\\\\uDDF6\\\\uD83C\\\\uDDE6|\\\\uD83C\\\\uDDF4\\\\uD83C\\\\uDDF2|\\\\uD83C\\\\uDDE9(?:\\\\uD83C[\\\\uDDEA\\\\uDDEC\\\\uDDEF\\\\uDDF0\\\\uDDF2\\\\uDDF4\\\\uDDFF])|\\\\uD83C\\\\uDDF7(?:\\\\uD83C[\\\\uDDEA\\\\uDDF4\\\\uDDF8\\\\uDDFA\\\\uDDFC])|\\\\uD83C\\\\uDDE8(?:\\\\uD83C[\\\\uDDE6\\\\uDDE8\\\\uDDE9\\\\uDDEB-\\\\uDDEE\\\\uDDF0-\\\\uDDF5\\\\uDDF7\\\\uDDFA-\\\\uDDFF])|(?:\\\\u26F9|\\\\uD83C[\\\\uDFCB\\\\uDFCC]|\\\\uD83D\\\\uDD75)(?:\\\\uFE0F\\\\u200D[\\\\u2640\\\\u2642]|(?:\\\\uD83C[\\\\uDFFB-\\\\uDFFF])\\\\u200D[\\\\u2640\\\\u2642])\\\\uFE0F|(?:\\\\uD83D\\\\uDC41\\\\uFE0F\\\\u200D\\\\uD83D\\\\uDDE8|\\\\uD83D\\\\uDC69(?:\\\\uD83C[\\\\uDFFB-\\\\uDFFF])\\\\u200D[\\\\u2695\\\\u2696\\\\u2708]|\\\\uD83D\\\\uDC69\\\\u200D[\\\\u2695\\\\u2696\\\\u2708]|\\\\uD83D\\\\uDC68(?:(?:\\\\uD83C[\\\\uDFFB-\\\\uDFFF])\\\\u200D[\\\\u2695\\\\u2696\\\\u2708]|\\\\u200D[\\\\u2695\\\\u2696\\\\u2708]))\\\\uFE0F|\\\\uD83C\\\\uDDF2(?:\\\\uD83C[\\\\uDDE6\\\\uDDE8-\\\\uDDED\\\\uDDF0-\\\\uDDFF])|\\\\uD83D\\\\uDC69\\\\u200D(?:\\\\uD83C[\\\\uDF3E\\\\uDF73\\\\uDF93\\\\uDFA4\\\\uDFA8\\\\uDFEB\\\\uDFED]|\\\\uD83D[\\\\uDCBB\\\\uDCBC\\\\uDD27\\\\uDD2C\\\\uDE80\\\\uDE92]|\\\\u2764\\\\uFE0F\\\\u200D(?:\\\\uD83D\\\\uDC8B\\\\u200D(?:\\\\uD83D[\\\\uDC68\\\\uDC69])|\\\\uD83D[\\\\uDC68\\\\uDC69]))|\\\\uD83C\\\\uDDF1(?:\\\\uD83C[\\\\uDDE6-\\\\uDDE8\\\\uDDEE\\\\uDDF0\\\\uDDF7-\\\\uDDFB\\\\uDDFE])|\\\\uD83C\\\\uDDEF(?:\\\\uD83C[\\\\uDDEA\\\\uDDF2\\\\uDDF4\\\\uDDF5])|\\\\uD83C\\\\uDDED(?:\\\\uD83C[\\\\uDDF0\\\\uDDF2\\\\uDDF3\\\\uDDF7\\\\uDDF9\\\\uDDFA])|\\\\uD83C\\\\uDDEB(?:\\\\uD83C[\\\\uDDEE-\\\\uDDF0\\\\uDDF2\\\\uDDF4\\\\uDDF7])|[#\\\\*0-9]\\\\uFE0F\\\\u20E3|\\\\uD83C\\\\uDDE7(?:\\\\uD83C[\\\\uDDE6\\\\uDDE7\\\\uDDE9-\\\\uDDEF\\\\uDDF1-\\\\uDDF4\\\\uDDF6-\\\\uDDF9\\\\uDDFB\\\\uDDFC\\\\uDDFE\\\\uDDFF])|\\\\uD83C\\\\uDDE6(?:\\\\uD83C[\\\\uDDE8-\\\\uDDEC\\\\uDDEE\\\\uDDF1\\\\uDDF2\\\\uDDF4\\\\uDDF6-\\\\uDDFA\\\\uDDFC\\\\uDDFD\\\\uDDFF])|\\\\uD83C\\\\uDDFF(?:\\\\uD83C[\\\\uDDE6\\\\uDDF2\\\\uDDFC])|\\\\uD83C\\\\uDDF5(?:\\\\uD83C[\\\\uDDE6\\\\uDDEA-\\\\uDDED\\\\uDDF0-\\\\uDDF3\\\\uDDF7-\\\\uDDF9\\\\uDDFC\\\\uDDFE])|\\\\uD83C\\\\uDDFB(?:\\\\uD83C[\\\\uDDE6\\\\uDDE8\\\\uDDEA\\\\uDDEC\\\\uDDEE\\\\uDDF3\\\\uDDFA])|\\\\uD83C\\\\uDDF3(?:\\\\uD83C[\\\\uDDE6\\\\uDDE8\\\\uDDEA-\\\\uDDEC\\\\uDDEE\\\\uDDF1\\\\uDDF4\\\\uDDF5\\\\uDDF7\\\\uDDFA\\\\uDDFF])|\\\\uD83C\\\\uDFF4\\\\uDB40\\\\uDC67\\\\uDB40\\\\uDC62(?:\\\\uDB40\\\\uDC77\\\\uDB40\\\\uDC6C\\\\uDB40\\\\uDC73|\\\\uDB40\\\\uDC73\\\\uDB40\\\\uDC63\\\\uDB40\\\\uDC74|\\\\uDB40\\\\uDC65\\\\uDB40\\\\uDC6E\\\\uDB40\\\\uDC67)\\\\uDB40\\\\uDC7F|\\\\uD83D\\\\uDC68(?:\\\\u200D(?:\\\\u2764\\\\uFE0F\\\\u200D(?:\\\\uD83D\\\\uDC8B\\\\u200D)?\\\\uD83D\\\\uDC68|(?:(?:\\\\uD83D[\\\\uDC68\\\\uDC69])\\\\u200D)?\\\\uD83D\\\\uDC66\\\\u200D\\\\uD83D\\\\uDC66|(?:(?:\\\\uD83D[\\\\uDC68\\\\uDC69])\\\\u200D)?\\\\uD83D\\\\uDC67\\\\u200D(?:\\\\uD83D[\\\\uDC66\\\\uDC67])|\\\\uD83C[\\\\uDF3E\\\\uDF73\\\\uDF93\\\\uDFA4\\\\uDFA8\\\\uDFEB\\\\uDFED]|\\\\uD83D[\\\\uDCBB\\\\uDCBC\\\\uDD27\\\\uDD2C\\\\uDE80\\\\uDE92])|(?:\\\\uD83C[\\\\uDFFB-\\\\uDFFF])\\\\u200D(?:\\\\uD83C[\\\\uDF3E\\\\uDF73\\\\uDF93\\\\uDFA4\\\\uDFA8\\\\uDFEB\\\\uDFED]|\\\\uD83D[\\\\uDCBB\\\\uDCBC\\\\uDD27\\\\uDD2C\\\\uDE80\\\\uDE92]))|\\\\uD83C\\\\uDDF8(?:\\\\uD83C[\\\\uDDE6-\\\\uDDEA\\\\uDDEC-\\\\uDDF4\\\\uDDF7-\\\\uDDF9\\\\uDDFB\\\\uDDFD-\\\\uDDFF])|\\\\uD83C\\\\uDDF0(?:\\\\uD83C[\\\\uDDEA\\\\uDDEC-\\\\uDDEE\\\\uDDF2\\\\uDDF3\\\\uDDF5\\\\uDDF7\\\\uDDFC\\\\uDDFE\\\\uDDFF])|\\\\uD83C\\\\uDDFE(?:\\\\uD83C[\\\\uDDEA\\\\uDDF9])|\\\\uD83C\\\\uDDEE(?:\\\\uD83C[\\\\uDDE8-\\\\uDDEA\\\\uDDF1-\\\\uDDF4\\\\uDDF6-\\\\uDDF9])|\\\\uD83C\\\\uDDF9(?:\\\\uD83C[\\\\uDDE6\\\\uDDE8\\\\uDDE9\\\\uDDEB-\\\\uDDED\\\\uDDEF-\\\\uDDF4\\\\uDDF7\\\\uDDF9\\\\uDDFB\\\\uDDFC\\\\uDDFF])|\\\\uD83C\\\\uDDEC(?:\\\\uD83C[\\\\uDDE6\\\\uDDE7\\\\uDDE9-\\\\uDDEE\\\\uDDF1-\\\\uDDF3\\\\uDDF5-\\\\uDDFA\\\\uDDFC\\\\uDDFE])|\\\\uD83C\\\\uDDFA(?:\\\\uD83C[\\\\uDDE6\\\\uDDEC\\\\uDDF2\\\\uDDF3\\\\uDDF8\\\\uDDFE\\\\uDDFF])|\\\\uD83C\\\\uDDEA(?:\\\\uD83C[\\\\uDDE6\\\\uDDE8\\\\uDDEA\\\\uDDEC\\\\uDDED\\\\uDDF7-\\\\uDDFA])|\\\\uD83C\\\\uDDFC(?:\\\\uD83C[\\\\uDDEB\\\\uDDF8])|(?:\\\\u26F9|\\\\uD83C[\\\\uDFCB\\\\uDFCC]|\\\\uD83D\\\\uDD75)(?:\\\\uD83C[\\\\uDFFB-\\\\uDFFF])|(?:\\\\uD83C[\\\\uDFC3\\\\uDFC4\\\\uDFCA]|\\\\uD83D[\\\\uDC6E\\\\uDC71\\\\uDC73\\\\uDC77\\\\uDC81\\\\uDC82\\\\uDC86\\\\uDC87\\\\uDE45-\\\\uDE47\\\\uDE4B\\\\uDE4D\\\\uDE4E\\\\uDEA3\\\\uDEB4-\\\\uDEB6]|\\\\uD83E[\\\\uDD26\\\\uDD37-\\\\uDD39\\\\uDD3D\\\\uDD3E\\\\uDDD6-\\\\uDDDD])(?:\\\\uD83C[\\\\uDFFB-\\\\uDFFF])|(?:[\\\\u261D\\\\u270A-\\\\u270D]|\\\\uD83C[\\\\uDF85\\\\uDFC2\\\\uDFC7]|\\\\uD83D[\\\\uDC42\\\\uDC43\\\\uDC46-\\\\uDC50\\\\uDC66\\\\uDC67\\\\uDC70\\\\uDC72\\\\uDC74-\\\\uDC76\\\\uDC78\\\\uDC7C\\\\uDC83\\\\uDC85\\\\uDCAA\\\\uDD74\\\\uDD7A\\\\uDD90\\\\uDD95\\\\uDD96\\\\uDE4C\\\\uDE4F\\\\uDEC0\\\\uDECC]|\\\\uD83E[\\\\uDD18-\\\\uDD1C\\\\uDD1E\\\\uDD1F\\\\uDD30-\\\\uDD36\\\\uDDD1-\\\\uDDD5])(?:\\\\uD83C[\\\\uDFFB-\\\\uDFFF])|\\\\uD83D\\\\uDC68(?:\\\\u200D(?:(?:(?:\\\\uD83D[\\\\uDC68\\\\uDC69])\\\\u200D)?\\\\uD83D\\\\uDC67|(?:(?:\\\\uD83D[\\\\uDC68\\\\uDC69])\\\\u200D)?\\\\uD83D\\\\uDC66)|\\\\uD83C[\\\\uDFFB-\\\\uDFFF])|(?:[\\\\u261D\\\\u26F9\\\\u270A-\\\\u270D]|\\\\uD83C[\\\\uDF85\\\\uDFC2-\\\\uDFC4\\\\uDFC7\\\\uDFCA-\\\\uDFCC]|\\\\uD83D[\\\\uDC42\\\\uDC43\\\\uDC46-\\\\uDC50\\\\uDC66-\\\\uDC69\\\\uDC6E\\\\uDC70-\\\\uDC78\\\\uDC7C\\\\uDC81-\\\\uDC83\\\\uDC85-\\\\uDC87\\\\uDCAA\\\\uDD74\\\\uDD75\\\\uDD7A\\\\uDD90\\\\uDD95\\\\uDD96\\\\uDE45-\\\\uDE47\\\\uDE4B-\\\\uDE4F\\\\uDEA3\\\\uDEB4-\\\\uDEB6\\\\uDEC0\\\\uDECC]|\\\\uD83E[\\\\uDD18-\\\\uDD1C\\\\uDD1E\\\\uDD1F\\\\uDD26\\\\uDD30-\\\\uDD39\\\\uDD3D\\\\uDD3E\\\\uDDD1-\\\\uDDDD])(?:\\\\uD83C[\\\\uDFFB-\\\\uDFFF])?|(?:[\\\\u231A\\\\u231B\\\\u23E9-\\\\u23EC\\\\u23F0\\\\u23F3\\\\u25FD\\\\u25FE\\\\u2614\\\\u2615\\\\u2648-\\\\u2653\\\\u267F\\\\u2693\\\\u26A1\\\\u26AA\\\\u26AB\\\\u26BD\\\\u26BE\\\\u26C4\\\\u26C5\\\\u26CE\\\\u26D4\\\\u26EA\\\\u26F2\\\\u26F3\\\\u26F5\\\\u26FA\\\\u26FD\\\\u2705\\\\u270A\\\\u270B\\\\u2728\\\\u274C\\\\u274E\\\\u2753-\\\\u2755\\\\u2757\\\\u2795-\\\\u2797\\\\u27B0\\\\u27BF\\\\u2B1B\\\\u2B1C\\\\u2B50\\\\u2B55]|\\\\uD83C[\\\\uDC04\\\\uDCCF\\\\uDD8E\\\\uDD91-\\\\uDD9A\\\\uDDE6-\\\\uDDFF\\\\uDE01\\\\uDE1A\\\\uDE2F\\\\uDE32-\\\\uDE36\\\\uDE38-\\\\uDE3A\\\\uDE50\\\\uDE51\\\\uDF00-\\\\uDF20\\\\uDF2D-\\\\uDF35\\\\uDF37-\\\\uDF7C\\\\uDF7E-\\\\uDF93\\\\uDFA0-\\\\uDFCA\\\\uDFCF-\\\\uDFD3\\\\uDFE0-\\\\uDFF0\\\\uDFF4\\\\uDFF8-\\\\uDFFF]|\\\\uD83D[\\\\uDC00-\\\\uDC3E\\\\uDC40\\\\uDC42-\\\\uDCFC\\\\uDCFF-\\\\uDD3D\\\\uDD4B-\\\\uDD4E\\\\uDD50-\\\\uDD67\\\\uDD7A\\\\uDD95\\\\uDD96\\\\uDDA4\\\\uDDFB-\\\\uDE4F\\\\uDE80-\\\\uDEC5\\\\uDECC\\\\uDED0-\\\\uDED2\\\\uDEEB\\\\uDEEC\\\\uDEF4-\\\\uDEF8]|\\\\uD83E[\\\\uDD10-\\\\uDD3A\\\\uDD3C-\\\\uDD3E\\\\uDD40-\\\\uDD45\\\\uDD47-\\\\uDD4C\\\\uDD50-\\\\uDD6B\\\\uDD80-\\\\uDD97\\\\uDDC0\\\\uDDD0-\\\\uDDE6])|(?:[#\\\\*0-9\\\\xA9\\\\xAE\\\\u203C\\\\u2049\\\\u2122\\\\u2139\\\\u2194-\\\\u2199\\\\u21A9\\\\u21AA\\\\u231A\\\\u231B\\\\u2328\\\\u23CF\\\\u23E9-\\\\u23F3\\\\u23F8-\\\\u23FA\\\\u24C2\\\\u25AA\\\\u25AB\\\\u25B6\\\\u25C0\\\\u25FB-\\\\u25FE\\\\u2600-\\\\u2604\\\\u260E\\\\u2611\\\\u2614\\\\u2615\\\\u2618\\\\u261D\\\\u2620\\\\u2622\\\\u2623\\\\u2626\\\\u262A\\\\u262E\\\\u262F\\\\u2638-\\\\u263A\\\\u2640\\\\u2642\\\\u2648-\\\\u2653\\\\u2660\\\\u2663\\\\u2665\\\\u2666\\\\u2668\\\\u267B\\\\u267F\\\\u2692-\\\\u2697\\\\u2699\\\\u269B\\\\u269C\\\\u26A0\\\\u26A1\\\\u26AA\\\\u26AB\\\\u26B0\\\\u26B1\\\\u26BD\\\\u26BE\\\\u26C4\\\\u26C5\\\\u26C8\\\\u26CE\\\\u26CF\\\\u26D1\\\\u26D3\\\\u26D4\\\\u26E9\\\\u26EA\\\\u26F0-\\\\u26F5\\\\u26F7-\\\\u26FA\\\\u26FD\\\\u2702\\\\u2705\\\\u2708-\\\\u270D\\\\u270F\\\\u2712\\\\u2714\\\\u2716\\\\u271D\\\\u2721\\\\u2728\\\\u2733\\\\u2734\\\\u2744\\\\u2747\\\\u274C\\\\u274E\\\\u2753-\\\\u2755\\\\u2757\\\\u2763\\\\u2764\\\\u2795-\\\\u2797\\\\u27A1\\\\u27B0\\\\u27BF\\\\u2934\\\\u2935\\\\u2B05-\\\\u2B07\\\\u2B1B\\\\u2B1C\\\\u2B50\\\\u2B55\\\\u3030\\\\u303D\\\\u3297\\\\u3299]|\\\\uD83C[\\\\uDC04\\\\uDCCF\\\\uDD70\\\\uDD71\\\\uDD7E\\\\uDD7F\\\\uDD8E\\\\uDD91-\\\\uDD9A\\\\uDDE6-\\\\uDDFF\\\\uDE01\\\\uDE02\\\\uDE1A\\\\uDE2F\\\\uDE32-\\\\uDE3A\\\\uDE50\\\\uDE51\\\\uDF00-\\\\uDF21\\\\uDF24-\\\\uDF93\\\\uDF96\\\\uDF97\\\\uDF99-\\\\uDF9B\\\\uDF9E-\\\\uDFF0\\\\uDFF3-\\\\uDFF5\\\\uDFF7-\\\\uDFFF]|\\\\uD83D[\\\\uDC00-\\\\uDCFD\\\\uDCFF-\\\\uDD3D\\\\uDD49-\\\\uDD4E\\\\uDD50-\\\\uDD67\\\\uDD6F\\\\uDD70\\\\uDD73-\\\\uDD7A\\\\uDD87\\\\uDD8A-\\\\uDD8D\\\\uDD90\\\\uDD95\\\\uDD96\\\\uDDA4\\\\uDDA5\\\\uDDA8\\\\uDDB1\\\\uDDB2\\\\uDDBC\\\\uDDC2-\\\\uDDC4\\\\uDDD1-\\\\uDDD3\\\\uDDDC-\\\\uDDDE\\\\uDDE1\\\\uDDE3\\\\uDDE8\\\\uDDEF\\\\uDDF3\\\\uDDFA-\\\\uDE4F\\\\uDE80-\\\\uDEC5\\\\uDECB-\\\\uDED2\\\\uDEE0-\\\\uDEE5\\\\uDEE9\\\\uDEEB\\\\uDEEC\\\\uDEF0\\\\uDEF3-\\\\uDEF8]|\\\\uD83E[\\\\uDD10-\\\\uDD3A\\\\uDD3C-\\\\uDD3E\\\\uDD40-\\\\uDD45\\\\uDD47-\\\\uDD4C\\\\uDD50-\\\\uDD6B\\\\uDD80-\\\\uDD97\\\\uDDC0\\\\uDDD0-\\\\uDDE6])\\\\uFE0F)/;\\nfunction getText(e) {\\n  var type = e.nodeType,\\n    result = \\\"\\\";\\n  if (type === 1 || type === 9 || type === 11) {\\n    if (typeof e.textContent === \\\"string\\\") {\\n      return e.textContent;\\n    } else {\\n      for (e = e.firstChild; e; e = e.nextSibling) {\\n        result += getText(e);\\n      }\\n    }\\n  } else if (type === 3 || type === 4) {\\n    return e.nodeValue;\\n  }\\n  return result;\\n}\\nfunction splitInnerHTML(element, delimiter, trim, preserveSpaces) {\\n  var node = element.firstChild,\\n    result = [],\\n    s;\\n  while (node) {\\n    if (node.nodeType === 3) {\\n      s = (node.nodeValue + \\\"\\\").replace(/^\\\\n+/g, \\\"\\\");\\n      if (!preserveSpaces) {\\n        s = s.replace(/\\\\s+/g, \\\" \\\");\\n      }\\n      result.push.apply(result, _toConsumableArray(emojiSafeSplit(s, delimiter, trim, preserveSpaces)));\\n    } else if ((node.nodeName + \\\"\\\").toLowerCase() === \\\"br\\\") {\\n      result[result.length - 1] += \\\"<br>\\\";\\n    } else {\\n      result.push(node.outerHTML);\\n    }\\n    node = node.nextSibling;\\n  }\\n  s = result.length;\\n  while (s--) {\\n    result[s] === \\\"&\\\" && result.splice(s, 1, \\\"&amp;\\\");\\n  }\\n  return result;\\n}\\n\\n/*\\r\\n//smaller kb version that only handles the simpler emoji's, which is often perfectly adequate.\\r\\n\\r\\nlet _emoji = \\\"[\\\\uE000-\\\\uF8FF]|\\\\uD83C[\\\\uDC00-\\\\uDFFF]|\\\\uD83D[\\\\uDC00-\\\\uDFFF]|[\\\\u2694-\\\\u2697]|\\\\uD83E[\\\\uDD10-\\\\uDD5D]|[\\\\uD800-\\\\uDBFF][\\\\uDC00-\\\\uDFFF]\\\",\\r\\n\\t_emojiExp = new RegExp(_emoji),\\r\\n\\t_emojiAndCharsExp = new RegExp(_emoji + \\\"|.\\\", \\\"g\\\"),\\r\\n\\t_emojiSafeSplit = (text, delimiter, trim) => {\\r\\n\\t\\tif (trim) {\\r\\n\\t\\t\\ttext = text.replace(_trimExp, \\\"\\\");\\r\\n\\t\\t}\\r\\n\\t\\treturn ((delimiter === \\\"\\\" || !delimiter) && _emojiExp.test(text)) ? text.match(_emojiAndCharsExp) : text.split(delimiter || \\\"\\\");\\r\\n\\t};\\r\\n */\\nfunction emojiSafeSplit(text, delimiter, trim, preserveSpaces) {\\n  text += \\\"\\\"; // make sure it's cast as a string. Someone may pass in a number.\\n  trim && (text = text.trim ? text.trim() : text.replace(_trimExp, \\\"\\\")); // IE9 and earlier compatibility\\n  if (delimiter && delimiter !== \\\"\\\") {\\n    return text.replace(/>/g, \\\"&gt;\\\").replace(/</g, \\\"&lt;\\\").split(delimiter);\\n  }\\n  var result = [],\\n    l = text.length,\\n    i = 0,\\n    j,\\n    character;\\n  for (; i < l; i++) {\\n    character = text.charAt(i);\\n    if (character.charCodeAt(0) >= 0xD800 && character.charCodeAt(0) <= 0xDBFF || text.charCodeAt(i + 1) >= 0xFE00 && text.charCodeAt(i + 1) <= 0xFE0F) {\\n      //special emoji characters use 2 or 4 unicode characters that we must keep together.\\n      j = ((text.substr(i, 12).split(emojiExp) || [])[1] || \\\"\\\").length || 2;\\n      character = text.substr(i, j);\\n      result.emoji = 1;\\n      i += j - 1;\\n    }\\n    result.push(character === \\\">\\\" ? \\\"&gt;\\\" : character === \\\"<\\\" ? \\\"&lt;\\\" : preserveSpaces && character === \\\" \\\" && (text.charAt(i - 1) === \\\" \\\" || text.charAt(i + 1) === \\\" \\\") ? \\\"&nbsp;\\\" : character);\\n  }\\n  return result;\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUNMLENBQUMsRUFBRUMsQ0FBQyxDQUFDO01BQzdCeEIsTUFBTSxDQUFDNkIsS0FBSyxHQUFHLENBQUM7TUFDaEJOLENBQUMsSUFBSUMsQ0FBQyxHQUFHLENBQUM7SUFDWDtJQUNBeEIsTUFBTSxDQUFDYSxJQUFJLENBQUNZLFNBQVMsS0FBSyxHQUFHLEdBQUcsTUFBTSxHQUFJQSxTQUFTLEtBQUssR0FBRyxHQUFJLE1BQU0sR0FBR2hCLGNBQWMsSUFBSWdCLFNBQVMsS0FBSyxHQUFHLEtBQUtMLElBQUksQ0FBQ00sTUFBTSxDQUFDSCxDQUFDLEdBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJSCxJQUFJLENBQUNNLE1BQU0sQ0FBQ0gsQ0FBQyxHQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLFFBQVEsR0FBR0UsU0FBUyxDQUFDO0VBQzlMO0VBQ0EsT0FBT3pCLE1BQU07QUFDZCIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbGlicy9nc2FwL3V0aWxzL3N0cmluZ3MuanM/ODA5OCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcclxuICogc3RyaW5nczogMy4xMi41XHJcbiAqIGh0dHBzOi8vZ3NhcC5jb21cclxuICpcclxuICogQ29weXJpZ2h0IDIwMDgtMjAyNCwgR3JlZW5Tb2NrLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4gKiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhdCBodHRwczovL2dzYXAuY29tL3N0YW5kYXJkLWxpY2Vuc2Ugb3IgZm9yXHJcbiAqIENsdWIgR1NBUCBtZW1iZXJzLCB0aGUgYWdyZWVtZW50IGlzc3VlZCB3aXRoIHRoYXQgbWVtYmVyc2hpcC5cclxuICogQGF1dGhvcjogSmFjayBEb3lsZSwgamFja0BncmVlbnNvY2suY29tXHJcbiovXHJcbi8qIGVzbGludC1kaXNhYmxlICovXHJcblxyXG5sZXQgX3RyaW1FeHAgPSAvKD86Xlxccyt8XFxzKyQpL2c7XHJcblxyXG5leHBvcnQgY29uc3QgZW1vamlFeHAgPSAvKFtcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl0oPzpbXFx1MjAwRFxcdUZFMEZdW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXSl7Mix9fFxcdUQ4M0RcXHVEQzY5KD86XFx1MjAwRCg/Oig/OlxcdUQ4M0RcXHVEQzY5XFx1MjAwRCk/XFx1RDgzRFxcdURDNjd8KD86XFx1RDgzRFxcdURDNjlcXHUyMDBEKT9cXHVEODNEXFx1REM2Nil8XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXxcXHVEODNEXFx1REM2OVxcdTIwMEQoPzpcXHVEODNEXFx1REM2OVxcdTIwMEQpP1xcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fFxcdUQ4M0RcXHVEQzY5XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzY5XFx1MjAwRCk/XFx1RDgzRFxcdURDNjdcXHUyMDBEKD86XFx1RDgzRFtcXHVEQzY2XFx1REM2N10pfFxcdUQ4M0NcXHVERkYzXFx1RkUwRlxcdTIwMERcXHVEODNDXFx1REYwOHwoPzpcXHVEODNDW1xcdURGQzNcXHVERkM0XFx1REZDQV18XFx1RDgzRFtcXHVEQzZFXFx1REM3MVxcdURDNzNcXHVEQzc3XFx1REM4MVxcdURDODJcXHVEQzg2XFx1REM4N1xcdURFNDUtXFx1REU0N1xcdURFNEJcXHVERTREXFx1REU0RVxcdURFQTNcXHVERUI0LVxcdURFQjZdfFxcdUQ4M0VbXFx1REQyNlxcdUREMzctXFx1REQzOVxcdUREM0RcXHVERDNFXFx1RERENi1cXHVEREREXSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pXFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGfFxcdUQ4M0RcXHVEQzY5KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKVxcdTIwMEQoPzpcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXSl8KD86XFx1RDgzQ1tcXHVERkMzXFx1REZDNFxcdURGQ0FdfFxcdUQ4M0RbXFx1REM2RVxcdURDNkZcXHVEQzcxXFx1REM3M1xcdURDNzdcXHVEQzgxXFx1REM4MlxcdURDODZcXHVEQzg3XFx1REU0NS1cXHVERTQ3XFx1REU0QlxcdURFNERcXHVERTRFXFx1REVBM1xcdURFQjQtXFx1REVCNl18XFx1RDgzRVtcXHVERDI2XFx1REQzNy1cXHVERDM5XFx1REQzQy1cXHVERDNFXFx1RERENi1cXHVERERGXSlcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEZ8XFx1RDgzQ1xcdURERkRcXHVEODNDXFx1RERGMHxcXHVEODNDXFx1RERGNlxcdUQ4M0NcXHVEREU2fFxcdUQ4M0NcXHVEREY0XFx1RDgzQ1xcdURERjJ8XFx1RDgzQ1xcdURERTkoPzpcXHVEODNDW1xcdURERUFcXHVEREVDXFx1RERFRlxcdURERjBcXHVEREYyXFx1RERGNFxcdURERkZdKXxcXHVEODNDXFx1RERGNyg/OlxcdUQ4M0NbXFx1RERFQVxcdURERjRcXHVEREY4XFx1RERGQVxcdURERkNdKXxcXHVEODNDXFx1RERFOCg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREU5XFx1RERFQi1cXHVEREVFXFx1RERGMC1cXHVEREY1XFx1RERGN1xcdURERkEtXFx1RERGRl0pfCg/OlxcdTI2Rjl8XFx1RDgzQ1tcXHVERkNCXFx1REZDQ118XFx1RDgzRFxcdURENzUpKD86XFx1RkUwRlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdfCg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSlcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXSlcXHVGRTBGfCg/OlxcdUQ4M0RcXHVEQzQxXFx1RkUwRlxcdTIwMERcXHVEODNEXFx1RERFOHxcXHVEODNEXFx1REM2OSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSlcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzRFxcdURDNjlcXHUyMDBEW1xcdTI2OTVcXHUyNjk2XFx1MjcwOF18XFx1RDgzRFxcdURDNjgoPzooPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pXFx1MjAwRFtcXHUyNjk1XFx1MjY5NlxcdTI3MDhdfFxcdTIwMERbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XSkpXFx1RkUwRnxcXHVEODNDXFx1RERGMig/OlxcdUQ4M0NbXFx1RERFNlxcdURERTgtXFx1RERFRFxcdURERjAtXFx1RERGRl0pfFxcdUQ4M0RcXHVEQzY5XFx1MjAwRCg/OlxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdTI3NjRcXHVGRTBGXFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKXxcXHVEODNEW1xcdURDNjhcXHVEQzY5XSkpfFxcdUQ4M0NcXHVEREYxKD86XFx1RDgzQ1tcXHVEREU2LVxcdURERThcXHVEREVFXFx1RERGMFxcdURERjctXFx1RERGQlxcdURERkVdKXxcXHVEODNDXFx1RERFRig/OlxcdUQ4M0NbXFx1RERFQVxcdURERjJcXHVEREY0XFx1RERGNV0pfFxcdUQ4M0NcXHVEREVEKD86XFx1RDgzQ1tcXHVEREYwXFx1RERGMlxcdURERjNcXHVEREY3XFx1RERGOVxcdURERkFdKXxcXHVEODNDXFx1RERFQig/OlxcdUQ4M0NbXFx1RERFRS1cXHVEREYwXFx1RERGMlxcdURERjRcXHVEREY3XSl8WyNcXCowLTldXFx1RkUwRlxcdTIwRTN8XFx1RDgzQ1xcdURERTcoPzpcXHVEODNDW1xcdURERTZcXHVEREU3XFx1RERFOS1cXHVEREVGXFx1RERGMS1cXHVEREY0XFx1RERGNi1cXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZFXFx1RERGRl0pfFxcdUQ4M0NcXHVEREU2KD86XFx1RDgzQ1tcXHVEREU4LVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjJcXHVEREY0XFx1RERGNi1cXHVEREZBXFx1RERGQ1xcdURERkRcXHVEREZGXSl8XFx1RDgzQ1xcdURERkYoPzpcXHVEODNDW1xcdURERTZcXHVEREYyXFx1RERGQ10pfFxcdUQ4M0NcXHVEREY1KD86XFx1RDgzQ1tcXHVEREU2XFx1RERFQS1cXHVEREVEXFx1RERGMC1cXHVEREYzXFx1RERGNy1cXHVEREY5XFx1RERGQ1xcdURERkVdKXxcXHVEODNDXFx1RERGQig/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERUVcXHVEREYzXFx1RERGQV0pfFxcdUQ4M0NcXHVEREYzKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUEtXFx1RERFQ1xcdURERUVcXHVEREYxXFx1RERGNFxcdURERjVcXHVEREY3XFx1RERGQVxcdURERkZdKXxcXHVEODNDXFx1REZGNFxcdURCNDBcXHVEQzY3XFx1REI0MFxcdURDNjIoPzpcXHVEQjQwXFx1REM3N1xcdURCNDBcXHVEQzZDXFx1REI0MFxcdURDNzN8XFx1REI0MFxcdURDNzNcXHVEQjQwXFx1REM2M1xcdURCNDBcXHVEQzc0fFxcdURCNDBcXHVEQzY1XFx1REI0MFxcdURDNkVcXHVEQjQwXFx1REM2NylcXHVEQjQwXFx1REM3RnxcXHVEODNEXFx1REM2OCg/OlxcdTIwMEQoPzpcXHUyNzY0XFx1RkUwRlxcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0RcXHVEQzY4fCg/Oig/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdTIwMEQpP1xcdUQ4M0RcXHVEQzY2XFx1MjAwRFxcdUQ4M0RcXHVEQzY2fCg/Oig/OlxcdUQ4M0RbXFx1REM2OFxcdURDNjldKVxcdTIwMEQpP1xcdUQ4M0RcXHVEQzY3XFx1MjAwRCg/OlxcdUQ4M0RbXFx1REM2NlxcdURDNjddKXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXSl8KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKVxcdTIwMEQoPzpcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXSkpfFxcdUQ4M0NcXHVEREY4KD86XFx1RDgzQ1tcXHVEREU2LVxcdURERUFcXHVEREVDLVxcdURERjRcXHVEREY3LVxcdURERjlcXHVEREZCXFx1RERGRC1cXHVEREZGXSl8XFx1RDgzQ1xcdURERjAoPzpcXHVEODNDW1xcdURERUFcXHVEREVDLVxcdURERUVcXHVEREYyXFx1RERGM1xcdURERjVcXHVEREY3XFx1RERGQ1xcdURERkVcXHVEREZGXSl8XFx1RDgzQ1xcdURERkUoPzpcXHVEODNDW1xcdURERUFcXHVEREY5XSl8XFx1RDgzQ1xcdURERUUoPzpcXHVEODNDW1xcdURERTgtXFx1RERFQVxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOV0pfFxcdUQ4M0NcXHVEREY5KD86XFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERTlcXHVEREVCLVxcdURERURcXHVEREVGLVxcdURERjRcXHVEREY3XFx1RERGOVxcdURERkJcXHVEREZDXFx1RERGRl0pfFxcdUQ4M0NcXHVEREVDKD86XFx1RDgzQ1tcXHVEREU2XFx1RERFN1xcdURERTktXFx1RERFRVxcdURERjEtXFx1RERGM1xcdURERjUtXFx1RERGQVxcdURERkNcXHVEREZFXSl8XFx1RDgzQ1xcdURERkEoPzpcXHVEODNDW1xcdURERTZcXHVEREVDXFx1RERGMlxcdURERjNcXHVEREY4XFx1RERGRVxcdURERkZdKXxcXHVEODNDXFx1RERFQSg/OlxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBXFx1RERFQ1xcdURERURcXHVEREY3LVxcdURERkFdKXxcXHVEODNDXFx1RERGQyg/OlxcdUQ4M0NbXFx1RERFQlxcdURERjhdKXwoPzpcXHUyNkY5fFxcdUQ4M0NbXFx1REZDQlxcdURGQ0NdfFxcdUQ4M0RcXHVERDc1KSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8KD86XFx1RDgzQ1tcXHVERkMzXFx1REZDNFxcdURGQ0FdfFxcdUQ4M0RbXFx1REM2RVxcdURDNzFcXHVEQzczXFx1REM3N1xcdURDODFcXHVEQzgyXFx1REM4NlxcdURDODdcXHVERTQ1LVxcdURFNDdcXHVERTRCXFx1REU0RFxcdURFNEVcXHVERUEzXFx1REVCNC1cXHVERUI2XXxcXHVEODNFW1xcdUREMjZcXHVERDM3LVxcdUREMzlcXHVERDNEXFx1REQzRVxcdURERDYtXFx1RERERF0pKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKXwoPzpbXFx1MjYxRFxcdTI3MEEtXFx1MjcwRF18XFx1RDgzQ1tcXHVERjg1XFx1REZDMlxcdURGQzddfFxcdUQ4M0RbXFx1REM0MlxcdURDNDNcXHVEQzQ2LVxcdURDNTBcXHVEQzY2XFx1REM2N1xcdURDNzBcXHVEQzcyXFx1REM3NC1cXHVEQzc2XFx1REM3OFxcdURDN0NcXHVEQzgzXFx1REM4NVxcdURDQUFcXHVERDc0XFx1REQ3QVxcdUREOTBcXHVERDk1XFx1REQ5NlxcdURFNENcXHVERTRGXFx1REVDMFxcdURFQ0NdfFxcdUQ4M0VbXFx1REQxOC1cXHVERDFDXFx1REQxRVxcdUREMUZcXHVERDMwLVxcdUREMzZcXHVEREQxLVxcdURERDVdKSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8XFx1RDgzRFxcdURDNjgoPzpcXHUyMDBEKD86KD86KD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1MjAwRCk/XFx1RDgzRFxcdURDNjd8KD86KD86XFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1MjAwRCk/XFx1RDgzRFxcdURDNjYpfFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSl8KD86W1xcdTI2MURcXHUyNkY5XFx1MjcwQS1cXHUyNzBEXXxcXHVEODNDW1xcdURGODVcXHVERkMyLVxcdURGQzRcXHVERkM3XFx1REZDQS1cXHVERkNDXXxcXHVEODNEW1xcdURDNDJcXHVEQzQzXFx1REM0Ni1cXHVEQzUwXFx1REM2Ni1cXHVEQzY5XFx1REM2RVxcdURDNzAtXFx1REM3OFxcdURDN0NcXHVEQzgxLVxcdURDODNcXHVEQzg1LVxcdURDODdcXHVEQ0FBXFx1REQ3NFxcdURENzVcXHVERDdBXFx1REQ5MFxcdUREOTVcXHVERDk2XFx1REU0NS1cXHVERTQ3XFx1REU0Qi1cXHVERTRGXFx1REVBM1xcdURFQjQtXFx1REVCNlxcdURFQzBcXHVERUNDXXxcXHVEODNFW1xcdUREMTgtXFx1REQxQ1xcdUREMUVcXHVERDFGXFx1REQyNlxcdUREMzAtXFx1REQzOVxcdUREM0RcXHVERDNFXFx1REREMS1cXHVEREREXSkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pP3woPzpbXFx1MjMxQVxcdTIzMUJcXHUyM0U5LVxcdTIzRUNcXHUyM0YwXFx1MjNGM1xcdTI1RkRcXHUyNUZFXFx1MjYxNFxcdTI2MTVcXHUyNjQ4LVxcdTI2NTNcXHUyNjdGXFx1MjY5M1xcdTI2QTFcXHUyNkFBXFx1MjZBQlxcdTI2QkRcXHUyNkJFXFx1MjZDNFxcdTI2QzVcXHUyNkNFXFx1MjZENFxcdTI2RUFcXHUyNkYyXFx1MjZGM1xcdTI2RjVcXHUyNkZBXFx1MjZGRFxcdTI3MDVcXHUyNzBBXFx1MjcwQlxcdTI3MjhcXHUyNzRDXFx1Mjc0RVxcdTI3NTMtXFx1Mjc1NVxcdTI3NTdcXHUyNzk1LVxcdTI3OTdcXHUyN0IwXFx1MjdCRlxcdTJCMUJcXHUyQjFDXFx1MkI1MFxcdTJCNTVdfFxcdUQ4M0NbXFx1REMwNFxcdURDQ0ZcXHVERDhFXFx1REQ5MS1cXHVERDlBXFx1RERFNi1cXHVEREZGXFx1REUwMVxcdURFMUFcXHVERTJGXFx1REUzMi1cXHVERTM2XFx1REUzOC1cXHVERTNBXFx1REU1MFxcdURFNTFcXHVERjAwLVxcdURGMjBcXHVERjJELVxcdURGMzVcXHVERjM3LVxcdURGN0NcXHVERjdFLVxcdURGOTNcXHVERkEwLVxcdURGQ0FcXHVERkNGLVxcdURGRDNcXHVERkUwLVxcdURGRjBcXHVERkY0XFx1REZGOC1cXHVERkZGXXxcXHVEODNEW1xcdURDMDAtXFx1REMzRVxcdURDNDBcXHVEQzQyLVxcdURDRkNcXHVEQ0ZGLVxcdUREM0RcXHVERDRCLVxcdURENEVcXHVERDUwLVxcdURENjdcXHVERDdBXFx1REQ5NVxcdUREOTZcXHVEREE0XFx1RERGQi1cXHVERTRGXFx1REU4MC1cXHVERUM1XFx1REVDQ1xcdURFRDAtXFx1REVEMlxcdURFRUJcXHVERUVDXFx1REVGNC1cXHVERUY4XXxcXHVEODNFW1xcdUREMTAtXFx1REQzQVxcdUREM0MtXFx1REQzRVxcdURENDAtXFx1REQ0NVxcdURENDctXFx1REQ0Q1xcdURENTAtXFx1REQ2QlxcdUREODAtXFx1REQ5N1xcdUREQzBcXHVEREQwLVxcdURERTZdKXwoPzpbI1xcKjAtOVxceEE5XFx4QUVcXHUyMDNDXFx1MjA0OVxcdTIxMjJcXHUyMTM5XFx1MjE5NC1cXHUyMTk5XFx1MjFBOVxcdTIxQUFcXHUyMzFBXFx1MjMxQlxcdTIzMjhcXHUyM0NGXFx1MjNFOS1cXHUyM0YzXFx1MjNGOC1cXHUyM0ZBXFx1MjRDMlxcdTI1QUFcXHUyNUFCXFx1MjVCNlxcdTI1QzBcXHUyNUZCLVxcdTI1RkVcXHUyNjAwLVxcdTI2MDRcXHUyNjBFXFx1MjYxMVxcdTI2MTRcXHUyNjE1XFx1MjYxOFxcdTI2MURcXHUyNjIwXFx1MjYyMlxcdTI2MjNcXHUyNjI2XFx1MjYyQVxcdTI2MkVcXHUyNjJGXFx1MjYzOC1cXHUyNjNBXFx1MjY0MFxcdTI2NDJcXHUyNjQ4LVxcdTI2NTNcXHUyNjYwXFx1MjY2M1xcdTI2NjVcXHUyNjY2XFx1MjY2OFxcdTI2N0JcXHUyNjdGXFx1MjY5Mi1cXHUyNjk3XFx1MjY5OVxcdTI2OUJcXHUyNjlDXFx1MjZBMFxcdTI2QTFcXHUyNkFBXFx1MjZBQlxcdTI2QjBcXHUyNkIxXFx1MjZCRFxcdTI2QkVcXHUyNkM0XFx1MjZDNVxcdTI2QzhcXHUyNkNFXFx1MjZDRlxcdTI2RDFcXHUyNkQzXFx1MjZENFxcdTI2RTlcXHUyNkVBXFx1MjZGMC1cXHUyNkY1XFx1MjZGNy1cXHUyNkZBXFx1MjZGRFxcdTI3MDJcXHUyNzA1XFx1MjcwOC1cXHUyNzBEXFx1MjcwRlxcdTI3MTJcXHUyNzE0XFx1MjcxNlxcdTI3MURcXHUyNzIxXFx1MjcyOFxcdTI3MzNcXHUyNzM0XFx1Mjc0NFxcdTI3NDdcXHUyNzRDXFx1Mjc0RVxcdTI3NTMtXFx1Mjc1NVxcdTI3NTdcXHUyNzYzXFx1Mjc2NFxcdTI3OTUtXFx1Mjc5N1xcdTI3QTFcXHUyN0IwXFx1MjdCRlxcdTI5MzRcXHUyOTM1XFx1MkIwNS1cXHUyQjA3XFx1MkIxQlxcdTJCMUNcXHUyQjUwXFx1MkI1NVxcdTMwMzBcXHUzMDNEXFx1MzI5N1xcdTMyOTldfFxcdUQ4M0NbXFx1REMwNFxcdURDQ0ZcXHVERDcwXFx1REQ3MVxcdUREN0VcXHVERDdGXFx1REQ4RVxcdUREOTEtXFx1REQ5QVxcdURERTYtXFx1RERGRlxcdURFMDFcXHVERTAyXFx1REUxQVxcdURFMkZcXHVERTMyLVxcdURFM0FcXHVERTUwXFx1REU1MVxcdURGMDAtXFx1REYyMVxcdURGMjQtXFx1REY5M1xcdURGOTZcXHVERjk3XFx1REY5OS1cXHVERjlCXFx1REY5RS1cXHVERkYwXFx1REZGMy1cXHVERkY1XFx1REZGNy1cXHVERkZGXXxcXHVEODNEW1xcdURDMDAtXFx1RENGRFxcdURDRkYtXFx1REQzRFxcdURENDktXFx1REQ0RVxcdURENTAtXFx1REQ2N1xcdURENkZcXHVERDcwXFx1REQ3My1cXHVERDdBXFx1REQ4N1xcdUREOEEtXFx1REQ4RFxcdUREOTBcXHVERDk1XFx1REQ5NlxcdUREQTRcXHVEREE1XFx1RERBOFxcdUREQjFcXHVEREIyXFx1RERCQ1xcdUREQzItXFx1RERDNFxcdURERDEtXFx1REREM1xcdUREREMtXFx1RERERVxcdURERTFcXHVEREUzXFx1RERFOFxcdURERUZcXHVEREYzXFx1RERGQS1cXHVERTRGXFx1REU4MC1cXHVERUM1XFx1REVDQi1cXHVERUQyXFx1REVFMC1cXHVERUU1XFx1REVFOVxcdURFRUJcXHVERUVDXFx1REVGMFxcdURFRjMtXFx1REVGOF18XFx1RDgzRVtcXHVERDEwLVxcdUREM0FcXHVERDNDLVxcdUREM0VcXHVERDQwLVxcdURENDVcXHVERDQ3LVxcdURENENcXHVERDUwLVxcdURENkJcXHVERDgwLVxcdUREOTdcXHVEREMwXFx1REREMC1cXHVEREU2XSlcXHVGRTBGKS87XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGV4dChlKSB7XHJcblx0bGV0IHR5cGUgPSBlLm5vZGVUeXBlLFxyXG5cdFx0cmVzdWx0ID0gXCJcIjtcclxuXHRpZiAodHlwZSA9PT0gMSB8fCB0eXBlID09PSA5IHx8IHR5cGUgPT09IDExKSB7XHJcblx0XHRpZiAodHlwZW9mKGUudGV4dENvbnRlbnQpID09PSBcInN0cmluZ1wiKSB7XHJcblx0XHRcdHJldHVybiBlLnRleHRDb250ZW50O1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Zm9yIChlID0gZS5maXJzdENoaWxkOyBlOyBlID0gZS5uZXh0U2libGluZyApIHtcclxuXHRcdFx0XHRyZXN1bHQgKz0gZ2V0VGV4dChlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH0gZWxzZSBpZiAodHlwZSA9PT0gMyB8fCB0eXBlID09PSA0KSB7XHJcblx0XHRyZXR1cm4gZS5ub2RlVmFsdWU7XHJcblx0fVxyXG5cdHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzcGxpdElubmVySFRNTChlbGVtZW50LCBkZWxpbWl0ZXIsIHRyaW0sIHByZXNlcnZlU3BhY2VzKSB7XHJcblx0bGV0IG5vZGUgPSBlbGVtZW50LmZpcnN0Q2hpbGQsXHJcblx0XHRyZXN1bHQgPSBbXSwgcztcclxuXHR3aGlsZSAobm9kZSkge1xyXG5cdFx0aWYgKG5vZGUubm9kZVR5cGUgPT09IDMpIHtcclxuXHRcdFx0cyA9IChub2RlLm5vZGVWYWx1ZSArIFwiXCIpLnJlcGxhY2UoL15cXG4rL2csIFwiXCIpO1xyXG5cdFx0XHRpZiAoIXByZXNlcnZlU3BhY2VzKSB7XHJcblx0XHRcdFx0cyA9IHMucmVwbGFjZSgvXFxzKy9nLCBcIiBcIik7XHJcblx0XHRcdH1cclxuXHRcdFx0cmVzdWx0LnB1c2goLi4uZW1vamlTYWZlU3BsaXQocywgZGVsaW1pdGVyLCB0cmltLCBwcmVzZXJ2ZVNwYWNlcykpO1xyXG5cdFx0fSBlbHNlIGlmICgobm9kZS5ub2RlTmFtZSArIFwiXCIpLnRvTG93ZXJDYXNlKCkgPT09IFwiYnJcIikge1xyXG5cdFx0XHRyZXN1bHRbcmVzdWx0Lmxlbmd0aC0xXSArPSBcIjxicj5cIjtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJlc3VsdC5wdXNoKG5vZGUub3V0ZXJIVE1MKTtcclxuXHRcdH1cclxuXHRcdG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xyXG5cdH1cclxuXHRzID0gcmVzdWx0Lmxlbmd0aDtcclxuXHR3aGlsZSAocy0tKSB7XHJcblx0XHRyZXN1bHRbc10gPT09IFwiJlwiICYmIHJlc3VsdC5zcGxpY2UocywgMSwgXCImYW1wO1wiKTtcclxuXHR9XHJcblx0cmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuLypcclxuLy9zbWFsbGVyIGtiIHZlcnNpb24gdGhhdCBvbmx5IGhhbmRsZXMgdGhlIHNpbXBsZXIgZW1vamkncywgd2hpY2ggaXMgb2Z0ZW4gcGVyZmVjdGx5IGFkZXF1YXRlLlxyXG5cclxubGV0IF9lbW9qaSA9IFwiW1xcdUUwMDAtXFx1RjhGRl18XFx1RDgzQ1tcXHVEQzAwLVxcdURGRkZdfFxcdUQ4M0RbXFx1REMwMC1cXHVERkZGXXxbXFx1MjY5NC1cXHUyNjk3XXxcXHVEODNFW1xcdUREMTAtXFx1REQ1RF18W1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXVwiLFxyXG5cdF9lbW9qaUV4cCA9IG5ldyBSZWdFeHAoX2Vtb2ppKSxcclxuXHRfZW1vamlBbmRDaGFyc0V4cCA9IG5ldyBSZWdFeHAoX2Vtb2ppICsgXCJ8LlwiLCBcImdcIiksXHJcblx0X2Vtb2ppU2FmZVNwbGl0ID0gKHRleHQsIGRlbGltaXRlciwgdHJpbSkgPT4ge1xyXG5cdFx0aWYgKHRyaW0pIHtcclxuXHRcdFx0dGV4dCA9IHRleHQucmVwbGFjZShfdHJpbUV4cCwgXCJcIik7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gKChkZWxpbWl0ZXIgPT09IFwiXCIgfHwgIWRlbGltaXRlcikgJiYgX2Vtb2ppRXhwLnRlc3QodGV4dCkpID8gdGV4dC5tYXRjaChfZW1vamlBbmRDaGFyc0V4cCkgOiB0ZXh0LnNwbGl0KGRlbGltaXRlciB8fCBcIlwiKTtcclxuXHR9O1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGVtb2ppU2FmZVNwbGl0KHRleHQsIGRlbGltaXRlciwgdHJpbSwgcHJlc2VydmVTcGFjZXMpIHtcclxuXHR0ZXh0ICs9IFwiXCI7IC8vIG1ha2Ugc3VyZSBpdCdzIGNhc3QgYXMgYSBzdHJpbmcuIFNvbWVvbmUgbWF5IHBhc3MgaW4gYSBudW1iZXIuXHJcblx0dHJpbSAmJiAodGV4dCA9IHRleHQudHJpbSA/IHRleHQudHJpbSgpIDogdGV4dC5yZXBsYWNlKF90cmltRXhwLCBcIlwiKSk7IC8vIElFOSBhbmQgZWFybGllciBjb21wYXRpYmlsaXR5XHJcblx0aWYgKGRlbGltaXRlciAmJiBkZWxpbWl0ZXIgIT09IFwiXCIpIHtcclxuXHRcdHJldHVybiB0ZXh0LnJlcGxhY2UoLz4vZywgXCImZ3Q7XCIpLnJlcGxhY2UoLzwvZywgXCImbHQ7XCIpLnNwbGl0KGRlbGltaXRlcik7XHJcblx0fVxyXG5cdGxldCByZXN1bHQgPSBbXSxcclxuXHRcdGwgPSB0ZXh0Lmxlbmd0aCxcclxuXHRcdGkgPSAwLFxyXG5cdFx0aiwgY2hhcmFjdGVyO1xyXG5cdGZvciAoOyBpIDwgbDsgaSsrKSB7XHJcblx0XHRjaGFyYWN0ZXIgPSB0ZXh0LmNoYXJBdChpKTtcclxuXHRcdGlmICgoY2hhcmFjdGVyLmNoYXJDb2RlQXQoMCkgPj0gMHhEODAwICYmIGNoYXJhY3Rlci5jaGFyQ29kZUF0KDApIDw9IDB4REJGRikgfHwgKHRleHQuY2hhckNvZGVBdChpKzEpID49IDB4RkUwMCAmJiB0ZXh0LmNoYXJDb2RlQXQoaSsxKSA8PSAweEZFMEYpKSB7IC8vc3BlY2lhbCBlbW9qaSBjaGFyYWN0ZXJzIHVzZSAyIG9yIDQgdW5pY29kZSBjaGFyYWN0ZXJzIHRoYXQgd2UgbXVzdCBrZWVwIHRvZ2V0aGVyLlxyXG5cdFx0XHRqID0gKCh0ZXh0LnN1YnN0cihpLCAxMikuc3BsaXQoZW1vamlFeHApIHx8IFtdKVsxXSB8fCBcIlwiKS5sZW5ndGggfHwgMjtcclxuXHRcdFx0Y2hhcmFjdGVyID0gdGV4dC5zdWJzdHIoaSwgaik7XHJcblx0XHRcdHJlc3VsdC5lbW9qaSA9IDE7XHJcblx0XHRcdGkgKz0gaiAtIDE7XHJcblx0XHR9XHJcblx0XHRyZXN1bHQucHVzaChjaGFyYWN0ZXIgPT09IFwiPlwiID8gXCImZ3Q7XCIgOiAoY2hhcmFjdGVyID09PSBcIjxcIikgPyBcIiZsdDtcIiA6IHByZXNlcnZlU3BhY2VzICYmIGNoYXJhY3RlciA9PT0gXCIgXCIgJiYgKHRleHQuY2hhckF0KGktMSkgPT09IFwiIFwiIHx8IHRleHQuY2hhckF0KGkrMSkgPT09IFwiIFwiKSA/IFwiJm5ic3A7XCIgOiBjaGFyYWN0ZXIpO1xyXG5cdH1cclxuXHRyZXR1cm4gcmVzdWx0O1xyXG59Il0sIm5hbWVzIjpbIl90cmltRXhwIiwiZW1vamlFeHAiLCJnZXRUZXh0IiwiZSIsInR5cGUiLCJub2RlVHlwZSIsInJlc3VsdCIsInRleHRDb250ZW50IiwiZmlyc3RDaGlsZCIsIm5leHRTaWJsaW5nIiwibm9kZVZhbHVlIiwic3BsaXRJbm5lckhUTUwiLCJlbGVtZW50IiwiZGVsaW1pdGVyIiwidHJpbSIsInByZXNlcnZlU3BhY2VzIiwibm9kZSIsInMiLCJyZXBsYWNlIiwicHVzaCIsImVtb2ppU2FmZVNwbGl0Iiwibm9kZU5hbWUiLCJ0b0xvd2VyQ2FzZSIsImxlbmd0aCIsIm91dGVySFRNTCIsInNwbGljZSIsInRleHQiLCJzcGxpdCIsImwiLCJpIiwiaiIsImNoYXJhY3RlciIsImNoYXJBdCIsImNoYXJDb2RlQXQiLCJzdWJzdHIiLCJlbW9qaSJdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./libs/gsap/utils/strings.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/app.js\":\r\n/*!**********************************!*\\\r\n  !*** ./resources/scripts/app.js ***!\r\n  \\**********************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony import */ var _modules_Cart__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modules/Cart */ \\\"./resources/scripts/modules/Cart.js\\\");\\n/* harmony import */ var _modules_Money__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/Money */ \\\"./resources/scripts/modules/Money.js\\\");\\n/* harmony import */ var _modules_Animation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/Animation */ \\\"./resources/scripts/modules/Animation.js\\\");\\n/* harmony import */ var _components_toggle_visibility_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/toggle-visibility/main */ \\\"./resources/scripts/components/toggle-visibility/main.js\\\");\\n/* harmony import */ var _components_product_card_main__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/product-card/main */ \\\"./resources/scripts/components/product-card/main.js\\\");\\n/* harmony import */ var _features_build_a_bundle_build_a_bundle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./features/build-a-bundle/build-a-bundle */ \\\"./resources/scripts/features/build-a-bundle/build-a-bundle.js\\\");\\n/* harmony import */ var _sections_header_main__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./sections/header/main */ \\\"./resources/scripts/sections/header/main.js\\\");\\n/* harmony import */ var _sections_hero_main__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./sections/hero/main */ \\\"./resources/scripts/sections/hero/main.js\\\");\\n/* harmony import */ var _sections_faqs_main__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./sections/faqs/main */ \\\"./resources/scripts/sections/faqs/main.js\\\");\\n/* harmony import */ var _sections_featured_articles_main__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./sections/featured-articles/main */ \\\"./resources/scripts/sections/featured-articles/main.js\\\");\\n/* harmony import */ var _sections_featured_collections_main__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./sections/featured-collections/main */ \\\"./resources/scripts/sections/featured-collections/main.js\\\");\\n/* harmony import */ var _sections_featured_products_main__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./sections/featured-products/main */ \\\"./resources/scripts/sections/featured-products/main.js\\\");\\n/* harmony import */ var _sections_featured_reviews_main__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./sections/featured-reviews/main */ \\\"./resources/scripts/sections/featured-reviews/main.js\\\");\\n/* harmony import */ var _sections_socials_main__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./sections/socials/main */ \\\"./resources/scripts/sections/socials/main.js\\\");\\n/* harmony import */ var _sections_account_main__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./sections/account/main */ \\\"./resources/scripts/sections/account/main.js\\\");\\n/* harmony import */ var _sections_usps_main__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./sections/usps/main */ \\\"./resources/scripts/sections/usps/main.js\\\");\\n/* harmony import */ var _sections_blog_main__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./sections/blog/main */ \\\"./resources/scripts/sections/blog/main.js\\\");\\n/* harmony import */ var _sections_collection_template_main__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./sections/collection-template/main */ \\\"./resources/scripts/sections/collection-template/main.js\\\");\\n/* harmony import */ var _sections_footer_main__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./sections/footer/main */ \\\"./resources/scripts/sections/footer/main.js\\\");\\n/* harmony import */ var _sections_social_clips_main__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./sections/social-clips/main */ \\\"./resources/scripts/sections/social-clips/main.js\\\");\\n/* harmony import */ var _sections_bab_product_carousel_main__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./sections/bab-product-carousel/main */ \\\"./resources/scripts/sections/bab-product-carousel/main.js\\\");\\n/* harmony import */ var _sections_featured_in_main__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./sections/featured-in/main */ \\\"./resources/scripts/sections/featured-in/main.js\\\");\\n/* harmony import */ var _sections_homepage_tabs_main__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./sections/homepage-tabs/main */ \\\"./resources/scripts/sections/homepage-tabs/main.js\\\");\\n/* harmony import */ var _sections_recipes_main__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./sections/recipes/main */ \\\"./resources/scripts/sections/recipes/main.js\\\");\\n/* harmony import */ var _sections_recipe_archive_main__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./sections/recipe-archive/main */ \\\"./resources/scripts/sections/recipe-archive/main.js\\\");\\n/* harmony import */ var _sections_kg_countdown_main__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./sections/kg-countdown/main */ \\\"./resources/scripts/sections/kg-countdown/main.js\\\");\\n/* harmony import */ var _sections_nutrition_ingredients_main__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./sections/nutrition-ingredients/main */ \\\"./resources/scripts/sections/nutrition-ingredients/main.js\\\");\\n/* harmony import */ var _sections_nutrition_tables_main__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./sections/nutrition-tables/main */ \\\"./resources/scripts/sections/nutrition-tables/main.js\\\");\\n/* harmony import */ var _sections_prebuilt_bundles_main__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./sections/prebuilt-bundles/main */ \\\"./resources/scripts/sections/prebuilt-bundles/main.js\\\");\\n/* harmony import */ var _sections_content_links_main__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./sections/content-links/main */ \\\"./resources/scripts/sections/content-links/main.js\\\");\\n/* harmony import */ var _sections_prebuilt_bundle_products_main__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./sections/prebuilt-bundle-products/main */ \\\"./resources/scripts/sections/prebuilt-bundle-products/main.js\\\");\\n/* harmony import */ var _sections_fixed_bab_button_main__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./sections/fixed-bab-button/main */ \\\"./resources/scripts/sections/fixed-bab-button/main.js\\\");\\n/* harmony import */ var _sections_product_template_main__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./sections/product-template/main */ \\\"./resources/scripts/sections/product-template/main.js\\\");\\n/* harmony import */ var _sections_product_nutrition_info_main__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./sections/product-nutrition-info/main */ \\\"./resources/scripts/sections/product-nutrition-info/main.js\\\");\\n/* harmony import */ var _sections_product_image_gallery_main__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./sections/product-image-gallery/main */ \\\"./resources/scripts/sections/product-image-gallery/main.js\\\");\\n/* harmony import */ var _sections_product_accordions_main__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./sections/product-accordions/main */ \\\"./resources/scripts/sections/product-accordions/main.js\\\");\\n/* harmony import */ var _sections_cart_template_main__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./sections/cart-template/main */ \\\"./resources/scripts/sections/cart-template/main.js\\\");\\n/* harmony import */ var _sections_cookie_banner_main__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./sections/cookie-banner/main */ \\\"./resources/scripts/sections/cookie-banner/main.js\\\");\\n// Import Modules\\n\\n\\n\\n\\n// Import Components\\n\\n// import exampleComponent from \\\"./components/example-component/main\\\";\\n\\n\\n// Import features - enable features as needed for the project\\n\\n\\n// Import Sections\\n// import exampleSection from \\\"./sections/example-section/main\\\";\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n// Import Product Sections\\n\\n\\n\\n\\n\\n//Import Cart Sections\\n\\n//import cartAside from \\\"./sections/cart-aside/main\\\";\\n\\n//Import Cookie Banner\\n\\n\\n// Run animation module\\n(0,_modules_Animation__WEBPACK_IMPORTED_MODULE_2__.Animation)();\\n\\n//Check if we need to replace header and make it relative \\nif (window.location.pathname == \\\"/products/build-a-bundle\\\" || window.location.pathname == \\\"/pages/nutritional-info\\\") {\\n  var $siteHeader = document.querySelector(\\\"header.header\\\");\\n  if ($siteHeader) {\\n    if ($siteHeader.parentElement.classList.contains(\\\"sticky\\\")) {\\n      $siteHeader.parentElement.classList.remove(\\\"sticky\\\");\\n      $siteHeader.parentElement.classList.add(\\\"relative\\\");\\n    }\\n  }\\n}\\ndocument.addEventListener(\\\"DOMContentLoaded\\\", function (event) {\\n  // Add Modules to window\\n  window.Carbon = {\\n    Cart: new _modules_Cart__WEBPACK_IMPORTED_MODULE_0__.Cart(),\\n    Money: new _modules_Money__WEBPACK_IMPORTED_MODULE_1__.Money()\\n  };\\n\\n  // Run features - enable as needed\\n  (0,_features_build_a_bundle_build_a_bundle__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"])();\\n\\n  // Run Componenets\\n  // exampleComponent();\\n  (0,_components_product_card_main__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"])();\\n\\n  // Run sections\\n  // exampleSection();\\n  (0,_sections_header_main__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"])();\\n  (0,_sections_hero_main__WEBPACK_IMPORTED_MODULE_7__[\\\"default\\\"])();\\n  (0,_sections_faqs_main__WEBPACK_IMPORTED_MODULE_8__[\\\"default\\\"])();\\n  (0,_sections_featured_articles_main__WEBPACK_IMPORTED_MODULE_9__[\\\"default\\\"])();\\n  (0,_sections_featured_collections_main__WEBPACK_IMPORTED_MODULE_10__[\\\"default\\\"])();\\n  (0,_sections_featured_products_main__WEBPACK_IMPORTED_MODULE_11__[\\\"default\\\"])();\\n  (0,_sections_featured_reviews_main__WEBPACK_IMPORTED_MODULE_12__[\\\"default\\\"])();\\n  (0,_sections_socials_main__WEBPACK_IMPORTED_MODULE_13__[\\\"default\\\"])();\\n  (0,_sections_account_main__WEBPACK_IMPORTED_MODULE_14__[\\\"default\\\"])();\\n  (0,_components_toggle_visibility_main__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])();\\n  (0,_sections_product_template_main__WEBPACK_IMPORTED_MODULE_32__[\\\"default\\\"])();\\n  (0,_sections_usps_main__WEBPACK_IMPORTED_MODULE_15__[\\\"default\\\"])();\\n  (0,_sections_blog_main__WEBPACK_IMPORTED_MODULE_16__[\\\"default\\\"])();\\n  (0,_sections_collection_template_main__WEBPACK_IMPORTED_MODULE_17__[\\\"default\\\"])();\\n  (0,_sections_cart_template_main__WEBPACK_IMPORTED_MODULE_36__[\\\"default\\\"])();\\n  //cartAside();\\n  (0,_sections_cookie_banner_main__WEBPACK_IMPORTED_MODULE_37__[\\\"default\\\"])();\\n  (0,_sections_product_accordions_main__WEBPACK_IMPORTED_MODULE_35__[\\\"default\\\"])();\\n  (0,_sections_product_image_gallery_main__WEBPACK_IMPORTED_MODULE_34__[\\\"default\\\"])();\\n  (0,_sections_product_nutrition_info_main__WEBPACK_IMPORTED_MODULE_33__[\\\"default\\\"])();\\n  (0,_sections_footer_main__WEBPACK_IMPORTED_MODULE_18__[\\\"default\\\"])();\\n  (0,_sections_social_clips_main__WEBPACK_IMPORTED_MODULE_19__[\\\"default\\\"])();\\n  (0,_sections_bab_product_carousel_main__WEBPACK_IMPORTED_MODULE_20__[\\\"default\\\"])();\\n  (0,_sections_featured_in_main__WEBPACK_IMPORTED_MODULE_21__[\\\"default\\\"])();\\n  (0,_sections_homepage_tabs_main__WEBPACK_IMPORTED_MODULE_22__[\\\"default\\\"])();\\n  (0,_sections_recipes_main__WEBPACK_IMPORTED_MODULE_23__[\\\"default\\\"])();\\n  (0,_sections_recipe_archive_main__WEBPACK_IMPORTED_MODULE_24__[\\\"default\\\"])();\\n  (0,_sections_kg_countdown_main__WEBPACK_IMPORTED_MODULE_25__[\\\"default\\\"])();\\n  (0,_sections_nutrition_ingredients_main__WEBPACK_IMPORTED_MODULE_26__[\\\"default\\\"])();\\n  (0,_sections_nutrition_tables_main__WEBPACK_IMPORTED_MODULE_27__[\\\"default\\\"])();\\n  (0,_sections_prebuilt_bundles_main__WEBPACK_IMPORTED_MODULE_28__[\\\"default\\\"])();\\n  (0,_sections_content_links_main__WEBPACK_IMPORTED_MODULE_29__[\\\"default\\\"])();\\n  (0,_sections_prebuilt_bundle_products_main__WEBPACK_IMPORTED_MODULE_30__[\\\"default\\\"])();\\n  (0,_sections_fixed_bab_button_main__WEBPACK_IMPORTED_MODULE_31__[\\\"default\\\"])();\\n\\n  // This snippit is used to counteract the problem on iOS with the 100vh bug\\n  var appHeight = function appHeight() {\\n    var doc = document.documentElement;\\n    doc.style.setProperty(\\\"--app-height\\\", \\\"\\\".concat(window.innerHeight, \\\"px\\\"));\\n  };\\n  var bodyHeight = function bodyHeight() {\\n    var doc = document.documentElement;\\n    var elementsHeight = 0;\\n    var $elements = document.querySelectorAll(\\\"section.usp-banner, section.anouncement-banner,header.header .localization-selector, header.header .navbar\\\");\\n    $elements.forEach(function ($element) {\\n      var boundingRect = $element.getBoundingClientRect();\\n      elementsHeight = elementsHeight + boundingRect.height;\\n    });\\n    var total = window.innerHeight - elementsHeight;\\n    doc.style.setProperty(\\\"--body-height\\\", \\\"\\\".concat(total, \\\"px\\\"));\\n  };\\n  var headerHeight = function headerHeight() {\\n    var doc = document.documentElement;\\n    var elementsHeight = 0;\\n    var $elements = document.querySelectorAll(\\\"section.anouncement-banner, header.header .localization-selector, header.header .navbar\\\");\\n    $elements.forEach(function ($element) {\\n      var boundingRect = $element.getBoundingClientRect();\\n      elementsHeight = elementsHeight + boundingRect.height;\\n    });\\n    var total = elementsHeight;\\n    doc.style.setProperty(\\\"--header-height\\\", \\\"\\\".concat(total, \\\"px\\\"));\\n  };\\n  window.visualViewport.addEventListener(\\\"resize\\\", function () {\\n    //window.addEventListener(\\\"resize\\\", () => {\\n    appHeight();\\n    bodyHeight();\\n    headerHeight();\\n  });\\n  appHeight();\\n  bodyHeight();\\n  headerHeight();\\n});//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFFO0lBQ1hNLFVBQVUsRUFBRTtJQUNaVSxZQUFZLEVBQUU7RUFDaEIsQ0FBQyxDQUFDO0VBRUZoQixTQUFTLEVBQUU7RUFDWE0sVUFBVSxFQUFFO0VBQ1pVLFlBQVksRUFBRTtBQUNoQixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL3Jlc291cmNlcy9zY3JpcHRzL2FwcC5qcz81MDMwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydCBNb2R1bGVzXHJcbmltcG9ydCB7IENhcnQgfSBmcm9tIFwiLi9tb2R1bGVzL0NhcnRcIjtcclxuaW1wb3J0IHsgTW9uZXkgfSBmcm9tIFwiLi9tb2R1bGVzL01vbmV5XCI7XHJcbmltcG9ydCB7IEFuaW1hdGlvbiB9IGZyb20gXCIuL21vZHVsZXMvQW5pbWF0aW9uXCI7XHJcblxyXG4vLyBJbXBvcnQgQ29tcG9uZW50c1xyXG5pbXBvcnQgdG9nZ2xlVmlzaWJpbGl0eSBmcm9tIFwiLi9jb21wb25lbnRzL3RvZ2dsZS12aXNpYmlsaXR5L21haW5cIjtcclxuLy8gaW1wb3J0IGV4YW1wbGVDb21wb25lbnQgZnJvbSBcIi4vY29tcG9uZW50cy9leGFtcGxlLWNvbXBvbmVudC9tYWluXCI7XHJcbmltcG9ydCBwcm9kdWN0Q2FyZHMgZnJvbSBcIi4vY29tcG9uZW50cy9wcm9kdWN0LWNhcmQvbWFpblwiO1xyXG5cclxuLy8gSW1wb3J0IGZlYXR1cmVzIC0gZW5hYmxlIGZlYXR1cmVzIGFzIG5lZWRlZCBmb3IgdGhlIHByb2plY3RcclxuaW1wb3J0IGJ1aWxkQUJ1bmRsZSBmcm9tIFwiLi9mZWF0dXJlcy9idWlsZC1hLWJ1bmRsZS9idWlsZC1hLWJ1bmRsZVwiO1xyXG5cclxuLy8gSW1wb3J0IFNlY3Rpb25zXHJcbi8vIGltcG9ydCBleGFtcGxlU2VjdGlvbiBmcm9tIFwiLi9zZWN0aW9ucy9leGFtcGxlLXNlY3Rpb24vbWFpblwiO1xyXG5pbXBvcnQgaGVhZGVyIGZyb20gXCIuL3NlY3Rpb25zL2hlYWRlci9tYWluXCI7XHJcbmltcG9ydCBoZXJvIGZyb20gXCIuL3NlY3Rpb25zL2hlcm8vbWFpblwiO1xyXG5pbXBvcnQgZmFxc1NlY3Rpb24gZnJvbSBcIi4vc2VjdGlvbnMvZmFxcy9tYWluXCI7XHJcbmltcG9ydCBmZWF0dXJlZEFydGljbGVzIGZyb20gXCIuL3NlY3Rpb25zL2ZlYXR1cmVkLWFydGljbGVzL21haW5cIjtcclxuaW1wb3J0IGZlYXR1cmVkQ29sbGVjdGlvbnMgZnJvbSBcIi4vc2VjdGlvbnMvZmVhdHVyZWQtY29sbGVjdGlvbnMvbWFpblwiO1xyXG5pbXBvcnQgZmVhdHVyZWRQcm9kdWN0cyBmcm9tIFwiLi9zZWN0aW9ucy9mZWF0dXJlZC1wcm9kdWN0cy9tYWluXCI7XHJcbmltcG9ydCBmZWF0dXJlZFJldmlld3MgZnJvbSBcIi4vc2VjdGlvbnMvZmVhdHVyZWQtcmV2aWV3cy9tYWluXCI7XHJcbmltcG9ydCBzb2NpYWxzIGZyb20gXCIuL3NlY3Rpb25zL3NvY2lhbHMvbWFpblwiO1xyXG5pbXBvcnQgYWNjb3VudCBmcm9tIFwiLi9zZWN0aW9ucy9hY2NvdW50L21haW5cIjtcclxuaW1wb3J0IHVzcHMgZnJvbSBcIi4vc2VjdGlvbnMvdXNwcy9tYWluXCI7XHJcbmltcG9ydCBibG9nU2VjdGlvbiBmcm9tIFwiLi9zZWN0aW9ucy9ibG9nL21haW5cIjtcclxuaW1wb3J0IGNvbGxlY3Rpb25UZW1wbGF0ZSBmcm9tIFwiLi9zZWN0aW9ucy9jb2xsZWN0aW9uLXRlbXBsYXRlL21haW5cIjtcclxuaW1wb3J0IGZvb3RlciBmcm9tIFwiLi9zZWN0aW9ucy9mb290ZXIvbWFpblwiO1xyXG5pbXBvcnQgc29jaWFsQ2xpcHMgZnJvbSBcIi4vc2VjdGlvbnMvc29jaWFsLWNsaXBzL21haW5cIjtcclxuaW1wb3J0IGJhYlByb2R1Y3RDYXJvdXNlbCBmcm9tIFwiLi9zZWN0aW9ucy9iYWItcHJvZHVjdC1jYXJvdXNlbC9tYWluXCI7XHJcbmltcG9ydCBmZWF0dXJlZEluIGZyb20gXCIuL3NlY3Rpb25zL2ZlYXR1cmVkLWluL21haW5cIjtcclxuaW1wb3J0IGhvbWVwYWdlVGFicyBmcm9tIFwiLi9zZWN0aW9ucy9ob21lcGFnZS10YWJzL21haW5cIjtcclxuaW1wb3J0IHJlY2lwZXMgZnJvbSBcIi4vc2VjdGlvbnMvcmVjaXBlcy9tYWluXCI7XHJcbmltcG9ydCByZWNpcGVBcmNoaXZlIGZyb20gXCIuL3NlY3Rpb25zL3JlY2lwZS1hcmNoaXZlL21haW5cIjtcclxuaW1wb3J0IGtnQ291bnRkb3duIGZyb20gXCIuL3NlY3Rpb25zL2tnLWNvdW50ZG93bi9tYWluXCI7XHJcbmltcG9ydCBudXRyaXRpb25JbmdyZWRpZW50cyBmcm9tIFwiLi9zZWN0aW9ucy9udXRyaXRpb24taW5ncmVkaWVudHMvbWFpblwiO1xyXG5pbXBvcnQgbnV0cml0aW9uVGFibGVzIGZyb20gXCIuL3NlY3Rpb25zL251dHJpdGlvbi10YWJsZXMvbWFpblwiO1xyXG5pbXBvcnQgcHJlYnVpbHRCdW5kbGVzIGZyb20gXCIuL3NlY3Rpb25zL3ByZWJ1aWx0LWJ1bmRsZXMvbWFpblwiO1xyXG5pbXBvcnQgY29udGVudExpbmtzIGZyb20gXCIuL3NlY3Rpb25zL2NvbnRlbnQtbGlua3MvbWFpblwiO1xyXG5pbXBvcnQgcHJlYnVpbHRCdW5kbGVQcm9kdWN0cyBmcm9tIFwiLi9zZWN0aW9ucy9wcmVidWlsdC1idW5kbGUtcHJvZHVjdHMvbWFpblwiO1xyXG5pbXBvcnQgZml4ZWRCYWJCdXR0b24gZnJvbSBcIi4vc2VjdGlvbnMvZml4ZWQtYmFiLWJ1dHRvbi9tYWluXCI7XHJcblxyXG4vLyBJbXBvcnQgUHJvZHVjdCBTZWN0aW9uc1xyXG5pbXBvcnQgcHJvZHVjdFRlbXBsYXRlIGZyb20gXCIuL3NlY3Rpb25zL3Byb2R1Y3QtdGVtcGxhdGUvbWFpblwiO1xyXG5pbXBvcnQgcHJvZHVjdE51dHJpdGlvbkluZm8gZnJvbSBcIi4vc2VjdGlvbnMvcHJvZHVjdC1udXRyaXRpb24taW5mby9tYWluXCI7XHJcbmltcG9ydCBwcm9kdWN0SW1hZ2VHYWxsZXJ5IGZyb20gXCIuL3NlY3Rpb25zL3Byb2R1Y3QtaW1hZ2UtZ2FsbGVyeS9tYWluXCI7XHJcbmltcG9ydCBwcm9kdWN0QWNjb3JkaW9ucyBmcm9tIFwiLi9zZWN0aW9ucy9wcm9kdWN0LWFjY29yZGlvbnMvbWFpblwiO1xyXG5cclxuLy9JbXBvcnQgQ2FydCBTZWN0aW9uc1xyXG5pbXBvcnQgY2FydFRlbXBsYXRlIGZyb20gXCIuL3NlY3Rpb25zL2NhcnQtdGVtcGxhdGUvbWFpblwiO1xyXG4vL2ltcG9ydCBjYXJ0QXNpZGUgZnJvbSBcIi4vc2VjdGlvbnMvY2FydC1hc2lkZS9tYWluXCI7XHJcblxyXG4vL0ltcG9ydCBDb29raWUgQmFubmVyXHJcbmltcG9ydCBjb29raWVCYW5uZXIgZnJvbSBcIi4vc2VjdGlvbnMvY29va2llLWJhbm5lci9tYWluXCI7XHJcblxyXG4vLyBSdW4gYW5pbWF0aW9uIG1vZHVsZVxyXG5BbmltYXRpb24oKTtcclxuXHJcbi8vQ2hlY2sgaWYgd2UgbmVlZCB0byByZXBsYWNlIGhlYWRlciBhbmQgbWFrZSBpdCByZWxhdGl2ZSBcclxuaWYod2luZG93LmxvY2F0aW9uLnBhdGhuYW1lID09IFwiL3Byb2R1Y3RzL2J1aWxkLWEtYnVuZGxlXCIgfHwgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lID09IFwiL3BhZ2VzL251dHJpdGlvbmFsLWluZm9cIil7XHJcbiAgY29uc3QgJHNpdGVIZWFkZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaGVhZGVyLmhlYWRlclwiKTtcclxuICBpZigkc2l0ZUhlYWRlcil7XHJcbiAgICBpZigkc2l0ZUhlYWRlci5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcInN0aWNreVwiKSl7XHJcbiAgICAgICRzaXRlSGVhZGVyLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcInN0aWNreVwiKTtcclxuICAgICAgJHNpdGVIZWFkZXIucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwicmVsYXRpdmVcIik7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5cclxuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIiwgKGV2ZW50KSA9PiB7XHJcbiAgLy8gQWRkIE1vZHVsZXMgdG8gd2luZG93XHJcbiAgd2luZG93LkNhcmJvbiA9IHsgQ2FydDogbmV3IENhcnQoKSwgTW9uZXk6IG5ldyBNb25leSgpIH07XHJcblxyXG4gIC8vIFJ1biBmZWF0dXJlcyAtIGVuYWJsZSBhcyBuZWVkZWRcclxuICBidWlsZEFCdW5kbGUoKTtcclxuXHJcbiAgLy8gUnVuIENvbXBvbmVuZXRzXHJcbiAgLy8gZXhhbXBsZUNvbXBvbmVudCgpO1xyXG4gIHByb2R1Y3RDYXJkcygpO1xyXG5cclxuICAvLyBSdW4gc2VjdGlvbnNcclxuICAvLyBleGFtcGxlU2VjdGlvbigpO1xyXG4gIGhlYWRlcigpO1xyXG4gIGhlcm8oKTtcclxuICBmYXFzU2VjdGlvbigpO1xyXG4gIGZlYXR1cmVkQXJ0aWNsZXMoKTtcclxuICBmZWF0dXJlZENvbGxlY3Rpb25zKCk7XHJcbiAgZmVhdHVyZWRQcm9kdWN0cygpO1xyXG4gIGZlYXR1cmVkUmV2aWV3cygpO1xyXG4gIHNvY2lhbHMoKTtcclxuICBhY2NvdW50KCk7XHJcbiAgdG9nZ2xlVmlzaWJpbGl0eSgpO1xyXG4gIHByb2R1Y3RUZW1wbGF0ZSgpO1xyXG4gIHVzcHMoKTtcclxuICBibG9nU2VjdGlvbigpO1xyXG4gIGNvbGxlY3Rpb25UZW1wbGF0ZSgpO1xyXG4gIGNhcnRUZW1wbGF0ZSgpO1xyXG4gIC8vY2FydEFzaWRlKCk7XHJcbiAgY29va2llQmFubmVyKCk7XHJcbiAgcHJvZHVjdEFjY29yZGlvbnMoKTtcclxuICBwcm9kdWN0SW1hZ2VHYWxsZXJ5KCk7XHJcbiAgcHJvZHVjdE51dHJpdGlvbkluZm8oKTtcclxuICBmb290ZXIoKTtcclxuICBzb2NpYWxDbGlwcygpO1xyXG4gIGJhYlByb2R1Y3RDYXJvdXNlbCgpO1xyXG4gIGZlYXR1cmVkSW4oKTtcclxuICBob21lcGFnZVRhYnMoKTtcclxuICByZWNpcGVzKCk7XHJcbiAgcmVjaXBlQXJjaGl2ZSgpO1xyXG4gIGtnQ291bnRkb3duKCk7XHJcbiAgbnV0cml0aW9uSW5ncmVkaWVudHMoKTtcclxuICBudXRyaXRpb25UYWJsZXMoKTtcclxuICBwcmVidWlsdEJ1bmRsZXMoKTtcclxuICBjb250ZW50TGlua3MoKTtcclxuICBwcmVidWlsdEJ1bmRsZVByb2R1Y3RzKCk7XHJcbiAgZml4ZWRCYWJCdXR0b24oKTtcclxuICBcclxuXHJcbiAgLy8gVGhpcyBzbmlwcGl0IGlzIHVzZWQgdG8gY291bnRlcmFjdCB0aGUgcHJvYmxlbSBvbiBpT1Mgd2l0aCB0aGUgMTAwdmggYnVnXHJcbiAgY29uc3QgYXBwSGVpZ2h0ID0gKCkgPT4ge1xyXG4gICAgY29uc3QgZG9jID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG4gICAgZG9jLnN0eWxlLnNldFByb3BlcnR5KFwiLS1hcHAtaGVpZ2h0XCIsIGAke3dpbmRvdy5pbm5lckhlaWdodH1weGApO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGJvZHlIZWlnaHQgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBkb2MgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XHJcblxyXG4gICAgbGV0IGVsZW1lbnRzSGVpZ2h0ID0gMDtcclxuICAgIGNvbnN0ICRlbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcbiAgICAgIFwic2VjdGlvbi51c3AtYmFubmVyLCBzZWN0aW9uLmFub3VuY2VtZW50LWJhbm5lcixoZWFkZXIuaGVhZGVyIC5sb2NhbGl6YXRpb24tc2VsZWN0b3IsIGhlYWRlci5oZWFkZXIgLm5hdmJhclwiXHJcbiAgICApO1xyXG5cclxuICAgICRlbGVtZW50cy5mb3JFYWNoKCgkZWxlbWVudCkgPT4ge1xyXG4gICAgICBjb25zdCBib3VuZGluZ1JlY3QgPSAkZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgZWxlbWVudHNIZWlnaHQgPSBlbGVtZW50c0hlaWdodCArIGJvdW5kaW5nUmVjdC5oZWlnaHQ7XHJcbiAgICB9KTtcclxuICAgIGxldCB0b3RhbCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIGVsZW1lbnRzSGVpZ2h0O1xyXG4gICAgZG9jLnN0eWxlLnNldFByb3BlcnR5KFwiLS1ib2R5LWhlaWdodFwiLCBgJHt0b3RhbH1weGApO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IGhlYWRlckhlaWdodCA9ICgpID0+IHtcclxuICAgIGNvbnN0IGRvYyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuICAgIGxldCBlbGVtZW50c0hlaWdodCA9IDA7XHJcbiAgICBjb25zdCAkZWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICBcInNlY3Rpb24uYW5vdW5jZW1lbnQtYmFubmVyLCBoZWFkZXIuaGVhZGVyIC5sb2NhbGl6YXRpb24tc2VsZWN0b3IsIGhlYWRlci5oZWFkZXIgLm5hdmJhclwiXHJcbiAgICApO1xyXG5cclxuICAgICRlbGVtZW50cy5mb3JFYWNoKCgkZWxlbWVudCkgPT4ge1xyXG4gICAgICBjb25zdCBib3VuZGluZ1JlY3QgPSAkZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgZWxlbWVudHNIZWlnaHQgPSBlbGVtZW50c0hlaWdodCArIGJvdW5kaW5nUmVjdC5oZWlnaHQ7XHJcbiAgICB9KTtcclxuICAgIGxldCB0b3RhbCA9IGVsZW1lbnRzSGVpZ2h0O1xyXG4gICAgZG9jLnN0eWxlLnNldFByb3BlcnR5KFwiLS1oZWFkZXItaGVpZ2h0XCIsIGAke3RvdGFsfXB4YCk7XHJcbiAgfTtcclxuXHJcbiAgd2luZG93LnZpc3VhbFZpZXdwb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgKCkgPT4ge1xyXG4gIC8vd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgKCkgPT4ge1xyXG4gICAgYXBwSGVpZ2h0KCk7XHJcbiAgICBib2R5SGVpZ2h0KCk7XHJcbiAgICBoZWFkZXJIZWlnaHQoKTtcclxuICB9KTtcclxuXHJcbiAgYXBwSGVpZ2h0KCk7XHJcbiAgYm9keUhlaWdodCgpO1xyXG4gIGhlYWRlckhlaWdodCgpO1xyXG59KTtcclxuIl0sIm5hbWVzIjpbIkNhcnQiLCJNb25leSIsIkFuaW1hdGlvbiIsInRvZ2dsZVZpc2liaWxpdHkiLCJwcm9kdWN0Q2FyZHMiLCJidWlsZEFCdW5kbGUiLCJoZWFkZXIiLCJoZXJvIiwiZmFxc1NlY3Rpb24iLCJmZWF0dXJlZEFydGljbGVzIiwiZmVhdHVyZWRDb2xsZWN0aW9ucyIsImZlYXR1cmVkUHJvZHVjdHMiLCJmZWF0dXJlZFJldmlld3MiLCJzb2NpYWxzIiwiYWNjb3VudCIsInVzcHMiLCJibG9nU2VjdGlvbiIsImNvbGxlY3Rpb25UZW1wbGF0ZSIsImZvb3RlciIsInNvY2lhbENsaXBzIiwiYmFiUHJvZHVjdENhcm91c2VsIiwiZmVhdHVyZWRJbiIsImhvbWVwYWdlVGFicyIsInJlY2lwZXMiLCJyZWNpcGVBcmNoaXZlIiwia2dDb3VudGRvd24iLCJudXRyaXRpb25JbmdyZWRpZW50cyIsIm51dHJpdGlvblRhYmxlcyIsInByZWJ1aWx0QnVuZGxlcyIsImNvbnRlbnRMaW5rcyIsInByZWJ1aWx0QnVuZGxlUHJvZHVjdHMiLCJmaXhlZEJhYkJ1dHRvbiIsInByb2R1Y3RUZW1wbGF0ZSIsInByb2R1Y3ROdXRyaXRpb25JbmZvIiwicHJvZHVjdEltYWdlR2FsbGVyeSIsInByb2R1Y3RBY2NvcmRpb25zIiwiY2FydFRlbXBsYXRlIiwiY29va2llQmFubmVyIiwid2luZG93IiwibG9jYXRpb24iLCJwYXRobmFtZSIsIiRzaXRlSGVhZGVyIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwicGFyZW50RWxlbWVudCIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwicmVtb3ZlIiwiYWRkIiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwiQ2FyYm9uIiwiYXBwSGVpZ2h0IiwiZG9jIiwiZG9jdW1lbnRFbGVtZW50Iiwic3R5bGUiLCJzZXRQcm9wZXJ0eSIsImlubmVySGVpZ2h0IiwiYm9keUhlaWdodCIsImVsZW1lbnRzSGVpZ2h0IiwiJGVsZW1lbnRzIiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giLCIkZWxlbWVudCIsImJvdW5kaW5nUmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImhlaWdodCIsInRvdGFsIiwiaGVhZGVySGVpZ2h0IiwidmlzdWFsVmlld3BvcnQiXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./resources/scripts/app.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/components/product-card/main.js\":\r\n/*!***********************************************************!*\\\r\n  !*** ./resources/scripts/components/product-card/main.js ***!\r\n  \\***********************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"productCards\\\": () => (/* binding */ productCards)\\n/* harmony export */ });\\nfunction _typeof(obj) { \\\"@babel/helpers - typeof\\\"; return _typeof = \\\"function\\\" == typeof Symbol && \\\"symbol\\\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \\\"function\\\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \\\"symbol\\\" : typeof obj; }, _typeof(obj); }\\nfunction _regeneratorRuntime() { \\\"use strict\\\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = \\\"function\\\" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || \\\"@@iterator\\\", asyncIteratorSymbol = $Symbol.asyncIterator || \\\"@@asyncIterator\\\", toStringTagSymbol = $Symbol.toStringTag || \\\"@@toStringTag\\\"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, \\\"\\\"); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, \\\"_invoke\\\", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: \\\"normal\\\", arg: fn.call(obj, arg) }; } catch (err) { return { type: \\\"throw\\\", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { [\\\"next\\\", \\\"throw\\\", \\\"return\\\"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (\\\"throw\\\" !== record.type) { var result = record.arg, value = result.value; return value && \\\"object\\\" == _typeof(value) && hasOwn.call(value, \\\"__await\\\") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke(\\\"next\\\", value, resolve, reject); }, function (err) { invoke(\\\"throw\\\", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke(\\\"throw\\\", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, \\\"_invoke\\\", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = \\\"suspendedStart\\\"; return function (method, arg) { if (\\\"executing\\\" === state) throw new Error(\\\"Generator is already running\\\"); if (\\\"completed\\\" === state) { if (\\\"throw\\\" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (\\\"next\\\" === context.method) context.sent = context._sent = context.arg;else if (\\\"throw\\\" === context.method) { if (\\\"suspendedStart\\\" === state) throw state = \\\"completed\\\", context.arg; context.dispatchException(context.arg); } else \\\"return\\\" === context.method && context.abrupt(\\\"return\\\", context.arg); state = \\\"executing\\\"; var record = tryCatch(innerFn, self, context); if (\\\"normal\\\" === record.type) { if (state = context.done ? \\\"completed\\\" : \\\"suspendedYield\\\", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } \\\"throw\\\" === record.type && (state = \\\"completed\\\", context.method = \\\"throw\\\", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, \\\"throw\\\" === methodName && delegate.iterator[\\\"return\\\"] && (context.method = \\\"return\\\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \\\"throw\\\" === context.method) || \\\"return\\\" !== methodName && (context.method = \\\"throw\\\", context.arg = new TypeError(\\\"The iterator does not provide a '\\\" + methodName + \\\"' method\\\")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if (\\\"throw\\\" === record.type) return context.method = \\\"throw\\\", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \\\"return\\\" !== context.method && (context.method = \\\"next\\\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \\\"throw\\\", context.arg = new TypeError(\\\"iterator result is not an object\\\"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = \\\"normal\\\", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: \\\"root\\\" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if (\\\"function\\\" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, \\\"constructor\\\", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, \\\"constructor\\\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \\\"GeneratorFunction\\\"), exports.isGeneratorFunction = function (genFun) { var ctor = \\\"function\\\" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || \\\"GeneratorFunction\\\" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \\\"GeneratorFunction\\\")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \\\"Generator\\\"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, \\\"toString\\\", function () { return \\\"[object Generator]\\\"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \\\"next\\\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) \\\"t\\\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if (\\\"throw\\\" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = \\\"throw\\\", record.arg = exception, context.next = loc, caught && (context.method = \\\"next\\\", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if (\\\"root\\\" === entry.tryLoc) return handle(\\\"end\\\"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, \\\"catchLoc\\\"), hasFinally = hasOwn.call(entry, \\\"finallyLoc\\\"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error(\\\"try statement without catch or finally\\\"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, \\\"finallyLoc\\\") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && (\\\"break\\\" === type || \\\"continue\\\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = \\\"next\\\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if (\\\"throw\\\" === record.type) throw record.arg; return \\\"break\\\" === record.type || \\\"continue\\\" === record.type ? this.next = record.arg : \\\"return\\\" === record.type ? (this.rval = this.arg = record.arg, this.method = \\\"return\\\", this.next = \\\"end\\\") : \\\"normal\\\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, \\\"catch\\\": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (\\\"throw\\\" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error(\\\"illegal catch attempt\\\"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, \\\"next\\\" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }\\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \\\"next\\\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \\\"throw\\\", err); } _next(undefined); }); }; }\\nvar productCards = function productCards() {\\n  var $productCards = document.querySelectorAll(\\\".product-card\\\");\\n  $productCards.forEach(function ($productCard) {\\n    // const productId = $productCard.dataset.productId;\\n    var variantId = $productCard.dataset.variantId;\\n    var $productCardImage = $productCard.querySelector(\\\".product-card__image\\\");\\n    var $productCardQuickAdd = $productCard.querySelector(\\\".product-card__quick-add\\\");\\n    $productCardQuickAdd.addEventListener(\\\"click\\\", /*#__PURE__*/function () {\\n      var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(event) {\\n        var bundle, updateData, productId, productTitle, productPrice, productPriceString, compareProductPrice, compareProductPriceString, productImage, quantity, cart, response, $cartAsideBackground, $cartAside, $body, $navbarCart, $navbarCartImage;\\n        return _regeneratorRuntime().wrap(function _callee$(_context) {\\n          while (1) switch (_context.prev = _context.next) {\\n            case 0:\\n              event.preventDefault();\\n              if (!($productCard.dataset.quickAddType == 'bundle')) {\\n                _context.next = 20;\\n                break;\\n              }\\n              // Create bundle object\\n              bundle = {\\n                bundleId: \\\"bundle_\\\" + Date.now(),\\n                items: {}\\n              }; // create object to track products for removal\\n              updateData = {\\n                updates: {}\\n              }; // Get product data\\n              productId = $productCard.dataset.variantId;\\n              productTitle = $productCard.dataset.title;\\n              productPrice = parseFloat($productCard.dataset.price);\\n              productPriceString = $productCard.dataset.priceString;\\n              compareProductPrice = parseFloat($productCard.dataset.comparePrice);\\n              compareProductPriceString = $productCard.dataset.comparePriceString;\\n              productImage = $productCard.dataset.image;\\n              quantity = 1; // Add product to bundle\\n              bundle.items[productId] = {\\n                title: productTitle,\\n                price: productPrice,\\n                priceString: productPriceString,\\n                comparePrice: compareProductPrice,\\n                comparePriceString: compareProductPriceString,\\n                image: productImage,\\n                quantity: quantity\\n              };\\n\\n              // Add product to removal request\\n              updateData.updates[productId] = 0;\\n\\n              // Save the updated bundle to localStorage\\n              localStorage.setItem(\\\"bundle\\\", JSON.stringify(bundle));\\n\\n              // Remove current bundle from cart to avoid duplicates\\n              _context.next = 17;\\n              return fetch('/cart/update.js', {\\n                method: 'POST',\\n                headers: {\\n                  'Content-Type': 'application/json'\\n                },\\n                body: JSON.stringify(updateData)\\n              });\\n            case 17:\\n              window.location.href = $productCard.dataset.bundle;\\n              _context.next = 25;\\n              break;\\n            case 20:\\n              cart = window.Carbon.Cart;\\n              _context.next = 23;\\n              return cart.quickAddItemToCart(variantId);\\n            case 23:\\n              response = _context.sent;\\n              if (response) {\\n                if (cart.useCartAside) {\\n                  $cartAsideBackground = document.querySelector(\\\".cart-aside__background\\\");\\n                  $cartAside = $cartAsideBackground.querySelector(\\\"aside.cart-aside\\\");\\n                  $body = document.querySelector(\\\"body\\\");\\n                  $body.classList.add(\\\"overflow-y-hidden\\\");\\n                  $cartAsideBackground.classList.remove(\\\"pointer-events-none\\\");\\n                  $cartAsideBackground.classList.add(\\\"bg-black\\\", \\\"bg-opacity-40\\\");\\n                  $cartAside.classList.remove(\\\"translate-x-full\\\", \\\"ponter-events-none\\\", \\\"hidden\\\");\\n                } else {\\n                  $navbarCart = document.querySelector(\\\".nav__bar-cart\\\");\\n                  $navbarCartImage = $navbarCart.querySelector(\\\".nav__bar-cart-image\\\");\\n                  $navbarCartImage.src = $productCardImage.src;\\n                  $navbarCart.classList.remove(\\\"opacity-0\\\", \\\"pointer-events-none\\\");\\n                  $navbarCart.classList.add(\\\"opacity-100\\\");\\n                  setTimeout(function () {\\n                    $navbarCart.classList.remove(\\\"opacity-100\\\");\\n                    $navbarCart.classList.add(\\\"opacity-0\\\", \\\"pointer-events-none\\\");\\n                  }, 5000);\\n                }\\n              }\\n            case 25:\\n            case \\\"end\\\":\\n              return _context.stop();\\n          }\\n        }, _callee);\\n      }));\\n      return function (_x) {\\n        return _ref.apply(this, arguments);\\n      };\\n    }());\\n  });\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (productCards);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9jb21wb25lbnRzL3Byb2R1Y3QtY2FyZC9tYWluLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OzsrQ0FDQTtBQUFBO0FBQUE7QUFETyxJQUFNQSxZQUFZLEdBQUcsU0FBZkEsWUFBWSxHQUFTO0VBQ2hDLElBQU1DLGFBQWEsR0FBR0MsUUFBUSxDQUFDQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUM7RUFDaEVGLGFBQWEsQ0FBQ0csT0FBTyxDQUFDLFVBQUNDLFlBQVksRUFBSztJQUN0QztJQUNBLElBQU1DLFNBQVMsR0FBR0QsWUFBWSxDQUFDRSxPQUFPLENBQUNELFNBQVM7SUFFaEQsSUFBTUUsaUJBQWlCLEdBQUdILFlBQVksQ0FBQ0ksYUFBYSxDQUNsRCxzQkFBc0IsQ0FDdkI7SUFDRCxJQUFNQyxvQkFBb0IsR0FBR0wsWUFBWSxDQUFDSSxhQUFhLENBQ3JELDBCQUEwQixDQUMzQjtJQUNEQyxvQkFBb0IsQ0FBQ0MsZ0JBQWdCLENBQUMsT0FBTztNQUFBLHNFQUFFLGlCQUFPQyxLQUFLO1FBQUE7UUFBQTtVQUFBO1lBQUE7Y0FDekRBLEtBQUssQ0FBQ0MsY0FBYyxFQUFFO2NBQUMsTUFFbkJSLFlBQVksQ0FBQ0UsT0FBTyxDQUFDTyxZQUFZLElBQUksUUFBUTtnQkFBQTtnQkFBQTtjQUFBO2NBQy9DO2NBQ0lDLE1BQU0sR0FBRztnQkFDWEMsUUFBUSxFQUFFLFNBQVMsR0FBR0MsSUFBSSxDQUFDQyxHQUFHLEVBQUU7Z0JBQ2hDQyxLQUFLLEVBQUUsQ0FBQztjQUNWLENBQUMsRUFFRDtjQUNJQyxVQUFVLEdBQUc7Z0JBQUVDLE9BQU8sRUFBRSxDQUFDO2NBQUUsQ0FBQyxFQUVoQztjQUNNQyxTQUFTLEdBQUdqQixZQUFZLENBQUNFLE9BQU8sQ0FBQ0QsU0FBUztjQUMxQ2lCLFlBQVksR0FBR2xCLFlBQVksQ0FBQ0UsT0FBTyxDQUFDaUIsS0FBSztjQUN6Q0MsWUFBWSxHQUFHQyxVQUFVLENBQUNyQixZQUFZLENBQUNFLE9BQU8sQ0FBQ29CLEtBQUssQ0FBQztjQUNyREMsa0JBQWtCLEdBQUd2QixZQUFZLENBQUNFLE9BQU8sQ0FBQ3NCLFdBQVc7Y0FDckRDLG1CQUFtQixHQUFHSixVQUFVLENBQUNyQixZQUFZLENBQUNFLE9BQU8sQ0FBQ3dCLFlBQVksQ0FBQztjQUNuRUMseUJBQXlCLEdBQUczQixZQUFZLENBQUNFLE9BQU8sQ0FBQzBCLGtCQUFrQjtjQUNuRUMsWUFBWSxHQUFHN0IsWUFBWSxDQUFDRSxPQUFPLENBQUM0QixLQUFLO2NBQ3pDQyxRQUFRLEdBQUcsQ0FBQyxFQUVsQjtjQUNBckIsTUFBTSxDQUFDSSxLQUFLLENBQUNHLFNBQVMsQ0FBQyxHQUFHO2dCQUN4QkUsS0FBSyxFQUFFRCxZQUFZO2dCQUNuQkksS0FBSyxFQUFFRixZQUFZO2dCQUNuQkksV0FBVyxFQUFFRCxrQkFBa0I7Z0JBQy9CRyxZQUFZLEVBQUVELG1CQUFtQjtnQkFDakNHLGtCQUFrQixFQUFFRCx5QkFBeUI7Z0JBQzdDRyxLQUFLLEVBQUVELFlBQVk7Z0JBQ25CRSxRQUFRLEVBQUVBO2NBQ1osQ0FBQzs7Y0FFRDtjQUNBaEIsVUFBVSxDQUFDQyxPQUFPLENBQUNDLFNBQVMsQ0FBQyxHQUFHLENBQUM7O2NBR2pDO2NBQ0FlLFlBQVksQ0FBQ0MsT0FBTyxDQUFDLFFBQVEsRUFBRUMsSUFBSSxDQUFDQyxTQUFTLENBQUN6QixNQUFNLENBQUMsQ0FBQzs7Y0FFdEQ7Y0FBQTtjQUFBLE9BQ00wQixLQUFLLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzNCQyxNQUFNLEVBQUUsTUFBTTtnQkFDZEMsT0FBTyxFQUFFO2tCQUNMLGNBQWMsRUFBRTtnQkFDcEIsQ0FBQztnQkFDREMsSUFBSSxFQUFFTCxJQUFJLENBQUNDLFNBQVMsQ0FBQ3BCLFVBQVU7Y0FDbkMsQ0FBQyxDQUFDO1lBQUE7Y0FFRnlCLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDQyxJQUFJLEdBQUcxQyxZQUFZLENBQUNFLE9BQU8sQ0FBQ1EsTUFBTTtjQUFDO2NBQUE7WUFBQTtjQUU3Q2lDLElBQUksR0FBR0gsTUFBTSxDQUFDSSxNQUFNLENBQUNDLElBQUk7Y0FBQTtjQUFBLE9BQ1JGLElBQUksQ0FBQ0csa0JBQWtCLENBQUM3QyxTQUFTLENBQUM7WUFBQTtjQUFuRDhDLFFBQVE7Y0FDZCxJQUFJQSxRQUFRLEVBQUU7Z0JBQ1osSUFBSUosSUFBSSxDQUFDSyxZQUFZLEVBQUU7a0JBQ2ZDLG9CQUFvQixHQUFHcEQsUUFBUSxDQUFDTyxhQUFhLENBQ2pELHlCQUF5QixDQUMxQjtrQkFDSzhDLFVBQVUsR0FDZEQsb0JBQW9CLENBQUM3QyxhQUFhLENBQUMsa0JBQWtCLENBQUM7a0JBQ2xEK0MsS0FBSyxHQUFHdEQsUUFBUSxDQUFDTyxhQUFhLENBQUMsTUFBTSxDQUFDO2tCQUM1QytDLEtBQUssQ0FBQ0MsU0FBUyxDQUFDQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7a0JBQ3hDSixvQkFBb0IsQ0FBQ0csU0FBUyxDQUFDRSxNQUFNLENBQUMscUJBQXFCLENBQUM7a0JBQzVETCxvQkFBb0IsQ0FBQ0csU0FBUyxDQUFDQyxHQUFHLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQztrQkFDL0RILFVBQVUsQ0FBQ0UsU0FBUyxDQUFDRSxNQUFNLENBQ3pCLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsUUFBUSxDQUNUO2dCQUNILENBQUMsTUFBTTtrQkFDQ0MsV0FBVyxHQUFHMUQsUUFBUSxDQUFDTyxhQUFhLENBQUMsZ0JBQWdCLENBQUM7a0JBQ3REb0QsZ0JBQWdCLEdBQUdELFdBQVcsQ0FBQ25ELGFBQWEsQ0FDaEQsc0JBQXNCLENBQ3ZCO2tCQUNEb0QsZ0JBQWdCLENBQUNDLEdBQUcsR0FBR3RELGlCQUFpQixDQUFDc0QsR0FBRztrQkFDNUNGLFdBQVcsQ0FBQ0gsU0FBUyxDQUFDRSxNQUFNLENBQUMsV0FBVyxFQUFFLHFCQUFxQixDQUFDO2tCQUNoRUMsV0FBVyxDQUFDSCxTQUFTLENBQUNDLEdBQUcsQ0FBQyxhQUFhLENBQUM7a0JBRXhDSyxVQUFVLENBQUMsWUFBTTtvQkFDZkgsV0FBVyxDQUFDSCxTQUFTLENBQUNFLE1BQU0sQ0FBQyxhQUFhLENBQUM7b0JBQzNDQyxXQUFXLENBQUNILFNBQVMsQ0FBQ0MsR0FBRyxDQUFDLFdBQVcsRUFBRSxxQkFBcUIsQ0FBQztrQkFDL0QsQ0FBQyxFQUFFLElBQUksQ0FBQztnQkFDVjtjQUNGO1lBQUM7WUFBQTtjQUFBO1VBQUE7UUFBQTtNQUFBLENBR0o7TUFBQTtRQUFBO01BQUE7SUFBQSxJQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELGlFQUFlMUQsWUFBWSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vcmVzb3VyY2VzL3NjcmlwdHMvY29tcG9uZW50cy9wcm9kdWN0LWNhcmQvbWFpbi5qcz9jYjMwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBwcm9kdWN0Q2FyZHMgPSAoKSA9PiB7XHJcbiAgY29uc3QgJHByb2R1Y3RDYXJkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIucHJvZHVjdC1jYXJkXCIpO1xyXG4gICRwcm9kdWN0Q2FyZHMuZm9yRWFjaCgoJHByb2R1Y3RDYXJkKSA9PiB7XHJcbiAgICAvLyBjb25zdCBwcm9kdWN0SWQgPSAkcHJvZHVjdENhcmQuZGF0YXNldC5wcm9kdWN0SWQ7XHJcbiAgICBjb25zdCB2YXJpYW50SWQgPSAkcHJvZHVjdENhcmQuZGF0YXNldC52YXJpYW50SWQ7XHJcblxyXG4gICAgY29uc3QgJHByb2R1Y3RDYXJkSW1hZ2UgPSAkcHJvZHVjdENhcmQucXVlcnlTZWxlY3RvcihcclxuICAgICAgXCIucHJvZHVjdC1jYXJkX19pbWFnZVwiXHJcbiAgICApO1xyXG4gICAgY29uc3QgJHByb2R1Y3RDYXJkUXVpY2tBZGQgPSAkcHJvZHVjdENhcmQucXVlcnlTZWxlY3RvcihcclxuICAgICAgXCIucHJvZHVjdC1jYXJkX19xdWljay1hZGRcIlxyXG4gICAgKTtcclxuICAgICRwcm9kdWN0Q2FyZFF1aWNrQWRkLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBhc3luYyAoZXZlbnQpID0+IHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgXHJcbiAgICAgIGlmICgkcHJvZHVjdENhcmQuZGF0YXNldC5xdWlja0FkZFR5cGUgPT0gJ2J1bmRsZScpe1xyXG4gICAgICAgIC8vIENyZWF0ZSBidW5kbGUgb2JqZWN0XHJcbiAgICAgICAgbGV0IGJ1bmRsZSA9IHtcclxuICAgICAgICAgIGJ1bmRsZUlkOiBcImJ1bmRsZV9cIiArIERhdGUubm93KCksXHJcbiAgICAgICAgICBpdGVtczoge31cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBjcmVhdGUgb2JqZWN0IHRvIHRyYWNrIHByb2R1Y3RzIGZvciByZW1vdmFsXHJcbiAgICAgICAgbGV0IHVwZGF0ZURhdGEgPSB7IHVwZGF0ZXM6IHt9IH07XHJcblxyXG4gICAgICAgIC8vIEdldCBwcm9kdWN0IGRhdGFcclxuICAgICAgICBjb25zdCBwcm9kdWN0SWQgPSAkcHJvZHVjdENhcmQuZGF0YXNldC52YXJpYW50SWQ7XHJcbiAgICAgICAgY29uc3QgcHJvZHVjdFRpdGxlID0gJHByb2R1Y3RDYXJkLmRhdGFzZXQudGl0bGU7XHJcbiAgICAgICAgY29uc3QgcHJvZHVjdFByaWNlID0gcGFyc2VGbG9hdCgkcHJvZHVjdENhcmQuZGF0YXNldC5wcmljZSk7XHJcbiAgICAgICAgY29uc3QgcHJvZHVjdFByaWNlU3RyaW5nID0gJHByb2R1Y3RDYXJkLmRhdGFzZXQucHJpY2VTdHJpbmc7XHJcbiAgICAgICAgY29uc3QgY29tcGFyZVByb2R1Y3RQcmljZSA9IHBhcnNlRmxvYXQoJHByb2R1Y3RDYXJkLmRhdGFzZXQuY29tcGFyZVByaWNlKTtcclxuICAgICAgICBjb25zdCBjb21wYXJlUHJvZHVjdFByaWNlU3RyaW5nID0gJHByb2R1Y3RDYXJkLmRhdGFzZXQuY29tcGFyZVByaWNlU3RyaW5nO1xyXG4gICAgICAgIGNvbnN0IHByb2R1Y3RJbWFnZSA9ICRwcm9kdWN0Q2FyZC5kYXRhc2V0LmltYWdlO1xyXG4gICAgICAgIGNvbnN0IHF1YW50aXR5ID0gMTtcclxuXHJcbiAgICAgICAgLy8gQWRkIHByb2R1Y3QgdG8gYnVuZGxlXHJcbiAgICAgICAgYnVuZGxlLml0ZW1zW3Byb2R1Y3RJZF0gPSB7XHJcbiAgICAgICAgICB0aXRsZTogcHJvZHVjdFRpdGxlLFxyXG4gICAgICAgICAgcHJpY2U6IHByb2R1Y3RQcmljZSxcclxuICAgICAgICAgIHByaWNlU3RyaW5nOiBwcm9kdWN0UHJpY2VTdHJpbmcsXHJcbiAgICAgICAgICBjb21wYXJlUHJpY2U6IGNvbXBhcmVQcm9kdWN0UHJpY2UsXHJcbiAgICAgICAgICBjb21wYXJlUHJpY2VTdHJpbmc6IGNvbXBhcmVQcm9kdWN0UHJpY2VTdHJpbmcsXHJcbiAgICAgICAgICBpbWFnZTogcHJvZHVjdEltYWdlLFxyXG4gICAgICAgICAgcXVhbnRpdHk6IHF1YW50aXR5XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gQWRkIHByb2R1Y3QgdG8gcmVtb3ZhbCByZXF1ZXN0XHJcbiAgICAgICAgdXBkYXRlRGF0YS51cGRhdGVzW3Byb2R1Y3RJZF0gPSAwO1xyXG5cclxuXHJcbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCBidW5kbGUgdG8gbG9jYWxTdG9yYWdlXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJidW5kbGVcIiwgSlNPTi5zdHJpbmdpZnkoYnVuZGxlKSk7XHJcblxyXG4gICAgICAgIC8vIFJlbW92ZSBjdXJyZW50IGJ1bmRsZSBmcm9tIGNhcnQgdG8gYXZvaWQgZHVwbGljYXRlc1xyXG4gICAgICAgIGF3YWl0IGZldGNoKCcvY2FydC91cGRhdGUuanMnLCB7XHJcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHVwZGF0ZURhdGEpXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJHByb2R1Y3RDYXJkLmRhdGFzZXQuYnVuZGxlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGNhcnQgPSB3aW5kb3cuQ2FyYm9uLkNhcnQ7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjYXJ0LnF1aWNrQWRkSXRlbVRvQ2FydCh2YXJpYW50SWQpO1xyXG4gICAgICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgaWYgKGNhcnQudXNlQ2FydEFzaWRlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0ICRjYXJ0QXNpZGVCYWNrZ3JvdW5kID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAgICAgICBcIi5jYXJ0LWFzaWRlX19iYWNrZ3JvdW5kXCJcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgJGNhcnRBc2lkZSA9XHJcbiAgICAgICAgICAgICAgJGNhcnRBc2lkZUJhY2tncm91bmQucXVlcnlTZWxlY3RvcihcImFzaWRlLmNhcnQtYXNpZGVcIik7XHJcbiAgICAgICAgICAgIGNvbnN0ICRib2R5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIik7XHJcbiAgICAgICAgICAgICRib2R5LmNsYXNzTGlzdC5hZGQoXCJvdmVyZmxvdy15LWhpZGRlblwiKTtcclxuICAgICAgICAgICAgJGNhcnRBc2lkZUJhY2tncm91bmQuY2xhc3NMaXN0LnJlbW92ZShcInBvaW50ZXItZXZlbnRzLW5vbmVcIik7XHJcbiAgICAgICAgICAgICRjYXJ0QXNpZGVCYWNrZ3JvdW5kLmNsYXNzTGlzdC5hZGQoXCJiZy1ibGFja1wiLCBcImJnLW9wYWNpdHktNDBcIik7XHJcbiAgICAgICAgICAgICRjYXJ0QXNpZGUuY2xhc3NMaXN0LnJlbW92ZShcclxuICAgICAgICAgICAgICBcInRyYW5zbGF0ZS14LWZ1bGxcIixcclxuICAgICAgICAgICAgICBcInBvbnRlci1ldmVudHMtbm9uZVwiLFxyXG4gICAgICAgICAgICAgIFwiaGlkZGVuXCJcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0ICRuYXZiYXJDYXJ0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5uYXZfX2Jhci1jYXJ0XCIpO1xyXG4gICAgICAgICAgICBjb25zdCAkbmF2YmFyQ2FydEltYWdlID0gJG5hdmJhckNhcnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAgICAgICBcIi5uYXZfX2Jhci1jYXJ0LWltYWdlXCJcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgJG5hdmJhckNhcnRJbWFnZS5zcmMgPSAkcHJvZHVjdENhcmRJbWFnZS5zcmM7XHJcbiAgICAgICAgICAgICRuYXZiYXJDYXJ0LmNsYXNzTGlzdC5yZW1vdmUoXCJvcGFjaXR5LTBcIiwgXCJwb2ludGVyLWV2ZW50cy1ub25lXCIpO1xyXG4gICAgICAgICAgICAkbmF2YmFyQ2FydC5jbGFzc0xpc3QuYWRkKFwib3BhY2l0eS0xMDBcIik7XHJcbiAgXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICRuYXZiYXJDYXJ0LmNsYXNzTGlzdC5yZW1vdmUoXCJvcGFjaXR5LTEwMFwiKTtcclxuICAgICAgICAgICAgICAkbmF2YmFyQ2FydC5jbGFzc0xpc3QuYWRkKFwib3BhY2l0eS0wXCIsIFwicG9pbnRlci1ldmVudHMtbm9uZVwiKTtcclxuICAgICAgICAgICAgfSwgNTAwMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBwcm9kdWN0Q2FyZHM7XHJcbiJdLCJuYW1lcyI6WyJwcm9kdWN0Q2FyZHMiLCIkcHJvZHVjdENhcmRzIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsIiRwcm9kdWN0Q2FyZCIsInZhcmlhbnRJZCIsImRhdGFzZXQiLCIkcHJvZHVjdENhcmRJbWFnZSIsInF1ZXJ5U2VsZWN0b3IiLCIkcHJvZHVjdENhcmRRdWlja0FkZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwicXVpY2tBZGRUeXBlIiwiYnVuZGxlIiwiYnVuZGxlSWQiLCJEYXRlIiwibm93IiwiaXRlbXMiLCJ1cGRhdGVEYXRhIiwidXBkYXRlcyIsInByb2R1Y3RJZCIsInByb2R1Y3RUaXRsZSIsInRpdGxlIiwicHJvZHVjdFByaWNlIiwicGFyc2VGbG9hdCIsInByaWNlIiwicHJvZHVjdFByaWNlU3RyaW5nIiwicHJpY2VTdHJpbmciLCJjb21wYXJlUHJvZHVjdFByaWNlIiwiY29tcGFyZVByaWNlIiwiY29tcGFyZVByb2R1Y3RQcmljZVN0cmluZyIsImNvbXBhcmVQcmljZVN0cmluZyIsInByb2R1Y3RJbWFnZSIsImltYWdlIiwicXVhbnRpdHkiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwiSlNPTiIsInN0cmluZ2lmeSIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJjYXJ0IiwiQ2FyYm9uIiwiQ2FydCIsInF1aWNrQWRkSXRlbVRvQ2FydCIsInJlc3BvbnNlIiwidXNlQ2FydEFzaWRlIiwiJGNhcnRBc2lkZUJhY2tncm91bmQiLCIkY2FydEFzaWRlIiwiJGJvZHkiLCJjbGFzc0xpc3QiLCJhZGQiLCJyZW1vdmUiLCIkbmF2YmFyQ2FydCIsIiRuYXZiYXJDYXJ0SW1hZ2UiLCJzcmMiLCJzZXRUaW1lb3V0Il0sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./resources/scripts/components/product-card/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/components/toggle-visibility/main.js\":\r\n/*!****************************************************************!*\\\r\n  !*** ./resources/scripts/components/toggle-visibility/main.js ***!\r\n  \\****************************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"toggleVisibility\\\": () => (/* binding */ toggleVisibility)\\n/* harmony export */ });\\n/**\\r\\n * The toggle visibility module.\\r\\n *\\r\\n * @return {void}\\r\\n */\\nvar toggleVisibility = function toggleVisibility() {\\n  // Set the elements\\n  var $triggers = document.querySelectorAll(\\\".toggle-visibility\\\");\\n\\n  // Check if any triggers exists\\n  if ($triggers) {\\n    $triggers.forEach(function ($trigger) {\\n      // Add a click event listener to the trigger\\n      $trigger.addEventListener(\\\"click\\\", function () {\\n        // Prevent the default action\\n        event.preventDefault();\\n\\n        // Set the elements\\n        var $currentTrigger = event.currentTarget;\\n        var $currentTarget = document.querySelector($currentTrigger.dataset.toggleVisibilityTarget);\\n\\n        // Check if the target exists\\n        if ($currentTarget) {\\n          // Set the data\\n          var group = $currentTarget.dataset.toggleVisibilityGroup;\\n\\n          // Check if the target belongs to a group\\n          if (group) {\\n            // Set the elements\\n            var $targets = document.querySelectorAll(\\\"[data-toggle-visibility-group=\\\\\\\"\\\".concat(group, \\\"\\\\\\\"]\\\"));\\n\\n            // Check if the targets exist\\n            if ($targets) {\\n              // Cycle through all of the targets\\n              $targets.forEach(function ($target) {\\n                // Set the target classes\\n                $target.classList.add(\\\"hidden\\\");\\n\\n                // Check if the target is the current target\\n                if ($target === $currentTarget) {\\n                  // Set the target classes\\n                  $target.classList.remove(\\\"hidden\\\");\\n                }\\n              });\\n            }\\n          } else {\\n            // Set the current target classes\\n            $currentTarget.classList.toggle(\\\"hidden\\\");\\n          }\\n        }\\n      });\\n    });\\n  }\\n};\\n\\n// Export the module\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toggleVisibility);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9jb21wb25lbnRzL3RvZ2dsZS12aXNpYmlsaXR5L21haW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUEsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFnQixHQUFTO0VBQ3BDO0VBQ0EsSUFBTUMsU0FBUyxHQUFHQyxRQUFRLENBQUNDLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDOztFQUVqRTtFQUNBLElBQUlGLFNBQVMsRUFBRTtJQUNiQSxTQUFTLENBQUNHLE9BQU8sQ0FBQyxVQUFDQyxRQUFRLEVBQUs7TUFDOUI7TUFDQUEsUUFBUSxDQUFDQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsWUFBTTtRQUN2QztRQUNBQyxLQUFLLENBQUNDLGNBQWMsRUFBRTs7UUFFdEI7UUFDQSxJQUFNQyxlQUFlLEdBQUdGLEtBQUssQ0FBQ0csYUFBYTtRQUMzQyxJQUFNQyxjQUFjLEdBQUdULFFBQVEsQ0FBQ1UsYUFBYSxDQUMzQ0gsZUFBZSxDQUFDSSxPQUFPLENBQUNDLHNCQUFzQixDQUMvQzs7UUFFRDtRQUNBLElBQUlILGNBQWMsRUFBRTtVQUNsQjtVQUNBLElBQU1JLEtBQUssR0FBR0osY0FBYyxDQUFDRSxPQUFPLENBQUNHLHFCQUFxQjs7VUFFMUQ7VUFDQSxJQUFJRCxLQUFLLEVBQUU7WUFDVDtZQUNBLElBQU1FLFFBQVEsR0FBR2YsUUFBUSxDQUFDQyxnQkFBZ0IsMkNBQ05ZLEtBQUssU0FDeEM7O1lBRUQ7WUFDQSxJQUFJRSxRQUFRLEVBQUU7Y0FDWjtjQUNBQSxRQUFRLENBQUNiLE9BQU8sQ0FBQyxVQUFDYyxPQUFPLEVBQUs7Z0JBQzVCO2dCQUNBQSxPQUFPLENBQUNDLFNBQVMsQ0FBQ0MsR0FBRyxDQUFDLFFBQVEsQ0FBQzs7Z0JBRS9CO2dCQUNBLElBQUlGLE9BQU8sS0FBS1AsY0FBYyxFQUFFO2tCQUM5QjtrQkFDQU8sT0FBTyxDQUFDQyxTQUFTLENBQUNFLE1BQU0sQ0FBQyxRQUFRLENBQUM7Z0JBQ3BDO2NBQ0YsQ0FBQyxDQUFDO1lBQ0o7VUFDRixDQUFDLE1BQU07WUFDTDtZQUNBVixjQUFjLENBQUNRLFNBQVMsQ0FBQ0csTUFBTSxDQUFDLFFBQVEsQ0FBQztVQUMzQztRQUNGO01BQ0YsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0VBQ0o7QUFDRixDQUFDOztBQUVEO0FBQ0EsaUVBQWV0QixnQkFBZ0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL3Jlc291cmNlcy9zY3JpcHRzL2NvbXBvbmVudHMvdG9nZ2xlLXZpc2liaWxpdHkvbWFpbi5qcz8yNmYxIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBUaGUgdG9nZ2xlIHZpc2liaWxpdHkgbW9kdWxlLlxyXG4gKlxyXG4gKiBAcmV0dXJuIHt2b2lkfVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHRvZ2dsZVZpc2liaWxpdHkgPSAoKSA9PiB7XHJcbiAgLy8gU2V0IHRoZSBlbGVtZW50c1xyXG4gIGNvbnN0ICR0cmlnZ2VycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIudG9nZ2xlLXZpc2liaWxpdHlcIik7XHJcblxyXG4gIC8vIENoZWNrIGlmIGFueSB0cmlnZ2VycyBleGlzdHNcclxuICBpZiAoJHRyaWdnZXJzKSB7XHJcbiAgICAkdHJpZ2dlcnMuZm9yRWFjaCgoJHRyaWdnZXIpID0+IHtcclxuICAgICAgLy8gQWRkIGEgY2xpY2sgZXZlbnQgbGlzdGVuZXIgdG8gdGhlIHRyaWdnZXJcclxuICAgICAgJHRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAvLyBQcmV2ZW50IHRoZSBkZWZhdWx0IGFjdGlvblxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgIC8vIFNldCB0aGUgZWxlbWVudHNcclxuICAgICAgICBjb25zdCAkY3VycmVudFRyaWdnZXIgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0ICRjdXJyZW50VGFyZ2V0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAgICRjdXJyZW50VHJpZ2dlci5kYXRhc2V0LnRvZ2dsZVZpc2liaWxpdHlUYXJnZXRcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgdGFyZ2V0IGV4aXN0c1xyXG4gICAgICAgIGlmICgkY3VycmVudFRhcmdldCkge1xyXG4gICAgICAgICAgLy8gU2V0IHRoZSBkYXRhXHJcbiAgICAgICAgICBjb25zdCBncm91cCA9ICRjdXJyZW50VGFyZ2V0LmRhdGFzZXQudG9nZ2xlVmlzaWJpbGl0eUdyb3VwO1xyXG5cclxuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSB0YXJnZXQgYmVsb25ncyB0byBhIGdyb3VwXHJcbiAgICAgICAgICBpZiAoZ3JvdXApIHtcclxuICAgICAgICAgICAgLy8gU2V0IHRoZSBlbGVtZW50c1xyXG4gICAgICAgICAgICBjb25zdCAkdGFyZ2V0cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcbiAgICAgICAgICAgICAgYFtkYXRhLXRvZ2dsZS12aXNpYmlsaXR5LWdyb3VwPVwiJHtncm91cH1cIl1gXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgdGFyZ2V0cyBleGlzdFxyXG4gICAgICAgICAgICBpZiAoJHRhcmdldHMpIHtcclxuICAgICAgICAgICAgICAvLyBDeWNsZSB0aHJvdWdoIGFsbCBvZiB0aGUgdGFyZ2V0c1xyXG4gICAgICAgICAgICAgICR0YXJnZXRzLmZvckVhY2goKCR0YXJnZXQpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgdGFyZ2V0IGNsYXNzZXNcclxuICAgICAgICAgICAgICAgICR0YXJnZXQuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgdGFyZ2V0IGlzIHRoZSBjdXJyZW50IHRhcmdldFxyXG4gICAgICAgICAgICAgICAgaWYgKCR0YXJnZXQgPT09ICRjdXJyZW50VGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgdGFyZ2V0IGNsYXNzZXNcclxuICAgICAgICAgICAgICAgICAgJHRhcmdldC5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBTZXQgdGhlIGN1cnJlbnQgdGFyZ2V0IGNsYXNzZXNcclxuICAgICAgICAgICAgJGN1cnJlbnRUYXJnZXQuY2xhc3NMaXN0LnRvZ2dsZShcImhpZGRlblwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59O1xyXG5cclxuLy8gRXhwb3J0IHRoZSBtb2R1bGVcclxuZXhwb3J0IGRlZmF1bHQgdG9nZ2xlVmlzaWJpbGl0eTtcclxuIl0sIm5hbWVzIjpbInRvZ2dsZVZpc2liaWxpdHkiLCIkdHJpZ2dlcnMiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwiJHRyaWdnZXIiLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsIiRjdXJyZW50VHJpZ2dlciIsImN1cnJlbnRUYXJnZXQiLCIkY3VycmVudFRhcmdldCIsInF1ZXJ5U2VsZWN0b3IiLCJkYXRhc2V0IiwidG9nZ2xlVmlzaWJpbGl0eVRhcmdldCIsImdyb3VwIiwidG9nZ2xlVmlzaWJpbGl0eUdyb3VwIiwiJHRhcmdldHMiLCIkdGFyZ2V0IiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlIiwidG9nZ2xlIl0sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./resources/scripts/components/toggle-visibility/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/features/build-a-bundle/build-a-bundle.js\":\r\n/*!*********************************************************************!*\\\r\n  !*** ./resources/scripts/features/build-a-bundle/build-a-bundle.js ***!\r\n  \\*********************************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* harmony import */ var _modules_Cart__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../modules/Cart */ \\\"./resources/scripts/modules/Cart.js\\\");\\n/* harmony import */ var _sections_cart_aside_main__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../sections/cart-aside/main */ \\\"./resources/scripts/sections/cart-aside/main.js\\\");\\n/* harmony import */ var gsap__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! gsap */ \\\"./node_modules/gsap/index.js\\\");\\nfunction _typeof(obj) { \\\"@babel/helpers - typeof\\\"; return _typeof = \\\"function\\\" == typeof Symbol && \\\"symbol\\\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \\\"function\\\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \\\"symbol\\\" : typeof obj; }, _typeof(obj); }\\nfunction _regeneratorRuntime() { \\\"use strict\\\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = \\\"function\\\" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || \\\"@@iterator\\\", asyncIteratorSymbol = $Symbol.asyncIterator || \\\"@@asyncIterator\\\", toStringTagSymbol = $Symbol.toStringTag || \\\"@@toStringTag\\\"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, \\\"\\\"); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, \\\"_invoke\\\", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: \\\"normal\\\", arg: fn.call(obj, arg) }; } catch (err) { return { type: \\\"throw\\\", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { [\\\"next\\\", \\\"throw\\\", \\\"return\\\"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (\\\"throw\\\" !== record.type) { var result = record.arg, value = result.value; return value && \\\"object\\\" == _typeof(value) && hasOwn.call(value, \\\"__await\\\") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke(\\\"next\\\", value, resolve, reject); }, function (err) { invoke(\\\"throw\\\", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke(\\\"throw\\\", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, \\\"_invoke\\\", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = \\\"suspendedStart\\\"; return function (method, arg) { if (\\\"executing\\\" === state) throw new Error(\\\"Generator is already running\\\"); if (\\\"completed\\\" === state) { if (\\\"throw\\\" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (\\\"next\\\" === context.method) context.sent = context._sent = context.arg;else if (\\\"throw\\\" === context.method) { if (\\\"suspendedStart\\\" === state) throw state = \\\"completed\\\", context.arg; context.dispatchException(context.arg); } else \\\"return\\\" === context.method && context.abrupt(\\\"return\\\", context.arg); state = \\\"executing\\\"; var record = tryCatch(innerFn, self, context); if (\\\"normal\\\" === record.type) { if (state = context.done ? \\\"completed\\\" : \\\"suspendedYield\\\", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } \\\"throw\\\" === record.type && (state = \\\"completed\\\", context.method = \\\"throw\\\", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, \\\"throw\\\" === methodName && delegate.iterator[\\\"return\\\"] && (context.method = \\\"return\\\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \\\"throw\\\" === context.method) || \\\"return\\\" !== methodName && (context.method = \\\"throw\\\", context.arg = new TypeError(\\\"The iterator does not provide a '\\\" + methodName + \\\"' method\\\")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if (\\\"throw\\\" === record.type) return context.method = \\\"throw\\\", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \\\"return\\\" !== context.method && (context.method = \\\"next\\\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \\\"throw\\\", context.arg = new TypeError(\\\"iterator result is not an object\\\"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = \\\"normal\\\", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: \\\"root\\\" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if (\\\"function\\\" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, \\\"constructor\\\", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, \\\"constructor\\\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \\\"GeneratorFunction\\\"), exports.isGeneratorFunction = function (genFun) { var ctor = \\\"function\\\" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || \\\"GeneratorFunction\\\" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \\\"GeneratorFunction\\\")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \\\"Generator\\\"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, \\\"toString\\\", function () { return \\\"[object Generator]\\\"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \\\"next\\\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) \\\"t\\\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if (\\\"throw\\\" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = \\\"throw\\\", record.arg = exception, context.next = loc, caught && (context.method = \\\"next\\\", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if (\\\"root\\\" === entry.tryLoc) return handle(\\\"end\\\"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, \\\"catchLoc\\\"), hasFinally = hasOwn.call(entry, \\\"finallyLoc\\\"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error(\\\"try statement without catch or finally\\\"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, \\\"finallyLoc\\\") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && (\\\"break\\\" === type || \\\"continue\\\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = \\\"next\\\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if (\\\"throw\\\" === record.type) throw record.arg; return \\\"break\\\" === record.type || \\\"continue\\\" === record.type ? this.next = record.arg : \\\"return\\\" === record.type ? (this.rval = this.arg = record.arg, this.method = \\\"return\\\", this.next = \\\"end\\\") : \\\"normal\\\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, \\\"catch\\\": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (\\\"throw\\\" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error(\\\"illegal catch attempt\\\"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, \\\"next\\\" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }\\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \\\"next\\\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \\\"throw\\\", err); } _next(undefined); }); }; }\\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\\nfunction _nonIterableRest() { throw new TypeError(\\\"Invalid attempt to destructure 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 _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 _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \\\"undefined\\\" != typeof Symbol && arr[Symbol.iterator] || arr[\\\"@@iterator\\\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i[\\\"return\\\"] && (_r = _i[\\\"return\\\"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\\n\\n\\n\\nvar buildABundle = function buildABundle() {\\n  // Define variables needed throughout the process\\n  window.bundle = {};\\n  window.currentTotalItems = 0;\\n  window.maxItemsAllowed = false;\\n  window.minItemsRequired = false;\\n  window.itemsRequiredForDiscount = false;\\n  window.discountRewardPercentage = false;\\n  window.itemsRequiredForFreeDelivery = false;\\n  window.bundleProgressMessages = false;\\n\\n  // Set up the globals for the progress message system\\n  window.currentProgressMessage = null;\\n  window.currentProgressMessageType = null;\\n  window.progressMessageCooldown = 500; // This is overwritten later if one has been set via the customiser\\n  window.progressMessageDuration = 2000; // Also overwritten later if one has been set via the customiser\\n  window.progressMessageQueue = [];\\n  window.progressMessageTimeout = null;\\n  window.progressMessageCooldownTimer = null;\\n  window.isMessageActive = false;\\n  window.currentMessageElement = null;\\n\\n  // Function definitions\\n\\n  // Remove a message, first animate it out and then remove from the dom. Should only be one Message at a time\\n  var removeProgressMessage = function removeProgressMessage($element) {\\n    if (!$element) return Promise.resolve();\\n    return new Promise(function (resolve) {\\n      gsap__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].to($element, {\\n        height: 0,\\n        opacity: 0,\\n        duration: 0.2,\\n        ease: \\\"power2.out\\\",\\n        onComplete: function onComplete() {\\n          $element.remove();\\n          resolve();\\n        }\\n      });\\n    });\\n  };\\n\\n  // Process the next message in the queue - Generic Messages should never get into the queue, so we should only be processing through significant messages\\n  var processNextMessage = function processNextMessage() {\\n    // Clear any existing timeout\\n    if (window.progressMessageTimeout) {\\n      clearTimeout(window.progressMessageTimeout);\\n      window.progressMessageTimeout = null;\\n    }\\n\\n    // If queue is empty, remove current message and mark as inactive\\n    if (window.progressMessageQueue.length === 0) {\\n      // Remove the current message from DOM\\n      if (window.currentMessageElement) {\\n        removeProgressMessage(window.currentMessageElement).then(function () {\\n          //Update our globals\\n          window.isMessageActive = false;\\n          window.currentProgressMessage = null;\\n          window.currentProgressMessageType = null;\\n          window.currentMessageElement = null;\\n\\n          // Start cooldown timer after message is removed\\n          if (window.progressMessageCooldownTimer) {\\n            clearTimeout(window.progressMessageCooldownTimer);\\n          }\\n          window.progressMessageCooldownTimer = setTimeout(function () {\\n            window.progressMessageCooldownTimer = null;\\n          }, window.progressMessageCooldown);\\n        });\\n      } else {\\n        window.isMessageActive = false;\\n        window.currentProgressMessage = null;\\n        window.currentProgressMessageType = null;\\n\\n        // Start cooldown timer\\n        if (window.progressMessageCooldownTimer) {\\n          clearTimeout(window.progressMessageCooldownTimer);\\n        }\\n        window.progressMessageCooldownTimer = setTimeout(function () {\\n          window.progressMessageCooldownTimer = null;\\n        }, window.progressMessageCooldown);\\n      }\\n      return;\\n    }\\n\\n    // Get next message from queue\\n    var nextMessage = window.progressMessageQueue.shift();\\n\\n    // Remove current message if exists, then show new one\\n    if (window.currentMessageElement) {\\n      removeProgressMessage(window.currentMessageElement).then(function () {\\n        showProgressMessage(nextMessage.message, nextMessage.type);\\n      });\\n    } else {\\n      showProgressMessage(nextMessage.message, nextMessage.type);\\n    }\\n  };\\n\\n  // A progress message has been chosen to show - show it\\n  var showProgressMessage = function showProgressMessage(message, messageType) {\\n    var $bundleTemplateInfoContents = $buildABundleTemplate.querySelector(\\\".build-a-bundle__info\\\");\\n    if ($bundleTemplateInfoContents) {\\n      var $notificationTemplate = $bundleTemplateInfoContents.querySelector(\\\".notification-banner-template\\\");\\n      if ($notificationTemplate) {\\n        // Clone template\\n        var $notificationTemplateClone = $notificationTemplate.cloneNode();\\n        $notificationTemplateClone.textContent = message;\\n        $notificationTemplateClone.classList.remove(\\\"hidden\\\", \\\"notification-banner-template\\\");\\n        $bundleTemplateInfoContents.prepend($notificationTemplateClone);\\n\\n        // Store reference to current message\\n        window.currentMessageElement = $notificationTemplateClone;\\n        window.currentProgressMessage = message;\\n        window.currentProgressMessageType = messageType;\\n        window.isMessageActive = true;\\n        var notifHeight = \\\"36px\\\";\\n        if (window.innerWidth > 1023) {\\n          notifHeight = \\\"40px\\\";\\n        }\\n        gsap__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].fromTo($notificationTemplateClone, {\\n          height: 0,\\n          opacity: 0\\n        }, {\\n          height: notifHeight,\\n          opacity: 1,\\n          duration: 0.5,\\n          ease: \\\"expo.inOut\\\"\\n        });\\n\\n        // Set timeout to auto-dismiss after duration\\n        window.progressMessageTimeout = setTimeout(function () {\\n          processNextMessage();\\n        }, window.progressMessageDuration);\\n\\n        //If a generic Message - mark that is was shown. We don't want to mark them as shown if they didn't actually appear\\n        if (messageType == \\\"generic\\\") {\\n          var key = Object.keys(window.bundleProgressMessages.generic).find(function (k) {\\n            return window.bundleProgressMessages.generic[k].message === message;\\n          });\\n          if (key) {\\n            window.bundleProgressMessages.generic[key].shown = true;\\n          }\\n        }\\n      } else {\\n        console.log(\\\"Could not find $notificationTemplate - unable to show progress message\\\");\\n      }\\n    } else {\\n      console.log(\\\"could not find $bundleTemplateInfoContents, which means system cannot find the notification template to clone\\\");\\n    }\\n  };\\n\\n  // Add a message to the queue or show immediately\\n  var queueProgressMessage = function queueProgressMessage(message, messageType) {\\n    if (!message) return;\\n    var messageObj = {\\n      message: message,\\n      type: messageType\\n    };\\n\\n    // Significant messages bypass cooldown and show immediately if nothing is active\\n    if (messageType === \\\"significant\\\" && !window.isMessageActive) {\\n      window.progressMessageQueue = [messageObj];\\n      processNextMessage();\\n      return;\\n    }\\n\\n    // Generic messages respect cooldown - if no message active but in cooldown, skip\\n    if (!window.isMessageActive && !window.progressMessageCooldownTimer) {\\n      // Show immediately\\n      window.progressMessageQueue = [messageObj];\\n      processNextMessage();\\n      return;\\n    }\\n\\n    // If cooldown is active and message is generic, skip it\\n    if (window.progressMessageCooldownTimer && messageType === \\\"generic\\\") {\\n      return;\\n    }\\n\\n    // If current message is generic and new message is significant\\n    if (window.isMessageActive && window.currentProgressMessageType === \\\"generic\\\" && messageType === \\\"significant\\\") {\\n      // Clear the queue of any generic messages and add significant to front\\n      window.progressMessageQueue = window.progressMessageQueue.filter(function (msg) {\\n        return msg.type === \\\"significant\\\";\\n      });\\n      window.progressMessageQueue.unshift(messageObj);\\n\\n      // Interrupt current message\\n      if (window.progressMessageTimeout) {\\n        clearTimeout(window.progressMessageTimeout);\\n      }\\n      processNextMessage();\\n      return;\\n    }\\n\\n    // If new message is significant, add to queue\\n    if (messageType === \\\"significant\\\") {\\n      window.progressMessageQueue.push(messageObj);\\n      return;\\n    }\\n\\n    // If new message is generic and we're in cooldown or showing another generic, skip it\\n    if (messageType === \\\"generic\\\") {\\n      // Don't queue generic messages\\n      return;\\n    }\\n  };\\n\\n  // Get a random unshown generic message\\n  var getRandomGenericMessage = function getRandomGenericMessage() {\\n    if (!window.bundleProgressMessages || !window.bundleProgressMessages.generic) {\\n      return null;\\n    }\\n    var unshownMessages = Object.entries(window.bundleProgressMessages.generic).filter(function (_ref) {\\n      var _ref2 = _slicedToArray(_ref, 2),\\n        key = _ref2[0],\\n        data = _ref2[1];\\n      return !data.shown;\\n    });\\n    if (unshownMessages.length === 0) {\\n      return null; // All messages have been shown\\n    }\\n\\n    // Pick random message from unshown\\n    var randomIndex = Math.floor(Math.random() * unshownMessages.length);\\n    var _unshownMessages$rand = _slicedToArray(unshownMessages[randomIndex], 2),\\n      key = _unshownMessages$rand[0],\\n      data = _unshownMessages$rand[1];\\n\\n    // Mark as shown - don't do this here, because if it can't be shown, it's getting marked off unnecessarily\\n    //window.bundleProgressMessages.generic[key].shown = true;\\n\\n    return data.message;\\n  };\\n  var handleProgressNotifications = function handleProgressNotifications(type) {\\n    if (type == \\\"preload\\\") {\\n      if (window.bundleProgressMessages.significant[\\\"return\\\"]) {\\n        queueProgressMessage(window.bundleProgressMessages.significant[\\\"return\\\"], \\\"significant\\\");\\n      }\\n    } else if (type == \\\"edit\\\") {\\n      if (window.bundleProgressMessages.significant.edit) {\\n        queueProgressMessage(window.bundleProgressMessages.significant.edit, \\\"significant\\\");\\n      }\\n    } else if (type == \\\"start\\\") {\\n      if (window.bundleProgressMessages.significant.start) {\\n        queueProgressMessage(window.bundleProgressMessages.significant.start, \\\"significant\\\");\\n      }\\n    } else if (type == \\\"update\\\") {\\n      // Check our significant events first\\n      var fallbackToGeneric = true;\\n      if (window.minItemsRequired && window.minItemsRequired == window.currentTotalItems) {\\n        if (window.bundleProgressMessages.significant.minimum) {\\n          queueProgressMessage(window.bundleProgressMessages.significant.minimum, \\\"significant\\\");\\n          fallbackToGeneric = false;\\n        }\\n      }\\n      if (window.maxItemsAllowed && window.maxItemsAllowed == window.currentTotalItems) {\\n        if (window.bundleProgressMessages.significant.maximum) {\\n          queueProgressMessage(window.bundleProgressMessages.significant.maximum, \\\"significant\\\");\\n          fallbackToGeneric = false;\\n        }\\n      }\\n      if (window.itemsRequiredForFreeDelivery && window.itemsRequiredForFreeDelivery == window.currentTotalItems) {\\n        if (window.bundleProgressMessages.significant.delivery) {\\n          queueProgressMessage(window.bundleProgressMessages.significant.delivery, \\\"significant\\\");\\n          fallbackToGeneric = false;\\n        }\\n      }\\n      if (window.itemsRequiredForDiscount && window.itemsRequiredForDiscount == window.currentTotalItems) {\\n        if (window.bundleProgressMessages.significant.discount) {\\n          queueProgressMessage(window.bundleProgressMessages.significant.discount, \\\"significant\\\");\\n          fallbackToGeneric = false;\\n        }\\n      }\\n      if (fallbackToGeneric) {\\n        //Get the Message and the Message Key - we don't want to mark a message as shown until it's actually been shown\\n        var genericMessage = getRandomGenericMessage();\\n        if (genericMessage) {\\n          queueProgressMessage(genericMessage, \\\"generic\\\");\\n        }\\n      }\\n    }\\n  };\\n\\n  // Extract the various Progress messages and create a list of them\\n  var setUpBundleProgressMessages = function setUpBundleProgressMessages($buildABundleTemplate) {\\n    var messageArr = {\\n      \\\"significant\\\": {},\\n      \\\"generic\\\": {}\\n    };\\n\\n    // Minimum, Maximum, Free delivery, Discount reached messages - these can all be optional\\n    if ($buildABundleTemplate.dataset.minProgressMessage) {\\n      messageArr.significant.minimum = $buildABundleTemplate.dataset.minProgressMessage;\\n    }\\n    if ($buildABundleTemplate.dataset.maxProgressMessage) {\\n      messageArr.significant.maximum = $buildABundleTemplate.dataset.maxProgressMessage;\\n    }\\n    if ($buildABundleTemplate.dataset.skioDiscountProgressMessage) {\\n      messageArr.significant.discount = $buildABundleTemplate.dataset.skioDiscountProgressMessage;\\n    }\\n    if ($buildABundleTemplate.dataset.freeDeliveryProgressMessage) {\\n      messageArr.significant.delivery = $buildABundleTemplate.dataset.freeDeliveryProgressMessage;\\n    }\\n\\n    // Other Messaging: Start, return to and edit messages\\n    if ($buildABundleTemplate.dataset.newBundleProgressMessage) {\\n      messageArr.significant.start = $buildABundleTemplate.dataset.newBundleProgressMessage;\\n    }\\n    if ($buildABundleTemplate.dataset.returnBundleProgressMessage) {\\n      messageArr.significant[\\\"return\\\"] = $buildABundleTemplate.dataset.returnBundleProgressMessage;\\n    }\\n    if ($buildABundleTemplate.dataset.editBundleProgressMessage) {\\n      messageArr.significant.edit = $buildABundleTemplate.dataset.editBundleProgressMessage;\\n    }\\n\\n    // Generic Messages\\n    if ($buildABundleTemplate.dataset.genericProgressMessages) {\\n      var genericMessagesArr = $buildABundleTemplate.dataset.genericProgressMessages.split(\\\"---\\\");\\n      if (genericMessagesArr.length > 0) {\\n        genericMessagesArr.forEach(function (message, index) {\\n          messageArr.generic[index] = {\\n            shown: false,\\n            message: message\\n          };\\n        });\\n      }\\n    }\\n    return messageArr;\\n  };\\n\\n  //Prevent Background from scrolling - used while a popup is open\\n  var lockBackground = function lockBackground() {\\n    document.body.classList.add(\\\"overflow-y-hidden\\\");\\n\\n    //Iphones ignore overflow hidden on body tags, so we do this instead\\n    var scrollY = window.scrollY;\\n    document.body.style.position = 'fixed';\\n    document.body.style.top = \\\"-\\\".concat(scrollY, \\\"px\\\");\\n    document.body.style.left = '0';\\n    document.body.style.right = '0';\\n    document.body.style.overflow = 'hidden';\\n  };\\n\\n  //Unlocked the background - for when popups get closed\\n  var unlockBackground = function unlockBackground() {\\n    document.body.classList.remove(\\\"overflow-y-hidden\\\");\\n    var scrollY = Math.abs(parseInt(document.body.style.top || 0, 10));\\n    document.body.style.position = \\\"\\\";\\n    document.body.style.top = \\\"\\\";\\n    document.body.style.left = \\\"\\\";\\n    document.body.style.right = \\\"\\\";\\n    document.body.style.overflow = \\\"\\\";\\n    requestAnimationFrame(function () {\\n      window.scrollTo({\\n        top: scrollY,\\n        left: 0,\\n        behavior: \\\"instant\\\" // iOS 16+ - avoids the awkward blip jump\\n      });\\n    });\\n  };\\n\\n  //On a mobile, this div needs a maximum height calculating to allow the content to scroll\\n  var setBundleInfoMaxHeight = function setBundleInfoMaxHeight($bundleInfo) {\\n    if ($bundleInfo) {\\n      //Bundle Info Header, Footer, Body as we need them for max height calculation\\n      var $bundleInfoHeader = $bundleInfo.querySelector(\\\".build-a-bundle__info-header\\\");\\n      var $bundleInfoBody = $bundleInfo.querySelector(\\\".build-a-bundle__info-body\\\");\\n      var $bundleInfoFooter = $bundleInfo.querySelector(\\\".build-a-bundle__info-footer\\\");\\n      if ($bundleInfoHeader && $bundleInfoBody && $bundleInfoFooter) {\\n        var bundleInfoHeaderHeight = $bundleInfoHeader.getBoundingClientRect().height;\\n        var bundleInfoFooterHeight = $bundleInfoFooter.getBoundingClientRect().height;\\n        if (!(bundleInfoHeaderHeight > 0 && bundleInfoFooterHeight > 0)) {\\n          //Attempt to wait until the popup has appeared and get the heights\\n          setTimeout(function () {\\n            bundleInfoHeaderHeight = $bundleInfoHeader.getBoundingClientRect().height;\\n            bundleInfoFooterHeight = $bundleInfoFooter.getBoundingClientRect().height;\\n          }, 200);\\n        }\\n        var maxHeight = window.visualViewport.height - bundleInfoHeaderHeight - bundleInfoFooterHeight - 22 - 48;\\n        $bundleInfoBody.style.maxHeight = maxHeight + \\\"px\\\";\\n      } else {\\n        console.log(\\\"One / all of $bundleInfoHeader, $bundleInfoBody, $bundleInfoFooter not found. Could not calculate the max height for $bundleInfoBody\\\");\\n      }\\n    } else {\\n      console.log(\\\"$bundleInfo not passed in, unable to calculate max height of it's contents.\\\");\\n    }\\n  };\\n  var showBlockerOverlay = function showBlockerOverlay($blockerOverlay, $bundleInfo) {\\n    if ($blockerOverlay) {\\n      $blockerOverlay.classList.add(\\\"active\\\");\\n\\n      //Blocker Overlay contains our SVG, find it and animate\\n      var logoSvg = $blockerOverlay.querySelector(\\\"svg\\\");\\n      if (logoSvg) {\\n        // Center the SVG\\n        gsap__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].set(logoSvg, {\\n          position: 'absolute',\\n          top: '50%',\\n          left: '50%',\\n          transformOrigin: '50% 50%',\\n          xPercent: -50,\\n          yPercent: -50\\n        });\\n\\n        // Create the spinning animation\\n        var tl = gsap__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].timeline({\\n          repeat: -1\\n        });\\n        tl.timeScale(3.4);\\n        tl.to(logoSvg, {\\n          rotation: 360,\\n          duration: 8,\\n          ease: 'back.inOut(1.3)'\\n        });\\n      }\\n      if ($bundleInfo) {\\n        $bundleInfo.style.zIndex = 10;\\n      }\\n    } else {\\n      console.log(\\\"overlay not provided to show funtion, cannot show it\\\");\\n    }\\n  };\\n  var hideBlockerOverlay = function hideBlockerOverlay($blockerOverlay, $bundleInfo) {\\n    if ($blockerOverlay) {\\n      $blockerOverlay.classList.remove(\\\"active\\\");\\n      if ($bundleInfo) {\\n        $bundleInfo.style.zIndex = \\\"\\\";\\n      }\\n    } else {\\n      console.log(\\\"overlay not provided to hide funtion, cannot show it\\\");\\n    }\\n  };\\n  var handleMobileInfoOpen = function handleMobileInfoOpen($bundleInfo, $bundleSummaryOverlay) {\\n    if ($bundleInfo && $bundleSummaryOverlay) {\\n      //Which route are we taking?\\n      if ($bundleInfo.classList.contains(\\\"active\\\")) {\\n        //Closing the menu\\n        $bundleInfo.classList.remove('active');\\n\\n        //Remove max height forcing\\n        var $bundleInfoBody = $bundleInfo.querySelector(\\\".build-a-bundle__info-body\\\");\\n        if ($bundleInfoBody) {\\n          $bundleInfoBody.style.maxHeight = \\\"\\\";\\n        }\\n        unlockBackground();\\n      } else {\\n        lockBackground();\\n        $bundleInfo.classList.add('active');\\n\\n        //Set $bundleInfo Max Height Property\\n        setBundleInfoMaxHeight($bundleInfo);\\n      }\\n      $bundleSummaryOverlay.classList.toggle('active');\\n    } else {\\n      console.log(\\\"Function requires the folllowing variables to be set: $bundleInfo and $bundleSummaryOverlay. One or both are not set.\\\");\\n    }\\n  };\\n  var findNextThreshold = function findNextThreshold(tierContentArr, totalItems) {\\n    var keys = Object.keys(tierContentArr).map(Number).filter(function (k) {\\n      return k > totalItems;\\n    }).sort(function (a, b) {\\n      return a - b;\\n    });\\n    return keys.length > 0 ? keys[0] : null;\\n  };\\n  var str_replace_instructions = function str_replace_instructions(target, totalItems, string) {\\n    var returnString = string;\\n    var numberReplace = target - totalItems;\\n    returnString = returnString.replace(\\\"[[number]]\\\", numberReplace);\\n    if (numberReplace == 1) {\\n      returnString = returnString.replace(\\\"packs\\\", \\\"pack\\\").replace(\\\"spaces\\\", \\\"space\\\");\\n    }\\n    return returnString;\\n  };\\n  var findNextInstruction = function findNextInstruction(totalItems, tierContentArr) {\\n    var newInstruction = false;\\n    if (totalItems !== false && tierContentArr) {\\n      var maximumAmount = false;\\n\\n      //Is there a maximum key? And if so, have we hit it?\\n      Object.entries(tierContentArr).forEach(function (_ref3) {\\n        var _ref4 = _slicedToArray(_ref3, 2),\\n          key = _ref4[0],\\n          value = _ref4[1];\\n        if (value.type == \\\"maximum\\\") {\\n          maximumAmount = key;\\n        }\\n      });\\n      if (maximumAmount && maximumAmount == totalItems) {\\n        //Grab the maximum message, we've hit the target\\n        newInstruction = tierContentArr[maximumAmount].targetHitMessage;\\n      } else {\\n        //Not the maximum amount, time to find the appropriate message\\n        var nextKey = findNextThreshold(tierContentArr, totalItems);\\n        if (nextKey) {\\n          var useStartMessage = false;\\n          if (tierContentArr[nextKey].startMessage) {\\n            if (totalItems < 1) {\\n              useStartMessage = true;\\n            }\\n          }\\n          if (useStartMessage) {\\n            newInstruction = str_replace_instructions(nextKey, totalItems, tierContentArr[nextKey].startMessagePrepend + tierContentArr[nextKey].startMessage);\\n          } else {\\n            newInstruction = str_replace_instructions(nextKey, totalItems, tierContentArr[nextKey].leadupMessagePrepend + tierContentArr[nextKey].leadupMessage);\\n          }\\n        }\\n      }\\n    } else {\\n      console.log(\\\"totalItems and/or tierContentArr not passed into function. Cannot extract the next bit of instruction text.\\\");\\n    }\\n    return newInstruction;\\n  };\\n\\n  //Retrieve the data values from the bundle template to build a list of different tier thresholds and messaing\\n  var setUpTierContent = function setUpTierContent($buildABundleTemplate) {\\n    var tierContentArr = {};\\n    if ($buildABundleTemplate) {\\n      //Set up any minimum value content\\n      if ($buildABundleTemplate.dataset.minRequired) {\\n        tierContentArr[$buildABundleTemplate.dataset.minRequired] = {\\n          type: \\\"minimum\\\",\\n          startMessage: $buildABundleTemplate.dataset.minRequiredStartMessage,\\n          startMessagePrepend: \\\"Choose [[number]] or more packs \\\",\\n          leadupMessage: $buildABundleTemplate.dataset.minRequiredLeadupMessage,\\n          leadupMessagePrepend: \\\"Add [[number]] more packs \\\"\\n        };\\n      }\\n\\n      //Set up any Maximum value content\\n      if ($buildABundleTemplate.dataset.maxAllowed) {\\n        tierContentArr[$buildABundleTemplate.dataset.maxAllowed] = {\\n          type: \\\"maximum\\\",\\n          leadupMessage: $buildABundleTemplate.dataset.maxLeadupMessage,\\n          leadupMessagePrepend: \\\"[[number]] more spaces \\\",\\n          targetHitMessage: $buildABundleTemplate.dataset.maxHitMessage\\n        };\\n      }\\n\\n      //Set up free delivery content, as long as it doesn't share the number with the two above         \\n      if ($buildABundleTemplate.dataset.freeDeliveryNumber) {\\n        if (!tierContentArr[$buildABundleTemplate.dataset.freeDeliveryNumber]) {\\n          tierContentArr[$buildABundleTemplate.dataset.freeDeliveryNumber] = {\\n            leadupMessage: $buildABundleTemplate.dataset.freeDeliveryLeadupMessage,\\n            leadupMessagePrepend: \\\"Add [[number]] more packs \\\"\\n          };\\n        }\\n      }\\n\\n      //Set up Skio Discount content, as long as it doesn't share the number with any of the above\\n      if ($buildABundleTemplate.dataset.skioDiscountItemsRequired) {\\n        if (!tierContentArr[$buildABundleTemplate.dataset.skioDiscountItemsRequired]) {\\n          tierContentArr[$buildABundleTemplate.dataset.skioDiscountItemsRequired] = {\\n            leadupMessage: $buildABundleTemplate.dataset.skioDiscountLeadupMessage,\\n            leadupMessagePrepend: \\\"Add [[number]] more packs \\\"\\n          };\\n        }\\n      }\\n    } else {\\n      console.log(\\\"not $buildABundleTemplate passed in, cannot set up required tier content\\\");\\n    }\\n    return tierContentArr;\\n  };\\n  var getNumberInBundle = function getNumberInBundle(variantId) {\\n    var currentAmount = 0;\\n    if (window.bundle) {\\n      if (variantId) {\\n        if (window.bundle.items[variantId]) {\\n          currentAmount = bundle.items[variantId].quantity;\\n        }\\n      } else {\\n        console.log(\\\"no variant Id passed into function. Cannot retrieve total already in bundle\\\");\\n      }\\n    } else {\\n      console.log(\\\"bundle not passed into function, unable to check it\\\");\\n    }\\n    return currentAmount;\\n  };\\n\\n  //This function exists to toggle between the relevant messaging on the Add to Cart button\\n  var handleBtnMessaging = function handleBtnMessaging($addToCart, isEnabled, totalItems, minItemsRequired, totalPrice, subscriptionPrice, activePurchaseType) {\\n    if ($addToCart) {\\n      var $priceContent = $addToCart.querySelector(\\\".price-content\\\");\\n      var $instructionContent = $addToCart.querySelector(\\\".instruction-content\\\");\\n      if ($priceContent && $instructionContent) {\\n        if (isEnabled) {\\n          //Update some classes that control how the button appears when it's first rendered\\n          var $productPricingWrapper = $addToCart.querySelector(\\\".product-pricing\\\");\\n          if ($productPricingWrapper) {\\n            $productPricingWrapper.classList.remove(\\\"hidden\\\");\\n            $priceContent.classList.remove(\\\"justify-center\\\");\\n            $priceContent.classList.add(\\\"justify-between\\\");\\n          }\\n\\n          //Hide instruction content, reveal price content\\n          $priceContent.classList.remove(\\\"hidden\\\");\\n          $instructionContent.classList.add(\\\"hidden\\\");\\n\\n          //Add in Price info\\n          var priceInfo = $priceContent.querySelector(\\\".product-price\\\");\\n          var comparisonPriceInfo = $priceContent.querySelector(\\\".product-comparison-price\\\");\\n\\n          //We need to reflect an active Skio discount in the final price\\n          var factorInSkioDiscount = false;\\n          if (window.discountRewardPercentage !== false && window.itemsRequiredForDiscount !== false) {\\n            if (window.itemsRequiredForDiscount <= totalItems) {\\n              factorInSkioDiscount = true;\\n            }\\n          }\\n          if (window.editMode) {\\n            //Change the text of the CTA\\n            var $btnText = $priceContent.querySelector(\\\".button-text\\\");\\n            if ($btnText) {\\n              var $editText = $btnText.dataset.editOrderText;\\n              if ($editText) {\\n                $btnText.textContent = $editText;\\n              }\\n            }\\n          }\\n          if (activePurchaseType == \\\"subscription\\\") {\\n            var finalPrice = Carbon.Money.formatMoney(subscriptionPrice, \\\"\u00A3{{amount_no_trailing_zeros}}\\\");\\n            if (factorInSkioDiscount) {\\n              finalPrice = Carbon.Money.formatMoney(subscriptionPrice - subscriptionPrice * (window.discountRewardPercentage / 100), \\\"\u00A3{{amount_no_trailing_zeros}}\\\");\\n            }\\n            priceInfo.textContent = finalPrice;\\n\\n            //If there's a Skio discount, the \\\"comparison\\\" price should reflect that too. We're comparing the Subscription price to the One Time Purchase Price - so the one time purchase price should be accurate\\n            var comparisonPrice = totalPrice;\\n            if (factorInSkioDiscount) {\\n              comparisonPrice = totalPrice - totalPrice * (window.discountRewardPercentage / 100);\\n            }\\n            comparisonPriceInfo.textContent = Carbon.Money.formatMoney(comparisonPrice, \\\"\u00A3{{amount_no_trailing_zeros}}\\\");\\n            comparisonPriceInfo.style = \\\"\\\";\\n          } else {\\n            var _finalPrice = Carbon.Money.formatMoney(totalPrice, \\\"\u00A3{{amount_no_trailing_zeros}}\\\");\\n            if (factorInSkioDiscount) {\\n              _finalPrice = Carbon.Money.formatMoney(totalPrice - totalPrice * (window.discountRewardPercentage / 100), \\\"\u00A3{{amount_no_trailing_zeros}}\\\");\\n            }\\n            priceInfo.textContent = _finalPrice;\\n            comparisonPriceInfo.style.display = \\\"none\\\";\\n          }\\n        } else {\\n          //For disabled buttons, we want to provide the instructions for how many packs need to be added in order to enable the button\\n          $priceContent.classList.add(\\\"hidden\\\");\\n          $instructionContent.classList.remove(\\\"hidden\\\");\\n          var remaining = minItemsRequired - totalItems;\\n          if (remaining < 2) {\\n            $instructionContent.querySelector(\\\".button-text\\\").textContent = \\\"Add 1 pack to continue\\\";\\n          } else {\\n            $instructionContent.querySelector(\\\".button-text\\\").textContent = \\\"Add \\\" + remaining + \\\" packs to continue\\\";\\n          }\\n        }\\n      } else {\\n        console.log(\\\"$addToCart button structure was not as expected. Unable to perform update to message as one / both of .price-content / .instruction-content are not set\\\");\\n      }\\n    } else {\\n      console.log(\\\"Unable to update $addToCart button as it has not been passed into the function correctly\\\");\\n    }\\n  };\\n  var disableBtn = function disableBtn(btn) {\\n    if (btn) {\\n      btn.classList.add(\\\"disabled\\\", \\\"button--disabled\\\");\\n      btn.disabled = true;\\n    } else {\\n      console.log(\\\"btn variable not passed in - nothing to disable\\\");\\n    }\\n  };\\n  var enableBtn = function enableBtn(btn) {\\n    if (btn) {\\n      btn.classList.remove(\\\"disabled\\\", \\\"button--disabled\\\");\\n      btn.disabled = false;\\n    } else {\\n      console.log(\\\"btn variable not passed in - nothing to disable\\\");\\n    }\\n  };\\n  var disableAtcChangeMsg = function disableAtcChangeMsg($atc) {\\n    disableBtn($atc);\\n    var $addToOrderText = $atc.querySelector(\\\".price-content .button-text\\\");\\n    if ($addToOrderText) {\\n      $addToOrderText.textContent = \\\"Adding...\\\";\\n    }\\n  };\\n  var enableAtcResetMsg = function enableAtcResetMsg($atc) {\\n    enableBtn($atc);\\n    var $addToOrderText = $atc.querySelector(\\\".price-content .button-text\\\");\\n    if ($addToOrderText) {\\n      var originalText = $addToOrderText.dataset.addText;\\n      if (originalText) {\\n        $addToOrderText.textContent = originalText;\\n      }\\n    }\\n  };\\n  var disableAllPopUpBtns = function disableAllPopUpBtns($qtyDecrease, $qtyIncrease, $addToBundleButtons) {\\n    if ($qtyDecrease) {\\n      disableBtn($qtyDecrease);\\n    }\\n    if ($qtyIncrease) {\\n      disableBtn($qtyIncrease);\\n    }\\n    if ($addToBundleButtons.length > 0) {\\n      $addToBundleButtons.forEach(function ($addToBundleButton) {\\n        disableBtn($addToBundleButton);\\n      });\\n    }\\n  };\\n\\n  //Handle updating the prices on the popup's add to bundle buttons\\n  var updateAtbButtonPricing = function updateAtbButtonPricing($addToBundleButton, originalPrice, originalSubscriptionPrice, qty) {\\n    if (originalPrice && qty) {\\n      //Ensure the button features the prices before we try to replace anything\\n      if ($addToBundleButton) {\\n        //Not every button does, so don't throw an error if one's not found\\n        var $pricingContainer = $addToBundleButton.querySelector(\\\".product-pricing\\\");\\n        if ($pricingContainer) {\\n          //Two versions of these buttons\\n          if ($addToBundleButton.classList.contains(\\\"sub-btn\\\")) {\\n            var $comparisonPrice = $pricingContainer.querySelector(\\\".product-comparison-price\\\");\\n            if ($comparisonPrice && originalSubscriptionPrice) {\\n              $comparisonPrice.textContent = Carbon.Money.formatMoney(originalPrice * qty, \\\"\u00A3{{amount_no_trailing_zeros}}\\\");\\n            }\\n\\n            //find and update the product price\\n            var $productPrice = $pricingContainer.querySelector(\\\".product-price\\\");\\n            if ($productPrice) {\\n              $productPrice.textContent = Carbon.Money.formatMoney(originalSubscriptionPrice * qty, \\\"\u00A3{{amount_no_trailing_zeros}}\\\");\\n            } else {\\n              console.log(\\\"product price somehow not present on a cta that should be outputting it\\\");\\n            }\\n          } else if ($addToBundleButton.classList.contains(\\\"otp-btn\\\")) {\\n            //find and update the product price\\n            var _$productPrice = $pricingContainer.querySelector(\\\".product-price\\\");\\n            if (_$productPrice) {\\n              _$productPrice.textContent = Carbon.Money.formatMoney(originalPrice * qty, \\\"\u00A3{{amount_no_trailing_zeros}}\\\");\\n            } else {\\n              console.log(\\\"product price somehow not present on a cta that should be outputting it\\\");\\n            }\\n          }\\n        }\\n      } else {\\n        console.log(\\\"button wasn't passed into function\\\");\\n      }\\n    } else {\\n      console.log(\\\"required variables not passed in - cannot update a price without quantity and the original price values\\\");\\n    }\\n  };\\n  function decodeHtmlEntities(str) {\\n    var textarea = document.createElement('textarea');\\n    textarea.innerHTML = str;\\n    return textarea.value;\\n  }\\n\\n  // On Mobile, clicking on the category icon will open a list of collection categories\\n  var showCategoryMobileMenu = function showCategoryMobileMenu($mobileCategoriesPopup, $mobileCategoriesPopupBg, $bundleInfo, header, $filtersButtonMob) {\\n    //Check for variables - prevent lazy function usage\\n    if ($mobileCategoriesPopup && $mobileCategoriesPopupBg && $bundleInfo && header) {\\n      //lockBackground();\\n\\n      $mobileCategoriesPopup.classList.remove(\\\"hidden\\\");\\n      $mobileCategoriesPopupBg.classList.add(\\\"active\\\");\\n\\n      //Temporarily remove the Z-index on the Info container as it sits above our background\\n      $bundleInfo.style.zIndex = 10;\\n      header.parentElement.style.zIndex = 10;\\n\\n      //Set the buttons to look like they're behind the overlay since we can't actually put them behind it\\n      if ($filtersButtonMob) {\\n        $filtersButtonMob.classList.add(\\\"opacity-50\\\", \\\"pointer-events-none\\\");\\n      }\\n    } else {\\n      console.log(\\\"Required variables not passed into function. Expected: $mobileCategoriesPopup,$mobileCategoriesPopupBg,$bundleInfo,header\\\");\\n    }\\n  };\\n  var hideCategoryMobileMenu = function hideCategoryMobileMenu($mobileCategoriesPopup, $mobileCategoriesPopupBg, $bundleInfo, header, $filtersButtonMob) {\\n    if ($mobileCategoriesPopup && $mobileCategoriesPopupBg && $bundleInfo && header) {\\n      //unlockBackground();\\n\\n      $mobileCategoriesPopup.classList.add(\\\"hidden\\\");\\n      $mobileCategoriesPopupBg.classList.remove(\\\"active\\\");\\n\\n      //Return Z indexes to normal \\n      $bundleInfo.style.zIndex = \\\"\\\";\\n      header.parentElement.style.zIndex = \\\"\\\";\\n      if ($filtersButtonMob) {\\n        $filtersButtonMob.classList.remove(\\\"opacity-50\\\", \\\"pointer-events-none\\\");\\n      }\\n    }\\n  };\\n  var scrollToTargetCollection = function scrollToTargetCollection(e, $collections, $nav, header) {\\n    if (e && $collections && $nav && header) {\\n      if (e.target.dataset.target) {\\n        var scrollTarget = e.target.dataset.target;\\n        $collections.forEach(function ($collection) {\\n          if ($collection.id == scrollTarget) {\\n            var navHeight = $nav.getBoundingClientRect().height;\\n            console.log(navHeight);\\n            var targetPosition = $collection.getBoundingClientRect().top + window.scrollY - navHeight - 20;\\n            window.scrollTo({\\n              top: targetPosition,\\n              behavior: 'smooth'\\n            });\\n          }\\n        });\\n      } else {\\n        console.log(\\\"element that was clicked on does not contain a data-target. Unable to scroll to it. e.target.dataset = \\\");\\n        console.log(e.target.dataset);\\n      }\\n    } else {\\n      console.log(\\\"One or more required variables not passed in. Expected all of the following: e,$collections,$nav,header\\\");\\n    }\\n  };\\n  var scrollToTargetCollectionAndCloseCategories = function scrollToTargetCollectionAndCloseCategories(e, $collections, $nav, header, $mobileCategoriesPopup, $mobileCategoriesPopupBg, $bundleInfo, $filtersButtonMob) {\\n    if ($mobileCategoriesPopup && $mobileCategoriesPopupBg && $bundleInfo && header) {\\n      hideCategoryMobileMenu($mobileCategoriesPopup, $mobileCategoriesPopupBg, $bundleInfo, header, $filtersButtonMob);\\n    }\\n    if (e && $collections && $nav && header) {\\n      scrollToTargetCollection(e, $collections, $nav, header);\\n    }\\n  };\\n  var showFilterDropdown = function showFilterDropdown($filtersDropDown, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton) {\\n    if ($filtersDropDown, $filtersPopupBg, $bundleInfo, header) {\\n      if (window.innerWidth < 1024) {\\n        //lockBackground();\\n      }\\n      $filtersDropDown.classList.remove(\\\"hidden\\\");\\n      $filtersPopupBg.classList.add(\\\"active\\\");\\n      $bundleInfo.style.zIndex = 10;\\n      header.parentElement.style.zIndex = 10;\\n\\n      // Update matching dishes count on open\\n      var matchingCards = document.querySelectorAll('.build-a-bundle__collection-container .build-a-bundle__product-card:not(.hidden)');\\n      var totalMatchingDishes = matchingCards.length;\\n      document.querySelectorAll('.bab-matching-dishes-count').forEach(function (el) {\\n        el.textContent = totalMatchingDishes;\\n      });\\n      document.querySelectorAll('.bab-matching-dishes-text').forEach(function (el) {\\n        el.textContent = totalMatchingDishes === 1 ? 'Dish in filters' : 'Dishes in filters';\\n      });\\n      if ($mobileCategoriesButton) {\\n        $mobileCategoriesButton.classList.add(\\\"opacity-50\\\", \\\"pointer-events-none\\\");\\n      }\\n    } else {\\n      console.log(\\\"required variables not passed into the function: Expected the following - $filtersDropDown,$filtersPopupBg,$bundleInfo,header\\\");\\n    }\\n  };\\n  var hideFilterDropdown = function hideFilterDropdown($filtersDropDown, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton) {\\n    //unlockBackground();\\n\\n    $filtersDropDown.classList.add(\\\"hidden\\\");\\n    $filtersPopupBg.classList.remove(\\\"active\\\");\\n\\n    //Return Z indexes to normal - even though we don't do it on desktop, you could swap screen sizes half way\\n    $bundleInfo.style.zIndex = \\\"\\\";\\n    header.parentElement.style.zIndex = \\\"\\\";\\n    if ($mobileCategoriesButton) {\\n      $mobileCategoriesButton.classList.remove(\\\"opacity-50\\\", \\\"pointer-events-none\\\");\\n    }\\n  };\\n\\n  //Show / Hide the 3 different content based pop-ups.\\n  var showContentPopup = function showContentPopup($targetPopup, $bundleInfo) {\\n    if ($targetPopup) {\\n      lockBackground();\\n      $bundleInfo.style.zIndex = 10;\\n      $targetPopup.classList.add(\\\"active\\\");\\n    } else {\\n      console.log(\\\"no $targetPopup argument provided, unable to open Pop up\\\");\\n    }\\n  };\\n  var hideContentPopup = function hideContentPopup($targetPopup, $bundleInfo) {\\n    if ($targetPopup) {\\n      unlockBackground();\\n      $bundleInfo.style.zIndex = \\\"\\\";\\n      $targetPopup.classList.remove(\\\"active\\\");\\n    } else {\\n      console.log(\\\"no $targetPopup argument provided, unable to close Pop up\\\");\\n    }\\n  };\\n\\n  /**\\r\\n   * Sync the external active-filter count badge on the filter button\\r\\n   * and the external pills bar (below the button) with the current\\r\\n   * active filter state inside a given dropdown.\\r\\n   */\\n  var syncFilterBadgeAndPills = function syncFilterBadgeAndPills($filtersDropDown, $filterOptions, $collections, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton) {\\n    if (!$filtersDropDown) return;\\n\\n    // Walk up to the sticky nav wrapper that contains both the button and the pills bar\\n    var $navParent = $filtersDropDown.closest('.build-a-bundle__sticky-nav, .build-a-bundle__sticky-nav-mobile');\\n    if (!$navParent) return;\\n    var $countBadge = $navParent.querySelector('.bab-filter-btn-count');\\n    var $pillsBar = $navParent.querySelector('.bab-active-pills-bar');\\n    var allOptions = Array.from($filterOptions);\\n    var activeOptions = allOptions.filter(function (opt) {\\n      return opt.classList.contains('active');\\n    });\\n\\n    // --- Spice-aware: spice is \\\"neutral\\\" when all 3 OR 0 are active ---\\n    var allSpiceOptions = allOptions.filter(function (o) {\\n      return o.dataset.filterType === 'spice';\\n    });\\n    var activeSpiceOptions = activeOptions.filter(function (o) {\\n      return o.dataset.filterType === 'spice';\\n    });\\n    var spiceIsFiltering = activeSpiceOptions.length > 0 && activeSpiceOptions.length < allSpiceOptions.length;\\n\\n    // Only count/show options that are actually filtering something\\n    var meaningfulActive = activeOptions.filter(function (o) {\\n      if (o.dataset.filterType === 'spice') return spiceIsFiltering;\\n      return true;\\n    });\\n\\n    // --- Update count badge ---\\n    if ($countBadge) {\\n      if (activeOptions.length > 0) {\\n        $countBadge.textContent = \\\"(\\\".concat(activeOptions.length, \\\")\\\");\\n        $countBadge.classList.remove('hidden');\\n      } else {\\n        $countBadge.classList.add('hidden');\\n      }\\n    }\\n\\n    // --- Update Selected filters count inside dropdown ---\\n    if ($filtersDropDown) {\\n      var $selectedCount = $filtersDropDown.querySelector('.bab-selected-filters-count');\\n      if ($selectedCount) {\\n        $selectedCount.textContent = \\\"(\\\".concat(activeOptions.length, \\\")\\\");\\n      }\\n    }\\n\\n    // --- Update external pills bar ---\\n    if ($pillsBar) {\\n      $pillsBar.innerHTML = '';\\n      if (activeOptions.length === 0) {\\n        $pillsBar.classList.add('hidden');\\n        $pillsBar.classList.remove('flex');\\n        return;\\n      }\\n      $pillsBar.classList.remove('hidden');\\n      $pillsBar.classList.add('flex');\\n      activeOptions.forEach(function (opt) {\\n        var labelEl = opt.querySelector('.checkbox-label') || opt.querySelector('span:last-child');\\n        var filterText = labelEl ? labelEl.textContent.trim() : opt.dataset.filterOption || '';\\n        if (!filterText) return;\\n        var pill = document.createElement('span');\\n        pill.style.cssText = 'display:inline-flex;align-items:center;gap:6px;background:#FFF6E5;border:1px solid #FDE68A;border-radius:9999px;padding:4px 12px;font-size:12px;font-weight:700;color:#232323;white-space:nowrap;';\\n        pill.innerHTML = \\\"<span>\\\".concat(filterText, \\\"</span><span style=\\\\\\\"cursor:pointer;font-weight:700;color:#232323;font-size:11px;\\\\\\\" class=\\\\\\\"bab-pill-remove\\\\\\\" aria-label=\\\\\\\"Remove filter\\\\\\\">\\\\u2715</span>\\\");\\n        pill.querySelector('.bab-pill-remove').addEventListener('click', function (e) {\\n          e.stopPropagation();\\n          if (opt.classList.contains('active')) {\\n            opt.click();\\n          } else {\\n            opt.classList.remove('active');\\n            filterCollectionResults($filterOptions, $collections, $filtersDropDown, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton, false);\\n            syncFilterBadgeAndPills($filtersDropDown, $filterOptions, $collections, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton);\\n          }\\n        });\\n        $pillsBar.appendChild(pill);\\n      });\\n\\n      // Reset button\\n      var clearBtn = document.createElement('button');\\n      clearBtn.type = 'button';\\n      clearBtn.style.cssText = 'display:inline-flex;align-items:center;gap:4px;background:transparent;border:none;font-size:12px;font-weight:700;color:#F59E0B;cursor:pointer;padding:4px 6px;';\\n      clearBtn.innerHTML = \\\"<span>Reset</span><svg width=\\\\\\\"13\\\\\\\" height=\\\\\\\"13\\\\\\\" viewBox=\\\\\\\"0 0 24 24\\\\\\\" fill=\\\\\\\"none\\\\\\\" stroke=\\\\\\\"#F59E0B\\\\\\\" stroke-width=\\\\\\\"2.5\\\\\\\" stroke-linecap=\\\\\\\"round\\\\\\\" stroke-linejoin=\\\\\\\"round\\\\\\\"><path d=\\\\\\\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\\\\\\\"/><path d=\\\\\\\"M3 3v5h5\\\\\\\"/></svg>\\\";\\n      clearBtn.addEventListener('click', function (e) {\\n        e.preventDefault();\\n        Array.from($filterOptions).forEach(function (opt) {\\n          opt.classList.remove('active');\\n        });\\n        filterCollectionResults($filterOptions, $collections, $filtersDropDown, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton, false);\\n        syncFilterBadgeAndPills($filtersDropDown, $filterOptions, $collections, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton);\\n      });\\n      $pillsBar.appendChild(clearBtn);\\n    }\\n  };\\n  var filterCollectionResults = function filterCollectionResults($filterOptions, $collections, $filtersDropDown, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton) {\\n    var closeMenu = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : true;\\n    var activeSpiceFilters = [];\\n    var activePreferenceFilters = [];\\n    var activeAllergenExclusions = [];\\n\\n    // Loop through the list of filters to find active options by category\\n    $filterOptions.forEach(function ($filterOption) {\\n      if ($filterOption.classList.contains(\\\"active\\\") && $filterOption.dataset.filterOption) {\\n        var val = $filterOption.dataset.filterOption.toLowerCase().trim();\\n        var type = $filterOption.dataset.filterType;\\n        if (type === \\\"spice\\\" || [\\\"no spice\\\", \\\"lightly spiced\\\", \\\"spicy\\\"].includes(val)) {\\n          activeSpiceFilters.push(val);\\n        } else if (type === \\\"ingredient\\\" || [\\\"milk\\\", \\\"cereals\\\", \\\"nuts\\\", \\\"peanuts\\\", \\\"soya\\\", \\\"fish\\\", \\\"mustard\\\", \\\"sulphites\\\", \\\"celery\\\", \\\"chilli\\\", \\\"tomato\\\", \\\"added_sugar\\\"].includes(val)) {\\n          activeAllergenExclusions.push(val);\\n        } else {\\n          activePreferenceFilters.push(val);\\n        }\\n      }\\n    });\\n\\n    // Loop through the list of products and evaluate match criteria\\n    $collections.forEach(function ($collection) {\\n      var $collectionProducts = $collection.querySelectorAll(\\\".build-a-bundle__product-card\\\");\\n      var $noMatchesText = $collection.querySelector(\\\".build-a-bundle__collection-no-filter-matches\\\");\\n      if ($collectionProducts.length > 0) {\\n        var numberThatDoNotMatch = 0;\\n        $collectionProducts.forEach(function ($collectionProduct) {\\n          var matches = true;\\n\\n          // 1. Spice Level (Whitelist: If any spice options are ticked, product spice level must match one of them)\\n          if (activeSpiceFilters.length > 0) {\\n            var productSpice = ($collectionProduct.dataset.spiceLevel || \\\"\\\").toLowerCase().trim();\\n            if (!activeSpiceFilters.includes(productSpice)) {\\n              matches = false;\\n            }\\n          }\\n\\n          // 2. Preferences (Tags Inclusion: Product tags must contain ALL active preference tags - AND logic)\\n          if (matches && activePreferenceFilters.length > 0) {\\n            var productTagsRaw = $collectionProduct.dataset.productTags || \\\"\\\";\\n            var productTags = productTagsRaw.toLowerCase().split(\\\",\\\").map(function (t) {\\n              return t.trim();\\n            });\\n            var matchesAllPrefs = activePreferenceFilters.every(function (pref) {\\n              return productTags.includes(pref);\\n            });\\n            if (!matchesAllPrefs) {\\n              matches = false;\\n            }\\n          }\\n\\n          // 3. Allergen Exclusions (Exclusion: If customer selects \\\"Without soy*\\\" (soya), hide product if it contains soya)\\n          if (matches && activeAllergenExclusions.length > 0) {\\n            var containsAllergensRaw = $collectionProduct.dataset.containsAllergens || \\\"\\\";\\n            var containsAllergens = containsAllergensRaw.toLowerCase().split(\\\",\\\").map(function (a) {\\n              return a.trim();\\n            }).filter(Boolean);\\n            var _productTagsRaw = $collectionProduct.dataset.productTags || \\\"\\\";\\n            var _productTags = _productTagsRaw.toLowerCase().split(\\\",\\\").map(function (t) {\\n              return t.trim();\\n            });\\n            activeAllergenExclusions.forEach(function (excluded) {\\n              var hasWithoutTag = _productTags.some(function (t) {\\n                return t === \\\"without \\\".concat(excluded) || t === \\\"without \\\".concat(excluded, \\\"*\\\") || t === \\\"no \\\".concat(excluded);\\n              });\\n              if (!hasWithoutTag && containsAllergens.includes(excluded)) {\\n                matches = false;\\n              }\\n            });\\n          }\\n          if (matches) {\\n            $collectionProduct.classList.remove(\\\"hidden\\\");\\n          } else {\\n            $collectionProduct.classList.add(\\\"hidden\\\");\\n            numberThatDoNotMatch++;\\n          }\\n        });\\n\\n        // Visual reload animation feedback on matching dish images\\n        var $matchingImages = $collection.querySelectorAll('.build-a-bundle__product-card:not(.hidden) .build-a-bundle__product-card__image-container');\\n        if ($matchingImages.length > 0) {\\n          if (typeof gsap__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"] !== 'undefined') {\\n            gsap__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].fromTo($matchingImages, {\\n              opacity: 0.3,\\n              scale: 0.96\\n            }, {\\n              opacity: 1,\\n              scale: 1,\\n              duration: 0.3,\\n              ease: \\\"power2.out\\\",\\n              stagger: 0.02,\\n              overwrite: \\\"auto\\\"\\n            });\\n          } else {\\n            $matchingImages.forEach(function (imgEl) {\\n              imgEl.style.transition = 'opacity 0.2s ease, transform 0.2s ease';\\n              imgEl.style.opacity = '0.3';\\n              imgEl.style.transform = 'scale(0.96)';\\n              setTimeout(function () {\\n                imgEl.style.opacity = '1';\\n                imgEl.style.transform = 'scale(1)';\\n              }, 50);\\n            });\\n          }\\n        }\\n        if ($noMatchesText) {\\n          if (numberThatDoNotMatch === $collectionProducts.length) {\\n            $noMatchesText.classList.remove(\\\"hidden\\\");\\n          } else {\\n            $noMatchesText.classList.add(\\\"hidden\\\");\\n          }\\n        }\\n      }\\n    });\\n\\n    // Update live matching dishes count in dropdown sticky header\\n    var matchingCards = document.querySelectorAll('.build-a-bundle__collection-container .build-a-bundle__product-card:not(.hidden)');\\n    var totalMatchingDishes = matchingCards.length;\\n    document.querySelectorAll('.bab-matching-dishes-count').forEach(function (el) {\\n      el.textContent = totalMatchingDishes;\\n    });\\n    document.querySelectorAll('.bab-matching-dishes-text').forEach(function (el) {\\n      el.textContent = totalMatchingDishes === 1 ? 'Dish in filters' : 'Dishes in filters';\\n    });\\n\\n    // Hide Filter Menu only when closeMenu is true (e.g. clicking Apply)\\n    if (closeMenu && $filtersDropDown) {\\n      hideFilterDropdown($filtersDropDown, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton);\\n    }\\n  };\\n\\n  /*\\r\\n      Load Product Pop up - clicking on a product image within a collection card triggers the pop up to appear\\r\\n      But, there's a popup per product and it's nested within the card. This causes Zindex issues with nesting.\\r\\n      So extract the content and put it into the Pop up holder\\r\\n      Toggle known Zindex issues to ensure this sits at the front\\r\\n  */\\n\\n  var loadProductPopup = function loadProductPopup($card, $productPopupContainer) {\\n    if ($card && $productPopupContainer) {\\n      var $containerContentHolder = $productPopupContainer.querySelector(\\\".build-a-bundle__product-card__popup-content-container\\\");\\n      var $popupContents = $card.querySelector(\\\".product-popup-contents\\\");\\n      if ($containerContentHolder && $popupContents) {\\n        lockBackground();\\n\\n        //Inject our content into the container\\n        $containerContentHolder.appendChild($popupContents);\\n\\n        //Make the popup active\\n        $productPopupContainer.classList.add(\\\"active\\\");\\n        $popupContents.classList.remove(\\\"hidden\\\");\\n      } else {\\n        console.log(\\\"could not find popup contents for this product and/or could not find the overlay content holder\\\");\\n      }\\n    } else {\\n      console.log(\\\"$card and/or $productPopupContainer not passed into function. Cannot open relevant popup\\\");\\n    }\\n  };\\n\\n  //Close the Pop up and put the Product Content Back where it belongs in the structure\\n  var closeProductPopUp = function closeProductPopUp($productPopupContainer, $buildABundleTemplate) {\\n    if ($productPopupContainer && $buildABundleTemplate) {\\n      //Get the contents of the popup, grab the id, find where it belongs in the structure of the page\\n      var $popupContents = $productPopupContainer.querySelector(\\\".product-popup-contents\\\");\\n      if ($popupContents) {\\n        var targetId = $popupContents.dataset.productId;\\n        if (targetId) {\\n          //find the product card that we are returning this to - cater for there being multiple versions of the same product just listed in different collections\\n          var $targetProductCards = $buildABundleTemplate.querySelectorAll(\\\".build-a-bundle__product-card[data-product-id=\\\\\\\"\\\".concat(targetId, \\\"\\\\\\\"]\\\"));\\n          if ($targetProductCards.length > 0) {\\n            $targetProductCards.forEach(function ($targetProductCard) {\\n              //Look for pop up contents, if this one doesn't have a match, this is where we need to return the content to\\n              var $targetProductCardPopupContent = $targetProductCard.querySelector(\\\".product-popup-contents\\\");\\n              if (!$targetProductCardPopupContent) {\\n                $productPopupContainer.classList.remove(\\\"active\\\");\\n                unlockBackground();\\n                $popupContents.classList.add(\\\"hidden\\\");\\n                $targetProductCard.appendChild($popupContents);\\n\\n                //break the loop\\n                return false;\\n              }\\n            });\\n          } else {\\n            console.log(\\\"Unable to find a collection card to return this popup content to. $targetProductCards found zero results\\\");\\n          }\\n        } else {\\n          console.log(\\\"when closing the product popup, could not find the ID of the variant we're trying to close. Unable to return to its original position\\\");\\n        }\\n      } else {\\n        console.log(\\\"when closing the product pop up - somehow $popupContents was not present.\\\");\\n      }\\n    } else {\\n      console.log(\\\"$productPopupContainer and/or $buildABundleTemplate not passed into function - unable to close the popup and return content to it's original location\\\");\\n    }\\n  };\\n\\n  //Scope wide definitions\\n  var header = document.querySelector(\\\"header.header\\\");\\n  var $popupBackground = document.querySelector(\\\".build-a-bundle__product-card__popup-background\\\");\\n  var $buildABundleTemplate = document.querySelector(\\\".build-a-bundle-template\\\");\\n  var $bundleProductCards = $buildABundleTemplate === null || $buildABundleTemplate === void 0 ? void 0 : $buildABundleTemplate.querySelectorAll(\\\".build-a-bundle__product-card\\\");\\n  var $skioDiscountAmount = false;\\n  if ($buildABundleTemplate) {\\n    $skioDiscountAmount = $buildABundleTemplate.dataset.sellingPlanDiscount;\\n  }\\n\\n  //The Build a Bundle Info container is required throughout various functions that need to show / hide things build-a-bundle__info-container \\n  var $bundleInfo = $buildABundleTemplate === null || $buildABundleTemplate === void 0 ? void 0 : $buildABundleTemplate.querySelector(\\\".build-a-bundle__info-container\\\");\\n  if ($buildABundleTemplate && $bundleInfo) {\\n    //This is the original\\n    /*\\r\\n    if (JSON.parse(localStorage.getItem('bundle'))){\\r\\n        bundle = JSON.parse(localStorage.getItem('bundle'));\\r\\n        console.log('preloaded bundle: ', bundle);            \\r\\n    } else {\\r\\n        bundle = {\\r\\n            bundleId: generateUniqueBundleId(),\\r\\n            items: {}\\r\\n        };\\r\\n    }        \\r\\n    */\\n    /*\\r\\n      function preloadBundle() {\\r\\n          console.log(bundle);\\r\\n          console.log(\\\"preload running\\\");\\r\\n          window.editMode = false;            \\r\\n        const queryString = window.location.search;\\r\\n        const urlParams = new URLSearchParams(queryString);\\r\\n        if(urlParams.get('edit')){\\r\\n            window.editMode = true;\\r\\n        }\\r\\n          if(window.editMode){\\r\\n              //Thre should be a bundle in storage with a flag set against it indicating it is an Edit bundle\\r\\n            bundle = \\\"\\\";\\r\\n            const jsonBundle = localStorage.getItem(\\\"bundle\\\");\\r\\n              let processEdit = false;\\r\\n            if(jsonBundle){\\r\\n                bundle = JSON.parse(jsonBundle);\\r\\n                if(bundle.editing_bundle == true && Object.keys(bundle).length > 0){                        \\r\\n                    \\r\\n                    if(bundle.bundleId == urlParams.get('edit')){\\r\\n                        //It's a match! This is our bundle\\r\\n                        processEdit = true;\\r\\n                    }\\r\\n                }\\r\\n            }\\r\\n              if(processEdit){\\r\\n                updateBundleUI(bundle,\\\"edit\\\");\\r\\n            }else{\\r\\n                alert(\\\"An error occurred, unable to edit this bundle\\\");\\r\\n                window.location.href = \\\"/cart\\\";\\r\\n            }\\r\\n        }else{\\r\\n              let bundle = JSON.parse(localStorage.getItem(\\\"bundle\\\")) || {};\\r\\n                    \\r\\n            if (Object.keys(bundle).length > 0) {\\r\\n                if(bundle.editing_bundle == true){\\r\\n                      //A user abandoned their Edit bundle process without saving, clear this from local storage\\r\\n                    localStorage.removeItem(\\\"bundle\\\");\\r\\n                      //Did the user abandon a bundle build before they clicked the edit button?\\r\\n                    const storedBundle = localStorage.getItem('stored_bundle');\\r\\n                    if(storedBundle){\\r\\n                        bundle = JSON.parse(storedBundle);\\r\\n                          //This shouldn't be possible, but ensure it's not an edit mode bundle\\r\\n                        if(bundle.editing_bundle == true){\\r\\n                            \\r\\n                            //Reset, we don't want that\\r\\n                            bundle = {};\\r\\n                        }else{\\r\\n                              console.log(\\\"attempting to fix bundle storage\\\");\\r\\n                              //This is the user's unfinished bundle \\r\\n                            localStorage.removeItem(\\\"stored_bundle\\\");\\r\\n                              //Save in it's correct place\\r\\n                            localStorage.setItem(\\\"bundle\\\",JSON.stringify(bundle));\\r\\n                            bundle = JSON.parse(localStorage.getItem(\\\"bundle\\\"));\\r\\n                              //Force a reload to allow local storage to clean up and stop getting things mixed up\\r\\n                            window.location.reload();\\r\\n                        }\\r\\n                    }else{\\r\\n                        \\r\\n                        //We're not in edit mode, we should remove this\\r\\n                        localStorage.removeItem(\\\"bundle\\\");\\r\\n                        bundle = {};\\r\\n                    }\\r\\n                }\\r\\n            }\\r\\n              // If there is a bundle saved - preload it\\r\\n            if (Object.keys(bundle).length > 0) {\\r\\n                  updateBundleUI(bundle,\\\"preload\\\")\\r\\n            }else{\\r\\n                handleProgressNotifications(\\\"start\\\");\\r\\n            }\\r\\n        }\\r\\n    }\\r\\n      */\\n    // Function to generate a unique bundle ID\\n    var generateUniqueBundleId = function generateUniqueBundleId() {\\n      return \\\"bundle_\\\" + Date.now();\\n    }; // Function to update the bundle (add/remove products)\\n    var updateBundle = function updateBundle(productId, change, productTitle, productPrice, productPriceString, compareProductPrice, compareProductPriceString, productImage) {\\n      // If the product is not already in the bundle, initialize it\\n      if (!window.bundle.items[productId]) {\\n        window.bundle.items[productId] = {\\n          title: productTitle,\\n          price: productPrice,\\n          priceString: productPriceString,\\n          comparePrice: compareProductPrice,\\n          comparePriceString: compareProductPriceString,\\n          image: productImage,\\n          quantity: 0\\n        };\\n      }\\n\\n      // Modify the quantity\\n      window.bundle.items[productId].quantity += change;\\n\\n      // Remove the item if the quantity reaches 0\\n      if (window.bundle.items[productId].quantity < 1 || change == 0) {\\n        delete window.bundle.items[productId];\\n      }\\n\\n      // Save the updated bundle to localStorage\\n      localStorage.setItem(\\\"bundle\\\", JSON.stringify(window.bundle));\\n\\n      // Update UI\\n      if (change > 0) {\\n        updateBundleUI(\\\"update\\\");\\n      } else {\\n        updateBundleUI();\\n      }\\n    }; // Function to update the UI with the current bundle contents\\n    var updateBundleUI = function updateBundleUI(type) {\\n      // Set elements\\n\\n      var $bundleHeader = $buildABundleTemplate.querySelector(\\\".build-a-bundle__info-header-trigger\\\");\\n      var $bundeItemList = $bundleHeader === null || $bundleHeader === void 0 ? void 0 : $bundleHeader.querySelector(\\\"ul\\\");\\n      var $desktopItemTemplate = $bundleHeader === null || $bundleHeader === void 0 ? void 0 : $bundleHeader.querySelector(\\\".desktop-bundle-image-template\\\");\\n      var currencySymbol = $buildABundleTemplate.dataset.currencySymbol;\\n      var totalPrice = 0;\\n      var totalSavings = 0;\\n      var totalItems = 0;\\n\\n      // Clear the bundle list (by clearing it on each update, we don't need to track changes)\\n      var $desktopItemImages = $bundeItemList.querySelectorAll(\\\".desktop-bundle-image\\\");\\n      if ($desktopItemImages) {\\n        $desktopItemImages.forEach(function ($desktopItemImage) {\\n          $desktopItemImage.remove();\\n        });\\n      }\\n\\n      //Reset all placeholder frames\\n      var placeholderFrames = $bundeItemList.querySelectorAll(\\\".desktop-bundle-placeholder\\\");\\n      if (placeholderFrames.length > 0) {\\n        placeholderFrames.forEach(function (placeholderFrame) {\\n          placeholderFrame.classList.remove(\\\"hidden\\\");\\n        });\\n      }\\n\\n      // Mobile Bundle Info Container Product Cards List - remove any product cards\\n      var $mobileProductList = $buildABundleTemplate.querySelector(\\\".build-a-bundle__info-body-mobile-product-list\\\");\\n      var $mobileProductListTemplate = $mobileProductList === null || $mobileProductList === void 0 ? void 0 : $mobileProductList.querySelector(\\\".build-a-bundle__info-body-mobile-product-list-template-product\\\");\\n      if ($mobileProductList) {\\n        var $previousMobileProductCards = $mobileProductList.querySelectorAll(\\\".build-a-bundle__info-body-mobile-product-list-product\\\");\\n        if ($previousMobileProductCards.length > 0) {\\n          $previousMobileProductCards.forEach(function ($previousMobileProductCard) {\\n            $previousMobileProductCard.remove();\\n          });\\n        }\\n      }\\n\\n      //Establish Active Purchase Type (One Time Purchase or Subscription) early in the function for other areas to use it\\n      var activePurchaseType = \\\"onetime-purchase\\\";\\n\\n      //If there's no subscription selling plans set up, there will be no purchase types\\n      if ($purchaseTypesContainer) {\\n        //Get activePurchaseType\\n        var $activePurchaseTypeContainer = $purchaseTypesContainer.querySelector(\\\".build-a-bundle__purchase-type.active\\\");\\n        if ($activePurchaseTypeContainer) {\\n          activePurchaseType = $activePurchaseTypeContainer.dataset.type;\\n        }\\n      }\\n\\n      // Add bundle items to list\\n      Object.entries(window.bundle.items).forEach(function (_ref5, index) {\\n        var _ref6 = _slicedToArray(_ref5, 2),\\n          productId = _ref6[0],\\n          item = _ref6[1];\\n        totalItems += item.quantity;\\n        totalPrice += item.price * item.quantity;\\n        if (item.comparePrice > item.price) {\\n          totalSavings += (item.comparePrice - item.price) * item.quantity;\\n        }\\n        if ($desktopItemTemplate) {\\n          var $itemTemplateClone = $desktopItemTemplate.cloneNode();\\n          $itemTemplateClone.classList.remove(\\\"desktop-bundle-image-template\\\", \\\"hidden\\\");\\n          $itemTemplateClone.classList.add(\\\"desktop-bundle-image\\\");\\n          $itemTemplateClone.innerHTML = \\\"\\\\n                        <img src=\\\\\\\"\\\".concat(item.image, \\\"\\\\\\\" class=\\\\\\\"w-full h-full object-contain rounded-4px\\\\\\\">\\\\n                        <span class=\\\\\\\"w-6 h-6 border border-primary-border absolute -top-1.5 -right-1.5 bg-white flex flex-col items-center justify-center rounded-100px text-label-m font-medium flex-shrink-0\\\\\\\" style=\\\\\\\"letter-spacing:0.48px\\\\\\\">\\\").concat(item.quantity, \\\"</span>\\\\n                    \\\");\\n          $bundeItemList.prepend($itemTemplateClone);\\n          if (index < 4) {\\n            $bundeItemList.classList.remove(\\\"scrollable\\\");\\n            $bundeItemList.scrollLeft = 0;\\n            var targetPlaceholderFrame = $bundeItemList.querySelector('.desktop-bundle-placeholder[data-position=\\\"' + (index + 1) + '\\\"]');\\n            if (targetPlaceholderFrame) {\\n              targetPlaceholderFrame.classList.add(\\\"hidden\\\");\\n            }\\n          } else {\\n            //We've got more than 4 items in the list - make the list scrollable\\n            var currentImages = $bundeItemList.querySelectorAll(\\\".desktop-bundle-image\\\");\\n            $bundeItemList.classList.add(\\\"scrollable\\\");\\n            for (var i = currentImages.length - 1; i >= 0; i--) {\\n              if (!currentImages[i].classList.contains(\\\"hidden\\\")) {\\n                currentImages[i].classList.add(\\\"hidden\\\");\\n                break;\\n              }\\n            }\\n          }\\n        } else {\\n          console.log(\\\"log: could not find desktop item list template, unable to populate list of items in bundle\\\");\\n        }\\n        if ($mobileProductList && $mobileProductListTemplate) {\\n          //Create a close, start populating and insert it into the list\\n          var $mobileItemClone = $mobileProductListTemplate.cloneNode(true);\\n          $mobileItemClone.classList.remove(\\\"build-a-bundle__info-body-mobile-product-list-template-product\\\", \\\"hidden\\\");\\n          $mobileItemClone.classList.add(\\\"build-a-bundle__info-body-mobile-product-list-product\\\");\\n          $mobileItemClone.dataset.productId = productId;\\n          var $mobileItemCloneImg = $mobileItemClone.querySelector(\\\".product-image\\\");\\n          if ($mobileItemCloneImg) {\\n            $mobileItemCloneImg.src = item.image;\\n          }\\n          var $mobileItemCloneTitle = $mobileItemClone.querySelector(\\\".product-title\\\");\\n          if ($mobileItemCloneTitle) {\\n            $mobileItemCloneTitle.textContent = item.title;\\n          }\\n\\n          /*\\r\\n              What we do for pricing:\\r\\n                - Work out what Purchase Type is Selected\\r\\n              - For OTP - just output the OTP price\\r\\n              - For Subscriptions, output the OTP as the \\\"Compare at\\\" price and output the subscription price\\r\\n                  - We don't store the Subscription Price in the bundle, so grab it from the product listings on the page and insert it\\r\\n          */\\n\\n          var $mobileItemProductPrice = $mobileItemClone.querySelector(\\\".product-pricing .product-price\\\");\\n          var $mobileItemCompareAtPrice = $mobileItemClone.querySelector(\\\".product-pricing .compare-at-price\\\");\\n          if (activePurchaseType == \\\"subscription\\\") {\\n            //Set Compare at Price to the Product Price, and Regular Price to the Subscription Price which we'll need to fetch from elsewhere on the page\\n            if ($mobileItemCompareAtPrice) {\\n              $mobileItemCompareAtPrice.innerHTML = Carbon.Money.formatMoney(item.price, \\\"\u00A3{{amount_no_trailing_zeros}}\\\");\\n            }\\n            if ($mobileItemProductPrice) {\\n              if ($bundleProductCards.length > 0) {\\n                //Find our product and extract the subscription price from it\\n                var $targetProductCard = Array.from($bundleProductCards).find(function ($bundleProductCard) {\\n                  return $bundleProductCard.dataset.id === productId;\\n                });\\n                if ($targetProductCard) {\\n                  var subPriceText = $targetProductCard.querySelector(\\\".subscription-price-info .price-text\\\");\\n                  if (subPriceText) {\\n                    if ($mobileItemProductPrice) {\\n                      $mobileItemProductPrice.textContent = subPriceText.textContent;\\n                    }\\n                    if ($mobileItemCompareAtPrice) {\\n                      $mobileItemCompareAtPrice.innerHTML = Carbon.Money.formatMoney(item.price, \\\"\u00A3{{amount_no_trailing_zeros}}\\\");\\n                    }\\n                  }\\n                }\\n              }\\n            }\\n          } else {\\n            //Set Price to actual Product Price and hide comparison price container\\n            if ($mobileItemProductPrice) {\\n              $mobileItemProductPrice.innerHTML = Carbon.Money.formatMoney(item.price, \\\"\u00A3{{amount_no_trailing_zeros}}\\\");\\n            }\\n            if ($mobileItemCompareAtPrice) {\\n              $mobileItemCompareAtPrice.classList.add(\\\"hidden\\\");\\n            }\\n          }\\n\\n          // Add Cloned Node to the page output\\n          $mobileProductList.prepend($mobileItemClone);\\n        }\\n      });\\n\\n      //Update our global value that informs the pop ups how many they can allow the customers to add when a maximum value is set\\n      window.currentTotalItems = totalItems;\\n      var boxIsFull = false;\\n      if (window.maxItemsAllowed) {\\n        if (totalItems >= window.maxItemsAllowed) {\\n          boxIsFull = true;\\n        }\\n      }\\n\\n      //Show / hide our mobile product card list\\n      if ($mobileProductList) {\\n        if (totalItems > 0) {\\n          $mobileProductList.classList.remove(\\\"hidden\\\");\\n        } else {\\n          $mobileProductList.classList.add(\\\"hidden\\\");\\n        }\\n      }\\n\\n      // Add event listeners for bundle items\\n      var $bundleLineItems = $buildABundleTemplate.querySelectorAll(\\\".build-a-bundle_item\\\");\\n      if ($bundleLineItems) {\\n        $bundleLineItems.forEach(function ($item) {\\n          var $remove = $item.querySelector(\\\".build-a-bundle_item-remove\\\");\\n          if ($remove) {\\n            $remove.addEventListener(\\\"click\\\", function () {\\n              updateBundle($item.dataset.id, 0);\\n            });\\n          }\\n        });\\n      }\\n\\n      // Update item count\\n      var $count = $buildABundleTemplate.querySelectorAll(\\\".build-a-bundle__item-count\\\");\\n      if ($count) {\\n        $count.forEach(function (element) {\\n          element.innerText = totalItems;\\n          if (totalItems > 0) {\\n            element.parentElement.classList.remove(\\\"inactive\\\");\\n          } else {\\n            element.parentElement.classList.add(\\\"inactive\\\");\\n          }\\n        });\\n      } else {\\n        console.log('log: count not found');\\n      }\\n\\n      // Update Bundle Instructions\\n\\n      //Use number of items in bundle to loop through and output the relevant message\\n      var instructionText = $buildABundleTemplate.querySelector(\\\".instruction-text\\\");\\n      if (instructionText) {\\n        var replacementText = findNextInstruction(totalItems, tierContentArr);\\n        if (replacementText) {\\n          instructionText.textContent = replacementText;\\n          instructionText.classList.remove(\\\"hidden\\\");\\n        } else {\\n          instructionText.classList.add(\\\"hidden\\\");\\n        }\\n      }\\n\\n      /*\\r\\n          Handle Pricing across purchase types and buttons\\r\\n            - Toggle between \\\"from\\\" pricing and actual pricing when there are items in the bundle\\r\\n          - Update pricing / instruction information on the button\\r\\n          - Activate / Deactivate the buy button(s)                            \\r\\n      */\\n      var subcriptionPrice = null;\\n      if ($skioDiscountAmount) {\\n        //Adjust how percentage off is calculated to avoid float based inaccuracies\\n        var pricePerItem = totalPrice / totalItems;\\n        var discountedItemPrice = Math.floor(pricePerItem * (100 - $skioDiscountAmount) / 100);\\n        subcriptionPrice = discountedItemPrice * totalItems;\\n      }\\n\\n      //If there's no subscription selling plans set up, there will be no purchase types\\n      if ($purchaseTypesContainer) {\\n        //do we need to factor in any Skio Discounts when rendering our Purchase Types? \\n        var factorInSkioDiscount = false;\\n        if (window.discountRewardPercentage !== false && window.itemsRequiredForDiscount !== false) {\\n          if (window.itemsRequiredForDiscount <= totalItems) {\\n            factorInSkioDiscount = true;\\n          }\\n        }\\n        var $purchaseTypePricing = $purchaseTypesContainer.querySelectorAll(\\\".build-a-bundle__purchase-type-pricing\\\");\\n        $purchaseTypePricing.forEach(function ($purchaseTypePricingCont) {\\n          var $priceText = $purchaseTypePricingCont.querySelector(\\\".build-a-bundle__purchase-type-pricing__total-price\\\");\\n          var $fromPriceText = $purchaseTypePricingCont.querySelector(\\\".build-a-bundle__purchase-type-pricing__from-price\\\");\\n\\n          /*\\r\\n              \\r\\n          * \\r\\n          *                     if(activePurchaseType == \\\"subscription\\\"){\\r\\n          * \\r\\n          *                         let finalPrice = Carbon.Money.formatMoney(subscriptionPrice,\\\"\u00A3{{amount_no_trailing_zeros}}\\\");\\r\\n          *                         if(factorInSkioDiscount){\\r\\n          *                             finalPrice = Carbon.Money.formatMoney(subscriptionPrice - (subscriptionPrice * (window.discountRewardPercentage / 100)),\\\"\u00A3{{amount_no_trailing_zeros}}\\\");         \\r\\n          *                         }\\r\\n          * \\r\\n          *                         priceInfo.textContent = finalPrice;\\r\\n          * \\r\\n          *                         //If there's a Skio discount, the \\\"comparison\\\" price should reflect that too. We're comparing the Subscription price to the One Time Purchase Price - so the one time purchase price should be accurate\\r\\n          *                         let comparisonPrice = totalPrice;                        \\r\\n          *                         if(factorInSkioDiscount){\\r\\n          *                             comparisonPrice = totalPrice - (totalPrice * (window.discountRewardPercentage / 100));\\r\\n          *                         }\\r\\n          * \\r\\n          *                         comparisonPriceInfo.textContent = Carbon.Money.formatMoney(comparisonPrice,\\\"\u00A3{{amount_no_trailing_zeros}}\\\");\\r\\n          *                         comparisonPriceInfo.style = \\\"\\\";\\r\\n          *                     }else{\\r\\n          * \\r\\n          \\r\\n          * \\r\\n          *                         priceInfo.textContent = finalPrice;\\r\\n          *                         comparisonPriceInfo.style.display = \\\"none\\\";\\r\\n          *                     }\\r\\n          */\\n\\n          //\\\"From\\\" price can be turned off in the customiser, so we need to cater for that\\n          if ($priceText) {\\n            if (totalItems > 0) {\\n              //If \\\"from\\\" text exists, hide it. Calculate both the total price and the total price minus the saving from subscription\\n              if ($fromPriceText) {\\n                $fromPriceText.classList.add(\\\"hidden\\\");\\n              }\\n              $priceText.classList.remove(\\\"hidden\\\");\\n              if ($priceText.classList.contains(\\\"subscription\\\")) {\\n                if (subcriptionPrice !== false) {\\n                  var subPriceOutput = subcriptionPrice;\\n                  if (factorInSkioDiscount) {\\n                    subPriceOutput = subcriptionPrice - subcriptionPrice * (window.discountRewardPercentage / 100);\\n                  }\\n                  $priceText.textContent = Carbon.Money.formatMoney(subPriceOutput, \\\"\u00A3{{amount_no_trailing_zeros}}\\\");\\n                } else {\\n                  console.log(\\\"Discount amount not set, this should be established when using subscription. Unable to output correct subscription price\\\");\\n                  $priceText.classList.add(\\\"hidden\\\");\\n                }\\n              } else {\\n                //Factor in Skio Discount if relevant\\n                var otpPrice = totalPrice;\\n                if (factorInSkioDiscount) {\\n                  otpPrice = totalPrice - totalPrice * (window.discountRewardPercentage / 100);\\n                }\\n                $priceText.textContent = Carbon.Money.formatMoney(otpPrice, \\\"\u00A3{{amount_no_trailing_zeros}}\\\");\\n              }\\n            } else {\\n              if ($fromPriceText) {\\n                //Hide actual pricing and restore \\\"from\\\" price\\n                $priceText.classList.add(\\\"hidden\\\");\\n                $fromPriceText.classList.remove(\\\"hidden\\\");\\n              } else {\\n                //Just remove the pricing text\\n                $priceText.classList.remove(\\\"hidden\\\");\\n                $priceText.textContent = \\\"\\\";\\n              }\\n            }\\n          } else {\\n            //This should always exist in this context\\n            console.log(\\\"Purchase Type option doesnt have a build-a-bundle__purchase-type-pricing__total-price class. Unable to update pricing\\\");\\n          }\\n        });\\n      }\\n\\n      //Handle Button Config - based on whether there's a minimum required, toggle the button from disabled / enabled\\n      if ($addToCarts.length > 0) {\\n        var $bundleFooter = $buildABundleTemplate.querySelector(\\\".build-a-bundle__info-footer\\\");\\n        $addToCarts.forEach(function ($addToCart) {\\n          //There is a minimum amount of items required\\n          if (window.minItemsRequired) {\\n            if (totalItems < window.minItemsRequired) {\\n              disableBtn($addToCart);\\n              handleBtnMessaging($addToCart, false, totalItems, window.minItemsRequired);\\n              if ($bundleFooter) {\\n                $bundleFooter.classList.remove(\\\"qualified\\\");\\n              }\\n            } else {\\n              //Tell the mobile footer than the Add to Cart is now qualified\\n              if ($bundleFooter) {\\n                $bundleFooter.classList.add(\\\"qualified\\\");\\n              }\\n              enableBtn($addToCart);\\n              handleBtnMessaging($addToCart, true, totalItems, window.minItemsRequired, totalPrice, subcriptionPrice, activePurchaseType);\\n            }\\n          } else {\\n            //No minimum amount, just ensure that there is one product in the bundle before enabling\\n            if (totalItems < 1) {\\n              disableBtn($addToCart);\\n              handleBtnMessaging($addToCart, false, totalItems, 1);\\n              if ($bundleFooter) {\\n                $bundleFooter.classList.remove(\\\"qualified\\\");\\n              }\\n            } else {\\n              //Tell the mobile footer than the Add to Cart is now qualified\\n              if ($bundleFooter) {\\n                $bundleFooter.classList.add(\\\"qualified\\\");\\n              }\\n              enableBtn($addToCart);\\n              handleBtnMessaging($addToCart, true, totalItems, window.minItemsRequired, totalPrice, subcriptionPrice, activePurchaseType);\\n            }\\n          }\\n        });\\n      } else {\\n        console.log(\\\"Unable to find Add to cart buttons in Update UI function\\\");\\n      }\\n\\n      //Update Rewards Thresholds\\n      var $rewardThresholdContainers = $buildABundleTemplate.querySelectorAll(\\\".build-a-bundle-reward-thresholds-container\\\");\\n      if ($rewardThresholdContainers.length > 0) {\\n        $rewardThresholdContainers.forEach(function ($rewardThresholdContainer) {\\n          var $rewardThresholdSegments = $rewardThresholdContainer.querySelectorAll(\\\".build-a-bundle-reward-thresholds .reward-threshold\\\");\\n          if ($rewardThresholdSegments.length > 0) {\\n            var previousMilestoneNumber = 0;\\n            var multipleRewardMessages = false;\\n            var isRewardMessages = false;\\n            var $rewardMessages = $rewardThresholdContainer.querySelectorAll(\\\".target-indicator-reward\\\");\\n            if ($rewardMessages.length > 0) {\\n              isRewardMessages = true;\\n              if ($rewardMessages.length > 1) {\\n                multipleRewardMessages = true;\\n              }\\n            }\\n            $rewardThresholdSegments.forEach(function ($rewardThresholdSegment) {\\n              //Get the number related to this milestone\\n              var targetNumber = $rewardThresholdSegment.dataset.targetNumber;\\n\\n              //Set out variables\\n              var $progressBar = $rewardThresholdSegment.querySelector(\\\".progress-measurement\\\");\\n              var $incompleteIndicator = $rewardThresholdSegment.querySelector(\\\".target-indicator-incomplete\\\");\\n              var $completeIndicator = $rewardThresholdSegment.querySelector(\\\".target-indicator-complete\\\");\\n              var $rewardMessage = $rewardThresholdSegment.querySelector(\\\".target-indicator-reward\\\");\\n              if (targetNumber && $progressBar && $incompleteIndicator && $completeIndicator) {\\n                //Handle Reward Messages\\n                if (isRewardMessages) {\\n                  if ($rewardMessage) {\\n                    if (totalItems >= targetNumber) {\\n                      $rewardMessage.classList.add(\\\"complete\\\");\\n                    } else {\\n                      $rewardMessage.classList.remove(\\\"complete\\\");\\n                    }\\n                  }\\n                }\\n\\n                //Have we already achieved this?\\n                if (totalItems >= targetNumber) {\\n                  //Mark as completed \\n                  $progressBar.style.width = \\\"100%\\\";\\n                  $incompleteIndicator.classList.add(\\\"hidden\\\");\\n                  $completeIndicator.classList.remove(\\\"hidden\\\");\\n                } else {\\n                  //Have we only just achieved the previous number OR not done anything at all yet?\\n                  if (totalItems == previousMilestoneNumber) {\\n                    //complete reset of this item\\n                    $progressBar.style.width = \\\"0%\\\";\\n                    $incompleteIndicator.classList.remove(\\\"hidden\\\");\\n                    $completeIndicator.classList.add(\\\"hidden\\\");\\n                  } else {\\n                    if (targetNumber - previousMilestoneNumber > 1) {\\n                      //The next milestone comes at 7 items, and I have 5 in my bundle. I'm a third of the way to that - calculate how far we are through and update the progress bar accordingly\\n\\n                      var totalSteps = targetNumber - previousMilestoneNumber;\\n                      var achievedSteps = totalItems - previousMilestoneNumber;\\n                      var progressPercentage = achievedSteps / totalSteps * 100;\\n                      $progressBar.style.width = \\\"\\\".concat(progressPercentage, \\\"%\\\");\\n                      $incompleteIndicator.classList.remove(\\\"hidden\\\");\\n                      $completeIndicator.classList.add(\\\"hidden\\\");\\n                    } else {\\n                      //There's only one jump to make here, do nothing\\n                    }\\n                  }\\n                }\\n                previousMilestoneNumber = targetNumber;\\n              } else {\\n                console.log(\\\"Not all of the required variables could be found. Unable to progress through rewards threshold update\\\");\\n              }\\n            });\\n\\n            //Work out which reward to show if there's more than one \\n            if (multipleRewardMessages) {\\n              var completeRewards = [];\\n              var incompleteRewards = [];\\n              $rewardMessages.forEach(function ($rewardMessage) {\\n                if ($rewardMessage.classList.contains(\\\"complete\\\")) {\\n                  completeRewards.push($rewardMessage);\\n                } else {\\n                  incompleteRewards.push($rewardMessage);\\n                }\\n              });\\n              if (incompleteRewards.length === $rewardMessages.length) {\\n                //Hide all but the first\\n                incompleteRewards.forEach(function ($rewardText, index) {\\n                  if (index !== 0) {\\n                    $rewardText.classList.add(\\\"hidden\\\");\\n                  } else {\\n                    $rewardText.classList.remove(\\\"hidden\\\");\\n                  }\\n                });\\n              } else if (completeRewards.length === $rewardMessages.length) {\\n                //Hide all but the last\\n                completeRewards.forEach(function ($rewardText, index) {\\n                  if (index !== completeRewards.length - 1) {\\n                    $rewardText.classList.add(\\\"hidden\\\");\\n                  } else {\\n                    $rewardText.classList.remove(\\\"hidden\\\");\\n                  }\\n                });\\n              } else {\\n                //Hide all complete, show the first incomplete and hide the rest\\n                completeRewards.forEach(function ($rewardText) {\\n                  $rewardText.classList.add(\\\"hidden\\\");\\n                });\\n                incompleteRewards.forEach(function ($rewardText, index) {\\n                  if (index !== 0) {\\n                    $rewardText.classList.add(\\\"hidden\\\");\\n                  } else {\\n                    $rewardText.classList.remove(\\\"hidden\\\");\\n                  }\\n                });\\n              }\\n            }\\n          }\\n        });\\n      }\\n\\n      // Update product cards\\n      if ($bundleProductCards) {\\n        $bundleProductCards.forEach(function ($card) {\\n          // Get the product ID from the data attribute\\n          var id = $card.dataset.id;\\n          var $quantity = $card.querySelector('.product-quantity');\\n          var $controls = $card.querySelector(\\\".product-controls\\\");\\n          var $increase = $card.querySelector(\\\".product-quantity__increase\\\");\\n\\n          //If a maximum is in place, remove the \\\"Box full\\\" before we conduct any tests\\n          if ($controls) {\\n            $controls.classList.remove(\\\"box-full\\\");\\n          }\\n          if ($increase) {\\n            enableBtn($increase);\\n          }\\n\\n          // Check if the product is in the bundle\\n          if (window.bundle.items[id]) {\\n            // Assign data\\n            var currentItem = window.bundle.items[id];\\n\\n            //Find the mobile equivalents that we set up earlier\\n            var $mobileProductListEquivalent = $mobileProductList.querySelector(\\\".build-a-bundle__info-body-mobile-product-list-product[data-product-id=\\\\\\\"\\\".concat(id, \\\"\\\\\\\"]\\\"));\\n\\n            // Update the quantity displayed in the product card\\n            if ($quantity) {\\n              $quantity.innerText = currentItem.quantity;\\n              if ($mobileProductListEquivalent) {\\n                var $mobileProductListEquivalentQty = $mobileProductListEquivalent.querySelector(\\\".product-quantity-selector .product-quantity\\\");\\n                if ($mobileProductListEquivalentQty) {\\n                  $mobileProductListEquivalentQty.innerText = currentItem.quantity;\\n                }\\n              }\\n            }\\n\\n            // Update controls styling\\n            if ($controls) {\\n              $controls.classList.add(\\\"active\\\");\\n            }\\n\\n            // check if customer has maximum amount of products currently available\\n            var $mobileProductListEquivalentIncrease = $mobileProductListEquivalent.querySelector(\\\".product-quantity-selector .product-quantity__increase\\\");\\n            if (currentItem.quantity == $card.dataset.inventory) {\\n              disableBtn($increase);\\n              if ($mobileProductListEquivalentIncrease) {\\n                disableBtn($mobileProductListEquivalentIncrease);\\n              }\\n            }\\n\\n            //Cater for maximum in the box being hit\\n            if (boxIsFull) {\\n              disableBtn($increase);\\n              if ($mobileProductListEquivalentIncrease) {\\n                disableBtn($mobileProductListEquivalentIncrease);\\n              }\\n            }\\n\\n            //Binding of Mobile Product List Controls here\\n            var $mobileProductListEquivalentDecrease = $mobileProductListEquivalent.querySelector(\\\".product-quantity-selector .product-quantity__decrease\\\");\\n            if ($mobileProductListEquivalentIncrease) {\\n              $mobileProductListEquivalentIncrease.addEventListener(\\\"click\\\", function (e) {\\n                e.preventDefault();\\n                updateBundle(id, 1, window.bundle.items[id].title, bundle.items[id].price, window.bundle.items[id].priceString, window.bundle.items[id].comparePrice, window.bundle.items[id].comparePriceString, window.bundle.items[id].image);\\n              });\\n            }\\n            if ($mobileProductListEquivalentDecrease) {\\n              $mobileProductListEquivalentDecrease.addEventListener(\\\"click\\\", function (e) {\\n                e.preventDefault();\\n                updateBundle(id, -1, window.bundle.items[id].title, window.bundle.items[id].price, window.bundle.items[id].priceString, window.bundle.items[id].comparePrice, window.bundle.items[id].comparePriceString, window.bundle.items[id].image);\\n              });\\n            }\\n          } else {\\n            // Update the quantity displayed in the product card\\n            if ($quantity) {\\n              $quantity.innerText = '0';\\n            }\\n\\n            // Update controls styling\\n            if ($controls) {\\n              $controls.classList.remove(\\\"active\\\");\\n            }\\n\\n            //If we're at max, disable this and replace with \\\"Box full\\\"\\n            if (boxIsFull && $controls) {\\n              $controls.classList.remove(\\\"active\\\");\\n              $controls.classList.add(\\\"box-full\\\");\\n            }\\n          }\\n\\n          //Handle Pop up controls\\n          var $popupAtcControls = $card.querySelector(\\\".product-popup-contents .bab-product-popup-contents__atb-container\\\");\\n          if ($popupAtcControls) {\\n            //Find the values we need so that we can clean up\\n            var originalPrice = $popupAtcControls.dataset.singlePrice;\\n            var subscriptionPrice = $popupAtcControls.dataset.singleSubscriptionPrice;\\n            var $qtyDecrease = $popupAtcControls.querySelector(\\\".product-quantity-selector .product-quantity__decrease\\\");\\n            var $qtyIncrease = $popupAtcControls.querySelector(\\\".product-quantity-selector .product-quantity__increase\\\");\\n            var $qtyValue = $popupAtcControls.querySelector(\\\".product-quantity-container .product-quantity\\\");\\n            var $addToBundleButtons = $popupAtcControls.querySelectorAll(\\\".bab-product-add-to-bundle\\\");\\n\\n            //Out of Stock products don't have some of these so don't throw any errors\\n            if (originalPrice && $qtyDecrease && $qtyIncrease && $qtyValue && $addToBundleButtons) {\\n              //Reset back to \\\"1\\\"\\n              $qtyValue.innerText = \\\"1\\\";\\n              $addToBundleButtons.forEach(function ($addToBundleButton) {\\n                updateAtbButtonPricing($addToBundleButton, originalPrice, subscriptionPrice, 1);\\n\\n                //Re-enable All Add to bundle buttons before conduct further tests\\n                enableBtn($addToBundleButton);\\n              });\\n\\n              //Re-enable the Increase and decrease buttons before we conduct further tests\\n              enableBtn($qtyIncrease);\\n              enableBtn($qtyDecrease);\\n              if (boxIsFull) {\\n                //box is full - Disable All Add to Bundle and +/- buttons\\n                disableAllPopUpBtns($qtyDecrease, $qtyIncrease, $addToBundleButtons);\\n              } else {\\n                if (window.bundle.items[id]) {\\n                  var availableStock = $card.dataset.inventory;\\n                  if (availableStock) {\\n                    //If max inventory is already in the bundle, disable everything\\n                    if (bundle.items[id].quantity == availableStock) {\\n                      disableAllPopUpBtns($qtyDecrease, $qtyIncrease, $addToBundleButtons);\\n                    }\\n\\n                    //If max inventory -1 is in the bundle, disable the add button OR inventory is 1\\n                    if (window.bundle.items[id].quantity < availableStock) {\\n                      if (availableStock - window.bundle.items[id].quantity == 1) {\\n                        disableBtn($qtyIncrease);\\n                      }\\n                    }\\n                  }\\n                }\\n\\n                //If Max amount allowed is set, and we've got one space remaining, disable the add button                                \\n                if (window.maxItemsAllowed) {\\n                  if (window.maxItemsAllowed - totalItems == 1) {\\n                    disableBtn($qtyIncrease);\\n                  }\\n                }\\n              }\\n            }\\n          }\\n        });\\n      } else {\\n        console.log('log: product cards not found');\\n      }\\n\\n      //Progress Notifications - The potential call types are: \\\"preload\\\", \\\"clear\\\", \\\"update\\\",\\\"purchase_type\\\"\\n      handleProgressNotifications(type);\\n    }; // Function to remove existing bundle from cart\\n    var prepAndAddBundleToCart = /*#__PURE__*/function () {\\n      var _ref9 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {\\n        var $protectionOverlay, currentBundleURL, lineItems, currentBundleType, staticBoxVariantId, properties, staticBoxLineItem, dynamicBundleData, activePurchaseType, $activePurchaseType;\\n        return _regeneratorRuntime().wrap(function _callee3$(_context3) {\\n          while (1) switch (_context3.prev = _context3.next) {\\n            case 0:\\n              //Disable the Add to Cart buttons and Change the text content\\n              $addToCarts.forEach(function ($atc) {\\n                disableAtcChangeMsg($atc);\\n              });\\n\\n              //Show the overlay that prevents customers from clicking the UI\\n              $protectionOverlay = $buildABundleTemplate.querySelector(\\\".build-a-bundle__product-card__ui-blocker\\\");\\n              if ($protectionOverlay) {\\n                showBlockerOverlay($protectionOverlay, $bundleInfo);\\n              }\\n              currentBundleURL = $buildABundleTemplate.dataset.url;\\n              lineItems = [];\\n              if (!($buildABundleTemplate.dataset[\\\"static\\\"] === \\\"true\\\")) {\\n                _context3.next = 15;\\n                break;\\n              }\\n              currentBundleType = 'static';\\n              staticBoxVariantId = $buildABundleTemplate.dataset.variantId; // Required by Skio\\n              properties = {\\n                _isClassicBoxV2: true,\\n                _bundle_id: bundle.bundleId,\\n                _bundleType: currentBundleType,\\n                _bundleUrl: currentBundleURL\\n              };\\n              Object.entries(bundle.items).forEach(function (_ref10) {\\n                var _ref11 = _slicedToArray(_ref10, 2),\\n                  productId = _ref11[0],\\n                  item = _ref11[1];\\n                // Add product title and quantity\\n                properties[item.title] = item.quantity;\\n\\n                // Add Skio variant ID\\n                properties[\\\"_pvgid://shopify/ProductVariant/\\\".concat(productId)] = item.quantity;\\n              });\\n              staticBoxLineItem = {\\n                id: staticBoxVariantId,\\n                quantity: 1,\\n                properties: properties\\n              };\\n              if (activePlan) {\\n                staticBoxLineItem.selling_plan = activePlan;\\n              }\\n              lineItems.push(staticBoxLineItem);\\n              _context3.next = 24;\\n              break;\\n            case 15:\\n              if (!($buildABundleTemplate.dataset.dynamic === \\\"true\\\")) {\\n                _context3.next = 24;\\n                break;\\n              }\\n              currentBundleType = 'dynamic';\\n              _context3.next = 19;\\n              return getDynamicBundle();\\n            case 19:\\n              dynamicBundleData = _context3.sent;\\n              activePurchaseType = \\\"onetime-purchase\\\";\\n              $activePurchaseType = $buildABundleTemplate.querySelector(\\\".build-a-bundle__purchase-type.active\\\");\\n              if ($activePurchaseType) {\\n                activePurchaseType = $activePurchaseType.dataset.type;\\n              }\\n\\n              // If this is a subscription order, grab the selling plan id from the template data \\n              Object.entries(window.bundle.items).forEach(function (_ref12) {\\n                var _ref13 = _slicedToArray(_ref12, 2),\\n                  productId = _ref13[0],\\n                  item = _ref13[1];\\n                var itemData = {\\n                  id: productId,\\n                  quantity: item.quantity,\\n                  properties: {\\n                    _bundle_id: bundle.bundleId,\\n                    _dynamicBoxIndex: bundle.bundleId,\\n                    _dynamicBoxId: dynamicBundleData.DynamicBox.boxId,\\n                    _bundleType: currentBundleType,\\n                    _bundleUrl: currentBundleURL\\n                  }\\n                };\\n                if (activePurchaseType == \\\"subscription\\\") {\\n                  if ($buildABundleTemplate.dataset.sellingPlanId) {\\n                    itemData.selling_plan = $buildABundleTemplate.dataset.sellingPlanId;\\n                  } else {\\n                    console.log(\\\"Purchase is a subscription purchase but no selling plan id could be found\\\");\\n                  }\\n                }\\n                lineItems.push(itemData);\\n              });\\n            case 24:\\n              addBundleToCart(lineItems, window.bundle.bundleId, $protectionOverlay);\\n            case 25:\\n            case \\\"end\\\":\\n              return _context3.stop();\\n          }\\n        }, _callee3);\\n      }));\\n      return function prepAndAddBundleToCart() {\\n        return _ref9.apply(this, arguments);\\n      };\\n    }(); // Function to preload the bundle, if one already exists in local storage\\n    var preloadBundle = function preloadBundle() {\\n      window.editMode = false;\\n      var queryString = window.location.search;\\n      var urlParams = new URLSearchParams(queryString);\\n      if (urlParams.get('edit')) {\\n        window.editMode = true;\\n      }\\n      if (window.editMode) {\\n        //Thre should be a bundle in storage with a flag set against it indicating it is an Edit bundle\\n        bundle = \\\"\\\";\\n        var _jsonBundle = localStorage.getItem(\\\"bundle\\\");\\n        var _processEdit = false;\\n        if (_jsonBundle) {\\n          bundle = JSON.parse(_jsonBundle);\\n          if (bundle.editing_bundle == true && Object.keys(bundle).length > 0) {\\n            if (bundle.bundleId == urlParams.get('edit')) {\\n              //It's a match! This is our bundle\\n              _processEdit = true;\\n            }\\n          }\\n        }\\n        if (_processEdit) {\\n          updateBundleUI(bundle, \\\"edit\\\");\\n        } else {\\n          alert(\\\"An error occurred, unable to edit this bundle\\\");\\n          window.location.href = \\\"/cart\\\";\\n        }\\n      } else {\\n        var _bundle = JSON.parse(localStorage.getItem(\\\"bundle\\\")) || {};\\n        if (Object.keys(_bundle).length > 0) {\\n          if (_bundle.editing_bundle == true) {\\n            //A user abandoned their Edit bundle process without saving, clear this from local storage\\n            localStorage.removeItem(\\\"bundle\\\");\\n\\n            //Did the user abandon a bundle build before they clicked the edit button?\\n            var _storedBundle = localStorage.getItem('stored_bundle');\\n            if (_storedBundle) {\\n              _bundle = JSON.parse(_storedBundle);\\n\\n              //This shouldn't be possible, but ensure it's not an edit mode bundle\\n              if (_bundle.editing_bundle == true) {\\n                //Reset, we don't want that\\n                _bundle = {};\\n              } else {\\n                console.log(\\\"attempting to fix bundle storage\\\");\\n\\n                //This is the user's unfinished bundle \\n                localStorage.removeItem(\\\"stored_bundle\\\");\\n\\n                //Save in it's correct place\\n                localStorage.setItem(\\\"bundle\\\", JSON.stringify(_bundle));\\n                _bundle = JSON.parse(localStorage.getItem(\\\"bundle\\\"));\\n\\n                //Force a reload to allow local storage to clean up and stop getting things mixed up\\n                window.location.reload();\\n              }\\n            } else {\\n              //We're not in edit mode, we should remove this\\n              localStorage.removeItem(\\\"bundle\\\");\\n              _bundle = {};\\n            }\\n          }\\n        }\\n\\n        // If there is a bundle saved - preload it\\n        if (Object.keys(_bundle).length > 0) {\\n          updateBundleUI(_bundle, \\\"preload\\\");\\n        } else {\\n          handleProgressNotifications(\\\"start\\\");\\n        }\\n      }\\n    }; // Function to clear bundle\\n    var clearBundle = function clearBundle() {\\n      if (confirm(\\\"Are you sure you want to clear your bundle?\\\")) {\\n        // Clear local storage\\n        localStorage.removeItem('bundle');\\n\\n        // Reset the global bundle object\\n        bundle = {\\n          bundleId: generateUniqueBundleId(),\\n          items: {}\\n        };\\n\\n        // Save the cleared bundle to local storage\\n        localStorage.setItem('bundle', JSON.stringify(bundle));\\n\\n        // Update UI\\n        updateBundleUI(bundle, \\\"clear\\\");\\n      }\\n    }; // Get SKIO dynamic bundle data\\n    var getDynamicBundle = /*#__PURE__*/function () {\\n      var _ref14 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {\\n        var response, data;\\n        return _regeneratorRuntime().wrap(function _callee4$(_context4) {\\n          while (1) switch (_context4.prev = _context4.next) {\\n            case 0:\\n              _context4.next = 2;\\n              return fetch('https://api.skio.com/storefront-http/get-dynamic-box', {\\n                method: 'POST',\\n                headers: {\\n                  \\\"Content-Type\\\": \\\"application/json\\\"\\n                },\\n                body: JSON.stringify({\\n                  \\\"productPlatformId\\\": \\\"15345685561727\\\"\\n                })\\n              });\\n            case 2:\\n              response = _context4.sent;\\n              _context4.next = 5;\\n              return response.json();\\n            case 5:\\n              data = _context4.sent;\\n              return _context4.abrupt(\\\"return\\\", data);\\n            case 7:\\n            case \\\"end\\\":\\n              return _context4.stop();\\n          }\\n        }, _callee4);\\n      }));\\n      return function getDynamicBundle() {\\n        return _ref14.apply(this, arguments);\\n      };\\n    }();\\n    var productCompatibilityCheck = /*#__PURE__*/function () {\\n      var _ref15 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5($bundleProductCards) {\\n        var dynamicBoxData, availableHandles;\\n        return _regeneratorRuntime().wrap(function _callee5$(_context5) {\\n          while (1) switch (_context5.prev = _context5.next) {\\n            case 0:\\n              _context5.next = 2;\\n              return getDynamicBundle();\\n            case 2:\\n              dynamicBoxData = _context5.sent;\\n              if (dynamicBoxData.ok) {\\n                //Loop through our Product Cards and ensure that the product handle exists in the response from Skio\\n                availableHandles = new Set(dynamicBoxData.DynamicBox.selectableProductVariants.map(function (item) {\\n                  return item.productHandle;\\n                })); //Loop through our Product Cards and ensure that the product handle exists in the response from Skio\\n                $bundleProductCards.forEach(function ($bundleProductCard) {\\n                  var productHandleExists = availableHandles.has($bundleProductCard.dataset.handle);\\n                  if (!productHandleExists) {\\n                    markProductAsUnavailable($bundleProductCard);\\n                  }\\n                });\\n              }\\n            case 4:\\n            case \\\"end\\\":\\n              return _context5.stop();\\n          }\\n        }, _callee5);\\n      }));\\n      return function productCompatibilityCheck(_x6) {\\n        return _ref15.apply(this, arguments);\\n      };\\n    }(); // Call function to check if content needs to be preloaded\\n    //preloadBundle();\\n    //Set up our Instruction message\\n    var tierContentArr = setUpTierContent($buildABundleTemplate);\\n    var activePlan = document.querySelector(\\\".build-a-bundle__selling-plan.active\\\");\\n    if (activePlan) {\\n      activePlan = activePlan.dataset.plan;\\n    }\\n\\n    //We're not using this, this is irrelevant\\n    var isDynamicBundle = false;\\n    var isStaticBundle = false;\\n    if ($buildABundleTemplate.dataset[\\\"static\\\"] == 'true') {\\n      isStaticBundle = true;\\n    }\\n    if ($buildABundleTemplate.dataset.dynamic == 'true') {\\n      isDynamicBundle = true;\\n    }\\n\\n    //------------------------------- purchase-type controls --------------------------------//\\n\\n    var $purchaseTypesContainer = $buildABundleTemplate.querySelector(\\\".build-a-bundle__purchase-types\\\");\\n    if ($purchaseTypesContainer) {\\n      var $purchaseTypes = $purchaseTypesContainer.querySelectorAll(\\\".build-a-bundle__purchase-type\\\");\\n      var $mobilePurchaseTypeStringContainer = $buildABundleTemplate.querySelector(\\\".build-a-bundle__info-header-mobile-purchase-type-string\\\");\\n      var $otpString = $mobilePurchaseTypeStringContainer === null || $mobilePurchaseTypeStringContainer === void 0 ? void 0 : $mobilePurchaseTypeStringContainer.querySelector(\\\".purchase-type-string.purchase-type-string-otp\\\");\\n      var $subscriptionString = $mobilePurchaseTypeStringContainer === null || $mobilePurchaseTypeStringContainer === void 0 ? void 0 : $mobilePurchaseTypeStringContainer.querySelector(\\\".purchase-type-string.purchase-type-string-subscription\\\");\\n      if ($purchaseTypes.length > 0) {\\n        $purchaseTypes.forEach(function ($purchaseType) {\\n          $purchaseType.addEventListener(\\\"click\\\", function (e) {\\n            if (!$purchaseType.classList.contains(\\\"active\\\")) {\\n              $purchaseTypes.forEach(function ($pt) {\\n                if ($pt == $purchaseType) {\\n                  $pt.classList.add(\\\"active\\\");\\n                } else {\\n                  $pt.classList.remove(\\\"active\\\");\\n                }\\n              });\\n\\n              //Update the string that's in the mobile version of the bundle info container\\n              if (e.target.dataset.type) {\\n                if ($otpString && $subscriptionString) {\\n                  if (e.target.dataset.type == \\\"subscription\\\") {\\n                    $otpString.classList.add(\\\"hidden\\\");\\n                    $subscriptionString.classList.remove(\\\"hidden\\\");\\n                  } else {\\n                    $otpString.classList.remove(\\\"hidden\\\");\\n                    $subscriptionString.classList.add(\\\"hidden\\\");\\n                  }\\n                }\\n              }\\n\\n              //go through the bundle cards updating the price info\\n              if ($bundleProductCards.length > 0) {\\n                $bundleProductCards.forEach(function ($bundleProductCard) {\\n                  var $subPrice = $bundleProductCard.querySelector(\\\".subscription-price-info\\\");\\n                  var $otpPrice = $bundleProductCard.querySelector(\\\".otp-price-info\\\");\\n                  if ($subPrice && $otpPrice) {\\n                    if ($purchaseType.dataset.type == \\\"subscription\\\") {\\n                      $subPrice.classList.remove(\\\"hidden\\\");\\n                      $otpPrice.classList.add(\\\"hidden\\\");\\n                    } else {\\n                      $subPrice.classList.add(\\\"hidden\\\");\\n                      $otpPrice.classList.remove(\\\"hidden\\\");\\n                    }\\n                  }\\n\\n                  //Find and toggle the correct buttons for Desktop\\n                  var $desktopSubsBtn = $bundleProductCard.querySelector(\\\".sub-btn\\\");\\n                  var $desktopOtpBtn = $bundleProductCard.querySelector(\\\".otp-btn\\\");\\n                  if ($desktopSubsBtn && $desktopOtpBtn) {\\n                    if ($purchaseType.dataset.type == \\\"subscription\\\") {\\n                      $desktopSubsBtn.classList.remove(\\\"desktop:hidden\\\");\\n                      $desktopSubsBtn.classList.add(\\\"desktop:flex\\\");\\n                      $desktopOtpBtn.classList.add(\\\"desktop:hidden\\\");\\n                      $desktopOtpBtn.classList.remove(\\\"desktop:flex\\\");\\n                    } else {\\n                      $desktopSubsBtn.classList.add(\\\"desktop:hidden\\\");\\n                      $desktopSubsBtn.classList.remove(\\\"desktop:flex\\\");\\n                      $desktopOtpBtn.classList.remove(\\\"desktop:hidden\\\");\\n                      $desktopOtpBtn.classList.add(\\\"desktop:flex\\\");\\n                    }\\n                  }\\n\\n                  //Toggle the per meal cost based on active purchase type                                \\n                  var $subsMealCost = $bundleProductCard.querySelector(\\\".sub-meal-cost\\\");\\n                  var $otpMealCost = $bundleProductCard.querySelector(\\\".otp-meal-cost\\\");\\n                  if ($subsMealCost && $otpMealCost) {\\n                    if ($purchaseType.dataset.type == \\\"subscription\\\") {\\n                      $subsMealCost.classList.remove(\\\"hidden\\\");\\n                      $otpMealCost.classList.add(\\\"hidden\\\");\\n                    } else {\\n                      $subsMealCost.classList.add(\\\"hidden\\\");\\n                      $otpMealCost.classList.remove(\\\"hidden\\\");\\n                    }\\n                  }\\n                });\\n              }\\n            }\\n            updateBundleUI(\\\"purchase_type\\\");\\n          });\\n        });\\n      }\\n    }\\n\\n    //--------------------------------- Collection Sticky Nav ---------------------------------//\\n    // set elements\\n    var $nav = $buildABundleTemplate.querySelector(\\\".build-a-bundle__sticky-nav\\\");\\n    var $stickyNavMobile = $buildABundleTemplate.querySelector(\\\".build-a-bundle__sticky-nav-mobile\\\");\\n    var $collectionContainer = $buildABundleTemplate.querySelector(\\\".build-a-bundle__collection-container\\\");\\n    if ($nav && $collectionContainer && $stickyNavMobile) {\\n      var $navTriggers = $buildABundleTemplate.querySelectorAll(\\\".build-a-bundle__sticky-nav-trigger\\\");\\n      var $collections = $collectionContainer.querySelectorAll(\\\".build-a-bundle__collection\\\");\\n\\n      //Get these two early so that they're in scope of the functions that need to toggle them\\n      var $mobileCategoriesButton = $stickyNavMobile.querySelector(\\\"#mobile-categories-button\\\");\\n      var $filtersButtonMob = $stickyNavMobile.querySelector(\\\".build-a-bundle__sticky-nav-filters\\\");\\n      if ($navTriggers.length > 0 && $collections.length > 0) {\\n        // Bind the Categories Dropdown / Pop up on mobile\\n        var $mobileCategoriesPopup = $stickyNavMobile.querySelector(\\\".mobile-categories-dropdown\\\");\\n        var $mobileCategoriesPopupBg = $buildABundleTemplate.querySelector(\\\".build-a-bundle__mobile-categories__popup-background\\\");\\n        if ($mobileCategoriesButton && $mobileCategoriesPopup && $mobileCategoriesPopupBg) {\\n          //Clicking the Categories button opens the pop up\\n          $mobileCategoriesButton.addEventListener(\\\"click\\\", function (e) {\\n            e.preventDefault();\\n            showCategoryMobileMenu($mobileCategoriesPopup, $mobileCategoriesPopupBg, $bundleInfo, header, $filtersButtonMob);\\n          });\\n\\n          //Clicking the background or the X button closes the Pop up\\n          $mobileCategoriesPopupBg.addEventListener(\\\"click\\\", function (e) {\\n            e.preventDefault();\\n            hideCategoryMobileMenu($mobileCategoriesPopup, $mobileCategoriesPopupBg, $bundleInfo, header, $filtersButtonMob);\\n          });\\n          var $mobileCategoriesPopupClose = $mobileCategoriesPopup.querySelector(\\\".mobile-categories-dropdown-close\\\");\\n          if ($mobileCategoriesPopupClose) {\\n            $mobileCategoriesPopupClose.addEventListener(\\\"click\\\", function (e) {\\n              hideCategoryMobileMenu($mobileCategoriesPopup, $mobileCategoriesPopupBg, $bundleInfo, header, $filtersButtonMob);\\n            });\\n          }\\n        }\\n\\n        //Handle Clicking on the Categories buttons for both desktop and Mobile\\n        $navTriggers.forEach(function ($navTrigger) {\\n          //On click, find the collection and scroll into view\\n          $navTrigger.addEventListener(\\\"click\\\", function (e) {\\n            if ($navTrigger.classList.contains(\\\"mobile-popup-trigger\\\")) {\\n              if ($mobileCategoriesButton && $mobileCategoriesPopup && $mobileCategoriesPopupBg) {\\n                //scroll to target and close the popup menu\\n                scrollToTargetCollectionAndCloseCategories(e, $collections, $stickyNavMobile, header, $mobileCategoriesPopup, $mobileCategoriesPopupBg, $bundleInfo, $filtersButtonMob);\\n              } else {\\n                //If for whatever reason we can't close the pop up, still scroll to target\\n                scrollToTargetCollection(e, $collections, $stickyNavMobile, header);\\n              }\\n            } else {\\n              //Scroll to target\\n              scrollToTargetCollection(e, $collections, $nav, header);\\n            }\\n          });\\n        });\\n      }\\n\\n      // Handle Filters - Mobile and Desktop Versions - opening, closing, applying, behaviour\\n\\n      //Mobile Version\\n      var $filtersDropDownMob = $stickyNavMobile.querySelector(\\\".filter-options-dropdown\\\");\\n\\n      //Desktop Version\\n      var $filtersButtonDesk = $nav.querySelector(\\\".build-a-bundle__sticky-nav-filters\\\");\\n      var $filtersDropDownDesk = $nav.querySelector(\\\".filter-options-dropdown\\\");\\n\\n      //Shared\\n      var $filtersPopupBg = $buildABundleTemplate.querySelector(\\\".build-a-bundle__filter__popup-background\\\");\\n\\n      //These options may not be present as the ability to toggle filters on or off exists in the customiser\\n      if ($filtersButtonMob && $filtersDropDownMob && $filtersPopupBg && $filtersButtonDesk && $filtersDropDownDesk) {\\n        // Initialize dishes count on load\\n        var $initialDishes = $collectionContainer.querySelectorAll('.build-a-bundle__product-card:not(.hidden)').length;\\n        if ($initialDishes > 0) {\\n          document.querySelectorAll('.bab-matching-dishes-count').forEach(function (el) {\\n            el.textContent = $initialDishes;\\n          });\\n          document.querySelectorAll('.bab-matching-dishes-text').forEach(function (el) {\\n            el.textContent = $initialDishes === 1 ? 'Dish in filters' : 'Dishes in filters';\\n          });\\n        }\\n\\n        //Bind Opens\\n        $filtersButtonMob.addEventListener(\\\"click\\\", function (e) {\\n          e.preventDefault();\\n          showFilterDropdown($filtersDropDownMob, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton);\\n        });\\n        $filtersButtonDesk.addEventListener(\\\"click\\\", function (e) {\\n          e.preventDefault();\\n          showFilterDropdown($filtersDropDownDesk, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton);\\n        });\\n\\n        //Bind Closes\\n        $filtersPopupBg.addEventListener(\\\"click\\\", function (e) {\\n          e.preventDefault();\\n          hideFilterDropdown($filtersDropDownMob, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton);\\n          hideFilterDropdown($filtersDropDownDesk, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton);\\n        });\\n        var $filtersDropDownCloseDesk = $filtersDropDownDesk.querySelectorAll(\\\".mobile-filters-dropdown-close\\\");\\n        if ($filtersDropDownCloseDesk.length > 0) {\\n          $filtersDropDownCloseDesk.forEach(function ($closeBtn) {\\n            $closeBtn.addEventListener(\\\"click\\\", function (e) {\\n              e.preventDefault();\\n              hideFilterDropdown($filtersDropDownDesk, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton);\\n            });\\n          });\\n        }\\n        var $filtersDropDownCloseMob = $filtersDropDownMob.querySelectorAll(\\\".mobile-filters-dropdown-close\\\");\\n        if ($filtersDropDownCloseMob.length > 0) {\\n          $filtersDropDownCloseMob.forEach(function ($closeBtn) {\\n            $closeBtn.addEventListener(\\\"click\\\", function (e) {\\n              e.preventDefault();\\n              hideFilterDropdown($filtersDropDownMob, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton);\\n            });\\n          });\\n        }\\n\\n        // Handle Filter Options\\n        var $filterOptionsDesk = $filtersDropDownDesk.querySelectorAll(\\\".filter-options .filter-option\\\");\\n        if ($filterOptionsDesk.length > 0) {\\n          $filterOptionsDesk.forEach(function ($filterOption) {\\n            $filterOption.addEventListener(\\\"click\\\", function (e) {\\n              $filterOption.classList.toggle(\\\"active\\\");\\n              // Live filter update on click (menu stays open)\\n              filterCollectionResults($filterOptionsDesk, $collections, $filtersDropDownDesk, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton, false);\\n              syncFilterBadgeAndPills($filtersDropDownDesk, $filterOptionsDesk, $collections, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton);\\n            });\\n          });\\n        }\\n        var $filterOptionsMob = $filtersDropDownMob.querySelectorAll(\\\".filter-options .filter-option\\\");\\n        if ($filterOptionsMob.length > 0) {\\n          $filterOptionsMob.forEach(function ($filterOption) {\\n            $filterOption.addEventListener(\\\"click\\\", function (e) {\\n              $filterOption.classList.toggle(\\\"active\\\");\\n              // Live filter update on click (menu stays open)\\n              filterCollectionResults($filterOptionsMob, $collections, $filtersDropDownMob, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton, false);\\n              syncFilterBadgeAndPills($filtersDropDownMob, $filterOptionsMob, $collections, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton);\\n            });\\n          });\\n        }\\n\\n        // Sync external badge/pills and re-filter products when the \\\"Reset\\\" button inside the dropdown is clicked\\n        var $clearAllBtnsMob = $filtersDropDownMob.querySelectorAll('.filter-options-reset');\\n        $clearAllBtnsMob.forEach(function (btn) {\\n          btn.addEventListener('click', function () {\\n            $filterOptionsMob.forEach(function (opt) {\\n              opt.classList.remove('active');\\n            });\\n            setTimeout(function () {\\n              filterCollectionResults($filterOptionsMob, $collections, $filtersDropDownMob, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton, false);\\n              syncFilterBadgeAndPills($filtersDropDownMob, $filterOptionsMob, $collections, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton);\\n            }, 20);\\n          });\\n        });\\n        var $clearAllBtnsDesk = $filtersDropDownDesk.querySelectorAll('.filter-options-reset');\\n        $clearAllBtnsDesk.forEach(function (btn) {\\n          btn.addEventListener('click', function () {\\n            $filterOptionsDesk.forEach(function (opt) {\\n              opt.classList.remove('active');\\n            });\\n            setTimeout(function () {\\n              filterCollectionResults($filterOptionsDesk, $collections, $filtersDropDownDesk, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton, false);\\n              syncFilterBadgeAndPills($filtersDropDownDesk, $filterOptionsDesk, $collections, $filtersPopupBg, $bundleInfo, header, $mobileCategoriesButton);\\n            }, 20);\\n          });\\n        });\\n      }\\n\\n      //When stickyNavMobile is stuck to the top, it changes it's background colour and gets a new border added.\\n      var stickyNavMobileOffset = $stickyNavMobile.offsetTop;\\n      $stickyNavMobile.addEventListener;\\n      window.addEventListener(\\\"scroll\\\", function () {\\n        if (window.scrollY > stickyNavMobileOffset) {\\n          $stickyNavMobile.style.backgroundColor = \\\"white\\\";\\n          $stickyNavMobile.classList.add(\\\"border-b\\\", \\\"border-primary-border\\\");\\n        } else {\\n          $stickyNavMobile.style.backgroundColor = \\\"\\\";\\n          $stickyNavMobile.classList.remove(\\\"border-b\\\", \\\"border-primary-border\\\");\\n        }\\n      });\\n    } else {\\n      console.log('log: nav not found');\\n    }\\n\\n    //----------------------------------- Popup Controls ------------------------------------//\\n\\n    // set elements\\n    var $productPopupContainer = document.querySelector(\\\".build-a-bundle__product-card__popup-container\\\");\\n    if ($productPopupContainer) {\\n      //Handle Closing of the Pop Up\\n      var $productPopupBg = $productPopupContainer.querySelector(\\\".build-a-bundle__product-card__popup-bg\\\");\\n      var $productPopupClose = $productPopupContainer.querySelector(\\\".build-a-bundle__product-card__popup-content-close\\\");\\n      if ($productPopupBg) {\\n        $productPopupBg.addEventListener(\\\"click\\\", function (e) {\\n          e.preventDefault();\\n          closeProductPopUp($productPopupContainer, $buildABundleTemplate);\\n        });\\n      }\\n      if ($productPopupClose) {\\n        $productPopupClose.addEventListener(\\\"click\\\", function (e) {\\n          e.preventDefault();\\n          closeProductPopUp($productPopupContainer, $buildABundleTemplate);\\n        });\\n      }\\n    } else {\\n      console.log('log: popup not found');\\n    }\\n\\n    // Bind the various Content based Pop Ups and bind those\\n    var $howItWorksPopup = $buildABundleTemplate.querySelector(\\\".build-a-bundle__product-card__popup-how-it-works\\\");\\n    if ($howItWorksPopup) {\\n      var $howItWorksPopupTriggers = $buildABundleTemplate.querySelectorAll(\\\".how-it-works-popup-trigger\\\");\\n      if ($howItWorksPopupTriggers.length > 0) {\\n        $howItWorksPopupTriggers.forEach(function ($howItWorksPopupTrigger) {\\n          $howItWorksPopupTrigger.addEventListener(\\\"click\\\", function (e) {\\n            e.preventDefault();\\n            showContentPopup($howItWorksPopup, $bundleInfo);\\n          });\\n        });\\n\\n        //Bind Close Events\\n        var $howItWorksPopupBg = $howItWorksPopup.querySelector(\\\".build-a-bundle__product-card__popup-how-it-works-bg\\\");\\n        if ($howItWorksPopupBg) {\\n          $howItWorksPopupBg.addEventListener(\\\"click\\\", function (e) {\\n            e.preventDefault();\\n            hideContentPopup($howItWorksPopup, $bundleInfo);\\n          });\\n        }\\n        var $howItWorksPopupClose = $howItWorksPopup.querySelector(\\\".build-a-bundle__product-card__popup-how-it-works-close\\\");\\n        if ($howItWorksPopupClose) {\\n          $howItWorksPopupClose.addEventListener(\\\"click\\\", function (e) {\\n            e.preventDefault();\\n            hideContentPopup($howItWorksPopup, $bundleInfo);\\n          });\\n        }\\n      }\\n    }\\n    var $whatsWithBlocksPopup = $buildABundleTemplate.querySelector(\\\".build-a-bundle__product-card__popup-whats-with-blocks\\\");\\n    if ($whatsWithBlocksPopup) {\\n      var $whatsWithBlocksPopupTriggers = $buildABundleTemplate.querySelectorAll(\\\".whats-with-blocks-popup-trigger\\\");\\n      if ($whatsWithBlocksPopupTriggers.length > 0) {\\n        $whatsWithBlocksPopupTriggers.forEach(function ($whatsWithBlocksPopupTrigger) {\\n          $whatsWithBlocksPopupTrigger.addEventListener(\\\"click\\\", function (e) {\\n            e.preventDefault();\\n            showContentPopup($whatsWithBlocksPopup, $bundleInfo);\\n          });\\n        });\\n\\n        //Bind Close Events\\n        var $whatsWithBlocksPopupBg = $whatsWithBlocksPopup.querySelector(\\\".build-a-bundle__product-card__popup-whats-with-blocks-bg\\\");\\n        if ($whatsWithBlocksPopupBg) {\\n          $whatsWithBlocksPopupBg.addEventListener(\\\"click\\\", function (e) {\\n            e.preventDefault();\\n            hideContentPopup($whatsWithBlocksPopup, $bundleInfo);\\n          });\\n        }\\n        var $whatsWithBlocksPopupClose = $whatsWithBlocksPopup.querySelector(\\\".build-a-bundle__product-card__popup-whats-with-blocks-close\\\");\\n        if ($whatsWithBlocksPopupClose) {\\n          $whatsWithBlocksPopupClose.addEventListener(\\\"click\\\", function (e) {\\n            e.preventDefault();\\n            hideContentPopup($whatsWithBlocksPopup, $bundleInfo);\\n          });\\n        }\\n      }\\n    }\\n\\n    //Bind Closing of Taste Guarantee Popup, the opening is handled below by the quick links\\n    var $tasteGuaranteePopup = $buildABundleTemplate.querySelector(\\\".build-a-bundle__product-card__popup-taste-guarantee\\\");\\n    if ($tasteGuaranteePopup) {\\n      //Bind the triggers\\n      var $tasteGuaranteePopupTriggers = $buildABundleTemplate.querySelectorAll(\\\".taste-guarantee-bab-card-popup-trigger\\\");\\n      if ($tasteGuaranteePopupTriggers.length > 0) {\\n        $tasteGuaranteePopupTriggers.forEach(function ($tasteGuaranteePopupTrigger) {\\n          $tasteGuaranteePopupTrigger.addEventListener(\\\"click\\\", function (e) {\\n            e.preventDefault();\\n            showContentPopup($tasteGuaranteePopup, $bundleInfo);\\n          });\\n        });\\n      }\\n      var $tasteGuaranteePopupBg = $tasteGuaranteePopup.querySelector(\\\".build-a-bundle__product-card__popup-taste-guarantee-bg\\\");\\n      if ($tasteGuaranteePopupBg) {\\n        $tasteGuaranteePopupBg.addEventListener(\\\"click\\\", function (e) {\\n          e.preventDefault();\\n          hideContentPopup($tasteGuaranteePopup, $bundleInfo);\\n        });\\n      }\\n      var $tasteGuaranteePopupClose = $tasteGuaranteePopup.querySelector(\\\".build-a-bundle__product-card__popup-taste-guarantee-close\\\");\\n      if ($tasteGuaranteePopupClose) {\\n        $tasteGuaranteePopupClose.addEventListener(\\\"click\\\", function (e) {\\n          e.preventDefault();\\n          hideContentPopup($tasteGuaranteePopup, $bundleInfo);\\n        });\\n      }\\n    }\\n\\n    //If there are any quicklinks in the bundle aside - bind those here. These are optional and may not exist.\\n    var $bundleAsideQuickLinksContainer = $bundleInfo.querySelector(\\\".bundle-info-quicklinks\\\");\\n    if ($bundleAsideQuickLinksContainer) {\\n      var $bundleAsideQuickLinks = $bundleAsideQuickLinksContainer.querySelectorAll(\\\".bundle-info-quicklink\\\");\\n      if ($bundleAsideQuickLinks.length > 0) {\\n        $bundleAsideQuickLinks.forEach(function ($bundleAsideQuickLink) {\\n          var $infoIcon = $bundleAsideQuickLink.querySelector(\\\".info-icon\\\");\\n\\n          //Bind hover events\\n          $bundleAsideQuickLink.addEventListener(\\\"mouseenter\\\", function (e) {\\n            $bundleAsideQuickLinks.forEach(function ($quickLink) {\\n              if ($quickLink !== e.target) {\\n                $quickLink.classList.add(\\\"opacity-50\\\");\\n              } else {\\n                $infoIcon.classList.add(\\\"hovered\\\");\\n              }\\n            });\\n          });\\n          $bundleAsideQuickLink.addEventListener(\\\"mouseleave\\\", function (e) {\\n            $bundleAsideQuickLinks.forEach(function ($quickLink) {\\n              $quickLink.classList.remove(\\\"opacity-50\\\");\\n            });\\n            $infoIcon.classList.remove(\\\"hovered\\\");\\n          });\\n\\n          //Bind Click logic to find the right popup - we could remove this entirely \\n          /*\\r\\n          $bundleAsideQuickLink.addEventListener(\\\"click\\\",(e) => {\\r\\n              e.preventDefault();\\r\\n                if($bundleAsideQuickLink.dataset.popupTarget == \\\"taste-guarantee\\\") {\\r\\n                  if($tasteGuaranteePopup){\\r\\n                      showContentPopup($tasteGuaranteePopup,$bundleInfo);\\r\\n                  }\\r\\n              }else if($bundleAsideQuickLink.dataset.popupTarget == \\\"how-it-works\\\"){\\r\\n                  /* Already handled by a different class attached to it\\r\\n                      if($howItWorksPopup){\\r\\n                          showContentPopup($howItWorksPopup,$bundleInfo);\\r\\n                      }\\r\\n              }else{\\r\\n                  console.log(\\\"uncatered for data-popup-target on clicked quicklink. Element: \\\" + e.target);\\r\\n              }\\r\\n          });\\r\\n          */\\n        });\\n      }\\n    }\\n\\n    //------------------------------------ bundle cards ------------------------------------//\\n    // Add event listeners for triggering bundle updates\\n\\n    if ($bundleProductCards) {\\n      var _$productPopupContainer = document.querySelector(\\\".build-a-bundle__product-card__popup-container\\\");\\n      $bundleProductCards.forEach(function ($card) {\\n        // Set elements\\n        var $increase = $card.querySelector(\\\".product-quantity__increase\\\");\\n        var $decrease = $card.querySelector(\\\".product-quantity__decrease\\\");\\n        var $quantity = $card.querySelector(\\\".product-quantity\\\");\\n        var $controls = $card.querySelector(\\\".product-controls\\\");\\n        var $popupTrigger = $card.querySelector(\\\".build-a-bundle__product-card__popup-trigger\\\");\\n        var id = $card.dataset.id;\\n        var title = $card.dataset.title;\\n        var price = $card.dataset.price;\\n        var priceString = $card.dataset.priceString;\\n        var comparePrice = $card.dataset.comparePrice;\\n        var comparePriceString = $card.dataset.comparePriceString;\\n        var image = $card.dataset.image;\\n        var currentQuantity = \\\"\\\";\\n        if ($quantity) {\\n          currentQuantity = parseInt($quantity.innerText);\\n        }\\n\\n        // Increase\\n        if ($increase) {\\n          $increase.addEventListener(\\\"click\\\", function () {\\n            // Get current quantity\\n            currentQuantity = parseInt($quantity.innerText);\\n\\n            // Update the bundle\\n            updateBundle(id, 1, title, price, priceString, comparePrice, comparePriceString, image);\\n          });\\n        }\\n\\n        // Decrease\\n        if ($decrease) {\\n          $decrease.addEventListener(\\\"click\\\", function () {\\n            // Get current quantity\\n            currentQuantity = parseInt($quantity.innerText);\\n            updateBundle(id, -1, title, price, priceString, comparePrice, comparePriceString, image);\\n          });\\n        }\\n\\n        // Popup Trigger\\n        if ($popupTrigger && _$productPopupContainer) {\\n          // Open popup\\n          $popupTrigger.addEventListener(\\\"click\\\", function () {\\n            loadProductPopup($card, _$productPopupContainer);\\n          });\\n\\n          //Bind the Qty Options and Add to Bundle functionality\\n          var $popupContents = $card.querySelector(\\\".product-popup-contents\\\");\\n          if ($popupContents) {\\n            //Bind Judgme Review Stars to scroll to and open the reviews accordion\\n            var $judgemeBadge = $popupContents.querySelector(\\\".pop-up-judgeme-badge\\\");\\n            var $judgemeReviewAccordion = $popupContents.querySelector(\\\".product-accordion-container .review-accordion\\\");\\n            if ($judgemeBadge && $judgemeReviewAccordion) {\\n              var $judgemeReviewAccordionTrigger = $judgemeReviewAccordion.querySelector(\\\".product-accordion__trigger\\\");\\n              if ($judgemeReviewAccordionTrigger) {\\n                $judgemeBadge.addEventListener(\\\"click\\\", function (e) {\\n                  e.preventDefault();\\n\\n                  //Open it   \\n                  if (!$judgemeReviewAccordion.classList.contains(\\\"active\\\")) {\\n                    $judgemeReviewAccordionTrigger.click();\\n                  }\\n\\n                  //Scroll down to the Review Accordion\\n                  $judgemeReviewAccordion.scrollIntoView({\\n                    behavior: \\\"smooth\\\",\\n                    block: \\\"start\\\"\\n                  });\\n                });\\n              }\\n            }\\n            var $atbContainer = $popupContents.querySelector(\\\".bab-product-popup-contents__atb-container\\\");\\n            if ($atbContainer) {\\n              var originalPrice = $atbContainer.dataset.singlePrice;\\n              var originalSubscriptionPrice = $atbContainer.dataset.singleSubscriptionPrice;\\n              var $qtyDecrease = $popupContents.querySelector(\\\".product-quantity-selector .product-quantity__decrease\\\");\\n              var $qtyIncrease = $popupContents.querySelector(\\\".product-quantity-selector .product-quantity__increase\\\");\\n              var $qtyValue = $popupContents.querySelector(\\\".product-quantity-container .product-quantity\\\");\\n              var $addToBundleButtons = $popupContents.querySelectorAll(\\\".bab-product-add-to-bundle\\\");\\n              /*\\r\\n                  Rules:\\r\\n                    - When you've reached maximum items in the bundle, qty selector and Add to Cart button will be disabled\\r\\n                  - When only one item remains available in the bundle, the add buttons will be disabled\\r\\n                  - Therefore - increasing the amount from 1 will required us to do some maths involving the total items in the bundle and how many more the customer can add\\r\\n              */\\n\\n              if ($qtyDecrease && $qtyIncrease && $qtyValue) {\\n                //originalCompareAtPrice originalPrice\\n                if ($addToBundleButtons.length > 0) {\\n                  var currentInventory = $card.dataset.inventory;\\n                  $qtyDecrease.addEventListener(\\\"click\\\", function (e) {\\n                    e.preventDefault();\\n\\n                    //Cater for when there's a maximum value applied to the BaB\\n                    var qty = parseInt($qtyValue.innerText);\\n                    if (qty > 1) {\\n                      $qtyValue.innerText = --qty;\\n\\n                      //Do we need to re-enable a button?\\n                      if (window.maxItemsAllowed - window.currentTotalItems > qty) {\\n                        enableBtn($qtyIncrease);\\n                      }\\n                    }\\n                    $addToBundleButtons.forEach(function ($addToBundleButton) {\\n                      updateAtbButtonPricing($addToBundleButton, originalPrice, originalSubscriptionPrice, qty);\\n                    });\\n                  });\\n                  $qtyIncrease.addEventListener(\\\"click\\\", function (e) {\\n                    e.preventDefault();\\n                    var qty = parseInt($qtyValue.innerText);\\n                    $qtyValue.innerText = ++qty;\\n\\n                    //Make sure the customer can't go above the inventory level currently available, but we also need to factor in how many are in the bundle already                    \\n                    if (currentInventory) {\\n                      var numberAlreadyInBundle = getNumberInBundle($card.dataset.id);\\n                      if (currentInventory - numberAlreadyInBundle <= qty) {\\n                        disableBtn($qtyIncrease);\\n                      }\\n                    } else {\\n                      console.log(\\\"current inventory not available for \\\" + title);\\n                    }\\n\\n                    //Is the customer allowed to add anymore than this? \\n                    if (window.maxItemsAllowed) {\\n                      if (window.maxItemsAllowed - window.currentTotalItems <= qty) {\\n                        disableBtn($qtyIncrease);\\n                      }\\n                    }\\n\\n                    //Update the prices shown in the desktop one\\n                    $addToBundleButtons.forEach(function ($addToBundleButton) {\\n                      updateAtbButtonPricing($addToBundleButton, originalPrice, originalSubscriptionPrice, qty);\\n                    });\\n                  });\\n                  $addToBundleButtons.forEach(function ($addToBundleButton) {\\n                    $addToBundleButton.addEventListener(\\\"click\\\", function (e) {\\n                      //Get all the info we need\\n                      var id = $card.dataset.id;\\n                      var title = $card.dataset.title;\\n                      var price = $card.dataset.price;\\n                      var priceString = $card.dataset.priceString;\\n                      var comparePrice = $card.dataset.comparePrice;\\n                      var comparePriceString = $card.dataset.comparePriceString;\\n                      var image = $card.dataset.image;\\n\\n                      //Ensure we have the bare minimum - comparison price info may not be present, so it's okay if it's not\\n                      if (id && title && price && priceString && image) {\\n                        //Close popup and put it back to where it needs to live\\n                        closeProductPopUp(_$productPopupContainer, $buildABundleTemplate);\\n                        setTimeout(function () {\\n                          //Add to the bundle - which then triggers all of the ui updates and reset functionality\\n                          updateBundle(id, parseInt($qtyValue.innerText), title, price, priceString, comparePrice, comparePriceString, image);\\n                        }, 100);\\n                      } else {\\n                        alert(\\\"Unable to add to bundle - please refresh the page and try again\\\");\\n                        console.log(\\\"One / all of id, title, price, priceString and/or image were not set. Unable to add this product to bundle\\\");\\n                        cosnole.log($card);\\n                        console.log(_$productPopupContainer);\\n                      }\\n                    });\\n                  });\\n                }\\n              }\\n            } else {\\n              console.log(\\\"could not find atb container for \\\" + title);\\n            }\\n          }\\n        }\\n      });\\n    } else {\\n      console.log('log: no build a bundle product cards found');\\n    }\\n\\n    //----------------------------------- bundle controls -----------------------------------//\\n    // Clear bundle\\n    var $clearBundle = $buildABundleTemplate.querySelector(\\\".build-a-bundle__clear\\\");\\n    if ($clearBundle) {\\n      $clearBundle.addEventListener(\\\"click\\\", function () {\\n        clearBundle();\\n      });\\n    } else {\\n      //console.log(\\\"log: clear trigger not found\\\");\\n    }\\n\\n    //------------------------------------- add to cart -------------------------------------//\\n    // Clear bundle\\n    var $addToCarts = $buildABundleTemplate.querySelectorAll(\\\".build-a-bundle__add-to-cart\\\");\\n    if ($addToCarts.length > 0) {\\n      $addToCarts.forEach(function ($addToCart) {\\n        $addToCart.addEventListener(\\\"click\\\", function (e) {\\n          e.preventDefault();\\n          prepAndAddBundleToCart();\\n        });\\n      });\\n    }\\n    var $cartTrigger = document.querySelector(\\\".header__cart-link\\\");\\n    if ($cartTrigger) {\\n      var openCart = localStorage.getItem('toggleCart');\\n      if (openCart == \\\"true\\\") {\\n        $cartTrigger.click();\\n        localStorage.setItem('toggleCart', \\\"false\\\");\\n      }\\n    }\\n\\n    //------------------------------------ bundle summary ------------------------------------//\\n    // Toggle summary visibility (mobile only)\\n    //const $bundleInfo = $buildABundleTemplate.querySelector(\\\".build-a-bundle__info-container\\\");\\n\\n    if ($bundleInfo) {\\n      var $bundleSummaryTrigger = $buildABundleTemplate.querySelector(\\\".build-a-bundle__info-header-trigger\\\");\\n      var $bundleSummaryArrow = $buildABundleTemplate.querySelector(\\\".build-a-bundle__info-expand-trigger\\\");\\n      var $bundleSummaryOverlay = $buildABundleTemplate.querySelector(\\\".build-a-bundle__mobile-overlay\\\");\\n      //const $bundleSummaryRewards = $buildABundleTemplate.querySelector(\\\".build-a-bundle__mobile-rewards\\\");\\n\\n      $bundleSummaryTrigger.addEventListener(\\\"click\\\", function () {\\n        if (window.innerWidth <= 768) {\\n          handleMobileInfoOpen($bundleInfo, $bundleSummaryOverlay);\\n        }\\n      });\\n      if ($bundleSummaryArrow) {\\n        $bundleSummaryArrow.addEventListener(\\\"click\\\", function () {\\n          handleMobileInfoOpen($bundleInfo, $bundleSummaryOverlay);\\n        });\\n      }\\n      $bundleSummaryOverlay.addEventListener(\\\"click\\\", function () {\\n        if (window.innerWidth <= 768) {\\n          handleMobileInfoOpen($bundleInfo, $bundleSummaryOverlay);\\n        }\\n      });\\n\\n      //Handle ui shifting on mobile\\n      window.visualViewport.addEventListener(\\\"resize\\\", function () {\\n        if ($bundleInfo.classList.contains(\\\"active\\\")) {\\n          setBundleInfoMaxHeight($bundleInfo);\\n        }\\n      });\\n    } else {\\n      console.log('log: bundle summary trigger not found');\\n    }\\n\\n    //------------------------------------ bundle logic ------------------------------------//\\n    /*\\r\\n        During the bundle-building process, the bundle is stored as an object in local storage.  \\r\\n        Once the customer completes their selection, the bundle products are added to the cart  \\r\\n        with the required properties so that SKIO recognizes them as a bundle.  \\r\\n        The bundle object is then removed from local storage.\\r\\n        \\r\\n        This ensures there is always a single source of truth for the Build-a-Bundle system.\\r\\n        \\r\\n        Features:\\r\\n        - If a customer visits the bundle page while a bundle exists in local storage,  \\r\\n            their selections are loaded so they can resume where they left off.\\r\\n        - If a customer clicks Edit on a bundle in their cart, they are redirected to the  \\r\\n            bundle page with their selections preloaded.\\r\\n        - Each bundle is assigned a unique Bundle ID, which is attached to its products  \\r\\n            when added to the cart. This allows tracking of which items belong to which bundle.\\r\\n        - If a customer adds multiple bundles, each bundle retains its unique ID,  \\r\\n            preventing conflicts in the cart.\\r\\n        - If a customer has 3+ individual items in their cart, they are given the option  \\r\\n            to convert them into a bundle, redirecting them to the bundle builder.\\r\\n        - The bundle system does not depend on local storage after the bundle is added to the cart,  \\r\\n            reducing potential glitches when switching devices or returning later.\\r\\n    */\\n\\n    if ($buildABundleTemplate) {\\n      if ($buildABundleTemplate.dataset.minRequired) {\\n        window.minItemsRequired = parseInt($buildABundleTemplate.dataset.minRequired);\\n      }\\n      if ($buildABundleTemplate.dataset.maxAllowed) {\\n        window.maxItemsAllowed = parseInt($buildABundleTemplate.dataset.maxAllowed);\\n      }\\n      if ($buildABundleTemplate.dataset.freeDeliveryNumber) {\\n        window.itemsRequiredForFreeDelivery = parseInt($buildABundleTemplate.dataset.freeDeliveryNumber);\\n      }\\n      if ($buildABundleTemplate.dataset.skioDiscountItemsRequired) {\\n        window.itemsRequiredForDiscount = parseInt($buildABundleTemplate.dataset.skioDiscountItemsRequired);\\n      }\\n      if ($buildABundleTemplate.dataset.skioDiscountPercentage) {\\n        window.discountRewardPercentage = $buildABundleTemplate.dataset.skioDiscountPercentage;\\n      }\\n      if ($buildABundleTemplate.dataset.progressMessageShowTime) {\\n        window.progressMessageDuration = $buildABundleTemplate.dataset.progressMessageShowTime * 1000;\\n      }\\n      if ($buildABundleTemplate.dataset.progressMessageCooldown) {\\n        window.progressMessageCooldown = $buildABundleTemplate.dataset.progressMessageCooldown * 1000;\\n      }\\n      window.bundleProgressMessages = setUpBundleProgressMessages($buildABundleTemplate);\\n    }\\n    window.editMode = false;\\n    var queryString = window.location.search;\\n    var urlParams = new URLSearchParams(queryString);\\n    if (urlParams.get('edit')) {\\n      window.editMode = true;\\n    }\\n\\n    //Edit Mode Tests\\n    if (window.editMode) {\\n      //Thre should be a bundle in storage with a flag set against it indicating it is an Edit bundle\\n      var jsonBundle = localStorage.getItem(\\\"bundle\\\");\\n      var processEdit = false;\\n      if (jsonBundle) {\\n        window.bundle = JSON.parse(jsonBundle);\\n        if (window.bundle.editing_bundle == true && Object.keys(window.bundle).length > 0) {\\n          if (window.bundle.bundleId == urlParams.get('edit')) {\\n            //It's a match! This is our bundle\\n            processEdit = true;\\n          }\\n        }\\n      }\\n      if (processEdit) {\\n        //console.log(\\\"edit mode bundle exists and we are using it\\\");\\n\\n        updateBundleUI(\\\"edit\\\");\\n      } else {\\n        alert(\\\"An error occurred, unable to edit this bundle\\\");\\n        window.location.href = \\\"/cart\\\";\\n      }\\n    } else {\\n      //We're not editing a bundle - is there one in local storage?\\n      window.bundle = JSON.parse(localStorage.getItem(\\\"bundle\\\")) || {};\\n      if (Object.keys(window.bundle).length > 0) {\\n        if (window.bundle.editing_bundle == true) {\\n          //A user abandoned their Edit bundle process without saving, clear this from local storage\\n          localStorage.removeItem(\\\"bundle\\\");\\n\\n          //Did the user abandon a bundle build before they clicked the edit button?\\n          var storedBundle = localStorage.getItem('stored_bundle');\\n          if (storedBundle) {\\n            window.bundle = JSON.parse(storedBundle);\\n\\n            //This shouldn't be possible, but ensure it's not an edit mode bundle\\n            if (window.bundle.editing_bundle == true) {\\n              //Reset, we don't want that\\n              window.bundle = {};\\n            } else {\\n              console.log(\\\"attempting to fix bundle storage\\\");\\n\\n              //This is the user's unfinished bundle \\n              localStorage.removeItem(\\\"stored_bundle\\\");\\n\\n              //Save in it's correct place\\n              localStorage.setItem(\\\"bundle\\\", JSON.stringify(bundle));\\n              window.bundle = JSON.parse(localStorage.getItem(\\\"bundle\\\"));\\n\\n              //Force a reload to allow local storage to clean up and stop getting things mixed up\\n              //window.location.reload();\\n            }\\n          } else {\\n            //We're not in edit mode, we should remove this\\n            localStorage.removeItem(\\\"bundle\\\");\\n            window.bundle = {};\\n          }\\n        }\\n      }\\n\\n      // If there is a bundle saved - preload it\\n      if (Object.keys(window.bundle).length > 0) {\\n        updateBundleUI(\\\"preload\\\");\\n      } else {\\n        //No bundle saved, create a new one and set up\\n        window.bundle = {\\n          bundleId: generateUniqueBundleId(),\\n          items: {}\\n        };\\n        handleProgressNotifications(\\\"start\\\");\\n\\n        //console.log(\\\"no stored bundle - setting up\\\");\\n      }\\n    }\\n\\n    //Final actions to consider\\n\\n    //1. Has an \\\"open pop-up\\\" action been requested?\\n    var popupIdToOpen = localStorage.getItem(\\\"target_popup_id\\\");\\n    if (popupIdToOpen) {\\n      $bundleProductCards.forEach(function ($card) {\\n        if ($card.dataset.id == popupIdToOpen) {\\n          //find the popup and open it\\n          var $targetPopupTrigger = $card.querySelector(\\\".build-a-bundle__product-card__popup-trigger\\\");\\n          if ($targetPopupTrigger) {\\n            $targetPopupTrigger.click();\\n          }\\n\\n          //Then clear localStorage\\n          localStorage.removeItem(\\\"target_popup_id\\\");\\n        }\\n      });\\n    }\\n\\n    //2. Is there a pop-up to open in the URL?\\n    if (urlParams.get('popupOpen')) {\\n      //Get a variant ID - loop through the cards and open the relevant one\\n      var urlId = urlParams.get('popupOpen');\\n      $bundleProductCards.forEach(function ($card) {\\n        if ($card.dataset.productId == urlId) {\\n          //find the popup and open it\\n          var $targetPopupTrigger = $card.querySelector(\\\".build-a-bundle__product-card__popup-trigger\\\");\\n          if ($targetPopupTrigger) {\\n            $targetPopupTrigger.click();\\n          }\\n        }\\n      });\\n    }\\n\\n    //3. Compatibility check - Ensure there are no products on the page that haven't been set up in Skio. If there are, remove the ability to Add them to the bundle\\n    if ($buildABundleTemplate.dataset.performValidityCheck != \\\"false\\\") {\\n      productCompatibilityCheck($bundleProductCards);\\n    }\\n    var removeExistingBundle = /*#__PURE__*/function () {\\n      var _ref7 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(bundleId) {\\n        var cartRes, cart, bundleItems, updates, updateRes, updatedCart;\\n        return _regeneratorRuntime().wrap(function _callee$(_context) {\\n          while (1) switch (_context.prev = _context.next) {\\n            case 0:\\n              _context.prev = 0;\\n              _context.next = 3;\\n              return fetch('/cart.js');\\n            case 3:\\n              cartRes = _context.sent;\\n              _context.next = 6;\\n              return cartRes.json();\\n            case 6:\\n              cart = _context.sent;\\n              // 2. Find items belonging to the bundle - use keys to avoid accidentally setting shared line items to zero\\n              bundleItems = cart.items.filter(function (item) {\\n                var _item$properties;\\n                return ((_item$properties = item.properties) === null || _item$properties === void 0 ? void 0 : _item$properties._bundle_id) === bundleId;\\n              });\\n              if (bundleItems.length) {\\n                _context.next = 11;\\n                break;\\n              }\\n              console.log('No items found for bundle', bundleId);\\n              return _context.abrupt(\\\"return\\\", true);\\n            case 11:\\n              updates = {};\\n              bundleItems.forEach(function (item) {\\n                updates[item.key] = 0;\\n              });\\n              _context.next = 15;\\n              return fetch('/cart/update.js', {\\n                method: 'POST',\\n                headers: {\\n                  'Content-Type': 'application/json'\\n                },\\n                body: JSON.stringify({\\n                  updates: updates\\n                })\\n              });\\n            case 15:\\n              updateRes = _context.sent;\\n              _context.next = 18;\\n              return updateRes.json();\\n            case 18:\\n              updatedCart = _context.sent;\\n              return _context.abrupt(\\\"return\\\", true);\\n            case 22:\\n              _context.prev = 22;\\n              _context.t0 = _context[\\\"catch\\\"](0);\\n              console.error('Error removing bundle:', _context.t0);\\n              return _context.abrupt(\\\"return\\\", false);\\n            case 26:\\n            case \\\"end\\\":\\n              return _context.stop();\\n          }\\n        }, _callee, null, [[0, 22]]);\\n      }));\\n      return function removeExistingBundle(_x2) {\\n        return _ref7.apply(this, arguments);\\n      };\\n    }();\\n\\n    // Main add to cart function\\n    var addBundleToCart = /*#__PURE__*/function () {\\n      var _ref8 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(lineItems, bundleId, $protectionOverlay) {\\n        var removed, addRes, addData, abandonedBundleBuild;\\n        return _regeneratorRuntime().wrap(function _callee2$(_context2) {\\n          while (1) switch (_context2.prev = _context2.next) {\\n            case 0:\\n              _context2.prev = 0;\\n              if (!(window.editMode === true)) {\\n                _context2.next = 8;\\n                break;\\n              }\\n              _context2.next = 4;\\n              return removeExistingBundle(bundleId);\\n            case 4:\\n              removed = _context2.sent;\\n              if (removed) {\\n                _context2.next = 8;\\n                break;\\n              }\\n              console.error('Failed to remove existing bundle');\\n              return _context2.abrupt(\\\"return\\\");\\n            case 8:\\n              _context2.next = 10;\\n              return fetch('/cart/add.js', {\\n                method: 'POST',\\n                headers: {\\n                  'Content-Type': 'application/json'\\n                },\\n                body: JSON.stringify({\\n                  items: lineItems\\n                })\\n              });\\n            case 10:\\n              addRes = _context2.sent;\\n              _context2.next = 13;\\n              return addRes.json();\\n            case 13:\\n              addData = _context2.sent;\\n              // Reset bundle in localStorage\\n              localStorage.removeItem('bundle');\\n              if (window.editMode) {\\n                //We might have a backup to restore \\n                abandonedBundleBuild = localStorage.getItem('stored_bundle');\\n                if (abandonedBundleBuild) {\\n                  //Restore stored bundle\\n                  localStorage.setItem('bundle', abandonedBundleBuild);\\n                  localStorage.removeItem('stored_bundle');\\n                }\\n              }\\n              /*\\r\\n              const cartRes = await fetch('/cart.js');\\r\\n              const cartData = await cartRes.json();\\r\\n              \\r\\n              // Enable ATC buttons and reset messages\\r\\n              $addToCarts.forEach(($atc) => {\\r\\n                  enableAtcResetMsg($atc);\\r\\n              });\\r\\n              */\\n              //hideBlockerOverlay($protectionOverlay,$bundleInfo);\\n\\n              // Reload to show updated cart\\n              window.location.href = \\\"/cart\\\";\\n              _context2.next = 24;\\n              break;\\n            case 19:\\n              _context2.prev = 19;\\n              _context2.t0 = _context2[\\\"catch\\\"](0);\\n              console.error(\\\"Error adding bundle to cart:\\\", _context2.t0);\\n\\n              // Re-enable buttons even on error\\n              $addToCarts.forEach(function ($atc) {\\n                enableAtcResetMsg($atc);\\n              });\\n              hideBlockerOverlay($protectionOverlay, $bundleInfo);\\n            case 24:\\n            case \\\"end\\\":\\n              return _context2.stop();\\n          }\\n        }, _callee2, null, [[0, 19]]);\\n      }));\\n      return function addBundleToCart(_x3, _x4, _x5) {\\n        return _ref8.apply(this, arguments);\\n      };\\n    }();\\n    var markProductAsUnavailable = function markProductAsUnavailable($bundleProductCard) {\\n      var $productControls = $bundleProductCard.querySelector(\\\".product-controls\\\");\\n      if ($productControls) {\\n        //Hide the Increase and Decrease buttons in a way that won't be overridden by the other functionality\\n        var $increase = $productControls.querySelector(\\\".product-quantity__increase\\\");\\n        if ($increase) {\\n          $increase.classList.add(\\\"opacity-0\\\", \\\"pointer-events-none\\\");\\n          $increase.style.width = \\\"0\\\";\\n        }\\n        var $controlsText = $productControls.querySelectorAll(\\\".product-quantity-container p\\\");\\n        if ($controlsText.length > 0) {\\n          $controlsText.forEach(function ($ptag, index) {\\n            if (index < 1) {\\n              $ptag.classList.add(\\\"desktop:pr-1\\\");\\n            }\\n            $ptag.textContent = \\\"Unavailable\\\";\\n          });\\n        }\\n      }\\n    };\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (buildABundle);\\n\\n/*\\r\\n    Moving old, unused concepts to the bottom\\r\\n\\r\\n    We're not using static bundles\\r\\n    async function getStaticBundle() {\\r\\n        const response = await fetch('https://api.skio.com/storefront-http/get-classic-box-v2', {\\r\\n            method: 'POST',\\r\\n            headers: {\\r\\n                'Content-Type': 'application/json'\\r\\n            },\\r\\n            body: JSON.stringify({\\r\\n                productVariantPlatformId: \\\"55900780724608\\\", \\r\\n            })\\r\\n        });\\r\\n    \\r\\n        if (!response.ok) {\\r\\n            throw new Error(`Error fetching static bundle: ${response.statusText}`);\\r\\n        }\\r\\n    \\r\\n        const data = await response.json();\\r\\n        return data;\\r\\n    }\\r\\n\\r\\n    Rewards concept we're not using\\r\\n    \\r\\n    if (isDynamicBundle){\\r\\n\\r\\n        let activePurchaseType = null;\\r\\n\\r\\n        //const $rewards = $buildABundleTemplate.querySelectorAll(\\\".build-a-bundle__reward\\\");\\r\\n\\r\\n        //const activePurchaseType = $buildABundleTemplate.querySelector(\\\".build-a-bundle__purchase-type.active\\\")?.dataset.type;\\r\\n\\r\\n        /*\\r\\n        if ($rewards && activePurchaseType){\\r\\n            $rewards.forEach($reward => {\\r\\n                let threshold = parseInt($reward.dataset.threshold);\\r\\n                threshold = threshold * 100;\\r\\n\\r\\n                if (totalPrice > threshold){\\r\\n                    $reward.classList.add('active');\\r\\n                    $reward.dataset.eligible = 'true';\\r\\n                } else {\\r\\n                    if ($reward.dataset.subscriptionActive == 'true' && activePurchaseType == 'subscription'){\\r\\n                        $reward.dataset.eligible = 'false';\\r\\n                    } else {\\r\\n                        $reward.classList.remove('active');\\r\\n                        $reward.dataset.eligible = 'false';\\r\\n                    }\\r\\n                }\\r\\n            });\\r\\n        } else {\\r\\n            console.log('log: rewards not found');\\r\\n        }\\r\\n\\r\\n        // Update amount remaining\\r\\n        const $remainingText = $buildABundleTemplate.querySelectorAll(\\\".build-a-bundle__add-to-cart-text\\\");\\r\\n\\r\\n        if ($remainingText){\\r\\n            $remainingText.forEach($text => {\\r\\n                const minimumSpend = parseInt($text.dataset.minimumSpend * 100);\\r\\n                const amountRemaining = minimumSpend - totalPrice;\\r\\n\\r\\n                if (amountRemaining > 0){\\r\\n                    $text.innerText = 'Spend '+currencySymbol+(amountRemaining / 100).toFixed(2) +' to continue';\\r\\n\\r\\n                    if ($addToCarts){\\r\\n                        $addToCarts.forEach($addToCart => {\\r\\n                            $addToCart.classList.remove('active');\\r\\n                        });\\r\\n                    }\\r\\n                } else {\\r\\n                    const $activePurchaseType = $buildABundleTemplate.querySelector(\\\".build-a-bundle__purchase-type.active\\\");\\r\\n\\r\\n                    //temporarily adding to stop javascript throwing an error\\r\\n                    if ($activePurchaseType && $activePurchaseType.dataset.type == 'subscription'){\\r\\n                        totalPrice = totalPrice * 0.80;\\r\\n                    } else {\\r\\n                        if (totalPrice > 4000){\\r\\n                            totalPrice = totalPrice * 0.80;\\r\\n                        } else if (totalPrice > 3000){\\r\\n                            totalPrice = totalPrice * 0.90;\\r\\n                        }\\r\\n                    }\\r\\n\\r\\n                    $text.innerText = 'Add to cart \u2022 '+currencySymbol+(totalPrice / 100).toFixed(2);\\r\\n\\r\\n                    if ($addToCarts){\\r\\n                        $addToCarts.forEach($addToCart => {\\r\\n                            $addToCart.classList.add('active');\\r\\n                        });\\r\\n                    }\\r\\n                }\\r\\n            });\\r\\n        } else {\\r\\n            console.log('log: remaining not found');\\r\\n        }\\r\\n    }\\r\\n\\r\\n\\r\\n    Further Static Bundle considerations that we aren't using\\r\\n    if (isStaticBundle){\\r\\n        // Get elements\\r\\n        const $qtyIncreases = $buildABundleTemplate.querySelectorAll(\\\".product-quantity__increase\\\");\\r\\n        const $itemsRemainingWrapper = $buildABundleTemplate.querySelectorAll(\\\".build-a-bundle__remaining-items__wrapper\\\");\\r\\n        const $cta = $buildABundleTemplate.querySelector(\\\".build-a-bundle__add-to-cart\\\");\\r\\n        const $ctaText = $buildABundleTemplate.querySelector(\\\".static-build-a-bundle__add-to-cart-text\\\");\\r\\n\\r\\n        // Calculate variables\\r\\n        const maxItems = parseInt($buildABundleTemplate.dataset.itemCount);\\r\\n        const remaining = maxItems - totalItems;\\r\\n\\r\\n        // Toggle content depending on amount of items left to add\\r\\n        if (remaining <= 0){\\r\\n            // Update CTA messaging\\r\\n            $ctaText.innerText = 'Add to cart';\\r\\n\\r\\n            // Enable CTA\\r\\n            $cta.classList.add(\\\"active\\\");\\r\\n\\r\\n            // Toggle bundle controls\\r\\n            $qtyIncreases.forEach(element => {\\r\\n                element.classList.add('disabled');\\r\\n            });\\r\\n\\r\\n            // Update bundle summary messaging\\r\\n            $itemsRemainingWrapper.forEach(element => {\\r\\n                const $itemsRemaining = element.querySelector(\\\".build-a-bundle__remaining-items\\\");\\r\\n                $itemsRemaining.innerText = remaining;\\r\\n\\r\\n                element.classList.add(\\\"hidden\\\");\\r\\n            });\\r\\n        } else {\\r\\n            // Update CTA messaging\\r\\n            $ctaText.innerText = 'Add ' + remaining + ' more to coninue';\\r\\n\\r\\n            // Disable CTA\\r\\n            $cta.classList.remove(\\\"active\\\");\\r\\n\\r\\n            // Toggle bundle controls\\r\\n            $qtyIncreases.forEach(element => {\\r\\n                element.classList.remove('disabled');\\r\\n            });\\r\\n\\r\\n            // Update bundle summary messaging\\r\\n            $itemsRemainingWrapper.forEach(element => {\\r\\n                const $itemsRemaining = element.querySelector(\\\".build-a-bundle__remaining-items\\\");\\r\\n                $itemsRemaining.innerText = remaining;\\r\\n                \\r\\n                element.classList.remove(\\\"hidden\\\");\\r\\n            });\\r\\n        }\\r\\n    }\\r\\n\\r\\n    if (isDynamicBundle){\\r\\n\\r\\n        // Calculate bundle threshold savings\\r\\n        const $activePurchaseType = $buildABundleTemplate.querySelector(\\\".build-a-bundle__purchase-type.active\\\");\\r\\n\\r\\n        if($activePurchaseType){\\r\\n            if ($activePurchaseType.dataset.type == 'subscription'){\\r\\n                totalSavings += totalPrice * 0.20;\\r\\n            } else {\\r\\n                if (totalPrice > 4000){\\r\\n                    totalSavings += totalPrice * 0.20;\\r\\n                } else if (totalPrice > 3000){\\r\\n                    totalSavings += totalPrice * 0.10;\\r\\n                }\\r\\n            }                    \\r\\n        }                \\r\\n    }\\r\\n}\\r\\n\\r\\n/*\\r\\n    Static Bundle Image Items           \\r\\n    $bundeItemList.innerHTML += `\\r\\n        <div class=\\\"build-a-bundle_item flex flex-row items-start justify-between py-2\\\" data-id=\\\"${productId}\\\">\\r\\n            <div class=\\\"flex flex-row space-x-3\\\">\\r\\n                <div class=\\\"w-12 h-12 flex flex-shrink-0\\\">\\r\\n                    <img src=\\\"${item.image}\\\" class=\\\"w-full h-full object-contain\\\">\\r\\n                </div>\\r\\n                <div>\\r\\n                    <p class=\\\"text-large font-bold\\\">${item.title}</p>\\r\\n                </div>\\r\\n            </div>\\r\\n            <div class=\\\"flex flex-row space-x-1 items-center\\\">\\r\\n                <p class=\\\"text-large font-bold\\\">${item.quantity}</p>\\r\\n                <button class=\\\"build-a-bundle_item-remove mt-1\\\">\\r\\n                    <svg width=\\\"20\\\" height=\\\"21\\\" viewBox=\\\"0 0 20 21\\\" fill=\\\"none\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\r\\n                        <path d=\\\"M5.28595 15.6105L10 10.8965M10 10.8965L14.714 6.18243M10 10.8965L14.714 15.6105M10 10.8965L5.28595 6.18243\\\" stroke=\\\"black\\\" stroke-width=\\\"1.66667\\\" stroke-linecap=\\\"round\\\"/>\\r\\n                    </svg>\\r\\n*///# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9mZWF0dXJlcy9idWlsZC1hLWJ1bmRsZS9idWlsZC1hLWJ1bmRsZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OzsrQ0FDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFEc0M7QUFDaUI7QUFDL0I7QUFFeEIsSUFBTUcsWUFBWSxHQUFHLFNBQWZBLFlBQVksR0FBUztFQUd2QjtFQUNBQyxNQUFNLENBQUNDLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDbEJELE1BQU0sQ0FBQ0UsaUJBQWlCLEdBQUcsQ0FBQztFQUM1QkYsTUFBTSxDQUFDRyxlQUFlLEdBQUcsS0FBSztFQUM5QkgsTUFBTSxDQUFDSSxnQkFBZ0IsR0FBRyxLQUFLO0VBQy9CSixNQUFNLENBQUNLLHdCQUF3QixHQUFHLEtBQUs7RUFDdkNMLE1BQU0sQ0FBQ00sd0JBQXdCLEdBQUcsS0FBSztFQUN2Q04sTUFBTSxDQUFDTyw0QkFBNEIsR0FBRyxLQUFLO0VBQzNDUCxNQUFNLENBQUNRLHNCQUFzQixHQUFHLEtBQUs7O0VBR3JDO0VBQ0FSLE1BQU0sQ0FBQ1Msc0JBQXNCLEdBQUcsSUFBSTtFQUNwQ1QsTUFBTSxDQUFDVSwwQkFBMEIsR0FBRyxJQUFJO0VBQ3hDVixNQUFNLENBQUNXLHVCQUF1QixHQUFHLEdBQUcsQ0FBQyxDQUFDO0VBQ3RDWCxNQUFNLENBQUNZLHVCQUF1QixHQUFHLElBQUksQ0FBQyxDQUFDO0VBQ3ZDWixNQUFNLENBQUNhLG9CQUFvQixHQUFHLEVBQUU7RUFDaENiLE1BQU0sQ0FBQ2Msc0JBQXNCLEdBQUcsSUFBSTtFQUNwQ2QsTUFBTSxDQUFDZSw0QkFBNEIsR0FBRyxJQUFJO0VBQzFDZixNQUFNLENBQUNnQixlQUFlLEdBQUcsS0FBSztFQUM5QmhCLE1BQU0sQ0FBQ2lCLHFCQUFxQixHQUFHLElBQUk7O0VBRW5DOztFQUVBO0VBQ0EsSUFBTUMscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQixDQUFJQyxRQUFRLEVB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vcmVzb3VyY2VzL3NjcmlwdHMvZmVhdHVyZXMvYnVpbGQtYS1idW5kbGUvYnVpbGQtYS1idW5kbGUuanM/ZGJjZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ2FydCBmcm9tIFwiLi4vLi4vbW9kdWxlcy9DYXJ0XCI7XHJcbmltcG9ydCBjYXJ0QXNpZGUgZnJvbSBcIi4uLy4uL3NlY3Rpb25zL2NhcnQtYXNpZGUvbWFpblwiO1xyXG5pbXBvcnQgZ3NhcCBmcm9tIFwiZ3NhcFwiO1xyXG5cclxuY29uc3QgYnVpbGRBQnVuZGxlID0gKCkgPT4ge1xyXG5cclxuXHJcbiAgICAvLyBEZWZpbmUgdmFyaWFibGVzIG5lZWRlZCB0aHJvdWdob3V0IHRoZSBwcm9jZXNzXHJcbiAgICB3aW5kb3cuYnVuZGxlID0ge307XHJcbiAgICB3aW5kb3cuY3VycmVudFRvdGFsSXRlbXMgPSAwO1xyXG4gICAgd2luZG93Lm1heEl0ZW1zQWxsb3dlZCA9IGZhbHNlO1xyXG4gICAgd2luZG93Lm1pbkl0ZW1zUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgIHdpbmRvdy5pdGVtc1JlcXVpcmVkRm9yRGlzY291bnQgPSBmYWxzZTtcclxuICAgIHdpbmRvdy5kaXNjb3VudFJld2FyZFBlcmNlbnRhZ2UgPSBmYWxzZTtcclxuICAgIHdpbmRvdy5pdGVtc1JlcXVpcmVkRm9yRnJlZURlbGl2ZXJ5ID0gZmFsc2U7XHJcbiAgICB3aW5kb3cuYnVuZGxlUHJvZ3Jlc3NNZXNzYWdlcyA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICAvLyBTZXQgdXAgdGhlIGdsb2JhbHMgZm9yIHRoZSBwcm9ncmVzcyBtZXNzYWdlIHN5c3RlbVxyXG4gICAgd2luZG93LmN1cnJlbnRQcm9ncmVzc01lc3NhZ2UgPSBudWxsO1xyXG4gICAgd2luZG93LmN1cnJlbnRQcm9ncmVzc01lc3NhZ2VUeXBlID0gbnVsbDtcclxuICAgIHdpbmRvdy5wcm9ncmVzc01lc3NhZ2VDb29sZG93biA9IDUwMDsgLy8gVGhpcyBpcyBvdmVyd3JpdHRlbiBsYXRlciBpZiBvbmUgaGFzIGJlZW4gc2V0IHZpYSB0aGUgY3VzdG9taXNlclxyXG4gICAgd2luZG93LnByb2dyZXNzTWVzc2FnZUR1cmF0aW9uID0gMjAwMDsgLy8gQWxzbyBvdmVyd3JpdHRlbiBsYXRlciBpZiBvbmUgaGFzIGJlZW4gc2V0IHZpYSB0aGUgY3VzdG9taXNlclxyXG4gICAgd2luZG93LnByb2dyZXNzTWVzc2FnZVF1ZXVlID0gW107XHJcbiAgICB3aW5kb3cucHJvZ3Jlc3NNZXNzYWdlVGltZW91dCA9IG51bGw7XHJcbiAgICB3aW5kb3cucHJvZ3Jlc3NNZXNzYWdlQ29vbGRvd25UaW1lciA9IG51bGw7XHJcbiAgICB3aW5kb3cuaXNNZXNzYWdlQWN0aXZlID0gZmFsc2U7XHJcbiAgICB3aW5kb3cuY3VycmVudE1lc3NhZ2VFbGVtZW50ID0gbnVsbDtcclxuXHJcbiAgICAvLyBGdW5jdGlvbiBkZWZpbml0aW9uc1xyXG5cclxuICAgIC8vIFJlbW92ZSBhIG1lc3NhZ2UsIGZpcnN0IGFuaW1hdGUgaXQgb3V0IGFuZCB0aGVuIHJlbW92ZSBmcm9tIHRoZSBkb20uIFNob3VsZCBvbmx5IGJlIG9uZSBNZXNzYWdlIGF0IGEgdGltZVxyXG4gICAgY29uc3QgcmVtb3ZlUHJvZ3Jlc3NNZXNzYWdlID0gKCRlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKCEkZWxlbWVudCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBnc2FwLnRvKCRlbGVtZW50LCB7XHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLFxyXG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDAuMixcclxuICAgICAgICAgICAgICAgIGVhc2U6IFwicG93ZXIyLm91dFwiLFxyXG4gICAgICAgICAgICAgICAgb25Db21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICRlbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIFByb2Nlc3MgdGhlIG5leHQgbWVzc2FnZSBpbiB0aGUgcXVldWUgLSBHZW5lcmljIE1lc3NhZ2VzIHNob3VsZCBuZXZlciBnZXQgaW50byB0aGUgcXVldWUsIHNvIHdlIHNob3VsZCBvbmx5IGJlIHByb2Nlc3NpbmcgdGhyb3VnaCBzaWduaWZpY2FudCBtZXNzYWdlc1xyXG4gICAgY29uc3QgcHJvY2Vzc05leHRNZXNzYWdlID0gKCkgPT4ge1xyXG5cclxuICAgICAgICAvLyBDbGVhciBhbnkgZXhpc3RpbmcgdGltZW91dFxyXG4gICAgICAgIGlmICh3aW5kb3cucHJvZ3Jlc3NNZXNzYWdlVGltZW91dCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQod2luZG93LnByb2dyZXNzTWVzc2FnZVRpbWVvdXQpO1xyXG4gICAgICAgICAgICB3aW5kb3cucHJvZ3Jlc3NNZXNzYWdlVGltZW91dCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiBxdWV1ZSBpcyBlbXB0eSwgcmVtb3ZlIGN1cnJlbnQgbWVzc2FnZSBhbmQgbWFyayBhcyBpbmFjdGl2ZVxyXG4gICAgICAgIGlmICh3aW5kb3cucHJvZ3Jlc3NNZXNzYWdlUXVldWUubGVuZ3RoID09PSAwKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGN1cnJlbnQgbWVzc2FnZSBmcm9tIERPTVxyXG4gICAgICAgICAgICBpZiAod2luZG93LmN1cnJlbnRNZXNzYWdlRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgcmVtb3ZlUHJvZ3Jlc3NNZXNzYWdlKHdpbmRvdy5jdXJyZW50TWVzc2FnZUVsZW1lbnQpLnRoZW4oKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL1VwZGF0ZSBvdXIgZ2xvYmFsc1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5pc01lc3NhZ2VBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY3VycmVudFByb2dyZXNzTWVzc2FnZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmN1cnJlbnRQcm9ncmVzc01lc3NhZ2VUeXBlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY3VycmVudE1lc3NhZ2VFbGVtZW50ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCBjb29sZG93biB0aW1lciBhZnRlciBtZXNzYWdlIGlzIHJlbW92ZWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LnByb2dyZXNzTWVzc2FnZUNvb2xkb3duVGltZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHdpbmRvdy5wcm9ncmVzc01lc3NhZ2VDb29sZG93blRpbWVyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5wcm9ncmVzc01lc3NhZ2VDb29sZG93blRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5wcm9ncmVzc01lc3NhZ2VDb29sZG93blRpbWVyID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9LCB3aW5kb3cucHJvZ3Jlc3NNZXNzYWdlQ29vbGRvd24pO1xyXG5cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHdpbmRvdy5pc01lc3NhZ2VBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5jdXJyZW50UHJvZ3Jlc3NNZXNzYWdlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5jdXJyZW50UHJvZ3Jlc3NNZXNzYWdlVHlwZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIFN0YXJ0IGNvb2xkb3duIHRpbWVyXHJcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LnByb2dyZXNzTWVzc2FnZUNvb2xkb3duVGltZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQod2luZG93LnByb2dyZXNzTWVzc2FnZUNvb2xkb3duVGltZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHdpbmRvdy5wcm9ncmVzc01lc3NhZ2VDb29sZG93blRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnByb2dyZXNzTWVzc2FnZUNvb2xkb3duVGltZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSwgd2luZG93LnByb2dyZXNzTWVzc2FnZUNvb2xkb3duKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gR2V0IG5leHQgbWVzc2FnZSBmcm9tIHF1ZXVlXHJcbiAgICAgICAgY29uc3QgbmV4dE1lc3NhZ2UgPSB3aW5kb3cucHJvZ3Jlc3NNZXNzYWdlUXVldWUuc2hpZnQoKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBSZW1vdmUgY3VycmVudCBtZXNzYWdlIGlmIGV4aXN0cywgdGhlbiBzaG93IG5ldyBvbmVcclxuICAgICAgICBpZiAod2luZG93LmN1cnJlbnRNZXNzYWdlRWxlbWVudCkge1xyXG4gICAgICAgICAgICByZW1vdmVQcm9ncmVzc01lc3NhZ2Uod2luZG93LmN1cnJlbnRNZXNzYWdlRWxlbWVudCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzaG93UHJvZ3Jlc3NNZXNzYWdlKG5leHRNZXNzYWdlLm1lc3NhZ2UsIG5leHRNZXNzYWdlLnR5cGUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzaG93UHJvZ3Jlc3NNZXNzYWdlKG5leHRNZXNzYWdlLm1lc3NhZ2UsIG5leHRNZXNzYWdlLnR5cGUpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgLy8gQSBwcm9ncmVzcyBtZXNzYWdlIGhhcyBiZWVuIGNob3NlbiB0byBzaG93IC0gc2hvdyBpdFxyXG4gICAgY29uc3Qgc2hvd1Byb2dyZXNzTWVzc2FnZSA9IChtZXNzYWdlLCBtZXNzYWdlVHlwZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0ICRidW5kbGVUZW1wbGF0ZUluZm9Db250ZW50cyA9ICRidWlsZEFCdW5kbGVUZW1wbGF0ZS5xdWVyeVNlbGVjdG9yKFwiLmJ1aWxkLWEtYnVuZGxlX19pbmZvXCIpO1xyXG5cclxuICAgICAgICBpZiAoJGJ1bmRsZVRlbXBsYXRlSW5mb0NvbnRlbnRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0ICRub3RpZmljYXRpb25UZW1wbGF0ZSA9ICRidW5kbGVUZW1wbGF0ZUluZm9Db250ZW50cy5xdWVyeVNlbGVjdG9yKFwiLm5vdGlmaWNhdGlvbi1iYW5uZXItdGVtcGxhdGVcIik7XHJcbiAgICAgICAgICAgIGlmICgkbm90aWZpY2F0aW9uVGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIENsb25lIHRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICBjb25zdCAkbm90aWZpY2F0aW9uVGVtcGxhdGVDbG9uZSA9ICRub3RpZmljYXRpb25UZW1wbGF0ZS5jbG9uZU5vZGUoKTtcclxuICAgICAgICAgICAgICAgICRub3RpZmljYXRpb25UZW1wbGF0ZUNsb25lLnRleHRDb250ZW50ID0gbWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICRub3RpZmljYXRpb25UZW1wbGF0ZUNsb25lLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIiwgXCJub3RpZmljYXRpb24tYmFubmVyLXRlbXBsYXRlXCIpO1xyXG4gICAgICAgICAgICAgICAgJGJ1bmRsZVRlbXBsYXRlSW5mb0NvbnRlbnRzLnByZXBlbmQoJG5vdGlmaWNhdGlvblRlbXBsYXRlQ2xvbmUpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFN0b3JlIHJlZmVyZW5jZSB0byBjdXJyZW50IG1lc3NhZ2VcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5jdXJyZW50TWVzc2FnZUVsZW1lbnQgPSAkbm90aWZpY2F0aW9uVGVtcGxhdGVDbG9uZTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5jdXJyZW50UHJvZ3Jlc3NNZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5jdXJyZW50UHJvZ3Jlc3NNZXNzYWdlVHlwZSA9IG1lc3NhZ2VUeXBlO1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmlzTWVzc2FnZUFjdGl2ZSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG5vdGlmSGVpZ2h0ID0gXCIzNnB4XCI7XHJcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPiAxMDIzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWZIZWlnaHQgPSBcIjQwcHhcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBnc2FwLmZyb21UbyhcclxuICAgICAgICAgICAgICAgICAgICAkbm90aWZpY2F0aW9uVGVtcGxhdGVDbG9uZSxcclxuICAgICAgICAgICAgICAgICAgICB7IGhlaWdodDogMCwgb3BhY2l0eTogMCB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBub3RpZkhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDAuNSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWFzZTogXCJleHBvLmluT3V0XCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNldCB0aW1lb3V0IHRvIGF1dG8tZGlzbWlzcyBhZnRlciBkdXJhdGlvblxyXG4gICAgICAgICAgICAgICAgd2luZG93LnByb2dyZXNzTWVzc2FnZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzTmV4dE1lc3NhZ2UoKTtcclxuICAgICAgICAgICAgICAgIH0sIHdpbmRvdy5wcm9ncmVzc01lc3NhZ2VEdXJhdGlvbik7XHJcblxyXG4gICAgICAgICAgICAgICAgLy9JZiBhIGdlbmVyaWMgTWVzc2FnZSAtIG1hcmsgdGhhdCBpcyB3YXMgc2hvd24uIFdlIGRvbid0IHdhbnQgdG8gbWFyayB0aGVtIGFzIHNob3duIGlmIHRoZXkgZGlkbid0IGFjdHVhbGx5IGFwcGVhclxyXG4gICAgICAgICAgICAgICAgaWYobWVzc2FnZVR5cGUgPT0gXCJnZW5lcmljXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKHdpbmRvdy5idW5kbGVQcm9ncmVzc01lc3NhZ2VzLmdlbmVyaWMpLmZpbmQoayA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYnVuZGxlUHJvZ3Jlc3NNZXNzYWdlcy5nZW5lcmljW2tdLm1lc3NhZ2UgPT09IG1lc3NhZ2VcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZihrZXkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYnVuZGxlUHJvZ3Jlc3NNZXNzYWdlcy5nZW5lcmljW2tleV0uc2hvd24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ291bGQgbm90IGZpbmQgJG5vdGlmaWNhdGlvblRlbXBsYXRlIC0gdW5hYmxlIHRvIHNob3cgcHJvZ3Jlc3MgbWVzc2FnZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY291bGQgbm90IGZpbmQgJGJ1bmRsZVRlbXBsYXRlSW5mb0NvbnRlbnRzLCB3aGljaCBtZWFucyBzeXN0ZW0gY2Fubm90IGZpbmQgdGhlIG5vdGlmaWNhdGlvbiB0ZW1wbGF0ZSB0byBjbG9uZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEFkZCBhIG1lc3NhZ2UgdG8gdGhlIHF1ZXVlIG9yIHNob3cgaW1tZWRpYXRlbHlcclxuICAgIGNvbnN0IHF1ZXVlUHJvZ3Jlc3NNZXNzYWdlID0gKG1lc3NhZ2UsIG1lc3NhZ2VUeXBlKSA9PiB7XHJcbiAgICAgICAgaWYgKCFtZXNzYWdlKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2VPYmogPSB7IG1lc3NhZ2UsIHR5cGU6IG1lc3NhZ2VUeXBlIH07XHJcblxyXG4gICAgICAgIC8vIFNpZ25pZmljYW50IG1lc3NhZ2VzIGJ5cGFzcyBjb29sZG93biBhbmQgc2hvdyBpbW1lZGlhdGVseSBpZiBub3RoaW5nIGlzIGFjdGl2ZVxyXG4gICAgICAgIGlmIChtZXNzYWdlVHlwZSA9PT0gXCJzaWduaWZpY2FudFwiICYmICF3aW5kb3cuaXNNZXNzYWdlQWN0aXZlKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5wcm9ncmVzc01lc3NhZ2VRdWV1ZSA9IFttZXNzYWdlT2JqXTtcclxuICAgICAgICAgICAgcHJvY2Vzc05leHRNZXNzYWdlKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEdlbmVyaWMgbWVzc2FnZXMgcmVzcGVjdCBjb29sZG93biAtIGlmIG5vIG1lc3NhZ2UgYWN0aXZlIGJ1dCBpbiBjb29sZG93biwgc2tpcFxyXG4gICAgICAgIGlmICghd2luZG93LmlzTWVzc2FnZUFjdGl2ZSAmJiAhd2luZG93LnByb2dyZXNzTWVzc2FnZUNvb2xkb3duVGltZXIpIHtcclxuICAgICAgICAgICAgLy8gU2hvdyBpbW1lZGlhdGVseVxyXG4gICAgICAgICAgICB3aW5kb3cucHJvZ3Jlc3NNZXNzYWdlUXVldWUgPSBbbWVzc2FnZU9ial07XHJcbiAgICAgICAgICAgIHByb2Nlc3NOZXh0TWVzc2FnZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiBjb29sZG93biBpcyBhY3RpdmUgYW5kIG1lc3NhZ2UgaXMgZ2VuZXJpYywgc2tpcCBpdFxyXG4gICAgICAgIGlmICh3aW5kb3cucHJvZ3Jlc3NNZXNzYWdlQ29vbGRvd25UaW1lciAmJiBtZXNzYWdlVHlwZSA9PT0gXCJnZW5lcmljXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSWYgY3VycmVudCBtZXNzYWdlIGlzIGdlbmVyaWMgYW5kIG5ldyBtZXNzYWdlIGlzIHNpZ25pZmljYW50XHJcbiAgICAgICAgaWYgKHdpbmRvdy5pc01lc3NhZ2VBY3RpdmUgJiYgd2luZG93LmN1cnJlbnRQcm9ncmVzc01lc3NhZ2VUeXBlID09PSBcImdlbmVyaWNcIiAmJiBtZXNzYWdlVHlwZSA9PT0gXCJzaWduaWZpY2FudFwiKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBDbGVhciB0aGUgcXVldWUgb2YgYW55IGdlbmVyaWMgbWVzc2FnZXMgYW5kIGFkZCBzaWduaWZpY2FudCB0byBmcm9udFxyXG4gICAgICAgICAgICB3aW5kb3cucHJvZ3Jlc3NNZXNzYWdlUXVldWUgPSB3aW5kb3cucHJvZ3Jlc3NNZXNzYWdlUXVldWUuZmlsdGVyKG1zZyA9PiBtc2cudHlwZSA9PT0gXCJzaWduaWZpY2FudFwiKTtcclxuICAgICAgICAgICAgd2luZG93LnByb2dyZXNzTWVzc2FnZVF1ZXVlLnVuc2hpZnQobWVzc2FnZU9iaik7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBJbnRlcnJ1cHQgY3VycmVudCBtZXNzYWdlXHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cucHJvZ3Jlc3NNZXNzYWdlVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHdpbmRvdy5wcm9ncmVzc01lc3NhZ2VUaW1lb3V0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwcm9jZXNzTmV4dE1lc3NhZ2UoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSWYgbmV3IG1lc3NhZ2UgaXMgc2lnbmlmaWNhbnQsIGFkZCB0byBxdWV1ZVxyXG4gICAgICAgIGlmIChtZXNzYWdlVHlwZSA9PT0gXCJzaWduaWZpY2FudFwiKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5wcm9ncmVzc01lc3NhZ2VRdWV1ZS5wdXNoKG1lc3NhZ2VPYmopO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiBuZXcgbWVzc2FnZSBpcyBnZW5lcmljIGFuZCB3ZSdyZSBpbiBjb29sZG93biBvciBzaG93aW5nIGFub3RoZXIgZ2VuZXJpYywgc2tpcCBpdFxyXG4gICAgICAgIGlmIChtZXNzYWdlVHlwZSA9PT0gXCJnZW5lcmljXCIpIHtcclxuICAgICAgICAgICAgLy8gRG9uJ3QgcXVldWUgZ2VuZXJpYyBtZXNzYWdlc1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBHZXQgYSByYW5kb20gdW5zaG93biBnZW5lcmljIG1lc3NhZ2VcclxuICAgIGNvbnN0IGdldFJhbmRvbUdlbmVyaWNNZXNzYWdlID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICghd2luZG93LmJ1bmRsZVByb2dyZXNzTWVzc2FnZXMgfHwgIXdpbmRvdy5idW5kbGVQcm9ncmVzc01lc3NhZ2VzLmdlbmVyaWMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1bnNob3duTWVzc2FnZXMgPSBPYmplY3QuZW50cmllcyh3aW5kb3cuYnVuZGxlUHJvZ3Jlc3NNZXNzYWdlcy5nZW5lcmljKVxyXG4gICAgICAgICAgICAuZmlsdGVyKChba2V5LCBkYXRhXSkgPT4gIWRhdGEuc2hvd24pO1xyXG5cclxuICAgICAgICBpZiAodW5zaG93bk1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gQWxsIG1lc3NhZ2VzIGhhdmUgYmVlbiBzaG93blxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUGljayByYW5kb20gbWVzc2FnZSBmcm9tIHVuc2hvd25cclxuICAgICAgICBjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHVuc2hvd25NZXNzYWdlcy5sZW5ndGgpO1xyXG4gICAgICAgIGNvbnN0IFtrZXksIGRhdGFdID0gdW5zaG93bk1lc3NhZ2VzW3JhbmRvbUluZGV4XTtcclxuXHJcbiAgICAgICAgLy8gTWFyayBhcyBzaG93biAtIGRvbid0IGRvIHRoaXMgaGVyZSwgYmVjYXVzZSBpZiBpdCBjYW4ndCBiZSBzaG93biwgaXQncyBnZXR0aW5nIG1hcmtlZCBvZmYgdW5uZWNlc3NhcmlseVxyXG4gICAgICAgIC8vd2luZG93LmJ1bmRsZVByb2dyZXNzTWVzc2FnZXMuZ2VuZXJpY1trZXldLnNob3duID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGRhdGEubWVzc2FnZTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFuZGxlUHJvZ3Jlc3NOb3RpZmljYXRpb25zID0gKHR5cGUpID0+IHtcclxuICAgICAgICBpZiAodHlwZSA9PSBcInByZWxvYWRcIikge1xyXG5cclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5idW5kbGVQcm9ncmVzc01lc3NhZ2VzLnNpZ25pZmljYW50LnJldHVybikge1xyXG4gICAgICAgICAgICAgICAgcXVldWVQcm9ncmVzc01lc3NhZ2Uod2luZG93LmJ1bmRsZVByb2dyZXNzTWVzc2FnZXMuc2lnbmlmaWNhbnQucmV0dXJuLCBcInNpZ25pZmljYW50XCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1lbHNlIGlmICh0eXBlID09IFwiZWRpdFwiKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAod2luZG93LmJ1bmRsZVByb2dyZXNzTWVzc2FnZXMuc2lnbmlmaWNhbnQuZWRpdCkge1xyXG4gICAgICAgICAgICAgICAgcXVldWVQcm9ncmVzc01lc3NhZ2Uod2luZG93LmJ1bmRsZVByb2dyZXNzTWVzc2FnZXMuc2lnbmlmaWNhbnQuZWRpdCwgXCJzaWduaWZpY2FudFwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJzdGFydFwiKSB7XHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cuYnVuZGxlUHJvZ3Jlc3NNZXNzYWdlcy5zaWduaWZpY2FudC5zdGFydCkge1xyXG4gICAgICAgICAgICAgICAgcXVldWVQcm9ncmVzc01lc3NhZ2Uod2luZG93LmJ1bmRsZVByb2dyZXNzTWVzc2FnZXMuc2lnbmlmaWNhbnQuc3RhcnQsIFwic2lnbmlmaWNhbnRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJ1cGRhdGVcIikge1xyXG4gICAgICAgICAgICAvLyBDaGVjayBvdXIgc2lnbmlmaWNhbnQgZXZlbnRzIGZpcnN0XHJcbiAgICAgICAgICAgIGxldCBmYWxsYmFja1RvR2VuZXJpYyA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAod2luZG93Lm1pbkl0ZW1zUmVxdWlyZWQgJiYgd2luZG93Lm1pbkl0ZW1zUmVxdWlyZWQgPT0gd2luZG93LmN1cnJlbnRUb3RhbEl0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LmJ1bmRsZVByb2dyZXNzTWVzc2FnZXMuc2lnbmlmaWNhbnQubWluaW11bSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXVlUHJvZ3Jlc3NNZXNzYWdlKHdpbmRvdy5idW5kbGVQcm9ncmVzc01lc3NhZ2VzLnNpZ25pZmljYW50Lm1pbmltdW0sIFwic2lnbmlmaWNhbnRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tUb0dlbmVyaWMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5tYXhJdGVtc0FsbG93ZWQgJiYgd2luZG93Lm1heEl0ZW1zQWxsb3dlZCA9PSB3aW5kb3cuY3VycmVudFRvdGFsSXRlbXMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuYnVuZGxlUHJvZ3Jlc3NNZXNzYWdlcy5zaWduaWZpY2FudC5tYXhpbXVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVldWVQcm9ncmVzc01lc3NhZ2Uod2luZG93LmJ1bmRsZVByb2dyZXNzTWVzc2FnZXMuc2lnbmlmaWNhbnQubWF4aW11bSwgXCJzaWduaWZpY2FudFwiKTtcclxuICAgICAgICAgICAgICAgICAgICBmYWxsYmFja1RvR2VuZXJpYyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAod2luZG93Lml0ZW1zUmVxdWlyZWRGb3JGcmVlRGVsaXZlcnkgJiYgd2luZG93Lml0ZW1zUmVxdWlyZWRGb3JGcmVlRGVsaXZlcnkgPT0gd2luZG93LmN1cnJlbnRUb3RhbEl0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LmJ1bmRsZVByb2dyZXNzTWVzc2FnZXMuc2lnbmlmaWNhbnQuZGVsaXZlcnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBxdWV1ZVByb2dyZXNzTWVzc2FnZSh3aW5kb3cuYnVuZGxlUHJvZ3Jlc3NNZXNzYWdlcy5zaWduaWZpY2FudC5kZWxpdmVyeSwgXCJzaWduaWZpY2FudFwiKTtcclxuICAgICAgICAgICAgICAgICAgICBmYWxsYmFja1RvR2VuZXJpYyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAod2luZG93Lml0ZW1zUmVxdWlyZWRGb3JEaXNjb3VudCAmJiB3aW5kb3cuaXRlbXNSZXF1aXJlZEZvckRpc2NvdW50ID09IHdpbmRvdy5jdXJyZW50VG90YWxJdGVtcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5idW5kbGVQcm9ncmVzc01lc3NhZ2VzLnNpZ25pZmljYW50LmRpc2NvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcXVldWVQcm9ncmVzc01lc3NhZ2Uod2luZG93LmJ1bmRsZVByb2dyZXNzTWVzc2FnZXMuc2lnbmlmaWNhbnQuZGlzY291bnQsIFwic2lnbmlmaWNhbnRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tUb0dlbmVyaWMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGZhbGxiYWNrVG9HZW5lcmljKSB7XHJcbiAgICAgICAgICAgICAgICAvL0dldCB0aGUgTWVzc2FnZSBhbmQgdGhlIE1lc3NhZ2UgS2V5IC0gd2UgZG9uJ3Qgd2FudCB0byBtYXJrIGEgbWVzc2FnZSBhcyBzaG93biB1bnRpbCBpdCdzIGFjdHVhbGx5IGJlZW4gc2hvd25cclxuICAgICAgICAgICAgICAgIGNvbnN0IGdlbmVyaWNNZXNzYWdlID0gZ2V0UmFuZG9tR2VuZXJpY01lc3NhZ2UoKTtcclxuICAgICAgICAgICAgICAgIGlmIChnZW5lcmljTWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXVlUHJvZ3Jlc3NNZXNzYWdlKGdlbmVyaWNNZXNzYWdlLCBcImdlbmVyaWNcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEV4dHJhY3QgdGhlIHZhcmlvdXMgUHJvZ3Jlc3MgbWVzc2FnZXMgYW5kIGNyZWF0ZSBhIGxpc3Qgb2YgdGhlbVxyXG4gICAgY29uc3Qgc2V0VXBCdW5kbGVQcm9ncmVzc01lc3NhZ2VzID0gKCRidWlsZEFCdW5kbGVUZW1wbGF0ZSkgPT4ge1xyXG4gICAgICAgIGxldCBtZXNzYWdlQXJyID0ge1xyXG4gICAgICAgICAgICBcInNpZ25pZmljYW50XCI6IHt9LFxyXG4gICAgICAgICAgICBcImdlbmVyaWNcIjoge31cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyBNaW5pbXVtLCBNYXhpbXVtLCBGcmVlIGRlbGl2ZXJ5LCBEaXNjb3VudCByZWFjaGVkIG1lc3NhZ2VzIC0gdGhlc2UgY2FuIGFsbCBiZSBvcHRpb25hbFxyXG4gICAgICAgIGlmICgkYnVpbGRBQnVuZGxlVGVtcGxhdGUuZGF0YXNldC5taW5Qcm9ncmVzc01lc3NhZ2UpIHtcclxuICAgICAgICAgICAgbWVzc2FnZUFyci5zaWduaWZpY2FudC5taW5pbXVtID0gJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQubWluUHJvZ3Jlc3NNZXNzYWdlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCRidWlsZEFCdW5kbGVUZW1wbGF0ZS5kYXRhc2V0Lm1heFByb2dyZXNzTWVzc2FnZSkge1xyXG4gICAgICAgICAgICBtZXNzYWdlQXJyLnNpZ25pZmljYW50Lm1heGltdW0gPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUuZGF0YXNldC5tYXhQcm9ncmVzc01lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQuc2tpb0Rpc2NvdW50UHJvZ3Jlc3NNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2VBcnIuc2lnbmlmaWNhbnQuZGlzY291bnQgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUuZGF0YXNldC5za2lvRGlzY291bnRQcm9ncmVzc01lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQuZnJlZURlbGl2ZXJ5UHJvZ3Jlc3NNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2VBcnIuc2lnbmlmaWNhbnQuZGVsaXZlcnkgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUuZGF0YXNldC5mcmVlRGVsaXZlcnlQcm9ncmVzc01lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBPdGhlciBNZXNzYWdpbmc6IFN0YXJ0LCByZXR1cm4gdG8gYW5kIGVkaXQgbWVzc2FnZXNcclxuICAgICAgICBpZiAoJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQubmV3QnVuZGxlUHJvZ3Jlc3NNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2VBcnIuc2lnbmlmaWNhbnQuc3RhcnQgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUuZGF0YXNldC5uZXdCdW5kbGVQcm9ncmVzc01lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQucmV0dXJuQnVuZGxlUHJvZ3Jlc3NNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2VBcnIuc2lnbmlmaWNhbnQucmV0dXJuID0gJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQucmV0dXJuQnVuZGxlUHJvZ3Jlc3NNZXNzYWdlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCRidWlsZEFCdW5kbGVUZW1wbGF0ZS5kYXRhc2V0LmVkaXRCdW5kbGVQcm9ncmVzc01lc3NhZ2UpIHtcclxuICAgICAgICAgICAgbWVzc2FnZUFyci5zaWduaWZpY2FudC5lZGl0ID0gJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQuZWRpdEJ1bmRsZVByb2dyZXNzTWVzc2FnZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEdlbmVyaWMgTWVzc2FnZXNcclxuICAgICAgICBpZiAoJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQuZ2VuZXJpY1Byb2dyZXNzTWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgZ2VuZXJpY01lc3NhZ2VzQXJyID0gJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQuZ2VuZXJpY1Byb2dyZXNzTWVzc2FnZXMuc3BsaXQoXCItLS1cIik7XHJcbiAgICAgICAgICAgIGlmIChnZW5lcmljTWVzc2FnZXNBcnIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZ2VuZXJpY01lc3NhZ2VzQXJyLmZvckVhY2goKG1lc3NhZ2UsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUFyci5nZW5lcmljW2luZGV4XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWVzc2FnZUFycjtcclxuICAgIH07XHJcblxyXG4gICAgLy9QcmV2ZW50IEJhY2tncm91bmQgZnJvbSBzY3JvbGxpbmcgLSB1c2VkIHdoaWxlIGEgcG9wdXAgaXMgb3BlblxyXG4gICAgY29uc3QgbG9ja0JhY2tncm91bmQgPSAoKSA9PiB7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwib3ZlcmZsb3cteS1oaWRkZW5cIik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9JcGhvbmVzIGlnbm9yZSBvdmVyZmxvdyBoaWRkZW4gb24gYm9keSB0YWdzLCBzbyB3ZSBkbyB0aGlzIGluc3RlYWRcclxuICAgICAgICBjb25zdCBzY3JvbGxZID0gd2luZG93LnNjcm9sbFk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS50b3AgPSBgLSR7c2Nyb2xsWX1weGA7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5sZWZ0ID0gJzAnO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucmlnaHQgPSAnMCc7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nOyAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy9VbmxvY2tlZCB0aGUgYmFja2dyb3VuZCAtIGZvciB3aGVuIHBvcHVwcyBnZXQgY2xvc2VkXHJcbiAgICBjb25zdCB1bmxvY2tCYWNrZ3JvdW5kID0gKCkgPT4ge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcIm92ZXJmbG93LXktaGlkZGVuXCIpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IHNjcm9sbFkgPSBNYXRoLmFicyhwYXJzZUludChkb2N1bWVudC5ib2R5LnN0eWxlLnRvcCB8fCAwLCAxMCkpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucG9zaXRpb24gPSBcIlwiO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudG9wID0gXCJcIjtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmxlZnQgPSBcIlwiO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucmlnaHQgPSBcIlwiO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBcIlwiO1xyXG5cclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oe1xyXG4gICAgICAgICAgICAgICAgdG9wOiBzY3JvbGxZLFxyXG4gICAgICAgICAgICAgICAgbGVmdDogMCxcclxuICAgICAgICAgICAgICAgIGJlaGF2aW9yOiBcImluc3RhbnRcIiAvLyBpT1MgMTYrIC0gYXZvaWRzIHRoZSBhd2t3YXJkIGJsaXAganVtcFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICAvL09uIGEgbW9iaWxlLCB0aGlzIGRpdiBuZWVkcyBhIG1heGltdW0gaGVpZ2h0IGNhbGN1bGF0aW5nIHRvIGFsbG93IHRoZSBjb250ZW50IHRvIHNjcm9sbFxyXG4gICAgY29uc3Qgc2V0QnVuZGxlSW5mb01heEhlaWdodCA9ICgkYnVuZGxlSW5mbykgPT4ge1xyXG4gICAgICAgIGlmKCRidW5kbGVJbmZvKXsgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgLy9CdW5kbGUgSW5mbyBIZWFkZXIsIEZvb3RlciwgQm9keSBhcyB3ZSBuZWVkIHRoZW0gZm9yIG1heCBoZWlnaHQgY2FsY3VsYXRpb25cclxuICAgICAgICAgICAgY29uc3QgJGJ1bmRsZUluZm9IZWFkZXIgPSAkYnVuZGxlSW5mby5xdWVyeVNlbGVjdG9yKFwiLmJ1aWxkLWEtYnVuZGxlX19pbmZvLWhlYWRlclwiKTsgXHJcbiAgICAgICAgICAgIGNvbnN0ICRidW5kbGVJbmZvQm9keSA9ICRidW5kbGVJbmZvLnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX2luZm8tYm9keVwiKTtcclxuICAgICAgICAgICAgY29uc3QgJGJ1bmRsZUluZm9Gb290ZXIgPSAkYnVuZGxlSW5mby5xdWVyeVNlbGVjdG9yKFwiLmJ1aWxkLWEtYnVuZGxlX19pbmZvLWZvb3RlclwiKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCRidW5kbGVJbmZvSGVhZGVyICYmICRidW5kbGVJbmZvQm9keSAmJiAkYnVuZGxlSW5mb0Zvb3Rlcil7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGJ1bmRsZUluZm9IZWFkZXJIZWlnaHQgPSAkYnVuZGxlSW5mb0hlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgYnVuZGxlSW5mb0Zvb3RlckhlaWdodCA9ICRidW5kbGVJbmZvRm9vdGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZighKGJ1bmRsZUluZm9IZWFkZXJIZWlnaHQgPiAwICYmIGJ1bmRsZUluZm9Gb290ZXJIZWlnaHQgPjApKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9BdHRlbXB0IHRvIHdhaXQgdW50aWwgdGhlIHBvcHVwIGhhcyBhcHBlYXJlZCBhbmQgZ2V0IHRoZSBoZWlnaHRzXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVJbmZvSGVhZGVySGVpZ2h0ID0gJGJ1bmRsZUluZm9IZWFkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVJbmZvRm9vdGVySGVpZ2h0ID0gJGJ1bmRsZUluZm9Gb290ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0sMjAwKTsgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gd2luZG93LnZpc3VhbFZpZXdwb3J0LmhlaWdodCAtIGJ1bmRsZUluZm9IZWFkZXJIZWlnaHQgLSBidW5kbGVJbmZvRm9vdGVySGVpZ2h0IC0gMjIgLSA0ODtcclxuICAgICAgICAgICAgICAgICRidW5kbGVJbmZvQm9keS5zdHlsZS5tYXhIZWlnaHQgPSBtYXhIZWlnaHQrXCJweFwiOyAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiT25lIC8gYWxsIG9mICRidW5kbGVJbmZvSGVhZGVyLCAkYnVuZGxlSW5mb0JvZHksICRidW5kbGVJbmZvRm9vdGVyIG5vdCBmb3VuZC4gQ291bGQgbm90IGNhbGN1bGF0ZSB0aGUgbWF4IGhlaWdodCBmb3IgJGJ1bmRsZUluZm9Cb2R5XCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCIkYnVuZGxlSW5mbyBub3QgcGFzc2VkIGluLCB1bmFibGUgdG8gY2FsY3VsYXRlIG1heCBoZWlnaHQgb2YgaXQncyBjb250ZW50cy5cIilcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2hvd0Jsb2NrZXJPdmVybGF5ID0gKCRibG9ja2VyT3ZlcmxheSwkYnVuZGxlSW5mbykgPT4ge1xyXG4gICAgICAgIGlmKCRibG9ja2VyT3ZlcmxheSl7XHJcbiAgICAgICAgICAgICRibG9ja2VyT3ZlcmxheS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgICAgICAgICAgLy9CbG9ja2VyIE92ZXJsYXkgY29udGFpbnMgb3VyIFNWRywgZmluZCBpdCBhbmQgYW5pbWF0ZVxyXG4gICAgICAgICAgICBjb25zdCBsb2dvU3ZnID0gJGJsb2NrZXJPdmVybGF5LnF1ZXJ5U2VsZWN0b3IoXCJzdmdcIik7XHJcbiAgICAgICAgICAgIGlmKGxvZ29Tdmcpe1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENlbnRlciB0aGUgU1ZHXHJcbiAgICAgICAgICAgICAgICBnc2FwLnNldChsb2dvU3ZnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAnNTAlJyxcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiAnNTAlJyxcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW46ICc1MCUgNTAlJyxcclxuICAgICAgICAgICAgICAgICAgICB4UGVyY2VudDogLTUwLFxyXG4gICAgICAgICAgICAgICAgICAgIHlQZXJjZW50OiAtNTBcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIHNwaW5uaW5nIGFuaW1hdGlvblxyXG4gICAgICAgICAgICAgICAgdmFyIHRsID0gZ3NhcC50aW1lbGluZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVwZWF0OiAtMSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB0bC50aW1lU2NhbGUoMy40KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdGwudG8obG9nb1N2Zywge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uOiAzNjAsXHJcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDgsXHJcbiAgICAgICAgICAgICAgICAgICAgZWFzZTogJ2JhY2suaW5PdXQoMS4zKSdcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoJGJ1bmRsZUluZm8pe1xyXG4gICAgICAgICAgICAgICAgJGJ1bmRsZUluZm8uc3R5bGUuekluZGV4ID0gMTA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJvdmVybGF5IG5vdCBwcm92aWRlZCB0byBzaG93IGZ1bnRpb24sIGNhbm5vdCBzaG93IGl0XCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBoaWRlQmxvY2tlck92ZXJsYXkgPSAoJGJsb2NrZXJPdmVybGF5LCRidW5kbGVJbmZvKSA9PiB7XHJcbiAgICAgICAgaWYoJGJsb2NrZXJPdmVybGF5KXtcclxuICAgICAgICAgICAgJGJsb2NrZXJPdmVybGF5LmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgIGlmKCRidW5kbGVJbmZvKXtcclxuICAgICAgICAgICAgICAgICRidW5kbGVJbmZvLnN0eWxlLnpJbmRleCA9IFwiXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJvdmVybGF5IG5vdCBwcm92aWRlZCB0byBoaWRlIGZ1bnRpb24sIGNhbm5vdCBzaG93IGl0XCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBoYW5kbGVNb2JpbGVJbmZvT3BlbiA9ICgkYnVuZGxlSW5mbywkYnVuZGxlU3VtbWFyeU92ZXJsYXkpID0+IHtcclxuICAgICAgICBpZigkYnVuZGxlSW5mbyAmJiAkYnVuZGxlU3VtbWFyeU92ZXJsYXkpe1xyXG5cclxuICAgICAgICAgICAgLy9XaGljaCByb3V0ZSBhcmUgd2UgdGFraW5nP1xyXG4gICAgICAgICAgICBpZigkYnVuZGxlSW5mby5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpe1xyXG5cclxuICAgICAgICAgICAgICAgIC8vQ2xvc2luZyB0aGUgbWVudVxyXG4gICAgICAgICAgICAgICAgJGJ1bmRsZUluZm8uY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy9SZW1vdmUgbWF4IGhlaWdodCBmb3JjaW5nXHJcbiAgICAgICAgICAgICAgICBjb25zdCAkYnVuZGxlSW5mb0JvZHkgPSAkYnVuZGxlSW5mby5xdWVyeVNlbGVjdG9yKFwiLmJ1aWxkLWEtYnVuZGxlX19pbmZvLWJvZHlcIik7XHJcbiAgICAgICAgICAgICAgICBpZigkYnVuZGxlSW5mb0JvZHkpe1xyXG4gICAgICAgICAgICAgICAgICAgICRidW5kbGVJbmZvQm9keS5zdHlsZS5tYXhIZWlnaHQgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHVubG9ja0JhY2tncm91bmQoKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcblxyXG4gICAgICAgICAgICAgICAgbG9ja0JhY2tncm91bmQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAkYnVuZGxlSW5mby5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvL1NldCAkYnVuZGxlSW5mbyBNYXggSGVpZ2h0IFByb3BlcnR5XHJcbiAgICAgICAgICAgICAgICBzZXRCdW5kbGVJbmZvTWF4SGVpZ2h0KCRidW5kbGVJbmZvKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgJGJ1bmRsZVN1bW1hcnlPdmVybGF5LmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZ1bmN0aW9uIHJlcXVpcmVzIHRoZSBmb2xsbG93aW5nIHZhcmlhYmxlcyB0byBiZSBzZXQ6ICRidW5kbGVJbmZvIGFuZCAkYnVuZGxlU3VtbWFyeU92ZXJsYXkuIE9uZSBvciBib3RoIGFyZSBub3Qgc2V0LlwiKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmaW5kTmV4dFRocmVzaG9sZCA9ICh0aWVyQ29udGVudEFyciwgdG90YWxJdGVtcykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aWVyQ29udGVudEFycikubWFwKE51bWJlcikuZmlsdGVyKGsgPT4gayA+IHRvdGFsSXRlbXMpLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcclxuICAgICAgICByZXR1cm4ga2V5cy5sZW5ndGggPiAwID8ga2V5c1swXSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RyX3JlcGxhY2VfaW5zdHJ1Y3Rpb25zID0gKHRhcmdldCx0b3RhbEl0ZW1zLHN0cmluZykgPT4ge1xyXG4gICAgICAgIGxldCByZXR1cm5TdHJpbmcgPSBzdHJpbmc7XHJcbiAgICAgICAgY29uc3QgbnVtYmVyUmVwbGFjZSA9IHRhcmdldCAtIHRvdGFsSXRlbXM7XHJcbiAgICAgICAgcmV0dXJuU3RyaW5nID0gcmV0dXJuU3RyaW5nLnJlcGxhY2UoXCJbW251bWJlcl1dXCIsbnVtYmVyUmVwbGFjZSk7XHJcblxyXG4gICAgICAgIGlmKG51bWJlclJlcGxhY2UgPT0gMSl7XHJcbiAgICAgICAgICAgIHJldHVyblN0cmluZyA9IHJldHVyblN0cmluZy5yZXBsYWNlKFwicGFja3NcIiwgXCJwYWNrXCIpLnJlcGxhY2UoXCJzcGFjZXNcIiwgXCJzcGFjZVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXR1cm5TdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmluZE5leHRJbnN0cnVjdGlvbiA9ICh0b3RhbEl0ZW1zLHRpZXJDb250ZW50QXJyKSA9PiB7XHJcblxyXG4gICAgICAgIGxldCBuZXdJbnN0cnVjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZih0b3RhbEl0ZW1zICE9PSBmYWxzZSAmJiB0aWVyQ29udGVudEFycil7XHJcblxyXG4gICAgICAgICAgICBsZXQgbWF4aW11bUFtb3VudCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgLy9JcyB0aGVyZSBhIG1heGltdW0ga2V5PyBBbmQgaWYgc28sIGhhdmUgd2UgaGl0IGl0P1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyh0aWVyQ29udGVudEFycikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZih2YWx1ZS50eXBlID09IFwibWF4aW11bVwiKXtcclxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtQW1vdW50ID0ga2V5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmKG1heGltdW1BbW91bnQgJiYgbWF4aW11bUFtb3VudCA9PSB0b3RhbEl0ZW1zKXtcclxuXHJcbiAgICAgICAgICAgICAgICAvL0dyYWIgdGhlIG1heGltdW0gbWVzc2FnZSwgd2UndmUgaGl0IHRoZSB0YXJnZXRcclxuICAgICAgICAgICAgICAgIG5ld0luc3RydWN0aW9uID0gdGllckNvbnRlbnRBcnJbbWF4aW11bUFtb3VudF0udGFyZ2V0SGl0TWVzc2FnZTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vTm90IHRoZSBtYXhpbXVtIGFtb3VudCwgdGltZSB0byBmaW5kIHRoZSBhcHByb3ByaWF0ZSBtZXNzYWdlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0S2V5ID0gZmluZE5leHRUaHJlc2hvbGQodGllckNvbnRlbnRBcnIsIHRvdGFsSXRlbXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKG5leHRLZXkpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgdXNlU3RhcnRNZXNzYWdlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGllckNvbnRlbnRBcnJbbmV4dEtleV0uc3RhcnRNZXNzYWdlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodG90YWxJdGVtcyA8IDEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlU3RhcnRNZXNzYWdlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYodXNlU3RhcnRNZXNzYWdlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3SW5zdHJ1Y3Rpb24gPSBzdHJfcmVwbGFjZV9pbnN0cnVjdGlvbnMobmV4dEtleSx0b3RhbEl0ZW1zLHRpZXJDb250ZW50QXJyW25leHRLZXldLnN0YXJ0TWVzc2FnZVByZXBlbmQgKyB0aWVyQ29udGVudEFycltuZXh0S2V5XS5zdGFydE1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdJbnN0cnVjdGlvbiA9IHN0cl9yZXBsYWNlX2luc3RydWN0aW9ucyhuZXh0S2V5LHRvdGFsSXRlbXMsdGllckNvbnRlbnRBcnJbbmV4dEtleV0ubGVhZHVwTWVzc2FnZVByZXBlbmQgKyB0aWVyQ29udGVudEFycltuZXh0S2V5XS5sZWFkdXBNZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJ0b3RhbEl0ZW1zIGFuZC9vciB0aWVyQ29udGVudEFyciBub3QgcGFzc2VkIGludG8gZnVuY3Rpb24uIENhbm5vdCBleHRyYWN0IHRoZSBuZXh0IGJpdCBvZiBpbnN0cnVjdGlvbiB0ZXh0LlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBuZXdJbnN0cnVjdGlvbjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy9SZXRyaWV2ZSB0aGUgZGF0YSB2YWx1ZXMgZnJvbSB0aGUgYnVuZGxlIHRlbXBsYXRlIHRvIGJ1aWxkIGEgbGlzdCBvZiBkaWZmZXJlbnQgdGllciB0aHJlc2hvbGRzIGFuZCBtZXNzYWluZ1xyXG4gICAgY29uc3Qgc2V0VXBUaWVyQ29udGVudCA9ICgkYnVpbGRBQnVuZGxlVGVtcGxhdGUpID0+IHtcclxuXHJcbiAgICAgICAgbGV0IHRpZXJDb250ZW50QXJyID0ge307XHJcbiAgICAgICAgaWYoJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlKXtcclxuXHJcbiAgICAgICAgICAgIC8vU2V0IHVwIGFueSBtaW5pbXVtIHZhbHVlIGNvbnRlbnRcclxuICAgICAgICAgICAgaWYoJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQubWluUmVxdWlyZWQpe1xyXG4gICAgICAgICAgICAgICAgdGllckNvbnRlbnRBcnJbJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQubWluUmVxdWlyZWRdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibWluaW11bVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0TWVzc2FnZTogJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQubWluUmVxdWlyZWRTdGFydE1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRNZXNzYWdlUHJlcGVuZDogXCJDaG9vc2UgW1tudW1iZXJdXSBvciBtb3JlIHBhY2tzIFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlYWR1cE1lc3NhZ2U6ICRidWlsZEFCdW5kbGVUZW1wbGF0ZS5kYXRhc2V0Lm1pblJlcXVpcmVkTGVhZHVwTWVzc2FnZSxcclxuICAgICAgICAgICAgICAgICAgICBsZWFkdXBNZXNzYWdlUHJlcGVuZDogXCJBZGQgW1tudW1iZXJdXSBtb3JlIHBhY2tzIFwiXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL1NldCB1cCBhbnkgTWF4aW11bSB2YWx1ZSBjb250ZW50XHJcbiAgICAgICAgICAgIGlmKCRidWlsZEFCdW5kbGVUZW1wbGF0ZS5kYXRhc2V0Lm1heEFsbG93ZWQpe1xyXG4gICAgICAgICAgICAgICAgdGllckNvbnRlbnRBcnJbJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQubWF4QWxsb3dlZF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJtYXhpbXVtXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVhZHVwTWVzc2FnZTogJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQubWF4TGVhZHVwTWVzc2FnZSxcclxuICAgICAgICAgICAgICAgICAgICBsZWFkdXBNZXNzYWdlUHJlcGVuZDogXCJbW251bWJlcl1dIG1vcmUgc3BhY2VzIFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldEhpdE1lc3NhZ2U6ICRidWlsZEFCdW5kbGVUZW1wbGF0ZS5kYXRhc2V0Lm1heEhpdE1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL1NldCB1cCBmcmVlIGRlbGl2ZXJ5IGNvbnRlbnQsIGFzIGxvbmcgYXMgaXQgZG9lc24ndCBzaGFyZSB0aGUgbnVtYmVyIHdpdGggdGhlIHR3byBhYm92ZSAgICAgICAgIFxyXG4gICAgICAgICAgICBpZigkYnVpbGRBQnVuZGxlVGVtcGxhdGUuZGF0YXNldC5mcmVlRGVsaXZlcnlOdW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgaWYoIXRpZXJDb250ZW50QXJyWyRidWlsZEFCdW5kbGVUZW1wbGF0ZS5kYXRhc2V0LmZyZWVEZWxpdmVyeU51bWJlcl0pe1xyXG4gICAgICAgICAgICAgICAgICAgIHRpZXJDb250ZW50QXJyWyRidWlsZEFCdW5kbGVUZW1wbGF0ZS5kYXRhc2V0LmZyZWVEZWxpdmVyeU51bWJlcl0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlYWR1cE1lc3NhZ2U6ICRidWlsZEFCdW5kbGVUZW1wbGF0ZS5kYXRhc2V0LmZyZWVEZWxpdmVyeUxlYWR1cE1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlYWR1cE1lc3NhZ2VQcmVwZW5kOiBcIkFkZCBbW251bWJlcl1dIG1vcmUgcGFja3MgXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL1NldCB1cCBTa2lvIERpc2NvdW50IGNvbnRlbnQsIGFzIGxvbmcgYXMgaXQgZG9lc24ndCBzaGFyZSB0aGUgbnVtYmVyIHdpdGggYW55IG9mIHRoZSBhYm92ZVxyXG4gICAgICAgICAgICBpZigkYnVpbGRBQnVuZGxlVGVtcGxhdGUuZGF0YXNldC5za2lvRGlzY291bnRJdGVtc1JlcXVpcmVkKXtcclxuICAgICAgICAgICAgICAgIGlmKCF0aWVyQ29udGVudEFyclskYnVpbGRBQnVuZGxlVGVtcGxhdGUuZGF0YXNldC5za2lvRGlzY291bnRJdGVtc1JlcXVpcmVkXSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGllckNvbnRlbnRBcnJbJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQuc2tpb0Rpc2NvdW50SXRlbXNSZXF1aXJlZF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlYWR1cE1lc3NhZ2U6ICRidWlsZEFCdW5kbGVUZW1wbGF0ZS5kYXRhc2V0LnNraW9EaXNjb3VudExlYWR1cE1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlYWR1cE1lc3NhZ2VQcmVwZW5kOiBcIkFkZCBbW251bWJlcl1dIG1vcmUgcGFja3MgXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwibm90ICRidWlsZEFCdW5kbGVUZW1wbGF0ZSBwYXNzZWQgaW4sIGNhbm5vdCBzZXQgdXAgcmVxdWlyZWQgdGllciBjb250ZW50XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGllckNvbnRlbnRBcnI7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ2V0TnVtYmVySW5CdW5kbGUgPSAodmFyaWFudElkKSA9PiB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRBbW91bnQgPSAwO1xyXG4gICAgICAgIGlmKHdpbmRvdy5idW5kbGUpe1xyXG4gICAgICAgICAgICBpZih2YXJpYW50SWQpe1xyXG4gICAgICAgICAgICAgICAgaWYod2luZG93LmJ1bmRsZS5pdGVtc1t2YXJpYW50SWRdKXtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50QW1vdW50ID0gYnVuZGxlLml0ZW1zW3ZhcmlhbnRJZF0ucXVhbnRpdHk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJubyB2YXJpYW50IElkIHBhc3NlZCBpbnRvIGZ1bmN0aW9uLiBDYW5ub3QgcmV0cmlldmUgdG90YWwgYWxyZWFkeSBpbiBidW5kbGVcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJidW5kbGUgbm90IHBhc3NlZCBpbnRvIGZ1bmN0aW9uLCB1bmFibGUgdG8gY2hlY2sgaXRcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY3VycmVudEFtb3VudDtcclxuICAgIH1cclxuXHJcbiAgICAvL1RoaXMgZnVuY3Rpb24gZXhpc3RzIHRvIHRvZ2dsZSBiZXR3ZWVuIHRoZSByZWxldmFudCBtZXNzYWdpbmcgb24gdGhlIEFkZCB0byBDYXJ0IGJ1dHRvblxyXG4gICAgY29uc3QgaGFuZGxlQnRuTWVzc2FnaW5nID0gKCRhZGRUb0NhcnQsaXNFbmFibGVkLHRvdGFsSXRlbXMsbWluSXRlbXNSZXF1aXJlZCx0b3RhbFByaWNlLHN1YnNjcmlwdGlvblByaWNlLGFjdGl2ZVB1cmNoYXNlVHlwZSkgPT4ge1xyXG4gICAgICAgIGlmKCRhZGRUb0NhcnQpe1xyXG5cclxuICAgICAgICAgICAgY29uc3QgJHByaWNlQ29udGVudCA9ICRhZGRUb0NhcnQucXVlcnlTZWxlY3RvcihcIi5wcmljZS1jb250ZW50XCIpO1xyXG4gICAgICAgICAgICBjb25zdCAkaW5zdHJ1Y3Rpb25Db250ZW50ID0gJGFkZFRvQ2FydC5xdWVyeVNlbGVjdG9yKFwiLmluc3RydWN0aW9uLWNvbnRlbnRcIik7XHJcblxyXG4gICAgICAgICAgICBpZigkcHJpY2VDb250ZW50ICYmICRpbnN0cnVjdGlvbkNvbnRlbnQpe1xyXG4gICAgICAgICAgICAgICAgaWYoaXNFbmFibGVkKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9VcGRhdGUgc29tZSBjbGFzc2VzIHRoYXQgY29udHJvbCBob3cgdGhlIGJ1dHRvbiBhcHBlYXJzIHdoZW4gaXQncyBmaXJzdCByZW5kZXJlZFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0ICRwcm9kdWN0UHJpY2luZ1dyYXBwZXIgPSAkYWRkVG9DYXJ0LnF1ZXJ5U2VsZWN0b3IoXCIucHJvZHVjdC1wcmljaW5nXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoJHByb2R1Y3RQcmljaW5nV3JhcHBlcil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRwcm9kdWN0UHJpY2luZ1dyYXBwZXIuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHByaWNlQ29udGVudC5jbGFzc0xpc3QucmVtb3ZlKFwianVzdGlmeS1jZW50ZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRwcmljZUNvbnRlbnQuY2xhc3NMaXN0LmFkZChcImp1c3RpZnktYmV0d2VlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vSGlkZSBpbnN0cnVjdGlvbiBjb250ZW50LCByZXZlYWwgcHJpY2UgY29udGVudFxyXG4gICAgICAgICAgICAgICAgICAgICRwcmljZUNvbnRlbnQuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkaW5zdHJ1Y3Rpb25Db250ZW50LmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vQWRkIGluIFByaWNlIGluZm9cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmljZUluZm8gPSAkcHJpY2VDb250ZW50LnF1ZXJ5U2VsZWN0b3IoXCIucHJvZHVjdC1wcmljZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wYXJpc29uUHJpY2VJbmZvID0gJHByaWNlQ29udGVudC5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtY29tcGFyaXNvbi1wcmljZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAvL1dlIG5lZWQgdG8gcmVmbGVjdCBhbiBhY3RpdmUgU2tpbyBkaXNjb3VudCBpbiB0aGUgZmluYWwgcHJpY2VcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZmFjdG9ySW5Ta2lvRGlzY291bnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cuZGlzY291bnRSZXdhcmRQZXJjZW50YWdlICE9PSBmYWxzZSAmJiB3aW5kb3cuaXRlbXNSZXF1aXJlZEZvckRpc2NvdW50ICE9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5pdGVtc1JlcXVpcmVkRm9yRGlzY291bnQgPD0gdG90YWxJdGVtcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3JJblNraW9EaXNjb3VudCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5lZGl0TW9kZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2hhbmdlIHRoZSB0ZXh0IG9mIHRoZSBDVEFcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgJGJ0blRleHQgPSAkcHJpY2VDb250ZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnV0dG9uLXRleHRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRidG5UZXh0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICRlZGl0VGV4dCA9ICRidG5UZXh0LmRhdGFzZXQuZWRpdE9yZGVyVGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRlZGl0VGV4dCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJ0blRleHQudGV4dENvbnRlbnQgPSAkZWRpdFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGFjdGl2ZVB1cmNoYXNlVHlwZSA9PSBcInN1YnNjcmlwdGlvblwiKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaW5hbFByaWNlID0gQ2FyYm9uLk1vbmV5LmZvcm1hdE1vbmV5KHN1YnNjcmlwdGlvblByaWNlLFwiwqN7e2Ftb3VudF9ub190cmFpbGluZ196ZXJvc319XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihmYWN0b3JJblNraW9EaXNjb3VudCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFByaWNlID0gQ2FyYm9uLk1vbmV5LmZvcm1hdE1vbmV5KHN1YnNjcmlwdGlvblByaWNlIC0gKHN1YnNjcmlwdGlvblByaWNlICogKHdpbmRvdy5kaXNjb3VudFJld2FyZFBlcmNlbnRhZ2UgLyAxMDApKSxcIsKje3thbW91bnRfbm9fdHJhaWxpbmdfemVyb3N9fVwiKTsgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJpY2VJbmZvLnRleHRDb250ZW50ID0gZmluYWxQcmljZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgdGhlcmUncyBhIFNraW8gZGlzY291bnQsIHRoZSBcImNvbXBhcmlzb25cIiBwcmljZSBzaG91bGQgcmVmbGVjdCB0aGF0IHRvby4gV2UncmUgY29tcGFyaW5nIHRoZSBTdWJzY3JpcHRpb24gcHJpY2UgdG8gdGhlIE9uZSBUaW1lIFB1cmNoYXNlIFByaWNlIC0gc28gdGhlIG9uZSB0aW1lIHB1cmNoYXNlIHByaWNlIHNob3VsZCBiZSBhY2N1cmF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29tcGFyaXNvblByaWNlID0gdG90YWxQcmljZTsgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZmFjdG9ySW5Ta2lvRGlzY291bnQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyaXNvblByaWNlID0gdG90YWxQcmljZSAtICh0b3RhbFByaWNlICogKHdpbmRvdy5kaXNjb3VudFJld2FyZFBlcmNlbnRhZ2UgLyAxMDApKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyaXNvblByaWNlSW5mby50ZXh0Q29udGVudCA9IENhcmJvbi5Nb25leS5mb3JtYXRNb25leShjb21wYXJpc29uUHJpY2UsXCLCo3t7YW1vdW50X25vX3RyYWlsaW5nX3plcm9zfX1cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmlzb25QcmljZUluZm8uc3R5bGUgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpbmFsUHJpY2UgPSBDYXJib24uTW9uZXkuZm9ybWF0TW9uZXkodG90YWxQcmljZSxcIsKje3thbW91bnRfbm9fdHJhaWxpbmdfemVyb3N9fVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZmFjdG9ySW5Ta2lvRGlzY291bnQpeyAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFByaWNlID0gQ2FyYm9uLk1vbmV5LmZvcm1hdE1vbmV5KHRvdGFsUHJpY2UgLSAodG90YWxQcmljZSAqICh3aW5kb3cuZGlzY291bnRSZXdhcmRQZXJjZW50YWdlIC8gMTAwKSksXCLCo3t7YW1vdW50X25vX3RyYWlsaW5nX3plcm9zfX1cIik7ICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlSW5mby50ZXh0Q29udGVudCA9IGZpbmFsUHJpY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmlzb25QcmljZUluZm8uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL0ZvciBkaXNhYmxlZCBidXR0b25zLCB3ZSB3YW50IHRvIHByb3ZpZGUgdGhlIGluc3RydWN0aW9ucyBmb3IgaG93IG1hbnkgcGFja3MgbmVlZCB0byBiZSBhZGRlZCBpbiBvcmRlciB0byBlbmFibGUgdGhlIGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICRwcmljZUNvbnRlbnQuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkaW5zdHJ1Y3Rpb25Db250ZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IG1pbkl0ZW1zUmVxdWlyZWQgLSB0b3RhbEl0ZW1zO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHJlbWFpbmluZyA8IDIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkaW5zdHJ1Y3Rpb25Db250ZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnV0dG9uLXRleHRcIikudGV4dENvbnRlbnQgPSBcIkFkZCAxIHBhY2sgdG8gY29udGludWVcIjtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJGluc3RydWN0aW9uQ29udGVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1dHRvbi10ZXh0XCIpLnRleHRDb250ZW50ID0gXCJBZGQgXCIrcmVtYWluaW5nK1wiIHBhY2tzIHRvIGNvbnRpbnVlXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJGFkZFRvQ2FydCBidXR0b24gc3RydWN0dXJlIHdhcyBub3QgYXMgZXhwZWN0ZWQuIFVuYWJsZSB0byBwZXJmb3JtIHVwZGF0ZSB0byBtZXNzYWdlIGFzIG9uZSAvIGJvdGggb2YgLnByaWNlLWNvbnRlbnQgLyAuaW5zdHJ1Y3Rpb24tY29udGVudCBhcmUgbm90IHNldFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlVuYWJsZSB0byB1cGRhdGUgJGFkZFRvQ2FydCBidXR0b24gYXMgaXQgaGFzIG5vdCBiZWVuIHBhc3NlZCBpbnRvIHRoZSBmdW5jdGlvbiBjb3JyZWN0bHlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjb25zdCBkaXNhYmxlQnRuID0gKGJ0bikgPT4ge1xyXG4gICAgICAgIGlmKGJ0bil7XHJcbiAgICAgICAgICAgIGJ0bi5jbGFzc0xpc3QuYWRkKFwiZGlzYWJsZWRcIixcImJ1dHRvbi0tZGlzYWJsZWRcIik7XHJcbiAgICAgICAgICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiYnRuIHZhcmlhYmxlIG5vdCBwYXNzZWQgaW4gLSBub3RoaW5nIHRvIGRpc2FibGVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVuYWJsZUJ0biA9IChidG4pID0+IHtcclxuICAgICAgICBpZihidG4pe1xyXG4gICAgICAgICAgICBidG4uY2xhc3NMaXN0LnJlbW92ZShcImRpc2FibGVkXCIsXCJidXR0b24tLWRpc2FibGVkXCIpO1xyXG4gICAgICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJidG4gdmFyaWFibGUgbm90IHBhc3NlZCBpbiAtIG5vdGhpbmcgdG8gZGlzYWJsZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZGlzYWJsZUF0Y0NoYW5nZU1zZyA9ICgkYXRjKSA9PiB7XHJcbiAgICAgICAgZGlzYWJsZUJ0bigkYXRjKTtcclxuICAgICAgICBjb25zdCAkYWRkVG9PcmRlclRleHQgPSAkYXRjLnF1ZXJ5U2VsZWN0b3IoXCIucHJpY2UtY29udGVudCAuYnV0dG9uLXRleHRcIik7XHJcbiAgICAgICAgaWYoJGFkZFRvT3JkZXJUZXh0KXtcclxuICAgICAgICAgICAgJGFkZFRvT3JkZXJUZXh0LnRleHRDb250ZW50ID0gXCJBZGRpbmcuLi5cIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZW5hYmxlQXRjUmVzZXRNc2cgPSAoJGF0YykgPT4ge1xyXG4gICAgICAgIGVuYWJsZUJ0bigkYXRjKTtcclxuICAgICAgICBjb25zdCAkYWRkVG9PcmRlclRleHQgPSAkYXRjLnF1ZXJ5U2VsZWN0b3IoXCIucHJpY2UtY29udGVudCAuYnV0dG9uLXRleHRcIik7XHJcbiAgICAgICAgaWYoJGFkZFRvT3JkZXJUZXh0KXtcclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gJGFkZFRvT3JkZXJUZXh0LmRhdGFzZXQuYWRkVGV4dDtcclxuICAgICAgICAgICAgaWYob3JpZ2luYWxUZXh0KXtcclxuICAgICAgICAgICAgICAgICRhZGRUb09yZGVyVGV4dC50ZXh0Q29udGVudCA9IG9yaWdpbmFsVGV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkaXNhYmxlQWxsUG9wVXBCdG5zID0gKCRxdHlEZWNyZWFzZSwkcXR5SW5jcmVhc2UsJGFkZFRvQnVuZGxlQnV0dG9ucykgPT4ge1xyXG5cclxuICAgICAgICBpZigkcXR5RGVjcmVhc2Upe1xyXG4gICAgICAgICAgICBkaXNhYmxlQnRuKCRxdHlEZWNyZWFzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZigkcXR5SW5jcmVhc2Upe1xyXG4gICAgICAgICAgICBkaXNhYmxlQnRuKCRxdHlJbmNyZWFzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZigkYWRkVG9CdW5kbGVCdXR0b25zLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAkYWRkVG9CdW5kbGVCdXR0b25zLmZvckVhY2goKCRhZGRUb0J1bmRsZUJ1dHRvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZUJ0bigkYWRkVG9CdW5kbGVCdXR0b24pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy9IYW5kbGUgdXBkYXRpbmcgdGhlIHByaWNlcyBvbiB0aGUgcG9wdXAncyBhZGQgdG8gYnVuZGxlIGJ1dHRvbnNcclxuICAgIGNvbnN0IHVwZGF0ZUF0YkJ1dHRvblByaWNpbmcgPSAoJGFkZFRvQnVuZGxlQnV0dG9uLG9yaWdpbmFsUHJpY2Usb3JpZ2luYWxTdWJzY3JpcHRpb25QcmljZSxxdHkpID0+IHtcclxuICAgICAgICBpZihvcmlnaW5hbFByaWNlICYmIHF0eSl7XHJcblxyXG4gICAgICAgICAgICAvL0Vuc3VyZSB0aGUgYnV0dG9uIGZlYXR1cmVzIHRoZSBwcmljZXMgYmVmb3JlIHdlIHRyeSB0byByZXBsYWNlIGFueXRoaW5nXHJcbiAgICAgICAgICAgIGlmKCRhZGRUb0J1bmRsZUJ1dHRvbil7XHJcblxyXG4gICAgICAgICAgICAgICAgLy9Ob3QgZXZlcnkgYnV0dG9uIGRvZXMsIHNvIGRvbid0IHRocm93IGFuIGVycm9yIGlmIG9uZSdzIG5vdCBmb3VuZFxyXG4gICAgICAgICAgICAgICAgY29uc3QgJHByaWNpbmdDb250YWluZXIgPSAkYWRkVG9CdW5kbGVCdXR0b24ucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LXByaWNpbmdcIik7XHJcbiAgICAgICAgICAgICAgICBpZigkcHJpY2luZ0NvbnRhaW5lcil7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vVHdvIHZlcnNpb25zIG9mIHRoZXNlIGJ1dHRvbnNcclxuICAgICAgICAgICAgICAgICAgICBpZigkYWRkVG9CdW5kbGVCdXR0b24uY2xhc3NMaXN0LmNvbnRhaW5zKFwic3ViLWJ0blwiKSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAkY29tcGFyaXNvblByaWNlID0gJHByaWNpbmdDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LWNvbXBhcmlzb24tcHJpY2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRjb21wYXJpc29uUHJpY2UgJiYgb3JpZ2luYWxTdWJzY3JpcHRpb25QcmljZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29tcGFyaXNvblByaWNlLnRleHRDb250ZW50ID0gQ2FyYm9uLk1vbmV5LmZvcm1hdE1vbmV5KG9yaWdpbmFsUHJpY2UgKiBxdHksXCLCo3t7YW1vdW50X25vX3RyYWlsaW5nX3plcm9zfX1cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vZmluZCBhbmQgdXBkYXRlIHRoZSBwcm9kdWN0IHByaWNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICRwcm9kdWN0UHJpY2UgPSAkcHJpY2luZ0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtcHJpY2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRwcm9kdWN0UHJpY2Upe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByb2R1Y3RQcmljZS50ZXh0Q29udGVudCA9IENhcmJvbi5Nb25leS5mb3JtYXRNb25leShvcmlnaW5hbFN1YnNjcmlwdGlvblByaWNlICogcXR5LFwiwqN7e2Ftb3VudF9ub190cmFpbGluZ196ZXJvc319XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicHJvZHVjdCBwcmljZSBzb21laG93IG5vdCBwcmVzZW50IG9uIGEgY3RhIHRoYXQgc2hvdWxkIGJlIG91dHB1dHRpbmcgaXRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoJGFkZFRvQnVuZGxlQnV0dG9uLmNsYXNzTGlzdC5jb250YWlucyhcIm90cC1idG5cIikpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vZmluZCBhbmQgdXBkYXRlIHRoZSBwcm9kdWN0IHByaWNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICRwcm9kdWN0UHJpY2UgPSAkcHJpY2luZ0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtcHJpY2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRwcm9kdWN0UHJpY2Upe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByb2R1Y3RQcmljZS50ZXh0Q29udGVudCA9IENhcmJvbi5Nb25leS5mb3JtYXRNb25leShvcmlnaW5hbFByaWNlICogcXR5LFwiwqN7e2Ftb3VudF9ub190cmFpbGluZ196ZXJvc319XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicHJvZHVjdCBwcmljZSBzb21laG93IG5vdCBwcmVzZW50IG9uIGEgY3RhIHRoYXQgc2hvdWxkIGJlIG91dHB1dHRpbmcgaXRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJidXR0b24gd2Fzbid0IHBhc3NlZCBpbnRvIGZ1bmN0aW9uXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVxdWlyZWQgdmFyaWFibGVzIG5vdCBwYXNzZWQgaW4gLSBjYW5ub3QgdXBkYXRlIGEgcHJpY2Ugd2l0aG91dCBxdWFudGl0eSBhbmQgdGhlIG9yaWdpbmFsIHByaWNlIHZhbHVlc1wiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZGVjb2RlSHRtbEVudGl0aWVzKHN0cikge1xyXG4gICAgICAgIGNvbnN0IHRleHRhcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcclxuICAgICAgICB0ZXh0YXJlYS5pbm5lckhUTUwgPSBzdHI7XHJcbiAgICAgICAgcmV0dXJuIHRleHRhcmVhLnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE9uIE1vYmlsZSwgY2xpY2tpbmcgb24gdGhlIGNhdGVnb3J5IGljb24gd2lsbCBvcGVuIGEgbGlzdCBvZiBjb2xsZWN0aW9uIGNhdGVnb3JpZXNcclxuICAgIGNvbnN0IHNob3dDYXRlZ29yeU1vYmlsZU1lbnUgPSAoJG1vYmlsZUNhdGVnb3JpZXNQb3B1cCwkbW9iaWxlQ2F0ZWdvcmllc1BvcHVwQmcsJGJ1bmRsZUluZm8saGVhZGVyLCRmaWx0ZXJzQnV0dG9uTW9iKSA9PiB7XHJcblxyXG4gICAgICAgIC8vQ2hlY2sgZm9yIHZhcmlhYmxlcyAtIHByZXZlbnQgbGF6eSBmdW5jdGlvbiB1c2FnZVxyXG4gICAgICAgIGlmKCRtb2JpbGVDYXRlZ29yaWVzUG9wdXAgJiYgJG1vYmlsZUNhdGVnb3JpZXNQb3B1cEJnICYmICRidW5kbGVJbmZvICYmIGhlYWRlcil7XHJcblxyXG4gICAgICAgICAgICAvL2xvY2tCYWNrZ3JvdW5kKCk7XHJcblxyXG4gICAgICAgICAgICAkbW9iaWxlQ2F0ZWdvcmllc1BvcHVwLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICRtb2JpbGVDYXRlZ29yaWVzUG9wdXBCZy5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgICAgICAgICAgLy9UZW1wb3JhcmlseSByZW1vdmUgdGhlIFotaW5kZXggb24gdGhlIEluZm8gY29udGFpbmVyIGFzIGl0IHNpdHMgYWJvdmUgb3VyIGJhY2tncm91bmRcclxuICAgICAgICAgICAgJGJ1bmRsZUluZm8uc3R5bGUuekluZGV4ID0gMTA7XHJcbiAgICAgICAgICAgIGhlYWRlci5wYXJlbnRFbGVtZW50LnN0eWxlLnpJbmRleCA9IDEwO1xyXG5cclxuICAgICAgICAgICAgLy9TZXQgdGhlIGJ1dHRvbnMgdG8gbG9vayBsaWtlIHRoZXkncmUgYmVoaW5kIHRoZSBvdmVybGF5IHNpbmNlIHdlIGNhbid0IGFjdHVhbGx5IHB1dCB0aGVtIGJlaGluZCBpdFxyXG4gICAgICAgICAgICBpZigkZmlsdGVyc0J1dHRvbk1vYil7XHJcbiAgICAgICAgICAgICAgICAkZmlsdGVyc0J1dHRvbk1vYi5jbGFzc0xpc3QuYWRkKFwib3BhY2l0eS01MFwiLFwicG9pbnRlci1ldmVudHMtbm9uZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJlcXVpcmVkIHZhcmlhYmxlcyBub3QgcGFzc2VkIGludG8gZnVuY3Rpb24uIEV4cGVjdGVkOiAkbW9iaWxlQ2F0ZWdvcmllc1BvcHVwLCRtb2JpbGVDYXRlZ29yaWVzUG9wdXBCZywkYnVuZGxlSW5mbyxoZWFkZXJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGhpZGVDYXRlZ29yeU1vYmlsZU1lbnUgPSAoJG1vYmlsZUNhdGVnb3JpZXNQb3B1cCwkbW9iaWxlQ2F0ZWdvcmllc1BvcHVwQmcsJGJ1bmRsZUluZm8saGVhZGVyLCRmaWx0ZXJzQnV0dG9uTW9iKSA9PiB7XHJcbiAgICAgICAgaWYoJG1vYmlsZUNhdGVnb3JpZXNQb3B1cCAmJiAkbW9iaWxlQ2F0ZWdvcmllc1BvcHVwQmcgJiYgJGJ1bmRsZUluZm8gJiYgaGVhZGVyKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vdW5sb2NrQmFja2dyb3VuZCgpO1xyXG5cclxuICAgICAgICAgICAgJG1vYmlsZUNhdGVnb3JpZXNQb3B1cC5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAkbW9iaWxlQ2F0ZWdvcmllc1BvcHVwQmcuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcclxuXHJcbiAgICAgICAgICAgIC8vUmV0dXJuIFogaW5kZXhlcyB0byBub3JtYWwgXHJcbiAgICAgICAgICAgICRidW5kbGVJbmZvLnN0eWxlLnpJbmRleCA9IFwiXCI7XHJcbiAgICAgICAgICAgIGhlYWRlci5wYXJlbnRFbGVtZW50LnN0eWxlLnpJbmRleCA9IFwiXCI7XHJcblxyXG4gICAgICAgICAgICBpZigkZmlsdGVyc0J1dHRvbk1vYil7XHJcbiAgICAgICAgICAgICAgICAkZmlsdGVyc0J1dHRvbk1vYi5jbGFzc0xpc3QucmVtb3ZlKFwib3BhY2l0eS01MFwiLFwicG9pbnRlci1ldmVudHMtbm9uZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzY3JvbGxUb1RhcmdldENvbGxlY3Rpb24gPSAoZSwkY29sbGVjdGlvbnMsJG5hdixoZWFkZXIpID0+IHtcclxuICAgICAgICBpZihlICYmICRjb2xsZWN0aW9ucyAmJiAkbmF2ICYmIGhlYWRlcil7ICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKGUudGFyZ2V0LmRhdGFzZXQudGFyZ2V0KXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbFRhcmdldCA9IGUudGFyZ2V0LmRhdGFzZXQudGFyZ2V0O1xyXG4gICAgICAgICAgICAgICAgJGNvbGxlY3Rpb25zLmZvckVhY2goKCRjb2xsZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoJGNvbGxlY3Rpb24uaWQgPT0gc2Nyb2xsVGFyZ2V0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5hdkhlaWdodCA9ICRuYXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhuYXZIZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRQb3NpdGlvbiA9ICRjb2xsZWN0aW9uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIHdpbmRvdy5zY3JvbGxZIC0gbmF2SGVpZ2h0IC0gMjA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiB0YXJnZXRQb3NpdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7ICAgICBcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImVsZW1lbnQgdGhhdCB3YXMgY2xpY2tlZCBvbiBkb2VzIG5vdCBjb250YWluIGEgZGF0YS10YXJnZXQuIFVuYWJsZSB0byBzY3JvbGwgdG8gaXQuIGUudGFyZ2V0LmRhdGFzZXQgPSBcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlLnRhcmdldC5kYXRhc2V0KTtcclxuICAgICAgICAgICAgfSAgICAgICAgXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiT25lIG9yIG1vcmUgcmVxdWlyZWQgdmFyaWFibGVzIG5vdCBwYXNzZWQgaW4uIEV4cGVjdGVkIGFsbCBvZiB0aGUgZm9sbG93aW5nOiBlLCRjb2xsZWN0aW9ucywkbmF2LGhlYWRlclwiKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzY3JvbGxUb1RhcmdldENvbGxlY3Rpb25BbmRDbG9zZUNhdGVnb3JpZXMgPSAoZSwkY29sbGVjdGlvbnMsJG5hdixoZWFkZXIsJG1vYmlsZUNhdGVnb3JpZXNQb3B1cCwkbW9iaWxlQ2F0ZWdvcmllc1BvcHVwQmcsJGJ1bmRsZUluZm8sJGZpbHRlcnNCdXR0b25Nb2IpID0+IHsgICAgICAgIFxyXG4gICAgICAgIGlmKCRtb2JpbGVDYXRlZ29yaWVzUG9wdXAgJiYgJG1vYmlsZUNhdGVnb3JpZXNQb3B1cEJnICYmICRidW5kbGVJbmZvICYmIGhlYWRlcil7XHJcbiAgICAgICAgICAgIGhpZGVDYXRlZ29yeU1vYmlsZU1lbnUoJG1vYmlsZUNhdGVnb3JpZXNQb3B1cCwkbW9iaWxlQ2F0ZWdvcmllc1BvcHVwQmcsJGJ1bmRsZUluZm8saGVhZGVyLCRmaWx0ZXJzQnV0dG9uTW9iKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoZSAmJiAkY29sbGVjdGlvbnMgJiYgJG5hdiAmJiBoZWFkZXIpe1xyXG4gICAgICAgICAgICBzY3JvbGxUb1RhcmdldENvbGxlY3Rpb24oZSwkY29sbGVjdGlvbnMsJG5hdixoZWFkZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzaG93RmlsdGVyRHJvcGRvd24gPSAoJGZpbHRlcnNEcm9wRG93biwkZmlsdGVyc1BvcHVwQmcsJGJ1bmRsZUluZm8saGVhZGVyLCRtb2JpbGVDYXRlZ29yaWVzQnV0dG9uKSA9PiB7XHJcbiAgICAgICAgaWYoJGZpbHRlcnNEcm9wRG93biwkZmlsdGVyc1BvcHVwQmcsJGJ1bmRsZUluZm8saGVhZGVyKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKHdpbmRvdy5pbm5lcldpZHRoIDwgMTAyNCl7XHJcbiAgICAgICAgICAgICAgICAvL2xvY2tCYWNrZ3JvdW5kKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICRmaWx0ZXJzRHJvcERvd24uY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgJGZpbHRlcnNQb3B1cEJnLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgJGJ1bmRsZUluZm8uc3R5bGUuekluZGV4ID0gMTA7XHJcbiAgICAgICAgICAgIGhlYWRlci5wYXJlbnRFbGVtZW50LnN0eWxlLnpJbmRleCA9IDEwO1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIG1hdGNoaW5nIGRpc2hlcyBjb3VudCBvbiBvcGVuXHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nQ2FyZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYnVpbGQtYS1idW5kbGVfX2NvbGxlY3Rpb24tY29udGFpbmVyIC5idWlsZC1hLWJ1bmRsZV9fcHJvZHVjdC1jYXJkOm5vdCguaGlkZGVuKScpO1xyXG4gICAgICAgICAgICBjb25zdCB0b3RhbE1hdGNoaW5nRGlzaGVzID0gbWF0Y2hpbmdDYXJkcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5iYWItbWF0Y2hpbmctZGlzaGVzLWNvdW50JykuZm9yRWFjaCgoZWwpID0+IHtcclxuICAgICAgICAgICAgICAgIGVsLnRleHRDb250ZW50ID0gdG90YWxNYXRjaGluZ0Rpc2hlcztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5iYWItbWF0Y2hpbmctZGlzaGVzLXRleHQnKS5mb3JFYWNoKChlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZWwudGV4dENvbnRlbnQgPSB0b3RhbE1hdGNoaW5nRGlzaGVzID09PSAxID8gJ0Rpc2ggaW4gZmlsdGVycycgOiAnRGlzaGVzIGluIGZpbHRlcnMnO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCRtb2JpbGVDYXRlZ29yaWVzQnV0dG9uKXtcclxuICAgICAgICAgICAgICAgICRtb2JpbGVDYXRlZ29yaWVzQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJvcGFjaXR5LTUwXCIsXCJwb2ludGVyLWV2ZW50cy1ub25lXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVxdWlyZWQgdmFyaWFibGVzIG5vdCBwYXNzZWQgaW50byB0aGUgZnVuY3Rpb246IEV4cGVjdGVkIHRoZSBmb2xsb3dpbmcgLSAkZmlsdGVyc0Ryb3BEb3duLCRmaWx0ZXJzUG9wdXBCZywkYnVuZGxlSW5mbyxoZWFkZXJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGhpZGVGaWx0ZXJEcm9wZG93biA9ICgkZmlsdGVyc0Ryb3BEb3duLCRmaWx0ZXJzUG9wdXBCZywkYnVuZGxlSW5mbyxoZWFkZXIsJG1vYmlsZUNhdGVnb3JpZXNCdXR0b24pID0+IHsgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIC8vdW5sb2NrQmFja2dyb3VuZCgpO1xyXG5cclxuICAgICAgICAkZmlsdGVyc0Ryb3BEb3duLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgJGZpbHRlcnNQb3B1cEJnLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgICAgIC8vUmV0dXJuIFogaW5kZXhlcyB0byBub3JtYWwgLSBldmVuIHRob3VnaCB3ZSBkb24ndCBkbyBpdCBvbiBkZXNrdG9wLCB5b3UgY291bGQgc3dhcCBzY3JlZW4gc2l6ZXMgaGFsZiB3YXlcclxuICAgICAgICAkYnVuZGxlSW5mby5zdHlsZS56SW5kZXggPSBcIlwiO1xyXG4gICAgICAgIGhlYWRlci5wYXJlbnRFbGVtZW50LnN0eWxlLnpJbmRleCA9IFwiXCI7XHJcblxyXG4gICAgICAgIGlmKCRtb2JpbGVDYXRlZ29yaWVzQnV0dG9uKXtcclxuICAgICAgICAgICAgJG1vYmlsZUNhdGVnb3JpZXNCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcIm9wYWNpdHktNTBcIixcInBvaW50ZXItZXZlbnRzLW5vbmVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vU2hvdyAvIEhpZGUgdGhlIDMgZGlmZmVyZW50IGNvbnRlbnQgYmFzZWQgcG9wLXVwcy5cclxuICAgIGNvbnN0IHNob3dDb250ZW50UG9wdXAgPSAoJHRhcmdldFBvcHVwLCRidW5kbGVJbmZvKSA9PiB7XHJcbiAgICAgICAgaWYoJHRhcmdldFBvcHVwKXsgICAgXHJcbiAgICAgICAgICAgIGxvY2tCYWNrZ3JvdW5kKCk7XHJcbiAgICAgICAgICAgICRidW5kbGVJbmZvLnN0eWxlLnpJbmRleCA9IDEwO1xyXG4gICAgICAgICAgICAkdGFyZ2V0UG9wdXAuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJubyAkdGFyZ2V0UG9wdXAgYXJndW1lbnQgcHJvdmlkZWQsIHVuYWJsZSB0byBvcGVuIFBvcCB1cFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaGlkZUNvbnRlbnRQb3B1cCA9ICgkdGFyZ2V0UG9wdXAsJGJ1bmRsZUluZm8pID0+IHtcclxuICAgICAgICBpZigkdGFyZ2V0UG9wdXApe1xyXG4gICAgICAgICAgICB1bmxvY2tCYWNrZ3JvdW5kKCk7XHJcbiAgICAgICAgICAgICRidW5kbGVJbmZvLnN0eWxlLnpJbmRleCA9IFwiXCI7XHJcbiAgICAgICAgICAgICR0YXJnZXRQb3B1cC5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIm5vICR0YXJnZXRQb3B1cCBhcmd1bWVudCBwcm92aWRlZCwgdW5hYmxlIHRvIGNsb3NlIFBvcCB1cFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTeW5jIHRoZSBleHRlcm5hbCBhY3RpdmUtZmlsdGVyIGNvdW50IGJhZGdlIG9uIHRoZSBmaWx0ZXIgYnV0dG9uXHJcbiAgICAgKiBhbmQgdGhlIGV4dGVybmFsIHBpbGxzIGJhciAoYmVsb3cgdGhlIGJ1dHRvbikgd2l0aCB0aGUgY3VycmVudFxyXG4gICAgICogYWN0aXZlIGZpbHRlciBzdGF0ZSBpbnNpZGUgYSBnaXZlbiBkcm9wZG93bi5cclxuICAgICAqL1xyXG4gICAgY29uc3Qgc3luY0ZpbHRlckJhZGdlQW5kUGlsbHMgPSAoJGZpbHRlcnNEcm9wRG93biwgJGZpbHRlck9wdGlvbnMsICRjb2xsZWN0aW9ucywgJGZpbHRlcnNQb3B1cEJnLCAkYnVuZGxlSW5mbywgaGVhZGVyLCAkbW9iaWxlQ2F0ZWdvcmllc0J1dHRvbikgPT4ge1xyXG4gICAgICAgIGlmICghJGZpbHRlcnNEcm9wRG93bikgcmV0dXJuO1xyXG5cclxuICAgICAgICAvLyBXYWxrIHVwIHRvIHRoZSBzdGlja3kgbmF2IHdyYXBwZXIgdGhhdCBjb250YWlucyBib3RoIHRoZSBidXR0b24gYW5kIHRoZSBwaWxscyBiYXJcclxuICAgICAgICBjb25zdCAkbmF2UGFyZW50ID0gJGZpbHRlcnNEcm9wRG93bi5jbG9zZXN0KCcuYnVpbGQtYS1idW5kbGVfX3N0aWNreS1uYXYsIC5idWlsZC1hLWJ1bmRsZV9fc3RpY2t5LW5hdi1tb2JpbGUnKTtcclxuICAgICAgICBpZiAoISRuYXZQYXJlbnQpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgJGNvdW50QmFkZ2UgPSAkbmF2UGFyZW50LnF1ZXJ5U2VsZWN0b3IoJy5iYWItZmlsdGVyLWJ0bi1jb3VudCcpO1xyXG4gICAgICAgIGNvbnN0ICRwaWxsc0JhciAgID0gJG5hdlBhcmVudC5xdWVyeVNlbGVjdG9yKCcuYmFiLWFjdGl2ZS1waWxscy1iYXInKTtcclxuXHJcbiAgICAgICAgY29uc3QgYWxsT3B0aW9ucyAgICA9IEFycmF5LmZyb20oJGZpbHRlck9wdGlvbnMpO1xyXG4gICAgICAgIGNvbnN0IGFjdGl2ZU9wdGlvbnMgPSBhbGxPcHRpb25zLmZpbHRlcihvcHQgPT4gb3B0LmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykpO1xyXG5cclxuICAgICAgICAvLyAtLS0gU3BpY2UtYXdhcmU6IHNwaWNlIGlzIFwibmV1dHJhbFwiIHdoZW4gYWxsIDMgT1IgMCBhcmUgYWN0aXZlIC0tLVxyXG4gICAgICAgIGNvbnN0IGFsbFNwaWNlT3B0aW9ucyAgICA9IGFsbE9wdGlvbnMuZmlsdGVyKG8gPT4gby5kYXRhc2V0LmZpbHRlclR5cGUgPT09ICdzcGljZScpO1xyXG4gICAgICAgIGNvbnN0IGFjdGl2ZVNwaWNlT3B0aW9ucyA9IGFjdGl2ZU9wdGlvbnMuZmlsdGVyKG8gPT4gby5kYXRhc2V0LmZpbHRlclR5cGUgPT09ICdzcGljZScpO1xyXG4gICAgICAgIGNvbnN0IHNwaWNlSXNGaWx0ZXJpbmcgICA9IGFjdGl2ZVNwaWNlT3B0aW9ucy5sZW5ndGggPiAwICYmIGFjdGl2ZVNwaWNlT3B0aW9ucy5sZW5ndGggPCBhbGxTcGljZU9wdGlvbnMubGVuZ3RoO1xyXG5cclxuICAgICAgICAvLyBPbmx5IGNvdW50L3Nob3cgb3B0aW9ucyB0aGF0IGFyZSBhY3R1YWxseSBmaWx0ZXJpbmcgc29tZXRoaW5nXHJcbiAgICAgICAgY29uc3QgbWVhbmluZ2Z1bEFjdGl2ZSA9IGFjdGl2ZU9wdGlvbnMuZmlsdGVyKG8gPT4ge1xyXG4gICAgICAgICAgICBpZiAoby5kYXRhc2V0LmZpbHRlclR5cGUgPT09ICdzcGljZScpIHJldHVybiBzcGljZUlzRmlsdGVyaW5nO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gLS0tIFVwZGF0ZSBjb3VudCBiYWRnZSAtLS1cclxuICAgICAgICBpZiAoJGNvdW50QmFkZ2UpIHtcclxuICAgICAgICAgICAgaWYgKGFjdGl2ZU9wdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgJGNvdW50QmFkZ2UudGV4dENvbnRlbnQgPSBgKCR7YWN0aXZlT3B0aW9ucy5sZW5ndGh9KWA7XHJcbiAgICAgICAgICAgICAgICAkY291bnRCYWRnZS5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICRjb3VudEJhZGdlLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyAtLS0gVXBkYXRlIFNlbGVjdGVkIGZpbHRlcnMgY291bnQgaW5zaWRlIGRyb3Bkb3duIC0tLVxyXG4gICAgICAgIGlmICgkZmlsdGVyc0Ryb3BEb3duKSB7XHJcbiAgICAgICAgICAgIGNvbnN0ICRzZWxlY3RlZENvdW50ID0gJGZpbHRlcnNEcm9wRG93bi5xdWVyeVNlbGVjdG9yKCcuYmFiLXNlbGVjdGVkLWZpbHRlcnMtY291bnQnKTtcclxuICAgICAgICAgICAgaWYgKCRzZWxlY3RlZENvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAkc2VsZWN0ZWRDb3VudC50ZXh0Q29udGVudCA9IGAoJHthY3RpdmVPcHRpb25zLmxlbmd0aH0pYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gLS0tIFVwZGF0ZSBleHRlcm5hbCBwaWxscyBiYXIgLS0tXHJcbiAgICAgICAgaWYgKCRwaWxsc0Jhcikge1xyXG4gICAgICAgICAgICAkcGlsbHNCYXIuaW5uZXJIVE1MID0gJyc7XHJcblxyXG4gICAgICAgICAgICBpZiAoYWN0aXZlT3B0aW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICRwaWxsc0Jhci5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcclxuICAgICAgICAgICAgICAgICRwaWxsc0Jhci5jbGFzc0xpc3QucmVtb3ZlKCdmbGV4Jyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICRwaWxsc0Jhci5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcclxuICAgICAgICAgICAgJHBpbGxzQmFyLmNsYXNzTGlzdC5hZGQoJ2ZsZXgnKTtcclxuXHJcbiAgICAgICAgICAgIGFjdGl2ZU9wdGlvbnMuZm9yRWFjaCgob3B0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbEVsID0gb3B0LnF1ZXJ5U2VsZWN0b3IoJy5jaGVja2JveC1sYWJlbCcpIHx8IG9wdC5xdWVyeVNlbGVjdG9yKCdzcGFuOmxhc3QtY2hpbGQnKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlclRleHQgPSBsYWJlbEVsID8gbGFiZWxFbC50ZXh0Q29udGVudC50cmltKCkgOiAob3B0LmRhdGFzZXQuZmlsdGVyT3B0aW9uIHx8ICcnKTtcclxuICAgICAgICAgICAgICAgIGlmICghZmlsdGVyVGV4dCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHBpbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICAgICAgICAgICAgICBwaWxsLnN0eWxlLmNzc1RleHQgPSAnZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweDtiYWNrZ3JvdW5kOiNGRkY2RTU7Ym9yZGVyOjFweCBzb2xpZCAjRkRFNjhBO2JvcmRlci1yYWRpdXM6OTk5OXB4O3BhZGRpbmc6NHB4IDEycHg7Zm9udC1zaXplOjEycHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMyMzIzMjM7d2hpdGUtc3BhY2U6bm93cmFwOyc7XHJcbiAgICAgICAgICAgICAgICBwaWxsLmlubmVySFRNTCA9IGA8c3Bhbj4ke2ZpbHRlclRleHR9PC9zcGFuPjxzcGFuIHN0eWxlPVwiY3Vyc29yOnBvaW50ZXI7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMyMzIzMjM7Zm9udC1zaXplOjExcHg7XCIgY2xhc3M9XCJiYWItcGlsbC1yZW1vdmVcIiBhcmlhLWxhYmVsPVwiUmVtb3ZlIGZpbHRlclwiPuKclTwvc3Bhbj5gO1xyXG5cclxuICAgICAgICAgICAgICAgIHBpbGwucXVlcnlTZWxlY3RvcignLmJhYi1waWxsLXJlbW92ZScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHQuY2xhc3NMaXN0LmNvbnRhaW5zKCdhY3RpdmUnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHQuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHQuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckNvbGxlY3Rpb25SZXN1bHRzKCRmaWx0ZXJPcHRpb25zLCAkY29sbGVjdGlvbnMsICRmaWx0ZXJzRHJvcERvd24sICRmaWx0ZXJzUG9wdXBCZywgJGJ1bmRsZUluZm8sIGhlYWRlciwgJG1vYmlsZUNhdGVnb3JpZXNCdXR0b24sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3luY0ZpbHRlckJhZGdlQW5kUGlsbHMoJGZpbHRlcnNEcm9wRG93biwgJGZpbHRlck9wdGlvbnMsICRjb2xsZWN0aW9ucywgJGZpbHRlcnNQb3B1cEJnLCAkYnVuZGxlSW5mbywgaGVhZGVyLCAkbW9iaWxlQ2F0ZWdvcmllc0J1dHRvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgJHBpbGxzQmFyLmFwcGVuZENoaWxkKHBpbGwpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlc2V0IGJ1dHRvblxyXG4gICAgICAgICAgICBjb25zdCBjbGVhckJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xyXG4gICAgICAgICAgICBjbGVhckJ0bi50eXBlID0gJ2J1dHRvbic7XHJcbiAgICAgICAgICAgIGNsZWFyQnRuLnN0eWxlLmNzc1RleHQgPSAnZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjRweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjojRjU5RTBCO2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6NHB4IDZweDsnO1xyXG4gICAgICAgICAgICBjbGVhckJ0bi5pbm5lckhUTUwgPSBgPHNwYW4+UmVzZXQ8L3NwYW4+PHN2ZyB3aWR0aD1cIjEzXCIgaGVpZ2h0PVwiMTNcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIjRjU5RTBCXCIgc3Ryb2tlLXdpZHRoPVwiMi41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PHBhdGggZD1cIk0zIDEyYTkgOSAwIDEgMCA5LTkgOS43NSA5Ljc1IDAgMCAwLTYuNzQgMi43NEwzIDhcIi8+PHBhdGggZD1cIk0zIDN2NWg1XCIvPjwvc3ZnPmA7XHJcbiAgICAgICAgICAgIGNsZWFyQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIEFycmF5LmZyb20oJGZpbHRlck9wdGlvbnMpLmZvckVhY2gob3B0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBvcHQuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGZpbHRlckNvbGxlY3Rpb25SZXN1bHRzKCRmaWx0ZXJPcHRpb25zLCAkY29sbGVjdGlvbnMsICRmaWx0ZXJzRHJvcERvd24sICRmaWx0ZXJzUG9wdXBCZywgJGJ1bmRsZUluZm8sIGhlYWRlciwgJG1vYmlsZUNhdGVnb3JpZXNCdXR0b24sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHN5bmNGaWx0ZXJCYWRnZUFuZFBpbGxzKCRmaWx0ZXJzRHJvcERvd24sICRmaWx0ZXJPcHRpb25zLCAkY29sbGVjdGlvbnMsICRmaWx0ZXJzUG9wdXBCZywgJGJ1bmRsZUluZm8sIGhlYWRlciwgJG1vYmlsZUNhdGVnb3JpZXNCdXR0b24pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgJHBpbGxzQmFyLmFwcGVuZENoaWxkKGNsZWFyQnRuKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgICBjb25zdCBmaWx0ZXJDb2xsZWN0aW9uUmVzdWx0cyA9ICgkZmlsdGVyT3B0aW9ucywkY29sbGVjdGlvbnMsJGZpbHRlcnNEcm9wRG93biwkZmlsdGVyc1BvcHVwQmcsJGJ1bmRsZUluZm8saGVhZGVyLCRtb2JpbGVDYXRlZ29yaWVzQnV0dG9uLCBjbG9zZU1lbnUgPSB0cnVlKSA9PiB7XHJcblxyXG4gICAgICAgIGxldCBhY3RpdmVTcGljZUZpbHRlcnMgPSBbXTtcclxuICAgICAgICBsZXQgYWN0aXZlUHJlZmVyZW5jZUZpbHRlcnMgPSBbXTtcclxuICAgICAgICBsZXQgYWN0aXZlQWxsZXJnZW5FeGNsdXNpb25zID0gW107XHJcblxyXG4gICAgICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgbGlzdCBvZiBmaWx0ZXJzIHRvIGZpbmQgYWN0aXZlIG9wdGlvbnMgYnkgY2F0ZWdvcnlcclxuICAgICAgICAkZmlsdGVyT3B0aW9ucy5mb3JFYWNoKCgkZmlsdGVyT3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGlmKCRmaWx0ZXJPcHRpb24uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpICYmICRmaWx0ZXJPcHRpb24uZGF0YXNldC5maWx0ZXJPcHRpb24pe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsID0gJGZpbHRlck9wdGlvbi5kYXRhc2V0LmZpbHRlck9wdGlvbi50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSAkZmlsdGVyT3B0aW9uLmRhdGFzZXQuZmlsdGVyVHlwZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gXCJzcGljZVwiIHx8IFtcIm5vIHNwaWNlXCIsIFwibGlnaHRseSBzcGljZWRcIiwgXCJzcGljeVwiXS5pbmNsdWRlcyh2YWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlU3BpY2VGaWx0ZXJzLnB1c2godmFsKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJpbmdyZWRpZW50XCIgfHwgW1wibWlsa1wiLCBcImNlcmVhbHNcIiwgXCJudXRzXCIsIFwicGVhbnV0c1wiLCBcInNveWFcIiwgXCJmaXNoXCIsIFwibXVzdGFyZFwiLCBcInN1bHBoaXRlc1wiLCBcImNlbGVyeVwiLCBcImNoaWxsaVwiLCBcInRvbWF0b1wiLCBcImFkZGVkX3N1Z2FyXCJdLmluY2x1ZGVzKHZhbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBhY3RpdmVBbGxlcmdlbkV4Y2x1c2lvbnMucHVzaCh2YWwpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhY3RpdmVQcmVmZXJlbmNlRmlsdGVycy5wdXNoKHZhbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgbGlzdCBvZiBwcm9kdWN0cyBhbmQgZXZhbHVhdGUgbWF0Y2ggY3JpdGVyaWFcclxuICAgICAgICAkY29sbGVjdGlvbnMuZm9yRWFjaCgoJGNvbGxlY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgY29uc3QgJGNvbGxlY3Rpb25Qcm9kdWN0cyA9ICRjb2xsZWN0aW9uLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYnVpbGQtYS1idW5kbGVfX3Byb2R1Y3QtY2FyZFwiKTtcclxuICAgICAgICAgICAgY29uc3QgJG5vTWF0Y2hlc1RleHQgPSAkY29sbGVjdGlvbi5xdWVyeVNlbGVjdG9yKFwiLmJ1aWxkLWEtYnVuZGxlX19jb2xsZWN0aW9uLW5vLWZpbHRlci1tYXRjaGVzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCRjb2xsZWN0aW9uUHJvZHVjdHMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICBsZXQgbnVtYmVyVGhhdERvTm90TWF0Y2ggPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgICRjb2xsZWN0aW9uUHJvZHVjdHMuZm9yRWFjaCgoJGNvbGxlY3Rpb25Qcm9kdWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1hdGNoZXMgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyAxLiBTcGljZSBMZXZlbCAoV2hpdGVsaXN0OiBJZiBhbnkgc3BpY2Ugb3B0aW9ucyBhcmUgdGlja2VkLCBwcm9kdWN0IHNwaWNlIGxldmVsIG11c3QgbWF0Y2ggb25lIG9mIHRoZW0pXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVNwaWNlRmlsdGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RTcGljZSA9ICgkY29sbGVjdGlvblByb2R1Y3QuZGF0YXNldC5zcGljZUxldmVsIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFjdGl2ZVNwaWNlRmlsdGVycy5pbmNsdWRlcyhwcm9kdWN0U3BpY2UpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIDIuIFByZWZlcmVuY2VzIChUYWdzIEluY2x1c2lvbjogUHJvZHVjdCB0YWdzIG11c3QgY29udGFpbiBBTEwgYWN0aXZlIHByZWZlcmVuY2UgdGFncyAtIEFORCBsb2dpYylcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMgJiYgYWN0aXZlUHJlZmVyZW5jZUZpbHRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9kdWN0VGFnc1JhdyA9ICRjb2xsZWN0aW9uUHJvZHVjdC5kYXRhc2V0LnByb2R1Y3RUYWdzIHx8IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RUYWdzID0gcHJvZHVjdFRhZ3NSYXcudG9Mb3dlckNhc2UoKS5zcGxpdChcIixcIikubWFwKHQgPT4gdC50cmltKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGVzQWxsUHJlZnMgPSBhY3RpdmVQcmVmZXJlbmNlRmlsdGVycy5ldmVyeShwcmVmID0+IHByb2R1Y3RUYWdzLmluY2x1ZGVzKHByZWYpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXRjaGVzQWxsUHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gMy4gQWxsZXJnZW4gRXhjbHVzaW9ucyAoRXhjbHVzaW9uOiBJZiBjdXN0b21lciBzZWxlY3RzIFwiV2l0aG91dCBzb3kqXCIgKHNveWEpLCBoaWRlIHByb2R1Y3QgaWYgaXQgY29udGFpbnMgc295YSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcyAmJiBhY3RpdmVBbGxlcmdlbkV4Y2x1c2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250YWluc0FsbGVyZ2Vuc1JhdyA9ICRjb2xsZWN0aW9uUHJvZHVjdC5kYXRhc2V0LmNvbnRhaW5zQWxsZXJnZW5zIHx8IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5zQWxsZXJnZW5zID0gY29udGFpbnNBbGxlcmdlbnNSYXcudG9Mb3dlckNhc2UoKS5zcGxpdChcIixcIikubWFwKGEgPT4gYS50cmltKCkpLmZpbHRlcihCb29sZWFuKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RUYWdzUmF3ID0gJGNvbGxlY3Rpb25Qcm9kdWN0LmRhdGFzZXQucHJvZHVjdFRhZ3MgfHwgXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdFRhZ3MgPSBwcm9kdWN0VGFnc1Jhdy50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiLFwiKS5tYXAodCA9PiB0LnRyaW0oKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVBbGxlcmdlbkV4Y2x1c2lvbnMuZm9yRWFjaChleGNsdWRlZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNXaXRob3V0VGFnID0gcHJvZHVjdFRhZ3Muc29tZSh0ID0+IHQgPT09IGB3aXRob3V0ICR7ZXhjbHVkZWR9YCB8fCB0ID09PSBgd2l0aG91dCAke2V4Y2x1ZGVkfSpgIHx8IHQgPT09IGBubyAke2V4Y2x1ZGVkfWApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNXaXRob3V0VGFnICYmIGNvbnRhaW5zQWxsZXJnZW5zLmluY2x1ZGVzKGV4Y2x1ZGVkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkY29sbGVjdGlvblByb2R1Y3QuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkY29sbGVjdGlvblByb2R1Y3QuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyVGhhdERvTm90TWF0Y2grKztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBWaXN1YWwgcmVsb2FkIGFuaW1hdGlvbiBmZWVkYmFjayBvbiBtYXRjaGluZyBkaXNoIGltYWdlc1xyXG4gICAgICAgICAgICAgICAgY29uc3QgJG1hdGNoaW5nSW1hZ2VzID0gJGNvbGxlY3Rpb24ucXVlcnlTZWxlY3RvckFsbCgnLmJ1aWxkLWEtYnVuZGxlX19wcm9kdWN0LWNhcmQ6bm90KC5oaWRkZW4pIC5idWlsZC1hLWJ1bmRsZV9fcHJvZHVjdC1jYXJkX19pbWFnZS1jb250YWluZXInKTtcclxuICAgICAgICAgICAgICAgIGlmICgkbWF0Y2hpbmdJbWFnZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZ3NhcCAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ3NhcC5mcm9tVG8oJG1hdGNoaW5nSW1hZ2VzLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgb3BhY2l0eTogMC4zLCBzY2FsZTogMC45NiB9LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgb3BhY2l0eTogMSwgc2NhbGU6IDEsIGR1cmF0aW9uOiAwLjMsIGVhc2U6IFwicG93ZXIyLm91dFwiLCBzdGFnZ2VyOiAwLjAyLCBvdmVyd3JpdGU6IFwiYXV0b1wiIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2hpbmdJbWFnZXMuZm9yRWFjaChpbWdFbCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdFbC5zdHlsZS50cmFuc2l0aW9uID0gJ29wYWNpdHkgMC4ycyBlYXNlLCB0cmFuc2Zvcm0gMC4ycyBlYXNlJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0VsLnN0eWxlLm9wYWNpdHkgPSAnMC4zJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0VsLnN0eWxlLnRyYW5zZm9ybSA9ICdzY2FsZSgwLjk2KSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdFbC5zdHlsZS5vcGFjaXR5ID0gJzEnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0VsLnN0eWxlLnRyYW5zZm9ybSA9ICdzY2FsZSgxKSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoJG5vTWF0Y2hlc1RleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyVGhhdERvTm90TWF0Y2ggPT09ICRjb2xsZWN0aW9uUHJvZHVjdHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRub01hdGNoZXNUZXh0LmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJG5vTWF0Y2hlc1RleHQuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgbGl2ZSBtYXRjaGluZyBkaXNoZXMgY291bnQgaW4gZHJvcGRvd24gc3RpY2t5IGhlYWRlclxyXG4gICAgICAgIGNvbnN0IG1hdGNoaW5nQ2FyZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYnVpbGQtYS1idW5kbGVfX2NvbGxlY3Rpb24tY29udGFpbmVyIC5idWlsZC1hLWJ1bmRsZV9fcHJvZHVjdC1jYXJkOm5vdCguaGlkZGVuKScpO1xyXG4gICAgICAgIGNvbnN0IHRvdGFsTWF0Y2hpbmdEaXNoZXMgPSBtYXRjaGluZ0NhcmRzLmxlbmd0aDtcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYmFiLW1hdGNoaW5nLWRpc2hlcy1jb3VudCcpLmZvckVhY2goKGVsKSA9PiB7XHJcbiAgICAgICAgICAgIGVsLnRleHRDb250ZW50ID0gdG90YWxNYXRjaGluZ0Rpc2hlcztcclxuICAgICAgICB9KTtcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYmFiLW1hdGNoaW5nLWRpc2hlcy10ZXh0JykuZm9yRWFjaCgoZWwpID0+IHtcclxuICAgICAgICAgICAgZWwudGV4dENvbnRlbnQgPSB0b3RhbE1hdGNoaW5nRGlzaGVzID09PSAxID8gJ0Rpc2ggaW4gZmlsdGVycycgOiAnRGlzaGVzIGluIGZpbHRlcnMnO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAvLyBIaWRlIEZpbHRlciBNZW51IG9ubHkgd2hlbiBjbG9zZU1lbnUgaXMgdHJ1ZSAoZS5nLiBjbGlja2luZyBBcHBseSlcclxuICAgICAgICBpZiAoY2xvc2VNZW51ICYmICRmaWx0ZXJzRHJvcERvd24pIHtcclxuICAgICAgICAgICAgaGlkZUZpbHRlckRyb3Bkb3duKCRmaWx0ZXJzRHJvcERvd24sJGZpbHRlcnNQb3B1cEJnLCRidW5kbGVJbmZvLGhlYWRlciwkbW9iaWxlQ2F0ZWdvcmllc0J1dHRvbik7IFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG5cclxuICAgIC8qXHJcbiAgICAgICAgTG9hZCBQcm9kdWN0IFBvcCB1cCAtIGNsaWNraW5nIG9uIGEgcHJvZHVjdCBpbWFnZSB3aXRoaW4gYSBjb2xsZWN0aW9uIGNhcmQgdHJpZ2dlcnMgdGhlIHBvcCB1cCB0byBhcHBlYXJcclxuICAgICAgICBCdXQsIHRoZXJlJ3MgYSBwb3B1cCBwZXIgcHJvZHVjdCBhbmQgaXQncyBuZXN0ZWQgd2l0aGluIHRoZSBjYXJkLiBUaGlzIGNhdXNlcyBaaW5kZXggaXNzdWVzIHdpdGggbmVzdGluZy5cclxuICAgICAgICBTbyBleHRyYWN0IHRoZSBjb250ZW50IGFuZCBwdXQgaXQgaW50byB0aGUgUG9wIHVwIGhvbGRlclxyXG4gICAgICAgIFRvZ2dsZSBrbm93biBaaW5kZXggaXNzdWVzIHRvIGVuc3VyZSB0aGlzIHNpdHMgYXQgdGhlIGZyb250XHJcbiAgICAqL1xyXG5cclxuICAgIGNvbnN0IGxvYWRQcm9kdWN0UG9wdXAgPSAoJGNhcmQsICRwcm9kdWN0UG9wdXBDb250YWluZXIpID0+IHtcclxuICAgICAgICBpZigkY2FyZCAmJiAkcHJvZHVjdFBvcHVwQ29udGFpbmVyKXtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0ICRjb250YWluZXJDb250ZW50SG9sZGVyID0gJHByb2R1Y3RQb3B1cENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmJ1aWxkLWEtYnVuZGxlX19wcm9kdWN0LWNhcmRfX3BvcHVwLWNvbnRlbnQtY29udGFpbmVyXCIpO1xyXG4gICAgICAgICAgICBjb25zdCAkcG9wdXBDb250ZW50cyA9ICRjYXJkLnF1ZXJ5U2VsZWN0b3IoXCIucHJvZHVjdC1wb3B1cC1jb250ZW50c1wiKTsgXHJcblxyXG4gICAgICAgICAgICBpZigkY29udGFpbmVyQ29udGVudEhvbGRlciAmJiAkcG9wdXBDb250ZW50cyl7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgbG9ja0JhY2tncm91bmQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvL0luamVjdCBvdXIgY29udGVudCBpbnRvIHRoZSBjb250YWluZXJcclxuICAgICAgICAgICAgICAgICRjb250YWluZXJDb250ZW50SG9sZGVyLmFwcGVuZENoaWxkKCRwb3B1cENvbnRlbnRzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvL01ha2UgdGhlIHBvcHVwIGFjdGl2ZVxyXG4gICAgICAgICAgICAgICAgJHByb2R1Y3RQb3B1cENvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICRwb3B1cENvbnRlbnRzLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJjb3VsZCBub3QgZmluZCBwb3B1cCBjb250ZW50cyBmb3IgdGhpcyBwcm9kdWN0IGFuZC9vciBjb3VsZCBub3QgZmluZCB0aGUgb3ZlcmxheSBjb250ZW50IGhvbGRlclwiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiJGNhcmQgYW5kL29yICRwcm9kdWN0UG9wdXBDb250YWluZXIgbm90IHBhc3NlZCBpbnRvIGZ1bmN0aW9uLiBDYW5ub3Qgb3BlbiByZWxldmFudCBwb3B1cFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy9DbG9zZSB0aGUgUG9wIHVwIGFuZCBwdXQgdGhlIFByb2R1Y3QgQ29udGVudCBCYWNrIHdoZXJlIGl0IGJlbG9uZ3MgaW4gdGhlIHN0cnVjdHVyZVxyXG4gICAgY29uc3QgY2xvc2VQcm9kdWN0UG9wVXAgPSAoJHByb2R1Y3RQb3B1cENvbnRhaW5lciwkYnVpbGRBQnVuZGxlVGVtcGxhdGUpID0+IHtcclxuICAgICAgICBpZigkcHJvZHVjdFBvcHVwQ29udGFpbmVyICYmICRidWlsZEFCdW5kbGVUZW1wbGF0ZSl7XHJcblxyXG4gICAgICAgICAgICAvL0dldCB0aGUgY29udGVudHMgb2YgdGhlIHBvcHVwLCBncmFiIHRoZSBpZCwgZmluZCB3aGVyZSBpdCBiZWxvbmdzIGluIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIHBhZ2VcclxuICAgICAgICAgICAgY29uc3QgJHBvcHVwQ29udGVudHMgPSAkcHJvZHVjdFBvcHVwQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIucHJvZHVjdC1wb3B1cC1jb250ZW50c1wiKTtcclxuICAgICAgICAgICAgaWYoJHBvcHVwQ29udGVudHMpe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0SWQgPSAkcG9wdXBDb250ZW50cy5kYXRhc2V0LnByb2R1Y3RJZDtcclxuICAgICAgICAgICAgICAgIGlmKHRhcmdldElkKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9maW5kIHRoZSBwcm9kdWN0IGNhcmQgdGhhdCB3ZSBhcmUgcmV0dXJuaW5nIHRoaXMgdG8gLSBjYXRlciBmb3IgdGhlcmUgYmVpbmcgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIHNhbWUgcHJvZHVjdCBqdXN0IGxpc3RlZCBpbiBkaWZmZXJlbnQgY29sbGVjdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCAkdGFyZ2V0UHJvZHVjdENhcmRzID0gJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLnF1ZXJ5U2VsZWN0b3JBbGwoYC5idWlsZC1hLWJ1bmRsZV9fcHJvZHVjdC1jYXJkW2RhdGEtcHJvZHVjdC1pZD1cIiR7dGFyZ2V0SWR9XCJdYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoJHRhcmdldFByb2R1Y3RDYXJkcy5sZW5ndGggPiAwKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXRQcm9kdWN0Q2FyZHMuZm9yRWFjaCgoJHRhcmdldFByb2R1Y3RDYXJkKSA9PntcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0xvb2sgZm9yIHBvcCB1cCBjb250ZW50cywgaWYgdGhpcyBvbmUgZG9lc24ndCBoYXZlIGEgbWF0Y2gsIHRoaXMgaXMgd2hlcmUgd2UgbmVlZCB0byByZXR1cm4gdGhlIGNvbnRlbnQgdG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICR0YXJnZXRQcm9kdWN0Q2FyZFBvcHVwQ29udGVudCA9ICR0YXJnZXRQcm9kdWN0Q2FyZC5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtcG9wdXAtY29udGVudHNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighJHRhcmdldFByb2R1Y3RDYXJkUG9wdXBDb250ZW50KXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByb2R1Y3RQb3B1cENvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmxvY2tCYWNrZ3JvdW5kKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwb3B1cENvbnRlbnRzLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXRQcm9kdWN0Q2FyZC5hcHBlbmRDaGlsZCgkcG9wdXBDb250ZW50cyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYnJlYWsgdGhlIGxvb3BcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlVuYWJsZSB0byBmaW5kIGEgY29sbGVjdGlvbiBjYXJkIHRvIHJldHVybiB0aGlzIHBvcHVwIGNvbnRlbnQgdG8uICR0YXJnZXRQcm9kdWN0Q2FyZHMgZm91bmQgemVybyByZXN1bHRzXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJ3aGVuIGNsb3NpbmcgdGhlIHByb2R1Y3QgcG9wdXAsIGNvdWxkIG5vdCBmaW5kIHRoZSBJRCBvZiB0aGUgdmFyaWFudCB3ZSdyZSB0cnlpbmcgdG8gY2xvc2UuIFVuYWJsZSB0byByZXR1cm4gdG8gaXRzIG9yaWdpbmFsIHBvc2l0aW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwid2hlbiBjbG9zaW5nIHRoZSBwcm9kdWN0IHBvcCB1cCAtIHNvbWVob3cgJHBvcHVwQ29udGVudHMgd2FzIG5vdCBwcmVzZW50LlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIiRwcm9kdWN0UG9wdXBDb250YWluZXIgYW5kL29yICRidWlsZEFCdW5kbGVUZW1wbGF0ZSBub3QgcGFzc2VkIGludG8gZnVuY3Rpb24gLSB1bmFibGUgdG8gY2xvc2UgdGhlIHBvcHVwIGFuZCByZXR1cm4gY29udGVudCB0byBpdCdzIG9yaWdpbmFsIGxvY2F0aW9uXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy9TY29wZSB3aWRlIGRlZmluaXRpb25zXHJcbiAgICBjb25zdCBoZWFkZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaGVhZGVyLmhlYWRlclwiKTtcclxuICAgIGNvbnN0ICRwb3B1cEJhY2tncm91bmQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1aWxkLWEtYnVuZGxlX19wcm9kdWN0LWNhcmRfX3BvcHVwLWJhY2tncm91bmRcIik7XHJcbiAgICBjb25zdCAkYnVpbGRBQnVuZGxlVGVtcGxhdGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1aWxkLWEtYnVuZGxlLXRlbXBsYXRlXCIpO1xyXG4gICAgY29uc3QgJGJ1bmRsZVByb2R1Y3RDYXJkcyA9ICRidWlsZEFCdW5kbGVUZW1wbGF0ZT8ucXVlcnlTZWxlY3RvckFsbChcIi5idWlsZC1hLWJ1bmRsZV9fcHJvZHVjdC1jYXJkXCIpO1xyXG5cclxuICAgIGxldCAkc2tpb0Rpc2NvdW50QW1vdW50ID0gZmFsc2U7XHJcbiAgICBpZigkYnVpbGRBQnVuZGxlVGVtcGxhdGUpe1xyXG4gICAgICAgICRza2lvRGlzY291bnRBbW91bnQgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUuZGF0YXNldC5zZWxsaW5nUGxhbkRpc2NvdW50O1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvL1RoZSBCdWlsZCBhIEJ1bmRsZSBJbmZvIGNvbnRhaW5lciBpcyByZXF1aXJlZCB0aHJvdWdob3V0IHZhcmlvdXMgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBzaG93IC8gaGlkZSB0aGluZ3MgYnVpbGQtYS1idW5kbGVfX2luZm8tY29udGFpbmVyIFxyXG4gICAgY29uc3QgJGJ1bmRsZUluZm8gPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGU/LnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX2luZm8tY29udGFpbmVyXCIpO1xyXG5cclxuICAgIGlmICgkYnVpbGRBQnVuZGxlVGVtcGxhdGUgJiYgJGJ1bmRsZUluZm8pe1xyXG5cclxuICAgICAgICAvL1NldCB1cCBvdXIgSW5zdHJ1Y3Rpb24gbWVzc2FnZVxyXG4gICAgICAgIGxldCB0aWVyQ29udGVudEFyciA9IHNldFVwVGllckNvbnRlbnQoJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlKTtcclxuXHJcbiAgICAgICAgbGV0IGFjdGl2ZVBsYW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1aWxkLWEtYnVuZGxlX19zZWxsaW5nLXBsYW4uYWN0aXZlXCIpO1xyXG5cclxuICAgICAgICBpZiAoYWN0aXZlUGxhbikge1xyXG4gICAgICAgICAgICBhY3RpdmVQbGFuID0gYWN0aXZlUGxhbi5kYXRhc2V0LnBsYW47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL1dlJ3JlIG5vdCB1c2luZyB0aGlzLCB0aGlzIGlzIGlycmVsZXZhbnRcclxuICAgICAgICBsZXQgaXNEeW5hbWljQnVuZGxlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGlzU3RhdGljQnVuZGxlID0gZmFsc2U7XHJcblxyXG5cclxuICAgICAgICBpZiAoJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQuc3RhdGljID09ICd0cnVlJyl7XHJcbiAgICAgICAgICAgIGlzU3RhdGljQnVuZGxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgkYnVpbGRBQnVuZGxlVGVtcGxhdGUuZGF0YXNldC5keW5hbWljID09ICd0cnVlJyl7XHJcbiAgICAgICAgICAgIGlzRHluYW1pY0J1bmRsZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcHVyY2hhc2UtdHlwZSBjb250cm9scyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8vXHJcblxyXG4gICAgICAgIGNvbnN0ICRwdXJjaGFzZVR5cGVzQ29udGFpbmVyID0gJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX3B1cmNoYXNlLXR5cGVzXCIpO1xyXG5cclxuICAgICAgICBpZiAoJHB1cmNoYXNlVHlwZXNDb250YWluZXIpe1xyXG4gICAgICAgICAgICBjb25zdCAkcHVyY2hhc2VUeXBlcyA9ICRwdXJjaGFzZVR5cGVzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYnVpbGQtYS1idW5kbGVfX3B1cmNoYXNlLXR5cGVcIik7XHJcbiAgICAgICAgICAgIGNvbnN0ICRtb2JpbGVQdXJjaGFzZVR5cGVTdHJpbmdDb250YWluZXIgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUucXVlcnlTZWxlY3RvcihcIi5idWlsZC1hLWJ1bmRsZV9faW5mby1oZWFkZXItbW9iaWxlLXB1cmNoYXNlLXR5cGUtc3RyaW5nXCIpO1xyXG4gICAgICAgICAgICBjb25zdCAkb3RwU3RyaW5nID0gJG1vYmlsZVB1cmNoYXNlVHlwZVN0cmluZ0NvbnRhaW5lcj8ucXVlcnlTZWxlY3RvcihcIi5wdXJjaGFzZS10eXBlLXN0cmluZy5wdXJjaGFzZS10eXBlLXN0cmluZy1vdHBcIik7XHJcbiAgICAgICAgICAgIGNvbnN0ICRzdWJzY3JpcHRpb25TdHJpbmcgPSAkbW9iaWxlUHVyY2hhc2VUeXBlU3RyaW5nQ29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKFwiLnB1cmNoYXNlLXR5cGUtc3RyaW5nLnB1cmNoYXNlLXR5cGUtc3RyaW5nLXN1YnNjcmlwdGlvblwiKTsgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgaWYoJHB1cmNoYXNlVHlwZXMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICAkcHVyY2hhc2VUeXBlcy5mb3JFYWNoKCgkcHVyY2hhc2VUeXBlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHB1cmNoYXNlVHlwZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoZSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoISRwdXJjaGFzZVR5cGUuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwdXJjaGFzZVR5cGVzLmZvckVhY2goKCRwdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRwdCA9PSAkcHVyY2hhc2VUeXBlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHB0LmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwdC5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vVXBkYXRlIHRoZSBzdHJpbmcgdGhhdCdzIGluIHRoZSBtb2JpbGUgdmVyc2lvbiBvZiB0aGUgYnVuZGxlIGluZm8gY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihlLnRhcmdldC5kYXRhc2V0LnR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRvdHBTdHJpbmcgJiYgJHN1YnNjcmlwdGlvblN0cmluZyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGUudGFyZ2V0LmRhdGFzZXQudHlwZSA9PSBcInN1YnNjcmlwdGlvblwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdHBTdHJpbmcuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdWJzY3JpcHRpb25TdHJpbmcuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb3RwU3RyaW5nLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3Vic2NyaXB0aW9uU3RyaW5nLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9nbyB0aHJvdWdoIHRoZSBidW5kbGUgY2FyZHMgdXBkYXRpbmcgdGhlIHByaWNlIGluZm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRidW5kbGVQcm9kdWN0Q2FyZHMubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidW5kbGVQcm9kdWN0Q2FyZHMuZm9yRWFjaCgoJGJ1bmRsZVByb2R1Y3RDYXJkKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAkc3ViUHJpY2UgPSAkYnVuZGxlUHJvZHVjdENhcmQucXVlcnlTZWxlY3RvcihcIi5zdWJzY3JpcHRpb24tcHJpY2UtaW5mb1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgJG90cFByaWNlID0gJGJ1bmRsZVByb2R1Y3RDYXJkLnF1ZXJ5U2VsZWN0b3IoXCIub3RwLXByaWNlLWluZm9cIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkc3ViUHJpY2UgJiYgJG90cFByaWNlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRwdXJjaGFzZVR5cGUuZGF0YXNldC50eXBlID09IFwic3Vic2NyaXB0aW9uXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdWJQcmljZS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdHBQcmljZS5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN1YlByaWNlLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG90cFByaWNlLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9GaW5kIGFuZCB0b2dnbGUgdGhlIGNvcnJlY3QgYnV0dG9ucyBmb3IgRGVza3RvcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAkZGVza3RvcFN1YnNCdG4gPSAkYnVuZGxlUHJvZHVjdENhcmQucXVlcnlTZWxlY3RvcihcIi5zdWItYnRuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAkZGVza3RvcE90cEJ0biA9ICRidW5kbGVQcm9kdWN0Q2FyZC5xdWVyeVNlbGVjdG9yKFwiLm90cC1idG5cIik7IFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGRlc2t0b3BTdWJzQnRuICYmICRkZXNrdG9wT3RwQnRuKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkcHVyY2hhc2VUeXBlLmRhdGFzZXQudHlwZSA9PSBcInN1YnNjcmlwdGlvblwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGVza3RvcFN1YnNCdG4uY2xhc3NMaXN0LnJlbW92ZShcImRlc2t0b3A6aGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkZXNrdG9wU3Vic0J0bi5jbGFzc0xpc3QuYWRkKFwiZGVza3RvcDpmbGV4XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGVza3RvcE90cEJ0bi5jbGFzc0xpc3QuYWRkKFwiZGVza3RvcDpoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRlc2t0b3BPdHBCdG4uY2xhc3NMaXN0LnJlbW92ZShcImRlc2t0b3A6ZmxleFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkZXNrdG9wU3Vic0J0bi5jbGFzc0xpc3QuYWRkKFwiZGVza3RvcDpoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRlc2t0b3BTdWJzQnRuLmNsYXNzTGlzdC5yZW1vdmUoXCJkZXNrdG9wOmZsZXhcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkZXNrdG9wT3RwQnRuLmNsYXNzTGlzdC5yZW1vdmUoXCJkZXNrdG9wOmhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGVza3RvcE90cEJ0bi5jbGFzc0xpc3QuYWRkKFwiZGVza3RvcDpmbGV4XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1RvZ2dsZSB0aGUgcGVyIG1lYWwgY29zdCBiYXNlZCBvbiBhY3RpdmUgcHVyY2hhc2UgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICRzdWJzTWVhbENvc3QgPSAkYnVuZGxlUHJvZHVjdENhcmQucXVlcnlTZWxlY3RvcihcIi5zdWItbWVhbC1jb3N0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAkb3RwTWVhbENvc3QgPSAkYnVuZGxlUHJvZHVjdENhcmQucXVlcnlTZWxlY3RvcihcIi5vdHAtbWVhbC1jb3N0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkc3Vic01lYWxDb3N0ICYmICRvdHBNZWFsQ29zdCl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHB1cmNoYXNlVHlwZS5kYXRhc2V0LnR5cGUgPT0gXCJzdWJzY3JpcHRpb25cIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN1YnNNZWFsQ29zdC5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdHBNZWFsQ29zdC5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN1YnNNZWFsQ29zdC5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvdHBNZWFsQ29zdC5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUJ1bmRsZVVJKFwicHVyY2hhc2VfdHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTsgXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENvbGxlY3Rpb24gU3RpY2t5IE5hdiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xyXG4gICAgICAgIC8vIHNldCBlbGVtZW50c1xyXG4gICAgICAgIGNvbnN0ICRuYXYgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUucXVlcnlTZWxlY3RvcihcIi5idWlsZC1hLWJ1bmRsZV9fc3RpY2t5LW5hdlwiKTtcclxuICAgICAgICBjb25zdCAkc3RpY2t5TmF2TW9iaWxlID0gJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX3N0aWNreS1uYXYtbW9iaWxlXCIpO1xyXG4gICAgICAgIGNvbnN0ICRjb2xsZWN0aW9uQ29udGFpbmVyID0gJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX2NvbGxlY3Rpb24tY29udGFpbmVyXCIpO1xyXG5cclxuICAgICAgICBpZiAoJG5hdiAmJiAkY29sbGVjdGlvbkNvbnRhaW5lciAmJiAkc3RpY2t5TmF2TW9iaWxlKXtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0ICRuYXZUcmlnZ2VycyA9ICRidWlsZEFCdW5kbGVUZW1wbGF0ZS5xdWVyeVNlbGVjdG9yQWxsKFwiLmJ1aWxkLWEtYnVuZGxlX19zdGlja3ktbmF2LXRyaWdnZXJcIik7XHJcbiAgICAgICAgICAgIGNvbnN0ICRjb2xsZWN0aW9ucyA9ICRjb2xsZWN0aW9uQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYnVpbGQtYS1idW5kbGVfX2NvbGxlY3Rpb25cIik7XHJcblxyXG4gICAgICAgICAgICAvL0dldCB0aGVzZSB0d28gZWFybHkgc28gdGhhdCB0aGV5J3JlIGluIHNjb3BlIG9mIHRoZSBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIHRvZ2dsZSB0aGVtXHJcbiAgICAgICAgICAgIGNvbnN0ICRtb2JpbGVDYXRlZ29yaWVzQnV0dG9uID0gJHN0aWNreU5hdk1vYmlsZS5xdWVyeVNlbGVjdG9yKFwiI21vYmlsZS1jYXRlZ29yaWVzLWJ1dHRvblwiKTtcclxuICAgICAgICAgICAgY29uc3QgJGZpbHRlcnNCdXR0b25Nb2IgPSAkc3RpY2t5TmF2TW9iaWxlLnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX3N0aWNreS1uYXYtZmlsdGVyc1wiKTtcclxuXHJcblxyXG4gICAgICAgICAgICBpZigkbmF2VHJpZ2dlcnMubGVuZ3RoID4gMCAmJiAkY29sbGVjdGlvbnMubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQmluZCB0aGUgQ2F0ZWdvcmllcyBEcm9wZG93biAvIFBvcCB1cCBvbiBtb2JpbGVcclxuICAgICAgICAgICAgICAgIGNvbnN0ICRtb2JpbGVDYXRlZ29yaWVzUG9wdXAgPSAkc3RpY2t5TmF2TW9iaWxlLnF1ZXJ5U2VsZWN0b3IoXCIubW9iaWxlLWNhdGVnb3JpZXMtZHJvcGRvd25cIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCAkbW9iaWxlQ2F0ZWdvcmllc1BvcHVwQmcgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUucXVlcnlTZWxlY3RvcihcIi5idWlsZC1hLWJ1bmRsZV9fbW9iaWxlLWNhdGVnb3JpZXNfX3BvcHVwLWJhY2tncm91bmRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoJG1vYmlsZUNhdGVnb3JpZXNCdXR0b24gJiYgJG1vYmlsZUNhdGVnb3JpZXNQb3B1cCAmJiAkbW9iaWxlQ2F0ZWdvcmllc1BvcHVwQmcpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL0NsaWNraW5nIHRoZSBDYXRlZ29yaWVzIGJ1dHRvbiBvcGVucyB0aGUgcG9wIHVwXHJcbiAgICAgICAgICAgICAgICAgICAgJG1vYmlsZUNhdGVnb3JpZXNCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NhdGVnb3J5TW9iaWxlTWVudSgkbW9iaWxlQ2F0ZWdvcmllc1BvcHVwLCRtb2JpbGVDYXRlZ29yaWVzUG9wdXBCZywkYnVuZGxlSW5mbyxoZWFkZXIsJGZpbHRlcnNCdXR0b25Nb2IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL0NsaWNraW5nIHRoZSBiYWNrZ3JvdW5kIG9yIHRoZSBYIGJ1dHRvbiBjbG9zZXMgdGhlIFBvcCB1cFxyXG4gICAgICAgICAgICAgICAgICAgICRtb2JpbGVDYXRlZ29yaWVzUG9wdXBCZy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRlQ2F0ZWdvcnlNb2JpbGVNZW51KCRtb2JpbGVDYXRlZ29yaWVzUG9wdXAsJG1vYmlsZUNhdGVnb3JpZXNQb3B1cEJnLCRidW5kbGVJbmZvLGhlYWRlciwkZmlsdGVyc0J1dHRvbk1vYik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0ICRtb2JpbGVDYXRlZ29yaWVzUG9wdXBDbG9zZSA9ICRtb2JpbGVDYXRlZ29yaWVzUG9wdXAucXVlcnlTZWxlY3RvcihcIi5tb2JpbGUtY2F0ZWdvcmllcy1kcm9wZG93bi1jbG9zZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZigkbW9iaWxlQ2F0ZWdvcmllc1BvcHVwQ2xvc2Upe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkbW9iaWxlQ2F0ZWdvcmllc1BvcHVwQ2xvc2UuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQ2F0ZWdvcnlNb2JpbGVNZW51KCRtb2JpbGVDYXRlZ29yaWVzUG9wdXAsJG1vYmlsZUNhdGVnb3JpZXNQb3B1cEJnLCRidW5kbGVJbmZvLGhlYWRlciwkZmlsdGVyc0J1dHRvbk1vYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLy9IYW5kbGUgQ2xpY2tpbmcgb24gdGhlIENhdGVnb3JpZXMgYnV0dG9ucyBmb3IgYm90aCBkZXNrdG9wIGFuZCBNb2JpbGVcclxuICAgICAgICAgICAgICAgICRuYXZUcmlnZ2Vycy5mb3JFYWNoKCgkbmF2VHJpZ2dlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIC8vT24gY2xpY2ssIGZpbmQgdGhlIGNvbGxlY3Rpb24gYW5kIHNjcm9sbCBpbnRvIHZpZXdcclxuICAgICAgICAgICAgICAgICAgICAkbmF2VHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRuYXZUcmlnZ2VyLmNsYXNzTGlzdC5jb250YWlucyhcIm1vYmlsZS1wb3B1cC10cmlnZ2VyXCIpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJG1vYmlsZUNhdGVnb3JpZXNCdXR0b24gJiYgJG1vYmlsZUNhdGVnb3JpZXNQb3B1cCAmJiAkbW9iaWxlQ2F0ZWdvcmllc1BvcHVwQmcpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vc2Nyb2xsIHRvIHRhcmdldCBhbmQgY2xvc2UgdGhlIHBvcHVwIG1lbnVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb1RhcmdldENvbGxlY3Rpb25BbmRDbG9zZUNhdGVnb3JpZXMoZSwkY29sbGVjdGlvbnMsJHN0aWNreU5hdk1vYmlsZSxoZWFkZXIsJG1vYmlsZUNhdGVnb3JpZXNQb3B1cCwkbW9iaWxlQ2F0ZWdvcmllc1BvcHVwQmcsJGJ1bmRsZUluZm8sJGZpbHRlcnNCdXR0b25Nb2IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBmb3Igd2hhdGV2ZXIgcmVhc29uIHdlIGNhbid0IGNsb3NlIHRoZSBwb3AgdXAsIHN0aWxsIHNjcm9sbCB0byB0YXJnZXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb1RhcmdldENvbGxlY3Rpb24oZSwkY29sbGVjdGlvbnMsJHN0aWNreU5hdk1vYmlsZSxoZWFkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vU2Nyb2xsIHRvIHRhcmdldFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9UYXJnZXRDb2xsZWN0aW9uKGUsJGNvbGxlY3Rpb25zLCRuYXYsaGVhZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIEhhbmRsZSBGaWx0ZXJzIC0gTW9iaWxlIGFuZCBEZXNrdG9wIFZlcnNpb25zIC0gb3BlbmluZywgY2xvc2luZywgYXBwbHlpbmcsIGJlaGF2aW91clxyXG4gICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vTW9iaWxlIFZlcnNpb25cclxuICAgICAgICAgICAgY29uc3QgJGZpbHRlcnNEcm9wRG93bk1vYiA9ICRzdGlja3lOYXZNb2JpbGUucXVlcnlTZWxlY3RvcihcIi5maWx0ZXItb3B0aW9ucy1kcm9wZG93blwiKTtcclxuXHJcbiAgICAgICAgICAgIC8vRGVza3RvcCBWZXJzaW9uXHJcbiAgICAgICAgICAgIGNvbnN0ICRmaWx0ZXJzQnV0dG9uRGVzayA9ICRuYXYucXVlcnlTZWxlY3RvcihcIi5idWlsZC1hLWJ1bmRsZV9fc3RpY2t5LW5hdi1maWx0ZXJzXCIpO1xyXG4gICAgICAgICAgICBjb25zdCAkZmlsdGVyc0Ryb3BEb3duRGVzayA9ICRuYXYucXVlcnlTZWxlY3RvcihcIi5maWx0ZXItb3B0aW9ucy1kcm9wZG93blwiKTtcclxuXHJcbiAgICAgICAgICAgIC8vU2hhcmVkXHJcbiAgICAgICAgICAgIGNvbnN0ICRmaWx0ZXJzUG9wdXBCZyA9ICRidWlsZEFCdW5kbGVUZW1wbGF0ZS5xdWVyeVNlbGVjdG9yKFwiLmJ1aWxkLWEtYnVuZGxlX19maWx0ZXJfX3BvcHVwLWJhY2tncm91bmRcIik7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvL1RoZXNlIG9wdGlvbnMgbWF5IG5vdCBiZSBwcmVzZW50IGFzIHRoZSBhYmlsaXR5IHRvIHRvZ2dsZSBmaWx0ZXJzIG9uIG9yIG9mZiBleGlzdHMgaW4gdGhlIGN1c3RvbWlzZXJcclxuICAgICAgICAgICAgaWYoJGZpbHRlcnNCdXR0b25Nb2IgJiYgJGZpbHRlcnNEcm9wRG93bk1vYiAmJiAkZmlsdGVyc1BvcHVwQmcgJiYgJGZpbHRlcnNCdXR0b25EZXNrICYmICRmaWx0ZXJzRHJvcERvd25EZXNrKXtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXplIGRpc2hlcyBjb3VudCBvbiBsb2FkXHJcbiAgICAgICAgICAgICAgICBjb25zdCAkaW5pdGlhbERpc2hlcyA9ICRjb2xsZWN0aW9uQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5idWlsZC1hLWJ1bmRsZV9fcHJvZHVjdC1jYXJkOm5vdCguaGlkZGVuKScpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGlmICgkaW5pdGlhbERpc2hlcyA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYmFiLW1hdGNoaW5nLWRpc2hlcy1jb3VudCcpLmZvckVhY2goKGVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLnRleHRDb250ZW50ID0gJGluaXRpYWxEaXNoZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmJhYi1tYXRjaGluZy1kaXNoZXMtdGV4dCcpLmZvckVhY2goKGVsKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsLnRleHRDb250ZW50ID0gJGluaXRpYWxEaXNoZXMgPT09IDEgPyAnRGlzaCBpbiBmaWx0ZXJzJyA6ICdEaXNoZXMgaW4gZmlsdGVycyc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy9CaW5kIE9wZW5zXHJcbiAgICAgICAgICAgICAgICAkZmlsdGVyc0J1dHRvbk1vYi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBzaG93RmlsdGVyRHJvcGRvd24oJGZpbHRlcnNEcm9wRG93bk1vYiwkZmlsdGVyc1BvcHVwQmcsJGJ1bmRsZUluZm8saGVhZGVyLCRtb2JpbGVDYXRlZ29yaWVzQnV0dG9uKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICRmaWx0ZXJzQnV0dG9uRGVzay5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBzaG93RmlsdGVyRHJvcGRvd24oJGZpbHRlcnNEcm9wRG93bkRlc2ssJGZpbHRlcnNQb3B1cEJnLCRidW5kbGVJbmZvLGhlYWRlciwkbW9iaWxlQ2F0ZWdvcmllc0J1dHRvbik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLy9CaW5kIENsb3Nlc1xyXG4gICAgICAgICAgICAgICAgJGZpbHRlcnNQb3B1cEJnLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGhpZGVGaWx0ZXJEcm9wZG93bigkZmlsdGVyc0Ryb3BEb3duTW9iLCRmaWx0ZXJzUG9wdXBCZywkYnVuZGxlSW5mbyxoZWFkZXIsJG1vYmlsZUNhdGVnb3JpZXNCdXR0b24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGhpZGVGaWx0ZXJEcm9wZG93bigkZmlsdGVyc0Ryb3BEb3duRGVzaywkZmlsdGVyc1BvcHVwQmcsJGJ1bmRsZUluZm8saGVhZGVyLCRtb2JpbGVDYXRlZ29yaWVzQnV0dG9uKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCAkZmlsdGVyc0Ryb3BEb3duQ2xvc2VEZXNrID0gJGZpbHRlcnNEcm9wRG93bkRlc2sucXVlcnlTZWxlY3RvckFsbChcIi5tb2JpbGUtZmlsdGVycy1kcm9wZG93bi1jbG9zZVwiKTtcclxuICAgICAgICAgICAgICAgIGlmKCRmaWx0ZXJzRHJvcERvd25DbG9zZURlc2subGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgJGZpbHRlcnNEcm9wRG93bkNsb3NlRGVzay5mb3JFYWNoKCgkY2xvc2VCdG4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJGNsb3NlQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlRmlsdGVyRHJvcGRvd24oJGZpbHRlcnNEcm9wRG93bkRlc2ssJGZpbHRlcnNQb3B1cEJnLCRidW5kbGVJbmZvLGhlYWRlciwkbW9iaWxlQ2F0ZWdvcmllc0J1dHRvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0ICRmaWx0ZXJzRHJvcERvd25DbG9zZU1vYiA9ICRmaWx0ZXJzRHJvcERvd25Nb2IucXVlcnlTZWxlY3RvckFsbChcIi5tb2JpbGUtZmlsdGVycy1kcm9wZG93bi1jbG9zZVwiKTtcclxuICAgICAgICAgICAgICAgIGlmKCRmaWx0ZXJzRHJvcERvd25DbG9zZU1vYi5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgICAgICAkZmlsdGVyc0Ryb3BEb3duQ2xvc2VNb2IuZm9yRWFjaCgoJGNsb3NlQnRuKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRjbG9zZUJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUZpbHRlckRyb3Bkb3duKCRmaWx0ZXJzRHJvcERvd25Nb2IsJGZpbHRlcnNQb3B1cEJnLCRidW5kbGVJbmZvLGhlYWRlciwkbW9iaWxlQ2F0ZWdvcmllc0J1dHRvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIEZpbHRlciBPcHRpb25zXHJcbiAgICAgICAgICAgICAgICBjb25zdCAkZmlsdGVyT3B0aW9uc0Rlc2sgPSAkZmlsdGVyc0Ryb3BEb3duRGVzay5xdWVyeVNlbGVjdG9yQWxsKFwiLmZpbHRlci1vcHRpb25zIC5maWx0ZXItb3B0aW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYoJGZpbHRlck9wdGlvbnNEZXNrLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICRmaWx0ZXJPcHRpb25zRGVzay5mb3JFYWNoKCgkZmlsdGVyT3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRmaWx0ZXJPcHRpb24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWx0ZXJPcHRpb24uY2xhc3NMaXN0LnRvZ2dsZShcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExpdmUgZmlsdGVyIHVwZGF0ZSBvbiBjbGljayAobWVudSBzdGF5cyBvcGVuKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyQ29sbGVjdGlvblJlc3VsdHMoJGZpbHRlck9wdGlvbnNEZXNrLCRjb2xsZWN0aW9ucywkZmlsdGVyc0Ryb3BEb3duRGVzaywkZmlsdGVyc1BvcHVwQmcsJGJ1bmRsZUluZm8saGVhZGVyLCRtb2JpbGVDYXRlZ29yaWVzQnV0dG9uLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jRmlsdGVyQmFkZ2VBbmRQaWxscygkZmlsdGVyc0Ryb3BEb3duRGVzaywkZmlsdGVyT3B0aW9uc0Rlc2ssJGNvbGxlY3Rpb25zLCRmaWx0ZXJzUG9wdXBCZywkYnVuZGxlSW5mbyxoZWFkZXIsJG1vYmlsZUNhdGVnb3JpZXNCdXR0b24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCAkZmlsdGVyT3B0aW9uc01vYiA9ICRmaWx0ZXJzRHJvcERvd25Nb2IucXVlcnlTZWxlY3RvckFsbChcIi5maWx0ZXItb3B0aW9ucyAuZmlsdGVyLW9wdGlvblwiKTtcclxuICAgICAgICAgICAgICAgIGlmKCRmaWx0ZXJPcHRpb25zTW9iLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICRmaWx0ZXJPcHRpb25zTW9iLmZvckVhY2goKCRmaWx0ZXJPcHRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJGZpbHRlck9wdGlvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpbHRlck9wdGlvbi5jbGFzc0xpc3QudG9nZ2xlKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGl2ZSBmaWx0ZXIgdXBkYXRlIG9uIGNsaWNrIChtZW51IHN0YXlzIG9wZW4pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJDb2xsZWN0aW9uUmVzdWx0cygkZmlsdGVyT3B0aW9uc01vYiwkY29sbGVjdGlvbnMsJGZpbHRlcnNEcm9wRG93bk1vYiwkZmlsdGVyc1BvcHVwQmcsJGJ1bmRsZUluZm8saGVhZGVyLCRtb2JpbGVDYXRlZ29yaWVzQnV0dG9uLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jRmlsdGVyQmFkZ2VBbmRQaWxscygkZmlsdGVyc0Ryb3BEb3duTW9iLCRmaWx0ZXJPcHRpb25zTW9iLCRjb2xsZWN0aW9ucywkZmlsdGVyc1BvcHVwQmcsJGJ1bmRsZUluZm8saGVhZGVyLCRtb2JpbGVDYXRlZ29yaWVzQnV0dG9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vIFN5bmMgZXh0ZXJuYWwgYmFkZ2UvcGlsbHMgYW5kIHJlLWZpbHRlciBwcm9kdWN0cyB3aGVuIHRoZSBcIlJlc2V0XCIgYnV0dG9uIGluc2lkZSB0aGUgZHJvcGRvd24gaXMgY2xpY2tlZFxyXG4gICAgICAgICAgICAgICAgY29uc3QgJGNsZWFyQWxsQnRuc01vYiA9ICRmaWx0ZXJzRHJvcERvd25Nb2IucXVlcnlTZWxlY3RvckFsbCgnLmZpbHRlci1vcHRpb25zLXJlc2V0Jyk7XHJcbiAgICAgICAgICAgICAgICAkY2xlYXJBbGxCdG5zTW9iLmZvckVhY2goKGJ0bikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJGZpbHRlck9wdGlvbnNNb2IuZm9yRWFjaCgob3B0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckNvbGxlY3Rpb25SZXN1bHRzKCRmaWx0ZXJPcHRpb25zTW9iLCRjb2xsZWN0aW9ucywkZmlsdGVyc0Ryb3BEb3duTW9iLCRmaWx0ZXJzUG9wdXBCZywkYnVuZGxlSW5mbyxoZWFkZXIsJG1vYmlsZUNhdGVnb3JpZXNCdXR0b24sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNGaWx0ZXJCYWRnZUFuZFBpbGxzKCRmaWx0ZXJzRHJvcERvd25Nb2IsJGZpbHRlck9wdGlvbnNNb2IsJGNvbGxlY3Rpb25zLCRmaWx0ZXJzUG9wdXBCZywkYnVuZGxlSW5mbyxoZWFkZXIsJG1vYmlsZUNhdGVnb3JpZXNCdXR0b24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCAyMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCAkY2xlYXJBbGxCdG5zRGVzayA9ICRmaWx0ZXJzRHJvcERvd25EZXNrLnF1ZXJ5U2VsZWN0b3JBbGwoJy5maWx0ZXItb3B0aW9ucy1yZXNldCcpO1xyXG4gICAgICAgICAgICAgICAgJGNsZWFyQWxsQnRuc0Rlc2suZm9yRWFjaCgoYnRuKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkZmlsdGVyT3B0aW9uc0Rlc2suZm9yRWFjaCgob3B0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHQuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckNvbGxlY3Rpb25SZXN1bHRzKCRmaWx0ZXJPcHRpb25zRGVzaywkY29sbGVjdGlvbnMsJGZpbHRlcnNEcm9wRG93bkRlc2ssJGZpbHRlcnNQb3B1cEJnLCRidW5kbGVJbmZvLGhlYWRlciwkbW9iaWxlQ2F0ZWdvcmllc0J1dHRvbiwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY0ZpbHRlckJhZGdlQW5kUGlsbHMoJGZpbHRlcnNEcm9wRG93bkRlc2ssJGZpbHRlck9wdGlvbnNEZXNrLCRjb2xsZWN0aW9ucywkZmlsdGVyc1BvcHVwQmcsJGJ1bmRsZUluZm8saGVhZGVyLCRtb2JpbGVDYXRlZ29yaWVzQnV0dG9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMjApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gICAgXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvL1doZW4gc3RpY2t5TmF2TW9iaWxlIGlzIHN0dWNrIHRvIHRoZSB0b3AsIGl0IGNoYW5nZXMgaXQncyBiYWNrZ3JvdW5kIGNvbG91ciBhbmQgZ2V0cyBhIG5ldyBib3JkZXIgYWRkZWQuXHJcbiAgICAgICAgICAgIGNvbnN0IHN0aWNreU5hdk1vYmlsZU9mZnNldCA9ICRzdGlja3lOYXZNb2JpbGUub2Zmc2V0VG9wO1xyXG4gICAgICAgICAgICAkc3RpY2t5TmF2TW9iaWxlLmFkZEV2ZW50TGlzdGVuZXJcclxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5zY3JvbGxZID4gc3RpY2t5TmF2TW9iaWxlT2Zmc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHN0aWNreU5hdk1vYmlsZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcIndoaXRlXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgJHN0aWNreU5hdk1vYmlsZS5jbGFzc0xpc3QuYWRkKFwiYm9yZGVyLWJcIixcImJvcmRlci1wcmltYXJ5LWJvcmRlclwiKTsgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAkc3RpY2t5TmF2TW9iaWxlLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgJHN0aWNreU5hdk1vYmlsZS5jbGFzc0xpc3QucmVtb3ZlKFwiYm9yZGVyLWJcIixcImJvcmRlci1wcmltYXJ5LWJvcmRlclwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdsb2c6IG5hdiBub3QgZm91bmQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUG9wdXAgQ29udHJvbHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cclxuICAgICAgICBcclxuICAgICAgICAvLyBzZXQgZWxlbWVudHNcclxuICAgICAgICBjb25zdCAkcHJvZHVjdFBvcHVwQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idWlsZC1hLWJ1bmRsZV9fcHJvZHVjdC1jYXJkX19wb3B1cC1jb250YWluZXJcIik7XHJcblxyXG4gICAgICAgIGlmICgkcHJvZHVjdFBvcHVwQ29udGFpbmVyKXtcclxuXHJcbiAgICAgICAgICAgIC8vSGFuZGxlIENsb3Npbmcgb2YgdGhlIFBvcCBVcFxyXG4gICAgICAgICAgICBjb25zdCAkcHJvZHVjdFBvcHVwQmcgPSAkcHJvZHVjdFBvcHVwQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX3Byb2R1Y3QtY2FyZF9fcG9wdXAtYmdcIik7XHJcbiAgICAgICAgICAgIGNvbnN0ICRwcm9kdWN0UG9wdXBDbG9zZSA9ICRwcm9kdWN0UG9wdXBDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5idWlsZC1hLWJ1bmRsZV9fcHJvZHVjdC1jYXJkX19wb3B1cC1jb250ZW50LWNsb3NlXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYoJHByb2R1Y3RQb3B1cEJnKXtcclxuICAgICAgICAgICAgICAgICRwcm9kdWN0UG9wdXBCZy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjbG9zZVByb2R1Y3RQb3BVcCgkcHJvZHVjdFBvcHVwQ29udGFpbmVyLCRidWlsZEFCdW5kbGVUZW1wbGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoJHByb2R1Y3RQb3B1cENsb3NlKXtcclxuICAgICAgICAgICAgICAgICRwcm9kdWN0UG9wdXBDbG9zZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICBjbG9zZVByb2R1Y3RQb3BVcCgkcHJvZHVjdFBvcHVwQ29udGFpbmVyLCRidWlsZEFCdW5kbGVUZW1wbGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB9KTsgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2xvZzogcG9wdXAgbm90IGZvdW5kJyk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgLy8gQmluZCB0aGUgdmFyaW91cyBDb250ZW50IGJhc2VkIFBvcCBVcHMgYW5kIGJpbmQgdGhvc2VcclxuICAgICAgICBjb25zdCAkaG93SXRXb3Jrc1BvcHVwID0gJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX3Byb2R1Y3QtY2FyZF9fcG9wdXAtaG93LWl0LXdvcmtzXCIpO1xyXG4gICAgICAgIGlmKCRob3dJdFdvcmtzUG9wdXApe1xyXG4gICAgICAgICAgICBjb25zdCAkaG93SXRXb3Jrc1BvcHVwVHJpZ2dlcnMgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUucXVlcnlTZWxlY3RvckFsbChcIi5ob3ctaXQtd29ya3MtcG9wdXAtdHJpZ2dlclwiKTtcclxuICAgICAgICAgICAgaWYoJGhvd0l0V29ya3NQb3B1cFRyaWdnZXJzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgJGhvd0l0V29ya3NQb3B1cFRyaWdnZXJzLmZvckVhY2goKCRob3dJdFdvcmtzUG9wdXBUcmlnZ2VyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgJGhvd0l0V29ya3NQb3B1cFRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NvbnRlbnRQb3B1cCgkaG93SXRXb3Jrc1BvcHVwLCRidW5kbGVJbmZvKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vQmluZCBDbG9zZSBFdmVudHNcclxuICAgICAgICAgICAgICAgIGNvbnN0ICRob3dJdFdvcmtzUG9wdXBCZyA9ICRob3dJdFdvcmtzUG9wdXAucXVlcnlTZWxlY3RvcihcIi5idWlsZC1hLWJ1bmRsZV9fcHJvZHVjdC1jYXJkX19wb3B1cC1ob3ctaXQtd29ya3MtYmdcIik7XHJcbiAgICAgICAgICAgICAgICBpZigkaG93SXRXb3Jrc1BvcHVwQmcpe1xyXG4gICAgICAgICAgICAgICAgICAgICRob3dJdFdvcmtzUG9wdXBCZy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRlQ29udGVudFBvcHVwKCRob3dJdFdvcmtzUG9wdXAsJGJ1bmRsZUluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCAkaG93SXRXb3Jrc1BvcHVwQ2xvc2UgPSAkaG93SXRXb3Jrc1BvcHVwLnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX3Byb2R1Y3QtY2FyZF9fcG9wdXAtaG93LWl0LXdvcmtzLWNsb3NlXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYoJGhvd0l0V29ya3NQb3B1cENsb3NlKXtcclxuICAgICAgICAgICAgICAgICAgICAkaG93SXRXb3Jrc1BvcHVwQ2xvc2UuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUNvbnRlbnRQb3B1cCgkaG93SXRXb3Jrc1BvcHVwLCRidW5kbGVJbmZvKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH0gICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgJHdoYXRzV2l0aEJsb2Nrc1BvcHVwID0gJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX3Byb2R1Y3QtY2FyZF9fcG9wdXAtd2hhdHMtd2l0aC1ibG9ja3NcIik7XHJcbiAgICAgICAgaWYoJHdoYXRzV2l0aEJsb2Nrc1BvcHVwKXtcclxuICAgICAgICAgICAgY29uc3QgJHdoYXRzV2l0aEJsb2Nrc1BvcHVwVHJpZ2dlcnMgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUucXVlcnlTZWxlY3RvckFsbChcIi53aGF0cy13aXRoLWJsb2Nrcy1wb3B1cC10cmlnZ2VyXCIpO1xyXG4gICAgICAgICAgICBpZigkd2hhdHNXaXRoQmxvY2tzUG9wdXBUcmlnZ2Vycy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgICR3aGF0c1dpdGhCbG9ja3NQb3B1cFRyaWdnZXJzLmZvckVhY2goKCR3aGF0c1dpdGhCbG9ja3NQb3B1cFRyaWdnZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAkd2hhdHNXaXRoQmxvY2tzUG9wdXBUcmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDb250ZW50UG9wdXAoJHdoYXRzV2l0aEJsb2Nrc1BvcHVwLCRidW5kbGVJbmZvKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vQmluZCBDbG9zZSBFdmVudHNcclxuICAgICAgICAgICAgICAgIGNvbnN0ICR3aGF0c1dpdGhCbG9ja3NQb3B1cEJnID0gJHdoYXRzV2l0aEJsb2Nrc1BvcHVwLnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX3Byb2R1Y3QtY2FyZF9fcG9wdXAtd2hhdHMtd2l0aC1ibG9ja3MtYmdcIik7XHJcbiAgICAgICAgICAgICAgICBpZigkd2hhdHNXaXRoQmxvY2tzUG9wdXBCZyl7XHJcbiAgICAgICAgICAgICAgICAgICAgJHdoYXRzV2l0aEJsb2Nrc1BvcHVwQmcuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUNvbnRlbnRQb3B1cCgkd2hhdHNXaXRoQmxvY2tzUG9wdXAsJGJ1bmRsZUluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0ICR3aGF0c1dpdGhCbG9ja3NQb3B1cENsb3NlID0gJHdoYXRzV2l0aEJsb2Nrc1BvcHVwLnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX3Byb2R1Y3QtY2FyZF9fcG9wdXAtd2hhdHMtd2l0aC1ibG9ja3MtY2xvc2VcIik7XHJcbiAgICAgICAgICAgICAgICBpZigkd2hhdHNXaXRoQmxvY2tzUG9wdXBDbG9zZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgJHdoYXRzV2l0aEJsb2Nrc1BvcHVwQ2xvc2UuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUNvbnRlbnRQb3B1cCgkd2hhdHNXaXRoQmxvY2tzUG9wdXAsJGJ1bmRsZUluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9CaW5kIENsb3Npbmcgb2YgVGFzdGUgR3VhcmFudGVlIFBvcHVwLCB0aGUgb3BlbmluZyBpcyBoYW5kbGVkIGJlbG93IGJ5IHRoZSBxdWljayBsaW5rc1xyXG4gICAgICAgIGNvbnN0ICR0YXN0ZUd1YXJhbnRlZVBvcHVwID0gJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX3Byb2R1Y3QtY2FyZF9fcG9wdXAtdGFzdGUtZ3VhcmFudGVlXCIpO1xyXG4gICAgICAgIGlmKCR0YXN0ZUd1YXJhbnRlZVBvcHVwKXtcclxuXHJcbiAgICAgICAgICAgIC8vQmluZCB0aGUgdHJpZ2dlcnNcclxuICAgICAgICAgICAgY29uc3QgJHRhc3RlR3VhcmFudGVlUG9wdXBUcmlnZ2VycyA9ICRidWlsZEFCdW5kbGVUZW1wbGF0ZS5xdWVyeVNlbGVjdG9yQWxsKFwiLnRhc3RlLWd1YXJhbnRlZS1iYWItY2FyZC1wb3B1cC10cmlnZ2VyXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYoJHRhc3RlR3VhcmFudGVlUG9wdXBUcmlnZ2Vycy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgICR0YXN0ZUd1YXJhbnRlZVBvcHVwVHJpZ2dlcnMuZm9yRWFjaCgoJHRhc3RlR3VhcmFudGVlUG9wdXBUcmlnZ2VyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHRhc3RlR3VhcmFudGVlUG9wdXBUcmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDb250ZW50UG9wdXAoJHRhc3RlR3VhcmFudGVlUG9wdXAsJGJ1bmRsZUluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0ICR0YXN0ZUd1YXJhbnRlZVBvcHVwQmcgPSAkdGFzdGVHdWFyYW50ZWVQb3B1cC5xdWVyeVNlbGVjdG9yKFwiLmJ1aWxkLWEtYnVuZGxlX19wcm9kdWN0LWNhcmRfX3BvcHVwLXRhc3RlLWd1YXJhbnRlZS1iZ1wiKTtcclxuICAgICAgICAgICAgaWYoJHRhc3RlR3VhcmFudGVlUG9wdXBCZyl7XHJcbiAgICAgICAgICAgICAgICAkdGFzdGVHdWFyYW50ZWVQb3B1cEJnLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICBoaWRlQ29udGVudFBvcHVwKCR0YXN0ZUd1YXJhbnRlZVBvcHVwLCRidW5kbGVJbmZvKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCAkdGFzdGVHdWFyYW50ZWVQb3B1cENsb3NlID0gJHRhc3RlR3VhcmFudGVlUG9wdXAucXVlcnlTZWxlY3RvcihcIi5idWlsZC1hLWJ1bmRsZV9fcHJvZHVjdC1jYXJkX19wb3B1cC10YXN0ZS1ndWFyYW50ZWUtY2xvc2VcIik7XHJcbiAgICAgICAgICAgIGlmKCR0YXN0ZUd1YXJhbnRlZVBvcHVwQ2xvc2Upe1xyXG4gICAgICAgICAgICAgICAgJHRhc3RlR3VhcmFudGVlUG9wdXBDbG9zZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaGlkZUNvbnRlbnRQb3B1cCgkdGFzdGVHdWFyYW50ZWVQb3B1cCwkYnVuZGxlSW5mbyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSAgIFxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIC8vSWYgdGhlcmUgYXJlIGFueSBxdWlja2xpbmtzIGluIHRoZSBidW5kbGUgYXNpZGUgLSBiaW5kIHRob3NlIGhlcmUuIFRoZXNlIGFyZSBvcHRpb25hbCBhbmQgbWF5IG5vdCBleGlzdC5cclxuICAgICAgICBjb25zdCAkYnVuZGxlQXNpZGVRdWlja0xpbmtzQ29udGFpbmVyID0gJGJ1bmRsZUluZm8ucXVlcnlTZWxlY3RvcihcIi5idW5kbGUtaW5mby1xdWlja2xpbmtzXCIpO1xyXG4gICAgICAgIGlmKCRidW5kbGVBc2lkZVF1aWNrTGlua3NDb250YWluZXIpe1xyXG4gICAgICAgICAgICBjb25zdCAkYnVuZGxlQXNpZGVRdWlja0xpbmtzID0gJGJ1bmRsZUFzaWRlUXVpY2tMaW5rc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiLmJ1bmRsZS1pbmZvLXF1aWNrbGlua1wiKTtcclxuICAgICAgICAgICAgaWYoJGJ1bmRsZUFzaWRlUXVpY2tMaW5rcy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgICRidW5kbGVBc2lkZVF1aWNrTGlua3MuZm9yRWFjaCgoJGJ1bmRsZUFzaWRlUXVpY2tMaW5rKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0ICRpbmZvSWNvbiA9ICRidW5kbGVBc2lkZVF1aWNrTGluay5xdWVyeVNlbGVjdG9yKFwiLmluZm8taWNvblwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9CaW5kIGhvdmVyIGV2ZW50c1xyXG4gICAgICAgICAgICAgICAgICAgICRidW5kbGVBc2lkZVF1aWNrTGluay5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRidW5kbGVBc2lkZVF1aWNrTGlua3MuZm9yRWFjaCgoJHF1aWNrTGluaykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHF1aWNrTGluayAhPT0gZS50YXJnZXQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxdWlja0xpbmsuY2xhc3NMaXN0LmFkZChcIm9wYWNpdHktNTBcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5mb0ljb24uY2xhc3NMaXN0LmFkZChcImhvdmVyZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICRidW5kbGVBc2lkZVF1aWNrTGluay5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRidW5kbGVBc2lkZVF1aWNrTGlua3MuZm9yRWFjaCgoJHF1aWNrTGluaykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHF1aWNrTGluay5jbGFzc0xpc3QucmVtb3ZlKFwib3BhY2l0eS01MFwiKTsgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkaW5mb0ljb24uY2xhc3NMaXN0LnJlbW92ZShcImhvdmVyZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7ICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vQmluZCBDbGljayBsb2dpYyB0byBmaW5kIHRoZSByaWdodCBwb3B1cCAtIHdlIGNvdWxkIHJlbW92ZSB0aGlzIGVudGlyZWx5IFxyXG4gICAgICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgJGJ1bmRsZUFzaWRlUXVpY2tMaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRidW5kbGVBc2lkZVF1aWNrTGluay5kYXRhc2V0LnBvcHVwVGFyZ2V0ID09IFwidGFzdGUtZ3VhcmFudGVlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR0YXN0ZUd1YXJhbnRlZVBvcHVwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Q29udGVudFBvcHVwKCR0YXN0ZUd1YXJhbnRlZVBvcHVwLCRidW5kbGVJbmZvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoJGJ1bmRsZUFzaWRlUXVpY2tMaW5rLmRhdGFzZXQucG9wdXBUYXJnZXQgPT0gXCJob3ctaXQtd29ya3NcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbHJlYWR5IGhhbmRsZWQgYnkgYSBkaWZmZXJlbnQgY2xhc3MgYXR0YWNoZWQgdG8gaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkaG93SXRXb3Jrc1BvcHVwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NvbnRlbnRQb3B1cCgkaG93SXRXb3Jrc1BvcHVwLCRidW5kbGVJbmZvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJ1bmNhdGVyZWQgZm9yIGRhdGEtcG9wdXAtdGFyZ2V0IG9uIGNsaWNrZWQgcXVpY2tsaW5rLiBFbGVtZW50OiBcIiArIGUudGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGJ1bmRsZSBjYXJkcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vL1xyXG4gICAgICAgIC8vIEFkZCBldmVudCBsaXN0ZW5lcnMgZm9yIHRyaWdnZXJpbmcgYnVuZGxlIHVwZGF0ZXNcclxuXHJcbiAgICAgICAgaWYgKCRidW5kbGVQcm9kdWN0Q2FyZHMpe1xyXG5cclxuICAgICAgICAgICAgY29uc3QgJHByb2R1Y3RQb3B1cENvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX3Byb2R1Y3QtY2FyZF9fcG9wdXAtY29udGFpbmVyXCIpO1xyXG5cclxuICAgICAgICAgICAgJGJ1bmRsZVByb2R1Y3RDYXJkcy5mb3JFYWNoKCRjYXJkID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIFNldCBlbGVtZW50c1xyXG4gICAgICAgICAgICAgICAgY29uc3QgJGluY3JlYXNlID0gJGNhcmQucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LXF1YW50aXR5X19pbmNyZWFzZVwiKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0ICRkZWNyZWFzZSA9ICRjYXJkLnF1ZXJ5U2VsZWN0b3IoXCIucHJvZHVjdC1xdWFudGl0eV9fZGVjcmVhc2VcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCAkcXVhbnRpdHkgPSAkY2FyZC5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtcXVhbnRpdHlcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCAkY29udHJvbHMgPSAkY2FyZC5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtY29udHJvbHNcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCAkcG9wdXBUcmlnZ2VyID0gJGNhcmQucXVlcnlTZWxlY3RvcihcIi5idWlsZC1hLWJ1bmRsZV9fcHJvZHVjdC1jYXJkX19wb3B1cC10cmlnZ2VyXCIpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSAkY2FyZC5kYXRhc2V0LmlkO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSAkY2FyZC5kYXRhc2V0LnRpdGxlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJpY2UgPSAkY2FyZC5kYXRhc2V0LnByaWNlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJpY2VTdHJpbmcgPSAkY2FyZC5kYXRhc2V0LnByaWNlU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29tcGFyZVByaWNlID0gJGNhcmQuZGF0YXNldC5jb21wYXJlUHJpY2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wYXJlUHJpY2VTdHJpbmcgPSAkY2FyZC5kYXRhc2V0LmNvbXBhcmVQcmljZVN0cmluZztcclxuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gJGNhcmQuZGF0YXNldC5pbWFnZTtcclxuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50UXVhbnRpdHkgPSBcIlwiO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICgkcXVhbnRpdHkpe1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRRdWFudGl0eSA9IHBhcnNlSW50KCRxdWFudGl0eS5pbm5lclRleHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIEluY3JlYXNlXHJcbiAgICAgICAgICAgICAgICBpZiAoJGluY3JlYXNlKXtcclxuICAgICAgICAgICAgICAgICAgICAkaW5jcmVhc2UuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IGN1cnJlbnQgcXVhbnRpdHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFF1YW50aXR5ID0gcGFyc2VJbnQoJHF1YW50aXR5LmlubmVyVGV4dCk7XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBidW5kbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQnVuZGxlKGlkLCAxLCB0aXRsZSwgcHJpY2UsIHByaWNlU3RyaW5nLCBjb21wYXJlUHJpY2UsIGNvbXBhcmVQcmljZVN0cmluZywgaW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBEZWNyZWFzZVxyXG4gICAgICAgICAgICAgICAgaWYgKCRkZWNyZWFzZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgJGRlY3JlYXNlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBjdXJyZW50IHF1YW50aXR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRRdWFudGl0eSA9IHBhcnNlSW50KCRxdWFudGl0eS5pbm5lclRleHQpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUJ1bmRsZShpZCwgLTEsIHRpdGxlLCBwcmljZSwgcHJpY2VTdHJpbmcsIGNvbXBhcmVQcmljZSwgY29tcGFyZVByaWNlU3RyaW5nLCBpbWFnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vIFBvcHVwIFRyaWdnZXJcclxuICAgICAgICAgICAgICAgIGlmICgkcG9wdXBUcmlnZ2VyICYmICRwcm9kdWN0UG9wdXBDb250YWluZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9wZW4gcG9wdXBcclxuICAgICAgICAgICAgICAgICAgICAkcG9wdXBUcmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRQcm9kdWN0UG9wdXAoJGNhcmQsICRwcm9kdWN0UG9wdXBDb250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL0JpbmQgdGhlIFF0eSBPcHRpb25zIGFuZCBBZGQgdG8gQnVuZGxlIGZ1bmN0aW9uYWxpdHlcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCAkcG9wdXBDb250ZW50cyA9ICRjYXJkLnF1ZXJ5U2VsZWN0b3IoXCIucHJvZHVjdC1wb3B1cC1jb250ZW50c1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZigkcG9wdXBDb250ZW50cyl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL0JpbmQgSnVkZ21lIFJldmlldyBTdGFycyB0byBzY3JvbGwgdG8gYW5kIG9wZW4gdGhlIHJldmlld3MgYWNjb3JkaW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICRqdWRnZW1lQmFkZ2UgPSAkcG9wdXBDb250ZW50cy5xdWVyeVNlbGVjdG9yKFwiLnBvcC11cC1qdWRnZW1lLWJhZGdlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAkanVkZ2VtZVJldmlld0FjY29yZGlvbiA9ICRwb3B1cENvbnRlbnRzLnF1ZXJ5U2VsZWN0b3IoXCIucHJvZHVjdC1hY2NvcmRpb24tY29udGFpbmVyIC5yZXZpZXctYWNjb3JkaW9uXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGp1ZGdlbWVCYWRnZSAmJiAkanVkZ2VtZVJldmlld0FjY29yZGlvbil7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgJGp1ZGdlbWVSZXZpZXdBY2NvcmRpb25UcmlnZ2VyID0gJGp1ZGdlbWVSZXZpZXdBY2NvcmRpb24ucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LWFjY29yZGlvbl9fdHJpZ2dlclwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRqdWRnZW1lUmV2aWV3QWNjb3JkaW9uVHJpZ2dlcil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGp1ZGdlbWVCYWRnZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9PcGVuIGl0ICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEkanVkZ2VtZVJldmlld0FjY29yZGlvbi5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRqdWRnZW1lUmV2aWV3QWNjb3JkaW9uVHJpZ2dlci5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1Njcm9sbCBkb3duIHRvIHRoZSBSZXZpZXcgQWNjb3JkaW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRqdWRnZW1lUmV2aWV3QWNjb3JkaW9uLnNjcm9sbEludG9WaWV3KHtiZWhhdmlvcjogXCJzbW9vdGhcIiwgYmxvY2s6IFwic3RhcnRcIn0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgJGF0YkNvbnRhaW5lciA9ICRwb3B1cENvbnRlbnRzLnF1ZXJ5U2VsZWN0b3IoXCIuYmFiLXByb2R1Y3QtcG9wdXAtY29udGVudHNfX2F0Yi1jb250YWluZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZigkYXRiQ29udGFpbmVyKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFByaWNlID0gJGF0YkNvbnRhaW5lci5kYXRhc2V0LnNpbmdsZVByaWNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxTdWJzY3JpcHRpb25QcmljZSA9ICRhdGJDb250YWluZXIuZGF0YXNldC5zaW5nbGVTdWJzY3JpcHRpb25QcmljZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICRxdHlEZWNyZWFzZSA9ICRwb3B1cENvbnRlbnRzLnF1ZXJ5U2VsZWN0b3IoXCIucHJvZHVjdC1xdWFudGl0eS1zZWxlY3RvciAucHJvZHVjdC1xdWFudGl0eV9fZGVjcmVhc2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAkcXR5SW5jcmVhc2UgPSAkcG9wdXBDb250ZW50cy5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtcXVhbnRpdHktc2VsZWN0b3IgLnByb2R1Y3QtcXVhbnRpdHlfX2luY3JlYXNlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgJHF0eVZhbHVlID0gJHBvcHVwQ29udGVudHMucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LXF1YW50aXR5LWNvbnRhaW5lciAucHJvZHVjdC1xdWFudGl0eVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICRhZGRUb0J1bmRsZUJ1dHRvbnMgPSAkcG9wdXBDb250ZW50cy5xdWVyeVNlbGVjdG9yQWxsKFwiLmJhYi1wcm9kdWN0LWFkZC10by1idW5kbGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bGVzOlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFdoZW4geW91J3ZlIHJlYWNoZWQgbWF4aW11bSBpdGVtcyBpbiB0aGUgYnVuZGxlLCBxdHkgc2VsZWN0b3IgYW5kIEFkZCB0byBDYXJ0IGJ1dHRvbiB3aWxsIGJlIGRpc2FibGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBXaGVuIG9ubHkgb25lIGl0ZW0gcmVtYWlucyBhdmFpbGFibGUgaW4gdGhlIGJ1bmRsZSwgdGhlIGFkZCBidXR0b25zIHdpbGwgYmUgZGlzYWJsZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZXJlZm9yZSAtIGluY3JlYXNpbmcgdGhlIGFtb3VudCBmcm9tIDEgd2lsbCByZXF1aXJlZCB1cyB0byBkbyBzb21lIG1hdGhzIGludm9sdmluZyB0aGUgdG90YWwgaXRlbXMgaW4gdGhlIGJ1bmRsZSBhbmQgaG93IG1hbnkgbW9yZSB0aGUgY3VzdG9tZXIgY2FuIGFkZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHF0eURlY3JlYXNlICYmICRxdHlJbmNyZWFzZSAmJiAkcXR5VmFsdWUpeyAvL29yaWdpbmFsQ29tcGFyZUF0UHJpY2Ugb3JpZ2luYWxQcmljZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRhZGRUb0J1bmRsZUJ1dHRvbnMubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50SW52ZW50b3J5ID0gJGNhcmQuZGF0YXNldC5pbnZlbnRvcnk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcXR5RGVjcmVhc2UuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0NhdGVyIGZvciB3aGVuIHRoZXJlJ3MgYSBtYXhpbXVtIHZhbHVlIGFwcGxpZWQgdG8gdGhlIEJhQlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHF0eSA9IHBhcnNlSW50KCRxdHlWYWx1ZS5pbm5lclRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocXR5ID4gMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHF0eVZhbHVlLmlubmVyVGV4dCA9IC0tcXR5O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0RvIHdlIG5lZWQgdG8gcmUtZW5hYmxlIGEgYnV0dG9uP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5tYXhJdGVtc0FsbG93ZWQgLSB3aW5kb3cuY3VycmVudFRvdGFsSXRlbXMgPiBxdHkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVCdG4oJHF0eUluY3JlYXNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFkZFRvQnVuZGxlQnV0dG9ucy5mb3JFYWNoKCgkYWRkVG9CdW5kbGVCdXR0b24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVBdGJCdXR0b25QcmljaW5nKCRhZGRUb0J1bmRsZUJ1dHRvbixvcmlnaW5hbFByaWNlLG9yaWdpbmFsU3Vic2NyaXB0aW9uUHJpY2UscXR5KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOyAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcXR5SW5jcmVhc2UuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcXR5ID0gcGFyc2VJbnQoJHF0eVZhbHVlLmlubmVyVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcXR5VmFsdWUuaW5uZXJUZXh0ID0gKytxdHk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9NYWtlIHN1cmUgdGhlIGN1c3RvbWVyIGNhbid0IGdvIGFib3ZlIHRoZSBpbnZlbnRvcnkgbGV2ZWwgY3VycmVudGx5IGF2YWlsYWJsZSwgYnV0IHdlIGFsc28gbmVlZCB0byBmYWN0b3IgaW4gaG93IG1hbnkgYXJlIGluIHRoZSBidW5kbGUgYWxyZWFkeSAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjdXJyZW50SW52ZW50b3J5KXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyQWxyZWFkeUluQnVuZGxlID0gZ2V0TnVtYmVySW5CdW5kbGUoJGNhcmQuZGF0YXNldC5pZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKChjdXJyZW50SW52ZW50b3J5IC0gbnVtYmVyQWxyZWFkeUluQnVuZGxlKSA8PSBxdHkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQnRuKCRxdHlJbmNyZWFzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJjdXJyZW50IGludmVudG9yeSBub3QgYXZhaWxhYmxlIGZvciBcIiArIHRpdGxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lzIHRoZSBjdXN0b21lciBhbGxvd2VkIHRvIGFkZCBhbnltb3JlIHRoYW4gdGhpcz8gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubWF4SXRlbXNBbGxvd2VkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubWF4SXRlbXNBbGxvd2VkIC0gd2luZG93LmN1cnJlbnRUb3RhbEl0ZW1zIDw9IHF0eSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVCdG4oJHF0eUluY3JlYXNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9VcGRhdGUgdGhlIHByaWNlcyBzaG93biBpbiB0aGUgZGVza3RvcCBvbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhZGRUb0J1bmRsZUJ1dHRvbnMuZm9yRWFjaCgoJGFkZFRvQnVuZGxlQnV0dG9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQXRiQnV0dG9uUHJpY2luZygkYWRkVG9CdW5kbGVCdXR0b24sb3JpZ2luYWxQcmljZSxvcmlnaW5hbFN1YnNjcmlwdGlvblByaWNlLHF0eSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWRkVG9CdW5kbGVCdXR0b25zLmZvckVhY2goKCRhZGRUb0J1bmRsZUJ1dHRvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFkZFRvQnVuZGxlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vR2V0IGFsbCB0aGUgaW5mbyB3ZSBuZWVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSAkY2FyZC5kYXRhc2V0LmlkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gJGNhcmQuZGF0YXNldC50aXRsZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmljZSA9ICRjYXJkLmRhdGFzZXQucHJpY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJpY2VTdHJpbmcgPSAkY2FyZC5kYXRhc2V0LnByaWNlU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVQcmljZSA9ICRjYXJkLmRhdGFzZXQuY29tcGFyZVByaWNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVQcmljZVN0cmluZyA9ICRjYXJkLmRhdGFzZXQuY29tcGFyZVByaWNlU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gJGNhcmQuZGF0YXNldC5pbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0Vuc3VyZSB3ZSBoYXZlIHRoZSBiYXJlIG1pbmltdW0gLSBjb21wYXJpc29uIHByaWNlIGluZm8gbWF5IG5vdCBiZSBwcmVzZW50LCBzbyBpdCdzIG9rYXkgaWYgaXQncyBub3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpZCAmJiB0aXRsZSAmJiBwcmljZSAmJiBwcmljZVN0cmluZyAmJiBpbWFnZSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0Nsb3NlIHBvcHVwIGFuZCBwdXQgaXQgYmFjayB0byB3aGVyZSBpdCBuZWVkcyB0byBsaXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlUHJvZHVjdFBvcFVwKCRwcm9kdWN0UG9wdXBDb250YWluZXIsJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQWRkIHRvIHRoZSBidW5kbGUgLSB3aGljaCB0aGVuIHRyaWdnZXJzIGFsbCBvZiB0aGUgdWkgdXBkYXRlcyBhbmQgcmVzZXQgZnVuY3Rpb25hbGl0eVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQnVuZGxlKGlkLCBwYXJzZUludCgkcXR5VmFsdWUuaW5uZXJUZXh0KSwgdGl0bGUsIHByaWNlLCBwcmljZVN0cmluZywgY29tcGFyZVByaWNlLCBjb21wYXJlUHJpY2VTdHJpbmcsIGltYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwxMDApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoXCJVbmFibGUgdG8gYWRkIHRvIGJ1bmRsZSAtIHBsZWFzZSByZWZyZXNoIHRoZSBwYWdlIGFuZCB0cnkgYWdhaW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiT25lIC8gYWxsIG9mIGlkLCB0aXRsZSwgcHJpY2UsIHByaWNlU3RyaW5nIGFuZC9vciBpbWFnZSB3ZXJlIG5vdCBzZXQuIFVuYWJsZSB0byBhZGQgdGhpcyBwcm9kdWN0IHRvIGJ1bmRsZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29zbm9sZS5sb2coJGNhcmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygkcHJvZHVjdFBvcHVwQ29udGFpbmVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJjb3VsZCBub3QgZmluZCBhdGIgY29udGFpbmVyIGZvciBcIit0aXRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdsb2c6IG5vIGJ1aWxkIGEgYnVuZGxlIHByb2R1Y3QgY2FyZHMgZm91bmQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYnVuZGxlIGNvbnRyb2xzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cclxuICAgICAgICAvLyBDbGVhciBidW5kbGVcclxuICAgICAgICBjb25zdCAkY2xlYXJCdW5kbGUgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUucXVlcnlTZWxlY3RvcihcIi5idWlsZC1hLWJ1bmRsZV9fY2xlYXJcIik7XHJcblxyXG4gICAgICAgIGlmICgkY2xlYXJCdW5kbGUpe1xyXG4gICAgICAgICAgICAkY2xlYXJCdW5kbGUuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNsZWFyQnVuZGxlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJsb2c6IGNsZWFyIHRyaWdnZXIgbm90IGZvdW5kXCIpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBhZGQgdG8gY2FydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cclxuICAgICAgICAvLyBDbGVhciBidW5kbGVcclxuICAgICAgICBjb25zdCAkYWRkVG9DYXJ0cyA9ICRidWlsZEFCdW5kbGVUZW1wbGF0ZS5xdWVyeVNlbGVjdG9yQWxsKFwiLmJ1aWxkLWEtYnVuZGxlX19hZGQtdG8tY2FydFwiKTtcclxuXHJcbiAgICAgICAgaWYgKCRhZGRUb0NhcnRzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAkYWRkVG9DYXJ0cy5mb3JFYWNoKCgkYWRkVG9DYXJ0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAkYWRkVG9DYXJ0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICBwcmVwQW5kQWRkQnVuZGxlVG9DYXJ0KCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCAkY2FydFRyaWdnZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmhlYWRlcl9fY2FydC1saW5rXCIpO1xyXG5cclxuICAgICAgICBpZiAoJGNhcnRUcmlnZ2VyKXtcclxuICAgICAgICAgICAgY29uc3Qgb3BlbkNhcnQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndG9nZ2xlQ2FydCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wZW5DYXJ0ID09IFwidHJ1ZVwiKXtcclxuICAgICAgICAgICAgICAgICRjYXJ0VHJpZ2dlci5jbGljaygpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0b2dnbGVDYXJ0JywgXCJmYWxzZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gYnVuZGxlIHN1bW1hcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cclxuICAgICAgICAvLyBUb2dnbGUgc3VtbWFyeSB2aXNpYmlsaXR5IChtb2JpbGUgb25seSlcclxuICAgICAgICAvL2NvbnN0ICRidW5kbGVJbmZvID0gJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX2luZm8tY29udGFpbmVyXCIpO1xyXG5cclxuICAgICAgICBpZiAoJGJ1bmRsZUluZm8pe1xyXG4gICAgICAgICAgICBjb25zdCAkYnVuZGxlU3VtbWFyeVRyaWdnZXIgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUucXVlcnlTZWxlY3RvcihcIi5idWlsZC1hLWJ1bmRsZV9faW5mby1oZWFkZXItdHJpZ2dlclwiKTtcclxuICAgICAgICAgICAgY29uc3QgJGJ1bmRsZVN1bW1hcnlBcnJvdyA9ICRidWlsZEFCdW5kbGVUZW1wbGF0ZS5xdWVyeVNlbGVjdG9yKFwiLmJ1aWxkLWEtYnVuZGxlX19pbmZvLWV4cGFuZC10cmlnZ2VyXCIpO1xyXG4gICAgICAgICAgICBjb25zdCAkYnVuZGxlU3VtbWFyeU92ZXJsYXkgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUucXVlcnlTZWxlY3RvcihcIi5idWlsZC1hLWJ1bmRsZV9fbW9iaWxlLW92ZXJsYXlcIik7XHJcbiAgICAgICAgICAgIC8vY29uc3QgJGJ1bmRsZVN1bW1hcnlSZXdhcmRzID0gJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX21vYmlsZS1yZXdhcmRzXCIpO1xyXG5cclxuICAgICAgICAgICAgJGJ1bmRsZVN1bW1hcnlUcmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPD0gNzY4ICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlTW9iaWxlSW5mb09wZW4oJGJ1bmRsZUluZm8sJGJ1bmRsZVN1bW1hcnlPdmVybGF5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZigkYnVuZGxlU3VtbWFyeUFycm93KXtcclxuICAgICAgICAgICAgICAgICRidW5kbGVTdW1tYXJ5QXJyb3cuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVNb2JpbGVJbmZvT3BlbigkYnVuZGxlSW5mbywkYnVuZGxlU3VtbWFyeU92ZXJsYXkpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICRidW5kbGVTdW1tYXJ5T3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT57XHJcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPD0gNzY4ICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlTW9iaWxlSW5mb09wZW4oJGJ1bmRsZUluZm8sJGJ1bmRsZVN1bW1hcnlPdmVybGF5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvL0hhbmRsZSB1aSBzaGlmdGluZyBvbiBtb2JpbGVcclxuICAgICAgICAgICAgd2luZG93LnZpc3VhbFZpZXdwb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCRidW5kbGVJbmZvLmNsYXNzTGlzdC5jb250YWlucyhcImFjdGl2ZVwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldEJ1bmRsZUluZm9NYXhIZWlnaHQoJGJ1bmRsZUluZm8pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdsb2c6IGJ1bmRsZSBzdW1tYXJ5IHRyaWdnZXIgbm90IGZvdW5kJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBidW5kbGUgbG9naWMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLy9cclxuICAgICAgICAvKlxyXG4gICAgICAgICAgICBEdXJpbmcgdGhlIGJ1bmRsZS1idWlsZGluZyBwcm9jZXNzLCB0aGUgYnVuZGxlIGlzIHN0b3JlZCBhcyBhbiBvYmplY3QgaW4gbG9jYWwgc3RvcmFnZS4gIFxyXG4gICAgICAgICAgICBPbmNlIHRoZSBjdXN0b21lciBjb21wbGV0ZXMgdGhlaXIgc2VsZWN0aW9uLCB0aGUgYnVuZGxlIHByb2R1Y3RzIGFyZSBhZGRlZCB0byB0aGUgY2FydCAgXHJcbiAgICAgICAgICAgIHdpdGggdGhlIHJlcXVpcmVkIHByb3BlcnRpZXMgc28gdGhhdCBTS0lPIHJlY29nbml6ZXMgdGhlbSBhcyBhIGJ1bmRsZS4gIFxyXG4gICAgICAgICAgICBUaGUgYnVuZGxlIG9iamVjdCBpcyB0aGVuIHJlbW92ZWQgZnJvbSBsb2NhbCBzdG9yYWdlLlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgVGhpcyBlbnN1cmVzIHRoZXJlIGlzIGFsd2F5cyBhIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBCdWlsZC1hLUJ1bmRsZSBzeXN0ZW0uXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBGZWF0dXJlczpcclxuICAgICAgICAgICAgLSBJZiBhIGN1c3RvbWVyIHZpc2l0cyB0aGUgYnVuZGxlIHBhZ2Ugd2hpbGUgYSBidW5kbGUgZXhpc3RzIGluIGxvY2FsIHN0b3JhZ2UsICBcclxuICAgICAgICAgICAgICAgIHRoZWlyIHNlbGVjdGlvbnMgYXJlIGxvYWRlZCBzbyB0aGV5IGNhbiByZXN1bWUgd2hlcmUgdGhleSBsZWZ0IG9mZi5cclxuICAgICAgICAgICAgLSBJZiBhIGN1c3RvbWVyIGNsaWNrcyBFZGl0IG9uIGEgYnVuZGxlIGluIHRoZWlyIGNhcnQsIHRoZXkgYXJlIHJlZGlyZWN0ZWQgdG8gdGhlICBcclxuICAgICAgICAgICAgICAgIGJ1bmRsZSBwYWdlIHdpdGggdGhlaXIgc2VsZWN0aW9ucyBwcmVsb2FkZWQuXHJcbiAgICAgICAgICAgIC0gRWFjaCBidW5kbGUgaXMgYXNzaWduZWQgYSB1bmlxdWUgQnVuZGxlIElELCB3aGljaCBpcyBhdHRhY2hlZCB0byBpdHMgcHJvZHVjdHMgIFxyXG4gICAgICAgICAgICAgICAgd2hlbiBhZGRlZCB0byB0aGUgY2FydC4gVGhpcyBhbGxvd3MgdHJhY2tpbmcgb2Ygd2hpY2ggaXRlbXMgYmVsb25nIHRvIHdoaWNoIGJ1bmRsZS5cclxuICAgICAgICAgICAgLSBJZiBhIGN1c3RvbWVyIGFkZHMgbXVsdGlwbGUgYnVuZGxlcywgZWFjaCBidW5kbGUgcmV0YWlucyBpdHMgdW5pcXVlIElELCAgXHJcbiAgICAgICAgICAgICAgICBwcmV2ZW50aW5nIGNvbmZsaWN0cyBpbiB0aGUgY2FydC5cclxuICAgICAgICAgICAgLSBJZiBhIGN1c3RvbWVyIGhhcyAzKyBpbmRpdmlkdWFsIGl0ZW1zIGluIHRoZWlyIGNhcnQsIHRoZXkgYXJlIGdpdmVuIHRoZSBvcHRpb24gIFxyXG4gICAgICAgICAgICAgICAgdG8gY29udmVydCB0aGVtIGludG8gYSBidW5kbGUsIHJlZGlyZWN0aW5nIHRoZW0gdG8gdGhlIGJ1bmRsZSBidWlsZGVyLlxyXG4gICAgICAgICAgICAtIFRoZSBidW5kbGUgc3lzdGVtIGRvZXMgbm90IGRlcGVuZCBvbiBsb2NhbCBzdG9yYWdlIGFmdGVyIHRoZSBidW5kbGUgaXMgYWRkZWQgdG8gdGhlIGNhcnQsICBcclxuICAgICAgICAgICAgICAgIHJlZHVjaW5nIHBvdGVudGlhbCBnbGl0Y2hlcyB3aGVuIHN3aXRjaGluZyBkZXZpY2VzIG9yIHJldHVybmluZyBsYXRlci5cclxuICAgICAgICAqL1xyXG5cclxuICAgICAgICBpZigkYnVpbGRBQnVuZGxlVGVtcGxhdGUpe1xyXG5cclxuICAgICAgICAgICAgaWYoJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQubWluUmVxdWlyZWQpe1xyXG4gICAgICAgICAgICAgICAgd2luZG93Lm1pbkl0ZW1zUmVxdWlyZWQgPSBwYXJzZUludCgkYnVpbGRBQnVuZGxlVGVtcGxhdGUuZGF0YXNldC5taW5SZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCRidWlsZEFCdW5kbGVUZW1wbGF0ZS5kYXRhc2V0Lm1heEFsbG93ZWQpe1xyXG4gICAgICAgICAgICAgICAgd2luZG93Lm1heEl0ZW1zQWxsb3dlZCA9IHBhcnNlSW50KCRidWlsZEFCdW5kbGVUZW1wbGF0ZS5kYXRhc2V0Lm1heEFsbG93ZWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZigkYnVpbGRBQnVuZGxlVGVtcGxhdGUuZGF0YXNldC5mcmVlRGVsaXZlcnlOdW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgd2luZG93Lml0ZW1zUmVxdWlyZWRGb3JGcmVlRGVsaXZlcnkgPSBwYXJzZUludCgkYnVpbGRBQnVuZGxlVGVtcGxhdGUuZGF0YXNldC5mcmVlRGVsaXZlcnlOdW1iZXIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZigkYnVpbGRBQnVuZGxlVGVtcGxhdGUuZGF0YXNldC5za2lvRGlzY291bnRJdGVtc1JlcXVpcmVkKXtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5pdGVtc1JlcXVpcmVkRm9yRGlzY291bnQgPSBwYXJzZUludCgkYnVpbGRBQnVuZGxlVGVtcGxhdGUuZGF0YXNldC5za2lvRGlzY291bnRJdGVtc1JlcXVpcmVkKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQuc2tpb0Rpc2NvdW50UGVyY2VudGFnZSl7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuZGlzY291bnRSZXdhcmRQZXJjZW50YWdlID0gJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQuc2tpb0Rpc2NvdW50UGVyY2VudGFnZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQucHJvZ3Jlc3NNZXNzYWdlU2hvd1RpbWUpe1xyXG4gICAgICAgICAgICAgICAgd2luZG93LnByb2dyZXNzTWVzc2FnZUR1cmF0aW9uID0gJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQucHJvZ3Jlc3NNZXNzYWdlU2hvd1RpbWUgKiAxMDAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZigkYnVpbGRBQnVuZGxlVGVtcGxhdGUuZGF0YXNldC5wcm9ncmVzc01lc3NhZ2VDb29sZG93bil7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cucHJvZ3Jlc3NNZXNzYWdlQ29vbGRvd24gPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUuZGF0YXNldC5wcm9ncmVzc01lc3NhZ2VDb29sZG93biAqIDEwMDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHdpbmRvdy5idW5kbGVQcm9ncmVzc01lc3NhZ2VzID0gc2V0VXBCdW5kbGVQcm9ncmVzc01lc3NhZ2VzKCRidWlsZEFCdW5kbGVUZW1wbGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgd2luZG93LmVkaXRNb2RlID0gZmFsc2U7ICAgICAgICAgICAgXHJcbiAgICAgICAgY29uc3QgcXVlcnlTdHJpbmcgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoO1xyXG4gICAgICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG4gICAgICAgIGlmKHVybFBhcmFtcy5nZXQoJ2VkaXQnKSl7XHJcbiAgICAgICAgICAgIHdpbmRvdy5lZGl0TW9kZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL0VkaXQgTW9kZSBUZXN0c1xyXG4gICAgICAgIGlmKHdpbmRvdy5lZGl0TW9kZSl7XHJcblxyXG4gICAgICAgICAgICAvL1RocmUgc2hvdWxkIGJlIGEgYnVuZGxlIGluIHN0b3JhZ2Ugd2l0aCBhIGZsYWcgc2V0IGFnYWluc3QgaXQgaW5kaWNhdGluZyBpdCBpcyBhbiBFZGl0IGJ1bmRsZVxyXG4gICAgICAgICAgICBjb25zdCBqc29uQnVuZGxlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidW5kbGVcIik7XHJcblxyXG4gICAgICAgICAgICBsZXQgcHJvY2Vzc0VkaXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYoanNvbkJ1bmRsZSl7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuYnVuZGxlID0gSlNPTi5wYXJzZShqc29uQnVuZGxlKTtcclxuICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5idW5kbGUuZWRpdGluZ19idW5kbGUgPT0gdHJ1ZSAmJiBPYmplY3Qua2V5cyh3aW5kb3cuYnVuZGxlKS5sZW5ndGggPiAwKXsgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cuYnVuZGxlLmJ1bmRsZUlkID09IHVybFBhcmFtcy5nZXQoJ2VkaXQnKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vSXQncyBhIG1hdGNoISBUaGlzIGlzIG91ciBidW5kbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0VkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYocHJvY2Vzc0VkaXQpe1xyXG5cclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJlZGl0IG1vZGUgYnVuZGxlIGV4aXN0cyBhbmQgd2UgYXJlIHVzaW5nIGl0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHVwZGF0ZUJ1bmRsZVVJKFwiZWRpdFwiKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBhbGVydChcIkFuIGVycm9yIG9jY3VycmVkLCB1bmFibGUgdG8gZWRpdCB0aGlzIGJ1bmRsZVwiKTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gXCIvY2FydFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcblxyXG4gICAgICAgICAgICAvL1dlJ3JlIG5vdCBlZGl0aW5nIGEgYnVuZGxlIC0gaXMgdGhlcmUgb25lIGluIGxvY2FsIHN0b3JhZ2U/XHJcbiAgICAgICAgICAgIHdpbmRvdy5idW5kbGUgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYnVuZGxlXCIpKSB8fCB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMod2luZG93LmJ1bmRsZSkubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5idW5kbGUuZWRpdGluZ19idW5kbGUgPT0gdHJ1ZSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vQSB1c2VyIGFiYW5kb25lZCB0aGVpciBFZGl0IGJ1bmRsZSBwcm9jZXNzIHdpdGhvdXQgc2F2aW5nLCBjbGVhciB0aGlzIGZyb20gbG9jYWwgc3RvcmFnZVxyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYnVuZGxlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL0RpZCB0aGUgdXNlciBhYmFuZG9uIGEgYnVuZGxlIGJ1aWxkIGJlZm9yZSB0aGV5IGNsaWNrZWQgdGhlIGVkaXQgYnV0dG9uP1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0b3JlZEJ1bmRsZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzdG9yZWRfYnVuZGxlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoc3RvcmVkQnVuZGxlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmJ1bmRsZSA9IEpTT04ucGFyc2Uoc3RvcmVkQnVuZGxlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vVGhpcyBzaG91bGRuJ3QgYmUgcG9zc2libGUsIGJ1dCBlbnN1cmUgaXQncyBub3QgYW4gZWRpdCBtb2RlIGJ1bmRsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cuYnVuZGxlLmVkaXRpbmdfYnVuZGxlID09IHRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1Jlc2V0LCB3ZSBkb24ndCB3YW50IHRoYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5idW5kbGUgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJhdHRlbXB0aW5nIHRvIGZpeCBidW5kbGUgc3RvcmFnZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1RoaXMgaXMgdGhlIHVzZXIncyB1bmZpbmlzaGVkIGJ1bmRsZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwic3RvcmVkX2J1bmRsZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1NhdmUgaW4gaXQncyBjb3JyZWN0IHBsYWNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImJ1bmRsZVwiLEpTT04uc3RyaW5naWZ5KGJ1bmRsZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmJ1bmRsZSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidW5kbGVcIikpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vRm9yY2UgYSByZWxvYWQgdG8gYWxsb3cgbG9jYWwgc3RvcmFnZSB0byBjbGVhbiB1cCBhbmQgc3RvcCBnZXR0aW5nIHRoaW5ncyBtaXhlZCB1cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy93aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vV2UncmUgbm90IGluIGVkaXQgbW9kZSwgd2Ugc2hvdWxkIHJlbW92ZSB0aGlzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYnVuZGxlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYnVuZGxlID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBidW5kbGUgc2F2ZWQgLSBwcmVsb2FkIGl0XHJcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh3aW5kb3cuYnVuZGxlKS5sZW5ndGggPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdXBkYXRlQnVuZGxlVUkoXCJwcmVsb2FkXCIpXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG5cclxuICAgICAgICAgICAgICAgIC8vTm8gYnVuZGxlIHNhdmVkLCBjcmVhdGUgYSBuZXcgb25lIGFuZCBzZXQgdXBcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5idW5kbGUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVuZGxlSWQ6IGdlbmVyYXRlVW5pcXVlQnVuZGxlSWQoKSxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczoge31cclxuICAgICAgICAgICAgICAgIH07ICAgICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgICAgIGhhbmRsZVByb2dyZXNzTm90aWZpY2F0aW9ucyhcInN0YXJ0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJubyBzdG9yZWQgYnVuZGxlIC0gc2V0dGluZyB1cFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIC8vRmluYWwgYWN0aW9ucyB0byBjb25zaWRlclxyXG5cclxuXHJcbiAgICAgICAgLy8xLiBIYXMgYW4gXCJvcGVuIHBvcC11cFwiIGFjdGlvbiBiZWVuIHJlcXVlc3RlZD9cclxuICAgICAgICBjb25zdCBwb3B1cElkVG9PcGVuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ0YXJnZXRfcG9wdXBfaWRcIik7XHJcbiAgICAgICAgaWYocG9wdXBJZFRvT3Blbil7ICAgIFxyXG4gICAgICAgICAgICAkYnVuZGxlUHJvZHVjdENhcmRzLmZvckVhY2goKCRjYXJkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZigkY2FyZC5kYXRhc2V0LmlkID09IHBvcHVwSWRUb09wZW4pe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL2ZpbmQgdGhlIHBvcHVwIGFuZCBvcGVuIGl0XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJHRhcmdldFBvcHVwVHJpZ2dlciA9ICRjYXJkLnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX3Byb2R1Y3QtY2FyZF9fcG9wdXAtdHJpZ2dlclwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZigkdGFyZ2V0UG9wdXBUcmlnZ2VyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHRhcmdldFBvcHVwVHJpZ2dlci5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9UaGVuIGNsZWFyIGxvY2FsU3RvcmFnZVxyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwidGFyZ2V0X3BvcHVwX2lkXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLzIuIElzIHRoZXJlIGEgcG9wLXVwIHRvIG9wZW4gaW4gdGhlIFVSTD9cclxuICAgICAgICBpZih1cmxQYXJhbXMuZ2V0KCdwb3B1cE9wZW4nKSl7XHJcblxyXG4gICAgICAgICAgICAvL0dldCBhIHZhcmlhbnQgSUQgLSBsb29wIHRocm91Z2ggdGhlIGNhcmRzIGFuZCBvcGVuIHRoZSByZWxldmFudCBvbmVcclxuICAgICAgICAgICAgY29uc3QgdXJsSWQgPSB1cmxQYXJhbXMuZ2V0KCdwb3B1cE9wZW4nKTtcclxuXHJcbiAgICAgICAgICAgICRidW5kbGVQcm9kdWN0Q2FyZHMuZm9yRWFjaCgoJGNhcmQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKCRjYXJkLmRhdGFzZXQucHJvZHVjdElkID09IHVybElkKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9maW5kIHRoZSBwb3B1cCBhbmQgb3BlbiBpdFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0ICR0YXJnZXRQb3B1cFRyaWdnZXIgPSAkY2FyZC5xdWVyeVNlbGVjdG9yKFwiLmJ1aWxkLWEtYnVuZGxlX19wcm9kdWN0LWNhcmRfX3BvcHVwLXRyaWdnZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoJHRhcmdldFBvcHVwVHJpZ2dlcil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXRQb3B1cFRyaWdnZXIuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgLy8zLiBDb21wYXRpYmlsaXR5IGNoZWNrIC0gRW5zdXJlIHRoZXJlIGFyZSBubyBwcm9kdWN0cyBvbiB0aGUgcGFnZSB0aGF0IGhhdmVuJ3QgYmVlbiBzZXQgdXAgaW4gU2tpby4gSWYgdGhlcmUgYXJlLCByZW1vdmUgdGhlIGFiaWxpdHkgdG8gQWRkIHRoZW0gdG8gdGhlIGJ1bmRsZVxyXG4gICAgICAgIGlmKCRidWlsZEFCdW5kbGVUZW1wbGF0ZS5kYXRhc2V0LnBlcmZvcm1WYWxpZGl0eUNoZWNrICE9IFwiZmFsc2VcIil7XHJcbiAgICAgICAgICAgIHByb2R1Y3RDb21wYXRpYmlsaXR5Q2hlY2soJGJ1bmRsZVByb2R1Y3RDYXJkcyk7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcblxyXG4gICAgICAgIC8vVGhpcyBpcyB0aGUgb3JpZ2luYWxcclxuICAgICAgICAvKlxyXG4gICAgICAgIGlmIChKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidW5kbGUnKSkpe1xyXG4gICAgICAgICAgICBidW5kbGUgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidW5kbGUnKSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdwcmVsb2FkZWQgYnVuZGxlOiAnLCBidW5kbGUpOyAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGJ1bmRsZSA9IHtcclxuICAgICAgICAgICAgICAgIGJ1bmRsZUlkOiBnZW5lcmF0ZVVuaXF1ZUJ1bmRsZUlkKCksXHJcbiAgICAgICAgICAgICAgICBpdGVtczoge31cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9ICAgICAgICBcclxuICAgICAgICAqL1xyXG4gICAgICAgIFxyXG5cclxuICAgICAgICAvKlxyXG5cclxuICAgICAgICBmdW5jdGlvbiBwcmVsb2FkQnVuZGxlKCkge1xyXG5cclxuICAgICAgICAgICAgY29uc29sZS5sb2coYnVuZGxlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicHJlbG9hZCBydW5uaW5nXCIpO1xyXG5cclxuICAgICAgICAgICAgd2luZG93LmVkaXRNb2RlID0gZmFsc2U7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcclxuICAgICAgICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhxdWVyeVN0cmluZyk7XHJcbiAgICAgICAgICAgIGlmKHVybFBhcmFtcy5nZXQoJ2VkaXQnKSl7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuZWRpdE1vZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZih3aW5kb3cuZWRpdE1vZGUpe1xyXG5cclxuICAgICAgICAgICAgICAgIC8vVGhyZSBzaG91bGQgYmUgYSBidW5kbGUgaW4gc3RvcmFnZSB3aXRoIGEgZmxhZyBzZXQgYWdhaW5zdCBpdCBpbmRpY2F0aW5nIGl0IGlzIGFuIEVkaXQgYnVuZGxlXHJcbiAgICAgICAgICAgICAgICBidW5kbGUgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgY29uc3QganNvbkJ1bmRsZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYnVuZGxlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBwcm9jZXNzRWRpdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYoanNvbkJ1bmRsZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVuZGxlID0gSlNPTi5wYXJzZShqc29uQnVuZGxlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZihidW5kbGUuZWRpdGluZ19idW5kbGUgPT0gdHJ1ZSAmJiBPYmplY3Qua2V5cyhidW5kbGUpLmxlbmd0aCA+IDApeyAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoYnVuZGxlLmJ1bmRsZUlkID09IHVybFBhcmFtcy5nZXQoJ2VkaXQnKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0l0J3MgYSBtYXRjaCEgVGhpcyBpcyBvdXIgYnVuZGxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzRWRpdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYocHJvY2Vzc0VkaXQpe1xyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUJ1bmRsZVVJKGJ1bmRsZSxcImVkaXRcIik7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydChcIkFuIGVycm9yIG9jY3VycmVkLCB1bmFibGUgdG8gZWRpdCB0aGlzIGJ1bmRsZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiL2NhcnRcIjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfWVsc2V7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGJ1bmRsZSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidW5kbGVcIikpIHx8IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhidW5kbGUpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZihidW5kbGUuZWRpdGluZ19idW5kbGUgPT0gdHJ1ZSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL0EgdXNlciBhYmFuZG9uZWQgdGhlaXIgRWRpdCBidW5kbGUgcHJvY2VzcyB3aXRob3V0IHNhdmluZywgY2xlYXIgdGhpcyBmcm9tIGxvY2FsIHN0b3JhZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJidW5kbGVcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL0RpZCB0aGUgdXNlciBhYmFuZG9uIGEgYnVuZGxlIGJ1aWxkIGJlZm9yZSB0aGV5IGNsaWNrZWQgdGhlIGVkaXQgYnV0dG9uP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdG9yZWRCdW5kbGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc3RvcmVkX2J1bmRsZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihzdG9yZWRCdW5kbGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlID0gSlNPTi5wYXJzZShzdG9yZWRCdW5kbGUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vVGhpcyBzaG91bGRuJ3QgYmUgcG9zc2libGUsIGJ1dCBlbnN1cmUgaXQncyBub3QgYW4gZWRpdCBtb2RlIGJ1bmRsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYnVuZGxlLmVkaXRpbmdfYnVuZGxlID09IHRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vUmVzZXQsIHdlIGRvbid0IHdhbnQgdGhhdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiYXR0ZW1wdGluZyB0byBmaXggYnVuZGxlIHN0b3JhZ2VcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vVGhpcyBpcyB0aGUgdXNlcidzIHVuZmluaXNoZWQgYnVuZGxlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwic3RvcmVkX2J1bmRsZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9TYXZlIGluIGl0J3MgY29ycmVjdCBwbGFjZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiYnVuZGxlXCIsSlNPTi5zdHJpbmdpZnkoYnVuZGxlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImJ1bmRsZVwiKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vRm9yY2UgYSByZWxvYWQgdG8gYWxsb3cgbG9jYWwgc3RvcmFnZSB0byBjbGVhbiB1cCBhbmQgc3RvcCBnZXR0aW5nIHRoaW5ncyBtaXhlZCB1cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vV2UncmUgbm90IGluIGVkaXQgbW9kZSwgd2Ugc2hvdWxkIHJlbW92ZSB0aGlzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImJ1bmRsZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgYnVuZGxlIHNhdmVkIC0gcHJlbG9hZCBpdFxyXG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGJ1bmRsZSkubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVCdW5kbGVVSShidW5kbGUsXCJwcmVsb2FkXCIpXHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVQcm9ncmVzc05vdGlmaWNhdGlvbnMoXCJzdGFydFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgKi9cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgICAgLy8gRnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSB1bmlxdWUgYnVuZGxlIElEXHJcbiAgICAgICAgZnVuY3Rpb24gZ2VuZXJhdGVVbmlxdWVCdW5kbGVJZCgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiYnVuZGxlX1wiICsgRGF0ZS5ub3coKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZ1bmN0aW9uIHRvIHVwZGF0ZSB0aGUgYnVuZGxlIChhZGQvcmVtb3ZlIHByb2R1Y3RzKVxyXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZUJ1bmRsZShwcm9kdWN0SWQsIGNoYW5nZSwgcHJvZHVjdFRpdGxlLCBwcm9kdWN0UHJpY2UsIHByb2R1Y3RQcmljZVN0cmluZywgY29tcGFyZVByb2R1Y3RQcmljZSwgY29tcGFyZVByb2R1Y3RQcmljZVN0cmluZywgcHJvZHVjdEltYWdlKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBJZiB0aGUgcHJvZHVjdCBpcyBub3QgYWxyZWFkeSBpbiB0aGUgYnVuZGxlLCBpbml0aWFsaXplIGl0XHJcbiAgICAgICAgICAgIGlmICghd2luZG93LmJ1bmRsZS5pdGVtc1twcm9kdWN0SWRdKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuYnVuZGxlLml0ZW1zW3Byb2R1Y3RJZF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHByb2R1Y3RUaXRsZSxcclxuICAgICAgICAgICAgICAgICAgICBwcmljZTogcHJvZHVjdFByaWNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHByaWNlU3RyaW5nOiBwcm9kdWN0UHJpY2VTdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyZVByaWNlOiBjb21wYXJlUHJvZHVjdFByaWNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVQcmljZVN0cmluZzogY29tcGFyZVByb2R1Y3RQcmljZVN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICBpbWFnZTogcHJvZHVjdEltYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiAwXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBNb2RpZnkgdGhlIHF1YW50aXR5XHJcbiAgICAgICAgICAgIHdpbmRvdy5idW5kbGUuaXRlbXNbcHJvZHVjdElkXS5xdWFudGl0eSArPSBjaGFuZ2U7XHJcblxyXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGl0ZW0gaWYgdGhlIHF1YW50aXR5IHJlYWNoZXMgMFxyXG4gICAgICAgICAgICBpZiAod2luZG93LmJ1bmRsZS5pdGVtc1twcm9kdWN0SWRdLnF1YW50aXR5IDwgMSB8fCBjaGFuZ2UgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHdpbmRvdy5idW5kbGUuaXRlbXNbcHJvZHVjdElkXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCBidW5kbGUgdG8gbG9jYWxTdG9yYWdlXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiYnVuZGxlXCIsIEpTT04uc3RyaW5naWZ5KHdpbmRvdy5idW5kbGUpKTtcclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBVSVxyXG4gICAgICAgICAgICBpZihjaGFuZ2UgPiAwKXtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZUJ1bmRsZVVJKFwidXBkYXRlXCIpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZUJ1bmRsZVVJKCk7XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZ1bmN0aW9uIHRvIHVwZGF0ZSB0aGUgVUkgd2l0aCB0aGUgY3VycmVudCBidW5kbGUgY29udGVudHNcclxuICAgICAgICBmdW5jdGlvbiB1cGRhdGVCdW5kbGVVSSh0eXBlKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBTZXQgZWxlbWVudHNcclxuXHJcbiAgICAgICAgICAgIGNvbnN0ICRidW5kbGVIZWFkZXIgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUucXVlcnlTZWxlY3RvcihcIi5idWlsZC1hLWJ1bmRsZV9faW5mby1oZWFkZXItdHJpZ2dlclwiKTtcclxuICAgICAgICAgICAgY29uc3QgJGJ1bmRlSXRlbUxpc3QgPSAkYnVuZGxlSGVhZGVyPy5xdWVyeVNlbGVjdG9yKFwidWxcIik7XHJcbiAgICAgICAgICAgIGNvbnN0ICRkZXNrdG9wSXRlbVRlbXBsYXRlID0gJGJ1bmRsZUhlYWRlcj8ucXVlcnlTZWxlY3RvcihcIi5kZXNrdG9wLWJ1bmRsZS1pbWFnZS10ZW1wbGF0ZVwiKTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVuY3lTeW1ib2wgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUuZGF0YXNldC5jdXJyZW5jeVN5bWJvbDtcclxuXHJcbiAgICAgICAgICAgIGxldCB0b3RhbFByaWNlID0gMDtcclxuICAgICAgICAgICAgbGV0IHRvdGFsU2F2aW5ncyA9IDA7XHJcbiAgICAgICAgICAgIGxldCB0b3RhbEl0ZW1zID0gMDtcclxuXHJcbiAgICAgICAgICAgIC8vIENsZWFyIHRoZSBidW5kbGUgbGlzdCAoYnkgY2xlYXJpbmcgaXQgb24gZWFjaCB1cGRhdGUsIHdlIGRvbid0IG5lZWQgdG8gdHJhY2sgY2hhbmdlcylcclxuICAgICAgICAgICAgY29uc3QgJGRlc2t0b3BJdGVtSW1hZ2VzID0gJGJ1bmRlSXRlbUxpc3QucXVlcnlTZWxlY3RvckFsbChcIi5kZXNrdG9wLWJ1bmRsZS1pbWFnZVwiKTtcclxuICAgICAgICAgICAgaWYoJGRlc2t0b3BJdGVtSW1hZ2VzKXtcclxuICAgICAgICAgICAgICAgICRkZXNrdG9wSXRlbUltYWdlcy5mb3JFYWNoKCgkZGVza3RvcEl0ZW1JbWFnZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICRkZXNrdG9wSXRlbUltYWdlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vUmVzZXQgYWxsIHBsYWNlaG9sZGVyIGZyYW1lc1xyXG4gICAgICAgICAgICBjb25zdCBwbGFjZWhvbGRlckZyYW1lcyA9ICRidW5kZUl0ZW1MaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZGVza3RvcC1idW5kbGUtcGxhY2Vob2xkZXJcIik7XHJcbiAgICAgICAgICAgIGlmKHBsYWNlaG9sZGVyRnJhbWVzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJGcmFtZXMuZm9yRWFjaCgocGxhY2Vob2xkZXJGcmFtZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyRnJhbWUuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgLy8gTW9iaWxlIEJ1bmRsZSBJbmZvIENvbnRhaW5lciBQcm9kdWN0IENhcmRzIExpc3QgLSByZW1vdmUgYW55IHByb2R1Y3QgY2FyZHNcclxuICAgICAgICAgICAgY29uc3QgJG1vYmlsZVByb2R1Y3RMaXN0ID0gJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX2luZm8tYm9keS1tb2JpbGUtcHJvZHVjdC1saXN0XCIpO1xyXG4gICAgICAgICAgICBjb25zdCAkbW9iaWxlUHJvZHVjdExpc3RUZW1wbGF0ZSA9ICRtb2JpbGVQcm9kdWN0TGlzdD8ucXVlcnlTZWxlY3RvcihcIi5idWlsZC1hLWJ1bmRsZV9faW5mby1ib2R5LW1vYmlsZS1wcm9kdWN0LWxpc3QtdGVtcGxhdGUtcHJvZHVjdFwiKTtcclxuICAgICAgICAgICAgaWYoJG1vYmlsZVByb2R1Y3RMaXN0KXtcclxuICAgICAgICAgICAgICAgIGNvbnN0ICRwcmV2aW91c01vYmlsZVByb2R1Y3RDYXJkcyA9ICRtb2JpbGVQcm9kdWN0TGlzdC5xdWVyeVNlbGVjdG9yQWxsKFwiLmJ1aWxkLWEtYnVuZGxlX19pbmZvLWJvZHktbW9iaWxlLXByb2R1Y3QtbGlzdC1wcm9kdWN0XCIpO1xyXG4gICAgICAgICAgICAgICAgaWYoJHByZXZpb3VzTW9iaWxlUHJvZHVjdENhcmRzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICRwcmV2aW91c01vYmlsZVByb2R1Y3RDYXJkcy5mb3JFYWNoKCgkcHJldmlvdXNNb2JpbGVQcm9kdWN0Q2FyZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkcHJldmlvdXNNb2JpbGVQcm9kdWN0Q2FyZC5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9Fc3RhYmxpc2ggQWN0aXZlIFB1cmNoYXNlIFR5cGUgKE9uZSBUaW1lIFB1cmNoYXNlIG9yIFN1YnNjcmlwdGlvbikgZWFybHkgaW4gdGhlIGZ1bmN0aW9uIGZvciBvdGhlciBhcmVhcyB0byB1c2UgaXRcclxuICAgICAgICAgICAgbGV0IGFjdGl2ZVB1cmNoYXNlVHlwZSA9IFwib25ldGltZS1wdXJjaGFzZVwiO1xyXG4gICAgXHJcbiAgICAgICAgICAgIC8vSWYgdGhlcmUncyBubyBzdWJzY3JpcHRpb24gc2VsbGluZyBwbGFucyBzZXQgdXAsIHRoZXJlIHdpbGwgYmUgbm8gcHVyY2hhc2UgdHlwZXNcclxuICAgICAgICAgICAgaWYgKCRwdXJjaGFzZVR5cGVzQ29udGFpbmVyKXsgICBcclxuXHJcbiAgICAgICAgICAgICAgICAvL0dldCBhY3RpdmVQdXJjaGFzZVR5cGVcclxuICAgICAgICAgICAgICAgIGNvbnN0ICRhY3RpdmVQdXJjaGFzZVR5cGVDb250YWluZXIgPSAkcHVyY2hhc2VUeXBlc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmJ1aWxkLWEtYnVuZGxlX19wdXJjaGFzZS10eXBlLmFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgIGlmKCRhY3RpdmVQdXJjaGFzZVR5cGVDb250YWluZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZVB1cmNoYXNlVHlwZSA9ICRhY3RpdmVQdXJjaGFzZVR5cGVDb250YWluZXIuZGF0YXNldC50eXBlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBBZGQgYnVuZGxlIGl0ZW1zIHRvIGxpc3RcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMod2luZG93LmJ1bmRsZS5pdGVtcykuZm9yRWFjaCgoW3Byb2R1Y3RJZCwgaXRlbV0saW5kZXgpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zICs9IGl0ZW0ucXVhbnRpdHk7XHJcbiAgICAgICAgICAgICAgICB0b3RhbFByaWNlICs9IGl0ZW0ucHJpY2UgKiBpdGVtLnF1YW50aXR5O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvbXBhcmVQcmljZSA+IGl0ZW0ucHJpY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbFNhdmluZ3MgKz0gKGl0ZW0uY29tcGFyZVByaWNlIC0gaXRlbS5wcmljZSkgKiBpdGVtLnF1YW50aXR5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCRkZXNrdG9wSXRlbVRlbXBsYXRlKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJGl0ZW1UZW1wbGF0ZUNsb25lID0gJGRlc2t0b3BJdGVtVGVtcGxhdGUuY2xvbmVOb2RlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgJGl0ZW1UZW1wbGF0ZUNsb25lLmNsYXNzTGlzdC5yZW1vdmUoXCJkZXNrdG9wLWJ1bmRsZS1pbWFnZS10ZW1wbGF0ZVwiLFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICRpdGVtVGVtcGxhdGVDbG9uZS5jbGFzc0xpc3QuYWRkKFwiZGVza3RvcC1idW5kbGUtaW1hZ2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgJGl0ZW1UZW1wbGF0ZUNsb25lLmlubmVySFRNTCA9IGBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIke2l0ZW0uaW1hZ2V9XCIgY2xhc3M9XCJ3LWZ1bGwgaC1mdWxsIG9iamVjdC1jb250YWluIHJvdW5kZWQtNHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidy02IGgtNiBib3JkZXIgYm9yZGVyLXByaW1hcnktYm9yZGVyIGFic29sdXRlIC10b3AtMS41IC1yaWdodC0xLjUgYmctd2hpdGUgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC0xMDBweCB0ZXh0LWxhYmVsLW0gZm9udC1tZWRpdW0gZmxleC1zaHJpbmstMFwiIHN0eWxlPVwibGV0dGVyLXNwYWNpbmc6MC40OHB4XCI+JHtpdGVtLnF1YW50aXR5fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICBgO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkYnVuZGVJdGVtTGlzdC5wcmVwZW5kKCRpdGVtVGVtcGxhdGVDbG9uZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGluZGV4IDwgNCl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkYnVuZGVJdGVtTGlzdC5jbGFzc0xpc3QucmVtb3ZlKFwic2Nyb2xsYWJsZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJGJ1bmRlSXRlbUxpc3Quc2Nyb2xsTGVmdCA9IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRQbGFjZWhvbGRlckZyYW1lID0gJGJ1bmRlSXRlbUxpc3QucXVlcnlTZWxlY3RvcignLmRlc2t0b3AtYnVuZGxlLXBsYWNlaG9sZGVyW2RhdGEtcG9zaXRpb249XCInKyAoaW5kZXgrMSkgKydcIl0nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodGFyZ2V0UGxhY2Vob2xkZXJGcmFtZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRQbGFjZWhvbGRlckZyYW1lLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vV2UndmUgZ290IG1vcmUgdGhhbiA0IGl0ZW1zIGluIHRoZSBsaXN0IC0gbWFrZSB0aGUgbGlzdCBzY3JvbGxhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbWFnZXMgPSAkYnVuZGVJdGVtTGlzdC5xdWVyeVNlbGVjdG9yQWxsKFwiLmRlc2t0b3AtYnVuZGxlLWltYWdlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJGJ1bmRlSXRlbUxpc3QuY2xhc3NMaXN0LmFkZChcInNjcm9sbGFibGVcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gY3VycmVudEltYWdlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50SW1hZ2VzW2ldLmNsYXNzTGlzdC5jb250YWlucyhcImhpZGRlblwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRJbWFnZXNbaV0uY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwibG9nOiBjb3VsZCBub3QgZmluZCBkZXNrdG9wIGl0ZW0gbGlzdCB0ZW1wbGF0ZSwgdW5hYmxlIHRvIHBvcHVsYXRlIGxpc3Qgb2YgaXRlbXMgaW4gYnVuZGxlXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKCRtb2JpbGVQcm9kdWN0TGlzdCAmJiAkbW9iaWxlUHJvZHVjdExpc3RUZW1wbGF0ZSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vQ3JlYXRlIGEgY2xvc2UsIHN0YXJ0IHBvcHVsYXRpbmcgYW5kIGluc2VydCBpdCBpbnRvIHRoZSBsaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJG1vYmlsZUl0ZW1DbG9uZSA9ICRtb2JpbGVQcm9kdWN0TGlzdFRlbXBsYXRlLmNsb25lTm9kZSh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJG1vYmlsZUl0ZW1DbG9uZS5jbGFzc0xpc3QucmVtb3ZlKFwiYnVpbGQtYS1idW5kbGVfX2luZm8tYm9keS1tb2JpbGUtcHJvZHVjdC1saXN0LXRlbXBsYXRlLXByb2R1Y3RcIixcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkbW9iaWxlSXRlbUNsb25lLmNsYXNzTGlzdC5hZGQoXCJidWlsZC1hLWJ1bmRsZV9faW5mby1ib2R5LW1vYmlsZS1wcm9kdWN0LWxpc3QtcHJvZHVjdFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkbW9iaWxlSXRlbUNsb25lLmRhdGFzZXQucHJvZHVjdElkID0gcHJvZHVjdElkO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCAkbW9iaWxlSXRlbUNsb25lSW1nID0gJG1vYmlsZUl0ZW1DbG9uZS5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtaW1hZ2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoJG1vYmlsZUl0ZW1DbG9uZUltZyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRtb2JpbGVJdGVtQ2xvbmVJbWcuc3JjID0gaXRlbS5pbWFnZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0ICRtb2JpbGVJdGVtQ2xvbmVUaXRsZSA9ICRtb2JpbGVJdGVtQ2xvbmUucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LXRpdGxlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCRtb2JpbGVJdGVtQ2xvbmVUaXRsZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRtb2JpbGVJdGVtQ2xvbmVUaXRsZS50ZXh0Q29udGVudCA9IGl0ZW0udGl0bGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBXaGF0IHdlIGRvIGZvciBwcmljaW5nOlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLSBXb3JrIG91dCB3aGF0IFB1cmNoYXNlIFR5cGUgaXMgU2VsZWN0ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgLSBGb3IgT1RQIC0ganVzdCBvdXRwdXQgdGhlIE9UUCBwcmljZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAtIEZvciBTdWJzY3JpcHRpb25zLCBvdXRwdXQgdGhlIE9UUCBhcyB0aGUgXCJDb21wYXJlIGF0XCIgcHJpY2UgYW5kIG91dHB1dCB0aGUgc3Vic2NyaXB0aW9uIHByaWNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFdlIGRvbid0IHN0b3JlIHRoZSBTdWJzY3JpcHRpb24gUHJpY2UgaW4gdGhlIGJ1bmRsZSwgc28gZ3JhYiBpdCBmcm9tIHRoZSBwcm9kdWN0IGxpc3RpbmdzIG9uIHRoZSBwYWdlIGFuZCBpbnNlcnQgaXRcclxuICAgICAgICAgICAgICAgICAgICAqL1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCAkbW9iaWxlSXRlbVByb2R1Y3RQcmljZSA9ICRtb2JpbGVJdGVtQ2xvbmUucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LXByaWNpbmcgLnByb2R1Y3QtcHJpY2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJG1vYmlsZUl0ZW1Db21wYXJlQXRQcmljZSA9ICRtb2JpbGVJdGVtQ2xvbmUucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LXByaWNpbmcgLmNvbXBhcmUtYXQtcHJpY2VcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGFjdGl2ZVB1cmNoYXNlVHlwZSA9PSBcInN1YnNjcmlwdGlvblwiKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vU2V0IENvbXBhcmUgYXQgUHJpY2UgdG8gdGhlIFByb2R1Y3QgUHJpY2UsIGFuZCBSZWd1bGFyIFByaWNlIHRvIHRoZSBTdWJzY3JpcHRpb24gUHJpY2Ugd2hpY2ggd2UnbGwgbmVlZCB0byBmZXRjaCBmcm9tIGVsc2V3aGVyZSBvbiB0aGUgcGFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZigkbW9iaWxlSXRlbUNvbXBhcmVBdFByaWNlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtb2JpbGVJdGVtQ29tcGFyZUF0UHJpY2UuaW5uZXJIVE1MID0gQ2FyYm9uLk1vbmV5LmZvcm1hdE1vbmV5KGl0ZW0ucHJpY2UsXCLCo3t7YW1vdW50X25vX3RyYWlsaW5nX3plcm9zfX1cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRtb2JpbGVJdGVtUHJvZHVjdFByaWNlKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkYnVuZGxlUHJvZHVjdENhcmRzLmxlbmd0aCA+IDApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0ZpbmQgb3VyIHByb2R1Y3QgYW5kIGV4dHJhY3QgdGhlIHN1YnNjcmlwdGlvbiBwcmljZSBmcm9tIGl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgJHRhcmdldFByb2R1Y3RDYXJkID0gQXJyYXkuZnJvbSgkYnVuZGxlUHJvZHVjdENhcmRzKS5maW5kKCRidW5kbGVQcm9kdWN0Q2FyZCA9PiAkYnVuZGxlUHJvZHVjdENhcmQuZGF0YXNldC5pZCA9PT0gcHJvZHVjdElkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkdGFyZ2V0UHJvZHVjdENhcmQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJQcmljZVRleHQgPSAkdGFyZ2V0UHJvZHVjdENhcmQucXVlcnlTZWxlY3RvcihcIi5zdWJzY3JpcHRpb24tcHJpY2UtaW5mbyAucHJpY2UtdGV4dFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3ViUHJpY2VUZXh0KXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkbW9iaWxlSXRlbVByb2R1Y3RQcmljZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1vYmlsZUl0ZW1Qcm9kdWN0UHJpY2UudGV4dENvbnRlbnQgPSBzdWJQcmljZVRleHQudGV4dENvbnRlbnQ7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRtb2JpbGVJdGVtQ29tcGFyZUF0UHJpY2Upe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtb2JpbGVJdGVtQ29tcGFyZUF0UHJpY2UuaW5uZXJIVE1MID0gQ2FyYm9uLk1vbmV5LmZvcm1hdE1vbmV5KGl0ZW0ucHJpY2UsXCLCo3t7YW1vdW50X25vX3RyYWlsaW5nX3plcm9zfX1cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL1NldCBQcmljZSB0byBhY3R1YWwgUHJvZHVjdCBQcmljZSBhbmQgaGlkZSBjb21wYXJpc29uIHByaWNlIGNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZigkbW9iaWxlSXRlbVByb2R1Y3RQcmljZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbW9iaWxlSXRlbVByb2R1Y3RQcmljZS5pbm5lckhUTUwgPSBDYXJib24uTW9uZXkuZm9ybWF0TW9uZXkoaXRlbS5wcmljZSxcIsKje3thbW91bnRfbm9fdHJhaWxpbmdfemVyb3N9fVwiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRtb2JpbGVJdGVtQ29tcGFyZUF0UHJpY2Upe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1vYmlsZUl0ZW1Db21wYXJlQXRQcmljZS5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBBZGQgQ2xvbmVkIE5vZGUgdG8gdGhlIHBhZ2Ugb3V0cHV0XHJcbiAgICAgICAgICAgICAgICAgICAgJG1vYmlsZVByb2R1Y3RMaXN0LnByZXBlbmQoJG1vYmlsZUl0ZW1DbG9uZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvL1VwZGF0ZSBvdXIgZ2xvYmFsIHZhbHVlIHRoYXQgaW5mb3JtcyB0aGUgcG9wIHVwcyBob3cgbWFueSB0aGV5IGNhbiBhbGxvdyB0aGUgY3VzdG9tZXJzIHRvIGFkZCB3aGVuIGEgbWF4aW11bSB2YWx1ZSBpcyBzZXRcclxuICAgICAgICAgICAgd2luZG93LmN1cnJlbnRUb3RhbEl0ZW1zID0gdG90YWxJdGVtcztcclxuXHJcbiAgICAgICAgICAgIGxldCBib3hJc0Z1bGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYod2luZG93Lm1heEl0ZW1zQWxsb3dlZCl7XHJcbiAgICAgICAgICAgICAgICBpZih0b3RhbEl0ZW1zID49IHdpbmRvdy5tYXhJdGVtc0FsbG93ZWQpe1xyXG4gICAgICAgICAgICAgICAgICAgIGJveElzRnVsbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vU2hvdyAvIGhpZGUgb3VyIG1vYmlsZSBwcm9kdWN0IGNhcmQgbGlzdFxyXG4gICAgICAgICAgICBpZigkbW9iaWxlUHJvZHVjdExpc3Qpe1xyXG4gICAgICAgICAgICAgICAgaWYodG90YWxJdGVtcyA+IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICRtb2JpbGVQcm9kdWN0TGlzdC5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgJG1vYmlsZVByb2R1Y3RMaXN0LmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVycyBmb3IgYnVuZGxlIGl0ZW1zXHJcbiAgICAgICAgICAgIGNvbnN0ICRidW5kbGVMaW5lSXRlbXMgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUucXVlcnlTZWxlY3RvckFsbChcIi5idWlsZC1hLWJ1bmRsZV9pdGVtXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCRidW5kbGVMaW5lSXRlbXMpe1xyXG4gICAgICAgICAgICAgICAgJGJ1bmRsZUxpbmVJdGVtcy5mb3JFYWNoKCRpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCAkcmVtb3ZlID0gJGl0ZW0ucXVlcnlTZWxlY3RvcihcIi5idWlsZC1hLWJ1bmRsZV9pdGVtLXJlbW92ZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCRyZW1vdmUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkcmVtb3ZlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVCdW5kbGUoJGl0ZW0uZGF0YXNldC5pZCwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBpdGVtIGNvdW50XHJcbiAgICAgICAgICAgIGNvbnN0ICRjb3VudCA9ICRidWlsZEFCdW5kbGVUZW1wbGF0ZS5xdWVyeVNlbGVjdG9yQWxsKFwiLmJ1aWxkLWEtYnVuZGxlX19pdGVtLWNvdW50XCIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCRjb3VudCl7XHJcbiAgICAgICAgICAgICAgICAkY291bnQuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmlubmVyVGV4dCA9IHRvdGFsSXRlbXM7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodG90YWxJdGVtcyA+IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcImluYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImluYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2xvZzogY291bnQgbm90IGZvdW5kJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBCdW5kbGUgSW5zdHJ1Y3Rpb25zXHJcblxyXG4gICAgICAgICAgICAvL1VzZSBudW1iZXIgb2YgaXRlbXMgaW4gYnVuZGxlIHRvIGxvb3AgdGhyb3VnaCBhbmQgb3V0cHV0IHRoZSByZWxldmFudCBtZXNzYWdlXHJcbiAgICAgICAgICAgIGNvbnN0IGluc3RydWN0aW9uVGV4dCA9ICRidWlsZEFCdW5kbGVUZW1wbGF0ZS5xdWVyeVNlbGVjdG9yKFwiLmluc3RydWN0aW9uLXRleHRcIik7XHJcbiAgICAgICAgICAgIGlmKGluc3RydWN0aW9uVGV4dCl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXBsYWNlbWVudFRleHQgPSBmaW5kTmV4dEluc3RydWN0aW9uKHRvdGFsSXRlbXMsdGllckNvbnRlbnRBcnIpO1xyXG4gICAgICAgICAgICAgICAgaWYocmVwbGFjZW1lbnRUZXh0KXtcclxuICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQudGV4dENvbnRlbnQgPSByZXBsYWNlbWVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0LmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvblRleHQuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgIEhhbmRsZSBQcmljaW5nIGFjcm9zcyBwdXJjaGFzZSB0eXBlcyBhbmQgYnV0dG9uc1xyXG5cclxuICAgICAgICAgICAgICAgIC0gVG9nZ2xlIGJldHdlZW4gXCJmcm9tXCIgcHJpY2luZyBhbmQgYWN0dWFsIHByaWNpbmcgd2hlbiB0aGVyZSBhcmUgaXRlbXMgaW4gdGhlIGJ1bmRsZVxyXG4gICAgICAgICAgICAgICAgLSBVcGRhdGUgcHJpY2luZyAvIGluc3RydWN0aW9uIGluZm9ybWF0aW9uIG9uIHRoZSBidXR0b25cclxuICAgICAgICAgICAgICAgIC0gQWN0aXZhdGUgLyBEZWFjdGl2YXRlIHRoZSBidXkgYnV0dG9uKHMpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICBsZXQgc3ViY3JpcHRpb25QcmljZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmKCRza2lvRGlzY291bnRBbW91bnQpeyAgIFxyXG5cclxuICAgICAgICAgICAgICAgIC8vQWRqdXN0IGhvdyBwZXJjZW50YWdlIG9mZiBpcyBjYWxjdWxhdGVkIHRvIGF2b2lkIGZsb2F0IGJhc2VkIGluYWNjdXJhY2llc1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJpY2VQZXJJdGVtID0gdG90YWxQcmljZSAvIHRvdGFsSXRlbXM7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaXNjb3VudGVkSXRlbVByaWNlID0gTWF0aC5mbG9vcihwcmljZVBlckl0ZW0gKiAoMTAwIC0gJHNraW9EaXNjb3VudEFtb3VudCkgLyAxMDApO1xyXG4gICAgICAgICAgICAgICAgc3ViY3JpcHRpb25QcmljZSA9IGRpc2NvdW50ZWRJdGVtUHJpY2UgKiB0b3RhbEl0ZW1zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIC8vSWYgdGhlcmUncyBubyBzdWJzY3JpcHRpb24gc2VsbGluZyBwbGFucyBzZXQgdXAsIHRoZXJlIHdpbGwgYmUgbm8gcHVyY2hhc2UgdHlwZXNcclxuICAgICAgICAgICAgaWYgKCRwdXJjaGFzZVR5cGVzQ29udGFpbmVyKXsgICBcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvL2RvIHdlIG5lZWQgdG8gZmFjdG9yIGluIGFueSBTa2lvIERpc2NvdW50cyB3aGVuIHJlbmRlcmluZyBvdXIgUHVyY2hhc2UgVHlwZXM/IFxyXG4gICAgICAgICAgICAgICAgbGV0IGZhY3RvckluU2tpb0Rpc2NvdW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZih3aW5kb3cuZGlzY291bnRSZXdhcmRQZXJjZW50YWdlICE9PSBmYWxzZSAmJiB3aW5kb3cuaXRlbXNSZXF1aXJlZEZvckRpc2NvdW50ICE9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYod2luZG93Lml0ZW1zUmVxdWlyZWRGb3JEaXNjb3VudCA8PSB0b3RhbEl0ZW1zKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9ySW5Ta2lvRGlzY291bnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCAkcHVyY2hhc2VUeXBlUHJpY2luZyA9ICRwdXJjaGFzZVR5cGVzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYnVpbGQtYS1idW5kbGVfX3B1cmNoYXNlLXR5cGUtcHJpY2luZ1wiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAkcHVyY2hhc2VUeXBlUHJpY2luZy5mb3JFYWNoKCgkcHVyY2hhc2VUeXBlUHJpY2luZ0NvbnQpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJHByaWNlVGV4dCA9ICRwdXJjaGFzZVR5cGVQcmljaW5nQ29udC5xdWVyeVNlbGVjdG9yKFwiLmJ1aWxkLWEtYnVuZGxlX19wdXJjaGFzZS10eXBlLXByaWNpbmdfX3RvdGFsLXByaWNlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0ICRmcm9tUHJpY2VUZXh0ID0gJHB1cmNoYXNlVHlwZVByaWNpbmdDb250LnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX3B1cmNoYXNlLXR5cGUtcHJpY2luZ19fZnJvbS1wcmljZVwiKTtcclxuXHJcblxyXG5cclxuLypcclxuICAgIFxyXG4qIFxyXG4qICAgICAgICAgICAgICAgICAgICAgaWYoYWN0aXZlUHVyY2hhc2VUeXBlID09IFwic3Vic2NyaXB0aW9uXCIpe1xyXG4qIFxyXG4qICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaW5hbFByaWNlID0gQ2FyYm9uLk1vbmV5LmZvcm1hdE1vbmV5KHN1YnNjcmlwdGlvblByaWNlLFwiwqN7e2Ftb3VudF9ub190cmFpbGluZ196ZXJvc319XCIpO1xyXG4qICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZhY3RvckluU2tpb0Rpc2NvdW50KXtcclxuKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxQcmljZSA9IENhcmJvbi5Nb25leS5mb3JtYXRNb25leShzdWJzY3JpcHRpb25QcmljZSAtIChzdWJzY3JpcHRpb25QcmljZSAqICh3aW5kb3cuZGlzY291bnRSZXdhcmRQZXJjZW50YWdlIC8gMTAwKSksXCLCo3t7YW1vdW50X25vX3RyYWlsaW5nX3plcm9zfX1cIik7ICAgICAgICAgXHJcbiogICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4qIFxyXG4qICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlSW5mby50ZXh0Q29udGVudCA9IGZpbmFsUHJpY2U7XHJcbiogXHJcbiogICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiB0aGVyZSdzIGEgU2tpbyBkaXNjb3VudCwgdGhlIFwiY29tcGFyaXNvblwiIHByaWNlIHNob3VsZCByZWZsZWN0IHRoYXQgdG9vLiBXZSdyZSBjb21wYXJpbmcgdGhlIFN1YnNjcmlwdGlvbiBwcmljZSB0byB0aGUgT25lIFRpbWUgUHVyY2hhc2UgUHJpY2UgLSBzbyB0aGUgb25lIHRpbWUgcHVyY2hhc2UgcHJpY2Ugc2hvdWxkIGJlIGFjY3VyYXRlXHJcbiogICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXBhcmlzb25QcmljZSA9IHRvdGFsUHJpY2U7ICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiogICAgICAgICAgICAgICAgICAgICAgICAgaWYoZmFjdG9ySW5Ta2lvRGlzY291bnQpe1xyXG4qICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJpc29uUHJpY2UgPSB0b3RhbFByaWNlIC0gKHRvdGFsUHJpY2UgKiAod2luZG93LmRpc2NvdW50UmV3YXJkUGVyY2VudGFnZSAvIDEwMCkpO1xyXG4qICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuKiBcclxuKiAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJpc29uUHJpY2VJbmZvLnRleHRDb250ZW50ID0gQ2FyYm9uLk1vbmV5LmZvcm1hdE1vbmV5KGNvbXBhcmlzb25QcmljZSxcIsKje3thbW91bnRfbm9fdHJhaWxpbmdfemVyb3N9fVwiKTtcclxuKiAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJpc29uUHJpY2VJbmZvLnN0eWxlID0gXCJcIjtcclxuKiAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4qIFxyXG5cclxuKiBcclxuKiAgICAgICAgICAgICAgICAgICAgICAgICBwcmljZUluZm8udGV4dENvbnRlbnQgPSBmaW5hbFByaWNlO1xyXG4qICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmlzb25QcmljZUluZm8uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4qICAgICAgICAgICAgICAgICAgICAgfVxyXG4qL1xyXG5cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL1wiRnJvbVwiIHByaWNlIGNhbiBiZSB0dXJuZWQgb2ZmIGluIHRoZSBjdXN0b21pc2VyLCBzbyB3ZSBuZWVkIHRvIGNhdGVyIGZvciB0aGF0XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoJHByaWNlVGV4dCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRvdGFsSXRlbXMgPiAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBcImZyb21cIiB0ZXh0IGV4aXN0cywgaGlkZSBpdC4gQ2FsY3VsYXRlIGJvdGggdGhlIHRvdGFsIHByaWNlIGFuZCB0aGUgdG90YWwgcHJpY2UgbWludXMgdGhlIHNhdmluZyBmcm9tIHN1YnNjcmlwdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGZyb21QcmljZVRleHQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmcm9tUHJpY2VUZXh0LmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHJpY2VUZXh0LmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkcHJpY2VUZXh0LmNsYXNzTGlzdC5jb250YWlucyhcInN1YnNjcmlwdGlvblwiKSl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN1YmNyaXB0aW9uUHJpY2UgIT09IGZhbHNlKXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdWJQcmljZU91dHB1dCA9IHN1YmNyaXB0aW9uUHJpY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZhY3RvckluU2tpb0Rpc2NvdW50KXsgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViUHJpY2VPdXRwdXQgPSBzdWJjcmlwdGlvblByaWNlIC0gKHN1YmNyaXB0aW9uUHJpY2UgKiAod2luZG93LmRpc2NvdW50UmV3YXJkUGVyY2VudGFnZSAvIDEwMCkpOyAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByaWNlVGV4dC50ZXh0Q29udGVudCA9IENhcmJvbi5Nb25leS5mb3JtYXRNb25leShzdWJQcmljZU91dHB1dCxcIsKje3thbW91bnRfbm9fdHJhaWxpbmdfemVyb3N9fVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJEaXNjb3VudCBhbW91bnQgbm90IHNldCwgdGhpcyBzaG91bGQgYmUgZXN0YWJsaXNoZWQgd2hlbiB1c2luZyBzdWJzY3JpcHRpb24uIFVuYWJsZSB0byBvdXRwdXQgY29ycmVjdCBzdWJzY3JpcHRpb24gcHJpY2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcmljZVRleHQuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9GYWN0b3IgaW4gU2tpbyBEaXNjb3VudCBpZiByZWxldmFudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvdHBQcmljZSA9IHRvdGFsUHJpY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZmFjdG9ySW5Ta2lvRGlzY291bnQpeyAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90cFByaWNlID0gdG90YWxQcmljZSAtICh0b3RhbFByaWNlICogKHdpbmRvdy5kaXNjb3VudFJld2FyZFBlcmNlbnRhZ2UgLyAxMDApKTsgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHJpY2VUZXh0LnRleHRDb250ZW50ID0gQ2FyYm9uLk1vbmV5LmZvcm1hdE1vbmV5KG90cFByaWNlLFwiwqN7e2Ftb3VudF9ub190cmFpbGluZ196ZXJvc319XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkZnJvbVByaWNlVGV4dCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9IaWRlIGFjdHVhbCBwcmljaW5nIGFuZCByZXN0b3JlIFwiZnJvbVwiIHByaWNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByaWNlVGV4dC5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZyb21QcmljZVRleHQuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSnVzdCByZW1vdmUgdGhlIHByaWNpbmcgdGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcmljZVRleHQuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHJpY2VUZXh0LnRleHRDb250ZW50ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL1RoaXMgc2hvdWxkIGFsd2F5cyBleGlzdCBpbiB0aGlzIGNvbnRleHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJQdXJjaGFzZSBUeXBlIG9wdGlvbiBkb2VzbnQgaGF2ZSBhIGJ1aWxkLWEtYnVuZGxlX19wdXJjaGFzZS10eXBlLXByaWNpbmdfX3RvdGFsLXByaWNlIGNsYXNzLiBVbmFibGUgdG8gdXBkYXRlIHByaWNpbmdcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vSGFuZGxlIEJ1dHRvbiBDb25maWcgLSBiYXNlZCBvbiB3aGV0aGVyIHRoZXJlJ3MgYSBtaW5pbXVtIHJlcXVpcmVkLCB0b2dnbGUgdGhlIGJ1dHRvbiBmcm9tIGRpc2FibGVkIC8gZW5hYmxlZFxyXG4gICAgICAgICAgICBpZigkYWRkVG9DYXJ0cy5sZW5ndGggPiAwKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCAkYnVuZGxlRm9vdGVyID0gJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX2luZm8tZm9vdGVyXCIpO1xyXG4gICAgICAgICAgICAgICAgJGFkZFRvQ2FydHMuZm9yRWFjaCgoJGFkZFRvQ2FydCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vVGhlcmUgaXMgYSBtaW5pbXVtIGFtb3VudCBvZiBpdGVtcyByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5taW5JdGVtc1JlcXVpcmVkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodG90YWxJdGVtcyA8IHdpbmRvdy5taW5JdGVtc1JlcXVpcmVkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVCdG4oJGFkZFRvQ2FydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVCdG5NZXNzYWdpbmcoJGFkZFRvQ2FydCxmYWxzZSx0b3RhbEl0ZW1zLHdpbmRvdy5taW5JdGVtc1JlcXVpcmVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRidW5kbGVGb290ZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidW5kbGVGb290ZXIuY2xhc3NMaXN0LnJlbW92ZShcInF1YWxpZmllZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9UZWxsIHRoZSBtb2JpbGUgZm9vdGVyIHRoYW4gdGhlIEFkZCB0byBDYXJ0IGlzIG5vdyBxdWFsaWZpZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRidW5kbGVGb290ZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidW5kbGVGb290ZXIuY2xhc3NMaXN0LmFkZChcInF1YWxpZmllZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUJ0bigkYWRkVG9DYXJ0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVCdG5NZXNzYWdpbmcoJGFkZFRvQ2FydCx0cnVlLHRvdGFsSXRlbXMsd2luZG93Lm1pbkl0ZW1zUmVxdWlyZWQsdG90YWxQcmljZSxzdWJjcmlwdGlvblByaWNlLGFjdGl2ZVB1cmNoYXNlVHlwZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9ObyBtaW5pbXVtIGFtb3VudCwganVzdCBlbnN1cmUgdGhhdCB0aGVyZSBpcyBvbmUgcHJvZHVjdCBpbiB0aGUgYnVuZGxlIGJlZm9yZSBlbmFibGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0b3RhbEl0ZW1zIDwgMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQnRuKCRhZGRUb0NhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQnRuTWVzc2FnaW5nKCRhZGRUb0NhcnQsZmFsc2UsdG90YWxJdGVtcywxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRidW5kbGVGb290ZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidW5kbGVGb290ZXIuY2xhc3NMaXN0LnJlbW92ZShcInF1YWxpZmllZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9UZWxsIHRoZSBtb2JpbGUgZm9vdGVyIHRoYW4gdGhlIEFkZCB0byBDYXJ0IGlzIG5vdyBxdWFsaWZpZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRidW5kbGVGb290ZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidW5kbGVGb290ZXIuY2xhc3NMaXN0LmFkZChcInF1YWxpZmllZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUJ0bigkYWRkVG9DYXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUJ0bk1lc3NhZ2luZygkYWRkVG9DYXJ0LHRydWUsdG90YWxJdGVtcyx3aW5kb3cubWluSXRlbXNSZXF1aXJlZCx0b3RhbFByaWNlLHN1YmNyaXB0aW9uUHJpY2UsYWN0aXZlUHVyY2hhc2VUeXBlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiVW5hYmxlIHRvIGZpbmQgQWRkIHRvIGNhcnQgYnV0dG9ucyBpbiBVcGRhdGUgVUkgZnVuY3Rpb25cIilcclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vVXBkYXRlIFJld2FyZHMgVGhyZXNob2xkc1xyXG4gICAgICAgICAgICBjb25zdCAkcmV3YXJkVGhyZXNob2xkQ29udGFpbmVycyA9ICRidWlsZEFCdW5kbGVUZW1wbGF0ZS5xdWVyeVNlbGVjdG9yQWxsKFwiLmJ1aWxkLWEtYnVuZGxlLXJld2FyZC10aHJlc2hvbGRzLWNvbnRhaW5lclwiKTtcclxuICAgICAgICAgICAgaWYoJHJld2FyZFRocmVzaG9sZENvbnRhaW5lcnMubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgICAgICAgICAgICAgJHJld2FyZFRocmVzaG9sZENvbnRhaW5lcnMuZm9yRWFjaCgoJHJld2FyZFRocmVzaG9sZENvbnRhaW5lcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgJHJld2FyZFRocmVzaG9sZFNlZ21lbnRzID0gJHJld2FyZFRocmVzaG9sZENvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiLmJ1aWxkLWEtYnVuZGxlLXJld2FyZC10aHJlc2hvbGRzIC5yZXdhcmQtdGhyZXNob2xkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCRyZXdhcmRUaHJlc2hvbGRTZWdtZW50cy5sZW5ndGggPiAwKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcmV2aW91c01pbGVzdG9uZU51bWJlciA9IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXVsdGlwbGVSZXdhcmRNZXNzYWdlcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNSZXdhcmRNZXNzYWdlcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAkcmV3YXJkTWVzc2FnZXMgPSAkcmV3YXJkVGhyZXNob2xkQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFyZ2V0LWluZGljYXRvci1yZXdhcmRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRyZXdhcmRNZXNzYWdlcy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmV3YXJkTWVzc2FnZXMgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRyZXdhcmRNZXNzYWdlcy5sZW5ndGggPiAxKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVJld2FyZE1lc3NhZ2VzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHJld2FyZFRocmVzaG9sZFNlZ21lbnRzLmZvckVhY2goKCRyZXdhcmRUaHJlc2hvbGRTZWdtZW50KSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9HZXQgdGhlIG51bWJlciByZWxhdGVkIHRvIHRoaXMgbWlsZXN0b25lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXROdW1iZXIgPSAkcmV3YXJkVGhyZXNob2xkU2VnbWVudC5kYXRhc2V0LnRhcmdldE51bWJlcjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1NldCBvdXQgdmFyaWFibGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAkcHJvZ3Jlc3NCYXIgPSAkcmV3YXJkVGhyZXNob2xkU2VnbWVudC5xdWVyeVNlbGVjdG9yKFwiLnByb2dyZXNzLW1lYXN1cmVtZW50XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgJGluY29tcGxldGVJbmRpY2F0b3IgPSAkcmV3YXJkVGhyZXNob2xkU2VnbWVudC5xdWVyeVNlbGVjdG9yKFwiLnRhcmdldC1pbmRpY2F0b3ItaW5jb21wbGV0ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICRjb21wbGV0ZUluZGljYXRvciA9ICRyZXdhcmRUaHJlc2hvbGRTZWdtZW50LnF1ZXJ5U2VsZWN0b3IoXCIudGFyZ2V0LWluZGljYXRvci1jb21wbGV0ZVwiKTsgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICRyZXdhcmRNZXNzYWdlID0gJHJld2FyZFRocmVzaG9sZFNlZ21lbnQucXVlcnlTZWxlY3RvcihcIi50YXJnZXQtaW5kaWNhdG9yLXJld2FyZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGFyZ2V0TnVtYmVyICYmICRwcm9ncmVzc0JhciAmJiAkaW5jb21wbGV0ZUluZGljYXRvciAmJiAkY29tcGxldGVJbmRpY2F0b3Ipe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hhbmRsZSBSZXdhcmQgTWVzc2FnZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpc1Jld2FyZE1lc3NhZ2VzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHJld2FyZE1lc3NhZ2Upe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodG90YWxJdGVtcyA+PSB0YXJnZXROdW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXdhcmRNZXNzYWdlLmNsYXNzTGlzdC5hZGQoXCJjb21wbGV0ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXdhcmRNZXNzYWdlLmNsYXNzTGlzdC5yZW1vdmUoXCJjb21wbGV0ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hhdmUgd2UgYWxyZWFkeSBhY2hpZXZlZCB0aGlzP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHRvdGFsSXRlbXMgPj0gdGFyZ2V0TnVtYmVyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTWFyayBhcyBjb21wbGV0ZWQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcm9ncmVzc0Jhci5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5jb21wbGV0ZUluZGljYXRvci5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29tcGxldGVJbmRpY2F0b3IuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hhdmUgd2Ugb25seSBqdXN0IGFjaGlldmVkIHRoZSBwcmV2aW91cyBudW1iZXIgT1Igbm90IGRvbmUgYW55dGhpbmcgYXQgYWxsIHlldD9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodG90YWxJdGVtcyA9PSBwcmV2aW91c01pbGVzdG9uZU51bWJlcil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY29tcGxldGUgcmVzZXQgb2YgdGhpcyBpdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHJvZ3Jlc3NCYXIuc3R5bGUud2lkdGggPSBcIjAlXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5jb21wbGV0ZUluZGljYXRvci5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbXBsZXRlSW5kaWNhdG9yLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0YXJnZXROdW1iZXIgLSBwcmV2aW91c01pbGVzdG9uZU51bWJlciA+IDEpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1RoZSBuZXh0IG1pbGVzdG9uZSBjb21lcyBhdCA3IGl0ZW1zLCBhbmQgSSBoYXZlIDUgaW4gbXkgYnVuZGxlLiBJJ20gYSB0aGlyZCBvZiB0aGUgd2F5IHRvIHRoYXQgLSBjYWxjdWxhdGUgaG93IGZhciB3ZSBhcmUgdGhyb3VnaCBhbmQgdXBkYXRlIHRoZSBwcm9ncmVzcyBiYXIgYWNjb3JkaW5nbHlcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWxTdGVwcyA9IHRhcmdldE51bWJlciAtIHByZXZpb3VzTWlsZXN0b25lTnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjaGlldmVkU3RlcHMgPSB0b3RhbEl0ZW1zIC0gcHJldmlvdXNNaWxlc3RvbmVOdW1iZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2dyZXNzUGVyY2VudGFnZSA9IGFjaGlldmVkU3RlcHMvdG90YWxTdGVwcyAqIDEwMDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByb2dyZXNzQmFyLnN0eWxlLndpZHRoID0gYCR7cHJvZ3Jlc3NQZXJjZW50YWdlfSVgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbmNvbXBsZXRlSW5kaWNhdG9yLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbXBsZXRlSW5kaWNhdG9yLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9UaGVyZSdzIG9ubHkgb25lIGp1bXAgdG8gbWFrZSBoZXJlLCBkbyBub3RoaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTWlsZXN0b25lTnVtYmVyID0gdGFyZ2V0TnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJOb3QgYWxsIG9mIHRoZSByZXF1aXJlZCB2YXJpYWJsZXMgY291bGQgYmUgZm91bmQuIFVuYWJsZSB0byBwcm9ncmVzcyB0aHJvdWdoIHJld2FyZHMgdGhyZXNob2xkIHVwZGF0ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9Xb3JrIG91dCB3aGljaCByZXdhcmQgdG8gc2hvdyBpZiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG11bHRpcGxlUmV3YXJkTWVzc2FnZXMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbXBsZXRlUmV3YXJkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluY29tcGxldGVSZXdhcmRzID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJld2FyZE1lc3NhZ2VzLmZvckVhY2goKCRyZXdhcmRNZXNzYWdlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHJld2FyZE1lc3NhZ2UuY2xhc3NMaXN0LmNvbnRhaW5zKFwiY29tcGxldGVcIikpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZVJld2FyZHMucHVzaCgkcmV3YXJkTWVzc2FnZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21wbGV0ZVJld2FyZHMucHVzaCgkcmV3YXJkTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaW5jb21wbGV0ZVJld2FyZHMubGVuZ3RoID09PSAkcmV3YXJkTWVzc2FnZXMubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hpZGUgYWxsIGJ1dCB0aGUgZmlyc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNvbXBsZXRlUmV3YXJkcy5mb3JFYWNoKCgkcmV3YXJkVGV4dCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaW5kZXggIT09IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJld2FyZFRleHQuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV3YXJkVGV4dC5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoY29tcGxldGVSZXdhcmRzLmxlbmd0aCA9PT0gJHJld2FyZE1lc3NhZ2VzLmxlbmd0aCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9IaWRlIGFsbCBidXQgdGhlIGxhc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZVJld2FyZHMuZm9yRWFjaCgoJHJld2FyZFRleHQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGluZGV4ICE9PSBjb21wbGV0ZVJld2FyZHMubGVuZ3RoIC0gMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmV3YXJkVGV4dC5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXdhcmRUZXh0LmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0hpZGUgYWxsIGNvbXBsZXRlLCBzaG93IHRoZSBmaXJzdCBpbmNvbXBsZXRlIGFuZCBoaWRlIHRoZSByZXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVSZXdhcmRzLmZvckVhY2goKCRyZXdhcmRUZXh0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXdhcmRUZXh0LmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21wbGV0ZVJld2FyZHMuZm9yRWFjaCgoJHJld2FyZFRleHQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGluZGV4ICE9PSAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXdhcmRUZXh0LmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJld2FyZFRleHQuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIHByb2R1Y3QgY2FyZHNcclxuICAgICAgICAgICAgaWYgKCRidW5kbGVQcm9kdWN0Q2FyZHMpe1xyXG4gICAgICAgICAgICAgICAgJGJ1bmRsZVByb2R1Y3RDYXJkcy5mb3JFYWNoKCRjYXJkID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBwcm9kdWN0IElEIGZyb20gdGhlIGRhdGEgYXR0cmlidXRlXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSAkY2FyZC5kYXRhc2V0LmlkO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0ICRxdWFudGl0eSA9ICRjYXJkLnF1ZXJ5U2VsZWN0b3IoJy5wcm9kdWN0LXF1YW50aXR5Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJGNvbnRyb2xzID0gJGNhcmQucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LWNvbnRyb2xzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0ICRpbmNyZWFzZSA9ICRjYXJkLnF1ZXJ5U2VsZWN0b3IoXCIucHJvZHVjdC1xdWFudGl0eV9faW5jcmVhc2VcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vSWYgYSBtYXhpbXVtIGlzIGluIHBsYWNlLCByZW1vdmUgdGhlIFwiQm94IGZ1bGxcIiBiZWZvcmUgd2UgY29uZHVjdCBhbnkgdGVzdHNcclxuICAgICAgICAgICAgICAgICAgICBpZigkY29udHJvbHMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkY29udHJvbHMuY2xhc3NMaXN0LnJlbW92ZShcImJveC1mdWxsXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoJGluY3JlYXNlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlQnRuKCRpbmNyZWFzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHByb2R1Y3QgaXMgaW4gdGhlIGJ1bmRsZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuYnVuZGxlLml0ZW1zW2lkXSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXNzaWduIGRhdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEl0ZW0gPSB3aW5kb3cuYnVuZGxlLml0ZW1zW2lkXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vRmluZCB0aGUgbW9iaWxlIGVxdWl2YWxlbnRzIHRoYXQgd2Ugc2V0IHVwIGVhcmxpZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgJG1vYmlsZVByb2R1Y3RMaXN0RXF1aXZhbGVudCA9ICRtb2JpbGVQcm9kdWN0TGlzdC5xdWVyeVNlbGVjdG9yKGAuYnVpbGQtYS1idW5kbGVfX2luZm8tYm9keS1tb2JpbGUtcHJvZHVjdC1saXN0LXByb2R1Y3RbZGF0YS1wcm9kdWN0LWlkPVwiJHtpZH1cIl1gKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcXVhbnRpdHkgZGlzcGxheWVkIGluIHRoZSBwcm9kdWN0IGNhcmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRxdWFudGl0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHF1YW50aXR5LmlubmVyVGV4dCA9IGN1cnJlbnRJdGVtLnF1YW50aXR5O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRtb2JpbGVQcm9kdWN0TGlzdEVxdWl2YWxlbnQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICRtb2JpbGVQcm9kdWN0TGlzdEVxdWl2YWxlbnRRdHkgPSAkbW9iaWxlUHJvZHVjdExpc3RFcXVpdmFsZW50LnF1ZXJ5U2VsZWN0b3IoXCIucHJvZHVjdC1xdWFudGl0eS1zZWxlY3RvciAucHJvZHVjdC1xdWFudGl0eVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkbW9iaWxlUHJvZHVjdExpc3RFcXVpdmFsZW50UXR5KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1vYmlsZVByb2R1Y3RMaXN0RXF1aXZhbGVudFF0eS5pbm5lclRleHQgPSBjdXJyZW50SXRlbS5xdWFudGl0eTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gICBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBjb250cm9scyBzdHlsaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkY29udHJvbHMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRyb2xzLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGN1c3RvbWVyIGhhcyBtYXhpbXVtIGFtb3VudCBvZiBwcm9kdWN0cyBjdXJyZW50bHkgYXZhaWxhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICRtb2JpbGVQcm9kdWN0TGlzdEVxdWl2YWxlbnRJbmNyZWFzZSA9ICRtb2JpbGVQcm9kdWN0TGlzdEVxdWl2YWxlbnQucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LXF1YW50aXR5LXNlbGVjdG9yIC5wcm9kdWN0LXF1YW50aXR5X19pbmNyZWFzZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SXRlbS5xdWFudGl0eSA9PSAkY2FyZC5kYXRhc2V0LmludmVudG9yeSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQnRuKCRpbmNyZWFzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJG1vYmlsZVByb2R1Y3RMaXN0RXF1aXZhbGVudEluY3JlYXNlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQnRuKCRtb2JpbGVQcm9kdWN0TGlzdEVxdWl2YWxlbnRJbmNyZWFzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9DYXRlciBmb3IgbWF4aW11bSBpbiB0aGUgYm94IGJlaW5nIGhpdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihib3hJc0Z1bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUJ0bigkaW5jcmVhc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRtb2JpbGVQcm9kdWN0TGlzdEVxdWl2YWxlbnRJbmNyZWFzZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUJ0bigkbW9iaWxlUHJvZHVjdExpc3RFcXVpdmFsZW50SW5jcmVhc2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vQmluZGluZyBvZiBNb2JpbGUgUHJvZHVjdCBMaXN0IENvbnRyb2xzIGhlcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgJG1vYmlsZVByb2R1Y3RMaXN0RXF1aXZhbGVudERlY3JlYXNlID0gJG1vYmlsZVByb2R1Y3RMaXN0RXF1aXZhbGVudC5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtcXVhbnRpdHktc2VsZWN0b3IgLnByb2R1Y3QtcXVhbnRpdHlfX2RlY3JlYXNlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoJG1vYmlsZVByb2R1Y3RMaXN0RXF1aXZhbGVudEluY3JlYXNlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtb2JpbGVQcm9kdWN0TGlzdEVxdWl2YWxlbnRJbmNyZWFzZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVCdW5kbGUoaWQsIDEsIHdpbmRvdy5idW5kbGUuaXRlbXNbaWRdLnRpdGxlLCBidW5kbGUuaXRlbXNbaWRdLnByaWNlLCB3aW5kb3cuYnVuZGxlLml0ZW1zW2lkXS5wcmljZVN0cmluZywgd2luZG93LmJ1bmRsZS5pdGVtc1tpZF0uY29tcGFyZVByaWNlLCB3aW5kb3cuYnVuZGxlLml0ZW1zW2lkXS5jb21wYXJlUHJpY2VTdHJpbmcsIHdpbmRvdy5idW5kbGUuaXRlbXNbaWRdLmltYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZigkbW9iaWxlUHJvZHVjdExpc3RFcXVpdmFsZW50RGVjcmVhc2Upe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1vYmlsZVByb2R1Y3RMaXN0RXF1aXZhbGVudERlY3JlYXNlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVCdW5kbGUoaWQsIC0xLCB3aW5kb3cuYnVuZGxlLml0ZW1zW2lkXS50aXRsZSwgd2luZG93LmJ1bmRsZS5pdGVtc1tpZF0ucHJpY2UsIHdpbmRvdy5idW5kbGUuaXRlbXNbaWRdLnByaWNlU3RyaW5nLCB3aW5kb3cuYnVuZGxlLml0ZW1zW2lkXS5jb21wYXJlUHJpY2UsIHdpbmRvdy5idW5kbGUuaXRlbXNbaWRdLmNvbXBhcmVQcmljZVN0cmluZywgd2luZG93LmJ1bmRsZS5pdGVtc1tpZF0uaW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBxdWFudGl0eSBkaXNwbGF5ZWQgaW4gdGhlIHByb2R1Y3QgY2FyZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHF1YW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcXVhbnRpdHkuaW5uZXJUZXh0ID0gJzAnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgY29udHJvbHMgc3R5bGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGNvbnRyb2xzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb250cm9scy5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL0lmIHdlJ3JlIGF0IG1heCwgZGlzYWJsZSB0aGlzIGFuZCByZXBsYWNlIHdpdGggXCJCb3ggZnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGJveElzRnVsbCAmJiAkY29udHJvbHMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRyb2xzLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29udHJvbHMuY2xhc3NMaXN0LmFkZChcImJveC1mdWxsXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL0hhbmRsZSBQb3AgdXAgY29udHJvbHNcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCAkcG9wdXBBdGNDb250cm9scyA9ICRjYXJkLnF1ZXJ5U2VsZWN0b3IoXCIucHJvZHVjdC1wb3B1cC1jb250ZW50cyAuYmFiLXByb2R1Y3QtcG9wdXAtY29udGVudHNfX2F0Yi1jb250YWluZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoJHBvcHVwQXRjQ29udHJvbHMpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9GaW5kIHRoZSB2YWx1ZXMgd2UgbmVlZCBzbyB0aGF0IHdlIGNhbiBjbGVhbiB1cFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbFByaWNlID0gJHBvcHVwQXRjQ29udHJvbHMuZGF0YXNldC5zaW5nbGVQcmljZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uUHJpY2UgPSAkcG9wdXBBdGNDb250cm9scy5kYXRhc2V0LnNpbmdsZVN1YnNjcmlwdGlvblByaWNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAkcXR5RGVjcmVhc2UgPSAkcG9wdXBBdGNDb250cm9scy5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtcXVhbnRpdHktc2VsZWN0b3IgLnByb2R1Y3QtcXVhbnRpdHlfX2RlY3JlYXNlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAkcXR5SW5jcmVhc2UgPSAkcG9wdXBBdGNDb250cm9scy5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtcXVhbnRpdHktc2VsZWN0b3IgLnByb2R1Y3QtcXVhbnRpdHlfX2luY3JlYXNlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAkcXR5VmFsdWUgPSAkcG9wdXBBdGNDb250cm9scy5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtcXVhbnRpdHktY29udGFpbmVyIC5wcm9kdWN0LXF1YW50aXR5XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAkYWRkVG9CdW5kbGVCdXR0b25zID0gJHBvcHVwQXRjQ29udHJvbHMucXVlcnlTZWxlY3RvckFsbChcIi5iYWItcHJvZHVjdC1hZGQtdG8tYnVuZGxlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9PdXQgb2YgU3RvY2sgcHJvZHVjdHMgZG9uJ3QgaGF2ZSBzb21lIG9mIHRoZXNlIHNvIGRvbid0IHRocm93IGFueSBlcnJvcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYob3JpZ2luYWxQcmljZSAmJiAkcXR5RGVjcmVhc2UgJiYgJHF0eUluY3JlYXNlICYmICRxdHlWYWx1ZSAmJiAkYWRkVG9CdW5kbGVCdXR0b25zKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1Jlc2V0IGJhY2sgdG8gXCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxdHlWYWx1ZS5pbm5lclRleHQgPSBcIjFcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhZGRUb0J1bmRsZUJ1dHRvbnMuZm9yRWFjaCgoJGFkZFRvQnVuZGxlQnV0dG9uKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUF0YkJ1dHRvblByaWNpbmcoJGFkZFRvQnVuZGxlQnV0dG9uLG9yaWdpbmFsUHJpY2Usc3Vic2NyaXB0aW9uUHJpY2UsMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vUmUtZW5hYmxlIEFsbCBBZGQgdG8gYnVuZGxlIGJ1dHRvbnMgYmVmb3JlIGNvbmR1Y3QgZnVydGhlciB0ZXN0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUJ0bigkYWRkVG9CdW5kbGVCdXR0b24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9SZS1lbmFibGUgdGhlIEluY3JlYXNlIGFuZCBkZWNyZWFzZSBidXR0b25zIGJlZm9yZSB3ZSBjb25kdWN0IGZ1cnRoZXIgdGVzdHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZUJ0bigkcXR5SW5jcmVhc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlQnRuKCRxdHlEZWNyZWFzZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoYm94SXNGdWxsKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2JveCBpcyBmdWxsIC0gRGlzYWJsZSBBbGwgQWRkIHRvIEJ1bmRsZSBhbmQgKy8tIGJ1dHRvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQWxsUG9wVXBCdG5zKCRxdHlEZWNyZWFzZSwkcXR5SW5jcmVhc2UsJGFkZFRvQnVuZGxlQnV0dG9ucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmJ1bmRsZS5pdGVtc1tpZF0pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhdmFpbGFibGVTdG9jayA9ICRjYXJkLmRhdGFzZXQuaW52ZW50b3J5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihhdmFpbGFibGVTdG9jayl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBtYXggaW52ZW50b3J5IGlzIGFscmVhZHkgaW4gdGhlIGJ1bmRsZSwgZGlzYWJsZSBldmVyeXRoaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihidW5kbGUuaXRlbXNbaWRdLnF1YW50aXR5ID09IGF2YWlsYWJsZVN0b2NrKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQWxsUG9wVXBCdG5zKCRxdHlEZWNyZWFzZSwkcXR5SW5jcmVhc2UsJGFkZFRvQnVuZGxlQnV0dG9ucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JZiBtYXggaW52ZW50b3J5IC0xIGlzIGluIHRoZSBidW5kbGUsIGRpc2FibGUgdGhlIGFkZCBidXR0b24gT1IgaW52ZW50b3J5IGlzIDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5idW5kbGUuaXRlbXNbaWRdLnF1YW50aXR5IDwgYXZhaWxhYmxlU3RvY2spe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGF2YWlsYWJsZVN0b2NrIC0gd2luZG93LmJ1bmRsZS5pdGVtc1tpZF0ucXVhbnRpdHkgPT0gMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVCdG4oJHF0eUluY3JlYXNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSWYgTWF4IGFtb3VudCBhbGxvd2VkIGlzIHNldCwgYW5kIHdlJ3ZlIGdvdCBvbmUgc3BhY2UgcmVtYWluaW5nLCBkaXNhYmxlIHRoZSBhZGQgYnV0dG9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubWF4SXRlbXNBbGxvd2VkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93Lm1heEl0ZW1zQWxsb3dlZCAtIHRvdGFsSXRlbXMgPT0gMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQnRuKCRxdHlJbmNyZWFzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2xvZzogcHJvZHVjdCBjYXJkcyBub3QgZm91bmQnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9Qcm9ncmVzcyBOb3RpZmljYXRpb25zIC0gVGhlIHBvdGVudGlhbCBjYWxsIHR5cGVzIGFyZTogXCJwcmVsb2FkXCIsIFwiY2xlYXJcIiwgXCJ1cGRhdGVcIixcInB1cmNoYXNlX3R5cGVcIlxyXG4gICAgICAgICAgICBoYW5kbGVQcm9ncmVzc05vdGlmaWNhdGlvbnModHlwZSk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgLy8gRnVuY3Rpb24gdG8gcmVtb3ZlIGV4aXN0aW5nIGJ1bmRsZSBmcm9tIGNhcnRcclxuICAgICAgICBjb25zdCByZW1vdmVFeGlzdGluZ0J1bmRsZSA9IGFzeW5jIChidW5kbGVJZCkgPT4ge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgLy8gMS4gR2V0IEN1cnJlbnQgY2FydFxyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FydFJlcyA9IGF3YWl0IGZldGNoKCcvY2FydC5qcycpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FydCA9IGF3YWl0IGNhcnRSZXMuanNvbigpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvLyAyLiBGaW5kIGl0ZW1zIGJlbG9uZ2luZyB0byB0aGUgYnVuZGxlIC0gdXNlIGtleXMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHNldHRpbmcgc2hhcmVkIGxpbmUgaXRlbXMgdG8gemVyb1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYnVuZGxlSXRlbXMgPSBjYXJ0Lml0ZW1zLmZpbHRlcihpdGVtID0+IFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0ucHJvcGVydGllcz8uX2J1bmRsZV9pZCA9PT0gYnVuZGxlSWRcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmICghYnVuZGxlSXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ05vIGl0ZW1zIGZvdW5kIGZvciBidW5kbGUnLCBidW5kbGVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgIGJ1bmRsZUl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlc1tpdGVtLmtleV0gPSAwO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVJlcyA9IGF3YWl0IGZldGNoKCcvY2FydC91cGRhdGUuanMnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyB1cGRhdGVzIH0pXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZENhcnQgPSBhd2FpdCB1cGRhdGVSZXMuanNvbigpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcmVtb3ZpbmcgYnVuZGxlOicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIE1haW4gYWRkIHRvIGNhcnQgZnVuY3Rpb25cclxuICAgICAgICBjb25zdCBhZGRCdW5kbGVUb0NhcnQgPSBhc3luYyAobGluZUl0ZW1zLCBidW5kbGVJZCwkcHJvdGVjdGlvbk92ZXJsYXkpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBleGlzdGluZyBidW5kbGUgZmlyc3QgT05MWSBpZiBpbiBlZGl0IG1vZGVcclxuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cuZWRpdE1vZGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVkID0gYXdhaXQgcmVtb3ZlRXhpc3RpbmdCdW5kbGUoYnVuZGxlSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVtb3ZlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gcmVtb3ZlIGV4aXN0aW5nIGJ1bmRsZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvLyBTZW5kIHRoZSBuZXcgYnVuZGxlIHRvIFNob3BpZnkncyBjYXJ0IEFQSVxyXG4gICAgICAgICAgICAgICAgY29uc3QgYWRkUmVzID0gYXdhaXQgZmV0Y2goJy9jYXJ0L2FkZC5qcycsIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcclxuICAgICAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGl0ZW1zOiBsaW5lSXRlbXMgfSlcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBhZGREYXRhID0gYXdhaXQgYWRkUmVzLmpzb24oKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8gUmVzZXQgYnVuZGxlIGluIGxvY2FsU3RvcmFnZVxyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2J1bmRsZScpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5lZGl0TW9kZSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vV2UgbWlnaHQgaGF2ZSBhIGJhY2t1cCB0byByZXN0b3JlIFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFiYW5kb25lZEJ1bmRsZUJ1aWxkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3N0b3JlZF9idW5kbGUnKTtcclxuICAgICAgICAgICAgICAgICAgICBpZihhYmFuZG9uZWRCdW5kbGVCdWlsZCl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL1Jlc3RvcmUgc3RvcmVkIGJ1bmRsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYnVuZGxlJyxhYmFuZG9uZWRCdW5kbGVCdWlsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdzdG9yZWRfYnVuZGxlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhcnRSZXMgPSBhd2FpdCBmZXRjaCgnL2NhcnQuanMnKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhcnREYXRhID0gYXdhaXQgY2FydFJlcy5qc29uKCk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBBVEMgYnV0dG9ucyBhbmQgcmVzZXQgbWVzc2FnZXNcclxuICAgICAgICAgICAgICAgICRhZGRUb0NhcnRzLmZvckVhY2goKCRhdGMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVBdGNSZXNldE1zZygkYXRjKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgKi8gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvL2hpZGVCbG9ja2VyT3ZlcmxheSgkcHJvdGVjdGlvbk92ZXJsYXksJGJ1bmRsZUluZm8pO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFJlbG9hZCB0byBzaG93IHVwZGF0ZWQgY2FydFxyXG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBcIi9jYXJ0XCI7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBhZGRpbmcgYnVuZGxlIHRvIGNhcnQ6XCIsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8gUmUtZW5hYmxlIGJ1dHRvbnMgZXZlbiBvbiBlcnJvclxyXG4gICAgICAgICAgICAgICAgJGFkZFRvQ2FydHMuZm9yRWFjaCgoJGF0YykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZUF0Y1Jlc2V0TXNnKCRhdGMpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaGlkZUJsb2NrZXJPdmVybGF5KCRwcm90ZWN0aW9uT3ZlcmxheSwkYnVuZGxlSW5mbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBhc3luYyBmdW5jdGlvbiBwcmVwQW5kQWRkQnVuZGxlVG9DYXJ0KCkge1xyXG5cclxuICAgICAgICAgICAgLy9EaXNhYmxlIHRoZSBBZGQgdG8gQ2FydCBidXR0b25zIGFuZCBDaGFuZ2UgdGhlIHRleHQgY29udGVudFxyXG4gICAgICAgICAgICAkYWRkVG9DYXJ0cy5mb3JFYWNoKCgkYXRjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlQXRjQ2hhbmdlTXNnKCRhdGMpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vU2hvdyB0aGUgb3ZlcmxheSB0aGF0IHByZXZlbnRzIGN1c3RvbWVycyBmcm9tIGNsaWNraW5nIHRoZSBVSVxyXG4gICAgICAgICAgICBjb25zdCAkcHJvdGVjdGlvbk92ZXJsYXkgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUucXVlcnlTZWxlY3RvcihcIi5idWlsZC1hLWJ1bmRsZV9fcHJvZHVjdC1jYXJkX191aS1ibG9ja2VyXCIpO1xyXG4gICAgICAgICAgICBpZigkcHJvdGVjdGlvbk92ZXJsYXkpe1xyXG4gICAgICAgICAgICAgICAgc2hvd0Jsb2NrZXJPdmVybGF5KCRwcm90ZWN0aW9uT3ZlcmxheSwkYnVuZGxlSW5mbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudEJ1bmRsZVVSTCA9ICRidWlsZEFCdW5kbGVUZW1wbGF0ZS5kYXRhc2V0LnVybDtcclxuICAgICAgICAgICAgY29uc3QgbGluZUl0ZW1zID0gW107XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50QnVuZGxlVHlwZTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgaWYgKCRidWlsZEFCdW5kbGVUZW1wbGF0ZS5kYXRhc2V0LnN0YXRpYyA9PT0gXCJ0cnVlXCIpIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRCdW5kbGVUeXBlID0gJ3N0YXRpYyc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0aWNCb3hWYXJpYW50SWQgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUuZGF0YXNldC52YXJpYW50SWQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvLyBSZXF1aXJlZCBieSBTa2lvXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIF9pc0NsYXNzaWNCb3hWMjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBfYnVuZGxlX2lkOiBidW5kbGUuYnVuZGxlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgX2J1bmRsZVR5cGU6IGN1cnJlbnRCdW5kbGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIF9idW5kbGVVcmw6IGN1cnJlbnRCdW5kbGVVUkxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhidW5kbGUuaXRlbXMpLmZvckVhY2goKFtwcm9kdWN0SWQsIGl0ZW1dKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHByb2R1Y3QgdGl0bGUgYW5kIHF1YW50aXR5XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1tpdGVtLnRpdGxlXSA9IGl0ZW0ucXVhbnRpdHk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIFNraW8gdmFyaWFudCBJRFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbYF9wdmdpZDovL3Nob3BpZnkvUHJvZHVjdFZhcmlhbnQvJHtwcm9kdWN0SWR9YF0gPSBpdGVtLnF1YW50aXR5O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGF0aWNCb3hMaW5lSXRlbSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogc3RhdGljQm94VmFyaWFudElkLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiAxLFxyXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoYWN0aXZlUGxhbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0JveExpbmVJdGVtLnNlbGxpbmdfcGxhbiA9IGFjdGl2ZVBsYW47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBsaW5lSXRlbXMucHVzaChzdGF0aWNCb3hMaW5lSXRlbSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLmRhdGFzZXQuZHluYW1pYyA9PT0gXCJ0cnVlXCIpIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRCdW5kbGVUeXBlID0gJ2R5bmFtaWMnO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3QgZHluYW1pY0J1bmRsZURhdGEgPSBhd2FpdCBnZXREeW5hbWljQnVuZGxlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGFjdGl2ZVB1cmNoYXNlVHlwZSA9IFwib25ldGltZS1wdXJjaGFzZVwiO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgJGFjdGl2ZVB1cmNoYXNlVHlwZSA9ICRidWlsZEFCdW5kbGVUZW1wbGF0ZS5xdWVyeVNlbGVjdG9yKFwiLmJ1aWxkLWEtYnVuZGxlX19wdXJjaGFzZS10eXBlLmFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgIGlmKCRhY3RpdmVQdXJjaGFzZVR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZVB1cmNoYXNlVHlwZSA9ICRhY3RpdmVQdXJjaGFzZVR5cGUuZGF0YXNldC50eXBlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBzdWJzY3JpcHRpb24gb3JkZXIsIGdyYWIgdGhlIHNlbGxpbmcgcGxhbiBpZCBmcm9tIHRoZSB0ZW1wbGF0ZSBkYXRhIFxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMod2luZG93LmJ1bmRsZS5pdGVtcykuZm9yRWFjaCgoW3Byb2R1Y3RJZCwgaXRlbV0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtRGF0YSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHByb2R1Y3RJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9idW5kbGVfaWQ6IGJ1bmRsZS5idW5kbGVJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9keW5hbWljQm94SW5kZXg6IGJ1bmRsZS5idW5kbGVJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9keW5hbWljQm94SWQ6IGR5bmFtaWNCdW5kbGVEYXRhLkR5bmFtaWNCb3guYm94SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYnVuZGxlVHlwZTogY3VycmVudEJ1bmRsZVR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYnVuZGxlVXJsOiBjdXJyZW50QnVuZGxlVVJMXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVQdXJjaGFzZVR5cGUgPT0gXCJzdWJzY3JpcHRpb25cIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZigkYnVpbGRBQnVuZGxlVGVtcGxhdGUuZGF0YXNldC5zZWxsaW5nUGxhbklkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhLnNlbGxpbmdfcGxhbiA9ICRidWlsZEFCdW5kbGVUZW1wbGF0ZS5kYXRhc2V0LnNlbGxpbmdQbGFuSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJQdXJjaGFzZSBpcyBhIHN1YnNjcmlwdGlvbiBwdXJjaGFzZSBidXQgbm8gc2VsbGluZyBwbGFuIGlkIGNvdWxkIGJlIGZvdW5kXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGxpbmVJdGVtcy5wdXNoKGl0ZW1EYXRhKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIGFkZEJ1bmRsZVRvQ2FydChsaW5lSXRlbXMsIHdpbmRvdy5idW5kbGUuYnVuZGxlSWQsJHByb3RlY3Rpb25PdmVybGF5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIC8vIEZ1bmN0aW9uIHRvIHByZWxvYWQgdGhlIGJ1bmRsZSwgaWYgb25lIGFscmVhZHkgZXhpc3RzIGluIGxvY2FsIHN0b3JhZ2VcclxuICAgICAgICBmdW5jdGlvbiBwcmVsb2FkQnVuZGxlKCkge1xyXG5cclxuXHJcbiAgICAgICAgICAgIHdpbmRvdy5lZGl0TW9kZSA9IGZhbHNlOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBxdWVyeVN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG4gICAgICAgICAgICBpZih1cmxQYXJhbXMuZ2V0KCdlZGl0Jykpe1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmVkaXRNb2RlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYod2luZG93LmVkaXRNb2RlKXtcclxuXHJcbiAgICAgICAgICAgICAgICAvL1RocmUgc2hvdWxkIGJlIGEgYnVuZGxlIGluIHN0b3JhZ2Ugd2l0aCBhIGZsYWcgc2V0IGFnYWluc3QgaXQgaW5kaWNhdGluZyBpdCBpcyBhbiBFZGl0IGJ1bmRsZVxyXG4gICAgICAgICAgICAgICAgYnVuZGxlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpzb25CdW5kbGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImJ1bmRsZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvY2Vzc0VkaXQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmKGpzb25CdW5kbGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1bmRsZSA9IEpTT04ucGFyc2UoanNvbkJ1bmRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoYnVuZGxlLmVkaXRpbmdfYnVuZGxlID09IHRydWUgJiYgT2JqZWN0LmtleXMoYnVuZGxlKS5sZW5ndGggPiAwKXsgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGJ1bmRsZS5idW5kbGVJZCA9PSB1cmxQYXJhbXMuZ2V0KCdlZGl0Jykpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9JdCdzIGEgbWF0Y2ghIFRoaXMgaXMgb3VyIGJ1bmRsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0VkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKHByb2Nlc3NFZGl0KXtcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVCdW5kbGVVSShidW5kbGUsXCJlZGl0XCIpO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoXCJBbiBlcnJvciBvY2N1cnJlZCwgdW5hYmxlIHRvIGVkaXQgdGhpcyBidW5kbGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBcIi9jYXJ0XCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBidW5kbGUgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYnVuZGxlXCIpKSB8fCB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoYnVuZGxlKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoYnVuZGxlLmVkaXRpbmdfYnVuZGxlID09IHRydWUpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9BIHVzZXIgYWJhbmRvbmVkIHRoZWlyIEVkaXQgYnVuZGxlIHByb2Nlc3Mgd2l0aG91dCBzYXZpbmcsIGNsZWFyIHRoaXMgZnJvbSBsb2NhbCBzdG9yYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiYnVuZGxlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9EaWQgdGhlIHVzZXIgYWJhbmRvbiBhIGJ1bmRsZSBidWlsZCBiZWZvcmUgdGhleSBjbGlja2VkIHRoZSBlZGl0IGJ1dHRvbj9cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RvcmVkQnVuZGxlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3N0b3JlZF9idW5kbGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RvcmVkQnVuZGxlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZSA9IEpTT04ucGFyc2Uoc3RvcmVkQnVuZGxlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1RoaXMgc2hvdWxkbid0IGJlIHBvc3NpYmxlLCBidXQgZW5zdXJlIGl0J3Mgbm90IGFuIGVkaXQgbW9kZSBidW5kbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGJ1bmRsZS5lZGl0aW5nX2J1bmRsZSA9PSB0cnVlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1Jlc2V0LCB3ZSBkb24ndCB3YW50IHRoYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidW5kbGUgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImF0dGVtcHRpbmcgdG8gZml4IGJ1bmRsZSBzdG9yYWdlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1RoaXMgaXMgdGhlIHVzZXIncyB1bmZpbmlzaGVkIGJ1bmRsZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcInN0b3JlZF9idW5kbGVcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vU2F2ZSBpbiBpdCdzIGNvcnJlY3QgcGxhY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImJ1bmRsZVwiLEpTT04uc3RyaW5naWZ5KGJ1bmRsZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1bmRsZSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJidW5kbGVcIikpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0ZvcmNlIGEgcmVsb2FkIHRvIGFsbG93IGxvY2FsIHN0b3JhZ2UgdG8gY2xlYW4gdXAgYW5kIHN0b3AgZ2V0dGluZyB0aGluZ3MgbWl4ZWQgdXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1dlJ3JlIG5vdCBpbiBlZGl0IG1vZGUsIHdlIHNob3VsZCByZW1vdmUgdGhpc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJidW5kbGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidW5kbGUgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIGJ1bmRsZSBzYXZlZCAtIHByZWxvYWQgaXRcclxuICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhidW5kbGUpLmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlQnVuZGxlVUkoYnVuZGxlLFwicHJlbG9hZFwiKVxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlUHJvZ3Jlc3NOb3RpZmljYXRpb25zKFwic3RhcnRcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEZ1bmN0aW9uIHRvIGNsZWFyIGJ1bmRsZVxyXG4gICAgICAgIGZ1bmN0aW9uIGNsZWFyQnVuZGxlKCkge1xyXG4gICAgICAgICAgICBpZiAoY29uZmlybShcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjbGVhciB5b3VyIGJ1bmRsZT9cIikpIHtcclxuICAgICAgICAgICAgICAgIC8vIENsZWFyIGxvY2FsIHN0b3JhZ2VcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdidW5kbGUnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgZ2xvYmFsIGJ1bmRsZSBvYmplY3RcclxuICAgICAgICAgICAgICAgIGJ1bmRsZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBidW5kbGVJZDogZ2VuZXJhdGVVbmlxdWVCdW5kbGVJZCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiB7fVxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTYXZlIHRoZSBjbGVhcmVkIGJ1bmRsZSB0byBsb2NhbCBzdG9yYWdlXHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYnVuZGxlJywgSlNPTi5zdHJpbmdpZnkoYnVuZGxlKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIFVJXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVCdW5kbGVVSShidW5kbGUsXCJjbGVhclwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIC8vIEdldCBTS0lPIGR5bmFtaWMgYnVuZGxlIGRhdGFcclxuICAgICAgICBhc3luYyBmdW5jdGlvbiBnZXREeW5hbWljQnVuZGxlICgpe1xyXG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCdodHRwczovL2FwaS5za2lvLmNvbS9zdG9yZWZyb250LWh0dHAvZ2V0LWR5bmFtaWMtYm94Jywge1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJwcm9kdWN0UGxhdGZvcm1JZFwiOiBcIjE1MzQ1Njg1NTYxNzI3XCJcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBtYXJrUHJvZHVjdEFzVW5hdmFpbGFibGUgPSAoJGJ1bmRsZVByb2R1Y3RDYXJkKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0ICRwcm9kdWN0Q29udHJvbHMgPSAkYnVuZGxlUHJvZHVjdENhcmQucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LWNvbnRyb2xzXCIpO1xyXG4gICAgICAgICAgICBpZigkcHJvZHVjdENvbnRyb2xzKXtcclxuXHJcbiAgICAgICAgICAgICAgICAvL0hpZGUgdGhlIEluY3JlYXNlIGFuZCBEZWNyZWFzZSBidXR0b25zIGluIGEgd2F5IHRoYXQgd29uJ3QgYmUgb3ZlcnJpZGRlbiBieSB0aGUgb3RoZXIgZnVuY3Rpb25hbGl0eVxyXG4gICAgICAgICAgICAgICAgY29uc3QgJGluY3JlYXNlID0gJHByb2R1Y3RDb250cm9scy5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtcXVhbnRpdHlfX2luY3JlYXNlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCRpbmNyZWFzZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgJGluY3JlYXNlLmNsYXNzTGlzdC5hZGQoXCJvcGFjaXR5LTBcIixcInBvaW50ZXItZXZlbnRzLW5vbmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgJGluY3JlYXNlLnN0eWxlLndpZHRoID0gXCIwXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgJGNvbnRyb2xzVGV4dCA9ICRwcm9kdWN0Q29udHJvbHMucXVlcnlTZWxlY3RvckFsbChcIi5wcm9kdWN0LXF1YW50aXR5LWNvbnRhaW5lciBwXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYoJGNvbnRyb2xzVGV4dC5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgICAgICAkY29udHJvbHNUZXh0LmZvckVhY2goKCRwdGFnLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihpbmRleCA8IDEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHB0YWcuY2xhc3NMaXN0LmFkZChcImRlc2t0b3A6cHItMVwiKTsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHB0YWcudGV4dENvbnRlbnQgPSBcIlVuYXZhaWxhYmxlXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhc3luYyBmdW5jdGlvbiBwcm9kdWN0Q29tcGF0aWJpbGl0eUNoZWNrICgkYnVuZGxlUHJvZHVjdENhcmRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGR5bmFtaWNCb3hEYXRhID0gYXdhaXQgZ2V0RHluYW1pY0J1bmRsZSgpO1xyXG4gICAgICAgICAgICBpZihkeW5hbWljQm94RGF0YS5vayl7XHJcbiAgICAgICAgICAgICAgICAvL0xvb3AgdGhyb3VnaCBvdXIgUHJvZHVjdCBDYXJkcyBhbmQgZW5zdXJlIHRoYXQgdGhlIHByb2R1Y3QgaGFuZGxlIGV4aXN0cyBpbiB0aGUgcmVzcG9uc2UgZnJvbSBTa2lvXHJcbiAgICAgICAgICAgICAgICBjb25zdCBhdmFpbGFibGVIYW5kbGVzID0gbmV3IFNldChkeW5hbWljQm94RGF0YS5EeW5hbWljQm94LnNlbGVjdGFibGVQcm9kdWN0VmFyaWFudHMubWFwKGl0ZW0gPT4gaXRlbS5wcm9kdWN0SGFuZGxlKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy9Mb29wIHRocm91Z2ggb3VyIFByb2R1Y3QgQ2FyZHMgYW5kIGVuc3VyZSB0aGF0IHRoZSBwcm9kdWN0IGhhbmRsZSBleGlzdHMgaW4gdGhlIHJlc3BvbnNlIGZyb20gU2tpb1xyXG4gICAgICAgICAgICAgICAgJGJ1bmRsZVByb2R1Y3RDYXJkcy5mb3JFYWNoKCgkYnVuZGxlUHJvZHVjdENhcmQpID0+IHsgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RIYW5kbGVFeGlzdHMgPSBhdmFpbGFibGVIYW5kbGVzLmhhcygkYnVuZGxlUHJvZHVjdENhcmQuZGF0YXNldC5oYW5kbGUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZighcHJvZHVjdEhhbmRsZUV4aXN0cykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrUHJvZHVjdEFzVW5hdmFpbGFibGUoJGJ1bmRsZVByb2R1Y3RDYXJkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ2FsbCBmdW5jdGlvbiB0byBjaGVjayBpZiBjb250ZW50IG5lZWRzIHRvIGJlIHByZWxvYWRlZFxyXG4gICAgICAgIC8vcHJlbG9hZEJ1bmRsZSgpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgYnVpbGRBQnVuZGxlO1xyXG5cclxuLypcclxuICAgIE1vdmluZyBvbGQsIHVudXNlZCBjb25jZXB0cyB0byB0aGUgYm90dG9tXHJcblxyXG4gICAgV2UncmUgbm90IHVzaW5nIHN0YXRpYyBidW5kbGVzXHJcbiAgICBhc3luYyBmdW5jdGlvbiBnZXRTdGF0aWNCdW5kbGUoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9hcGkuc2tpby5jb20vc3RvcmVmcm9udC1odHRwL2dldC1jbGFzc2ljLWJveC12MicsIHtcclxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgcHJvZHVjdFZhcmlhbnRQbGF0Zm9ybUlkOiBcIjU1OTAwNzgwNzI0NjA4XCIsIFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pO1xyXG4gICAgXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGZldGNoaW5nIHN0YXRpYyBidW5kbGU6ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcclxuICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIFJld2FyZHMgY29uY2VwdCB3ZSdyZSBub3QgdXNpbmdcclxuICAgIFxyXG4gICAgaWYgKGlzRHluYW1pY0J1bmRsZSl7XHJcblxyXG4gICAgICAgIGxldCBhY3RpdmVQdXJjaGFzZVR5cGUgPSBudWxsO1xyXG5cclxuICAgICAgICAvL2NvbnN0ICRyZXdhcmRzID0gJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYnVpbGQtYS1idW5kbGVfX3Jld2FyZFwiKTtcclxuXHJcbiAgICAgICAgLy9jb25zdCBhY3RpdmVQdXJjaGFzZVR5cGUgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUucXVlcnlTZWxlY3RvcihcIi5idWlsZC1hLWJ1bmRsZV9fcHVyY2hhc2UtdHlwZS5hY3RpdmVcIik/LmRhdGFzZXQudHlwZTtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICBpZiAoJHJld2FyZHMgJiYgYWN0aXZlUHVyY2hhc2VUeXBlKXtcclxuICAgICAgICAgICAgJHJld2FyZHMuZm9yRWFjaCgkcmV3YXJkID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB0aHJlc2hvbGQgPSBwYXJzZUludCgkcmV3YXJkLmRhdGFzZXQudGhyZXNob2xkKTtcclxuICAgICAgICAgICAgICAgIHRocmVzaG9sZCA9IHRocmVzaG9sZCAqIDEwMDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodG90YWxQcmljZSA+IHRocmVzaG9sZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgJHJld2FyZC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgICAgICAkcmV3YXJkLmRhdGFzZXQuZWxpZ2libGUgPSAndHJ1ZSc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkcmV3YXJkLmRhdGFzZXQuc3Vic2NyaXB0aW9uQWN0aXZlID09ICd0cnVlJyAmJiBhY3RpdmVQdXJjaGFzZVR5cGUgPT0gJ3N1YnNjcmlwdGlvbicpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkcmV3YXJkLmRhdGFzZXQuZWxpZ2libGUgPSAnZmFsc2UnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRyZXdhcmQuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRyZXdhcmQuZGF0YXNldC5lbGlnaWJsZSA9ICdmYWxzZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnbG9nOiByZXdhcmRzIG5vdCBmb3VuZCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIGFtb3VudCByZW1haW5pbmdcclxuICAgICAgICBjb25zdCAkcmVtYWluaW5nVGV4dCA9ICRidWlsZEFCdW5kbGVUZW1wbGF0ZS5xdWVyeVNlbGVjdG9yQWxsKFwiLmJ1aWxkLWEtYnVuZGxlX19hZGQtdG8tY2FydC10ZXh0XCIpO1xyXG5cclxuICAgICAgICBpZiAoJHJlbWFpbmluZ1RleHQpe1xyXG4gICAgICAgICAgICAkcmVtYWluaW5nVGV4dC5mb3JFYWNoKCR0ZXh0ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1pbmltdW1TcGVuZCA9IHBhcnNlSW50KCR0ZXh0LmRhdGFzZXQubWluaW11bVNwZW5kICogMTAwKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFtb3VudFJlbWFpbmluZyA9IG1pbmltdW1TcGVuZCAtIHRvdGFsUHJpY2U7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGFtb3VudFJlbWFpbmluZyA+IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICR0ZXh0LmlubmVyVGV4dCA9ICdTcGVuZCAnK2N1cnJlbmN5U3ltYm9sKyhhbW91bnRSZW1haW5pbmcgLyAxMDApLnRvRml4ZWQoMikgKycgdG8gY29udGludWUnO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoJGFkZFRvQ2FydHMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkYWRkVG9DYXJ0cy5mb3JFYWNoKCRhZGRUb0NhcnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFkZFRvQ2FydC5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCAkYWN0aXZlUHVyY2hhc2VUeXBlID0gJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX3B1cmNoYXNlLXR5cGUuYWN0aXZlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL3RlbXBvcmFyaWx5IGFkZGluZyB0byBzdG9wIGphdmFzY3JpcHQgdGhyb3dpbmcgYW4gZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICBpZiAoJGFjdGl2ZVB1cmNoYXNlVHlwZSAmJiAkYWN0aXZlUHVyY2hhc2VUeXBlLmRhdGFzZXQudHlwZSA9PSAnc3Vic2NyaXB0aW9uJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsUHJpY2UgPSB0b3RhbFByaWNlICogMC44MDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG90YWxQcmljZSA+IDQwMDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxQcmljZSA9IHRvdGFsUHJpY2UgKiAwLjgwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRvdGFsUHJpY2UgPiAzMDAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsUHJpY2UgPSB0b3RhbFByaWNlICogMC45MDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJHRleHQuaW5uZXJUZXh0ID0gJ0FkZCB0byBjYXJ0IOKAoiAnK2N1cnJlbmN5U3ltYm9sKyh0b3RhbFByaWNlIC8gMTAwKS50b0ZpeGVkKDIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoJGFkZFRvQ2FydHMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkYWRkVG9DYXJ0cy5mb3JFYWNoKCRhZGRUb0NhcnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFkZFRvQ2FydC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnbG9nOiByZW1haW5pbmcgbm90IGZvdW5kJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBGdXJ0aGVyIFN0YXRpYyBCdW5kbGUgY29uc2lkZXJhdGlvbnMgdGhhdCB3ZSBhcmVuJ3QgdXNpbmdcclxuICAgIGlmIChpc1N0YXRpY0J1bmRsZSl7XHJcbiAgICAgICAgLy8gR2V0IGVsZW1lbnRzXHJcbiAgICAgICAgY29uc3QgJHF0eUluY3JlYXNlcyA9ICRidWlsZEFCdW5kbGVUZW1wbGF0ZS5xdWVyeVNlbGVjdG9yQWxsKFwiLnByb2R1Y3QtcXVhbnRpdHlfX2luY3JlYXNlXCIpO1xyXG4gICAgICAgIGNvbnN0ICRpdGVtc1JlbWFpbmluZ1dyYXBwZXIgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUucXVlcnlTZWxlY3RvckFsbChcIi5idWlsZC1hLWJ1bmRsZV9fcmVtYWluaW5nLWl0ZW1zX193cmFwcGVyXCIpO1xyXG4gICAgICAgIGNvbnN0ICRjdGEgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUucXVlcnlTZWxlY3RvcihcIi5idWlsZC1hLWJ1bmRsZV9fYWRkLXRvLWNhcnRcIik7XHJcbiAgICAgICAgY29uc3QgJGN0YVRleHQgPSAkYnVpbGRBQnVuZGxlVGVtcGxhdGUucXVlcnlTZWxlY3RvcihcIi5zdGF0aWMtYnVpbGQtYS1idW5kbGVfX2FkZC10by1jYXJ0LXRleHRcIik7XHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSB2YXJpYWJsZXNcclxuICAgICAgICBjb25zdCBtYXhJdGVtcyA9IHBhcnNlSW50KCRidWlsZEFCdW5kbGVUZW1wbGF0ZS5kYXRhc2V0Lml0ZW1Db3VudCk7XHJcbiAgICAgICAgY29uc3QgcmVtYWluaW5nID0gbWF4SXRlbXMgLSB0b3RhbEl0ZW1zO1xyXG5cclxuICAgICAgICAvLyBUb2dnbGUgY29udGVudCBkZXBlbmRpbmcgb24gYW1vdW50IG9mIGl0ZW1zIGxlZnQgdG8gYWRkXHJcbiAgICAgICAgaWYgKHJlbWFpbmluZyA8PSAwKXtcclxuICAgICAgICAgICAgLy8gVXBkYXRlIENUQSBtZXNzYWdpbmdcclxuICAgICAgICAgICAgJGN0YVRleHQuaW5uZXJUZXh0ID0gJ0FkZCB0byBjYXJ0JztcclxuXHJcbiAgICAgICAgICAgIC8vIEVuYWJsZSBDVEFcclxuICAgICAgICAgICAgJGN0YS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgICAgICAgICAgLy8gVG9nZ2xlIGJ1bmRsZSBjb250cm9sc1xyXG4gICAgICAgICAgICAkcXR5SW5jcmVhc2VzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2Rpc2FibGVkJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIGJ1bmRsZSBzdW1tYXJ5IG1lc3NhZ2luZ1xyXG4gICAgICAgICAgICAkaXRlbXNSZW1haW5pbmdXcmFwcGVyLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCAkaXRlbXNSZW1haW5pbmcgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX3JlbWFpbmluZy1pdGVtc1wiKTtcclxuICAgICAgICAgICAgICAgICRpdGVtc1JlbWFpbmluZy5pbm5lclRleHQgPSByZW1haW5pbmc7XHJcblxyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBVcGRhdGUgQ1RBIG1lc3NhZ2luZ1xyXG4gICAgICAgICAgICAkY3RhVGV4dC5pbm5lclRleHQgPSAnQWRkICcgKyByZW1haW5pbmcgKyAnIG1vcmUgdG8gY29uaW51ZSc7XHJcblxyXG4gICAgICAgICAgICAvLyBEaXNhYmxlIENUQVxyXG4gICAgICAgICAgICAkY3RhLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgICAgICAgICAvLyBUb2dnbGUgYnVuZGxlIGNvbnRyb2xzXHJcbiAgICAgICAgICAgICRxdHlJbmNyZWFzZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBVcGRhdGUgYnVuZGxlIHN1bW1hcnkgbWVzc2FnaW5nXHJcbiAgICAgICAgICAgICRpdGVtc1JlbWFpbmluZ1dyYXBwZXIuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0ICRpdGVtc1JlbWFpbmluZyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5idWlsZC1hLWJ1bmRsZV9fcmVtYWluaW5nLWl0ZW1zXCIpO1xyXG4gICAgICAgICAgICAgICAgJGl0ZW1zUmVtYWluaW5nLmlubmVyVGV4dCA9IHJlbWFpbmluZztcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRHluYW1pY0J1bmRsZSl7XHJcblxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSBidW5kbGUgdGhyZXNob2xkIHNhdmluZ3NcclxuICAgICAgICBjb25zdCAkYWN0aXZlUHVyY2hhc2VUeXBlID0gJGJ1aWxkQUJ1bmRsZVRlbXBsYXRlLnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX3B1cmNoYXNlLXR5cGUuYWN0aXZlXCIpO1xyXG5cclxuICAgICAgICBpZigkYWN0aXZlUHVyY2hhc2VUeXBlKXtcclxuICAgICAgICAgICAgaWYgKCRhY3RpdmVQdXJjaGFzZVR5cGUuZGF0YXNldC50eXBlID09ICdzdWJzY3JpcHRpb24nKXtcclxuICAgICAgICAgICAgICAgIHRvdGFsU2F2aW5ncyArPSB0b3RhbFByaWNlICogMC4yMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICh0b3RhbFByaWNlID4gNDAwMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWxTYXZpbmdzICs9IHRvdGFsUHJpY2UgKiAwLjIwO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0b3RhbFByaWNlID4gMzAwMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdG90YWxTYXZpbmdzICs9IHRvdGFsUHJpY2UgKiAwLjEwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICB9ICAgICAgICAgICAgICAgIFxyXG4gICAgfVxyXG59XHJcblxyXG4vKlxyXG4gICAgU3RhdGljIEJ1bmRsZSBJbWFnZSBJdGVtcyAgICAgICAgICAgXHJcbiAgICAkYnVuZGVJdGVtTGlzdC5pbm5lckhUTUwgKz0gYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidWlsZC1hLWJ1bmRsZV9pdGVtIGZsZXggZmxleC1yb3cgaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIHB5LTJcIiBkYXRhLWlkPVwiJHtwcm9kdWN0SWR9XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IHNwYWNlLXgtM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTIgaC0xMiBmbGV4IGZsZXgtc2hyaW5rLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIiR7aXRlbS5pbWFnZX1cIiBjbGFzcz1cInctZnVsbCBoLWZ1bGwgb2JqZWN0LWNvbnRhaW5cIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbGFyZ2UgZm9udC1ib2xkXCI+JHtpdGVtLnRpdGxlfTwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgc3BhY2UteC0xIGl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWxhcmdlIGZvbnQtYm9sZFwiPiR7aXRlbS5xdWFudGl0eX08L3A+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnVpbGQtYS1idW5kbGVfaXRlbS1yZW1vdmUgbXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIxXCIgdmlld0JveD1cIjAgMCAyMCAyMVwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTUuMjg1OTUgMTUuNjEwNUwxMCAxMC44OTY1TTEwIDEwLjg5NjVMMTQuNzE0IDYuMTgyNDNNMTAgMTAuODk2NUwxNC43MTQgMTUuNjEwNU0xMCAxMC44OTY1TDUuMjg1OTUgNi4xODI0M1wiIHN0cm9rZT1cImJsYWNrXCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiovIl0sIm5hbWVzIjpbIkNhcnQiLCJjYXJ0QXNpZGUiLCJnc2FwIiwiYnVpbGRBQnVuZGxlIiwid2luZG93IiwiYnVuZGxlIiwiY3VycmVudFRvdGFsSXRlbXMiLCJtYXhJdGVtc0FsbG93ZWQiLCJtaW5JdGVtc1JlcXVpcmVkIiwiaXRlbXNSZXF1aXJlZEZvckRpc2NvdW50IiwiZGlzY291bnRSZXdhcmRQZXJjZW50YWdlIiwiaXRlbXNSZXF1aXJlZEZvckZyZWVEZWxpdmVyeSIsImJ1bmRsZVByb2dyZXNzTWVzc2FnZXMiLCJjdXJyZW50UHJvZ3Jlc3NNZXNzYWdlIiwiY3VycmVudFByb2dyZXNzTWVzc2FnZVR5cGUiLCJwcm9ncmVzc01lc3NhZ2VDb29sZG93biIsInByb2dyZXNzTWVzc2FnZUR1cmF0aW9uIiwicHJvZ3Jlc3NNZXNzYWdlUXVldWUiLCJwcm9ncmVzc01lc3NhZ2VUaW1lb3V0IiwicHJvZ3Jlc3NNZXNzYWdlQ29vbGRvd25UaW1lciIsImlzTWVzc2FnZUFjdGl2ZSIsImN1cnJlbnRNZXNzYWdlRWxlbWVudCIsInJlbW92ZVByb2dyZXNzTWVzc2FnZSIsIiRlbGVtZW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0byIsImhlaWdodCIsIm9wYWNpdHkiLCJkdXJhdGlvbiIsImVhc2UiLCJvbkNvbXBsZXRlIiwicmVtb3ZlIiwicHJvY2Vzc05leHRNZXNzYWdlIiwiY2xlYXJUaW1lb3V0IiwibGVuZ3RoIiwidGhlbiIsInNldFRpbWVvdXQiLCJuZXh0TWVzc2FnZSIsInNoaWZ0Iiwic2hvd1Byb2dyZXNzTWVzc2FnZSIsIm1lc3NhZ2UiLCJ0eXBlIiwibWVzc2FnZVR5cGUiLCIkYnVuZGxlVGVtcGxhdGVJbmZvQ29udGVudHMiLCIkYnVpbGRBQnVuZGxlVGVtcGxhdGUiLCJxdWVyeVNlbGVjdG9yIiwiJG5vdGlmaWNhdGlvblRlbXBsYXRlIiwiJG5vdGlmaWNhdGlvblRlbXBsYXRlQ2xvbmUiLCJjbG9uZU5vZGUiLCJ0ZXh0Q29udGVudCIsImNsYXNzTGlzdCIsInByZXBlbmQiLCJub3RpZkhlaWdodCIsImlubmVyV2lkdGgiLCJmcm9tVG8iLCJrZXkiLCJPYmplY3QiLCJrZXlzIiwiZ2VuZXJpYyIsImZpbmQiLCJrIiwic2hvd24iLCJjb25zb2xlIiwibG9nIiwicXVldWVQcm9ncmVzc01lc3NhZ2UiLCJtZXNzYWdlT2JqIiwiZmlsdGVyIiwibXNnIiwidW5zaGlmdCIsInB1c2giLCJnZXRSYW5kb21HZW5lcmljTWVzc2FnZSIsInVuc2hvd25NZXNzYWdlcyIsImVudHJpZXMiLCJkYXRhIiwicmFuZG9tSW5kZXgiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJoYW5kbGVQcm9ncmVzc05vdGlmaWNhdGlvbnMiLCJzaWduaWZpY2FudCIsImVkaXQiLCJzdGFydCIsImZhbGxiYWNrVG9HZW5lcmljIiwibWluaW11bSIsIm1heGltdW0iLCJkZWxpdmVyeSIsImRpc2NvdW50IiwiZ2VuZXJpY01lc3NhZ2UiLCJzZXRVcEJ1bmRsZVByb2dyZXNzTWVzc2FnZXMiLCJtZXNzYWdlQXJyIiwiZGF0YXNldCIsIm1pblByb2dyZXNzTWVzc2FnZSIsIm1heFByb2dyZXNzTWVzc2FnZSIsInNraW9EaXNjb3VudFByb2dyZXNzTWVzc2FnZSIsImZyZWVEZWxpdmVyeVByb2dyZXNzTWVzc2FnZSIsIm5ld0J1bmRsZVByb2dyZXNzTWVzc2FnZSIsInJldHVybkJ1bmRsZVByb2dyZXNzTWVzc2FnZSIsImVkaXRCdW5kbGVQcm9ncmVzc01lc3NhZ2UiLCJnZW5lcmljUHJvZ3Jlc3NNZXNzYWdlcyIsImdlbmVyaWNNZXNzYWdlc0FyciIsInNwbGl0IiwiZm9yRWFjaCIsImluZGV4IiwibG9ja0JhY2tncm91bmQiLCJkb2N1bWVudCIsImJvZHkiLCJhZGQiLCJzY3JvbGxZIiwic3R5bGUiLCJwb3NpdGlvbiIsInRvcCIsImxlZnQiLCJyaWdodCIsIm92ZXJmbG93IiwidW5sb2NrQmFja2dyb3VuZCIsImFicyIsInBhcnNlSW50IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwic2Nyb2xsVG8iLCJiZWhhdmlvciIsInNldEJ1bmRsZUluZm9NYXhIZWlnaHQiLCIkYnVuZGxlSW5mbyIsIiRidW5kbGVJbmZvSGVhZGVyIiwiJGJ1bmRsZUluZm9Cb2R5IiwiJGJ1bmRsZUluZm9Gb290ZXIiLCJidW5kbGVJbmZvSGVhZGVySGVpZ2h0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiYnVuZGxlSW5mb0Zvb3RlckhlaWdodCIsIm1heEhlaWdodCIsInZpc3VhbFZpZXdwb3J0Iiwic2hvd0Jsb2NrZXJPdmVybGF5IiwiJGJsb2NrZXJPdmVybGF5IiwibG9nb1N2ZyIsInNldCIsInRyYW5zZm9ybU9yaWdpbiIsInhQZXJjZW50IiwieVBlcmNlbnQiLCJ0bCIsInRpbWVsaW5lIiwicmVwZWF0IiwidGltZVNjYWxlIiwicm90YXRpb24iLCJ6SW5kZXgiLCJoaWRlQmxvY2tlck92ZXJsYXkiLCJoYW5kbGVNb2JpbGVJbmZvT3BlbiIsIiRidW5kbGVTdW1tYXJ5T3ZlcmxheSIsImNvbnRhaW5zIiwidG9nZ2xlIiwiZmluZE5leHRUaHJlc2hvbGQiLCJ0aWVyQ29udGVudEFyciIsInRvdGFsSXRlbXMiLCJtYXAiLCJOdW1iZXIiLCJzb3J0IiwiYSIsImIiLCJzdHJfcmVwbGFjZV9pbnN0cnVjdGlvbnMiLCJ0YXJnZXQiLCJzdHJpbmciLCJyZXR1cm5TdHJpbmciLCJudW1iZXJSZXBsYWNlIiwicmVwbGFjZSIsImZpbmROZXh0SW5zdHJ1Y3Rpb24iLCJuZXdJbnN0cnVjdGlvbiIsIm1heGltdW1BbW91bnQiLCJ2YWx1ZSIsInRhcmdldEhpdE1lc3NhZ2UiLCJuZXh0S2V5IiwidXNlU3RhcnRNZXNzYWdlIiwic3RhcnRNZXNzYWdlIiwic3RhcnRNZXNzYWdlUHJlcGVuZCIsImxlYWR1cE1lc3NhZ2VQcmVwZW5kIiwibGVhZHVwTWVzc2FnZSIsInNldFVwVGllckNvbnRlbnQiLCJtaW5SZXF1aXJlZCIsIm1pblJlcXVpcmVkU3RhcnRNZXNzYWdlIiwibWluUmVxdWlyZWRMZWFkdXBNZXNzYWdlIiwibWF4QWxsb3dlZCIsIm1heExlYWR1cE1lc3NhZ2UiLCJtYXhIaXRNZXNzYWdlIiwiZnJlZURlbGl2ZXJ5TnVtYmVyIiwiZnJlZURlbGl2ZXJ5TGVhZHVwTWVzc2FnZSIsInNraW9EaXNjb3VudEl0ZW1zUmVxdWlyZWQiLCJza2lvRGlzY291bnRMZWFkdXBNZXNzYWdlIiwiZ2V0TnVtYmVySW5CdW5kbGUiLCJ2YXJpYW50SWQiLCJjdXJyZW50QW1vdW50IiwiaXRlbXMiLCJxdWFudGl0eSIsImhhbmRsZUJ0bk1lc3NhZ2luZyIsIiRhZGRUb0NhcnQiLCJpc0VuYWJsZWQiLCJ0b3RhbFByaWNlIiwic3Vic2NyaXB0aW9uUHJpY2UiLCJhY3RpdmVQdXJjaGFzZVR5cGUiLCIkcHJpY2VDb250ZW50IiwiJGluc3RydWN0aW9uQ29udGVudCIsIiRwcm9kdWN0UHJpY2luZ1dyYXBwZXIiLCJwcmljZUluZm8iLCJjb21wYXJpc29uUHJpY2VJbmZvIiwiZmFjdG9ySW5Ta2lvRGlzY291bnQiLCJlZGl0TW9kZSIsIiRidG5UZXh0IiwiJGVkaXRUZXh0IiwiZWRpdE9yZGVyVGV4dCIsImZpbmFsUHJpY2UiLCJDYXJib24iLCJNb25leSIsImZvcm1hdE1vbmV5IiwiY29tcGFyaXNvblByaWNlIiwiZGlzcGxheSIsInJlbWFpbmluZyIsImRpc2FibGVCdG4iLCJidG4iLCJkaXNhYmxlZCIsImVuYWJsZUJ0biIsImRpc2FibGVBdGNDaGFuZ2VNc2ciLCIkYXRjIiwiJGFkZFRvT3JkZXJUZXh0IiwiZW5hYmxlQXRjUmVzZXRNc2ciLCJvcmlnaW5hbFRleHQiLCJhZGRUZXh0IiwiZGlzYWJsZUFsbFBvcFVwQnRucyIsIiRxdHlEZWNyZWFzZSIsIiRxdHlJbmNyZWFzZSIsIiRhZGRUb0J1bmRsZUJ1dHRvbnMiLCIkYWRkVG9CdW5kbGVCdXR0b24iLCJ1cGRhdGVBdGJCdXR0b25QcmljaW5nIiwib3JpZ2luYWxQcmljZSIsIm9yaWdpbmFsU3Vic2NyaXB0aW9uUHJpY2UiLCJxdHkiLCIkcHJpY2luZ0NvbnRhaW5lciIsIiRjb21wYXJpc29uUHJpY2UiLCIkcHJvZHVjdFByaWNlIiwiZGVjb2RlSHRtbEVudGl0aWVzIiwic3RyIiwidGV4dGFyZWEiLCJjcmVhdGVFbGVtZW50IiwiaW5uZXJIVE1MIiwic2hvd0NhdGVnb3J5TW9iaWxlTWVudSIsIiRtb2JpbGVDYXRlZ29yaWVzUG9wdXAiLCIkbW9iaWxlQ2F0ZWdvcmllc1BvcHVwQmciLCJoZWFkZXIiLCIkZmlsdGVyc0J1dHRvbk1vYiIsInBhcmVudEVsZW1lbnQiLCJoaWRlQ2F0ZWdvcnlNb2JpbGVNZW51Iiwic2Nyb2xsVG9UYXJnZXRDb2xsZWN0aW9uIiwiZSIsIiRjb2xsZWN0aW9ucyIsIiRuYXYiLCJzY3JvbGxUYXJnZXQiLCIkY29sbGVjdGlvbiIsImlkIiwibmF2SGVpZ2h0IiwidGFyZ2V0UG9zaXRpb24iLCJzY3JvbGxUb1RhcmdldENvbGxlY3Rpb25BbmRDbG9zZUNhdGVnb3JpZXMiLCJzaG93RmlsdGVyRHJvcGRvd24iLCIkZmlsdGVyc0Ryb3BEb3duIiwiJGZpbHRlcnNQb3B1cEJnIiwiJG1vYmlsZUNhdGVnb3JpZXNCdXR0b24iLCJtYXRjaGluZ0NhcmRzIiwicXVlcnlTZWxlY3RvckFsbCIsInRvdGFsTWF0Y2hpbmdEaXNoZXMiLCJlbCIsImhpZGVGaWx0ZXJEcm9wZG93biIsInNob3dDb250ZW50UG9wdXAiLCIkdGFyZ2V0UG9wdXAiLCJoaWRlQ29udGVudFBvcHVwIiwic3luY0ZpbHRlckJhZGdlQW5kUGlsbHMiLCIkZmlsdGVyT3B0aW9ucyIsIiRuYXZQYXJlbnQiLCJjbG9zZXN0IiwiJGNvdW50QmFkZ2UiLCIkcGlsbHNCYXIiLCJhbGxPcHRpb25zIiwiQXJyYXkiLCJmcm9tIiwiYWN0aXZlT3B0aW9ucyIsIm9wdCIsImFsbFNwaWNlT3B0aW9ucyIsIm8iLCJmaWx0ZXJUeXBlIiwiYWN0aXZlU3BpY2VPcHRpb25zIiwic3BpY2VJc0ZpbHRlcmluZyIsIm1lYW5pbmdmdWxBY3RpdmUiLCIkc2VsZWN0ZWRDb3VudCIsImxhYmVsRWwiLCJmaWx0ZXJUZXh0IiwidHJpbSIsImZpbHRlck9wdGlvbiIsInBpbGwiLCJjc3NUZXh0IiwiYWRkRXZlbnRMaXN0ZW5lciIsInN0b3BQcm9wYWdhdGlvbiIsImNsaWNrIiwiZmlsdGVyQ29sbGVjdGlvblJlc3VsdHMiLCJhcHBlbmRDaGlsZCIsImNsZWFyQnRuIiwicHJldmVudERlZmF1bHQiLCJjbG9zZU1lbnUiLCJhY3RpdmVTcGljZUZpbHRlcnMiLCJhY3RpdmVQcmVmZXJlbmNlRmlsdGVycyIsImFjdGl2ZUFsbGVyZ2VuRXhjbHVzaW9ucyIsIiRmaWx0ZXJPcHRpb24iLCJ2YWwiLCJ0b0xvd2VyQ2FzZSIsImluY2x1ZGVzIiwiJGNvbGxlY3Rpb25Qcm9kdWN0cyIsIiRub01hdGNoZXNUZXh0IiwibnVtYmVyVGhhdERvTm90TWF0Y2giLCIkY29sbGVjdGlvblByb2R1Y3QiLCJtYXRjaGVzIiwicHJvZHVjdFNwaWNlIiwic3BpY2VMZXZlbCIsInByb2R1Y3RUYWdzUmF3IiwicHJvZHVjdFRhZ3MiLCJ0IiwibWF0Y2hlc0FsbFByZWZzIiwiZXZlcnkiLCJwcmVmIiwiY29udGFpbnNBbGxlcmdlbnNSYXciLCJjb250YWluc0FsbGVyZ2VucyIsIkJvb2xlYW4iLCJleGNsdWRlZCIsImhhc1dpdGhvdXRUYWciLCJzb21lIiwiJG1hdGNoaW5nSW1hZ2VzIiwic2NhbGUiLCJzdGFnZ2VyIiwib3ZlcndyaXRlIiwiaW1nRWwiLCJ0cmFuc2l0aW9uIiwidHJhbnNmb3JtIiwibG9hZFByb2R1Y3RQb3B1cCIsIiRjYXJkIiwiJHByb2R1Y3RQb3B1cENvbnRhaW5lciIsIiRjb250YWluZXJDb250ZW50SG9sZGVyIiwiJHBvcHVwQ29udGVudHMiLCJjbG9zZVByb2R1Y3RQb3BVcCIsInRhcmdldElkIiwicHJvZHVjdElkIiwiJHRhcmdldFByb2R1Y3RDYXJkcyIsIiR0YXJnZXRQcm9kdWN0Q2FyZCIsIiR0YXJnZXRQcm9kdWN0Q2FyZFBvcHVwQ29udGVudCIsIiRwb3B1cEJhY2tncm91bmQiLCIkYnVuZGxlUHJvZHVjdENhcmRzIiwiJHNraW9EaXNjb3VudEFtb3VudCIsInNlbGxpbmdQbGFuRGlzY291bnQiLCJnZW5lcmF0ZVVuaXF1ZUJ1bmRsZUlkIiwiRGF0ZSIsIm5vdyIsInVwZGF0ZUJ1bmRsZSIsImNoYW5nZSIsInByb2R1Y3RUaXRsZSIsInByb2R1Y3RQcmljZSIsInByb2R1Y3RQcmljZVN0cmluZyIsImNvbXBhcmVQcm9kdWN0UHJpY2UiLCJjb21wYXJlUHJvZHVjdFByaWNlU3RyaW5nIiwicHJvZHVjdEltYWdlIiwidGl0bGUiLCJwcmljZSIsInByaWNlU3RyaW5nIiwiY29tcGFyZVByaWNlIiwiY29tcGFyZVByaWNlU3RyaW5nIiwiaW1hZ2UiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwiSlNPTiIsInN0cmluZ2lmeSIsInVwZGF0ZUJ1bmRsZVVJIiwiJGJ1bmRsZUhlYWRlciIsIiRidW5kZUl0ZW1MaXN0IiwiJGRlc2t0b3BJdGVtVGVtcGxhdGUiLCJjdXJyZW5jeVN5bWJvbCIsInRvdGFsU2F2aW5ncyIsIiRkZXNrdG9wSXRlbUltYWdlcyIsIiRkZXNrdG9wSXRlbUltYWdlIiwicGxhY2Vob2xkZXJGcmFtZXMiLCJwbGFjZWhvbGRlckZyYW1lIiwiJG1vYmlsZVByb2R1Y3RMaXN0IiwiJG1vYmlsZVByb2R1Y3RMaXN0VGVtcGxhdGUiLCIkcHJldmlvdXNNb2JpbGVQcm9kdWN0Q2FyZHMiLCIkcHJldmlvdXNNb2JpbGVQcm9kdWN0Q2FyZCIsIiRwdXJjaGFzZVR5cGVzQ29udGFpbmVyIiwiJGFjdGl2ZVB1cmNoYXNlVHlwZUNvbnRhaW5lciIsIml0ZW0iLCIkaXRlbVRlbXBsYXRlQ2xvbmUiLCJzY3JvbGxMZWZ0IiwidGFyZ2V0UGxhY2Vob2xkZXJGcmFtZSIsImN1cnJlbnRJbWFnZXMiLCJpIiwiJG1vYmlsZUl0ZW1DbG9uZSIsIiRtb2JpbGVJdGVtQ2xvbmVJbWciLCJzcmMiLCIkbW9iaWxlSXRlbUNsb25lVGl0bGUiLCIkbW9iaWxlSXRlbVByb2R1Y3RQcmljZSIsIiRtb2JpbGVJdGVtQ29tcGFyZUF0UHJpY2UiLCIkYnVuZGxlUHJvZHVjdENhcmQiLCJzdWJQcmljZVRleHQiLCJib3hJc0Z1bGwiLCIkYnVuZGxlTGluZUl0ZW1zIiwiJGl0ZW0iLCIkcmVtb3ZlIiwiJGNvdW50IiwiZWxlbWVudCIsImlubmVyVGV4dCIsImluc3RydWN0aW9uVGV4dCIsInJlcGxhY2VtZW50VGV4dCIsInN1YmNyaXB0aW9uUHJpY2UiLCJwcmljZVBlckl0ZW0iLCJkaXNjb3VudGVkSXRlbVByaWNlIiwiJHB1cmNoYXNlVHlwZVByaWNpbmciLCIkcHVyY2hhc2VUeXBlUHJpY2luZ0NvbnQiLCIkcHJpY2VUZXh0IiwiJGZyb21QcmljZVRleHQiLCJzdWJQcmljZU91dHB1dCIsIm90cFByaWNlIiwiJGFkZFRvQ2FydHMiLCIkYnVuZGxlRm9vdGVyIiwiJHJld2FyZFRocmVzaG9sZENvbnRhaW5lcnMiLCIkcmV3YXJkVGhyZXNob2xkQ29udGFpbmVyIiwiJHJld2FyZFRocmVzaG9sZFNlZ21lbnRzIiwicHJldmlvdXNNaWxlc3RvbmVOdW1iZXIiLCJtdWx0aXBsZVJld2FyZE1lc3NhZ2VzIiwiaXNSZXdhcmRNZXNzYWdlcyIsIiRyZXdhcmRNZXNzYWdlcyIsIiRyZXdhcmRUaHJlc2hvbGRTZWdtZW50IiwidGFyZ2V0TnVtYmVyIiwiJHByb2dyZXNzQmFyIiwiJGluY29tcGxldGVJbmRpY2F0b3IiLCIkY29tcGxldGVJbmRpY2F0b3IiLCIkcmV3YXJkTWVzc2FnZSIsIndpZHRoIiwidG90YWxTdGVwcyIsImFjaGlldmVkU3RlcHMiLCJwcm9ncmVzc1BlcmNlbnRhZ2UiLCJjb21wbGV0ZVJld2FyZHMiLCJpbmNvbXBsZXRlUmV3YXJkcyIsIiRyZXdhcmRUZXh0IiwiJHF1YW50aXR5IiwiJGNvbnRyb2xzIiwiJGluY3JlYXNlIiwiY3VycmVudEl0ZW0iLCIkbW9iaWxlUHJvZHVjdExpc3RFcXVpdmFsZW50IiwiJG1vYmlsZVByb2R1Y3RMaXN0RXF1aXZhbGVudFF0eSIsIiRtb2JpbGVQcm9kdWN0TGlzdEVxdWl2YWxlbnRJbmNyZWFzZSIsImludmVudG9yeSIsIiRtb2JpbGVQcm9kdWN0TGlzdEVxdWl2YWxlbnREZWNyZWFzZSIsIiRwb3B1cEF0Y0NvbnRyb2xzIiwic2luZ2xlUHJpY2UiLCJzaW5nbGVTdWJzY3JpcHRpb25QcmljZSIsIiRxdHlWYWx1ZSIsImF2YWlsYWJsZVN0b2NrIiwicHJlcEFuZEFkZEJ1bmRsZVRvQ2FydCIsIiRwcm90ZWN0aW9uT3ZlcmxheSIsImN1cnJlbnRCdW5kbGVVUkwiLCJ1cmwiLCJsaW5lSXRlbXMiLCJjdXJyZW50QnVuZGxlVHlwZSIsInN0YXRpY0JveFZhcmlhbnRJZCIsInByb3BlcnRpZXMiLCJfaXNDbGFzc2ljQm94VjIiLCJfYnVuZGxlX2lkIiwiYnVuZGxlSWQiLCJfYnVuZGxlVHlwZSIsIl9idW5kbGVVcmwiLCJzdGF0aWNCb3hMaW5lSXRlbSIsImFjdGl2ZVBsYW4iLCJzZWxsaW5nX3BsYW4iLCJkeW5hbWljIiwiZ2V0RHluYW1pY0J1bmRsZSIsImR5bmFtaWNCdW5kbGVEYXRhIiwiJGFjdGl2ZVB1cmNoYXNlVHlwZSIsIml0ZW1EYXRhIiwiX2R5bmFtaWNCb3hJbmRleCIsIl9keW5hbWljQm94SWQiLCJEeW5hbWljQm94IiwiYm94SWQiLCJzZWxsaW5nUGxhbklkIiwiYWRkQnVuZGxlVG9DYXJ0IiwicHJlbG9hZEJ1bmRsZSIsInF1ZXJ5U3RyaW5nIiwibG9jYXRpb24iLCJzZWFyY2giLCJ1cmxQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJnZXQiLCJqc29uQnVuZGxlIiwiZ2V0SXRlbSIsInByb2Nlc3NFZGl0IiwicGFyc2UiLCJlZGl0aW5nX2J1bmRsZSIsImFsZXJ0IiwiaHJlZiIsInJlbW92ZUl0ZW0iLCJzdG9yZWRCdW5kbGUiLCJyZWxvYWQiLCJjbGVhckJ1bmRsZSIsImNvbmZpcm0iLCJmZXRjaCIsIm1ldGhvZCIsImhlYWRlcnMiLCJyZXNwb25zZSIsImpzb24iLCJwcm9kdWN0Q29tcGF0aWJpbGl0eUNoZWNrIiwiZHluYW1pY0JveERhdGEiLCJvayIsImF2YWlsYWJsZUhhbmRsZXMiLCJTZXQiLCJzZWxlY3RhYmxlUHJvZHVjdFZhcmlhbnRzIiwicHJvZHVjdEhhbmRsZSIsInByb2R1Y3RIYW5kbGVFeGlzdHMiLCJoYXMiLCJoYW5kbGUiLCJtYXJrUHJvZHVjdEFzVW5hdmFpbGFibGUiLCJwbGFuIiwiaXNEeW5hbWljQnVuZGxlIiwiaXNTdGF0aWNCdW5kbGUiLCIkcHVyY2hhc2VUeXBlcyIsIiRtb2JpbGVQdXJjaGFzZVR5cGVTdHJpbmdDb250YWluZXIiLCIkb3RwU3RyaW5nIiwiJHN1YnNjcmlwdGlvblN0cmluZyIsIiRwdXJjaGFzZVR5cGUiLCIkcHQiLCIkc3ViUHJpY2UiLCIkb3RwUHJpY2UiLCIkZGVza3RvcFN1YnNCdG4iLCIkZGVza3RvcE90cEJ0biIsIiRzdWJzTWVhbENvc3QiLCIkb3RwTWVhbENvc3QiLCIkc3RpY2t5TmF2TW9iaWxlIiwiJGNvbGxlY3Rpb25Db250YWluZXIiLCIkbmF2VHJpZ2dlcnMiLCIkbW9iaWxlQ2F0ZWdvcmllc1BvcHVwQ2xvc2UiLCIkbmF2VHJpZ2dlciIsIiRmaWx0ZXJzRHJvcERvd25Nb2IiLCIkZmlsdGVyc0J1dHRvbkRlc2siLCIkZmlsdGVyc0Ryb3BEb3duRGVzayIsIiRpbml0aWFsRGlzaGVzIiwiJGZpbHRlcnNEcm9wRG93bkNsb3NlRGVzayIsIiRjbG9zZUJ0biIsIiRmaWx0ZXJzRHJvcERvd25DbG9zZU1vYiIsIiRmaWx0ZXJPcHRpb25zRGVzayIsIiRmaWx0ZXJPcHRpb25zTW9iIiwiJGNsZWFyQWxsQnRuc01vYiIsIiRjbGVhckFsbEJ0bnNEZXNrIiwic3RpY2t5TmF2TW9iaWxlT2Zmc2V0Iiwib2Zmc2V0VG9wIiwiYmFja2dyb3VuZENvbG9yIiwiJHByb2R1Y3RQb3B1cEJnIiwiJHByb2R1Y3RQb3B1cENsb3NlIiwiJGhvd0l0V29ya3NQb3B1cCIsIiRob3dJdFdvcmtzUG9wdXBUcmlnZ2VycyIsIiRob3dJdFdvcmtzUG9wdXBUcmlnZ2VyIiwiJGhvd0l0V29ya3NQb3B1cEJnIiwiJGhvd0l0V29ya3NQb3B1cENsb3NlIiwiJHdoYXRzV2l0aEJsb2Nrc1BvcHVwIiwiJHdoYXRzV2l0aEJsb2Nrc1BvcHVwVHJpZ2dlcnMiLCIkd2hhdHNXaXRoQmxvY2tzUG9wdXBUcmlnZ2VyIiwiJHdoYXRzV2l0aEJsb2Nrc1BvcHVwQmciLCIkd2hhdHNXaXRoQmxvY2tzUG9wdXBDbG9zZSIsIiR0YXN0ZUd1YXJhbnRlZVBvcHVwIiwiJHRhc3RlR3VhcmFudGVlUG9wdXBUcmlnZ2VycyIsIiR0YXN0ZUd1YXJhbnRlZVBvcHVwVHJpZ2dlciIsIiR0YXN0ZUd1YXJhbnRlZVBvcHVwQmciLCIkdGFzdGVHdWFyYW50ZWVQb3B1cENsb3NlIiwiJGJ1bmRsZUFzaWRlUXVpY2tMaW5rc0NvbnRhaW5lciIsIiRidW5kbGVBc2lkZVF1aWNrTGlua3MiLCIkYnVuZGxlQXNpZGVRdWlja0xpbmsiLCIkaW5mb0ljb24iLCIkcXVpY2tMaW5rIiwiJGRlY3JlYXNlIiwiJHBvcHVwVHJpZ2dlciIsImN1cnJlbnRRdWFudGl0eSIsIiRqdWRnZW1lQmFkZ2UiLCIkanVkZ2VtZVJldmlld0FjY29yZGlvbiIsIiRqdWRnZW1lUmV2aWV3QWNjb3JkaW9uVHJpZ2dlciIsInNjcm9sbEludG9WaWV3IiwiYmxvY2siLCIkYXRiQ29udGFpbmVyIiwiY3VycmVudEludmVudG9yeSIsIm51bWJlckFscmVhZHlJbkJ1bmRsZSIsImNvc25vbGUiLCIkY2xlYXJCdW5kbGUiLCIkY2FydFRyaWdnZXIiLCJvcGVuQ2FydCIsIiRidW5kbGVTdW1tYXJ5VHJpZ2dlciIsIiRidW5kbGVTdW1tYXJ5QXJyb3ciLCJza2lvRGlzY291bnRQZXJjZW50YWdlIiwicHJvZ3Jlc3NNZXNzYWdlU2hvd1RpbWUiLCJwb3B1cElkVG9PcGVuIiwiJHRhcmdldFBvcHVwVHJpZ2dlciIsInVybElkIiwicGVyZm9ybVZhbGlkaXR5Q2hlY2siLCJyZW1vdmVFeGlzdGluZ0J1bmRsZSIsImNhcnRSZXMiLCJjYXJ0IiwiYnVuZGxlSXRlbXMiLCJ1cGRhdGVzIiwidXBkYXRlUmVzIiwidXBkYXRlZENhcnQiLCJlcnJvciIsInJlbW92ZWQiLCJhZGRSZXMiLCJhZGREYXRhIiwiYWJhbmRvbmVkQnVuZGxlQnVpbGQiLCIkcHJvZHVjdENvbnRyb2xzIiwiJGNvbnRyb2xzVGV4dCIsIiRwdGFnIl0sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./resources/scripts/features/build-a-bundle/build-a-bundle.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/modules/Animation.js\":\r\n/*!************************************************!*\\\r\n  !*** ./resources/scripts/modules/Animation.js ***!\r\n  \\************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"Animation\\\": () => (/* binding */ Animation),\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* harmony import */ var gsap__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! gsap */ \\\"./node_modules/gsap/index.js\\\");\\n/* harmony import */ var gsap_src_ScrollTrigger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! gsap/src/ScrollTrigger */ \\\"./node_modules/gsap/src/ScrollTrigger.js\\\");\\n/* harmony import */ var _libs_gsap_ScrollSmoother__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../libs/gsap/ScrollSmoother */ \\\"./libs/gsap/ScrollSmoother.js\\\");\\n/* harmony import */ var _libs_gsap_SplitText__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../libs/gsap/SplitText */ \\\"./libs/gsap/SplitText.js\\\");\\n\\n\\n\\n\\ngsap__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].registerPlugin(gsap_src_ScrollTrigger__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"]);\\ngsap__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].registerPlugin(_libs_gsap_ScrollSmoother__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"]);\\ngsap__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].registerPlugin(_libs_gsap_SplitText__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"]);\\nvar Animation = function Animation(element) {\\n  console.log(\\\"animation module\\\");\\n  // Scroll Smoother\\n  var body = document.body;\\n  var smoother;\\n  if (body.dataset.smoothScroll == \\\"true\\\") {\\n    smoother = _libs_gsap_ScrollSmoother__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"].create({\\n      smooth: body.dataset.smoothAmount,\\n      smoothTouch: 0,\\n      effects: true\\n    });\\n  }\\n  if (body.dataset.animationsEnabled == \\\"true\\\") {\\n    // Fade-in effects\\n    console.log('animations enabled');\\n    var sections = document.querySelectorAll('.gsap-section');\\n    if (sections) {\\n      sections.forEach(function (section) {\\n        var elements = section.querySelectorAll('.gsap-element');\\n        var staggerAmount = 0;\\n        if (section.dataset.gsapStyle == 'stagger') {\\n          staggerAmount = section.dataset.gsapStagger;\\n        }\\n        gsap__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].fromTo(elements, {\\n          opacity: 0,\\n          // animate from opacity 0\\n          y: 25 // animate from y 25\\n        }, {\\n          scrollTrigger: {\\n            trigger: section,\\n            // trigger the animation depending on postion of element\\n            start: 'top 90%' // trigger the animation when the top of the element reaches 10% of the screen height\\n          },\\n\\n          opacity: 1,\\n          // animate to opacity 1\\n          y: 0,\\n          // animate to y 0\\n          ease: \\\"power1.out\\\",\\n          // use the power1.out animation easing\\n          duration: body.dataset.animationSpeed,\\n          // set the duration of the animation\\n          stagger: staggerAmount // set the amount of time between each elements animation\\n        });\\n      });\\n    }\\n  }\\n\\n  // Secondary nav active class toggling\\n  var $secondNav = document.querySelector(\\\".secondary-nav\\\");\\n  if ($secondNav) {\\n    // helper to clear all and set one active\\n    var setActive = function setActive(link) {\\n      navLinks.forEach(function (l) {\\n        return l.classList.remove(\\\"active\\\");\\n      });\\n      link.classList.add(\\\"active\\\");\\n\\n      // Scroll horizontally so the active link is visible in the nav\\n      link.scrollIntoView({\\n        behavior: \\\"smooth\\\",\\n        inline: \\\"center\\\",\\n        // or \\\"start\\\" if you prefer left-aligned\\n        block: \\\"nearest\\\" // avoids vertical scrolling\\n      });\\n    };\\n    // grab all anchor links to page\u2010sections\\n    var navLinks = Array.from($secondNav.querySelectorAll(\\\"a[href^='#']\\\"));\\n    navLinks.forEach(function (link) {\\n      var _smoother;\\n      var sectionId = link.getAttribute(\\\"href\\\").slice(1);\\n      var sectionEl = document.getElementById(sectionId);\\n      if (!sectionEl) return;\\n      gsap_src_ScrollTrigger__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"].create({\\n        trigger: sectionEl,\\n        start: \\\"top center\\\",\\n        end: \\\"bottom center\\\",\\n        scroller: ((_smoother = smoother) === null || _smoother === void 0 ? void 0 : _smoother.scrollContainer) || undefined,\\n        onEnter: function onEnter() {\\n          return setActive(link);\\n        },\\n        onEnterBack: function onEnterBack() {\\n          return setActive(link);\\n        },\\n        onLeave: function onLeave() {\\n          return link.classList.remove(\\\"active\\\");\\n        },\\n        onLeaveBack: function onLeaveBack() {\\n          return link.classList.remove(\\\"active\\\");\\n        }\\n      });\\n    });\\n  }\\n\\n  // Build a Bundle - Reward tier fading\\n  var $mainRewards = document.querySelector(\\\".build-a-bundle__rewards\\\");\\n  var $rewardPopup = document.querySelector(\\\".build-a-bundle__info-rewards.animated\\\");\\n  if ($mainRewards && $rewardPopup) {\\n    var el = document.querySelector(\\\".build-a-bundle__info-rewards\\\");\\n\\n    // Set initial state\\n    gsap__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].set(el, {\\n      autoAlpha: 0,\\n      height: 0\\n    });\\n    gsap_src_ScrollTrigger__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"].create({\\n      trigger: \\\".build-a-bundle__rewards\\\",\\n      start: \\\"bottom bottom\\\",\\n      end: \\\"bottom top\\\",\\n      onLeave: function onLeave() {\\n        // Animate height first\\n        el.style.height = \\\"auto\\\";\\n        var fullHeight = el.scrollHeight;\\n        el.style.height = \\\"0px\\\";\\n        gsap__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].to(el, {\\n          height: fullHeight,\\n          duration: 0.4,\\n          ease: \\\"power2.out\\\",\\n          onComplete: function onComplete() {\\n            // THEN fade in\\n            gsap__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].to(el, {\\n              autoAlpha: 1,\\n              duration: 0.3,\\n              ease: \\\"power1.out\\\"\\n            });\\n          }\\n        });\\n      },\\n      onEnterBack: function onEnterBack() {\\n        // Fade out first\\n        gsap__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].to(el, {\\n          autoAlpha: 0,\\n          duration: 0.3,\\n          ease: \\\"power1.in\\\",\\n          onComplete: function onComplete() {\\n            // THEN collapse height\\n            gsap__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].to(el, {\\n              height: 0,\\n              duration: 0.4,\\n              ease: \\\"power2.in\\\"\\n            });\\n          }\\n        });\\n      }\\n    });\\n  }\\n};\\n\\n// Export the module\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Animation);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9tb2R1bGVzL0FuaW1hdGlvbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBd0I7QUFDMkI7QUFDWTtBQUNWO0FBRXJEQSwyREFBbUIsQ0FBQ0MsOERBQWEsQ0FBQztBQUNsQ0QsMkRBQW1CLENBQUNFLGlFQUFjLENBQUM7QUFDbkNGLDJEQUFtQixDQUFDRyw0REFBUyxDQUFDO0FBRXZCLElBQU1FLFNBQVMsR0FBRyxTQUFaQSxTQUFTLENBQUlDLE9BQU8sRUFBSztFQUNsQ0MsT0FBTyxDQUFDQyxHQUFHLENBQUMsa0JBQWtCLENBQUM7RUFDL0I7RUFDQSxJQUFNQyxJQUFJLEdBQUdDLFFBQVEsQ0FBQ0QsSUFBSTtFQUMxQixJQUFJRSxRQUFRO0VBRVosSUFBSUYsSUFBSSxDQUFDRyxPQUFPLENBQUNDLFlBQVksSUFBSSxNQUFNLEVBQUM7SUFDcENGLFFBQVEsR0FBR1Qsd0VBQXFCLENBQUM7TUFDN0JhLE1BQU0sRUFBRU4sSUFBSSxDQUFDRyxPQUFPLENBQUNJLFlBQVk7TUFDakNDLFdBQVcsRUFBRSxDQUFDO01BQ2RDLE9BQU8sRUFBRTtJQUNiLENBQUMsQ0FBQztFQUNOO0VBRUEsSUFBSVQsSUFBSSxDQUFDRyxPQUFPLENBQUNPLGlCQUFpQixJQUFJLE1BQU0sRUFBQztJQUN6QztJQUNBWixPQUFPLENBQUNDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQztJQUNqQyxJQUFNWSxRQUFRLEdBQUdWLFFBQVEsQ0FBQ1csZ0JBQWdCLENBQUMsZUFBZSxDQUFDO0lBRTNELElBQUlELFFBQVEsRUFBQztNQUNUQSxRQUFRLENBQUNFLE9BQU8sQ0FBQyxVQUFBQyxPQUFPLEVBQUk7UUFDeEIsSUFBTUMsUUFBUSxHQUFHRCxPQUFPLENBQUNGLGdCQUFnQixDQUFDLGVBQWUsQ0FBQztRQUMxRCxJQUFJSSxhQUFhLEdBQUcsQ0FBQztRQUVyQixJQUFJRixPQUFPLENBQUNYLE9BQU8sQ0FBQ2MsU0FBUyxJQUFJLFNBQVMsRUFBQztVQUN2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SixDQUFDLENBQUM7RUFDTjtBQUNKLENBQUM7O0FBR0Q7QUFDQSxpRUFBZTdCLFNBQVMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL3Jlc291cmNlcy9zY3JpcHRzL21vZHVsZXMvQW5pbWF0aW9uLmpzPzE5OGQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdzYXAgZnJvbSBcImdzYXBcIjtcclxuaW1wb3J0IFNjcm9sbFRyaWdnZXIgZnJvbSBcImdzYXAvc3JjL1Njcm9sbFRyaWdnZXJcIjtcclxuaW1wb3J0IFNjcm9sbFNtb290aGVyIGZyb20gXCIuLi8uLi8uLi9saWJzL2dzYXAvU2Nyb2xsU21vb3RoZXJcIjtcclxuaW1wb3J0IFNwbGl0VGV4dCBmcm9tIFwiLi4vLi4vLi4vbGlicy9nc2FwL1NwbGl0VGV4dFwiO1xyXG5cclxuZ3NhcC5yZWdpc3RlclBsdWdpbihTY3JvbGxUcmlnZ2VyKTtcclxuZ3NhcC5yZWdpc3RlclBsdWdpbihTY3JvbGxTbW9vdGhlcik7XHJcbmdzYXAucmVnaXN0ZXJQbHVnaW4oU3BsaXRUZXh0KTtcclxuXHJcbmV4cG9ydCBjb25zdCBBbmltYXRpb24gPSAoZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc29sZS5sb2coXCJhbmltYXRpb24gbW9kdWxlXCIpO1xyXG4gICAgLy8gU2Nyb2xsIFNtb290aGVyXHJcbiAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcclxuICAgIGxldCBzbW9vdGhlcjtcclxuXHJcbiAgICBpZiAoYm9keS5kYXRhc2V0LnNtb290aFNjcm9sbCA9PSBcInRydWVcIil7XHJcbiAgICAgICAgc21vb3RoZXIgPSBTY3JvbGxTbW9vdGhlci5jcmVhdGUoe1xyXG4gICAgICAgICAgICBzbW9vdGg6IGJvZHkuZGF0YXNldC5zbW9vdGhBbW91bnQsXHJcbiAgICAgICAgICAgIHNtb290aFRvdWNoOiAwLFxyXG4gICAgICAgICAgICBlZmZlY3RzOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGJvZHkuZGF0YXNldC5hbmltYXRpb25zRW5hYmxlZCA9PSBcInRydWVcIil7XHJcbiAgICAgICAgLy8gRmFkZS1pbiBlZmZlY3RzXHJcbiAgICAgICAgY29uc29sZS5sb2coJ2FuaW1hdGlvbnMgZW5hYmxlZCcpO1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmdzYXAtc2VjdGlvbicpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChzZWN0aW9ucyl7XHJcbiAgICAgICAgICAgIHNlY3Rpb25zLmZvckVhY2goc2VjdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IHNlY3Rpb24ucXVlcnlTZWxlY3RvckFsbCgnLmdzYXAtZWxlbWVudCcpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHN0YWdnZXJBbW91bnQgPSAwO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VjdGlvbi5kYXRhc2V0LmdzYXBTdHlsZSA9PSAnc3RhZ2dlcicpe1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YWdnZXJBbW91bnQgPSBzZWN0aW9uLmRhdGFzZXQuZ3NhcFN0YWdnZXI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGdzYXAuZnJvbVRvKGVsZW1lbnRzLCBcclxuICAgICAgICAgICAgICAgICAgICB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLCAvLyBhbmltYXRlIGZyb20gb3BhY2l0eSAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IDI1IC8vIGFuaW1hdGUgZnJvbSB5IDI1XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgXHJcbiAgICAgICAgICAgICAgICAgICAgeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVHJpZ2dlcjogeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXI6IHNlY3Rpb24sIC8vIHRyaWdnZXIgdGhlIGFuaW1hdGlvbiBkZXBlbmRpbmcgb24gcG9zdGlvbiBvZiBlbGVtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogJ3RvcCA5MCUnIC8vIHRyaWdnZXIgdGhlIGFuaW1hdGlvbiB3aGVuIHRoZSB0b3Agb2YgdGhlIGVsZW1lbnQgcmVhY2hlcyAxMCUgb2YgdGhlIHNjcmVlbiBoZWlnaHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDEsIC8vIGFuaW1hdGUgdG8gb3BhY2l0eSAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IDAsIC8vIGFuaW1hdGUgdG8geSAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVhc2U6IFwicG93ZXIxLm91dFwiLCAvLyB1c2UgdGhlIHBvd2VyMS5vdXQgYW5pbWF0aW9uIGVhc2luZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogYm9keS5kYXRhc2V0LmFuaW1hdGlvblNwZWVkLCAvLyBzZXQgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhZ2dlcjogc3RhZ2dlckFtb3VudCAvLyBzZXQgdGhlIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gZWFjaCBlbGVtZW50cyBhbmltYXRpb25cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8vIFNlY29uZGFyeSBuYXYgYWN0aXZlIGNsYXNzIHRvZ2dsaW5nXHJcbiAgICBjb25zdCAkc2Vjb25kTmF2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5zZWNvbmRhcnktbmF2XCIpO1xyXG5cclxuICAgIGlmICgkc2Vjb25kTmF2KSB7XHJcbiAgICAgICAgLy8gZ3JhYiBhbGwgYW5jaG9yIGxpbmtzIHRvIHBhZ2XigJBzZWN0aW9uc1xyXG4gICAgICAgIGNvbnN0IG5hdkxpbmtzID0gQXJyYXkuZnJvbShcclxuICAgICAgICAgICAgJHNlY29uZE5hdi5xdWVyeVNlbGVjdG9yQWxsKFwiYVtocmVmXj0nIyddXCIpXHJcbiAgICAgICAgKTtcclxuICAgIFxyXG4gICAgICAgIC8vIGhlbHBlciB0byBjbGVhciBhbGwgYW5kIHNldCBvbmUgYWN0aXZlXHJcbiAgICAgICAgZnVuY3Rpb24gc2V0QWN0aXZlKGxpbmspIHtcclxuICAgICAgICAgICAgbmF2TGlua3MuZm9yRWFjaChsID0+IGwuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKSk7XHJcbiAgICAgICAgICAgIGxpbmsuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcclxuICAgIFxyXG4gICAgICAgICAgICAvLyBTY3JvbGwgaG9yaXpvbnRhbGx5IHNvIHRoZSBhY3RpdmUgbGluayBpcyB2aXNpYmxlIGluIHRoZSBuYXZcclxuICAgICAgICAgICAgbGluay5zY3JvbGxJbnRvVmlldyh7XHJcbiAgICAgICAgICAgICAgICBiZWhhdmlvcjogXCJzbW9vdGhcIixcclxuICAgICAgICAgICAgICAgIGlubGluZTogXCJjZW50ZXJcIiwgICAvLyBvciBcInN0YXJ0XCIgaWYgeW91IHByZWZlciBsZWZ0LWFsaWduZWRcclxuICAgICAgICAgICAgICAgIGJsb2NrOiBcIm5lYXJlc3RcIiAgIC8vIGF2b2lkcyB2ZXJ0aWNhbCBzY3JvbGxpbmdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgbmF2TGlua3MuZm9yRWFjaChsaW5rID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbklkID0gbGluay5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpLnNsaWNlKDEpO1xyXG4gICAgICAgICAgICBjb25zdCBzZWN0aW9uRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWN0aW9uSWQpO1xyXG4gICAgICAgICAgICBpZiAoIXNlY3Rpb25FbCkgcmV0dXJuO1xyXG4gICAgXHJcbiAgICAgICAgICAgIFNjcm9sbFRyaWdnZXIuY3JlYXRlKHtcclxuICAgICAgICAgICAgICAgIHRyaWdnZXI6IHNlY3Rpb25FbCxcclxuICAgICAgICAgICAgICAgIHN0YXJ0OiBcInRvcCBjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgIGVuZDogXCJib3R0b20gY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICBzY3JvbGxlcjogc21vb3RoZXI/LnNjcm9sbENvbnRhaW5lciB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBvbkVudGVyOiAgICAgKCkgPT4gc2V0QWN0aXZlKGxpbmspLFxyXG4gICAgICAgICAgICAgICAgb25FbnRlckJhY2s6ICgpID0+IHNldEFjdGl2ZShsaW5rKSxcclxuICAgICAgICAgICAgICAgIG9uTGVhdmU6ICAgICAoKSA9PiBsaW5rLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIiksXHJcbiAgICAgICAgICAgICAgICBvbkxlYXZlQmFjazogKCkgPT4gbGluay5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLy8gQnVpbGQgYSBCdW5kbGUgLSBSZXdhcmQgdGllciBmYWRpbmdcclxuICAgIGNvbnN0ICRtYWluUmV3YXJkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYnVpbGQtYS1idW5kbGVfX3Jld2FyZHNcIik7XHJcbiAgICBjb25zdCAkcmV3YXJkUG9wdXAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1aWxkLWEtYnVuZGxlX19pbmZvLXJld2FyZHMuYW5pbWF0ZWRcIik7XHJcblxyXG4gICAgaWYgKCRtYWluUmV3YXJkcyAmJiAkcmV3YXJkUG9wdXApe1xyXG4gICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5idWlsZC1hLWJ1bmRsZV9faW5mby1yZXdhcmRzXCIpO1xyXG5cclxuICAgICAgICAvLyBTZXQgaW5pdGlhbCBzdGF0ZVxyXG4gICAgICAgIGdzYXAuc2V0KGVsLCB7XHJcbiAgICAgICAgICAgIGF1dG9BbHBoYTogMCxcclxuICAgICAgICAgICAgaGVpZ2h0OiAwLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBTY3JvbGxUcmlnZ2VyLmNyZWF0ZSh7XHJcbiAgICAgICAgICAgIHRyaWdnZXI6IFwiLmJ1aWxkLWEtYnVuZGxlX19yZXdhcmRzXCIsXHJcbiAgICAgICAgICAgIHN0YXJ0OiBcImJvdHRvbSBib3R0b21cIixcclxuICAgICAgICAgICAgZW5kOiBcImJvdHRvbSB0b3BcIixcclxuICAgICAgICAgICAgb25MZWF2ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gQW5pbWF0ZSBoZWlnaHQgZmlyc3RcclxuICAgICAgICAgICAgICAgIGVsLnN0eWxlLmhlaWdodCA9IFwiYXV0b1wiO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZnVsbEhlaWdodCA9IGVsLnNjcm9sbEhlaWdodDtcclxuICAgICAgICAgICAgICAgIGVsLnN0eWxlLmhlaWdodCA9IFwiMHB4XCI7XHJcblxyXG4gICAgICAgICAgICAgICAgZ3NhcC50byhlbCwge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogZnVsbEhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMC40LFxyXG4gICAgICAgICAgICAgICAgICAgIGVhc2U6IFwicG93ZXIyLm91dFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRIRU4gZmFkZSBpblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NhcC50byhlbCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b0FscGhhOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDAuMyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhc2U6IFwicG93ZXIxLm91dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvbkVudGVyQmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gRmFkZSBvdXQgZmlyc3RcclxuICAgICAgICAgICAgICAgIGdzYXAudG8oZWwsIHtcclxuICAgICAgICAgICAgICAgIGF1dG9BbHBoYTogMCxcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAwLjMsXHJcbiAgICAgICAgICAgICAgICBlYXNlOiBcInBvd2VyMS5pblwiLFxyXG4gICAgICAgICAgICAgICAgb25Db21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRIRU4gY29sbGFwc2UgaGVpZ2h0XHJcbiAgICAgICAgICAgICAgICAgICAgZ3NhcC50byhlbCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAwLjQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVhc2U6IFwicG93ZXIyLmluXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG4vLyBFeHBvcnQgdGhlIG1vZHVsZVxyXG5leHBvcnQgZGVmYXVsdCBBbmltYXRpb247Il0sIm5hbWVzIjpbImdzYXAiLCJTY3JvbGxUcmlnZ2VyIiwiU2Nyb2xsU21vb3RoZXIiLCJTcGxpdFRleHQiLCJyZWdpc3RlclBsdWdpbiIsIkFuaW1hdGlvbiIsImVsZW1lbnQiLCJjb25zb2xlIiwibG9nIiwiYm9keSIsImRvY3VtZW50Iiwic21vb3RoZXIiLCJkYXRhc2V0Iiwic21vb3RoU2Nyb2xsIiwiY3JlYXRlIiwic21vb3RoIiwic21vb3RoQW1vdW50Iiwic21vb3RoVG91Y2giLCJlZmZlY3RzIiwiYW5pbWF0aW9uc0VuYWJsZWQiLCJzZWN0aW9ucyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwic2VjdGlvbiIsImVsZW1lbnRzIiwic3RhZ2dlckFtb3VudCIsImdzYXBTdHlsZSIsImdzYXBTdGFnZ2VyIiwiZnJvbVRvIiwib3BhY2l0eSIsInkiLCJzY3JvbGxUcmlnZ2VyIiwidHJpZ2dlciIsInN0YXJ0IiwiZWFzZSIsImR1cmF0aW9uIiwiYW5pbWF0aW9uU3BlZWQiLCJzdGFnZ2VyIiwiJHNlY29uZE5hdiIsInF1ZXJ5U2VsZWN0b3IiLCJzZXRBY3RpdmUiLCJsaW5rIiwibmF2TGlua3MiLCJsIiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwiYWRkIiwic2Nyb2xsSW50b1ZpZXciLCJiZWhhdmlvciIsImlubGluZSIsImJsb2NrIiwiQXJyYXkiLCJmcm9tIiwic2VjdGlvbklkIiwiZ2V0QXR0cmlidXRlIiwic2xpY2UiLCJzZWN0aW9uRWwiLCJnZXRFbGVtZW50QnlJZCIsImVuZCIsInNjcm9sbGVyIiwic2Nyb2xsQ29udGFpbmVyIiwidW5kZWZpbmVkIiwib25FbnRlciIsIm9uRW50ZXJCYWNrIiwib25MZWF2ZSIsIm9uTGVhdmVCYWNrIiwiJG1haW5SZXdhcmRzIiwiJHJld2FyZFBvcHVwIiwiZWwiLCJzZXQiLCJhdXRvQWxwaGEiLCJoZWlnaHQiLCJzdHlsZSIsImZ1bGxIZWlnaHQiLCJzY3JvbGxIZWlnaHQiLCJ0byIsIm9uQ29tcGxldGUiXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./resources/scripts/modules/Animation.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/modules/Cart.js\":\r\n/*!*******************************************!*\\\r\n  !*** ./resources/scripts/modules/Cart.js ***!\r\n  \\*******************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"Cart\\\": () => (/* binding */ Cart),\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* harmony import */ var gsap__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! gsap */ \\\"./node_modules/gsap/index.js\\\");\\n/* harmony import */ var swiper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! swiper */ \\\"./node_modules/swiper/swiper.esm.js\\\");\\nfunction _typeof(obj) { \\\"@babel/helpers - typeof\\\"; return _typeof = \\\"function\\\" == typeof Symbol && \\\"symbol\\\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \\\"function\\\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \\\"symbol\\\" : typeof obj; }, _typeof(obj); }\\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\\nfunction _nonIterableRest() { throw new TypeError(\\\"Invalid attempt to destructure non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\\\"); }\\nfunction _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \\\"undefined\\\" != typeof Symbol && arr[Symbol.iterator] || arr[\\\"@@iterator\\\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i[\\\"return\\\"] && (_r = _i[\\\"return\\\"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\\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 _regeneratorRuntime() { \\\"use strict\\\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = \\\"function\\\" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || \\\"@@iterator\\\", asyncIteratorSymbol = $Symbol.asyncIterator || \\\"@@asyncIterator\\\", toStringTagSymbol = $Symbol.toStringTag || \\\"@@toStringTag\\\"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, \\\"\\\"); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, \\\"_invoke\\\", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: \\\"normal\\\", arg: fn.call(obj, arg) }; } catch (err) { return { type: \\\"throw\\\", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { [\\\"next\\\", \\\"throw\\\", \\\"return\\\"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (\\\"throw\\\" !== record.type) { var result = record.arg, value = result.value; return value && \\\"object\\\" == _typeof(value) && hasOwn.call(value, \\\"__await\\\") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke(\\\"next\\\", value, resolve, reject); }, function (err) { invoke(\\\"throw\\\", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke(\\\"throw\\\", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, \\\"_invoke\\\", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = \\\"suspendedStart\\\"; return function (method, arg) { if (\\\"executing\\\" === state) throw new Error(\\\"Generator is already running\\\"); if (\\\"completed\\\" === state) { if (\\\"throw\\\" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (\\\"next\\\" === context.method) context.sent = context._sent = context.arg;else if (\\\"throw\\\" === context.method) { if (\\\"suspendedStart\\\" === state) throw state = \\\"completed\\\", context.arg; context.dispatchException(context.arg); } else \\\"return\\\" === context.method && context.abrupt(\\\"return\\\", context.arg); state = \\\"executing\\\"; var record = tryCatch(innerFn, self, context); if (\\\"normal\\\" === record.type) { if (state = context.done ? \\\"completed\\\" : \\\"suspendedYield\\\", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } \\\"throw\\\" === record.type && (state = \\\"completed\\\", context.method = \\\"throw\\\", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, \\\"throw\\\" === methodName && delegate.iterator[\\\"return\\\"] && (context.method = \\\"return\\\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \\\"throw\\\" === context.method) || \\\"return\\\" !== methodName && (context.method = \\\"throw\\\", context.arg = new TypeError(\\\"The iterator does not provide a '\\\" + methodName + \\\"' method\\\")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if (\\\"throw\\\" === record.type) return context.method = \\\"throw\\\", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \\\"return\\\" !== context.method && (context.method = \\\"next\\\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \\\"throw\\\", context.arg = new TypeError(\\\"iterator result is not an object\\\"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = \\\"normal\\\", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: \\\"root\\\" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if (\\\"function\\\" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, \\\"constructor\\\", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, \\\"constructor\\\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \\\"GeneratorFunction\\\"), exports.isGeneratorFunction = function (genFun) { var ctor = \\\"function\\\" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || \\\"GeneratorFunction\\\" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \\\"GeneratorFunction\\\")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \\\"Generator\\\"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, \\\"toString\\\", function () { return \\\"[object Generator]\\\"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \\\"next\\\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) \\\"t\\\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if (\\\"throw\\\" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = \\\"throw\\\", record.arg = exception, context.next = loc, caught && (context.method = \\\"next\\\", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if (\\\"root\\\" === entry.tryLoc) return handle(\\\"end\\\"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, \\\"catchLoc\\\"), hasFinally = hasOwn.call(entry, \\\"finallyLoc\\\"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error(\\\"try statement without catch or finally\\\"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, \\\"finallyLoc\\\") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && (\\\"break\\\" === type || \\\"continue\\\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = \\\"next\\\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if (\\\"throw\\\" === record.type) throw record.arg; return \\\"break\\\" === record.type || \\\"continue\\\" === record.type ? this.next = record.arg : \\\"return\\\" === record.type ? (this.rval = this.arg = record.arg, this.method = \\\"return\\\", this.next = \\\"end\\\") : \\\"normal\\\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, \\\"catch\\\": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (\\\"throw\\\" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error(\\\"illegal catch attempt\\\"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, \\\"next\\\" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }\\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \\\"next\\\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \\\"throw\\\", err); } _next(undefined); }); }; }\\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\\"Cannot call a class as a function\\\"); } }\\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\\"value\\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \\\"prototype\\\", { writable: false }); return Constructor; }\\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(arg) { var key = _toPrimitive(arg, \\\"string\\\"); return _typeof(key) === \\\"symbol\\\" ? key : String(key); }\\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \\\"object\\\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \\\"default\\\"); if (_typeof(res) !== \\\"object\\\") return res; throw new TypeError(\\\"@@toPrimitive must return a primitive value.\\\"); } return (hint === \\\"string\\\" ? String : Number)(input); }\\n\\n\\nvar Cart = /*#__PURE__*/function () {\\n  function Cart() {\\n    var _this = this,\\n      _$body$dataset;\\n    _classCallCheck(this, Cart);\\n    _defineProperty(this, \\\"root\\\", window.Shopify.routes.root);\\n    _defineProperty(this, \\\"sections\\\", \\\"cart-template,cart-aside,header\\\");\\n    _defineProperty(this, \\\"useCartAside\\\", false);\\n    _defineProperty(this, \\\"deliveryDateMonitorRunning\\\", false);\\n    _defineProperty(this, \\\"enableCartCheckoutBtn\\\", function ($cartCheckoutButton, $calenderButton) {\\n      $cartCheckoutButton.classList.remove(\\\"button--disabled\\\", \\\"hidden\\\");\\n      $cartCheckoutButton.disabled = false;\\n      if ($calenderButton) {\\n        $calenderButton.classList.add(\\\"hidden\\\");\\n      }\\n    });\\n    _defineProperty(this, \\\"fetchAndRerenderSections\\\", /*#__PURE__*/function () {\\n      var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee($uiBlocker) {\\n        var sectionsResp;\\n        return _regeneratorRuntime().wrap(function _callee$(_context) {\\n          while (1) switch (_context.prev = _context.next) {\\n            case 0:\\n              _context.next = 2;\\n              return fetch(\\\"/?sections=\\\".concat(_this.sections)).then(function (res) {\\n                return res.json();\\n              });\\n            case 2:\\n              sectionsResp = _context.sent;\\n              _this.reRenderSections(sectionsResp);\\n              if ($uiBlocker) {\\n                _this.hideUIBlocker($uiBlocker);\\n              }\\n            case 5:\\n            case \\\"end\\\":\\n              return _context.stop();\\n          }\\n        }, _callee);\\n      }));\\n      return function (_x) {\\n        return _ref.apply(this, arguments);\\n      };\\n    }());\\n    _defineProperty(this, \\\"pauseAddonQtyBtn\\\", function ($productControls, $addonDecrease, $productQty, $addonIncrease) {\\n      $productControls.classList.add(\\\"active\\\");\\n      $addonDecrease.style.opacity = 0;\\n      $addonIncrease.style.opacity = 0;\\n      $productQty.classList.add(\\\"font-bobby-jones-soft\\\");\\n      $productQty.textContent = \\\"Updating\\\";\\n    });\\n    _defineProperty(this, \\\"pauseQtyBtn\\\", function ($lineItemQuantityDecrease, $lineItemQuantityValue, $lineItemQuantityIncrease) {\\n      $lineItemQuantityDecrease.style.opacity = 0;\\n      $lineItemQuantityIncrease.style.opacity = 0;\\n      $lineItemQuantityValue.classList.add(\\\"font-bobby-jones-soft\\\");\\n      $lineItemQuantityValue.textContent = \\\"Updating\\\";\\n    });\\n    _defineProperty(this, \\\"removeSellingPlansFromAllApplicableProducts\\\", /*#__PURE__*/function () {\\n      var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2($bundleLineItems, $lineItems, $uiBlocker) {\\n        var updates, allRegularProductPromises, regularPromises, _i, _Object$values, bundle_info, bundleId, $bundleProducts, bundle, deleteResult, addResp;\\n        return _regeneratorRuntime().wrap(function _callee2$(_context2) {\\n          while (1) switch (_context2.prev = _context2.next) {\\n            case 0:\\n              //Set up our Updates Object\\n              updates = {\\n                bundles: {},\\n                regular_products: {}\\n              }; //Start With Build a Bundles\\n              if ($bundleLineItems.length > 0) {\\n                $bundleLineItems.forEach(function ($bundleLineItem) {\\n                  //Not every build a bundle will be on subscription - so check for the ones that are\\n                  var bundleSellingPlanId = $bundleLineItem.dataset.sellingPlanId;\\n                  if (bundleSellingPlanId) {\\n                    // Add to updates as we need to remove the selling plan\\n                    var bundleId = $bundleLineItem.dataset.bundleId;\\n                    updates.bundles[bundleId] = {\\n                      bundle_id: bundleId,\\n                      bundle_line_item: $bundleLineItem,\\n                      bundle_url: $bundleLineItem.dataset.url\\n                    };\\n                  }\\n                });\\n              }\\n\\n              // Find all regular products that have selling plans and that ARENT subscription only\\n              if ($lineItems.length > 0) {\\n                $lineItems.forEach(function ($lineItem) {\\n                  if ($lineItem.dataset.sellingPlanId) {\\n                    //Check whether the selling plan is required or not\\n                    if ($lineItem.dataset.sellingPlanIsRequired == \\\"false\\\") {\\n                      var key = $lineItem.dataset.key;\\n                      var quantity = parseInt($lineItem.dataset.quantity);\\n                      if (key && quantity) {\\n                        updates.regular_products[key] = {\\n                          id: key,\\n                          quantity: quantity,\\n                          selling_plan: null\\n                        };\\n                      }\\n                    }\\n                  }\\n                });\\n              }\\n\\n              //Do we have updates to make? We theoretically should...\\n              if (!(Object.keys(updates.regular_products).length > 0 || Object.keys(updates.bundles).length > 0)) {\\n                _context2.next = 45;\\n                break;\\n              }\\n              // Show UI Blocker to indicate that something is happening\\n              if ($uiBlocker) {\\n                _this.showUIBlocker($uiBlocker);\\n              }\\n\\n              // Do regular products first - they can all be done in one go\\n              allRegularProductPromises = [];\\n              if (Object.keys(updates.regular_products).length > 0) {\\n                regularPromises = Object.values(updates.regular_products).map(function (item) {\\n                  return fetch('/cart/change.js', {\\n                    method: 'POST',\\n                    headers: {\\n                      'Content-Type': 'application/json'\\n                    },\\n                    body: JSON.stringify({\\n                      id: item.id,\\n                      quantity: item.quantity,\\n                      selling_plan: null\\n                    })\\n                  });\\n                });\\n                allRegularProductPromises.push.apply(allRegularProductPromises, _toConsumableArray(regularPromises));\\n              }\\n\\n              // Now Process the Changes\\n              _context2.prev = 7;\\n              if (!(allRegularProductPromises.length > 0)) {\\n                _context2.next = 11;\\n                break;\\n              }\\n              _context2.next = 11;\\n              return Promise.all(allRegularProductPromises);\\n            case 11:\\n              if (!(Object.keys(updates.bundles).length > 0)) {\\n                _context2.next = 35;\\n                break;\\n              }\\n              _i = 0, _Object$values = Object.values(updates.bundles);\\n            case 13:\\n              if (!(_i < _Object$values.length)) {\\n                _context2.next = 35;\\n                break;\\n              }\\n              bundle_info = _Object$values[_i];\\n              bundleId = bundle_info.bundle_id;\\n              $bundleProducts = bundle_info.bundle_line_item.querySelectorAll(\\\".cart__bundle-line-item\\\");\\n              if (!($bundleProducts.length > 0)) {\\n                _context2.next = 31;\\n                break;\\n              }\\n              // Get Bundle Structure Setup\\n              bundle = _this.setupBundleObject(bundleId, $bundleProducts); // Delete the bundle\\n              _context2.next = 21;\\n              return _this.deleteBundle($bundleProducts);\\n            case 21:\\n              deleteResult = _context2.sent;\\n              if (deleteResult.ok) {\\n                _context2.next = 24;\\n                break;\\n              }\\n              throw new Error('Failed to delete bundle: ' + bundleId);\\n            case 24:\\n              _context2.next = 26;\\n              return _this.addNewBundleToCart(bundle, bundleId, bundle_info.bundle_url, null);\\n            case 26:\\n              addResp = _context2.sent;\\n              if (addResp.sections) {\\n                _context2.next = 29;\\n                break;\\n              }\\n              throw new Error('Failed to re-add bundle: ' + bundleId);\\n            case 29:\\n              _context2.next = 32;\\n              break;\\n            case 31:\\n              console.log(\\\"Could not find bundle products to delete and re-add during remove selling plans call\\\");\\n            case 32:\\n              _i++;\\n              _context2.next = 13;\\n              break;\\n            case 35:\\n              // Once all finished - rerender the cart with the newly updated items\\n              _this.fetchAndRerenderSections($uiBlocker);\\n              _context2.next = 43;\\n              break;\\n            case 38:\\n              _context2.prev = 38;\\n              _context2.t0 = _context2[\\\"catch\\\"](7);\\n              console.error('Error removing selling plans:', _context2.t0);\\n              alert(\\\"Encountered an issue when removing subscriptions from cart items.\\\");\\n              location.reload();\\n            case 43:\\n              _context2.next = 47;\\n              break;\\n            case 45:\\n              console.log(\\\"No updates to make on selection of 'Unsubscribe' - unsure what to do\\\");\\n              window.location.reload;\\n            case 47:\\n            case \\\"end\\\":\\n              return _context2.stop();\\n          }\\n        }, _callee2, null, [[7, 38]]);\\n      }));\\n      return function (_x2, _x3, _x4) {\\n        return _ref2.apply(this, arguments);\\n      };\\n    }());\\n    _defineProperty(this, \\\"synchroniseSellingPlansAcrossLineItems\\\", /*#__PURE__*/function () {\\n      var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(activeSellingPlanId, activeSellingPlanName, $bundleLineItems, $lineItems, $uiBlocker) {\\n        var updates, allRegularProductPromises, regularPromises, _i2, _Object$values2, bundle_info, bundleId, $bundleProducts, bundle, deleteResult, addResp;\\n        return _regeneratorRuntime().wrap(function _callee3$(_context3) {\\n          while (1) switch (_context3.prev = _context3.next) {\\n            case 0:\\n              /*\\r\\n                activeSellingPlanId = The Build a Bundle \\\"correct\\\" id\\r\\n                activeSellingPlanName = The downcased string we're using to compare across different types of selling plans\\r\\n                $bundleLineItems = Build a Boxes May or may not be present\\r\\n                $lineItems = \\\"Regular product\\\" line items, i.e, not build a bundle and not addon products. Will usually be Pre-built bundles\\r\\n              */\\n              updates = {\\n                bundles: {},\\n                regular_products: {}\\n              };\\n              if ($bundleLineItems.length > 0) {\\n                //Loop through bundle items, find any that don't match the activeSellingPlanId     activeSellingPlanId\\n                $bundleLineItems.forEach(function ($bundleLineItem) {\\n                  var bundleSellingPlanId = $bundleLineItem.dataset.sellingPlanId;\\n                  var bundleId = $bundleLineItem.dataset.bundleId;\\n                  if (bundleSellingPlanId) {\\n                    if (parseInt(bundleSellingPlanId) !== activeSellingPlanId) {\\n                      //Add Bundle Id to list for updating later\\n                      updates.bundles[bundleId] = {\\n                        bundle_id: bundleId,\\n                        bundle_line_item: $bundleLineItem,\\n                        bundle_url: $bundleLineItem.dataset.url\\n                      };\\n                    }\\n                  }\\n                });\\n              }\\n              if ($lineItems.length > 0) {\\n                $lineItems.forEach(function ($lineItem) {\\n                  if ($lineItem.dataset.sellingPlanName) {\\n                    if ($lineItem.dataset.sellingPlanName != activeSellingPlanName) {\\n                      //Get the list of selling plans available to this product\\n                      var availablePlans = JSON.parse($lineItem.dataset.sellingPlanInfo);\\n                      if (availablePlans) {\\n                        var matchedPlan = availablePlans.find(function (plan) {\\n                          return plan.name === activeSellingPlanName;\\n                        });\\n                        if (matchedPlan) {\\n                          var key = $lineItem.dataset.key;\\n                          var quantity = parseInt($lineItem.dataset.quantity);\\n                          if (key && quantity) {\\n                            updates.regular_products[key] = {\\n                              id: key,\\n                              quantity: quantity,\\n                              selling_plan: matchedPlan.id\\n                            };\\n                          }\\n                        }\\n                      }\\n                    }\\n                  }\\n                });\\n              }\\n\\n              //do we have any updates to run?\\n              if (!(Object.keys(updates.regular_products).length > 0 || Object.keys(updates.bundles).length > 0)) {\\n                _context3.next = 43;\\n                break;\\n              }\\n              //Show UI Blocker to indicate that something is happening\\n              if ($uiBlocker) {\\n                _this.showUIBlocker($uiBlocker);\\n              }\\n\\n              //Do regular products first if set - they can all be done in one go\\n              allRegularProductPromises = []; //Build the list of promises \\n              if (Object.keys(updates.regular_products).length > 0) {\\n                regularPromises = Object.values(updates.regular_products).map(function (item) {\\n                  return fetch('/cart/change.js', {\\n                    method: 'POST',\\n                    headers: {\\n                      'Content-Type': 'application/json'\\n                    },\\n                    body: JSON.stringify({\\n                      id: item.id,\\n                      quantity: item.quantity,\\n                      selling_plan: item.selling_plan\\n                    })\\n                  });\\n                });\\n                allRegularProductPromises.push.apply(allRegularProductPromises, _toConsumableArray(regularPromises));\\n              }\\n              _context3.prev = 7;\\n              if (!(allRegularProductPromises.length > 0)) {\\n                _context3.next = 11;\\n                break;\\n              }\\n              _context3.next = 11;\\n              return Promise.all(allRegularProductPromises);\\n            case 11:\\n              if (!(Object.keys(updates.bundles).length > 0)) {\\n                _context3.next = 35;\\n                break;\\n              }\\n              _i2 = 0, _Object$values2 = Object.values(updates.bundles);\\n            case 13:\\n              if (!(_i2 < _Object$values2.length)) {\\n                _context3.next = 35;\\n                break;\\n              }\\n              bundle_info = _Object$values2[_i2];\\n              bundleId = bundle_info.bundle_id;\\n              $bundleProducts = bundle_info.bundle_line_item.querySelectorAll(\\\".cart__bundle-line-item\\\");\\n              if (!($bundleProducts.length > 0)) {\\n                _context3.next = 31;\\n                break;\\n              }\\n              //Get Bundle Structure Setup\\n              bundle = _this.setupBundleObject(bundleId, $bundleProducts); // Delete the bundle\\n              _context3.next = 21;\\n              return _this.deleteBundle($bundleProducts);\\n            case 21:\\n              deleteResult = _context3.sent;\\n              if (deleteResult.ok) {\\n                _context3.next = 24;\\n                break;\\n              }\\n              throw new Error('Failed to delete bundle: ' + bundleId);\\n            case 24:\\n              _context3.next = 26;\\n              return _this.addNewBundleToCart(bundle, bundleId, bundle_info.bundle_url, activeSellingPlanId);\\n            case 26:\\n              addResp = _context3.sent;\\n              if (addResp.sections) {\\n                _context3.next = 29;\\n                break;\\n              }\\n              throw new Error('Failed to re-add bundle: ' + bundleId);\\n            case 29:\\n              _context3.next = 32;\\n              break;\\n            case 31:\\n              console.log(\\\"could not find bundle products to delete and re-add during synchronise call\\\");\\n            case 32:\\n              _i2++;\\n              _context3.next = 13;\\n              break;\\n            case 35:\\n              //Once all finished - rerender the cart with the newly updated items\\n              _this.fetchAndRerenderSections($uiBlocker);\\n              _context3.next = 43;\\n              break;\\n            case 38:\\n              _context3.prev = 38;\\n              _context3.t0 = _context3[\\\"catch\\\"](7);\\n              console.error('Error synchronizing selling plans:', _context3.t0);\\n              alert(\\\"Encountered an issue when updating cart items.\\\");\\n              location.reload();\\n            case 43:\\n            case \\\"end\\\":\\n              return _context3.stop();\\n          }\\n        }, _callee3, null, [[7, 38]]);\\n      }));\\n      return function (_x5, _x6, _x7, _x8, _x9) {\\n        return _ref3.apply(this, arguments);\\n      };\\n    }());\\n    _defineProperty(this, \\\"removeAddOnProducts\\\", /*#__PURE__*/function () {\\n      var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4($addOnLineItems, $uiBlocker) {\\n        var updates, updateResp;\\n        return _regeneratorRuntime().wrap(function _callee4$(_context4) {\\n          while (1) switch (_context4.prev = _context4.next) {\\n            case 0:\\n              updates = {};\\n              $addOnLineItems.forEach(function ($addOnLineItem) {\\n                if ($addOnLineItem.dataset.key) {\\n                  updates[$addOnLineItem.dataset.key] = 0;\\n                }\\n              });\\n              if (!(Object.keys(updates).length > 0)) {\\n                _context4.next = 18;\\n                break;\\n              }\\n              _this.showUIBlocker($uiBlocker);\\n              _context4.prev = 4;\\n              _context4.next = 7;\\n              return fetch('/cart/update.js', {\\n                method: 'POST',\\n                headers: {\\n                  'Content-Type': 'application/json'\\n                },\\n                body: JSON.stringify({\\n                  updates: updates\\n                })\\n              });\\n            case 7:\\n              updateResp = _context4.sent;\\n              if (updateResp.ok) {\\n                _context4.next = 10;\\n                break;\\n              }\\n              throw new Error('Failed to remove add-ons');\\n            case 10:\\n              _context4.next = 12;\\n              return _this.fetchAndRerenderSections($uiBlocker);\\n            case 12:\\n              _context4.next = 18;\\n              break;\\n            case 14:\\n              _context4.prev = 14;\\n              _context4.t0 = _context4[\\\"catch\\\"](4);\\n              console.error('Error removing add-ons:', _context4.t0);\\n              _this.hideUIBlocker($uiBlocker);\\n            case 18:\\n            case \\\"end\\\":\\n              return _context4.stop();\\n          }\\n        }, _callee4, null, [[4, 14]]);\\n      }));\\n      return function (_x10, _x11) {\\n        return _ref4.apply(this, arguments);\\n      };\\n    }());\\n    _defineProperty(this, \\\"addNewBundleToCart\\\", /*#__PURE__*/function () {\\n      var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(bundle, bundleId, url, $inUseSellingPlanId) {\\n        var dynamicBundleData, lineItems, requestJson, addResp;\\n        return _regeneratorRuntime().wrap(function _callee5$(_context5) {\\n          while (1) switch (_context5.prev = _context5.next) {\\n            case 0:\\n              _context5.next = 2;\\n              return _this.getDynamicBundle();\\n            case 2:\\n              dynamicBundleData = _context5.sent;\\n              lineItems = [];\\n              Object.entries(bundle.items).forEach(function (_ref6) {\\n                var _ref7 = _slicedToArray(_ref6, 2),\\n                  productId = _ref7[0],\\n                  item = _ref7[1];\\n                var itemData = {\\n                  id: productId,\\n                  quantity: item.quantity,\\n                  properties: {\\n                    _bundle_id: bundleId,\\n                    _dynamicBoxIndex: bundleId,\\n                    _dynamicBoxId: dynamicBundleData.DynamicBox.boxId,\\n                    _bundleType: url,\\n                    _bundleUrl: url\\n                  }\\n                };\\n                if ($inUseSellingPlanId) {\\n                  itemData.selling_plan = $inUseSellingPlanId;\\n                }\\n                lineItems.push(itemData);\\n              });\\n              requestJson = {\\n                items: lineItems,\\n                sections: _this.sections\\n              };\\n              _context5.next = 8;\\n              return fetch('/cart/add.js', {\\n                method: 'POST',\\n                headers: {\\n                  'Content-Type': 'application/json'\\n                },\\n                body: JSON.stringify(requestJson)\\n              });\\n            case 8:\\n              addResp = _context5.sent;\\n              return _context5.abrupt(\\\"return\\\", addResp.json());\\n            case 10:\\n            case \\\"end\\\":\\n              return _context5.stop();\\n          }\\n        }, _callee5);\\n      }));\\n      return function (_x12, _x13, _x14, _x15) {\\n        return _ref5.apply(this, arguments);\\n      };\\n    }());\\n    _defineProperty(this, \\\"deleteBundle\\\", /*#__PURE__*/function () {\\n      var _ref8 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6($bundleProducts) {\\n        var updates, updateResp;\\n        return _regeneratorRuntime().wrap(function _callee6$(_context6) {\\n          while (1) switch (_context6.prev = _context6.next) {\\n            case 0:\\n              updates = {};\\n              $bundleProducts.forEach(function ($bundleProduct) {\\n                updates[$bundleProduct.dataset.key] = 0;\\n              });\\n              _context6.next = 4;\\n              return fetch('/cart/update.js', {\\n                method: 'POST',\\n                headers: {\\n                  'Content-Type': 'application/json'\\n                },\\n                body: JSON.stringify({\\n                  updates: updates\\n                })\\n              });\\n            case 4:\\n              updateResp = _context6.sent;\\n              _context6.next = 7;\\n              return updateResp;\\n            case 7:\\n              return _context6.abrupt(\\\"return\\\", _context6.sent);\\n            case 8:\\n            case \\\"end\\\":\\n              return _context6.stop();\\n          }\\n        }, _callee6);\\n      }));\\n      return function (_x16) {\\n        return _ref8.apply(this, arguments);\\n      };\\n    }());\\n    _defineProperty(this, \\\"setupBundleObject\\\", function (bundleId, $bundleProducts) {\\n      var bundle = {\\n        bundleId: bundleId,\\n        editing_bundle: true,\\n        items: {}\\n      };\\n      $bundleProducts.forEach(function (item) {\\n        var productId = item.dataset.id;\\n        var productTitle = item.dataset.title;\\n        var productPrice = parseFloat(item.dataset.price);\\n        var productPriceString = item.dataset.priceString;\\n        var compareProductPrice = parseFloat(item.dataset.comparePrice);\\n        var compareProductPriceString = item.dataset.comparePriceString;\\n        var productImage = item.dataset.image;\\n        var quantity = parseInt(item.dataset.quantity);\\n        bundle.items[productId] = {\\n          title: productTitle,\\n          price: productPrice,\\n          priceString: productPriceString,\\n          comparePrice: compareProductPrice,\\n          comparePriceString: compareProductPriceString,\\n          image: productImage,\\n          quantity: quantity\\n        };\\n      });\\n      return bundle;\\n    });\\n    _defineProperty(this, \\\"getDynamicBundle\\\", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {\\n      var response, data;\\n      return _regeneratorRuntime().wrap(function _callee7$(_context7) {\\n        while (1) switch (_context7.prev = _context7.next) {\\n          case 0:\\n            _context7.next = 2;\\n            return fetch('https://api.skio.com/storefront-http/get-dynamic-box', {\\n              method: 'POST',\\n              headers: {\\n                \\\"Content-Type\\\": \\\"application/json\\\"\\n              },\\n              body: JSON.stringify({\\n                \\\"productPlatformId\\\": \\\"15345685561727\\\"\\n              })\\n            });\\n          case 2:\\n            response = _context7.sent;\\n            _context7.next = 5;\\n            return response.json();\\n          case 5:\\n            data = _context7.sent;\\n            return _context7.abrupt(\\\"return\\\", data);\\n          case 7:\\n          case \\\"end\\\":\\n            return _context7.stop();\\n        }\\n      }, _callee7);\\n    })));\\n    _defineProperty(this, \\\"showUIBlocker\\\", function ($uiBlocker) {\\n      $uiBlocker.classList.add(\\\"active\\\");\\n      var logoSvg = $uiBlocker.querySelector(\\\"svg\\\");\\n      if (logoSvg) {\\n        gsap__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"].set(logoSvg, {\\n          position: 'absolute',\\n          top: '50%',\\n          left: '50%',\\n          transformOrigin: '50% 50%',\\n          xPercent: -50,\\n          yPercent: -50\\n        });\\n        _this.spinTimeline = gsap__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"].timeline({\\n          repeat: -1\\n        });\\n        _this.spinTimeline.timeScale(3.4);\\n        _this.spinTimeline.to(logoSvg, {\\n          rotation: 360,\\n          duration: 8,\\n          ease: 'back.inOut(1.3)'\\n        });\\n      }\\n    });\\n    _defineProperty(this, \\\"hideUIBlocker\\\", function ($uiBlocker) {\\n      $uiBlocker.classList.remove(\\\"active\\\");\\n      var logoSvg = $uiBlocker.querySelector(\\\"svg\\\");\\n      if (logoSvg) {\\n        // Kill the timeline and reset the SVG\\n        if (_this.spinTimeline) {\\n          _this.spinTimeline.kill();\\n          gsap__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"].set(logoSvg, {\\n            rotation: 0\\n          });\\n        }\\n      }\\n    });\\n    _defineProperty(this, \\\"reRenderHeader\\\", function ($header, newSectionText) {\\n      // Get the text of the new section and render it to a div thats not in the DOM\\n      var $newSection = document.createElement(\\\"div\\\");\\n      $newSection.innerHTML = newSectionText;\\n      var $newHeader = $newSection.querySelector(\\\"header.header\\\");\\n\\n      // Set the desktop cart link to the new sections desktop cart link\\n      var $currentDesktopCartLink = $header.querySelector(\\\".navbar__desktop .desktop-cart-link\\\");\\n      var $newDesktopCartLink = $newHeader.querySelector(\\\".navbar__desktop .desktop-cart-link\\\");\\n      $currentDesktopCartLink.innerHTML = $newDesktopCartLink.innerHTML;\\n\\n      // Set the mobile cart link to the new sections mobile cart link\\n      var $currentMobileCartLink = $header.querySelector(\\\".navbar__mobile .desktop-cart-link\\\");\\n      var $newMobileCartLink = $newHeader.querySelector(\\\".navbar__mobile .desktop-cart-link\\\");\\n      if ($currentMobileCartLink && $newMobileCartLink) {\\n        $currentMobileCartLink.innerHTML = $newMobileCartLink.innerHTML;\\n      }\\n\\n      // Set the Mobile Menu cart link to the new sections mobile menu cart link\\n      var $currentMobileMenuCartLink = $header.querySelector(\\\".menu__mobile .menu__cart\\\");\\n      var $newMobileMenuCartLink = $newHeader.querySelector(\\\".menu__mobile .menu__cart\\\");\\n      if ($currentMobileMenuCartLink) {\\n        $currentMobileMenuCartLink.innerHTML = $newMobileMenuCartLink.innerHTML;\\n      }\\n\\n      // Set the navbar cart popout to the new sections navbar cart popout\\n      var $currentNavbarCart = $header.querySelector(\\\".nav__bar-cart\\\");\\n      var $newNavbarCart = $newHeader.querySelector(\\\".nav__bar-cart\\\");\\n      if ($currentNavbarCart) {\\n        $currentNavbarCart.innerHTML = $newNavbarCart.innerHTML;\\n      }\\n    });\\n    _defineProperty(this, \\\"addLineItemEventListeners\\\", function ($lineItem, type) {\\n      var key = $lineItem.dataset.key;\\n      var productId = $lineItem.dataset.productId;\\n      var variantId = $lineItem.dataset.variantId;\\n      var sellingPlanId = $lineItem.dataset.sellingPlanId;\\n      var quantity = $lineItem.dataset.quantity;\\n      var $lineItemQuantitys = $lineItem.querySelectorAll(\\\".product-quantity-selector\\\");\\n\\n      // Loop through the line items quantity controlls and add the event listeners\\n      if ($lineItemQuantitys.length > 0) {\\n        $lineItemQuantitys.forEach(function ($lineItemQuantity) {\\n          var $lineItemQuantityDecrease = $lineItemQuantity.querySelector(\\\".product-quantity__decrease\\\");\\n          var $lineItemQuantityValue = $lineItemQuantity.querySelector(\\\".product-quantity\\\");\\n          var $lineItemQuantityIncrease = $lineItemQuantity.querySelector(\\\".product-quantity__increase\\\");\\n\\n          // Add the decrease evetn listeners\\n          $lineItemQuantityDecrease.addEventListener(\\\"click\\\", /*#__PURE__*/function () {\\n            var _ref10 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(event) {\\n              var quantity, newQty, decreaseResponse;\\n              return _regeneratorRuntime().wrap(function _callee8$(_context8) {\\n                while (1) switch (_context8.prev = _context8.next) {\\n                  case 0:\\n                    event.preventDefault();\\n                    quantity = parseInt($lineItemQuantityValue.textContent);\\n                    newQty = parseInt(quantity) - 1; //Pause Line Item Quantity to prevent multiple clicks\\n                    _this.pauseQtyBtn($lineItemQuantityDecrease, $lineItemQuantityValue, $lineItemQuantityIncrease);\\n                    if (!(quantity > 0)) {\\n                      _context8.next = 9;\\n                      break;\\n                    }\\n                    _context8.next = 7;\\n                    return _this.updateLineItemQuantity(key, newQty);\\n                  case 7:\\n                    decreaseResponse = _context8.sent;\\n                    _this.reRenderSections(decreaseResponse.sections);\\n                  case 9:\\n                  case \\\"end\\\":\\n                    return _context8.stop();\\n                }\\n              }, _callee8);\\n            }));\\n            return function (_x17) {\\n              return _ref10.apply(this, arguments);\\n            };\\n          }());\\n\\n          //add the increase event listeners\\n          $lineItemQuantityIncrease.addEventListener(\\\"click\\\", /*#__PURE__*/function () {\\n            var _ref11 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9(event) {\\n              var newQty, increaseResponse;\\n              return _regeneratorRuntime().wrap(function _callee9$(_context9) {\\n                while (1) switch (_context9.prev = _context9.next) {\\n                  case 0:\\n                    event.preventDefault();\\n\\n                    //Pause Line Item Quantity to prevent multiple clicks\\n                    newQty = parseInt($lineItemQuantityValue.textContent) + 1;\\n                    _this.pauseQtyBtn($lineItemQuantityDecrease, $lineItemQuantityValue, $lineItemQuantityIncrease);\\n                    _context9.next = 5;\\n                    return _this.updateLineItemQuantity(key, newQty);\\n                  case 5:\\n                    increaseResponse = _context9.sent;\\n                    _this.reRenderSections(increaseResponse.sections);\\n                  case 7:\\n                  case \\\"end\\\":\\n                    return _context9.stop();\\n                }\\n              }, _callee9);\\n            }));\\n            return function (_x18) {\\n              return _ref11.apply(this, arguments);\\n            };\\n          }());\\n        });\\n      }\\n\\n      // Loop through the line items remove buttons and add the event listeners\\n      var $lineItemRemove = $lineItem.querySelectorAll(\\\".cart__line-item-remove\\\");\\n      $lineItemRemove.forEach(function ($element) {\\n        $element.addEventListener(\\\"click\\\", /*#__PURE__*/function () {\\n          var _ref12 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10(event) {\\n            var removeResponse;\\n            return _regeneratorRuntime().wrap(function _callee10$(_context10) {\\n              while (1) switch (_context10.prev = _context10.next) {\\n                case 0:\\n                  event.preventDefault();\\n                  _context10.next = 3;\\n                  return _this.removeLineItemFromCart(key);\\n                case 3:\\n                  removeResponse = _context10.sent;\\n                  _this.reRenderSections(removeResponse.sections);\\n                case 5:\\n                case \\\"end\\\":\\n                  return _context10.stop();\\n              }\\n            }, _callee10);\\n          }));\\n          return function (_x19) {\\n            return _ref12.apply(this, arguments);\\n          };\\n        }());\\n      });\\n\\n      /*\\r\\n        // Add the onetime and subscription button event listeners\\r\\n      const $lineItemPurchaseTypes = $lineItem.querySelector(\\r\\n        \\\".line-item__purchase-types\\\"\\r\\n      );\\r\\n      if ($lineItemPurchaseTypes) {\\r\\n        const $onetimeButton = $lineItemPurchaseTypes.querySelector(\\r\\n          \\\".purchase-type__button.purchase-type__button--onetime\\\"\\r\\n        );\\r\\n        if (!$onetimeButton.classList.contains(\\\"purchase-type__button--active\\\")) {\\r\\n          $onetimeButton.addEventListener(\\\"click\\\", (event) => {\\r\\n            event.preventDefault();\\r\\n            this.removeSubscription(key, variantId, quantity);\\r\\n          });\\r\\n        }\\r\\n          const $subscriptionButton = $lineItemPurchaseTypes.querySelector(\\r\\n          \\\".purchase-type__button.purchase-type__button--subscription\\\"\\r\\n        );\\r\\n          if (\\r\\n          !$subscriptionButton.classList.contains(\\\"purchase-type__button--active\\\")\\r\\n        ) {\\r\\n          $subscriptionButton.addEventListener(\\\"click\\\", (event) => {\\r\\n            event.preventDefault();\\r\\n            this.addSubscription(key, variantId, quantity, sellingPlanId);\\r\\n          });\\r\\n        }\\r\\n      }\\r\\n        // Add the subscription plan select event listeners\\r\\n      const $subscriptionSelect = $lineItem.querySelector(\\r\\n        \\\".line-item__subscription-select\\\"\\r\\n      );\\r\\n      if ($subscriptionSelect) {\\r\\n        $subscriptionSelect.addEventListener(\\\"change\\\", (event) => {\\r\\n          event.preventDefault();\\r\\n          this.addSubscription(key, variantId, quantity, event.target.value);\\r\\n        });\\r\\n      }\\r\\n      */\\n    });\\n    _defineProperty(this, \\\"setUpCartTemplate\\\", function ($cartTemplate) {\\n      /* \\r\\n        Find the line items in the cart template and if they exist loop through and\\r\\n        add the events listners\\r\\n      */\\n\\n      var $lineItemsContainer = $cartTemplate.querySelector(\\\".cart-template__line-items\\\");\\n      if ($lineItemsContainer) {\\n        var $lineItems = $lineItemsContainer.querySelectorAll(\\\".cart-template__line-item\\\");\\n        var $bundleLineItems = $lineItemsContainer.querySelectorAll(\\\".cart_bundle-item\\\");\\n        var $addOnLineItems = $lineItemsContainer.querySelectorAll(\\\".cart-template__addon-item\\\");\\n        var $uiBlocker = $cartTemplate.querySelector(\\\".cart-template__ui-blocker\\\");\\n\\n        //Required for Bundle Line Items\\n        var activeSellingPlanId = $lineItemsContainer.querySelector(\\\".cart-template__line-bundle-info\\\").dataset.inUseSellingPlanId;\\n        var activeSellingPlanName = $lineItemsContainer.querySelector(\\\".cart-template__line-bundle-info\\\").dataset.inUseSellingPlanName;\\n\\n        /*\\r\\n          Before we render functionality\\r\\n            Check for the following:\\r\\n          - Do we have a Build a Bundle Product in the cart?\\r\\n          - Do we have any Add On Products in the cart?\\r\\n          If no build a bundle, but there are Add On Products - remove the Add Ons, rebuild the cart.\\r\\n            If there is a Bundle Type Product - Either a Build a Bundle OR a Pre Built Bundle of Frozen Bits, render the Delivery options\\r\\n          If there is a Build a Bundle that has a selling plan  or the Pre Built Bundles that have a Selling plan set get added to cart - Render the Subscription Frequency. These are set to always be sold as a subscription item\\r\\n        */\\n\\n        var isBuildABundle = false;\\n        var isAddOns = false;\\n        if ($bundleLineItems.length > 0) {\\n          isBuildABundle = true;\\n        }\\n        if ($addOnLineItems.length > 0) {\\n          if (!isBuildABundle) {\\n            //No Build a Bundle, remove any add on products from the order\\n            _this.removeAddOnProducts($addOnLineItems, $uiBlocker);\\n          }\\n        }\\n\\n        /*\\r\\n          Handle Subscription Data Mismatches \\r\\n            - Pre Built Bundles use a different selling plan to the build a box\\r\\n          - So we need to ensure they're all on the same plan by comparing the Name of the selling plan\\r\\n          - The \\\"active\\\" selling plan is linked in the $lineItemsContainer\\r\\n          - So - on load, ensure every product that is a subscription product is using the \\\"correct\\\" selling plan\\r\\n          - If we find there's a miss-match, update all that are incorrect\\r\\n        */\\n\\n        var allSellingPlansSynced = true;\\n        if ($bundleLineItems.length > 0) {\\n          $bundleLineItems.forEach(function ($bundleLineItem) {\\n            if ($bundleLineItem.dataset.sellingPlanName) {\\n              if ($bundleLineItem.dataset.sellingPlanName != activeSellingPlanName) {\\n                allSellingPlansSynced = false;\\n              }\\n            }\\n          });\\n        }\\n        if (allSellingPlansSynced) {\\n          if ($lineItems.length > 0) {\\n            $lineItems.forEach(function ($lineItem) {\\n              if ($lineItem.dataset.sellingPlanName) {\\n                if ($lineItem.dataset.sellingPlanName != activeSellingPlanName) {\\n                  allSellingPlansSynced = false;\\n                }\\n              }\\n            });\\n          }\\n        }\\n        if (!allSellingPlansSynced) {\\n          //Time to update them all so they're all correct\\n          _this.synchroniseSellingPlansAcrossLineItems(activeSellingPlanId, activeSellingPlanName, $bundleLineItems, $lineItems, $uiBlocker);\\n        }\\n        $lineItems.forEach(function ($lineItem) {\\n          _this.addLineItemEventListeners($lineItem, \\\"template\\\");\\n        });\\n\\n        //Bundle Line Item Functionality\\n        if ($bundleLineItems.length > 0) {\\n          $bundleLineItems.forEach(function ($bundleLineItem) {\\n            //Set Variables\\n            var $bundleProducts = $bundleLineItem.querySelectorAll(\\\".cart__bundle-line-item\\\");\\n            var $deleteBundleButton = $bundleLineItem.querySelector(\\\".cart__bundle-item-remove\\\");\\n            var $edit = $bundleLineItem.querySelector(\\\".cart-template__edit-bundle-link\\\");\\n            var $upgradeToSubscriptions = $bundleLineItem.querySelectorAll(\\\".cart-otp-subscribe-button\\\");\\n\\n            //Delete Bundle Functionality\\n            if ($deleteBundleButton) {\\n              $deleteBundleButton.addEventListener(\\\"click\\\", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee11() {\\n                var result;\\n                return _regeneratorRuntime().wrap(function _callee11$(_context11) {\\n                  while (1) switch (_context11.prev = _context11.next) {\\n                    case 0:\\n                      //Render the UI Blocker\\n                      if ($uiBlocker) {\\n                        _this.showUIBlocker($uiBlocker);\\n                      }\\n\\n                      //Delete the bundle\\n                      _context11.next = 3;\\n                      return _this.deleteBundle($bundleProducts);\\n                    case 3:\\n                      result = _context11.sent;\\n                      if (result.ok) {\\n                        //Get sections and re-render\\n                        _this.fetchAndRerenderSections($uiBlocker);\\n                      } else {\\n                        console.log(result.json());\\n                        alert(\\\"Encountered an issue when deleting a bundle from the cart.\\\");\\n                        location.reload();\\n                      }\\n                    case 5:\\n                    case \\\"end\\\":\\n                      return _context11.stop();\\n                  }\\n                }, _callee11);\\n              })));\\n            }\\n\\n            //Edit Bundle Functionality\\n            if ($edit) {\\n              $edit.addEventListener(\\\"click\\\", /*#__PURE__*/function () {\\n                var _ref14 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee12(e) {\\n                  var existingBundle, storageBundle, bundleId, bundle;\\n                  return _regeneratorRuntime().wrap(function _callee12$(_context12) {\\n                    while (1) switch (_context12.prev = _context12.next) {\\n                      case 0:\\n                        e.preventDefault();\\n\\n                        //Before we set up the bundle for editing, is there a half way completed one? \\n                        existingBundle = localStorage.getItem('bundle');\\n                        if (existingBundle) {\\n                          //Only store this as a backup if it's NOT an Edit bundle\\n                          storageBundle = JSON.parse(existingBundle);\\n                          if (!storageBundle.editing_bundle) {\\n                            //Save as a backup for later - this is, and always should be, an unfinished one\\n                            localStorage.setItem('stored_bundle', existingBundle);\\n                          }\\n                        }\\n\\n                        // create bundle object\\n                        bundleId = $bundleLineItem.dataset.bundleId;\\n                        bundle = _this.setupBundleObject(bundleId, $bundleProducts); // Store the bundle in localStorage\\n                        localStorage.setItem(\\\"bundle\\\", JSON.stringify(bundle));\\n\\n                        //Navigate to the Edit version of the bundle builder\\n                        window.location.href = e.target.href;\\n                      case 7:\\n                      case \\\"end\\\":\\n                        return _context12.stop();\\n                    }\\n                  }, _callee12);\\n                }));\\n                return function (_x20) {\\n                  return _ref14.apply(this, arguments);\\n                };\\n              }());\\n            }\\n\\n            //\\\"Upgrade\\\" To Subscription - Delete the Bundle and start again but with a selling plan attached\\n            if ($upgradeToSubscriptions.length > 0) {\\n              $upgradeToSubscriptions.forEach(function ($upgradeToSubscription) {\\n                if (activeSellingPlanId) {\\n                  //Build the Bundle Structure, delete it from the cart and then re-add it\\n                  $upgradeToSubscription.addEventListener(\\\"click\\\", /*#__PURE__*/function () {\\n                    var _ref15 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee13(e) {\\n                      var bundleId, bundle, result, addResp;\\n                      return _regeneratorRuntime().wrap(function _callee13$(_context13) {\\n                        while (1) switch (_context13.prev = _context13.next) {\\n                          case 0:\\n                            //Show the UI Blocker as this is a lengthy process\\n                            if ($uiBlocker) {\\n                              _this.showUIBlocker($uiBlocker);\\n                            }\\n\\n                            //Part One - Build the Bundle Contents\\n                            bundleId = $bundleLineItem.dataset.bundleId;\\n                            bundle = _this.setupBundleObject(bundleId, $bundleProducts); //Part Two - Delete The Bundle\\n                            _context13.next = 5;\\n                            return _this.deleteBundle($bundleProducts);\\n                          case 5:\\n                            result = _context13.sent;\\n                            if (!result.ok) {\\n                              _context13.next = 13;\\n                              break;\\n                            }\\n                            _context13.next = 9;\\n                            return _this.addNewBundleToCart(bundle, bundleId, $bundleLineItem.dataset.url, activeSellingPlanId);\\n                          case 9:\\n                            addResp = _context13.sent;\\n                            if (addResp.sections) {\\n                              _this.reRenderSections(addResp.sections);\\n\\n                              //Remove the loading animation\\n                              if ($uiBlocker) {\\n                                _this.hideUIBlocker($uiBlocker);\\n                              }\\n                            }\\n                            _context13.next = 16;\\n                            break;\\n                          case 13:\\n                            console.log(result.json());\\n                            alert(\\\"Encountered an issue when removing the One Time Purchase Bundle from cart.\\\");\\n                            location.reload();\\n                          case 16:\\n                          case \\\"end\\\":\\n                            return _context13.stop();\\n                        }\\n                      }, _callee13);\\n                    }));\\n                    return function (_x21) {\\n                      return _ref15.apply(this, arguments);\\n                    };\\n                  }());\\n                }\\n              });\\n            }\\n          });\\n        }\\n\\n        //Add On Functionality\\n        if ($addOnLineItems.length > 0) {\\n          $addOnLineItems.forEach(function ($addOnLineItem) {\\n            //Set variables\\n            var addonKey = $addOnLineItem.dataset.key;\\n            var addOnQuantity = $addOnLineItem.dataset.quantity;\\n            var addOnvariantId = $addOnLineItem.dataset.variantId;\\n\\n            //find Plus and Minus buttons\\n            var $productControls = $addOnLineItem.querySelector(\\\".product-controls\\\");\\n            if ($productControls) {\\n              var $addonDecrease = $productControls.querySelector(\\\".product-quantity__decrease\\\");\\n              var $addonIncrease = $productControls.querySelector(\\\".product-quantity__increase\\\");\\n              var $productQty = $productControls.querySelector(\\\".product-quantity-container .product-quantity\\\");\\n              if ($addonDecrease) {\\n                $addonDecrease.addEventListener(\\\"click\\\", /*#__PURE__*/function () {\\n                  var _ref16 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee14(event) {\\n                    var decreaseResponse;\\n                    return _regeneratorRuntime().wrap(function _callee14$(_context14) {\\n                      while (1) switch (_context14.prev = _context14.next) {\\n                        case 0:\\n                          event.preventDefault();\\n                          _this.pauseAddonQtyBtn($productControls, $addonDecrease, $productQty, $addonIncrease);\\n                          if (!(addOnQuantity > 0)) {\\n                            _context14.next = 7;\\n                            break;\\n                          }\\n                          _context14.next = 5;\\n                          return _this.updateLineItemQuantity(addonKey, parseInt(addOnQuantity) - 1);\\n                        case 5:\\n                          decreaseResponse = _context14.sent;\\n                          _this.reRenderSections(decreaseResponse.sections);\\n                        case 7:\\n                        case \\\"end\\\":\\n                          return _context14.stop();\\n                      }\\n                    }, _callee14);\\n                  }));\\n                  return function (_x22) {\\n                    return _ref16.apply(this, arguments);\\n                  };\\n                }());\\n              }\\n              if ($addonIncrease) {\\n                $addonIncrease.addEventListener(\\\"click\\\", /*#__PURE__*/function () {\\n                  var _ref17 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee15(event) {\\n                    var increaseResponse;\\n                    return _regeneratorRuntime().wrap(function _callee15$(_context15) {\\n                      while (1) switch (_context15.prev = _context15.next) {\\n                        case 0:\\n                          event.preventDefault();\\n                          _this.pauseAddonQtyBtn($productControls, $addonDecrease, $productQty, $addonIncrease);\\n\\n                          //If this is already in cart, simply increase it. Otherwise, we need to add it\\n                          if (!(addOnQuantity > 0 && addonKey)) {\\n                            _context15.next = 9;\\n                            break;\\n                          }\\n                          _context15.next = 5;\\n                          return _this.updateLineItemQuantity(addonKey, parseInt(addOnQuantity) + 1);\\n                        case 5:\\n                          increaseResponse = _context15.sent;\\n                          _this.reRenderSections(increaseResponse.sections);\\n                          _context15.next = 10;\\n                          break;\\n                        case 9:\\n                          //Add a New item to cart\\n                          _this.addItemToCart(addOnvariantId, 1);\\n                        case 10:\\n                        case \\\"end\\\":\\n                          return _context15.stop();\\n                      }\\n                    }, _callee15);\\n                  }));\\n                  return function (_x23) {\\n                    return _ref17.apply(this, arguments);\\n                  };\\n                }());\\n              }\\n            } else {\\n              console.log(\\\"Could not find Addon Product Controls\\\");\\n              console.log($addOnLineItem);\\n            }\\n          });\\n        }\\n\\n        /*\\r\\n          const $clearCarts = $cartTemplate.querySelectorAll(\\r\\n            \\\".cart-template__clear\\\"\\r\\n          );\\r\\n          $clearCarts.forEach(($clearCart) => {\\r\\n            $clearCart.addEventListener(\\\"click\\\", (event) => {\\r\\n              event.preventDefault();\\r\\n              this.clearCart();\\r\\n            });\\r\\n          });\\r\\n        */\\n\\n        // Selling Plan Picker - On change, loop through and update all of the items in the cart - may not be present if no selling plan products available\\n        var $sellingPlanSelectionContainer = $cartTemplate.querySelector(\\\".subscription-frequency-selection\\\");\\n        if ($sellingPlanSelectionContainer) {\\n          //Find and bind the select list - this will change in the future\\n          var $sellingPlanSelectionContainerSelect = $sellingPlanSelectionContainer.querySelector(\\\"select\\\");\\n          if ($sellingPlanSelectionContainerSelect) {\\n            $sellingPlanSelectionContainerSelect.addEventListener(\\\"change\\\", function (e) {\\n              e.preventDefault();\\n              if (e.target.value == \\\"unsubscribe\\\") {\\n                /*\\r\\n                  Unsubscribe Logic:\\r\\n                    Show UI Blocker\\r\\n                  Loop through\u00A0every\u00A0cart item\\r\\n                  If it\u2019s a build-a-bundle, delete and fully re-add it\\r\\n                  Update all non-bundle products\\r\\n                  Detect subscription-only products and remove them\\r\\n                  Dynamically hide \u201Cunsubscribe\u201D if any subscription-only product exists \u2014 while still running the logic above\\r\\n                  */\\n                _this.removeSellingPlansFromAllApplicableProducts($bundleLineItems, $lineItems, $uiBlocker);\\n              } else {\\n                var chosenPlanId = e.target.value;\\n                var chosenPlanName = e.target.options[e.target.selectedIndex].text;\\n\\n                //Pass the ID and Name into the sync function to update all products with selling plans\\n                _this.synchroniseSellingPlansAcrossLineItems(chosenPlanId, chosenPlanName.toLowerCase(), $bundleLineItems, $lineItems, $uiBlocker);\\n              }\\n            });\\n          }\\n        }\\n\\n        /*\\r\\n          Handle Delivery Date Functionality\\r\\n            - Does the order require a delivery date?\\r\\n            - If not: Enable the checkout button\\r\\n            - If so: Set up an interval to check against the Binaery global: window.__BINAERY_DELIVERY_DATE__\\r\\n            \\r\\n        */\\n\\n        var $cartCheckoutBtn = $cartTemplate.querySelector(\\\".cart-template__checkout-btn\\\");\\n        var $calenderCheckoutBtn = $cartTemplate.querySelector(\\\".cart-template__calendar-trigger\\\");\\n        var $cartDeliveryContainer = $cartTemplate.querySelector(\\\".cart-template__summary-delivery\\\");\\n\\n        //Checkout button only present on a cart with items in it\\n        if ($cartCheckoutBtn) {\\n          if ($cartDeliveryContainer) {\\n            //Is Delivery Preference Hidden? If it is - enable the Checkout button\\n            if ($cartDeliveryContainer.classList.contains(\\\"hidden\\\")) {\\n              _this.enableCartCheckoutBtn($cartCheckoutBtn, $calenderCheckoutBtn);\\n            } else {\\n              var $deliveryInputText = $cartDeliveryContainer.querySelector(\\\".cart-template__summary-delivery-input p\\\");\\n\\n              //Set up the setInterval to track the widget setting the global\\n              if (!_this.deliveryDateMonitorRunning) {\\n                //Work around Binaery Calendar limitations, they can only have one button bound... so lets call that when this is clicked\\n                $calenderCheckoutBtn.addEventListener(\\\"click\\\", function (e) {\\n                  e.preventDefault();\\n\\n                  //Trigger the binaery calendar widget\\n                  $deliveryInputText.parentElement.click();\\n                });\\n                _this.deliveryDateMonitorRunning = true;\\n                var lastValue = false;\\n\\n                //We don't have access to Binaery's source code, but they expose this global value. Track it and enable the checkout button on change\\n                setInterval(function () {\\n                  var currentValue = window.__BINAERY_DELIVERY_DATE__ || '';\\n                  if (currentValue !== lastValue) {\\n                    //Update so we can keep tracking - we need to update the text value in the input field\\n                    lastValue = currentValue;\\n                    if (currentValue) {\\n                      //Update the value in the Input field\\n                      if ($deliveryInputText) {\\n                        //Format the Date - why doesn't Javascript have a \\\"1st\\\", \\\"2nd\\\", \\\"3rd\\\" solution? PHP better?!\\n                        var dateText = currentValue;\\n                        var date = \\\"\\\";\\n\\n                        //Cater for the date being provided in different formats\\n                        if (dateText.includes('.')) {\\n                          var parts = dateText.split('.');\\n                          date = new Date(\\\"\\\".concat(parts[2], \\\"-\\\").concat(parts[1], \\\"-\\\").concat(parts[0], \\\"T12:00:00\\\"));\\n                        } else if (dateText.includes('-')) {\\n                          date = new Date(dateText + 'T12:00:00');\\n                        } else {\\n                          console.error('Unknown date format:', dateText);\\n                        }\\n                        var dayName = date.toLocaleDateString('en-GB', {\\n                          weekday: 'long'\\n                        });\\n                        var day = date.getDate();\\n                        var monthName = date.toLocaleDateString('en-GB', {\\n                          month: 'long'\\n                        });\\n                        var suffix = \\\"\\\";\\n                        if (day > 3 && day < 21) {\\n                          suffix = 'th';\\n                        } else {\\n                          switch (day % 10) {\\n                            case 1:\\n                              suffix = 'st';\\n                              break;\\n                            case 2:\\n                              suffix = 'nd';\\n                              break;\\n                            case 3:\\n                              suffix = 'rd';\\n                              break;\\n                            default:\\n                              suffix = 'th';\\n                              break;\\n                          }\\n                        }\\n                        if (day && suffix && monthName && dayName) {\\n                          dateText = \\\"\\\".concat(dayName, \\\" \\\").concat(day).concat(suffix, \\\" \\\").concat(monthName);\\n                        }\\n                        $deliveryInputText.textContent = dateText;\\n\\n                        //Do we have any messages to animate? \\n                        var $yellowMessages = $cartTemplate.querySelectorAll(\\\".yellow-section\\\"); //yellow-desktop\\n                        if (window.innerWidth > 1023) {\\n                          //Animate the Desktop one - ensure it only fires ONCE                    \\n                          $yellowMessages.forEach(function ($yellowMessageContainer) {\\n                            if ($yellowMessageContainer.classList.contains(\\\"yellow-desktop\\\")) {\\n                              if (!$yellowMessageContainer.classList.contains(\\\"animated\\\")) {\\n                                //Animate it and on completion - mark it so that it can't animate again\\n                                var $yellowMessage = $yellowMessageContainer.querySelector(\\\".yellow-message\\\");\\n                                if ($yellowMessage) {\\n                                  gsap__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"].set($yellowMessage, {\\n                                    yPercent: 100,\\n                                    opacity: 1\\n                                  });\\n                                  gsap__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"].to($yellowMessage, {\\n                                    yPercent: 0,\\n                                    duration: 0.6,\\n                                    ease: \\\"expo.out\\\",\\n                                    onComplete: function onComplete() {\\n                                      $yellowMessageContainer.classList.add(\\\"animated\\\");\\n                                    }\\n                                  });\\n                                }\\n                              }\\n                            }\\n                          });\\n                        } else {\\n                          //Animate the mobile one, ensure it only fires once.\\n                          $yellowMessages.forEach(function ($yellowMessageContainer) {\\n                            if ($yellowMessageContainer.classList.contains(\\\"yellow-mobile\\\")) {\\n                              if (!$yellowMessageContainer.classList.contains(\\\"animated\\\")) {\\n                                var $yellowMessage = $yellowMessageContainer.querySelector(\\\".yellow-message\\\");\\n                                gsap__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"].set($yellowMessage, {\\n                                  yPercent: 100,\\n                                  opacity: 1\\n                                });\\n                                gsap__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"].to($yellowMessage, {\\n                                  yPercent: 0,\\n                                  duration: 0.6,\\n                                  ease: \\\"expo.out\\\",\\n                                  onComplete: function onComplete() {\\n                                    $yellowMessageContainer.classList.add(\\\"animated\\\");\\n                                  }\\n                                });\\n                              }\\n                            }\\n                          });\\n                        }\\n                      }\\n                      _this.enableCartCheckoutBtn($cartCheckoutBtn, $calenderCheckoutBtn);\\n                    }\\n                  }\\n                }, 300);\\n              }\\n            }\\n          } else {\\n            //no delivery widget around, enable the button\\n            _this.enableCartCheckoutBtn($cartCheckoutBtn, $calenderCheckoutBtn);\\n          }\\n        }\\n      }\\n\\n      //Delivery Information Popup - NOTE: The popup trigger gets replaced but the popup doesn't, action will be taken to prevent rebinding elements that don't need to be rebound\\n      var $deliveryInfoPopup = $cartTemplate.querySelector(\\\".popup-container\\\");\\n      var $deliveryInfoPopupTrigger = $cartTemplate.querySelector(\\\".cart-template__delivery-estimate-container-info-icon\\\");\\n      if ($deliveryInfoPopup && $deliveryInfoPopupTrigger) {\\n        var $deliveryInfoPopupBg = $deliveryInfoPopup.querySelector(\\\".popup-bg\\\");\\n        var $deliveryInfoPopupClose = $deliveryInfoPopup.querySelector(\\\".close-button\\\");\\n\\n        //Bind Opening\\n        $deliveryInfoPopupTrigger.addEventListener(\\\"click\\\", function (e) {\\n          $deliveryInfoPopup.classList.add(\\\"active\\\");\\n        });\\n\\n        //Bind Closing\\n        if ($deliveryInfoPopupBg) {\\n          if (!$deliveryInfoPopupBg.classList.contains(\\\"bound\\\")) {\\n            $deliveryInfoPopupBg.classList.add(\\\"bound\\\");\\n            $deliveryInfoPopupBg.addEventListener(\\\"click\\\", function (e) {\\n              $deliveryInfoPopup.classList.remove(\\\"active\\\");\\n            });\\n          }\\n        }\\n        if ($deliveryInfoPopupClose) {\\n          if (!$deliveryInfoPopupClose.classList.contains(\\\"bound\\\")) {\\n            $deliveryInfoPopupClose.classList.add(\\\"bound\\\");\\n            $deliveryInfoPopupClose.addEventListener(\\\"click\\\", function (e) {\\n              $deliveryInfoPopup.classList.remove(\\\"active\\\");\\n            });\\n          }\\n        }\\n\\n        //Bind the Accordions\\n        var $deliveryAccordions = $deliveryInfoPopup.querySelectorAll(\\\".delivery-accordions .delivery-accordion\\\");\\n        if ($deliveryAccordions.length > 0) {\\n          $deliveryAccordions.forEach(function ($deliveryAccordion) {\\n            var $deliveryAccordionTrigger = $deliveryAccordion.querySelector(\\\".delivery-accordion-trigger\\\");\\n            if ($deliveryAccordionTrigger && !$deliveryAccordionTrigger.classList.contains(\\\"bound\\\")) {\\n              $deliveryAccordionTrigger.classList.add(\\\"bound\\\");\\n              $deliveryAccordionTrigger.addEventListener(\\\"click\\\", function (e) {\\n                $deliveryAccordion.classList.toggle(\\\"active\\\");\\n              });\\n            }\\n          });\\n        }\\n      }\\n\\n      //Empty Cart Functionality\\n      var $emptyCartContainer = $cartTemplate.querySelector(\\\".cart-template__container--empty\\\");\\n      if ($emptyCartContainer) {\\n        //If there's a bundle half way through being built - we need to replace parts of the output\\n\\n        var existingBundle = localStorage.getItem('bundle');\\n        if (existingBundle) {\\n          var bundleData = JSON.parse(existingBundle);\\n          if (Object.entries(bundleData.items).length > 0) {\\n            //Get Contents to Replace \\n            var $bundleItemPlaceholderContainer = $emptyCartContainer.querySelector(\\\".empty-cart-bundle-placeholders\\\");\\n            var $bundleItemTitle = $emptyCartContainer.querySelector(\\\".empty-cart-bundle-title\\\");\\n            var $bundleItemButtonContainer = $emptyCartContainer.querySelector(\\\".empty-cart-button-container\\\");\\n            if ($bundleItemTitle.dataset.completeBundleText) {\\n              $bundleItemTitle.textContent = $bundleItemTitle.dataset.completeBundleText;\\n            }\\n            if ($bundleItemButtonContainer.dataset.abandonedBundleText) {\\n              $bundleItemButtonContainer.querySelector(\\\".button-text\\\").textContent = $bundleItemButtonContainer.dataset.abandonedBundleText;\\n            }\\n            if ($bundleItemPlaceholderContainer) {\\n              var $cloneTemplate = $bundleItemPlaceholderContainer.querySelector(\\\".empty-cart-bundle-placeholders-template\\\");\\n              if ($cloneTemplate) {\\n                var $placeHoldersList = $bundleItemPlaceholderContainer.querySelector(\\\".empty-cart-bundle-placeholders-list\\\");\\n                if ($placeHoldersList) {\\n                  Object.entries(bundleData.items).forEach(function (_ref18, index) {\\n                    var _ref19 = _slicedToArray(_ref18, 2),\\n                      productId = _ref19[0],\\n                      item = _ref19[1];\\n                    if (index < 4) {\\n                      var $clonedImageCont = $cloneTemplate.cloneNode();\\n                      $clonedImageCont.classList.remove(\\\"empty-cart-bundle-placeholders-template\\\", \\\"hidden\\\");\\n                      $clonedImageCont.classList.add(\\\"empty-cart-bundle-img\\\");\\n                      $clonedImageCont.innerHTML = \\\"\\\\n                      <img src=\\\\\\\"\\\".concat(item.image, \\\"\\\\\\\" class=\\\\\\\"w-full h-full object-contain rounded-4px\\\\\\\">\\\\n                      <span class=\\\\\\\"w-6 h-6 desktop:w-7 desktop:h-7 border border-primary-border absolute -top-1.5 -right-1.5 bg-white flex flex-col items-center justify-center rounded-100px text-label-m font-medium flex-shrink-0\\\\\\\" style=\\\\\\\"letter-spacing:0.48px\\\\\\\">\\\").concat(item.quantity, \\\"</span>\\\\n                    \\\");\\n                      $placeHoldersList.prepend($clonedImageCont);\\n\\n                      //Hide an empty one\\n                      var targetPlaceholderFrame = $placeHoldersList.querySelector('.empty-cart-bundle-placeholder[data-position=\\\"' + (index + 1) + '\\\"]');\\n                      if (targetPlaceholderFrame) {\\n                        targetPlaceholderFrame.classList.add(\\\"hidden\\\");\\n                      }\\n                    } else {\\n                      return false;\\n                    }\\n                  });\\n                }\\n              }\\n            }\\n          }\\n        }\\n      }\\n    });\\n    _defineProperty(this, \\\"reRenderCartTemplate\\\", function ($element, newSectionText) {\\n      // Get the text of the new section and render it to a div thats not in the DOM\\n      var $newSection = document.createElement(\\\"div\\\");\\n      $newSection.innerHTML = newSectionText;\\n      var $currentTemplateContainer = $element.querySelector(\\\".cart-template__container\\\");\\n      var $newTemplateContainer = $newSection.querySelector(\\\".cart-template__container\\\");\\n      if ($currentTemplateContainer.classList.contains(\\\"cart-template__container--empty\\\") || $newTemplateContainer.classList.contains(\\\"cart-template__container--empty\\\")) {\\n        //If Old Cart had content and New Cart is now empty - re-render the entire thing\\n        if ($newTemplateContainer.classList.contains(\\\"cart-template__container--empty\\\")) {\\n          // If either the new or old cart is empty repalce the entire cart\\n          $currentTemplateContainer.innerHTML = $newTemplateContainer.innerHTML;\\n        } else {\\n          //If New Cart has content and the old cart is empty, reload the page to work around Binaery Date Picker not rebinding\\n          window.location.reload();\\n        }\\n      } else {\\n        //Cart Had Items and still has items - replace relevant content\\n\\n        //Replace Cart header to update Count and active selling plan info\\n        var $currentCartLineItemsHeader = $currentTemplateContainer.querySelector(\\\".cart-template__line-item-header\\\");\\n        var $newCartLineItemsHeader = $newTemplateContainer.querySelector(\\\".cart-template__line-item-header\\\");\\n        if ($currentCartLineItemsHeader && $newCartLineItemsHeader) {\\n          $currentCartLineItemsHeader.innerHTML = $newCartLineItemsHeader.innerHTML;\\n        }\\n\\n        // Set the current line items to the new line items\\n        var $currentLineItems = $currentTemplateContainer.querySelector(\\\".cart-template__line-items\\\");\\n        var $newLineItems = $newTemplateContainer.querySelector(\\\".cart-template__line-items\\\");\\n        if ($currentLineItems && $newLineItems) {\\n          $currentLineItems.innerHTML = $newLineItems.innerHTML;\\n        }\\n\\n        /*\\r\\n          Update the Cart Summary - with the introduction of the Binaery Date Picker, this is now more complicated.\\r\\n          The Delivery Date widget needs to be shown / hidden but NOT replaced.\\r\\n          The rest of the content in the Order Summary needs to be replaced.\\r\\n        */\\n\\n        var $currentSummary = $currentTemplateContainer.querySelector(\\\".cart-template__summary\\\");\\n        var $newSummary = $newTemplateContainer.querySelector(\\\".cart-template__summary\\\");\\n        if ($currentSummary && $newSummary) {\\n          // Replace the Totals that appear under the checkout buttons\\n          var $oldTotalsContainer = $currentSummary.querySelector(\\\".cart-template__summary-totals-container\\\");\\n          var $newTotalsContainer = $newSummary.querySelector(\\\".cart-template__summary-totals-container\\\");\\n          if ($oldTotalsContainer && $newTotalsContainer) {\\n            $oldTotalsContainer.innerHTML = $newTotalsContainer.innerHTML;\\n          }\\n\\n          //The Selling Plan Select List - replace the content. If not required, the content will be empty\\n          var $oldSellingPlanSelectContainer = $currentSummary.querySelector(\\\".subscription-frequency-selection\\\");\\n          var $newSellingPlanSelectContainer = $newSummary.querySelector(\\\".subscription-frequency-selection\\\");\\n          if ($oldSellingPlanSelectContainer && $newSellingPlanSelectContainer) {\\n            $oldSellingPlanSelectContainer.innerHTML = $newSellingPlanSelectContainer.innerHTML;\\n\\n            //Allow margins to collapse in the design\\n            if ($newSellingPlanSelectContainer.classList.contains(\\\"hidden\\\")) {\\n              $oldSellingPlanSelectContainer.classList.add(\\\"hidden\\\");\\n            } else {\\n              $oldSellingPlanSelectContainer.classList.remove(\\\"hidden\\\");\\n            }\\n          }\\n\\n          //Toggle the Delivery Widget Visibility based on whether the new version has the \\\"hidden\\\" class or not\\n          var $oldSummaryDeliveryContainer = $currentSummary.querySelector(\\\".cart-template__summary-delivery\\\");\\n          var $newSummaryDeliveryContainer = $newSummary.querySelector(\\\".cart-template__summary-delivery\\\");\\n          if ($oldSummaryDeliveryContainer && $newSummaryDeliveryContainer) {\\n            if ($newSummaryDeliveryContainer.classList.contains(\\\"hidden\\\")) {\\n              $oldSummaryDeliveryContainer.classList.add(\\\"hidden\\\");\\n            } else {\\n              $oldSummaryDeliveryContainer.classList.remove(\\\"hidden\\\");\\n            }\\n          }\\n\\n          //Checkout Buttons do not need to be updated as the rerender function handles this\\n        }\\n      }\\n\\n      _this.setUpCartTemplate($element);\\n    });\\n    _defineProperty(this, \\\"freeGift\\\", function ($progress) {\\n      var cart = parseFloat($progress.dataset.cart);\\n      var threshold = parseFloat($progress.dataset.giftThreshold);\\n      var gift = $progress.dataset.gift;\\n      if ($progress.dataset.giftEnabled == 'true') {\\n        if (cart > threshold) {\\n          _this.addItemToCart(gift, 1);\\n          sessionStorage.setItem('showGiftMessage', true);\\n        }\\n      } else {\\n        if (cart < threshold) {\\n          _this.removeLineItemFromCart(gift);\\n        }\\n      }\\n    });\\n    _defineProperty(this, \\\"setUpCartAside\\\", function ($cartAside) {\\n      /* \\r\\n        Find the line items in the cart aside and if they exist loop through and\\r\\n        add the events listners\\r\\n      */\\n      var $lineItemsContainer = $cartAside.querySelector(\\\".cart-aside__line-items\\\");\\n      if ($lineItemsContainer) {\\n        var $lineItems = $lineItemsContainer.querySelectorAll(\\\".cart-aside__line-item\\\");\\n        $lineItems.forEach(function ($lineItem) {\\n          _this.addLineItemEventListeners($lineItem, \\\"aside\\\");\\n        });\\n        var $recomendedItems = $cartAside.querySelectorAll(\\\".cart-aside__upsell-item\\\");\\n        if ($recomendedItems) {\\n          $recomendedItems.forEach(function ($recomendedItem) {\\n            var $recomendedItemAdd = $recomendedItem.querySelector(\\\".upsell-item__add\\\");\\n            $recomendedItemAdd.addEventListener(\\\"click\\\", function (event) {\\n              event.preventDefault();\\n              var productId = $recomendedItem.dataset.productId;\\n              var variantId = $recomendedItem.dataset.variantId;\\n              _this.quickAddItemToCart(variantId);\\n            });\\n          });\\n        }\\n      }\\n      var $cartAsideClear = $cartAside.querySelector(\\\".cart-aside__clear\\\");\\n      if ($cartAsideClear) {\\n        $cartAsideClear.addEventListener(\\\"click\\\", function (event) {\\n          event.stopPropagation();\\n          _this.clearCart();\\n        });\\n      }\\n\\n      //Rebind Cart close event\\n      var $cartAsideClose = $cartAside.querySelector(\\\".cart-aside__close\\\");\\n      $cartAsideClose.addEventListener(\\\"click\\\", function (event) {\\n        event.stopPropagation();\\n        event.preventDefault();\\n        var $body = document.querySelector(\\\"body\\\");\\n        $body.classList.remove(\\\"overflow-y-hidden\\\");\\n        $cartAside.classList.add(\\\"translate-x-full\\\", \\\"ponter-events-none\\\");\\n        var $cartAsideBackground = $body.querySelector('.cart-aside__background');\\n        if ($cartAsideBackground) {\\n          $cartAsideBackground.classList.add(\\\"pointer-events-none\\\");\\n          $cartAsideBackground.classList.remove(\\\"bg-black\\\", \\\"bg-opacity-40\\\");\\n        } else {\\n          console.log(\\\"could not find cart aside background\\\");\\n        }\\n      });\\n\\n      // Check free gift\\n      var $progress = $cartAside.querySelector(\\\".cart-aside__progress\\\");\\n      if ($progress) {\\n        _this.freeGift($progress);\\n      }\\n\\n      // Gift note\\n      var showGiftMessage = sessionStorage.getItem('showGiftMessage');\\n      var $giftMessaging = $cartAside.querySelector(\\\".cart-aside__gift-notification\\\");\\n      if ($giftMessaging && showGiftMessage) {\\n        var $freeGift = $cartAside.querySelector(\\\".cart-aside__line-item.free-gift\\\");\\n        // Only trigger once a free gift is shown in the cart\\n        if ($freeGift) {\\n          // Remove the 'hidden' class and fade the opacity from 0 to 1\\n          gsap__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"].to($giftMessaging, {\\n            opacity: 1,\\n            duration: 1,\\n            // Time to fade in\\n            onStart: function onStart() {\\n              return $giftMessaging.classList.remove('hidden');\\n            },\\n            // Remove 'hidden' class at the start\\n            onComplete: function onComplete() {\\n              // After fading in, wait for a few seconds, then fade back to 0 and add 'hidden' class\\n              setTimeout(function () {\\n                gsap__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"].to($giftMessaging, {\\n                  opacity: 0,\\n                  duration: 1,\\n                  // Time to fade out\\n                  onComplete: function onComplete() {\\n                    return $giftMessaging.classList.add('hidden');\\n                  } // Re-add 'hidden' class after fade-out\\n                });\\n              }, 2000); // 2 seconds delay before fading out\\n            }\\n          });\\n\\n          sessionStorage.setItem('showGiftMessage', false);\\n        }\\n      }\\n\\n      // Upsell\\n      var $upsellSwiper = $cartAside.querySelector(\\\".cart-aside__upsell-swiper\\\");\\n      if ($upsellSwiper) {\\n        var upsell = new swiper__WEBPACK_IMPORTED_MODULE_0__.Swiper($upsellSwiper, {\\n          spaceBetween: 64,\\n          slidesPerView: 1,\\n          navigation: {\\n            nextEl: \\\".cart-aside__upsell-swiper-next\\\",\\n            prevEl: \\\".cart-aside__upsell-swiper-prev\\\"\\n          }\\n        });\\n      }\\n\\n      // Build a bundle messaging\\n      var $buildABundlePrompt = $cartAside.querySelector(\\\".cart-aside__build-a-bundle-prompt\\\");\\n      if ($buildABundlePrompt) {\\n        var $buildABundleCTA = $cartAside.querySelector(\\\".cart-aside__build-a-bundle_cta\\\");\\n        $buildABundleCTA.addEventListener(\\\"click\\\", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee16() {\\n          var $items, bundle, updateData;\\n          return _regeneratorRuntime().wrap(function _callee16$(_context16) {\\n            while (1) switch (_context16.prev = _context16.next) {\\n              case 0:\\n                $items = $cartAside.querySelectorAll(\\\".cart-aside__line-item\\\"); // Create bundle object\\n                bundle = {\\n                  bundleId: \\\"bundle_\\\" + Date.now(),\\n                  items: {}\\n                }; // create object to track products for removal\\n                updateData = {\\n                  updates: {}\\n                };\\n                $items.forEach(function ($item) {\\n                  // Get product data\\n                  var productId = $item.dataset.id;\\n                  var productTitle = $item.dataset.title;\\n                  var productPrice = parseFloat($item.dataset.price);\\n                  var productPriceString = $item.dataset.priceString;\\n                  var compareProductPrice = parseFloat($item.dataset.comparePrice);\\n                  var compareProductPriceString = $item.dataset.comparePriceString;\\n                  var productImage = $item.dataset.image;\\n                  var quantity = parseInt($item.dataset.quantity);\\n\\n                  // Add product to bundle\\n                  bundle.items[productId] = {\\n                    title: productTitle,\\n                    price: productPrice,\\n                    priceString: productPriceString,\\n                    comparePrice: compareProductPrice,\\n                    comparePriceString: compareProductPriceString,\\n                    image: productImage,\\n                    quantity: quantity\\n                  };\\n\\n                  // Add product to removal request\\n                  updateData.updates[productId] = 0;\\n                });\\n\\n                // Save the updated bundle to localStorage\\n                localStorage.setItem(\\\"bundle\\\", JSON.stringify(bundle));\\n\\n                // Remove current bundle from cart to avoid duplicates\\n                _context16.next = 7;\\n                return fetch('/cart/update.js', {\\n                  method: 'POST',\\n                  headers: {\\n                    'Content-Type': 'application/json'\\n                  },\\n                  body: JSON.stringify(updateData)\\n                });\\n              case 7:\\n                window.location.href = $buildABundlePrompt.dataset.bundle;\\n              case 8:\\n              case \\\"end\\\":\\n                return _context16.stop();\\n            }\\n          }, _callee16);\\n        })));\\n      }\\n\\n      // Bundle line items\\n      var $bundleLineItems = $cartAside.querySelectorAll(\\\".cart-aside__bundle-item\\\");\\n      if ($bundleLineItems) {\\n        $bundleLineItems.forEach(function ($bundle) {\\n          var $bundleInfo = $bundle.querySelector(\\\".cart-aside__bundle-item-info\\\");\\n          var $trigger = $bundleInfo.querySelector('.view-bundle-trigger');\\n          var $edit = $bundle.querySelector(\\\".cart-aside__bundle-item-edit\\\");\\n          var $remove = $bundle.querySelector(\\\".cart-aside__bundle-item-remove\\\");\\n          var $bundleProducts = $bundle.querySelectorAll(\\\".cart-aside__bundle-line-item\\\");\\n\\n          // toggle content\\n          if ($trigger) {\\n            $trigger.addEventListener(\\\"click\\\", function () {\\n              $bundleInfo.classList.toggle('active');\\n            });\\n          }\\n\\n          // edit bundle\\n          if ($edit) {\\n            $edit.addEventListener(\\\"click\\\", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee17() {\\n              var existingBundle, storageBundle, bundleId, bundle;\\n              return _regeneratorRuntime().wrap(function _callee17$(_context17) {\\n                while (1) switch (_context17.prev = _context17.next) {\\n                  case 0:\\n                    //Before we set up the bundle for editing, is there a half way completed one? \\n                    existingBundle = localStorage.getItem('bundle'); //if (JSON.parse(localStorage.getItem('bundle'))){\\n                    if (existingBundle) {\\n                      //Only store this as a backup if it's not an Edit bundle\\n                      storageBundle = JSON.parse(existingBundle);\\n                      if (!storageBundle.editing_bundle) {\\n                        //Save as a backup for later - this is an unfinished one\\n                        localStorage.setItem('stored_bundle', existingBundle);\\n                      }\\n                    }\\n\\n                    // create bundle object\\n                    bundleId = $bundle.dataset.bundleId;\\n                    bundle = {\\n                      bundleId: bundleId,\\n                      editing_bundle: true,\\n                      items: {}\\n                    };\\n                    $bundleProducts.forEach(function (item) {\\n                      var productId = item.dataset.id;\\n                      var productTitle = item.dataset.title;\\n                      var productPrice = parseFloat(item.dataset.price);\\n                      var productPriceString = item.dataset.priceString;\\n                      var compareProductPrice = parseFloat(item.dataset.comparePrice);\\n                      var compareProductPriceString = item.dataset.comparePriceString;\\n                      var productImage = item.dataset.image;\\n                      var quantity = parseInt(item.dataset.quantity);\\n                      bundle.items[productId] = {\\n                        title: productTitle,\\n                        price: productPrice,\\n                        priceString: productPriceString,\\n                        comparePrice: compareProductPrice,\\n                        comparePriceString: compareProductPriceString,\\n                        image: productImage,\\n                        quantity: quantity\\n                      };\\n                    });\\n\\n                    // Store the bundle in localStorage\\n                    localStorage.setItem(\\\"bundle\\\", JSON.stringify(bundle));\\n\\n                    //Navigate to the Edit version of the bundle builder\\n                    window.location.href = $bundle.dataset.dynamicBundleUrl + \\\"?edit=\\\" + encodeURIComponent(bundleId);\\n\\n                    /*\\r\\n                    // Remove current bundle from cart to avoid duplicates            \\r\\n                    await fetch('/cart/update.js', {\\r\\n                        method: 'POST',\\r\\n                        headers: {\\r\\n                            'Content-Type': 'application/json'\\r\\n                        },\\r\\n                        body: JSON.stringify(updateData)\\r\\n                    });\\r\\n                    \\r\\n                    // Redirect user to the bundle page for editing\\r\\n                    if ($bundle.dataset.type == 'Classic Box'){\\r\\n                      window.location.href = $bundle.dataset.staticBundleUrl;\\r\\n                    } else {\\r\\n                      window.location.href = $bundle.dataset.dynamicBundleUrl;\\r\\n                    }\\r\\n                    */\\n                  case 7:\\n                  case \\\"end\\\":\\n                    return _context17.stop();\\n                }\\n              }, _callee17);\\n            })));\\n          }\\n          if ($remove) {\\n            $remove.addEventListener(\\\"click\\\", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee18() {\\n              var updates, bundleId, updateResp;\\n              return _regeneratorRuntime().wrap(function _callee18$(_context18) {\\n                while (1) switch (_context18.prev = _context18.next) {\\n                  case 0:\\n                    // Track products for removal\\n                    updates = {};\\n                    bundleId = $bundle.dataset.bundleId;\\n                    $bundleProducts.forEach(function ($bundleProduct) {\\n                      updates[$bundleProduct.dataset.key] = 0;\\n                    });\\n\\n                    //Update the cart, setting only the items within this bundle to 0\\n                    _context18.next = 5;\\n                    return fetch('/cart/update.js', {\\n                      method: 'POST',\\n                      headers: {\\n                        'Content-Type': 'application/json'\\n                      },\\n                      body: JSON.stringify({\\n                        updates: updates\\n                      })\\n                    });\\n                  case 5:\\n                    updateResp = _context18.sent;\\n                    //No point working out how to do anything else yet as we're not using cart aside\\n                    location.reload();\\n                  case 7:\\n                  case \\\"end\\\":\\n                    return _context18.stop();\\n                }\\n              }, _callee18);\\n            })));\\n          }\\n        });\\n      }\\n      if ($cartAside.dataset.bundleOrderNotes == 'true') {\\n        _this.updateOrderNote();\\n      }\\n    });\\n    _defineProperty(this, \\\"reRenderCartAside\\\", function ($element, newSectionText) {\\n      // Get the text of the new section and render it to a div thats not in the DOM\\n      var $newSection = document.createElement(\\\"div\\\");\\n      $newSection.innerHTML = newSectionText;\\n      var $newCartAside = $newSection.querySelector(\\\".cart-aside\\\");\\n      var $currentAsideContainer = $element.querySelector(\\\".cart-aside__container\\\");\\n      var $newAsideContainer = $newCartAside.querySelector(\\\".cart-aside__container\\\");\\n      if ($currentAsideContainer.classList.contains(\\\"cart-aside__container--empty\\\") && !$newAsideContainer.classList.contains(\\\"cart-aside__container--empty\\\")) {\\n        $currentAsideContainer.innerHTML = $newAsideContainer.innerHTML;\\n        $currentAsideContainer.classList.remove(\\\"cart-aside__container--empty\\\");\\n      } else if ($newAsideContainer.classList.contains(\\\"cart-aside__container--empty\\\") && !$currentAsideContainer.classList.contains(\\\"cart-aside__container--empty\\\")) {\\n        $currentAsideContainer.innerHTML = $newAsideContainer.innerHTML;\\n        $currentAsideContainer.classList.add(\\\"cart-aside__container--empty\\\");\\n      } else {\\n        // Set the current line items to the new line items\\n        var $currentLineItems = $currentAsideContainer.querySelector(\\\".cart-aside__line-items\\\");\\n        var $newLineItems = $newAsideContainer.querySelector(\\\".cart-aside__line-items\\\");\\n        if ($currentLineItems && $newLineItems) {\\n          $currentLineItems.innerHTML = $newLineItems.innerHTML;\\n        }\\n\\n        // Upsell\\n        var $currentCartAsideUpsell = $currentAsideContainer.querySelector(\\\".cart-aside__upsell\\\");\\n        var $newCartAsideUpsell = $newAsideContainer.querySelector(\\\".cart-aside__upsell\\\");\\n        if ($currentCartAsideUpsell && $newCartAsideUpsell) {\\n          $currentCartAsideUpsell.innerHTML = $newCartAsideUpsell.innerHTML;\\n        }\\n\\n        // Set the cart aside footer to the new cart aside footer\\n        var $currentFooter = $element.querySelector(\\\".cart-aside__footer\\\");\\n        var $newFooter = $newCartAside.querySelector(\\\".cart-aside__footer\\\");\\n        if ($currentFooter && $newFooter) {\\n          $currentFooter.innerHTML = $newFooter.innerHTML;\\n        }\\n      }\\n\\n      // Set the cart aside footer to the new cart aside footer\\n      var $currentHeader = $element.querySelector(\\\".cart-aside__header\\\");\\n      var $newHeader = $newCartAside.querySelector(\\\".cart-aside__header\\\");\\n      if ($currentHeader && $newHeader) {\\n        $currentHeader.innerHTML = $newHeader.innerHTML;\\n      }\\n      _this.setUpCartAside($element);\\n    });\\n    _defineProperty(this, \\\"reRenderSections\\\", function (sections) {\\n      //console.log(sections);\\n\\n      var $header = document.querySelector(\\\"header.header\\\");\\n      if ($header) {\\n        _this.reRenderHeader($header, sections[\\\"header\\\"]);\\n      }\\n      var $cartAside = document.querySelector(\\\"aside.cart-aside\\\");\\n      if ($cartAside) {\\n        _this.reRenderCartAside($cartAside, sections[\\\"cart-aside\\\"]);\\n      }\\n      var $cartTemplate = document.querySelector(\\\"section.cart-template\\\");\\n      if ($cartTemplate) {\\n        _this.reRenderCartTemplate($cartTemplate, sections[\\\"cart-template\\\"]);\\n      }\\n    });\\n    _defineProperty(this, \\\"updateLineItemQuantity\\\", /*#__PURE__*/function () {\\n      var _ref23 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee19(key, quantity) {\\n        var requestJson, response, json;\\n        return _regeneratorRuntime().wrap(function _callee19$(_context19) {\\n          while (1) switch (_context19.prev = _context19.next) {\\n            case 0:\\n              if (!key) {\\n                _context19.next = 12;\\n                break;\\n              }\\n              requestJson = {\\n                id: key,\\n                quantity: parseInt(quantity),\\n                sections: _this.sections\\n              };\\n              _context19.next = 4;\\n              return fetch(\\\"/cart/change.js\\\", {\\n                method: \\\"POST\\\",\\n                headers: {\\n                  \\\"Content-Type\\\": \\\"application/json\\\"\\n                },\\n                body: JSON.stringify(requestJson)\\n              });\\n            case 4:\\n              response = _context19.sent;\\n              _context19.next = 7;\\n              return response.json();\\n            case 7:\\n              json = _context19.sent;\\n              _this.reRenderSections(json.sections);\\n              return _context19.abrupt(\\\"return\\\", json);\\n            case 12:\\n              return _context19.abrupt(\\\"return\\\", null);\\n            case 13:\\n            case \\\"end\\\":\\n              return _context19.stop();\\n          }\\n        }, _callee19);\\n      }));\\n      return function (_x24, _x25) {\\n        return _ref23.apply(this, arguments);\\n      };\\n    }());\\n    _defineProperty(this, \\\"removeLineItemFromCart\\\", /*#__PURE__*/function () {\\n      var _ref24 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee20(key) {\\n        var requestJson, response, json;\\n        return _regeneratorRuntime().wrap(function _callee20$(_context20) {\\n          while (1) switch (_context20.prev = _context20.next) {\\n            case 0:\\n              if (!key) {\\n                _context20.next = 12;\\n                break;\\n              }\\n              requestJson = {\\n                id: key,\\n                quantity: 0,\\n                sections: _this.sections\\n              };\\n              _context20.next = 4;\\n              return fetch(\\\"/cart/change.js\\\", {\\n                method: \\\"POST\\\",\\n                headers: {\\n                  \\\"Content-Type\\\": \\\"application/json\\\"\\n                },\\n                body: JSON.stringify(requestJson)\\n              });\\n            case 4:\\n              response = _context20.sent;\\n              _context20.next = 7;\\n              return response.json();\\n            case 7:\\n              json = _context20.sent;\\n              _this.reRenderSections(json.sections);\\n              return _context20.abrupt(\\\"return\\\", json);\\n            case 12:\\n              return _context20.abrupt(\\\"return\\\", null);\\n            case 13:\\n            case \\\"end\\\":\\n              return _context20.stop();\\n          }\\n        }, _callee20);\\n      }));\\n      return function (_x26) {\\n        return _ref24.apply(this, arguments);\\n      };\\n    }());\\n    _defineProperty(this, \\\"clearCart\\\", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee21() {\\n      var requestJson, response, json;\\n      return _regeneratorRuntime().wrap(function _callee21$(_context21) {\\n        while (1) switch (_context21.prev = _context21.next) {\\n          case 0:\\n            requestJson = {\\n              sections: _this.sections\\n            }; // Clear the cart\\n            _context21.next = 3;\\n            return fetch(\\\"/cart/clear.js\\\", {\\n              method: \\\"POST\\\",\\n              headers: {\\n                \\\"Content-Type\\\": \\\"application/json\\\"\\n              },\\n              body: JSON.stringify(requestJson)\\n            });\\n          case 3:\\n            response = _context21.sent;\\n            _context21.next = 6;\\n            return response.json();\\n          case 6:\\n            json = _context21.sent;\\n            _context21.next = 9;\\n            return fetch(\\\"/cart/update.js\\\", {\\n              method: \\\"POST\\\",\\n              headers: {\\n                \\\"Content-Type\\\": \\\"application/json\\\"\\n              },\\n              body: JSON.stringify({\\n                note: \\\"\\\"\\n              })\\n            });\\n          case 9:\\n            // Re-render cart sections\\n            _this.reRenderSections(json.sections);\\n            return _context21.abrupt(\\\"return\\\", json);\\n          case 11:\\n          case \\\"end\\\":\\n            return _context21.stop();\\n        }\\n      }, _callee21);\\n    })));\\n    _defineProperty(this, \\\"addItemToCart\\\", /*#__PURE__*/function () {\\n      var _ref26 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee22(variantId, quantity) {\\n        var sellingPlanId,\\n          itemObject,\\n          requestJson,\\n          response,\\n          json,\\n          _args22 = arguments;\\n        return _regeneratorRuntime().wrap(function _callee22$(_context22) {\\n          while (1) switch (_context22.prev = _context22.next) {\\n            case 0:\\n              sellingPlanId = _args22.length > 2 && _args22[2] !== undefined ? _args22[2] : null;\\n              if (!(variantId !== undefined && Number.isInteger(quantity))) {\\n                _context22.next = 19;\\n                break;\\n              }\\n              itemObject = {\\n                id: variantId,\\n                quantity: quantity\\n              };\\n              if (sellingPlanId) {\\n                itemObject.selling_plan = sellingPlanId;\\n              }\\n              requestJson = {\\n                items: [itemObject],\\n                sections: _this.sections\\n              };\\n              _context22.next = 7;\\n              return fetch(\\\"/cart/add.js\\\", {\\n                method: \\\"POST\\\",\\n                headers: {\\n                  \\\"Content-Type\\\": \\\"application/json\\\"\\n                },\\n                body: JSON.stringify(requestJson)\\n              });\\n            case 7:\\n              response = _context22.sent;\\n              if (!response.ok) {\\n                _context22.next = 16;\\n                break;\\n              }\\n              _context22.next = 11;\\n              return response.json();\\n            case 11:\\n              json = _context22.sent;\\n              _this.reRenderSections(json.sections);\\n              return _context22.abrupt(\\\"return\\\", json);\\n            case 16:\\n              return _context22.abrupt(\\\"return\\\", null);\\n            case 17:\\n              _context22.next = 20;\\n              break;\\n            case 19:\\n              return _context22.abrupt(\\\"return\\\", null);\\n            case 20:\\n            case \\\"end\\\":\\n              return _context22.stop();\\n          }\\n        }, _callee22);\\n      }));\\n      return function (_x27, _x28) {\\n        return _ref26.apply(this, arguments);\\n      };\\n    }());\\n    _defineProperty(this, \\\"quickAddItemToCart\\\", /*#__PURE__*/function () {\\n      var _ref27 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee23(variantId) {\\n        var itemObject, requestJson, response, json;\\n        return _regeneratorRuntime().wrap(function _callee23$(_context23) {\\n          while (1) switch (_context23.prev = _context23.next) {\\n            case 0:\\n              if (!(variantId !== undefined)) {\\n                _context23.next = 17;\\n                break;\\n              }\\n              itemObject = {\\n                id: variantId,\\n                quantity: 1\\n              };\\n              requestJson = {\\n                items: [itemObject],\\n                sections: _this.sections\\n              };\\n              _context23.next = 5;\\n              return fetch(\\\"/cart/add.js\\\", {\\n                method: \\\"POST\\\",\\n                headers: {\\n                  \\\"Content-Type\\\": \\\"application/json\\\"\\n                },\\n                body: JSON.stringify(requestJson)\\n              });\\n            case 5:\\n              response = _context23.sent;\\n              if (!response.ok) {\\n                _context23.next = 14;\\n                break;\\n              }\\n              _context23.next = 9;\\n              return response.json();\\n            case 9:\\n              json = _context23.sent;\\n              _this.reRenderSections(json.sections);\\n              return _context23.abrupt(\\\"return\\\", json);\\n            case 14:\\n              return _context23.abrupt(\\\"return\\\", null);\\n            case 15:\\n              _context23.next = 18;\\n              break;\\n            case 17:\\n              return _context23.abrupt(\\\"return\\\", null);\\n            case 18:\\n            case \\\"end\\\":\\n              return _context23.stop();\\n          }\\n        }, _callee23);\\n      }));\\n      return function (_x29) {\\n        return _ref27.apply(this, arguments);\\n      };\\n    }());\\n    _defineProperty(this, \\\"getCart\\\", /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee24() {\\n      var response, json;\\n      return _regeneratorRuntime().wrap(function _callee24$(_context24) {\\n        while (1) switch (_context24.prev = _context24.next) {\\n          case 0:\\n            _context24.next = 2;\\n            return fetch(\\\"/cart.js\\\", {\\n              method: \\\"GET\\\",\\n              headers: {\\n                \\\"Content-Type\\\": \\\"application/json\\\"\\n              }\\n            });\\n          case 2:\\n            response = _context24.sent;\\n            if (!response.ok) {\\n              _context24.next = 10;\\n              break;\\n            }\\n            _context24.next = 6;\\n            return response.json();\\n          case 6:\\n            json = _context24.sent;\\n            return _context24.abrupt(\\\"return\\\", json);\\n          case 10:\\n            return _context24.abrupt(\\\"return\\\", null);\\n          case 11:\\n          case \\\"end\\\":\\n            return _context24.stop();\\n        }\\n      }, _callee24);\\n    })));\\n    _defineProperty(this, \\\"removeSubscription\\\", /*#__PURE__*/function () {\\n      var _ref29 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee25(key, variantId, quantity) {\\n        var removeRequestJson, removeResponse, itemObject, addRequestJson, addResponse, json;\\n        return _regeneratorRuntime().wrap(function _callee25$(_context25) {\\n          while (1) switch (_context25.prev = _context25.next) {\\n            case 0:\\n              if (!key) {\\n                _context25.next = 14;\\n                break;\\n              }\\n              // Remove the subscription from the cart\\n              removeRequestJson = {\\n                id: key,\\n                quantity: 0\\n              };\\n              _context25.next = 4;\\n              return fetch(\\\"/cart/change.js\\\", {\\n                method: \\\"POST\\\",\\n                headers: {\\n                  \\\"Content-Type\\\": \\\"application/json\\\"\\n                },\\n                body: JSON.stringify(removeRequestJson)\\n              });\\n            case 4:\\n              removeResponse = _context25.sent;\\n              itemObject = {\\n                id: variantId,\\n                quantity: quantity\\n              };\\n              addRequestJson = {\\n                items: [itemObject],\\n                sections: _this.sections\\n              };\\n              _context25.next = 9;\\n              return fetch(\\\"/cart/add.js\\\", {\\n                method: \\\"POST\\\",\\n                headers: {\\n                  \\\"Content-Type\\\": \\\"application/json\\\"\\n                },\\n                body: JSON.stringify(addRequestJson)\\n              });\\n            case 9:\\n              addResponse = _context25.sent;\\n              _context25.next = 12;\\n              return addResponse.json();\\n            case 12:\\n              json = _context25.sent;\\n              _this.reRenderSections(json.sections);\\n            case 14:\\n            case \\\"end\\\":\\n              return _context25.stop();\\n          }\\n        }, _callee25);\\n      }));\\n      return function (_x30, _x31, _x32) {\\n        return _ref29.apply(this, arguments);\\n      };\\n    }());\\n    _defineProperty(this, \\\"addSubscription\\\", /*#__PURE__*/function () {\\n      var _ref30 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee26(key, variantId, quantity, sellingPlanId) {\\n        var removeRequestJson, removeResponse, itemObject, addRequestJson, addResponse, json;\\n        return _regeneratorRuntime().wrap(function _callee26$(_context26) {\\n          while (1) switch (_context26.prev = _context26.next) {\\n            case 0:\\n              if (!key) {\\n                _context26.next = 14;\\n                break;\\n              }\\n              // Remove the subscription from the cart\\n              removeRequestJson = {\\n                id: key,\\n                quantity: 0\\n              };\\n              _context26.next = 4;\\n              return fetch(\\\"/cart/change.js\\\", {\\n                method: \\\"POST\\\",\\n                headers: {\\n                  \\\"Content-Type\\\": \\\"application/json\\\"\\n                },\\n                body: JSON.stringify(removeRequestJson)\\n              });\\n            case 4:\\n              removeResponse = _context26.sent;\\n              itemObject = {\\n                id: variantId,\\n                quantity: quantity,\\n                selling_plan: sellingPlanId\\n              };\\n              addRequestJson = {\\n                items: [itemObject],\\n                sections: _this.sections\\n              };\\n              _context26.next = 9;\\n              return fetch(\\\"/cart/add.js\\\", {\\n                method: \\\"POST\\\",\\n                headers: {\\n                  \\\"Content-Type\\\": \\\"application/json\\\"\\n                },\\n                body: JSON.stringify(addRequestJson)\\n              });\\n            case 9:\\n              addResponse = _context26.sent;\\n              _context26.next = 12;\\n              return addResponse.json();\\n            case 12:\\n              json = _context26.sent;\\n              _this.reRenderSections(json.sections);\\n            case 14:\\n            case \\\"end\\\":\\n              return _context26.stop();\\n          }\\n        }, _callee26);\\n      }));\\n      return function (_x33, _x34, _x35, _x36) {\\n        return _ref30.apply(this, arguments);\\n      };\\n    }());\\n    var _$body = document.querySelector(\\\"body\\\");\\n    this.useCartAside = ((_$body$dataset = _$body.dataset) === null || _$body$dataset === void 0 ? void 0 : _$body$dataset.useCartAside) === \\\"true\\\" ? true : false;\\n  }\\n  _createClass(Cart, [{\\n    key: \\\"updateOrderNote\\\",\\n    value: function () {\\n      var _updateOrderNote = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee27() {\\n        var staticBundles, bundleNotes, fullNote;\\n        return _regeneratorRuntime().wrap(function _callee27$(_context27) {\\n          while (1) switch (_context27.prev = _context27.next) {\\n            case 0:\\n              // Step 1: Select all static bundles in the cart\\n              staticBundles = document.querySelectorAll('[data-type=\\\"Classic Box\\\"]');\\n              bundleNotes = [];\\n              staticBundles.forEach(function (bundle) {\\n                var _bundle$querySelector, _bundle$querySelector2;\\n                var bundleTitle = ((_bundle$querySelector = bundle.querySelector('h5')) === null || _bundle$querySelector === void 0 ? void 0 : (_bundle$querySelector2 = _bundle$querySelector.textContent) === null || _bundle$querySelector2 === void 0 ? void 0 : _bundle$querySelector2.trim()) || 'Unnamed Bundle';\\n\\n                // Find the list of products inside the bundle\\n                var itemList = bundle.querySelectorAll('.cart-aside__bundle-item-contents li');\\n\\n                // Format item lines like \\\"Product x Quantity\\\"\\n                var itemLines = Array.from(itemList).map(function (li) {\\n                  return \\\"- \\\".concat(li.textContent.trim());\\n                });\\n\\n                // Combine bundle ID, title, and items into a section\\n                var noteSection = [\\\"\\\".concat(bundleTitle, \\\":\\\")].concat(_toConsumableArray(itemLines)).join('\\\\n');\\n                bundleNotes.push(noteSection);\\n              });\\n\\n              // Step 2: Join all note sections with spacing\\n              fullNote = bundleNotes.join('\\\\n\\\\n').trim(); // Step 3: Update cart note\\n              _context27.prev = 4;\\n              _context27.next = 7;\\n              return fetch('/cart/update.js', {\\n                method: 'POST',\\n                headers: {\\n                  'Content-Type': 'application/json'\\n                },\\n                body: JSON.stringify({\\n                  note: fullNote\\n                })\\n              });\\n            case 7:\\n              console.log('Order note updated:', fullNote);\\n              _context27.next = 13;\\n              break;\\n            case 10:\\n              _context27.prev = 10;\\n              _context27.t0 = _context27[\\\"catch\\\"](4);\\n              console.error('Failed to update order note:', _context27.t0);\\n            case 13:\\n            case \\\"end\\\":\\n              return _context27.stop();\\n          }\\n        }, _callee27, null, [[4, 10]]);\\n      }));\\n      function updateOrderNote() {\\n        return _updateOrderNote.apply(this, arguments);\\n      }\\n      return updateOrderNote;\\n    }()\\n  }]);\\n  return Cart;\\n}();\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Cart);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUNILFFBQVEsQ0FBQyxDQUFDN1MsR0FBRyxDQUFDLFVBQUFpVCxFQUFFO2tCQUFBLG1CQUFTQSxFQUFFLENBQUNsVixXQUFXLENBQUM2VSxJQUFJLEVBQUU7Z0JBQUEsQ0FBRSxDQUFDOztnQkFFOUU7Z0JBQ0EsSUFBTU0sV0FBVyxHQUFHLFdBQ2ZQLFdBQVcsa0NBQ1hHLFNBQVMsR0FDWkssSUFBSSxDQUFDLElBQUksQ0FBQztnQkFFWlQsV0FBVyxDQUFDblMsSUFBSSxDQUFDMlMsV0FBVyxDQUFDO2NBQy9CLENBQUMsQ0FBQzs7Y0FFRjtjQUNNRSxRQUFRLEdBQUdWLFdBQVcsQ0FBQ1MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDUCxJQUFJLEVBQUUsRUFFaEQ7Y0FBQTtjQUFBO2NBQUEsT0FFUTNWLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtnQkFDN0JpRCxNQUFNLEVBQUUsTUFBTTtnQkFDZEMsT0FBTyxFQUFFO2tCQUFFLGNBQWMsRUFBRTtnQkFBbUIsQ0FBQztnQkFDL0NDLElBQUksRUFBRUMsSUFBSSxDQUFDQyxTQUFTLENBQUM7a0JBQUUwUixJQUFJLEVBQUVvQjtnQkFBUyxDQUFDO2NBQ3pDLENBQUMsQ0FBQztZQUFBO2NBQ0YvUixPQUFPLENBQUNDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRThSLFFBQVEsQ0FBQztjQUFDO2NBQUE7WUFBQTtjQUFBO2NBQUE7Y0FFN0MvUixPQUFPLENBQUNHLEtBQUssQ0FBQyw4QkFBOEIsZ0JBQU07WUFBQztZQUFBO2NBQUE7VUFBQTtRQUFBO01BQUEsQ0FFdEQ7TUFBQTtRQUFBO01BQUE7TUFBQTtJQUFBO0VBQUE7RUFBQTtBQUFBO0FBK21CSCxpRUFBZW5GLElBQUkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL3Jlc291cmNlcy9zY3JpcHRzL21vZHVsZXMvQ2FydC5qcz8xNDJlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnc2FwIGZyb20gXCJnc2FwXCI7XHJcbmltcG9ydCB7IFN3aXBlciB9IGZyb20gXCJzd2lwZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDYXJ0IHtcclxuICByb290ID0gd2luZG93LlNob3BpZnkucm91dGVzLnJvb3Q7XHJcbiAgc2VjdGlvbnMgPSBcImNhcnQtdGVtcGxhdGUsY2FydC1hc2lkZSxoZWFkZXJcIjtcclxuICB1c2VDYXJ0QXNpZGUgPSBmYWxzZTtcclxuICBkZWxpdmVyeURhdGVNb25pdG9yUnVubmluZyA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIGNvbnN0ICRib2R5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIik7XHJcbiAgICB0aGlzLnVzZUNhcnRBc2lkZSA9ICRib2R5LmRhdGFzZXQ/LnVzZUNhcnRBc2lkZSA9PT0gXCJ0cnVlXCIgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBlbmFibGVDYXJ0Q2hlY2tvdXRCdG4gPSAoJGNhcnRDaGVja291dEJ1dHRvbiwkY2FsZW5kZXJCdXR0b24pID0+IHtcclxuICAgICRjYXJ0Q2hlY2tvdXRCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcImJ1dHRvbi0tZGlzYWJsZWRcIiwgXCJoaWRkZW5cIik7XHJcbiAgICAkY2FydENoZWNrb3V0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gICAgaWYoJGNhbGVuZGVyQnV0dG9uKXtcclxuICAgICAgJGNhbGVuZGVyQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICB9XHJcbiAgfSBcclxuXHJcbiAgZmV0Y2hBbmRSZXJlbmRlclNlY3Rpb25zID0gYXN5bmMgKCR1aUJsb2NrZXIpID0+IHtcclxuXHJcbiAgICBjb25zdCBzZWN0aW9uc1Jlc3AgPSBhd2FpdCBmZXRjaChgLz9zZWN0aW9ucz0ke3RoaXMuc2VjdGlvbnN9YCkudGhlbihyZXMgPT4gcmVzLmpzb24oKSk7XHJcbiAgICB0aGlzLnJlUmVuZGVyU2VjdGlvbnMoc2VjdGlvbnNSZXNwKTtcclxuXHJcbiAgICBpZigkdWlCbG9ja2VyKXtcclxuICAgICAgdGhpcy5oaWRlVUlCbG9ja2VyKCR1aUJsb2NrZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcGF1c2VBZGRvblF0eUJ0biA9ICgkcHJvZHVjdENvbnRyb2xzLCRhZGRvbkRlY3JlYXNlLCRwcm9kdWN0UXR5LCRhZGRvbkluY3JlYXNlKSA9PiB7XHJcbiAgICAkcHJvZHVjdENvbnRyb2xzLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XHJcbiAgICAkYWRkb25EZWNyZWFzZS5zdHlsZS5vcGFjaXR5ID0gMDtcclxuICAgICRhZGRvbkluY3JlYXNlLnN0eWxlLm9wYWNpdHkgPSAwO1xyXG4gICAgJHByb2R1Y3RRdHkuY2xhc3NMaXN0LmFkZChcImZvbnQtYm9iYnktam9uZXMtc29mdFwiKTtcclxuICAgICRwcm9kdWN0UXR5LnRleHRDb250ZW50ID0gXCJVcGRhdGluZ1wiO1xyXG4gIH1cclxuXHJcbiAgcGF1c2VRdHlCdG4gPSAoJGxpbmVJdGVtUXVhbnRpdHlEZWNyZWFzZSwkbGluZUl0ZW1RdWFudGl0eVZhbHVlLCRsaW5lSXRlbVF1YW50aXR5SW5jcmVhc2UpID0+IHtcclxuICAgICRsaW5lSXRlbVF1YW50aXR5RGVjcmVhc2Uuc3R5bGUub3BhY2l0eSA9IDA7XHJcbiAgICAkbGluZUl0ZW1RdWFudGl0eUluY3JlYXNlLnN0eWxlLm9wYWNpdHkgPSAwO1xyXG4gICAgJGxpbmVJdGVtUXVhbnRpdHlWYWx1ZS5jbGFzc0xpc3QuYWRkKFwiZm9udC1ib2JieS1qb25lcy1zb2Z0XCIpO1xyXG4gICAgJGxpbmVJdGVtUXVhbnRpdHlWYWx1ZS50ZXh0Q29udGVudCA9IFwiVXBkYXRpbmdcIjtcclxuICB9XHJcblxyXG5cclxuICByZW1vdmVTZWxsaW5nUGxhbnNGcm9tQWxsQXBwbGljYWJsZVByb2R1Y3RzID0gYXN5bmMgKCRidW5kbGVMaW5lSXRlbXMsJGxpbmVJdGVtcywkdWlCbG9ja2VyKSA9PiB7XHJcblxyXG4gICAgLy9TZXQgdXAgb3VyIFVwZGF0ZXMgT2JqZWN0XHJcbiAgICBsZXQgdXBkYXRlcyA9IHtcclxuICAgICAgYnVuZGxlczoge30sXHJcbiAgICAgIHJlZ3VsYXJfcHJvZHVjdHM6IHt9LFxyXG4gICAgfVxyXG5cclxuICAgIC8vU3RhcnQgV2l0aCBCdWlsZCBhIEJ1bmRsZXNcclxuICAgIGlmKCRidW5kbGVMaW5lSXRlbXMubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgICAkYnVuZGxlTGluZUl0ZW1zLmZvckVhY2goKCRidW5kbGVMaW5lSXRlbSkgPT4ge1xyXG5cclxuICAgICAgICAvL05vdCBldmVyeSBidWlsZCBhIGJ1bmRsZSB3aWxsIGJlIG9uIHN1YnNjcmlwdGlvbiAtIHNvIGNoZWNrIGZvciB0aGUgb25lcyB0aGF0IGFyZVxyXG4gICAgICAgIGNvbnN0IGJ1bmRsZVNlbGxpbmdQbGFuSWQgPSAkYnVuZGxlTGluZUl0ZW0uZGF0YXNldC5zZWxsaW5nUGxhbklkOyAgICAgIFxyXG4gICAgICAgIGlmKGJ1bmRsZVNlbGxpbmdQbGFuSWQpe1xyXG5cclxuICAgICAgICAgIC8vIEFkZCB0byB1cGRhdGVzIGFzIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBzZWxsaW5nIHBsYW5cclxuICAgICAgICAgIGNvbnN0IGJ1bmRsZUlkID0gJGJ1bmRsZUxpbmVJdGVtLmRhdGFzZXQuYnVuZGxlSWQ7XHJcbiAgICAgICAgICB1cGRhdGVzLmJ1bmRsZXNbYnVuZGxlSWRdID0ge1xyXG4gICAgICAgICAgICBidW5kbGVfaWQ6IGJ1bmRsZUlkLFxyXG4gICAgICAgICAgICBidW5kbGVfbGluZV9pdGVtOiAkYnVuZGxlTGluZUl0ZW0sXHJcbiAgICAgICAgICAgIGJ1bmRsZV91cmw6ICRidW5kbGVMaW5lSXRlbS5kYXRhc2V0LnVybFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRmluZCBhbGwgcmVndWxhciBwcm9kdWN0cyB0aGF0IGhhdmUgc2VsbGluZyBwbGFucyBhbmQgdGhhdCBBUkVOVCBzdWJzY3JpcHRpb24gb25seVxyXG4gICAgaWYoJGxpbmVJdGVtcy5sZW5ndGggPiAwKXtcclxuICAgICAgJGxpbmVJdGVtcy5mb3JFYWNoKCgkbGluZUl0ZW0pID0+IHtcclxuICAgICAgICBpZigkbGluZUl0ZW0uZGF0YXNldC5zZWxsaW5nUGxhbklkKXtcclxuICAgICAgICBcclxuICAgICAgICAgIC8vQ2hlY2sgd2hldGhlciB0aGUgc2VsbGluZyBwbGFuIGlzIHJlcXVpcmVkIG9yIG5vdFxyXG4gICAgICAgICAgaWYoJGxpbmVJdGVtLmRhdGFzZXQuc2VsbGluZ1BsYW5Jc1JlcXVpcmVkID09IFwiZmFsc2VcIil7XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9ICRsaW5lSXRlbS5kYXRhc2V0LmtleTtcclxuICAgICAgICAgICAgY29uc3QgcXVhbnRpdHkgPSBwYXJzZUludCgkbGluZUl0ZW0uZGF0YXNldC5xdWFudGl0eSk7XHJcblxyXG4gICAgICAgICAgICBpZihrZXkgJiYgcXVhbnRpdHkpe1xyXG4gICAgICAgICAgICAgIHVwZGF0ZXMucmVndWxhcl9wcm9kdWN0c1trZXldID0ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IGtleSxcclxuICAgICAgICAgICAgICAgIHF1YW50aXR5OiBxdWFudGl0eSxcclxuICAgICAgICAgICAgICAgIHNlbGxpbmdfcGxhbjogbnVsbFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSAgICAgICAgICAgIFxyXG4gICAgICAgICAgfSAgICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vRG8gd2UgaGF2ZSB1cGRhdGVzIHRvIG1ha2U/IFdlIHRoZW9yZXRpY2FsbHkgc2hvdWxkLi4uXHJcbiAgICBpZihPYmplY3Qua2V5cyh1cGRhdGVzLnJlZ3VsYXJfcHJvZHVjdHMpLmxlbmd0aCA+IDAgfHwgT2JqZWN0LmtleXModXBkYXRlcy5idW5kbGVzKS5sZW5ndGggPiAwKXtcclxuXHJcbiAgICAgIC8vIFNob3cgVUkgQmxvY2tlciB0byBpbmRpY2F0ZSB0aGF0IHNvbWV0aGluZyBpcyBoYXBwZW5pbmdcclxuICAgICAgaWYoJHVpQmxvY2tlcil7XHJcbiAgICAgICAgdGhpcy5zaG93VUlCbG9ja2VyKCR1aUJsb2NrZXIpO1xyXG4gICAgICB9XHJcbiAgICBcclxuICAgICAgLy8gRG8gcmVndWxhciBwcm9kdWN0cyBmaXJzdCAtIHRoZXkgY2FuIGFsbCBiZSBkb25lIGluIG9uZSBnb1xyXG4gICAgICBsZXQgYWxsUmVndWxhclByb2R1Y3RQcm9taXNlcyA9IFtdO1xyXG5cclxuICAgICAgaWYoT2JqZWN0LmtleXModXBkYXRlcy5yZWd1bGFyX3Byb2R1Y3RzKS5sZW5ndGggPiAwKXtcclxuXHJcbiAgICAgICAgY29uc3QgcmVndWxhclByb21pc2VzID0gT2JqZWN0LnZhbHVlcyh1cGRhdGVzLnJlZ3VsYXJfcHJvZHVjdHMpLm1hcChpdGVtID0+XHJcbiAgICAgICAgICBmZXRjaCgnL2NhcnQvY2hhbmdlLmpzJywge1xyXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXHJcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eSxcclxuICAgICAgICAgICAgICBzZWxsaW5nX3BsYW46IG51bGxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgYWxsUmVndWxhclByb2R1Y3RQcm9taXNlcy5wdXNoKC4uLnJlZ3VsYXJQcm9taXNlcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE5vdyBQcm9jZXNzIHRoZSBDaGFuZ2VzXHJcbiAgICAgIHRyeSB7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZXJlIGFyZSBSZWd1bGFyIFByb2R1Y3QgVXBkYXRlcyAtIHJ1biB0aG9zZSBmaXJzdFxyXG4gICAgICAgIGlmKGFsbFJlZ3VsYXJQcm9kdWN0UHJvbWlzZXMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChhbGxSZWd1bGFyUHJvZHVjdFByb21pc2VzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE5vdyBoYW5kbGUgYnVuZGxlcyB0aGF0IG5lZWQgc2VsbGluZyBwbGFucyByZW1vdmVkXHJcbiAgICAgICAgaWYoT2JqZWN0LmtleXModXBkYXRlcy5idW5kbGVzKS5sZW5ndGggPiAwKXtcclxuXHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGJ1bmRsZV9pbmZvIG9mIE9iamVjdC52YWx1ZXModXBkYXRlcy5idW5kbGVzKSkge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgYnVuZGxlSWQgPSBidW5kbGVfaW5mby5idW5kbGVfaWQ7XHJcbiAgICAgICAgICAgIGNvbnN0ICRidW5kbGVQcm9kdWN0cyA9IGJ1bmRsZV9pbmZvLmJ1bmRsZV9saW5lX2l0ZW0ucXVlcnlTZWxlY3RvckFsbChcIi5jYXJ0X19idW5kbGUtbGluZS1pdGVtXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYoJGJ1bmRsZVByb2R1Y3RzLmxlbmd0aCA+IDApe1xyXG5cclxuICAgICAgICAgICAgICAvLyBHZXQgQnVuZGxlIFN0cnVjdHVyZSBTZXR1cFxyXG4gICAgICAgICAgICAgIGNvbnN0IGJ1bmRsZSA9IHRoaXMuc2V0dXBCdW5kbGVPYmplY3QoYnVuZGxlSWQsICRidW5kbGVQcm9kdWN0cyk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgYnVuZGxlXHJcbiAgICAgICAgICAgICAgY29uc3QgZGVsZXRlUmVzdWx0ID0gYXdhaXQgdGhpcy5kZWxldGVCdW5kbGUoJGJ1bmRsZVByb2R1Y3RzKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYoIWRlbGV0ZVJlc3VsdC5vayl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBkZWxldGUgYnVuZGxlOiAnICsgYnVuZGxlSWQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIC8vIFJlLWFkZCBXSVRIT1VUIHNlbGxpbmcgcGxhbiAocGFzcyBudWxsIGFzIHNlbGxpbmcgcGxhbiBJRClcclxuICAgICAgICAgICAgICBjb25zdCBhZGRSZXNwID0gYXdhaXQgdGhpcy5hZGROZXdCdW5kbGVUb0NhcnQoYnVuZGxlLCBidW5kbGVJZCwgYnVuZGxlX2luZm8uYnVuZGxlX3VybCwgbnVsbCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgICAgICBpZighYWRkUmVzcC5zZWN0aW9ucyl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZS1hZGQgYnVuZGxlOiAnICsgYnVuZGxlSWQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNvdWxkIG5vdCBmaW5kIGJ1bmRsZSBwcm9kdWN0cyB0byBkZWxldGUgYW5kIHJlLWFkZCBkdXJpbmcgcmVtb3ZlIHNlbGxpbmcgcGxhbnMgY2FsbFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gICAgICBcclxuXHJcbiAgICAgICAgLy8gT25jZSBhbGwgZmluaXNoZWQgLSByZXJlbmRlciB0aGUgY2FydCB3aXRoIHRoZSBuZXdseSB1cGRhdGVkIGl0ZW1zXHJcbiAgICAgICAgdGhpcy5mZXRjaEFuZFJlcmVuZGVyU2VjdGlvbnMoJHVpQmxvY2tlcik7XHJcblxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlbW92aW5nIHNlbGxpbmcgcGxhbnM6JywgZXJyb3IpO1xyXG4gICAgICAgIGFsZXJ0KFwiRW5jb3VudGVyZWQgYW4gaXNzdWUgd2hlbiByZW1vdmluZyBzdWJzY3JpcHRpb25zIGZyb20gY2FydCBpdGVtcy5cIik7XHJcbiAgICAgICAgbG9jYXRpb24ucmVsb2FkKCk7XHJcbiAgICAgIH1cclxuICAgIH1lbHNle1xyXG4gICAgICBjb25zb2xlLmxvZyhcIk5vIHVwZGF0ZXMgdG8gbWFrZSBvbiBzZWxlY3Rpb24gb2YgJ1Vuc3Vic2NyaWJlJyAtIHVuc3VyZSB3aGF0IHRvIGRvXCIpO1xyXG4gICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3luY2hyb25pc2VTZWxsaW5nUGxhbnNBY3Jvc3NMaW5lSXRlbXMgPSBhc3luYyAoYWN0aXZlU2VsbGluZ1BsYW5JZCxhY3RpdmVTZWxsaW5nUGxhbk5hbWUsJGJ1bmRsZUxpbmVJdGVtcywkbGluZUl0ZW1zLCR1aUJsb2NrZXIpID0+IHtcclxuXHJcbiAgICAvKlxyXG4gICAgICBhY3RpdmVTZWxsaW5nUGxhbklkID0gVGhlIEJ1aWxkIGEgQnVuZGxlIFwiY29ycmVjdFwiIGlkXHJcbiAgICAgIGFjdGl2ZVNlbGxpbmdQbGFuTmFtZSA9IFRoZSBkb3duY2FzZWQgc3RyaW5nIHdlJ3JlIHVzaW5nIHRvIGNvbXBhcmUgYWNyb3NzIGRpZmZlcmVudCB0eXBlcyBvZiBzZWxsaW5nIHBsYW5zXHJcbiAgICAgICRidW5kbGVMaW5lSXRlbXMgPSBCdWlsZCBhIEJveGVzIE1heSBvciBtYXkgbm90IGJlIHByZXNlbnRcclxuICAgICAgJGxpbmVJdGVtcyA9IFwiUmVndWxhciBwcm9kdWN0XCIgbGluZSBpdGVtcywgaS5lLCBub3QgYnVpbGQgYSBidW5kbGUgYW5kIG5vdCBhZGRvbiBwcm9kdWN0cy4gV2lsbCB1c3VhbGx5IGJlIFByZS1idWlsdCBidW5kbGVzXHJcbiAgICAqL1xyXG5cclxuICAgIGxldCB1cGRhdGVzID0ge1xyXG4gICAgICBidW5kbGVzOiB7fSxcclxuICAgICAgcmVndWxhcl9wcm9kdWN0czoge30sXHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmKCRidW5kbGVMaW5lSXRlbXMubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgICAvL0xvb3AgdGhyb3VnaCBidW5kbGUgaXRlbXMsIGZpbmQgYW55IHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIGFjdGl2ZVNlbGxpbmdQbGFuSWQgICAgIGFjdGl2ZVNlbGxpbmdQbGFuSWRcclxuICAgICAgJGJ1bmRsZUxpbmVJdGVtcy5mb3JFYWNoKCgkYnVuZGxlTGluZUl0ZW0pID0+IHtcclxuXHJcbiAgICAgICAgY29uc3QgYnVuZGxlU2VsbGluZ1BsYW5JZCA9ICRidW5kbGVMaW5lSXRlbS5kYXRhc2V0LnNlbGxpbmdQbGFuSWQ7XHJcbiAgICAgICAgY29uc3QgYnVuZGxlSWQgPSAkYnVuZGxlTGluZUl0ZW0uZGF0YXNldC5idW5kbGVJZDtcclxuICAgICAgICBpZihidW5kbGVTZWxsaW5nUGxhbklkKXtcclxuICAgICAgICAgIGlmKHBhcnNlSW50KGJ1bmRsZVNlbGxpbmdQbGFuSWQpICE9PSBhY3RpdmVTZWxsaW5nUGxhbklkKXtcclxuXHJcbiAgICAgICAgICAgIC8vQWRkIEJ1bmRsZSBJZCB0byBsaXN0IGZvciB1cGRhdGluZyBsYXRlclxyXG4gICAgICAgICAgICB1cGRhdGVzLmJ1bmRsZXNbYnVuZGxlSWRdID0ge1xyXG4gICAgICAgICAgICAgIGJ1bmRsZV9pZDogYnVuZGxlSWQsXHJcbiAgICAgICAgICAgICAgYnVuZGxlX2xpbmVfaXRlbTogJGJ1bmRsZUxpbmVJdGVtLFxyXG4gICAgICAgICAgICAgIGJ1bmRsZV91cmw6ICRidW5kbGVMaW5lSXRlbS5kYXRhc2V0LnVybFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCRsaW5lSXRlbXMubGVuZ3RoID4gMCl7XHJcbiAgICAgICRsaW5lSXRlbXMuZm9yRWFjaCgoJGxpbmVJdGVtKSA9PiB7XHJcblxyXG4gICAgICAgIGlmKCRsaW5lSXRlbS5kYXRhc2V0LnNlbGxpbmdQbGFuTmFtZSl7XHJcbiAgICAgICAgICBpZigkbGluZUl0ZW0uZGF0YXNldC5zZWxsaW5nUGxhbk5hbWUgIT0gYWN0aXZlU2VsbGluZ1BsYW5OYW1lKXtcclxuXHJcbiAgICAgICAgICAgIC8vR2V0IHRoZSBsaXN0IG9mIHNlbGxpbmcgcGxhbnMgYXZhaWxhYmxlIHRvIHRoaXMgcHJvZHVjdFxyXG4gICAgICAgICAgICBjb25zdCBhdmFpbGFibGVQbGFucyA9IEpTT04ucGFyc2UoJGxpbmVJdGVtLmRhdGFzZXQuc2VsbGluZ1BsYW5JbmZvKTtcclxuICAgICAgICAgICAgaWYoYXZhaWxhYmxlUGxhbnMpe1xyXG4gICAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRQbGFuID0gYXZhaWxhYmxlUGxhbnMuZmluZChcclxuICAgICAgICAgICAgICAgIHBsYW4gPT4gcGxhbi5uYW1lID09PSBhY3RpdmVTZWxsaW5nUGxhbk5hbWVcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBpZiAobWF0Y2hlZFBsYW4pIHtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSAkbGluZUl0ZW0uZGF0YXNldC5rZXk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBxdWFudGl0eSA9IHBhcnNlSW50KCRsaW5lSXRlbS5kYXRhc2V0LnF1YW50aXR5KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZihrZXkgJiYgcXVhbnRpdHkpe1xyXG4gICAgICAgICAgICAgICAgICB1cGRhdGVzLnJlZ3VsYXJfcHJvZHVjdHNba2V5XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBpZDoga2V5LFxyXG4gICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiBxdWFudGl0eSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxsaW5nX3BsYW46IG1hdGNoZWRQbGFuLmlkXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vZG8gd2UgaGF2ZSBhbnkgdXBkYXRlcyB0byBydW4/XHJcbiAgICBpZihPYmplY3Qua2V5cyh1cGRhdGVzLnJlZ3VsYXJfcHJvZHVjdHMpLmxlbmd0aCA+IDAgfHwgT2JqZWN0LmtleXModXBkYXRlcy5idW5kbGVzKS5sZW5ndGggPiAwKXtcclxuXHJcbiAgICAgIC8vU2hvdyBVSSBCbG9ja2VyIHRvIGluZGljYXRlIHRoYXQgc29tZXRoaW5nIGlzIGhhcHBlbmluZ1xyXG4gICAgICBpZigkdWlCbG9ja2VyKXtcclxuICAgICAgICB0aGlzLnNob3dVSUJsb2NrZXIoJHVpQmxvY2tlcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vRG8gcmVndWxhciBwcm9kdWN0cyBmaXJzdCBpZiBzZXQgLSB0aGV5IGNhbiBhbGwgYmUgZG9uZSBpbiBvbmUgZ29cclxuICAgICAgbGV0IGFsbFJlZ3VsYXJQcm9kdWN0UHJvbWlzZXMgPSBbXTtcclxuXHJcbiAgICAgIC8vQnVpbGQgdGhlIGxpc3Qgb2YgcHJvbWlzZXMgXHJcbiAgICAgIGlmKE9iamVjdC5rZXlzKHVwZGF0ZXMucmVndWxhcl9wcm9kdWN0cykubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgY29uc3QgcmVndWxhclByb21pc2VzID0gT2JqZWN0LnZhbHVlcyh1cGRhdGVzLnJlZ3VsYXJfcHJvZHVjdHMpLm1hcChpdGVtID0+XHJcbiAgICAgICAgICBmZXRjaCgnL2NhcnQvY2hhbmdlLmpzJywge1xyXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXHJcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eSxcclxuICAgICAgICAgICAgICBzZWxsaW5nX3BsYW46IGl0ZW0uc2VsbGluZ19wbGFuXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGFsbFJlZ3VsYXJQcm9kdWN0UHJvbWlzZXMucHVzaCguLi5yZWd1bGFyUHJvbWlzZXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0cnkge1xyXG5cclxuICAgICAgICAvL0lmIHRoZXJlJ3MgUmVndWxhciBQcm9kdWN0IFVwZGF0ZXMgLSBydW4gdGhvc2UgZmlyc3QgYW5kIHdhaXQgZm9yIHRoZW0gdG8gZmluaXNoIGJlZm9yZSBtb3Zpbmcgb25cclxuICAgICAgICBpZihhbGxSZWd1bGFyUHJvZHVjdFByb21pc2VzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoYWxsUmVndWxhclByb2R1Y3RQcm9taXNlcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL05vdywgaWYgdGhlcmUncyBidW5kbGVzIHRoYXQgbmVlZCB0byBoYXZlIHRoZWlyIHNlbGxpbmcgcGxhbnMgdXBkYXRlZCwgd2UgaGF2ZSB0byBkZWxldGUgYW5kIHJlLWFkZCB0aGVtIGFsbCBpbmRpdmlkdWFsbHkgICAgICBcclxuICAgICAgICBpZihPYmplY3Qua2V5cyh1cGRhdGVzLmJ1bmRsZXMpLmxlbmd0aCA+IDApe1xyXG5cclxuICAgICAgICAgIGZvciAoY29uc3QgYnVuZGxlX2luZm8gb2YgT2JqZWN0LnZhbHVlcyh1cGRhdGVzLmJ1bmRsZXMpKSB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBidW5kbGVJZCA9IGJ1bmRsZV9pbmZvLmJ1bmRsZV9pZDtcclxuICAgICAgICAgICAgY29uc3QgJGJ1bmRsZVByb2R1Y3RzID0gYnVuZGxlX2luZm8uYnVuZGxlX2xpbmVfaXRlbS5xdWVyeVNlbGVjdG9yQWxsKFwiLmNhcnRfX2J1bmRsZS1saW5lLWl0ZW1cIik7XHJcblxyXG4gICAgICAgICAgICBpZigkYnVuZGxlUHJvZHVjdHMubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgICAgICAgICAgIC8vR2V0IEJ1bmRsZSBTdHJ1Y3R1cmUgU2V0dXBcclxuICAgICAgICAgICAgICBjb25zdCBidW5kbGUgPSB0aGlzLnNldHVwQnVuZGxlT2JqZWN0KGJ1bmRsZUlkLCRidW5kbGVQcm9kdWN0cyk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgYnVuZGxlXHJcbiAgICAgICAgICAgICAgY29uc3QgZGVsZXRlUmVzdWx0ID0gYXdhaXQgdGhpcy5kZWxldGVCdW5kbGUoJGJ1bmRsZVByb2R1Y3RzKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYoIWRlbGV0ZVJlc3VsdC5vayl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBkZWxldGUgYnVuZGxlOiAnICsgYnVuZGxlSWQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIC8vIFJlLWFkZCB3aXRoIG5ldyBzZWxsaW5nIHBsYW5cclxuICAgICAgICAgICAgICBjb25zdCBhZGRSZXNwID0gYXdhaXQgdGhpcy5hZGROZXdCdW5kbGVUb0NhcnQoYnVuZGxlLCBidW5kbGVJZCwgYnVuZGxlX2luZm8uYnVuZGxlX3VybCwgYWN0aXZlU2VsbGluZ1BsYW5JZCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgICAgICBpZighYWRkUmVzcC5zZWN0aW9ucyl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZS1hZGQgYnVuZGxlOiAnICsgYnVuZGxlSWQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJjb3VsZCBub3QgZmluZCBidW5kbGUgcHJvZHVjdHMgdG8gZGVsZXRlIGFuZCByZS1hZGQgZHVyaW5nIHN5bmNocm9uaXNlIGNhbGxcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9ICAgICAgXHJcblxyXG4gICAgICAgIC8vT25jZSBhbGwgZmluaXNoZWQgLSByZXJlbmRlciB0aGUgY2FydCB3aXRoIHRoZSBuZXdseSB1cGRhdGVkIGl0ZW1zXHJcbiAgICAgICAgdGhpcy5mZXRjaEFuZFJlcmVuZGVyU2VjdGlvbnMoJHVpQmxvY2tlcik7XHJcblxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN5bmNocm9uaXppbmcgc2VsbGluZyBwbGFuczonLCBlcnJvcik7XHJcbiAgICAgICAgYWxlcnQoXCJFbmNvdW50ZXJlZCBhbiBpc3N1ZSB3aGVuIHVwZGF0aW5nIGNhcnQgaXRlbXMuXCIpO1xyXG4gICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVBZGRPblByb2R1Y3RzID0gYXN5bmMgKCRhZGRPbkxpbmVJdGVtcywgJHVpQmxvY2tlcikgPT4ge1xyXG5cclxuICAgIGxldCB1cGRhdGVzID0ge307XHJcbiAgICBcclxuICAgICRhZGRPbkxpbmVJdGVtcy5mb3JFYWNoKCgkYWRkT25MaW5lSXRlbSkgPT4ge1xyXG4gICAgICBpZigkYWRkT25MaW5lSXRlbS5kYXRhc2V0LmtleSl7XHJcbiAgICAgICAgdXBkYXRlc1skYWRkT25MaW5lSXRlbS5kYXRhc2V0LmtleV0gPSAwO1xyXG4gICAgICB9IFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYoT2JqZWN0LmtleXModXBkYXRlcykubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgICB0aGlzLnNob3dVSUJsb2NrZXIoJHVpQmxvY2tlcik7XHJcblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIC8vU2V0IGl0ZW1zIHRvIHplcm8gdG8gcmVtb3ZlIHRoZW1cclxuICAgICAgICBjb25zdCB1cGRhdGVSZXNwID0gYXdhaXQgZmV0Y2goJy9jYXJ0L3VwZGF0ZS5qcycsIHtcclxuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXHJcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHVwZGF0ZXMgfSlcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKCF1cGRhdGVSZXNwLm9rKSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZW1vdmUgYWRkLW9ucycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9HZXQgc2VjdGlvbnMgYW5kIHJlLXJlbmRlciBvbmx5IGlmIHVwZGF0ZSB3YXMgc3VjY2Vzc2Z1bFxyXG4gICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hBbmRSZXJlbmRlclNlY3Rpb25zKCR1aUJsb2NrZXIpO1xyXG4gICAgICAgIFxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlbW92aW5nIGFkZC1vbnM6JywgZXJyb3IpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuaGlkZVVJQmxvY2tlcigkdWlCbG9ja2VyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBhZGROZXdCdW5kbGVUb0NhcnQgPSBhc3luYyAoYnVuZGxlLGJ1bmRsZUlkLHVybCwkaW5Vc2VTZWxsaW5nUGxhbklkKSA9PiB7XHJcblxyXG4gICAgY29uc3QgZHluYW1pY0J1bmRsZURhdGEgPSBhd2FpdCB0aGlzLmdldER5bmFtaWNCdW5kbGUoKTtcclxuICAgIGNvbnN0IGxpbmVJdGVtcyA9IFtdOyAgICAgXHJcblxyXG4gICAgT2JqZWN0LmVudHJpZXMoYnVuZGxlLml0ZW1zKS5mb3JFYWNoKChbcHJvZHVjdElkLCBpdGVtXSkgPT4geyAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgY29uc3QgaXRlbURhdGEgPSB7XHJcbiAgICAgICAgICBpZDogcHJvZHVjdElkLFxyXG4gICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XHJcbiAgICAgICAgICAgICAgX2J1bmRsZV9pZDogYnVuZGxlSWQsXHJcbiAgICAgICAgICAgICAgX2R5bmFtaWNCb3hJbmRleDogYnVuZGxlSWQsXHJcbiAgICAgICAgICAgICAgX2R5bmFtaWNCb3hJZDogZHluYW1pY0J1bmRsZURhdGEuRHluYW1pY0JveC5ib3hJZCxcclxuICAgICAgICAgICAgICBfYnVuZGxlVHlwZTogdXJsLFxyXG4gICAgICAgICAgICAgIF9idW5kbGVVcmw6IHVybFxyXG4gICAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYoJGluVXNlU2VsbGluZ1BsYW5JZCl7XHJcbiAgICAgICAgaXRlbURhdGEuc2VsbGluZ19wbGFuID0gJGluVXNlU2VsbGluZ1BsYW5JZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGluZUl0ZW1zLnB1c2goaXRlbURhdGEpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdEpzb24gPSB7XHJcbiAgICAgIGl0ZW1zOiBsaW5lSXRlbXMsXHJcbiAgICAgIHNlY3Rpb25zOiB0aGlzLnNlY3Rpb25zLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBhZGRSZXNwID0gYXdhaXQgZmV0Y2goJy9jYXJ0L2FkZC5qcycsIHtcclxuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcclxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyZXF1ZXN0SnNvbilcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBhZGRSZXNwLmpzb24oKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUJ1bmRsZSA9IGFzeW5jICgkYnVuZGxlUHJvZHVjdHMpID0+IHtcclxuICAgIGxldCB1cGRhdGVzID0ge307XHJcbiAgICBcclxuICAgICRidW5kbGVQcm9kdWN0cy5mb3JFYWNoKCgkYnVuZGxlUHJvZHVjdCkgPT4ge1xyXG4gICAgICB1cGRhdGVzWyRidW5kbGVQcm9kdWN0LmRhdGFzZXQua2V5XSA9IDA7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB1cGRhdGVSZXNwID0gYXdhaXQgZmV0Y2goJy9jYXJ0L3VwZGF0ZS5qcycsIHtcclxuICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxyXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHVwZGF0ZXMgfSlcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBhd2FpdCB1cGRhdGVSZXNwO1xyXG4gIH1cclxuXHJcbiAgc2V0dXBCdW5kbGVPYmplY3QgPSAoYnVuZGxlSWQsJGJ1bmRsZVByb2R1Y3RzKSA9PiB7XHJcbiAgICBsZXQgYnVuZGxlID0ge1xyXG4gICAgICAgIGJ1bmRsZUlkOiBidW5kbGVJZCxcclxuICAgICAgICBlZGl0aW5nX2J1bmRsZTp0cnVlLFxyXG4gICAgICAgIGl0ZW1zOiB7fVxyXG4gICAgfTtcclxuXHJcbiAgICAkYnVuZGxlUHJvZHVjdHMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgY29uc3QgcHJvZHVjdElkID0gaXRlbS5kYXRhc2V0LmlkO1xyXG4gICAgICBjb25zdCBwcm9kdWN0VGl0bGUgPSBpdGVtLmRhdGFzZXQudGl0bGU7XHJcbiAgICAgIGNvbnN0IHByb2R1Y3RQcmljZSA9IHBhcnNlRmxvYXQoaXRlbS5kYXRhc2V0LnByaWNlKTtcclxuICAgICAgY29uc3QgcHJvZHVjdFByaWNlU3RyaW5nID0gaXRlbS5kYXRhc2V0LnByaWNlU3RyaW5nO1xyXG4gICAgICBjb25zdCBjb21wYXJlUHJvZHVjdFByaWNlID0gcGFyc2VGbG9hdChpdGVtLmRhdGFzZXQuY29tcGFyZVByaWNlKTtcclxuICAgICAgY29uc3QgY29tcGFyZVByb2R1Y3RQcmljZVN0cmluZyA9IGl0ZW0uZGF0YXNldC5jb21wYXJlUHJpY2VTdHJpbmc7XHJcbiAgICAgIGNvbnN0IHByb2R1Y3RJbWFnZSA9IGl0ZW0uZGF0YXNldC5pbWFnZTtcclxuICAgICAgY29uc3QgcXVhbnRpdHkgPSBwYXJzZUludChpdGVtLmRhdGFzZXQucXVhbnRpdHkpO1xyXG5cclxuICAgICAgYnVuZGxlLml0ZW1zW3Byb2R1Y3RJZF0gPSB7XHJcbiAgICAgICAgICB0aXRsZTogcHJvZHVjdFRpdGxlLFxyXG4gICAgICAgICAgcHJpY2U6IHByb2R1Y3RQcmljZSxcclxuICAgICAgICAgIHByaWNlU3RyaW5nOiBwcm9kdWN0UHJpY2VTdHJpbmcsXHJcbiAgICAgICAgICBjb21wYXJlUHJpY2U6IGNvbXBhcmVQcm9kdWN0UHJpY2UsXHJcbiAgICAgICAgICBjb21wYXJlUHJpY2VTdHJpbmc6IGNvbXBhcmVQcm9kdWN0UHJpY2VTdHJpbmcsXHJcbiAgICAgICAgICBpbWFnZTogcHJvZHVjdEltYWdlLFxyXG4gICAgICAgICAgcXVhbnRpdHk6IHF1YW50aXR5LFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGJ1bmRsZTtcclxuICB9XHJcblxyXG4gIGdldER5bmFtaWNCdW5kbGUgPSBhc3luYygpID0+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJ2h0dHBzOi8vYXBpLnNraW8uY29tL3N0b3JlZnJvbnQtaHR0cC9nZXQtZHluYW1pYy1ib3gnLCB7XHJcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBcInByb2R1Y3RQbGF0Zm9ybUlkXCI6IFwiMTUzNDU2ODU1NjE3MjdcIlxyXG4gICAgICAgIH0pXHJcbiAgICB9KTtcclxuICAgIFxyXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgc2hvd1VJQmxvY2tlciA9ICgkdWlCbG9ja2VyKSA9PiB7XHJcbiAgICAkdWlCbG9ja2VyLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgY29uc3QgbG9nb1N2ZyA9ICR1aUJsb2NrZXIucXVlcnlTZWxlY3RvcihcInN2Z1wiKTtcclxuICAgIGlmKGxvZ29Tdmcpe1xyXG4gICAgICBnc2FwLnNldChsb2dvU3ZnLCB7XHJcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcclxuICAgICAgICAgIHRvcDogJzUwJScsXHJcbiAgICAgICAgICBsZWZ0OiAnNTAlJyxcclxuICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJzUwJSA1MCUnLFxyXG4gICAgICAgICAgeFBlcmNlbnQ6IC01MCxcclxuICAgICAgICAgIHlQZXJjZW50OiAtNTBcclxuICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgIHRoaXMuc3BpblRpbWVsaW5lID0gZ3NhcC50aW1lbGluZSh7XHJcbiAgICAgICAgICByZXBlYXQ6IC0xLFxyXG4gICAgICB9KTtcclxuICAgICAgICAgICAgICBcclxuICAgICAgdGhpcy5zcGluVGltZWxpbmUudGltZVNjYWxlKDMuNCk7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLnNwaW5UaW1lbGluZS50byhsb2dvU3ZnLCB7XHJcbiAgICAgICAgICByb3RhdGlvbjogMzYwLFxyXG4gICAgICAgICAgZHVyYXRpb246IDgsXHJcbiAgICAgICAgICBlYXNlOiAnYmFjay5pbk91dCgxLjMpJ1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhpZGVVSUJsb2NrZXIgPSAoJHVpQmxvY2tlcikgPT4ge1xyXG4gICAgJHVpQmxvY2tlci5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgIGNvbnN0IGxvZ29TdmcgPSAkdWlCbG9ja2VyLnF1ZXJ5U2VsZWN0b3IoXCJzdmdcIik7XHJcbiAgICBpZihsb2dvU3ZnKXtcclxuXHJcbiAgICAgIC8vIEtpbGwgdGhlIHRpbWVsaW5lIGFuZCByZXNldCB0aGUgU1ZHXHJcbiAgICAgIGlmKHRoaXMuc3BpblRpbWVsaW5lKXtcclxuICAgICAgICAgIHRoaXMuc3BpblRpbWVsaW5lLmtpbGwoKTtcclxuICAgICAgICAgIGdzYXAuc2V0KGxvZ29TdmcsIHsgcm90YXRpb246IDAgfSk7XHJcbiAgICAgIH0gXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gcmUtcmVuZGVyXHJcbiAgcmVSZW5kZXJIZWFkZXIgPSAoJGhlYWRlciwgbmV3U2VjdGlvblRleHQpID0+IHtcclxuICAgIC8vIEdldCB0aGUgdGV4dCBvZiB0aGUgbmV3IHNlY3Rpb24gYW5kIHJlbmRlciBpdCB0byBhIGRpdiB0aGF0cyBub3QgaW4gdGhlIERPTVxyXG4gICAgY29uc3QgJG5ld1NlY3Rpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG4gICAgJG5ld1NlY3Rpb24uaW5uZXJIVE1MID0gbmV3U2VjdGlvblRleHQ7XHJcbiAgICBjb25zdCAkbmV3SGVhZGVyID0gJG5ld1NlY3Rpb24ucXVlcnlTZWxlY3RvcihcImhlYWRlci5oZWFkZXJcIik7XHJcblxyXG4gICAgLy8gU2V0IHRoZSBkZXNrdG9wIGNhcnQgbGluayB0byB0aGUgbmV3IHNlY3Rpb25zIGRlc2t0b3AgY2FydCBsaW5rXHJcbiAgICBjb25zdCAkY3VycmVudERlc2t0b3BDYXJ0TGluayA9ICRoZWFkZXIucXVlcnlTZWxlY3RvcihcclxuICAgICAgXCIubmF2YmFyX19kZXNrdG9wIC5kZXNrdG9wLWNhcnQtbGlua1wiXHJcbiAgICApO1xyXG4gICAgY29uc3QgJG5ld0Rlc2t0b3BDYXJ0TGluayA9ICRuZXdIZWFkZXIucXVlcnlTZWxlY3RvcihcclxuICAgICAgXCIubmF2YmFyX19kZXNrdG9wIC5kZXNrdG9wLWNhcnQtbGlua1wiXHJcbiAgICApO1xyXG4gICAgJGN1cnJlbnREZXNrdG9wQ2FydExpbmsuaW5uZXJIVE1MID0gJG5ld0Rlc2t0b3BDYXJ0TGluay5pbm5lckhUTUw7XHJcblxyXG4gICAgLy8gU2V0IHRoZSBtb2JpbGUgY2FydCBsaW5rIHRvIHRoZSBuZXcgc2VjdGlvbnMgbW9iaWxlIGNhcnQgbGlua1xyXG4gICAgY29uc3QgJGN1cnJlbnRNb2JpbGVDYXJ0TGluayA9ICRoZWFkZXIucXVlcnlTZWxlY3RvcihcclxuICAgICAgXCIubmF2YmFyX19tb2JpbGUgLmRlc2t0b3AtY2FydC1saW5rXCJcclxuICAgICk7XHJcbiAgICBjb25zdCAkbmV3TW9iaWxlQ2FydExpbmsgPSAkbmV3SGVhZGVyLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgIFwiLm5hdmJhcl9fbW9iaWxlIC5kZXNrdG9wLWNhcnQtbGlua1wiXHJcbiAgICApO1xyXG5cclxuICAgIGlmKCRjdXJyZW50TW9iaWxlQ2FydExpbmsgJiYgJG5ld01vYmlsZUNhcnRMaW5rKXtcclxuICAgICAgJGN1cnJlbnRNb2JpbGVDYXJ0TGluay5pbm5lckhUTUwgPSAkbmV3TW9iaWxlQ2FydExpbmsuaW5uZXJIVE1MO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNldCB0aGUgTW9iaWxlIE1lbnUgY2FydCBsaW5rIHRvIHRoZSBuZXcgc2VjdGlvbnMgbW9iaWxlIG1lbnUgY2FydCBsaW5rXHJcbiAgICBjb25zdCAkY3VycmVudE1vYmlsZU1lbnVDYXJ0TGluayA9ICRoZWFkZXIucXVlcnlTZWxlY3RvcihcclxuICAgICAgXCIubWVudV9fbW9iaWxlIC5tZW51X19jYXJ0XCJcclxuICAgICk7XHJcbiAgICBjb25zdCAkbmV3TW9iaWxlTWVudUNhcnRMaW5rID0gJG5ld0hlYWRlci5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICBcIi5tZW51X19tb2JpbGUgLm1lbnVfX2NhcnRcIlxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoJGN1cnJlbnRNb2JpbGVNZW51Q2FydExpbmspe1xyXG4gICAgICAkY3VycmVudE1vYmlsZU1lbnVDYXJ0TGluay5pbm5lckhUTUwgPSAkbmV3TW9iaWxlTWVudUNhcnRMaW5rLmlubmVySFRNTDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTZXQgdGhlIG5hdmJhciBjYXJ0IHBvcG91dCB0byB0aGUgbmV3IHNlY3Rpb25zIG5hdmJhciBjYXJ0IHBvcG91dFxyXG4gICAgY29uc3QgJGN1cnJlbnROYXZiYXJDYXJ0ID0gJGhlYWRlci5xdWVyeVNlbGVjdG9yKFwiLm5hdl9fYmFyLWNhcnRcIik7XHJcbiAgICBjb25zdCAkbmV3TmF2YmFyQ2FydCA9ICRuZXdIZWFkZXIucXVlcnlTZWxlY3RvcihcIi5uYXZfX2Jhci1jYXJ0XCIpO1xyXG5cclxuICAgIGlmICgkY3VycmVudE5hdmJhckNhcnQpe1xyXG4gICAgICAkY3VycmVudE5hdmJhckNhcnQuaW5uZXJIVE1MID0gJG5ld05hdmJhckNhcnQuaW5uZXJIVE1MO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGFkZExpbmVJdGVtRXZlbnRMaXN0ZW5lcnMgPSAoJGxpbmVJdGVtLCB0eXBlKSA9PiB7XHJcbiAgICBjb25zdCBrZXkgPSAkbGluZUl0ZW0uZGF0YXNldC5rZXk7XHJcbiAgICBjb25zdCBwcm9kdWN0SWQgPSAkbGluZUl0ZW0uZGF0YXNldC5wcm9kdWN0SWQ7XHJcbiAgICBjb25zdCB2YXJpYW50SWQgPSAkbGluZUl0ZW0uZGF0YXNldC52YXJpYW50SWQ7XHJcbiAgICBjb25zdCBzZWxsaW5nUGxhbklkID0gJGxpbmVJdGVtLmRhdGFzZXQuc2VsbGluZ1BsYW5JZDtcclxuICAgIGNvbnN0IHF1YW50aXR5ID0gJGxpbmVJdGVtLmRhdGFzZXQucXVhbnRpdHk7XHJcblxyXG4gICAgY29uc3QgJGxpbmVJdGVtUXVhbnRpdHlzID0gJGxpbmVJdGVtLnF1ZXJ5U2VsZWN0b3JBbGwoXCIucHJvZHVjdC1xdWFudGl0eS1zZWxlY3RvclwiKTtcclxuXHJcbiAgICAvLyBMb29wIHRocm91Z2ggdGhlIGxpbmUgaXRlbXMgcXVhbnRpdHkgY29udHJvbGxzIGFuZCBhZGQgdGhlIGV2ZW50IGxpc3RlbmVyc1xyXG4gICAgaWYoJGxpbmVJdGVtUXVhbnRpdHlzLmxlbmd0aCA+IDApe1xyXG5cclxuICAgICAgJGxpbmVJdGVtUXVhbnRpdHlzLmZvckVhY2goKCRsaW5lSXRlbVF1YW50aXR5KSA9PiB7XHJcblxyXG4gICAgICAgIGNvbnN0ICRsaW5lSXRlbVF1YW50aXR5RGVjcmVhc2UgPSAkbGluZUl0ZW1RdWFudGl0eS5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtcXVhbnRpdHlfX2RlY3JlYXNlXCIpO1xyXG4gICAgICAgIGNvbnN0ICRsaW5lSXRlbVF1YW50aXR5VmFsdWUgPSAkbGluZUl0ZW1RdWFudGl0eS5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtcXVhbnRpdHlcIik7XHJcbiAgICAgICAgY29uc3QgJGxpbmVJdGVtUXVhbnRpdHlJbmNyZWFzZSA9ICRsaW5lSXRlbVF1YW50aXR5LnF1ZXJ5U2VsZWN0b3IoXCIucHJvZHVjdC1xdWFudGl0eV9faW5jcmVhc2VcIik7XHJcblxyXG4gICAgICAgIC8vIEFkZCB0aGUgZGVjcmVhc2UgZXZldG4gbGlzdGVuZXJzXHJcbiAgICAgICAgJGxpbmVJdGVtUXVhbnRpdHlEZWNyZWFzZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgYXN5bmMgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHF1YW50aXR5ID0gcGFyc2VJbnQoJGxpbmVJdGVtUXVhbnRpdHlWYWx1ZS50ZXh0Q29udGVudCk7XHJcbiAgICAgICAgICBjb25zdCBuZXdRdHkgPSBwYXJzZUludChxdWFudGl0eSkgLSAxO1xyXG5cclxuICAgICAgICAgIC8vUGF1c2UgTGluZSBJdGVtIFF1YW50aXR5IHRvIHByZXZlbnQgbXVsdGlwbGUgY2xpY2tzXHJcbiAgICAgICAgICB0aGlzLnBhdXNlUXR5QnRuKCRsaW5lSXRlbVF1YW50aXR5RGVjcmVhc2UsJGxpbmVJdGVtUXVhbnRpdHlWYWx1ZSwkbGluZUl0ZW1RdWFudGl0eUluY3JlYXNlKTtcclxuXHJcbiAgICAgICAgICBpZiAocXVhbnRpdHkgPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlY3JlYXNlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnVwZGF0ZUxpbmVJdGVtUXVhbnRpdHkoa2V5LG5ld1F0eSk7XHJcbiAgICAgICAgICAgIHRoaXMucmVSZW5kZXJTZWN0aW9ucyhkZWNyZWFzZVJlc3BvbnNlLnNlY3Rpb25zKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy9hZGQgdGhlIGluY3JlYXNlIGV2ZW50IGxpc3RlbmVyc1xyXG4gICAgICAgICRsaW5lSXRlbVF1YW50aXR5SW5jcmVhc2UuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGFzeW5jIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICAvL1BhdXNlIExpbmUgSXRlbSBRdWFudGl0eSB0byBwcmV2ZW50IG11bHRpcGxlIGNsaWNrc1xyXG4gICAgICAgICAgY29uc3QgbmV3UXR5ID0gcGFyc2VJbnQoJGxpbmVJdGVtUXVhbnRpdHlWYWx1ZS50ZXh0Q29udGVudCkgKyAxO1xyXG5cclxuICAgICAgICAgIHRoaXMucGF1c2VRdHlCdG4oJGxpbmVJdGVtUXVhbnRpdHlEZWNyZWFzZSwkbGluZUl0ZW1RdWFudGl0eVZhbHVlLCRsaW5lSXRlbVF1YW50aXR5SW5jcmVhc2UpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGluY3JlYXNlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnVwZGF0ZUxpbmVJdGVtUXVhbnRpdHkoa2V5LG5ld1F0eSk7XHJcbiAgICAgICAgICB0aGlzLnJlUmVuZGVyU2VjdGlvbnMoaW5jcmVhc2VSZXNwb25zZS5zZWN0aW9ucyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgbGluZSBpdGVtcyByZW1vdmUgYnV0dG9ucyBhbmQgYWRkIHRoZSBldmVudCBsaXN0ZW5lcnNcclxuICAgIGNvbnN0ICRsaW5lSXRlbVJlbW92ZSA9ICRsaW5lSXRlbS5xdWVyeVNlbGVjdG9yQWxsKFwiLmNhcnRfX2xpbmUtaXRlbS1yZW1vdmVcIik7XHJcbiAgICAkbGluZUl0ZW1SZW1vdmUuZm9yRWFjaCgoJGVsZW1lbnQpID0+IHtcclxuICAgICAgJGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGFzeW5jIChldmVudCkgPT4ge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlbW92ZUxpbmVJdGVtRnJvbUNhcnQoa2V5KTtcclxuICAgICAgICB0aGlzLnJlUmVuZGVyU2VjdGlvbnMocmVtb3ZlUmVzcG9uc2Uuc2VjdGlvbnMpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8qXHJcblxyXG4gICAgLy8gQWRkIHRoZSBvbmV0aW1lIGFuZCBzdWJzY3JpcHRpb24gYnV0dG9uIGV2ZW50IGxpc3RlbmVyc1xyXG4gICAgY29uc3QgJGxpbmVJdGVtUHVyY2hhc2VUeXBlcyA9ICRsaW5lSXRlbS5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICBcIi5saW5lLWl0ZW1fX3B1cmNoYXNlLXR5cGVzXCJcclxuICAgICk7XHJcbiAgICBpZiAoJGxpbmVJdGVtUHVyY2hhc2VUeXBlcykge1xyXG4gICAgICBjb25zdCAkb25ldGltZUJ1dHRvbiA9ICRsaW5lSXRlbVB1cmNoYXNlVHlwZXMucXVlcnlTZWxlY3RvcihcclxuICAgICAgICBcIi5wdXJjaGFzZS10eXBlX19idXR0b24ucHVyY2hhc2UtdHlwZV9fYnV0dG9uLS1vbmV0aW1lXCJcclxuICAgICAgKTtcclxuICAgICAgaWYgKCEkb25ldGltZUJ1dHRvbi5jbGFzc0xpc3QuY29udGFpbnMoXCJwdXJjaGFzZS10eXBlX19idXR0b24tLWFjdGl2ZVwiKSkge1xyXG4gICAgICAgICRvbmV0aW1lQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcclxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZVN1YnNjcmlwdGlvbihrZXksIHZhcmlhbnRJZCwgcXVhbnRpdHkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCAkc3Vic2NyaXB0aW9uQnV0dG9uID0gJGxpbmVJdGVtUHVyY2hhc2VUeXBlcy5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgIFwiLnB1cmNoYXNlLXR5cGVfX2J1dHRvbi5wdXJjaGFzZS10eXBlX19idXR0b24tLXN1YnNjcmlwdGlvblwiXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgISRzdWJzY3JpcHRpb25CdXR0b24uY2xhc3NMaXN0LmNvbnRhaW5zKFwicHVyY2hhc2UtdHlwZV9fYnV0dG9uLS1hY3RpdmVcIilcclxuICAgICAgKSB7XHJcbiAgICAgICAgJHN1YnNjcmlwdGlvbkJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgdGhpcy5hZGRTdWJzY3JpcHRpb24oa2V5LCB2YXJpYW50SWQsIHF1YW50aXR5LCBzZWxsaW5nUGxhbklkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCB0aGUgc3Vic2NyaXB0aW9uIHBsYW4gc2VsZWN0IGV2ZW50IGxpc3RlbmVyc1xyXG4gICAgY29uc3QgJHN1YnNjcmlwdGlvblNlbGVjdCA9ICRsaW5lSXRlbS5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICBcIi5saW5lLWl0ZW1fX3N1YnNjcmlwdGlvbi1zZWxlY3RcIlxyXG4gICAgKTtcclxuICAgIGlmICgkc3Vic2NyaXB0aW9uU2VsZWN0KSB7XHJcbiAgICAgICRzdWJzY3JpcHRpb25TZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCAoZXZlbnQpID0+IHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuYWRkU3Vic2NyaXB0aW9uKGtleSwgdmFyaWFudElkLCBxdWFudGl0eSwgZXZlbnQudGFyZ2V0LnZhbHVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAqL1xyXG4gIH07XHJcblxyXG4gIHNldFVwQ2FydFRlbXBsYXRlID0gKCRjYXJ0VGVtcGxhdGUpID0+IHtcclxuICAgIC8qIFxyXG4gICAgICBGaW5kIHRoZSBsaW5lIGl0ZW1zIGluIHRoZSBjYXJ0IHRlbXBsYXRlIGFuZCBpZiB0aGV5IGV4aXN0IGxvb3AgdGhyb3VnaCBhbmRcclxuICAgICAgYWRkIHRoZSBldmVudHMgbGlzdG5lcnNcclxuICAgICovXHJcblxyXG4gICAgY29uc3QgJGxpbmVJdGVtc0NvbnRhaW5lciA9ICRjYXJ0VGVtcGxhdGUucXVlcnlTZWxlY3RvcihcIi5jYXJ0LXRlbXBsYXRlX19saW5lLWl0ZW1zXCIpO1xyXG5cclxuICAgIGlmICgkbGluZUl0ZW1zQ29udGFpbmVyKSB7XHJcbiAgICAgIGNvbnN0ICRsaW5lSXRlbXMgPSAkbGluZUl0ZW1zQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuY2FydC10ZW1wbGF0ZV9fbGluZS1pdGVtXCIpO1xyXG4gICAgICBjb25zdCAkYnVuZGxlTGluZUl0ZW1zID0gJGxpbmVJdGVtc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiLmNhcnRfYnVuZGxlLWl0ZW1cIik7XHJcbiAgICAgIGNvbnN0ICRhZGRPbkxpbmVJdGVtcyA9ICRsaW5lSXRlbXNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIi5jYXJ0LXRlbXBsYXRlX19hZGRvbi1pdGVtXCIpOyBcclxuICAgICAgY29uc3QgJHVpQmxvY2tlciA9ICRjYXJ0VGVtcGxhdGUucXVlcnlTZWxlY3RvcihcIi5jYXJ0LXRlbXBsYXRlX191aS1ibG9ja2VyXCIpO1xyXG5cclxuXHJcbiAgICAgIC8vUmVxdWlyZWQgZm9yIEJ1bmRsZSBMaW5lIEl0ZW1zXHJcbiAgICAgIGNvbnN0IGFjdGl2ZVNlbGxpbmdQbGFuSWQgPSAkbGluZUl0ZW1zQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuY2FydC10ZW1wbGF0ZV9fbGluZS1idW5kbGUtaW5mb1wiKS5kYXRhc2V0LmluVXNlU2VsbGluZ1BsYW5JZDtcclxuICAgICAgY29uc3QgYWN0aXZlU2VsbGluZ1BsYW5OYW1lID0gJGxpbmVJdGVtc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmNhcnQtdGVtcGxhdGVfX2xpbmUtYnVuZGxlLWluZm9cIikuZGF0YXNldC5pblVzZVNlbGxpbmdQbGFuTmFtZTtcclxuXHJcblxyXG4gICAgICAvKlxyXG4gICAgICAgIEJlZm9yZSB3ZSByZW5kZXIgZnVuY3Rpb25hbGl0eVxyXG5cclxuICAgICAgICBDaGVjayBmb3IgdGhlIGZvbGxvd2luZzpcclxuICAgICAgICAtIERvIHdlIGhhdmUgYSBCdWlsZCBhIEJ1bmRsZSBQcm9kdWN0IGluIHRoZSBjYXJ0P1xyXG4gICAgICAgIC0gRG8gd2UgaGF2ZSBhbnkgQWRkIE9uIFByb2R1Y3RzIGluIHRoZSBjYXJ0P1xyXG4gICAgICAgIElmIG5vIGJ1aWxkIGEgYnVuZGxlLCBidXQgdGhlcmUgYXJlIEFkZCBPbiBQcm9kdWN0cyAtIHJlbW92ZSB0aGUgQWRkIE9ucywgcmVidWlsZCB0aGUgY2FydC5cclxuXHJcbiAgICAgICAgSWYgdGhlcmUgaXMgYSBCdW5kbGUgVHlwZSBQcm9kdWN0IC0gRWl0aGVyIGEgQnVpbGQgYSBCdW5kbGUgT1IgYSBQcmUgQnVpbHQgQnVuZGxlIG9mIEZyb3plbiBCaXRzLCByZW5kZXIgdGhlIERlbGl2ZXJ5IG9wdGlvbnNcclxuICAgICAgICBJZiB0aGVyZSBpcyBhIEJ1aWxkIGEgQnVuZGxlIHRoYXQgaGFzIGEgc2VsbGluZyBwbGFuICBvciB0aGUgUHJlIEJ1aWx0IEJ1bmRsZXMgdGhhdCBoYXZlIGEgU2VsbGluZyBwbGFuIHNldCBnZXQgYWRkZWQgdG8gY2FydCAtIFJlbmRlciB0aGUgU3Vic2NyaXB0aW9uIEZyZXF1ZW5jeS4gVGhlc2UgYXJlIHNldCB0byBhbHdheXMgYmUgc29sZCBhcyBhIHN1YnNjcmlwdGlvbiBpdGVtXHJcbiAgICAgICovXHJcblxyXG4gICAgICBsZXQgaXNCdWlsZEFCdW5kbGUgPSBmYWxzZTtcclxuICAgICAgbGV0IGlzQWRkT25zID0gZmFsc2U7XHJcbiAgICAgIFxyXG4gICAgICBpZigkYnVuZGxlTGluZUl0ZW1zLmxlbmd0aCA+IDApe1xyXG4gICAgICAgIGlzQnVpbGRBQnVuZGxlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgaWYoJGFkZE9uTGluZUl0ZW1zLmxlbmd0aCA+IDApe1xyXG5cclxuICAgICAgICBpZighaXNCdWlsZEFCdW5kbGUpe1xyXG4gICAgICAgICAgLy9ObyBCdWlsZCBhIEJ1bmRsZSwgcmVtb3ZlIGFueSBhZGQgb24gcHJvZHVjdHMgZnJvbSB0aGUgb3JkZXJcclxuICAgICAgICAgIHRoaXMucmVtb3ZlQWRkT25Qcm9kdWN0cygkYWRkT25MaW5lSXRlbXMsJHVpQmxvY2tlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvKlxyXG4gICAgICAgIEhhbmRsZSBTdWJzY3JpcHRpb24gRGF0YSBNaXNtYXRjaGVzIFxyXG5cclxuICAgICAgICAtIFByZSBCdWlsdCBCdW5kbGVzIHVzZSBhIGRpZmZlcmVudCBzZWxsaW5nIHBsYW4gdG8gdGhlIGJ1aWxkIGEgYm94XHJcbiAgICAgICAgLSBTbyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGV5J3JlIGFsbCBvbiB0aGUgc2FtZSBwbGFuIGJ5IGNvbXBhcmluZyB0aGUgTmFtZSBvZiB0aGUgc2VsbGluZyBwbGFuXHJcbiAgICAgICAgLSBUaGUgXCJhY3RpdmVcIiBzZWxsaW5nIHBsYW4gaXMgbGlua2VkIGluIHRoZSAkbGluZUl0ZW1zQ29udGFpbmVyXHJcbiAgICAgICAgLSBTbyAtIG9uIGxvYWQsIGVuc3VyZSBldmVyeSBwcm9kdWN0IHRoYXQgaXMgYSBzdWJzY3JpcHRpb24gcHJvZHVjdCBpcyB1c2luZyB0aGUgXCJjb3JyZWN0XCIgc2VsbGluZyBwbGFuXHJcbiAgICAgICAgLSBJZiB3ZSBmaW5kIHRoZXJlJ3MgYSBtaXNzLW1hdGNoLCB1cGRhdGUgYWxsIHRoYXQgYXJlIGluY29ycmVjdFxyXG4gICAgICAqL1xyXG5cclxuICAgICAgbGV0IGFsbFNlbGxpbmdQbGFuc1N5bmNlZCA9IHRydWU7XHJcblxyXG4gICAgICBpZigkYnVuZGxlTGluZUl0ZW1zLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICRidW5kbGVMaW5lSXRlbXMuZm9yRWFjaCgoJGJ1bmRsZUxpbmVJdGVtKSA9PiB7XHJcbiAgICAgICAgICBpZigkYnVuZGxlTGluZUl0ZW0uZGF0YXNldC5zZWxsaW5nUGxhbk5hbWUpe1xyXG4gICAgICAgICAgICBpZigkYnVuZGxlTGluZUl0ZW0uZGF0YXNldC5zZWxsaW5nUGxhbk5hbWUgIT0gYWN0aXZlU2VsbGluZ1BsYW5OYW1lKXtcclxuICAgICAgICAgICAgICBhbGxTZWxsaW5nUGxhbnNTeW5jZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihhbGxTZWxsaW5nUGxhbnNTeW5jZWQpe1xyXG4gICAgICAgIGlmKCRsaW5lSXRlbXMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAkbGluZUl0ZW1zLmZvckVhY2goKCRsaW5lSXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBpZigkbGluZUl0ZW0uZGF0YXNldC5zZWxsaW5nUGxhbk5hbWUpe1xyXG4gICAgICAgICAgICAgIGlmKCRsaW5lSXRlbS5kYXRhc2V0LnNlbGxpbmdQbGFuTmFtZSAhPSBhY3RpdmVTZWxsaW5nUGxhbk5hbWUpe1xyXG4gICAgICAgICAgICAgICAgYWxsU2VsbGluZ1BsYW5zU3luY2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKCFhbGxTZWxsaW5nUGxhbnNTeW5jZWQpe1xyXG4gICAgICAgIC8vVGltZSB0byB1cGRhdGUgdGhlbSBhbGwgc28gdGhleSdyZSBhbGwgY29ycmVjdFxyXG4gICAgICAgIHRoaXMuc3luY2hyb25pc2VTZWxsaW5nUGxhbnNBY3Jvc3NMaW5lSXRlbXMoYWN0aXZlU2VsbGluZ1BsYW5JZCxhY3RpdmVTZWxsaW5nUGxhbk5hbWUsJGJ1bmRsZUxpbmVJdGVtcywkbGluZUl0ZW1zLCR1aUJsb2NrZXIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAkbGluZUl0ZW1zLmZvckVhY2goKCRsaW5lSXRlbSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYWRkTGluZUl0ZW1FdmVudExpc3RlbmVycygkbGluZUl0ZW0sIFwidGVtcGxhdGVcIik7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy9CdW5kbGUgTGluZSBJdGVtIEZ1bmN0aW9uYWxpdHlcclxuICAgICAgaWYoJGJ1bmRsZUxpbmVJdGVtcy5sZW5ndGggPiAwKXtcclxuXHJcbiAgICAgICAgJGJ1bmRsZUxpbmVJdGVtcy5mb3JFYWNoKCgkYnVuZGxlTGluZUl0ZW0pID0+IHtcclxuXHJcbiAgICAgICAgICAvL1NldCBWYXJpYWJsZXNcclxuICAgICAgICAgIGNvbnN0ICRidW5kbGVQcm9kdWN0cyA9ICRidW5kbGVMaW5lSXRlbS5xdWVyeVNlbGVjdG9yQWxsKFwiLmNhcnRfX2J1bmRsZS1saW5lLWl0ZW1cIik7ICAgICAgICBcclxuICAgICAgICAgIGNvbnN0ICRkZWxldGVCdW5kbGVCdXR0b24gPSAkYnVuZGxlTGluZUl0ZW0ucXVlcnlTZWxlY3RvcihcIi5jYXJ0X19idW5kbGUtaXRlbS1yZW1vdmVcIik7XHJcbiAgICAgICAgICBjb25zdCAkZWRpdCA9ICRidW5kbGVMaW5lSXRlbS5xdWVyeVNlbGVjdG9yKFwiLmNhcnQtdGVtcGxhdGVfX2VkaXQtYnVuZGxlLWxpbmtcIik7XHJcbiAgICAgICAgICBjb25zdCAkdXBncmFkZVRvU3Vic2NyaXB0aW9ucyA9ICRidW5kbGVMaW5lSXRlbS5xdWVyeVNlbGVjdG9yQWxsKFwiLmNhcnQtb3RwLXN1YnNjcmliZS1idXR0b25cIik7XHJcblxyXG4gICAgICAgICAgLy9EZWxldGUgQnVuZGxlIEZ1bmN0aW9uYWxpdHlcclxuICAgICAgICAgIGlmKCRkZWxldGVCdW5kbGVCdXR0b24pe1xyXG5cclxuICAgICAgICAgICAgJGRlbGV0ZUJ1bmRsZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgYXN5bmMgKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAvL1JlbmRlciB0aGUgVUkgQmxvY2tlclxyXG4gICAgICAgICAgICAgIGlmKCR1aUJsb2NrZXIpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93VUlCbG9ja2VyKCR1aUJsb2NrZXIpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgLy9EZWxldGUgdGhlIGJ1bmRsZVxyXG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZGVsZXRlQnVuZGxlKCRidW5kbGVQcm9kdWN0cyk7XHJcbiAgICAgICAgICAgICAgaWYocmVzdWx0Lm9rKXtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9HZXQgc2VjdGlvbnMgYW5kIHJlLXJlbmRlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEFuZFJlcmVuZGVyU2VjdGlvbnMoJHVpQmxvY2tlcik7XHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQuanNvbigpKTtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KFwiRW5jb3VudGVyZWQgYW4gaXNzdWUgd2hlbiBkZWxldGluZyBhIGJ1bmRsZSBmcm9tIHRoZSBjYXJ0LlwiKTtcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7ICAgICAgICBcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvL0VkaXQgQnVuZGxlIEZ1bmN0aW9uYWxpdHlcclxuICAgICAgICAgIGlmKCRlZGl0KXtcclxuICAgICAgICAgICAgJGVkaXQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGFzeW5jIChlKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICAgICAgLy9CZWZvcmUgd2Ugc2V0IHVwIHRoZSBidW5kbGUgZm9yIGVkaXRpbmcsIGlzIHRoZXJlIGEgaGFsZiB3YXkgY29tcGxldGVkIG9uZT8gXHJcbiAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdCdW5kbGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYnVuZGxlJyk7XHJcbiAgICAgICAgICAgICAgaWYoZXhpc3RpbmdCdW5kbGUpe1xyXG5cclxuICAgICAgICAgICAgICAgIC8vT25seSBzdG9yZSB0aGlzIGFzIGEgYmFja3VwIGlmIGl0J3MgTk9UIGFuIEVkaXQgYnVuZGxlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdG9yYWdlQnVuZGxlID0gSlNPTi5wYXJzZShleGlzdGluZ0J1bmRsZSk7XHJcbiAgICAgICAgICAgICAgICBpZighc3RvcmFnZUJ1bmRsZS5lZGl0aW5nX2J1bmRsZSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvL1NhdmUgYXMgYSBiYWNrdXAgZm9yIGxhdGVyIC0gdGhpcyBpcywgYW5kIGFsd2F5cyBzaG91bGQgYmUsIGFuIHVuZmluaXNoZWQgb25lXHJcbiAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzdG9yZWRfYnVuZGxlJyxleGlzdGluZ0J1bmRsZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAvLyBjcmVhdGUgYnVuZGxlIG9iamVjdFxyXG4gICAgICAgICAgICAgIGNvbnN0IGJ1bmRsZUlkID0gJGJ1bmRsZUxpbmVJdGVtLmRhdGFzZXQuYnVuZGxlSWQ7XHJcbiAgICAgICAgICAgICAgY29uc3QgYnVuZGxlID0gdGhpcy5zZXR1cEJ1bmRsZU9iamVjdChidW5kbGVJZCwkYnVuZGxlUHJvZHVjdHMpOyAgICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBidW5kbGUgaW4gbG9jYWxTdG9yYWdlXHJcbiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJidW5kbGVcIiwgSlNPTi5zdHJpbmdpZnkoYnVuZGxlKSk7XHJcblxyXG4gICAgICAgICAgICAgIC8vTmF2aWdhdGUgdG8gdGhlIEVkaXQgdmVyc2lvbiBvZiB0aGUgYnVuZGxlIGJ1aWxkZXJcclxuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGUudGFyZ2V0LmhyZWY7XHJcbiAgICAgICAgICAgIH0pOyAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvL1wiVXBncmFkZVwiIFRvIFN1YnNjcmlwdGlvbiAtIERlbGV0ZSB0aGUgQnVuZGxlIGFuZCBzdGFydCBhZ2FpbiBidXQgd2l0aCBhIHNlbGxpbmcgcGxhbiBhdHRhY2hlZFxyXG4gICAgICAgICAgaWYoJHVwZ3JhZGVUb1N1YnNjcmlwdGlvbnMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICR1cGdyYWRlVG9TdWJzY3JpcHRpb25zLmZvckVhY2goKCR1cGdyYWRlVG9TdWJzY3JpcHRpb24pID0+IHtcclxuICAgICAgICAgICAgICBpZihhY3RpdmVTZWxsaW5nUGxhbklkKXtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9CdWlsZCB0aGUgQnVuZGxlIFN0cnVjdHVyZSwgZGVsZXRlIGl0IGZyb20gdGhlIGNhcnQgYW5kIHRoZW4gcmUtYWRkIGl0XHJcbiAgICAgICAgICAgICAgICAkdXBncmFkZVRvU3Vic2NyaXB0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBhc3luYyAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgLy9TaG93IHRoZSBVSSBCbG9ja2VyIGFzIHRoaXMgaXMgYSBsZW5ndGh5IHByb2Nlc3NcclxuICAgICAgICAgICAgICAgICAgaWYoJHVpQmxvY2tlcil7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93VUlCbG9ja2VyKCR1aUJsb2NrZXIpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAvL1BhcnQgT25lIC0gQnVpbGQgdGhlIEJ1bmRsZSBDb250ZW50c1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBidW5kbGVJZCA9ICRidW5kbGVMaW5lSXRlbS5kYXRhc2V0LmJ1bmRsZUlkO1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBidW5kbGUgPSB0aGlzLnNldHVwQnVuZGxlT2JqZWN0KGJ1bmRsZUlkLCRidW5kbGVQcm9kdWN0cyk7ICAgICAgICAgICAgXHJcblxyXG4gICAgICAgICAgICAgICAgICAvL1BhcnQgVHdvIC0gRGVsZXRlIFRoZSBCdW5kbGVcclxuICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5kZWxldGVCdW5kbGUoJGJ1bmRsZVByb2R1Y3RzKTtcclxuICAgICAgICAgICAgICAgICAgaWYocmVzdWx0Lm9rKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9QYXJ0IFRocmVlIC0gcmUtYWRkIHRoZSBidW5kbGUgd2l0aCB0aGUgc2VsbGluZyBwbGFuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRkUmVzcCA9IGF3YWl0IHRoaXMuYWRkTmV3QnVuZGxlVG9DYXJ0KGJ1bmRsZSxidW5kbGVJZCwkYnVuZGxlTGluZUl0ZW0uZGF0YXNldC51cmwsYWN0aXZlU2VsbGluZ1BsYW5JZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoYWRkUmVzcC5zZWN0aW9ucyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlUmVuZGVyU2VjdGlvbnMoYWRkUmVzcC5zZWN0aW9ucyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgLy9SZW1vdmUgdGhlIGxvYWRpbmcgYW5pbWF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZigkdWlCbG9ja2VyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlVUlCbG9ja2VyKCR1aUJsb2NrZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0Lmpzb24oKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoXCJFbmNvdW50ZXJlZCBhbiBpc3N1ZSB3aGVuIHJlbW92aW5nIHRoZSBPbmUgVGltZSBQdXJjaGFzZSBCdW5kbGUgZnJvbSBjYXJ0LlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTsgICAgICAgICAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9BZGQgT24gRnVuY3Rpb25hbGl0eVxyXG4gICAgICBpZigkYWRkT25MaW5lSXRlbXMubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgICAgICRhZGRPbkxpbmVJdGVtcy5mb3JFYWNoKCgkYWRkT25MaW5lSXRlbSkgPT4ge1xyXG5cclxuICAgICAgICAgIC8vU2V0IHZhcmlhYmxlc1xyXG4gICAgICAgICAgY29uc3QgYWRkb25LZXkgPSAkYWRkT25MaW5lSXRlbS5kYXRhc2V0LmtleTtcclxuICAgICAgICAgIGNvbnN0IGFkZE9uUXVhbnRpdHkgPSAkYWRkT25MaW5lSXRlbS5kYXRhc2V0LnF1YW50aXR5O1xyXG4gICAgICAgICAgY29uc3QgYWRkT252YXJpYW50SWQgPSAkYWRkT25MaW5lSXRlbS5kYXRhc2V0LnZhcmlhbnRJZDtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy9maW5kIFBsdXMgYW5kIE1pbnVzIGJ1dHRvbnNcclxuICAgICAgICAgIGNvbnN0ICRwcm9kdWN0Q29udHJvbHMgPSAkYWRkT25MaW5lSXRlbS5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtY29udHJvbHNcIik7XHJcbiAgICAgICAgICBpZigkcHJvZHVjdENvbnRyb2xzKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0ICRhZGRvbkRlY3JlYXNlID0gJHByb2R1Y3RDb250cm9scy5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtcXVhbnRpdHlfX2RlY3JlYXNlXCIpO1xyXG4gICAgICAgICAgICBjb25zdCAkYWRkb25JbmNyZWFzZSA9ICRwcm9kdWN0Q29udHJvbHMucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LXF1YW50aXR5X19pbmNyZWFzZVwiKTtcclxuICAgICAgICAgICAgY29uc3QgJHByb2R1Y3RRdHkgPSAkcHJvZHVjdENvbnRyb2xzLnF1ZXJ5U2VsZWN0b3IoXCIucHJvZHVjdC1xdWFudGl0eS1jb250YWluZXIgLnByb2R1Y3QtcXVhbnRpdHlcIik7ICBcclxuXHJcbiAgICAgICAgICAgIGlmKCRhZGRvbkRlY3JlYXNlKXsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAkYWRkb25EZWNyZWFzZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgYXN5bmMgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXVzZUFkZG9uUXR5QnRuKCRwcm9kdWN0Q29udHJvbHMsJGFkZG9uRGVjcmVhc2UsJHByb2R1Y3RRdHksJGFkZG9uSW5jcmVhc2UpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFkZE9uUXVhbnRpdHkgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRlY3JlYXNlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnVwZGF0ZUxpbmVJdGVtUXVhbnRpdHkoYWRkb25LZXkscGFyc2VJbnQoYWRkT25RdWFudGl0eSkgLSAxKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5yZVJlbmRlclNlY3Rpb25zKGRlY3JlYXNlUmVzcG9uc2Uuc2VjdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZigkYWRkb25JbmNyZWFzZSl7XHJcbiAgICAgICAgICAgICAgJGFkZG9uSW5jcmVhc2UuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGFzeW5jIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXVzZUFkZG9uUXR5QnRuKCRwcm9kdWN0Q29udHJvbHMsJGFkZG9uRGVjcmVhc2UsJHByb2R1Y3RRdHksJGFkZG9uSW5jcmVhc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vSWYgdGhpcyBpcyBhbHJlYWR5IGluIGNhcnQsIHNpbXBseSBpbmNyZWFzZSBpdC4gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIGFkZCBpdFxyXG4gICAgICAgICAgICAgICAgaWYoYWRkT25RdWFudGl0eSA+IDAgJiYgYWRkb25LZXkpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgY29uc3QgaW5jcmVhc2VSZXNwb25zZSA9IGF3YWl0IHRoaXMudXBkYXRlTGluZUl0ZW1RdWFudGl0eShhZGRvbktleSxwYXJzZUludChhZGRPblF1YW50aXR5KSArIDEpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlUmVuZGVyU2VjdGlvbnMoaW5jcmVhc2VSZXNwb25zZS5zZWN0aW9ucyk7XHJcblxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvL0FkZCBhIE5ldyBpdGVtIHRvIGNhcnRcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtVG9DYXJ0KGFkZE9udmFyaWFudElkLCAxKTtcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNvdWxkIG5vdCBmaW5kIEFkZG9uIFByb2R1Y3QgQ29udHJvbHNcIik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCRhZGRPbkxpbmVJdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLypcclxuICAgICAgICBjb25zdCAkY2xlYXJDYXJ0cyA9ICRjYXJ0VGVtcGxhdGUucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICAgIFwiLmNhcnQtdGVtcGxhdGVfX2NsZWFyXCJcclxuICAgICAgICApO1xyXG4gICAgICAgICRjbGVhckNhcnRzLmZvckVhY2goKCRjbGVhckNhcnQpID0+IHtcclxuICAgICAgICAgICRjbGVhckNhcnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyQ2FydCgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICovICAgICAgICAgIFxyXG5cclxuICAgICAgLy8gU2VsbGluZyBQbGFuIFBpY2tlciAtIE9uIGNoYW5nZSwgbG9vcCB0aHJvdWdoIGFuZCB1cGRhdGUgYWxsIG9mIHRoZSBpdGVtcyBpbiB0aGUgY2FydCAtIG1heSBub3QgYmUgcHJlc2VudCBpZiBubyBzZWxsaW5nIHBsYW4gcHJvZHVjdHMgYXZhaWxhYmxlXHJcbiAgICAgIGNvbnN0ICRzZWxsaW5nUGxhblNlbGVjdGlvbkNvbnRhaW5lciA9ICRjYXJ0VGVtcGxhdGUucXVlcnlTZWxlY3RvcihcIi5zdWJzY3JpcHRpb24tZnJlcXVlbmN5LXNlbGVjdGlvblwiKTtcclxuICAgICAgaWYoJHNlbGxpbmdQbGFuU2VsZWN0aW9uQ29udGFpbmVyKXtcclxuXHJcbiAgICAgICAgLy9GaW5kIGFuZCBiaW5kIHRoZSBzZWxlY3QgbGlzdCAtIHRoaXMgd2lsbCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZVxyXG4gICAgICAgIGNvbnN0ICRzZWxsaW5nUGxhblNlbGVjdGlvbkNvbnRhaW5lclNlbGVjdCA9ICRzZWxsaW5nUGxhblNlbGVjdGlvbkNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwic2VsZWN0XCIpO1xyXG4gICAgICAgIGlmKCRzZWxsaW5nUGxhblNlbGVjdGlvbkNvbnRhaW5lclNlbGVjdCl7XHJcblxyXG4gICAgICAgICAgJHNlbGxpbmdQbGFuU2VsZWN0aW9uQ29udGFpbmVyU2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwoZSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoZS50YXJnZXQudmFsdWUgPT0gXCJ1bnN1YnNjcmliZVwiKXtcclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgVW5zdWJzY3JpYmUgTG9naWM6XHJcblxyXG4gICAgICAgICAgICAgICAgU2hvdyBVSSBCbG9ja2VyXHJcbiAgICAgICAgICAgICAgICBMb29wIHRocm91Z2jCoGV2ZXJ5wqBjYXJ0IGl0ZW1cclxuICAgICAgICAgICAgICAgIElmIGl04oCZcyBhIGJ1aWxkLWEtYnVuZGxlLCBkZWxldGUgYW5kIGZ1bGx5IHJlLWFkZCBpdFxyXG4gICAgICAgICAgICAgICAgVXBkYXRlIGFsbCBub24tYnVuZGxlIHByb2R1Y3RzXHJcbiAgICAgICAgICAgICAgICBEZXRlY3Qgc3Vic2NyaXB0aW9uLW9ubHkgcHJvZHVjdHMgYW5kIHJlbW92ZSB0aGVtXHJcbiAgICAgICAgICAgICAgICBEeW5hbWljYWxseSBoaWRlIOKAnHVuc3Vic2NyaWJl4oCdIGlmIGFueSBzdWJzY3JpcHRpb24tb25seSBwcm9kdWN0IGV4aXN0cyDigJQgd2hpbGUgc3RpbGwgcnVubmluZyB0aGUgbG9naWMgYWJvdmVcclxuXHJcbiAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZVNlbGxpbmdQbGFuc0Zyb21BbGxBcHBsaWNhYmxlUHJvZHVjdHMoJGJ1bmRsZUxpbmVJdGVtcywkbGluZUl0ZW1zLCR1aUJsb2NrZXIpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgY2hvc2VuUGxhbklkID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgICAgICAgY29uc3QgY2hvc2VuUGxhbk5hbWUgPSBlLnRhcmdldC5vcHRpb25zW2UudGFyZ2V0LnNlbGVjdGVkSW5kZXhdLnRleHQ7XHJcblxyXG4gICAgICAgICAgICAgIC8vUGFzcyB0aGUgSUQgYW5kIE5hbWUgaW50byB0aGUgc3luYyBmdW5jdGlvbiB0byB1cGRhdGUgYWxsIHByb2R1Y3RzIHdpdGggc2VsbGluZyBwbGFuc1xyXG4gICAgICAgICAgICAgIHRoaXMuc3luY2hyb25pc2VTZWxsaW5nUGxhbnNBY3Jvc3NMaW5lSXRlbXMoY2hvc2VuUGxhbklkLGNob3NlblBsYW5OYW1lLnRvTG93ZXJDYXNlKCksJGJ1bmRsZUxpbmVJdGVtcywkbGluZUl0ZW1zLCR1aUJsb2NrZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIC8qXHJcbiAgICAgICAgSGFuZGxlIERlbGl2ZXJ5IERhdGUgRnVuY3Rpb25hbGl0eVxyXG5cclxuICAgICAgICAtIERvZXMgdGhlIG9yZGVyIHJlcXVpcmUgYSBkZWxpdmVyeSBkYXRlP1xyXG4gICAgICAgICAgLSBJZiBub3Q6IEVuYWJsZSB0aGUgY2hlY2tvdXQgYnV0dG9uXHJcbiAgICAgICAgICAtIElmIHNvOiBTZXQgdXAgYW4gaW50ZXJ2YWwgdG8gY2hlY2sgYWdhaW5zdCB0aGUgQmluYWVyeSBnbG9iYWw6IHdpbmRvdy5fX0JJTkFFUllfREVMSVZFUllfREFURV9fXHJcbiAgICAgICAgICBcclxuICAgICAgKi9cclxuXHJcbiAgICAgIGNvbnN0ICRjYXJ0Q2hlY2tvdXRCdG4gPSAkY2FydFRlbXBsYXRlLnF1ZXJ5U2VsZWN0b3IoXCIuY2FydC10ZW1wbGF0ZV9fY2hlY2tvdXQtYnRuXCIpO1xyXG4gICAgICBjb25zdCAkY2FsZW5kZXJDaGVja291dEJ0biA9ICRjYXJ0VGVtcGxhdGUucXVlcnlTZWxlY3RvcihcIi5jYXJ0LXRlbXBsYXRlX19jYWxlbmRhci10cmlnZ2VyXCIpO1xyXG4gICAgICBjb25zdCAkY2FydERlbGl2ZXJ5Q29udGFpbmVyID0gJGNhcnRUZW1wbGF0ZS5xdWVyeVNlbGVjdG9yKFwiLmNhcnQtdGVtcGxhdGVfX3N1bW1hcnktZGVsaXZlcnlcIik7XHJcblxyXG4gICAgICAvL0NoZWNrb3V0IGJ1dHRvbiBvbmx5IHByZXNlbnQgb24gYSBjYXJ0IHdpdGggaXRlbXMgaW4gaXRcclxuICAgICAgaWYoJGNhcnRDaGVja291dEJ0bil7XHJcblxyXG4gICAgICAgIGlmKCRjYXJ0RGVsaXZlcnlDb250YWluZXIpe1xyXG5cclxuICAgICAgICAgIC8vSXMgRGVsaXZlcnkgUHJlZmVyZW5jZSBIaWRkZW4/IElmIGl0IGlzIC0gZW5hYmxlIHRoZSBDaGVja291dCBidXR0b25cclxuICAgICAgICAgIGlmKCRjYXJ0RGVsaXZlcnlDb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaGlkZGVuXCIpKXtcclxuICAgICAgICAgICAgdGhpcy5lbmFibGVDYXJ0Q2hlY2tvdXRCdG4oJGNhcnRDaGVja291dEJ0biwkY2FsZW5kZXJDaGVja291dEJ0bik7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc3QgJGRlbGl2ZXJ5SW5wdXRUZXh0ID0gJGNhcnREZWxpdmVyeUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmNhcnQtdGVtcGxhdGVfX3N1bW1hcnktZGVsaXZlcnktaW5wdXQgcFwiKTtcclxuXHJcbiAgICAgICAgICAgIC8vU2V0IHVwIHRoZSBzZXRJbnRlcnZhbCB0byB0cmFjayB0aGUgd2lkZ2V0IHNldHRpbmcgdGhlIGdsb2JhbFxyXG4gICAgICAgICAgICBpZighdGhpcy5kZWxpdmVyeURhdGVNb25pdG9yUnVubmluZyl7XHJcblxyXG4gICAgICAgICAgICAgIC8vV29yayBhcm91bmQgQmluYWVyeSBDYWxlbmRhciBsaW1pdGF0aW9ucywgdGhleSBjYW4gb25seSBoYXZlIG9uZSBidXR0b24gYm91bmQuLi4gc28gbGV0cyBjYWxsIHRoYXQgd2hlbiB0aGlzIGlzIGNsaWNrZWRcclxuICAgICAgICAgICAgICAkY2FsZW5kZXJDaGVja291dEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vVHJpZ2dlciB0aGUgYmluYWVyeSBjYWxlbmRhciB3aWRnZXRcclxuICAgICAgICAgICAgICAgICRkZWxpdmVyeUlucHV0VGV4dC5wYXJlbnRFbGVtZW50LmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgfSk7ICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5kZWxpdmVyeURhdGVNb25pdG9yUnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgbGV0IGxhc3RWYWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAvL1dlIGRvbid0IGhhdmUgYWNjZXNzIHRvIEJpbmFlcnkncyBzb3VyY2UgY29kZSwgYnV0IHRoZXkgZXhwb3NlIHRoaXMgZ2xvYmFsIHZhbHVlLiBUcmFjayBpdCBhbmQgZW5hYmxlIHRoZSBjaGVja291dCBidXR0b24gb24gY2hhbmdlXHJcbiAgICAgICAgICAgICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gd2luZG93Ll9fQklOQUVSWV9ERUxJVkVSWV9EQVRFX18gfHwgJyc7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9PSBsYXN0VmFsdWUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vVXBkYXRlIHNvIHdlIGNhbiBrZWVwIHRyYWNraW5nIC0gd2UgbmVlZCB0byB1cGRhdGUgdGhlIHRleHQgdmFsdWUgaW4gdGhlIGlucHV0IGZpZWxkXHJcbiAgICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IGN1cnJlbnRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL1VwZGF0ZSB0aGUgdmFsdWUgaW4gdGhlIElucHV0IGZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoJGRlbGl2ZXJ5SW5wdXRUZXh0KXsgICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAvL0Zvcm1hdCB0aGUgRGF0ZSAtIHdoeSBkb2Vzbid0IEphdmFzY3JpcHQgaGF2ZSBhIFwiMXN0XCIsIFwiMm5kXCIsIFwiM3JkXCIgc29sdXRpb24/IFBIUCBiZXR0ZXI/IVxyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGVUZXh0ID0gY3VycmVudFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGUgPSBcIlwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIC8vQ2F0ZXIgZm9yIHRoZSBkYXRlIGJlaW5nIHByb3ZpZGVkIGluIGRpZmZlcmVudCBmb3JtYXRzXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZVRleHQuaW5jbHVkZXMoJy4nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGRhdGVUZXh0LnNwbGl0KCcuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShgJHtwYXJ0c1syXX0tJHtwYXJ0c1sxXX0tJHtwYXJ0c1swXX1UMTI6MDA6MDBgKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0ZVRleHQuaW5jbHVkZXMoJy0nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoZGF0ZVRleHQgKyAnVDEyOjAwOjAwJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmtub3duIGRhdGUgZm9ybWF0OicsIGRhdGVUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXlOYW1lID0gZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLUdCJywgeyB3ZWVrZGF5OiAnbG9uZycgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSBkYXRlLmdldERhdGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vbnRoTmFtZSA9IGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1HQicsIHsgbW9udGg6ICdsb25nJyB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgc3VmZml4ID0gXCJcIjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF5ID4gMyAmJiBkYXkgPCAyMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXggPSAndGgnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF5ICUgMTApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4ID0gJ3N0JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4ID0gJ25kJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4ID0gJ3JkJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeCA9ICd0aCc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgaWYoZGF5ICYmIHN1ZmZpeCAmJiBtb250aE5hbWUgJiYgZGF5TmFtZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVUZXh0ICA9IGAke2RheU5hbWV9ICR7ZGF5fSR7c3VmZml4fSAke21vbnRoTmFtZX1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICRkZWxpdmVyeUlucHV0VGV4dC50ZXh0Q29udGVudCA9IGRhdGVUZXh0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIC8vRG8gd2UgaGF2ZSBhbnkgbWVzc2FnZXMgdG8gYW5pbWF0ZT8gXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCAkeWVsbG93TWVzc2FnZXMgPSAkY2FydFRlbXBsYXRlLnF1ZXJ5U2VsZWN0b3JBbGwoXCIueWVsbG93LXNlY3Rpb25cIik7IC8veWVsbG93LWRlc2t0b3BcclxuICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5pbm5lcldpZHRoID4gMTAyMyl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL0FuaW1hdGUgdGhlIERlc2t0b3Agb25lIC0gZW5zdXJlIGl0IG9ubHkgZmlyZXMgT05DRSAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICR5ZWxsb3dNZXNzYWdlcy5mb3JFYWNoKCgkeWVsbG93TWVzc2FnZUNvbnRhaW5lcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR5ZWxsb3dNZXNzYWdlQ29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucyhcInllbGxvdy1kZXNrdG9wXCIpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEkeWVsbG93TWVzc2FnZUNvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoXCJhbmltYXRlZFwiKSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0FuaW1hdGUgaXQgYW5kIG9uIGNvbXBsZXRpb24gLSBtYXJrIGl0IHNvIHRoYXQgaXQgY2FuJ3QgYW5pbWF0ZSBhZ2FpblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAkeWVsbG93TWVzc2FnZSA9ICR5ZWxsb3dNZXNzYWdlQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIueWVsbG93LW1lc3NhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR5ZWxsb3dNZXNzYWdlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2FwLnNldCgkeWVsbG93TWVzc2FnZSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5UGVyY2VudDogMTAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAxXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzYXAudG8oJHllbGxvd01lc3NhZ2UsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeVBlcmNlbnQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAwLjYsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhc2U6IFwiZXhwby5vdXRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR5ZWxsb3dNZXNzYWdlQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJhbmltYXRlZFwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9BbmltYXRlIHRoZSBtb2JpbGUgb25lLCBlbnN1cmUgaXQgb25seSBmaXJlcyBvbmNlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkeWVsbG93TWVzc2FnZXMuZm9yRWFjaCgoJHllbGxvd01lc3NhZ2VDb250YWluZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkeWVsbG93TWVzc2FnZUNvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoXCJ5ZWxsb3ctbW9iaWxlXCIpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEkeWVsbG93TWVzc2FnZUNvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoXCJhbmltYXRlZFwiKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgJHllbGxvd01lc3NhZ2UgPSAkeWVsbG93TWVzc2FnZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLnllbGxvdy1tZXNzYWdlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzYXAuc2V0KCR5ZWxsb3dNZXNzYWdlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlQZXJjZW50OiAxMDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NhcC50bygkeWVsbG93TWVzc2FnZSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5UGVyY2VudDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDAuNixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWFzZTogXCJleHBvLm91dFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHllbGxvd01lc3NhZ2VDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImFuaW1hdGVkXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlQ2FydENoZWNrb3V0QnRuKCRjYXJ0Q2hlY2tvdXRCdG4sJGNhbGVuZGVyQ2hlY2tvdXRCdG4pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSwgMzAwKTtcclxuICAgICAgICAgICAgfSAgICAgXHJcbiAgICAgICAgICB9ICAgICAgICAgICAgICAgXHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAvL25vIGRlbGl2ZXJ5IHdpZGdldCBhcm91bmQsIGVuYWJsZSB0aGUgYnV0dG9uXHJcbiAgICAgICAgICB0aGlzLmVuYWJsZUNhcnRDaGVja291dEJ0bigkY2FydENoZWNrb3V0QnRuLCRjYWxlbmRlckNoZWNrb3V0QnRuKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL0RlbGl2ZXJ5IEluZm9ybWF0aW9uIFBvcHVwIC0gTk9URTogVGhlIHBvcHVwIHRyaWdnZXIgZ2V0cyByZXBsYWNlZCBidXQgdGhlIHBvcHVwIGRvZXNuJ3QsIGFjdGlvbiB3aWxsIGJlIHRha2VuIHRvIHByZXZlbnQgcmViaW5kaW5nIGVsZW1lbnRzIHRoYXQgZG9uJ3QgbmVlZCB0byBiZSByZWJvdW5kXHJcbiAgICBjb25zdCAkZGVsaXZlcnlJbmZvUG9wdXAgPSAkY2FydFRlbXBsYXRlLnF1ZXJ5U2VsZWN0b3IoXCIucG9wdXAtY29udGFpbmVyXCIpO1xyXG4gICAgY29uc3QgJGRlbGl2ZXJ5SW5mb1BvcHVwVHJpZ2dlciA9ICRjYXJ0VGVtcGxhdGUucXVlcnlTZWxlY3RvcihcIi5jYXJ0LXRlbXBsYXRlX19kZWxpdmVyeS1lc3RpbWF0ZS1jb250YWluZXItaW5mby1pY29uXCIpO1xyXG5cclxuICAgIGlmKCRkZWxpdmVyeUluZm9Qb3B1cCAmJiAkZGVsaXZlcnlJbmZvUG9wdXBUcmlnZ2VyKXtcclxuXHJcbiAgICAgIGNvbnN0ICRkZWxpdmVyeUluZm9Qb3B1cEJnID0gJGRlbGl2ZXJ5SW5mb1BvcHVwLnF1ZXJ5U2VsZWN0b3IoXCIucG9wdXAtYmdcIik7XHJcbiAgICAgIGNvbnN0ICRkZWxpdmVyeUluZm9Qb3B1cENsb3NlID0gJGRlbGl2ZXJ5SW5mb1BvcHVwLnF1ZXJ5U2VsZWN0b3IoXCIuY2xvc2UtYnV0dG9uXCIpO1xyXG5cclxuICAgICAgLy9CaW5kIE9wZW5pbmdcclxuICAgICAgJGRlbGl2ZXJ5SW5mb1BvcHVwVHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoZSkgPT4geyAgICAgIFxyXG4gICAgICAgICRkZWxpdmVyeUluZm9Qb3B1cC5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vQmluZCBDbG9zaW5nXHJcbiAgICAgIGlmKCRkZWxpdmVyeUluZm9Qb3B1cEJnKXtcclxuICAgICAgICBpZighJGRlbGl2ZXJ5SW5mb1BvcHVwQmcuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYm91bmRcIikpe1xyXG4gICAgICAgICAgJGRlbGl2ZXJ5SW5mb1BvcHVwQmcuY2xhc3NMaXN0LmFkZChcImJvdW5kXCIpO1xyXG4gICAgICAgICAgJGRlbGl2ZXJ5SW5mb1BvcHVwQmcuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKGUpID0+IHtcclxuICAgICAgICAgICAgJGRlbGl2ZXJ5SW5mb1BvcHVwLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9ICAgICAgXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKCRkZWxpdmVyeUluZm9Qb3B1cENsb3NlKXtcclxuICAgICAgICBpZighJGRlbGl2ZXJ5SW5mb1BvcHVwQ2xvc2UuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYm91bmRcIikpe1xyXG4gICAgICAgICAgJGRlbGl2ZXJ5SW5mb1BvcHVwQ2xvc2UuY2xhc3NMaXN0LmFkZChcImJvdW5kXCIpO1xyXG4gICAgICAgICAgJGRlbGl2ZXJ5SW5mb1BvcHVwQ2xvc2UuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKGUpID0+IHtcclxuICAgICAgICAgICAgJGRlbGl2ZXJ5SW5mb1BvcHVwLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9ICAgICAgXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vQmluZCB0aGUgQWNjb3JkaW9uc1xyXG4gICAgICBjb25zdCAkZGVsaXZlcnlBY2NvcmRpb25zID0gJGRlbGl2ZXJ5SW5mb1BvcHVwLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZGVsaXZlcnktYWNjb3JkaW9ucyAuZGVsaXZlcnktYWNjb3JkaW9uXCIpO1xyXG4gICAgICBpZigkZGVsaXZlcnlBY2NvcmRpb25zLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICRkZWxpdmVyeUFjY29yZGlvbnMuZm9yRWFjaCgoJGRlbGl2ZXJ5QWNjb3JkaW9uKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCAkZGVsaXZlcnlBY2NvcmRpb25UcmlnZ2VyID0gJGRlbGl2ZXJ5QWNjb3JkaW9uLnF1ZXJ5U2VsZWN0b3IoXCIuZGVsaXZlcnktYWNjb3JkaW9uLXRyaWdnZXJcIik7XHJcbiAgICAgICAgICBpZigkZGVsaXZlcnlBY2NvcmRpb25UcmlnZ2VyICYmICEkZGVsaXZlcnlBY2NvcmRpb25UcmlnZ2VyLmNsYXNzTGlzdC5jb250YWlucyhcImJvdW5kXCIpKXtcclxuICAgICAgICAgICAgJGRlbGl2ZXJ5QWNjb3JkaW9uVHJpZ2dlci5jbGFzc0xpc3QuYWRkKFwiYm91bmRcIik7XHJcbiAgICAgICAgICAgICRkZWxpdmVyeUFjY29yZGlvblRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKGUpID0+IHsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAkZGVsaXZlcnlBY2NvcmRpb24uY2xhc3NMaXN0LnRvZ2dsZShcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLy9FbXB0eSBDYXJ0IEZ1bmN0aW9uYWxpdHlcclxuICAgIGNvbnN0ICRlbXB0eUNhcnRDb250YWluZXIgPSAkY2FydFRlbXBsYXRlLnF1ZXJ5U2VsZWN0b3IoXCIuY2FydC10ZW1wbGF0ZV9fY29udGFpbmVyLS1lbXB0eVwiKTtcclxuICAgIGlmKCRlbXB0eUNhcnRDb250YWluZXIpe1xyXG5cclxuICAgICAgLy9JZiB0aGVyZSdzIGEgYnVuZGxlIGhhbGYgd2F5IHRocm91Z2ggYmVpbmcgYnVpbHQgLSB3ZSBuZWVkIHRvIHJlcGxhY2UgcGFydHMgb2YgdGhlIG91dHB1dFxyXG5cclxuICAgICAgY29uc3QgZXhpc3RpbmdCdW5kbGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYnVuZGxlJyk7XHJcbiAgICAgIGlmKGV4aXN0aW5nQnVuZGxlKXtcclxuICAgICAgICBjb25zdCBidW5kbGVEYXRhID0gSlNPTi5wYXJzZShleGlzdGluZ0J1bmRsZSk7XHJcbiAgICAgICAgaWYoT2JqZWN0LmVudHJpZXMoYnVuZGxlRGF0YS5pdGVtcykubGVuZ3RoID4gMCl7ICBcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgLy9HZXQgQ29udGVudHMgdG8gUmVwbGFjZSBcclxuICAgICAgICAgIGNvbnN0ICRidW5kbGVJdGVtUGxhY2Vob2xkZXJDb250YWluZXIgPSAkZW1wdHlDYXJ0Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuZW1wdHktY2FydC1idW5kbGUtcGxhY2Vob2xkZXJzXCIpO1xyXG4gICAgICAgICAgY29uc3QgJGJ1bmRsZUl0ZW1UaXRsZSA9ICRlbXB0eUNhcnRDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5lbXB0eS1jYXJ0LWJ1bmRsZS10aXRsZVwiKTsgXHJcbiAgICAgICAgICBjb25zdCAkYnVuZGxlSXRlbUJ1dHRvbkNvbnRhaW5lciA9ICRlbXB0eUNhcnRDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5lbXB0eS1jYXJ0LWJ1dHRvbi1jb250YWluZXJcIik7IFxyXG5cclxuICAgICAgICAgIGlmKCRidW5kbGVJdGVtVGl0bGUuZGF0YXNldC5jb21wbGV0ZUJ1bmRsZVRleHQpe1xyXG4gICAgICAgICAgICAkYnVuZGxlSXRlbVRpdGxlLnRleHRDb250ZW50ID0gJGJ1bmRsZUl0ZW1UaXRsZS5kYXRhc2V0LmNvbXBsZXRlQnVuZGxlVGV4dDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZigkYnVuZGxlSXRlbUJ1dHRvbkNvbnRhaW5lci5kYXRhc2V0LmFiYW5kb25lZEJ1bmRsZVRleHQpe1xyXG4gICAgICAgICAgICAkYnVuZGxlSXRlbUJ1dHRvbkNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmJ1dHRvbi10ZXh0XCIpLnRleHRDb250ZW50ID0gJGJ1bmRsZUl0ZW1CdXR0b25Db250YWluZXIuZGF0YXNldC5hYmFuZG9uZWRCdW5kbGVUZXh0ICAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYoJGJ1bmRsZUl0ZW1QbGFjZWhvbGRlckNvbnRhaW5lcil7XHJcblxyXG4gICAgICAgICAgICBjb25zdCAkY2xvbmVUZW1wbGF0ZSA9ICRidW5kbGVJdGVtUGxhY2Vob2xkZXJDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5lbXB0eS1jYXJ0LWJ1bmRsZS1wbGFjZWhvbGRlcnMtdGVtcGxhdGVcIik7XHJcbiAgICAgICAgICAgIGlmKCRjbG9uZVRlbXBsYXRlKXtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgJHBsYWNlSG9sZGVyc0xpc3QgPSAkYnVuZGxlSXRlbVBsYWNlaG9sZGVyQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuZW1wdHktY2FydC1idW5kbGUtcGxhY2Vob2xkZXJzLWxpc3RcIik7XHJcbiAgICAgICAgICAgICAgaWYoJHBsYWNlSG9sZGVyc0xpc3Qpe1xyXG5cclxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGJ1bmRsZURhdGEuaXRlbXMpLmZvckVhY2goKFtwcm9kdWN0SWQsIGl0ZW1dLGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmKGluZGV4IDwgNCl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0ICRjbG9uZWRJbWFnZUNvbnQgPSAkY2xvbmVUZW1wbGF0ZS5jbG9uZU5vZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAkY2xvbmVkSW1hZ2VDb250LmNsYXNzTGlzdC5yZW1vdmUoXCJlbXB0eS1jYXJ0LWJ1bmRsZS1wbGFjZWhvbGRlcnMtdGVtcGxhdGVcIixcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkY2xvbmVkSW1hZ2VDb250LmNsYXNzTGlzdC5hZGQoXCJlbXB0eS1jYXJ0LWJ1bmRsZS1pbWdcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICRjbG9uZWRJbWFnZUNvbnQuaW5uZXJIVE1MID0gYFxyXG4gICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIke2l0ZW0uaW1hZ2V9XCIgY2xhc3M9XCJ3LWZ1bGwgaC1mdWxsIG9iamVjdC1jb250YWluIHJvdW5kZWQtNHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInctNiBoLTYgZGVza3RvcDp3LTcgZGVza3RvcDpoLTcgYm9yZGVyIGJvcmRlci1wcmltYXJ5LWJvcmRlciBhYnNvbHV0ZSAtdG9wLTEuNSAtcmlnaHQtMS41IGJnLXdoaXRlIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtMTAwcHggdGV4dC1sYWJlbC1tIGZvbnQtbWVkaXVtIGZsZXgtc2hyaW5rLTBcIiBzdHlsZT1cImxldHRlci1zcGFjaW5nOjAuNDhweFwiPiR7aXRlbS5xdWFudGl0eX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgYDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJHBsYWNlSG9sZGVyc0xpc3QucHJlcGVuZCgkY2xvbmVkSW1hZ2VDb250KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9IaWRlIGFuIGVtcHR5IG9uZVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFBsYWNlaG9sZGVyRnJhbWUgPSAkcGxhY2VIb2xkZXJzTGlzdC5xdWVyeVNlbGVjdG9yKCcuZW1wdHktY2FydC1idW5kbGUtcGxhY2Vob2xkZXJbZGF0YS1wb3NpdGlvbj1cIicrIChpbmRleCsxKSArJ1wiXScpOyAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRhcmdldFBsYWNlaG9sZGVyRnJhbWUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRQbGFjZWhvbGRlckZyYW1lLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHJlUmVuZGVyQ2FydFRlbXBsYXRlID0gKCRlbGVtZW50LCBuZXdTZWN0aW9uVGV4dCkgPT4ge1xyXG4gICAgXHJcbiAgICAvLyBHZXQgdGhlIHRleHQgb2YgdGhlIG5ldyBzZWN0aW9uIGFuZCByZW5kZXIgaXQgdG8gYSBkaXYgdGhhdHMgbm90IGluIHRoZSBET01cclxuICAgIGNvbnN0ICRuZXdTZWN0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICRuZXdTZWN0aW9uLmlubmVySFRNTCA9IG5ld1NlY3Rpb25UZXh0O1xyXG5cclxuICAgIGNvbnN0ICRjdXJyZW50VGVtcGxhdGVDb250YWluZXIgPSAkZWxlbWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICBcIi5jYXJ0LXRlbXBsYXRlX19jb250YWluZXJcIlxyXG4gICAgKTtcclxuICAgIGNvbnN0ICRuZXdUZW1wbGF0ZUNvbnRhaW5lciA9ICRuZXdTZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgIFwiLmNhcnQtdGVtcGxhdGVfX2NvbnRhaW5lclwiXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgJGN1cnJlbnRUZW1wbGF0ZUNvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoXHJcbiAgICAgICAgXCJjYXJ0LXRlbXBsYXRlX19jb250YWluZXItLWVtcHR5XCJcclxuICAgICAgKSB8fFxyXG4gICAgICAkbmV3VGVtcGxhdGVDb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKFxyXG4gICAgICAgIFwiY2FydC10ZW1wbGF0ZV9fY29udGFpbmVyLS1lbXB0eVwiXHJcbiAgICAgIClcclxuICAgICkge1xyXG5cclxuICAgICAgLy9JZiBPbGQgQ2FydCBoYWQgY29udGVudCBhbmQgTmV3IENhcnQgaXMgbm93IGVtcHR5IC0gcmUtcmVuZGVyIHRoZSBlbnRpcmUgdGhpbmdcclxuICAgICAgaWYoJG5ld1RlbXBsYXRlQ29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucyhcImNhcnQtdGVtcGxhdGVfX2NvbnRhaW5lci0tZW1wdHlcIikpe1xyXG5cclxuICAgICAgICAvLyBJZiBlaXRoZXIgdGhlIG5ldyBvciBvbGQgY2FydCBpcyBlbXB0eSByZXBhbGNlIHRoZSBlbnRpcmUgY2FydFxyXG4gICAgICAgICRjdXJyZW50VGVtcGxhdGVDb250YWluZXIuaW5uZXJIVE1MID0gJG5ld1RlbXBsYXRlQ29udGFpbmVyLmlubmVySFRNTDtcclxuICAgICAgfWVsc2V7XHJcblxyXG4gICAgICAgIC8vSWYgTmV3IENhcnQgaGFzIGNvbnRlbnQgYW5kIHRoZSBvbGQgY2FydCBpcyBlbXB0eSwgcmVsb2FkIHRoZSBwYWdlIHRvIHdvcmsgYXJvdW5kIEJpbmFlcnkgRGF0ZSBQaWNrZXIgbm90IHJlYmluZGluZ1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvL0NhcnQgSGFkIEl0ZW1zIGFuZCBzdGlsbCBoYXMgaXRlbXMgLSByZXBsYWNlIHJlbGV2YW50IGNvbnRlbnRcclxuICAgICAgXHJcbiAgICAgIC8vUmVwbGFjZSBDYXJ0IGhlYWRlciB0byB1cGRhdGUgQ291bnQgYW5kIGFjdGl2ZSBzZWxsaW5nIHBsYW4gaW5mb1xyXG4gICAgICBjb25zdCAkY3VycmVudENhcnRMaW5lSXRlbXNIZWFkZXIgPSAkY3VycmVudFRlbXBsYXRlQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuY2FydC10ZW1wbGF0ZV9fbGluZS1pdGVtLWhlYWRlclwiKTtcclxuICAgICAgY29uc3QgJG5ld0NhcnRMaW5lSXRlbXNIZWFkZXIgPSAkbmV3VGVtcGxhdGVDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5jYXJ0LXRlbXBsYXRlX19saW5lLWl0ZW0taGVhZGVyXCIpO1xyXG4gICAgICBpZiAoJGN1cnJlbnRDYXJ0TGluZUl0ZW1zSGVhZGVyICYmICRuZXdDYXJ0TGluZUl0ZW1zSGVhZGVyKSB7XHJcbiAgICAgICAgJGN1cnJlbnRDYXJ0TGluZUl0ZW1zSGVhZGVyLmlubmVySFRNTCA9ICRuZXdDYXJ0TGluZUl0ZW1zSGVhZGVyLmlubmVySFRNTDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2V0IHRoZSBjdXJyZW50IGxpbmUgaXRlbXMgdG8gdGhlIG5ldyBsaW5lIGl0ZW1zXHJcbiAgICAgIGNvbnN0ICRjdXJyZW50TGluZUl0ZW1zID0gJGN1cnJlbnRUZW1wbGF0ZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmNhcnQtdGVtcGxhdGVfX2xpbmUtaXRlbXNcIik7XHJcbiAgICAgIGNvbnN0ICRuZXdMaW5lSXRlbXMgPSAkbmV3VGVtcGxhdGVDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5jYXJ0LXRlbXBsYXRlX19saW5lLWl0ZW1zXCIpO1xyXG5cclxuICAgICAgaWYgKCRjdXJyZW50TGluZUl0ZW1zICYmICRuZXdMaW5lSXRlbXMpIHtcclxuICAgICAgICAkY3VycmVudExpbmVJdGVtcy5pbm5lckhUTUwgPSAkbmV3TGluZUl0ZW1zLmlubmVySFRNTDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLypcclxuICAgICAgICBVcGRhdGUgdGhlIENhcnQgU3VtbWFyeSAtIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiB0aGUgQmluYWVyeSBEYXRlIFBpY2tlciwgdGhpcyBpcyBub3cgbW9yZSBjb21wbGljYXRlZC5cclxuICAgICAgICBUaGUgRGVsaXZlcnkgRGF0ZSB3aWRnZXQgbmVlZHMgdG8gYmUgc2hvd24gLyBoaWRkZW4gYnV0IE5PVCByZXBsYWNlZC5cclxuICAgICAgICBUaGUgcmVzdCBvZiB0aGUgY29udGVudCBpbiB0aGUgT3JkZXIgU3VtbWFyeSBuZWVkcyB0byBiZSByZXBsYWNlZC5cclxuICAgICAgKi9cclxuICAgICAgXHJcbiAgICAgIGNvbnN0ICRjdXJyZW50U3VtbWFyeSA9ICRjdXJyZW50VGVtcGxhdGVDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5jYXJ0LXRlbXBsYXRlX19zdW1tYXJ5XCIpO1xyXG4gICAgICBjb25zdCAkbmV3U3VtbWFyeSA9ICRuZXdUZW1wbGF0ZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmNhcnQtdGVtcGxhdGVfX3N1bW1hcnlcIik7XHJcblxyXG4gICAgICBpZiAoJGN1cnJlbnRTdW1tYXJ5ICYmICRuZXdTdW1tYXJ5KSB7XHJcblxyXG4gICAgICAgIC8vIFJlcGxhY2UgdGhlIFRvdGFscyB0aGF0IGFwcGVhciB1bmRlciB0aGUgY2hlY2tvdXQgYnV0dG9uc1xyXG4gICAgICAgIGNvbnN0ICRvbGRUb3RhbHNDb250YWluZXIgPSAkY3VycmVudFN1bW1hcnkucXVlcnlTZWxlY3RvcihcIi5jYXJ0LXRlbXBsYXRlX19zdW1tYXJ5LXRvdGFscy1jb250YWluZXJcIik7XHJcbiAgICAgICAgY29uc3QgJG5ld1RvdGFsc0NvbnRhaW5lciA9ICRuZXdTdW1tYXJ5LnF1ZXJ5U2VsZWN0b3IoXCIuY2FydC10ZW1wbGF0ZV9fc3VtbWFyeS10b3RhbHMtY29udGFpbmVyXCIpO1xyXG5cclxuICAgICAgICBpZigkb2xkVG90YWxzQ29udGFpbmVyICYmICRuZXdUb3RhbHNDb250YWluZXIpe1xyXG4gICAgICAgICAgJG9sZFRvdGFsc0NvbnRhaW5lci5pbm5lckhUTUwgPSAkbmV3VG90YWxzQ29udGFpbmVyLmlubmVySFRNTDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vVGhlIFNlbGxpbmcgUGxhbiBTZWxlY3QgTGlzdCAtIHJlcGxhY2UgdGhlIGNvbnRlbnQuIElmIG5vdCByZXF1aXJlZCwgdGhlIGNvbnRlbnQgd2lsbCBiZSBlbXB0eVxyXG4gICAgICAgIGNvbnN0ICRvbGRTZWxsaW5nUGxhblNlbGVjdENvbnRhaW5lciA9ICRjdXJyZW50U3VtbWFyeS5xdWVyeVNlbGVjdG9yKFwiLnN1YnNjcmlwdGlvbi1mcmVxdWVuY3ktc2VsZWN0aW9uXCIpO1xyXG4gICAgICAgIGNvbnN0ICRuZXdTZWxsaW5nUGxhblNlbGVjdENvbnRhaW5lciA9ICRuZXdTdW1tYXJ5LnF1ZXJ5U2VsZWN0b3IoXCIuc3Vic2NyaXB0aW9uLWZyZXF1ZW5jeS1zZWxlY3Rpb25cIik7XHJcblxyXG4gICAgICAgIGlmKCRvbGRTZWxsaW5nUGxhblNlbGVjdENvbnRhaW5lciAmJiAkbmV3U2VsbGluZ1BsYW5TZWxlY3RDb250YWluZXIpe1xyXG4gICAgICAgICAgJG9sZFNlbGxpbmdQbGFuU2VsZWN0Q29udGFpbmVyLmlubmVySFRNTCA9ICRuZXdTZWxsaW5nUGxhblNlbGVjdENvbnRhaW5lci5pbm5lckhUTUw7XHJcblxyXG4gICAgICAgICAgLy9BbGxvdyBtYXJnaW5zIHRvIGNvbGxhcHNlIGluIHRoZSBkZXNpZ25cclxuICAgICAgICAgIGlmKCRuZXdTZWxsaW5nUGxhblNlbGVjdENvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoXCJoaWRkZW5cIikpe1xyXG4gICAgICAgICAgICAkb2xkU2VsbGluZ1BsYW5TZWxlY3RDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAkb2xkU2VsbGluZ1BsYW5TZWxlY3RDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vVG9nZ2xlIHRoZSBEZWxpdmVyeSBXaWRnZXQgVmlzaWJpbGl0eSBiYXNlZCBvbiB3aGV0aGVyIHRoZSBuZXcgdmVyc2lvbiBoYXMgdGhlIFwiaGlkZGVuXCIgY2xhc3Mgb3Igbm90XHJcbiAgICAgICAgY29uc3QgJG9sZFN1bW1hcnlEZWxpdmVyeUNvbnRhaW5lciA9ICRjdXJyZW50U3VtbWFyeS5xdWVyeVNlbGVjdG9yKFwiLmNhcnQtdGVtcGxhdGVfX3N1bW1hcnktZGVsaXZlcnlcIik7XHJcbiAgICAgICAgY29uc3QgJG5ld1N1bW1hcnlEZWxpdmVyeUNvbnRhaW5lciA9ICRuZXdTdW1tYXJ5LnF1ZXJ5U2VsZWN0b3IoXCIuY2FydC10ZW1wbGF0ZV9fc3VtbWFyeS1kZWxpdmVyeVwiKTtcclxuICAgICAgICBcclxuICAgICAgICBpZigkb2xkU3VtbWFyeURlbGl2ZXJ5Q29udGFpbmVyICYmICRuZXdTdW1tYXJ5RGVsaXZlcnlDb250YWluZXIpe1xyXG5cclxuICAgICAgICAgIGlmKCRuZXdTdW1tYXJ5RGVsaXZlcnlDb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKFwiaGlkZGVuXCIpKXtcclxuICAgICAgICAgICAgJG9sZFN1bW1hcnlEZWxpdmVyeUNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICRvbGRTdW1tYXJ5RGVsaXZlcnlDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9ICAgICAgICAgICAgICBcclxuXHJcbiAgICAgICAgLy9DaGVja291dCBCdXR0b25zIGRvIG5vdCBuZWVkIHRvIGJlIHVwZGF0ZWQgYXMgdGhlIHJlcmVuZGVyIGZ1bmN0aW9uIGhhbmRsZXMgdGhpc1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRVcENhcnRUZW1wbGF0ZSgkZWxlbWVudCk7XHJcbiAgfTtcclxuXHJcbiAgZnJlZUdpZnQgPSAoJHByb2dyZXNzKSA9PiB7XHJcbiAgICBjb25zdCBjYXJ0ID0gcGFyc2VGbG9hdCgkcHJvZ3Jlc3MuZGF0YXNldC5jYXJ0KTtcclxuICAgIGNvbnN0IHRocmVzaG9sZCA9IHBhcnNlRmxvYXQoJHByb2dyZXNzLmRhdGFzZXQuZ2lmdFRocmVzaG9sZCk7XHJcbiAgICBjb25zdCBnaWZ0ID0gJHByb2dyZXNzLmRhdGFzZXQuZ2lmdDtcclxuXHJcbiAgICBpZiAoJHByb2dyZXNzLmRhdGFzZXQuZ2lmdEVuYWJsZWQgPT0gJ3RydWUnKXtcclxuICAgICAgaWYgKGNhcnQgPiB0aHJlc2hvbGQpe1xyXG4gICAgICAgIHRoaXMuYWRkSXRlbVRvQ2FydChnaWZ0LCAxKTtcclxuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdzaG93R2lmdE1lc3NhZ2UnLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGNhcnQgPCB0aHJlc2hvbGQpe1xyXG4gICAgICAgIHRoaXMucmVtb3ZlTGluZUl0ZW1Gcm9tQ2FydChnaWZ0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9O1xyXG5cclxuXHJcbiAgYXN5bmMgdXBkYXRlT3JkZXJOb3RlKCkge1xyXG5cclxuICAgIC8vIFN0ZXAgMTogU2VsZWN0IGFsbCBzdGF0aWMgYnVuZGxlcyBpbiB0aGUgY2FydFxyXG4gICAgY29uc3Qgc3RhdGljQnVuZGxlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXR5cGU9XCJDbGFzc2ljIEJveFwiXScpO1xyXG4gICAgY29uc3QgYnVuZGxlTm90ZXMgPSBbXTtcclxuICBcclxuICAgIHN0YXRpY0J1bmRsZXMuZm9yRWFjaChidW5kbGUgPT4ge1xyXG4gICAgICBjb25zdCBidW5kbGVUaXRsZSA9IGJ1bmRsZS5xdWVyeVNlbGVjdG9yKCdoNScpPy50ZXh0Q29udGVudD8udHJpbSgpIHx8ICdVbm5hbWVkIEJ1bmRsZSc7XHJcbiAgXHJcbiAgICAgIC8vIEZpbmQgdGhlIGxpc3Qgb2YgcHJvZHVjdHMgaW5zaWRlIHRoZSBidW5kbGVcclxuICAgICAgY29uc3QgaXRlbUxpc3QgPSBidW5kbGUucXVlcnlTZWxlY3RvckFsbCgnLmNhcnQtYXNpZGVfX2J1bmRsZS1pdGVtLWNvbnRlbnRzIGxpJyk7XHJcbiAgXHJcbiAgICAgIC8vIEZvcm1hdCBpdGVtIGxpbmVzIGxpa2UgXCJQcm9kdWN0IHggUXVhbnRpdHlcIlxyXG4gICAgICBjb25zdCBpdGVtTGluZXMgPSBBcnJheS5mcm9tKGl0ZW1MaXN0KS5tYXAobGkgPT4gYC0gJHtsaS50ZXh0Q29udGVudC50cmltKCl9YCk7XHJcbiAgXHJcbiAgICAgIC8vIENvbWJpbmUgYnVuZGxlIElELCB0aXRsZSwgYW5kIGl0ZW1zIGludG8gYSBzZWN0aW9uXHJcbiAgICAgIGNvbnN0IG5vdGVTZWN0aW9uID0gW1xyXG4gICAgICAgIGAke2J1bmRsZVRpdGxlfTpgLFxyXG4gICAgICAgIC4uLml0ZW1MaW5lc1xyXG4gICAgICBdLmpvaW4oJ1xcbicpO1xyXG4gIFxyXG4gICAgICBidW5kbGVOb3Rlcy5wdXNoKG5vdGVTZWN0aW9uKTtcclxuICAgIH0pO1xyXG4gIFxyXG4gICAgLy8gU3RlcCAyOiBKb2luIGFsbCBub3RlIHNlY3Rpb25zIHdpdGggc3BhY2luZ1xyXG4gICAgY29uc3QgZnVsbE5vdGUgPSBidW5kbGVOb3Rlcy5qb2luKCdcXG5cXG4nKS50cmltKCk7XHJcbiAgXHJcbiAgICAvLyBTdGVwIDM6IFVwZGF0ZSBjYXJ0IG5vdGVcclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IGZldGNoKCcvY2FydC91cGRhdGUuanMnLCB7XHJcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXHJcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBub3RlOiBmdWxsTm90ZSB9KVxyXG4gICAgICB9KTtcclxuICAgICAgY29uc29sZS5sb2coJ09yZGVyIG5vdGUgdXBkYXRlZDonLCBmdWxsTm90ZSk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHVwZGF0ZSBvcmRlciBub3RlOicsIGVycik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRVcENhcnRBc2lkZSA9ICgkY2FydEFzaWRlKSA9PiB7XHJcbiAgICAvKiBcclxuICAgICAgRmluZCB0aGUgbGluZSBpdGVtcyBpbiB0aGUgY2FydCBhc2lkZSBhbmQgaWYgdGhleSBleGlzdCBsb29wIHRocm91Z2ggYW5kXHJcbiAgICAgIGFkZCB0aGUgZXZlbnRzIGxpc3RuZXJzXHJcbiAgICAqL1xyXG4gICAgY29uc3QgJGxpbmVJdGVtc0NvbnRhaW5lciA9ICRjYXJ0QXNpZGUucXVlcnlTZWxlY3RvcihcclxuICAgICAgXCIuY2FydC1hc2lkZV9fbGluZS1pdGVtc1wiXHJcbiAgICApO1xyXG4gICAgaWYgKCRsaW5lSXRlbXNDb250YWluZXIpIHtcclxuICAgICAgY29uc3QgJGxpbmVJdGVtcyA9ICRsaW5lSXRlbXNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICBcIi5jYXJ0LWFzaWRlX19saW5lLWl0ZW1cIlxyXG4gICAgICApO1xyXG4gICAgICAkbGluZUl0ZW1zLmZvckVhY2goKCRsaW5lSXRlbSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYWRkTGluZUl0ZW1FdmVudExpc3RlbmVycygkbGluZUl0ZW0sIFwiYXNpZGVcIik7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgJHJlY29tZW5kZWRJdGVtcyA9ICRjYXJ0QXNpZGUucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICBcIi5jYXJ0LWFzaWRlX191cHNlbGwtaXRlbVwiXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICgkcmVjb21lbmRlZEl0ZW1zKSB7XHJcblxyXG4gICAgICAgICRyZWNvbWVuZGVkSXRlbXMuZm9yRWFjaCgoJHJlY29tZW5kZWRJdGVtKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCAkcmVjb21lbmRlZEl0ZW1BZGQgPSAkcmVjb21lbmRlZEl0ZW0ucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAgICAgXCIudXBzZWxsLWl0ZW1fX2FkZFwiXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICRyZWNvbWVuZGVkSXRlbUFkZC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RJZCA9ICRyZWNvbWVuZGVkSXRlbS5kYXRhc2V0LnByb2R1Y3RJZDtcclxuICAgICAgICAgICAgY29uc3QgdmFyaWFudElkID0gJHJlY29tZW5kZWRJdGVtLmRhdGFzZXQudmFyaWFudElkO1xyXG4gICAgICAgICAgICB0aGlzLnF1aWNrQWRkSXRlbVRvQ2FydCh2YXJpYW50SWQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgY29uc3QgJGNhcnRBc2lkZUNsZWFyID0gJGNhcnRBc2lkZS5xdWVyeVNlbGVjdG9yKFwiLmNhcnQtYXNpZGVfX2NsZWFyXCIpO1xyXG4gICAgaWYgKCRjYXJ0QXNpZGVDbGVhcil7XHJcbiAgICAgICRjYXJ0QXNpZGVDbGVhci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5jbGVhckNhcnQoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy9SZWJpbmQgQ2FydCBjbG9zZSBldmVudFxyXG4gICAgY29uc3QgJGNhcnRBc2lkZUNsb3NlID0gJGNhcnRBc2lkZS5xdWVyeVNlbGVjdG9yKFwiLmNhcnQtYXNpZGVfX2Nsb3NlXCIpO1xyXG4gICAgJGNhcnRBc2lkZUNsb3NlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICBjb25zdCAkYm9keSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpO1xyXG4gICAgICAkYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwib3ZlcmZsb3cteS1oaWRkZW5cIik7XHJcbiAgICAgICRjYXJ0QXNpZGUuY2xhc3NMaXN0LmFkZChcInRyYW5zbGF0ZS14LWZ1bGxcIiwgXCJwb250ZXItZXZlbnRzLW5vbmVcIik7XHJcblxyXG4gICAgICBjb25zdCAkY2FydEFzaWRlQmFja2dyb3VuZCA9ICRib2R5LnF1ZXJ5U2VsZWN0b3IoJy5jYXJ0LWFzaWRlX19iYWNrZ3JvdW5kJyk7XHJcbiAgICAgIGlmKCRjYXJ0QXNpZGVCYWNrZ3JvdW5kKXtcclxuICAgICAgICAkY2FydEFzaWRlQmFja2dyb3VuZC5jbGFzc0xpc3QuYWRkKFwicG9pbnRlci1ldmVudHMtbm9uZVwiKTtcclxuICAgICAgICAkY2FydEFzaWRlQmFja2dyb3VuZC5jbGFzc0xpc3QucmVtb3ZlKFwiYmctYmxhY2tcIiwgXCJiZy1vcGFjaXR5LTQwXCIpO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImNvdWxkIG5vdCBmaW5kIGNhcnQgYXNpZGUgYmFja2dyb3VuZFwiKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ2hlY2sgZnJlZSBnaWZ0XHJcbiAgICBjb25zdCAkcHJvZ3Jlc3MgPSAkY2FydEFzaWRlLnF1ZXJ5U2VsZWN0b3IoXCIuY2FydC1hc2lkZV9fcHJvZ3Jlc3NcIik7XHJcblxyXG5cclxuICAgIGlmICgkcHJvZ3Jlc3Mpe1xyXG4gICAgICB0aGlzLmZyZWVHaWZ0KCRwcm9ncmVzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gR2lmdCBub3RlXHJcbiAgICBsZXQgc2hvd0dpZnRNZXNzYWdlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnc2hvd0dpZnRNZXNzYWdlJyk7XHJcbiAgICBjb25zdCAkZ2lmdE1lc3NhZ2luZyA9ICRjYXJ0QXNpZGUucXVlcnlTZWxlY3RvcihcIi5jYXJ0LWFzaWRlX19naWZ0LW5vdGlmaWNhdGlvblwiKTtcclxuXHJcbiAgICBpZiAoJGdpZnRNZXNzYWdpbmcgJiYgc2hvd0dpZnRNZXNzYWdlKXtcclxuICAgICAgY29uc3QgJGZyZWVHaWZ0ID0gJGNhcnRBc2lkZS5xdWVyeVNlbGVjdG9yKFwiLmNhcnQtYXNpZGVfX2xpbmUtaXRlbS5mcmVlLWdpZnRcIik7XHJcbiAgICAgIC8vIE9ubHkgdHJpZ2dlciBvbmNlIGEgZnJlZSBnaWZ0IGlzIHNob3duIGluIHRoZSBjYXJ0XHJcbiAgICAgIGlmICgkZnJlZUdpZnQpe1xyXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgJ2hpZGRlbicgY2xhc3MgYW5kIGZhZGUgdGhlIG9wYWNpdHkgZnJvbSAwIHRvIDFcclxuICAgICAgICAgZ3NhcC50bygkZ2lmdE1lc3NhZ2luZywge1xyXG4gICAgICAgICAgIG9wYWNpdHk6IDEsXHJcbiAgICAgICAgICAgZHVyYXRpb246IDEsIC8vIFRpbWUgdG8gZmFkZSBpblxyXG4gICAgICAgICAgIG9uU3RhcnQ6ICgpID0+ICRnaWZ0TWVzc2FnaW5nLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpLCAvLyBSZW1vdmUgJ2hpZGRlbicgY2xhc3MgYXQgdGhlIHN0YXJ0XHJcbiAgICAgICAgICAgb25Db21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgLy8gQWZ0ZXIgZmFkaW5nIGluLCB3YWl0IGZvciBhIGZldyBzZWNvbmRzLCB0aGVuIGZhZGUgYmFjayB0byAwIGFuZCBhZGQgJ2hpZGRlbicgY2xhc3NcclxuICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICBnc2FwLnRvKCRnaWZ0TWVzc2FnaW5nLCB7XHJcbiAgICAgICAgICAgICAgICAgb3BhY2l0eTogMCxcclxuICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMSwgLy8gVGltZSB0byBmYWRlIG91dFxyXG4gICAgICAgICAgICAgICAgIG9uQ29tcGxldGU6ICgpID0+ICRnaWZ0TWVzc2FnaW5nLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpIC8vIFJlLWFkZCAnaGlkZGVuJyBjbGFzcyBhZnRlciBmYWRlLW91dFxyXG4gICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgIH0sIDIwMDApOyAvLyAyIHNlY29uZHMgZGVsYXkgYmVmb3JlIGZhZGluZyBvdXRcclxuICAgICAgICAgICB9XHJcbiAgICAgICAgIH0pO1xyXG4gICBcclxuICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgnc2hvd0dpZnRNZXNzYWdlJywgZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBzZWxsXHJcbiAgICBjb25zdCAkdXBzZWxsU3dpcGVyID0gJGNhcnRBc2lkZS5xdWVyeVNlbGVjdG9yKFwiLmNhcnQtYXNpZGVfX3Vwc2VsbC1zd2lwZXJcIik7XHJcblxyXG4gICAgaWYgKCR1cHNlbGxTd2lwZXIpe1xyXG4gICAgICBjb25zdCB1cHNlbGwgPSBuZXcgU3dpcGVyKCR1cHNlbGxTd2lwZXIsIHtcclxuICAgICAgICBzcGFjZUJldHdlZW46IDY0LFxyXG4gICAgICAgIHNsaWRlc1BlclZpZXc6IDEsXHJcbiAgICAgICAgbmF2aWdhdGlvbjoge1xyXG4gICAgICAgICAgbmV4dEVsOiBcIi5jYXJ0LWFzaWRlX191cHNlbGwtc3dpcGVyLW5leHRcIixcclxuICAgICAgICAgIHByZXZFbDogXCIuY2FydC1hc2lkZV9fdXBzZWxsLXN3aXBlci1wcmV2XCIsXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBCdWlsZCBhIGJ1bmRsZSBtZXNzYWdpbmdcclxuICAgIGNvbnN0ICRidWlsZEFCdW5kbGVQcm9tcHQgPSAkY2FydEFzaWRlLnF1ZXJ5U2VsZWN0b3IoXCIuY2FydC1hc2lkZV9fYnVpbGQtYS1idW5kbGUtcHJvbXB0XCIpO1xyXG5cclxuICAgIGlmICgkYnVpbGRBQnVuZGxlUHJvbXB0KXtcclxuICAgICAgY29uc3QgJGJ1aWxkQUJ1bmRsZUNUQSA9ICRjYXJ0QXNpZGUucXVlcnlTZWxlY3RvcihcIi5jYXJ0LWFzaWRlX19idWlsZC1hLWJ1bmRsZV9jdGFcIik7XHJcblxyXG4gICAgICAkYnVpbGRBQnVuZGxlQ1RBLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgJGl0ZW1zID0gJGNhcnRBc2lkZS5xdWVyeVNlbGVjdG9yQWxsKFwiLmNhcnQtYXNpZGVfX2xpbmUtaXRlbVwiKTtcclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIGJ1bmRsZSBvYmplY3RcclxuICAgICAgICBsZXQgYnVuZGxlID0ge1xyXG4gICAgICAgICAgYnVuZGxlSWQ6IFwiYnVuZGxlX1wiICsgRGF0ZS5ub3coKSxcclxuICAgICAgICAgIGl0ZW1zOiB7fVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIGNyZWF0ZSBvYmplY3QgdG8gdHJhY2sgcHJvZHVjdHMgZm9yIHJlbW92YWxcclxuICAgICAgICBsZXQgdXBkYXRlRGF0YSA9IHsgdXBkYXRlczoge30gfTtcclxuXHJcbiAgICAgICAgJGl0ZW1zLmZvckVhY2goJGl0ZW0gPT4ge1xyXG4gICAgICAgICAgLy8gR2V0IHByb2R1Y3QgZGF0YVxyXG4gICAgICAgICAgY29uc3QgcHJvZHVjdElkID0gJGl0ZW0uZGF0YXNldC5pZDtcclxuICAgICAgICAgIGNvbnN0IHByb2R1Y3RUaXRsZSA9ICRpdGVtLmRhdGFzZXQudGl0bGU7XHJcbiAgICAgICAgICBjb25zdCBwcm9kdWN0UHJpY2UgPSBwYXJzZUZsb2F0KCRpdGVtLmRhdGFzZXQucHJpY2UpO1xyXG4gICAgICAgICAgY29uc3QgcHJvZHVjdFByaWNlU3RyaW5nID0gJGl0ZW0uZGF0YXNldC5wcmljZVN0cmluZztcclxuICAgICAgICAgIGNvbnN0IGNvbXBhcmVQcm9kdWN0UHJpY2UgPSBwYXJzZUZsb2F0KCRpdGVtLmRhdGFzZXQuY29tcGFyZVByaWNlKTtcclxuICAgICAgICAgIGNvbnN0IGNvbXBhcmVQcm9kdWN0UHJpY2VTdHJpbmcgPSAkaXRlbS5kYXRhc2V0LmNvbXBhcmVQcmljZVN0cmluZztcclxuICAgICAgICAgIGNvbnN0IHByb2R1Y3RJbWFnZSA9ICRpdGVtLmRhdGFzZXQuaW1hZ2U7XHJcbiAgICAgICAgICBjb25zdCBxdWFudGl0eSA9IHBhcnNlSW50KCRpdGVtLmRhdGFzZXQucXVhbnRpdHkpO1xyXG5cclxuICAgICAgICAgIC8vIEFkZCBwcm9kdWN0IHRvIGJ1bmRsZVxyXG4gICAgICAgICAgYnVuZGxlLml0ZW1zW3Byb2R1Y3RJZF0gPSB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBwcm9kdWN0VGl0bGUsXHJcbiAgICAgICAgICAgIHByaWNlOiBwcm9kdWN0UHJpY2UsXHJcbiAgICAgICAgICAgIHByaWNlU3RyaW5nOiBwcm9kdWN0UHJpY2VTdHJpbmcsXHJcbiAgICAgICAgICAgIGNvbXBhcmVQcmljZTogY29tcGFyZVByb2R1Y3RQcmljZSxcclxuICAgICAgICAgICAgY29tcGFyZVByaWNlU3RyaW5nOiBjb21wYXJlUHJvZHVjdFByaWNlU3RyaW5nLFxyXG4gICAgICAgICAgICBpbWFnZTogcHJvZHVjdEltYWdlLFxyXG4gICAgICAgICAgICBxdWFudGl0eTogcXVhbnRpdHlcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgLy8gQWRkIHByb2R1Y3QgdG8gcmVtb3ZhbCByZXF1ZXN0XHJcbiAgICAgICAgICB1cGRhdGVEYXRhLnVwZGF0ZXNbcHJvZHVjdElkXSA9IDA7XHJcbiAgICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIGJ1bmRsZSB0byBsb2NhbFN0b3JhZ2VcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImJ1bmRsZVwiLCBKU09OLnN0cmluZ2lmeShidW5kbGUpKTtcclxuXHJcbiAgICAgICAgLy8gUmVtb3ZlIGN1cnJlbnQgYnVuZGxlIGZyb20gY2FydCB0byBhdm9pZCBkdXBsaWNhdGVzXHJcbiAgICAgICAgYXdhaXQgZmV0Y2goJy9jYXJ0L3VwZGF0ZS5qcycsIHtcclxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkodXBkYXRlRGF0YSlcclxuICAgICAgICB9KTtcclxuICBcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICRidWlsZEFCdW5kbGVQcm9tcHQuZGF0YXNldC5idW5kbGU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEJ1bmRsZSBsaW5lIGl0ZW1zXHJcbiAgICBjb25zdCAkYnVuZGxlTGluZUl0ZW1zID0gJGNhcnRBc2lkZS5xdWVyeVNlbGVjdG9yQWxsKFwiLmNhcnQtYXNpZGVfX2J1bmRsZS1pdGVtXCIpO1xyXG5cclxuICAgIGlmICgkYnVuZGxlTGluZUl0ZW1zKXtcclxuICAgICAgJGJ1bmRsZUxpbmVJdGVtcy5mb3JFYWNoKCRidW5kbGUgPT4ge1xyXG4gICAgICAgIGNvbnN0ICRidW5kbGVJbmZvID0gJGJ1bmRsZS5xdWVyeVNlbGVjdG9yKFwiLmNhcnQtYXNpZGVfX2J1bmRsZS1pdGVtLWluZm9cIik7XHJcbiAgICAgICAgY29uc3QgJHRyaWdnZXIgPSAkYnVuZGxlSW5mby5xdWVyeVNlbGVjdG9yKCcudmlldy1idW5kbGUtdHJpZ2dlcicpO1xyXG4gICAgICAgIGNvbnN0ICRlZGl0ID0gJGJ1bmRsZS5xdWVyeVNlbGVjdG9yKFwiLmNhcnQtYXNpZGVfX2J1bmRsZS1pdGVtLWVkaXRcIik7XHJcbiAgICAgICAgY29uc3QgJHJlbW92ZSA9ICRidW5kbGUucXVlcnlTZWxlY3RvcihcIi5jYXJ0LWFzaWRlX19idW5kbGUtaXRlbS1yZW1vdmVcIilcclxuICAgICAgICBjb25zdCAkYnVuZGxlUHJvZHVjdHMgPSAkYnVuZGxlLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuY2FydC1hc2lkZV9fYnVuZGxlLWxpbmUtaXRlbVwiKTtcclxuXHJcbiAgICAgICAgLy8gdG9nZ2xlIGNvbnRlbnRcclxuICAgICAgICBpZiAoJHRyaWdnZXIpe1xyXG4gICAgICAgICAgJHRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuICAgICAgICAgICAgJGJ1bmRsZUluZm8uY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGVkaXQgYnVuZGxlXHJcbiAgICAgICAgaWYgKCRlZGl0KXtcclxuICAgICAgICAgICRlZGl0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBhc3luYyAoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAvL0JlZm9yZSB3ZSBzZXQgdXAgdGhlIGJ1bmRsZSBmb3IgZWRpdGluZywgaXMgdGhlcmUgYSBoYWxmIHdheSBjb21wbGV0ZWQgb25lPyBcclxuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdCdW5kbGUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYnVuZGxlJyk7ICAgICAgICAvL2lmIChKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidW5kbGUnKSkpe1xyXG4gICAgICAgICAgICBpZihleGlzdGluZ0J1bmRsZSl7XHJcblxyXG4gICAgICAgICAgICAgIC8vT25seSBzdG9yZSB0aGlzIGFzIGEgYmFja3VwIGlmIGl0J3Mgbm90IGFuIEVkaXQgYnVuZGxlXHJcbiAgICAgICAgICAgICAgY29uc3Qgc3RvcmFnZUJ1bmRsZSA9IEpTT04ucGFyc2UoZXhpc3RpbmdCdW5kbGUpO1xyXG4gICAgICAgICAgICAgIGlmKCFzdG9yYWdlQnVuZGxlLmVkaXRpbmdfYnVuZGxlKXtcclxuXHJcbiAgICAgICAgICAgICAgICAvL1NhdmUgYXMgYSBiYWNrdXAgZm9yIGxhdGVyIC0gdGhpcyBpcyBhbiB1bmZpbmlzaGVkIG9uZVxyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3N0b3JlZF9idW5kbGUnLGV4aXN0aW5nQnVuZGxlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBidW5kbGUgb2JqZWN0XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1bmRsZUlkID0gJGJ1bmRsZS5kYXRhc2V0LmJ1bmRsZUlkO1xyXG4gICAgICAgICAgICBsZXQgYnVuZGxlID0ge1xyXG4gICAgICAgICAgICAgICAgYnVuZGxlSWQ6IGJ1bmRsZUlkLFxyXG4gICAgICAgICAgICAgICAgZWRpdGluZ19idW5kbGU6dHJ1ZSxcclxuICAgICAgICAgICAgICAgIGl0ZW1zOiB7fVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgJGJ1bmRsZVByb2R1Y3RzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdElkID0gaXRlbS5kYXRhc2V0LmlkO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RUaXRsZSA9IGl0ZW0uZGF0YXNldC50aXRsZTtcclxuICAgICAgICAgICAgICBjb25zdCBwcm9kdWN0UHJpY2UgPSBwYXJzZUZsb2F0KGl0ZW0uZGF0YXNldC5wcmljZSk7XHJcbiAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdFByaWNlU3RyaW5nID0gaXRlbS5kYXRhc2V0LnByaWNlU3RyaW5nO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVQcm9kdWN0UHJpY2UgPSBwYXJzZUZsb2F0KGl0ZW0uZGF0YXNldC5jb21wYXJlUHJpY2UpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVQcm9kdWN0UHJpY2VTdHJpbmcgPSBpdGVtLmRhdGFzZXQuY29tcGFyZVByaWNlU3RyaW5nO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RJbWFnZSA9IGl0ZW0uZGF0YXNldC5pbWFnZTtcclxuICAgICAgICAgICAgICBjb25zdCBxdWFudGl0eSA9IHBhcnNlSW50KGl0ZW0uZGF0YXNldC5xdWFudGl0eSk7XHJcbiAgXHJcbiAgICAgICAgICAgICAgYnVuZGxlLml0ZW1zW3Byb2R1Y3RJZF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9kdWN0VGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgIHByaWNlOiBwcm9kdWN0UHJpY2UsXHJcbiAgICAgICAgICAgICAgICAgIHByaWNlU3RyaW5nOiBwcm9kdWN0UHJpY2VTdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgIGNvbXBhcmVQcmljZTogY29tcGFyZVByb2R1Y3RQcmljZSxcclxuICAgICAgICAgICAgICAgICAgY29tcGFyZVByaWNlU3RyaW5nOiBjb21wYXJlUHJvZHVjdFByaWNlU3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICBpbWFnZTogcHJvZHVjdEltYWdlLFxyXG4gICAgICAgICAgICAgICAgICBxdWFudGl0eTogcXVhbnRpdHksXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBTdG9yZSB0aGUgYnVuZGxlIGluIGxvY2FsU3RvcmFnZVxyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImJ1bmRsZVwiLCBKU09OLnN0cmluZ2lmeShidW5kbGUpKTtcclxuXHJcbiAgICAgICAgICAgIC8vTmF2aWdhdGUgdG8gdGhlIEVkaXQgdmVyc2lvbiBvZiB0aGUgYnVuZGxlIGJ1aWxkZXJcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAkYnVuZGxlLmRhdGFzZXQuZHluYW1pY0J1bmRsZVVybCArIFwiP2VkaXQ9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoYnVuZGxlSWQpO1xyXG5cclxuICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgLy8gUmVtb3ZlIGN1cnJlbnQgYnVuZGxlIGZyb20gY2FydCB0byBhdm9pZCBkdXBsaWNhdGVzICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGF3YWl0IGZldGNoKCcvY2FydC91cGRhdGUuanMnLCB7XHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkodXBkYXRlRGF0YSlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBSZWRpcmVjdCB1c2VyIHRvIHRoZSBidW5kbGUgcGFnZSBmb3IgZWRpdGluZ1xyXG4gICAgICAgICAgICBpZiAoJGJ1bmRsZS5kYXRhc2V0LnR5cGUgPT0gJ0NsYXNzaWMgQm94Jyl7XHJcbiAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAkYnVuZGxlLmRhdGFzZXQuc3RhdGljQnVuZGxlVXJsO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJGJ1bmRsZS5kYXRhc2V0LmR5bmFtaWNCdW5kbGVVcmw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKi9cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCRyZW1vdmUpIHtcclxuICAgICAgICAgICRyZW1vdmUuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGFzeW5jICgpID0+IHtcclxuICAgICAgICBcclxuICAgICAgICAgICAgLy8gVHJhY2sgcHJvZHVjdHMgZm9yIHJlbW92YWxcclxuICAgICAgICAgICAgbGV0IHVwZGF0ZXMgPSB7fTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgYnVuZGxlSWQgPSAkYnVuZGxlLmRhdGFzZXQuYnVuZGxlSWQ7ICAgICAgICBcclxuICAgICAgICAgICAgJGJ1bmRsZVByb2R1Y3RzLmZvckVhY2goKCRidW5kbGVQcm9kdWN0KSA9PiB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVzWyRidW5kbGVQcm9kdWN0LmRhdGFzZXQua2V5XSA9IDA7IFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vVXBkYXRlIHRoZSBjYXJ0LCBzZXR0aW5nIG9ubHkgdGhlIGl0ZW1zIHdpdGhpbiB0aGlzIGJ1bmRsZSB0byAwXHJcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZVJlc3AgPSBhd2FpdCBmZXRjaCgnL2NhcnQvdXBkYXRlLmpzJywge1xyXG4gICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxyXG4gICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHt1cGRhdGVzfSlcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvL05vIHBvaW50IHdvcmtpbmcgb3V0IGhvdyB0byBkbyBhbnl0aGluZyBlbHNlIHlldCBhcyB3ZSdyZSBub3QgdXNpbmcgY2FydCBhc2lkZVxyXG4gICAgICAgICAgICBsb2NhdGlvbi5yZWxvYWQoKTsgIFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBpZiAoJGNhcnRBc2lkZS5kYXRhc2V0LmJ1bmRsZU9yZGVyTm90ZXMgPT0gJ3RydWUnKXtcclxuICAgICAgdGhpcy51cGRhdGVPcmRlck5vdGUoKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBcclxuXHJcbiAgcmVSZW5kZXJDYXJ0QXNpZGUgPSAoJGVsZW1lbnQsIG5ld1NlY3Rpb25UZXh0KSA9PiB7XHJcbiAgICAvLyBHZXQgdGhlIHRleHQgb2YgdGhlIG5ldyBzZWN0aW9uIGFuZCByZW5kZXIgaXQgdG8gYSBkaXYgdGhhdHMgbm90IGluIHRoZSBET01cclxuICAgIGNvbnN0ICRuZXdTZWN0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuICAgICRuZXdTZWN0aW9uLmlubmVySFRNTCA9IG5ld1NlY3Rpb25UZXh0O1xyXG4gICAgY29uc3QgJG5ld0NhcnRBc2lkZSA9ICRuZXdTZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoXCIuY2FydC1hc2lkZVwiKTtcclxuXHJcbiAgICBjb25zdCAkY3VycmVudEFzaWRlQ29udGFpbmVyID0gJGVsZW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgXCIuY2FydC1hc2lkZV9fY29udGFpbmVyXCJcclxuICAgICk7XHJcbiAgICBjb25zdCAkbmV3QXNpZGVDb250YWluZXIgPSAkbmV3Q2FydEFzaWRlLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgIFwiLmNhcnQtYXNpZGVfX2NvbnRhaW5lclwiXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgJGN1cnJlbnRBc2lkZUNvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoXHJcbiAgICAgICAgXCJjYXJ0LWFzaWRlX19jb250YWluZXItLWVtcHR5XCJcclxuICAgICAgKSAmJlxyXG4gICAgICAhJG5ld0FzaWRlQ29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucyhcImNhcnQtYXNpZGVfX2NvbnRhaW5lci0tZW1wdHlcIilcclxuICAgICkge1xyXG4gICAgICAkY3VycmVudEFzaWRlQ29udGFpbmVyLmlubmVySFRNTCA9ICRuZXdBc2lkZUNvbnRhaW5lci5pbm5lckhUTUw7XHJcbiAgICAgICRjdXJyZW50QXNpZGVDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcImNhcnQtYXNpZGVfX2NvbnRhaW5lci0tZW1wdHlcIik7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAkbmV3QXNpZGVDb250YWluZXIuY2xhc3NMaXN0LmNvbnRhaW5zKFwiY2FydC1hc2lkZV9fY29udGFpbmVyLS1lbXB0eVwiKSAmJlxyXG4gICAgICAhJGN1cnJlbnRBc2lkZUNvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoXCJjYXJ0LWFzaWRlX19jb250YWluZXItLWVtcHR5XCIpXHJcbiAgICApIHtcclxuICAgICAgJGN1cnJlbnRBc2lkZUNvbnRhaW5lci5pbm5lckhUTUwgPSAkbmV3QXNpZGVDb250YWluZXIuaW5uZXJIVE1MO1xyXG4gICAgICAkY3VycmVudEFzaWRlQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJjYXJ0LWFzaWRlX19jb250YWluZXItLWVtcHR5XCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gU2V0IHRoZSBjdXJyZW50IGxpbmUgaXRlbXMgdG8gdGhlIG5ldyBsaW5lIGl0ZW1zXHJcbiAgICAgIGNvbnN0ICRjdXJyZW50TGluZUl0ZW1zID0gJGN1cnJlbnRBc2lkZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgIFwiLmNhcnQtYXNpZGVfX2xpbmUtaXRlbXNcIlxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCAkbmV3TGluZUl0ZW1zID0gJG5ld0FzaWRlQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgXCIuY2FydC1hc2lkZV9fbGluZS1pdGVtc1wiXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoJGN1cnJlbnRMaW5lSXRlbXMgJiYgJG5ld0xpbmVJdGVtcykge1xyXG4gICAgICAgICRjdXJyZW50TGluZUl0ZW1zLmlubmVySFRNTCA9ICRuZXdMaW5lSXRlbXMuaW5uZXJIVE1MO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBVcHNlbGxcclxuICAgICAgY29uc3QgJGN1cnJlbnRDYXJ0QXNpZGVVcHNlbGwgPSAkY3VycmVudEFzaWRlQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgXCIuY2FydC1hc2lkZV9fdXBzZWxsXCJcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0ICRuZXdDYXJ0QXNpZGVVcHNlbGwgPSAkbmV3QXNpZGVDb250YWluZXIucXVlcnlTZWxlY3RvcihcclxuICAgICAgICBcIi5jYXJ0LWFzaWRlX191cHNlbGxcIlxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKCRjdXJyZW50Q2FydEFzaWRlVXBzZWxsICYmICRuZXdDYXJ0QXNpZGVVcHNlbGwpIHtcclxuICAgICAgICAkY3VycmVudENhcnRBc2lkZVVwc2VsbC5pbm5lckhUTUwgPSAkbmV3Q2FydEFzaWRlVXBzZWxsLmlubmVySFRNTDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gU2V0IHRoZSBjYXJ0IGFzaWRlIGZvb3RlciB0byB0aGUgbmV3IGNhcnQgYXNpZGUgZm9vdGVyXHJcbiAgICAgIGNvbnN0ICRjdXJyZW50Rm9vdGVyID0gJGVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5jYXJ0LWFzaWRlX19mb290ZXJcIik7XHJcbiAgICAgIGNvbnN0ICRuZXdGb290ZXIgPSAkbmV3Q2FydEFzaWRlLnF1ZXJ5U2VsZWN0b3IoXCIuY2FydC1hc2lkZV9fZm9vdGVyXCIpO1xyXG5cclxuICAgICAgaWYgKCRjdXJyZW50Rm9vdGVyICYmICRuZXdGb290ZXIpIHtcclxuICAgICAgICAkY3VycmVudEZvb3Rlci5pbm5lckhUTUwgPSAkbmV3Rm9vdGVyLmlubmVySFRNTDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFNldCB0aGUgY2FydCBhc2lkZSBmb290ZXIgdG8gdGhlIG5ldyBjYXJ0IGFzaWRlIGZvb3RlclxyXG4gICAgY29uc3QgJGN1cnJlbnRIZWFkZXIgPSAkZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLmNhcnQtYXNpZGVfX2hlYWRlclwiKTtcclxuICAgIGNvbnN0ICRuZXdIZWFkZXIgPSAkbmV3Q2FydEFzaWRlLnF1ZXJ5U2VsZWN0b3IoXCIuY2FydC1hc2lkZV9faGVhZGVyXCIpO1xyXG5cclxuICAgIGlmICgkY3VycmVudEhlYWRlciAmJiAkbmV3SGVhZGVyKSB7XHJcbiAgICAgICRjdXJyZW50SGVhZGVyLmlubmVySFRNTCA9ICRuZXdIZWFkZXIuaW5uZXJIVE1MO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0VXBDYXJ0QXNpZGUoJGVsZW1lbnQpO1xyXG4gIH07XHJcblxyXG4gIHJlUmVuZGVyU2VjdGlvbnMgPSAoc2VjdGlvbnMpID0+IHtcclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKHNlY3Rpb25zKTtcclxuXHJcbiAgICBjb25zdCAkaGVhZGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImhlYWRlci5oZWFkZXJcIik7XHJcbiAgICBpZiAoJGhlYWRlcikge1xyXG4gICAgICB0aGlzLnJlUmVuZGVySGVhZGVyKCRoZWFkZXIsIHNlY3Rpb25zW1wiaGVhZGVyXCJdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCAkY2FydEFzaWRlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImFzaWRlLmNhcnQtYXNpZGVcIik7XHJcbiAgICBpZiAoJGNhcnRBc2lkZSkge1xyXG4gICAgICB0aGlzLnJlUmVuZGVyQ2FydEFzaWRlKCRjYXJ0QXNpZGUsIHNlY3Rpb25zW1wiY2FydC1hc2lkZVwiXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgJGNhcnRUZW1wbGF0ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJzZWN0aW9uLmNhcnQtdGVtcGxhdGVcIik7XHJcbiAgICBpZiAoJGNhcnRUZW1wbGF0ZSkge1xyXG4gICAgICB0aGlzLnJlUmVuZGVyQ2FydFRlbXBsYXRlKCRjYXJ0VGVtcGxhdGUsIHNlY3Rpb25zW1wiY2FydC10ZW1wbGF0ZVwiXSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gdXBkYXRlL2dldCB0aGUgY2FydFxyXG5cclxuICB1cGRhdGVMaW5lSXRlbVF1YW50aXR5ID0gYXN5bmMgKGtleSwgcXVhbnRpdHkpID0+IHtcclxuICAgIGlmIChrZXkpIHtcclxuICAgICAgY29uc3QgcmVxdWVzdEpzb24gPSB7XHJcbiAgICAgICAgaWQ6IGtleSxcclxuICAgICAgICBxdWFudGl0eTogcGFyc2VJbnQocXVhbnRpdHkpLFxyXG4gICAgICAgIHNlY3Rpb25zOiB0aGlzLnNlY3Rpb25zLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcIi9jYXJ0L2NoYW5nZS5qc1wiLCB7XHJcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RKc29uKSxcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgIHRoaXMucmVSZW5kZXJTZWN0aW9ucyhqc29uLnNlY3Rpb25zKTtcclxuICAgICAgcmV0dXJuIGpzb247XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICByZW1vdmVMaW5lSXRlbUZyb21DYXJ0ID0gYXN5bmMgKGtleSkgPT4ge1xyXG4gICAgaWYgKGtleSkge1xyXG4gICAgICBjb25zdCByZXF1ZXN0SnNvbiA9IHtcclxuICAgICAgICBpZDoga2V5LFxyXG4gICAgICAgIHF1YW50aXR5OiAwLFxyXG4gICAgICAgIHNlY3Rpb25zOiB0aGlzLnNlY3Rpb25zLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcIi9jYXJ0L2NoYW5nZS5qc1wiLCB7XHJcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RKc29uKSxcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgIHRoaXMucmVSZW5kZXJTZWN0aW9ucyhqc29uLnNlY3Rpb25zKTtcclxuICAgICAgcmV0dXJuIGpzb247XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBjbGVhckNhcnQgPSBhc3luYyAoKSA9PiB7XHJcbiAgICBjb25zdCByZXF1ZXN0SnNvbiA9IHtcclxuICAgICAgc2VjdGlvbnM6IHRoaXMuc2VjdGlvbnMsXHJcbiAgICB9O1xyXG4gIFxyXG4gICAgLy8gQ2xlYXIgdGhlIGNhcnRcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCIvY2FydC9jbGVhci5qc1wiLCB7XHJcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgfSxcclxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVxdWVzdEpzb24pLFxyXG4gICAgfSk7XHJcbiAgXHJcbiAgICBjb25zdCBqc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gIFxyXG4gICAgLy8gQ2xlYXIgdGhlIG9yZGVyIG5vdGVcclxuICAgIGF3YWl0IGZldGNoKFwiL2NhcnQvdXBkYXRlLmpzXCIsIHtcclxuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICB9LFxyXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IG5vdGU6IFwiXCIgfSksXHJcbiAgICB9KTtcclxuICBcclxuICAgIC8vIFJlLXJlbmRlciBjYXJ0IHNlY3Rpb25zXHJcbiAgICB0aGlzLnJlUmVuZGVyU2VjdGlvbnMoanNvbi5zZWN0aW9ucyk7XHJcbiAgXHJcbiAgICByZXR1cm4ganNvbjtcclxuICB9OyAgXHJcblxyXG4gIGFkZEl0ZW1Ub0NhcnQgPSBhc3luYyAodmFyaWFudElkLCBxdWFudGl0eSwgc2VsbGluZ1BsYW5JZCA9IG51bGwpID0+IHtcclxuICAgIGlmICh2YXJpYW50SWQgIT09IHVuZGVmaW5lZCAmJiBOdW1iZXIuaXNJbnRlZ2VyKHF1YW50aXR5KSkge1xyXG4gICAgICBjb25zdCBpdGVtT2JqZWN0ID0ge1xyXG4gICAgICAgIGlkOiB2YXJpYW50SWQsXHJcbiAgICAgICAgcXVhbnRpdHk6IHF1YW50aXR5LFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKHNlbGxpbmdQbGFuSWQpIHtcclxuICAgICAgICBpdGVtT2JqZWN0LnNlbGxpbmdfcGxhbiA9IHNlbGxpbmdQbGFuSWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHJlcXVlc3RKc29uID0ge1xyXG4gICAgICAgIGl0ZW1zOiBbaXRlbU9iamVjdF0sXHJcbiAgICAgICAgc2VjdGlvbnM6IHRoaXMuc2VjdGlvbnMsXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCIvY2FydC9hZGQuanNcIiwge1xyXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyZXF1ZXN0SnNvbiksXHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcclxuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgIHRoaXMucmVSZW5kZXJTZWN0aW9ucyhqc29uLnNlY3Rpb25zKTtcclxuICAgICAgICByZXR1cm4ganNvbjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcXVpY2tBZGRJdGVtVG9DYXJ0ID0gYXN5bmMgKHZhcmlhbnRJZCkgPT4ge1xyXG4gICAgaWYgKHZhcmlhbnRJZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW1PYmplY3QgPSB7XHJcbiAgICAgICAgaWQ6IHZhcmlhbnRJZCxcclxuICAgICAgICBxdWFudGl0eTogMSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHJlcXVlc3RKc29uID0ge1xyXG4gICAgICAgIGl0ZW1zOiBbaXRlbU9iamVjdF0sXHJcbiAgICAgICAgc2VjdGlvbnM6IHRoaXMuc2VjdGlvbnMsXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCIvY2FydC9hZGQuanNcIiwge1xyXG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXHJcbiAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyZXF1ZXN0SnNvbiksXHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcclxuICAgICAgICBjb25zdCBqc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgIHRoaXMucmVSZW5kZXJTZWN0aW9ucyhqc29uLnNlY3Rpb25zKTtcclxuICAgICAgICByZXR1cm4ganNvbjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgZ2V0Q2FydCA9IGFzeW5jICgpID0+IHtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCIvY2FydC5qc1wiLCB7XHJcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICBpZiAocmVzcG9uc2Uub2spIHtcclxuICAgICAgY29uc3QganNvbiA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgcmV0dXJuIGpzb247XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICByZW1vdmVTdWJzY3JpcHRpb24gPSBhc3luYyAoa2V5LCB2YXJpYW50SWQsIHF1YW50aXR5KSA9PiB7XHJcbiAgICBpZiAoa2V5KSB7XHJcbiAgICAgIC8vIFJlbW92ZSB0aGUgc3Vic2NyaXB0aW9uIGZyb20gdGhlIGNhcnRcclxuICAgICAgY29uc3QgcmVtb3ZlUmVxdWVzdEpzb24gPSB7XHJcbiAgICAgICAgaWQ6IGtleSxcclxuICAgICAgICBxdWFudGl0eTogMCxcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgcmVtb3ZlUmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcIi9jYXJ0L2NoYW5nZS5qc1wiLCB7XHJcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICB9LFxyXG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlbW92ZVJlcXVlc3RKc29uKSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBpdGVtT2JqZWN0ID0ge1xyXG4gICAgICAgIGlkOiB2YXJpYW50SWQsXHJcbiAgICAgICAgcXVhbnRpdHk6IHF1YW50aXR5LFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBhZGRSZXF1ZXN0SnNvbiA9IHtcclxuICAgICAgICBpdGVtczogW2l0ZW1PYmplY3RdLFxyXG4gICAgICAgIHNlY3Rpb25zOiB0aGlzLnNlY3Rpb25zLFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBhZGRSZXNwb25zZSA9IGF3YWl0IGZldGNoKFwiL2NhcnQvYWRkLmpzXCIsIHtcclxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYWRkUmVxdWVzdEpzb24pLFxyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QganNvbiA9IGF3YWl0IGFkZFJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgdGhpcy5yZVJlbmRlclNlY3Rpb25zKGpzb24uc2VjdGlvbnMpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGFkZFN1YnNjcmlwdGlvbiA9IGFzeW5jIChrZXksIHZhcmlhbnRJZCwgcXVhbnRpdHksIHNlbGxpbmdQbGFuSWQpID0+IHtcclxuICAgIGlmIChrZXkpIHtcclxuICAgICAgLy8gUmVtb3ZlIHRoZSBzdWJzY3JpcHRpb24gZnJvbSB0aGUgY2FydFxyXG4gICAgICBjb25zdCByZW1vdmVSZXF1ZXN0SnNvbiA9IHtcclxuICAgICAgICBpZDoga2V5LFxyXG4gICAgICAgIHF1YW50aXR5OiAwLFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCByZW1vdmVSZXNwb25zZSA9IGF3YWl0IGZldGNoKFwiL2NhcnQvY2hhbmdlLmpzXCIsIHtcclxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVtb3ZlUmVxdWVzdEpzb24pLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGl0ZW1PYmplY3QgPSB7XHJcbiAgICAgICAgaWQ6IHZhcmlhbnRJZCxcclxuICAgICAgICBxdWFudGl0eTogcXVhbnRpdHksXHJcbiAgICAgICAgc2VsbGluZ19wbGFuOiBzZWxsaW5nUGxhbklkLFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBhZGRSZXF1ZXN0SnNvbiA9IHtcclxuICAgICAgICBpdGVtczogW2l0ZW1PYmplY3RdLFxyXG4gICAgICAgIHNlY3Rpb25zOiB0aGlzLnNlY3Rpb25zLFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBhZGRSZXNwb25zZSA9IGF3YWl0IGZldGNoKFwiL2NhcnQvYWRkLmpzXCIsIHtcclxuICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYWRkUmVxdWVzdEpzb24pLFxyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QganNvbiA9IGF3YWl0IGFkZFJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgdGhpcy5yZVJlbmRlclNlY3Rpb25zKGpzb24uc2VjdGlvbnMpO1xyXG4gICAgfVxyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IENhcnQ7XHJcbiJdLCJuYW1lcyI6WyJnc2FwIiwiU3dpcGVyIiwiQ2FydCIsIndpbmRvdyIsIlNob3BpZnkiLCJyb3V0ZXMiLCJyb290IiwiJGNhcnRDaGVja291dEJ1dHRvbiIsIiRjYWxlbmRlckJ1dHRvbiIsImNsYXNzTGlzdCIsInJlbW92ZSIsImRpc2FibGVkIiwiYWRkIiwiJHVpQmxvY2tlciIsImZldGNoIiwic2VjdGlvbnMiLCJ0aGVuIiwicmVzIiwianNvbiIsInNlY3Rpb25zUmVzcCIsInJlUmVuZGVyU2VjdGlvbnMiLCJoaWRlVUlCbG9ja2VyIiwiJHByb2R1Y3RDb250cm9scyIsIiRhZGRvbkRlY3JlYXNlIiwiJHByb2R1Y3RRdHkiLCIkYWRkb25JbmNyZWFzZSIsInN0eWxlIiwib3BhY2l0eSIsInRleHRDb250ZW50IiwiJGxpbmVJdGVtUXVhbnRpdHlEZWNyZWFzZSIsIiRsaW5lSXRlbVF1YW50aXR5VmFsdWUiLCIkbGluZUl0ZW1RdWFudGl0eUluY3JlYXNlIiwiJGJ1bmRsZUxpbmVJdGVtcyIsIiRsaW5lSXRlbXMiLCJ1cGRhdGVzIiwiYnVuZGxlcyIsInJlZ3VsYXJfcHJvZHVjdHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiJGJ1bmRsZUxpbmVJdGVtIiwiYnVuZGxlU2VsbGluZ1BsYW5JZCIsImRhdGFzZXQiLCJzZWxsaW5nUGxhbklkIiwiYnVuZGxlSWQiLCJidW5kbGVfaWQiLCJidW5kbGVfbGluZV9pdGVtIiwiYnVuZGxlX3VybCIsInVybCIsIiRsaW5lSXRlbSIsInNlbGxpbmdQbGFuSXNSZXF1aXJlZCIsImtleSIsInF1YW50aXR5IiwicGFyc2VJbnQiLCJpZCIsInNlbGxpbmdfcGxhbiIsIk9iamVjdCIsImtleXMiLCJzaG93VUlCbG9ja2VyIiwiYWxsUmVndWxhclByb2R1Y3RQcm9taXNlcyIsInJlZ3VsYXJQcm9taXNlcyIsInZhbHVlcyIsIm1hcCIsIml0ZW0iLCJtZXRob2QiLCJoZWFkZXJzIiwiYm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJwdXNoIiwiUHJvbWlzZSIsImFsbCIsImJ1bmRsZV9pbmZvIiwiJGJ1bmRsZVByb2R1Y3RzIiwicXVlcnlTZWxlY3RvckFsbCIsImJ1bmRsZSIsInNldHVwQnVuZGxlT2JqZWN0IiwiZGVsZXRlQnVuZGxlIiwiZGVsZXRlUmVzdWx0Iiwib2siLCJFcnJvciIsImFkZE5ld0J1bmRsZVRvQ2FydCIsImFkZFJlc3AiLCJjb25zb2xlIiwibG9nIiwiZmV0Y2hBbmRSZXJlbmRlclNlY3Rpb25zIiwiZXJyb3IiLCJhbGVydCIsImxvY2F0aW9uIiwicmVsb2FkIiwiYWN0aXZlU2VsbGluZ1BsYW5JZCIsImFjdGl2ZVNlbGxpbmdQbGFuTmFtZSIsInNlbGxpbmdQbGFuTmFtZSIsImF2YWlsYWJsZVBsYW5zIiwicGFyc2UiLCJzZWxsaW5nUGxhbkluZm8iLCJtYXRjaGVkUGxhbiIsImZpbmQiLCJwbGFuIiwibmFtZSIsIiRhZGRPbkxpbmVJdGVtcyIsIiRhZGRPbkxpbmVJdGVtIiwidXBkYXRlUmVzcCIsIiRpblVzZVNlbGxpbmdQbGFuSWQiLCJnZXREeW5hbWljQnVuZGxlIiwiZHluYW1pY0J1bmRsZURhdGEiLCJsaW5lSXRlbXMiLCJlbnRyaWVzIiwiaXRlbXMiLCJwcm9kdWN0SWQiLCJpdGVtRGF0YSIsInByb3BlcnRpZXMiLCJfYnVuZGxlX2lkIiwiX2R5bmFtaWNCb3hJbmRleCIsIl9keW5hbWljQm94SWQiLCJEeW5hbWljQm94IiwiYm94SWQiLCJfYnVuZGxlVHlwZSIsIl9idW5kbGVVcmwiLCJyZXF1ZXN0SnNvbiIsIiRidW5kbGVQcm9kdWN0IiwiZWRpdGluZ19idW5kbGUiLCJwcm9kdWN0VGl0bGUiLCJ0aXRsZSIsInByb2R1Y3RQcmljZSIsInBhcnNlRmxvYXQiLCJwcmljZSIsInByb2R1Y3RQcmljZVN0cmluZyIsInByaWNlU3RyaW5nIiwiY29tcGFyZVByb2R1Y3RQcmljZSIsImNvbXBhcmVQcmljZSIsImNvbXBhcmVQcm9kdWN0UHJpY2VTdHJpbmciLCJjb21wYXJlUHJpY2VTdHJpbmciLCJwcm9kdWN0SW1hZ2UiLCJpbWFnZSIsInJlc3BvbnNlIiwiZGF0YSIsImxvZ29TdmciLCJxdWVyeVNlbGVjdG9yIiwic2V0IiwicG9zaXRpb24iLCJ0b3AiLCJsZWZ0IiwidHJhbnNmb3JtT3JpZ2luIiwieFBlcmNlbnQiLCJ5UGVyY2VudCIsInNwaW5UaW1lbGluZSIsInRpbWVsaW5lIiwicmVwZWF0IiwidGltZVNjYWxlIiwidG8iLCJyb3RhdGlvbiIsImR1cmF0aW9uIiwiZWFzZSIsImtpbGwiLCIkaGVhZGVyIiwibmV3U2VjdGlvblRleHQiLCIkbmV3U2VjdGlvbiIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsIiRuZXdIZWFkZXIiLCIkY3VycmVudERlc2t0b3BDYXJ0TGluayIsIiRuZXdEZXNrdG9wQ2FydExpbmsiLCIkY3VycmVudE1vYmlsZUNhcnRMaW5rIiwiJG5ld01vYmlsZUNhcnRMaW5rIiwiJGN1cnJlbnRNb2JpbGVNZW51Q2FydExpbmsiLCIkbmV3TW9iaWxlTWVudUNhcnRMaW5rIiwiJGN1cnJlbnROYXZiYXJDYXJ0IiwiJG5ld05hdmJhckNhcnQiLCJ0eXBlIiwidmFyaWFudElkIiwiJGxpbmVJdGVtUXVhbnRpdHlzIiwiJGxpbmVJdGVtUXVhbnRpdHkiLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsIm5ld1F0eSIsInBhdXNlUXR5QnRuIiwidXBkYXRlTGluZUl0ZW1RdWFudGl0eSIsImRlY3JlYXNlUmVzcG9uc2UiLCJpbmNyZWFzZVJlc3BvbnNlIiwiJGxpbmVJdGVtUmVtb3ZlIiwiJGVsZW1lbnQiLCJyZW1vdmVMaW5lSXRlbUZyb21DYXJ0IiwicmVtb3ZlUmVzcG9uc2UiLCIkY2FydFRlbXBsYXRlIiwiJGxpbmVJdGVtc0NvbnRhaW5lciIsImluVXNlU2VsbGluZ1BsYW5JZCIsImluVXNlU2VsbGluZ1BsYW5OYW1lIiwiaXNCdWlsZEFCdW5kbGUiLCJpc0FkZE9ucyIsInJlbW92ZUFkZE9uUHJvZHVjdHMiLCJhbGxTZWxsaW5nUGxhbnNTeW5jZWQiLCJzeW5jaHJvbmlzZVNlbGxpbmdQbGFuc0Fjcm9zc0xpbmVJdGVtcyIsImFkZExpbmVJdGVtRXZlbnRMaXN0ZW5lcnMiLCIkZGVsZXRlQnVuZGxlQnV0dG9uIiwiJGVkaXQiLCIkdXBncmFkZVRvU3Vic2NyaXB0aW9ucyIsInJlc3VsdCIsImUiLCJleGlzdGluZ0J1bmRsZSIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJzdG9yYWdlQnVuZGxlIiwic2V0SXRlbSIsImhyZWYiLCJ0YXJnZXQiLCIkdXBncmFkZVRvU3Vic2NyaXB0aW9uIiwiYWRkb25LZXkiLCJhZGRPblF1YW50aXR5IiwiYWRkT252YXJpYW50SWQiLCJwYXVzZUFkZG9uUXR5QnRuIiwiYWRkSXRlbVRvQ2FydCIsIiRzZWxsaW5nUGxhblNlbGVjdGlvbkNvbnRhaW5lciIsIiRzZWxsaW5nUGxhblNlbGVjdGlvbkNvbnRhaW5lclNlbGVjdCIsInZhbHVlIiwicmVtb3ZlU2VsbGluZ1BsYW5zRnJvbUFsbEFwcGxpY2FibGVQcm9kdWN0cyIsImNob3NlblBsYW5JZCIsImNob3NlblBsYW5OYW1lIiwib3B0aW9ucyIsInNlbGVjdGVkSW5kZXgiLCJ0ZXh0IiwidG9Mb3dlckNhc2UiLCIkY2FydENoZWNrb3V0QnRuIiwiJGNhbGVuZGVyQ2hlY2tvdXRCdG4iLCIkY2FydERlbGl2ZXJ5Q29udGFpbmVyIiwiY29udGFpbnMiLCJlbmFibGVDYXJ0Q2hlY2tvdXRCdG4iLCIkZGVsaXZlcnlJbnB1dFRleHQiLCJkZWxpdmVyeURhdGVNb25pdG9yUnVubmluZyIsInBhcmVudEVsZW1lbnQiLCJjbGljayIsImxhc3RWYWx1ZSIsInNldEludGVydmFsIiwiY3VycmVudFZhbHVlIiwiX19CSU5BRVJZX0RFTElWRVJZX0RBVEVfXyIsImRhdGVUZXh0IiwiZGF0ZSIsImluY2x1ZGVzIiwicGFydHMiLCJzcGxpdCIsIkRhdGUiLCJkYXlOYW1lIiwidG9Mb2NhbGVEYXRlU3RyaW5nIiwid2Vla2RheSIsImRheSIsImdldERhdGUiLCJtb250aE5hbWUiLCJtb250aCIsInN1ZmZpeCIsIiR5ZWxsb3dNZXNzYWdlcyIsImlubmVyV2lkdGgiLCIkeWVsbG93TWVzc2FnZUNvbnRhaW5lciIsIiR5ZWxsb3dNZXNzYWdlIiwib25Db21wbGV0ZSIsIiRkZWxpdmVyeUluZm9Qb3B1cCIsIiRkZWxpdmVyeUluZm9Qb3B1cFRyaWdnZXIiLCIkZGVsaXZlcnlJbmZvUG9wdXBCZyIsIiRkZWxpdmVyeUluZm9Qb3B1cENsb3NlIiwiJGRlbGl2ZXJ5QWNjb3JkaW9ucyIsIiRkZWxpdmVyeUFjY29yZGlvbiIsIiRkZWxpdmVyeUFjY29yZGlvblRyaWdnZXIiLCJ0b2dnbGUiLCIkZW1wdHlDYXJ0Q29udGFpbmVyIiwiYnVuZGxlRGF0YSIsIiRidW5kbGVJdGVtUGxhY2Vob2xkZXJDb250YWluZXIiLCIkYnVuZGxlSXRlbVRpdGxlIiwiJGJ1bmRsZUl0ZW1CdXR0b25Db250YWluZXIiLCJjb21wbGV0ZUJ1bmRsZVRleHQiLCJhYmFuZG9uZWRCdW5kbGVUZXh0IiwiJGNsb25lVGVtcGxhdGUiLCIkcGxhY2VIb2xkZXJzTGlzdCIsImluZGV4IiwiJGNsb25lZEltYWdlQ29udCIsImNsb25lTm9kZSIsInByZXBlbmQiLCJ0YXJnZXRQbGFjZWhvbGRlckZyYW1lIiwiJGN1cnJlbnRUZW1wbGF0ZUNvbnRhaW5lciIsIiRuZXdUZW1wbGF0ZUNvbnRhaW5lciIsIiRjdXJyZW50Q2FydExpbmVJdGVtc0hlYWRlciIsIiRuZXdDYXJ0TGluZUl0ZW1zSGVhZGVyIiwiJGN1cnJlbnRMaW5lSXRlbXMiLCIkbmV3TGluZUl0ZW1zIiwiJGN1cnJlbnRTdW1tYXJ5IiwiJG5ld1N1bW1hcnkiLCIkb2xkVG90YWxzQ29udGFpbmVyIiwiJG5ld1RvdGFsc0NvbnRhaW5lciIsIiRvbGRTZWxsaW5nUGxhblNlbGVjdENvbnRhaW5lciIsIiRuZXdTZWxsaW5nUGxhblNlbGVjdENvbnRhaW5lciIsIiRvbGRTdW1tYXJ5RGVsaXZlcnlDb250YWluZXIiLCIkbmV3U3VtbWFyeURlbGl2ZXJ5Q29udGFpbmVyIiwic2V0VXBDYXJ0VGVtcGxhdGUiLCIkcHJvZ3Jlc3MiLCJjYXJ0IiwidGhyZXNob2xkIiwiZ2lmdFRocmVzaG9sZCIsImdpZnQiLCJnaWZ0RW5hYmxlZCIsInNlc3Npb25TdG9yYWdlIiwiJGNhcnRBc2lkZSIsIiRyZWNvbWVuZGVkSXRlbXMiLCIkcmVjb21lbmRlZEl0ZW0iLCIkcmVjb21lbmRlZEl0ZW1BZGQiLCJxdWlja0FkZEl0ZW1Ub0NhcnQiLCIkY2FydEFzaWRlQ2xlYXIiLCJzdG9wUHJvcGFnYXRpb24iLCJjbGVhckNhcnQiLCIkY2FydEFzaWRlQ2xvc2UiLCIkYm9keSIsIiRjYXJ0QXNpZGVCYWNrZ3JvdW5kIiwiZnJlZUdpZnQiLCJzaG93R2lmdE1lc3NhZ2UiLCIkZ2lmdE1lc3NhZ2luZyIsIiRmcmVlR2lmdCIsIm9uU3RhcnQiLCJzZXRUaW1lb3V0IiwiJHVwc2VsbFN3aXBlciIsInVwc2VsbCIsInNwYWNlQmV0d2VlbiIsInNsaWRlc1BlclZpZXciLCJuYXZpZ2F0aW9uIiwibmV4dEVsIiwicHJldkVsIiwiJGJ1aWxkQUJ1bmRsZVByb21wdCIsIiRidWlsZEFCdW5kbGVDVEEiLCIkaXRlbXMiLCJub3ciLCJ1cGRhdGVEYXRhIiwiJGl0ZW0iLCIkYnVuZGxlIiwiJGJ1bmRsZUluZm8iLCIkdHJpZ2dlciIsIiRyZW1vdmUiLCJkeW5hbWljQnVuZGxlVXJsIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiYnVuZGxlT3JkZXJOb3RlcyIsInVwZGF0ZU9yZGVyTm90ZSIsIiRuZXdDYXJ0QXNpZGUiLCIkY3VycmVudEFzaWRlQ29udGFpbmVyIiwiJG5ld0FzaWRlQ29udGFpbmVyIiwiJGN1cnJlbnRDYXJ0QXNpZGVVcHNlbGwiLCIkbmV3Q2FydEFzaWRlVXBzZWxsIiwiJGN1cnJlbnRGb290ZXIiLCIkbmV3Rm9vdGVyIiwiJGN1cnJlbnRIZWFkZXIiLCJzZXRVcENhcnRBc2lkZSIsInJlUmVuZGVySGVhZGVyIiwicmVSZW5kZXJDYXJ0QXNpZGUiLCJyZVJlbmRlckNhcnRUZW1wbGF0ZSIsIm5vdGUiLCJ1bmRlZmluZWQiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJpdGVtT2JqZWN0IiwicmVtb3ZlUmVxdWVzdEpzb24iLCJhZGRSZXF1ZXN0SnNvbiIsImFkZFJlc3BvbnNlIiwidXNlQ2FydEFzaWRlIiwic3RhdGljQnVuZGxlcyIsImJ1bmRsZU5vdGVzIiwiYnVuZGxlVGl0bGUiLCJ0cmltIiwiaXRlbUxpc3QiLCJpdGVtTGluZXMiLCJBcnJheSIsImZyb20iLCJsaSIsIm5vdGVTZWN0aW9uIiwiam9pbiIsImZ1bGxOb3RlIl0sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./resources/scripts/modules/Cart.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/modules/Money.js\":\r\n/*!********************************************!*\\\r\n  !*** ./resources/scripts/modules/Money.js ***!\r\n  \\********************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"Money\\\": () => (/* binding */ Money),\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\nfunction _typeof(obj) { \\\"@babel/helpers - typeof\\\"; return _typeof = \\\"function\\\" == typeof Symbol && \\\"symbol\\\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \\\"function\\\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \\\"symbol\\\" : typeof obj; }, _typeof(obj); }\\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\\"value\\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \\\"prototype\\\", { writable: false }); return Constructor; }\\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\\"Cannot call a class as a function\\\"); } }\\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(arg) { var key = _toPrimitive(arg, \\\"string\\\"); return _typeof(key) === \\\"symbol\\\" ? key : String(key); }\\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \\\"object\\\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \\\"default\\\"); if (_typeof(res) !== \\\"object\\\") return res; throw new TypeError(\\\"@@toPrimitive must return a primitive value.\\\"); } return (hint === \\\"string\\\" ? String : Number)(input); }\\n// Based on the gist from stewartknapman that can be found here https://gist.github.com/stewartknapman/8d8733ea58d2314c373e94114472d44c, Cheers Mate\\n\\nvar Money = /*#__PURE__*/_createClass(function Money() {\\n  var _this = this;\\n  _classCallCheck(this, Money);\\n  _defineProperty(this, \\\"money_format\\\", \\\"\u00A3{{amount}}\\\");\\n  _defineProperty(this, \\\"money_with_currency_format\\\", \\\"\u00A3{{amount}} GBP\\\");\\n  _defineProperty(this, \\\"formatMoney\\\", function (cents, format) {\\n    if (typeof cents == \\\"string\\\") {\\n      cents = cents.replace(\\\".\\\", \\\"\\\");\\n    }\\n    var value = \\\"\\\";\\n    var placeholderRegex = /\\\\{\\\\{\\\\s*(\\\\w+)\\\\s*\\\\}\\\\}/;\\n    var formatString = format || _this.money_format;\\n    var defaultOption = function defaultOption(opt, def) {\\n      return typeof opt == \\\"undefined\\\" ? def : opt;\\n    };\\n    var formatWithDelimiters = function formatWithDelimiters(number, precision, thousands, decimal) {\\n      precision = defaultOption(precision, 2);\\n      thousands = defaultOption(thousands, \\\",\\\");\\n      decimal = defaultOption(decimal, \\\".\\\");\\n      if (isNaN(number) || number == null) {\\n        return 0;\\n      }\\n      number = (number / 100.0).toFixed(precision);\\n      var parts = number.split(\\\".\\\"),\\n        dollars = parts[0].replace(/(\\\\d)(?=(\\\\d\\\\d\\\\d)+(?!\\\\d))/g, \\\"$1\\\" + thousands),\\n        cents = parts[1] ? decimal + parts[1] : \\\"\\\";\\n      return dollars + cents;\\n    };\\n    switch (formatString.match(placeholderRegex)[1]) {\\n      case \\\"amount\\\":\\n        value = formatWithDelimiters(cents, 2);\\n        break;\\n      case \\\"amount_no_decimals\\\":\\n        value = formatWithDelimiters(cents, 0);\\n        break;\\n      case \\\"amount_with_comma_separator\\\":\\n        value = formatWithDelimiters(cents, 2, \\\".\\\", \\\",\\\");\\n        break;\\n      case \\\"amount_no_decimals_with_comma_separator\\\":\\n        value = formatWithDelimiters(cents, 0, \\\".\\\", \\\",\\\");\\n        break;\\n      case \\\"amount_with_apostrophe_separator\\\":\\n        value = formatWithDelimiters(cents, 2, \\\"'\\\", \\\".\\\");\\n        break;\\n      case \\\"amount_no_trailing_zeros\\\":\\n        value = formatWithDelimiters(cents, 2).replace(/\\\\.00$/, \\\"\\\");\\n        break;\\n    }\\n    return formatString.replace(placeholderRegex, value);\\n  });\\n  var $jsonMoney = document.querySelector(\\\".json-money\\\");\\n  if ($jsonMoney) {\\n    var moneyData = JSON.parse($jsonMoney.textContent);\\n    this.money_format = moneyData === null || moneyData === void 0 ? void 0 : moneyData.money_format;\\n    this.money_with_currency_format = moneyData === null || moneyData === void 0 ? void 0 : moneyData.money_with_currency_format;\\n  }\\n});\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Money);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9tb2R1bGVzL01vbmV5LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOztBQUVPLElBQU1BLEtBQUssNkJBSWhCLGlCQUFjO0VBQUE7RUFBQTtFQUFBLHNDQUhDLGFBQWE7RUFBQSxvREFDQyxpQkFBaUI7RUFBQSxxQ0FZaEMsVUFBQ0MsS0FBSyxFQUFFQyxNQUFNLEVBQUs7SUFDL0IsSUFBSSxPQUFPRCxLQUFLLElBQUksUUFBUSxFQUFFO01BQzVCQSxLQUFLLEdBQUdBLEtBQUssQ0FBQ0UsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDaEM7SUFDQSxJQUFJQyxLQUFLLEdBQUcsRUFBRTtJQUNkLElBQU1DLGdCQUFnQixHQUFHLHFCQUFxQjtJQUM5QyxJQUFNQyxZQUFZLEdBQUdKLE1BQU0sSUFBSSxLQUFJLENBQUNLLFlBQVk7SUFFaEQsSUFBTUMsYUFBYSxHQUFHLFNBQWhCQSxhQUFhLENBQUlDLEdBQUcsRUFBRUMsR0FBRyxFQUFLO01BQ2xDLE9BQU8sT0FBT0QsR0FBRyxJQUFJLFdBQVcsR0FBR0MsR0FBRyxHQUFHRCxHQUFHO0lBQzlDLENBQUM7SUFFRCxJQUFNRSxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CLENBQUlDLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBSztNQUN0RUYsU0FBUyxHQUFHTCxhQUFhLENBQUNLLFNBQVMsRUFBRSxDQUFDLENBQUM7TUFDdkNDLFNBQVMsR0FBR04sYUFBYSxDQUFDTSxTQUFTLEVBQUUsR0FBRyxDQUFDO01BQ3pDQyxPQUFPLEdBQUdQLGFBQWEsQ0FBQ08sT0FBTyxFQUFFLEdBQUcsQ0FBQztNQUVyQyxJQUFJQyxLQUFLLENBQUNKLE1BQU0sQ0FBQyxJQUFJQSxNQUFNLElBQUksSUFBSSxFQUFFO1FBQ25DLE9BQU8sQ0FBQztNQUNWO01BRUFBLE1BQU0sR0FBRyxDQUFDQSxNQUFNLEdBQUcsS0FBSyxFQUFFSyxPQUFPLENBQUNKLFNBQVMsQ0FBQztNQUU1QyxJQUFNSyxLQUFLLEdBQUdOLE1BQU0sQ0FBQ08sS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUM3QkMsT0FBTyxHQUFHRixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUNmLE9BQU8sQ0FDeEIsMEJBQTBCLEVBQzFCLElBQUksR0FBR1csU0FBUyxDQUNqQjtRQUNEYixLQUFLLEdBQUdpQixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUdILE9BQU8sR0FBR0csS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7TUFFNUMsT0FBT0UsT0FBTyxHQUFHbkIsS0FBSztJQUN4QixDQUFDO0lBRUQsUUFBUUssWUFBWSxDQUFDZSxLQUFLLENBQUNoQixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUM3QyxLQUFLLFFBQVE7UUFDWEQsS0FBSyxHQUFHTyxvQkFBb0IsQ0FBQ1YsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN4QztNQUNBLEtBQUssb0JBQW9CO1FBQ3ZCRyxLQUFLLEdBQUdPLG9CQUFvQixDQUFDVixLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDO01BQ0EsS0FBSyw2QkFBNkI7UUFDaENHLEtBQUssR0FBR08sb0JBQW9CLENBQUNWLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztRQUNsRDtNQUNBLEtBQUsseUNBQXlDO1FBQzVDRyxLQUFLLEdBQUdPLG9CQUFvQixDQUFDVixLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDbEQ7TUFDQSxLQUFLLGtDQUFrQztRQUNyQ0csS0FBSyxHQUFHTyxvQkFBb0IsQ0FBQ1YsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ2xEO01BQ0EsS0FBSywwQkFBMEI7UUFDN0JHLEtBQUssR0FBR08sb0JBQW9CLENBQUNWLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQ0UsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDN0Q7SUFBTTtJQUVSLE9BQU9HLFlBQVksQ0FBQ0gsT0FBTyxDQUFDRSxnQkFBZ0IsRUFBRUQsS0FBSyxDQUFDO0VBQ3RELENBQUM7RUEvREMsSUFBTWtCLFVBQVUsR0FBR0MsUUFBUSxDQUFDQyxhQUFhLENBQUMsYUFBYSxDQUFDO0VBRXhELElBQUlGLFVBQVUsRUFBRTtJQUNkLElBQU1HLFNBQVMsR0FBR0MsSUFBSSxDQUFDQyxLQUFLLENBQUNMLFVBQVUsQ0FBQ00sV0FBVyxDQUFDO0lBQ3BELElBQUksQ0FBQ3JCLFlBQVksR0FBR2tCLFNBQVMsYUFBVEEsU0FBUyx1QkFBVEEsU0FBUyxDQUFFbEIsWUFBWTtJQUMzQyxJQUFJLENBQUNzQiwwQkFBMEIsR0FBR0osU0FBUyxhQUFUQSxTQUFTLHVCQUFUQSxTQUFTLENBQUVJLDBCQUEwQjtFQUN6RTtBQUNGLENBQUM7QUEyREgsaUVBQWU3QixLQUFLIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9yZXNvdXJjZXMvc2NyaXB0cy9tb2R1bGVzL01vbmV5LmpzPzQzNzciXSwic291cmNlc0NvbnRlbnQiOlsiLy8gQmFzZWQgb24gdGhlIGdpc3QgZnJvbSBzdGV3YXJ0a25hcG1hbiB0aGF0IGNhbiBiZSBmb3VuZCBoZXJlIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3N0ZXdhcnRrbmFwbWFuLzhkODczM2VhNThkMjMxNGMzNzNlOTQxMTQ0NzJkNDRjLCBDaGVlcnMgTWF0ZVxyXG5cclxuZXhwb3J0IGNsYXNzIE1vbmV5IHtcclxuICBtb25leV9mb3JtYXQgPSBcIsKje3thbW91bnR9fVwiO1xyXG4gIG1vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0ID0gXCLCo3t7YW1vdW50fX0gR0JQXCI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgY29uc3QgJGpzb25Nb25leSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuanNvbi1tb25leVwiKTtcclxuXHJcbiAgICBpZiAoJGpzb25Nb25leSkge1xyXG4gICAgICBjb25zdCBtb25leURhdGEgPSBKU09OLnBhcnNlKCRqc29uTW9uZXkudGV4dENvbnRlbnQpO1xyXG4gICAgICB0aGlzLm1vbmV5X2Zvcm1hdCA9IG1vbmV5RGF0YT8ubW9uZXlfZm9ybWF0O1xyXG4gICAgICB0aGlzLm1vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0ID0gbW9uZXlEYXRhPy5tb25leV93aXRoX2N1cnJlbmN5X2Zvcm1hdDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvcm1hdE1vbmV5ID0gKGNlbnRzLCBmb3JtYXQpID0+IHtcclxuICAgIGlmICh0eXBlb2YgY2VudHMgPT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBjZW50cyA9IGNlbnRzLnJlcGxhY2UoXCIuXCIsIFwiXCIpO1xyXG4gICAgfVxyXG4gICAgbGV0IHZhbHVlID0gXCJcIjtcclxuICAgIGNvbnN0IHBsYWNlaG9sZGVyUmVnZXggPSAvXFx7XFx7XFxzKihcXHcrKVxccypcXH1cXH0vO1xyXG4gICAgY29uc3QgZm9ybWF0U3RyaW5nID0gZm9ybWF0IHx8IHRoaXMubW9uZXlfZm9ybWF0O1xyXG5cclxuICAgIGNvbnN0IGRlZmF1bHRPcHRpb24gPSAob3B0LCBkZWYpID0+IHtcclxuICAgICAgcmV0dXJuIHR5cGVvZiBvcHQgPT0gXCJ1bmRlZmluZWRcIiA/IGRlZiA6IG9wdDtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZm9ybWF0V2l0aERlbGltaXRlcnMgPSAobnVtYmVyLCBwcmVjaXNpb24sIHRob3VzYW5kcywgZGVjaW1hbCkgPT4ge1xyXG4gICAgICBwcmVjaXNpb24gPSBkZWZhdWx0T3B0aW9uKHByZWNpc2lvbiwgMik7XHJcbiAgICAgIHRob3VzYW5kcyA9IGRlZmF1bHRPcHRpb24odGhvdXNhbmRzLCBcIixcIik7XHJcbiAgICAgIGRlY2ltYWwgPSBkZWZhdWx0T3B0aW9uKGRlY2ltYWwsIFwiLlwiKTtcclxuXHJcbiAgICAgIGlmIChpc05hTihudW1iZXIpIHx8IG51bWJlciA9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIG51bWJlciA9IChudW1iZXIgLyAxMDAuMCkudG9GaXhlZChwcmVjaXNpb24pO1xyXG5cclxuICAgICAgY29uc3QgcGFydHMgPSBudW1iZXIuc3BsaXQoXCIuXCIpLFxyXG4gICAgICAgIGRvbGxhcnMgPSBwYXJ0c1swXS5yZXBsYWNlKFxyXG4gICAgICAgICAgLyhcXGQpKD89KFxcZFxcZFxcZCkrKD8hXFxkKSkvZyxcclxuICAgICAgICAgIFwiJDFcIiArIHRob3VzYW5kc1xyXG4gICAgICAgICksXHJcbiAgICAgICAgY2VudHMgPSBwYXJ0c1sxXSA/IGRlY2ltYWwgKyBwYXJ0c1sxXSA6IFwiXCI7XHJcblxyXG4gICAgICByZXR1cm4gZG9sbGFycyArIGNlbnRzO1xyXG4gICAgfTtcclxuXHJcbiAgICBzd2l0Y2ggKGZvcm1hdFN0cmluZy5tYXRjaChwbGFjZWhvbGRlclJlZ2V4KVsxXSkge1xyXG4gICAgICBjYXNlIFwiYW1vdW50XCI6XHJcbiAgICAgICAgdmFsdWUgPSBmb3JtYXRXaXRoRGVsaW1pdGVycyhjZW50cywgMik7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiYW1vdW50X25vX2RlY2ltYWxzXCI6XHJcbiAgICAgICAgdmFsdWUgPSBmb3JtYXRXaXRoRGVsaW1pdGVycyhjZW50cywgMCk7XHJcbiAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiYW1vdW50X3dpdGhfY29tbWFfc2VwYXJhdG9yXCI6XHJcbiAgICAgICAgdmFsdWUgPSBmb3JtYXRXaXRoRGVsaW1pdGVycyhjZW50cywgMiwgXCIuXCIsIFwiLFwiKTtcclxuICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJhbW91bnRfbm9fZGVjaW1hbHNfd2l0aF9jb21tYV9zZXBhcmF0b3JcIjpcclxuICAgICAgICB2YWx1ZSA9IGZvcm1hdFdpdGhEZWxpbWl0ZXJzKGNlbnRzLCAwLCBcIi5cIiwgXCIsXCIpO1xyXG4gICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImFtb3VudF93aXRoX2Fwb3N0cm9waGVfc2VwYXJhdG9yXCI6XHJcbiAgICAgICAgdmFsdWUgPSBmb3JtYXRXaXRoRGVsaW1pdGVycyhjZW50cywgMiwgXCInXCIsIFwiLlwiKTtcclxuICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJhbW91bnRfbm9fdHJhaWxpbmdfemVyb3NcIjpcclxuICAgICAgICB2YWx1ZSA9IGZvcm1hdFdpdGhEZWxpbWl0ZXJzKGNlbnRzLCAyKS5yZXBsYWNlKC9cXC4wMCQvLCBcIlwiKTtcclxuICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybWF0U3RyaW5nLnJlcGxhY2UocGxhY2Vob2xkZXJSZWdleCwgdmFsdWUpO1xyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IE1vbmV5O1xyXG4iXSwibmFtZXMiOlsiTW9uZXkiLCJjZW50cyIsImZvcm1hdCIsInJlcGxhY2UiLCJ2YWx1ZSIsInBsYWNlaG9sZGVyUmVnZXgiLCJmb3JtYXRTdHJpbmciLCJtb25leV9mb3JtYXQiLCJkZWZhdWx0T3B0aW9uIiwib3B0IiwiZGVmIiwiZm9ybWF0V2l0aERlbGltaXRlcnMiLCJudW1iZXIiLCJwcmVjaXNpb24iLCJ0aG91c2FuZHMiLCJkZWNpbWFsIiwiaXNOYU4iLCJ0b0ZpeGVkIiwicGFydHMiLCJzcGxpdCIsImRvbGxhcnMiLCJtYXRjaCIsIiRqc29uTW9uZXkiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJtb25leURhdGEiLCJKU09OIiwicGFyc2UiLCJ0ZXh0Q29udGVudCIsIm1vbmV5X3dpdGhfY3VycmVuY3lfZm9ybWF0Il0sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./resources/scripts/modules/Money.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/account/main.js\":\r\n/*!****************************************************!*\\\r\n  !*** ./resources/scripts/sections/account/main.js ***!\r\n  \\****************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"account\\\": () => (/* binding */ account),\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/**\\r\\n * The account module.\\r\\n *\\r\\n * @return {void}\\r\\n */\\nvar account = function account() {};\\n\\n// Export the module\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (account);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9hY2NvdW50L21haW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUEsT0FBTyxHQUFHLFNBQVZBLE9BQU8sR0FBUyxDQUM3QixDQUFDOztBQUVEO0FBQ0EsaUVBQWVBLE9BQU8iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL3Jlc291cmNlcy9zY3JpcHRzL3NlY3Rpb25zL2FjY291bnQvbWFpbi5qcz8wN2RhIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBUaGUgYWNjb3VudCBtb2R1bGUuXHJcbiAqXHJcbiAqIEByZXR1cm4ge3ZvaWR9XHJcbiAqL1xyXG5leHBvcnQgY29uc3QgYWNjb3VudCA9ICgpID0+IHtcclxufTtcclxuXHJcbi8vIEV4cG9ydCB0aGUgbW9kdWxlXHJcbmV4cG9ydCBkZWZhdWx0IGFjY291bnQ7XHJcbiJdLCJuYW1lcyI6WyJhY2NvdW50Il0sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/account/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/bab-product-carousel/main.js\":\r\n/*!*****************************************************************!*\\\r\n  !*** ./resources/scripts/sections/bab-product-carousel/main.js ***!\r\n  \\*****************************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"babProductCarousel\\\": () => (/* binding */ babProductCarousel),\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* harmony import */ var swiper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! swiper */ \\\"./node_modules/swiper/swiper.esm.js\\\");\\n\\nvar babProductCarousel = function babProductCarousel() {\\n  var addToBundleAndRelocate = function addToBundleAndRelocate($babProductCarouselSection, $productCard) {\\n    if ($babProductCarouselSection.dataset.buildBundleUrl) {\\n      var bundleId = \\\"bundle_\\\" + Date.now();\\n      var bundleUrl = $babProductCarouselSection.dataset.buildBundleUrl;\\n      var bundle = {\\n        bundleId: bundleId,\\n        items: {}\\n      };\\n\\n      //Ensure the bear minimum is present\\n      var id = $productCard.dataset.id;\\n      var productTitle = $productCard.dataset.title;\\n      var productPrice = $productCard.dataset.price;\\n      var productPriceString = $productCard.dataset.priceString;\\n      var productImage = $productCard.dataset.image;\\n      if (id && productTitle && productPrice && productPriceString && productImage) {\\n        bundle.items[id] = {\\n          title: productTitle,\\n          price: productPrice,\\n          priceString: productPriceString,\\n          comparePrice: $productCard.dataset.compareProductPrice,\\n          comparePriceString: $productCard.dataset.compareProductPriceString,\\n          image: productImage,\\n          quantity: 1\\n        };\\n\\n        //Save Bundle\\n        localStorage.setItem(\\\"bundle\\\", JSON.stringify(bundle));\\n\\n        //Go to bundle builder\\n        window.location.href = bundleUrl;\\n      } else {\\n        alert(\\\"An error has occurred - unable to add the desired product to your bundle.\\\");\\n        console.log(\\\"One or more of the following variables were not set: id && productTitle && productPrice && productPriceString && productImage\\\");\\n      }\\n    } else {\\n      alert(\\\"An error has occurred - unable to navigate to the Build a Bundle page\\\");\\n    }\\n  };\\n  var $babProductCarouselSections = document.querySelectorAll(\\\".section-bab-product-carousel\\\");\\n  if ($babProductCarouselSections.length > 0) {\\n    $babProductCarouselSections.forEach(function ($babProductCarouselSection) {\\n      var $swiper = $babProductCarouselSection.querySelector(\\\".swiper-container .swiper\\\");\\n      if ($swiper) {\\n        var swiperConfig = {\\n          direction: \\\"horizontal\\\",\\n          speed: 1000,\\n          spaceBetween: 20,\\n          slidesPerView: 2.2,\\n          centeredSlides: true,\\n          loop: true,\\n          breakpoints: {\\n            768: {\\n              spaceBetween: 32,\\n              slidesPerView: 3.3\\n            },\\n            1024: {\\n              spaceBetween: 32,\\n              slidesPerView: 4.4\\n            }\\n          }\\n        };\\n        var swiperObject = new swiper__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"]($swiper, swiperConfig);\\n      }\\n\\n      //bind the events from the product cards\\n      var $productCards = $babProductCarouselSection.querySelectorAll(\\\".build-a-bundle__product-card\\\");\\n      if ($productCards.length > 0) {\\n        $productCards.forEach(function ($productCard) {\\n          var $productControls = $productCard.querySelector(\\\".product-controls\\\");\\n          if ($productControls) {\\n            $productControls.addEventListener(\\\"click\\\", function (e) {\\n              e.preventDefault();\\n              var confirmationNeed = false;\\n              var existingBundle = localStorage.getItem('bundle');\\n              if (existingBundle) {\\n                var existingBundleParsed = JSON.parse(existingBundle);\\n                if (!existingBundleParsed.editing_bundle) {\\n                  confirmationNeed = true;\\n                }\\n              }\\n              if (confirmationNeed) {\\n                var restartText = \\\"This will remove any current Bundle progress and start again. Are you sure?\\\";\\n                if ($babProductCarouselSection.dataset.restartBundleText) {\\n                  restartText = $babProductCarouselSection.dataset.restartBundleText;\\n                }\\n                var answer = confirm(restartText);\\n                if (answer) {\\n                  // user clicked OK\\n                  addToBundleAndRelocate($babProductCarouselSection, $productCard);\\n                }\\n              } else {\\n                addToBundleAndRelocate($babProductCarouselSection, $productCard);\\n              }\\n            });\\n          }\\n\\n          //Clicking on the info icon takes you to the build a bundle and pops open that pop-up. this will trigger a \\\"click\\\" event in the set up of the build a bundle code\\n          var $productInfo = $productCard.querySelector(\\\".info-icon-button\\\");\\n          if ($productInfo) {\\n            $productInfo.addEventListener(\\\"click\\\", function (e) {\\n              e.preventDefault();\\n\\n              //Navigate to build a bundle\\n              var bundleUrl = $babProductCarouselSection.dataset.buildBundleUrl;\\n              if (bundleUrl) {\\n                //get variant id \\n                var id = $productCard.dataset.id;\\n                localStorage.setItem(\\\"target_popup_id\\\", id);\\n                window.location.href = bundleUrl;\\n              } else {\\n                alert(\\\"Unable to navigate to Product Info as Bundle Builder url not set\\\");\\n              }\\n            });\\n          }\\n        });\\n      }\\n    });\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (babProductCarousel);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9iYWItcHJvZHVjdC1jYXJvdXNlbC9tYWluLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUE0QjtBQUVyQixJQUFNQyxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCLEdBQVM7RUFFcEMsSUFBTUMsc0JBQXNCLEdBQUcsU0FBekJBLHNCQUFzQixDQUFJQywwQkFBMEIsRUFBQ0MsWUFBWSxFQUFLO0lBRXhFLElBQUdELDBCQUEwQixDQUFDRSxPQUFPLENBQUNDLGNBQWMsRUFBQztNQUVqRCxJQUFNQyxRQUFRLEdBQUcsU0FBUyxHQUFHQyxJQUFJLENBQUNDLEdBQUcsRUFBRTtNQUN2QyxJQUFNQyxTQUFTLEdBQUdQLDBCQUEwQixDQUFDRSxPQUFPLENBQUNDLGNBQWM7TUFFbkUsSUFBSUssTUFBTSxHQUFHO1FBQ1RKLFFBQVEsRUFBRUEsUUFBUTtRQUNsQkssS0FBSyxFQUFFLENBQUM7TUFDWixDQUFDOztNQUVEO01BQ0EsSUFBTUMsRUFBRSxHQUFHVCxZQUFZLENBQUNDLE9BQU8sQ0FBQ1EsRUFBRTtNQUNsQyxJQUFNQyxZQUFZLEdBQUdWLFlBQVksQ0FBQ0MsT0FBTyxDQUFDVSxLQUFLO01BQy9DLElBQU1DLFlBQVksR0FBR1osWUFBWSxDQUFDQyxPQUFPLENBQUNZLEtBQUs7TUFDL0MsSUFBTUMsa0JBQWtCLEdBQUdkLFlBQVksQ0FBQ0MsT0FBTyxDQUFDYyxXQUFXO01BQzNELElBQU1DLFlBQVksR0FBR2hCLFlBQVksQ0FBQ0MsT0FBTyxDQUFDZ0IsS0FBSztNQUUvQyxJQUFHUixFQUFFLElBQUlDLFlBQVksSUFBSUUsWUFBWSxJQUFJRSxrQkFBa0IsSUFBSUUsWUFBWSxFQUFDO1FBRXhFVCxNQUFNLENBQUNDLEtBQUssQ0FBQ0MsRUFBRSxDQUFDLEdBQUc7VUFDZkUsS0FBSyxFQUFFRCxZQUFZO1VBQ25CRyxLQUFLLEVBQUVELFlBQVk7VUFDbkJHLFdBQVcsRUFBRUQsa0JBQWtCO1VBQy9CSSxZQUFZLEVB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QVcsQ0FBQztnQkFDbkMsSUFBSUUsTUFBTSxFQUFFO2tCQUNSO2tCQUNBaEUsc0JBQXNCLENBQUNDLDBCQUEwQixFQUFDQyxZQUFZLENBQUM7Z0JBQ25FO2NBQ0osQ0FBQyxNQUFJO2dCQUNERixzQkFBc0IsQ0FBQ0MsMEJBQTBCLEVBQUNDLFlBQVksQ0FBQztjQUNuRTtZQUNKLENBQUMsQ0FBQztVQUNOOztVQUVBO1VBQ0EsSUFBTWdFLFlBQVksR0FBR2hFLFlBQVksQ0FBQ3VDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQztVQUNwRSxJQUFHeUIsWUFBWSxFQUFDO1lBQ1pBLFlBQVksQ0FBQ2IsZ0JBQWdCLENBQUMsT0FBTyxFQUFDLFVBQUNDLENBQUMsRUFBSztjQUN6Q0EsQ0FBQyxDQUFDQyxjQUFjLEVBQUU7O2NBRWxCO2NBQ0EsSUFBTS9DLFNBQVMsR0FBR1AsMEJBQTBCLENBQUNFLE9BQU8sQ0FBQ0MsY0FBYztjQUNuRSxJQUFHSSxTQUFTLEVBQUM7Z0JBQ1Q7Z0JBQ0EsSUFBTUcsRUFBRSxHQUFHVCxZQUFZLENBQUNDLE9BQU8sQ0FBQ1EsRUFBRTtnQkFDbENjLFlBQVksQ0FBQ0MsT0FBTyxDQUFDLGlCQUFpQixFQUFFZixFQUFFLENBQUM7Z0JBRTNDa0IsTUFBTSxDQUFDQyxRQUFRLENBQUNDLElBQUksR0FBR3ZCLFNBQVM7Y0FDcEMsQ0FBQyxNQUFJO2dCQUNEd0IsS0FBSyxDQUFDLGtFQUFrRSxDQUFDO2NBQzdFO1lBQ0osQ0FBQyxDQUFDO1VBQ047UUFDSixDQUFDLENBQUM7TUFDTjtJQUNKLENBQUMsQ0FBQztFQUNOO0FBQ0osQ0FBQztBQUVELGlFQUFlakMsa0JBQWtCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9iYWItcHJvZHVjdC1jYXJvdXNlbC9tYWluLmpzP2E3NWUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFN3aXBlciBmcm9tIFwic3dpcGVyXCI7XHJcblxyXG5leHBvcnQgY29uc3QgYmFiUHJvZHVjdENhcm91c2VsID0gKCkgPT4ge1xyXG5cclxuICAgIGNvbnN0IGFkZFRvQnVuZGxlQW5kUmVsb2NhdGUgPSAoJGJhYlByb2R1Y3RDYXJvdXNlbFNlY3Rpb24sJHByb2R1Y3RDYXJkKSA9PiB7XHJcblxyXG4gICAgICAgIGlmKCRiYWJQcm9kdWN0Q2Fyb3VzZWxTZWN0aW9uLmRhdGFzZXQuYnVpbGRCdW5kbGVVcmwpe1xyXG5cclxuICAgICAgICAgICAgY29uc3QgYnVuZGxlSWQgPSBcImJ1bmRsZV9cIiArIERhdGUubm93KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1bmRsZVVybCA9ICRiYWJQcm9kdWN0Q2Fyb3VzZWxTZWN0aW9uLmRhdGFzZXQuYnVpbGRCdW5kbGVVcmw7XHJcblxyXG4gICAgICAgICAgICBsZXQgYnVuZGxlID0ge1xyXG4gICAgICAgICAgICAgICAgYnVuZGxlSWQ6IGJ1bmRsZUlkLFxyXG4gICAgICAgICAgICAgICAgaXRlbXM6IHt9XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAvL0Vuc3VyZSB0aGUgYmVhciBtaW5pbXVtIGlzIHByZXNlbnRcclxuICAgICAgICAgICAgY29uc3QgaWQgPSAkcHJvZHVjdENhcmQuZGF0YXNldC5pZDtcclxuICAgICAgICAgICAgY29uc3QgcHJvZHVjdFRpdGxlID0gJHByb2R1Y3RDYXJkLmRhdGFzZXQudGl0bGU7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RQcmljZSA9ICRwcm9kdWN0Q2FyZC5kYXRhc2V0LnByaWNlO1xyXG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0UHJpY2VTdHJpbmcgPSAkcHJvZHVjdENhcmQuZGF0YXNldC5wcmljZVN0cmluZztcclxuICAgICAgICAgICAgY29uc3QgcHJvZHVjdEltYWdlID0gJHByb2R1Y3RDYXJkLmRhdGFzZXQuaW1hZ2U7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZihpZCAmJiBwcm9kdWN0VGl0bGUgJiYgcHJvZHVjdFByaWNlICYmIHByb2R1Y3RQcmljZVN0cmluZyAmJiBwcm9kdWN0SW1hZ2Upe1xyXG5cclxuICAgICAgICAgICAgICAgIGJ1bmRsZS5pdGVtc1tpZF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHByb2R1Y3RUaXRsZSxcclxuICAgICAgICAgICAgICAgICAgICBwcmljZTogcHJvZHVjdFByaWNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHByaWNlU3RyaW5nOiBwcm9kdWN0UHJpY2VTdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGFyZVByaWNlOiAkcHJvZHVjdENhcmQuZGF0YXNldC5jb21wYXJlUHJvZHVjdFByaWNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVQcmljZVN0cmluZzogJHByb2R1Y3RDYXJkLmRhdGFzZXQuY29tcGFyZVByb2R1Y3RQcmljZVN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICBpbWFnZTogcHJvZHVjdEltYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiAxLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAvL1NhdmUgQnVuZGxlXHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImJ1bmRsZVwiLCBKU09OLnN0cmluZ2lmeShidW5kbGUpKTtcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLy9HbyB0byBidW5kbGUgYnVpbGRlclxyXG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBidW5kbGVVcmw7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBhbGVydChcIkFuIGVycm9yIGhhcyBvY2N1cnJlZCAtIHVuYWJsZSB0byBhZGQgdGhlIGRlc2lyZWQgcHJvZHVjdCB0byB5b3VyIGJ1bmRsZS5cIik7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIk9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIHdlcmUgbm90IHNldDogaWQgJiYgcHJvZHVjdFRpdGxlICYmIHByb2R1Y3RQcmljZSAmJiBwcm9kdWN0UHJpY2VTdHJpbmcgJiYgcHJvZHVjdEltYWdlXCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgYWxlcnQoXCJBbiBlcnJvciBoYXMgb2NjdXJyZWQgLSB1bmFibGUgdG8gbmF2aWdhdGUgdG8gdGhlIEJ1aWxkIGEgQnVuZGxlIHBhZ2VcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjb25zdCAkYmFiUHJvZHVjdENhcm91c2VsU2VjdGlvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnNlY3Rpb24tYmFiLXByb2R1Y3QtY2Fyb3VzZWxcIik7XHJcbiAgICBpZigkYmFiUHJvZHVjdENhcm91c2VsU2VjdGlvbnMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgJGJhYlByb2R1Y3RDYXJvdXNlbFNlY3Rpb25zLmZvckVhY2goKCRiYWJQcm9kdWN0Q2Fyb3VzZWxTZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0ICRzd2lwZXIgPSAkYmFiUHJvZHVjdENhcm91c2VsU2VjdGlvbi5xdWVyeVNlbGVjdG9yKFwiLnN3aXBlci1jb250YWluZXIgLnN3aXBlclwiKTtcclxuICAgICAgICAgICAgaWYoJHN3aXBlcil7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3dpcGVyQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogXCJob3Jpem9udGFsXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc3BlZWQ6IDEwMDAsXHJcbiAgICAgICAgICAgICAgICAgICAgc3BhY2VCZXR3ZWVuOiAyMCxcclxuICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiAyLjIsXHJcbiAgICAgICAgICAgICAgICAgICAgY2VudGVyZWRTbGlkZXM6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgbG9vcDp0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDc2ODoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VCZXR3ZWVuOiAzMixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDMuMyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDEwMjQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlQmV0d2VlbjogMzIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiA0LjQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzd2lwZXJPYmplY3QgPSBuZXcgU3dpcGVyKCRzd2lwZXIsIHN3aXBlckNvbmZpZyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgICAvL2JpbmQgdGhlIGV2ZW50cyBmcm9tIHRoZSBwcm9kdWN0IGNhcmRzXHJcbiAgICAgICAgICAgIGNvbnN0ICRwcm9kdWN0Q2FyZHMgPSAkYmFiUHJvZHVjdENhcm91c2VsU2VjdGlvbi5xdWVyeVNlbGVjdG9yQWxsKFwiLmJ1aWxkLWEtYnVuZGxlX19wcm9kdWN0LWNhcmRcIik7XHJcbiAgICAgICAgICAgIGlmKCRwcm9kdWN0Q2FyZHMubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgICAgICAgICAgICAgJHByb2R1Y3RDYXJkcy5mb3JFYWNoKCgkcHJvZHVjdENhcmQpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJHByb2R1Y3RDb250cm9scyA9ICRwcm9kdWN0Q2FyZC5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtY29udHJvbHNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoJHByb2R1Y3RDb250cm9scyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRwcm9kdWN0Q29udHJvbHMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKGUpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmZpcm1hdGlvbk5lZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQnVuZGxlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2J1bmRsZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZXhpc3RpbmdCdW5kbGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQnVuZGxlUGFyc2VkID0gSlNPTi5wYXJzZShleGlzdGluZ0J1bmRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWV4aXN0aW5nQnVuZGxlUGFyc2VkLmVkaXRpbmdfYnVuZGxlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybWF0aW9uTmVlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvbmZpcm1hdGlvbk5lZWQpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdGFydFRleHQgPSBcIlRoaXMgd2lsbCByZW1vdmUgYW55IGN1cnJlbnQgQnVuZGxlIHByb2dyZXNzIGFuZCBzdGFydCBhZ2Fpbi4gQXJlIHlvdSBzdXJlP1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRiYWJQcm9kdWN0Q2Fyb3VzZWxTZWN0aW9uLmRhdGFzZXQucmVzdGFydEJ1bmRsZVRleHQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0YXJ0VGV4dCA9ICRiYWJQcm9kdWN0Q2Fyb3VzZWxTZWN0aW9uLmRhdGFzZXQucmVzdGFydEJ1bmRsZVRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBjb25maXJtKHJlc3RhcnRUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5zd2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZXIgY2xpY2tlZCBPS1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0J1bmRsZUFuZFJlbG9jYXRlKCRiYWJQcm9kdWN0Q2Fyb3VzZWxTZWN0aW9uLCRwcm9kdWN0Q2FyZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9CdW5kbGVBbmRSZWxvY2F0ZSgkYmFiUHJvZHVjdENhcm91c2VsU2VjdGlvbiwkcHJvZHVjdENhcmQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vQ2xpY2tpbmcgb24gdGhlIGluZm8gaWNvbiB0YWtlcyB5b3UgdG8gdGhlIGJ1aWxkIGEgYnVuZGxlIGFuZCBwb3BzIG9wZW4gdGhhdCBwb3AtdXAuIHRoaXMgd2lsbCB0cmlnZ2VyIGEgXCJjbGlja1wiIGV2ZW50IGluIHRoZSBzZXQgdXAgb2YgdGhlIGJ1aWxkIGEgYnVuZGxlIGNvZGVcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCAkcHJvZHVjdEluZm8gPSAkcHJvZHVjdENhcmQucXVlcnlTZWxlY3RvcihcIi5pbmZvLWljb24tYnV0dG9uXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCRwcm9kdWN0SW5mbyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRwcm9kdWN0SW5mby5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTmF2aWdhdGUgdG8gYnVpbGQgYSBidW5kbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1bmRsZVVybCA9ICRiYWJQcm9kdWN0Q2Fyb3VzZWxTZWN0aW9uLmRhdGFzZXQuYnVpbGRCdW5kbGVVcmw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihidW5kbGVVcmwpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZ2V0IHZhcmlhbnQgaWQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSAkcHJvZHVjdENhcmQuZGF0YXNldC5pZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInRhcmdldF9wb3B1cF9pZFwiLCBpZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYnVuZGxlVXJsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoXCJVbmFibGUgdG8gbmF2aWdhdGUgdG8gUHJvZHVjdCBJbmZvIGFzIEJ1bmRsZSBCdWlsZGVyIHVybCBub3Qgc2V0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBiYWJQcm9kdWN0Q2Fyb3VzZWw7XHJcbiJdLCJuYW1lcyI6WyJTd2lwZXIiLCJiYWJQcm9kdWN0Q2Fyb3VzZWwiLCJhZGRUb0J1bmRsZUFuZFJlbG9jYXRlIiwiJGJhYlByb2R1Y3RDYXJvdXNlbFNlY3Rpb24iLCIkcHJvZHVjdENhcmQiLCJkYXRhc2V0IiwiYnVpbGRCdW5kbGVVcmwiLCJidW5kbGVJZCIsIkRhdGUiLCJub3ciLCJidW5kbGVVcmwiLCJidW5kbGUiLCJpdGVtcyIsImlkIiwicHJvZHVjdFRpdGxlIiwidGl0bGUiLCJwcm9kdWN0UHJpY2UiLCJwcmljZSIsInByb2R1Y3RQcmljZVN0cmluZyIsInByaWNlU3RyaW5nIiwicHJvZHVjdEltYWdlIiwiaW1hZ2UiLCJjb21wYXJlUHJpY2UiLCJjb21wYXJlUHJvZHVjdFByaWNlIiwiY29tcGFyZVByaWNlU3RyaW5nIiwiY29tcGFyZVByb2R1Y3RQcmljZVN0cmluZyIsInF1YW50aXR5IiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJhbGVydCIsImNvbnNvbGUiLCJsb2ciLCIkYmFiUHJvZHVjdENhcm91c2VsU2VjdGlvbnMiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJmb3JFYWNoIiwiJHN3aXBlciIsInF1ZXJ5U2VsZWN0b3IiLCJzd2lwZXJDb25maWciLCJkaXJlY3Rpb24iLCJzcGVlZCIsInNwYWNlQmV0d2VlbiIsInNsaWRlc1BlclZpZXciLCJjZW50ZXJlZFNsaWRlcyIsImxvb3AiLCJicmVha3BvaW50cyIsInN3aXBlck9iamVjdCIsIiRwcm9kdWN0Q2FyZHMiLCIkcHJvZHVjdENvbnRyb2xzIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImNvbmZpcm1hdGlvbk5lZWQiLCJleGlzdGluZ0J1bmRsZSIsImdldEl0ZW0iLCJleGlzdGluZ0J1bmRsZVBhcnNlZCIsInBhcnNlIiwiZWRpdGluZ19idW5kbGUiLCJyZXN0YXJ0VGV4dCIsInJlc3RhcnRCdW5kbGVUZXh0IiwiYW5zd2VyIiwiY29uZmlybSIsIiRwcm9kdWN0SW5mbyJdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/bab-product-carousel/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/blog/main.js\":\r\n/*!*************************************************!*\\\r\n  !*** ./resources/scripts/sections/blog/main.js ***!\r\n  \\*************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"blogSection\\\": () => (/* binding */ blogSection),\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\nvar blogSection = function blogSection() {\\n  var url = window.location.href;\\n  var array = url.split('/');\\n  var lastSegment = array[array.length - 1];\\n  var tags = document.querySelectorAll(\\\"ul.tag-block li a.tags\\\");\\n  for (var i = 0; i < tags.length; i++) {\\n    if (tags[i].dataset.tag == lastSegment) {\\n      tags[i].classList.add(\\\"bg-black\\\", \\\"text-white\\\");\\n      tags[i].classList.remove(\\\"bg-white\\\", \\\"text-black\\\");\\n    } else {\\n      tags[i].classList.add(\\\"bg-white\\\", \\\"text-black\\\");\\n      tags[i].classList.remove(\\\"bg-black\\\", \\\"text-white\\\");\\n    }\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (blogSection);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9ibG9nL21haW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxJQUFNQSxXQUFXLEdBQUcsU0FBZEEsV0FBVyxHQUFTO0VBRTdCLElBQU1DLEdBQUcsR0FBR0MsTUFBTSxDQUFDQyxRQUFRLENBQUNDLElBQUk7RUFDaEMsSUFBTUMsS0FBSyxHQUFHSixHQUFHLENBQUNLLEtBQUssQ0FBQyxHQUFHLENBQUM7RUFFNUIsSUFBTUMsV0FBVyxHQUFHRixLQUFLLENBQUNBLEtBQUssQ0FBQ0csTUFBTSxHQUFDLENBQUMsQ0FBQztFQUN6QyxJQUFNQyxJQUFJLEdBQUdDLFFBQVEsQ0FBQ0MsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUM7RUFFaEUsS0FBSyxJQUFJQyxDQUFDLEdBQUMsQ0FBQyxFQUFFQSxDQUFDLEdBQUNILElBQUksQ0FBQ0QsTUFBTSxFQUFFSSxDQUFDLEVBQUUsRUFBRTtJQUNoQyxJQUFJSCxJQUFJLENBQUNHLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUNDLEdBQUcsSUFBSVAsV0FBVyxFQUFFO01BQ3RDRSxJQUFJLENBQUNHLENBQUMsQ0FBQyxDQUFDRyxTQUFTLENBQUNDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDO01BQy9DUCxJQUFJLENBQUNHLENBQUMsQ0FBQyxDQUFDRyxTQUFTLENBQUNFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDO0lBQ3BELENBQUMsTUFBTTtNQUNMUixJQUFJLENBQUNHLENBQUMsQ0FBQyxDQUFDRyxTQUFTLENBQUNDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDO01BQy9DUCxJQUFJLENBQUNHLENBQUMsQ0FBQyxDQUFDRyxTQUFTLENBQUNFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDO0lBQ3BEO0VBQ0Y7QUFDSixDQUFDO0FBRUQsaUVBQWVqQixXQUFXIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9ibG9nL21haW4uanM/NmNiMiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgYmxvZ1NlY3Rpb24gPSAoKSA9PiB7XHJcblxyXG4gICAgY29uc3QgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICBjb25zdCBhcnJheSA9IHVybC5zcGxpdCgnLycpO1xyXG4gICAgXHJcbiAgICBjb25zdCBsYXN0U2VnbWVudCA9IGFycmF5W2FycmF5Lmxlbmd0aC0xXTtcclxuICAgIGNvbnN0IHRhZ3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwidWwudGFnLWJsb2NrIGxpIGEudGFnc1wiKTtcclxuXHJcbiAgICBmb3IgKGxldCBpPTA7IGk8dGFncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGFnc1tpXS5kYXRhc2V0LnRhZyA9PSBsYXN0U2VnbWVudCkge1xyXG4gICAgICAgIHRhZ3NbaV0uY2xhc3NMaXN0LmFkZChcImJnLWJsYWNrXCIsIFwidGV4dC13aGl0ZVwiKTtcclxuICAgICAgICB0YWdzW2ldLmNsYXNzTGlzdC5yZW1vdmUoXCJiZy13aGl0ZVwiLCBcInRleHQtYmxhY2tcIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGFnc1tpXS5jbGFzc0xpc3QuYWRkKFwiYmctd2hpdGVcIiwgXCJ0ZXh0LWJsYWNrXCIpO1xyXG4gICAgICAgIHRhZ3NbaV0uY2xhc3NMaXN0LnJlbW92ZShcImJnLWJsYWNrXCIsIFwidGV4dC13aGl0ZVwiKTtcclxuICAgICAgfVxyXG4gICAgfSBcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGJsb2dTZWN0aW9uO1xyXG4iXSwibmFtZXMiOlsiYmxvZ1NlY3Rpb24iLCJ1cmwiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJhcnJheSIsInNwbGl0IiwibGFzdFNlZ21lbnQiLCJsZW5ndGgiLCJ0YWdzIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiaSIsImRhdGFzZXQiLCJ0YWciLCJjbGFzc0xpc3QiLCJhZGQiLCJyZW1vdmUiXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/blog/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/cart-aside/main.js\":\r\n/*!*******************************************************!*\\\r\n  !*** ./resources/scripts/sections/cart-aside/main.js ***!\r\n  \\*******************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"cartAside\\\": () => (/* binding */ cartAside),\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\nvar cartAside = function cartAside() {\\n  var cart = window.Carbon.Cart;\\n  var $cartAsideBackground = document.querySelector(\\\".cart-aside__background\\\");\\n  var $cartAside = $cartAsideBackground.querySelector(\\\"aside.cart-aside\\\");\\n  if ($cartAside) {\\n    cart.setUpCartAside($cartAside);\\n    var $body = document.querySelector(\\\"body\\\");\\n    var closeCartAside = function closeCartAside(event) {\\n      event.preventDefault();\\n      $body.classList.remove(\\\"overflow-y-hidden\\\");\\n      $cartAsideBackground.classList.add(\\\"pointer-events-none\\\");\\n      $cartAsideBackground.classList.remove(\\\"bg-black\\\", \\\"bg-opacity-40\\\");\\n      $cartAside.classList.add(\\\"translate-x-full\\\", \\\"ponter-events-none\\\");\\n    };\\n    $cartAsideBackground.addEventListener(\\\"click\\\", function (event) {\\n      if (event.target == $cartAsideBackground) {\\n        closeCartAside(event);\\n      }\\n    });\\n    var $cartAsideClose = $cartAside.querySelector(\\\".cart-aside__close\\\");\\n    $cartAsideClose.addEventListener(\\\"click\\\", function (event) {\\n      event.stopPropagation();\\n      closeCartAside(event);\\n    });\\n  }\\n\\n  // Function for setting gift note\\n  function setNote(note) {\\n    fetch('/cart/update.js', {\\n      method: 'POST',\\n      headers: {\\n        'Content-Type': 'application/json'\\n      },\\n      body: JSON.stringify({\\n        note: note\\n      })\\n    }).then(function (response) {\\n      return response.json();\\n    }).then(function (data) {\\n      //console.log('Cart updated with note:', data);\\n    })[\\\"catch\\\"](function (error) {\\n      return console.error('Error updating cart:', error);\\n    });\\n  }\\n\\n  // Gift note toggling & input\\n  var $giftContainer = $cartAside.querySelector(\\\".cart-aside__gift\\\");\\n  if ($giftContainer) {\\n    var $isGift = $giftContainer.querySelector(\\\".cart-aside__is-gift\\\");\\n    var $giftText = $giftContainer.querySelector(\\\"#order-note-text\\\");\\n    $isGift.addEventListener(\\\"change\\\", function () {\\n      if ($isGift.checked) {\\n        $giftContainer.classList.add(\\\"active\\\");\\n        setNote($giftText.value);\\n      } else {\\n        $giftContainer.classList.remove(\\\"active\\\");\\n        setNote(\\\"\\\");\\n      }\\n    });\\n\\n    // Update note on content change\\n    $giftText.addEventListener(\\\"input\\\", function () {\\n      var noteValue = this.value;\\n      setNote(noteValue);\\n    });\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cartAside);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9jYXJ0LWFzaWRlL21haW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxJQUFNQSxTQUFTLEdBQUcsU0FBWkEsU0FBUyxHQUFTO0VBQzdCLElBQU1DLElBQUksR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQUNDLElBQUk7RUFDL0IsSUFBTUMsb0JBQW9CLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBYSxDQUNqRCx5QkFBeUIsQ0FDMUI7RUFDRCxJQUFNQyxVQUFVLEdBQUdILG9CQUFvQixDQUFDRSxhQUFhLENBQUMsa0JBQWtCLENBQUM7RUFDekUsSUFBSUMsVUFBVSxFQUFFO0lBQ2RQLElBQUksQ0FBQ1EsY0FBYyxDQUFDRCxVQUFVLENBQUM7SUFDL0IsSUFBTUUsS0FBSyxHQUFHSixRQUFRLENBQUNDLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFFNUMsSUFBTUksY0FBYyxHQUFHLFNBQWpCQSxjQUFjLENBQUlDLEtBQUssRUFBSztNQUNoQ0EsS0FBSyxDQUFDQyxjQUFjLEVBQUU7TUFFdEJILEtBQUssQ0FBQ0ksU0FBUyxDQUFDQyxNQUFNLENBQUMsbUJBQW1CLENBQUM7TUFDM0NWLG9CQUFvQixDQUFDUyxTQUFTLENBQUNFLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQztNQUN6RFgsb0JBQW9CLENBQUNTLFNBQVMsQ0FBQ0MsTUFBTSxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUM7TUFDbEVQLFVBQVUsQ0FBQ00sU0FBUyxDQUFDRSxHQUFHLENBQUMsa0JBQWtCLEVBQUUsb0JBQW9CLENBQUM7SUFDcEUsQ0FBQztJQUVEWCxvQkFBb0IsQ0FBQ1ksZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFVBQUNMLEtBQUssRUFBSztNQUN4RCxJQUFJQSxLQUFLLENBQUNNLE1BQU0sSUFBSWIsb0JBQW9CLEVBQUU7UUFDeENNLGNBQWMsQ0FBQ0MsS0FBSyxDQUFDO01BQ3ZCO0lBQ0YsQ0FBQyxDQUFDO0lBRUYsSUFBTU8sZUFBZSxHQUFHWCxVQUFVLENBQUNELGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQztJQUN0RVksZUFBZSxDQUFDRixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsVUFBQ0wsS0FBSyxFQUFLO01BQ25EQSxLQUFLLENBQUNRLGVBQWUsRUFBRTtNQUN2QlQsY0FBYyxDQUFDQyxLQUFLLENBQUM7SUFDdkIsQ0FBQyxDQUFDO0VBQ0o7O0VBRUE7RUFDQSxTQUFTUyxPQUFPLENBQUVDLElBQUksRUFBQztJQUNyQkMsS0FBSyxDQUFDLGlCQUFpQixFQUFFO01BQ3ZCQyxNQUFNLEVBQUUsTUFBTTtNQUNkQyxPQUFPLEVBQUU7UUFBRSxjQUFjLEVBQUU7TUFBbUIsQ0FBQztNQUMvQ0MsSUFBSSxFQUFFQyxJQUFJLENBQUNDLFNBQVMsQ0FBQztRQUNuQk4sSUFBSSxFQUFFQTtNQUNSLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FDQ08sSUFBSSxDQUFDLFVBQUFDLFFBQVE7TUFBQSxPQUFJQSxRQUFRLENBQUNDLElBQUksRUFBRTtJQUFBLEVBQUMsQ0FDakNGLElBQUksQ0FBQyxVQUFBRyxJQUFJLEVBQUk7TUFDWjtJQUFBLENBQ0QsQ0FBQyxTQUNJLENBQUMsVUFBQUMsS0FBSztNQUFBLE9BQUlDLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDLHNCQUFzQixFQUFFQSxLQUFLLENBQUM7SUFBQSxFQUFDO0VBQ2pFOztFQUVBO0VBQ0EsSUFBTUUsY0FBYyxHQUFHM0IsVUFBVSxDQUFDRCxhQUFhLENBQUMsbUJBQW1CLENBQUM7RUFFcEUsSUFBSTRCLGNBQWMsRUFBQztJQUNqQixJQUFNQyxPQUFPLEdBQUdELGNBQWMsQ0FBQzVCLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQztJQUNwRSxJQUFNOEIsU0FBUyxHQUFHRixjQUFjLENBQUM1QixhQUFhLENBQUMsa0JBQWtCLENBQUM7SUFFbEU2QixPQUFPLENBQUNuQixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsWUFBTTtNQUN2QyxJQUFJbUIsT0FBTyxDQUFDRSxPQUFPLEVBQUM7UUFDbEJILGNBQWMsQ0FBQ3JCLFNBQVMsQ0FBQ0UsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUN0Q0ssT0FBTyxDQUFDZ0IsU0FBUyxDQUFDRSxLQUFLLENBQUM7TUFDMUIsQ0FBQyxNQUFNO1FBQ0xKLGNBQWMsQ0FBQ3JCLFNBQVMsQ0FBQ0MsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUN6Q00sT0FBTyxDQUFDLEVBQUUsQ0FBQztNQUNiO0lBQ0YsQ0FBQyxDQUFDOztJQUVGO0lBQ0FnQixTQUFTLENBQUNwQixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsWUFBWTtNQUM5QyxJQUFNdUIsU0FBUyxHQUFHLElBQUksQ0FBQ0QsS0FBSztNQUM1QmxCLE9BQU8sQ0FBQ21CLFNBQVMsQ0FBQztJQUNwQixDQUFDLENBQUM7RUFDSjtBQUNGLENBQUM7QUFFRCxpRUFBZXhDLFNBQVMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL3Jlc291cmNlcy9zY3JpcHRzL3NlY3Rpb25zL2NhcnQtYXNpZGUvbWFpbi5qcz9kYjVmIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBjYXJ0QXNpZGUgPSAoKSA9PiB7XHJcbiAgY29uc3QgY2FydCA9IHdpbmRvdy5DYXJib24uQ2FydDtcclxuICBjb25zdCAkY2FydEFzaWRlQmFja2dyb3VuZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICBcIi5jYXJ0LWFzaWRlX19iYWNrZ3JvdW5kXCJcclxuICApO1xyXG4gIGNvbnN0ICRjYXJ0QXNpZGUgPSAkY2FydEFzaWRlQmFja2dyb3VuZC5xdWVyeVNlbGVjdG9yKFwiYXNpZGUuY2FydC1hc2lkZVwiKTtcclxuICBpZiAoJGNhcnRBc2lkZSkge1xyXG4gICAgY2FydC5zZXRVcENhcnRBc2lkZSgkY2FydEFzaWRlKTtcclxuICAgIGNvbnN0ICRib2R5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIik7XHJcblxyXG4gICAgY29uc3QgY2xvc2VDYXJ0QXNpZGUgPSAoZXZlbnQpID0+IHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICRib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJvdmVyZmxvdy15LWhpZGRlblwiKTtcclxuICAgICAgJGNhcnRBc2lkZUJhY2tncm91bmQuY2xhc3NMaXN0LmFkZChcInBvaW50ZXItZXZlbnRzLW5vbmVcIik7XHJcbiAgICAgICRjYXJ0QXNpZGVCYWNrZ3JvdW5kLmNsYXNzTGlzdC5yZW1vdmUoXCJiZy1ibGFja1wiLCBcImJnLW9wYWNpdHktNDBcIik7XHJcbiAgICAgICRjYXJ0QXNpZGUuY2xhc3NMaXN0LmFkZChcInRyYW5zbGF0ZS14LWZ1bGxcIiwgXCJwb250ZXItZXZlbnRzLW5vbmVcIik7XHJcbiAgICB9O1xyXG5cclxuICAgICRjYXJ0QXNpZGVCYWNrZ3JvdW5kLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PSAkY2FydEFzaWRlQmFja2dyb3VuZCkge1xyXG4gICAgICAgIGNsb3NlQ2FydEFzaWRlKGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgJGNhcnRBc2lkZUNsb3NlID0gJGNhcnRBc2lkZS5xdWVyeVNlbGVjdG9yKFwiLmNhcnQtYXNpZGVfX2Nsb3NlXCIpO1xyXG4gICAgJGNhcnRBc2lkZUNsb3NlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIGNsb3NlQ2FydEFzaWRlKGV2ZW50KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gRnVuY3Rpb24gZm9yIHNldHRpbmcgZ2lmdCBub3RlXHJcbiAgZnVuY3Rpb24gc2V0Tm90ZSAobm90ZSl7XHJcbiAgICBmZXRjaCgnL2NhcnQvdXBkYXRlLmpzJywge1xyXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXHJcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICBub3RlOiBub3RlXHJcbiAgICAgIH0pXHJcbiAgICB9KVxyXG4gICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5qc29uKCkpXHJcbiAgICAgIC50aGVuKGRhdGEgPT4ge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ0NhcnQgdXBkYXRlZCB3aXRoIG5vdGU6JywgZGF0YSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlcnJvciA9PiBjb25zb2xlLmVycm9yKCdFcnJvciB1cGRhdGluZyBjYXJ0OicsIGVycm9yKSk7XHJcbiAgfVxyXG5cclxuICAvLyBHaWZ0IG5vdGUgdG9nZ2xpbmcgJiBpbnB1dFxyXG4gIGNvbnN0ICRnaWZ0Q29udGFpbmVyID0gJGNhcnRBc2lkZS5xdWVyeVNlbGVjdG9yKFwiLmNhcnQtYXNpZGVfX2dpZnRcIik7XHJcblxyXG4gIGlmICgkZ2lmdENvbnRhaW5lcil7XHJcbiAgICBjb25zdCAkaXNHaWZ0ID0gJGdpZnRDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5jYXJ0LWFzaWRlX19pcy1naWZ0XCIpO1xyXG4gICAgY29uc3QgJGdpZnRUZXh0ID0gJGdpZnRDb250YWluZXIucXVlcnlTZWxlY3RvcihcIiNvcmRlci1ub3RlLXRleHRcIik7XHJcblxyXG4gICAgJGlzR2lmdC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsICgpID0+IHtcclxuICAgICAgaWYgKCRpc0dpZnQuY2hlY2tlZCl7XHJcbiAgICAgICAgJGdpZnRDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcclxuICAgICAgICBzZXROb3RlKCRnaWZ0VGV4dC52YWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgJGdpZnRDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcclxuICAgICAgICBzZXROb3RlKFwiXCIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBVcGRhdGUgbm90ZSBvbiBjb250ZW50IGNoYW5nZVxyXG4gICAgJGdpZnRUZXh0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGNvbnN0IG5vdGVWYWx1ZSA9IHRoaXMudmFsdWU7XHJcbiAgICAgIHNldE5vdGUobm90ZVZhbHVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNhcnRBc2lkZTtcclxuIl0sIm5hbWVzIjpbImNhcnRBc2lkZSIsImNhcnQiLCJ3aW5kb3ciLCJDYXJib24iLCJDYXJ0IiwiJGNhcnRBc2lkZUJhY2tncm91bmQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCIkY2FydEFzaWRlIiwic2V0VXBDYXJ0QXNpZGUiLCIkYm9keSIsImNsb3NlQ2FydEFzaWRlIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsImNsYXNzTGlzdCIsInJlbW92ZSIsImFkZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJ0YXJnZXQiLCIkY2FydEFzaWRlQ2xvc2UiLCJzdG9wUHJvcGFnYXRpb24iLCJzZXROb3RlIiwibm90ZSIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwidGhlbiIsInJlc3BvbnNlIiwianNvbiIsImRhdGEiLCJlcnJvciIsImNvbnNvbGUiLCIkZ2lmdENvbnRhaW5lciIsIiRpc0dpZnQiLCIkZ2lmdFRleHQiLCJjaGVja2VkIiwidmFsdWUiLCJub3RlVmFsdWUiXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/cart-aside/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/cart-template/main.js\":\r\n/*!**********************************************************!*\\\r\n  !*** ./resources/scripts/sections/cart-template/main.js ***!\r\n  \\**********************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"cartTemplate\\\": () => (/* binding */ cartTemplate),\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\nvar cartTemplate = function cartTemplate() {\\n  var cart = window.Carbon.Cart;\\n  var $cartTemplate = document.querySelector(\\\"section.cart-template\\\");\\n  if ($cartTemplate) {\\n    cart.setUpCartTemplate($cartTemplate);\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cartTemplate);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9jYXJ0LXRlbXBsYXRlL21haW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxJQUFNQSxZQUFZLEdBQUcsU0FBZkEsWUFBWSxHQUFTO0VBQ2hDLElBQU1DLElBQUksR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQUNDLElBQUk7RUFFL0IsSUFBTUMsYUFBYSxHQUFHQyxRQUFRLENBQUNDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQztFQUNyRSxJQUFJRixhQUFhLEVBQUU7SUFDakJKLElBQUksQ0FBQ08saUJBQWlCLENBQUNILGFBQWEsQ0FBQztFQUN2QztBQUNGLENBQUM7QUFFRCxpRUFBZUwsWUFBWSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vcmVzb3VyY2VzL3NjcmlwdHMvc2VjdGlvbnMvY2FydC10ZW1wbGF0ZS9tYWluLmpzPzJmNGQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGNhcnRUZW1wbGF0ZSA9ICgpID0+IHtcclxuICBjb25zdCBjYXJ0ID0gd2luZG93LkNhcmJvbi5DYXJ0O1xyXG5cclxuICBjb25zdCAkY2FydFRlbXBsYXRlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcInNlY3Rpb24uY2FydC10ZW1wbGF0ZVwiKTtcclxuICBpZiAoJGNhcnRUZW1wbGF0ZSkge1xyXG4gICAgY2FydC5zZXRVcENhcnRUZW1wbGF0ZSgkY2FydFRlbXBsYXRlKTtcclxuICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjYXJ0VGVtcGxhdGU7XHJcbiJdLCJuYW1lcyI6WyJjYXJ0VGVtcGxhdGUiLCJjYXJ0Iiwid2luZG93IiwiQ2FyYm9uIiwiQ2FydCIsIiRjYXJ0VGVtcGxhdGUiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJzZXRVcENhcnRUZW1wbGF0ZSJdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/cart-template/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/collection-template/main.js\":\r\n/*!****************************************************************!*\\\r\n  !*** ./resources/scripts/sections/collection-template/main.js ***!\r\n  \\****************************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"collectionTemplate\\\": () => (/* binding */ collectionTemplate),\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\nvar collectionTemplate = function collectionTemplate() {\\n  var $collectionTemplate = document.querySelector(\\\"section.collection-template\\\");\\n  if ($collectionTemplate) {\\n    var $collectionSort = $collectionTemplate.querySelector(\\\".collection-template__sort\\\");\\n    $collectionSort.addEventListener(\\\"change\\\", function (event) {\\n      var origin = window.location.origin;\\n      var pathname = window.location.pathname;\\n      var search = new URLSearchParams(window.location.search);\\n      search.set(\\\"sort_by\\\", event.target.value);\\n      window.location = \\\"\\\".concat(origin).concat(pathname, \\\"?\\\").concat(search.toString());\\n    });\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (collectionTemplate);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9jb2xsZWN0aW9uLXRlbXBsYXRlL21haW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxJQUFNQSxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCLEdBQVM7RUFDdEMsSUFBTUMsbUJBQW1CLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBYSxDQUNoRCw2QkFBNkIsQ0FDOUI7RUFDRCxJQUFJRixtQkFBbUIsRUFBRTtJQUN2QixJQUFNRyxlQUFlLEdBQUdILG1CQUFtQixDQUFDRSxhQUFhLENBQ3ZELDRCQUE0QixDQUM3QjtJQUNEQyxlQUFlLENBQUNDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxVQUFDQyxLQUFLLEVBQUs7TUFDcEQsSUFBTUMsTUFBTSxHQUFHQyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0YsTUFBTTtNQUNyQyxJQUFNRyxRQUFRLEdBQUdGLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDQyxRQUFRO01BQ3pDLElBQU1DLE1BQU0sR0FBRyxJQUFJQyxlQUFlLENBQUNKLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRSxNQUFNLENBQUM7TUFDMURBLE1BQU0sQ0FBQ0UsR0FBRyxDQUFDLFNBQVMsRUFBRVAsS0FBSyxDQUFDUSxNQUFNLENBQUNDLEtBQUssQ0FBQztNQUN6Q1AsTUFBTSxDQUFDQyxRQUFRLGFBQU1GLE1BQU0sU0FBR0csUUFBUSxjQUFJQyxNQUFNLENBQUNLLFFBQVEsRUFBRSxDQUFFO0lBQy9ELENBQUMsQ0FBQztFQUNKO0FBQ0YsQ0FBQztBQUVELGlFQUFlaEIsa0JBQWtCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9jb2xsZWN0aW9uLXRlbXBsYXRlL21haW4uanM/ZGE0YiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgY29sbGVjdGlvblRlbXBsYXRlID0gKCkgPT4ge1xyXG4gIGNvbnN0ICRjb2xsZWN0aW9uVGVtcGxhdGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgXCJzZWN0aW9uLmNvbGxlY3Rpb24tdGVtcGxhdGVcIlxyXG4gICk7XHJcbiAgaWYgKCRjb2xsZWN0aW9uVGVtcGxhdGUpIHtcclxuICAgIGNvbnN0ICRjb2xsZWN0aW9uU29ydCA9ICRjb2xsZWN0aW9uVGVtcGxhdGUucXVlcnlTZWxlY3RvcihcclxuICAgICAgXCIuY29sbGVjdGlvbi10ZW1wbGF0ZV9fc29ydFwiXHJcbiAgICApO1xyXG4gICAgJGNvbGxlY3Rpb25Tb3J0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IG9yaWdpbiA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XHJcbiAgICAgIGNvbnN0IHBhdGhuYW1lID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lO1xyXG4gICAgICBjb25zdCBzZWFyY2ggPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xyXG4gICAgICBzZWFyY2guc2V0KFwic29ydF9ieVwiLCBldmVudC50YXJnZXQudmFsdWUpO1xyXG4gICAgICB3aW5kb3cubG9jYXRpb24gPSBgJHtvcmlnaW59JHtwYXRobmFtZX0/JHtzZWFyY2gudG9TdHJpbmcoKX1gO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY29sbGVjdGlvblRlbXBsYXRlO1xyXG4iXSwibmFtZXMiOlsiY29sbGVjdGlvblRlbXBsYXRlIiwiJGNvbGxlY3Rpb25UZW1wbGF0ZSIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsIiRjb2xsZWN0aW9uU29ydCIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsIm9yaWdpbiIsIndpbmRvdyIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJzZWFyY2giLCJVUkxTZWFyY2hQYXJhbXMiLCJzZXQiLCJ0YXJnZXQiLCJ2YWx1ZSIsInRvU3RyaW5nIl0sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/collection-template/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/content-links/main.js\":\r\n/*!**********************************************************!*\\\r\n  !*** ./resources/scripts/sections/content-links/main.js ***!\r\n  \\**********************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"contentLinks\\\": () => (/* binding */ contentLinks),\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* harmony import */ var swiper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! swiper */ \\\"./node_modules/swiper/swiper.esm.js\\\");\\n\\nvar contentLinks = function contentLinks() {\\n  var lockBackground = function lockBackground() {\\n    document.body.classList.add(\\\"overflow-y-hidden\\\");\\n\\n    //Iphones ignore overflow hidden on body tags, so we do this instead\\n    var scrollY = window.scrollY;\\n    document.body.style.position = 'fixed';\\n    document.body.style.top = \\\"-\\\".concat(scrollY, \\\"px\\\");\\n    document.body.style.left = '0';\\n    document.body.style.right = '0';\\n    document.body.style.overflow = 'hidden';\\n  };\\n  var unlockBackground = function unlockBackground() {\\n    document.body.classList.remove(\\\"overflow-y-hidden\\\");\\n    var scrollY = Math.abs(parseInt(document.body.style.top || 0, 10));\\n    document.body.style.position = \\\"\\\";\\n    document.body.style.top = \\\"\\\";\\n    document.body.style.left = \\\"\\\";\\n    document.body.style.right = \\\"\\\";\\n    document.body.style.overflow = \\\"\\\";\\n    requestAnimationFrame(function () {\\n      window.scrollTo({\\n        top: scrollY,\\n        left: 0,\\n        behavior: \\\"instant\\\" // iOS 16+ - avoids the awkward blip jump\\n      });\\n    });\\n  };\\n\\n  var closePopups = function closePopups($popupContainer, $popUps) {\\n    $popUps.forEach(function ($popUp) {\\n      $popUp.classList.remove(\\\"active\\\");\\n    });\\n    $popupContainer.classList.remove(\\\"active\\\");\\n    unlockBackground();\\n  };\\n  var openPopup = function openPopup($popupContainer, popupNumber) {\\n    if ($popupContainer) {\\n      if (popupNumber) {\\n        var $popup = $popupContainer.querySelector(\\\".popup-contents[data-pop-up-number=\\\\\\\"\\\".concat(popupNumber, \\\"\\\\\\\"]\\\"));\\n        if ($popup) {\\n          $popupContainer.classList.add(\\\"active\\\");\\n          $popup.classList.add(\\\"active\\\");\\n          lockBackground();\\n        } else {\\n          console.log(\\\"could not find popup using the id of \\\".concat(popupNumber));\\n        }\\n      } else {\\n        console.log(\\\"could not open popup as the popup number was not passed to the function\\\");\\n      }\\n    } else {\\n      console.log(\\\"could not open popup as the popup container was not passed to the function\\\");\\n    }\\n  };\\n  var $contentLinksSections = document.querySelectorAll(\\\".section-content-links\\\");\\n  if ($contentLinksSections.length > 0) {\\n    $contentLinksSections.forEach(function ($contentLinksSection) {\\n      //Setup the Swiper\\n      var $swiperContainer = $contentLinksSection.querySelector(\\\".swiper-container\\\");\\n      var $swiperNavigation = $contentLinksSection.querySelector(\\\".swiper-navigation-container\\\");\\n      if ($swiperContainer && $swiperNavigation) {\\n        var mobileSlidesNum = $swiperContainer.dataset.mobileSlides;\\n        var desktopSlidesNum = $swiperContainer.dataset.desktopSlides;\\n        if (mobileSlidesNum && desktopSlidesNum) {\\n          var $swiper = $swiperContainer.querySelector(\\\".swiper\\\");\\n          if ($swiper) {\\n            var $navLeft = $swiperNavigation.querySelector(\\\".navigation-previous\\\");\\n            var $navRight = $swiperNavigation.querySelector(\\\".navigation-next\\\");\\n            var swiperConfig = {\\n              direction: \\\"horizontal\\\",\\n              speed: 1000,\\n              slidesPerView: mobileSlidesNum,\\n              spaceBetween: 20,\\n              breakpoints: {\\n                768: {\\n                  slidesPerView: 3.3,\\n                  spaceBetween: 24\\n                },\\n                1024: {\\n                  slidesPerView: parseInt(desktopSlidesNum),\\n                  spaceBetween: 32\\n                }\\n              },\\n              navigation: {\\n                disabledClass: \\\"content-links_button--disabled\\\",\\n                nextEl: $navRight,\\n                prevEl: $navLeft\\n              }\\n            };\\n            var swiperObject = new swiper__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"]($swiper, swiperConfig);\\n          }\\n          var $swiperSlides = $swiper.querySelectorAll(\\\".swiper-slide\\\");\\n          $swiperSlides.forEach(function ($swiperSlide) {\\n            var $mainImage = $swiperSlide.querySelector(\\\".main-image\\\");\\n            var $hoverVideo = $swiperSlide.querySelector(\\\".hover-video\\\");\\n            if ($mainImage && $hoverVideo) {\\n              $swiperSlide.addEventListener(\\\"mouseenter\\\", function (e) {\\n                if (window.innerWidth > 1023) {\\n                  $mainImage.classList.add(\\\"opacity-0\\\");\\n                  $hoverVideo.classList.remove(\\\"opacity-0\\\");\\n                  var playPromise = $hoverVideo.play();\\n\\n                  //Get silently rejected, nerd\\n                  if (playPromise !== undefined) {\\n                    playPromise[\\\"catch\\\"](function () {});\\n                  }\\n                }\\n              });\\n              $swiperSlide.addEventListener(\\\"mouseleave\\\", function (e) {\\n                $mainImage.classList.remove(\\\"opacity-0\\\");\\n                $hoverVideo.classList.add(\\\"opacity-0\\\");\\n                $hoverVideo.pause();\\n              });\\n            }\\n          });\\n        }\\n      }\\n\\n      //Pop up triggers, opening, closing etc\\n      var $popupContainer = $contentLinksSection.querySelector(\\\".popup-container\\\");\\n      var $popupTriggers = $contentLinksSection.querySelectorAll(\\\".popup-trigger\\\");\\n      if ($popupContainer) {\\n        var $popupBg = $popupContainer.querySelector(\\\".popup-bg\\\");\\n        var $popUps = $popupContainer.querySelectorAll(\\\".popup-contents\\\");\\n        var $popupCloses = $popupContainer.querySelectorAll(\\\".close-button\\\");\\n        if ($popupBg && $popUps.length > 0) {\\n          //Bind the Trigger Clicks\\n          if ($popupTriggers.length > 0) {\\n            $popupTriggers.forEach(function ($popupTrigger) {\\n              $popupTrigger.addEventListener(\\\"click\\\", function (e) {\\n                //Extract the ID of the popup that we're looking for from the class                                                                                      \\n                var popupClass = Array.from($popupTrigger.classList).find(function (className) {\\n                  return className.startsWith('pop-up-number-');\\n                });\\n                if (popupClass) {\\n                  var popupNumber = popupClass.replace('pop-up-number-', '');\\n                  if (popupNumber) {\\n                    //Find the relevant pop up and open it\\n                    openPopup($popupContainer, popupNumber);\\n                  }\\n                }\\n              });\\n            });\\n          }\\n\\n          //Bind Close via the Background\\n          $popupBg.addEventListener(\\\"click\\\", function (e) {\\n            closePopups($popupContainer, $popUps);\\n          });\\n\\n          //Bind Close via the X buttons\\n          if ($popupCloses.length > 0) {\\n            $popupCloses.forEach(function ($popupClose) {\\n              $popupClose.addEventListener(\\\"click\\\", function (e) {\\n                closePopups($popupContainer, $popUps);\\n              });\\n            });\\n          }\\n        }\\n      }\\n    });\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (contentLinks);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9jb250ZW50LWxpbmtzL21haW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXdEO0FBRWpELElBQU1HLFlBQVksR0FBRyxTQUFmQSxZQUFZLEdBQVM7RUFFOUIsSUFBTUMsY0FBYyxHQUFHLFNBQWpCQSxjQUFjLEdBQVM7SUFDekJDLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUNDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQzs7SUFFaEQ7SUFDQSxJQUFNQyxPQUFPLEdBQUdDLE1BQU0sQ0FBQ0QsT0FBTztJQUM5QkosUUFBUSxDQUFDQyxJQUFJLENBQUNLLEtBQUssQ0FBQ0MsUUFBUSxHQUFHLE9BQU87SUFDdENQLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDSyxLQUFLLENBQUNFLEdBQUcsY0FBT0osT0FBTyxPQUFJO0lBQ3pDSixRQUFRLENBQUNDLElBQUksQ0FBQ0ssS0FBSyxDQUFDRyxJQUFJLEdBQUcsR0FBRztJQUM5QlQsUUFBUSxDQUFDQyxJQUFJLENBQUNLLEtBQUssQ0FBQ0ksS0FBSyxHQUFHLEdBQUc7SUFDL0JWLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDSyxLQUFLLENBQUNLLFFBQVEsR0FBRyxRQUFRO0VBQzNDLENBQUM7RUFFRCxJQUFNQyxnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQWdCLEdBQVM7SUFDM0JaLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUNXLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztJQUVuRCxJQUFNVCxPQUFPLEdBQUdVLElBQUksQ0FBQ0MsR0FBRyxDQUFDQyxRQUFRLENBQUNoQixRQUFRLENBQUNDLElBQUksQ0FBQ0ssS0FBSyxDQUFDRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFUixRQUFRLENBQUNDLElBQUksQ0FBQ0ssS0FBSyxDQUFDQyxRQUFRLEdBQUcsRUFBRTtJQUNqQ1AsUUFBUSxDQUFDQyxJQUFJLENBQUNLLEtBQUssQ0FBQ0Us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LElBQUksQ0FBQ0gsYUFBYSxDQUFDcEUsU0FBUyxDQUFDLENBQUN3RSxJQUFJLENBQUMsVUFBQUMsU0FBUztrQkFBQSxPQUNqRUEsU0FBUyxDQUFDQyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7Z0JBQUEsRUFDekM7Z0JBRUQsSUFBR0wsVUFBVSxFQUFFO2tCQUNYLElBQU03QyxXQUFXLEdBQUc2QyxVQUFVLENBQUNNLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7a0JBRTVELElBQUduRCxXQUFXLEVBQUM7b0JBQ1g7b0JBQ0FELFNBQVMsQ0FBQ0osZUFBZSxFQUFDSyxXQUFXLENBQUM7a0JBQzFDO2dCQUNKO2NBQ0osQ0FBQyxDQUFDO1lBQ04sQ0FBQyxDQUFDO1VBQ047O1VBRUE7VUFDQTBDLFFBQVEsQ0FBQ1IsZ0JBQWdCLENBQUMsT0FBTyxFQUFDLFVBQUNDLENBQUMsRUFBSztZQUNyQ3pDLFdBQVcsQ0FBQ0MsZUFBZSxFQUFDQyxPQUFPLENBQUM7VUFDeEMsQ0FBQyxDQUFDOztVQUVGO1VBQ0EsSUFBRytDLFlBQVksQ0FBQ3BDLE1BQU0sR0FBRyxDQUFDLEVBQUM7WUFDdkJvQyxZQUFZLENBQUM5QyxPQUFPLENBQUMsVUFBQ3VELFdBQVcsRUFBSztjQUNsQ0EsV0FBVyxDQUFDbEIsZ0JBQWdCLENBQUMsT0FBTyxFQUFDLFVBQUNDLENBQUMsRUFBSztnQkFDeEN6QyxXQUFXLENBQUNDLGVBQWUsRUFBQ0MsT0FBTyxDQUFDO2NBQ3hDLENBQUMsQ0FBQztZQUNOLENBQUMsQ0FBQztVQUNOO1FBQ0o7TUFDSjtJQUNKLENBQUMsQ0FBQztFQUNOO0FBQ0osQ0FBQztBQUVELGlFQUFleEIsWUFBWSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vcmVzb3VyY2VzL3NjcmlwdHMvc2VjdGlvbnMvY29udGVudC1saW5rcy9tYWluLmpzPzgwYzgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFN3aXBlciwgeyBOYXZpZ2F0aW9uLCBQYWdpbmF0aW9uIH0gZnJvbSBcInN3aXBlclwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IGNvbnRlbnRMaW5rcyA9ICgpID0+IHtcclxuXHJcbiAgICBjb25zdCBsb2NrQmFja2dyb3VuZCA9ICgpID0+IHtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJvdmVyZmxvdy15LWhpZGRlblwiKTtcclxuICAgICAgICBcclxuICAgICAgICAvL0lwaG9uZXMgaWdub3JlIG92ZXJmbG93IGhpZGRlbiBvbiBib2R5IHRhZ3MsIHNvIHdlIGRvIHRoaXMgaW5zdGVhZFxyXG4gICAgICAgIGNvbnN0IHNjcm9sbFkgPSB3aW5kb3cuc2Nyb2xsWTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnRvcCA9IGAtJHtzY3JvbGxZfXB4YDtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmxlZnQgPSAnMCc7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5yaWdodCA9ICcwJztcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7ICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB1bmxvY2tCYWNrZ3JvdW5kID0gKCkgPT4ge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcIm92ZXJmbG93LXktaGlkZGVuXCIpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IHNjcm9sbFkgPSBNYXRoLmFicyhwYXJzZUludChkb2N1bWVudC5ib2R5LnN0eWxlLnRvcCB8fCAwLCAxMCkpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucG9zaXRpb24gPSBcIlwiO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudG9wID0gXCJcIjtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmxlZnQgPSBcIlwiO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucmlnaHQgPSBcIlwiO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBcIlwiO1xyXG5cclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oe1xyXG4gICAgICAgICAgICAgICAgdG9wOiBzY3JvbGxZLFxyXG4gICAgICAgICAgICAgICAgbGVmdDogMCxcclxuICAgICAgICAgICAgICAgIGJlaGF2aW9yOiBcImluc3RhbnRcIiAvLyBpT1MgMTYrIC0gYXZvaWRzIHRoZSBhd2t3YXJkIGJsaXAganVtcFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH0gIFxyXG5cclxuXHJcbiAgICBjb25zdCBjbG9zZVBvcHVwcyA9ICgkcG9wdXBDb250YWluZXIsJHBvcFVwcykgPT4ge1xyXG4gICAgICAgICRwb3BVcHMuZm9yRWFjaCgoJHBvcFVwKSA9PiB7XHJcbiAgICAgICAgICAgICRwb3BVcC5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkcG9wdXBDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcclxuXHJcbiAgICAgICAgdW5sb2NrQmFja2dyb3VuZCgpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjb25zdCBvcGVuUG9wdXAgPSAoJHBvcHVwQ29udGFpbmVyLHBvcHVwTnVtYmVyKSA9PiB7XHJcbiAgICAgICAgaWYoJHBvcHVwQ29udGFpbmVyKXtcclxuICAgICAgICAgICAgaWYocG9wdXBOdW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgJHBvcHVwID0gJHBvcHVwQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYC5wb3B1cC1jb250ZW50c1tkYXRhLXBvcC11cC1udW1iZXI9XCIke3BvcHVwTnVtYmVyfVwiXWApO1xyXG4gICAgICAgICAgICAgICAgaWYoJHBvcHVwKXtcclxuICAgICAgICAgICAgICAgICAgICAkcG9wdXBDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkcG9wdXAuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbG9ja0JhY2tncm91bmQoKTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBjb3VsZCBub3QgZmluZCBwb3B1cCB1c2luZyB0aGUgaWQgb2YgJHtwb3B1cE51bWJlcn1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNvdWxkIG5vdCBvcGVuIHBvcHVwIGFzIHRoZSBwb3B1cCBudW1iZXIgd2FzIG5vdCBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY291bGQgbm90IG9wZW4gcG9wdXAgYXMgdGhlIHBvcHVwIGNvbnRhaW5lciB3YXMgbm90IHBhc3NlZCB0byB0aGUgZnVuY3Rpb25cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0ICRjb250ZW50TGlua3NTZWN0aW9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuc2VjdGlvbi1jb250ZW50LWxpbmtzXCIpO1xyXG4gICAgaWYoJGNvbnRlbnRMaW5rc1NlY3Rpb25zLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICRjb250ZW50TGlua3NTZWN0aW9ucy5mb3JFYWNoKCgkY29udGVudExpbmtzU2VjdGlvbikgPT4ge1xyXG5cclxuICAgICAgICAgICAgLy9TZXR1cCB0aGUgU3dpcGVyXHJcbiAgICAgICAgICAgIGNvbnN0ICRzd2lwZXJDb250YWluZXIgPSAkY29udGVudExpbmtzU2VjdGlvbi5xdWVyeVNlbGVjdG9yKFwiLnN3aXBlci1jb250YWluZXJcIik7XHJcbiAgICAgICAgICAgIGNvbnN0ICRzd2lwZXJOYXZpZ2F0aW9uID0gJGNvbnRlbnRMaW5rc1NlY3Rpb24ucXVlcnlTZWxlY3RvcihcIi5zd2lwZXItbmF2aWdhdGlvbi1jb250YWluZXJcIik7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZigkc3dpcGVyQ29udGFpbmVyICYmICRzd2lwZXJOYXZpZ2F0aW9uKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2JpbGVTbGlkZXNOdW0gPSAkc3dpcGVyQ29udGFpbmVyLmRhdGFzZXQubW9iaWxlU2xpZGVzO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVza3RvcFNsaWRlc051bSA9ICRzd2lwZXJDb250YWluZXIuZGF0YXNldC5kZXNrdG9wU2xpZGVzO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKG1vYmlsZVNsaWRlc051bSAmJiBkZXNrdG9wU2xpZGVzTnVtKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJHN3aXBlciA9ICRzd2lwZXJDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5zd2lwZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoJHN3aXBlcil7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAkbmF2TGVmdCA9ICRzd2lwZXJOYXZpZ2F0aW9uLnF1ZXJ5U2VsZWN0b3IoXCIubmF2aWdhdGlvbi1wcmV2aW91c1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgJG5hdlJpZ2h0ID0gJHN3aXBlck5hdmlnYXRpb24ucXVlcnlTZWxlY3RvcihcIi5uYXZpZ2F0aW9uLW5leHRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzd2lwZXJDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb246IFwiaG9yaXpvbnRhbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlZWQ6IDEwMDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiBtb2JpbGVTbGlkZXNOdW0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZUJldHdlZW46IDIwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtwb2ludHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3Njg6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMy4zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZUJldHdlZW46IDI0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyNDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiBwYXJzZUludChkZXNrdG9wU2xpZGVzTnVtKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VCZXR3ZWVuOiAzMixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb246IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZENsYXNzOiBcImNvbnRlbnQtbGlua3NfYnV0dG9uLS1kaXNhYmxlZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbDogJG5hdlJpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZFbDogJG5hdkxlZnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN3aXBlck9iamVjdCA9IG5ldyBTd2lwZXIoJHN3aXBlciwgc3dpcGVyQ29uZmlnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJHN3aXBlclNsaWRlcyA9ICRzd2lwZXIucXVlcnlTZWxlY3RvckFsbChcIi5zd2lwZXItc2xpZGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgJHN3aXBlclNsaWRlcy5mb3JFYWNoKCgkc3dpcGVyU2xpZGUpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICRtYWluSW1hZ2UgPSAkc3dpcGVyU2xpZGUucXVlcnlTZWxlY3RvcihcIi5tYWluLWltYWdlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAkaG92ZXJWaWRlbyA9ICRzd2lwZXJTbGlkZS5xdWVyeVNlbGVjdG9yKFwiLmhvdmVyLXZpZGVvXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoJG1haW5JbWFnZSAmJiAkaG92ZXJWaWRlbyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3dpcGVyU2xpZGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5pbm5lcldpZHRoID4gMTAyMyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWFpbkltYWdlLmNsYXNzTGlzdC5hZGQoXCJvcGFjaXR5LTBcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRob3ZlclZpZGVvLmNsYXNzTGlzdC5yZW1vdmUoXCJvcGFjaXR5LTBcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYXlQcm9taXNlID0gJGhvdmVyVmlkZW8ucGxheSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9HZXQgc2lsZW50bHkgcmVqZWN0ZWQsIG5lcmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYXlQcm9taXNlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlQcm9taXNlLmNhdGNoKCgpID0+IHt9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzd2lwZXJTbGlkZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1haW5JbWFnZS5jbGFzc0xpc3QucmVtb3ZlKFwib3BhY2l0eS0wXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRob3ZlclZpZGVvLmNsYXNzTGlzdC5hZGQoXCJvcGFjaXR5LTBcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhvdmVyVmlkZW8ucGF1c2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgLy9Qb3AgdXAgdHJpZ2dlcnMsIG9wZW5pbmcsIGNsb3NpbmcgZXRjXHJcbiAgICAgICAgICAgIGNvbnN0ICRwb3B1cENvbnRhaW5lciA9ICRjb250ZW50TGlua3NTZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoXCIucG9wdXAtY29udGFpbmVyXCIpO1xyXG4gICAgICAgICAgICBjb25zdCAkcG9wdXBUcmlnZ2VycyA9ICRjb250ZW50TGlua3NTZWN0aW9uLnF1ZXJ5U2VsZWN0b3JBbGwoXCIucG9wdXAtdHJpZ2dlclwiKTsgXHJcblxyXG4gICAgICAgICAgICBpZigkcG9wdXBDb250YWluZXIpe1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0ICRwb3B1cEJnID0gJHBvcHVwQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIucG9wdXAtYmdcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCAkcG9wVXBzID0gJHBvcHVwQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIucG9wdXAtY29udGVudHNcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCAkcG9wdXBDbG9zZXMgPSAkcG9wdXBDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIi5jbG9zZS1idXR0b25cIik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoJHBvcHVwQmcgJiYgJHBvcFVwcy5sZW5ndGggPiAwKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9CaW5kIHRoZSBUcmlnZ2VyIENsaWNrc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCRwb3B1cFRyaWdnZXJzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkcG9wdXBUcmlnZ2Vycy5mb3JFYWNoKCgkcG9wdXBUcmlnZ2VyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcG9wdXBUcmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLChlKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vRXh0cmFjdCB0aGUgSUQgb2YgdGhlIHBvcHVwIHRoYXQgd2UncmUgbG9va2luZyBmb3IgZnJvbSB0aGUgY2xhc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvcHVwQ2xhc3MgPSBBcnJheS5mcm9tKCRwb3B1cFRyaWdnZXIuY2xhc3NMaXN0KS5maW5kKGNsYXNzTmFtZSA9PiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lLnN0YXJ0c1dpdGgoJ3BvcC11cC1udW1iZXItJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHBvcHVwQ2xhc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9wdXBOdW1iZXIgPSBwb3B1cENsYXNzLnJlcGxhY2UoJ3BvcC11cC1udW1iZXItJywgJycpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocG9wdXBOdW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9GaW5kIHRoZSByZWxldmFudCBwb3AgdXAgYW5kIG9wZW4gaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5Qb3B1cCgkcG9wdXBDb250YWluZXIscG9wdXBOdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9CaW5kIENsb3NlIHZpYSB0aGUgQmFja2dyb3VuZFxyXG4gICAgICAgICAgICAgICAgICAgICRwb3B1cEJnLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlUG9wdXBzKCRwb3B1cENvbnRhaW5lciwkcG9wVXBzKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9CaW5kIENsb3NlIHZpYSB0aGUgWCBidXR0b25zXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoJHBvcHVwQ2xvc2VzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkcG9wdXBDbG9zZXMuZm9yRWFjaCgoJHBvcHVwQ2xvc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwb3B1cENsb3NlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VQb3B1cHMoJHBvcHVwQ29udGFpbmVyLCRwb3BVcHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjb250ZW50TGlua3M7XHJcbiJdLCJuYW1lcyI6WyJTd2lwZXIiLCJOYXZpZ2F0aW9uIiwiUGFnaW5hdGlvbiIsImNvbnRlbnRMaW5rcyIsImxvY2tCYWNrZ3JvdW5kIiwiZG9jdW1lbnQiLCJib2R5IiwiY2xhc3NMaXN0IiwiYWRkIiwic2Nyb2xsWSIsIndpbmRvdyIsInN0eWxlIiwicG9zaXRpb24iLCJ0b3AiLCJsZWZ0IiwicmlnaHQiLCJvdmVyZmxvdyIsInVubG9ja0JhY2tncm91bmQiLCJyZW1vdmUiLCJNYXRoIiwiYWJzIiwicGFyc2VJbnQiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzY3JvbGxUbyIsImJlaGF2aW9yIiwiY2xvc2VQb3B1cHMiLCIkcG9wdXBDb250YWluZXIiLCIkcG9wVXBzIiwiZm9yRWFjaCIsIiRwb3BVcCIsIm9wZW5Qb3B1cCIsInBvcHVwTnVtYmVyIiwiJHBvcHVwIiwicXVlcnlTZWxlY3RvciIsImNvbnNvbGUiLCJsb2ciLCIkY29udGVudExpbmtzU2VjdGlvbnMiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGVuZ3RoIiwiJGNvbnRlbnRMaW5rc1NlY3Rpb24iLCIkc3dpcGVyQ29udGFpbmVyIiwiJHN3aXBlck5hdmlnYXRpb24iLCJtb2JpbGVTbGlkZXNOdW0iLCJkYXRhc2V0IiwibW9iaWxlU2xpZGVzIiwiZGVza3RvcFNsaWRlc051bSIsImRlc2t0b3BTbGlkZXMiLCIkc3dpcGVyIiwiJG5hdkxlZnQiLCIkbmF2UmlnaHQiLCJzd2lwZXJDb25maWciLCJkaXJlY3Rpb24iLCJzcGVlZCIsInNsaWRlc1BlclZpZXciLCJzcGFjZUJldHdlZW4iLCJicmVha3BvaW50cyIsIm5hdmlnYXRpb24iLCJkaXNhYmxlZENsYXNzIiwibmV4dEVsIiwicHJldkVsIiwic3dpcGVyT2JqZWN0IiwiJHN3aXBlclNsaWRlcyIsIiRzd2lwZXJTbGlkZSIsIiRtYWluSW1hZ2UiLCIkaG92ZXJWaWRlbyIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwiaW5uZXJXaWR0aCIsInBsYXlQcm9taXNlIiwicGxheSIsInVuZGVmaW5lZCIsInBhdXNlIiwiJHBvcHVwVHJpZ2dlcnMiLCIkcG9wdXBCZyIsIiRwb3B1cENsb3NlcyIsIiRwb3B1cFRyaWdnZXIiLCJwb3B1cENsYXNzIiwiQXJyYXkiLCJmcm9tIiwiZmluZCIsImNsYXNzTmFtZSIsInN0YXJ0c1dpdGgiLCJyZXBsYWNlIiwiJHBvcHVwQ2xvc2UiXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/content-links/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/cookie-banner/main.js\":\r\n/*!**********************************************************!*\\\r\n  !*** ./resources/scripts/sections/cookie-banner/main.js ***!\r\n  \\**********************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"cookieBanner\\\": () => (/* binding */ cookieBanner),\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* harmony import */ var js_cookie__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! js-cookie */ \\\"./node_modules/js-cookie/dist/js.cookie.mjs\\\");\\n\\nvar cookieBanner = function cookieBanner() {\\n  var $cookieBanner = document.querySelector(\\\".cookie-banner\\\");\\n  if ($cookieBanner) {\\n    window.Shopify.loadFeatures([{\\n      name: \\\"consent-tracking-api\\\",\\n      version: \\\"0.1\\\"\\n    }], function (error) {\\n      var showBanner = function showBanner() {\\n        $cookieBanner.classList.remove(\\\"opacity-0\\\", \\\"pointer-events-none\\\");\\n      };\\n      var hideBanner = function hideBanner() {\\n        $cookieBanner.classList.add(\\\"opacity-0\\\", \\\"pointer-events-none\\\");\\n      };\\n      var handleAccept = function handleAccept(event) {\\n        window.Shopify.customerPrivacy.setTrackingConsent(true, hideBanner);\\n      };\\n      var handleDecline = function handleDecline() {\\n        window.Shopify.customerPrivacy.setTrackingConsent(false, hideBanner);\\n      };\\n      var $cookieBannerAccept = $cookieBanner.querySelector(\\\".cookie-banner__button.cookie-banner__button--accept\\\");\\n      $cookieBannerAccept.addEventListener(\\\"click\\\", function (event) {\\n        handleAccept(event);\\n      });\\n      var $cookieBannerDecline = $cookieBanner.querySelector(\\\".cookie-banner__button.cookie-banner__button--decline\\\");\\n      $cookieBannerDecline.addEventListener(\\\"click\\\", function (event) {\\n        handleDecline(event);\\n      });\\n      var userCanBeTracked = window.Shopify.customerPrivacy.userCanBeTracked();\\n      var userTrackingConsent = window.Shopify.customerPrivacy.getTrackingConsent();\\n      if (!userCanBeTracked && userTrackingConsent === \\\"no_interaction\\\") {\\n        showBanner();\\n      }\\n    });\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cookieBanner);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9jb29raWUtYmFubmVyL21haW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWdDO0FBRXpCLElBQU1DLFlBQVksR0FBRyxTQUFmQSxZQUFZLEdBQVM7RUFDaEMsSUFBTUMsYUFBYSxHQUFHQyxRQUFRLENBQUNDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQztFQUU5RCxJQUFJRixhQUFhLEVBQUU7SUFDakJHLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDQyxZQUFZLENBQ3pCLENBQ0U7TUFDRUMsSUFBSSxFQUFFLHNCQUFzQjtNQUM1QkMsT0FBTyxFQUFFO0lBQ1gsQ0FBQyxDQUNGLEVBQ0QsVUFBQ0MsS0FBSyxFQUFLO01BQ1QsSUFBTUMsVUFBVSxHQUFHLFNBQWJBLFVBQVUsR0FBUztRQUN2QlQsYUFBYSxDQUFDVSxTQUFTLENBQUNDLE1BQU0sQ0FBQyxXQUFXLEVBQUUscUJBQXFCLENBQUM7TUFDcEUsQ0FBQztNQUVELElBQU1DLFVBQVUsR0FBRyxTQUFiQSxVQUFVLEdBQVM7UUFDdkJaLGFBQWEsQ0FBQ1UsU0FBUyxDQUFDRyxHQUFHLENBQUMsV0FBVyxFQUFFLHFCQUFxQixDQUFDO01BQ2pFLENBQUM7TUFFRCxJQUFNQyxZQUFZLEdBQUcsU0FBZkEsWUFBWSxDQUFJQyxLQUFLLEVBQUs7UUFDOUJaLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDWSxlQUFlLENBQUNDLGtCQUFrQixDQUFDLElBQUksRUFBRUwsVUFBVSxDQUFDO01BQ3JFLENBQUM7TUFFRCxJQUFNTSxhQUFhLEdBQUcsU0FBaEJBLGFBQWEsR0FBUztRQUMxQmYsTUFBTSxDQUFDQyxPQUFPLENBQUNZLGVBQWUsQ0FBQ0Msa0JBQWtCLENBQUMsS0FBSyxFQUFFTCxVQUFVLENBQUM7TUFDdEUsQ0FBQztNQUVELElBQU1PLG1CQUFtQixHQUFHbkIsYUFBYSxDQUFDRSxhQUFhLENBQ3JELHNEQUFzRCxDQUN2RDtNQUVEaUIsbUJBQW1CLENBQUNDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxVQUFDTCxLQUFLLEVBQUs7UUFDdkRELFlBQVksQ0FBQ0MsS0FBSyxDQUFDO01BQ3JCLENBQUMsQ0FBQztNQUVGLElBQU1NLG9CQUFvQixHQUFHckIsYUFBYSxDQUFDRSxhQUFhLENBQ3RELHVEQUF1RCxDQUN4RDtNQUNEbUIsb0JBQW9CLENBQUNELGdCQUFnQixDQUFDLE9BQU8sRUFBRSxVQUFDTCxLQUFLLEVBQUs7UUFDeERHLGFBQWEsQ0FBQ0gsS0FBSyxDQUFDO01BQ3RCLENBQUMsQ0FBQztNQUVGLElBQU1PLGdCQUFnQixHQUNwQm5CLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDWSxlQUFlLENBQUNNLGdCQUFnQixFQUFFO01BRW5ELElBQU1DLG1CQUFtQixHQUN2QnBCLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDWSxlQUFlLENBQUNRLGtCQUFrQixFQUFFO01BRXJELElBQUksQ0FBQ0YsZ0JBQWdCLElBQUlDLG1CQUFtQixLQUFLLGdCQUFnQixFQUFFO1FBQ2pFZCxVQUFVLEVBQUU7TUFDZDtJQUNGLENBQUMsQ0FDRjtFQUNIO0FBQ0YsQ0FBQztBQUVELGlFQUFlVixZQUFZIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9jb29raWUtYmFubmVyL21haW4uanM/M2JiMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29va2llcyBmcm9tIFwianMtY29va2llXCI7XHJcblxyXG5leHBvcnQgY29uc3QgY29va2llQmFubmVyID0gKCkgPT4ge1xyXG4gIGNvbnN0ICRjb29raWVCYW5uZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmNvb2tpZS1iYW5uZXJcIik7XHJcblxyXG4gIGlmICgkY29va2llQmFubmVyKSB7XHJcbiAgICB3aW5kb3cuU2hvcGlmeS5sb2FkRmVhdHVyZXMoXHJcbiAgICAgIFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiBcImNvbnNlbnQtdHJhY2tpbmctYXBpXCIsXHJcbiAgICAgICAgICB2ZXJzaW9uOiBcIjAuMVwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNob3dCYW5uZXIgPSAoKSA9PiB7XHJcbiAgICAgICAgICAkY29va2llQmFubmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJvcGFjaXR5LTBcIiwgXCJwb2ludGVyLWV2ZW50cy1ub25lXCIpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGhpZGVCYW5uZXIgPSAoKSA9PiB7XHJcbiAgICAgICAgICAkY29va2llQmFubmVyLmNsYXNzTGlzdC5hZGQoXCJvcGFjaXR5LTBcIiwgXCJwb2ludGVyLWV2ZW50cy1ub25lXCIpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGhhbmRsZUFjY2VwdCA9IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgd2luZG93LlNob3BpZnkuY3VzdG9tZXJQcml2YWN5LnNldFRyYWNraW5nQ29uc2VudCh0cnVlLCBoaWRlQmFubmVyKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBoYW5kbGVEZWNsaW5lID0gKCkgPT4ge1xyXG4gICAgICAgICAgd2luZG93LlNob3BpZnkuY3VzdG9tZXJQcml2YWN5LnNldFRyYWNraW5nQ29uc2VudChmYWxzZSwgaGlkZUJhbm5lcik7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgJGNvb2tpZUJhbm5lckFjY2VwdCA9ICRjb29raWVCYW5uZXIucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAgIFwiLmNvb2tpZS1iYW5uZXJfX2J1dHRvbi5jb29raWUtYmFubmVyX19idXR0b24tLWFjY2VwdFwiXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgJGNvb2tpZUJhbm5lckFjY2VwdC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBoYW5kbGVBY2NlcHQoZXZlbnQpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCAkY29va2llQmFubmVyRGVjbGluZSA9ICRjb29raWVCYW5uZXIucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAgIFwiLmNvb2tpZS1iYW5uZXJfX2J1dHRvbi5jb29raWUtYmFubmVyX19idXR0b24tLWRlY2xpbmVcIlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgJGNvb2tpZUJhbm5lckRlY2xpbmUuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgaGFuZGxlRGVjbGluZShldmVudCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHVzZXJDYW5CZVRyYWNrZWQgPVxyXG4gICAgICAgICAgd2luZG93LlNob3BpZnkuY3VzdG9tZXJQcml2YWN5LnVzZXJDYW5CZVRyYWNrZWQoKTtcclxuXHJcbiAgICAgICAgY29uc3QgdXNlclRyYWNraW5nQ29uc2VudCA9XHJcbiAgICAgICAgICB3aW5kb3cuU2hvcGlmeS5jdXN0b21lclByaXZhY3kuZ2V0VHJhY2tpbmdDb25zZW50KCk7XHJcblxyXG4gICAgICAgIGlmICghdXNlckNhbkJlVHJhY2tlZCAmJiB1c2VyVHJhY2tpbmdDb25zZW50ID09PSBcIm5vX2ludGVyYWN0aW9uXCIpIHtcclxuICAgICAgICAgIHNob3dCYW5uZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY29va2llQmFubmVyO1xyXG4iXSwibmFtZXMiOlsiQ29va2llcyIsImNvb2tpZUJhbm5lciIsIiRjb29raWVCYW5uZXIiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJ3aW5kb3ciLCJTaG9waWZ5IiwibG9hZEZlYXR1cmVzIiwibmFtZSIsInZlcnNpb24iLCJlcnJvciIsInNob3dCYW5uZXIiLCJjbGFzc0xpc3QiLCJyZW1vdmUiLCJoaWRlQmFubmVyIiwiYWRkIiwiaGFuZGxlQWNjZXB0IiwiZXZlbnQiLCJjdXN0b21lclByaXZhY3kiLCJzZXRUcmFja2luZ0NvbnNlbnQiLCJoYW5kbGVEZWNsaW5lIiwiJGNvb2tpZUJhbm5lckFjY2VwdCIsImFkZEV2ZW50TGlzdGVuZXIiLCIkY29va2llQmFubmVyRGVjbGluZSIsInVzZXJDYW5CZVRyYWNrZWQiLCJ1c2VyVHJhY2tpbmdDb25zZW50IiwiZ2V0VHJhY2tpbmdDb25zZW50Il0sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/cookie-banner/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/faqs/main.js\":\r\n/*!*************************************************!*\\\r\n  !*** ./resources/scripts/sections/faqs/main.js ***!\r\n  \\*************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"faqsSection\\\": () => (/* binding */ faqsSection)\\n/* harmony export */ });\\nvar faqsSection = function faqsSection() {\\n  var $faqsSections = document.querySelectorAll(\\\"section.faqs\\\");\\n  if ($faqsSections.length > 0) {\\n    $faqsSections.forEach(function ($faqSection) {\\n      var $faqs = $faqSection.querySelectorAll(\\\".faqs__list .faq\\\");\\n      if ($faqs.length > 0) {\\n        $faqs.forEach(function ($faq) {\\n          var $faqQuestion = $faq.querySelector(\\\".faq__question\\\");\\n          if ($faqQuestion) {\\n            $faqQuestion.addEventListener(\\\"click\\\", function (event) {\\n              event.preventDefault();\\n              $faq.classList.toggle(\\\"active\\\");\\n            });\\n          }\\n        });\\n      }\\n    });\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (faqsSection);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9mYXFzL21haW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxJQUFNQSxXQUFXLEdBQUcsU0FBZEEsV0FBVyxHQUFTO0VBQy9CLElBQU1DLGFBQWEsR0FBR0MsUUFBUSxDQUFDQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUM7RUFDL0QsSUFBSUYsYUFBYSxDQUFDRyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0lBQzVCSCxhQUFhLENBQUNJLE9BQU8sQ0FBQyxVQUFDQyxXQUFXLEVBQUs7TUFDckMsSUFBTUMsS0FBSyxHQUFHRCxXQUFXLENBQUNILGdCQUFnQixDQUFDLGtCQUFrQixDQUFDO01BQzlELElBQUdJLEtBQUssQ0FBQ0gsTUFBTSxHQUFHLENBQUMsRUFBQztRQUNsQkcsS0FBSyxDQUFDRixPQUFPLENBQUMsVUFBQ0csSUFBSSxFQUFLO1VBQ3RCLElBQU1DLFlBQVksR0FBR0QsSUFBSSxDQUFDRSxhQUFhLENBQUMsZ0JBQWdCLENBQUM7VUFDekQsSUFBR0QsWUFBWSxFQUFDO1lBQ2RBLFlBQVksQ0FBQ0UsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFVBQUNDLEtBQUssRUFBSztjQUNoREEsS0FBSyxDQUFDQyxjQUFjLEVBQUU7Y0FDdEJMLElBQUksQ0FBQ00sU0FBUyxDQUFDQyxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQ2pDLENBQUMsQ0FBQztVQUNKO1FBQ0YsQ0FBQyxDQUFDO01BQ0o7SUFDRixDQUFDLENBQUM7RUFDSjtBQUNGLENBQUM7QUFFRCxpRUFBZWYsV0FBVyIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vcmVzb3VyY2VzL3NjcmlwdHMvc2VjdGlvbnMvZmFxcy9tYWluLmpzPzk2YzMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGZhcXNTZWN0aW9uID0gKCkgPT4ge1xyXG4gIGNvbnN0ICRmYXFzU2VjdGlvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic2VjdGlvbi5mYXFzXCIpO1xyXG4gIGlmICgkZmFxc1NlY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICRmYXFzU2VjdGlvbnMuZm9yRWFjaCgoJGZhcVNlY3Rpb24pID0+IHtcclxuICAgICAgY29uc3QgJGZhcXMgPSAkZmFxU2VjdGlvbi5xdWVyeVNlbGVjdG9yQWxsKFwiLmZhcXNfX2xpc3QgLmZhcVwiKTtcclxuICAgICAgaWYoJGZhcXMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgJGZhcXMuZm9yRWFjaCgoJGZhcSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgJGZhcVF1ZXN0aW9uID0gJGZhcS5xdWVyeVNlbGVjdG9yKFwiLmZhcV9fcXVlc3Rpb25cIik7XHJcbiAgICAgICAgICBpZigkZmFxUXVlc3Rpb24pe1xyXG4gICAgICAgICAgICAkZmFxUXVlc3Rpb24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgJGZhcS5jbGFzc0xpc3QudG9nZ2xlKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZmFxc1NlY3Rpb247XHJcbiJdLCJuYW1lcyI6WyJmYXFzU2VjdGlvbiIsIiRmYXFzU2VjdGlvbnMiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJmb3JFYWNoIiwiJGZhcVNlY3Rpb24iLCIkZmFxcyIsIiRmYXEiLCIkZmFxUXVlc3Rpb24iLCJxdWVyeVNlbGVjdG9yIiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJjbGFzc0xpc3QiLCJ0b2dnbGUiXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/faqs/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/featured-articles/main.js\":\r\n/*!**************************************************************!*\\\r\n  !*** ./resources/scripts/sections/featured-articles/main.js ***!\r\n  \\**************************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"featuredArticles\\\": () => (/* binding */ featuredArticles)\\n/* harmony export */ });\\n/* harmony import */ var swiper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! swiper */ \\\"./node_modules/swiper/swiper.esm.js\\\");\\n// Import Swiper and modules\\n\\nvar featuredArticles = function featuredArticles() {\\n  var $featuredArticlesSections = document.querySelectorAll(\\\"section.featured-articles\\\");\\n  if ($featuredArticlesSections.length > 0) {\\n    $featuredArticlesSections.forEach(function ($featuredArticles) {\\n      var $featuredArticlesNav = $featuredArticles.querySelector(\\\".swiper-navigation-container\\\");\\n      var $featuredArticlesSwiper = $featuredArticles.querySelector(\\\".featured-articles__swiper-container .featured-articles__swiper.swiper\\\");\\n      if ($featuredArticlesSwiper) {\\n        var swiperConfig = {\\n          modules: [swiper__WEBPACK_IMPORTED_MODULE_0__.Navigation, swiper__WEBPACK_IMPORTED_MODULE_0__.Pagination],\\n          direction: \\\"horizontal\\\",\\n          speed: 1000,\\n          slidesPerView: 1.6,\\n          spaceBetween: 20,\\n          breakpoints: {\\n            768: {\\n              slidesPerView: 3,\\n              spaceBetween: 24\\n            },\\n            1024: {\\n              slidesPerView: 4,\\n              spaceBetween: 32\\n            }\\n          }\\n        };\\n        if ($featuredArticlesNav) {\\n          var $featuredArticlesNavButtonPrev = $featuredArticlesNav.querySelector(\\\".navigation-previous\\\");\\n          var $featuredArticlesNavButtonNext = $featuredArticlesNav.querySelector(\\\".navigation-next\\\");\\n          if ($featuredArticlesNavButtonPrev && $featuredArticlesNavButtonNext) {\\n            swiperConfig.navigation = {\\n              disabledClass: \\\"featured-articles__nav-button--disabled\\\",\\n              nextEl: $featuredArticlesNavButtonNext,\\n              prevEl: $featuredArticlesNavButtonPrev\\n            };\\n          }\\n        }\\n        var swiperObject = new swiper__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"]($featuredArticlesSwiper, swiperConfig);\\n      }\\n    });\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (featuredArticles);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9mZWF0dXJlZC1hcnRpY2xlcy9tYWluLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ3dEO0FBRWpELElBQU1HLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0IsR0FBUztFQUVwQyxJQUFNQyx5QkFBeUIsR0FBR0MsUUFBUSxDQUFDQyxnQkFBZ0IsQ0FBQywyQkFBMkIsQ0FBQztFQUN4RixJQUFJRix5QkFBeUIsQ0FBQ0csTUFBTSxHQUFHLENBQUMsRUFBRTtJQUV4Q0gseUJBQXlCLENBQUNJLE9BQU8sQ0FBQyxVQUFDQyxpQkFBaUIsRUFBSztNQUV2RCxJQUFNQyxvQkFBb0IsR0FBR0QsaUJBQWlCLENBQUNFLGFBQWEsQ0FBQyw4QkFBOEIsQ0FBQztNQUM1RixJQUFNQyx1QkFBdUIsR0FBR0gsaUJBQWlCLENBQUNFLGFBQWEsQ0FBQyx3RUFBd0UsQ0FBQztNQUV6SSxJQUFJQyx1QkFBdUIsRUFBRTtRQUUzQixJQUFNQyxZQUFZLEdBQUc7VUFDbkJDLE9BQU8sRUFBRSxDQUFDYiw4Q0FBVSxFQUFFQyw4Q0FBVSxDQUFDO1VBQ2pDYSxTQUFTLEVBQUUsWUFBWTtVQUN2QkMsS0FBSyxFQUFFLElBQUk7VUFDWEMsYUFBYSxFQUFFLEdBQUc7VUFDbEJDLFlBQVksRUFBRSxFQUFFO1VBQ2hCQyxXQUFXLEVBQUU7WUFDWCxHQUFHLEVBQUU7Y0FDSEYsYUFBYSxFQUFFLENBQUM7Y0FDaEJDLFlBQVksRUFBRTtZQUNoQixDQUFDO1lBQ0QsSUFBSSxFQUFFO2NBQ0pELGFBQWEsRUFBRSxDQUFDO2NBQ2hCQyxZQUFZLEVBQUU7WUFDaEI7VUFDRjtRQUNGLENBQUM7UUFFRCxJQUFJUixvQkFBb0IsRUFBRTtVQUN4QixJQUFNVSw4QkFBOEIsR0FBR1Ysb0JBQW9CLENBQUNDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQztVQUNqRyxJQUFNVSw4QkFBOEIsR0FBR1gsb0JBQW9CLENBQUNDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQztVQUU3RixJQUFHUyw4QkFBOEIsSUFBSUMsOEJBQThCLEVBQUM7WUFDbEVSLFlBQVksQ0FBQ1MsVUFBVSxHQUFHO2NBQ3hCQyxhQUFhLEVBQUUseUNBQXlDO2NBQ3hEQyxNQUFNLEVBQUVILDhCQUE4QjtjQUN0Q0ksTUFBTSxFQUFFTDtZQUNWLENBQUM7VUFDSDtRQUNGO1FBRUEsSUFBTU0sWUFBWSxHQUFHLElBQUkxQiw4Q0FBTSxDQUFDWSx1QkFBdUIsRUFBRUMsWUFBWSxDQUFDO01BQ3hFO0lBQ0YsQ0FBQyxDQUFDO0VBQ0o7QUFDRixDQUFDO0FBRUQsaUVBQWVWLGdCQUFnQiIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vcmVzb3VyY2VzL3NjcmlwdHMvc2VjdGlvbnMvZmVhdHVyZWQtYXJ0aWNsZXMvbWFpbi5qcz9kNDNjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydCBTd2lwZXIgYW5kIG1vZHVsZXNcclxuaW1wb3J0IFN3aXBlciwgeyBOYXZpZ2F0aW9uLCBQYWdpbmF0aW9uIH0gZnJvbSBcInN3aXBlclwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IGZlYXR1cmVkQXJ0aWNsZXMgPSAoKSA9PiB7XHJcblxyXG4gIGNvbnN0ICRmZWF0dXJlZEFydGljbGVzU2VjdGlvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic2VjdGlvbi5mZWF0dXJlZC1hcnRpY2xlc1wiKTtcclxuICBpZiAoJGZlYXR1cmVkQXJ0aWNsZXNTZWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcblxyXG4gICAgJGZlYXR1cmVkQXJ0aWNsZXNTZWN0aW9ucy5mb3JFYWNoKCgkZmVhdHVyZWRBcnRpY2xlcykgPT4ge1xyXG5cclxuICAgICAgY29uc3QgJGZlYXR1cmVkQXJ0aWNsZXNOYXYgPSAkZmVhdHVyZWRBcnRpY2xlcy5xdWVyeVNlbGVjdG9yKFwiLnN3aXBlci1uYXZpZ2F0aW9uLWNvbnRhaW5lclwiKTtcclxuICAgICAgY29uc3QgJGZlYXR1cmVkQXJ0aWNsZXNTd2lwZXIgPSAkZmVhdHVyZWRBcnRpY2xlcy5xdWVyeVNlbGVjdG9yKFwiLmZlYXR1cmVkLWFydGljbGVzX19zd2lwZXItY29udGFpbmVyIC5mZWF0dXJlZC1hcnRpY2xlc19fc3dpcGVyLnN3aXBlclwiKTtcclxuXHJcbiAgICAgIGlmICgkZmVhdHVyZWRBcnRpY2xlc1N3aXBlcikge1xyXG5cclxuICAgICAgICBjb25zdCBzd2lwZXJDb25maWcgPSB7XHJcbiAgICAgICAgICBtb2R1bGVzOiBbTmF2aWdhdGlvbiwgUGFnaW5hdGlvbl0sXHJcbiAgICAgICAgICBkaXJlY3Rpb246IFwiaG9yaXpvbnRhbFwiLFxyXG4gICAgICAgICAgc3BlZWQ6IDEwMDAsXHJcbiAgICAgICAgICBzbGlkZXNQZXJWaWV3OiAxLjYsXHJcbiAgICAgICAgICBzcGFjZUJldHdlZW46IDIwLFxyXG4gICAgICAgICAgYnJlYWtwb2ludHM6IHtcclxuICAgICAgICAgICAgNzY4OiB7XHJcbiAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMyxcclxuICAgICAgICAgICAgICBzcGFjZUJldHdlZW46IDI0LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAxMDI0OiB7XHJcbiAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogNCxcclxuICAgICAgICAgICAgICBzcGFjZUJldHdlZW46IDMyLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoJGZlYXR1cmVkQXJ0aWNsZXNOYXYpIHtcclxuICAgICAgICAgIGNvbnN0ICRmZWF0dXJlZEFydGljbGVzTmF2QnV0dG9uUHJldiA9ICRmZWF0dXJlZEFydGljbGVzTmF2LnF1ZXJ5U2VsZWN0b3IoXCIubmF2aWdhdGlvbi1wcmV2aW91c1wiKTtcclxuICAgICAgICAgIGNvbnN0ICRmZWF0dXJlZEFydGljbGVzTmF2QnV0dG9uTmV4dCA9ICRmZWF0dXJlZEFydGljbGVzTmF2LnF1ZXJ5U2VsZWN0b3IoXCIubmF2aWdhdGlvbi1uZXh0XCIpO1xyXG5cclxuICAgICAgICAgIGlmKCRmZWF0dXJlZEFydGljbGVzTmF2QnV0dG9uUHJldiAmJiAkZmVhdHVyZWRBcnRpY2xlc05hdkJ1dHRvbk5leHQpe1xyXG4gICAgICAgICAgICBzd2lwZXJDb25maWcubmF2aWdhdGlvbiA9IHtcclxuICAgICAgICAgICAgICBkaXNhYmxlZENsYXNzOiBcImZlYXR1cmVkLWFydGljbGVzX19uYXYtYnV0dG9uLS1kaXNhYmxlZFwiLFxyXG4gICAgICAgICAgICAgIG5leHRFbDogJGZlYXR1cmVkQXJ0aWNsZXNOYXZCdXR0b25OZXh0LFxyXG4gICAgICAgICAgICAgIHByZXZFbDogJGZlYXR1cmVkQXJ0aWNsZXNOYXZCdXR0b25QcmV2LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc3dpcGVyT2JqZWN0ID0gbmV3IFN3aXBlcigkZmVhdHVyZWRBcnRpY2xlc1N3aXBlciwgc3dpcGVyQ29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZmVhdHVyZWRBcnRpY2xlcztcclxuIl0sIm5hbWVzIjpbIlN3aXBlciIsIk5hdmlnYXRpb24iLCJQYWdpbmF0aW9uIiwiZmVhdHVyZWRBcnRpY2xlcyIsIiRmZWF0dXJlZEFydGljbGVzU2VjdGlvbnMiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJmb3JFYWNoIiwiJGZlYXR1cmVkQXJ0aWNsZXMiLCIkZmVhdHVyZWRBcnRpY2xlc05hdiIsInF1ZXJ5U2VsZWN0b3IiLCIkZmVhdHVyZWRBcnRpY2xlc1N3aXBlciIsInN3aXBlckNvbmZpZyIsIm1vZHVsZXMiLCJkaXJlY3Rpb24iLCJzcGVlZCIsInNsaWRlc1BlclZpZXciLCJzcGFjZUJldHdlZW4iLCJicmVha3BvaW50cyIsIiRmZWF0dXJlZEFydGljbGVzTmF2QnV0dG9uUHJldiIsIiRmZWF0dXJlZEFydGljbGVzTmF2QnV0dG9uTmV4dCIsIm5hdmlnYXRpb24iLCJkaXNhYmxlZENsYXNzIiwibmV4dEVsIiwicHJldkVsIiwic3dpcGVyT2JqZWN0Il0sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/featured-articles/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/featured-collections/main.js\":\r\n/*!*****************************************************************!*\\\r\n  !*** ./resources/scripts/sections/featured-collections/main.js ***!\r\n  \\*****************************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"featuredCollections\\\": () => (/* binding */ featuredCollections)\\n/* harmony export */ });\\n/* harmony import */ var swiper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! swiper */ \\\"./node_modules/swiper/swiper.esm.js\\\");\\n// Import Swiper and modules\\n\\nvar featuredCollections = function featuredCollections() {\\n  var $featuredCollectionsSections = document.querySelectorAll(\\\"section.featured-collections\\\");\\n  if ($featuredCollectionsSections) {\\n    $featuredCollectionsSections.forEach(function ($featuredCollections) {\\n      var $featuredCollectionsNav = $featuredCollections.querySelector(\\\".featured-collections__nav\\\");\\n      var $featuredCollectionsSwiper = $featuredCollections.querySelector(\\\".featured-collections__swiper-container .featured-collections__swiper.swiper\\\");\\n      var maxSlides = parseInt($featuredCollectionsSwiper.dataset.maxSlides);\\n      if ($featuredCollectionsSwiper) {\\n        var swiperConfig = {\\n          modules: [swiper__WEBPACK_IMPORTED_MODULE_0__.Navigation, swiper__WEBPACK_IMPORTED_MODULE_0__.Pagination],\\n          direction: \\\"horizontal\\\",\\n          speed: 1000,\\n          // autoplay: {\\n          //   delay: 5000,\\n          // },\\n          // pagination: {\\n          //   bulletActiveClass: \\\"featured-collections__swiper-bullet--active\\\",\\n          //   bulletClass: \\\"featured-collections__swiper-bullet\\\",\\n          //   bulletElement: \\\"button\\\",\\n          //   el: \\\".featured-collections__swiper-pagination\\\",\\n          //   modifierClass: \\\"featured-collections__swiper-pagination--\\\",\\n          //   type: \\\"bullets\\\",\\n          //   clickable: true,\\n          // },\\n          slidesPerView: 2,\\n          spaceBetween: 12,\\n          breakpoints: {\\n            768: {\\n              slidesPerView: 3,\\n              spaceBetween: 16\\n            },\\n            1024: {\\n              slidesPerView: maxSlides,\\n              spaceBetween: 32\\n            }\\n          }\\n        };\\n        if ($featuredCollectionsNav) {\\n          var $featuredCollectionsNavButtonPrev = $featuredCollectionsNav.querySelector(\\\".featured-collections__nav-button.featured-collections__nav-button--prev\\\");\\n          var $featuredCollectionsNavButtonNext = $featuredCollectionsNav.querySelector(\\\".featured-collections__nav-button.featured-collections__nav-button--next\\\");\\n          swiperConfig.navigation = {\\n            disabledClass: \\\"featured-collections__nav-button--disabled\\\",\\n            nextEl: $featuredCollectionsNavButtonNext,\\n            prevEl: $featuredCollectionsNavButtonPrev\\n          };\\n        }\\n        var swiperObject = new swiper__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"]($featuredCollectionsSwiper, swiperConfig);\\n      }\\n    });\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (featuredCollections);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9mZWF0dXJlZC1jb2xsZWN0aW9ucy9tYWluLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ3dEO0FBRWpELElBQU1HLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUIsR0FBUztFQUN2QyxJQUFNQyw0QkFBNEIsR0FBR0MsUUFBUSxDQUFDQyxnQkFBZ0IsQ0FDNUQsOEJBQThCLENBQy9CO0VBQ0QsSUFBSUYsNEJBQTRCLEVBQUU7SUFDaENBLDRCQUE0QixDQUFDRyxPQUFPLENBQUMsVUFBQ0Msb0JBQW9CLEVBQUs7TUFDN0QsSUFBTUMsdUJBQXVCLEdBQUdELG9CQUFvQixDQUFDRSxhQUFhLENBQ2hFLDRCQUE0QixDQUM3QjtNQUVELElBQU1DLDBCQUEwQixHQUFHSCxvQkFBb0IsQ0FBQ0UsYUFBYSxDQUNuRSw4RUFBOEUsQ0FDL0U7TUFDRCxJQUFNRSxTQUFTLEdBQUdDLFFBQVEsQ0FBQ0YsMEJBQTBCLENBQUNHLE9BQU8sQ0FBQ0YsU0FBUyxDQUFDO01BQ3hFLElBQUlELDBCQUEwQixFQUFFO1FBQzlCLElBQU1JLFlBQVksR0FBRztVQUNuQkMsT0FBTyxFQUFFLENBQUNmLDhDQUFVLEVBQUVDLDhDQUFVLENBQUM7VUFDakNlLFNBQVMsRUFBRSxZQUFZO1VBQ3ZCQyxLQUFLLEVBQUUsSUFBSTtVQUNYO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBQyxhQUFhLEVBQUUsQ0FBQztVQUNoQkMsWUFBWSxFQUFFLEVBQUU7VUFDaEJDLFdBQVcsRUFBRTtZQUNYLEdBQUcsRUFBRTtjQUNIRixhQUFhLEVBQUUsQ0FBQztjQUNoQkMsWUFBWSxFQUFFO1lBQ2hCLENBQUM7WUFDRCxJQUFJLEVBQUU7Y0FDSkQsYUFBYSxFQUFFUCxTQUFTO2NBQ3hCUSxZQUFZLEVBQUU7WUFDaEI7VUFDRjtRQUNGLENBQUM7UUFDRCxJQUFJWCx1QkFBdUIsRUFBRTtVQUMzQixJQUFNYSxpQ0FBaUMsR0FDckNiLHVCQUF1QixDQUFDQyxhQUFhLENBQ25DLDBFQUEwRSxDQUMzRTtVQUNILElBQU1hLGlDQUFpQyxHQUNyQ2QsdUJBQXVCLENBQUNDLGFBQWEsQ0FDbkMsMEVBQTBFLENBQzNFO1VBQ0hLLFlBQVksQ0FBQ1MsVUFBVSxHQUFHO1lBQ3hCQyxhQUFhLEVBQUUsNENBQTRDO1lBQzNEQyxNQUFNLEVBQUVILGlDQUFpQztZQUN6Q0ksTUFBTSxFQUFFTDtVQUNWLENBQUM7UUFDSDtRQUNBLElBQU1NLFlBQVksR0FBRyxJQUFJNUIsOENBQU0sQ0FDN0JXLDBCQUEwQixFQUMxQkksWUFBWSxDQUNiO01BQ0g7SUFDRixDQUFDLENBQUM7RUFDSjtBQUNGLENBQUM7QUFFRCxpRUFBZVosbUJBQW1CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9mZWF0dXJlZC1jb2xsZWN0aW9ucy9tYWluLmpzPzZjMDIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0IFN3aXBlciBhbmQgbW9kdWxlc1xyXG5pbXBvcnQgU3dpcGVyLCB7IE5hdmlnYXRpb24sIFBhZ2luYXRpb24gfSBmcm9tIFwic3dpcGVyXCI7XHJcblxyXG5leHBvcnQgY29uc3QgZmVhdHVyZWRDb2xsZWN0aW9ucyA9ICgpID0+IHtcclxuICBjb25zdCAkZmVhdHVyZWRDb2xsZWN0aW9uc1NlY3Rpb25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgIFwic2VjdGlvbi5mZWF0dXJlZC1jb2xsZWN0aW9uc1wiXHJcbiAgKTtcclxuICBpZiAoJGZlYXR1cmVkQ29sbGVjdGlvbnNTZWN0aW9ucykge1xyXG4gICAgJGZlYXR1cmVkQ29sbGVjdGlvbnNTZWN0aW9ucy5mb3JFYWNoKCgkZmVhdHVyZWRDb2xsZWN0aW9ucykgPT4ge1xyXG4gICAgICBjb25zdCAkZmVhdHVyZWRDb2xsZWN0aW9uc05hdiA9ICRmZWF0dXJlZENvbGxlY3Rpb25zLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgXCIuZmVhdHVyZWQtY29sbGVjdGlvbnNfX25hdlwiXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCAkZmVhdHVyZWRDb2xsZWN0aW9uc1N3aXBlciA9ICRmZWF0dXJlZENvbGxlY3Rpb25zLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgXCIuZmVhdHVyZWQtY29sbGVjdGlvbnNfX3N3aXBlci1jb250YWluZXIgLmZlYXR1cmVkLWNvbGxlY3Rpb25zX19zd2lwZXIuc3dpcGVyXCJcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgbWF4U2xpZGVzID0gcGFyc2VJbnQoJGZlYXR1cmVkQ29sbGVjdGlvbnNTd2lwZXIuZGF0YXNldC5tYXhTbGlkZXMpO1xyXG4gICAgICBpZiAoJGZlYXR1cmVkQ29sbGVjdGlvbnNTd2lwZXIpIHtcclxuICAgICAgICBjb25zdCBzd2lwZXJDb25maWcgPSB7XHJcbiAgICAgICAgICBtb2R1bGVzOiBbTmF2aWdhdGlvbiwgUGFnaW5hdGlvbl0sXHJcbiAgICAgICAgICBkaXJlY3Rpb246IFwiaG9yaXpvbnRhbFwiLFxyXG4gICAgICAgICAgc3BlZWQ6IDEwMDAsXHJcbiAgICAgICAgICAvLyBhdXRvcGxheToge1xyXG4gICAgICAgICAgLy8gICBkZWxheTogNTAwMCxcclxuICAgICAgICAgIC8vIH0sXHJcbiAgICAgICAgICAvLyBwYWdpbmF0aW9uOiB7XHJcbiAgICAgICAgICAvLyAgIGJ1bGxldEFjdGl2ZUNsYXNzOiBcImZlYXR1cmVkLWNvbGxlY3Rpb25zX19zd2lwZXItYnVsbGV0LS1hY3RpdmVcIixcclxuICAgICAgICAgIC8vICAgYnVsbGV0Q2xhc3M6IFwiZmVhdHVyZWQtY29sbGVjdGlvbnNfX3N3aXBlci1idWxsZXRcIixcclxuICAgICAgICAgIC8vICAgYnVsbGV0RWxlbWVudDogXCJidXR0b25cIixcclxuICAgICAgICAgIC8vICAgZWw6IFwiLmZlYXR1cmVkLWNvbGxlY3Rpb25zX19zd2lwZXItcGFnaW5hdGlvblwiLFxyXG4gICAgICAgICAgLy8gICBtb2RpZmllckNsYXNzOiBcImZlYXR1cmVkLWNvbGxlY3Rpb25zX19zd2lwZXItcGFnaW5hdGlvbi0tXCIsXHJcbiAgICAgICAgICAvLyAgIHR5cGU6IFwiYnVsbGV0c1wiLFxyXG4gICAgICAgICAgLy8gICBjbGlja2FibGU6IHRydWUsXHJcbiAgICAgICAgICAvLyB9LFxyXG4gICAgICAgICAgc2xpZGVzUGVyVmlldzogMixcclxuICAgICAgICAgIHNwYWNlQmV0d2VlbjogMTIsXHJcbiAgICAgICAgICBicmVha3BvaW50czoge1xyXG4gICAgICAgICAgICA3Njg6IHtcclxuICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiAzLFxyXG4gICAgICAgICAgICAgIHNwYWNlQmV0d2VlbjogMTYsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIDEwMjQ6IHtcclxuICAgICAgICAgICAgICBzbGlkZXNQZXJWaWV3OiBtYXhTbGlkZXMsXHJcbiAgICAgICAgICAgICAgc3BhY2VCZXR3ZWVuOiAzMixcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoJGZlYXR1cmVkQ29sbGVjdGlvbnNOYXYpIHtcclxuICAgICAgICAgIGNvbnN0ICRmZWF0dXJlZENvbGxlY3Rpb25zTmF2QnV0dG9uUHJldiA9XHJcbiAgICAgICAgICAgICRmZWF0dXJlZENvbGxlY3Rpb25zTmF2LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAgICAgXCIuZmVhdHVyZWQtY29sbGVjdGlvbnNfX25hdi1idXR0b24uZmVhdHVyZWQtY29sbGVjdGlvbnNfX25hdi1idXR0b24tLXByZXZcIlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgJGZlYXR1cmVkQ29sbGVjdGlvbnNOYXZCdXR0b25OZXh0ID1cclxuICAgICAgICAgICAgJGZlYXR1cmVkQ29sbGVjdGlvbnNOYXYucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAgICAgICBcIi5mZWF0dXJlZC1jb2xsZWN0aW9uc19fbmF2LWJ1dHRvbi5mZWF0dXJlZC1jb2xsZWN0aW9uc19fbmF2LWJ1dHRvbi0tbmV4dFwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICBzd2lwZXJDb25maWcubmF2aWdhdGlvbiA9IHtcclxuICAgICAgICAgICAgZGlzYWJsZWRDbGFzczogXCJmZWF0dXJlZC1jb2xsZWN0aW9uc19fbmF2LWJ1dHRvbi0tZGlzYWJsZWRcIixcclxuICAgICAgICAgICAgbmV4dEVsOiAkZmVhdHVyZWRDb2xsZWN0aW9uc05hdkJ1dHRvbk5leHQsXHJcbiAgICAgICAgICAgIHByZXZFbDogJGZlYXR1cmVkQ29sbGVjdGlvbnNOYXZCdXR0b25QcmV2LFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3dpcGVyT2JqZWN0ID0gbmV3IFN3aXBlcihcclxuICAgICAgICAgICRmZWF0dXJlZENvbGxlY3Rpb25zU3dpcGVyLFxyXG4gICAgICAgICAgc3dpcGVyQ29uZmlnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZmVhdHVyZWRDb2xsZWN0aW9ucztcclxuIl0sIm5hbWVzIjpbIlN3aXBlciIsIk5hdmlnYXRpb24iLCJQYWdpbmF0aW9uIiwiZmVhdHVyZWRDb2xsZWN0aW9ucyIsIiRmZWF0dXJlZENvbGxlY3Rpb25zU2VjdGlvbnMiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwiJGZlYXR1cmVkQ29sbGVjdGlvbnMiLCIkZmVhdHVyZWRDb2xsZWN0aW9uc05hdiIsInF1ZXJ5U2VsZWN0b3IiLCIkZmVhdHVyZWRDb2xsZWN0aW9uc1N3aXBlciIsIm1heFNsaWRlcyIsInBhcnNlSW50IiwiZGF0YXNldCIsInN3aXBlckNvbmZpZyIsIm1vZHVsZXMiLCJkaXJlY3Rpb24iLCJzcGVlZCIsInNsaWRlc1BlclZpZXciLCJzcGFjZUJldHdlZW4iLCJicmVha3BvaW50cyIsIiRmZWF0dXJlZENvbGxlY3Rpb25zTmF2QnV0dG9uUHJldiIsIiRmZWF0dXJlZENvbGxlY3Rpb25zTmF2QnV0dG9uTmV4dCIsIm5hdmlnYXRpb24iLCJkaXNhYmxlZENsYXNzIiwibmV4dEVsIiwicHJldkVsIiwic3dpcGVyT2JqZWN0Il0sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/featured-collections/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/featured-in/main.js\":\r\n/*!********************************************************!*\\\r\n  !*** ./resources/scripts/sections/featured-in/main.js ***!\r\n  \\********************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"featuredIn\\\": () => (/* binding */ featuredIn)\\n/* harmony export */ });\\n/* harmony import */ var swiper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! swiper */ \\\"./node_modules/swiper/swiper.esm.js\\\");\\n/* harmony import */ var gsap__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! gsap */ \\\"./node_modules/gsap/index.js\\\");\\n\\n\\nvar featuredIn = function featuredIn() {\\n  var $featuredInSections = document.querySelectorAll(\\\".section-featured-in\\\");\\n  if ($featuredInSections.length > 0) {\\n    $featuredInSections.forEach(function ($featuredInSection) {\\n      // Mobile Swiper\\n      var $featuredInSectionSwiper = $featuredInSection.querySelector(\\\".mobile-swiper .swiper\\\");\\n      if ($featuredInSectionSwiper) {\\n        var swiperConfig = {\\n          direction: \\\"horizontal\\\",\\n          speed: 1000,\\n          spaceBetween: 16,\\n          slidesPerView: 2.2,\\n          centeredSlides: true,\\n          loop: true,\\n          initialSlide: 2\\n        };\\n        var swiperObject = new swiper__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"]($featuredInSectionSwiper, swiperConfig);\\n        var $mobileSlides = $featuredInSectionSwiper.querySelectorAll(\\\".swiper-slide\\\");\\n        if ($mobileSlides.length > 0) {\\n          $mobileSlides.forEach(function ($mobileSlide, index) {\\n            $mobileSlide.addEventListener(\\\"click\\\", function (e) {\\n              swiperObject.slideTo(index);\\n            });\\n          });\\n        }\\n      }\\n\\n      //Desktop Swiper\\n      var $featuredInSectionSwiperDesk = $featuredInSection.querySelector(\\\".desktop-swiper .swiper\\\");\\n      if ($featuredInSectionSwiperDesk) {\\n        var _swiperConfig = {\\n          direction: \\\"horizontal\\\",\\n          speed: 1000,\\n          spaceBetween: 32,\\n          slidesPerView: 5\\n        };\\n        var _swiperObject = new swiper__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"]($featuredInSectionSwiperDesk, _swiperConfig);\\n      }\\n\\n      //Bind Logo and Swiper Slide toggling\\n      var $logoQuotes = $featuredInSection.querySelectorAll(\\\".logo-quote\\\");\\n      if ($logoQuotes.length > 0) {\\n        var $allSwiperSlides = $featuredInSection.querySelectorAll(\\\".swiper-slide\\\");\\n        var isAnimating = false; // Prevent rapid clicks from stacking\\n\\n        $logoQuotes.forEach(function ($logoQuote) {\\n          if ($logoQuote.classList.contains(\\\"active\\\")) {\\n            $logoQuote.style.display = \\\"flex\\\";\\n          }\\n        });\\n        if ($allSwiperSlides.length > 0) {\\n          $allSwiperSlides.forEach(function ($swiperSlide) {\\n            $swiperSlide.addEventListener(\\\"click\\\", function (e) {\\n              if (!$swiperSlide.classList.contains(\\\"active\\\") && !isAnimating) {\\n                isAnimating = true;\\n\\n                //find the relevant logos and toggle\\n                var $previouslyActive = \\\"\\\";\\n                var $newActive = \\\"\\\";\\n                $logoQuotes.forEach(function ($logoQuote) {\\n                  if ($logoQuote.classList.contains(\\\"active\\\")) {\\n                    $previouslyActive = $logoQuote;\\n                  }\\n                  if ($logoQuote.dataset.logoQuote == $swiperSlide.dataset.logoNumber) {\\n                    $newActive = $logoQuote;\\n                  }\\n                });\\n\\n                // Kill any existing animations on all logo quotes\\n                gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.killTweensOf($logoQuotes);\\n\\n                // Update slide active states\\n                $allSwiperSlides.forEach(function ($swprSlde) {\\n                  $swprSlde.classList.remove(\\\"active\\\");\\n                });\\n                $swiperSlide.classList.add(\\\"active\\\");\\n\\n                // Animate out the previous, then animate in the new\\n                if ($previouslyActive) {\\n                  gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.to($previouslyActive, {\\n                    opacity: 0,\\n                    duration: 0.3,\\n                    onComplete: function onComplete() {\\n                      $previouslyActive.classList.remove(\\\"active\\\");\\n                      gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.set($previouslyActive, {\\n                        display: 'none'\\n                      });\\n                      $previouslyActive.style.opacity = '1';\\n\\n                      // Animate in the new one after previous fades out\\n                      if ($newActive) {\\n                        $newActive.classList.add(\\\"active\\\");\\n                        gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.set($newActive, {\\n                          display: 'flex'\\n                        });\\n                        $newActive.style.opacity = '0';\\n                        gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.to($newActive, {\\n                          opacity: 1,\\n                          duration: 0.2,\\n                          onComplete: function onComplete() {\\n                            isAnimating = false;\\n                          }\\n                        });\\n                      } else {\\n                        isAnimating = false;\\n                      }\\n                    }\\n                  });\\n                } else if ($newActive) {\\n                  // If there's no previous active, just fade in the new one\\n                  $newActive.classList.add(\\\"active\\\");\\n                  gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.set($newActive, {\\n                    display: 'flex'\\n                  });\\n                  $newActive.style.opacity = '0';\\n                  gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.to($newActive, {\\n                    opacity: 1,\\n                    duration: 0.2,\\n                    onComplete: function onComplete() {\\n                      isAnimating = false;\\n                    }\\n                  });\\n                } else {\\n                  isAnimating = false;\\n                }\\n              }\\n            });\\n          });\\n        }\\n      }\\n    });\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (featuredIn);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9mZWF0dXJlZC1pbi9tYWluLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBNEI7QUFDQTtBQUVyQixJQUFNRSxVQUFVLEdBQUcsU0FBYkEsVUFBVSxHQUFTO0VBRTVCLElBQU1DLG1CQUFtQixHQUFHQyxRQUFRLENBQUNDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDO0VBQzdFLElBQUdGLG1CQUFtQixDQUFDRyxNQUFNLEdBQUcsQ0FBQyxFQUFDO0lBQzlCSCxtQkFBbUIsQ0FBQ0ksT0FBTyxDQUFDLFVBQUNDLGtCQUFrQixFQUFLO01BRWhEO01BQ0EsSUFBTUMsd0JBQXdCLEdBQUdELGtCQUFrQixDQUFDRSxhQUFhLENBQUMsd0JBQXdCLENBQUM7TUFDM0YsSUFBR0Qsd0JBQXdCLEVBQUM7UUFFeEIsSUFBTUUsWUFBWSxHQUFHO1VBQ2pCQyxTQUFTLEVBQUUsWUFBWTtVQUN2QkMsS0FBSyxFQUFFLElBQUk7VUFDWEMsWUFBWSxFQUFFLEVBQUU7VUFDaEJDLGFBQWEsRUFBRSxHQUFHO1VBQ2xCQyxjQUFjLEVBQUUsSUFBSTtVQUNwQkMsSUFBSSxFQUFDLElBQUk7VUFDVEMsWUFBWSxFQUFDO1FBQ2pCLENBQUM7UUFFRCxJQUFNQyxZQUFZLEdBQUcsSUFBSW5CLDhDQUFNLENBQUNTLHdCQUF3QixFQUFFRSxZQUFZLENBQUM7UUFFdkUsSUFBTVMsYUFBYSxHQUFHWCx3QkFBd0IsQ0FBQ0osZ0JBQWdCLENBQUMsZUFBZSxDQUFDO1FBQ2hGLElBQUdlLGFBQWEsQ0FBQ2QsTUFBTSxHQUFHLENBQUMsRUFBQztVQUV4QmMsYUFBYSxDQUFDYixPQUFPLENBQUMsVUFBQ2MsWUFBWSxFQUFFQyxLQUFLLEVBQUs7WUFDM0NELFlBQVksQ0FBQ0UsZ0JBQWdCLENBQUMsT0FBTyxFQUFDLFVBQUNDLENBQUMsRUFBSztjQUN6Q0wsWUFBWSxDQUFDTSxPQUFPLENBQUNILEtBQUssQ0FBQztZQUMvQixDQUFDLENBQUM7VUFDTixD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cGlmeS10aGVtZS8uL3Jlc291cmNlcy9zY3JpcHRzL3NlY3Rpb25zL2ZlYXR1cmVkLWluL21haW4uanM/ZGZhNCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU3dpcGVyIGZyb20gXCJzd2lwZXJcIjtcclxuaW1wb3J0IHsgZ3NhcCB9IGZyb20gXCJnc2FwXCI7XHJcblxyXG5leHBvcnQgY29uc3QgZmVhdHVyZWRJbiA9ICgpID0+IHtcclxuXHJcbiAgICBjb25zdCAkZmVhdHVyZWRJblNlY3Rpb25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5zZWN0aW9uLWZlYXR1cmVkLWluXCIpO1xyXG4gICAgaWYoJGZlYXR1cmVkSW5TZWN0aW9ucy5sZW5ndGggPiAwKXtcclxuICAgICAgICAkZmVhdHVyZWRJblNlY3Rpb25zLmZvckVhY2goKCRmZWF0dXJlZEluU2VjdGlvbikgPT4ge1xyXG5cclxuICAgICAgICAgICAgLy8gTW9iaWxlIFN3aXBlclxyXG4gICAgICAgICAgICBjb25zdCAkZmVhdHVyZWRJblNlY3Rpb25Td2lwZXIgPSAkZmVhdHVyZWRJblNlY3Rpb24ucXVlcnlTZWxlY3RvcihcIi5tb2JpbGUtc3dpcGVyIC5zd2lwZXJcIik7ICAgIFxyXG4gICAgICAgICAgICBpZigkZmVhdHVyZWRJblNlY3Rpb25Td2lwZXIpe1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzd2lwZXJDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiBcImhvcml6b250YWxcIixcclxuICAgICAgICAgICAgICAgICAgICBzcGVlZDogMTAwMCxcclxuICAgICAgICAgICAgICAgICAgICBzcGFjZUJldHdlZW46IDE2LFxyXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDIuMixcclxuICAgICAgICAgICAgICAgICAgICBjZW50ZXJlZFNsaWRlczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBsb29wOnRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFNsaWRlOjJcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzd2lwZXJPYmplY3QgPSBuZXcgU3dpcGVyKCRmZWF0dXJlZEluU2VjdGlvblN3aXBlciwgc3dpcGVyQ29uZmlnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCAkbW9iaWxlU2xpZGVzID0gJGZlYXR1cmVkSW5TZWN0aW9uU3dpcGVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuc3dpcGVyLXNsaWRlXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYoJG1vYmlsZVNsaWRlcy5sZW5ndGggPiAwKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJG1vYmlsZVNsaWRlcy5mb3JFYWNoKCgkbW9iaWxlU2xpZGUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRtb2JpbGVTbGlkZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpcGVyT2JqZWN0LnNsaWRlVG8oaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vRGVza3RvcCBTd2lwZXJcclxuICAgICAgICAgICAgY29uc3QgJGZlYXR1cmVkSW5TZWN0aW9uU3dpcGVyRGVzayA9ICRmZWF0dXJlZEluU2VjdGlvbi5xdWVyeVNlbGVjdG9yKFwiLmRlc2t0b3Atc3dpcGVyIC5zd2lwZXJcIik7ICAgIFxyXG4gICAgICAgICAgICBpZigkZmVhdHVyZWRJblNlY3Rpb25Td2lwZXJEZXNrKXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN3aXBlckNvbmZpZyA9IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb246IFwiaG9yaXpvbnRhbFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHNwZWVkOiAxMDAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHNwYWNlQmV0d2VlbjogMzIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogNSwgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBzd2lwZXJPYmplY3QgPSBuZXcgU3dpcGVyKCRmZWF0dXJlZEluU2VjdGlvblN3aXBlckRlc2ssIHN3aXBlckNvbmZpZyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvL0JpbmQgTG9nbyBhbmQgU3dpcGVyIFNsaWRlIHRvZ2dsaW5nXHJcbiAgICAgICAgICAgIGNvbnN0ICRsb2dvUXVvdGVzID0gJGZlYXR1cmVkSW5TZWN0aW9uLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubG9nby1xdW90ZVwiKTtcclxuICAgICAgICAgICAgaWYoJGxvZ29RdW90ZXMubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgJGFsbFN3aXBlclNsaWRlcyA9ICRmZWF0dXJlZEluU2VjdGlvbi5xdWVyeVNlbGVjdG9yQWxsKFwiLnN3aXBlci1zbGlkZVwiKTtcclxuICAgICAgICAgICAgICAgIGxldCBpc0FuaW1hdGluZyA9IGZhbHNlOyAvLyBQcmV2ZW50IHJhcGlkIGNsaWNrcyBmcm9tIHN0YWNraW5nXHJcblxyXG4gICAgICAgICAgICAgICAgJGxvZ29RdW90ZXMuZm9yRWFjaCgoJGxvZ29RdW90ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCRsb2dvUXVvdGUuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJGxvZ29RdW90ZS5zdHlsZS5kaXNwbGF5ID0gXCJmbGV4XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoJGFsbFN3aXBlclNsaWRlcy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgICAgICAkYWxsU3dpcGVyU2xpZGVzLmZvckVhY2goKCRzd2lwZXJTbGlkZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHN3aXBlclNsaWRlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLChlKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoISRzd2lwZXJTbGlkZS5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikgJiYgIWlzQW5pbWF0aW5nKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FuaW1hdGluZyA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vZmluZCB0aGUgcmVsZXZhbnQgbG9nb3MgYW5kIHRvZ2dsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCAkcHJldmlvdXNseUFjdGl2ZSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0ICRuZXdBY3RpdmUgPSBcIlwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbG9nb1F1b3Rlcy5mb3JFYWNoKCgkbG9nb1F1b3RlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRsb2dvUXVvdGUuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwcmV2aW91c2x5QWN0aXZlID0gJGxvZ29RdW90ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGxvZ29RdW90ZS5kYXRhc2V0LmxvZ29RdW90ZSA9PSAkc3dpcGVyU2xpZGUuZGF0YXNldC5sb2dvTnVtYmVyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXdBY3RpdmUgPSAkbG9nb1F1b3RlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEtpbGwgYW55IGV4aXN0aW5nIGFuaW1hdGlvbnMgb24gYWxsIGxvZ28gcXVvdGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NhcC5raWxsVHdlZW5zT2YoJGxvZ29RdW90ZXMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgc2xpZGUgYWN0aXZlIHN0YXRlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbGxTd2lwZXJTbGlkZXMuZm9yRWFjaCgoJHN3cHJTbGRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzd3ByU2xkZS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzd2lwZXJTbGlkZS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbmltYXRlIG91dCB0aGUgcHJldmlvdXMsIHRoZW4gYW5pbWF0ZSBpbiB0aGUgbmV3XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHByZXZpb3VzbHlBY3RpdmUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc2FwLnRvKCRwcmV2aW91c2x5QWN0aXZlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDAuMyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHJldmlvdXNseUFjdGl2ZS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzYXAuc2V0KCRwcmV2aW91c2x5QWN0aXZlLCB7IGRpc3BsYXk6ICdub25lJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHJldmlvdXNseUFjdGl2ZS5zdHlsZS5vcGFjaXR5ID0gJzEnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFuaW1hdGUgaW4gdGhlIG5ldyBvbmUgYWZ0ZXIgcHJldmlvdXMgZmFkZXMgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJG5ld0FjdGl2ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXdBY3RpdmUuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NhcC5zZXQoJG5ld0FjdGl2ZSwgeyBkaXNwbGF5OiAnZmxleCcgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXdBY3RpdmUuc3R5bGUub3BhY2l0eSA9ICcwJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NhcC50bygkbmV3QWN0aXZlLCB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMC4yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5pbWF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5pbWF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYoJG5ld0FjdGl2ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIHByZXZpb3VzIGFjdGl2ZSwganVzdCBmYWRlIGluIHRoZSBuZXcgb25lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXdBY3RpdmUuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NhcC5zZXQoJG5ld0FjdGl2ZSwgeyBkaXNwbGF5OiAnZmxleCcgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXdBY3RpdmUuc3R5bGUub3BhY2l0eSA9ICcwJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NhcC50bygkbmV3QWN0aXZlLCB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMC4yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5pbWF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQW5pbWF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmZWF0dXJlZEluOyJdLCJuYW1lcyI6WyJTd2lwZXIiLCJnc2FwIiwiZmVhdHVyZWRJbiIsIiRmZWF0dXJlZEluU2VjdGlvbnMiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJmb3JFYWNoIiwiJGZlYXR1cmVkSW5TZWN0aW9uIiwiJGZlYXR1cmVkSW5TZWN0aW9uU3dpcGVyIiwicXVlcnlTZWxlY3RvciIsInN3aXBlckNvbmZpZyIsImRpcmVjdGlvbiIsInNwZWVkIiwic3BhY2VCZXR3ZWVuIiwic2xpZGVzUGVyVmlldyIsImNlbnRlcmVkU2xpZGVzIiwibG9vcCIsImluaXRpYWxTbGlkZSIsInN3aXBlck9iamVjdCIsIiRtb2JpbGVTbGlkZXMiLCIkbW9iaWxlU2xpZGUiLCJpbmRleCIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwic2xpZGVUbyIsIiRmZWF0dXJlZEluU2VjdGlvblN3aXBlckRlc2siLCIkbG9nb1F1b3RlcyIsIiRhbGxTd2lwZXJTbGlkZXMiLCJpc0FuaW1hdGluZyIsIiRsb2dvUXVvdGUiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsInN0eWxlIiwiZGlzcGxheSIsIiRzd2lwZXJTbGlkZSIsIiRwcmV2aW91c2x5QWN0aXZlIiwiJG5ld0FjdGl2ZSIsImRhdGFzZXQiLCJsb2dvUXVvdGUiLCJsb2dvTnVtYmVyIiwia2lsbFR3ZWVuc09mIiwiJHN3cHJTbGRlIiwicmVtb3ZlIiwiYWRkIiwidG8iLCJvcGFjaXR5IiwiZHVyYXRpb24iLCJvbkNvbXBsZXRlIiwic2V0Il0sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/featured-in/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/featured-products/main.js\":\r\n/*!**************************************************************!*\\\r\n  !*** ./resources/scripts/sections/featured-products/main.js ***!\r\n  \\**************************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"featuredProducts\\\": () => (/* binding */ featuredProducts)\\n/* harmony export */ });\\n/* harmony import */ var swiper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! swiper */ \\\"./node_modules/swiper/swiper.esm.js\\\");\\n// Import Swiper and modules\\n\\nvar featuredProducts = function featuredProducts() {\\n  var $featuredProductsSections = document.querySelectorAll(\\\"section.featured-products\\\");\\n  if ($featuredProductsSections) {\\n    $featuredProductsSections.forEach(function ($featuredProducts) {\\n      var $featuredProductsNav = $featuredProducts.querySelector(\\\".featured-products__nav\\\");\\n      var $featuredProductsSwiper = $featuredProducts.querySelector(\\\".featured-products__swiper-container .featured-products__swiper.swiper\\\");\\n      var maxSlides = parseInt($featuredProductsSwiper.dataset.maxSlides);\\n      if ($featuredProductsSwiper) {\\n        var swiperConfig = {\\n          modules: [swiper__WEBPACK_IMPORTED_MODULE_0__.Navigation, swiper__WEBPACK_IMPORTED_MODULE_0__.Pagination],\\n          direction: \\\"horizontal\\\",\\n          speed: 1000,\\n          slidesPerView: 1,\\n          slidesPerGroup: 1,\\n          spaceBetween: 12,\\n          breakpoints: {\\n            768: {\\n              slidesPerView: 3,\\n              slidesPerGroup: 1,\\n              slidesPerGroupAuto: true,\\n              spaceBetween: 16\\n            },\\n            1024: {\\n              slidesPerView: maxSlides,\\n              slidesPerGroup: 1,\\n              slidesPerGroupAuto: true,\\n              spaceBetween: 32\\n            }\\n          }\\n        };\\n        if ($featuredProductsNav) {\\n          var $featuredProductsNavButtonPrev = $featuredProductsNav.querySelector(\\\".featured-products__nav-button.featured-products__nav-button--prev\\\");\\n          var $featuredProductsNavButtonNext = $featuredProductsNav.querySelector(\\\".featured-products__nav-button.featured-products__nav-button--next\\\");\\n          swiperConfig.navigation = {\\n            disabledClass: \\\"featured-products__nav-button--disabled\\\",\\n            nextEl: $featuredProductsNavButtonNext,\\n            prevEl: $featuredProductsNavButtonPrev\\n          };\\n        }\\n        var swiperObject = new swiper__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"]($featuredProductsSwiper, swiperConfig);\\n      }\\n    });\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (featuredProducts);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9mZWF0dXJlZC1wcm9kdWN0cy9tYWluLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ3dEO0FBRWpELElBQU1HLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0IsR0FBUztFQUNwQyxJQUFNQyx5QkFBeUIsR0FBR0MsUUFBUSxDQUFDQyxnQkFBZ0IsQ0FDekQsMkJBQTJCLENBQzVCO0VBQ0QsSUFBSUYseUJBQXlCLEVBQUU7SUFDN0JBLHlCQUF5QixDQUFDRyxPQUFPLENBQUMsVUFBQ0MsaUJBQWlCLEVBQUs7TUFDdkQsSUFBTUMsb0JBQW9CLEdBQUdELGlCQUFpQixDQUFDRSxhQUFhLENBQzFELHlCQUF5QixDQUMxQjtNQUVELElBQU1DLHVCQUF1QixHQUFHSCxpQkFBaUIsQ0FBQ0UsYUFBYSxDQUM3RCx3RUFBd0UsQ0FDekU7TUFDRCxJQUFNRSxTQUFTLEdBQUdDLFFBQVEsQ0FBQ0YsdUJBQXVCLENBQUNHLE9BQU8sQ0FBQ0YsU0FBUyxDQUFDO01BQ3JFLElBQUlELHVCQUF1QixFQUFFO1FBQzNCLElBQU1JLFlBQVksR0FBRztVQUNuQkMsT0FBTyxFQUFFLENBQUNmLDhDQUFVLEVBQUVDLDhDQUFVLENBQUM7VUFDakNlLFNBQVMsRUFBRSxZQUFZO1VBQ3ZCQyxLQUFLLEVBQUUsSUFBSTtVQUNYQyxhQUFhLEVBQUUsQ0FBQztVQUNoQkMsY0FBYyxFQUFFLENBQUM7VUFDakJDLFlBQVksRUFBRSxFQUFFO1VBQ2hCQyxXQUFXLEVBQUU7WUFDWCxHQUFHLEVBQUU7Y0FDSEgsYUFBYSxFQUFFLENBQUM7Y0FDaEJDLGNBQWMsRUFBRSxDQUFDO2NBQ2pCRyxrQkFBa0IsRUFBRSxJQUFJO2NBQ3hCRixZQUFZLEVBQUU7WUFDaEIsQ0FBQztZQUNELElBQUksRUFBRTtjQUNKRixhQUFhLEVBQUVQLFNBQVM7Y0FDeEJRLGNBQWMsRUFBRSxDQUFDO2NBQ2pCRyxrQkFBa0IsRUFBRSxJQUFJO2NBQ3hCRixZQUFZLEVBQUU7WUFDaEI7VUFDRjtRQUNGLENBQUM7UUFDRCxJQUFJWixvQkFBb0IsRUFBRTtVQUN4QixJQUFNZSw4QkFBOEIsR0FDbENmLG9CQUFvQixDQUFDQyxhQUFhLENBQ2hDLG9FQUFvRSxDQUNyRTtVQUNILElBQU1lLDhCQUE4QixHQUNsQ2hCLG9CQUFvQixDQUFDQyxhQUFhLENBQ2hDLG9FQUFvRSxDQUNyRTtVQUNISyxZQUFZLENBQUNXLFVBQVUsR0FBRztZQUN4QkMsYUFBYSxFQUFFLHlDQUF5QztZQUN4REMsTUFBTSxFQUFFSCw4QkFBOEI7WUFDdENJLE1BQU0sRUFBRUw7VUFDVixDQUFDO1FBQ0g7UUFDQSxJQUFNTSxZQUFZLEdBQUcsSUFBSTlCLDhDQUFNLENBQUNXLHVCQUF1QixFQUFFSSxZQUFZLENBQUM7TUFDeEU7SUFDRixDQUFDLENBQUM7RUFDSjtBQUNGLENBQUM7QUFFRCxpRUFBZVosZ0JBQWdCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9mZWF0dXJlZC1wcm9kdWN0cy9tYWluLmpzPzIyMWYiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0IFN3aXBlciBhbmQgbW9kdWxlc1xyXG5pbXBvcnQgU3dpcGVyLCB7IE5hdmlnYXRpb24sIFBhZ2luYXRpb24gfSBmcm9tIFwic3dpcGVyXCI7XHJcblxyXG5leHBvcnQgY29uc3QgZmVhdHVyZWRQcm9kdWN0cyA9ICgpID0+IHtcclxuICBjb25zdCAkZmVhdHVyZWRQcm9kdWN0c1NlY3Rpb25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgIFwic2VjdGlvbi5mZWF0dXJlZC1wcm9kdWN0c1wiXHJcbiAgKTtcclxuICBpZiAoJGZlYXR1cmVkUHJvZHVjdHNTZWN0aW9ucykge1xyXG4gICAgJGZlYXR1cmVkUHJvZHVjdHNTZWN0aW9ucy5mb3JFYWNoKCgkZmVhdHVyZWRQcm9kdWN0cykgPT4ge1xyXG4gICAgICBjb25zdCAkZmVhdHVyZWRQcm9kdWN0c05hdiA9ICRmZWF0dXJlZFByb2R1Y3RzLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgXCIuZmVhdHVyZWQtcHJvZHVjdHNfX25hdlwiXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCAkZmVhdHVyZWRQcm9kdWN0c1N3aXBlciA9ICRmZWF0dXJlZFByb2R1Y3RzLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgXCIuZmVhdHVyZWQtcHJvZHVjdHNfX3N3aXBlci1jb250YWluZXIgLmZlYXR1cmVkLXByb2R1Y3RzX19zd2lwZXIuc3dpcGVyXCJcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgbWF4U2xpZGVzID0gcGFyc2VJbnQoJGZlYXR1cmVkUHJvZHVjdHNTd2lwZXIuZGF0YXNldC5tYXhTbGlkZXMpO1xyXG4gICAgICBpZiAoJGZlYXR1cmVkUHJvZHVjdHNTd2lwZXIpIHtcclxuICAgICAgICBjb25zdCBzd2lwZXJDb25maWcgPSB7XHJcbiAgICAgICAgICBtb2R1bGVzOiBbTmF2aWdhdGlvbiwgUGFnaW5hdGlvbl0sXHJcbiAgICAgICAgICBkaXJlY3Rpb246IFwiaG9yaXpvbnRhbFwiLFxyXG4gICAgICAgICAgc3BlZWQ6IDEwMDAsXHJcbiAgICAgICAgICBzbGlkZXNQZXJWaWV3OiAxLFxyXG4gICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IDEsXHJcbiAgICAgICAgICBzcGFjZUJldHdlZW46IDEyLFxyXG4gICAgICAgICAgYnJlYWtwb2ludHM6IHtcclxuICAgICAgICAgICAgNzY4OiB7XHJcbiAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMyxcclxuICAgICAgICAgICAgICBzbGlkZXNQZXJHcm91cDogMSxcclxuICAgICAgICAgICAgICBzbGlkZXNQZXJHcm91cEF1dG86IHRydWUsXHJcbiAgICAgICAgICAgICAgc3BhY2VCZXR3ZWVuOiAxNixcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgMTAyNDoge1xyXG4gICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IG1heFNsaWRlcyxcclxuICAgICAgICAgICAgICBzbGlkZXNQZXJHcm91cDogMSxcclxuICAgICAgICAgICAgICBzbGlkZXNQZXJHcm91cEF1dG86IHRydWUsXHJcbiAgICAgICAgICAgICAgc3BhY2VCZXR3ZWVuOiAzMixcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoJGZlYXR1cmVkUHJvZHVjdHNOYXYpIHtcclxuICAgICAgICAgIGNvbnN0ICRmZWF0dXJlZFByb2R1Y3RzTmF2QnV0dG9uUHJldiA9XHJcbiAgICAgICAgICAgICRmZWF0dXJlZFByb2R1Y3RzTmF2LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAgICAgXCIuZmVhdHVyZWQtcHJvZHVjdHNfX25hdi1idXR0b24uZmVhdHVyZWQtcHJvZHVjdHNfX25hdi1idXR0b24tLXByZXZcIlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgJGZlYXR1cmVkUHJvZHVjdHNOYXZCdXR0b25OZXh0ID1cclxuICAgICAgICAgICAgJGZlYXR1cmVkUHJvZHVjdHNOYXYucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAgICAgICBcIi5mZWF0dXJlZC1wcm9kdWN0c19fbmF2LWJ1dHRvbi5mZWF0dXJlZC1wcm9kdWN0c19fbmF2LWJ1dHRvbi0tbmV4dFwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICBzd2lwZXJDb25maWcubmF2aWdhdGlvbiA9IHtcclxuICAgICAgICAgICAgZGlzYWJsZWRDbGFzczogXCJmZWF0dXJlZC1wcm9kdWN0c19fbmF2LWJ1dHRvbi0tZGlzYWJsZWRcIixcclxuICAgICAgICAgICAgbmV4dEVsOiAkZmVhdHVyZWRQcm9kdWN0c05hdkJ1dHRvbk5leHQsXHJcbiAgICAgICAgICAgIHByZXZFbDogJGZlYXR1cmVkUHJvZHVjdHNOYXZCdXR0b25QcmV2LFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3dpcGVyT2JqZWN0ID0gbmV3IFN3aXBlcigkZmVhdHVyZWRQcm9kdWN0c1N3aXBlciwgc3dpcGVyQ29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZmVhdHVyZWRQcm9kdWN0cztcclxuIl0sIm5hbWVzIjpbIlN3aXBlciIsIk5hdmlnYXRpb24iLCJQYWdpbmF0aW9uIiwiZmVhdHVyZWRQcm9kdWN0cyIsIiRmZWF0dXJlZFByb2R1Y3RzU2VjdGlvbnMiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwiJGZlYXR1cmVkUHJvZHVjdHMiLCIkZmVhdHVyZWRQcm9kdWN0c05hdiIsInF1ZXJ5U2VsZWN0b3IiLCIkZmVhdHVyZWRQcm9kdWN0c1N3aXBlciIsIm1heFNsaWRlcyIsInBhcnNlSW50IiwiZGF0YXNldCIsInN3aXBlckNvbmZpZyIsIm1vZHVsZXMiLCJkaXJlY3Rpb24iLCJzcGVlZCIsInNsaWRlc1BlclZpZXciLCJzbGlkZXNQZXJHcm91cCIsInNwYWNlQmV0d2VlbiIsImJyZWFrcG9pbnRzIiwic2xpZGVzUGVyR3JvdXBBdXRvIiwiJGZlYXR1cmVkUHJvZHVjdHNOYXZCdXR0b25QcmV2IiwiJGZlYXR1cmVkUHJvZHVjdHNOYXZCdXR0b25OZXh0IiwibmF2aWdhdGlvbiIsImRpc2FibGVkQ2xhc3MiLCJuZXh0RWwiLCJwcmV2RWwiLCJzd2lwZXJPYmplY3QiXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/featured-products/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/featured-reviews/main.js\":\r\n/*!*************************************************************!*\\\r\n  !*** ./resources/scripts/sections/featured-reviews/main.js ***!\r\n  \\*************************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"featuredReviews\\\": () => (/* binding */ featuredReviews)\\n/* harmony export */ });\\n/* harmony import */ var swiper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! swiper */ \\\"./node_modules/swiper/swiper.esm.js\\\");\\n// Import Swiper and modules\\n\\nvar featuredReviews = function featuredReviews() {\\n  var $featuredReviewsSections = document.querySelectorAll(\\\".section-featured-reviews\\\");\\n  if ($featuredReviewsSections) {\\n    $featuredReviewsSections.forEach(function ($featuredReviewsSection) {\\n      var $featuredReviewsNav = $featuredReviewsSection.querySelector(\\\".swiper-navigation-container\\\");\\n      var $navNext = $featuredReviewsNav === null || $featuredReviewsNav === void 0 ? void 0 : $featuredReviewsNav.querySelector(\\\".navigation-next\\\");\\n      var $navPrev = $featuredReviewsNav === null || $featuredReviewsNav === void 0 ? void 0 : $featuredReviewsNav.querySelector(\\\".navigation-previous\\\");\\n      var $featuredReviewsSwiper = $featuredReviewsSection.querySelector(\\\".featured-reviews__swiper-container .swiper\\\");\\n      if ($featuredReviewsSwiper) {\\n        var swiperConfig = {\\n          direction: \\\"horizontal\\\",\\n          speed: 1000,\\n          slidesPerView: 1.2,\\n          spaceBetween: 20,\\n          breakpoints: {\\n            768: {\\n              slidesPerView: 2.2,\\n              spaceBetween: 32\\n            },\\n            1024: {\\n              slidesPerView: 3,\\n              spaceBetween: 32\\n            }\\n          }\\n        };\\n        if ($navNext && $navPrev) {\\n          swiperConfig.navigation = {\\n            disabledClass: \\\"featured-reviews__nav-button--disabled\\\",\\n            nextEl: $navNext,\\n            prevEl: $navPrev\\n          };\\n        }\\n        var swiperObject = new swiper__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"]($featuredReviewsSwiper, swiperConfig);\\n      }\\n    });\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (featuredReviews);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9mZWF0dXJlZC1yZXZpZXdzL21haW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDd0Q7QUFFakQsSUFBTUcsZUFBZSxHQUFHLFNBQWxCQSxlQUFlLEdBQVM7RUFFbkMsSUFBTUMsd0JBQXdCLEdBQUdDLFFBQVEsQ0FBQ0MsZ0JBQWdCLENBQUMsMkJBQTJCLENBQUM7RUFDdkYsSUFBR0Ysd0JBQXdCLEVBQUM7SUFFMUJBLHdCQUF3QixDQUFDRyxPQUFPLENBQUMsVUFBQ0MsdUJBQXVCLEVBQUs7TUFFNUQsSUFBTUMsbUJBQW1CLEdBQUdELHVCQUF1QixDQUFDRSxhQUFhLENBQUMsOEJBQThCLENBQUM7TUFDakcsSUFBTUMsUUFBUSxHQUFHRixtQkFBbUIsYUFBbkJBLG1CQUFtQix1QkFBbkJBLG1CQUFtQixDQUFFQyxhQUFhLENBQUMsa0JBQWtCLENBQUM7TUFDdkUsSUFBTUUsUUFBUSxHQUFHSCxtQkFBbUIsYUFBbkJBLG1CQUFtQix1QkFBbkJBLG1CQUFtQixDQUFFQyxhQUFhLENBQUMsc0JBQXNCLENBQUM7TUFDM0UsSUFBTUcsc0JBQXNCLEdBQUdMLHVCQUF1QixDQUFDRSxhQUFhLENBQUMsNkNBQTZDLENBQUM7TUFFbkgsSUFBR0csc0JBQXNCLEVBQUM7UUFFeEIsSUFBSUMsWUFBWSxHQUFHO1VBQ2pCQyxTQUFTLEVBQUUsWUFBWTtVQUN2QkMsS0FBSyxFQUFFLElBQUk7VUFFWEMsYUFBYSxFQUFFLEdBQUc7VUFDbEJDLFlBQVksRUFBRSxFQUFFO1VBQ2hCQyxXQUFXLEVBQUU7WUFDWCxHQUFHLEVBQUU7Y0FDSEYsYUFBYSxFQUFFLEdBQUc7Y0FDbEJDLFlBQVksRUFBRTtZQUNoQixDQUFDO1lBQ0QsSUFBSSxFQUFFO2NBQ0pELGFBQWEsRUFBRSxDQUFDO2NBQ2hCQyxZQUFZLEVBQUU7WUFDaEI7VUFDRjtRQUNGLENBQUM7UUFFRCxJQUFHUCxRQUFRLElBQUlDLFFBQVEsRUFBQztVQUN0QkUsWUFBWSxDQUFDTSxVQUFVLEdBQUc7WUFDeEJDLGFBQWEsRUFBRSx3Q0FBd0M7WUFDdkRDLE1BQU0sRUFBRVgsUUFBUTtZQUNoQlksTUFBTSxFQUFFWDtVQUNWLENBQUM7UUFDSDtRQUVBLElBQU1ZLFlBQVksR0FBRyxJQUFJeEIsOENBQU0sQ0FBQ2Esc0JBQXNCLEVBQUVDLFlBQVksQ0FBQztNQUN2RTtJQUNGLENBQUMsQ0FBQztFQUNKO0FBQ0YsQ0FBQztBQUVELGlFQUFlWCxlQUFlIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9mZWF0dXJlZC1yZXZpZXdzL21haW4uanM/YWZmMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJbXBvcnQgU3dpcGVyIGFuZCBtb2R1bGVzXHJcbmltcG9ydCBTd2lwZXIsIHsgTmF2aWdhdGlvbiwgUGFnaW5hdGlvbiB9IGZyb20gXCJzd2lwZXJcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBmZWF0dXJlZFJldmlld3MgPSAoKSA9PiB7XHJcblxyXG4gIGNvbnN0ICRmZWF0dXJlZFJldmlld3NTZWN0aW9ucyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuc2VjdGlvbi1mZWF0dXJlZC1yZXZpZXdzXCIpOyBcclxuICBpZigkZmVhdHVyZWRSZXZpZXdzU2VjdGlvbnMpe1xyXG5cclxuICAgICRmZWF0dXJlZFJldmlld3NTZWN0aW9ucy5mb3JFYWNoKCgkZmVhdHVyZWRSZXZpZXdzU2VjdGlvbikgPT4ge1xyXG5cclxuICAgICAgY29uc3QgJGZlYXR1cmVkUmV2aWV3c05hdiA9ICRmZWF0dXJlZFJldmlld3NTZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoXCIuc3dpcGVyLW5hdmlnYXRpb24tY29udGFpbmVyXCIpO1xyXG4gICAgICBjb25zdCAkbmF2TmV4dCA9ICRmZWF0dXJlZFJldmlld3NOYXY/LnF1ZXJ5U2VsZWN0b3IoXCIubmF2aWdhdGlvbi1uZXh0XCIpO1xyXG4gICAgICBjb25zdCAkbmF2UHJldiA9ICRmZWF0dXJlZFJldmlld3NOYXY/LnF1ZXJ5U2VsZWN0b3IoXCIubmF2aWdhdGlvbi1wcmV2aW91c1wiKTtcclxuICAgICAgY29uc3QgJGZlYXR1cmVkUmV2aWV3c1N3aXBlciA9ICRmZWF0dXJlZFJldmlld3NTZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoXCIuZmVhdHVyZWQtcmV2aWV3c19fc3dpcGVyLWNvbnRhaW5lciAuc3dpcGVyXCIpO1xyXG5cclxuICAgICAgaWYoJGZlYXR1cmVkUmV2aWV3c1N3aXBlcil7XHJcblxyXG4gICAgICAgIGxldCBzd2lwZXJDb25maWcgPSB7XHJcbiAgICAgICAgICBkaXJlY3Rpb246IFwiaG9yaXpvbnRhbFwiLFxyXG4gICAgICAgICAgc3BlZWQ6IDEwMDAsXHJcblxyXG4gICAgICAgICAgc2xpZGVzUGVyVmlldzogMS4yLFxyXG4gICAgICAgICAgc3BhY2VCZXR3ZWVuOiAyMCxcclxuICAgICAgICAgIGJyZWFrcG9pbnRzOiB7XHJcbiAgICAgICAgICAgIDc2ODoge1xyXG4gICAgICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDIuMixcclxuICAgICAgICAgICAgICBzcGFjZUJldHdlZW46IDMyLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAxMDI0OiB7XHJcbiAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMyxcclxuICAgICAgICAgICAgICBzcGFjZUJldHdlZW46IDMyLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZigkbmF2TmV4dCAmJiAkbmF2UHJldil7XHJcbiAgICAgICAgICBzd2lwZXJDb25maWcubmF2aWdhdGlvbiA9IHtcclxuICAgICAgICAgICAgZGlzYWJsZWRDbGFzczogXCJmZWF0dXJlZC1yZXZpZXdzX19uYXYtYnV0dG9uLS1kaXNhYmxlZFwiLFxyXG4gICAgICAgICAgICBuZXh0RWw6ICRuYXZOZXh0LFxyXG4gICAgICAgICAgICBwcmV2RWw6ICRuYXZQcmV2LFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHN3aXBlck9iamVjdCA9IG5ldyBTd2lwZXIoJGZlYXR1cmVkUmV2aWV3c1N3aXBlciwgc3dpcGVyQ29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZmVhdHVyZWRSZXZpZXdzO1xyXG4iXSwibmFtZXMiOlsiU3dpcGVyIiwiTmF2aWdhdGlvbiIsIlBhZ2luYXRpb24iLCJmZWF0dXJlZFJldmlld3MiLCIkZmVhdHVyZWRSZXZpZXdzU2VjdGlvbnMiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwiJGZlYXR1cmVkUmV2aWV3c1NlY3Rpb24iLCIkZmVhdHVyZWRSZXZpZXdzTmF2IiwicXVlcnlTZWxlY3RvciIsIiRuYXZOZXh0IiwiJG5hdlByZXYiLCIkZmVhdHVyZWRSZXZpZXdzU3dpcGVyIiwic3dpcGVyQ29uZmlnIiwiZGlyZWN0aW9uIiwic3BlZWQiLCJzbGlkZXNQZXJWaWV3Iiwic3BhY2VCZXR3ZWVuIiwiYnJlYWtwb2ludHMiLCJuYXZpZ2F0aW9uIiwiZGlzYWJsZWRDbGFzcyIsIm5leHRFbCIsInByZXZFbCIsInN3aXBlck9iamVjdCJdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/featured-reviews/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/fixed-bab-button/main.js\":\r\n/*!*************************************************************!*\\\r\n  !*** ./resources/scripts/sections/fixed-bab-button/main.js ***!\r\n  \\*************************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"fixedBabButton\\\": () => (/* binding */ fixedBabButton)\\n/* harmony export */ });\\n/* harmony import */ var gsap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! gsap */ \\\"./node_modules/gsap/index.js\\\");\\n/* harmony import */ var gsap_ScrollTrigger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! gsap/ScrollTrigger */ \\\"./node_modules/gsap/ScrollTrigger.js\\\");\\n\\n\\nvar fixedBabButton = function fixedBabButton() {\\n  var $fixedBabButton = document.querySelector(\\\".fixed-bab-button\\\");\\n  if ($fixedBabButton) {\\n    var $footer = document.querySelector(\\\".footer\\\");\\n    if ($footer) {\\n      gsap__WEBPACK_IMPORTED_MODULE_0__.gsap.registerPlugin(gsap_ScrollTrigger__WEBPACK_IMPORTED_MODULE_1__.ScrollTrigger);\\n      gsap_ScrollTrigger__WEBPACK_IMPORTED_MODULE_1__.ScrollTrigger.create({\\n        trigger: $footer,\\n        start: \\\"top bottom\\\",\\n        end: \\\"bottom bottom\\\",\\n        onEnter: function onEnter() {\\n          $fixedBabButton.classList.add('unviewable');\\n        },\\n        onLeaveBack: function onLeaveBack() {\\n          $fixedBabButton.classList.remove('unviewable');\\n        }\\n      });\\n    }\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (fixedBabButton);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9maXhlZC1iYWItYnV0dG9uL21haW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUE0QjtBQUN1QjtBQUc1QyxJQUFNRSxjQUFjLEdBQUcsU0FBakJBLGNBQWMsR0FBUztFQUVoQyxJQUFNQyxlQUFlLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLG1CQUFtQixDQUFDO0VBQ25FLElBQUdGLGVBQWUsRUFBQztJQUVmLElBQU1HLE9BQU8sR0FBR0YsUUFBUSxDQUFDQyxhQUFhLENBQUMsU0FBUyxDQUFDO0lBRWpELElBQUdDLE9BQU8sRUFBQztNQUNQTixxREFBbUIsQ0FBQ0MsNkRBQWEsQ0FBQztNQUVsQ0Esb0VBQW9CLENBQUM7UUFDakJRLE9BQU8sRUFBRUgsT0FBTztRQUNoQkksS0FBSyxFQUFFLFlBQVk7UUFDbkJDLEdBQUcsRUFBRSxlQUFlO1FBQ3BCQyxPQUFPLEVBQUUsbUJBQU07VUFDWFQsZUFBZSxDQUFDVSxTQUFTLENBQUNDLEdBQUcsQ0FBQyxZQUFZLENBQUM7UUFDL0MsQ0FBQztRQUNEQyxXQUFXLEVBQUUsdUJBQU07VUFDZlosZUFBZSxDQUFDVSxTQUFTLENBQUNHLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDbEQ7TUFDSixDQUFDLENBQUM7SUFDTjtFQUNKO0FBQ0osQ0FBQztBQUVELGlFQUFlZCxjQUFjIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9maXhlZC1iYWItYnV0dG9uL21haW4uanM/MGFlZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnc2FwIH0gZnJvbSBcImdzYXBcIjtcclxuaW1wb3J0IHsgU2Nyb2xsVHJpZ2dlciB9IGZyb20gXCJnc2FwL1Njcm9sbFRyaWdnZXJcIjtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgZml4ZWRCYWJCdXR0b24gPSAoKSA9PiB7XHJcblxyXG4gICAgY29uc3QgJGZpeGVkQmFiQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5maXhlZC1iYWItYnV0dG9uXCIpO1xyXG4gICAgaWYoJGZpeGVkQmFiQnV0dG9uKXtcclxuXHJcbiAgICAgICAgY29uc3QgJGZvb3RlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuZm9vdGVyXCIpO1xyXG5cclxuICAgICAgICBpZigkZm9vdGVyKXtcclxuICAgICAgICAgICAgZ3NhcC5yZWdpc3RlclBsdWdpbihTY3JvbGxUcmlnZ2VyKTtcclxuXHJcbiAgICAgICAgICAgIFNjcm9sbFRyaWdnZXIuY3JlYXRlKHtcclxuICAgICAgICAgICAgICAgIHRyaWdnZXI6ICRmb290ZXIsXHJcbiAgICAgICAgICAgICAgICBzdGFydDogXCJ0b3AgYm90dG9tXCIsXHJcbiAgICAgICAgICAgICAgICBlbmQ6IFwiYm90dG9tIGJvdHRvbVwiLFxyXG4gICAgICAgICAgICAgICAgb25FbnRlcjogKCkgPT4geyAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICRmaXhlZEJhYkJ1dHRvbi5jbGFzc0xpc3QuYWRkKCd1bnZpZXdhYmxlJyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgb25MZWF2ZUJhY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAkZml4ZWRCYWJCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgndW52aWV3YWJsZScpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmaXhlZEJhYkJ1dHRvbjsgICAgIl0sIm5hbWVzIjpbImdzYXAiLCJTY3JvbGxUcmlnZ2VyIiwiZml4ZWRCYWJCdXR0b24iLCIkZml4ZWRCYWJCdXR0b24iLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCIkZm9vdGVyIiwicmVnaXN0ZXJQbHVnaW4iLCJjcmVhdGUiLCJ0cmlnZ2VyIiwic3RhcnQiLCJlbmQiLCJvbkVudGVyIiwiY2xhc3NMaXN0IiwiYWRkIiwib25MZWF2ZUJhY2siLCJyZW1vdmUiXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/fixed-bab-button/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/footer/main.js\":\r\n/*!***************************************************!*\\\r\n  !*** ./resources/scripts/sections/footer/main.js ***!\r\n  \\***************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"footer\\\": () => (/* binding */ footer)\\n/* harmony export */ });\\nfunction _typeof(obj) { \\\"@babel/helpers - typeof\\\"; return _typeof = \\\"function\\\" == typeof Symbol && \\\"symbol\\\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \\\"function\\\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \\\"symbol\\\" : typeof obj; }, _typeof(obj); }\\nfunction _regeneratorRuntime() { \\\"use strict\\\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = \\\"function\\\" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || \\\"@@iterator\\\", asyncIteratorSymbol = $Symbol.asyncIterator || \\\"@@asyncIterator\\\", toStringTagSymbol = $Symbol.toStringTag || \\\"@@toStringTag\\\"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, \\\"\\\"); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, \\\"_invoke\\\", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: \\\"normal\\\", arg: fn.call(obj, arg) }; } catch (err) { return { type: \\\"throw\\\", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { [\\\"next\\\", \\\"throw\\\", \\\"return\\\"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (\\\"throw\\\" !== record.type) { var result = record.arg, value = result.value; return value && \\\"object\\\" == _typeof(value) && hasOwn.call(value, \\\"__await\\\") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke(\\\"next\\\", value, resolve, reject); }, function (err) { invoke(\\\"throw\\\", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke(\\\"throw\\\", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, \\\"_invoke\\\", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = \\\"suspendedStart\\\"; return function (method, arg) { if (\\\"executing\\\" === state) throw new Error(\\\"Generator is already running\\\"); if (\\\"completed\\\" === state) { if (\\\"throw\\\" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (\\\"next\\\" === context.method) context.sent = context._sent = context.arg;else if (\\\"throw\\\" === context.method) { if (\\\"suspendedStart\\\" === state) throw state = \\\"completed\\\", context.arg; context.dispatchException(context.arg); } else \\\"return\\\" === context.method && context.abrupt(\\\"return\\\", context.arg); state = \\\"executing\\\"; var record = tryCatch(innerFn, self, context); if (\\\"normal\\\" === record.type) { if (state = context.done ? \\\"completed\\\" : \\\"suspendedYield\\\", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } \\\"throw\\\" === record.type && (state = \\\"completed\\\", context.method = \\\"throw\\\", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, \\\"throw\\\" === methodName && delegate.iterator[\\\"return\\\"] && (context.method = \\\"return\\\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \\\"throw\\\" === context.method) || \\\"return\\\" !== methodName && (context.method = \\\"throw\\\", context.arg = new TypeError(\\\"The iterator does not provide a '\\\" + methodName + \\\"' method\\\")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if (\\\"throw\\\" === record.type) return context.method = \\\"throw\\\", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \\\"return\\\" !== context.method && (context.method = \\\"next\\\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \\\"throw\\\", context.arg = new TypeError(\\\"iterator result is not an object\\\"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = \\\"normal\\\", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: \\\"root\\\" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if (\\\"function\\\" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, \\\"constructor\\\", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, \\\"constructor\\\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \\\"GeneratorFunction\\\"), exports.isGeneratorFunction = function (genFun) { var ctor = \\\"function\\\" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || \\\"GeneratorFunction\\\" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \\\"GeneratorFunction\\\")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \\\"Generator\\\"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, \\\"toString\\\", function () { return \\\"[object Generator]\\\"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \\\"next\\\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) \\\"t\\\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if (\\\"throw\\\" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = \\\"throw\\\", record.arg = exception, context.next = loc, caught && (context.method = \\\"next\\\", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if (\\\"root\\\" === entry.tryLoc) return handle(\\\"end\\\"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, \\\"catchLoc\\\"), hasFinally = hasOwn.call(entry, \\\"finallyLoc\\\"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error(\\\"try statement without catch or finally\\\"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, \\\"finallyLoc\\\") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && (\\\"break\\\" === type || \\\"continue\\\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = \\\"next\\\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if (\\\"throw\\\" === record.type) throw record.arg; return \\\"break\\\" === record.type || \\\"continue\\\" === record.type ? this.next = record.arg : \\\"return\\\" === record.type ? (this.rval = this.arg = record.arg, this.method = \\\"return\\\", this.next = \\\"end\\\") : \\\"normal\\\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, \\\"catch\\\": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (\\\"throw\\\" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error(\\\"illegal catch attempt\\\"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, \\\"next\\\" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }\\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \\\"next\\\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \\\"throw\\\", err); } _next(undefined); }); }; }\\nvar footer = function footer() {\\n  var $footer = document.querySelector(\\\".footer\\\");\\n  if ($footer) {\\n    //Support Links\\n    var $supportLinksContainer = $footer.querySelector(\\\".desktop-support-links\\\");\\n    if ($supportLinksContainer) {\\n      var $supportLinks = $supportLinksContainer.querySelectorAll(\\\".desktop-support-link\\\");\\n      if ($supportLinks.length > 0) {\\n        $supportLinks.forEach(function ($supportLink) {\\n          $supportLink.addEventListener(\\\"mouseenter\\\", function (e) {\\n            $supportLinks.forEach(function ($sptLink) {\\n              if ($sptLink !== $supportLink) {\\n                $sptLink.classList.add(\\\"opacity-50\\\");\\n              }\\n            });\\n          });\\n          $supportLink.addEventListener(\\\"mouseleave\\\", function (e) {\\n            $supportLinks.forEach(function ($sptLink) {\\n              $sptLink.classList.remove(\\\"opacity-50\\\");\\n            });\\n          });\\n        });\\n      }\\n    }\\n\\n    //Legal Links\\n    var $legalLinksContainer = $footer.querySelector(\\\".desktop-legal-menu-links\\\");\\n    if ($legalLinksContainer) {\\n      var $legalLinks = $legalLinksContainer.querySelectorAll(\\\".desktop-legal-menu-link\\\");\\n      if ($legalLinks.length > 0) {\\n        $legalLinks.forEach(function ($legalLink) {\\n          $legalLink.addEventListener(\\\"mouseenter\\\", function (e) {\\n            $legalLinks.forEach(function ($lglLink) {\\n              if ($lglLink !== $legalLink) {\\n                $lglLink.classList.add(\\\"opacity-50\\\");\\n              }\\n            });\\n          });\\n          $legalLink.addEventListener(\\\"mouseleave\\\", function (e) {\\n            console.log(\\\"exit trigger\\\");\\n            $legalLinks.forEach(function ($lglLink) {\\n              $lglLink.classList.remove(\\\"opacity-50\\\");\\n            });\\n          });\\n        });\\n      }\\n    }\\n\\n    //newsletter subscription form\\n    var $newsletterForm = $footer.querySelector(\\\"#footer-newsletter-form\\\");\\n    var $newsletterFormSubmitBtn = $footer.querySelector(\\\".newsletter-submit\\\");\\n    if ($newsletterForm && $newsletterFormSubmitBtn) {\\n      $newsletterForm.addEventListener(\\\"submit\\\", /*#__PURE__*/function () {\\n        var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(e) {\\n          var $publicApiKey, $listId, $successMessage, $newsletterTermsText, $errorMessage, $newsletterFormSubmitBtnSVGs, $emailInput, $targetEmail, response, _errorData$errors, _errorData$errors$, errorData;\\n          return _regeneratorRuntime().wrap(function _callee$(_context) {\\n            while (1) switch (_context.prev = _context.next) {\\n              case 0:\\n                e.preventDefault();\\n                $publicApiKey = $newsletterForm.dataset.key;\\n                $listId = $newsletterForm.dataset.listId;\\n                $successMessage = $newsletterForm.dataset.successMessage;\\n                $newsletterTermsText = $footer.querySelector(\\\".text-newsletter-terms\\\");\\n                $errorMessage = $newsletterForm.dataset.errorMessage;\\n                $newsletterFormSubmitBtnSVGs = $newsletterFormSubmitBtn.querySelectorAll(\\\"svg\\\");\\n                $emailInput = $newsletterForm.querySelector(\\\"#newsletter-email\\\");\\n                $newsletterFormSubmitBtn.classList.add(\\\"disabled\\\");\\n\\n                //extract email:\\n                $targetEmail = $emailInput.value;\\n                $emailInput.disabled = true;\\n                _context.prev = 11;\\n                _context.next = 14;\\n                return fetch(\\\"https://a.klaviyo.com/client/subscriptions/?company_id=\\\".concat($publicApiKey), {\\n                  method: 'POST',\\n                  headers: {\\n                    'Content-Type': 'application/json',\\n                    'revision': '2024-10-15'\\n                  },\\n                  body: JSON.stringify({\\n                    data: {\\n                      type: 'subscription',\\n                      attributes: {\\n                        profile: {\\n                          data: {\\n                            type: 'profile',\\n                            attributes: {\\n                              email: $targetEmail\\n                            }\\n                          }\\n                        }\\n                      },\\n                      relationships: {\\n                        list: {\\n                          data: {\\n                            type: 'list',\\n                            id: $listId\\n                          }\\n                        }\\n                      }\\n                    }\\n                  })\\n                });\\n              case 14:\\n                response = _context.sent;\\n                if (!response.ok) {\\n                  _context.next = 22;\\n                  break;\\n                }\\n                $newsletterFormSubmitBtn.classList.remove(\\\"disabled\\\");\\n                $newsletterFormSubmitBtn.classList.add(\\\"success-version\\\");\\n                if ($newsletterFormSubmitBtnSVGs.length > 0) {\\n                  $newsletterFormSubmitBtnSVGs.forEach(function ($newsletterSvg) {\\n                    $newsletterSvg.classList.toggle(\\\"hidden\\\");\\n                  });\\n                }\\n                if ($newsletterTermsText && $successMessage) {\\n                  $newsletterTermsText.textContent = $successMessage;\\n                }\\n                _context.next = 27;\\n                break;\\n              case 22:\\n                _context.next = 24;\\n                return response.json();\\n              case 24:\\n                errorData = _context.sent;\\n                $newsletterForm.innerHTML = \\\"<div class=\\\\\\\"error-message\\\\\\\">\\\".concat($errorMessage, \\\"</div>\\\");\\n                throw new Error(((_errorData$errors = errorData.errors) === null || _errorData$errors === void 0 ? void 0 : (_errorData$errors$ = _errorData$errors[0]) === null || _errorData$errors$ === void 0 ? void 0 : _errorData$errors$.detail) || 'Subscription failed');\\n              case 27:\\n                _context.next = 33;\\n                break;\\n              case 29:\\n                _context.prev = 29;\\n                _context.t0 = _context[\\\"catch\\\"](11);\\n                console.error('Klaviyo subscription error:', _context.t0);\\n                $newsletterForm.innerHTML = \\\"<div class=\\\\\\\"error-message\\\\\\\">\\\".concat($errorMessage, \\\"</div>\\\");\\n              case 33:\\n                ;\\n              case 34:\\n              case \\\"end\\\":\\n                return _context.stop();\\n            }\\n          }, _callee, null, [[11, 29]]);\\n        }));\\n        return function (_x) {\\n          return _ref.apply(this, arguments);\\n        };\\n      }());\\n    }\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (footer);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9mb290ZXIvbWFpbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7K0NBQ0E7QUFBQTtBQUFBO0FBRE8sSUFBTUEsTUFBTSxHQUFHLFNBQVRBLE1BQU0sR0FBUztFQUV4QixJQUFNQyxPQUFPLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLFNBQVMsQ0FBQztFQUNqRCxJQUFHRixPQUFPLEVBQUM7SUFFUDtJQUNBLElBQU1HLHNCQUFzQixHQUFHSCxPQUFPLENBQUNFLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQztJQUM5RSxJQUFHQyxzQkFBc0IsRUFBQztNQUN0QixJQUFNQyxhQUFhLEdBQUdELHNCQUFzQixDQUFDRSxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQztNQUN0RixJQUFHRCxhQUFhLENBQUNFLE1BQU0sR0FBRyxDQUFDLEVBQUM7UUFDeEJGLGFBQWEsQ0FBQ0csT0FBTyxDQUFDLFVBQUNDLFlBQVksRUFBSztVQUVwQ0EsWUFBWSxDQUFDQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUMsVUFBQ0MsQ0FBQyxFQUFLO1lBQzlDTixhQUFhLENBQUNHLE9BQU8sQ0FBQyxVQUFDSSxRQUFRLEVBQUs7Y0FDaEMsSUFBR0EsUUFBUSxLQUFLSCxZQUFZLEVBQUM7Z0JBQ3pCRyxRQUFRLENBQUNDLFNBQVMsQ0FBQ0MsR0FBRyxDQUFDLFlBQVksQ0FBQztjQUN4QztZQUNKLENBQUMsQ0FBQztVQUNOLENBQUMsQ0FBQztVQUVGTCxZQUFZLENBQUNDLGdCQUFnQixDQUFDLFlBQVksRUFBQyxVQUFDQyxDQUFDLEVBQUs7WUFDOUNOLGFBQWEsQ0FBQ0csT0FBTyxDQUFDLFVBQUNJLFFBQVEsRUFBSztjQUNoQ0EsUUFBUSxDQUFDQyxTQUFTLENBQUNFLE1BQU0sQ0FBQyxZQUFZLENBQUM7WUFDM0MsQ0FBQyxDQUFDO1VBQ04sQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDO01BQ047SUFDSjs7SUFFQTtJQUNBLElBQU1DLG9CQUFvQixHQUFH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QkFDbkY7Y0FBQztjQUFBO2dCQUFBO1lBQUE7VUFBQTtRQUFBLENBQ0w7UUFBQTtVQUFBO1FBQUE7TUFBQSxJQUFDO0lBQ047RUFDSjtBQUNKLENBQUM7QUFFRCxpRUFBZWpDLE1BQU0iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL3Jlc291cmNlcy9zY3JpcHRzL3NlY3Rpb25zL2Zvb3Rlci9tYWluLmpzPzBlMTQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGZvb3RlciA9ICgpID0+IHtcclxuXHJcbiAgICBjb25zdCAkZm9vdGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mb290ZXJcIik7XHJcbiAgICBpZigkZm9vdGVyKXtcclxuXHJcbiAgICAgICAgLy9TdXBwb3J0IExpbmtzXHJcbiAgICAgICAgY29uc3QgJHN1cHBvcnRMaW5rc0NvbnRhaW5lciA9ICRmb290ZXIucXVlcnlTZWxlY3RvcihcIi5kZXNrdG9wLXN1cHBvcnQtbGlua3NcIik7XHJcbiAgICAgICAgaWYoJHN1cHBvcnRMaW5rc0NvbnRhaW5lcil7XHJcbiAgICAgICAgICAgIGNvbnN0ICRzdXBwb3J0TGlua3MgPSAkc3VwcG9ydExpbmtzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZGVza3RvcC1zdXBwb3J0LWxpbmtcIik7XHJcbiAgICAgICAgICAgIGlmKCRzdXBwb3J0TGlua3MubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICAkc3VwcG9ydExpbmtzLmZvckVhY2goKCRzdXBwb3J0TGluaykgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkc3VwcG9ydExpbmsuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkc3VwcG9ydExpbmtzLmZvckVhY2goKCRzcHRMaW5rKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkc3B0TGluayAhPT0gJHN1cHBvcnRMaW5rKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3B0TGluay5jbGFzc0xpc3QuYWRkKFwib3BhY2l0eS01MFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICRzdXBwb3J0TGluay5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLChlKSA9PiB7ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHN1cHBvcnRMaW5rcy5mb3JFYWNoKCgkc3B0TGluaykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNwdExpbmsuY2xhc3NMaXN0LnJlbW92ZShcIm9wYWNpdHktNTBcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vTGVnYWwgTGlua3NcclxuICAgICAgICBjb25zdCAkbGVnYWxMaW5rc0NvbnRhaW5lciA9ICRmb290ZXIucXVlcnlTZWxlY3RvcihcIi5kZXNrdG9wLWxlZ2FsLW1lbnUtbGlua3NcIik7XHJcbiAgICAgICAgaWYoJGxlZ2FsTGlua3NDb250YWluZXIpe1xyXG4gICAgICAgICAgICBjb25zdCAkbGVnYWxMaW5rcyA9ICRsZWdhbExpbmtzQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZGVza3RvcC1sZWdhbC1tZW51LWxpbmtcIik7XHJcbiAgICAgICAgICAgIGlmKCRsZWdhbExpbmtzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgJGxlZ2FsTGlua3MuZm9yRWFjaCgoJGxlZ2FsTGluaykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICRsZWdhbExpbmsuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkbGVnYWxMaW5rcy5mb3JFYWNoKCgkbGdsTGluaykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGxnbExpbmsgIT09ICRsZWdhbExpbmspe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsZ2xMaW5rLmNsYXNzTGlzdC5hZGQoXCJvcGFjaXR5LTUwXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJGxlZ2FsTGluay5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLChlKSA9PiB7ICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJleGl0IHRyaWdnZXJcIik7ICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRsZWdhbExpbmtzLmZvckVhY2goKCRsZ2xMaW5rKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGdsTGluay5jbGFzc0xpc3QucmVtb3ZlKFwib3BhY2l0eS01MFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBcclxuICAgICAgICB9ICAgIFxyXG5cclxuICAgICAgICAvL25ld3NsZXR0ZXIgc3Vic2NyaXB0aW9uIGZvcm1cclxuICAgICAgICBjb25zdCAkbmV3c2xldHRlckZvcm0gPSAkZm9vdGVyLnF1ZXJ5U2VsZWN0b3IoXCIjZm9vdGVyLW5ld3NsZXR0ZXItZm9ybVwiKTtcclxuICAgICAgICBjb25zdCAkbmV3c2xldHRlckZvcm1TdWJtaXRCdG4gPSAkZm9vdGVyLnF1ZXJ5U2VsZWN0b3IoXCIubmV3c2xldHRlci1zdWJtaXRcIik7XHJcbiAgICAgICAgaWYoJG5ld3NsZXR0ZXJGb3JtICYmICRuZXdzbGV0dGVyRm9ybVN1Ym1pdEJ0bil7XHJcblxyXG4gICAgICAgICAgICAkbmV3c2xldHRlckZvcm0uYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCBhc3luYyAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0ICRwdWJsaWNBcGlLZXkgPSAkbmV3c2xldHRlckZvcm0uZGF0YXNldC5rZXk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCAkbGlzdElkID0gJG5ld3NsZXR0ZXJGb3JtLmRhdGFzZXQubGlzdElkO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgJHN1Y2Nlc3NNZXNzYWdlID0gJG5ld3NsZXR0ZXJGb3JtLmRhdGFzZXQuc3VjY2Vzc01lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICBjb25zdCAkbmV3c2xldHRlclRlcm1zVGV4dCA9ICRmb290ZXIucXVlcnlTZWxlY3RvcihcIi50ZXh0LW5ld3NsZXR0ZXItdGVybXNcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCAkZXJyb3JNZXNzYWdlID0gJG5ld3NsZXR0ZXJGb3JtLmRhdGFzZXQuZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgJG5ld3NsZXR0ZXJGb3JtU3VibWl0QnRuU1ZHcyA9ICRuZXdzbGV0dGVyRm9ybVN1Ym1pdEJ0bi5xdWVyeVNlbGVjdG9yQWxsKFwic3ZnXCIpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgJGVtYWlsSW5wdXQgPSAkbmV3c2xldHRlckZvcm0ucXVlcnlTZWxlY3RvcihcIiNuZXdzbGV0dGVyLWVtYWlsXCIpO1xyXG4gICAgICAgICAgICAgICAgJG5ld3NsZXR0ZXJGb3JtU3VibWl0QnRuLmNsYXNzTGlzdC5hZGQoXCJkaXNhYmxlZFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvL2V4dHJhY3QgZW1haWw6XHJcbiAgICAgICAgICAgICAgICBjb25zdCAkdGFyZ2V0RW1haWwgPSAgJGVtYWlsSW5wdXQudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAkZW1haWxJbnB1dC5kaXNhYmxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwczovL2Eua2xhdml5by5jb20vY2xpZW50L3N1YnNjcmlwdGlvbnMvP2NvbXBhbnlfaWQ9JHskcHVibGljQXBpS2V5fWAsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmV2aXNpb24nOiAnMjAyNC0xMC0xNSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdWJzY3JpcHRpb24nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdwcm9maWxlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsOiAkdGFyZ2V0RW1haWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uc2hpcHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogJGxpc3RJZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uub2spIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdzbGV0dGVyRm9ybVN1Ym1pdEJ0bi5jbGFzc0xpc3QucmVtb3ZlKFwiZGlzYWJsZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdzbGV0dGVyRm9ybVN1Ym1pdEJ0bi5jbGFzc0xpc3QuYWRkKFwic3VjY2Vzcy12ZXJzaW9uXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoJG5ld3NsZXR0ZXJGb3JtU3VibWl0QnRuU1ZHcy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXdzbGV0dGVyRm9ybVN1Ym1pdEJ0blNWR3MuZm9yRWFjaCgoJG5ld3NsZXR0ZXJTdmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmV3c2xldHRlclN2Zy5jbGFzc0xpc3QudG9nZ2xlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRuZXdzbGV0dGVyVGVybXNUZXh0ICYmICRzdWNjZXNzTWVzc2FnZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbmV3c2xldHRlclRlcm1zVGV4dC50ZXh0Q29udGVudCA9ICRzdWNjZXNzTWVzc2FnZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvckRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRuZXdzbGV0dGVyRm9ybS5pbm5lckhUTUwgPSBgPGRpdiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj4keyRlcnJvck1lc3NhZ2V9PC9kaXY+YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yRGF0YS5lcnJvcnM/LlswXT8uZGV0YWlsIHx8ICdTdWJzY3JpcHRpb24gZmFpbGVkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdLbGF2aXlvIHN1YnNjcmlwdGlvbiBlcnJvcjonLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgJG5ld3NsZXR0ZXJGb3JtLmlubmVySFRNTCA9IGA8ZGl2IGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPiR7JGVycm9yTWVzc2FnZX08L2Rpdj5gOyAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZvb3RlcjsgICAgIl0sIm5hbWVzIjpbImZvb3RlciIsIiRmb290ZXIiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCIkc3VwcG9ydExpbmtzQ29udGFpbmVyIiwiJHN1cHBvcnRMaW5rcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJmb3JFYWNoIiwiJHN1cHBvcnRMaW5rIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCIkc3B0TGluayIsImNsYXNzTGlzdCIsImFkZCIsInJlbW92ZSIsIiRsZWdhbExpbmtzQ29udGFpbmVyIiwiJGxlZ2FsTGlua3MiLCIkbGVnYWxMaW5rIiwiJGxnbExpbmsiLCJjb25zb2xlIiwibG9nIiwiJG5ld3NsZXR0ZXJGb3JtIiwiJG5ld3NsZXR0ZXJGb3JtU3VibWl0QnRuIiwicHJldmVudERlZmF1bHQiLCIkcHVibGljQXBpS2V5IiwiZGF0YXNldCIsImtleSIsIiRsaXN0SWQiLCJsaXN0SWQiLCIkc3VjY2Vzc01lc3NhZ2UiLCJzdWNjZXNzTWVzc2FnZSIsIiRuZXdzbGV0dGVyVGVybXNUZXh0IiwiJGVycm9yTWVzc2FnZSIsImVycm9yTWVzc2FnZSIsIiRuZXdzbGV0dGVyRm9ybVN1Ym1pdEJ0blNWR3MiLCIkZW1haWxJbnB1dCIsIiR0YXJnZXRFbWFpbCIsInZhbHVlIiwiZGlzYWJsZWQiLCJmZXRjaCIsIm1ldGhvZCIsImhlYWRlcnMiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsImRhdGEiLCJ0eXBlIiwiYXR0cmlidXRlcyIsInByb2ZpbGUiLCJlbWFpbCIsInJlbGF0aW9uc2hpcHMiLCJsaXN0IiwiaWQiLCJyZXNwb25zZSIsIm9rIiwiJG5ld3NsZXR0ZXJTdmciLCJ0b2dnbGUiLCJ0ZXh0Q29udGVudCIsImpzb24iLCJlcnJvckRhdGEiLCJpbm5lckhUTUwiLCJFcnJvciIsImVycm9ycyIsImRldGFpbCIsImVycm9yIl0sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/footer/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/header/main.js\":\r\n/*!***************************************************!*\\\r\n  !*** ./resources/scripts/sections/header/main.js ***!\r\n  \\***************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"header\\\": () => (/* binding */ header)\\n/* harmony export */ });\\n/* harmony import */ var gsap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! gsap */ \\\"./node_modules/gsap/index.js\\\");\\n\\nvar header = function header() {\\n  var $header = document.querySelector(\\\"header.header\\\");\\n  if ($header) {\\n    // On the Build a Bundle Page - stops user from scrolling and hiding the top menu nav\\n    var lockBackground = function lockBackground() {\\n      document.body.classList.add(\\\"overflow-y-hidden\\\");\\n\\n      //Iphones ignore overflow hidden on body tags, so we do this instead\\n      var scrollY = window.scrollY;\\n      document.body.style.position = 'fixed';\\n      document.body.style.top = \\\"0px\\\";\\n      document.body.style.left = '0';\\n      document.body.style.right = '0';\\n      document.body.style.overflow = 'hidden';\\n    };\\n    var unlockBackground = function unlockBackground() {\\n      document.body.classList.remove(\\\"overflow-y-hidden\\\");\\n      var scrollY = Math.abs(parseInt(document.body.style.top || 0, 10));\\n      document.body.style.position = \\\"\\\";\\n      document.body.style.top = \\\"\\\";\\n      document.body.style.left = \\\"\\\";\\n      document.body.style.right = \\\"\\\";\\n      document.body.style.overflow = \\\"\\\";\\n      requestAnimationFrame(function () {\\n        window.scrollTo({\\n          top: scrollY,\\n          left: 0,\\n          behavior: \\\"instant\\\" // iOS 16+ - avoids the awkward blip jump\\n        });\\n      });\\n    };\\n\\n    var adjustTopBasedOnHeaderHeight = function adjustTopBasedOnHeaderHeight($header, $menuMobile) {\\n      var $targetMenu = $menuMobile;\\n      if (!$menuMobile) {\\n        $targetMenu = document.querySelector(\\\".menu__mobile\\\");\\n      }\\n      if ($targetMenu) {\\n        var headerHeight = $header.getBoundingClientRect().height;\\n        $targetMenu.style.top = headerHeight + \\\"px\\\";\\n      }\\n    };\\n\\n    //check for and reveal the announcement bar if it can\\n    var $announcementBar = $header.querySelector(\\\".header__announcement-bar\\\");\\n    if ($announcementBar) {\\n      //Can we show the announcement bar?\\n      var showAnnouncement = true;\\n      if (localStorage.getItem(\\\"announcementClosed\\\")) {\\n        showAnnouncement = false;\\n      }\\n      if (showAnnouncement) {\\n        window.addEventListener(\\\"load\\\", function () {\\n          //Reveal Animation\\n          $announcementBar.classList.remove(\\\"hidden\\\");\\n          gsap__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"].fromTo($announcementBar, {\\n            height: 0\\n          }, {\\n            height: \\\"auto\\\",\\n            duration: 0.5,\\n            ease: \\\"power2.out\\\",\\n            onComplete: function onComplete() {\\n              adjustTopBasedOnHeaderHeight($header);\\n            }\\n          });\\n        });\\n\\n        //Find and bind the close button\\n        var $announcementClose = $announcementBar.querySelector(\\\".header__announcement-bar-close\\\");\\n        if ($announcementClose) {\\n          $announcementClose.addEventListener(\\\"click\\\", function (e) {\\n            e.preventDefault();\\n\\n            //Hide and prevent it from showing on reload\\n            localStorage.setItem(\\\"announcementClosed\\\", \\\"true\\\");\\n            gsap__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"].fromTo($announcementBar, {\\n              height: $announcementBar.offsetHeight\\n            }, {\\n              height: 0,\\n              duration: 0.5,\\n              ease: \\\"power2.in\\\",\\n              onComplete: function onComplete() {\\n                $announcementBar.classList.add(\\\"hidden\\\");\\n                adjustTopBasedOnHeaderHeight($header);\\n              }\\n            });\\n          });\\n        }\\n      }\\n    }\\n    var $body = document.querySelector(\\\"body\\\");\\n    var cart = window.Carbon.Cart;\\n\\n    /*\\r\\n    if (cart.useCartAside) {\\r\\n      const $cartAsideBackground = document.querySelector(\\r\\n        \\\".cart-aside__background\\\"\\r\\n      );\\r\\n      const $cartAside = $cartAsideBackground.querySelector(\\\"aside.cart-aside\\\");\\r\\n      const $desktopCartLink = $header.querySelector(\\r\\n        \\\".navbar__desktop .header__cart-link\\\"\\r\\n      );\\r\\n      const $mobileCartLink = $header.querySelector(\\r\\n        \\\".navbar__mobile .header__cart-link\\\"\\r\\n      );\\r\\n        if($desktopCartLink){\\r\\n        $desktopCartLink.addEventListener(\\\"click\\\", (event) => {\\r\\n          event.preventDefault();\\r\\n          $body.classList.add(\\\"overflow-y-hidden\\\");\\r\\n          $cartAsideBackground.classList.remove(\\\"pointer-events-none\\\");\\r\\n          $cartAsideBackground.classList.add(\\\"bg-black\\\", \\\"bg-opacity-40\\\");\\r\\n          $cartAside.classList.remove(\\r\\n            \\\"translate-x-full\\\",\\r\\n            \\\"ponter-events-none\\\",\\r\\n            \\\"hidden\\\"\\r\\n          );\\r\\n        });\\r\\n      }\\r\\n        if($mobileCartLink){\\r\\n        $mobileCartLink.addEventListener(\\\"click\\\", (event) => {\\r\\n          event.preventDefault();\\r\\n          $body.classList.add(\\\"overflow-y-hidden\\\");\\r\\n          $cartAsideBackground.classList.remove(\\\"pointer-events-none\\\");\\r\\n          $cartAsideBackground.classList.add(\\\"bg-black\\\", \\\"bg-opacity-40\\\");\\r\\n          $cartAside.classList.remove(\\r\\n            \\\"translate-x-full\\\",\\r\\n            \\\"ponter-events-none\\\",\\r\\n            \\\"hidden\\\"\\r\\n          );\\r\\n        });\\r\\n      }\\r\\n    }\\r\\n    */\\n\\n    var $menuDesktop = $header.querySelector(\\\".navbar__desktop\\\");\\n    if ($menuDesktop) {\\n      //Find all Items in the menu\\n      var $menuLinkContainers = $menuDesktop.querySelectorAll(\\\".menu-link-container\\\");\\n      var $desktopBg = $header.querySelector(\\\".desktop-dropdown-bg\\\");\\n      if ($menuLinkContainers.length > 0) {\\n        var fadeOutMainMenuLinks = function fadeOutMainMenuLinks($menuLinkContainers) {\\n          $menuLinkContainers.forEach(function ($mnLnkCntnr) {\\n            if ($mnLnkCntnr.classList.contains(\\\"dropdown-open\\\")) {\\n              var $dropDownMenu = $mnLnkCntnr.querySelector(\\\".desktop-menu-dropdown-item .desktop-dropdown-menu\\\");\\n              if ($dropDownMenu) {\\n                $dropDownMenu.classList.remove(\\\"active\\\");\\n                $mnLnkCntnr.classList.remove(\\\"dropdown-open\\\");\\n              }\\n            }\\n\\n            //Remove Faded class\\n            $mnLnkCntnr.classList.remove(\\\"faded\\\");\\n          });\\n        };\\n        $menuLinkContainers.forEach(function ($menuLinkContainer) {\\n          //Handle hovering a Menu Item\\n          $menuLinkContainer.addEventListener(\\\"mouseenter\\\", function (e) {\\n            // Loop through all items and close any drop down that may be open\\n            // Restore the Faded status so that all are visible\\n\\n            $menuLinkContainers.forEach(function ($mnLnkCntnr) {\\n              if ($mnLnkCntnr.classList.contains(\\\"dropdown-open\\\")) {\\n                $mnLnkCntnr.classList.remove(\\\"dropdown-open\\\");\\n                $mnLnkCntnr.classList.add(\\\"faded\\\");\\n                var $existingDropdown = $mnLnkCntnr.querySelector(\\\".desktop-dropdown-menu\\\");\\n                if ($existingDropdown) {\\n                  $existingDropdown.classList.remove(\\\"active\\\");\\n                }\\n              }\\n              $mnLnkCntnr.classList.remove(\\\"faded\\\");\\n            });\\n\\n            // Then we need to fade out other menu items\\n            // Open dropdown if we have one to open\\n            $menuLinkContainers.forEach(function ($mnLnkCntnr) {\\n              if ($mnLnkCntnr.dataset.linkTitle !== $menuLinkContainer.dataset.linkTitle) {\\n                $mnLnkCntnr.classList.add(\\\"faded\\\");\\n              } else {\\n                var $dropDownMenuLink = $menuLinkContainer.querySelector(\\\".desktop-menu-dropdown-item\\\");\\n                if ($dropDownMenuLink) {\\n                  var $dropDownMenu = $dropDownMenuLink.querySelector(\\\".desktop-dropdown-menu\\\");\\n                  if ($dropDownMenu) {\\n                    $menuLinkContainer.classList.add(\\\"dropdown-open\\\");\\n\\n                    //Show the Drop Down\\n                    $dropDownMenu.classList.add(\\\"active\\\");\\n\\n                    //Open invisible Hitzone\\n                    $desktopBg.classList.add(\\\"active\\\");\\n                  }\\n                }\\n              }\\n            });\\n\\n            //Loop through all menus items, if it's not the one being hovered OR doesn't currently have a drop down open - fade out\\n\\n            /*\\r\\n              let dropDownIsOpen = false;            \\r\\n            $menuLinkContainers.forEach(($mnLnkCntnr) => {\\r\\n              if($mnLnkCntnr.classList.contains(\\\"dropdown-open\\\")){\\r\\n                dropDownIsOpen = true;\\r\\n              }\\r\\n            });\\r\\n              $menuLinkContainers.forEach(($mnLnkCntnr) => {\\r\\n              if(dropDownIsOpen){\\r\\n                  //Unfade your hovered option\\r\\n                if($mnLnkCntnr.dataset.linkTitle === $menuLinkContainer.dataset.linkTitle){\\r\\n                  $mnLnkCntnr.classList.remove(\\\"faded\\\");    \\r\\n                }\\r\\n              }else{\\r\\n                if($mnLnkCntnr.dataset.linkTitle !== $menuLinkContainer.dataset.linkTitle){\\r\\n                  $mnLnkCntnr.classList.add(\\\"faded\\\");                \\r\\n                }\\r\\n              }\\r\\n            });\\r\\n            */\\n\\n            //Does this item have a Dropdown to open? \\n            /*\\r\\n            const $dropDownMenuLink = $menuLinkContainer.querySelector(\\\".desktop-menu-dropdown-item\\\");\\r\\n            if($dropDownMenuLink){\\r\\n              const $dropDownMenu = $dropDownMenuLink.querySelector(\\\".desktop-dropdown-menu\\\");\\r\\n              if($dropDownMenu){\\r\\n                  //Is there a different dropdown to close?\\r\\n                //if(dropDownIsOpen){\\r\\n                  $menuLinkContainers.forEach(($mnLnkCntnr) => {\\r\\n                    if($mnLnkCntnr.classList.contains(\\\"dropdown-open\\\")){\\r\\n                      \\r\\n                      $mnLnkCntnr.classList.remove(\\\"dropdown-open\\\");\\r\\n                      $mnLnkCntnr.classList.add(\\\"faded\\\");\\r\\n                        const $existingDropdown = $mnLnkCntnr.querySelector(\\\".desktop-dropdown-menu\\\");\\r\\n                      if($existingDropdown){\\r\\n                        $existingDropdown.classList.remove(\\\"active\\\");\\r\\n                      }\\r\\n                    }\\r\\n                  });\\r\\n                //}\\r\\n                  //Show Top Level Item that it's open\\r\\n                $menuLinkContainer.classList.add(\\\"dropdown-open\\\");\\r\\n                  //Show the Drop Down\\r\\n                $dropDownMenu.classList.add(\\\"active\\\");\\r\\n                  //Open invisible Hitzone\\r\\n                $desktopBg.classList.add(\\\"active\\\");\\r\\n              }\\r\\n            }\\r\\n            */\\n          });\\n\\n          $menuLinkContainer.addEventListener(\\\"mouseleave\\\", function (e) {\\n            var dropdownIsOpen = false;\\n            $menuLinkContainers.forEach(function ($mnLnkCntnr) {\\n              if ($mnLnkCntnr.classList.contains(\\\"dropdown-open\\\")) {\\n                dropdownIsOpen = true;\\n              }\\n            });\\n            if (dropdownIsOpen) {\\n              if (!$menuLinkContainer.classList.contains(\\\"dropdown-open\\\")) {\\n                $menuLinkContainer.classList.add(\\\"faded\\\");\\n              }\\n            } else {\\n              //Unfade every link\\n              $menuLinkContainers.forEach(function ($mnLnkCntnr) {\\n                $mnLnkCntnr.classList.remove(\\\"faded\\\");\\n              });\\n            }\\n          });\\n\\n          //Handle Closing the Dropdowns\\n          $desktopBg.addEventListener(\\\"mouseenter\\\", function (e) {\\n            $desktopBg.classList.remove(\\\"active\\\");\\n            $menuLinkContainers.forEach(function ($mnLnkCntnr) {\\n              if ($mnLnkCntnr.classList.contains(\\\"dropdown-open\\\")) {\\n                var $dropDownMenu = $mnLnkCntnr.querySelector(\\\".desktop-menu-dropdown-item .desktop-dropdown-menu\\\");\\n                if ($dropDownMenu) {\\n                  $dropDownMenu.classList.remove(\\\"active\\\");\\n                  $mnLnkCntnr.classList.remove(\\\"dropdown-open\\\");\\n                }\\n              }\\n\\n              //Remove Faded class\\n              $mnLnkCntnr.classList.remove(\\\"faded\\\");\\n            });\\n          });\\n        });\\n\\n        //Hovering over the Site Logo, or any items from the right navbar should also unfade and hide dropdowns\\n        var $siteLogo = $menuDesktop.querySelector(\\\".site-logo\\\");\\n        var navbarRightLinks = $menuDesktop.querySelectorAll(\\\".navbar__right a\\\");\\n        if ($siteLogo) {\\n          $siteLogo.addEventListener(\\\"mouseenter\\\", function (e) {\\n            fadeOutMainMenuLinks($menuLinkContainers);\\n          });\\n        }\\n        if (navbarRightLinks.length > 0) {\\n          navbarRightLinks.forEach(function (navbarRightLink) {\\n            navbarRightLink.addEventListener(\\\"mouseenter\\\", function (e) {\\n              fadeOutMainMenuLinks($menuLinkContainers);\\n            });\\n          });\\n        }\\n      }\\n    }\\n    var $navbarMobile = $header.querySelector(\\\"nav.navbar .navbar__mobile\\\");\\n    if ($navbarMobile) {\\n      var $menuMobileButton = $navbarMobile.querySelector(\\\".menu__button\\\");\\n      var $menuMobile = $header.querySelector(\\\".menu__mobile\\\");\\n      if ($menuMobileButton) {\\n        var $menuMobileButtonHamburger = $menuMobileButton.querySelector(\\\".menu-hamburger\\\");\\n        var $menuMobileButtonClose = $menuMobileButton.querySelector(\\\".menu-close\\\");\\n        adjustTopBasedOnHeaderHeight($header, $menuMobile);\\n\\n        //Other areas that needed to be catered for:\\n        var $fixedBabButton = document.querySelector(\\\".fixed-bab-button\\\");\\n        var $bundleInfo = document.querySelector(\\\".build-a-bundle__info-container\\\");\\n        if ($menuMobileButtonHamburger && $menuMobileButtonClose) {\\n          $menuMobileButton.addEventListener(\\\"click\\\", function (e) {\\n            e.preventDefault();\\n            if ($menuMobile.classList.contains(\\\"active\\\")) {\\n              //Hide Mobile Menu\\n              $menuMobile.classList.remove(\\\"active\\\");\\n              $menuMobileButtonHamburger.classList.remove(\\\"hidden\\\");\\n              $menuMobileButtonClose.classList.add(\\\"hidden\\\");\\n              if ($fixedBabButton) {\\n                setTimeout(function () {\\n                  $fixedBabButton.style.zIndex = \\\"\\\";\\n                }, 500);\\n              }\\n              if ($bundleInfo) {\\n                setTimeout(function () {\\n                  $bundleInfo.style.zIndex = \\\"\\\";\\n                }, 500);\\n                unlockBackground();\\n              }\\n            } else {\\n              adjustTopBasedOnHeaderHeight($header, $menuMobile);\\n\\n              //Show Mobile Menu\\n              $menuMobile.classList.add(\\\"active\\\");\\n              $menuMobileButtonHamburger.classList.add(\\\"hidden\\\");\\n              $menuMobileButtonClose.classList.remove(\\\"hidden\\\");\\n              if ($fixedBabButton) {\\n                $fixedBabButton.style.zIndex = 500;\\n              }\\n              if ($bundleInfo) {\\n                $bundleInfo.style.zIndex = 10;\\n                lockBackground();\\n              }\\n            }\\n          });\\n\\n          //Bind any drop downs that are in the mobile menu\\n          var $mobileMenuAccordions = $menuMobile.querySelectorAll(\\\".mobile-menu-dropdown\\\");\\n          if ($mobileMenuAccordions.length > 0) {\\n            $mobileMenuAccordions.forEach(function ($mobileMenuAccordion) {\\n              var $accordionTrigger = $mobileMenuAccordion.querySelector(\\\".mobile-menu-dropdown-trigger\\\");\\n              if ($accordionTrigger) {\\n                $accordionTrigger.addEventListener(\\\"click\\\", function (e) {\\n                  e.preventDefault();\\n                  $mobileMenuAccordion.classList.toggle(\\\"active\\\");\\n                });\\n              }\\n            });\\n          }\\n        }\\n      }\\n    }\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (header);\\n\\n/*\\r\\n  Commented out Carbon:\\r\\n\\r\\n  const $localizationSelectors = $header.querySelectorAll(\\r\\n    \\\".localization-selector\\\"\\r\\n  );\\r\\n  $localizationSelectors.forEach(($localizationSelector) => {\\r\\n    const $language = $localizationSelector.querySelector(\\r\\n      \\\".localization-selector__langauge\\\"\\r\\n    );\\r\\n    if ($language) {\\r\\n      const $languageButton = $language.querySelector(\\\".language__button\\\");\\r\\n      const $languageDropdown = $language.querySelector(\\r\\n        \\\".language__dropdown\\\"\\r\\n      );\\r\\n      const $languageForm =\\r\\n        $languageDropdown.querySelector(\\\".dropdown__form\\\");\\r\\n      const $formButtons = $languageForm.querySelectorAll(\\\".form__button\\\");\\r\\n      const $formInput = $languageForm.querySelector(\\\".form__input\\\");\\r\\n\\r\\n      $languageButton.addEventListener(\\\"click\\\", (event) => {\\r\\n        event.preventDefault();\\r\\n        $languageDropdown.classList.remove(\\\"hidden\\\");\\r\\n      });\\r\\n\\r\\n      $formButtons.forEach(($formButton) => {\\r\\n        $formButton.addEventListener(\\\"click\\\", (event) => {\\r\\n          event.preventDefault();\\r\\n          $formInput.value = $formButton.dataset.value;\\r\\n          $languageForm.submit();\\r\\n        });\\r\\n      });\\r\\n\\r\\n      $body.addEventListener(\\\"click\\\", (event) => {\\r\\n        if (\\r\\n          event.target != $languageButton &&\\r\\n          (event.target == $languageDropdown ||\\r\\n            !$languageDropdown.contains(event.target))\\r\\n        ) {\\r\\n          $languageDropdown.classList.add(\\\"hidden\\\");\\r\\n        }\\r\\n      });\\r\\n    }\\r\\n\\r\\n    const $location = $localizationSelector.querySelector(\\r\\n      \\\".localization-selector__location\\\"\\r\\n    );\\r\\n    if ($location) {\\r\\n      const $locationButton = $location.querySelector(\\\".location__button\\\");\\r\\n      const $locationDropdown = $location.querySelector(\\r\\n        \\\".location__dropdown\\\"\\r\\n      );\\r\\n      const $locationForm =\\r\\n        $locationDropdown.querySelector(\\\".dropdown__form\\\");\\r\\n      const $formButtons = $locationForm.querySelectorAll(\\\".form__button\\\");\\r\\n      const $formInput = $locationForm.querySelector(\\\".form__input\\\");\\r\\n\\r\\n      $locationButton.addEventListener(\\\"click\\\", (event) => {\\r\\n        event.preventDefault();\\r\\n        $locationDropdown.classList.remove(\\\"hidden\\\");\\r\\n      });\\r\\n\\r\\n      $formButtons.forEach(($formButton) => {\\r\\n        $formButton.addEventListener(\\\"click\\\", (event) => {\\r\\n          event.preventDefault();\\r\\n          $formInput.value = $formButton.dataset.value;\\r\\n          $locationForm.submit();\\r\\n        });\\r\\n      });\\r\\n\\r\\n      $body.addEventListener(\\\"click\\\", (event) => {\\r\\n        if (\\r\\n          event.target != $locationButton &&\\r\\n          (event.target == $locationDropdown ||\\r\\n            !$locationDropdown.contains(event.target))\\r\\n        ) {\\r\\n          $locationDropdown.classList.add(\\\"hidden\\\");\\r\\n        }\\r\\n      });\\r\\n    }\\r\\n  });\\r\\n\\r\\n  const $navbarMobileButton = $navbarMobile.querySelector(\\\".navbar__button\\\");\\r\\n    const $menuMobileButton = document.querySelector(\\\".menu__button\\\");\\r\\n\\r\\n    const $menuMobileItems = $menuMobile.querySelectorAll(\\r\\n      \\\".menu__items .menu__item\\\"\\r\\n    );\\r\\n\\r\\n    $menuMobileItems.forEach(($menuMobileItem) => {\\r\\n      const $itemButton = $menuMobileItem.querySelector(\\\".item__button\\\");\\r\\n      const $itemItems = $menuMobileItem.querySelector(\\\".item__items\\\");\\r\\n      if($itemButton){\\r\\n        $itemButton.addEventListener(\\\"click\\\", (event) => {\\r\\n          event.preventDefault();\\r\\n          const $buttonIcon = $itemButton.querySelector(\\\".button__icon\\\");\\r\\n          $buttonIcon.classList.toggle(\\\"rotate-180\\\");\\r\\n          $itemItems.classList.toggle(\\\"hidden\\\");\\r\\n        });\\r\\n      }\\r\\n    });\\r\\n\\r\\n    if($navbarMobileButton){\\r\\n      $navbarMobileButton.addEventListener(\\\"click\\\", (event) => {\\r\\n        event.preventDefault();\\r\\n        $body.classList.add(\\\"overflow-y-hidden\\\");\\r\\n        $menuMobile.classList.remove(\\\"hidden\\\");\\r\\n        $menuMobile.classList.add(\\\"block\\\");\\r\\n        $menuMobileButton.classList.remove(\\\"hidden\\\");\\r\\n        $navbarMobileButton.classList.add(\\\"hidden\\\");\\r\\n      });\\r\\n    }\\r\\n\\r\\n    if($menuMobileButton){\\r\\n      $menuMobileButton.addEventListener(\\\"click\\\", (event) => {\\r\\n        event.preventDefault();\\r\\n        $body.classList.remove(\\\"overflow-y-hidden\\\");\\r\\n        $menuMobile.classList.remove(\\\"block\\\");\\r\\n        $menuMobile.classList.add(\\\"hidden\\\");\\r\\n        $menuMobileButton.classList.add(\\\"hidden\\\");\\r\\n        $navbarMobileButton.classList.remove(\\\"hidden\\\");\\r\\n      });\\r\\n    }\\r\\n*///# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9oZWFkZXIvbWFpbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBd0I7QUFHakIsSUFBTUMsTUFBTSxHQUFHLFNBQVRBLE1BQU0sR0FBUztFQUMxQixJQUFNQyxPQUFPLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLGVBQWUsQ0FBQztFQUN2RCxJQUFJRixPQUFPLEVBQUU7SUFFWDtJQUNBLElBQU1HLGNBQWMsR0FBRyxTQUFqQkEsY0FBYyxHQUFTO01BQzNCRixRQUFRLENBQUNHLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7O01BRWhEO01BQ0EsSUFBTUMsT0FBTyxHQUFHQyxNQUFNLENBQUNELE9BQU87TUFDOUJOLFFBQVEsQ0FBQ0csSUFBSSxDQUFDSyxLQUFLLENBQUNDLFFBQVEsR0FBRyxPQUFPO01BQ3RDVCxRQUFRLENBQUNHLElBQUksQ0FBQ0ssS0FBSyxDQUFDRSxHQUFHLFFBQVE7TUFDL0JWLFFBQVEsQ0FBQ0csSUFBSSxDQUFDSyxLQUFLLENBQUNHLElBQUksR0FBRyxHQUFHO01BQzlCWCxRQUFRLENBQUNHLElBQUksQ0FBQ0ssS0FBSyxDQUFDSSxLQUFLLEdBQUcsR0FBRztNQUMvQlosUUFBUSxDQUFDRyxJQUFJLENBQUNLLEtBQUssQ0FBQ0ssUUFBUSxHQUFHLFFBQVE7SUFDekMsQ0FBQztJQUVELElBQU1DLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0IsR0FBUztNQUM3QmQsUUFBUSxDQUFDRyxJQUFJLENBQUNDLFNBQVMsQ0FBQ1csTUFBTSxDQUFDLG1CQUFtQixDQUFDO01BRW5ELElBQU1ULE9BQU8sR0FBR1UsSUFBSSxDQUFDQyxHQUFHLENBQUNDLFFBQVEsQ0FBQ2xCLFFBQVEsQ0FBQ0csSUFBSSxDQUFDSyxLQUFLLENBQUNFLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7TUFDcEVWLFFBQVEsQ0FBQ0csSUFBSSxDQUFDSyxLQUFL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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL3Jlc291cmNlcy9zY3JpcHRzL3NlY3Rpb25zL2hlYWRlci9tYWluLmpzPzA1ZjIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdzYXAgZnJvbSBcImdzYXBcIjtcclxuXHJcblxyXG5leHBvcnQgY29uc3QgaGVhZGVyID0gKCkgPT4ge1xyXG4gIGNvbnN0ICRoZWFkZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaGVhZGVyLmhlYWRlclwiKTtcclxuICBpZiAoJGhlYWRlcikge1xyXG5cclxuICAgIC8vIE9uIHRoZSBCdWlsZCBhIEJ1bmRsZSBQYWdlIC0gc3RvcHMgdXNlciBmcm9tIHNjcm9sbGluZyBhbmQgaGlkaW5nIHRoZSB0b3AgbWVudSBuYXZcclxuICAgIGNvbnN0IGxvY2tCYWNrZ3JvdW5kID0gKCkgPT4ge1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJvdmVyZmxvdy15LWhpZGRlblwiKTtcclxuICAgICAgXHJcbiAgICAgIC8vSXBob25lcyBpZ25vcmUgb3ZlcmZsb3cgaGlkZGVuIG9uIGJvZHkgdGFncywgc28gd2UgZG8gdGhpcyBpbnN0ZWFkXHJcbiAgICAgIGNvbnN0IHNjcm9sbFkgPSB3aW5kb3cuc2Nyb2xsWTtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudG9wID0gYDBweGA7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUubGVmdCA9ICcwJztcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5yaWdodCA9ICcwJztcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nOyAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdW5sb2NrQmFja2dyb3VuZCA9ICgpID0+IHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwib3ZlcmZsb3cteS1oaWRkZW5cIik7XHJcbiAgICAgIFxyXG4gICAgICBjb25zdCBzY3JvbGxZID0gTWF0aC5hYnMocGFyc2VJbnQoZG9jdW1lbnQuYm9keS5zdHlsZS50b3AgfHwgMCwgMTApKTtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wb3NpdGlvbiA9IFwiXCI7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudG9wID0gXCJcIjtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5sZWZ0ID0gXCJcIjtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5yaWdodCA9IFwiXCI7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBcIlwiO1xyXG5cclxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcclxuICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7XHJcbiAgICAgICAgICAgICAgdG9wOiBzY3JvbGxZLFxyXG4gICAgICAgICAgICAgIGxlZnQ6IDAsXHJcbiAgICAgICAgICAgICAgYmVoYXZpb3I6IFwiaW5zdGFudFwiIC8vIGlPUyAxNisgLSBhdm9pZHMgdGhlIGF3a3dhcmQgYmxpcCBqdW1wXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9ICBcclxuXHJcbiAgICBjb25zdCBhZGp1c3RUb3BCYXNlZE9uSGVhZGVySGVpZ2h0ID0gKCRoZWFkZXIsJG1lbnVNb2JpbGUpID0+IHtcclxuXHJcbiAgICAgIGxldCAkdGFyZ2V0TWVudSA9ICRtZW51TW9iaWxlO1xyXG5cclxuICAgICAgaWYoISRtZW51TW9iaWxlKXtcclxuICAgICAgICAkdGFyZ2V0TWVudSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIubWVudV9fbW9iaWxlXCIpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKCR0YXJnZXRNZW51KXtcclxuICAgICAgICBjb25zdCBoZWFkZXJIZWlnaHQgPSAkaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcclxuICAgICAgICAkdGFyZ2V0TWVudS5zdHlsZS50b3AgPSBoZWFkZXJIZWlnaHQrXCJweFwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vY2hlY2sgZm9yIGFuZCByZXZlYWwgdGhlIGFubm91bmNlbWVudCBiYXIgaWYgaXQgY2FuXHJcbiAgICBjb25zdCAkYW5ub3VuY2VtZW50QmFyID0gJGhlYWRlci5xdWVyeVNlbGVjdG9yKFwiLmhlYWRlcl9fYW5ub3VuY2VtZW50LWJhclwiKTtcclxuICAgIGlmKCRhbm5vdW5jZW1lbnRCYXIpe1xyXG5cclxuICAgICAgLy9DYW4gd2Ugc2hvdyB0aGUgYW5ub3VuY2VtZW50IGJhcj9cclxuICAgICAgbGV0IHNob3dBbm5vdW5jZW1lbnQgPSB0cnVlO1xyXG4gICAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImFubm91bmNlbWVudENsb3NlZFwiKSl7XHJcbiAgICAgICAgc2hvd0Fubm91bmNlbWVudCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICBpZihzaG93QW5ub3VuY2VtZW50KXtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgLy9SZXZlYWwgQW5pbWF0aW9uXHJcbiAgICAgICAgICAkYW5ub3VuY2VtZW50QmFyLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7ICAgICAgXHJcbiAgICAgICAgICBnc2FwLmZyb21UbygkYW5ub3VuY2VtZW50QmFyLHsgaGVpZ2h0OiAwIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBoZWlnaHQ6IFwiYXV0b1wiLFxyXG4gICAgICAgICAgICAgIGR1cmF0aW9uOiAwLjUsXHJcbiAgICAgICAgICAgICAgZWFzZTogXCJwb3dlcjIub3V0XCIsXHJcbiAgICAgICAgICAgICAgb25Db21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgYWRqdXN0VG9wQmFzZWRPbkhlYWRlckhlaWdodCgkaGVhZGVyKTtcclxuICAgICAgICAgICAgICB9LCAgXHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vRmluZCBhbmQgYmluZCB0aGUgY2xvc2UgYnV0dG9uXHJcbiAgICAgICAgY29uc3QgJGFubm91bmNlbWVudENsb3NlID0gJGFubm91bmNlbWVudEJhci5xdWVyeVNlbGVjdG9yKFwiLmhlYWRlcl9fYW5ub3VuY2VtZW50LWJhci1jbG9zZVwiKTtcclxuICAgICAgICBpZigkYW5ub3VuY2VtZW50Q2xvc2Upe1xyXG4gICAgICAgICAgJGFubm91bmNlbWVudENsb3NlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgICAvL0hpZGUgYW5kIHByZXZlbnQgaXQgZnJvbSBzaG93aW5nIG9uIHJlbG9hZFxyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImFubm91bmNlbWVudENsb3NlZFwiLFwidHJ1ZVwiKTtcclxuXHJcbiAgICAgICAgICAgIGdzYXAuZnJvbVRvKCRhbm5vdW5jZW1lbnRCYXIsXHJcbiAgICAgICAgICAgICAgeyBoZWlnaHQ6ICRhbm5vdW5jZW1lbnRCYXIub2Zmc2V0SGVpZ2h0IH0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxyXG4gICAgICAgICAgICAgICAgZHVyYXRpb246IDAuNSxcclxuICAgICAgICAgICAgICAgIGVhc2U6IFwicG93ZXIyLmluXCIsXHJcbiAgICAgICAgICAgICAgICBvbkNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICRhbm5vdW5jZW1lbnRCYXIuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICAgYWRqdXN0VG9wQmFzZWRPbkhlYWRlckhlaWdodCgkaGVhZGVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCAkYm9keSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpO1xyXG5cclxuICAgIGNvbnN0IGNhcnQgPSB3aW5kb3cuQ2FyYm9uLkNhcnQ7XHJcblxyXG4gICAgLypcclxuICAgIGlmIChjYXJ0LnVzZUNhcnRBc2lkZSkge1xyXG4gICAgICBjb25zdCAkY2FydEFzaWRlQmFja2dyb3VuZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgXCIuY2FydC1hc2lkZV9fYmFja2dyb3VuZFwiXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0ICRjYXJ0QXNpZGUgPSAkY2FydEFzaWRlQmFja2dyb3VuZC5xdWVyeVNlbGVjdG9yKFwiYXNpZGUuY2FydC1hc2lkZVwiKTtcclxuICAgICAgY29uc3QgJGRlc2t0b3BDYXJ0TGluayA9ICRoZWFkZXIucXVlcnlTZWxlY3RvcihcclxuICAgICAgICBcIi5uYXZiYXJfX2Rlc2t0b3AgLmhlYWRlcl9fY2FydC1saW5rXCJcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgJG1vYmlsZUNhcnRMaW5rID0gJGhlYWRlci5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgIFwiLm5hdmJhcl9fbW9iaWxlIC5oZWFkZXJfX2NhcnQtbGlua1wiXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZigkZGVza3RvcENhcnRMaW5rKXtcclxuICAgICAgICAkZGVza3RvcENhcnRMaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcclxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAkYm9keS5jbGFzc0xpc3QuYWRkKFwib3ZlcmZsb3cteS1oaWRkZW5cIik7XHJcbiAgICAgICAgICAkY2FydEFzaWRlQmFja2dyb3VuZC5jbGFzc0xpc3QucmVtb3ZlKFwicG9pbnRlci1ldmVudHMtbm9uZVwiKTtcclxuICAgICAgICAgICRjYXJ0QXNpZGVCYWNrZ3JvdW5kLmNsYXNzTGlzdC5hZGQoXCJiZy1ibGFja1wiLCBcImJnLW9wYWNpdHktNDBcIik7XHJcbiAgICAgICAgICAkY2FydEFzaWRlLmNsYXNzTGlzdC5yZW1vdmUoXHJcbiAgICAgICAgICAgIFwidHJhbnNsYXRlLXgtZnVsbFwiLFxyXG4gICAgICAgICAgICBcInBvbnRlci1ldmVudHMtbm9uZVwiLFxyXG4gICAgICAgICAgICBcImhpZGRlblwiXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZigkbW9iaWxlQ2FydExpbmspe1xyXG4gICAgICAgICRtb2JpbGVDYXJ0TGluay5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgJGJvZHkuY2xhc3NMaXN0LmFkZChcIm92ZXJmbG93LXktaGlkZGVuXCIpO1xyXG4gICAgICAgICAgJGNhcnRBc2lkZUJhY2tncm91bmQuY2xhc3NMaXN0LnJlbW92ZShcInBvaW50ZXItZXZlbnRzLW5vbmVcIik7XHJcbiAgICAgICAgICAkY2FydEFzaWRlQmFja2dyb3VuZC5jbGFzc0xpc3QuYWRkKFwiYmctYmxhY2tcIiwgXCJiZy1vcGFjaXR5LTQwXCIpO1xyXG4gICAgICAgICAgJGNhcnRBc2lkZS5jbGFzc0xpc3QucmVtb3ZlKFxyXG4gICAgICAgICAgICBcInRyYW5zbGF0ZS14LWZ1bGxcIixcclxuICAgICAgICAgICAgXCJwb250ZXItZXZlbnRzLW5vbmVcIixcclxuICAgICAgICAgICAgXCJoaWRkZW5cIlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgKi9cclxuXHJcbiAgICBjb25zdCAkbWVudURlc2t0b3AgPSAkaGVhZGVyLnF1ZXJ5U2VsZWN0b3IoXCIubmF2YmFyX19kZXNrdG9wXCIpO1xyXG4gICAgaWYoJG1lbnVEZXNrdG9wKXtcclxuICAgICAgXHJcbiAgICAgIC8vRmluZCBhbGwgSXRlbXMgaW4gdGhlIG1lbnVcclxuICAgICAgY29uc3QgJG1lbnVMaW5rQ29udGFpbmVycyA9ICRtZW51RGVza3RvcC5xdWVyeVNlbGVjdG9yQWxsKFwiLm1lbnUtbGluay1jb250YWluZXJcIik7XHJcbiAgICAgIGNvbnN0ICRkZXNrdG9wQmcgPSAkaGVhZGVyLnF1ZXJ5U2VsZWN0b3IoXCIuZGVza3RvcC1kcm9wZG93bi1iZ1wiKTtcclxuXHJcbiAgICAgIGlmKCRtZW51TGlua0NvbnRhaW5lcnMubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgICAgIGNvbnN0IGZhZGVPdXRNYWluTWVudUxpbmtzID0gKCRtZW51TGlua0NvbnRhaW5lcnMpID0+IHtcclxuXHJcbiAgICAgICAgICAkbWVudUxpbmtDb250YWluZXJzLmZvckVhY2goKCRtbkxua0NudG5yKSA9PiB7XHJcbiAgICAgICAgICAgIGlmKCRtbkxua0NudG5yLmNsYXNzTGlzdC5jb250YWlucyhcImRyb3Bkb3duLW9wZW5cIikpe1xyXG4gICAgICAgICAgICAgIGNvbnN0ICRkcm9wRG93bk1lbnUgPSAkbW5MbmtDbnRuci5xdWVyeVNlbGVjdG9yKFwiLmRlc2t0b3AtbWVudS1kcm9wZG93bi1pdGVtIC5kZXNrdG9wLWRyb3Bkb3duLW1lbnVcIik7XHJcbiAgICAgICAgICAgICAgaWYoJGRyb3BEb3duTWVudSl7XHJcbiAgICAgICAgICAgICAgICAkZHJvcERvd25NZW51LmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAkbW5MbmtDbnRuci5jbGFzc0xpc3QucmVtb3ZlKFwiZHJvcGRvd24tb3BlblwiKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vUmVtb3ZlIEZhZGVkIGNsYXNzXHJcbiAgICAgICAgICAgICRtbkxua0NudG5yLmNsYXNzTGlzdC5yZW1vdmUoXCJmYWRlZFwiKTtcclxuICAgICAgICAgIH0pOyAgICAgICAgICBcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAkbWVudUxpbmtDb250YWluZXJzLmZvckVhY2goKCRtZW51TGlua0NvbnRhaW5lcikgPT4ge1xyXG5cclxuICAgICAgICAgIC8vSGFuZGxlIGhvdmVyaW5nIGEgTWVudSBJdGVtXHJcbiAgICAgICAgICAkbWVudUxpbmtDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwoZSkgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCBpdGVtcyBhbmQgY2xvc2UgYW55IGRyb3AgZG93biB0aGF0IG1heSBiZSBvcGVuXHJcbiAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIEZhZGVkIHN0YXR1cyBzbyB0aGF0IGFsbCBhcmUgdmlzaWJsZVxyXG5cclxuICAgICAgICAgICAgJG1lbnVMaW5rQ29udGFpbmVycy5mb3JFYWNoKCgkbW5MbmtDbnRucikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmKCRtbkxua0NudG5yLmNsYXNzTGlzdC5jb250YWlucyhcImRyb3Bkb3duLW9wZW5cIikpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAkbW5MbmtDbnRuci5jbGFzc0xpc3QucmVtb3ZlKFwiZHJvcGRvd24tb3BlblwiKTtcclxuICAgICAgICAgICAgICAgICRtbkxua0NudG5yLmNsYXNzTGlzdC5hZGQoXCJmYWRlZFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCAkZXhpc3RpbmdEcm9wZG93biA9ICRtbkxua0NudG5yLnF1ZXJ5U2VsZWN0b3IoXCIuZGVza3RvcC1kcm9wZG93bi1tZW51XCIpO1xyXG4gICAgICAgICAgICAgICAgaWYoJGV4aXN0aW5nRHJvcGRvd24pe1xyXG4gICAgICAgICAgICAgICAgICAkZXhpc3RpbmdEcm9wZG93bi5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgJG1uTG5rQ250bnIuY2xhc3NMaXN0LnJlbW92ZShcImZhZGVkXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgIC8vIFRoZW4gd2UgbmVlZCB0byBmYWRlIG91dCBvdGhlciBtZW51IGl0ZW1zXHJcbiAgICAgICAgICAgIC8vIE9wZW4gZHJvcGRvd24gaWYgd2UgaGF2ZSBvbmUgdG8gb3BlblxyXG4gICAgICAgICAgICAkbWVudUxpbmtDb250YWluZXJzLmZvckVhY2goKCRtbkxua0NudG5yKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYoJG1uTG5rQ250bnIuZGF0YXNldC5saW5rVGl0bGUgIT09ICRtZW51TGlua0NvbnRhaW5lci5kYXRhc2V0LmxpbmtUaXRsZSl7XHJcbiAgICAgICAgICAgICAgICAkbW5MbmtDbnRuci5jbGFzc0xpc3QuYWRkKFwiZmFkZWRcIik7XHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgJGRyb3BEb3duTWVudUxpbmsgPSAkbWVudUxpbmtDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5kZXNrdG9wLW1lbnUtZHJvcGRvd24taXRlbVwiKTtcclxuICAgICAgICAgICAgICAgIGlmKCRkcm9wRG93bk1lbnVMaW5rKXtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgJGRyb3BEb3duTWVudSA9ICRkcm9wRG93bk1lbnVMaW5rLnF1ZXJ5U2VsZWN0b3IoXCIuZGVza3RvcC1kcm9wZG93bi1tZW51XCIpO1xyXG4gICAgICAgICAgICAgICAgICBpZigkZHJvcERvd25NZW51KXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJG1lbnVMaW5rQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJkcm9wZG93bi1vcGVuXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL1Nob3cgdGhlIERyb3AgRG93blxyXG4gICAgICAgICAgICAgICAgICAgICRkcm9wRG93bk1lbnUuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9PcGVuIGludmlzaWJsZSBIaXR6b25lXHJcbiAgICAgICAgICAgICAgICAgICAgJGRlc2t0b3BCZy5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vTG9vcCB0aHJvdWdoIGFsbCBtZW51cyBpdGVtcywgaWYgaXQncyBub3QgdGhlIG9uZSBiZWluZyBob3ZlcmVkIE9SIGRvZXNuJ3QgY3VycmVudGx5IGhhdmUgYSBkcm9wIGRvd24gb3BlbiAtIGZhZGUgb3V0XHJcblxyXG4gICAgICAgICAgICAvKlxyXG5cclxuICAgICAgICAgICAgbGV0IGRyb3BEb3duSXNPcGVuID0gZmFsc2U7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICRtZW51TGlua0NvbnRhaW5lcnMuZm9yRWFjaCgoJG1uTG5rQ250bnIpID0+IHtcclxuICAgICAgICAgICAgICBpZigkbW5MbmtDbnRuci5jbGFzc0xpc3QuY29udGFpbnMoXCJkcm9wZG93bi1vcGVuXCIpKXtcclxuICAgICAgICAgICAgICAgIGRyb3BEb3duSXNPcGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJG1lbnVMaW5rQ29udGFpbmVycy5mb3JFYWNoKCgkbW5MbmtDbnRucikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmKGRyb3BEb3duSXNPcGVuKXtcclxuXHJcbiAgICAgICAgICAgICAgICAvL1VuZmFkZSB5b3VyIGhvdmVyZWQgb3B0aW9uXHJcbiAgICAgICAgICAgICAgICBpZigkbW5MbmtDbnRuci5kYXRhc2V0LmxpbmtUaXRsZSA9PT0gJG1lbnVMaW5rQ29udGFpbmVyLmRhdGFzZXQubGlua1RpdGxlKXtcclxuICAgICAgICAgICAgICAgICAgJG1uTG5rQ250bnIuY2xhc3NMaXN0LnJlbW92ZShcImZhZGVkXCIpOyAgICBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGlmKCRtbkxua0NudG5yLmRhdGFzZXQubGlua1RpdGxlICE9PSAkbWVudUxpbmtDb250YWluZXIuZGF0YXNldC5saW5rVGl0bGUpe1xyXG4gICAgICAgICAgICAgICAgICAkbW5MbmtDbnRuci5jbGFzc0xpc3QuYWRkKFwiZmFkZWRcIik7ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICovXHJcblxyXG4gICAgICAgICAgICAvL0RvZXMgdGhpcyBpdGVtIGhhdmUgYSBEcm9wZG93biB0byBvcGVuPyBcclxuICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgY29uc3QgJGRyb3BEb3duTWVudUxpbmsgPSAkbWVudUxpbmtDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5kZXNrdG9wLW1lbnUtZHJvcGRvd24taXRlbVwiKTtcclxuICAgICAgICAgICAgaWYoJGRyb3BEb3duTWVudUxpbmspe1xyXG4gICAgICAgICAgICAgIGNvbnN0ICRkcm9wRG93bk1lbnUgPSAkZHJvcERvd25NZW51TGluay5xdWVyeVNlbGVjdG9yKFwiLmRlc2t0b3AtZHJvcGRvd24tbWVudVwiKTtcclxuICAgICAgICAgICAgICBpZigkZHJvcERvd25NZW51KXtcclxuXHJcbiAgICAgICAgICAgICAgICAvL0lzIHRoZXJlIGEgZGlmZmVyZW50IGRyb3Bkb3duIHRvIGNsb3NlP1xyXG4gICAgICAgICAgICAgICAgLy9pZihkcm9wRG93bklzT3Blbil7XHJcbiAgICAgICAgICAgICAgICAgICRtZW51TGlua0NvbnRhaW5lcnMuZm9yRWFjaCgoJG1uTG5rQ250bnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZigkbW5MbmtDbnRuci5jbGFzc0xpc3QuY29udGFpbnMoXCJkcm9wZG93bi1vcGVuXCIpKXtcclxuICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgJG1uTG5rQ250bnIuY2xhc3NMaXN0LnJlbW92ZShcImRyb3Bkb3duLW9wZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAkbW5MbmtDbnRuci5jbGFzc0xpc3QuYWRkKFwiZmFkZWRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgJGV4aXN0aW5nRHJvcGRvd24gPSAkbW5MbmtDbnRuci5xdWVyeVNlbGVjdG9yKFwiLmRlc2t0b3AtZHJvcGRvd24tbWVudVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmKCRleGlzdGluZ0Ryb3Bkb3duKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJGV4aXN0aW5nRHJvcGRvd24uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgLy99XHJcblxyXG4gICAgICAgICAgICAgICAgLy9TaG93IFRvcCBMZXZlbCBJdGVtIHRoYXQgaXQncyBvcGVuXHJcbiAgICAgICAgICAgICAgICAkbWVudUxpbmtDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImRyb3Bkb3duLW9wZW5cIik7XHJcblxyXG4gICAgICAgICAgICAgICAgLy9TaG93IHRoZSBEcm9wIERvd25cclxuICAgICAgICAgICAgICAgICRkcm9wRG93bk1lbnUuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvL09wZW4gaW52aXNpYmxlIEhpdHpvbmVcclxuICAgICAgICAgICAgICAgICRkZXNrdG9wQmcuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKi9cclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICRtZW51TGlua0NvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwibW91c2VsZWF2ZVwiLChlKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBkcm9wZG93bklzT3BlbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgJG1lbnVMaW5rQ29udGFpbmVycy5mb3JFYWNoKCgkbW5MbmtDbnRucikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmKCRtbkxua0NudG5yLmNsYXNzTGlzdC5jb250YWlucyhcImRyb3Bkb3duLW9wZW5cIikpe1xyXG4gICAgICAgICAgICAgICAgZHJvcGRvd25Jc09wZW4gPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH0gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmKGRyb3Bkb3duSXNPcGVuKXtcclxuICAgICAgICAgICAgICBpZighJG1lbnVMaW5rQ29udGFpbmVyLmNsYXNzTGlzdC5jb250YWlucyhcImRyb3Bkb3duLW9wZW5cIikpe1xyXG4gICAgICAgICAgICAgICAgJG1lbnVMaW5rQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJmYWRlZFwiKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgIC8vVW5mYWRlIGV2ZXJ5IGxpbmtcclxuICAgICAgICAgICAgICAkbWVudUxpbmtDb250YWluZXJzLmZvckVhY2goKCRtbkxua0NudG5yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAkbW5MbmtDbnRuci5jbGFzc0xpc3QucmVtb3ZlKFwiZmFkZWRcIik7XHJcbiAgICAgICAgICAgICAgfSk7ICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvL0hhbmRsZSBDbG9zaW5nIHRoZSBEcm9wZG93bnNcclxuICAgICAgICAgICRkZXNrdG9wQmcuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgJGRlc2t0b3BCZy5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgICAgICAgICAgJG1lbnVMaW5rQ29udGFpbmVycy5mb3JFYWNoKCgkbW5MbmtDbnRucikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmKCRtbkxua0NudG5yLmNsYXNzTGlzdC5jb250YWlucyhcImRyb3Bkb3duLW9wZW5cIikpe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgJGRyb3BEb3duTWVudSA9ICRtbkxua0NudG5yLnF1ZXJ5U2VsZWN0b3IoXCIuZGVza3RvcC1tZW51LWRyb3Bkb3duLWl0ZW0gLmRlc2t0b3AtZHJvcGRvd24tbWVudVwiKTtcclxuICAgICAgICAgICAgICAgIGlmKCRkcm9wRG93bk1lbnUpe1xyXG4gICAgICAgICAgICAgICAgICAkZHJvcERvd25NZW51LmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICRtbkxua0NudG5yLmNsYXNzTGlzdC5yZW1vdmUoXCJkcm9wZG93bi1vcGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgLy9SZW1vdmUgRmFkZWQgY2xhc3NcclxuICAgICAgICAgICAgICAkbW5MbmtDbnRuci5jbGFzc0xpc3QucmVtb3ZlKFwiZmFkZWRcIik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vSG92ZXJpbmcgb3ZlciB0aGUgU2l0ZSBMb2dvLCBvciBhbnkgaXRlbXMgZnJvbSB0aGUgcmlnaHQgbmF2YmFyIHNob3VsZCBhbHNvIHVuZmFkZSBhbmQgaGlkZSBkcm9wZG93bnNcclxuICAgICAgICBjb25zdCAkc2l0ZUxvZ28gPSAkbWVudURlc2t0b3AucXVlcnlTZWxlY3RvcihcIi5zaXRlLWxvZ29cIik7XHJcbiAgICAgICAgY29uc3QgbmF2YmFyUmlnaHRMaW5rcyA9ICRtZW51RGVza3RvcC5xdWVyeVNlbGVjdG9yQWxsKFwiLm5hdmJhcl9fcmlnaHQgYVwiKTtcclxuXHJcbiAgICAgICAgaWYoJHNpdGVMb2dvKXtcclxuICAgICAgICAgICRzaXRlTG9nby5hZGRFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLChlKSA9PiB7XHJcbiAgICAgICAgICAgIGZhZGVPdXRNYWluTWVudUxpbmtzKCRtZW51TGlua0NvbnRhaW5lcnMpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKG5hdmJhclJpZ2h0TGlua3MubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICBuYXZiYXJSaWdodExpbmtzLmZvckVhY2goKG5hdmJhclJpZ2h0TGluaykgPT4ge1xyXG4gICAgICAgICAgICBuYXZiYXJSaWdodExpbmsuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICBmYWRlT3V0TWFpbk1lbnVMaW5rcygkbWVudUxpbmtDb250YWluZXJzKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgY29uc3QgJG5hdmJhck1vYmlsZSA9ICRoZWFkZXIucXVlcnlTZWxlY3RvcihcIm5hdi5uYXZiYXIgLm5hdmJhcl9fbW9iaWxlXCIpO1xyXG4gICAgaWYoJG5hdmJhck1vYmlsZSl7XHJcbiAgICAgIGNvbnN0ICRtZW51TW9iaWxlQnV0dG9uID0gJG5hdmJhck1vYmlsZS5xdWVyeVNlbGVjdG9yKFwiLm1lbnVfX2J1dHRvblwiKTtcclxuICAgICAgY29uc3QgJG1lbnVNb2JpbGUgPSAkaGVhZGVyLnF1ZXJ5U2VsZWN0b3IoXCIubWVudV9fbW9iaWxlXCIpO1xyXG5cclxuICAgICAgaWYoJG1lbnVNb2JpbGVCdXR0b24pe1xyXG5cclxuICAgICAgICBjb25zdCAkbWVudU1vYmlsZUJ1dHRvbkhhbWJ1cmdlciA9ICRtZW51TW9iaWxlQnV0dG9uLnF1ZXJ5U2VsZWN0b3IoXCIubWVudS1oYW1idXJnZXJcIik7XHJcbiAgICAgICAgY29uc3QgJG1lbnVNb2JpbGVCdXR0b25DbG9zZSA9ICRtZW51TW9iaWxlQnV0dG9uLnF1ZXJ5U2VsZWN0b3IoXCIubWVudS1jbG9zZVwiKTtcclxuXHJcbiAgICAgICAgYWRqdXN0VG9wQmFzZWRPbkhlYWRlckhlaWdodCgkaGVhZGVyLCRtZW51TW9iaWxlKTtcclxuXHJcbiAgICAgICAgLy9PdGhlciBhcmVhcyB0aGF0IG5lZWRlZCB0byBiZSBjYXRlcmVkIGZvcjpcclxuICAgICAgICBjb25zdCAkZml4ZWRCYWJCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmZpeGVkLWJhYi1idXR0b25cIik7XHJcbiAgICAgICAgY29uc3QgJGJ1bmRsZUluZm8gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmJ1aWxkLWEtYnVuZGxlX19pbmZvLWNvbnRhaW5lclwiKTtcclxuXHJcbiAgICAgICAgaWYoJG1lbnVNb2JpbGVCdXR0b25IYW1idXJnZXIgJiYgJG1lbnVNb2JpbGVCdXR0b25DbG9zZSl7XHJcblxyXG4gICAgICAgICAgJG1lbnVNb2JpbGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKGUpID0+IHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgaWYoJG1lbnVNb2JpbGUuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKXtcclxuXHJcbiAgICAgICAgICAgICAgLy9IaWRlIE1vYmlsZSBNZW51XHJcbiAgICAgICAgICAgICAgJG1lbnVNb2JpbGUuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAkbWVudU1vYmlsZUJ1dHRvbkhhbWJ1cmdlci5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICRtZW51TW9iaWxlQnV0dG9uQ2xvc2UuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYoJGZpeGVkQmFiQnV0dG9uKXtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgICAgJGZpeGVkQmFiQnV0dG9uLnN0eWxlLnpJbmRleCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB9LDUwMCk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZigkYnVuZGxlSW5mbyl7ICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgICAkYnVuZGxlSW5mby5zdHlsZS56SW5kZXggPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgfSw1MDApOyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHVubG9ja0JhY2tncm91bmQoKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuXHJcbiAgICAgICAgICAgICAgYWRqdXN0VG9wQmFzZWRPbkhlYWRlckhlaWdodCgkaGVhZGVyLCRtZW51TW9iaWxlKTtcclxuICBcclxuXHJcbiAgICAgICAgICAgICAgLy9TaG93IE1vYmlsZSBNZW51XHJcbiAgICAgICAgICAgICAgJG1lbnVNb2JpbGUuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAkbWVudU1vYmlsZUJ1dHRvbkhhbWJ1cmdlci5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICRtZW51TW9iaWxlQnV0dG9uQ2xvc2UuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYoJGZpeGVkQmFiQnV0dG9uKXtcclxuICAgICAgICAgICAgICAgICRmaXhlZEJhYkJ1dHRvbi5zdHlsZS56SW5kZXggPSA1MDA7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZigkYnVuZGxlSW5mbyl7XHJcbiAgICAgICAgICAgICAgICAkYnVuZGxlSW5mby5zdHlsZS56SW5kZXggPSAxMDtcclxuICAgICAgICAgICAgICAgIGxvY2tCYWNrZ3JvdW5kKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvL0JpbmQgYW55IGRyb3AgZG93bnMgdGhhdCBhcmUgaW4gdGhlIG1vYmlsZSBtZW51XHJcbiAgICAgICAgICBjb25zdCAkbW9iaWxlTWVudUFjY29yZGlvbnMgPSAkbWVudU1vYmlsZS5xdWVyeVNlbGVjdG9yQWxsKFwiLm1vYmlsZS1tZW51LWRyb3Bkb3duXCIpO1xyXG5cclxuICAgICAgICAgIGlmKCRtb2JpbGVNZW51QWNjb3JkaW9ucy5sZW5ndGggPiAwKXtcclxuXHJcbiAgICAgICAgICAgICRtb2JpbGVNZW51QWNjb3JkaW9ucy5mb3JFYWNoKCgkbW9iaWxlTWVudUFjY29yZGlvbikgPT4ge1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCAkYWNjb3JkaW9uVHJpZ2dlciA9ICRtb2JpbGVNZW51QWNjb3JkaW9uLnF1ZXJ5U2VsZWN0b3IoXCIubW9iaWxlLW1lbnUtZHJvcGRvd24tdHJpZ2dlclwiKTtcclxuICAgICAgICAgICAgICBpZigkYWNjb3JkaW9uVHJpZ2dlcil7XHJcbiAgICAgICAgICAgICAgICAkYWNjb3JkaW9uVHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICRtb2JpbGVNZW51QWNjb3JkaW9uLmNsYXNzTGlzdC50b2dnbGUoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGhlYWRlcjtcclxuXHJcblxyXG4vKlxyXG4gIENvbW1lbnRlZCBvdXQgQ2FyYm9uOlxyXG5cclxuICBjb25zdCAkbG9jYWxpemF0aW9uU2VsZWN0b3JzID0gJGhlYWRlci5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgXCIubG9jYWxpemF0aW9uLXNlbGVjdG9yXCJcclxuICApO1xyXG4gICRsb2NhbGl6YXRpb25TZWxlY3RvcnMuZm9yRWFjaCgoJGxvY2FsaXphdGlvblNlbGVjdG9yKSA9PiB7XHJcbiAgICBjb25zdCAkbGFuZ3VhZ2UgPSAkbG9jYWxpemF0aW9uU2VsZWN0b3IucXVlcnlTZWxlY3RvcihcclxuICAgICAgXCIubG9jYWxpemF0aW9uLXNlbGVjdG9yX19sYW5nYXVnZVwiXHJcbiAgICApO1xyXG4gICAgaWYgKCRsYW5ndWFnZSkge1xyXG4gICAgICBjb25zdCAkbGFuZ3VhZ2VCdXR0b24gPSAkbGFuZ3VhZ2UucXVlcnlTZWxlY3RvcihcIi5sYW5ndWFnZV9fYnV0dG9uXCIpO1xyXG4gICAgICBjb25zdCAkbGFuZ3VhZ2VEcm9wZG93biA9ICRsYW5ndWFnZS5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgIFwiLmxhbmd1YWdlX19kcm9wZG93blwiXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0ICRsYW5ndWFnZUZvcm0gPVxyXG4gICAgICAgICRsYW5ndWFnZURyb3Bkb3duLnF1ZXJ5U2VsZWN0b3IoXCIuZHJvcGRvd25fX2Zvcm1cIik7XHJcbiAgICAgIGNvbnN0ICRmb3JtQnV0dG9ucyA9ICRsYW5ndWFnZUZvcm0ucXVlcnlTZWxlY3RvckFsbChcIi5mb3JtX19idXR0b25cIik7XHJcbiAgICAgIGNvbnN0ICRmb3JtSW5wdXQgPSAkbGFuZ3VhZ2VGb3JtLnF1ZXJ5U2VsZWN0b3IoXCIuZm9ybV9faW5wdXRcIik7XHJcblxyXG4gICAgICAkbGFuZ3VhZ2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldmVudCkgPT4ge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgJGxhbmd1YWdlRHJvcGRvd24uY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAkZm9ybUJ1dHRvbnMuZm9yRWFjaCgoJGZvcm1CdXR0b24pID0+IHtcclxuICAgICAgICAkZm9ybUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgJGZvcm1JbnB1dC52YWx1ZSA9ICRmb3JtQnV0dG9uLmRhdGFzZXQudmFsdWU7XHJcbiAgICAgICAgICAkbGFuZ3VhZ2VGb3JtLnN1Ym1pdCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgICRib2R5LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBldmVudC50YXJnZXQgIT0gJGxhbmd1YWdlQnV0dG9uICYmXHJcbiAgICAgICAgICAoZXZlbnQudGFyZ2V0ID09ICRsYW5ndWFnZURyb3Bkb3duIHx8XHJcbiAgICAgICAgICAgICEkbGFuZ3VhZ2VEcm9wZG93bi5jb250YWlucyhldmVudC50YXJnZXQpKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgJGxhbmd1YWdlRHJvcGRvd24uY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0ICRsb2NhdGlvbiA9ICRsb2NhbGl6YXRpb25TZWxlY3Rvci5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICBcIi5sb2NhbGl6YXRpb24tc2VsZWN0b3JfX2xvY2F0aW9uXCJcclxuICAgICk7XHJcbiAgICBpZiAoJGxvY2F0aW9uKSB7XHJcbiAgICAgIGNvbnN0ICRsb2NhdGlvbkJ1dHRvbiA9ICRsb2NhdGlvbi5xdWVyeVNlbGVjdG9yKFwiLmxvY2F0aW9uX19idXR0b25cIik7XHJcbiAgICAgIGNvbnN0ICRsb2NhdGlvbkRyb3Bkb3duID0gJGxvY2F0aW9uLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgXCIubG9jYXRpb25fX2Ryb3Bkb3duXCJcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgJGxvY2F0aW9uRm9ybSA9XHJcbiAgICAgICAgJGxvY2F0aW9uRHJvcGRvd24ucXVlcnlTZWxlY3RvcihcIi5kcm9wZG93bl9fZm9ybVwiKTtcclxuICAgICAgY29uc3QgJGZvcm1CdXR0b25zID0gJGxvY2F0aW9uRm9ybS5xdWVyeVNlbGVjdG9yQWxsKFwiLmZvcm1fX2J1dHRvblwiKTtcclxuICAgICAgY29uc3QgJGZvcm1JbnB1dCA9ICRsb2NhdGlvbkZvcm0ucXVlcnlTZWxlY3RvcihcIi5mb3JtX19pbnB1dFwiKTtcclxuXHJcbiAgICAgICRsb2NhdGlvbkJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAkbG9jYXRpb25Ecm9wZG93bi5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgICRmb3JtQnV0dG9ucy5mb3JFYWNoKCgkZm9ybUJ1dHRvbikgPT4ge1xyXG4gICAgICAgICRmb3JtQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcclxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAkZm9ybUlucHV0LnZhbHVlID0gJGZvcm1CdXR0b24uZGF0YXNldC52YWx1ZTtcclxuICAgICAgICAgICRsb2NhdGlvbkZvcm0uc3VibWl0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgJGJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldmVudCkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGV2ZW50LnRhcmdldCAhPSAkbG9jYXRpb25CdXR0b24gJiZcclxuICAgICAgICAgIChldmVudC50YXJnZXQgPT0gJGxvY2F0aW9uRHJvcGRvd24gfHxcclxuICAgICAgICAgICAgISRsb2NhdGlvbkRyb3Bkb3duLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAkbG9jYXRpb25Ecm9wZG93bi5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0ICRuYXZiYXJNb2JpbGVCdXR0b24gPSAkbmF2YmFyTW9iaWxlLnF1ZXJ5U2VsZWN0b3IoXCIubmF2YmFyX19idXR0b25cIik7XHJcbiAgICBjb25zdCAkbWVudU1vYmlsZUJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIubWVudV9fYnV0dG9uXCIpO1xyXG5cclxuICAgIGNvbnN0ICRtZW51TW9iaWxlSXRlbXMgPSAkbWVudU1vYmlsZS5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICBcIi5tZW51X19pdGVtcyAubWVudV9faXRlbVwiXHJcbiAgICApO1xyXG5cclxuICAgICRtZW51TW9iaWxlSXRlbXMuZm9yRWFjaCgoJG1lbnVNb2JpbGVJdGVtKSA9PiB7XHJcbiAgICAgIGNvbnN0ICRpdGVtQnV0dG9uID0gJG1lbnVNb2JpbGVJdGVtLnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbV9fYnV0dG9uXCIpO1xyXG4gICAgICBjb25zdCAkaXRlbUl0ZW1zID0gJG1lbnVNb2JpbGVJdGVtLnF1ZXJ5U2VsZWN0b3IoXCIuaXRlbV9faXRlbXNcIik7XHJcbiAgICAgIGlmKCRpdGVtQnV0dG9uKXtcclxuICAgICAgICAkaXRlbUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgY29uc3QgJGJ1dHRvbkljb24gPSAkaXRlbUJ1dHRvbi5xdWVyeVNlbGVjdG9yKFwiLmJ1dHRvbl9faWNvblwiKTtcclxuICAgICAgICAgICRidXR0b25JY29uLmNsYXNzTGlzdC50b2dnbGUoXCJyb3RhdGUtMTgwXCIpO1xyXG4gICAgICAgICAgJGl0ZW1JdGVtcy5jbGFzc0xpc3QudG9nZ2xlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZigkbmF2YmFyTW9iaWxlQnV0dG9uKXtcclxuICAgICAgJG5hdmJhck1vYmlsZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAkYm9keS5jbGFzc0xpc3QuYWRkKFwib3ZlcmZsb3cteS1oaWRkZW5cIik7XHJcbiAgICAgICAgJG1lbnVNb2JpbGUuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuICAgICAgICAkbWVudU1vYmlsZS5jbGFzc0xpc3QuYWRkKFwiYmxvY2tcIik7XHJcbiAgICAgICAgJG1lbnVNb2JpbGVCdXR0b24uY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuICAgICAgICAkbmF2YmFyTW9iaWxlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCRtZW51TW9iaWxlQnV0dG9uKXtcclxuICAgICAgJG1lbnVNb2JpbGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldmVudCkgPT4ge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgJGJvZHkuY2xhc3NMaXN0LnJlbW92ZShcIm92ZXJmbG93LXktaGlkZGVuXCIpO1xyXG4gICAgICAgICRtZW51TW9iaWxlLmNsYXNzTGlzdC5yZW1vdmUoXCJibG9ja1wiKTtcclxuICAgICAgICAkbWVudU1vYmlsZS5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICRtZW51TW9iaWxlQnV0dG9uLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgJG5hdmJhck1vYmlsZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuKi8iXSwibmFtZXMiOlsiZ3NhcCIsImhlYWRlciIsIiRoZWFkZXIiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJsb2NrQmFja2dyb3VuZCIsImJvZHkiLCJjbGFzc0xpc3QiLCJhZGQiLCJzY3JvbGxZIiwid2luZG93Iiwic3R5bGUiLCJwb3NpdGlvbiIsInRvcCIsImxlZnQiLCJyaWdodCIsIm92ZXJmbG93IiwidW5sb2NrQmFja2dyb3VuZCIsInJlbW92ZSIsIk1hdGgiLCJhYnMiLCJwYXJzZUludCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInNjcm9sbFRvIiwiYmVoYXZpb3IiLCJhZGp1c3RUb3BCYXNlZE9uSGVhZGVySGVpZ2h0IiwiJG1lbnVNb2JpbGUiLCIkdGFyZ2V0TWVudSIsImhlYWRlckhlaWdodCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImhlaWdodCIsIiRhbm5vdW5jZW1lbnRCYXIiLCJzaG93QW5ub3VuY2VtZW50IiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsImFkZEV2ZW50TGlzdGVuZXIiLCJmcm9tVG8iLCJkdXJhdGlvbiIsImVhc2UiLCJvbkNvbXBsZXRlIiwiJGFubm91bmNlbWVudENsb3NlIiwiZSIsInByZXZlbnREZWZhdWx0Iiwic2V0SXRlbSIsIm9mZnNldEhlaWdodCIsIiRib2R5IiwiY2FydCIsIkNhcmJvbiIsIkNhcnQiLCIkbWVudURlc2t0b3AiLCIkbWVudUxpbmtDb250YWluZXJzIiwicXVlcnlTZWxlY3RvckFsbCIsIiRkZXNrdG9wQmciLCJsZW5ndGgiLCJmYWRlT3V0TWFpbk1lbnVMaW5rcyIsImZvckVhY2giLCIkbW5MbmtDbnRuciIsImNvbnRhaW5zIiwiJGRyb3BEb3duTWVudSIsIiRtZW51TGlua0NvbnRhaW5lciIsIiRleGlzdGluZ0Ryb3Bkb3duIiwiZGF0YXNldCIsImxpbmtUaXRsZSIsIiRkcm9wRG93bk1lbnVMaW5rIiwiZHJvcGRvd25Jc09wZW4iLCIkc2l0ZUxvZ28iLCJuYXZiYXJSaWdodExpbmtzIiwibmF2YmFyUmlnaHRMaW5rIiwiJG5hdmJhck1vYmlsZSIsIiRtZW51TW9iaWxlQnV0dG9uIiwiJG1lbnVNb2JpbGVCdXR0b25IYW1idXJnZXIiLCIkbWVudU1vYmlsZUJ1dHRvbkNsb3NlIiwiJGZpeGVkQmFiQnV0dG9uIiwiJGJ1bmRsZUluZm8iLCJzZXRUaW1lb3V0IiwiekluZGV4IiwiJG1vYmlsZU1lbnVBY2NvcmRpb25zIiwiJG1vYmlsZU1lbnVBY2NvcmRpb24iLCIkYWNjb3JkaW9uVHJpZ2dlciIsInRvZ2dsZSJdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/header/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/hero/main.js\":\r\n/*!*************************************************!*\\\r\n  !*** ./resources/scripts/sections/hero/main.js ***!\r\n  \\*************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"hero\\\": () => (/* binding */ hero)\\n/* harmony export */ });\\n/* harmony import */ var swiper_bundle__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! swiper/bundle */ \\\"./node_modules/swiper/swiper-bundle.esm.js\\\");\\n\\nvar hero = function hero() {\\n  var $hero = document.querySelector(\\\"section.hero\\\");\\n  if ($hero) {\\n    var $heroSwiper = $hero.querySelector(\\\".hero__swiper-container .hero__swiper.swiper\\\");\\n    if ($heroSwiper) {\\n      var swiperObject = new swiper_bundle__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"]($heroSwiper, {\\n        direction: \\\"horizontal\\\",\\n        loop: true,\\n        speed: 1000,\\n        autoplay: {\\n          delay: 5000\\n        },\\n        pagination: {\\n          bulletActiveClass: \\\"hero__swiper-bullet--active\\\",\\n          bulletClass: \\\"hero__swiper-bullet\\\",\\n          bulletElement: \\\"button\\\",\\n          el: \\\".hero__swiper-pagination\\\",\\n          modifierClass: \\\"hero__swiper-pagination--\\\",\\n          type: \\\"bullets\\\",\\n          clickable: true\\n        }\\n      });\\n    }\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hero);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9oZXJvL21haW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQW1DO0FBRTVCLElBQU1DLElBQUksR0FBRyxTQUFQQSxJQUFJLEdBQVM7RUFDeEIsSUFBTUMsS0FBSyxHQUFHQyxRQUFRLENBQUNDLGFBQWEsQ0FBQyxjQUFjLENBQUM7RUFDcEQsSUFBSUYsS0FBSyxFQUFFO0lBQ1QsSUFBTUcsV0FBVyxHQUFHSCxLQUFLLENBQUNFLGFBQWEsQ0FDckMsOENBQThDLENBQy9DO0lBQ0QsSUFBSUMsV0FBVyxFQUFFO01BQ2YsSUFBTUMsWUFBWSxHQUFHLElBQUlOLHFEQUFNLENBQUNLLFdBQVcsRUFBRTtRQUMzQ0UsU0FBUyxFQUFFLFlBQVk7UUFDdkJDLElBQUksRUFBRSxJQUFJO1FBQ1ZDLEtBQUssRUFBRSxJQUFJO1FBQ1hDLFFBQVEsRUFBRTtVQUNSQyxLQUFLLEVBQUU7UUFDVCxDQUFDO1FBQ0RDLFVBQVUsRUFBRTtVQUNWQyxpQkFBaUIsRUFBRSw2QkFBNkI7VUFDaERDLFdBQVcsRUFBRSxxQkFBcUI7VUFDbENDLGFBQWEsRUFBRSxRQUFRO1VBQ3ZCQyxFQUFFLEVBQUUsMEJBQTBCO1VBQzlCQyxhQUFhLEVBQUUsMkJBQTJCO1VBQzFDQyxJQUFJLEVBQUUsU0FBUztVQUNmQyxTQUFTLEVBQUU7UUFDYjtNQUNGLENBQUMsQ0FBQztJQUNKO0VBQ0Y7QUFDRixDQUFDO0FBRUQsaUVBQWVsQixJQUFJIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9oZXJvL21haW4uanM/YmI2ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU3dpcGVyIGZyb20gXCJzd2lwZXIvYnVuZGxlXCI7XHJcblxyXG5leHBvcnQgY29uc3QgaGVybyA9ICgpID0+IHtcclxuICBjb25zdCAkaGVybyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJzZWN0aW9uLmhlcm9cIik7XHJcbiAgaWYgKCRoZXJvKSB7XHJcbiAgICBjb25zdCAkaGVyb1N3aXBlciA9ICRoZXJvLnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgIFwiLmhlcm9fX3N3aXBlci1jb250YWluZXIgLmhlcm9fX3N3aXBlci5zd2lwZXJcIlxyXG4gICAgKTtcclxuICAgIGlmICgkaGVyb1N3aXBlcikge1xyXG4gICAgICBjb25zdCBzd2lwZXJPYmplY3QgPSBuZXcgU3dpcGVyKCRoZXJvU3dpcGVyLCB7XHJcbiAgICAgICAgZGlyZWN0aW9uOiBcImhvcml6b250YWxcIixcclxuICAgICAgICBsb29wOiB0cnVlLFxyXG4gICAgICAgIHNwZWVkOiAxMDAwLFxyXG4gICAgICAgIGF1dG9wbGF5OiB7XHJcbiAgICAgICAgICBkZWxheTogNTAwMCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhZ2luYXRpb246IHtcclxuICAgICAgICAgIGJ1bGxldEFjdGl2ZUNsYXNzOiBcImhlcm9fX3N3aXBlci1idWxsZXQtLWFjdGl2ZVwiLFxyXG4gICAgICAgICAgYnVsbGV0Q2xhc3M6IFwiaGVyb19fc3dpcGVyLWJ1bGxldFwiLFxyXG4gICAgICAgICAgYnVsbGV0RWxlbWVudDogXCJidXR0b25cIixcclxuICAgICAgICAgIGVsOiBcIi5oZXJvX19zd2lwZXItcGFnaW5hdGlvblwiLFxyXG4gICAgICAgICAgbW9kaWZpZXJDbGFzczogXCJoZXJvX19zd2lwZXItcGFnaW5hdGlvbi0tXCIsXHJcbiAgICAgICAgICB0eXBlOiBcImJ1bGxldHNcIixcclxuICAgICAgICAgIGNsaWNrYWJsZTogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBoZXJvO1xyXG4iXSwibmFtZXMiOlsiU3dpcGVyIiwiaGVybyIsIiRoZXJvIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiJGhlcm9Td2lwZXIiLCJzd2lwZXJPYmplY3QiLCJkaXJlY3Rpb24iLCJsb29wIiwic3BlZWQiLCJhdXRvcGxheSIsImRlbGF5IiwicGFnaW5hdGlvbiIsImJ1bGxldEFjdGl2ZUNsYXNzIiwiYnVsbGV0Q2xhc3MiLCJidWxsZXRFbGVtZW50IiwiZWwiLCJtb2RpZmllckNsYXNzIiwidHlwZSIsImNsaWNrYWJsZSJdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/hero/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/homepage-tabs/main.js\":\r\n/*!**********************************************************!*\\\r\n  !*** ./resources/scripts/sections/homepage-tabs/main.js ***!\r\n  \\**********************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"homepageTabs\\\": () => (/* binding */ homepageTabs)\\n/* harmony export */ });\\nvar homepageTabs = function homepageTabs() {\\n  var $homepageTabSections = document.querySelectorAll(\\\".section-homepage-tabs\\\");\\n  if ($homepageTabSections.length > 0) {\\n    $homepageTabSections.forEach(function ($homepageTabSection) {\\n      var $tabContainer = $homepageTabSection.querySelector(\\\".tab-container\\\");\\n      if ($tabContainer) {\\n        var $tabs = $tabContainer.querySelectorAll(\\\".tab\\\");\\n        var $tabbedContents = $tabContainer.querySelectorAll(\\\".tabbed-content\\\");\\n        var $videoContainer = $homepageTabSection.querySelector(\\\".video-container\\\");\\n        var $videos = $videoContainer === null || $videoContainer === void 0 ? void 0 : $videoContainer.querySelectorAll(\\\"video\\\");\\n        if ($tabs.length > 0 && $tabbedContents.length > 0) {\\n          $tabs.forEach(function ($tab) {\\n            $tab.addEventListener(\\\"click\\\", function (e) {\\n              if (!$tab.classList.contains(\\\"active\\\")) {\\n                $tabs.forEach(function ($tb) {\\n                  $tb.classList.remove(\\\"active\\\");\\n                });\\n                $tabbedContents.forEach(function ($tabbedContent) {\\n                  if ($tabbedContent.dataset.tabNumber == $tab.dataset.tabNumber) {\\n                    $tabbedContent.classList.remove(\\\"hidden\\\");\\n                  } else {\\n                    $tabbedContent.classList.add(\\\"hidden\\\");\\n                  }\\n                });\\n                $tab.classList.add(\\\"active\\\");\\n                if ($videos.length > 1) {\\n                  //swap out active video based on number\\n                  $videos.forEach(function ($video) {\\n                    console.log($video.dataset.videoNumber);\\n                    console.log($tab.dataset.tabNumber);\\n                    if ($video.dataset.videoNumber == $tab.dataset.tabNumber) {\\n                      $video.classList.remove(\\\"hidden\\\");\\n                    } else {\\n                      $video.classList.add(\\\"hidden\\\");\\n                    }\\n                  });\\n                }\\n              }\\n            });\\n          });\\n        }\\n      } else {\\n        console.log(\\\"$tabContainer could not be found - cannot bind tab behaviour.\\\");\\n      }\\n    });\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (homepageTabs);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9ob21lcGFnZS10YWJzL21haW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxJQUFNQSxZQUFZLEdBQUcsU0FBZkEsWUFBWSxHQUFTO0VBQzlCLElBQU1DLG9CQUFvQixHQUFHQyxRQUFRLENBQUNDLGdCQUFnQixDQUFDLHdCQUF3QixDQUFDO0VBQ2hGLElBQUdGLG9CQUFvQixDQUFDRyxNQUFNLEdBQUcsQ0FBQyxFQUFDO0lBQy9CSCxvQkFBb0IsQ0FBQ0ksT0FBTyxDQUFDLFVBQUNDLG1CQUFtQixFQUFLO01BQ2xELElBQU1DLGFBQWEsR0FBR0QsbUJBQW1CLENBQUNFLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQztNQUN6RSxJQUFHRCxhQUFhLEVBQUM7UUFFYixJQUFNRSxLQUFLLEdBQUdGLGFBQWEsQ0FBQ0osZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1FBQ3BELElBQU1PLGVBQWUsR0FBR0gsYUFBYSxDQUFDSixnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQztRQUN6RSxJQUFNUSxlQUFlLEdBQUdMLG1CQUFtQixDQUFDRSxhQUFhLENBQUMsa0JBQWtCLENBQUM7UUFDN0UsSUFBTUksT0FBTyxHQUFHRCxlQUFlLGFBQWZBLGVBQWUsdUJBQWZBLGVBQWUsQ0FBRVIsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO1FBRTFELElBQUdNLEtBQUssQ0FBQ0wsTUFBTSxHQUFHLENBQUMsSUFBSU0sZUFBZSxDQUFDTixNQUFNLEdBQUcsQ0FBQyxFQUFDO1VBQzlDSyxLQUFLLENBQUNKLE9BQU8sQ0FBQyxVQUFDUSxJQUFJLEVBQUs7WUFDcEJBLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUMsT0FBTyxFQUFDLFVBQUNDLENBQUMsRUFBSztjQUNqQyxJQUFHLENBQUNGLElBQUksQ0FBQ0csU0FBUyxDQUFDQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUM7Z0JBRWxDUixLQUFLLENBQUNKLE9BQU8sQ0FBQyxVQUFDYSxHQUFHLEVBQUs7a0JBQ25CQSxHQUFHLENBQUNGLFNBQVMsQ0FBQ0csTUFBTSxDQUFDLFFBQVEsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDO2dCQUVGVCxlQUFlLENBQUNMLE9BQU8sQ0FBQyxVQUFDZSxjQUFjLEVBQUs7a0JBRXhDLElBQUdBLGNBQWMsQ0FBQ0MsT0FBTyxDQUFDQyxTQUFTLElBQUlULElBQUksQ0FBQ1EsT0FBTyxDQUFDQyxTQUFTLEVBQUM7b0JBQzFERixjQUFjLENBQUNKLFNBQVMsQ0FBQ0csTUFBTSxDQUFDLFFBQVEsQ0FBQztrQkFDN0MsQ0FBQyxNQUFJO29CQUNEQyxjQUFjLENBQUNKLFNBQVMsQ0FBQ08sR0FBRyxDQUFDLFFBQVEsQ0FBQztrQkFDMUM7Z0JBQ0osQ0FBQyxDQUFDO2dCQUVGVixJQUFJLENBQUNHLFNBQVMsQ0FBQ08sR0FBRyxDQUFDLFFBQVEsQ0FBQztnQkFFNUIsSUFBR1gsT0FBTyxDQUFDUixNQUFNLEdBQUcsQ0FBQyxFQUFDO2tCQUVsQjtrQkFDQVEsT0FBTyxDQUFDUCxPQUFPLENBQUMsVUFBQ21CLE1BQU0sRUFBSztvQkFDeEJDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDRixNQUFNLENBQUNILE9BQU8sQ0FBQ00sV0FBVyxDQUFDO29CQUN2Q0YsT0FBTyxDQUFDQyxHQUFHLENBQUNiLElBQUksQ0FBQ1EsT0FBTyxDQUFDQyxTQUFTLENBQUM7b0JBQ25DLElBQUdFLE1BQU0sQ0FBQ0gsT0FBTyxDQUFDTSxXQUFXLElBQUlkLElBQUksQ0FBQ1EsT0FBTyxDQUFDQyxTQUFTLEVBQUM7c0JBQ3BERSxNQUFNLENBQUNSLFNBQVMsQ0FBQ0csTUFBTSxDQUFDLFFBQVEsQ0FBQztvQkFDckMsQ0FBQyxNQUFJO3NCQUNESyxNQUFNLENBQUNSLFNBQVMsQ0FBQ08sR0FBRyxDQUFDLFFBQVEsQ0FBQztvQkFDbEM7a0JBQ0osQ0FBQyxDQUFDO2dCQUNOO2NBQ0o7WUFDSixDQUFDLENBQUM7VUFDTixDQUFDLENBQUM7UUFDTjtNQUNKLENBQUMsTUFBSTtRQUNERSxPQUFPLENBQUNDLEdBQUcsQ0FBQywrREFBK0QsQ0FBQztNQUNoRjtJQUNKLENBQUMsQ0FBQztFQUNOO0FBQ0osQ0FBQztBQUVELGlFQUFlMUIsWUFBWSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vcmVzb3VyY2VzL3NjcmlwdHMvc2VjdGlvbnMvaG9tZXBhZ2UtdGFicy9tYWluLmpzPzAyZWQiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGhvbWVwYWdlVGFicyA9ICgpID0+IHtcclxuICAgIGNvbnN0ICRob21lcGFnZVRhYlNlY3Rpb25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5zZWN0aW9uLWhvbWVwYWdlLXRhYnNcIik7XHJcbiAgICBpZigkaG9tZXBhZ2VUYWJTZWN0aW9ucy5sZW5ndGggPiAwKXtcclxuICAgICAgICAkaG9tZXBhZ2VUYWJTZWN0aW9ucy5mb3JFYWNoKCgkaG9tZXBhZ2VUYWJTZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0ICR0YWJDb250YWluZXIgPSAkaG9tZXBhZ2VUYWJTZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoXCIudGFiLWNvbnRhaW5lclwiKTtcclxuICAgICAgICAgICAgaWYoJHRhYkNvbnRhaW5lcil7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgJHRhYnMgPSAkdGFiQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIudGFiXCIpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgJHRhYmJlZENvbnRlbnRzID0gJHRhYkNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiLnRhYmJlZC1jb250ZW50XCIpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgJHZpZGVvQ29udGFpbmVyID0gJGhvbWVwYWdlVGFiU2VjdGlvbi5xdWVyeVNlbGVjdG9yKFwiLnZpZGVvLWNvbnRhaW5lclwiKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0ICR2aWRlb3MgPSAkdmlkZW9Db250YWluZXI/LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ2aWRlb1wiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZigkdGFicy5sZW5ndGggPiAwICYmICR0YWJiZWRDb250ZW50cy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgICAgICAkdGFicy5mb3JFYWNoKCgkdGFiKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICR0YWIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEkdGFiLmNsYXNzTGlzdC5jb250YWlucyhcImFjdGl2ZVwiKSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YWJzLmZvckVhY2goKCR0YikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGIuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhYmJlZENvbnRlbnRzLmZvckVhY2goKCR0YWJiZWRDb250ZW50KSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkdGFiYmVkQ29udGVudC5kYXRhc2V0LnRhYk51bWJlciA9PSAkdGFiLmRhdGFzZXQudGFiTnVtYmVyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YWJiZWRDb250ZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhYmJlZENvbnRlbnQuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFiLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR2aWRlb3MubGVuZ3RoID4gMSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3N3YXAgb3V0IGFjdGl2ZSB2aWRlbyBiYXNlZCBvbiBudW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZpZGVvcy5mb3JFYWNoKCgkdmlkZW8pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCR2aWRlby5kYXRhc2V0LnZpZGVvTnVtYmVyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJHRhYi5kYXRhc2V0LnRhYk51bWJlcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR2aWRlby5kYXRhc2V0LnZpZGVvTnVtYmVyID09ICR0YWIuZGF0YXNldC50YWJOdW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2aWRlby5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZpZGVvLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCIkdGFiQ29udGFpbmVyIGNvdWxkIG5vdCBiZSBmb3VuZCAtIGNhbm5vdCBiaW5kIHRhYiBiZWhhdmlvdXIuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGhvbWVwYWdlVGFiczsgICAgIl0sIm5hbWVzIjpbImhvbWVwYWdlVGFicyIsIiRob21lcGFnZVRhYlNlY3Rpb25zIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGVuZ3RoIiwiZm9yRWFjaCIsIiRob21lcGFnZVRhYlNlY3Rpb24iLCIkdGFiQ29udGFpbmVyIiwicXVlcnlTZWxlY3RvciIsIiR0YWJzIiwiJHRhYmJlZENvbnRlbnRzIiwiJHZpZGVvQ29udGFpbmVyIiwiJHZpZGVvcyIsIiR0YWIiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwiJHRiIiwicmVtb3ZlIiwiJHRhYmJlZENvbnRlbnQiLCJkYXRhc2V0IiwidGFiTnVtYmVyIiwiYWRkIiwiJHZpZGVvIiwiY29uc29sZSIsImxvZyIsInZpZGVvTnVtYmVyIl0sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/homepage-tabs/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/kg-countdown/main.js\":\r\n/*!*********************************************************!*\\\r\n  !*** ./resources/scripts/sections/kg-countdown/main.js ***!\r\n  \\*********************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"kgCountdown\\\": () => (/* binding */ kgCountdown)\\n/* harmony export */ });\\n/* harmony import */ var gsap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! gsap */ \\\"./node_modules/gsap/index.js\\\");\\n/* harmony import */ var gsap_src_ScrollTrigger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! gsap/src/ScrollTrigger */ \\\"./node_modules/gsap/src/ScrollTrigger.js\\\");\\n\\n\\ngsap__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"].registerPlugin(gsap_src_ScrollTrigger__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"]);\\nvar kgCountdown = function kgCountdown() {\\n  var $kgCountdownSections = document.querySelectorAll(\\\".section-kg-countdown\\\");\\n  if ($kgCountdownSections.length > 0) {\\n    $kgCountdownSections.forEach(function ($kgCountdownSection) {\\n      var $targetElement = $kgCountdownSection.querySelector(\\\".kg-saved-number\\\");\\n      if ($targetElement) {\\n        var targetNumber = $targetElement.dataset.targetNumber;\\n\\n        // Format number with commas: turn 300000000 into 300,000,000\\n        var formatNumber = function formatNumber(num) {\\n          return Math.floor(num).toString().replace(/\\\\B(?=(\\\\d{3})+(?!\\\\d))/g, ',');\\n        };\\n\\n        // Based on the number in the customiser, output the relevant number of 0s to start\\n        var digitCount = targetNumber.toString().length;\\n        $targetElement.textContent = '0'.repeat(Math.max(digitCount, 3)).match(/.{1,3}/g).join(',');\\n        var counter = {\\n          value: 0\\n        };\\n        gsap__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"].to(counter, {\\n          value: targetNumber,\\n          duration: 2,\\n          ease: 'power2.out',\\n          scrollTrigger: {\\n            trigger: $kgCountdownSection,\\n            start: 'top 75%',\\n            once: true\\n          },\\n          onUpdate: function onUpdate() {\\n            $targetElement.textContent = formatNumber(counter.value);\\n          },\\n          onComplete: function onComplete() {\\n            $targetElement.textContent = formatNumber(targetNumber);\\n          }\\n        });\\n      }\\n    });\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (kgCountdown);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9rZy1jb3VudGRvd24vbWFpbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXdCO0FBQzJCO0FBRW5EQSwyREFBbUIsQ0FBQ0MsOERBQWEsQ0FBQztBQUczQixJQUFNRSxXQUFXLEdBQUcsU0FBZEEsV0FBVyxHQUFTO0VBQzdCLElBQU1DLG9CQUFvQixHQUFHQyxRQUFRLENBQUNDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDO0VBRS9FLElBQUdGLG9CQUFvQixDQUFDRyxNQUFNLEdBQUcsQ0FBQyxFQUFDO0lBRS9CSCxvQkFBb0IsQ0FBQ0ksT0FBTyxDQUFDLFVBQUNDLG1CQUFtQixFQUFLO01BRWxELElBQU1DLGNBQWMsR0FBR0QsbUJBQW1CLENBQUNFLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQztNQUM1RSxJQUFHRCxjQUFjLEVBQUM7UUFFZCxJQUFNRSxZQUFZLEdBQUdGLGNBQWMsQ0FBQ0csT0FBTyxDQUFDRCxZQUFZOztRQUV4RDtRQUNBLElBQU1FLFlBQVksR0FBRyxTQUFmQSxZQUFZLENBQUlDLEdBQUcsRUFBSztVQUMxQixPQUFPQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0YsR0FBRyxDQUFDLENBQUNHLFFBQVEsRUFBRSxDQUFDQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDO1FBQzNFLENBQUM7O1FBRUQ7UUFDQSxJQUFNQyxVQUFVLEdBQUdSLFlBQVksQ0FBQ00sUUFBUSxFQUFFLENBQUNYLE1BQU07UUFDakRHLGNBQWMsQ0FBQ1csV0FBVyxHQUFHLEdBQUcsQ0FBQ0MsTUFBTSxDQUFDTixJQUFJLENBQUNPLEdBQUcsQ0FBQ0gsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUNJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUUzRixJQUFNQyxPQUFPLEdBQUc7VUFBRUMsS0FBSyxFQUFFO1FBQUUsQ0FBQztRQUM1QjNCLCtDQUFPLENBQUMwQixPQUFPLEVBQUU7VUFDYkMsS0FBSyxFQUFFZixZQUFZO1VBQ25CaUIsUUFBUSxFQUFFLENBQUM7VUFDWEMsSUFBSSxFQUFFLFlBQVk7VUFDbEJDLGFBQWEsRUFBRTtZQUNYQyxPQUFPLEVBQUV2QixtQkFBbUI7WUFDNUJ3QixLQUFLLEVBQUUsU0FBUztZQUNoQkMsSUFBSSxFQUFFO1VBQ1YsQ0FBQztVQUNEQyxRQUFRLEVBQUUsb0JBQVc7WUFDakJ6QixjQUFjLENBQUNXLFdBQVcsR0FBR1AsWUFBWSxDQUFDWSxPQUFPLENBQUNDLEtBQUssQ0FBQztVQUM1RCxDQUFDO1VBQ0RTLFVBQVUsRUFBRSxzQkFBVztZQUNuQjFCLGNBQWMsQ0FBQ1csV0FBVyxHQUFHUCxZQUFZLENBQUNGLFlBQVksQ0FBQztVQUMzRDtRQUNKLENBQUMsQ0FBQztNQUNOO0lBQ0osQ0FBQyxDQUFDO0VBQ047QUFDSixDQUFDO0FBRUQsaUVBQWVULFdBQVciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL3Jlc291cmNlcy9zY3JpcHRzL3NlY3Rpb25zL2tnLWNvdW50ZG93bi9tYWluLmpzP2FiNDkiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdzYXAgZnJvbSBcImdzYXBcIjtcclxuaW1wb3J0IFNjcm9sbFRyaWdnZXIgZnJvbSBcImdzYXAvc3JjL1Njcm9sbFRyaWdnZXJcIjtcclxuXHJcbmdzYXAucmVnaXN0ZXJQbHVnaW4oU2Nyb2xsVHJpZ2dlcik7XHJcblxyXG5cclxuZXhwb3J0IGNvbnN0IGtnQ291bnRkb3duID0gKCkgPT4ge1xyXG4gICAgY29uc3QgJGtnQ291bnRkb3duU2VjdGlvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnNlY3Rpb24ta2ctY291bnRkb3duXCIpO1xyXG5cclxuICAgIGlmKCRrZ0NvdW50ZG93blNlY3Rpb25zLmxlbmd0aCA+IDApe1xyXG5cclxuICAgICAgICAka2dDb3VudGRvd25TZWN0aW9ucy5mb3JFYWNoKCgka2dDb3VudGRvd25TZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCAkdGFyZ2V0RWxlbWVudCA9ICRrZ0NvdW50ZG93blNlY3Rpb24ucXVlcnlTZWxlY3RvcihcIi5rZy1zYXZlZC1udW1iZXJcIik7XHJcbiAgICAgICAgICAgIGlmKCR0YXJnZXRFbGVtZW50KXtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXROdW1iZXIgPSAkdGFyZ2V0RWxlbWVudC5kYXRhc2V0LnRhcmdldE51bWJlcjtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBGb3JtYXQgbnVtYmVyIHdpdGggY29tbWFzOiB0dXJuIDMwMDAwMDAwMCBpbnRvIDMwMCwwMDAsMDAwXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXROdW1iZXIgPSAobnVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtKS50b1N0cmluZygpLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csICcsJyk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvLyBCYXNlZCBvbiB0aGUgbnVtYmVyIGluIHRoZSBjdXN0b21pc2VyLCBvdXRwdXQgdGhlIHJlbGV2YW50IG51bWJlciBvZiAwcyB0byBzdGFydFxyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlnaXRDb3VudCA9IHRhcmdldE51bWJlci50b1N0cmluZygpLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICR0YXJnZXRFbGVtZW50LnRleHRDb250ZW50ID0gJzAnLnJlcGVhdChNYXRoLm1heChkaWdpdENvdW50LCAzKSkubWF0Y2goLy57MSwzfS9nKS5qb2luKCcsJyk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ZXIgPSB7IHZhbHVlOiAwIH07ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgZ3NhcC50byhjb3VudGVyLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRhcmdldE51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogMixcclxuICAgICAgICAgICAgICAgICAgICBlYXNlOiAncG93ZXIyLm91dCcsXHJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVHJpZ2dlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyOiAka2dDb3VudGRvd25TZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogJ3RvcCA3NSUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbmNlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBvblVwZGF0ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXRFbGVtZW50LnRleHRDb250ZW50ID0gZm9ybWF0TnVtYmVyKGNvdW50ZXIudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXRFbGVtZW50LnRleHRDb250ZW50ID0gZm9ybWF0TnVtYmVyKHRhcmdldE51bWJlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQga2dDb3VudGRvd247ICAgICJdLCJuYW1lcyI6WyJnc2FwIiwiU2Nyb2xsVHJpZ2dlciIsInJlZ2lzdGVyUGx1Z2luIiwia2dDb3VudGRvd24iLCIka2dDb3VudGRvd25TZWN0aW9ucyIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsImxlbmd0aCIsImZvckVhY2giLCIka2dDb3VudGRvd25TZWN0aW9uIiwiJHRhcmdldEVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwidGFyZ2V0TnVtYmVyIiwiZGF0YXNldCIsImZvcm1hdE51bWJlciIsIm51bSIsIk1hdGgiLCJmbG9vciIsInRvU3RyaW5nIiwicmVwbGFjZSIsImRpZ2l0Q291bnQiLCJ0ZXh0Q29udGVudCIsInJlcGVhdCIsIm1heCIsIm1hdGNoIiwiam9pbiIsImNvdW50ZXIiLCJ2YWx1ZSIsInRvIiwiZHVyYXRpb24iLCJlYXNlIiwic2Nyb2xsVHJpZ2dlciIsInRyaWdnZXIiLCJzdGFydCIsIm9uY2UiLCJvblVwZGF0ZSIsIm9uQ29tcGxldGUiXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/kg-countdown/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/nutrition-ingredients/main.js\":\r\n/*!******************************************************************!*\\\r\n  !*** ./resources/scripts/sections/nutrition-ingredients/main.js ***!\r\n  \\******************************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"nutritionIngredients\\\": () => (/* binding */ nutritionIngredients)\\n/* harmony export */ });\\nvar nutritionIngredients = function nutritionIngredients() {\\n  var $nutritionIngredientsSection = document.querySelector(\\\".section-nutrition-ingredients\\\");\\n  if ($nutritionIngredientsSection) {\\n    //Handle The Nav functionality - there's two versions of the nav to allow for the design\\n    var $navButtons = $nutritionIngredientsSection.querySelectorAll(\\\".nutrition-nav-button\\\");\\n    if ($navButtons) {\\n      var $mobileStickyNav = $nutritionIngredientsSection.querySelector(\\\".nutrition-ingredients-mobile-sticky-nav\\\");\\n      var $collections = $nutritionIngredientsSection.querySelectorAll(\\\".nutrition-ingredient-collection\\\");\\n      if ($collections.length > 0) {\\n        $navButtons.forEach(function ($navButton) {\\n          $navButton.addEventListener(\\\"click\\\", function (e) {\\n            //Get the target Collection ID\\n            var targetId = e.target.dataset.target;\\n            if (targetId) {\\n              $collections.forEach(function ($collection) {\\n                if ($collection.dataset.collectionId == targetId) {\\n                  //Scroll Window to target - Bear in mind that on mobile, we need to compensate for the Sticky Nav height\\n                  var targetPos = $collection.getBoundingClientRect().top;\\n                  var offsetAmount = 48;\\n                  if (window.innerWidth < 1024) {\\n                    offsetAmount = 20;\\n                    //Acommodate for Sticky Nav height\\n                    if ($mobileStickyNav) {\\n                      offsetAmount += $mobileStickyNav.getBoundingClientRect().height;\\n                    }\\n                  }\\n                  var offsetPosition = targetPos + window.pageYOffset - offsetAmount;\\n                  window.scrollTo({\\n                    top: offsetPosition,\\n                    behavior: 'smooth'\\n                  });\\n                }\\n              });\\n            } else {\\n              console.log(\\\"Nav button does not contain a collection id, system won't know where to scroll the user to\\\");\\n            }\\n          });\\n        });\\n      }\\n    }\\n\\n    //Find and Bind Accordions\\n    var $accordions = $nutritionIngredientsSection.querySelectorAll(\\\".nutrition-accordion\\\");\\n    if ($accordions.length > 0) {\\n      $accordions.forEach(function ($accordion) {\\n        var $accordionTrigger = $accordion.querySelector(\\\".nutrition-accordion-trigger \\\");\\n        if ($accordionTrigger) {\\n          $accordionTrigger.addEventListener(\\\"click\\\", function (e) {\\n            $accordionTrigger.parentElement.classList.toggle(\\\"active\\\");\\n          });\\n        }\\n      });\\n    }\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (nutritionIngredients);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9udXRyaXRpb24taW5ncmVkaWVudHMvbWFpbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFPLElBQU1BLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0IsR0FBUztFQUV0QyxJQUFNQyw0QkFBNEIsR0FBR0MsUUFBUSxDQUFDQyxhQUFhLENBQUMsZ0NBQWdDLENBQUM7RUFDN0YsSUFBR0YsNEJBQTRCLEVBQUM7SUFFNUI7SUFDQSxJQUFNRyxXQUFXLEdBQUdILDRCQUE0QixDQUFDSSxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQztJQUMxRixJQUFHRCxXQUFXLEVBQUM7TUFFWCxJQUFNRSxnQkFBZ0IsR0FBR0wsNEJBQTRCLENBQUNFLGFBQWEsQ0FBQywwQ0FBMEMsQ0FBQztNQUMvRyxJQUFNSSxZQUFZLEdBQUdOLDRCQUE0QixDQUFDSSxnQkFBZ0IsQ0FBQyxrQ0FBa0MsQ0FBQztNQUN0RyxJQUFHRSxZQUFZLENBQUNDLE1BQU0sR0FBRyxDQUFDLEVBQUM7UUFFdkJKLFdBQVcsQ0FBQ0ssT0FBTyxDQUFDLFVBQUNDLFVBQVUsRUFBSztVQUVoQ0EsVUFBVSxDQUFDQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUMsVUFBQ0MsQ0FBQyxFQUFLO1lBRXZDO1lBQ0EsSUFBTUMsUUFBUSxHQUFHRCxDQUFDLENBQUNFLE1BQU0sQ0FBQ0MsT0FBTyxDQUFDRCxNQUFNO1lBQ3hDLElBQUdELFFBQVEsRUFBQztjQUVSTixZQUFZLENBQUNFLE9BQU8sQ0FBQyxVQUFDTyxXQUFXLEVBQUs7Z0JBQ2xDLElBQUdBLFdBQVcsQ0FBQ0QsT0FBTyxDQUFDRSxZQUFZLElBQUlKLFFBQVEsRUFBQztrQkFFNUM7a0JBQ0EsSUFBTUssU0FBUyxHQUFHRixXQUFXLENBQUNHLHFCQUFxQixFQUFFLENBQUNDLEdBQUc7a0JBQ3pELElBQUlDLFlBQVksR0FBRyxFQUFFO2tCQUNyQixJQUFHQyxNQUFNLENBQUNDLFVBQVUsR0FBRyxJQUFJLEVBQUM7b0JBRXhCRixZQUFZLEdBQUcsRUFBRTtvQkFDakI7b0JBQ0EsSUFBR2YsZ0JBQWdCLEVBQUM7c0JBQ2hCZSxZQUFZLElBQUlmLGdCQUFnQixDQUFDYSxxQkFBcUIsRUFBRSxDQUFDSyxNQUFNO29CQUNuRTtrQkFDSjtrQkFFQSxJQUFNQyxjQUFjLEdBQUdQLFNBQVMsR0FBR0ksTUFBTSxDQUFDSSxXQUFXLEdBQUdMLFlBQVk7a0JBQ3BFQyxNQUFNLENBQUNLLFFBQVEsQ0FBQztvQkFDWlAsR0FBRyxFQUFFSyxjQUFjO29CQUNuQkcsUUFBUSxFQUFFO2tCQUNkLENBQUMsQ0FBQztnQkFDTjtjQUNKLENBQUMsQ0FBQztZQUNOLENBQUMsTUFBSTtjQUNEQyxPQUFPLENBQUNDLEdBQUcsQ0FBQyw0RkFBNEYsQ0FBQztZQUM3RztVQUNKLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQztNQUNOO0lBQ0o7O0lBRUE7SUFDQSxJQUFNQyxXQUFXLEdBQUc5Qiw0QkFBNEIsQ0FBQ0ksZ0JBQWdCLENBQUMsc0JBQXNCLENBQUM7SUFDekYsSUFBRzBCLFdBQVcsQ0FBQ3ZCLE1BQU0sR0FBRyxDQUFDLEVBQUM7TUFDdEJ1QixXQUFXLENBQUN0QixPQUFPLENBQUMsVUFBQ3VCLFVBQVUsRUFBSztRQUVoQyxJQUFNQyxpQkFBaUIsR0FBR0QsVUFBVSxDQUFDN0IsYUFBYSxDQUFDLCtCQUErQixDQUFDO1FBQ25GLElBQUc4QixpQkFBaUIsRUFBQztVQUVqQkEsaUJBQWlCLENBQUN0QixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsVUFBQ0MsQ0FBQyxFQUFLO1lBQy9DcUIsaUJBQWlCLENBQUNDLGFBQWEsQ0FBQ0MsU0FBUyxDQUFDQyxNQUFNLENBQUMsUUFBUSxDQUFDO1VBQzlELENBQUMsQ0FBQztRQUNOO01BQ0osQ0FBQyxDQUFDO0lBQ047RUFDSjtBQUVKLENBQUM7QUFFRCxpRUFBZXBDLG9CQUFvQiIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vcmVzb3VyY2VzL3NjcmlwdHMvc2VjdGlvbnMvbnV0cml0aW9uLWluZ3JlZGllbnRzL21haW4uanM/N2Q4ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgbnV0cml0aW9uSW5ncmVkaWVudHMgPSAoKSA9PiB7XHJcblxyXG4gICAgY29uc3QgJG51dHJpdGlvbkluZ3JlZGllbnRzU2VjdGlvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuc2VjdGlvbi1udXRyaXRpb24taW5ncmVkaWVudHNcIik7XHJcbiAgICBpZigkbnV0cml0aW9uSW5ncmVkaWVudHNTZWN0aW9uKXtcclxuICAgICAgICBcclxuICAgICAgICAvL0hhbmRsZSBUaGUgTmF2IGZ1bmN0aW9uYWxpdHkgLSB0aGVyZSdzIHR3byB2ZXJzaW9ucyBvZiB0aGUgbmF2IHRvIGFsbG93IGZvciB0aGUgZGVzaWduXHJcbiAgICAgICAgY29uc3QgJG5hdkJ1dHRvbnMgPSAkbnV0cml0aW9uSW5ncmVkaWVudHNTZWN0aW9uLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubnV0cml0aW9uLW5hdi1idXR0b25cIik7XHJcbiAgICAgICAgaWYoJG5hdkJ1dHRvbnMpe1xyXG5cclxuICAgICAgICAgICAgY29uc3QgJG1vYmlsZVN0aWNreU5hdiA9ICRudXRyaXRpb25JbmdyZWRpZW50c1NlY3Rpb24ucXVlcnlTZWxlY3RvcihcIi5udXRyaXRpb24taW5ncmVkaWVudHMtbW9iaWxlLXN0aWNreS1uYXZcIik7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0ICRjb2xsZWN0aW9ucyA9ICRudXRyaXRpb25JbmdyZWRpZW50c1NlY3Rpb24ucXVlcnlTZWxlY3RvckFsbChcIi5udXRyaXRpb24taW5ncmVkaWVudC1jb2xsZWN0aW9uXCIpO1xyXG4gICAgICAgICAgICBpZigkY29sbGVjdGlvbnMubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgICAgICAgICAgICAgJG5hdkJ1dHRvbnMuZm9yRWFjaCgoJG5hdkJ1dHRvbikgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkbmF2QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLChlKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL0dldCB0aGUgdGFyZ2V0IENvbGxlY3Rpb24gSURcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0SWQgPSBlLnRhcmdldC5kYXRhc2V0LnRhcmdldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodGFyZ2V0SWQpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb2xsZWN0aW9ucy5mb3JFYWNoKCgkY29sbGVjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRjb2xsZWN0aW9uLmRhdGFzZXQuY29sbGVjdGlvbklkID09IHRhcmdldElkKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vU2Nyb2xsIFdpbmRvdyB0byB0YXJnZXQgLSBCZWFyIGluIG1pbmQgdGhhdCBvbiBtb2JpbGUsIHdlIG5lZWQgdG8gY29tcGVuc2F0ZSBmb3IgdGhlIFN0aWNreSBOYXYgaGVpZ2h0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldFBvcyA9ICRjb2xsZWN0aW9uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9mZnNldEFtb3VudCA9IDQ4O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cuaW5uZXJXaWR0aCA8IDEwMjQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRBbW91bnQgPSAyMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQWNvbW1vZGF0ZSBmb3IgU3RpY2t5IE5hdiBoZWlnaHRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRtb2JpbGVTdGlja3lOYXYpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldEFtb3VudCArPSAkbW9iaWxlU3RpY2t5TmF2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldFBvc2l0aW9uID0gdGFyZ2V0UG9zICsgd2luZG93LnBhZ2VZT2Zmc2V0IC0gb2Zmc2V0QW1vdW50OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IG9mZnNldFBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTmF2IGJ1dHRvbiBkb2VzIG5vdCBjb250YWluIGEgY29sbGVjdGlvbiBpZCwgc3lzdGVtIHdvbid0IGtub3cgd2hlcmUgdG8gc2Nyb2xsIHRoZSB1c2VyIHRvXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSAgICBcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vRmluZCBhbmQgQmluZCBBY2NvcmRpb25zXHJcbiAgICAgICAgY29uc3QgJGFjY29yZGlvbnMgPSAkbnV0cml0aW9uSW5ncmVkaWVudHNTZWN0aW9uLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubnV0cml0aW9uLWFjY29yZGlvblwiKTtcclxuICAgICAgICBpZigkYWNjb3JkaW9ucy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgJGFjY29yZGlvbnMuZm9yRWFjaCgoJGFjY29yZGlvbikgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0ICRhY2NvcmRpb25UcmlnZ2VyID0gJGFjY29yZGlvbi5xdWVyeVNlbGVjdG9yKFwiLm51dHJpdGlvbi1hY2NvcmRpb24tdHJpZ2dlciBcIik7XHJcbiAgICAgICAgICAgICAgICBpZigkYWNjb3JkaW9uVHJpZ2dlcil7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICRhY2NvcmRpb25UcmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkYWNjb3JkaW9uVHJpZ2dlci5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBudXRyaXRpb25JbmdyZWRpZW50czsiXSwibmFtZXMiOlsibnV0cml0aW9uSW5ncmVkaWVudHMiLCIkbnV0cml0aW9uSW5ncmVkaWVudHNTZWN0aW9uIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiJG5hdkJ1dHRvbnMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiJG1vYmlsZVN0aWNreU5hdiIsIiRjb2xsZWN0aW9ucyIsImxlbmd0aCIsImZvckVhY2giLCIkbmF2QnV0dG9uIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJ0YXJnZXRJZCIsInRhcmdldCIsImRhdGFzZXQiLCIkY29sbGVjdGlvbiIsImNvbGxlY3Rpb25JZCIsInRhcmdldFBvcyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInRvcCIsIm9mZnNldEFtb3VudCIsIndpbmRvdyIsImlubmVyV2lkdGgiLCJoZWlnaHQiLCJvZmZzZXRQb3NpdGlvbiIsInBhZ2VZT2Zmc2V0Iiwic2Nyb2xsVG8iLCJiZWhhdmlvciIsImNvbnNvbGUiLCJsb2ciLCIkYWNjb3JkaW9ucyIsIiRhY2NvcmRpb24iLCIkYWNjb3JkaW9uVHJpZ2dlciIsInBhcmVudEVsZW1lbnQiLCJjbGFzc0xpc3QiLCJ0b2dnbGUiXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/nutrition-ingredients/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/nutrition-tables/main.js\":\r\n/*!*************************************************************!*\\\r\n  !*** ./resources/scripts/sections/nutrition-tables/main.js ***!\r\n  \\*************************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"nutritionTables\\\": () => (/* binding */ nutritionTables)\\n/* harmony export */ });\\nvar nutritionTables = function nutritionTables() {\\n  var $nutritionTablesSection = document.querySelector(\\\".section-nutrition-tables\\\");\\n  if ($nutritionTablesSection) {\\n    var $tableTabsContainer = $nutritionTablesSection.querySelector(\\\".table-tabs\\\");\\n    var $mobileTablesContainer = $nutritionTablesSection.querySelector(\\\".mobile-tables-container\\\");\\n    var $desktopTablesContainer = $nutritionTablesSection.querySelector(\\\".desktop-tables-container\\\");\\n    if ($tableTabsContainer && $mobileTablesContainer && $desktopTablesContainer) {\\n      var $tableTabs = $tableTabsContainer.querySelectorAll(\\\".table-tab\\\");\\n      var $desktopTables = $desktopTablesContainer.querySelectorAll(\\\".table-container\\\");\\n      var $mobileTables = $mobileTablesContainer.querySelectorAll(\\\".nutrition-table-wrapper\\\");\\n      if ($tableTabs.length > 0) {\\n        $tableTabs.forEach(function ($tableTab) {\\n          $tableTab.addEventListener(\\\"click\\\", function (e) {\\n            //Find the relevant table and show it\\n\\n            //Mobile Tables\\n            if ($mobileTables.length > 0) {\\n              $mobileTables.forEach(function ($mobileTable) {\\n                if ($mobileTable.dataset.tableGroup == $tableTab.dataset.tableGroup) {\\n                  $mobileTable.classList.add(\\\"active\\\");\\n                } else {\\n                  $mobileTable.classList.remove(\\\"active\\\");\\n                }\\n              });\\n            }\\n\\n            //Desktop Tables\\n            if ($desktopTables.length > 0) {\\n              $desktopTables.forEach(function ($desktopTable) {\\n                if ($desktopTable.dataset.tableGroup == $tableTab.dataset.tableGroup) {\\n                  $desktopTable.classList.add(\\\"active\\\");\\n                } else {\\n                  $desktopTable.classList.remove(\\\"active\\\");\\n                }\\n              });\\n            }\\n\\n            //Update the Tabs themselves\\n            $tableTabs.forEach(function ($tablTb) {\\n              if ($tablTb == $tableTab) {\\n                $tablTb.classList.add(\\\"active\\\");\\n              } else {\\n                $tablTb.classList.remove(\\\"active\\\");\\n              }\\n            });\\n          });\\n        });\\n      }\\n    }\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (nutritionTables);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9udXRyaXRpb24tdGFibGVzL21haW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxJQUFNQSxlQUFlLEdBQUcsU0FBbEJBLGVBQWUsR0FBUztFQUVqQyxJQUFNQyx1QkFBdUIsR0FBR0MsUUFBUSxDQUFDQyxhQUFhLENBQUMsMkJBQTJCLENBQUM7RUFDbkYsSUFBR0YsdUJBQXVCLEVBQUM7SUFFdkIsSUFBTUcsbUJBQW1CLEdBQUdILHVCQUF1QixDQUFDRSxhQUFhLENBQUMsYUFBYSxDQUFDO0lBQ2hGLElBQU1FLHNCQUFzQixHQUFHSix1QkFBdUIsQ0FBQ0UsYUFBYSxDQUFDLDBCQUEwQixDQUFDO0lBQ2hHLElBQU1HLHVCQUF1QixHQUFHTCx1QkFBdUIsQ0FBQ0UsYUFBYSxDQUFDLDJCQUEyQixDQUFDO0lBRWxHLElBQUdDLG1CQUFtQixJQUFJQyxzQkFBc0IsSUFBSUMsdUJBQXVCLEVBQUM7TUFFeEUsSUFBTUMsVUFBVSxHQUFHSCxtQkFBbUIsQ0FBQ0ksZ0JBQWdCLENBQUMsWUFBWSxDQUFDO01BQ3JFLElBQU1DLGNBQWMsR0FBR0gsdUJBQXVCLENBQUNFLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDO01BQ25GLElBQU1FLGFBQWEsR0FBR0wsc0JBQXNCLENBQUNHLGdCQUFnQixDQUFDLDBCQUEwQixDQUFDO01BRXpGLElBQUdELFVBQVUsQ0FBQ0ksTUFBTSxHQUFHLENBQUMsRUFBQztRQUNyQkosVUFBVSxDQUFDSyxPQUFPLENBQUMsVUFBQ0MsU0FBUyxFQUFLO1VBRTlCQSxTQUFTLENBQUNDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxVQUFDQyxDQUFDLEVBQUs7WUFFdkM7O1lBRUE7WUFDQSxJQUFHTCxhQUFhLENBQUNDLE1BQU0sR0FBRyxDQUFDLEVBQUM7Y0FDeEJELGFBQWEsQ0FBQ0UsT0FBTyxDQUFDLFVBQUNJLFlBQVksRUFBSztnQkFDcEMsSUFBR0EsWUFBWSxDQUFDQyxPQUFPLENBQUNDLFVBQVUsSUFBSUwsU0FBUyxDQUFDSSxPQUFPLENBQUNDLFVBQVUsRUFBQztrQkFDL0RGLFlBQVksQ0FBQ0csU0FBUyxDQUFDQyxHQUFHLENBQUMsUUFBUSxDQUFDO2dCQUN4QyxDQUFDLE1BQUk7a0JBQ0RKLFlBQVksQ0FBQ0csU0FBUyxDQUFDRSxNQUFNLENBQUMsUUFBUSxDQUFDO2dCQUMzQztjQUNKLENBQUMsQ0FBQztZQUNOOztZQUVBO1lBQ0EsSUFBR1osY0FBYyxDQUFDRSxNQUFNLEdBQUcsQ0FBQyxFQUFDO2NBQ3pCRixjQUFjLENBQUNHLE9BQU8sQ0FBQyxVQUFDVSxhQUFhLEVBQUs7Z0JBQ3RDLElBQUdBLGFBQWEsQ0FBQ0wsT0FBTyxDQUFDQyxVQUFVLElBQUlMLFNBQVMsQ0FBQ0ksT0FBTyxDQUFDQyxVQUFVLEVBQUM7a0JBQ2hFSSxhQUFhLENBQUNILFNBQVMsQ0FBQ0MsR0FBRyxDQUFDLFFBQVEsQ0FBQztnQkFDekMsQ0FBQyxNQUFJO2tCQUNERSxhQUFhLENBQUNILFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLFFBQVEsQ0FBQztnQkFDNUM7Y0FDSixDQUFDLENBQUM7WUFDTjs7WUFFQTtZQUNBZCxVQUFVLENBQUNLLE9BQU8sQ0FBQyxVQUFDVyxPQUFPLEVBQUs7Y0FDNUIsSUFBR0EsT0FBTyxJQUFJVixTQUFTLEVBQUM7Z0JBQ3BCVSxPQUFPLENBQUNKLFNBQVMsQ0FBQ0MsR0FBRyxDQUFDLFFBQVEsQ0FBQztjQUNuQyxDQUFDLE1BQUk7Z0JBQ0RHLE9BQU8sQ0FBQ0osU0FBUyxDQUFDRSxNQUFNLENBQUMsUUFBUSxDQUFDO2NBQ3RDO1lBQ0osQ0FBQyxDQUFDO1VBQ04sQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDO01BQ047SUFDSjtFQUNKO0FBQ0osQ0FBQztBQUVELGlFQUFlckIsZUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vcmVzb3VyY2VzL3NjcmlwdHMvc2VjdGlvbnMvbnV0cml0aW9uLXRhYmxlcy9tYWluLmpzPzljODgiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IG51dHJpdGlvblRhYmxlcyA9ICgpID0+IHtcclxuXHJcbiAgICBjb25zdCAkbnV0cml0aW9uVGFibGVzU2VjdGlvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuc2VjdGlvbi1udXRyaXRpb24tdGFibGVzXCIpO1xyXG4gICAgaWYoJG51dHJpdGlvblRhYmxlc1NlY3Rpb24pe1xyXG5cclxuICAgICAgICBjb25zdCAkdGFibGVUYWJzQ29udGFpbmVyID0gJG51dHJpdGlvblRhYmxlc1NlY3Rpb24ucXVlcnlTZWxlY3RvcihcIi50YWJsZS10YWJzXCIpO1xyXG4gICAgICAgIGNvbnN0ICRtb2JpbGVUYWJsZXNDb250YWluZXIgPSAkbnV0cml0aW9uVGFibGVzU2VjdGlvbi5xdWVyeVNlbGVjdG9yKFwiLm1vYmlsZS10YWJsZXMtY29udGFpbmVyXCIpO1xyXG4gICAgICAgIGNvbnN0ICRkZXNrdG9wVGFibGVzQ29udGFpbmVyID0gJG51dHJpdGlvblRhYmxlc1NlY3Rpb24ucXVlcnlTZWxlY3RvcihcIi5kZXNrdG9wLXRhYmxlcy1jb250YWluZXJcIik7XHJcblxyXG4gICAgICAgIGlmKCR0YWJsZVRhYnNDb250YWluZXIgJiYgJG1vYmlsZVRhYmxlc0NvbnRhaW5lciAmJiAkZGVza3RvcFRhYmxlc0NvbnRhaW5lcil7XHJcblxyXG4gICAgICAgICAgICBjb25zdCAkdGFibGVUYWJzID0gJHRhYmxlVGFic0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiLnRhYmxlLXRhYlwiKTtcclxuICAgICAgICAgICAgY29uc3QgJGRlc2t0b3BUYWJsZXMgPSAkZGVza3RvcFRhYmxlc0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiLnRhYmxlLWNvbnRhaW5lclwiKTtcclxuICAgICAgICAgICAgY29uc3QgJG1vYmlsZVRhYmxlcyA9ICRtb2JpbGVUYWJsZXNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIi5udXRyaXRpb24tdGFibGUtd3JhcHBlclwiKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCR0YWJsZVRhYnMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICAkdGFibGVUYWJzLmZvckVhY2goKCR0YWJsZVRhYikgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkdGFibGVUYWIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL0ZpbmQgdGhlIHJlbGV2YW50IHRhYmxlIGFuZCBzaG93IGl0XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL01vYmlsZSBUYWJsZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoJG1vYmlsZVRhYmxlcy5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtb2JpbGVUYWJsZXMuZm9yRWFjaCgoJG1vYmlsZVRhYmxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJG1vYmlsZVRhYmxlLmRhdGFzZXQudGFibGVHcm91cCA9PSAkdGFibGVUYWIuZGF0YXNldC50YWJsZUdyb3VwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1vYmlsZVRhYmxlLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtb2JpbGVUYWJsZS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL0Rlc2t0b3AgVGFibGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRkZXNrdG9wVGFibGVzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRlc2t0b3BUYWJsZXMuZm9yRWFjaCgoJGRlc2t0b3BUYWJsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRkZXNrdG9wVGFibGUuZGF0YXNldC50YWJsZUdyb3VwID09ICR0YWJsZVRhYi5kYXRhc2V0LnRhYmxlR3JvdXApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGVza3RvcFRhYmxlLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkZXNrdG9wVGFibGUuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9VcGRhdGUgdGhlIFRhYnMgdGhlbXNlbHZlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkdGFibGVUYWJzLmZvckVhY2goKCR0YWJsVGIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR0YWJsVGIgPT0gJHRhYmxlVGFiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFibFRiLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIik7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhYmxUYi5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbnV0cml0aW9uVGFibGVzOyJdLCJuYW1lcyI6WyJudXRyaXRpb25UYWJsZXMiLCIkbnV0cml0aW9uVGFibGVzU2VjdGlvbiIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsIiR0YWJsZVRhYnNDb250YWluZXIiLCIkbW9iaWxlVGFibGVzQ29udGFpbmVyIiwiJGRlc2t0b3BUYWJsZXNDb250YWluZXIiLCIkdGFibGVUYWJzIiwicXVlcnlTZWxlY3RvckFsbCIsIiRkZXNrdG9wVGFibGVzIiwiJG1vYmlsZVRhYmxlcyIsImxlbmd0aCIsImZvckVhY2giLCIkdGFibGVUYWIiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsIiRtb2JpbGVUYWJsZSIsImRhdGFzZXQiLCJ0YWJsZUdyb3VwIiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlIiwiJGRlc2t0b3BUYWJsZSIsIiR0YWJsVGIiXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/nutrition-tables/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/prebuilt-bundle-products/main.js\":\r\n/*!*********************************************************************!*\\\r\n  !*** ./resources/scripts/sections/prebuilt-bundle-products/main.js ***!\r\n  \\*********************************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"prebuiltBundleProducts\\\": () => (/* binding */ prebuiltBundleProducts)\\n/* harmony export */ });\\nfunction _typeof(obj) { \\\"@babel/helpers - typeof\\\"; return _typeof = \\\"function\\\" == typeof Symbol && \\\"symbol\\\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \\\"function\\\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \\\"symbol\\\" : typeof obj; }, _typeof(obj); }\\nfunction _regeneratorRuntime() { \\\"use strict\\\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = \\\"function\\\" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || \\\"@@iterator\\\", asyncIteratorSymbol = $Symbol.asyncIterator || \\\"@@asyncIterator\\\", toStringTagSymbol = $Symbol.toStringTag || \\\"@@toStringTag\\\"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, \\\"\\\"); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, \\\"_invoke\\\", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: \\\"normal\\\", arg: fn.call(obj, arg) }; } catch (err) { return { type: \\\"throw\\\", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { [\\\"next\\\", \\\"throw\\\", \\\"return\\\"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (\\\"throw\\\" !== record.type) { var result = record.arg, value = result.value; return value && \\\"object\\\" == _typeof(value) && hasOwn.call(value, \\\"__await\\\") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke(\\\"next\\\", value, resolve, reject); }, function (err) { invoke(\\\"throw\\\", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke(\\\"throw\\\", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, \\\"_invoke\\\", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = \\\"suspendedStart\\\"; return function (method, arg) { if (\\\"executing\\\" === state) throw new Error(\\\"Generator is already running\\\"); if (\\\"completed\\\" === state) { if (\\\"throw\\\" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (\\\"next\\\" === context.method) context.sent = context._sent = context.arg;else if (\\\"throw\\\" === context.method) { if (\\\"suspendedStart\\\" === state) throw state = \\\"completed\\\", context.arg; context.dispatchException(context.arg); } else \\\"return\\\" === context.method && context.abrupt(\\\"return\\\", context.arg); state = \\\"executing\\\"; var record = tryCatch(innerFn, self, context); if (\\\"normal\\\" === record.type) { if (state = context.done ? \\\"completed\\\" : \\\"suspendedYield\\\", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } \\\"throw\\\" === record.type && (state = \\\"completed\\\", context.method = \\\"throw\\\", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, \\\"throw\\\" === methodName && delegate.iterator[\\\"return\\\"] && (context.method = \\\"return\\\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \\\"throw\\\" === context.method) || \\\"return\\\" !== methodName && (context.method = \\\"throw\\\", context.arg = new TypeError(\\\"The iterator does not provide a '\\\" + methodName + \\\"' method\\\")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if (\\\"throw\\\" === record.type) return context.method = \\\"throw\\\", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \\\"return\\\" !== context.method && (context.method = \\\"next\\\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \\\"throw\\\", context.arg = new TypeError(\\\"iterator result is not an object\\\"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = \\\"normal\\\", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: \\\"root\\\" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if (\\\"function\\\" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, \\\"constructor\\\", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, \\\"constructor\\\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \\\"GeneratorFunction\\\"), exports.isGeneratorFunction = function (genFun) { var ctor = \\\"function\\\" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || \\\"GeneratorFunction\\\" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \\\"GeneratorFunction\\\")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \\\"Generator\\\"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, \\\"toString\\\", function () { return \\\"[object Generator]\\\"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \\\"next\\\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) \\\"t\\\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if (\\\"throw\\\" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = \\\"throw\\\", record.arg = exception, context.next = loc, caught && (context.method = \\\"next\\\", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if (\\\"root\\\" === entry.tryLoc) return handle(\\\"end\\\"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, \\\"catchLoc\\\"), hasFinally = hasOwn.call(entry, \\\"finallyLoc\\\"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error(\\\"try statement without catch or finally\\\"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, \\\"finallyLoc\\\") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && (\\\"break\\\" === type || \\\"continue\\\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = \\\"next\\\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if (\\\"throw\\\" === record.type) throw record.arg; return \\\"break\\\" === record.type || \\\"continue\\\" === record.type ? this.next = record.arg : \\\"return\\\" === record.type ? (this.rval = this.arg = record.arg, this.method = \\\"return\\\", this.next = \\\"end\\\") : \\\"normal\\\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, \\\"catch\\\": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (\\\"throw\\\" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error(\\\"illegal catch attempt\\\"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, \\\"next\\\" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }\\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\\nfunction _nonIterableRest() { throw new TypeError(\\\"Invalid attempt to destructure 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 _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 _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \\\"undefined\\\" != typeof Symbol && arr[Symbol.iterator] || arr[\\\"@@iterator\\\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i[\\\"return\\\"] && (_r = _i[\\\"return\\\"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \\\"next\\\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \\\"throw\\\", err); } _next(undefined); }); }; }\\nvar prebuiltBundleProducts = function prebuiltBundleProducts() {\\n  var restoreAddToCart = function restoreAddToCart($addtoCart, $buttonText) {\\n    $addtoCart.classList.remove(\\\"button--disabled\\\");\\n    $addtoCart.disabled = false;\\n    if ($buttonText) {\\n      $buttonText.textContent = $buttonText.dataset.addText;\\n    }\\n  };\\n  function getDynamicBundle() {\\n    return _getDynamicBundle.apply(this, arguments);\\n  }\\n  function _getDynamicBundle() {\\n    _getDynamicBundle = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\\n      var response, data;\\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\\n        while (1) switch (_context2.prev = _context2.next) {\\n          case 0:\\n            _context2.next = 2;\\n            return fetch('https://api.skio.com/storefront-http/get-dynamic-box', {\\n              method: 'POST',\\n              headers: {\\n                \\\"Content-Type\\\": \\\"application/json\\\"\\n              },\\n              body: JSON.stringify({\\n                \\\"productPlatformId\\\": \\\"15345685561727\\\"\\n              })\\n            });\\n          case 2:\\n            response = _context2.sent;\\n            _context2.next = 5;\\n            return response.json();\\n          case 5:\\n            data = _context2.sent;\\n            return _context2.abrupt(\\\"return\\\", data);\\n          case 7:\\n          case \\\"end\\\":\\n            return _context2.stop();\\n        }\\n      }, _callee2);\\n    }));\\n    return _getDynamicBundle.apply(this, arguments);\\n  }\\n  var addPrebuiltBundleToCart = /*#__PURE__*/function () {\\n    var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee($bundleProducts, purchaseType, sellingPlanId, bundleUrl, $addToCart, $buttonText) {\\n      var bundleId, bundle, dynamicBundleData, lineItems, requestJson, addResp;\\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\\n        while (1) switch (_context.prev = _context.next) {\\n          case 0:\\n            //First - put together the \\\"bundle\\\" object itself\\n            bundleId = \\\"bundle_\\\" + Date.now();\\n            bundle = {\\n              bundleId: bundleId,\\n              items: {}\\n            };\\n            $bundleProducts.forEach(function ($bundleProduct) {\\n              var productId = $bundleProduct.dataset.id;\\n              var productTitle = $bundleProduct.dataset.title;\\n              var productPrice = parseFloat($bundleProduct.dataset.price);\\n              var productPriceString = $bundleProduct.dataset.priceString;\\n              var compareProductPrice = \\\"\\\";\\n              if ($bundleProduct.dataset.comparePrice) {\\n                compareProductPrice = parseFloat($bundleProduct.dataset.comparePrice);\\n              }\\n              var compareProductPriceString = \\\"\\\";\\n              if ($bundleProduct.dataset.comparePriceString) {\\n                compareProductPriceString = $bundleProduct.dataset.comparePriceString;\\n              }\\n              var productImage = $bundleProduct.dataset.image;\\n              var quantity = 1;\\n              bundle.items[productId] = {\\n                title: productTitle,\\n                price: productPrice,\\n                priceString: productPriceString,\\n                comparePrice: compareProductPrice,\\n                comparePriceString: compareProductPriceString,\\n                image: productImage,\\n                quantity: quantity\\n              };\\n            });\\n            if (!(Object.keys(bundle.items).length > 0)) {\\n              _context.next = 22;\\n              break;\\n            }\\n            _context.next = 6;\\n            return getDynamicBundle();\\n          case 6:\\n            dynamicBundleData = _context.sent;\\n            if (!dynamicBundleData.ok) {\\n              _context.next = 17;\\n              break;\\n            }\\n            lineItems = [];\\n            Object.entries(bundle.items).forEach(function (_ref2) {\\n              var _ref3 = _slicedToArray(_ref2, 2),\\n                productId = _ref3[0],\\n                item = _ref3[1];\\n              var itemData = {\\n                id: productId,\\n                quantity: item.quantity,\\n                properties: {\\n                  _bundle_id: bundleId,\\n                  _dynamicBoxIndex: bundleId,\\n                  _dynamicBoxId: dynamicBundleData.DynamicBox.boxId,\\n                  _bundleType: bundleUrl,\\n                  _bundleUrl: bundleUrl\\n                }\\n              };\\n              if (purchaseType == \\\"subscription\\\") {\\n                itemData.selling_plan = sellingPlanId;\\n              }\\n              lineItems.push(itemData);\\n            });\\n            requestJson = {\\n              items: lineItems\\n            };\\n            _context.next = 13;\\n            return fetch('/cart/add.js', {\\n              method: 'POST',\\n              headers: {\\n                'Content-Type': 'application/json'\\n              },\\n              body: JSON.stringify(requestJson)\\n            });\\n          case 13:\\n            addResp = _context.sent;\\n            if (addResp) {\\n              //restoreAddToCart($addToCart,$buttonText);\\n              if ($buttonText) {\\n                $buttonText.textContent = \\\"Added\\\";\\n              }\\n              window.location.href = \\\"/cart\\\";\\n            } else {\\n              alert(\\\"An Error has occured and we were unable to add this bundle to your cart.\\\");\\n              restoreButtons($tabs, $addToCart, $buttonText);\\n            }\\n            _context.next = 20;\\n            break;\\n          case 17:\\n            console.log(\\\"unable to fetch Skio Dynamic Box Data - cannot add to cart\\\");\\n            alert(\\\"An Error has occured and we were unable to add this bundle to your cart.\\\");\\n            restoreAddToCart($addToCart, $buttonText);\\n          case 20:\\n            _context.next = 25;\\n            break;\\n          case 22:\\n            console.log(\\\"Bundle items is empty, unable to add to cart\\\");\\n            alert(\\\"An Error has occured and we were unable to add this bundle to your cart.\\\");\\n            restoreAddToCart($addToCart, $buttonText);\\n          case 25:\\n          case \\\"end\\\":\\n            return _context.stop();\\n        }\\n      }, _callee);\\n    }));\\n    return function addPrebuiltBundleToCart(_x, _x2, _x3, _x4, _x5, _x6) {\\n      return _ref.apply(this, arguments);\\n    };\\n  }();\\n  var $prebuiltBundleTemplates = document.querySelectorAll(\\\".product-prebuilt-template\\\");\\n  if ($prebuiltBundleTemplates.length > 0) {\\n    $prebuiltBundleTemplates.forEach(function ($prebuiltBundleTemplate) {\\n      var $addToCart = $prebuiltBundleTemplate.querySelector(\\\".prebuilt-bundle__add-to-cart\\\");\\n      if ($addToCart) {\\n        var $price = $addToCart.querySelector(\\\".product-price\\\");\\n        var $compareAtPrice = $addToCart.querySelector(\\\".product-comparison-price\\\");\\n        var $atcText = $addToCart.querySelector(\\\".button-text\\\");\\n        var $bundleContents = $prebuiltBundleTemplate.querySelector(\\\".bundle-contents-list\\\");\\n        var $purchaseTypeOptions = $prebuiltBundleTemplate.querySelectorAll(\\\".prebuilt-bundle__purchase-types .prebuilt-bundle__purchase-type\\\");\\n\\n        //Bind the Purchase Type Selection\\n        if ($purchaseTypeOptions.length > 0) {\\n          $purchaseTypeOptions.forEach(function ($purchaseTypeOption) {\\n            $purchaseTypeOption.addEventListener(\\\"click\\\", function (e) {\\n              e.preventDefault();\\n              if (!$purchaseTypeOption.classList.contains(\\\"active\\\")) {\\n                $purchaseTypeOptions.forEach(function ($prchsTypOpt) {\\n                  $prchsTypOpt.classList.toggle(\\\"active\\\");\\n                });\\n                var $purchaseTypePrice = $purchaseTypeOption.querySelector(\\\".price\\\");\\n\\n                //Change the Price on the Button\\n                if ($purchaseTypeOption.dataset.type == \\\"subscription\\\") {\\n                  $compareAtPrice.style.display = \\\"\\\";\\n                } else {\\n                  $compareAtPrice.style.display = \\\"none\\\";\\n                }\\n                $price.textContent = $purchaseTypePrice.textContent;\\n              }\\n            });\\n          });\\n        }\\n        if ($bundleContents) {\\n          //Bind Add to Cart\\n          $addToCart.addEventListener(\\\"click\\\", function (e) {\\n            e.preventDefault();\\n\\n            //Disable the button and update the text to indicate to customer that something is happening\\n            $addToCart.classList.add(\\\"button--disabled\\\");\\n            $addToCart.disabled = true;\\n            var $buttonText = $addToCart.querySelector(\\\".button-text\\\");\\n            if ($buttonText) {\\n              $buttonText.textContent = \\\"Adding\\\";\\n            }\\n\\n            //Find the Products and Loop through to Build Our Bundle\\n            var $bundleProducts = $bundleContents.querySelectorAll(\\\".bundle-contents-product\\\");\\n            if ($bundleProducts.length > 0) {\\n              var sellingPlanId = $bundleContents.dataset.sellingPlanId;\\n              var bundleUrl = $bundleContents.dataset.bundleUrl;\\n\\n              // we need to decide whether this should be a selling plan or not\\n              var purchaseType = \\\"onetime-purchase\\\";\\n              if ($purchaseTypeOptions.length > 0) {\\n                $purchaseTypeOptions.forEach(function ($prchsTyp) {\\n                  if ($prchsTyp.classList.contains(\\\"active\\\")) {\\n                    if ($prchsTyp.dataset.type) {\\n                      purchaseType = $prchsTyp.dataset.type;\\n                    }\\n                  }\\n                });\\n              }\\n              addPrebuiltBundleToCart($bundleProducts, purchaseType, sellingPlanId, bundleUrl, $addToCart, $buttonText);\\n            }\\n          });\\n        } else {\\n          console.log(\\\"unable to find bundle-contents. Cannot build the bundle to add to cart without the bundle contents information\\\");\\n        }\\n      }\\n    });\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (prebuiltBundleProducts);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9wcmVidWlsdC1idW5kbGUtcHJvZHVjdHMvbWFpbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7K0NBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRE8sSUFBTUEsc0JBQXNCLEdBQUcsU0FBekJBLHNCQUFzQixHQUFTO0VBRXhDLElBQU1DLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0IsQ0FBSUMsVUFBVSxFQUFDQyxXQUFXLEVBQUs7SUFDakRELFVBQVUsQ0FBQ0UsU0FBUyxDQUFDQyxNQUFNLENBQUMsa0JBQWtCLENBQUM7SUFDL0NILFVBQVUsQ0FBQ0ksUUFBUSxHQUFHLEtBQUs7SUFFM0IsSUFBR0gsV0FBVyxFQUFDO01BQ1hBLFdBQVcsQ0FBQ0ksV0FBVyxHQUFHSixXQUFXLENBQUNLLE9BQU8sQ0FBQ0MsT0FBTztJQUN6RDtFQUNKLENBQUM7RUFBQSxTQUVjQyxnQkFBZ0I7SUFBQTtFQUFBO0VBQUE7SUFBQSwrRUFBL0I7TUFBQTtNQUFBO1FBQUE7VUFBQTtZQUFBO1lBQUEsT0FDMkJDLEtBQUssQ0FBQyxzREFBc0QsRUFBRTtjQUNqRkMsTUFBTSxFQUFFLE1BQU07Y0FDZEMsT0FBTyxFQUFFO2dCQUNMLGNBQWMsRUFBRTtjQUNwQixDQUFDO2NBQ0RDLElBQUksRUFBRUMsSUFBSSxDQUFDQyxTQUFTLENBQUM7Z0JBQ2pCLG1CQUFtQixFQUFFO2NBQ3pCLENBQUM7WUFDTCxDQUFDLENBQUM7VUFBQTtZQVJJQyxRQUFRO1lBQUE7WUFBQSxPQVVLQSxRQUFRLENBQUNDLElBQUksRUFBRTtVQUFBO1lBQTVCQyxJQUFJO1lBQUEsa0NBQ0hBLElBQUk7VUFBQTtVQUFBO1lBQUE7UUFBQTtNQUFBO0lBQUEsQ0FDZDtJQUFBO0VBQUE7RUFFRCxJQUFNQyx1QkFBdUI7SUFBQSxzRUFBRyxpQkFBT0MsZUFBZSxFQUFDQyxZQUFZLEVBQUNDLGFBQWEsRUFBQ0MsU0FBUyxFQUFDQyxV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QUM7b0JBQ3RDLElBQUdRLFNBQVMsQ0FBQzVGLE9BQU8sQ0FBQ3dGLElBQUksRUFBQztzQkFDdEIxRSxZQUFZLEdBQUc4RSxTQUFTLENBQUM1RixPQUFPLENBQUN3RixJQUFJO29CQUN6QztrQkFDSjtnQkFDSixDQUFDLENBQUM7Y0FDTjtjQUVBNUUsdUJBQXVCLENBQUNDLGVBQWUsRUFBQ0MsWUFBWSxFQUFDQyxhQUFhLEVBQUNDLFNBQVMsRUFBQ0MsVUFBVSxFQUFDdEIsV0FBVyxDQUFDO1lBQ3hHO1VBQ0osQ0FBQyxDQUFDO1FBQ04sQ0FBQyxNQUFJO1VBQ0R5RSxPQUFPLENBQUNDLEdBQUcsQ0FBQyxnSEFBZ0gsQ0FBQztRQUNqSTtNQUNKO0lBQ0osQ0FBQyxDQUFDO0VBQ047QUFDSixDQUFDO0FBR0QsaUVBQWU3RSxzQkFBc0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL3Jlc291cmNlcy9zY3JpcHRzL3NlY3Rpb25zL3ByZWJ1aWx0LWJ1bmRsZS1wcm9kdWN0cy9tYWluLmpzPzYwZDUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHByZWJ1aWx0QnVuZGxlUHJvZHVjdHMgPSAoKSA9PiB7XHJcblxyXG4gICAgY29uc3QgcmVzdG9yZUFkZFRvQ2FydCA9ICgkYWRkdG9DYXJ0LCRidXR0b25UZXh0KSA9PiB7XHJcbiAgICAgICAgJGFkZHRvQ2FydC5jbGFzc0xpc3QucmVtb3ZlKFwiYnV0dG9uLS1kaXNhYmxlZFwiKTtcclxuICAgICAgICAkYWRkdG9DYXJ0LmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoJGJ1dHRvblRleHQpe1xyXG4gICAgICAgICAgICAkYnV0dG9uVGV4dC50ZXh0Q29udGVudCA9ICRidXR0b25UZXh0LmRhdGFzZXQuYWRkVGV4dDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZnVuY3Rpb24gZ2V0RHluYW1pY0J1bmRsZSAoKXtcclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKCdodHRwczovL2FwaS5za2lvLmNvbS9zdG9yZWZyb250LWh0dHAvZ2V0LWR5bmFtaWMtYm94Jywge1xyXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCJcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICAgICAgXCJwcm9kdWN0UGxhdGZvcm1JZFwiOiBcIjE1MzQ1Njg1NTYxNzI3XCJcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KTtcclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFkZFByZWJ1aWx0QnVuZGxlVG9DYXJ0ID0gYXN5bmMgKCRidW5kbGVQcm9kdWN0cyxwdXJjaGFzZVR5cGUsc2VsbGluZ1BsYW5JZCxidW5kbGVVcmwsJGFkZFRvQ2FydCwkYnV0dG9uVGV4dCkgPT4ge1xyXG5cclxuICAgICAgICAvL0ZpcnN0IC0gcHV0IHRvZ2V0aGVyIHRoZSBcImJ1bmRsZVwiIG9iamVjdCBpdHNlbGZcclxuICAgICAgICBjb25zdCBidW5kbGVJZCA9IFwiYnVuZGxlX1wiICsgRGF0ZS5ub3coKTtcclxuICAgICAgICBsZXQgYnVuZGxlID0ge1xyXG4gICAgICAgICAgICBidW5kbGVJZDogYnVuZGxlSWQsXHJcbiAgICAgICAgICAgIGl0ZW1zOiB7fVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgICRidW5kbGVQcm9kdWN0cy5mb3JFYWNoKCgkYnVuZGxlUHJvZHVjdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcHJvZHVjdElkID0gJGJ1bmRsZVByb2R1Y3QuZGF0YXNldC5pZDtcclxuICAgICAgICAgICAgY29uc3QgcHJvZHVjdFRpdGxlID0gJGJ1bmRsZVByb2R1Y3QuZGF0YXNldC50aXRsZTtcclxuICAgICAgICAgICAgY29uc3QgcHJvZHVjdFByaWNlID0gcGFyc2VGbG9hdCgkYnVuZGxlUHJvZHVjdC5kYXRhc2V0LnByaWNlKTtcclxuICAgICAgICAgICAgY29uc3QgcHJvZHVjdFByaWNlU3RyaW5nID0gJGJ1bmRsZVByb2R1Y3QuZGF0YXNldC5wcmljZVN0cmluZztcclxuICAgICAgICAgICAgbGV0IGNvbXBhcmVQcm9kdWN0UHJpY2UgPSBcIlwiO1xyXG4gICAgICAgICAgICBpZigkYnVuZGxlUHJvZHVjdC5kYXRhc2V0LmNvbXBhcmVQcmljZSl7XHJcbiAgICAgICAgICAgICAgICBjb21wYXJlUHJvZHVjdFByaWNlID0gcGFyc2VGbG9hdCgkYnVuZGxlUHJvZHVjdC5kYXRhc2V0LmNvbXBhcmVQcmljZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBjb21wYXJlUHJvZHVjdFByaWNlU3RyaW5nID0gXCJcIjtcclxuICAgICAgICAgICAgaWYoJGJ1bmRsZVByb2R1Y3QuZGF0YXNldC5jb21wYXJlUHJpY2VTdHJpbmcpe1xyXG4gICAgICAgICAgICAgICAgY29tcGFyZVByb2R1Y3RQcmljZVN0cmluZyA9ICRidW5kbGVQcm9kdWN0LmRhdGFzZXQuY29tcGFyZVByaWNlU3RyaW5nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0SW1hZ2UgPSAkYnVuZGxlUHJvZHVjdC5kYXRhc2V0LmltYWdlO1xyXG4gICAgICAgICAgICBjb25zdCBxdWFudGl0eSA9IDE7XHJcblxyXG4gICAgICAgICAgICBidW5kbGUuaXRlbXNbcHJvZHVjdElkXSA9IHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9kdWN0VGl0bGUsXHJcbiAgICAgICAgICAgICAgICBwcmljZTogcHJvZHVjdFByaWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpY2VTdHJpbmc6IHByb2R1Y3RQcmljZVN0cmluZyxcclxuICAgICAgICAgICAgICAgIGNvbXBhcmVQcmljZTogY29tcGFyZVByb2R1Y3RQcmljZSxcclxuICAgICAgICAgICAgICAgIGNvbXBhcmVQcmljZVN0cmluZzogY29tcGFyZVByb2R1Y3RQcmljZVN0cmluZyxcclxuICAgICAgICAgICAgICAgIGltYWdlOiBwcm9kdWN0SW1hZ2UsXHJcbiAgICAgICAgICAgICAgICBxdWFudGl0eTogcXVhbnRpdHksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmKE9iamVjdC5rZXlzKGJ1bmRsZS5pdGVtcykubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZHluYW1pY0J1bmRsZURhdGEgPSBhd2FpdCBnZXREeW5hbWljQnVuZGxlKCk7XHJcbiAgICAgICAgICAgIGlmKGR5bmFtaWNCdW5kbGVEYXRhLm9rKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lSXRlbXMgPSBbXTsgIFxyXG5cclxuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGJ1bmRsZS5pdGVtcykuZm9yRWFjaCgoW3Byb2R1Y3RJZCwgaXRlbV0pID0+IHsgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbURhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwcm9kdWN0SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiBpdGVtLnF1YW50aXR5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYnVuZGxlX2lkOiBidW5kbGVJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9keW5hbWljQm94SW5kZXg6IGJ1bmRsZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2R5bmFtaWNCb3hJZDogZHluYW1pY0J1bmRsZURhdGEuRHluYW1pY0JveC5ib3hJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9idW5kbGVUeXBlOiBidW5kbGVVcmwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYnVuZGxlVXJsOiBidW5kbGVVcmxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHB1cmNoYXNlVHlwZSA9PSBcInN1YnNjcmlwdGlvblwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURhdGEuc2VsbGluZ19wbGFuID0gc2VsbGluZ1BsYW5JZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgbGluZUl0ZW1zLnB1c2goaXRlbURhdGEpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdEpzb24gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IGxpbmVJdGVtcyxcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgYWRkUmVzcCA9IGF3YWl0IGZldGNoKCcvY2FydC9hZGQuanMnLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVxdWVzdEpzb24pXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBpZihhZGRSZXNwKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9yZXN0b3JlQWRkVG9DYXJ0KCRhZGRUb0NhcnQsJGJ1dHRvblRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCRidXR0b25UZXh0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJGJ1dHRvblRleHQudGV4dENvbnRlbnQgPSBcIkFkZGVkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiL2NhcnRcIjtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KFwiQW4gRXJyb3IgaGFzIG9jY3VyZWQgYW5kIHdlIHdlcmUgdW5hYmxlIHRvIGFkZCB0aGlzIGJ1bmRsZSB0byB5b3VyIGNhcnQuXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdG9yZUJ1dHRvbnMoJHRhYnMsJGFkZFRvQ2FydCwkYnV0dG9uVGV4dCk7XHJcbiAgICAgICAgICAgICAgICB9ICAgXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJ1bmFibGUgdG8gZmV0Y2ggU2tpbyBEeW5hbWljIEJveCBEYXRhIC0gY2Fubm90IGFkZCB0byBjYXJ0XCIpO1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoXCJBbiBFcnJvciBoYXMgb2NjdXJlZCBhbmQgd2Ugd2VyZSB1bmFibGUgdG8gYWRkIHRoaXMgYnVuZGxlIHRvIHlvdXIgY2FydC5cIilcclxuICAgICAgICAgICAgICAgIHJlc3RvcmVBZGRUb0NhcnQoJGFkZFRvQ2FydCwkYnV0dG9uVGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJCdW5kbGUgaXRlbXMgaXMgZW1wdHksIHVuYWJsZSB0byBhZGQgdG8gY2FydFwiKTtcclxuICAgICAgICAgICAgYWxlcnQoXCJBbiBFcnJvciBoYXMgb2NjdXJlZCBhbmQgd2Ugd2VyZSB1bmFibGUgdG8gYWRkIHRoaXMgYnVuZGxlIHRvIHlvdXIgY2FydC5cIilcclxuICAgICAgICAgICAgcmVzdG9yZUFkZFRvQ2FydCgkYWRkVG9DYXJ0LCRidXR0b25UZXh0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgJHByZWJ1aWx0QnVuZGxlVGVtcGxhdGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5wcm9kdWN0LXByZWJ1aWx0LXRlbXBsYXRlXCIpO1xyXG4gICAgaWYoJHByZWJ1aWx0QnVuZGxlVGVtcGxhdGVzLmxlbmd0aCA+IDApe1xyXG5cclxuICAgICAgICAkcHJlYnVpbHRCdW5kbGVUZW1wbGF0ZXMuZm9yRWFjaCgoJHByZWJ1aWx0QnVuZGxlVGVtcGxhdGUpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0ICRhZGRUb0NhcnQgPSAkcHJlYnVpbHRCdW5kbGVUZW1wbGF0ZS5xdWVyeVNlbGVjdG9yKFwiLnByZWJ1aWx0LWJ1bmRsZV9fYWRkLXRvLWNhcnRcIik7XHJcblxyXG4gICAgICAgICAgICBpZigkYWRkVG9DYXJ0KXtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3QgJHByaWNlID0gJGFkZFRvQ2FydC5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtcHJpY2VcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCAkY29tcGFyZUF0UHJpY2UgPSAkYWRkVG9DYXJ0LnF1ZXJ5U2VsZWN0b3IoXCIucHJvZHVjdC1jb21wYXJpc29uLXByaWNlXCIpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgJGF0Y1RleHQgPSAkYWRkVG9DYXJ0LnF1ZXJ5U2VsZWN0b3IoXCIuYnV0dG9uLXRleHRcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCAkYnVuZGxlQ29udGVudHMgPSAkcHJlYnVpbHRCdW5kbGVUZW1wbGF0ZS5xdWVyeVNlbGVjdG9yKFwiLmJ1bmRsZS1jb250ZW50cy1saXN0XCIpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgJHB1cmNoYXNlVHlwZU9wdGlvbnMgPSAkcHJlYnVpbHRCdW5kbGVUZW1wbGF0ZS5xdWVyeVNlbGVjdG9yQWxsKFwiLnByZWJ1aWx0LWJ1bmRsZV9fcHVyY2hhc2UtdHlwZXMgLnByZWJ1aWx0LWJ1bmRsZV9fcHVyY2hhc2UtdHlwZVwiKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy9CaW5kIHRoZSBQdXJjaGFzZSBUeXBlIFNlbGVjdGlvblxyXG4gICAgICAgICAgICAgICAgaWYoJHB1cmNoYXNlVHlwZU9wdGlvbnMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgJHB1cmNoYXNlVHlwZU9wdGlvbnMuZm9yRWFjaCgoJHB1cmNoYXNlVHlwZU9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkcHVyY2hhc2VUeXBlT3B0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighJHB1cmNoYXNlVHlwZU9wdGlvbi5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwdXJjaGFzZVR5cGVPcHRpb25zLmZvckVhY2goKCRwcmNoc1R5cE9wdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHJjaHNUeXBPcHQuY2xhc3NMaXN0LnRvZ2dsZShcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgJHB1cmNoYXNlVHlwZVByaWNlID0gJHB1cmNoYXNlVHlwZU9wdGlvbi5xdWVyeVNlbGVjdG9yKFwiLnByaWNlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQ2hhbmdlIHRoZSBQcmljZSBvbiB0aGUgQnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHB1cmNoYXNlVHlwZU9wdGlvbi5kYXRhc2V0LnR5cGUgPT0gXCJzdWJzY3JpcHRpb25cIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb21wYXJlQXRQcmljZS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbXBhcmVBdFByaWNlLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHByaWNlLnRleHRDb250ZW50ID0gJHB1cmNoYXNlVHlwZVByaWNlLnRleHRDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZigkYnVuZGxlQ29udGVudHMpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL0JpbmQgQWRkIHRvIENhcnRcclxuICAgICAgICAgICAgICAgICAgICAkYWRkVG9DYXJ0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLChlKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL0Rpc2FibGUgdGhlIGJ1dHRvbiBhbmQgdXBkYXRlIHRoZSB0ZXh0IHRvIGluZGljYXRlIHRvIGN1c3RvbWVyIHRoYXQgc29tZXRoaW5nIGlzIGhhcHBlbmluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkYWRkVG9DYXJ0LmNsYXNzTGlzdC5hZGQoXCJidXR0b24tLWRpc2FibGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkYWRkVG9DYXJ0LmRpc2FibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICRidXR0b25UZXh0ID0gJGFkZFRvQ2FydC5xdWVyeVNlbGVjdG9yKFwiLmJ1dHRvbi10ZXh0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZigkYnV0dG9uVGV4dCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYnV0dG9uVGV4dC50ZXh0Q29udGVudCA9IFwiQWRkaW5nXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vRmluZCB0aGUgUHJvZHVjdHMgYW5kIExvb3AgdGhyb3VnaCB0byBCdWlsZCBPdXIgQnVuZGxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICRidW5kbGVQcm9kdWN0cyA9ICRidW5kbGVDb250ZW50cy5xdWVyeVNlbGVjdG9yQWxsKFwiLmJ1bmRsZS1jb250ZW50cy1wcm9kdWN0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZigkYnVuZGxlUHJvZHVjdHMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxsaW5nUGxhbklkID0gJGJ1bmRsZUNvbnRlbnRzLmRhdGFzZXQuc2VsbGluZ1BsYW5JZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1bmRsZVVybCA9ICRidW5kbGVDb250ZW50cy5kYXRhc2V0LmJ1bmRsZVVybDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGRlY2lkZSB3aGV0aGVyIHRoaXMgc2hvdWxkIGJlIGEgc2VsbGluZyBwbGFuIG9yIG5vdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHB1cmNoYXNlVHlwZSA9IFwib25ldGltZS1wdXJjaGFzZVwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHB1cmNoYXNlVHlwZU9wdGlvbnMubGVuZ3RoID4gMCl7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwdXJjaGFzZVR5cGVPcHRpb25zLmZvckVhY2goKCRwcmNoc1R5cCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkcHJjaHNUeXAuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRwcmNoc1R5cC5kYXRhc2V0LnR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1cmNoYXNlVHlwZSA9ICRwcmNoc1R5cC5kYXRhc2V0LnR5cGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRQcmVidWlsdEJ1bmRsZVRvQ2FydCgkYnVuZGxlUHJvZHVjdHMscHVyY2hhc2VUeXBlLHNlbGxpbmdQbGFuSWQsYnVuZGxlVXJsLCRhZGRUb0NhcnQsJGJ1dHRvblRleHQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJ1bmFibGUgdG8gZmluZCBidW5kbGUtY29udGVudHMuIENhbm5vdCBidWlsZCB0aGUgYnVuZGxlIHRvIGFkZCB0byBjYXJ0IHdpdGhvdXQgdGhlIGJ1bmRsZSBjb250ZW50cyBpbmZvcm1hdGlvblwiKTtcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHByZWJ1aWx0QnVuZGxlUHJvZHVjdHM7Il0sIm5hbWVzIjpbInByZWJ1aWx0QnVuZGxlUHJvZHVjdHMiLCJyZXN0b3JlQWRkVG9DYXJ0IiwiJGFkZHRvQ2FydCIsIiRidXR0b25UZXh0IiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwiZGlzYWJsZWQiLCJ0ZXh0Q29udGVudCIsImRhdGFzZXQiLCJhZGRUZXh0IiwiZ2V0RHluYW1pY0J1bmRsZSIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwicmVzcG9uc2UiLCJqc29uIiwiZGF0YSIsImFkZFByZWJ1aWx0QnVuZGxlVG9DYXJ0IiwiJGJ1bmRsZVByb2R1Y3RzIiwicHVyY2hhc2VUeXBlIiwic2VsbGluZ1BsYW5JZCIsImJ1bmRsZVVybCIsIiRhZGRUb0NhcnQiLCJidW5kbGVJZCIsIkRhdGUiLCJub3ciLCJidW5kbGUiLCJpdGVtcyIsImZvckVhY2giLCIkYnVuZGxlUHJvZHVjdCIsInByb2R1Y3RJZCIsImlkIiwicHJvZHVjdFRpdGxlIiwidGl0bGUiLCJwcm9kdWN0UHJpY2UiLCJwYXJzZUZsb2F0IiwicHJpY2UiLCJwcm9kdWN0UHJpY2VTdHJpbmciLCJwcmljZVN0cmluZyIsImNvbXBhcmVQcm9kdWN0UHJpY2UiLCJjb21wYXJlUHJpY2UiLCJjb21wYXJlUHJvZHVjdFByaWNlU3RyaW5nIiwiY29tcGFyZVByaWNlU3RyaW5nIiwicHJvZHVjdEltYWdlIiwiaW1hZ2UiLCJxdWFudGl0eSIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJkeW5hbWljQnVuZGxlRGF0YSIsIm9rIiwibGluZUl0ZW1zIiwiZW50cmllcyIsIml0ZW0iLCJpdGVtRGF0YSIsInByb3BlcnRpZXMiLCJfYnVuZGxlX2lkIiwiX2R5bmFtaWNCb3hJbmRleCIsIl9keW5hbWljQm94SWQiLCJEeW5hbWljQm94IiwiYm94SWQiLCJfYnVuZGxlVHlwZSIsIl9idW5kbGVVcmwiLCJzZWxsaW5nX3BsYW4iLCJwdXNoIiwicmVxdWVzdEpzb24iLCJhZGRSZXNwIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiYWxlcnQiLCJyZXN0b3JlQnV0dG9ucyIsIiR0YWJzIiwiY29uc29sZSIsImxvZyIsIiRwcmVidWlsdEJ1bmRsZVRlbXBsYXRlcyIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsIiRwcmVidWlsdEJ1bmRsZVRlbXBsYXRlIiwicXVlcnlTZWxlY3RvciIsIiRwcmljZSIsIiRjb21wYXJlQXRQcmljZSIsIiRhdGNUZXh0IiwiJGJ1bmRsZUNvbnRlbnRzIiwiJHB1cmNoYXNlVHlwZU9wdGlvbnMiLCIkcHVyY2hhc2VUeXBlT3B0aW9uIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImNvbnRhaW5zIiwiJHByY2hzVHlwT3B0IiwidG9nZ2xlIiwiJHB1cmNoYXNlVHlwZVByaWNlIiwidHlwZSIsInN0eWxlIiwiZGlzcGxheSIsImFkZCIsIiRwcmNoc1R5cCJdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/prebuilt-bundle-products/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/prebuilt-bundles/main.js\":\r\n/*!*************************************************************!*\\\r\n  !*** ./resources/scripts/sections/prebuilt-bundles/main.js ***!\r\n  \\*************************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"prebuiltBundles\\\": () => (/* binding */ prebuiltBundles)\\n/* harmony export */ });\\n/* harmony import */ var gsap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! gsap */ \\\"./node_modules/gsap/index.js\\\");\\n/* harmony import */ var gsap_src_ScrollTrigger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! gsap/src/ScrollTrigger */ \\\"./node_modules/gsap/src/ScrollTrigger.js\\\");\\nfunction _typeof(obj) { \\\"@babel/helpers - typeof\\\"; return _typeof = \\\"function\\\" == typeof Symbol && \\\"symbol\\\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \\\"function\\\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \\\"symbol\\\" : typeof obj; }, _typeof(obj); }\\nfunction _regeneratorRuntime() { \\\"use strict\\\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = \\\"function\\\" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || \\\"@@iterator\\\", asyncIteratorSymbol = $Symbol.asyncIterator || \\\"@@asyncIterator\\\", toStringTagSymbol = $Symbol.toStringTag || \\\"@@toStringTag\\\"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, \\\"\\\"); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, \\\"_invoke\\\", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: \\\"normal\\\", arg: fn.call(obj, arg) }; } catch (err) { return { type: \\\"throw\\\", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { [\\\"next\\\", \\\"throw\\\", \\\"return\\\"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (\\\"throw\\\" !== record.type) { var result = record.arg, value = result.value; return value && \\\"object\\\" == _typeof(value) && hasOwn.call(value, \\\"__await\\\") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke(\\\"next\\\", value, resolve, reject); }, function (err) { invoke(\\\"throw\\\", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke(\\\"throw\\\", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, \\\"_invoke\\\", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = \\\"suspendedStart\\\"; return function (method, arg) { if (\\\"executing\\\" === state) throw new Error(\\\"Generator is already running\\\"); if (\\\"completed\\\" === state) { if (\\\"throw\\\" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (\\\"next\\\" === context.method) context.sent = context._sent = context.arg;else if (\\\"throw\\\" === context.method) { if (\\\"suspendedStart\\\" === state) throw state = \\\"completed\\\", context.arg; context.dispatchException(context.arg); } else \\\"return\\\" === context.method && context.abrupt(\\\"return\\\", context.arg); state = \\\"executing\\\"; var record = tryCatch(innerFn, self, context); if (\\\"normal\\\" === record.type) { if (state = context.done ? \\\"completed\\\" : \\\"suspendedYield\\\", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } \\\"throw\\\" === record.type && (state = \\\"completed\\\", context.method = \\\"throw\\\", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, \\\"throw\\\" === methodName && delegate.iterator[\\\"return\\\"] && (context.method = \\\"return\\\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \\\"throw\\\" === context.method) || \\\"return\\\" !== methodName && (context.method = \\\"throw\\\", context.arg = new TypeError(\\\"The iterator does not provide a '\\\" + methodName + \\\"' method\\\")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if (\\\"throw\\\" === record.type) return context.method = \\\"throw\\\", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \\\"return\\\" !== context.method && (context.method = \\\"next\\\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \\\"throw\\\", context.arg = new TypeError(\\\"iterator result is not an object\\\"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = \\\"normal\\\", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: \\\"root\\\" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if (\\\"function\\\" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, \\\"constructor\\\", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, \\\"constructor\\\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \\\"GeneratorFunction\\\"), exports.isGeneratorFunction = function (genFun) { var ctor = \\\"function\\\" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || \\\"GeneratorFunction\\\" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \\\"GeneratorFunction\\\")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \\\"Generator\\\"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, \\\"toString\\\", function () { return \\\"[object Generator]\\\"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \\\"next\\\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) \\\"t\\\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if (\\\"throw\\\" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = \\\"throw\\\", record.arg = exception, context.next = loc, caught && (context.method = \\\"next\\\", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if (\\\"root\\\" === entry.tryLoc) return handle(\\\"end\\\"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, \\\"catchLoc\\\"), hasFinally = hasOwn.call(entry, \\\"finallyLoc\\\"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error(\\\"try statement without catch or finally\\\"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, \\\"finallyLoc\\\") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && (\\\"break\\\" === type || \\\"continue\\\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = \\\"next\\\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if (\\\"throw\\\" === record.type) throw record.arg; return \\\"break\\\" === record.type || \\\"continue\\\" === record.type ? this.next = record.arg : \\\"return\\\" === record.type ? (this.rval = this.arg = record.arg, this.method = \\\"return\\\", this.next = \\\"end\\\") : \\\"normal\\\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, \\\"catch\\\": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (\\\"throw\\\" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error(\\\"illegal catch attempt\\\"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, \\\"next\\\" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }\\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\\nfunction _nonIterableRest() { throw new TypeError(\\\"Invalid attempt to destructure 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 _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 _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : \\\"undefined\\\" != typeof Symbol && arr[Symbol.iterator] || arr[\\\"@@iterator\\\"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i[\\\"return\\\"] && (_r = _i[\\\"return\\\"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } }\\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \\\"next\\\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \\\"throw\\\", err); } _next(undefined); }); }; }\\n\\n\\ngsap__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"].registerPlugin(gsap_src_ScrollTrigger__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"]);\\nvar prebuiltBundles = function prebuiltBundles() {\\n  var restoreButtons = function restoreButtons($tabs, $addtoCart, $buttonText) {\\n    if ($tabs.length > 0) {\\n      $tabs.forEach(function ($tab) {\\n        $tab.classList.remove(\\\"pointer-events-none\\\");\\n      });\\n    }\\n    $addtoCart.classList.remove(\\\"button--disabled\\\");\\n    $addtoCart.disabled = false;\\n    if ($buttonText) {\\n      $buttonText.textContent = $buttonText.dataset.addText;\\n    }\\n  };\\n  function getDynamicBundle() {\\n    return _getDynamicBundle.apply(this, arguments);\\n  }\\n  function _getDynamicBundle() {\\n    _getDynamicBundle = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {\\n      var response, data;\\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\\n        while (1) switch (_context2.prev = _context2.next) {\\n          case 0:\\n            _context2.next = 2;\\n            return fetch('https://api.skio.com/storefront-http/get-dynamic-box', {\\n              method: 'POST',\\n              headers: {\\n                \\\"Content-Type\\\": \\\"application/json\\\"\\n              },\\n              body: JSON.stringify({\\n                \\\"productPlatformId\\\": \\\"15345685561727\\\"\\n              })\\n            });\\n          case 2:\\n            response = _context2.sent;\\n            _context2.next = 5;\\n            return response.json();\\n          case 5:\\n            data = _context2.sent;\\n            return _context2.abrupt(\\\"return\\\", data);\\n          case 7:\\n          case \\\"end\\\":\\n            return _context2.stop();\\n        }\\n      }, _callee2);\\n    }));\\n    return _getDynamicBundle.apply(this, arguments);\\n  }\\n  var addPrebuiltBundleToCart = /*#__PURE__*/function () {\\n    var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee($bundleProducts, sellingPlanId, url, $tabs, $addtoCart, $buttonText) {\\n      var bundleId, bundle, dynamicBundleData, lineItems, requestJson, addResp;\\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\\n        while (1) switch (_context.prev = _context.next) {\\n          case 0:\\n            //Then loop through products and prep the bundle\\n            bundleId = \\\"bundle_\\\" + Date.now();\\n            bundle = {\\n              bundleId: bundleId,\\n              items: {}\\n            };\\n            $bundleProducts.forEach(function ($bundleProduct) {\\n              var productId = $bundleProduct.dataset.id;\\n              var productTitle = $bundleProduct.dataset.title;\\n              var productPrice = parseFloat($bundleProduct.dataset.price);\\n              var productPriceString = $bundleProduct.dataset.priceString;\\n              var compareProductPrice = \\\"\\\";\\n              if ($bundleProduct.dataset.comparePrice) {\\n                compareProductPrice = parseFloat($bundleProduct.dataset.comparePrice);\\n              }\\n              var compareProductPriceString = \\\"\\\";\\n              if ($bundleProduct.dataset.comparePriceString) {\\n                compareProductPriceString = $bundleProduct.dataset.comparePriceString;\\n              }\\n              var productImage = $bundleProduct.dataset.image;\\n              var quantity = 1;\\n              bundle.items[productId] = {\\n                title: productTitle,\\n                price: productPrice,\\n                priceString: productPriceString,\\n                comparePrice: compareProductPrice,\\n                comparePriceString: compareProductPriceString,\\n                image: productImage,\\n                quantity: quantity\\n              };\\n            });\\n            if (!(Object.keys(bundle.items).length > 0)) {\\n              _context.next = 22;\\n              break;\\n            }\\n            _context.next = 6;\\n            return getDynamicBundle();\\n          case 6:\\n            dynamicBundleData = _context.sent;\\n            if (!dynamicBundleData.ok) {\\n              _context.next = 17;\\n              break;\\n            }\\n            //Build our contents to add to cart\\n            lineItems = [];\\n            Object.entries(bundle.items).forEach(function (_ref2) {\\n              var _ref3 = _slicedToArray(_ref2, 2),\\n                productId = _ref3[0],\\n                item = _ref3[1];\\n              var itemData = {\\n                id: productId,\\n                quantity: item.quantity,\\n                properties: {\\n                  _bundle_id: bundleId,\\n                  _dynamicBoxIndex: bundleId,\\n                  _dynamicBoxId: dynamicBundleData.DynamicBox.boxId,\\n                  _bundleType: url,\\n                  _bundleUrl: url\\n                }\\n              };\\n              itemData.selling_plan = sellingPlanId;\\n              lineItems.push(itemData);\\n            });\\n            requestJson = {\\n              items: lineItems\\n            };\\n            _context.next = 13;\\n            return fetch('/cart/add.js', {\\n              method: 'POST',\\n              headers: {\\n                'Content-Type': 'application/json'\\n              },\\n              body: JSON.stringify(requestJson)\\n            });\\n          case 13:\\n            addResp = _context.sent;\\n            if (addResp) {\\n              if ($buttonText) {\\n                $buttonText.textContent = \\\"Added\\\";\\n              }\\n              //Take to cart \\n              window.location.href = \\\"/cart\\\";\\n            } else {\\n              alert(\\\"An Error has occured and we were unable to add this bundle to your cart.\\\");\\n              restoreButtons($tabs, $addtoCart, $buttonText);\\n            }\\n            _context.next = 20;\\n            break;\\n          case 17:\\n            console.log(\\\"unable to fetch Skio Dynamic Box Data - cannot add to cart\\\");\\n            alert(\\\"An Error has occured and we were unable to add this bundle to your cart.\\\");\\n            restoreButtons($tabs, $addtoCart, $buttonText);\\n          case 20:\\n            _context.next = 25;\\n            break;\\n          case 22:\\n            console.log(\\\"Bundle items is empty, unable to add to cart\\\");\\n            alert(\\\"An Error has occured and we were unable to add this bundle to your cart.\\\");\\n            restoreButtons($tabs, $addtoCart, $buttonText);\\n          case 25:\\n          case \\\"end\\\":\\n            return _context.stop();\\n        }\\n      }, _callee);\\n    }));\\n    return function addPrebuiltBundleToCart(_x, _x2, _x3, _x4, _x5, _x6) {\\n      return _ref.apply(this, arguments);\\n    };\\n  }();\\n  var $prebuiltBundleSections = document.querySelectorAll(\\\".section-prebuilt-bundles\\\");\\n  if ($prebuiltBundleSections.length > 0) {\\n    $prebuiltBundleSections.forEach(function ($prebuiltBundleSection) {\\n      var $contentContainer = $prebuiltBundleSection.querySelector(\\\".content-container\\\");\\n      if ($contentContainer) {\\n        var $titles = $contentContainer.querySelectorAll(\\\"h3\\\");\\n        var $tabs = $contentContainer.querySelectorAll(\\\".content-tabs .content-tab\\\");\\n        var $bundleProductLists = $contentContainer.querySelectorAll(\\\".bundle-contents\\\");\\n        var $images = $prebuiltBundleSection.querySelectorAll(\\\".image-container img\\\");\\n\\n        //Animate the Yellow message when the section scrolls into view\\n        var $yellowMessageWrapper = $contentContainer.querySelector(\\\".yellow-message-wrapper\\\");\\n        if ($yellowMessageWrapper) {\\n          var $yellowMessage = $yellowMessageWrapper.querySelector(\\\".yellow-message\\\");\\n          if ($yellowMessage) {\\n            gsap__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"].set($yellowMessage, {\\n              yPercent: 100,\\n              opacity: 1\\n            });\\n            gsap__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"].to($yellowMessage, {\\n              yPercent: 0,\\n              duration: 0.6,\\n              ease: \\\"expo.out\\\",\\n              scrollTrigger: {\\n                trigger: $yellowMessageWrapper,\\n                start: \\\"top 60%\\\",\\n                once: true\\n              }\\n            });\\n          }\\n        }\\n        if ($tabs.length > 0) {\\n          $tabs.forEach(function ($tab) {\\n            $tab.addEventListener(\\\"click\\\", function (e) {\\n              if (!$tab.classList.contains(\\\"active\\\")) {\\n                var targetId = $tab.dataset.productId;\\n                if (targetId) {\\n                  $tabs.forEach(function ($tb) {\\n                    $tb.classList.remove(\\\"active\\\");\\n                  });\\n                  $tab.classList.add(\\\"active\\\");\\n\\n                  //Toggle the Titles\\n                  $titles.forEach(function ($title) {\\n                    if ($title.dataset.productId == targetId) {\\n                      $title.classList.add(\\\"active\\\");\\n                    } else {\\n                      $title.classList.remove(\\\"active\\\");\\n                    }\\n                  });\\n\\n                  //Toggle the Content\\n                  $bundleProductLists.forEach(function ($bundleProductList) {\\n                    if ($bundleProductList.dataset.productId == targetId) {\\n                      $bundleProductList.classList.add(\\\"active\\\");\\n                    } else {\\n                      $bundleProductList.classList.remove(\\\"active\\\");\\n                    }\\n                  });\\n\\n                  //change active image\\n                  if ($images.length > 0) {\\n                    $images.forEach(function ($img) {\\n                      if ($img.dataset.productId === targetId) {\\n                        $img.classList.add(\\\"active\\\");\\n                      } else {\\n                        $img.classList.remove(\\\"active\\\");\\n                      }\\n                    });\\n                  }\\n                } else {\\n                  console.log(\\\"tab should have a productId linked to it so that the javascript can toggle information correctly\\\");\\n                }\\n              }\\n            });\\n          });\\n        }\\n\\n        //Bind Button Actions\\n        var $addToCarts = $contentContainer.querySelectorAll(\\\".bundle-contents__add-to-cart\\\");\\n        if ($addToCarts.length > 0) {\\n          $addToCarts.forEach(function ($addtoCart) {\\n            var $standardAtcText = $addtoCart.querySelector(\\\".button-text\\\").dataset.addText;\\n            $addtoCart.addEventListener(\\\"click\\\", function (e) {\\n              e.preventDefault();\\n\\n              //Prevent Tabs from being swapped\\n              if ($tabs.length > 0) {\\n                $tabs.forEach(function ($tab) {\\n                  $tab.classList.add(\\\"pointer-events-none\\\");\\n                });\\n              }\\n              $addtoCart.classList.add(\\\"button--disabled\\\");\\n              $addtoCart.disabled = true;\\n              var $buttonText = $addtoCart.querySelector(\\\".button-text\\\");\\n              if ($buttonText) {\\n                $buttonText.textContent = \\\"Adding\\\";\\n              }\\n              var $targetContentWrapper = e.target.closest(\\\".bundle-contents\\\");\\n              if ($targetContentWrapper) {\\n                //Find the Products and Loop through to Build Our Bundle\\n                var $bundleProducts = $targetContentWrapper.querySelectorAll(\\\".bundle-contents-product\\\");\\n                if ($bundleProducts.length > 0) {\\n                  //Get Selling Plan ID\\n                  if ($targetContentWrapper.dataset.sellingPlanId) {\\n                    var bundleUrl = $targetContentWrapper.dataset.bundleUrl;\\n\\n                    //Add Bundle to Cart\\n                    addPrebuiltBundleToCart($bundleProducts, $targetContentWrapper.dataset.sellingPlanId, bundleUrl, $tabs, $addtoCart, $buttonText);\\n                  } else {\\n                    console.log(\\\"No selling plan ID set, unable to add to cart\\\");\\n                  }\\n                } else {\\n                  console.log(\\\"could not find bundle products, unable to perform add to cart\\\");\\n                }\\n              } else {\\n                console.log(\\\"could not find wrapper, unable to perform add to cart\\\");\\n              }\\n            });\\n          });\\n        }\\n      }\\n    });\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (prebuiltBundles);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9wcmVidWlsdC1idW5kbGVzL21haW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7K0NBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRHdCO0FBQzJCO0FBQ25EQSwyREFBbUIsQ0FBQ0MsOERBQWEsQ0FBQztBQUUzQixJQUFNRSxlQUFlLEdBQUcsU0FBbEJBLGVBQWUsR0FBUztFQUVqQyxJQUFNQyxjQUFjLEdBQUcsU0FBakJBLGNBQWMsQ0FBSUMsS0FBSyxFQUFDQyxVQUFVLEVBQUNDLFdBQVcsRUFBSztJQUNyRCxJQUFHRixLQUFLLENBQUNHLE1BQU0sR0FBRyxDQUFDLEVBQUM7TUFDaEJILEtBQUssQ0FBQ0ksT0FBTyxDQUFDLFVBQUNDLElBQUksRUFBSztRQUNwQkEsSUFBSSxDQUFDQyxTQUFTLENBQUNDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztNQUNoRCxDQUFDLENBQUM7SUFDTjtJQUVBTixVQUFVLENBQUNLLFNBQVMsQ0FBQ0MsTUFBTSxDQUFDLGtCQUFrQixDQUFDO0lBQy9DTixVQUFVLENBQUNPLFFBQVEsR0FBRyxLQUFLO0lBRTNCLElBQUdOLFdBQVcsRUFBQztNQUNYQSxXQUFXLENBQUNPLFdBQVcsR0FBR1AsV0FBVyxDQUFDUSxPQUFPLENBQUNDLE9BQU87SUFDekQ7RUFDSixDQUFDO0VBQUEsU0FFY0MsZ0JBQWdCO0lBQUE7RUFBQTtFQUFBO0lBQUEsK0VBQS9CO01BQUE7TUFBQTtRQUFBO1VBQUE7WUFBQTtZQUFBLE9BQzJCQyxLQUFLLENBQUMsc0RBQXNELEVBQUU7Y0FDakZDLE1BQU0sRUFBRSxNQUFNO2NBQ2RDLE9BQU8sRUFBRTtnQkFDTCxjQUFjLEVBQUU7Y0FDcEIsQ0FBQztjQUNEQyxJQUFJLEVBQUVDLElBQUksQ0FBQ0MsU0FBUyxDQUFDO2dCQUNqQixtQkFBbUIsRUFBRTtjQUN6QixDQUFDO1lBQ0wsQ0FBQyxDQUFDO1VBQUE7WUFSSUMsUUFB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Q0FBQztnQkFDaEY7Y0FDSixDQUFDLE1BQUk7Z0JBQ0RELE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLHVEQUF1RCxDQUFDO2NBQ3hFO1lBQ0osQ0FBQyxDQUFDO1VBQ04sQ0FBQyxDQUFDO1FBQ047TUFDSjtJQUNKLENBQUMsQ0FBQztFQUNOO0FBQ0osQ0FBQztBQUVELGlFQUFlM0UsZUFBZSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vcmVzb3VyY2VzL3NjcmlwdHMvc2VjdGlvbnMvcHJlYnVpbHQtYnVuZGxlcy9tYWluLmpzP2ZkYTgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdzYXAgZnJvbSBcImdzYXBcIjtcclxuaW1wb3J0IFNjcm9sbFRyaWdnZXIgZnJvbSBcImdzYXAvc3JjL1Njcm9sbFRyaWdnZXJcIjtcclxuZ3NhcC5yZWdpc3RlclBsdWdpbihTY3JvbGxUcmlnZ2VyKTtcclxuXHJcbmV4cG9ydCBjb25zdCBwcmVidWlsdEJ1bmRsZXMgPSAoKSA9PiB7XHJcblxyXG4gICAgY29uc3QgcmVzdG9yZUJ1dHRvbnMgPSAoJHRhYnMsJGFkZHRvQ2FydCwkYnV0dG9uVGV4dCkgPT4ge1xyXG4gICAgICAgIGlmKCR0YWJzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAkdGFicy5mb3JFYWNoKCgkdGFiKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAkdGFiLmNsYXNzTGlzdC5yZW1vdmUoXCJwb2ludGVyLWV2ZW50cy1ub25lXCIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICRhZGR0b0NhcnQuY2xhc3NMaXN0LnJlbW92ZShcImJ1dHRvbi0tZGlzYWJsZWRcIik7XHJcbiAgICAgICAgJGFkZHRvQ2FydC5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCRidXR0b25UZXh0KXtcclxuICAgICAgICAgICAgJGJ1dHRvblRleHQudGV4dENvbnRlbnQgPSAkYnV0dG9uVGV4dC5kYXRhc2V0LmFkZFRleHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldER5bmFtaWNCdW5kbGUgKCl7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9hcGkuc2tpby5jb20vc3RvcmVmcm9udC1odHRwL2dldC1keW5hbWljLWJveCcsIHtcclxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgIFwicHJvZHVjdFBsYXRmb3JtSWRcIjogXCIxNTM0NTY4NTU2MTcyN1wiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhZGRQcmVidWlsdEJ1bmRsZVRvQ2FydCA9IGFzeW5jICgkYnVuZGxlUHJvZHVjdHMsc2VsbGluZ1BsYW5JZCx1cmwsJHRhYnMsJGFkZHRvQ2FydCwkYnV0dG9uVGV4dCkgPT4ge1xyXG5cclxuICAgICAgICAvL1RoZW4gbG9vcCB0aHJvdWdoIHByb2R1Y3RzIGFuZCBwcmVwIHRoZSBidW5kbGVcclxuICAgICAgICBjb25zdCBidW5kbGVJZCA9IFwiYnVuZGxlX1wiICsgRGF0ZS5ub3coKTtcclxuICAgICAgICBsZXQgYnVuZGxlID0ge1xyXG4gICAgICAgICAgICBidW5kbGVJZDogYnVuZGxlSWQsXHJcbiAgICAgICAgICAgIGl0ZW1zOiB7fVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgICRidW5kbGVQcm9kdWN0cy5mb3JFYWNoKCgkYnVuZGxlUHJvZHVjdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcHJvZHVjdElkID0gJGJ1bmRsZVByb2R1Y3QuZGF0YXNldC5pZDtcclxuICAgICAgICAgICAgY29uc3QgcHJvZHVjdFRpdGxlID0gJGJ1bmRsZVByb2R1Y3QuZGF0YXNldC50aXRsZTtcclxuICAgICAgICAgICAgY29uc3QgcHJvZHVjdFByaWNlID0gcGFyc2VGbG9hdCgkYnVuZGxlUHJvZHVjdC5kYXRhc2V0LnByaWNlKTtcclxuICAgICAgICAgICAgY29uc3QgcHJvZHVjdFByaWNlU3RyaW5nID0gJGJ1bmRsZVByb2R1Y3QuZGF0YXNldC5wcmljZVN0cmluZztcclxuICAgICAgICAgICAgbGV0IGNvbXBhcmVQcm9kdWN0UHJpY2UgPSBcIlwiO1xyXG4gICAgICAgICAgICBpZigkYnVuZGxlUHJvZHVjdC5kYXRhc2V0LmNvbXBhcmVQcmljZSl7XHJcbiAgICAgICAgICAgICAgICBjb21wYXJlUHJvZHVjdFByaWNlID0gcGFyc2VGbG9hdCgkYnVuZGxlUHJvZHVjdC5kYXRhc2V0LmNvbXBhcmVQcmljZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBjb21wYXJlUHJvZHVjdFByaWNlU3RyaW5nID0gXCJcIjtcclxuICAgICAgICAgICAgaWYoJGJ1bmRsZVByb2R1Y3QuZGF0YXNldC5jb21wYXJlUHJpY2VTdHJpbmcpe1xyXG4gICAgICAgICAgICAgICAgY29tcGFyZVByb2R1Y3RQcmljZVN0cmluZyA9ICRidW5kbGVQcm9kdWN0LmRhdGFzZXQuY29tcGFyZVByaWNlU3RyaW5nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0SW1hZ2UgPSAkYnVuZGxlUHJvZHVjdC5kYXRhc2V0LmltYWdlO1xyXG4gICAgICAgICAgICBjb25zdCBxdWFudGl0eSA9IDE7XHJcblxyXG4gICAgICAgICAgICBidW5kbGUuaXRlbXNbcHJvZHVjdElkXSA9IHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9kdWN0VGl0bGUsXHJcbiAgICAgICAgICAgICAgICBwcmljZTogcHJvZHVjdFByaWNlLFxyXG4gICAgICAgICAgICAgICAgcHJpY2VTdHJpbmc6IHByb2R1Y3RQcmljZVN0cmluZyxcclxuICAgICAgICAgICAgICAgIGNvbXBhcmVQcmljZTogY29tcGFyZVByb2R1Y3RQcmljZSxcclxuICAgICAgICAgICAgICAgIGNvbXBhcmVQcmljZVN0cmluZzogY29tcGFyZVByb2R1Y3RQcmljZVN0cmluZyxcclxuICAgICAgICAgICAgICAgIGltYWdlOiBwcm9kdWN0SW1hZ2UsXHJcbiAgICAgICAgICAgICAgICBxdWFudGl0eTogcXVhbnRpdHksXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmKE9iamVjdC5rZXlzKGJ1bmRsZS5pdGVtcykubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZHluYW1pY0J1bmRsZURhdGEgPSBhd2FpdCBnZXREeW5hbWljQnVuZGxlKCk7XHJcblxyXG4gICAgICAgICAgICBpZihkeW5hbWljQnVuZGxlRGF0YS5vayl7XHJcblxyXG4gICAgICAgICAgICAgICAgLy9CdWlsZCBvdXIgY29udGVudHMgdG8gYWRkIHRvIGNhcnRcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVJdGVtcyA9IFtdOyAgXHJcblxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoYnVuZGxlLml0ZW1zKS5mb3JFYWNoKChbcHJvZHVjdElkLCBpdGVtXSkgPT4geyAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtRGF0YSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHByb2R1Y3RJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9idW5kbGVfaWQ6IGJ1bmRsZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2R5bmFtaWNCb3hJbmRleDogYnVuZGxlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZHluYW1pY0JveElkOiBkeW5hbWljQnVuZGxlRGF0YS5EeW5hbWljQm94LmJveElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2J1bmRsZVR5cGU6IHVybCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9idW5kbGVVcmw6IHVybFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbURhdGEuc2VsbGluZ19wbGFuID0gc2VsbGluZ1BsYW5JZDsgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGxpbmVJdGVtcy5wdXNoKGl0ZW1EYXRhKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0SnNvbiA9IHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtczogbGluZUl0ZW1zLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBhZGRSZXNwID0gYXdhaXQgZmV0Y2goJy9jYXJ0L2FkZC5qcycsIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcclxuICAgICAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyZXF1ZXN0SnNvbilcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmKGFkZFJlc3Ape1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZigkYnV0dG9uVGV4dCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRidXR0b25UZXh0LnRleHRDb250ZW50ID0gXCJBZGRlZFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvL1Rha2UgdG8gY2FydCBcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IFwiL2NhcnRcIjtcclxuXHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBhbGVydChcIkFuIEVycm9yIGhhcyBvY2N1cmVkIGFuZCB3ZSB3ZXJlIHVuYWJsZSB0byBhZGQgdGhpcyBidW5kbGUgdG8geW91ciBjYXJ0LlwiKVxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3RvcmVCdXR0b25zKCR0YWJzLCRhZGR0b0NhcnQsJGJ1dHRvblRleHQpO1xyXG4gICAgICAgICAgICAgICAgfSAgIFxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidW5hYmxlIHRvIGZldGNoIFNraW8gRHluYW1pYyBCb3ggRGF0YSAtIGNhbm5vdCBhZGQgdG8gY2FydFwiKTtcclxuICAgICAgICAgICAgICAgIGFsZXJ0KFwiQW4gRXJyb3IgaGFzIG9jY3VyZWQgYW5kIHdlIHdlcmUgdW5hYmxlIHRvIGFkZCB0aGlzIGJ1bmRsZSB0byB5b3VyIGNhcnQuXCIpXHJcbiAgICAgICAgICAgICAgICByZXN0b3JlQnV0dG9ucygkdGFicywkYWRkdG9DYXJ0LCRidXR0b25UZXh0KTtcclxuICAgICAgICAgICAgfSAgICBcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJCdW5kbGUgaXRlbXMgaXMgZW1wdHksIHVuYWJsZSB0byBhZGQgdG8gY2FydFwiKTtcclxuICAgICAgICAgICAgYWxlcnQoXCJBbiBFcnJvciBoYXMgb2NjdXJlZCBhbmQgd2Ugd2VyZSB1bmFibGUgdG8gYWRkIHRoaXMgYnVuZGxlIHRvIHlvdXIgY2FydC5cIilcclxuICAgICAgICAgICAgcmVzdG9yZUJ1dHRvbnMoJHRhYnMsJGFkZHRvQ2FydCwkYnV0dG9uVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0ICRwcmVidWlsdEJ1bmRsZVNlY3Rpb25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5zZWN0aW9uLXByZWJ1aWx0LWJ1bmRsZXNcIik7XHJcbiAgICBpZigkcHJlYnVpbHRCdW5kbGVTZWN0aW9ucy5sZW5ndGggPiAwKXtcclxuXHJcbiAgICAgICAgJHByZWJ1aWx0QnVuZGxlU2VjdGlvbnMuZm9yRWFjaCgoJHByZWJ1aWx0QnVuZGxlU2VjdGlvbikgPT4ge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgJGNvbnRlbnRDb250YWluZXIgPSAkcHJlYnVpbHRCdW5kbGVTZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoXCIuY29udGVudC1jb250YWluZXJcIik7XHJcbiAgICAgICAgICAgIGlmKCRjb250ZW50Q29udGFpbmVyKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCAkdGl0bGVzID0gJGNvbnRlbnRDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcImgzXCIpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgJHRhYnMgPSAkY29udGVudENvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiLmNvbnRlbnQtdGFicyAuY29udGVudC10YWJcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCAkYnVuZGxlUHJvZHVjdExpc3RzID0gJGNvbnRlbnRDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIi5idW5kbGUtY29udGVudHNcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCAkaW1hZ2VzID0gJHByZWJ1aWx0QnVuZGxlU2VjdGlvbi5xdWVyeVNlbGVjdG9yQWxsKFwiLmltYWdlLWNvbnRhaW5lciBpbWdcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgLy9BbmltYXRlIHRoZSBZZWxsb3cgbWVzc2FnZSB3aGVuIHRoZSBzZWN0aW9uIHNjcm9sbHMgaW50byB2aWV3XHJcbiAgICAgICAgICAgICAgICBjb25zdCAkeWVsbG93TWVzc2FnZVdyYXBwZXIgPSAkY29udGVudENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLnllbGxvdy1tZXNzYWdlLXdyYXBwZXJcIik7XHJcbiAgICAgICAgICAgICAgICBpZigkeWVsbG93TWVzc2FnZVdyYXBwZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0ICR5ZWxsb3dNZXNzYWdlID0gJHllbGxvd01lc3NhZ2VXcmFwcGVyLnF1ZXJ5U2VsZWN0b3IoXCIueWVsbG93LW1lc3NhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoJHllbGxvd01lc3NhZ2Upe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnc2FwLnNldCgkeWVsbG93TWVzc2FnZSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeVBlcmNlbnQ6IDEwMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDFcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnc2FwLnRvKCR5ZWxsb3dNZXNzYWdlLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5UGVyY2VudDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAwLjYsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXNlOiBcImV4cG8ub3V0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUcmlnZ2VyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcjogJHllbGxvd01lc3NhZ2VXcmFwcGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBcInRvcCA2MCVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZigkdGFicy5sZW5ndGggPiAwKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgJHRhYnMuZm9yRWFjaCgoJHRhYikgPT4geyAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkdGFiLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighJHRhYi5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRJZCA9ICR0YWIuZGF0YXNldC5wcm9kdWN0SWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodGFyZ2V0SWQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFicy5mb3JFYWNoKCgkdGIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0Yi5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YWIuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9Ub2dnbGUgdGhlIFRpdGxlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGl0bGVzLmZvckVhY2goKCR0aXRsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHRpdGxlLmRhdGFzZXQucHJvZHVjdElkID09IHRhcmdldElkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGl0bGUuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aXRsZS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vVG9nZ2xlIHRoZSBDb250ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidW5kbGVQcm9kdWN0TGlzdHMuZm9yRWFjaCgoJGJ1bmRsZVByb2R1Y3RMaXN0KSA9PiB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGJ1bmRsZVByb2R1Y3RMaXN0LmRhdGFzZXQucHJvZHVjdElkID09IHRhcmdldElkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYnVuZGxlUHJvZHVjdExpc3QuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRidW5kbGVQcm9kdWN0TGlzdC5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vY2hhbmdlIGFjdGl2ZSBpbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkaW1hZ2VzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltYWdlcy5mb3JFYWNoKCgkaW1nKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRpbWcuZGF0YXNldC5wcm9kdWN0SWQgPT09IHRhcmdldElkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltZy5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1nLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidGFiIHNob3VsZCBoYXZlIGEgcHJvZHVjdElkIGxpbmtlZCB0byBpdCBzbyB0aGF0IHRoZSBqYXZhc2NyaXB0IGNhbiB0b2dnbGUgaW5mb3JtYXRpb24gY29ycmVjdGx5XCIpOyAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy9CaW5kIEJ1dHRvbiBBY3Rpb25zXHJcbiAgICAgICAgICAgICAgICBjb25zdCAkYWRkVG9DYXJ0cyA9ICRjb250ZW50Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIuYnVuZGxlLWNvbnRlbnRzX19hZGQtdG8tY2FydFwiKTtcclxuICAgICAgICAgICAgICAgIGlmKCRhZGRUb0NhcnRzLmxlbmd0aCA+IDApe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkYWRkVG9DYXJ0cy5mb3JFYWNoKCgkYWRkdG9DYXJ0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAkc3RhbmRhcmRBdGNUZXh0ID0gJGFkZHRvQ2FydC5xdWVyeVNlbGVjdG9yKFwiLmJ1dHRvbi10ZXh0XCIpLmRhdGFzZXQuYWRkVGV4dDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRhZGR0b0NhcnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1ByZXZlbnQgVGFicyBmcm9tIGJlaW5nIHN3YXBwZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR0YWJzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YWJzLmZvckVhY2goKCR0YWIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhYi5jbGFzc0xpc3QuYWRkKFwicG9pbnRlci1ldmVudHMtbm9uZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWRkdG9DYXJ0LmNsYXNzTGlzdC5hZGQoXCJidXR0b24tLWRpc2FibGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFkZHRvQ2FydC5kaXNhYmxlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgJGJ1dHRvblRleHQgPSAkYWRkdG9DYXJ0LnF1ZXJ5U2VsZWN0b3IoXCIuYnV0dG9uLXRleHRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkYnV0dG9uVGV4dCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGJ1dHRvblRleHQudGV4dENvbnRlbnQgPSBcIkFkZGluZ1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICR0YXJnZXRDb250ZW50V3JhcHBlciA9IGUudGFyZ2V0LmNsb3Nlc3QoXCIuYnVuZGxlLWNvbnRlbnRzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHRhcmdldENvbnRlbnRXcmFwcGVyKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9GaW5kIHRoZSBQcm9kdWN0cyBhbmQgTG9vcCB0aHJvdWdoIHRvIEJ1aWxkIE91ciBCdW5kbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCAkYnVuZGxlUHJvZHVjdHMgPSAkdGFyZ2V0Q29udGVudFdyYXBwZXIucXVlcnlTZWxlY3RvckFsbChcIi5idW5kbGUtY29udGVudHMtcHJvZHVjdFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkYnVuZGxlUHJvZHVjdHMubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0dldCBTZWxsaW5nIFBsYW4gSURcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHRhcmdldENvbnRlbnRXcmFwcGVyLmRhdGFzZXQuc2VsbGluZ1BsYW5JZCl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYnVuZGxlVXJsID0gJHRhcmdldENvbnRlbnRXcmFwcGVyLmRhdGFzZXQuYnVuZGxlVXJsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQWRkIEJ1bmRsZSB0byBDYXJ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRQcmVidWlsdEJ1bmRsZVRvQ2FydCgkYnVuZGxlUHJvZHVjdHMsJHRhcmdldENvbnRlbnRXcmFwcGVyLmRhdGFzZXQuc2VsbGluZ1BsYW5JZCxidW5kbGVVcmwsJHRhYnMsJGFkZHRvQ2FydCwkYnV0dG9uVGV4dCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTm8gc2VsbGluZyBwbGFuIElEIHNldCwgdW5hYmxlIHRvIGFkZCB0byBjYXJ0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNvdWxkIG5vdCBmaW5kIGJ1bmRsZSBwcm9kdWN0cywgdW5hYmxlIHRvIHBlcmZvcm0gYWRkIHRvIGNhcnRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY291bGQgbm90IGZpbmQgd3JhcHBlciwgdW5hYmxlIHRvIHBlcmZvcm0gYWRkIHRvIGNhcnRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHByZWJ1aWx0QnVuZGxlczsiXSwibmFtZXMiOlsiZ3NhcCIsIlNjcm9sbFRyaWdnZXIiLCJyZWdpc3RlclBsdWdpbiIsInByZWJ1aWx0QnVuZGxlcyIsInJlc3RvcmVCdXR0b25zIiwiJHRhYnMiLCIkYWRkdG9DYXJ0IiwiJGJ1dHRvblRleHQiLCJsZW5ndGgiLCJmb3JFYWNoIiwiJHRhYiIsImNsYXNzTGlzdCIsInJlbW92ZSIsImRpc2FibGVkIiwidGV4dENvbnRlbnQiLCJkYXRhc2V0IiwiYWRkVGV4dCIsImdldER5bmFtaWNCdW5kbGUiLCJmZXRjaCIsIm1ldGhvZCIsImhlYWRlcnMiLCJib2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsInJlc3BvbnNlIiwianNvbiIsImRhdGEiLCJhZGRQcmVidWlsdEJ1bmRsZVRvQ2FydCIsIiRidW5kbGVQcm9kdWN0cyIsInNlbGxpbmdQbGFuSWQiLCJ1cmwiLCJidW5kbGVJZCIsIkRhdGUiLCJub3ciLCJidW5kbGUiLCJpdGVtcyIsIiRidW5kbGVQcm9kdWN0IiwicHJvZHVjdElkIiwiaWQiLCJwcm9kdWN0VGl0bGUiLCJ0aXRsZSIsInByb2R1Y3RQcmljZSIsInBhcnNlRmxvYXQiLCJwcmljZSIsInByb2R1Y3RQcmljZVN0cmluZyIsInByaWNlU3RyaW5nIiwiY29tcGFyZVByb2R1Y3RQcmljZSIsImNvbXBhcmVQcmljZSIsImNvbXBhcmVQcm9kdWN0UHJpY2VTdHJpbmciLCJjb21wYXJlUHJpY2VTdHJpbmciLCJwcm9kdWN0SW1hZ2UiLCJpbWFnZSIsInF1YW50aXR5IiwiT2JqZWN0Iiwia2V5cyIsImR5bmFtaWNCdW5kbGVEYXRhIiwib2siLCJsaW5lSXRlbXMiLCJlbnRyaWVzIiwiaXRlbSIsIml0ZW1EYXRhIiwicHJvcGVydGllcyIsIl9idW5kbGVfaWQiLCJfZHluYW1pY0JveEluZGV4IiwiX2R5bmFtaWNCb3hJZCIsIkR5bmFtaWNCb3giLCJib3hJZCIsIl9idW5kbGVUeXBlIiwiX2J1bmRsZVVybCIsInNlbGxpbmdfcGxhbiIsInB1c2giLCJyZXF1ZXN0SnNvbiIsImFkZFJlc3AiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJhbGVydCIsImNvbnNvbGUiLCJsb2ciLCIkcHJlYnVpbHRCdW5kbGVTZWN0aW9ucyIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsIiRwcmVidWlsdEJ1bmRsZVNlY3Rpb24iLCIkY29udGVudENvbnRhaW5lciIsInF1ZXJ5U2VsZWN0b3IiLCIkdGl0bGVzIiwiJGJ1bmRsZVByb2R1Y3RMaXN0cyIsIiRpbWFnZXMiLCIkeWVsbG93TWVzc2FnZVdyYXBwZXIiLCIkeWVsbG93TWVzc2FnZSIsInNldCIsInlQZXJjZW50Iiwib3BhY2l0eSIsInRvIiwiZHVyYXRpb24iLCJlYXNlIiwic2Nyb2xsVHJpZ2dlciIsInRyaWdnZXIiLCJzdGFydCIsIm9uY2UiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsImNvbnRhaW5zIiwidGFyZ2V0SWQiLCIkdGIiLCJhZGQiLCIkdGl0bGUiLCIkYnVuZGxlUHJvZHVjdExpc3QiLCIkaW1nIiwiJGFkZFRvQ2FydHMiLCIkc3RhbmRhcmRBdGNUZXh0IiwicHJldmVudERlZmF1bHQiLCIkdGFyZ2V0Q29udGVudFdyYXBwZXIiLCJ0YXJnZXQiLCJjbG9zZXN0IiwiYnVuZGxlVXJsIl0sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/prebuilt-bundles/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/product-accordions/main.js\":\r\n/*!***************************************************************!*\\\r\n  !*** ./resources/scripts/sections/product-accordions/main.js ***!\r\n  \\***************************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"productAccordions\\\": () => (/* binding */ productAccordions)\\n/* harmony export */ });\\nvar productAccordions = function productAccordions() {\\n  var $accordionContainers = document.querySelectorAll(\\\".product-accordion-container\\\");\\n  if ($accordionContainers.length > 0) {\\n    $accordionContainers.forEach(function ($accordionContainer) {\\n      var $accordions = $accordionContainer.querySelectorAll(\\\".product-accordion\\\");\\n      $accordions.forEach(function ($accordion) {\\n        var $accordionTrigger = $accordion.querySelector(\\\".product-accordion__trigger\\\");\\n        var $accordionContent = $accordion.querySelector(\\\".product-accordion__contents\\\");\\n        if ($accordionTrigger && $accordionContent) {\\n          $accordionTrigger.addEventListener(\\\"click\\\", function (e) {\\n            if ($accordion.classList.contains(\\\"active\\\")) {\\n              $accordion.classList.remove(\\\"active\\\");\\n            } else {\\n              $accordion.classList.add(\\\"active\\\");\\n\\n              //Mount judgeme widget where required\\n              if ($accordionTrigger.classList.contains(\\\"judgeme-review-accordion\\\")) {\\n                loadJudgemeReviews($accordionContent);\\n              }\\n            }\\n          });\\n        }\\n      });\\n    });\\n  }\\n};\\nfunction loadJudgemeReviews($accordionContent) {\\n  var $container = $accordionContent.querySelector('.jdgm-review-widget-container');\\n  if ($container && !$container.classList.contains('jdgm-initialized')) {\\n    // Get the escaped widget HTML from data attribute\\n    var widgetHTML = $accordionContent.getAttribute('data-judgeme-widget');\\n    console.log(widgetHTML);\\n    if (widgetHTML) {\\n      // Inject the widget HTML\\n      $container.innerHTML = widgetHTML;\\n      $container.classList.add('jdgm-initialized');\\n\\n      // Initialize JudgeMe after DOM insertion\\n      setTimeout(function () {\\n        if (window.jdgm && window.jdgm.jQuery) {\\n          window.jdgm.initializeWidgets(window.jdgm.jQuery($accordionContent));\\n        }\\n      }, 150);\\n    }\\n  }\\n}\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (productAccordions);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9wcm9kdWN0LWFjY29yZGlvbnMvbWFpbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFPLElBQU1BLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUIsR0FBUztFQUVuQyxJQUFNQyxvQkFBb0IsR0FBR0MsUUFBUSxDQUFDQyxnQkFBZ0IsQ0FBQyw4QkFBOEIsQ0FBQztFQUN0RixJQUFHRixvQkFBb0IsQ0FBQ0csTUFBTSxHQUFHLENBQUMsRUFBQztJQUUvQkgsb0JBQW9CLENBQUNJLE9BQU8sQ0FBQyxVQUFDQyxtQkFBbUIsRUFBSztNQUVsRCxJQUFNQyxXQUFXLEdBQUdELG1CQUFtQixDQUFDSCxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQztNQUU5RUksV0FBVyxDQUFDRixPQUFPLENBQUMsVUFBQ0csVUFBVSxFQUFLO1FBRWhDLElBQU1DLGlCQUFpQixHQUFHRCxVQUFVLENBQUNFLGFBQWEsQ0FBQyw2QkFBNkIsQ0FBQztRQUNqRixJQUFNQyxpQkFBaUIsR0FBR0gsVUFBVSxDQUFDRSxhQUFhLENBQUMsOEJBQThCLENBQUM7UUFFbEYsSUFBR0QsaUJBQWlCLElBQUlFLGlCQUFpQixFQUFDO1VBQ3RDRixpQkFBaUIsQ0FBQ0csZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFVBQUNDLENBQUMsRUFBSztZQUUvQyxJQUFHTCxVQUFVLENBQUNNLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFDO2NBQ3ZDUCxVQUFVLENBQUNNLFNBQVMsQ0FBQ0UsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUN6QyxDQUFDLE1BQUk7Y0FDRFIsVUFBVSxDQUFDTSxTQUFTLENBQUNHLEdBQUcsQ0FBQyxRQUFRLENBQUM7O2NBRWxDO2NBQ0EsSUFBR1IsaUJBQWlCLENBQUNLLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDLDBCQUEwQixDQUFDLEVBQUM7Z0JBQ2hFRyxrQkFBa0IsQ0FBQ1AsaUJBQWlCLENBQUM7Y0FDekM7WUFDSjtVQUNKLENBQUMsQ0FBQztRQUNOO01BQ0osQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0VBQ047QUFDSixDQUFDO0FBRUQsU0FBU08sa0JBQWtCLENBQUNQLGlCQUFpQixFQUFFO0VBQzNDLElBQU1RLFVBQVUsR0FBR1IsaUJBQWlCLENBQUNELGFBQWEsQ0FBQywrQkFBK0IsQ0FBQztFQUVuRixJQUFJUyxVQUFVLElBQUksQ0FBQ0EsVUFBVSxDQUFDTCxTQUFTLENBQUNDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO0lBQ2xFO0lBQ0EsSUFBTUssVUFBVSxHQUFHVCxpQkFBaUIsQ0FBQ1UsWUFBWSxDQUFDLHFCQUFxQixDQUFDO0lBQ3hFQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0gsVUFBVSxDQUFDO0lBQ3ZCLElBQUlBLFVBQVUsRUFBRTtNQUNaO01BQ0FELFVBQVUsQ0FBQ0ssU0FBUyxHQUFHSixVQUFVO01BQ2pDRCxVQUFVLENBQUNMLFNBQVMsQ0FBQ0csR0FBRyxDQUFDLGtCQUFrQixDQUFDOztNQUU1QztNQUNBUSxVQUFVLENBQUMsWUFBTTtRQUNiLElBQUlDLE1BQU0sQ0FBQ0MsSUFBSSxJQUFJRCxNQUFNLENBQUNDLElBQUksQ0FBQ0MsTUFBTSxFQUFFO1VBQ25DRixNQUFNLENBQUNDLElBQUksQ0FBQ0UsaUJBQWlCLENBQUNILE1BQU0sQ0FBQ0MsSUFBSSxDQUFDQyxNQUFNLENBQUNqQixpQkFBaUIsQ0FBQyxDQUFDO1FBQ3hFO01BQ0osQ0FBQyxFQUFFLEdBQUcsQ0FBQztJQUNYO0VBQ0o7QUFDSjtBQUVBLGlFQUFlWCxpQkFBaUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL3Jlc291cmNlcy9zY3JpcHRzL3NlY3Rpb25zL3Byb2R1Y3QtYWNjb3JkaW9ucy9tYWluLmpzPzIzZjkiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHByb2R1Y3RBY2NvcmRpb25zID0gKCkgPT4ge1xyXG5cclxuICAgIGNvbnN0ICRhY2NvcmRpb25Db250YWluZXJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5wcm9kdWN0LWFjY29yZGlvbi1jb250YWluZXJcIik7XHJcbiAgICBpZigkYWNjb3JkaW9uQ29udGFpbmVycy5sZW5ndGggPiAwKXtcclxuXHJcbiAgICAgICAgJGFjY29yZGlvbkNvbnRhaW5lcnMuZm9yRWFjaCgoJGFjY29yZGlvbkNvbnRhaW5lcikgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgJGFjY29yZGlvbnMgPSAkYWNjb3JkaW9uQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIucHJvZHVjdC1hY2NvcmRpb25cIik7XHJcblxyXG4gICAgICAgICAgICAkYWNjb3JkaW9ucy5mb3JFYWNoKCgkYWNjb3JkaW9uKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgJGFjY29yZGlvblRyaWdnZXIgPSAkYWNjb3JkaW9uLnF1ZXJ5U2VsZWN0b3IoXCIucHJvZHVjdC1hY2NvcmRpb25fX3RyaWdnZXJcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCAkYWNjb3JkaW9uQ29udGVudCA9ICRhY2NvcmRpb24ucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LWFjY29yZGlvbl9fY29udGVudHNcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoJGFjY29yZGlvblRyaWdnZXIgJiYgJGFjY29yZGlvbkNvbnRlbnQpe1xyXG4gICAgICAgICAgICAgICAgICAgICRhY2NvcmRpb25UcmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGFjY29yZGlvbi5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFjY29yZGlvbi5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFjY29yZGlvbi5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vTW91bnQganVkZ2VtZSB3aWRnZXQgd2hlcmUgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRhY2NvcmRpb25UcmlnZ2VyLmNsYXNzTGlzdC5jb250YWlucyhcImp1ZGdlbWUtcmV2aWV3LWFjY29yZGlvblwiKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZEp1ZGdlbWVSZXZpZXdzKCRhY2NvcmRpb25Db250ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBsb2FkSnVkZ2VtZVJldmlld3MoJGFjY29yZGlvbkNvbnRlbnQpIHtcclxuICAgIGNvbnN0ICRjb250YWluZXIgPSAkYWNjb3JkaW9uQ29udGVudC5xdWVyeVNlbGVjdG9yKCcuamRnbS1yZXZpZXctd2lkZ2V0LWNvbnRhaW5lcicpO1xyXG4gICAgXHJcbiAgICBpZiAoJGNvbnRhaW5lciAmJiAhJGNvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoJ2pkZ20taW5pdGlhbGl6ZWQnKSkge1xyXG4gICAgICAgIC8vIEdldCB0aGUgZXNjYXBlZCB3aWRnZXQgSFRNTCBmcm9tIGRhdGEgYXR0cmlidXRlXHJcbiAgICAgICAgY29uc3Qgd2lkZ2V0SFRNTCA9ICRhY2NvcmRpb25Db250ZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1qdWRnZW1lLXdpZGdldCcpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHdpZGdldEhUTUwpO1xyXG4gICAgICAgIGlmICh3aWRnZXRIVE1MKSB7XHJcbiAgICAgICAgICAgIC8vIEluamVjdCB0aGUgd2lkZ2V0IEhUTUxcclxuICAgICAgICAgICAgJGNvbnRhaW5lci5pbm5lckhUTUwgPSB3aWRnZXRIVE1MO1xyXG4gICAgICAgICAgICAkY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoJ2pkZ20taW5pdGlhbGl6ZWQnKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgSnVkZ2VNZSBhZnRlciBET00gaW5zZXJ0aW9uXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5qZGdtICYmIHdpbmRvdy5qZGdtLmpRdWVyeSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5qZGdtLmluaXRpYWxpemVXaWRnZXRzKHdpbmRvdy5qZGdtLmpRdWVyeSgkYWNjb3JkaW9uQ29udGVudCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAxNTApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgcHJvZHVjdEFjY29yZGlvbnM7Il0sIm5hbWVzIjpbInByb2R1Y3RBY2NvcmRpb25zIiwiJGFjY29yZGlvbkNvbnRhaW5lcnMiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJmb3JFYWNoIiwiJGFjY29yZGlvbkNvbnRhaW5lciIsIiRhY2NvcmRpb25zIiwiJGFjY29yZGlvbiIsIiRhY2NvcmRpb25UcmlnZ2VyIiwicXVlcnlTZWxlY3RvciIsIiRhY2NvcmRpb25Db250ZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsInJlbW92ZSIsImFkZCIsImxvYWRKdWRnZW1lUmV2aWV3cyIsIiRjb250YWluZXIiLCJ3aWRnZXRIVE1MIiwiZ2V0QXR0cmlidXRlIiwiY29uc29sZSIsImxvZyIsImlubmVySFRNTCIsInNldFRpbWVvdXQiLCJ3aW5kb3ciLCJqZGdtIiwialF1ZXJ5IiwiaW5pdGlhbGl6ZVdpZGdldHMiXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/product-accordions/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/product-image-gallery/main.js\":\r\n/*!******************************************************************!*\\\r\n  !*** ./resources/scripts/sections/product-image-gallery/main.js ***!\r\n  \\******************************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"productImageGallery\\\": () => (/* binding */ productImageGallery)\\n/* harmony export */ });\\n/* harmony import */ var swiper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! swiper */ \\\"./node_modules/swiper/swiper.esm.js\\\");\\n//Repurposed to live outside of the $productTemplate so that it can be used across both the Product Template and BaB Popups\\n\\n\\nvar productImageGallery = function productImageGallery() {\\n  var setupVideos = function setupVideos($productMedia) {\\n    $productMedia.forEach(function ($productMediaItem) {\\n      if ($productMediaItem.classList.contains(\\\"product-template__media--video\\\") || $productMediaItem.classList.contains(\\\"product-template__media-swiper-slide--video\\\")) {\\n        var $image = $productMediaItem.querySelector(\\\".media__image\\\");\\n        var $icon = $productMediaItem.querySelector(\\\".media__icon\\\");\\n        var $video = $productMediaItem.querySelector(\\\".media__video\\\");\\n        if ($image && $icon && $video) {\\n          $image.addEventListener(\\\"click\\\", function (event) {\\n            event.preventDefault();\\n            $image.classList.add(\\\"hidden\\\");\\n            $icon.classList.add(\\\"hidden\\\");\\n            $video.classList.remove(\\\"hidden\\\");\\n            $video.play();\\n          });\\n          $video.addEventListener(\\\"click\\\", function (event) {\\n            event.preventDefault();\\n            $video.pause();\\n            $video.classList.add(\\\"hidden\\\");\\n            $image.classList.remove(\\\"hidden\\\");\\n            $icon.classList.remove(\\\"hidden\\\");\\n          });\\n        }\\n      }\\n    });\\n  };\\n\\n  // Handle the product images set up\\n  var $productImageGalleries = document.querySelectorAll(\\\".product-image-gallery\\\");\\n  if ($productImageGalleries.length > 0) {\\n    $productImageGalleries.forEach(function ($productImageGallery) {\\n      var $productMedia = $productImageGallery.querySelectorAll(\\\".product-template__media\\\");\\n      if ($productMedia.length > 0) {\\n        setupVideos($productMedia);\\n      }\\n      var $mainSwiper = $productImageGallery.querySelector(\\\".product-template__media-container__main-swiper .swiper\\\");\\n      var $thumbsSwiper = $productImageGallery.querySelector(\\\".product-template__media-container__thumbs-swiper .swiper\\\");\\n      if ($mainSwiper && $thumbsSwiper) {\\n        //Intialise Thumbs Swiper\\n        var $thumbSwiperConfig = {\\n          loop: false,\\n          spaceBetween: 12,\\n          slidesPerView: 3.8,\\n          watchSlidesProgress: true,\\n          slideToClickedSlide: true,\\n          breakpoints: {\\n            1024: {\\n              spaceBetween: 16\\n            }\\n          }\\n        };\\n        var thumbSwiperObject = new swiper__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"]($thumbsSwiper, $thumbSwiperConfig);\\n\\n        //Intialise Top Swiper \\n        var $mainSwiperConfig = {\\n          loop: false,\\n          spaceBetween: 12,\\n          slidesPerView: 1,\\n          thumbs: {\\n            swiper: thumbSwiperObject\\n          },\\n          breakpoints: {\\n            1024: {\\n              spaceBetween: 16\\n            }\\n          }\\n        };\\n\\n        /*\\r\\n        const $mainSwiperNavigation = $mediaThumbnails.querySelector(\\\".product-template__media-container__main-swiper__navigation\\\");\\r\\n        if($mainSwiperNavigation){\\r\\n            const $mainSwiperNavigationLeft = $mainSwiperNavigation.querySelector(\\\".product-template__media-container__main-swiper__navigation-left\\\");\\r\\n            const $mainSwiperNavigationRight = $mainSwiperNavigation.querySelector(\\\".product-template__media-container__main-swiper__navigation-right\\\");\\r\\n              if($mainSwiperNavigationLeft && $mainSwiperNavigationRight){\\r\\n                $mainSwiperConfig.navigation = {\\r\\n                    nextEl: $mainSwiperNavigationRight,\\r\\n                    prevEl: $mainSwiperNavigationLeft \\r\\n                };\\r\\n            }\\r\\n        }\\r\\n        */\\n\\n        var mainSwiperObject = new swiper__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"]($mainSwiper, $mainSwiperConfig);\\n        mainSwiperObject.controller.control = thumbSwiperObject;\\n\\n        // Keep active thumbnail aligned left\\n        mainSwiperObject.on('slideChange', function () {\\n          var activeIndex = mainSwiperObject.realIndex;\\n          thumbSwiperObject.slideTo(activeIndex);\\n        });\\n      }\\n    });\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (productImageGallery);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9wcm9kdWN0LWltYWdlLWdhbGxlcnkvbWFpbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFFd0Q7QUFFakQsSUFBTUcsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQixHQUFTO0VBRXJDLElBQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFXLENBQUlDLGFBQWEsRUFBSztJQUNuQ0EsYUFBYSxDQUFDQyxPQUFPLENBQUMsVUFBQ0MsaUJBQWlCLEVBQUs7TUFDN0MsSUFDSUEsaUJBQWlCLENBQUNDLFNBQVMsQ0FBQ0MsUUFBUSxDQUNwQyxnQ0FBZ0MsQ0FDL0IsSUFDREYsaUJBQWlCLENBQUNDLFNBQVMsQ0FBQ0MsUUFBUSxDQUNwQyw2Q0FBNkMsQ0FDNUMsRUFDSDtRQUNFLElBQU1DLE1BQU0sR0FBR0gsaUJBQWlCLENBQUNJLGFBQWEsQ0FBQyxlQUFlLENBQUM7UUFDL0QsSUFBTUMsS0FBSyxHQUFHTCxpQkFBaUIsQ0FBQ0ksYUFBYSxDQUFDLGNBQWMsQ0FBQztRQUM3RCxJQUFNRSxNQUFNLEdBQUdOLGlCQUFpQixDQUFDSSxhQUFhLENBQUMsZUFBZSxDQUFDO1FBQy9ELElBQUlELE1BQU0sSUFBSUUsS0FBSyxJQUFJQyxNQUFNLEVBQUU7VUFDL0JILE1BQU0sQ0FBQ0ksZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFVBQUNDLEtBQUssRUFBSztZQUN4Q0EsS0FBSyxDQUFDQyxjQUFjLEVBQUU7WUFDdEJOLE1BQU0sQ0FBQ0YsU0FBUyxDQUFDUyxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQzlCTCxLQUFLLENBQUNKLFNBQVMsQ0FBQ1MsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUM3QkosTUFBTSxDQUFDTCxTQUFTLENBQUNVLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDakNMLE1BQU0sQ0FBQ00sSUFBSSxFQUFFO1VBQ2pCLENBQUMsQ0FBQztVQUNGTixNQUFNLENBQUNDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxVQUFDQyxLQUFLLEVBQUs7WUFDeENBLEtBQUssQ0FBQ0MsY0FBYyxFQUFFO1lBQ3RCSCxNQUFNLENBQUNPLEtBQUssRUFBRTtZQUNkUCxNQUFNLENBQUNMLFNBQVMsQ0FBQ1MsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUM5QlAsTUFBTSxDQUFDRixTQUFTLENBQUNVLE1BQU0sQ0FBQyxRQUFRLENBQUM7WUFDakNOLEtBQUssQ0FBQ0osU0FBUyxDQUFDVSxNQUFNLENBQUMsUUFBUSxDQUFDO1VBQ3BDLENBQUMsQ0FBQztRQUNGO01BQ0o7SUFDQSxDQUFDLENBQUM7RUFDTixDQUFDOztFQUVEO0VBQ0EsSUFBTUcsc0JBQXNCLEdBQUdDLFFBQVEsQ0FBQ0MsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUM7RUFDbEYsSUFBR0Ysc0JBQXNCLENBQUNHLE1BQU0sR0FBRyxDQUFDLEVBQUM7SUFDakNILHNCQUFzQixDQUFDZixPQUFPLENBQUMsVUFBQ21CLG9CQUFvQixFQUFLO01BQ3JELElBQU1wQixhQUFhLEdBQUdvQixvQkFBb0IsQ0FBQ0YsZ0JBQWdCLENBQUMsMEJBQTBCLENBQUM7TUFDdkYsSUFBR2xCLGFBQWEsQ0FBQ21CLE1BQU0sR0FBRyxDQUFDLEVBQUM7UUFDeEJwQixXQUFXLENBQUNDLGFBQWEsQ0FBQztNQUM5QjtNQUVBLElBQU1xQixXQUFXLEdBQUdELG9CQUFvQixDQUFDZCxhQUFhLENBQUMseURBQXlELENBQUM7TUFDakgsSUFBTWdCLGFBQWEsR0FBR0Ysb0JBQW9CLENBQUNkLGFBQWEsQ0FBQywyREFBMkQsQ0FBQztNQUVySCxJQUFHZSxXQUFXLElBQUlDLGFBQWEsRUFBQztRQUU1QjtRQUNBLElBQUlDLGtCQUFrQixHQUFHO1VBQ3JCQyxJQUFJLEVBQUUsS0FBSztVQUNYQyxZQUFZLEVBQUMsRUFBRTtVQUNmQyxhQUFhLEVBQUUsR0FBRztVQUNsQkMsbUJBQW1CLEVBQUUsSUFBSTtVQUN6QkMsbUJBQW1CLEVBQUUsSUFBSTtVQUN6QkMsV0FBVyxFQUFDO1lBQ1IsSUFBSSxFQUFDO2NBQ0RKLFlBQVksRUFBQztZQUNqQjtVQUNKO1FBQ0osQ0FBQztRQUVELElBQU1LLGlCQUFpQixHQUFHLElBQUluQyw4Q0FBTSxDQUFDMkIsYUFBYSxFQUFDQyxrQkFBa0IsQ0FBQzs7UUFFdEU7UUFDQSxJQUFJUSxpQkFBaUIsR0FBRztVQUNwQlAsSUFBSSxFQUFFLEtBQUs7VUFDWEMsWUFBWSxFQUFFLEVBQUU7VUFDaEJDLGFBQWEsRUFBRSxDQUFDO1VBQ2hCTSxNQUFNLEVBQUU7WUFDSkMsTUFBTSxFQUFFSDtVQUNaLENBQUM7VUFDREQsV0FBVyxFQUFDO1lBQ1IsSUFBSSxFQUFDO2NBQ0RKLFlBQVksRUFBQztZQUNqQjtVQUNKO1FBQ0osQ0FBQzs7UUFFRDtBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O1FBR2dCLElBQU1TLGdCQUFnQixHQUFHLElBQUl2Qyw4Q0FBTSxDQUFDMEIsV0FBVyxFQUFDVSxpQkFBaUIsQ0FBQztRQUNsRUcsZ0JBQWdCLENBQUNDLFVBQVUsQ0FBQ0MsT0FBTyxHQUFHTixpQkFBaUI7O1FBRXZEO1FBQ0FJLGdCQUFnQixDQUFDRyxFQUFFLENBQUMsYUFBYSxFQUFFLFlBQU07VUFDckMsSUFBTUMsV0FBVyxHQUFHSixnQkFBZ0IsQ0FBQ0ssU0FBUztVQUM5Q1QsaUJBQWlCLENBQUNVLE9BQU8sQ0FBQ0YsV0FBVyxDQUFDO1FBQzFDLENBQUMsQ0FBQztNQUNOO0lBRUosQ0FBQyxDQUFDO0VBQ047QUFDSixDQUFDO0FBRUQsaUVBQWV4QyxtQkFBbUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL3Jlc291cmNlcy9zY3JpcHRzL3NlY3Rpb25zL3Byb2R1Y3QtaW1hZ2UtZ2FsbGVyeS9tYWluLmpzPzA5YzQiXSwic291cmNlc0NvbnRlbnQiOlsiLy9SZXB1cnBvc2VkIHRvIGxpdmUgb3V0c2lkZSBvZiB0aGUgJHByb2R1Y3RUZW1wbGF0ZSBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGFjcm9zcyBib3RoIHRoZSBQcm9kdWN0IFRlbXBsYXRlIGFuZCBCYUIgUG9wdXBzXHJcblxyXG5pbXBvcnQgU3dpcGVyLCB7IE5hdmlnYXRpb24sIENvbnRyb2xsZXIgfSBmcm9tIFwic3dpcGVyXCI7XHJcblxyXG5leHBvcnQgY29uc3QgcHJvZHVjdEltYWdlR2FsbGVyeSA9ICgpID0+IHtcclxuXHJcbiAgICBjb25zdCBzZXR1cFZpZGVvcyA9ICgkcHJvZHVjdE1lZGlhKSA9PiB7XHJcbiAgICAgICAgJHByb2R1Y3RNZWRpYS5mb3JFYWNoKCgkcHJvZHVjdE1lZGlhSXRlbSkgPT4ge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgJHByb2R1Y3RNZWRpYUl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKFxyXG4gICAgICAgICAgICBcInByb2R1Y3QtdGVtcGxhdGVfX21lZGlhLS12aWRlb1wiXHJcbiAgICAgICAgICAgICkgfHxcclxuICAgICAgICAgICAgJHByb2R1Y3RNZWRpYUl0ZW0uY2xhc3NMaXN0LmNvbnRhaW5zKFxyXG4gICAgICAgICAgICBcInByb2R1Y3QtdGVtcGxhdGVfX21lZGlhLXN3aXBlci1zbGlkZS0tdmlkZW9cIlxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0ICRpbWFnZSA9ICRwcm9kdWN0TWVkaWFJdGVtLnF1ZXJ5U2VsZWN0b3IoXCIubWVkaWFfX2ltYWdlXCIpO1xyXG4gICAgICAgICAgICBjb25zdCAkaWNvbiA9ICRwcm9kdWN0TWVkaWFJdGVtLnF1ZXJ5U2VsZWN0b3IoXCIubWVkaWFfX2ljb25cIik7XHJcbiAgICAgICAgICAgIGNvbnN0ICR2aWRlbyA9ICRwcm9kdWN0TWVkaWFJdGVtLnF1ZXJ5U2VsZWN0b3IoXCIubWVkaWFfX3ZpZGVvXCIpO1xyXG4gICAgICAgICAgICBpZiAoJGltYWdlICYmICRpY29uICYmICR2aWRlbykge1xyXG4gICAgICAgICAgICAkaW1hZ2UuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICRpbWFnZS5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgJGljb24uY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICR2aWRlby5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgJHZpZGVvLnBsYXkoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICR2aWRlby5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgJHZpZGVvLnBhdXNlKCk7XHJcbiAgICAgICAgICAgICAgICAkdmlkZW8uY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICRpbWFnZS5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgJGljb24uY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEhhbmRsZSB0aGUgcHJvZHVjdCBpbWFnZXMgc2V0IHVwXHJcbiAgICBjb25zdCAkcHJvZHVjdEltYWdlR2FsbGVyaWVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5wcm9kdWN0LWltYWdlLWdhbGxlcnlcIik7XHJcbiAgICBpZigkcHJvZHVjdEltYWdlR2FsbGVyaWVzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICRwcm9kdWN0SW1hZ2VHYWxsZXJpZXMuZm9yRWFjaCgoJHByb2R1Y3RJbWFnZUdhbGxlcnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgJHByb2R1Y3RNZWRpYSA9ICRwcm9kdWN0SW1hZ2VHYWxsZXJ5LnF1ZXJ5U2VsZWN0b3JBbGwoXCIucHJvZHVjdC10ZW1wbGF0ZV9fbWVkaWFcIik7XHJcbiAgICAgICAgICAgIGlmKCRwcm9kdWN0TWVkaWEubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICBzZXR1cFZpZGVvcygkcHJvZHVjdE1lZGlhKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgJG1haW5Td2lwZXIgPSAkcHJvZHVjdEltYWdlR2FsbGVyeS5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtdGVtcGxhdGVfX21lZGlhLWNvbnRhaW5lcl9fbWFpbi1zd2lwZXIgLnN3aXBlclwiKTtcclxuICAgICAgICAgICAgY29uc3QgJHRodW1ic1N3aXBlciA9ICRwcm9kdWN0SW1hZ2VHYWxsZXJ5LnF1ZXJ5U2VsZWN0b3IoXCIucHJvZHVjdC10ZW1wbGF0ZV9fbWVkaWEtY29udGFpbmVyX190aHVtYnMtc3dpcGVyIC5zd2lwZXJcIik7XHJcblxyXG4gICAgICAgICAgICBpZigkbWFpblN3aXBlciAmJiAkdGh1bWJzU3dpcGVyKXtcclxuXHJcbiAgICAgICAgICAgICAgICAvL0ludGlhbGlzZSBUaHVtYnMgU3dpcGVyXHJcbiAgICAgICAgICAgICAgICBsZXQgJHRodW1iU3dpcGVyQ29uZmlnID0geyBcclxuICAgICAgICAgICAgICAgICAgICBsb29wOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBzcGFjZUJldHdlZW46MTIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMy44LFxyXG4gICAgICAgICAgICAgICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVUb0NsaWNrZWRTbGlkZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50czp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDEwMjQ6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VCZXR3ZWVuOjE2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aHVtYlN3aXBlck9iamVjdCA9IG5ldyBTd2lwZXIoJHRodW1ic1N3aXBlciwkdGh1bWJTd2lwZXJDb25maWcpO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAvL0ludGlhbGlzZSBUb3AgU3dpcGVyIFxyXG4gICAgICAgICAgICAgICAgbGV0ICRtYWluU3dpcGVyQ29uZmlnID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvb3A6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHNwYWNlQmV0d2VlbjogMTIsXHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMSxcclxuICAgICAgICAgICAgICAgICAgICB0aHVtYnM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpcGVyOiB0aHVtYlN3aXBlck9iamVjdCxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnRzOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgMTAyNDp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZUJldHdlZW46MTZcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgY29uc3QgJG1haW5Td2lwZXJOYXZpZ2F0aW9uID0gJG1lZGlhVGh1bWJuYWlscy5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtdGVtcGxhdGVfX21lZGlhLWNvbnRhaW5lcl9fbWFpbi1zd2lwZXJfX25hdmlnYXRpb25cIik7XHJcbiAgICAgICAgICAgICAgICBpZigkbWFpblN3aXBlck5hdmlnYXRpb24pe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0ICRtYWluU3dpcGVyTmF2aWdhdGlvbkxlZnQgPSAkbWFpblN3aXBlck5hdmlnYXRpb24ucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LXRlbXBsYXRlX19tZWRpYS1jb250YWluZXJfX21haW4tc3dpcGVyX19uYXZpZ2F0aW9uLWxlZnRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJG1haW5Td2lwZXJOYXZpZ2F0aW9uUmlnaHQgPSAkbWFpblN3aXBlck5hdmlnYXRpb24ucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LXRlbXBsYXRlX19tZWRpYS1jb250YWluZXJfX21haW4tc3dpcGVyX19uYXZpZ2F0aW9uLXJpZ2h0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZigkbWFpblN3aXBlck5hdmlnYXRpb25MZWZ0ICYmICRtYWluU3dpcGVyTmF2aWdhdGlvblJpZ2h0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJG1haW5Td2lwZXJDb25maWcubmF2aWdhdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRFbDogJG1haW5Td2lwZXJOYXZpZ2F0aW9uUmlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2RWw6ICRtYWluU3dpcGVyTmF2aWdhdGlvbkxlZnQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYWluU3dpcGVyT2JqZWN0ID0gbmV3IFN3aXBlcigkbWFpblN3aXBlciwkbWFpblN3aXBlckNvbmZpZyk7XHJcbiAgICAgICAgICAgICAgICBtYWluU3dpcGVyT2JqZWN0LmNvbnRyb2xsZXIuY29udHJvbCA9IHRodW1iU3dpcGVyT2JqZWN0O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEtlZXAgYWN0aXZlIHRodW1ibmFpbCBhbGlnbmVkIGxlZnRcclxuICAgICAgICAgICAgICAgIG1haW5Td2lwZXJPYmplY3Qub24oJ3NsaWRlQ2hhbmdlJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gbWFpblN3aXBlck9iamVjdC5yZWFsSW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgdGh1bWJTd2lwZXJPYmplY3Quc2xpZGVUbyhhY3RpdmVJbmRleCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHByb2R1Y3RJbWFnZUdhbGxlcnk7Il0sIm5hbWVzIjpbIlN3aXBlciIsIk5hdmlnYXRpb24iLCJDb250cm9sbGVyIiwicHJvZHVjdEltYWdlR2FsbGVyeSIsInNldHVwVmlkZW9zIiwiJHByb2R1Y3RNZWRpYSIsImZvckVhY2giLCIkcHJvZHVjdE1lZGlhSXRlbSIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwiJGltYWdlIiwicXVlcnlTZWxlY3RvciIsIiRpY29uIiwiJHZpZGVvIiwiYWRkRXZlbnRMaXN0ZW5lciIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJhZGQiLCJyZW1vdmUiLCJwbGF5IiwicGF1c2UiLCIkcHJvZHVjdEltYWdlR2FsbGVyaWVzIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGVuZ3RoIiwiJHByb2R1Y3RJbWFnZUdhbGxlcnkiLCIkbWFpblN3aXBlciIsIiR0aHVtYnNTd2lwZXIiLCIkdGh1bWJTd2lwZXJDb25maWciLCJsb29wIiwic3BhY2VCZXR3ZWVuIiwic2xpZGVzUGVyVmlldyIsIndhdGNoU2xpZGVzUHJvZ3Jlc3MiLCJzbGlkZVRvQ2xpY2tlZFNsaWRlIiwiYnJlYWtwb2ludHMiLCJ0aHVtYlN3aXBlck9iamVjdCIsIiRtYWluU3dpcGVyQ29uZmlnIiwidGh1bWJzIiwic3dpcGVyIiwibWFpblN3aXBlck9iamVjdCIsImNvbnRyb2xsZXIiLCJjb250cm9sIiwib24iLCJhY3RpdmVJbmRleCIsInJlYWxJbmRleCIsInNsaWRlVG8iXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/product-image-gallery/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/product-nutrition-info/main.js\":\r\n/*!*******************************************************************!*\\\r\n  !*** ./resources/scripts/sections/product-nutrition-info/main.js ***!\r\n  \\*******************************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"productNutritionInfoexport\\\": () => (/* binding */ productNutritionInfoexport)\\n/* harmony export */ });\\nvar productNutritionInfoexport = function productNutritionInfoexport() {\\n  var $productNutritionDisplays = document.querySelectorAll(\\\".product-nutrition-info-content\\\");\\n  if ($productNutritionDisplays.length > 0) {\\n    $productNutritionDisplays.forEach(function ($productNutritionDisplay) {\\n      var $optionsContainer = $productNutritionDisplay.querySelector(\\\".product-nutrition-info-content__multiplier-container\\\");\\n      var $nutritionValueContainers = $productNutritionDisplay.querySelectorAll(\\\".product-nutrition-metric\\\");\\n      if ($optionsContainer && $nutritionValueContainers) {\\n        var $multiplierOptions = $optionsContainer.querySelectorAll(\\\".product-nutrition-info-content__multiplier-value\\\");\\n        $multiplierOptions.forEach(function ($multiplierOption) {\\n          $multiplierOption.addEventListener(\\\"click\\\", function (e) {\\n            if (!$multiplierOption.classList.contains(\\\"active\\\")) {\\n              $multiplierOptions.forEach(function ($option) {\\n                $option.classList.remove(\\\"active\\\");\\n              });\\n              $multiplierOption.classList.add(\\\"active\\\");\\n\\n              //Take the value and multiply the contents of the nutritition guide by it.\\n              var multiplier = parseInt($multiplierOption.textContent);\\n              if (multiplier) {\\n                $nutritionValueContainers.forEach(function ($nutritionValueContainer) {\\n                  var originalValue = $nutritionValueContainer.dataset.originalValue;\\n                  if (originalValue) {\\n                    var metricSpan = $nutritionValueContainer.querySelector(\\\".product-nutrition-metric-value\\\");\\n                    if (metricSpan) {\\n                      metricSpan.textContent = Math.round(originalValue * multiplier * 100) / 100;\\n                    } else {\\n                      console.log(\\\"could not find metric span - system unsure where to insert the newly calculated value.\\\");\\n                    }\\n                  } else {\\n                    console.log(\\\"could not find the original nutrition value - unable to multiply by chosen value\\\");\\n                  }\\n                });\\n              }\\n            }\\n          });\\n        });\\n      }\\n\\n      //bind Show/hide of nutrition table if set\\n      var $nutritionTableCont = $productNutritionDisplay.querySelector(\\\".nutrition-table-container\\\");\\n      if ($nutritionTableCont) {\\n        var $tableTrigger = $nutritionTableCont.querySelector(\\\".nutrition-table-toggle\\\");\\n        var $tableDropdown = $nutritionTableCont.querySelector(\\\".nutrition-table-dropdown\\\");\\n        if ($tableTrigger && $tableDropdown) {\\n          var $triggerChevron = $tableTrigger.querySelector(\\\"svg\\\");\\n          $tableTrigger.addEventListener(\\\"click\\\", function (e) {\\n            if ($tableDropdown.classList.contains(\\\"hidden\\\")) {\\n              $tableDropdown.classList.remove(\\\"hidden\\\");\\n              if ($triggerChevron) {\\n                $triggerChevron.classList.add(\\\"-rotate-180\\\");\\n              }\\n            } else {\\n              $tableDropdown.classList.add(\\\"hidden\\\");\\n              if ($triggerChevron) {\\n                $triggerChevron.classList.remove(\\\"-rotate-180\\\");\\n              }\\n            }\\n          });\\n        }\\n      }\\n    });\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (productNutritionInfoexport);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9wcm9kdWN0LW51dHJpdGlvbi1pbmZvL21haW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxJQUFNQSwwQkFBMEIsR0FBRyxTQUE3QkEsMEJBQTBCLEdBQVM7RUFFNUMsSUFBTUMseUJBQXlCLEdBQUdDLFFBQVEsQ0FBQ0MsZ0JBQWdCLENBQUMsaUNBQWlDLENBQUM7RUFDOUYsSUFBR0YseUJBQXlCLENBQUNHLE1BQU0sR0FBRyxDQUFDLEVBQUM7SUFDcENILHlCQUF5QixDQUFDSSxPQUFPLENBQUMsVUFBQ0Msd0JBQXdCLEVBQUs7TUFFNUQsSUFBTUMsaUJBQWlCLEdBQUdELHdCQUF3QixDQUFDRSxhQUFhLENBQUMsdURBQXVELENBQUM7TUFDekgsSUFBTUMseUJBQXlCLEdBQUdILHdCQUF3QixDQUFDSCxnQkFBZ0IsQ0FBQywyQkFBMkIsQ0FBQztNQUV4RyxJQUFHSSxpQkFBaUIsSUFBSUUseUJBQXlCLEVBQUM7UUFFOUMsSUFBTUMsa0JBQWtCLEdBQUdILGlCQUFpQixDQUFDSixnQkFBZ0IsQ0FBQyxtREFBbUQsQ0FBQztRQUNsSE8sa0JBQWtCLENBQUNMLE9BQU8sQ0FBQyxVQUFDTSxpQkFBaUIsRUFBSztVQUU5Q0EsaUJBQWlCLENBQUNDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxVQUFDQyxDQUFDLEVBQUs7WUFDL0MsSUFBRyxDQUFDRixpQkFBaUIsQ0FBQ0csU0FBUyxDQUFDQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUM7Y0FFL0NMLGtCQUFrQixDQUFDTCxPQUFPLENBQUMsVUFBQ1csT0FBTyxFQUFLO2dCQUNwQ0EsT0FBTyxDQUFDRixTQUFTLENBQUNHLE1BQU0sQ0FBQyxRQUFRLENBQUM7Y0FDdEMsQ0FBQyxDQUFDO2NBRUZOLGlCQUFpQixDQUFDRyxTQUFTLENBQUNJLEdBQUcsQ0FBQyxRQUFRLENBQUM7O2NBRXpDO2NBQ0EsSUFBTUMsVUFBVSxHQUFHQyxRQUFRLENBQUNULGlCQUFpQixDQUFDVSxXQUFXLENBQUM7Y0FFMUQsSUFBR0YsVUFBVSxFQUFDO2dCQUNWVix5QkFBeUIsQ0FBQ0osT0FBTyxDQUFDLFVBQUNpQix3QkFBd0IsRUFBSztrQkFFNUQsSUFBTUMsYUFBYSxHQUFHRCx3QkFBd0IsQ0FBQ0UsT0FBTyxDQUFDRCxhQUFhO2tCQUNwRSxJQUFHQSxhQUFhLEVBQUM7b0JBRWIsSUFBTUUsVUFBVSxHQUFHSCx3QkFBd0IsQ0FBQ2QsYUFBYSxDQUFDLGlDQUFpQyxDQUFDO29CQUM1RixJQUFHaUIsVUFBVSxFQUFDO3NCQUNWQSxVQUFVLENBQUNKLFdBQVcsR0FBR0ssSUFBSSxDQUFDQyxLQUFLLENBQUVKLGFBQWEsR0FBR0osVUFBVSxHQUFJLEdBQUcsQ0FBQyxHQUFHLEdBQUc7b0JBQ2pGLENBQUMsTUFBSTtzQkFDRFMsT0FBTyxDQUFDQyxHQUFHLENBQUMsd0ZBQXdGLENBQUM7b0JBQ3pHO2tCQUNKLENBQUMsTUFBSTtvQkFDREQsT0FBTyxDQUFDQyxHQUFHLENBQUMsa0ZBQWtGLENBQUM7a0JBQ25HO2dCQUNKLENBQUMsQ0FBQztjQUNOO1lBQ0o7VUFDSixDQUFDLENBQUM7UUFDTixDQUFDLENBQUM7TUFDTjs7TUFFQTtNQUNBLElBQU1DLG1CQUFtQixHQUFHeEIsd0JBQXdCLENBQUNFLGFBQWEsQ0FBQyw0QkFBNEIsQ0FBQztNQUNoRyxJQUFHc0IsbUJBQW1CLEVBQUM7UUFFbkIsSUFBTUMsYUFBYSxHQUFHRCxtQkFBbUIsQ0FBQ3RCLGFBQWEsQ0FBQyx5QkFBeUIsQ0FBQztRQUNsRixJQUFNd0IsY0FBYyxHQUFHRixtQkFBbUIsQ0FBQ3RCLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQztRQUVyRixJQUFHdUIsYUFBYSxJQUFJQyxjQUFjLEVBQUM7VUFFL0IsSUFBTUMsZUFBZSxHQUFHRixhQUFhLENBQUN2QixhQUFhLENBQUMsS0FBSyxDQUFDO1VBRTFEdUIsYUFBYSxDQUFDbkIsZ0JBQWdCLENBQUMsT0FBTyxFQUFDLFVBQUNDLENBQUMsRUFBSztZQUUxQyxJQUFHbUIsY0FBYyxDQUFDbEIsU0FBUyxDQUFDQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUM7Y0FDM0NpQixjQUFjLENBQUNsQixTQUFTLENBQUNHLE1BQU0sQ0FBQyxRQUFRLENBQUM7Y0FFekMsSUFBR2dCLGVBQWUsRUFBQztnQkFDZkEsZUFBZSxDQUFDbkIsU0FBUyxDQUFDSSxHQUFHLENBQUMsYUFBYSxDQUFDO2NBQ2hEO1lBRUosQ0FBQyxNQUFJO2NBQ0RjLGNBQWMsQ0FBQ2xCLFNBQVMsQ0FBQ0ksR0FBRyxDQUFDLFFBQVEsQ0FBQztjQUV0QyxJQUFHZSxlQUFlLEVBQUM7Z0JBQ2ZBLGVBQWUsQ0FBQ25CLFNBQVMsQ0FBQ0csTUFBTSxDQUFDLGFBQWEsQ0FBQztjQUNuRDtZQUNKO1VBQ0osQ0FBQyxDQUFDO1FBQ047TUFDSjtJQUNKLENBQUMsQ0FBQztFQUNOO0FBQ0osQ0FBQztBQUVELGlFQUFlakIsMEJBQTBCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9wcm9kdWN0LW51dHJpdGlvbi1pbmZvL21haW4uanM/MmFjOCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgcHJvZHVjdE51dHJpdGlvbkluZm9leHBvcnQgPSAoKSA9PiB7XHJcblxyXG4gICAgY29uc3QgJHByb2R1Y3ROdXRyaXRpb25EaXNwbGF5cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIucHJvZHVjdC1udXRyaXRpb24taW5mby1jb250ZW50XCIpO1xyXG4gICAgaWYoJHByb2R1Y3ROdXRyaXRpb25EaXNwbGF5cy5sZW5ndGggPiAwKXtcclxuICAgICAgICAkcHJvZHVjdE51dHJpdGlvbkRpc3BsYXlzLmZvckVhY2goKCRwcm9kdWN0TnV0cml0aW9uRGlzcGxheSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgJG9wdGlvbnNDb250YWluZXIgPSAkcHJvZHVjdE51dHJpdGlvbkRpc3BsYXkucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LW51dHJpdGlvbi1pbmZvLWNvbnRlbnRfX211bHRpcGxpZXItY29udGFpbmVyXCIpO1xyXG4gICAgICAgICAgICBjb25zdCAkbnV0cml0aW9uVmFsdWVDb250YWluZXJzID0gJHByb2R1Y3ROdXRyaXRpb25EaXNwbGF5LnF1ZXJ5U2VsZWN0b3JBbGwoXCIucHJvZHVjdC1udXRyaXRpb24tbWV0cmljXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYoJG9wdGlvbnNDb250YWluZXIgJiYgJG51dHJpdGlvblZhbHVlQ29udGFpbmVycyl7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0ICRtdWx0aXBsaWVyT3B0aW9ucyA9ICRvcHRpb25zQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIucHJvZHVjdC1udXRyaXRpb24taW5mby1jb250ZW50X19tdWx0aXBsaWVyLXZhbHVlXCIpO1xyXG4gICAgICAgICAgICAgICAgJG11bHRpcGxpZXJPcHRpb25zLmZvckVhY2goKCRtdWx0aXBsaWVyT3B0aW9uKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICRtdWx0aXBsaWVyT3B0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZighJG11bHRpcGxpZXJPcHRpb24uY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbXVsdGlwbGllck9wdGlvbnMuZm9yRWFjaCgoJG9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvcHRpb24uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJG11bHRpcGxpZXJPcHRpb24uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1Rha2UgdGhlIHZhbHVlIGFuZCBtdWx0aXBseSB0aGUgY29udGVudHMgb2YgdGhlIG51dHJpdGl0aW9uIGd1aWRlIGJ5IGl0LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlwbGllciA9IHBhcnNlSW50KCRtdWx0aXBsaWVyT3B0aW9uLnRleHRDb250ZW50KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihtdWx0aXBsaWVyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbnV0cml0aW9uVmFsdWVDb250YWluZXJzLmZvckVhY2goKCRudXRyaXRpb25WYWx1ZUNvbnRhaW5lcikgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9ICRudXRyaXRpb25WYWx1ZUNvbnRhaW5lci5kYXRhc2V0Lm9yaWdpbmFsVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG9yaWdpbmFsVmFsdWUpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldHJpY1NwYW4gPSAkbnV0cml0aW9uVmFsdWVDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LW51dHJpdGlvbi1tZXRyaWMtdmFsdWVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihtZXRyaWNTcGFuKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNTcGFuLnRleHRDb250ZW50ID0gTWF0aC5yb3VuZCgob3JpZ2luYWxWYWx1ZSAqIG11bHRpcGxpZXIpICogMTAwKSAvIDEwMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY291bGQgbm90IGZpbmQgbWV0cmljIHNwYW4gLSBzeXN0ZW0gdW5zdXJlIHdoZXJlIHRvIGluc2VydCB0aGUgbmV3bHkgY2FsY3VsYXRlZCB2YWx1ZS5cIilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNvdWxkIG5vdCBmaW5kIHRoZSBvcmlnaW5hbCBudXRyaXRpb24gdmFsdWUgLSB1bmFibGUgdG8gbXVsdGlwbHkgYnkgY2hvc2VuIHZhbHVlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvL2JpbmQgU2hvdy9oaWRlIG9mIG51dHJpdGlvbiB0YWJsZSBpZiBzZXRcclxuICAgICAgICAgICAgY29uc3QgJG51dHJpdGlvblRhYmxlQ29udCA9ICRwcm9kdWN0TnV0cml0aW9uRGlzcGxheS5xdWVyeVNlbGVjdG9yKFwiLm51dHJpdGlvbi10YWJsZS1jb250YWluZXJcIik7XHJcbiAgICAgICAgICAgIGlmKCRudXRyaXRpb25UYWJsZUNvbnQpe1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0ICR0YWJsZVRyaWdnZXIgPSAkbnV0cml0aW9uVGFibGVDb250LnF1ZXJ5U2VsZWN0b3IoXCIubnV0cml0aW9uLXRhYmxlLXRvZ2dsZVwiKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0ICR0YWJsZURyb3Bkb3duID0gJG51dHJpdGlvblRhYmxlQ29udC5xdWVyeVNlbGVjdG9yKFwiLm51dHJpdGlvbi10YWJsZS1kcm9wZG93blwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZigkdGFibGVUcmlnZ2VyICYmICR0YWJsZURyb3Bkb3duKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJHRyaWdnZXJDaGV2cm9uID0gJHRhYmxlVHJpZ2dlci5xdWVyeVNlbGVjdG9yKFwic3ZnXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkdGFibGVUcmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZigkdGFibGVEcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoXCJoaWRkZW5cIikpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhYmxlRHJvcGRvd24uY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkdHJpZ2dlckNoZXZyb24pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0cmlnZ2VyQ2hldnJvbi5jbGFzc0xpc3QuYWRkKFwiLXJvdGF0ZS0xODBcIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGFibGVEcm9wZG93bi5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR0cmlnZ2VyQ2hldnJvbil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRyaWdnZXJDaGV2cm9uLmNsYXNzTGlzdC5yZW1vdmUoXCItcm90YXRlLTE4MFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHByb2R1Y3ROdXRyaXRpb25JbmZvZXhwb3J0OyJdLCJuYW1lcyI6WyJwcm9kdWN0TnV0cml0aW9uSW5mb2V4cG9ydCIsIiRwcm9kdWN0TnV0cml0aW9uRGlzcGxheXMiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJmb3JFYWNoIiwiJHByb2R1Y3ROdXRyaXRpb25EaXNwbGF5IiwiJG9wdGlvbnNDb250YWluZXIiLCJxdWVyeVNlbGVjdG9yIiwiJG51dHJpdGlvblZhbHVlQ29udGFpbmVycyIsIiRtdWx0aXBsaWVyT3B0aW9ucyIsIiRtdWx0aXBsaWVyT3B0aW9uIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsIiRvcHRpb24iLCJyZW1vdmUiLCJhZGQiLCJtdWx0aXBsaWVyIiwicGFyc2VJbnQiLCJ0ZXh0Q29udGVudCIsIiRudXRyaXRpb25WYWx1ZUNvbnRhaW5lciIsIm9yaWdpbmFsVmFsdWUiLCJkYXRhc2V0IiwibWV0cmljU3BhbiIsIk1hdGgiLCJyb3VuZCIsImNvbnNvbGUiLCJsb2ciLCIkbnV0cml0aW9uVGFibGVDb250IiwiJHRhYmxlVHJpZ2dlciIsIiR0YWJsZURyb3Bkb3duIiwiJHRyaWdnZXJDaGV2cm9uIl0sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/product-nutrition-info/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/product-template/main.js\":\r\n/*!*************************************************************!*\\\r\n  !*** ./resources/scripts/sections/product-template/main.js ***!\r\n  \\*************************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"productTemplate\\\": () => (/* binding */ productTemplate)\\n/* harmony export */ });\\n/* harmony import */ var gsap__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! gsap */ \\\"./node_modules/gsap/index.js\\\");\\n/* harmony import */ var _modules_info__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modules/info */ \\\"./resources/scripts/sections/product-template/modules/info.js\\\");\\n/* harmony import */ var _modules_product__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/product */ \\\"./resources/scripts/sections/product-template/modules/product.js\\\");\\n\\n\\n//import setupMedia from \\\"./modules/media\\\";\\n\\n\\n//import accordions from \\\"./modules/accordions\\\";\\n\\nvar productTemplate = function productTemplate() {\\n  //Get Product Template\\n  var $productTemplate = document.querySelector(\\\".product-template\\\");\\n  if ($productTemplate) {\\n    var babUrl = $productTemplate.dataset.babUrl;\\n    if (babUrl) {\\n      var productId = $productTemplate.dataset.productId;\\n\\n      //Find and Show the UI Blocker to indicate that the url is being redirected\\n      var $uiBlockerLogo = $productTemplate.querySelector(\\\".build-a-bundle__product-card__ui-blocker svg\\\");\\n      if ($uiBlockerLogo) {\\n        var tl = gsap__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].timeline({\\n          repeat: -1\\n        });\\n        tl.timeScale(3.4);\\n        tl.to($uiBlockerLogo, {\\n          rotation: 360,\\n          duration: 8,\\n          ease: 'back.inOut(1.3)'\\n        });\\n      }\\n      var targetUrl = babUrl;\\n      if (productId) {\\n        targetUrl += \\\"?popupOpen=\\\" + productId;\\n      }\\n      window.location.href = targetUrl;\\n    } else {\\n      // Set up Product Template Normally \\n      var product = new _modules_product__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"]($productTemplate);\\n      (0,_modules_info__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])($productTemplate, product);\\n\\n      //setupMedia($productTemplate);\\n      //accordions($productTemplate);\\n    }\\n  }\\n};\\n\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (productTemplate);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9wcm9kdWN0LXRlbXBsYXRlL21haW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBd0I7O0FBRXhCO0FBQ3VDO0FBQ0M7QUFDeEM7O0FBRU8sSUFBTUcsZUFBZSxHQUFHLFNBQWxCQSxlQUFlLEdBQVM7RUFFbkM7RUFDQSxJQUFNQyxnQkFBZ0IsR0FBR0MsUUFBUSxDQUFDQyxhQUFhLENBQUMsbUJBQW1CLENBQUM7RUFDcEUsSUFBR0YsZ0JBQWdCLEVBQUM7SUFFbEIsSUFBTUcsTUFBTSxHQUFHSCxnQkFBZ0IsQ0FBQ0ksT0FBTyxDQUFDRCxNQUFNO0lBRTlDLElBQUdBLE1BQU0sRUFBQztNQUVSLElBQU1FLFNBQVMsR0FBR0wsZ0JBQWdCLENBQUNJLE9BQU8sQ0FBQ0MsU0FBUzs7TUFFcEQ7TUFDQSxJQUFNQyxjQUFjLEdBQUdOLGdCQUFnQixDQUFDRSxhQUFhLENBQUMsK0NBQStDLENBQUM7TUFDdEcsSUFBR0ksY0FBYyxFQUFDO1FBQ2hCLElBQUlDLEVBQUUsR0FBR1gscURBQWEsQ0FBQztVQUNyQmEsTUFBTSxFQUFFLENBQUM7UUFDWCxDQUFDLENBQUM7UUFFRkYsRUFBRSxDQUFDRyxTQUFTLENBQUMsR0FBRyxDQUFDO1FBRWpCSCxFQUFFLENBQUNJLEVBQUUsQ0FBQ0wsY0FBYyxFQUFFO1VBQ3BCTSxRQUFRLEVBQUUsR0FBRztVQUNiQyxRQUFRLEVBQUUsQ0FBQztVQUNYQyxJQUFJLEVBQUU7UUFDUixDQUFDLENBQUM7TUFDSjtNQUVBLElBQUlDLFNBQVMsR0FBR1osTUFBTTtNQUN0QixJQUFHRSxTQUFTLEVBQUM7UUFDWFUsU0FBUyxJQUFJLGFBQWEsR0FBR1YsU0FBUztNQUN4QztNQUVBVyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0MsSUFBSSxHQUFHSCxTQUFTO0lBQ2xDLENBQUMsTUFBSTtNQUVIO01BQ0EsSUFBTUksT0FBTyxHQUFHLElBQUlyQix3REFBTyxDQUFDRSxnQkFBZ0IsQ0FBQztNQUU3Q0gseURBQVMsQ0FBQ0csZ0JBQWdCLEVBQUVtQixPQUFPLENBQUM7O01BRXBDO01BQ0E7SUFDRjtFQUNGO0FBQ0YsQ0FBQzs7QUFFRCxpRUFBZXBCLGVBQWUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL3Jlc291cmNlcy9zY3JpcHRzL3NlY3Rpb25zL3Byb2R1Y3QtdGVtcGxhdGUvbWFpbi5qcz9jZGE3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnc2FwIGZyb20gXCJnc2FwXCI7XHJcblxyXG4vL2ltcG9ydCBzZXR1cE1lZGlhIGZyb20gXCIuL21vZHVsZXMvbWVkaWFcIjtcclxuaW1wb3J0IHNldHVwSW5mbyBmcm9tIFwiLi9tb2R1bGVzL2luZm9cIjtcclxuaW1wb3J0IFByb2R1Y3QgZnJvbSBcIi4vbW9kdWxlcy9wcm9kdWN0XCI7XHJcbi8vaW1wb3J0IGFjY29yZGlvbnMgZnJvbSBcIi4vbW9kdWxlcy9hY2NvcmRpb25zXCI7XHJcblxyXG5leHBvcnQgY29uc3QgcHJvZHVjdFRlbXBsYXRlID0gKCkgPT4ge1xyXG5cclxuICAvL0dldCBQcm9kdWN0IFRlbXBsYXRlXHJcbiAgY29uc3QgJHByb2R1Y3RUZW1wbGF0ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIucHJvZHVjdC10ZW1wbGF0ZVwiKTtcclxuICBpZigkcHJvZHVjdFRlbXBsYXRlKXtcclxuXHJcbiAgICBjb25zdCBiYWJVcmwgPSAkcHJvZHVjdFRlbXBsYXRlLmRhdGFzZXQuYmFiVXJsO1xyXG5cclxuICAgIGlmKGJhYlVybCl7XHJcblxyXG4gICAgICBjb25zdCBwcm9kdWN0SWQgPSAkcHJvZHVjdFRlbXBsYXRlLmRhdGFzZXQucHJvZHVjdElkO1xyXG5cclxuICAgICAgLy9GaW5kIGFuZCBTaG93IHRoZSBVSSBCbG9ja2VyIHRvIGluZGljYXRlIHRoYXQgdGhlIHVybCBpcyBiZWluZyByZWRpcmVjdGVkXHJcbiAgICAgIGNvbnN0ICR1aUJsb2NrZXJMb2dvID0gJHByb2R1Y3RUZW1wbGF0ZS5xdWVyeVNlbGVjdG9yKFwiLmJ1aWxkLWEtYnVuZGxlX19wcm9kdWN0LWNhcmRfX3VpLWJsb2NrZXIgc3ZnXCIpO1xyXG4gICAgICBpZigkdWlCbG9ja2VyTG9nbyl7ICAgICAgXHJcbiAgICAgICAgdmFyIHRsID0gZ3NhcC50aW1lbGluZSh7XHJcbiAgICAgICAgICByZXBlYXQ6IC0xLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRsLnRpbWVTY2FsZSgzLjQpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRsLnRvKCR1aUJsb2NrZXJMb2dvLCB7XHJcbiAgICAgICAgICByb3RhdGlvbjogMzYwLFxyXG4gICAgICAgICAgZHVyYXRpb246IDgsXHJcbiAgICAgICAgICBlYXNlOiAnYmFjay5pbk91dCgxLjMpJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgdGFyZ2V0VXJsID0gYmFiVXJsO1xyXG4gICAgICBpZihwcm9kdWN0SWQpe1xyXG4gICAgICAgIHRhcmdldFVybCArPSBcIj9wb3B1cE9wZW49XCIgKyBwcm9kdWN0SWQ7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGFyZ2V0VXJsO1xyXG4gICAgfWVsc2V7XHJcblxyXG4gICAgICAvLyBTZXQgdXAgUHJvZHVjdCBUZW1wbGF0ZSBOb3JtYWxseSBcclxuICAgICAgY29uc3QgcHJvZHVjdCA9IG5ldyBQcm9kdWN0KCRwcm9kdWN0VGVtcGxhdGUpO1xyXG4gICAgICBcclxuICAgICAgc2V0dXBJbmZvKCRwcm9kdWN0VGVtcGxhdGUsIHByb2R1Y3QpO1xyXG5cclxuICAgICAgLy9zZXR1cE1lZGlhKCRwcm9kdWN0VGVtcGxhdGUpO1xyXG4gICAgICAvL2FjY29yZGlvbnMoJHByb2R1Y3RUZW1wbGF0ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgcHJvZHVjdFRlbXBsYXRlO1xyXG4iXSwibmFtZXMiOlsiZ3NhcCIsInNldHVwSW5mbyIsIlByb2R1Y3QiLCJwcm9kdWN0VGVtcGxhdGUiLCIkcHJvZHVjdFRlbXBsYXRlIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiYmFiVXJsIiwiZGF0YXNldCIsInByb2R1Y3RJZCIsIiR1aUJsb2NrZXJMb2dvIiwidGwiLCJ0aW1lbGluZSIsInJlcGVhdCIsInRpbWVTY2FsZSIsInRvIiwicm90YXRpb24iLCJkdXJhdGlvbiIsImVhc2UiLCJ0YXJnZXRVcmwiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJwcm9kdWN0Il0sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/product-template/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/product-template/modules/info.js\":\r\n/*!*********************************************************************!*\\\r\n  !*** ./resources/scripts/sections/product-template/modules/info.js ***!\r\n  \\*********************************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"setupInfo\\\": () => (/* binding */ setupInfo)\\n/* harmony export */ });\\n// import setupProduct, {\\n//   getSelectedVaraint,\\n//   getSelectedPlanAllocation,\\n//   setVariantByHandle,\\n//   setOption1,\\n//   setOption2,\\n//   setOption3,\\n//   setPurchaseType,\\n//   setPlanHandle,\\n//   getOption1,\\n//   getOption2,\\n//   getOption3,\\n//   getPlanHandle,\\n//   increaseQuantity,\\n//   decreaseQuantity,\\n//   getPurchaseType,\\n//   getVariantHandle,\\n//   setPlanByHandle,\\n//   getCurrentPrice,\\n//   getQuantity,\\n//   addToCart,\\n// } from \\\"./product\\\";\\n\\nvar setupInfo = function setupInfo($productTemplate, product) {\\n  // Handle the product info set up\\n  var $productInfo = $productTemplate.querySelector(\\\".product-template__info\\\");\\n  var setPriceElements = function setPriceElements() {\\n    var price = product.getCurrentPrice();\\n    var $productPrices = $productInfo.querySelectorAll(\\\".product-template__prices .product-template__price\\\");\\n    $productPrices.forEach(function ($productPrice) {\\n      $productPrice.textContent = price;\\n    });\\n    var $ctaPrices = $productInfo.querySelectorAll(\\\".product-template__add-to-cart .product-price\\\");\\n    if ($ctaPrices) {\\n      $ctaPrices.forEach(function ($ctaPrice) {\\n        $ctaPrice.textContent = price;\\n      });\\n    }\\n    var $productComparePrices = $productInfo.querySelectorAll(\\\".product-template__prices .product-template__compare-price\\\");\\n  };\\n  var $productTemplateAtcContainer = $productInfo.querySelector(\\\".product-template__add-to-cart-container\\\");\\n  var $productTemplateAddToCart = $productTemplateAtcContainer === null || $productTemplateAtcContainer === void 0 ? void 0 : $productTemplateAtcContainer.querySelector(\\\".product-template__add-to-cart\\\");\\n  var $productTemplateAddToCartOos = $productTemplateAtcContainer === null || $productTemplateAtcContainer === void 0 ? void 0 : $productTemplateAtcContainer.querySelector(\\\".product-template__add-to-cart-oos\\\");\\n  var $productVariants = $productInfo.querySelectorAll(\\\".product-template__variants .product-template__variant\\\");\\n\\n  // Setting up the Variants logic\\n  if ($productVariants.length > 0) {\\n    $productVariants.forEach(function ($productVariant, variantIndex) {\\n      var $productOptions = $productVariant.querySelectorAll(\\\".product-template__options .product-template__option\\\");\\n      if ($productOptions.length > 0) {\\n        var setOptionElementStyles = function setOptionElementStyles($optionElement, selector) {\\n          if (selector) {\\n            $optionElement.classList.add(\\\"product-template__option--active\\\");\\n          } else {\\n            $optionElement.classList.remove(\\\"product-template__option--active\\\");\\n          }\\n        };\\n        var usingSelectList = false;\\n        $productOptions.forEach(function ($productOption) {\\n          if (product.getSelectedVaraint()) {\\n            switch (variantIndex) {\\n              case 0:\\n                setOptionElementStyles($productOption, product.getOption1() === $productOption.dataset.optionHandle);\\n                break;\\n              case 1:\\n                setOptionElementStyles($productOption, product.getOption2() === $productOption.dataset.optionHandle);\\n                break;\\n              case 2:\\n                setOptionElementStyles($productOption, product.getOption3() === $productOption.dataset.optionHandle);\\n                break;\\n            }\\n          } else if ($productOption.classList.contains(\\\"product-template__option--active\\\")) {\\n            switch (variantIndex) {\\n              case 0:\\n                product.setOption1($productOption.dataset.optionHandle);\\n                break;\\n              case 1:\\n                product.setOption2($productOption.dataset.optionHandle);\\n                break;\\n              case 2:\\n                product.setOption3($productOption.dataset.optionHandle);\\n                break;\\n            }\\n          }\\n\\n          //Are we dealing with Buttons or Select Lists? \\n          if ($productOption.classList.contains(\\\"product-template__option-select\\\")) {\\n            usingSelectList = true;\\n          } else {\\n            //The Buttons Approach\\n\\n            //Bind the Button Click\\n            $productOption.addEventListener(\\\"click\\\", function (event) {\\n              event.preventDefault();\\n              $productOptions.forEach(function ($productOptionInner) {\\n                if (event.target == $productOptionInner) {\\n                  $productOptionInner.classList.add(\\\"product-template__option--active\\\");\\n                } else {\\n                  $productOptionInner.classList.remove(\\\"product-template__option--active\\\");\\n                }\\n              });\\n              switch (variantIndex) {\\n                case 0:\\n                  product.setOption1($productOption.dataset.optionHandle);\\n                  break;\\n                case 1:\\n                  product.setOption2($productOption.dataset.optionHandle);\\n                  break;\\n                case 2:\\n                  product.setOption3($productOption.dataset.optionHandle);\\n                  break;\\n              }\\n              product.setVariantByHandle(product.getVariantHandle());\\n              product.setPlanByHandle(product.getPlanHandle());\\n              setPriceElements();\\n              var selectedVariant = product.getSelectedVaraint();\\n              if (selectedVariant.available) {\\n                if ($productTemplateAddToCartOos) {\\n                  $productTemplateAddToCartOos.classList.add(\\\"hidden\\\");\\n                }\\n                if ($productTemplateAddToCart) {\\n                  $productTemplateAddToCart.classList.remove(\\\"hidden\\\");\\n                }\\n              } else {\\n                if ($productTemplateAddToCartOos) {\\n                  $productTemplateAddToCartOos.classList.remove(\\\"hidden\\\");\\n                }\\n                if ($productTemplateAddToCart) {\\n                  $productTemplateAddToCart.classList.add(\\\"hidden\\\");\\n                }\\n              }\\n            });\\n          }\\n        });\\n        if (usingSelectList) {\\n          //Find and Bind the changing of the select list to handle our variant swapping\\n          var $variantSelectList = $productVariant.querySelector(\\\".product-template__variant-select-container .product-template__options\\\");\\n          if ($variantSelectList) {\\n            $variantSelectList.addEventListener(\\\"change\\\", function (e) {\\n              //In theory, we could just grab the value of this select this and set that as our variant. But, I want to ensure any further logic looking for the currently active variant using the class is carried forwards so that all routes work in tandem.\\n              var activeOption = e.target.options[e.target.selectedIndex];\\n              var activeVariantHandle = e.target.options[e.target.selectedIndex].dataset.optionHandle;\\n\\n              //Step one - remove our \\\"product-template__option--active\\\" class from all options\\n              $productOptions.forEach(function ($productOption) {\\n                $productOption.classList.remove(\\\"product-template__option--active\\\");\\n              });\\n\\n              //Then add it to our newly selected one\\n              activeOption.classList.add(\\\"product-template__option--active\\\");\\n\\n              //Then set the active Variant\\n              switch (variantIndex) {\\n                case 0:\\n                  product.setOption1(activeVariantHandle);\\n                  break;\\n                case 1:\\n                  product.setOption2(activeVariantHandle);\\n                  break;\\n                case 2:\\n                  product.setOption3(activeVariantHandle);\\n                  break;\\n              }\\n              product.setVariantByHandle(product.getVariantHandle());\\n              product.setPlanByHandle(product.getPlanHandle());\\n              setPriceElements();\\n\\n              //Handle toggling when one is out of stock or not\\n              var selectedVariant = product.getSelectedVaraint();\\n              if (selectedVariant.available) {\\n                if ($productTemplateAddToCartOos) {\\n                  $productTemplateAddToCartOos.classList.add(\\\"hidden\\\");\\n                }\\n                if ($productTemplateAddToCart) {\\n                  $productTemplateAddToCart.classList.remove(\\\"hidden\\\");\\n                }\\n              } else {\\n                if ($productTemplateAddToCartOos) {\\n                  $productTemplateAddToCartOos.classList.remove(\\\"hidden\\\");\\n                }\\n                if ($productTemplateAddToCart) {\\n                  $productTemplateAddToCart.classList.add(\\\"hidden\\\");\\n                }\\n              }\\n            });\\n          } else {\\n            console.log(\\\"loopin through product options determined that this variant was handled via select list but the system cannot find the select list in question\\\");\\n          }\\n        }\\n      }\\n    });\\n  }\\n  if ($productVariants.length > 0) {\\n    product.setVariantByHandle(product.getVariantHandle());\\n  }\\n\\n  // Setting up the Quantity logic\\n  var $productQuantity = $productInfo.querySelector(\\\".product-template__quantity\\\");\\n  if ($productQuantity) {\\n    var $productQuantityValue = $productQuantity.querySelector(\\\".product-template__quantity-value\\\");\\n    var $productQuantityDecrease = $productQuantity.querySelector(\\\".product-template__quantity-decrease\\\");\\n    var $productQuantityIncrease = $productQuantity.querySelector(\\\".product-template__quantity-increase\\\");\\n    if ($productQuantityValue) {\\n      if ($productQuantityDecrease) {\\n        $productQuantityDecrease.addEventListener(\\\"click\\\", function (event) {\\n          event.preventDefault();\\n          $productQuantityValue.textContent = product.decreaseQuantity($productTemplateAddToCart);\\n          setPriceElements();\\n\\n          //disable decrease button if we need to\\n          var newQty = parseInt($productQuantityValue.textContent);\\n          if (newQty < 2) {\\n            $productQuantityDecrease.classList.add(\\\"disabled\\\");\\n            $productQuantityDecrease.disabled = true;\\n          }\\n        });\\n      }\\n      if ($productQuantityIncrease) {\\n        $productQuantityIncrease.addEventListener(\\\"click\\\", function (event) {\\n          event.preventDefault();\\n          $productQuantityValue.textContent = product.increaseQuantity($productTemplateAddToCart);\\n          setPriceElements();\\n\\n          //enable decrease button \\n          $productQuantityDecrease.classList.remove(\\\"disabled\\\");\\n          $productQuantityDecrease.disabled = false;\\n        });\\n      }\\n    } else {\\n      console.log(\\\"Quantity options available but no quantity value.\\\");\\n    }\\n  }\\n\\n  // Setting up the Purchase Type logic - Not currently used or catered for\\n  var $productPurchaseTypes = $productInfo.querySelectorAll(\\\".product-template__purchase-types .product-template__purchase-type\\\");\\n  $productPurchaseTypes.forEach(function ($productPurchaseType) {\\n    var $purchaseTypeButton = $productPurchaseType.querySelector(\\\".purchase-type__button\\\");\\n    $purchaseTypeButton.addEventListener(\\\"click\\\", function (event) {\\n      event.preventDefault();\\n      $productPurchaseTypes.forEach(function ($productPurchaseTypeInner) {\\n        var $purchaseTypeButtonInner = $productPurchaseTypeInner.querySelector(\\\".purchase-type__button\\\");\\n        if (event.target == $purchaseTypeButtonInner) {\\n          $productPurchaseTypeInner.classList.add(\\\"product-template__purchase-type--active\\\");\\n          product.setPurchaseType($productPurchaseTypeInner.dataset.typeHandle);\\n          setPriceElements();\\n        } else {\\n          $productPurchaseTypeInner.classList.remove(\\\"product-template__purchase-type--active\\\");\\n        }\\n      });\\n    });\\n    if ($productPurchaseType.classList.contains(\\\"product-template__purchase-type--active\\\")) {\\n      product.setPurchaseType($productPurchaseType.dataset.typeHandle);\\n    }\\n  });\\n\\n  //Purchase Type Event Listeners\\n  var $purchaseTypePlans = $productInfo.querySelectorAll(\\\".purchase-type__plans .purchase-type__plan\\\");\\n  if ($purchaseTypePlans.length > 0) {\\n    $purchaseTypePlans.forEach(function ($purchaseTypePlan) {\\n      $purchaseTypePlan.addEventListener(\\\"click\\\", function (event) {\\n        event.preventDefault();\\n        $purchaseTypePlans.forEach(function ($purchaseTypePlanInner) {\\n          if (event.target == $purchaseTypePlanInner) {\\n            $purchaseTypePlanInner.classList.add(\\\"purchase-type__plan--active\\\");\\n            product.setPlanByHandle($purchaseTypePlanInner.dataset.planHandle);\\n            setPriceElements();\\n          } else {\\n            $purchaseTypePlanInner.classList.remove(\\\"purchase-type__plan--active\\\");\\n          }\\n        });\\n      });\\n      if ($purchaseTypePlan.classList.contains(\\\"purchase-type__plan--active\\\")) {\\n        var planHandle = product.setPlanHandle($purchaseTypePlan.dataset.planHandle);\\n        product.setPlanByHandle(planHandle);\\n      }\\n    });\\n  }\\n\\n  //Add to cart\\n  $productTemplateAddToCart.addEventListener(\\\"click\\\", function (event) {\\n    event.preventDefault();\\n    product.addToCart($productTemplateAddToCart);\\n  });\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setupInfo);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9wcm9kdWN0LXRlbXBsYXRlL21vZHVsZXMvaW5mby5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPLElBQU1BLFNBQVMsR0FBRyxTQUFaQSxTQUFTLENBQUlDLGdCQUFnQixFQUFFQyxPQUFPLEVBQUs7RUFDdEQ7RUFDQSxJQUFNQyxZQUFZLEdBQUdGLGdCQUFnQixDQUFDRyxhQUFhLENBQ2pELHlCQUF5QixDQUMxQjtFQUVELElBQU1DLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0IsR0FBUztJQUM3QixJQUFNQyxLQUFLLEdBQUdKLE9BQU8sQ0FBQ0ssZUFBZSxFQUFFO0lBQ3ZDLElBQU1DLGNBQWMsR0FBR0wsWUFBWSxDQUFDTSxnQkFBZ0IsQ0FBQyxvREFBb0QsQ0FBQztJQUMxR0QsY0FBYyxDQUFDRSxPQUFPLENBQUMsVUFBQ0MsYUFBYSxFQUFLO01BQ3hDQSxhQUFhLENBQUNDLFdBQVcsR0FBR04sS0FBSztJQUNuQyxDQUFDLENBQUM7SUFFRixJQUFNTyxVQUFVLEdBQUdWLFlBQVksQ0FBQ00sZ0JBQWdCLENBQUMsK0NBQStDLENBQUM7SUFFakcsSUFBSUksVUFBVSxFQUFDO01BQ2JBLFVBQVUsQ0FBQ0gsT0FBTyxDQUFDLFVBQUNJLFNBQVMsRUFBSztRQUNoQ0EsU0FBUyxDQUFDRixXQUFXLEdBQUdOLEtBQUs7TUFDL0IsQ0FBQyxDQUFDO0lBQ0o7SUFFQSxJQUFNUyxxQkFBcUIsR0FBR1osWUFBWSxDQUFDTSxnQkFBZ0IsQ0FDekQsNERBQTRELENBQzdEO0VBQ0gsQ0FBQztFQUVELElBQU1PLDRCQUE0QixHQUFHYixZQUFZLENBQUNDLGFBQWEsQ0FBQywwQ0FBMEMsQ0FBQztFQUMzRyxJQUFNYSx5QkFB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QUs7SUFDN0RBLEtBQUssQ0FBQ0MsY0FBYyxFQUFFO0lBQ3RCMUMsT0FBTyxDQUFDZ0YsU0FBUyxDQUFDakUseUJBQXlCLENBQUM7RUFDOUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELGlFQUFlakIsU0FBUyIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vcmVzb3VyY2VzL3NjcmlwdHMvc2VjdGlvbnMvcHJvZHVjdC10ZW1wbGF0ZS9tb2R1bGVzL2luZm8uanM/ZGRiMCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgc2V0dXBQcm9kdWN0LCB7XHJcbi8vICAgZ2V0U2VsZWN0ZWRWYXJhaW50LFxyXG4vLyAgIGdldFNlbGVjdGVkUGxhbkFsbG9jYXRpb24sXHJcbi8vICAgc2V0VmFyaWFudEJ5SGFuZGxlLFxyXG4vLyAgIHNldE9wdGlvbjEsXHJcbi8vICAgc2V0T3B0aW9uMixcclxuLy8gICBzZXRPcHRpb24zLFxyXG4vLyAgIHNldFB1cmNoYXNlVHlwZSxcclxuLy8gICBzZXRQbGFuSGFuZGxlLFxyXG4vLyAgIGdldE9wdGlvbjEsXHJcbi8vICAgZ2V0T3B0aW9uMixcclxuLy8gICBnZXRPcHRpb24zLFxyXG4vLyAgIGdldFBsYW5IYW5kbGUsXHJcbi8vICAgaW5jcmVhc2VRdWFudGl0eSxcclxuLy8gICBkZWNyZWFzZVF1YW50aXR5LFxyXG4vLyAgIGdldFB1cmNoYXNlVHlwZSxcclxuLy8gICBnZXRWYXJpYW50SGFuZGxlLFxyXG4vLyAgIHNldFBsYW5CeUhhbmRsZSxcclxuLy8gICBnZXRDdXJyZW50UHJpY2UsXHJcbi8vICAgZ2V0UXVhbnRpdHksXHJcbi8vICAgYWRkVG9DYXJ0LFxyXG4vLyB9IGZyb20gXCIuL3Byb2R1Y3RcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBzZXR1cEluZm8gPSAoJHByb2R1Y3RUZW1wbGF0ZSwgcHJvZHVjdCkgPT4ge1xyXG4gIC8vIEhhbmRsZSB0aGUgcHJvZHVjdCBpbmZvIHNldCB1cFxyXG4gIGNvbnN0ICRwcm9kdWN0SW5mbyA9ICRwcm9kdWN0VGVtcGxhdGUucXVlcnlTZWxlY3RvcihcclxuICAgIFwiLnByb2R1Y3QtdGVtcGxhdGVfX2luZm9cIlxyXG4gICk7XHJcblxyXG4gIGNvbnN0IHNldFByaWNlRWxlbWVudHMgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBwcmljZSA9IHByb2R1Y3QuZ2V0Q3VycmVudFByaWNlKCk7XHJcbiAgICBjb25zdCAkcHJvZHVjdFByaWNlcyA9ICRwcm9kdWN0SW5mby5xdWVyeVNlbGVjdG9yQWxsKFwiLnByb2R1Y3QtdGVtcGxhdGVfX3ByaWNlcyAucHJvZHVjdC10ZW1wbGF0ZV9fcHJpY2VcIik7XHJcbiAgICAkcHJvZHVjdFByaWNlcy5mb3JFYWNoKCgkcHJvZHVjdFByaWNlKSA9PiB7XHJcbiAgICAgICRwcm9kdWN0UHJpY2UudGV4dENvbnRlbnQgPSBwcmljZTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0ICRjdGFQcmljZXMgPSAkcHJvZHVjdEluZm8ucXVlcnlTZWxlY3RvckFsbChcIi5wcm9kdWN0LXRlbXBsYXRlX19hZGQtdG8tY2FydCAucHJvZHVjdC1wcmljZVwiKTtcclxuXHJcbiAgICBpZiAoJGN0YVByaWNlcyl7XHJcbiAgICAgICRjdGFQcmljZXMuZm9yRWFjaCgoJGN0YVByaWNlKSA9PiB7XHJcbiAgICAgICAgJGN0YVByaWNlLnRleHRDb250ZW50ID0gcHJpY2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0ICRwcm9kdWN0Q29tcGFyZVByaWNlcyA9ICRwcm9kdWN0SW5mby5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICBcIi5wcm9kdWN0LXRlbXBsYXRlX19wcmljZXMgLnByb2R1Y3QtdGVtcGxhdGVfX2NvbXBhcmUtcHJpY2VcIlxyXG4gICAgKTtcclxuICB9O1xyXG5cclxuICBjb25zdCAkcHJvZHVjdFRlbXBsYXRlQXRjQ29udGFpbmVyID0gJHByb2R1Y3RJbmZvLnF1ZXJ5U2VsZWN0b3IoXCIucHJvZHVjdC10ZW1wbGF0ZV9fYWRkLXRvLWNhcnQtY29udGFpbmVyXCIpO1xyXG4gIGNvbnN0ICRwcm9kdWN0VGVtcGxhdGVBZGRUb0NhcnQgPSAkcHJvZHVjdFRlbXBsYXRlQXRjQ29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtdGVtcGxhdGVfX2FkZC10by1jYXJ0XCIpO1xyXG4gIGNvbnN0ICRwcm9kdWN0VGVtcGxhdGVBZGRUb0NhcnRPb3MgPSAkcHJvZHVjdFRlbXBsYXRlQXRjQ29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtdGVtcGxhdGVfX2FkZC10by1jYXJ0LW9vc1wiKTtcclxuICBjb25zdCAkcHJvZHVjdFZhcmlhbnRzID0gJHByb2R1Y3RJbmZvLnF1ZXJ5U2VsZWN0b3JBbGwoXCIucHJvZHVjdC10ZW1wbGF0ZV9fdmFyaWFudHMgLnByb2R1Y3QtdGVtcGxhdGVfX3ZhcmlhbnRcIik7XHJcblxyXG4gIC8vIFNldHRpbmcgdXAgdGhlIFZhcmlhbnRzIGxvZ2ljXHJcbiAgaWYoJHByb2R1Y3RWYXJpYW50cy5sZW5ndGggPiAwKXtcclxuICAgICRwcm9kdWN0VmFyaWFudHMuZm9yRWFjaCgoJHByb2R1Y3RWYXJpYW50LCB2YXJpYW50SW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgJHByb2R1Y3RPcHRpb25zID0gJHByb2R1Y3RWYXJpYW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIucHJvZHVjdC10ZW1wbGF0ZV9fb3B0aW9ucyAucHJvZHVjdC10ZW1wbGF0ZV9fb3B0aW9uXCIpO1xyXG5cclxuICAgICAgaWYoJHByb2R1Y3RPcHRpb25zLmxlbmd0aCA+IDApe1xyXG5cclxuICAgICAgICBjb25zdCBzZXRPcHRpb25FbGVtZW50U3R5bGVzID0gKCRvcHRpb25FbGVtZW50LCBzZWxlY3RvcikgPT4ge1xyXG4gICAgICAgICAgaWYgKHNlbGVjdG9yKSB7XHJcbiAgICAgICAgICAgICRvcHRpb25FbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJwcm9kdWN0LXRlbXBsYXRlX19vcHRpb24tLWFjdGl2ZVwiKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICRvcHRpb25FbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJwcm9kdWN0LXRlbXBsYXRlX19vcHRpb24tLWFjdGl2ZVwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBsZXQgdXNpbmdTZWxlY3RMaXN0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICRwcm9kdWN0T3B0aW9ucy5mb3JFYWNoKCgkcHJvZHVjdE9wdGlvbikgPT4ge1xyXG5cclxuICAgICAgICAgIGlmIChwcm9kdWN0LmdldFNlbGVjdGVkVmFyYWludCgpKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodmFyaWFudEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgICAgICAgc2V0T3B0aW9uRWxlbWVudFN0eWxlcygkcHJvZHVjdE9wdGlvbixwcm9kdWN0LmdldE9wdGlvbjEoKSA9PT0gJHByb2R1Y3RPcHRpb24uZGF0YXNldC5vcHRpb25IYW5kbGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgc2V0T3B0aW9uRWxlbWVudFN0eWxlcygkcHJvZHVjdE9wdGlvbixwcm9kdWN0LmdldE9wdGlvbjIoKSA9PT0gJHByb2R1Y3RPcHRpb24uZGF0YXNldC5vcHRpb25IYW5kbGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgICAgICAgc2V0T3B0aW9uRWxlbWVudFN0eWxlcygkcHJvZHVjdE9wdGlvbixwcm9kdWN0LmdldE9wdGlvbjMoKSA9PT0gJHByb2R1Y3RPcHRpb24uZGF0YXNldC5vcHRpb25IYW5kbGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAoJHByb2R1Y3RPcHRpb24uY2xhc3NMaXN0LmNvbnRhaW5zKFwicHJvZHVjdC10ZW1wbGF0ZV9fb3B0aW9uLS1hY3RpdmVcIikpIHtcclxuICAgICAgICAgICAgc3dpdGNoICh2YXJpYW50SW5kZXgpIHtcclxuICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICBwcm9kdWN0LnNldE9wdGlvbjEoJHByb2R1Y3RPcHRpb24uZGF0YXNldC5vcHRpb25IYW5kbGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgcHJvZHVjdC5zZXRPcHRpb24yKCRwcm9kdWN0T3B0aW9uLmRhdGFzZXQub3B0aW9uSGFuZGxlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgIHByb2R1Y3Quc2V0T3B0aW9uMygkcHJvZHVjdE9wdGlvbi5kYXRhc2V0Lm9wdGlvbkhhbmRsZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vQXJlIHdlIGRlYWxpbmcgd2l0aCBCdXR0b25zIG9yIFNlbGVjdCBMaXN0cz8gXHJcbiAgICAgICAgICBpZigkcHJvZHVjdE9wdGlvbi5jbGFzc0xpc3QuY29udGFpbnMoXCJwcm9kdWN0LXRlbXBsYXRlX19vcHRpb24tc2VsZWN0XCIpKXtcclxuICAgICAgICAgICAgdXNpbmdTZWxlY3RMaXN0ID0gdHJ1ZTtcclxuICAgICAgICAgIH1lbHNle1xyXG5cclxuICAgICAgICAgICAgLy9UaGUgQnV0dG9ucyBBcHByb2FjaFxyXG5cclxuICAgICAgICAgICAgLy9CaW5kIHRoZSBCdXR0b24gQ2xpY2tcclxuICAgICAgICAgICAgJHByb2R1Y3RPcHRpb24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgJHByb2R1Y3RPcHRpb25zLmZvckVhY2goKCRwcm9kdWN0T3B0aW9uSW5uZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQgPT0gJHByb2R1Y3RPcHRpb25Jbm5lcikge1xyXG4gICAgICAgICAgICAgICAgICAkcHJvZHVjdE9wdGlvbklubmVyLmNsYXNzTGlzdC5hZGQoXCJwcm9kdWN0LXRlbXBsYXRlX19vcHRpb24tLWFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICRwcm9kdWN0T3B0aW9uSW5uZXIuY2xhc3NMaXN0LnJlbW92ZShcInByb2R1Y3QtdGVtcGxhdGVfX29wdGlvbi0tYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHN3aXRjaCAodmFyaWFudEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgIHByb2R1Y3Quc2V0T3B0aW9uMSgkcHJvZHVjdE9wdGlvbi5kYXRhc2V0Lm9wdGlvbkhhbmRsZSk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgICBwcm9kdWN0LnNldE9wdGlvbjIoJHByb2R1Y3RPcHRpb24uZGF0YXNldC5vcHRpb25IYW5kbGUpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgICAgICAgICAgcHJvZHVjdC5zZXRPcHRpb24zKCRwcm9kdWN0T3B0aW9uLmRhdGFzZXQub3B0aW9uSGFuZGxlKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHByb2R1Y3Quc2V0VmFyaWFudEJ5SGFuZGxlKHByb2R1Y3QuZ2V0VmFyaWFudEhhbmRsZSgpKTtcclxuICAgICAgICAgICAgICBwcm9kdWN0LnNldFBsYW5CeUhhbmRsZShwcm9kdWN0LmdldFBsYW5IYW5kbGUoKSk7XHJcbiAgICAgICAgICAgICAgc2V0UHJpY2VFbGVtZW50cygpO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRWYXJpYW50ID0gcHJvZHVjdC5nZXRTZWxlY3RlZFZhcmFpbnQoKTtcclxuICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRWYXJpYW50LmF2YWlsYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgaWYoJHByb2R1Y3RUZW1wbGF0ZUFkZFRvQ2FydE9vcyl7XHJcbiAgICAgICAgICAgICAgICAgICRwcm9kdWN0VGVtcGxhdGVBZGRUb0NhcnRPb3MuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZigkcHJvZHVjdFRlbXBsYXRlQWRkVG9DYXJ0KXtcclxuICAgICAgICAgICAgICAgICAgJHByb2R1Y3RUZW1wbGF0ZUFkZFRvQ2FydC5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoJHByb2R1Y3RUZW1wbGF0ZUFkZFRvQ2FydE9vcyl7XHJcbiAgICAgICAgICAgICAgICAgICRwcm9kdWN0VGVtcGxhdGVBZGRUb0NhcnRPb3MuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZigkcHJvZHVjdFRlbXBsYXRlQWRkVG9DYXJ0KXtcclxuICAgICAgICAgICAgICAgICAgJHByb2R1Y3RUZW1wbGF0ZUFkZFRvQ2FydC5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7ICAgICAgICAgIFxyXG4gICAgICAgICAgfSAgICAgIFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZih1c2luZ1NlbGVjdExpc3Qpe1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAvL0ZpbmQgYW5kIEJpbmQgdGhlIGNoYW5naW5nIG9mIHRoZSBzZWxlY3QgbGlzdCB0byBoYW5kbGUgb3VyIHZhcmlhbnQgc3dhcHBpbmdcclxuICAgICAgICAgIGNvbnN0ICR2YXJpYW50U2VsZWN0TGlzdCA9ICRwcm9kdWN0VmFyaWFudC5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtdGVtcGxhdGVfX3ZhcmlhbnQtc2VsZWN0LWNvbnRhaW5lciAucHJvZHVjdC10ZW1wbGF0ZV9fb3B0aW9uc1wiKTtcclxuICAgICAgICAgIGlmKCR2YXJpYW50U2VsZWN0TGlzdCl7XHJcbiAgICAgICAgICAgICR2YXJpYW50U2VsZWN0TGlzdC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsKGUpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgLy9JbiB0aGVvcnksIHdlIGNvdWxkIGp1c3QgZ3JhYiB0aGUgdmFsdWUgb2YgdGhpcyBzZWxlY3QgdGhpcyBhbmQgc2V0IHRoYXQgYXMgb3VyIHZhcmlhbnQuIEJ1dCwgSSB3YW50IHRvIGVuc3VyZSBhbnkgZnVydGhlciBsb2dpYyBsb29raW5nIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSB2YXJpYW50IHVzaW5nIHRoZSBjbGFzcyBpcyBjYXJyaWVkIGZvcndhcmRzIHNvIHRoYXQgYWxsIHJvdXRlcyB3b3JrIGluIHRhbmRlbS5cclxuICAgICAgICAgICAgICBjb25zdCBhY3RpdmVPcHRpb24gPSBlLnRhcmdldC5vcHRpb25zW2UudGFyZ2V0LnNlbGVjdGVkSW5kZXhdO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZVZhcmlhbnRIYW5kbGUgPSBlLnRhcmdldC5vcHRpb25zW2UudGFyZ2V0LnNlbGVjdGVkSW5kZXhdLmRhdGFzZXQub3B0aW9uSGFuZGxlO1xyXG5cclxuICAgICAgICAgICAgICAvL1N0ZXAgb25lIC0gcmVtb3ZlIG91ciBcInByb2R1Y3QtdGVtcGxhdGVfX29wdGlvbi0tYWN0aXZlXCIgY2xhc3MgZnJvbSBhbGwgb3B0aW9uc1xyXG4gICAgICAgICAgICAgICRwcm9kdWN0T3B0aW9ucy5mb3JFYWNoKCgkcHJvZHVjdE9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgJHByb2R1Y3RPcHRpb24uY2xhc3NMaXN0LnJlbW92ZShcInByb2R1Y3QtdGVtcGxhdGVfX29wdGlvbi0tYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAvL1RoZW4gYWRkIGl0IHRvIG91ciBuZXdseSBzZWxlY3RlZCBvbmVcclxuICAgICAgICAgICAgICBhY3RpdmVPcHRpb24uY2xhc3NMaXN0LmFkZChcInByb2R1Y3QtdGVtcGxhdGVfX29wdGlvbi0tYWN0aXZlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAvL1RoZW4gc2V0IHRoZSBhY3RpdmUgVmFyaWFudFxyXG4gICAgICAgICAgICAgIHN3aXRjaCAodmFyaWFudEluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgIHByb2R1Y3Quc2V0T3B0aW9uMShhY3RpdmVWYXJpYW50SGFuZGxlKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICAgICAgICAgIHByb2R1Y3Quc2V0T3B0aW9uMihhY3RpdmVWYXJpYW50SGFuZGxlKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICAgIHByb2R1Y3Quc2V0T3B0aW9uMyhhY3RpdmVWYXJpYW50SGFuZGxlKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHByb2R1Y3Quc2V0VmFyaWFudEJ5SGFuZGxlKHByb2R1Y3QuZ2V0VmFyaWFudEhhbmRsZSgpKTtcclxuICAgICAgICAgICAgICBwcm9kdWN0LnNldFBsYW5CeUhhbmRsZShwcm9kdWN0LmdldFBsYW5IYW5kbGUoKSk7XHJcbiAgICAgICAgICAgICAgc2V0UHJpY2VFbGVtZW50cygpO1xyXG5cclxuICAgICAgICAgICAgICAvL0hhbmRsZSB0b2dnbGluZyB3aGVuIG9uZSBpcyBvdXQgb2Ygc3RvY2sgb3Igbm90XHJcbiAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkVmFyaWFudCA9IHByb2R1Y3QuZ2V0U2VsZWN0ZWRWYXJhaW50KCk7XHJcbiAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkVmFyaWFudC5hdmFpbGFibGUpIHtcclxuICAgICAgICAgICAgICAgIGlmKCRwcm9kdWN0VGVtcGxhdGVBZGRUb0NhcnRPb3Mpe1xyXG4gICAgICAgICAgICAgICAgICAkcHJvZHVjdFRlbXBsYXRlQWRkVG9DYXJ0T29zLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoJHByb2R1Y3RUZW1wbGF0ZUFkZFRvQ2FydCl7XHJcbiAgICAgICAgICAgICAgICAgICRwcm9kdWN0VGVtcGxhdGVBZGRUb0NhcnQuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCRwcm9kdWN0VGVtcGxhdGVBZGRUb0NhcnRPb3Mpe1xyXG4gICAgICAgICAgICAgICAgICAkcHJvZHVjdFRlbXBsYXRlQWRkVG9DYXJ0T29zLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoJHByb2R1Y3RUZW1wbGF0ZUFkZFRvQ2FydCl7XHJcbiAgICAgICAgICAgICAgICAgICRwcm9kdWN0VGVtcGxhdGVBZGRUb0NhcnQuY2xhc3NMaXN0LmFkZChcImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9ICAgICAgICAgIFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJsb29waW4gdGhyb3VnaCBwcm9kdWN0IG9wdGlvbnMgZGV0ZXJtaW5lZCB0aGF0IHRoaXMgdmFyaWFudCB3YXMgaGFuZGxlZCB2aWEgc2VsZWN0IGxpc3QgYnV0IHRoZSBzeXN0ZW0gY2Fubm90IGZpbmQgdGhlIHNlbGVjdCBsaXN0IGluIHF1ZXN0aW9uXCIpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9ICAgIFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpZiAoJHByb2R1Y3RWYXJpYW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICBwcm9kdWN0LnNldFZhcmlhbnRCeUhhbmRsZShwcm9kdWN0LmdldFZhcmlhbnRIYW5kbGUoKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gU2V0dGluZyB1cCB0aGUgUXVhbnRpdHkgbG9naWNcclxuICBjb25zdCAkcHJvZHVjdFF1YW50aXR5ID0gJHByb2R1Y3RJbmZvLnF1ZXJ5U2VsZWN0b3IoXCIucHJvZHVjdC10ZW1wbGF0ZV9fcXVhbnRpdHlcIik7XHJcblxyXG4gIGlmKCRwcm9kdWN0UXVhbnRpdHkpe1xyXG5cclxuICAgIGNvbnN0ICRwcm9kdWN0UXVhbnRpdHlWYWx1ZSA9ICRwcm9kdWN0UXVhbnRpdHkucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LXRlbXBsYXRlX19xdWFudGl0eS12YWx1ZVwiKTtcclxuICAgIGNvbnN0ICRwcm9kdWN0UXVhbnRpdHlEZWNyZWFzZSA9ICRwcm9kdWN0UXVhbnRpdHkucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LXRlbXBsYXRlX19xdWFudGl0eS1kZWNyZWFzZVwiKTtcclxuICAgIGNvbnN0ICRwcm9kdWN0UXVhbnRpdHlJbmNyZWFzZSA9ICRwcm9kdWN0UXVhbnRpdHkucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LXRlbXBsYXRlX19xdWFudGl0eS1pbmNyZWFzZVwiKTtcclxuXHJcbiAgICBpZigkcHJvZHVjdFF1YW50aXR5VmFsdWUpe1xyXG4gICAgICBpZigkcHJvZHVjdFF1YW50aXR5RGVjcmVhc2Upe1xyXG4gICAgICAgICRwcm9kdWN0UXVhbnRpdHlEZWNyZWFzZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgJHByb2R1Y3RRdWFudGl0eVZhbHVlLnRleHRDb250ZW50ID0gcHJvZHVjdC5kZWNyZWFzZVF1YW50aXR5KCRwcm9kdWN0VGVtcGxhdGVBZGRUb0NhcnQpO1xyXG4gICAgICAgICAgc2V0UHJpY2VFbGVtZW50cygpO1xyXG5cclxuICAgICAgICAgIC8vZGlzYWJsZSBkZWNyZWFzZSBidXR0b24gaWYgd2UgbmVlZCB0b1xyXG4gICAgICAgICAgY29uc3QgbmV3UXR5ID0gcGFyc2VJbnQoJHByb2R1Y3RRdWFudGl0eVZhbHVlLnRleHRDb250ZW50KTtcclxuICAgICAgICAgIGlmKG5ld1F0eSA8IDIpe1xyXG4gICAgICAgICAgICAkcHJvZHVjdFF1YW50aXR5RGVjcmVhc2UuY2xhc3NMaXN0LmFkZChcImRpc2FibGVkXCIpO1xyXG4gICAgICAgICAgICAkcHJvZHVjdFF1YW50aXR5RGVjcmVhc2UuZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfSBcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoJHByb2R1Y3RRdWFudGl0eUluY3JlYXNlKXtcclxuICAgICAgICAkcHJvZHVjdFF1YW50aXR5SW5jcmVhc2UuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICRwcm9kdWN0UXVhbnRpdHlWYWx1ZS50ZXh0Q29udGVudCA9IHByb2R1Y3QuaW5jcmVhc2VRdWFudGl0eSgkcHJvZHVjdFRlbXBsYXRlQWRkVG9DYXJ0KTtcclxuICAgICAgICAgIHNldFByaWNlRWxlbWVudHMoKTtcclxuXHJcbiAgICAgICAgICAvL2VuYWJsZSBkZWNyZWFzZSBidXR0b24gXHJcbiAgICAgICAgICAkcHJvZHVjdFF1YW50aXR5RGVjcmVhc2UuY2xhc3NMaXN0LnJlbW92ZShcImRpc2FibGVkXCIpO1xyXG4gICAgICAgICAgJHByb2R1Y3RRdWFudGl0eURlY3JlYXNlLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1lbHNle1xyXG4gICAgICBjb25zb2xlLmxvZyhcIlF1YW50aXR5IG9wdGlvbnMgYXZhaWxhYmxlIGJ1dCBubyBxdWFudGl0eSB2YWx1ZS5cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gU2V0dGluZyB1cCB0aGUgUHVyY2hhc2UgVHlwZSBsb2dpYyAtIE5vdCBjdXJyZW50bHkgdXNlZCBvciBjYXRlcmVkIGZvclxyXG4gIGNvbnN0ICRwcm9kdWN0UHVyY2hhc2VUeXBlcyA9ICRwcm9kdWN0SW5mby5xdWVyeVNlbGVjdG9yQWxsKFwiLnByb2R1Y3QtdGVtcGxhdGVfX3B1cmNoYXNlLXR5cGVzIC5wcm9kdWN0LXRlbXBsYXRlX19wdXJjaGFzZS10eXBlXCIpO1xyXG4gICRwcm9kdWN0UHVyY2hhc2VUeXBlcy5mb3JFYWNoKCgkcHJvZHVjdFB1cmNoYXNlVHlwZSkgPT4ge1xyXG4gICAgY29uc3QgJHB1cmNoYXNlVHlwZUJ1dHRvbiA9ICRwcm9kdWN0UHVyY2hhc2VUeXBlLnF1ZXJ5U2VsZWN0b3IoXCIucHVyY2hhc2UtdHlwZV9fYnV0dG9uXCIpO1xyXG4gICAgJHB1cmNoYXNlVHlwZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICRwcm9kdWN0UHVyY2hhc2VUeXBlcy5mb3JFYWNoKCgkcHJvZHVjdFB1cmNoYXNlVHlwZUlubmVyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgJHB1cmNoYXNlVHlwZUJ1dHRvbklubmVyID0gJHByb2R1Y3RQdXJjaGFzZVR5cGVJbm5lci5xdWVyeVNlbGVjdG9yKFwiLnB1cmNoYXNlLXR5cGVfX2J1dHRvblwiKTtcclxuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09ICRwdXJjaGFzZVR5cGVCdXR0b25Jbm5lcikge1xyXG4gICAgICAgICAgJHByb2R1Y3RQdXJjaGFzZVR5cGVJbm5lci5jbGFzc0xpc3QuYWRkKFwicHJvZHVjdC10ZW1wbGF0ZV9fcHVyY2hhc2UtdHlwZS0tYWN0aXZlXCIpO1xyXG4gICAgICAgICAgcHJvZHVjdC5zZXRQdXJjaGFzZVR5cGUoJHByb2R1Y3RQdXJjaGFzZVR5cGVJbm5lci5kYXRhc2V0LnR5cGVIYW5kbGUpO1xyXG4gICAgICAgICAgc2V0UHJpY2VFbGVtZW50cygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAkcHJvZHVjdFB1cmNoYXNlVHlwZUlubmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJwcm9kdWN0LXRlbXBsYXRlX19wdXJjaGFzZS10eXBlLS1hY3RpdmVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICgkcHJvZHVjdFB1cmNoYXNlVHlwZS5jbGFzc0xpc3QuY29udGFpbnMoXCJwcm9kdWN0LXRlbXBsYXRlX19wdXJjaGFzZS10eXBlLS1hY3RpdmVcIikpIHtcclxuICAgICAgcHJvZHVjdC5zZXRQdXJjaGFzZVR5cGUoJHByb2R1Y3RQdXJjaGFzZVR5cGUuZGF0YXNldC50eXBlSGFuZGxlKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgLy9QdXJjaGFzZSBUeXBlIEV2ZW50IExpc3RlbmVyc1xyXG4gIGNvbnN0ICRwdXJjaGFzZVR5cGVQbGFucyA9ICRwcm9kdWN0SW5mby5xdWVyeVNlbGVjdG9yQWxsKFwiLnB1cmNoYXNlLXR5cGVfX3BsYW5zIC5wdXJjaGFzZS10eXBlX19wbGFuXCIpO1xyXG4gIGlmKCRwdXJjaGFzZVR5cGVQbGFucy5sZW5ndGggPiAwKXtcclxuICAgICRwdXJjaGFzZVR5cGVQbGFucy5mb3JFYWNoKCgkcHVyY2hhc2VUeXBlUGxhbikgPT4ge1xyXG4gICAgICAkcHVyY2hhc2VUeXBlUGxhbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAkcHVyY2hhc2VUeXBlUGxhbnMuZm9yRWFjaCgoJHB1cmNoYXNlVHlwZVBsYW5Jbm5lcikgPT4ge1xyXG4gICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PSAkcHVyY2hhc2VUeXBlUGxhbklubmVyKSB7XHJcbiAgICAgICAgICAgICRwdXJjaGFzZVR5cGVQbGFuSW5uZXIuY2xhc3NMaXN0LmFkZChcInB1cmNoYXNlLXR5cGVfX3BsYW4tLWFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgcHJvZHVjdC5zZXRQbGFuQnlIYW5kbGUoJHB1cmNoYXNlVHlwZVBsYW5Jbm5lci5kYXRhc2V0LnBsYW5IYW5kbGUpO1xyXG4gICAgICAgICAgICBzZXRQcmljZUVsZW1lbnRzKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkcHVyY2hhc2VUeXBlUGxhbklubmVyLmNsYXNzTGlzdC5yZW1vdmUoXHJcbiAgICAgICAgICAgICAgXCJwdXJjaGFzZS10eXBlX19wbGFuLS1hY3RpdmVcIlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKCRwdXJjaGFzZVR5cGVQbGFuLmNsYXNzTGlzdC5jb250YWlucyhcInB1cmNoYXNlLXR5cGVfX3BsYW4tLWFjdGl2ZVwiKSkge1xyXG4gICAgICAgIGNvbnN0IHBsYW5IYW5kbGUgPSBwcm9kdWN0LnNldFBsYW5IYW5kbGUoXHJcbiAgICAgICAgICAkcHVyY2hhc2VUeXBlUGxhbi5kYXRhc2V0LnBsYW5IYW5kbGVcclxuICAgICAgICApO1xyXG4gICAgICAgIHByb2R1Y3Quc2V0UGxhbkJ5SGFuZGxlKHBsYW5IYW5kbGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vQWRkIHRvIGNhcnRcclxuICAkcHJvZHVjdFRlbXBsYXRlQWRkVG9DYXJ0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZXZlbnQpID0+IHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBwcm9kdWN0LmFkZFRvQ2FydCgkcHJvZHVjdFRlbXBsYXRlQWRkVG9DYXJ0KTtcclxuICB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHNldHVwSW5mbztcclxuIl0sIm5hbWVzIjpbInNldHVwSW5mbyIsIiRwcm9kdWN0VGVtcGxhdGUiLCJwcm9kdWN0IiwiJHByb2R1Y3RJbmZvIiwicXVlcnlTZWxlY3RvciIsInNldFByaWNlRWxlbWVudHMiLCJwcmljZSIsImdldEN1cnJlbnRQcmljZSIsIiRwcm9kdWN0UHJpY2VzIiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giLCIkcHJvZHVjdFByaWNlIiwidGV4dENvbnRlbnQiLCIkY3RhUHJpY2VzIiwiJGN0YVByaWNlIiwiJHByb2R1Y3RDb21wYXJlUHJpY2VzIiwiJHByb2R1Y3RUZW1wbGF0ZUF0Y0NvbnRhaW5lciIsIiRwcm9kdWN0VGVtcGxhdGVBZGRUb0NhcnQiLCIkcHJvZHVjdFRlbXBsYXRlQWRkVG9DYXJ0T29zIiwiJHByb2R1Y3RWYXJpYW50cyIsImxlbmd0aCIsIiRwcm9kdWN0VmFyaWFudCIsInZhcmlhbnRJbmRleCIsIiRwcm9kdWN0T3B0aW9ucyIsInNldE9wdGlvbkVsZW1lbnRTdHlsZXMiLCIkb3B0aW9uRWxlbWVudCIsInNlbGVjdG9yIiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlIiwidXNpbmdTZWxlY3RMaXN0IiwiJHByb2R1Y3RPcHRpb24iLCJnZXRTZWxlY3RlZFZhcmFpbnQiLCJnZXRPcHRpb24xIiwiZGF0YXNldCIsIm9wdGlvbkhhbmRsZSIsImdldE9wdGlvbjIiLCJnZXRPcHRpb24zIiwiY29udGFpbnMiLCJzZXRPcHRpb24xIiwic2V0T3B0aW9uMiIsInNldE9wdGlvbjMiLCJhZGRFdmVudExpc3RlbmVyIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsIiRwcm9kdWN0T3B0aW9uSW5uZXIiLCJ0YXJnZXQiLCJzZXRWYXJpYW50QnlIYW5kbGUiLCJnZXRWYXJpYW50SGFuZGxlIiwic2V0UGxhbkJ5SGFuZGxlIiwiZ2V0UGxhbkhhbmRsZSIsInNlbGVjdGVkVmFyaWFudCIsImF2YWlsYWJsZSIsIiR2YXJpYW50U2VsZWN0TGlzdCIsImUiLCJhY3RpdmVPcHRpb24iLCJvcHRpb25zIiwic2VsZWN0ZWRJbmRleCIsImFjdGl2ZVZhcmlhbnRIYW5kbGUiLCJjb25zb2xlIiwibG9nIiwiJHByb2R1Y3RRdWFudGl0eSIsIiRwcm9kdWN0UXVhbnRpdHlWYWx1ZSIsIiRwcm9kdWN0UXVhbnRpdHlEZWNyZWFzZSIsIiRwcm9kdWN0UXVhbnRpdHlJbmNyZWFzZSIsImRlY3JlYXNlUXVhbnRpdHkiLCJuZXdRdHkiLCJwYXJzZUludCIsImRpc2FibGVkIiwiaW5jcmVhc2VRdWFudGl0eSIsIiRwcm9kdWN0UHVyY2hhc2VUeXBlcyIsIiRwcm9kdWN0UHVyY2hhc2VUeXBlIiwiJHB1cmNoYXNlVHlwZUJ1dHRvbiIsIiRwcm9kdWN0UHVyY2hhc2VUeXBlSW5uZXIiLCIkcHVyY2hhc2VUeXBlQnV0dG9uSW5uZXIiLCJzZXRQdXJjaGFzZVR5cGUiLCJ0eXBlSGFuZGxlIiwiJHB1cmNoYXNlVHlwZVBsYW5zIiwiJHB1cmNoYXNlVHlwZVBsYW4iLCIkcHVyY2hhc2VUeXBlUGxhbklubmVyIiwicGxhbkhhbmRsZSIsInNldFBsYW5IYW5kbGUiLCJhZGRUb0NhcnQiXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/product-template/modules/info.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/product-template/modules/product.js\":\r\n/*!************************************************************************!*\\\r\n  !*** ./resources/scripts/sections/product-template/modules/product.js ***!\r\n  \\************************************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"Product\\\": () => (/* binding */ Product),\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\nfunction _typeof(obj) { \\\"@babel/helpers - typeof\\\"; return _typeof = \\\"function\\\" == typeof Symbol && \\\"symbol\\\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \\\"function\\\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \\\"symbol\\\" : typeof obj; }, _typeof(obj); }\\nfunction _regeneratorRuntime() { \\\"use strict\\\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = \\\"function\\\" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || \\\"@@iterator\\\", asyncIteratorSymbol = $Symbol.asyncIterator || \\\"@@asyncIterator\\\", toStringTagSymbol = $Symbol.toStringTag || \\\"@@toStringTag\\\"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, \\\"\\\"); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, \\\"_invoke\\\", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: \\\"normal\\\", arg: fn.call(obj, arg) }; } catch (err) { return { type: \\\"throw\\\", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { [\\\"next\\\", \\\"throw\\\", \\\"return\\\"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (\\\"throw\\\" !== record.type) { var result = record.arg, value = result.value; return value && \\\"object\\\" == _typeof(value) && hasOwn.call(value, \\\"__await\\\") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke(\\\"next\\\", value, resolve, reject); }, function (err) { invoke(\\\"throw\\\", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke(\\\"throw\\\", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, \\\"_invoke\\\", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = \\\"suspendedStart\\\"; return function (method, arg) { if (\\\"executing\\\" === state) throw new Error(\\\"Generator is already running\\\"); if (\\\"completed\\\" === state) { if (\\\"throw\\\" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (\\\"next\\\" === context.method) context.sent = context._sent = context.arg;else if (\\\"throw\\\" === context.method) { if (\\\"suspendedStart\\\" === state) throw state = \\\"completed\\\", context.arg; context.dispatchException(context.arg); } else \\\"return\\\" === context.method && context.abrupt(\\\"return\\\", context.arg); state = \\\"executing\\\"; var record = tryCatch(innerFn, self, context); if (\\\"normal\\\" === record.type) { if (state = context.done ? \\\"completed\\\" : \\\"suspendedYield\\\", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } \\\"throw\\\" === record.type && (state = \\\"completed\\\", context.method = \\\"throw\\\", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, \\\"throw\\\" === methodName && delegate.iterator[\\\"return\\\"] && (context.method = \\\"return\\\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \\\"throw\\\" === context.method) || \\\"return\\\" !== methodName && (context.method = \\\"throw\\\", context.arg = new TypeError(\\\"The iterator does not provide a '\\\" + methodName + \\\"' method\\\")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if (\\\"throw\\\" === record.type) return context.method = \\\"throw\\\", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \\\"return\\\" !== context.method && (context.method = \\\"next\\\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \\\"throw\\\", context.arg = new TypeError(\\\"iterator result is not an object\\\"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = \\\"normal\\\", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: \\\"root\\\" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if (\\\"function\\\" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, \\\"constructor\\\", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, \\\"constructor\\\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \\\"GeneratorFunction\\\"), exports.isGeneratorFunction = function (genFun) { var ctor = \\\"function\\\" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || \\\"GeneratorFunction\\\" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \\\"GeneratorFunction\\\")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \\\"Generator\\\"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, \\\"toString\\\", function () { return \\\"[object Generator]\\\"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \\\"next\\\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) \\\"t\\\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if (\\\"throw\\\" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = \\\"throw\\\", record.arg = exception, context.next = loc, caught && (context.method = \\\"next\\\", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if (\\\"root\\\" === entry.tryLoc) return handle(\\\"end\\\"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, \\\"catchLoc\\\"), hasFinally = hasOwn.call(entry, \\\"finallyLoc\\\"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error(\\\"try statement without catch or finally\\\"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, \\\"finallyLoc\\\") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && (\\\"break\\\" === type || \\\"continue\\\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = \\\"next\\\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if (\\\"throw\\\" === record.type) throw record.arg; return \\\"break\\\" === record.type || \\\"continue\\\" === record.type ? this.next = record.arg : \\\"return\\\" === record.type ? (this.rval = this.arg = record.arg, this.method = \\\"return\\\", this.next = \\\"end\\\") : \\\"normal\\\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, \\\"catch\\\": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (\\\"throw\\\" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error(\\\"illegal catch attempt\\\"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, \\\"next\\\" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }\\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \\\"next\\\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \\\"throw\\\", err); } _next(undefined); }); }; }\\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\\"value\\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \\\"prototype\\\", { writable: false }); return Constructor; }\\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\\\"Cannot call a class as a function\\\"); } }\\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(arg) { var key = _toPrimitive(arg, \\\"string\\\"); return _typeof(key) === \\\"symbol\\\" ? key : String(key); }\\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \\\"object\\\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \\\"default\\\"); if (_typeof(res) !== \\\"object\\\") return res; throw new TypeError(\\\"@@toPrimitive must return a primitive value.\\\"); } return (hint === \\\"string\\\" ? String : Number)(input); }\\nvar Product = /*#__PURE__*/_createClass(function Product(_$productTemplate) {\\n  var _this = this;\\n  _classCallCheck(this, Product);\\n  _defineProperty(this, \\\"productData\\\", null);\\n  _defineProperty(this, \\\"variantsAvalible\\\", null);\\n  _defineProperty(this, \\\"selectedVariant\\\", null);\\n  _defineProperty(this, \\\"option1\\\", \\\"\\\");\\n  _defineProperty(this, \\\"option2\\\", \\\"\\\");\\n  _defineProperty(this, \\\"option3\\\", \\\"\\\");\\n  _defineProperty(this, \\\"quantity\\\", 1);\\n  _defineProperty(this, \\\"purchaseType\\\", \\\"onetime\\\");\\n  _defineProperty(this, \\\"planHandle\\\", \\\"\\\");\\n  _defineProperty(this, \\\"selectedPlan\\\", null);\\n  _defineProperty(this, \\\"selectedPlanAllocation\\\", null);\\n  _defineProperty(this, \\\"handlelize\\\", function (str) {\\n    str = str.normalize(\\\"NFD\\\").replace(/[\\\\u0300-\\\\u036f]/g, \\\"\\\") // Remove accents\\n    .replace(/([^\\\\w]+|\\\\s+)/g, \\\"-\\\") // Replace space and other characters by hyphen\\n    .replace(/\\\\-\\\\-+/g, \\\"-\\\") // Replaces multiple hyphens by one hyphen\\n    .replace(/(^-+|-+$)/g, \\\"\\\") // Remove extra hyphens from beginning or end of the string\\n    .toLowerCase(); // To lowercase\\n    return str;\\n  });\\n  _defineProperty(this, \\\"getSelectedVaraint\\\", function () {\\n    return _this.selectedVariant;\\n  });\\n  _defineProperty(this, \\\"getSelectedPlan\\\", function () {\\n    return _this.selectedPlan;\\n  });\\n  _defineProperty(this, \\\"getSelectedPlanAllocation\\\", function () {\\n    return _this.selectedPlanAllocation;\\n  });\\n  _defineProperty(this, \\\"getOption1\\\", function () {\\n    return _this.option1;\\n  });\\n  _defineProperty(this, \\\"setOption1\\\", function (newOption) {\\n    _this.option1 = newOption;\\n    return _this.option1;\\n  });\\n  _defineProperty(this, \\\"getOption2\\\", function () {\\n    return _this.option2;\\n  });\\n  _defineProperty(this, \\\"setOption2\\\", function (newOption) {\\n    _this.option2 = newOption;\\n    return _this.option2;\\n  });\\n  _defineProperty(this, \\\"getOption3\\\", function () {\\n    return _this.option3;\\n  });\\n  _defineProperty(this, \\\"setOption3\\\", function (newOption) {\\n    _this.option3 = newOption;\\n    return _this.option3;\\n  });\\n  _defineProperty(this, \\\"getPlanHandle\\\", function () {\\n    return _this.planHandle;\\n  });\\n  _defineProperty(this, \\\"setPlanHandle\\\", function (newPlanHandle) {\\n    _this.planHandle = newPlanHandle;\\n    return _this.planHandle;\\n  });\\n  _defineProperty(this, \\\"getQuantity\\\", function () {\\n    return _this.quantity;\\n  });\\n  _defineProperty(this, \\\"setQuantity\\\", function (newQuantity) {\\n    _this.quantity = parseInt(newQuantity);\\n    return _this.quantity;\\n  });\\n  _defineProperty(this, \\\"increaseQuantity\\\", function () {\\n    _this.quantity = _this.quantity + 1;\\n    return _this.quantity;\\n  });\\n  _defineProperty(this, \\\"decreaseQuantity\\\", function () {\\n    if (_this.quantity > 1) {\\n      _this.quantity = _this.quantity - 1;\\n    }\\n    return _this.quantity;\\n  });\\n  _defineProperty(this, \\\"getPurchaseType\\\", function () {\\n    return _this.purchaseType;\\n  });\\n  _defineProperty(this, \\\"setPurchaseType\\\", function (newPurchaseType) {\\n    _this.purchaseType = newPurchaseType;\\n    return _this.purchaseType;\\n  });\\n  _defineProperty(this, \\\"getVariantHandle\\\", function () {\\n    var returnString = _this.option1;\\n    if (_this.option2 != \\\"\\\") {\\n      returnString = \\\"\\\".concat(returnString, \\\"-\\\").concat(_this.option2);\\n      if (_this.option3 != \\\"\\\") {\\n        returnString = \\\"\\\".concat(returnString, \\\"-\\\").concat(_this.option3);\\n      }\\n    }\\n    return returnString;\\n  });\\n  _defineProperty(this, \\\"getVariantById\\\", function (variantId) {\\n    if (_this.productData) {\\n      var found = _this.productData.variants.find(function (variant) {\\n        return variant.id === parseInt(variantId);\\n      });\\n      return found ? found : null;\\n    } else {\\n      return null;\\n    }\\n  });\\n  _defineProperty(this, \\\"getVariantByHandle\\\", function (variantHandle) {\\n    if (_this.productData) {\\n      var found = _this.productData.variants.find(function (variant) {\\n        return _this.handlelize(variant.title) === variantHandle;\\n      });\\n      return found ? found : null;\\n    } else {\\n      return null;\\n    }\\n  });\\n  _defineProperty(this, \\\"setVariantById\\\", function (variantId) {\\n    _this.selectedVariant = _this.getVariantById(variantId);\\n  });\\n  _defineProperty(this, \\\"setVariantByHandle\\\", function (variantHandle) {\\n    _this.selectedVariant = _this.getVariantByHandle(variantHandle);\\n  });\\n  _defineProperty(this, \\\"getPlanByHandle\\\", function (planHandle) {\\n    if (_this.productData) {\\n      var _this$productData$sel;\\n      var found = (_this$productData$sel = _this.productData.selling_plan_groups[0]) === null || _this$productData$sel === void 0 ? void 0 : _this$productData$sel.selling_plans.find(function (selling_plan) {\\n        return _this.handlelize(selling_plan.name) == planHandle;\\n      });\\n      return found ? found : null;\\n    } else {\\n      return null;\\n    }\\n  });\\n  _defineProperty(this, \\\"getPlanAllocationByPlanId\\\", function (planId) {\\n    if (_this.selectedVariant) {\\n      var found = _this.selectedVariant.selling_plan_allocations.find(function (selling_plan_allocation) {\\n        return selling_plan_allocation.selling_plan_id == planId;\\n      });\\n      return found ? found : null;\\n    } else {\\n      return null;\\n    }\\n  });\\n  _defineProperty(this, \\\"setPlanByHandle\\\", function (planHandle) {\\n    _this.selectedPlan = _this.getPlanByHandle(planHandle);\\n    if (_this.selectedPlan) {\\n      _this.selectedPlanAllocation = _this.getPlanAllocationByPlanId(_this.selectedPlan.id);\\n    }\\n  });\\n  _defineProperty(this, \\\"getCurrentPrice\\\", function () {\\n    if (_this.purchaseType === \\\"subscription\\\" && _this.selectedPlanAllocation) {\\n      return Carbon.Money.formatMoney(_this.selectedPlanAllocation.price * _this.quantity, \\\"\u00A3{{amount_no_trailing_zeros}}\\\");\\n    } else {\\n      return Carbon.Money.formatMoney(_this.selectedVariant.price * _this.quantity, \\\"\u00A3{{amount_no_trailing_zeros}}\\\");\\n    }\\n  });\\n  _defineProperty(this, \\\"addToCart\\\", /*#__PURE__*/function () {\\n    var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee($productTemplateAddToCart) {\\n      var $ctaText, cart, response, closeAddToCartNotif, reEnableBuyBtn, $header, $cartNotifAlert, $replacementContainer, $img, $prodTitle, $variantInfo, variantInfoHTML, $price, $buyBtnPrice, $closeButton, closeTimeout;\\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\\n        while (1) switch (_context.prev = _context.next) {\\n          case 0:\\n            //Disable Buy Button\\n            $ctaText = $productTemplateAddToCart.querySelector(\\\".button-text\\\");\\n            $productTemplateAddToCart.classList.add(\\\"button--disabled\\\");\\n            if ($ctaText) {\\n              $ctaText.textContent = \\\"Adding\\\";\\n            }\\n            cart = window.Carbon.Cart;\\n            _context.next = 6;\\n            return cart.addItemToCart(_this.selectedVariant.id, _this.quantity, _this.purchaseType === \\\"subscription\\\" && _this.selectedPlanAllocation ? _this.selectedPlanAllocation.selling_plan_id : null);\\n          case 6:\\n            response = _context.sent;\\n            if (response) {\\n              closeAddToCartNotif = function closeAddToCartNotif($cartNotifAlert) {\\n                $cartNotifAlert.style.opacity = 0;\\n                setTimeout(function () {\\n                  $cartNotifAlert.classList.remove(\\\"active\\\");\\n                  $cartNotifAlert.style.opacity = \\\"\\\";\\n                }, 800);\\n              };\\n              reEnableBuyBtn = function reEnableBuyBtn($productTemplateAddToCart, $ctaText) {\\n                $productTemplateAddToCart.classList.remove(\\\"button--disabled\\\");\\n                if ($ctaText) {\\n                  if ($ctaText.dataset.originalText) {\\n                    $ctaText.textContent = $ctaText.dataset.originalText;\\n                  }\\n                }\\n              }; //Rebuild header's cart icons to reflect new addition\\n              if (response.sections) {\\n                cart.reRenderSections(response.sections);\\n              }\\n\\n              //Find and populate the Cart Notification\\n              $header = document.querySelector(\\\"header.header\\\");\\n              if ($header) {\\n                $cartNotifAlert = \\\"\\\";\\n                if (window.innerWidth < 1024) {\\n                  $cartNotifAlert = $header.querySelector(\\\".navbar__mobile .cart-add-notif\\\");\\n                } else {\\n                  $cartNotifAlert = $header.querySelector(\\\".navbar__desktop .navbar__right .cart-add-notif\\\");\\n                }\\n                if ($cartNotifAlert) {\\n                  //Populate the notification from our response data\\n                  $replacementContainer = $cartNotifAlert.querySelector(\\\".cart-add-notif-replace-container\\\");\\n                  if ($replacementContainer) {\\n                    if (response.items[0]) {\\n                      $img = $replacementContainer.querySelector(\\\".cart-add-notif-replace__product-image\\\");\\n                      if ($img) {\\n                        $img.src = response.items[0].image;\\n                      }\\n                      $prodTitle = $replacementContainer.querySelector(\\\".cart-add-notif-replace__product-title\\\");\\n                      if ($prodTitle) {\\n                        $prodTitle.textContent = response.items[0].product_title;\\n                      }\\n                      $variantInfo = $replacementContainer.querySelector(\\\".cart-add-notif-replace__variant-info\\\");\\n                      if ($variantInfo) {\\n                        $variantInfo.innerHTML = \\\"\\\";\\n                        variantInfoHTML = \\\"\\\";\\n                        response.items[0].options_with_values.forEach(function (option) {\\n                          if (option.value !== \\\"Default Title\\\") {\\n                            variantInfoHTML += \\\"<p>\\\".concat(option.name, \\\": \\\").concat(option.value, \\\"</p>\\\");\\n                          }\\n                        });\\n                        $variantInfo.innerHTML = variantInfoHTML;\\n                      }\\n\\n                      /*\\r\\n                        The final line price returned by the Cart API includes any pre-existing versions of that variant already in cart.\\r\\n                        So instead, we grab the value from the PDP Buy Button if we can\\r\\n                      */\\n                      $price = $replacementContainer.querySelector(\\\".cart-add-notif-replace__product-price\\\");\\n                      if ($price) {\\n                        $buyBtnPrice = $productTemplateAddToCart.querySelector(\\\".product-price\\\");\\n                        if ($buyBtnPrice) {\\n                          $price.textContent = $buyBtnPrice.textContent;\\n                        }\\n                      }\\n                    }\\n\\n                    //Bind Close Button\\n                    $closeButton = $cartNotifAlert.querySelector(\\\".cart-add-notif-close\\\");\\n                    if ($closeButton) {\\n                      $closeButton.addEventListener(\\\"click\\\", function (e) {\\n                        e.preventDefault();\\n                        closeAddToCartNotif($cartNotifAlert);\\n                      });\\n                    }\\n\\n                    //Show it\\n                    $cartNotifAlert.classList.add(\\\"active\\\");\\n                    if (closeTimeout) {\\n                      clearTimeout(closeTimeout);\\n                    }\\n\\n                    //After a certain amount of time, hide it\\n                    closeTimeout = setTimeout(function () {\\n                      closeAddToCartNotif($cartNotifAlert);\\n                    }, 8000);\\n                    reEnableBuyBtn($productTemplateAddToCart, $ctaText);\\n                  } else {\\n                    console.log(\\\"Unable to show add to cart notif as structure was not as expected. Could not find replacement container\\\");\\n                  }\\n                }\\n              } else {\\n                //re-enable\\n                reEnableBuyBtn($productTemplateAddToCart, $ctaText);\\n              }\\n            }\\n          case 8:\\n          case \\\"end\\\":\\n            return _context.stop();\\n        }\\n      }, _callee);\\n    }));\\n    return function (_x) {\\n      return _ref.apply(this, arguments);\\n    };\\n  }());\\n  _defineProperty(this, \\\"setupProduct\\\", function ($productTemplate) {\\n    // Set the product JSON\\n    var $productJson = $productTemplate.querySelector(\\\".product-template__json\\\");\\n    if ($productJson) {\\n      _this.productData = JSON.parse($productJson.textContent);\\n      var $productJsonAvailable = $productTemplate.querySelector(\\\".product-template__json--available\\\");\\n      if ($productJsonAvailable) {\\n        _this.variantsAvalible = JSON.parse($productJsonAvailable.textContent);\\n        var variants = _this.productData.variants.map(function (variant) {\\n          if (_this.variantsAvalible.includes(variant.id)) {\\n            variant.avalible = true;\\n          } else {\\n            variant.avalible = false;\\n          }\\n        });\\n        _this.productData.variants = variants;\\n      }\\n      var urlParams = new URLSearchParams(window.location.search);\\n      var variantId = urlParams.get(\\\"variant\\\");\\n      if (variantId) {\\n        _this.setVariantById(variantId);\\n        _this.option1 = _this.selectedVariant.option1 ? _this.handlelize(_this.selectedVariant.option1) : \\\"\\\";\\n        _this.option2 = _this.selectedVariant.option2 ? _this.handlelize(_this.selectedVariant.option2) : \\\"\\\";\\n        _this.option3 = _this.selectedVariant.option3 ? _this.handlelize(_this.selectedVariant.option3) : \\\"\\\";\\n      }\\n      if (_this.productData.variants.length === 1) {\\n        _this.selectedVariant = _this.productData.variants[0];\\n      }\\n    }\\n  });\\n  this.setupProduct(_$productTemplate);\\n}\\n\\n// Thanks to github user pablogiralt for the handlize function https://gist.github.com/pablogiralt/f52d27428e7501909616d1\\n);\\n\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Product);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9wcm9kdWN0LXRlbXBsYXRlL21vZHVsZXMvcHJvZHVjdC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7K0NBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRE8sSUFBTUEsT0FBTyw2QkFhbEIsaUJBQVlDLGlCQUFnQixFQUFFO0VBQUE7RUFBQTtFQUFBLHFDQVpoQixJQUFJO0VBQUEsMENBQ0MsSUFBSTtFQUFBLHlDQUNMLElBQUk7RUFBQSxpQ0FDWixFQUFFO0VBQUEsaUNBQ0YsRUFBRTtFQUFBLGlDQUNGLEVBQUU7RUFBQSxrQ0FDRCxDQUFDO0VBQUEsc0NBQ0csU0FBUztFQUFBLG9DQUNYLEVBQUU7RUFBQSxzQ0FDQSxJQUFJO0VBQUEsZ0RBQ00sSUFBSTtFQUFBLG9DQU9oQixVQUFDQyxHQUFHLEVBQUs7SUFDcEJBLEdBQUcsR0FBR0EsR0FBRyxDQUNOQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQ2hCQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFBQSxDQUNoQ0EsT0FBTyxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUFBLENBQzlCQSxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQUEsQ0FDdkJBLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFBQSxDQUMxQkMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNsQixPQUFPSCxHQUFHO0VBQ1osQ0FBQztFQUFBLDRDQUVvQixZQUFNO0lBQ3pCLE9BQU8sS0FBSSxDQUFDSSxlQUFlO0VBQzdCLENBQUM7RUFBQSx5Q0FFaUIsWUFBTTtJQUN0QixPQUFPLEtBQUksQ0FBQ0MsWUFBWTtFQUMxQixDQUFDO0VBQUEsbURBRTJCLFlBQU07SUFDaEMsT0FBTyxLQUFJLENBQUNDLHNCQUFzQjtFQUNwQyxDQUFDO0VBQUEsb0NBRVksWUFBTTtJQUNqQixPQUFPLEtB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cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9wcm9kdWN0LXRlbXBsYXRlL21vZHVsZXMvcHJvZHVjdC5qcz85YmE5Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBQcm9kdWN0IHtcclxuICBwcm9kdWN0RGF0YSA9IG51bGw7XHJcbiAgdmFyaWFudHNBdmFsaWJsZSA9IG51bGw7XHJcbiAgc2VsZWN0ZWRWYXJpYW50ID0gbnVsbDtcclxuICBvcHRpb24xID0gXCJcIjtcclxuICBvcHRpb24yID0gXCJcIjtcclxuICBvcHRpb24zID0gXCJcIjtcclxuICBxdWFudGl0eSA9IDE7XHJcbiAgcHVyY2hhc2VUeXBlID0gXCJvbmV0aW1lXCI7XHJcbiAgcGxhbkhhbmRsZSA9IFwiXCI7XHJcbiAgc2VsZWN0ZWRQbGFuID0gbnVsbDtcclxuICBzZWxlY3RlZFBsYW5BbGxvY2F0aW9uID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IoJHByb2R1Y3RUZW1wbGF0ZSkge1xyXG4gICAgdGhpcy5zZXR1cFByb2R1Y3QoJHByb2R1Y3RUZW1wbGF0ZSk7XHJcbiAgfVxyXG5cclxuICAvLyBUaGFua3MgdG8gZ2l0aHViIHVzZXIgcGFibG9naXJhbHQgZm9yIHRoZSBoYW5kbGl6ZSBmdW5jdGlvbiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9wYWJsb2dpcmFsdC9mNTJkMjc0MjhlNzUwMTkwOTYxNmQxXHJcbiAgaGFuZGxlbGl6ZSA9IChzdHIpID0+IHtcclxuICAgIHN0ciA9IHN0clxyXG4gICAgICAubm9ybWFsaXplKFwiTkZEXCIpXHJcbiAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCBcIlwiKSAvLyBSZW1vdmUgYWNjZW50c1xyXG4gICAgICAucmVwbGFjZSgvKFteXFx3XSt8XFxzKykvZywgXCItXCIpIC8vIFJlcGxhY2Ugc3BhY2UgYW5kIG90aGVyIGNoYXJhY3RlcnMgYnkgaHlwaGVuXHJcbiAgICAgIC5yZXBsYWNlKC9cXC1cXC0rL2csIFwiLVwiKSAvLyBSZXBsYWNlcyBtdWx0aXBsZSBoeXBoZW5zIGJ5IG9uZSBoeXBoZW5cclxuICAgICAgLnJlcGxhY2UoLyheLSt8LSskKS9nLCBcIlwiKSAvLyBSZW1vdmUgZXh0cmEgaHlwaGVucyBmcm9tIGJlZ2lubmluZyBvciBlbmQgb2YgdGhlIHN0cmluZ1xyXG4gICAgICAudG9Mb3dlckNhc2UoKTsgLy8gVG8gbG93ZXJjYXNlXHJcbiAgICByZXR1cm4gc3RyO1xyXG4gIH07XHJcblxyXG4gIGdldFNlbGVjdGVkVmFyYWludCA9ICgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVmFyaWFudDtcclxuICB9O1xyXG5cclxuICBnZXRTZWxlY3RlZFBsYW4gPSAoKSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFBsYW47XHJcbiAgfTtcclxuXHJcbiAgZ2V0U2VsZWN0ZWRQbGFuQWxsb2NhdGlvbiA9ICgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUGxhbkFsbG9jYXRpb247XHJcbiAgfTtcclxuXHJcbiAgZ2V0T3B0aW9uMSA9ICgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbjE7XHJcbiAgfTtcclxuXHJcbiAgc2V0T3B0aW9uMSA9IChuZXdPcHRpb24pID0+IHtcclxuICAgIHRoaXMub3B0aW9uMSA9IG5ld09wdGlvbjtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbjE7XHJcbiAgfTtcclxuXHJcbiAgZ2V0T3B0aW9uMiA9ICgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbjI7XHJcbiAgfTtcclxuXHJcbiAgc2V0T3B0aW9uMiA9IChuZXdPcHRpb24pID0+IHtcclxuICAgIHRoaXMub3B0aW9uMiA9IG5ld09wdGlvbjtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbjI7XHJcbiAgfTtcclxuXHJcbiAgZ2V0T3B0aW9uMyA9ICgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbjM7XHJcbiAgfTtcclxuXHJcbiAgc2V0T3B0aW9uMyA9IChuZXdPcHRpb24pID0+IHtcclxuICAgIHRoaXMub3B0aW9uMyA9IG5ld09wdGlvbjtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbjM7XHJcbiAgfTtcclxuXHJcbiAgZ2V0UGxhbkhhbmRsZSA9ICgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLnBsYW5IYW5kbGU7XHJcbiAgfTtcclxuXHJcbiAgc2V0UGxhbkhhbmRsZSA9IChuZXdQbGFuSGFuZGxlKSA9PiB7XHJcbiAgICB0aGlzLnBsYW5IYW5kbGUgPSBuZXdQbGFuSGFuZGxlO1xyXG4gICAgcmV0dXJuIHRoaXMucGxhbkhhbmRsZTtcclxuICB9O1xyXG5cclxuICBnZXRRdWFudGl0eSA9ICgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLnF1YW50aXR5O1xyXG4gIH07XHJcblxyXG4gIHNldFF1YW50aXR5ID0gKG5ld1F1YW50aXR5LCApID0+IHtcclxuICAgIHRoaXMucXVhbnRpdHkgPSBwYXJzZUludChuZXdRdWFudGl0eSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucXVhbnRpdHk7XHJcbiAgfTtcclxuXHJcbiAgaW5jcmVhc2VRdWFudGl0eSA9ICgpID0+IHtcclxuICAgIHRoaXMucXVhbnRpdHkgPSB0aGlzLnF1YW50aXR5ICsgMTtcclxuXHJcblxyXG4gICAgcmV0dXJuIHRoaXMucXVhbnRpdHk7XHJcbiAgfTtcclxuXHJcbiAgZGVjcmVhc2VRdWFudGl0eSA9ICgpID0+IHtcclxuICAgIGlmICh0aGlzLnF1YW50aXR5ID4gMSkge1xyXG4gICAgICB0aGlzLnF1YW50aXR5ID0gdGhpcy5xdWFudGl0eSAtIDE7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMucXVhbnRpdHk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0UHVyY2hhc2VUeXBlID0gKCkgPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMucHVyY2hhc2VUeXBlO1xyXG4gIH07XHJcblxyXG4gIHNldFB1cmNoYXNlVHlwZSA9IChuZXdQdXJjaGFzZVR5cGUpID0+IHtcclxuICAgIHRoaXMucHVyY2hhc2VUeXBlID0gbmV3UHVyY2hhc2VUeXBlO1xyXG4gICAgcmV0dXJuIHRoaXMucHVyY2hhc2VUeXBlO1xyXG4gIH07XHJcblxyXG4gIGdldFZhcmlhbnRIYW5kbGUgPSAoKSA9PiB7XHJcbiAgICBsZXQgcmV0dXJuU3RyaW5nID0gdGhpcy5vcHRpb24xO1xyXG4gICAgaWYgKHRoaXMub3B0aW9uMiAhPSBcIlwiKSB7XHJcbiAgICAgIHJldHVyblN0cmluZyA9IGAke3JldHVyblN0cmluZ30tJHt0aGlzLm9wdGlvbjJ9YDtcclxuICAgICAgaWYgKHRoaXMub3B0aW9uMyAhPSBcIlwiKSB7XHJcbiAgICAgICAgcmV0dXJuU3RyaW5nID0gYCR7cmV0dXJuU3RyaW5nfS0ke3RoaXMub3B0aW9uM31gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmV0dXJuU3RyaW5nO1xyXG4gIH07XHJcblxyXG4gIGdldFZhcmlhbnRCeUlkID0gKHZhcmlhbnRJZCkgPT4ge1xyXG4gICAgaWYgKHRoaXMucHJvZHVjdERhdGEpIHtcclxuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLnByb2R1Y3REYXRhLnZhcmlhbnRzLmZpbmQoKHZhcmlhbnQpID0+IHtcclxuICAgICAgICByZXR1cm4gdmFyaWFudC5pZCA9PT0gcGFyc2VJbnQodmFyaWFudElkKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBmb3VuZCA/IGZvdW5kIDogbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGdldFZhcmlhbnRCeUhhbmRsZSA9ICh2YXJpYW50SGFuZGxlKSA9PiB7XHJcbiAgICBpZiAodGhpcy5wcm9kdWN0RGF0YSkge1xyXG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMucHJvZHVjdERhdGEudmFyaWFudHMuZmluZCgodmFyaWFudCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZWxpemUodmFyaWFudC50aXRsZSkgPT09IHZhcmlhbnRIYW5kbGU7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZm91bmQgPyBmb3VuZCA6IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBzZXRWYXJpYW50QnlJZCA9ICh2YXJpYW50SWQpID0+IHtcclxuICAgIHRoaXMuc2VsZWN0ZWRWYXJpYW50ID0gdGhpcy5nZXRWYXJpYW50QnlJZCh2YXJpYW50SWQpO1xyXG4gIH07XHJcblxyXG4gIHNldFZhcmlhbnRCeUhhbmRsZSA9ICh2YXJpYW50SGFuZGxlKSA9PiB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVmFyaWFudCA9IHRoaXMuZ2V0VmFyaWFudEJ5SGFuZGxlKHZhcmlhbnRIYW5kbGUpO1xyXG4gIH07XHJcblxyXG4gIGdldFBsYW5CeUhhbmRsZSA9IChwbGFuSGFuZGxlKSA9PiB7XHJcbiAgICBpZiAodGhpcy5wcm9kdWN0RGF0YSkge1xyXG4gICAgICBjb25zdCBmb3VuZCA9IHRoaXMucHJvZHVjdERhdGEuc2VsbGluZ19wbGFuX2dyb3Vwc1swXT8uc2VsbGluZ19wbGFucy5maW5kKFxyXG4gICAgICAgIChzZWxsaW5nX3BsYW4pID0+IHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZWxpemUoc2VsbGluZ19wbGFuLm5hbWUpID09IHBsYW5IYW5kbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gZm91bmQgPyBmb3VuZCA6IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBnZXRQbGFuQWxsb2NhdGlvbkJ5UGxhbklkID0gKHBsYW5JZCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRWYXJpYW50KSB7XHJcbiAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5zZWxlY3RlZFZhcmlhbnQuc2VsbGluZ19wbGFuX2FsbG9jYXRpb25zLmZpbmQoXHJcbiAgICAgICAgKHNlbGxpbmdfcGxhbl9hbGxvY2F0aW9uKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gc2VsbGluZ19wbGFuX2FsbG9jYXRpb24uc2VsbGluZ19wbGFuX2lkID09IHBsYW5JZDtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBmb3VuZCA/IGZvdW5kIDogbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHNldFBsYW5CeUhhbmRsZSA9IChwbGFuSGFuZGxlKSA9PiB7XHJcbiAgICB0aGlzLnNlbGVjdGVkUGxhbiA9IHRoaXMuZ2V0UGxhbkJ5SGFuZGxlKHBsYW5IYW5kbGUpO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRQbGFuKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRQbGFuQWxsb2NhdGlvbiA9IHRoaXMuZ2V0UGxhbkFsbG9jYXRpb25CeVBsYW5JZChcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUGxhbi5pZFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGdldEN1cnJlbnRQcmljZSA9ICgpID0+IHtcclxuICAgIGlmICh0aGlzLnB1cmNoYXNlVHlwZSA9PT0gXCJzdWJzY3JpcHRpb25cIiAmJiB0aGlzLnNlbGVjdGVkUGxhbkFsbG9jYXRpb24pIHtcclxuICAgICAgcmV0dXJuIENhcmJvbi5Nb25leS5mb3JtYXRNb25leSh0aGlzLnNlbGVjdGVkUGxhbkFsbG9jYXRpb24ucHJpY2UgKiB0aGlzLnF1YW50aXR5LFwiwqN7e2Ftb3VudF9ub190cmFpbGluZ196ZXJvc319XCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIENhcmJvbi5Nb25leS5mb3JtYXRNb25leSh0aGlzLnNlbGVjdGVkVmFyaWFudC5wcmljZSAqIHRoaXMucXVhbnRpdHksXCLCo3t7YW1vdW50X25vX3RyYWlsaW5nX3plcm9zfX1cIik7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgYWRkVG9DYXJ0ID0gYXN5bmMgKCRwcm9kdWN0VGVtcGxhdGVBZGRUb0NhcnQpID0+IHtcclxuXHJcbiAgICAvL0Rpc2FibGUgQnV5IEJ1dHRvblxyXG4gICAgY29uc3QgJGN0YVRleHQgPSAkcHJvZHVjdFRlbXBsYXRlQWRkVG9DYXJ0LnF1ZXJ5U2VsZWN0b3IoXCIuYnV0dG9uLXRleHRcIik7XHJcbiAgICAkcHJvZHVjdFRlbXBsYXRlQWRkVG9DYXJ0LmNsYXNzTGlzdC5hZGQoXCJidXR0b24tLWRpc2FibGVkXCIpO1xyXG4gICAgaWYoJGN0YVRleHQpe1xyXG4gICAgICAkY3RhVGV4dC50ZXh0Q29udGVudCA9IFwiQWRkaW5nXCI7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2FydCA9IHdpbmRvdy5DYXJib24uQ2FydDtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2FydC5hZGRJdGVtVG9DYXJ0KFxyXG4gICAgICB0aGlzLnNlbGVjdGVkVmFyaWFudC5pZCxcclxuICAgICAgdGhpcy5xdWFudGl0eSxcclxuICAgICAgdGhpcy5wdXJjaGFzZVR5cGUgPT09IFwic3Vic2NyaXB0aW9uXCIgJiYgdGhpcy5zZWxlY3RlZFBsYW5BbGxvY2F0aW9uXHJcbiAgICAgICAgPyB0aGlzLnNlbGVjdGVkUGxhbkFsbG9jYXRpb24uc2VsbGluZ19wbGFuX2lkXHJcbiAgICAgICAgOiBudWxsXHJcbiAgICApO1xyXG4gICAgaWYgKHJlc3BvbnNlKSB7XHJcblxyXG4gICAgICBjb25zdCBjbG9zZUFkZFRvQ2FydE5vdGlmID0gKCRjYXJ0Tm90aWZBbGVydCkgPT4ge1xyXG4gICAgICAgICRjYXJ0Tm90aWZBbGVydC5zdHlsZS5vcGFjaXR5ID0gMDtcclxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAkY2FydE5vdGlmQWxlcnQuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICRjYXJ0Tm90aWZBbGVydC5zdHlsZS5vcGFjaXR5ID0gXCJcIjtcclxuICAgICAgICB9LDgwMCk7IFxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCByZUVuYWJsZUJ1eUJ0biA9ICgkcHJvZHVjdFRlbXBsYXRlQWRkVG9DYXJ0LCRjdGFUZXh0KSA9PiB7XHJcbiAgICAgICAgJHByb2R1Y3RUZW1wbGF0ZUFkZFRvQ2FydC5jbGFzc0xpc3QucmVtb3ZlKFwiYnV0dG9uLS1kaXNhYmxlZFwiKTtcclxuICAgICAgICBpZigkY3RhVGV4dCl7XHJcbiAgICAgICAgICBpZigkY3RhVGV4dC5kYXRhc2V0Lm9yaWdpbmFsVGV4dCl7XHJcbiAgICAgICAgICAgICRjdGFUZXh0LnRleHRDb250ZW50ID0gJGN0YVRleHQuZGF0YXNldC5vcmlnaW5hbFRleHQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgLy9SZWJ1aWxkIGhlYWRlcidzIGNhcnQgaWNvbnMgdG8gcmVmbGVjdCBuZXcgYWRkaXRpb25cclxuICAgICAgaWYocmVzcG9uc2Uuc2VjdGlvbnMpe1xyXG4gICAgICAgIGNhcnQucmVSZW5kZXJTZWN0aW9ucyhyZXNwb25zZS5zZWN0aW9ucyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vRmluZCBhbmQgcG9wdWxhdGUgdGhlIENhcnQgTm90aWZpY2F0aW9uXHJcbiAgICAgIGNvbnN0ICRoZWFkZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiaGVhZGVyLmhlYWRlclwiKTtcclxuICAgICAgaWYoJGhlYWRlcil7XHJcbiAgICAgICAgbGV0ICRjYXJ0Tm90aWZBbGVydCA9IFwiXCI7XHJcbiAgICAgICAgaWYod2luZG93LmlubmVyV2lkdGggPCAxMDI0KXtcclxuICAgICAgICAgICRjYXJ0Tm90aWZBbGVydCA9ICRoZWFkZXIucXVlcnlTZWxlY3RvcihcIi5uYXZiYXJfX21vYmlsZSAuY2FydC1hZGQtbm90aWZcIik7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAkY2FydE5vdGlmQWxlcnQgPSAkaGVhZGVyLnF1ZXJ5U2VsZWN0b3IoXCIubmF2YmFyX19kZXNrdG9wIC5uYXZiYXJfX3JpZ2h0IC5jYXJ0LWFkZC1ub3RpZlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCRjYXJ0Tm90aWZBbGVydCl7XHJcblxyXG4gICAgICAgICAgLy9Qb3B1bGF0ZSB0aGUgbm90aWZpY2F0aW9uIGZyb20gb3VyIHJlc3BvbnNlIGRhdGFcclxuICAgICAgICAgIGNvbnN0ICRyZXBsYWNlbWVudENvbnRhaW5lciA9ICRjYXJ0Tm90aWZBbGVydC5xdWVyeVNlbGVjdG9yKFwiLmNhcnQtYWRkLW5vdGlmLXJlcGxhY2UtY29udGFpbmVyXCIpO1xyXG4gICAgICAgICAgaWYoJHJlcGxhY2VtZW50Q29udGFpbmVyKXtcclxuICAgICAgICAgICAgaWYocmVzcG9uc2UuaXRlbXNbMF0pe1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCAkaW1nID0gJHJlcGxhY2VtZW50Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuY2FydC1hZGQtbm90aWYtcmVwbGFjZV9fcHJvZHVjdC1pbWFnZVwiKTtcclxuICAgICAgICAgICAgICBpZigkaW1nKXtcclxuICAgICAgICAgICAgICAgICRpbWcuc3JjID0gcmVzcG9uc2UuaXRlbXNbMF0uaW1hZ2U7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBjb25zdCAkcHJvZFRpdGxlID0gJHJlcGxhY2VtZW50Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuY2FydC1hZGQtbm90aWYtcmVwbGFjZV9fcHJvZHVjdC10aXRsZVwiKTtcclxuICAgICAgICAgICAgICBpZigkcHJvZFRpdGxlKXtcclxuICAgICAgICAgICAgICAgICRwcm9kVGl0bGUudGV4dENvbnRlbnQgPSByZXNwb25zZS5pdGVtc1swXS5wcm9kdWN0X3RpdGxlO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgJHZhcmlhbnRJbmZvID0gJHJlcGxhY2VtZW50Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuY2FydC1hZGQtbm90aWYtcmVwbGFjZV9fdmFyaWFudC1pbmZvXCIpO1xyXG4gICAgICAgICAgICAgIGlmKCR2YXJpYW50SW5mbyl7XHJcblxyXG4gICAgICAgICAgICAgICAgJHZhcmlhbnRJbmZvLmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFyaWFudEluZm9IVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLml0ZW1zWzBdLm9wdGlvbnNfd2l0aF92YWx1ZXMuZm9yRWFjaChvcHRpb24gPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgaWYob3B0aW9uLnZhbHVlICE9PSBcIkRlZmF1bHQgVGl0bGVcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudEluZm9IVE1MICs9IGA8cD4ke29wdGlvbi5uYW1lfTogJHtvcHRpb24udmFsdWV9PC9wPmA7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICR2YXJpYW50SW5mby5pbm5lckhUTUwgPSB2YXJpYW50SW5mb0hUTUw7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgVGhlIGZpbmFsIGxpbmUgcHJpY2UgcmV0dXJuZWQgYnkgdGhlIENhcnQgQVBJIGluY2x1ZGVzIGFueSBwcmUtZXhpc3RpbmcgdmVyc2lvbnMgb2YgdGhhdCB2YXJpYW50IGFscmVhZHkgaW4gY2FydC5cclxuICAgICAgICAgICAgICAgIFNvIGluc3RlYWQsIHdlIGdyYWIgdGhlIHZhbHVlIGZyb20gdGhlIFBEUCBCdXkgQnV0dG9uIGlmIHdlIGNhblxyXG4gICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgY29uc3QgJHByaWNlID0gJHJlcGxhY2VtZW50Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuY2FydC1hZGQtbm90aWYtcmVwbGFjZV9fcHJvZHVjdC1wcmljZVwiKTtcclxuICAgICAgICAgICAgICBpZigkcHJpY2Upe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgJGJ1eUJ0blByaWNlID0gJHByb2R1Y3RUZW1wbGF0ZUFkZFRvQ2FydC5xdWVyeVNlbGVjdG9yKFwiLnByb2R1Y3QtcHJpY2VcIik7XHJcbiAgICAgICAgICAgICAgICBpZigkYnV5QnRuUHJpY2Upe1xyXG4gICAgICAgICAgICAgICAgICAkcHJpY2UudGV4dENvbnRlbnQgPSAkYnV5QnRuUHJpY2UudGV4dENvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL0JpbmQgQ2xvc2UgQnV0dG9uXHJcbiAgICAgICAgICAgIGNvbnN0ICRjbG9zZUJ1dHRvbiA9ICRjYXJ0Tm90aWZBbGVydC5xdWVyeVNlbGVjdG9yKFwiLmNhcnQtYWRkLW5vdGlmLWNsb3NlXCIpO1xyXG4gICAgICAgICAgICBpZigkY2xvc2VCdXR0b24pe1xyXG5cclxuICAgICAgICAgICAgICAkY2xvc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIGNsb3NlQWRkVG9DYXJ0Tm90aWYoJGNhcnROb3RpZkFsZXJ0KTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9TaG93IGl0XHJcbiAgICAgICAgICAgICRjYXJ0Tm90aWZBbGVydC5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoY2xvc2VUaW1lb3V0KXtcclxuICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoY2xvc2VUaW1lb3V0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9BZnRlciBhIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUsIGhpZGUgaXRcclxuICAgICAgICAgICAgY29uc3QgY2xvc2VUaW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgIGNsb3NlQWRkVG9DYXJ0Tm90aWYoJGNhcnROb3RpZkFsZXJ0KTtcclxuICAgICAgICAgICAgfSw4MDAwKTtcclxuXHJcbiAgICAgICAgICAgIHJlRW5hYmxlQnV5QnRuKCRwcm9kdWN0VGVtcGxhdGVBZGRUb0NhcnQsJGN0YVRleHQpOyAgICAgICBcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlVuYWJsZSB0byBzaG93IGFkZCB0byBjYXJ0IG5vdGlmIGFzIHN0cnVjdHVyZSB3YXMgbm90IGFzIGV4cGVjdGVkLiBDb3VsZCBub3QgZmluZCByZXBsYWNlbWVudCBjb250YWluZXJcIilcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIC8vcmUtZW5hYmxlXHJcbiAgICAgICAgcmVFbmFibGVCdXlCdG4oJHByb2R1Y3RUZW1wbGF0ZUFkZFRvQ2FydCwkY3RhVGV4dCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICBzZXR1cFByb2R1Y3QgPSAoJHByb2R1Y3RUZW1wbGF0ZSkgPT4ge1xyXG4gICAgLy8gU2V0IHRoZSBwcm9kdWN0IEpTT05cclxuICAgIGNvbnN0ICRwcm9kdWN0SnNvbiA9ICRwcm9kdWN0VGVtcGxhdGUucXVlcnlTZWxlY3RvcihcclxuICAgICAgXCIucHJvZHVjdC10ZW1wbGF0ZV9fanNvblwiXHJcbiAgICApO1xyXG5cclxuICAgIGlmICgkcHJvZHVjdEpzb24pIHtcclxuICAgICAgdGhpcy5wcm9kdWN0RGF0YSA9IEpTT04ucGFyc2UoJHByb2R1Y3RKc29uLnRleHRDb250ZW50KTtcclxuICAgICAgY29uc3QgJHByb2R1Y3RKc29uQXZhaWxhYmxlID0gJHByb2R1Y3RUZW1wbGF0ZS5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgIFwiLnByb2R1Y3QtdGVtcGxhdGVfX2pzb24tLWF2YWlsYWJsZVwiXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICgkcHJvZHVjdEpzb25BdmFpbGFibGUpIHtcclxuICAgICAgICB0aGlzLnZhcmlhbnRzQXZhbGlibGUgPSBKU09OLnBhcnNlKCRwcm9kdWN0SnNvbkF2YWlsYWJsZS50ZXh0Q29udGVudCk7XHJcbiAgICAgICAgY29uc3QgdmFyaWFudHMgPSB0aGlzLnByb2R1Y3REYXRhLnZhcmlhbnRzLm1hcCgodmFyaWFudCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMudmFyaWFudHNBdmFsaWJsZS5pbmNsdWRlcyh2YXJpYW50LmlkKSkge1xyXG4gICAgICAgICAgICB2YXJpYW50LmF2YWxpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhcmlhbnQuYXZhbGlibGUgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnByb2R1Y3REYXRhLnZhcmlhbnRzID0gdmFyaWFudHM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XHJcbiAgICAgIGNvbnN0IHZhcmlhbnRJZCA9IHVybFBhcmFtcy5nZXQoXCJ2YXJpYW50XCIpO1xyXG4gICAgICBpZiAodmFyaWFudElkKSB7XHJcbiAgICAgICAgdGhpcy5zZXRWYXJpYW50QnlJZCh2YXJpYW50SWQpO1xyXG4gICAgICAgIHRoaXMub3B0aW9uMSA9IHRoaXMuc2VsZWN0ZWRWYXJpYW50Lm9wdGlvbjFcclxuICAgICAgICAgID8gdGhpcy5oYW5kbGVsaXplKHRoaXMuc2VsZWN0ZWRWYXJpYW50Lm9wdGlvbjEpXHJcbiAgICAgICAgICA6IFwiXCI7XHJcbiAgICAgICAgdGhpcy5vcHRpb24yID0gdGhpcy5zZWxlY3RlZFZhcmlhbnQub3B0aW9uMlxyXG4gICAgICAgICAgPyB0aGlzLmhhbmRsZWxpemUodGhpcy5zZWxlY3RlZFZhcmlhbnQub3B0aW9uMilcclxuICAgICAgICAgIDogXCJcIjtcclxuICAgICAgICB0aGlzLm9wdGlvbjMgPSB0aGlzLnNlbGVjdGVkVmFyaWFudC5vcHRpb24zXHJcbiAgICAgICAgICA/IHRoaXMuaGFuZGxlbGl6ZSh0aGlzLnNlbGVjdGVkVmFyaWFudC5vcHRpb24zKVxyXG4gICAgICAgICAgOiBcIlwiO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnByb2R1Y3REYXRhLnZhcmlhbnRzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYXJpYW50ID0gdGhpcy5wcm9kdWN0RGF0YS52YXJpYW50c1swXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFByb2R1Y3Q7XHJcbiJdLCJuYW1lcyI6WyJQcm9kdWN0IiwiJHByb2R1Y3RUZW1wbGF0ZSIsInN0ciIsIm5vcm1hbGl6ZSIsInJlcGxhY2UiLCJ0b0xvd2VyQ2FzZSIsInNlbGVjdGVkVmFyaWFudCIsInNlbGVjdGVkUGxhbiIsInNlbGVjdGVkUGxhbkFsbG9jYXRpb24iLCJvcHRpb24xIiwibmV3T3B0aW9uIiwib3B0aW9uMiIsIm9wdGlvbjMiLCJwbGFuSGFuZGxlIiwibmV3UGxhbkhhbmRsZSIsInF1YW50aXR5IiwibmV3UXVhbnRpdHkiLCJwYXJzZUludCIsInB1cmNoYXNlVHlwZSIsIm5ld1B1cmNoYXNlVHlwZSIsInJldHVyblN0cmluZyIsInZhcmlhbnRJZCIsInByb2R1Y3REYXRhIiwiZm91bmQiLCJ2YXJpYW50cyIsImZpbmQiLCJ2YXJpYW50IiwiaWQiLCJ2YXJpYW50SGFuZGxlIiwiaGFuZGxlbGl6ZSIsInRpdGxlIiwiZ2V0VmFyaWFudEJ5SWQiLCJnZXRWYXJpYW50QnlIYW5kbGUiLCJzZWxsaW5nX3BsYW5fZ3JvdXBzIiwic2VsbGluZ19wbGFucyIsInNlbGxpbmdfcGxhbiIsIm5hbWUiLCJwbGFuSWQiLCJzZWxsaW5nX3BsYW5fYWxsb2NhdGlvbnMiLCJzZWxsaW5nX3BsYW5fYWxsb2NhdGlvbiIsInNlbGxpbmdfcGxhbl9pZCIsImdldFBsYW5CeUhhbmRsZSIsImdldFBsYW5BbGxvY2F0aW9uQnlQbGFuSWQiLCJDYXJib24iLCJNb25leSIsImZvcm1hdE1vbmV5IiwicHJpY2UiLCIkcHJvZHVjdFRlbXBsYXRlQWRkVG9DYXJ0IiwiJGN0YVRleHQiLCJxdWVyeVNlbGVjdG9yIiwiY2xhc3NMaXN0IiwiYWRkIiwidGV4dENvbnRlbnQiLCJjYXJ0Iiwid2luZG93IiwiQ2FydCIsImFkZEl0ZW1Ub0NhcnQiLCJyZXNwb25zZSIsImNsb3NlQWRkVG9DYXJ0Tm90aWYiLCIkY2FydE5vdGlmQWxlcnQiLCJzdHlsZSIsIm9wYWNpdHkiLCJzZXRUaW1lb3V0IiwicmVtb3ZlIiwicmVFbmFibGVCdXlCdG4iLCJkYXRhc2V0Iiwib3JpZ2luYWxUZXh0Iiwic2VjdGlvbnMiLCJyZVJlbmRlclNlY3Rpb25zIiwiJGhlYWRlciIsImRvY3VtZW50IiwiaW5uZXJXaWR0aCIsIiRyZXBsYWNlbWVudENvbnRhaW5lciIsIml0ZW1zIiwiJGltZyIsInNyYyIsImltYWdlIiwiJHByb2RUaXRsZSIsInByb2R1Y3RfdGl0bGUiLCIkdmFyaWFudEluZm8iLCJpbm5lckhUTUwiLCJ2YXJpYW50SW5mb0hUTUwiLCJvcHRpb25zX3dpdGhfdmFsdWVzIiwiZm9yRWFjaCIsIm9wdGlvbiIsInZhbHVlIiwiJHByaWNlIiwiJGJ1eUJ0blByaWNlIiwiJGNsb3NlQnV0dG9uIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImNsb3NlVGltZW91dCIsImNsZWFyVGltZW91dCIsImNvbnNvbGUiLCJsb2ciLCIkcHJvZHVjdEpzb24iLCJKU09OIiwicGFyc2UiLCIkcHJvZHVjdEpzb25BdmFpbGFibGUiLCJ2YXJpYW50c0F2YWxpYmxlIiwibWFwIiwiaW5jbHVkZXMiLCJhdmFsaWJsZSIsInVybFBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsImxvY2F0aW9uIiwic2VhcmNoIiwiZ2V0Iiwic2V0VmFyaWFudEJ5SWQiLCJsZW5ndGgiLCJzZXR1cFByb2R1Y3QiXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/product-template/modules/product.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/recipe-archive/main.js\":\r\n/*!***********************************************************!*\\\r\n  !*** ./resources/scripts/sections/recipe-archive/main.js ***!\r\n  \\***********************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"recipeArchive\\\": () => (/* binding */ recipeArchive)\\n/* harmony export */ });\\nvar recipeArchive = function recipeArchive() {\\n  var lockBackground = function lockBackground() {\\n    document.body.classList.add(\\\"overflow-y-hidden\\\");\\n\\n    //Iphones ignore overflow hidden on body tags, so we do this instead\\n    var scrollY = window.scrollY;\\n    document.body.style.position = 'fixed';\\n    document.body.style.top = \\\"-\\\".concat(scrollY, \\\"px\\\");\\n    document.body.style.left = '0';\\n    document.body.style.right = '0';\\n    document.body.style.overflow = 'hidden';\\n  };\\n  var unlockBackground = function unlockBackground() {\\n    document.body.classList.remove(\\\"overflow-y-hidden\\\");\\n    var scrollY = Math.abs(parseInt(document.body.style.top || 0, 10));\\n    document.body.style.position = \\\"\\\";\\n    document.body.style.top = \\\"\\\";\\n    document.body.style.left = \\\"\\\";\\n    document.body.style.right = \\\"\\\";\\n    document.body.style.overflow = \\\"\\\";\\n    requestAnimationFrame(function () {\\n      window.scrollTo({\\n        top: scrollY,\\n        left: 0,\\n        behavior: \\\"instant\\\" // iOS 16+ - avoids the awkward blip jump\\n      });\\n    });\\n  };\\n\\n  var sendToBasePage = function sendToBasePage($baseUrl) {\\n    window.location.href = $baseUrl;\\n  };\\n  var sendToFilterPage = function sendToFilterPage($baseUrl, tagString) {\\n    window.location.href = \\\"\\\".concat($baseUrl, \\\"/tagged/\\\").concat(tagString);\\n  };\\n  var closeMobileFilters = function closeMobileFilters($filterModal, $filterBg) {\\n    $filterModal.classList.add(\\\"hidden\\\");\\n    $filterBg.classList.add(\\\"hidden\\\");\\n    unlockBackground();\\n  };\\n  var $recipeArchive = document.querySelector(\\\".section-recipe-archive-header\\\");\\n  if ($recipeArchive) {\\n    var $baseUrl = $recipeArchive.dataset.baseUrl;\\n\\n    //Desktop filters\\n    var $desktopFilterCont = $recipeArchive.querySelector(\\\".desktop-filter-row\\\");\\n    if ($desktopFilterCont) {\\n      var $desktopSelects = $desktopFilterCont.querySelectorAll(\\\"select\\\");\\n      if ($desktopSelects.length > 0) {\\n        $desktopSelects.forEach(function ($desktopSelect) {\\n          $desktopSelect.addEventListener(\\\"change\\\", function (e) {\\n            //Loop through our select lists - has an option been chosen?\\n            var noActiveFilter = true;\\n            var tagString = \\\"\\\";\\n            $desktopSelects.forEach(function ($desktopSlct) {\\n              if ($desktopSlct.value != \\\"--empty--\\\") {\\n                noActiveFilter = false;\\n                tagString += $desktopSlct.value + \\\"+\\\";\\n              }\\n            });\\n            if (noActiveFilter) {\\n              sendToBasePage($baseUrl);\\n            } else {\\n              tagString = tagString.slice(0, -1);\\n              sendToFilterPage($baseUrl, tagString);\\n            }\\n          });\\n        });\\n      }\\n    }\\n\\n    //Mobile Filters\\n    var $mobileFilterContainer = $recipeArchive.querySelector(\\\".mobile-filter-container\\\");\\n    if ($mobileFilterContainer) {\\n      var $filterBtn = $mobileFilterContainer.querySelector(\\\".filters-button\\\");\\n      var $filterModal = $mobileFilterContainer.querySelector(\\\".filters-modal\\\");\\n      var $filterBg = $mobileFilterContainer.querySelector(\\\".filters-bg\\\");\\n      if ($filterBtn && $filterModal && $filterBg) {\\n        //Bind open via button\\n        $filterBtn.addEventListener(\\\"click\\\", function (e) {\\n          e.preventDefault();\\n          $filterModal.classList.remove(\\\"hidden\\\");\\n          $filterBg.classList.remove(\\\"hidden\\\");\\n          lockBackground();\\n        });\\n\\n        //Bind close via bg click\\n        $filterBg.addEventListener(\\\"click\\\", function (e) {\\n          e.preventDefault();\\n          closeMobileFilters($filterModal, $filterBg);\\n        });\\n\\n        //Bind Modal Buttons\\n        var $filterModalXBtn = $filterModal.querySelector(\\\".mobile-filters-dropdown-close\\\");\\n        if ($filterModalXBtn) {\\n          $filterModalXBtn.addEventListener(\\\"click\\\", function (e) {\\n            e.preventDefault();\\n            closeMobileFilters($filterModal, $filterBg);\\n          });\\n        }\\n        var $applyBtn = $filterModal.querySelector(\\\".apply-filters-button\\\");\\n        var $mobileSelects = $mobileFilterContainer.querySelectorAll(\\\"select\\\");\\n        if ($applyBtn && $mobileSelects) {\\n          $applyBtn.addEventListener(\\\"click\\\", function (e) {\\n            e.preventDefault();\\n            var noActiveFilter = true;\\n            var tagString = \\\"\\\";\\n            $mobileSelects.forEach(function ($mobSlct) {\\n              if ($mobSlct.value != \\\"--empty--\\\") {\\n                noActiveFilter = false;\\n                tagString += $mobSlct.value + \\\"+\\\";\\n              }\\n            });\\n            if (noActiveFilter) {\\n              sendToBasePage($baseUrl);\\n            } else {\\n              tagString = tagString.slice(0, -1);\\n              sendToFilterPage($baseUrl, tagString);\\n            }\\n          });\\n        }\\n      }\\n    }\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (recipeArchive);\\n/*\\r\\n\\r\\nconst applyRecipeFilters = (targetSelectLists) => {\\r\\n\\r\\n\\tif(targetSelectLists){\\r\\n\\r\\n\\t\\tlet emptyOptions = [];\\r\\n\\t\\tlet noFiltersSelected = true;\\r\\n\\r\\n\\t\\ttargetSelectLists.forEach((selectList) => {\\r\\n\\r\\n\\t\\t\\t//Grab all of the Empty Options and put them in an array - that way we can check whether anything has been set in this list\\r\\n\\t\\t\\tconst emptyOption = selectList.querySelector(\\\"option[data-reset]\\\");\\r\\n\\t\\t\\temptyOptions.push(emptyOption.value);\\r\\n\\r\\n\\t\\t\\tif(selectList.value !== emptyOption.value){\\r\\n\\t\\t\\t\\tnoFiltersSelected = false;\\r\\n\\t\\t\\t}\\r\\n\\t\\t});\\r\\n\\r\\n\\t\\tif(noFiltersSelected){\\r\\n\\t\\t\\tsendBackToBlogUrl();\\r\\n\\t\\t}else{\\r\\n\\r\\n\\t\\t\\t//Set up our base url, loop through our select list values and build our new target\\r\\n\\t\\t\\tlet baseUrl = window.location.href;\\r\\n\\t\\t\\tif(baseUrl.includes(\\\"/tagged/\\\")){\\r\\n\\t\\t\\t\\tconst urlSegments = baseUrl.split(\\\"/tagged/\\\");\\r\\n\\t\\t\\t\\tbaseUrl = urlSegments[0];\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\t\\r\\n\\r\\n\\t\\t\\tlet tagPath = '';\\r\\n\\t\\t\\ttargetSelectLists.forEach((selectList) => {\\r\\n\\t\\t\\t\\tif(selectList){\\r\\n\\t\\t\\t\\t\\tif (!emptyOptions.includes(selectList.value)) {\\r\\n\\t\\t\\t\\t\\t\\ttagPath += handleizeTag(selectList.value) + \\\"+\\\";\\r\\n\\t\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t});\\r\\n\\r\\n\\t\\t\\tif(tagPath != ''){\\r\\n\\t\\t\\t\\t//remove the last character and build the url, send the customer to it\\r\\n\\t\\t\\t\\ttagPath = tagPath.slice(0, -1);\\r\\n\\r\\n\\t\\t\\t\\twindow.location.href = baseUrl + \\\"/tagged/\\\" + tagPath;\\r\\n\\t\\t\\t}else{\\r\\n\\t\\t\\t\\t//this shouldn't be possible? \\r\\n\\t\\t\\t\\tconsole.log(\\\"imposbility occurred - no tags added to path despite being set\\\");\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t}else{\\r\\n\\t\\tsendBackToBlogUrl();\\r\\n\\t}\\r\\n}\\r\\n\\r\\nconst recipeArchiveFilters = () => {\\r\\n\\r\\n\\tconst filterSection = document.querySelector(\\\".tribe-main-blog__filters\\\");\\r\\n\\r\\n\\tif(filterSection){\\r\\n\\r\\n\\t\\t//Mobile filter handling\\r\\n\\t\\tconst mobileFilterContent = filterSection.querySelector(\\\".tribe-main-blog__filters-mobile\\\");\\r\\n\\t\\tif(mobileFilterContent){\\r\\n\\r\\n\\t\\t\\tconst mobileFilterMenuButton = mobileFilterContent.querySelector(\\\".tribe-main-blog__filters-mobile__menu-button\\\");\\r\\n\\t\\t\\tconst mobileFilterMenu = mobileFilterContent.querySelector(\\\".tribe-main-blog__filters-mobile-menu\\\");\\r\\n\\r\\n\\t\\t\\tif(mobileFilterMenuButton && mobileFilterMenu){\\r\\n\\r\\n\\t\\t\\t\\tconst closeButton = mobileFilterMenu.querySelector(\\\".tribe-main-blog__filters-mobile__filter-close\\\");\\r\\n\\t\\t\\t\\tconst applyButton = mobileFilterMenu.querySelector(\\\".tribe-main-blog__filters-mobile-menu__apply\\\");\\r\\n\\r\\n\\t\\t\\t\\tif(closeButton && applyButton){\\r\\n\\t\\t\\t\\t\\t//bind open\\r\\n\\t\\t\\t\\t\\tmobileFilterMenuButton.addEventListener(\\\"click\\\", (e) => {\\r\\n\\t\\t\\t\\t\\t\\te.preventDefault();\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t\\tmobileFilterContent.classList.add(\\\"filter-menu-open\\\");\\r\\n\\t\\t\\t\\t\\t});\\r\\n\\r\\n\\t\\t\\t\\t\\t//Close the menu\\r\\n\\t\\t\\t\\t\\tcloseButton.addEventListener(\\\"click\\\", () => {\\r\\n\\t\\t\\t\\t\\t\\tmobileFilterContent.classList.remove(\\\"filter-menu-open\\\");\\r\\n\\t\\t\\t\\t\\t});\\r\\n\\r\\n\\t\\t\\t\\t\\t//Apply Filters clicked\\r\\n\\t\\t\\t\\t\\tapplyButton.addEventListener(\\\"click\\\", (e) => {\\r\\n\\t\\t\\t\\t\\t\\te.preventDefault();\\t\\r\\n\\r\\n\\t\\t\\t\\t\\t\\tconst targetSelectLists = mobileFilterMenu.querySelectorAll(\\\"select\\\");\\r\\n\\t\\t\\t\\t\\t\\tapplyRecipeFilters(targetSelectLists);\\t\\t\\t\\t\\t\\t\\r\\n\\t\\t\\t\\t\\t});\\r\\n\\t\\t\\t\\t}else{\\r\\n\\t\\t\\t\\t\\tconsole.log(\\\"could not find close and/or apply filter button\\\");\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\r\\n\\r\\n\\t\\t//Desktop filter handling\\r\\n\\t\\tconst desktopFilters = filterSection.querySelector(\\\".tribe-main-blog__filters-desktop\\\");\\r\\n\\t\\tif(desktopFilters){\\r\\n\\r\\n\\t\\t\\t//Bind all of the select lists to capture them changing\\r\\n\\t\\t\\tconst desktopSelects = desktopFilters.querySelectorAll(\\\".tribe-main-blog__filter-select\\\");\\r\\n\\t\\t\\tif(desktopSelects){\\r\\n\\t\\t\\t\\tdesktopSelects.forEach((desktopSelect) => {\\r\\n\\t\\t\\t\\t\\tdesktopSelect.addEventListener(\\\"change\\\", () => {\\r\\n\\t\\t\\t\\t\\t\\tapplyRecipeFilters(desktopSelects);\\r\\n\\t\\t\\t\\t\\t});\\r\\n\\t\\t\\t\\t});\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t}\\r\\n}\\r\\n\\r\\n*///# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9yZWNpcGUtYXJjaGl2ZS9tYWluLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU8sSUFBTUEsYUFBYSxHQUFHLFNBQWhCQSxhQUFhLEdBQVM7RUFFL0IsSUFBTUMsY0FBYyxHQUFHLFNBQWpCQSxjQUFjLEdBQVM7SUFDekJDLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUNDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQzs7SUFFaEQ7SUFDQSxJQUFNQyxPQUFPLEdBQUdDLE1BQU0sQ0FBQ0QsT0FBTztJQUM5QkosUUFBUSxDQUFDQyxJQUFJLENBQUNLLEtBQUssQ0FBQ0MsUUFBUSxHQUFHLE9BQU87SUFDdENQLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDSyxLQUFLLENBQUNFLEdBQUcsY0FBT0osT0FBTyxPQUFJO0lBQ3pDSixRQUFRLENBQUNDLElBQUksQ0FBQ0ssS0FBSyxDQUFDRyxJQUFJLEdBQUcsR0FBRztJQUM5QlQsUUFBUSxDQUFDQyxJQUFJLENBQUNLLEtBQUssQ0FBQ0ksS0FBSyxHQUFHLEdBQUc7SUFDL0JWLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDSyxLQUFLLENBQUNLLFFBQVEsR0FBRyxRQUFRO0VBQzNDLENBQUM7RUFFRCxJQUFNQyxnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQWdCLEdBQVM7SUFDM0JaLFFBQVEsQ0FBQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUNXLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztJQUVuRCxJQUFNVCxPQUFPLEdBQUdVLElBQUksQ0FBQ0MsR0FBRyxDQUFDQyxRQUFRLENBQUNoQixRQUFRLENBQUNDLElBQUksQ0FBQ0ssS0FBSyxDQUFDRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFUixRQUFRLENBQUNDLElBQUksQ0FBQ0ssS0FBSyxDQUFDQyxRQUFRLEdBQUcsRUFBRTtJQUNqQ1AsUUFBUSxDQUFDQyxJQUFJLENBQUNLLEtBQUssQ0FBQ0UsR0FBRyxH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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9yZWNpcGUtYXJjaGl2ZS9tYWluLmpzPzQ2N2MiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHJlY2lwZUFyY2hpdmUgPSAoKSA9PiB7XHJcblxyXG4gICAgY29uc3QgbG9ja0JhY2tncm91bmQgPSAoKSA9PiB7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwib3ZlcmZsb3cteS1oaWRkZW5cIik7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9JcGhvbmVzIGlnbm9yZSBvdmVyZmxvdyBoaWRkZW4gb24gYm9keSB0YWdzLCBzbyB3ZSBkbyB0aGlzIGluc3RlYWRcclxuICAgICAgICBjb25zdCBzY3JvbGxZID0gd2luZG93LnNjcm9sbFk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS50b3AgPSBgLSR7c2Nyb2xsWX1weGA7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5sZWZ0ID0gJzAnO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucmlnaHQgPSAnMCc7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nOyAgICAgICAgICAgIFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCB1bmxvY2tCYWNrZ3JvdW5kID0gKCkgPT4ge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcIm92ZXJmbG93LXktaGlkZGVuXCIpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IHNjcm9sbFkgPSBNYXRoLmFicyhwYXJzZUludChkb2N1bWVudC5ib2R5LnN0eWxlLnRvcCB8fCAwLCAxMCkpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucG9zaXRpb24gPSBcIlwiO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudG9wID0gXCJcIjtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmxlZnQgPSBcIlwiO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUucmlnaHQgPSBcIlwiO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBcIlwiO1xyXG5cclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oe1xyXG4gICAgICAgICAgICAgICAgdG9wOiBzY3JvbGxZLFxyXG4gICAgICAgICAgICAgICAgbGVmdDogMCxcclxuICAgICAgICAgICAgICAgIGJlaGF2aW9yOiBcImluc3RhbnRcIiAvLyBpT1MgMTYrIC0gYXZvaWRzIHRoZSBhd2t3YXJkIGJsaXAganVtcFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICBcclxuICAgIGNvbnN0IHNlbmRUb0Jhc2VQYWdlID0gKCRiYXNlVXJsKSA9PiB7XHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAkYmFzZVVybDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZW5kVG9GaWx0ZXJQYWdlID0gKCRiYXNlVXJsLHRhZ1N0cmluZykgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYCR7JGJhc2VVcmx9L3RhZ2dlZC8ke3RhZ1N0cmluZ31gO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNsb3NlTW9iaWxlRmlsdGVycyA9ICgkZmlsdGVyTW9kYWwsJGZpbHRlckJnKSA9PiB7XHJcbiAgICAgICAgJGZpbHRlck1vZGFsLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgJGZpbHRlckJnLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcblxyXG4gICAgICAgIHVubG9ja0JhY2tncm91bmQoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCAkcmVjaXBlQXJjaGl2ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuc2VjdGlvbi1yZWNpcGUtYXJjaGl2ZS1oZWFkZXJcIik7XHJcbiAgICBpZigkcmVjaXBlQXJjaGl2ZSl7XHJcblxyXG4gICAgICAgIGNvbnN0ICRiYXNlVXJsID0gJHJlY2lwZUFyY2hpdmUuZGF0YXNldC5iYXNlVXJsO1xyXG5cclxuICAgICAgICAvL0Rlc2t0b3AgZmlsdGVyc1xyXG4gICAgICAgIGNvbnN0ICRkZXNrdG9wRmlsdGVyQ29udCA9ICRyZWNpcGVBcmNoaXZlLnF1ZXJ5U2VsZWN0b3IoXCIuZGVza3RvcC1maWx0ZXItcm93XCIpO1xyXG4gICAgICAgIGlmKCRkZXNrdG9wRmlsdGVyQ29udCl7XHJcblxyXG4gICAgICAgICAgICBjb25zdCAkZGVza3RvcFNlbGVjdHMgPSAkZGVza3RvcEZpbHRlckNvbnQucXVlcnlTZWxlY3RvckFsbChcInNlbGVjdFwiKTtcclxuICAgICAgICAgICAgaWYoJGRlc2t0b3BTZWxlY3RzLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgJGRlc2t0b3BTZWxlY3RzLmZvckVhY2goKCRkZXNrdG9wU2VsZWN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICRkZXNrdG9wU2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwoZSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9Mb29wIHRocm91Z2ggb3VyIHNlbGVjdCBsaXN0cyAtIGhhcyBhbiBvcHRpb24gYmVlbiBjaG9zZW4/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBub0FjdGl2ZUZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0YWdTdHJpbmcgPSBcIlwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJGRlc2t0b3BTZWxlY3RzLmZvckVhY2goKCRkZXNrdG9wU2xjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGRlc2t0b3BTbGN0LnZhbHVlICE9IFwiLS1lbXB0eS0tXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vQWN0aXZlRmlsdGVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnU3RyaW5nICs9ICRkZXNrdG9wU2xjdC52YWx1ZStcIitcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihub0FjdGl2ZUZpbHRlcil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kVG9CYXNlUGFnZSgkYmFzZVVybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnU3RyaW5nID0gdGFnU3RyaW5nLnNsaWNlKDAsIC0xKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRUb0ZpbHRlclBhZ2UoJGJhc2VVcmwsdGFnU3RyaW5nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vTW9iaWxlIEZpbHRlcnNcclxuICAgICAgICBjb25zdCAkbW9iaWxlRmlsdGVyQ29udGFpbmVyID0gJHJlY2lwZUFyY2hpdmUucXVlcnlTZWxlY3RvcihcIi5tb2JpbGUtZmlsdGVyLWNvbnRhaW5lclwiKTtcclxuICAgICAgICBpZigkbW9iaWxlRmlsdGVyQ29udGFpbmVyKXtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0ICRmaWx0ZXJCdG4gPSAkbW9iaWxlRmlsdGVyQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuZmlsdGVycy1idXR0b25cIik7XHJcbiAgICAgICAgICAgIGNvbnN0ICRmaWx0ZXJNb2RhbCA9ICRtb2JpbGVGaWx0ZXJDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5maWx0ZXJzLW1vZGFsXCIpO1xyXG4gICAgICAgICAgICBjb25zdCAkZmlsdGVyQmcgPSAkbW9iaWxlRmlsdGVyQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuZmlsdGVycy1iZ1wiKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCRmaWx0ZXJCdG4gJiYgJGZpbHRlck1vZGFsICYmICAkZmlsdGVyQmcpe1xyXG5cclxuICAgICAgICAgICAgICAgIC8vQmluZCBvcGVuIHZpYSBidXR0b25cclxuICAgICAgICAgICAgICAgICRmaWx0ZXJCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICRmaWx0ZXJNb2RhbC5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICRmaWx0ZXJCZy5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsb2NrQmFja2dyb3VuZCgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy9CaW5kIGNsb3NlIHZpYSBiZyBjbGlja1xyXG4gICAgICAgICAgICAgICAgJGZpbHRlckJnLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VNb2JpbGVGaWx0ZXJzKCRmaWx0ZXJNb2RhbCwkZmlsdGVyQmcpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy9CaW5kIE1vZGFsIEJ1dHRvbnNcclxuICAgICAgICAgICAgICAgIGNvbnN0ICRmaWx0ZXJNb2RhbFhCdG4gPSAkZmlsdGVyTW9kYWwucXVlcnlTZWxlY3RvcihcIi5tb2JpbGUtZmlsdGVycy1kcm9wZG93bi1jbG9zZVwiKTtcclxuICAgICAgICAgICAgICAgIGlmKCRmaWx0ZXJNb2RhbFhCdG4pe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkZmlsdGVyTW9kYWxYQnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VNb2JpbGVGaWx0ZXJzKCRmaWx0ZXJNb2RhbCwkZmlsdGVyQmcpOyAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIH0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0ICRhcHBseUJ0biA9ICRmaWx0ZXJNb2RhbC5xdWVyeVNlbGVjdG9yKFwiLmFwcGx5LWZpbHRlcnMtYnV0dG9uXCIpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgJG1vYmlsZVNlbGVjdHMgPSAkbW9iaWxlRmlsdGVyQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJzZWxlY3RcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoJGFwcGx5QnRuICYmICRtb2JpbGVTZWxlY3RzKXtcclxuICAgICAgICAgICAgICAgICAgICAkYXBwbHlCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5vQWN0aXZlRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRhZ1N0cmluZyA9IFwiXCI7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkbW9iaWxlU2VsZWN0cy5mb3JFYWNoKCgkbW9iU2xjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJG1vYlNsY3QudmFsdWUgIT0gXCItLWVtcHR5LS1cIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9BY3RpdmVGaWx0ZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdTdHJpbmcgKz0gJG1vYlNsY3QudmFsdWUrXCIrXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYobm9BY3RpdmVGaWx0ZXIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFRvQmFzZVBhZ2UoJGJhc2VVcmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ1N0cmluZyA9IHRhZ1N0cmluZy5zbGljZSgwLCAtMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kVG9GaWx0ZXJQYWdlKCRiYXNlVXJsLHRhZ1N0cmluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHJlY2lwZUFyY2hpdmU7ICAgIFxyXG4vKlxyXG5cclxuY29uc3QgYXBwbHlSZWNpcGVGaWx0ZXJzID0gKHRhcmdldFNlbGVjdExpc3RzKSA9PiB7XHJcblxyXG5cdGlmKHRhcmdldFNlbGVjdExpc3RzKXtcclxuXHJcblx0XHRsZXQgZW1wdHlPcHRpb25zID0gW107XHJcblx0XHRsZXQgbm9GaWx0ZXJzU2VsZWN0ZWQgPSB0cnVlO1xyXG5cclxuXHRcdHRhcmdldFNlbGVjdExpc3RzLmZvckVhY2goKHNlbGVjdExpc3QpID0+IHtcclxuXHJcblx0XHRcdC8vR3JhYiBhbGwgb2YgdGhlIEVtcHR5IE9wdGlvbnMgYW5kIHB1dCB0aGVtIGluIGFuIGFycmF5IC0gdGhhdCB3YXkgd2UgY2FuIGNoZWNrIHdoZXRoZXIgYW55dGhpbmcgaGFzIGJlZW4gc2V0IGluIHRoaXMgbGlzdFxyXG5cdFx0XHRjb25zdCBlbXB0eU9wdGlvbiA9IHNlbGVjdExpc3QucXVlcnlTZWxlY3RvcihcIm9wdGlvbltkYXRhLXJlc2V0XVwiKTtcclxuXHRcdFx0ZW1wdHlPcHRpb25zLnB1c2goZW1wdHlPcHRpb24udmFsdWUpO1xyXG5cclxuXHRcdFx0aWYoc2VsZWN0TGlzdC52YWx1ZSAhPT0gZW1wdHlPcHRpb24udmFsdWUpe1xyXG5cdFx0XHRcdG5vRmlsdGVyc1NlbGVjdGVkID0gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdGlmKG5vRmlsdGVyc1NlbGVjdGVkKXtcclxuXHRcdFx0c2VuZEJhY2tUb0Jsb2dVcmwoKTtcclxuXHRcdH1lbHNle1xyXG5cclxuXHRcdFx0Ly9TZXQgdXAgb3VyIGJhc2UgdXJsLCBsb29wIHRocm91Z2ggb3VyIHNlbGVjdCBsaXN0IHZhbHVlcyBhbmQgYnVpbGQgb3VyIG5ldyB0YXJnZXRcclxuXHRcdFx0bGV0IGJhc2VVcmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuXHRcdFx0aWYoYmFzZVVybC5pbmNsdWRlcyhcIi90YWdnZWQvXCIpKXtcclxuXHRcdFx0XHRjb25zdCB1cmxTZWdtZW50cyA9IGJhc2VVcmwuc3BsaXQoXCIvdGFnZ2VkL1wiKTtcclxuXHRcdFx0XHRiYXNlVXJsID0gdXJsU2VnbWVudHNbMF07XHJcblx0XHRcdH1cclxuXHRcdFx0XHJcblxyXG5cdFx0XHRsZXQgdGFnUGF0aCA9ICcnO1xyXG5cdFx0XHR0YXJnZXRTZWxlY3RMaXN0cy5mb3JFYWNoKChzZWxlY3RMaXN0KSA9PiB7XHJcblx0XHRcdFx0aWYoc2VsZWN0TGlzdCl7XHJcblx0XHRcdFx0XHRpZiAoIWVtcHR5T3B0aW9ucy5pbmNsdWRlcyhzZWxlY3RMaXN0LnZhbHVlKSkge1xyXG5cdFx0XHRcdFx0XHR0YWdQYXRoICs9IGhhbmRsZWl6ZVRhZyhzZWxlY3RMaXN0LnZhbHVlKSArIFwiK1wiO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRpZih0YWdQYXRoICE9ICcnKXtcclxuXHRcdFx0XHQvL3JlbW92ZSB0aGUgbGFzdCBjaGFyYWN0ZXIgYW5kIGJ1aWxkIHRoZSB1cmwsIHNlbmQgdGhlIGN1c3RvbWVyIHRvIGl0XHJcblx0XHRcdFx0dGFnUGF0aCA9IHRhZ1BhdGguc2xpY2UoMCwgLTEpO1xyXG5cclxuXHRcdFx0XHR3aW5kb3cubG9jYXRpb24uaHJlZiA9IGJhc2VVcmwgKyBcIi90YWdnZWQvXCIgKyB0YWdQYXRoO1xyXG5cdFx0XHR9ZWxzZXtcclxuXHRcdFx0XHQvL3RoaXMgc2hvdWxkbid0IGJlIHBvc3NpYmxlPyBcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhcImltcG9zYmlsaXR5IG9jY3VycmVkIC0gbm8gdGFncyBhZGRlZCB0byBwYXRoIGRlc3BpdGUgYmVpbmcgc2V0XCIpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fWVsc2V7XHJcblx0XHRzZW5kQmFja1RvQmxvZ1VybCgpO1xyXG5cdH1cclxufVxyXG5cclxuY29uc3QgcmVjaXBlQXJjaGl2ZUZpbHRlcnMgPSAoKSA9PiB7XHJcblxyXG5cdGNvbnN0IGZpbHRlclNlY3Rpb24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnRyaWJlLW1haW4tYmxvZ19fZmlsdGVyc1wiKTtcclxuXHJcblx0aWYoZmlsdGVyU2VjdGlvbil7XHJcblxyXG5cdFx0Ly9Nb2JpbGUgZmlsdGVyIGhhbmRsaW5nXHJcblx0XHRjb25zdCBtb2JpbGVGaWx0ZXJDb250ZW50ID0gZmlsdGVyU2VjdGlvbi5xdWVyeVNlbGVjdG9yKFwiLnRyaWJlLW1haW4tYmxvZ19fZmlsdGVycy1tb2JpbGVcIik7XHJcblx0XHRpZihtb2JpbGVGaWx0ZXJDb250ZW50KXtcclxuXHJcblx0XHRcdGNvbnN0IG1vYmlsZUZpbHRlck1lbnVCdXR0b24gPSBtb2JpbGVGaWx0ZXJDb250ZW50LnF1ZXJ5U2VsZWN0b3IoXCIudHJpYmUtbWFpbi1ibG9nX19maWx0ZXJzLW1vYmlsZV9fbWVudS1idXR0b25cIik7XHJcblx0XHRcdGNvbnN0IG1vYmlsZUZpbHRlck1lbnUgPSBtb2JpbGVGaWx0ZXJDb250ZW50LnF1ZXJ5U2VsZWN0b3IoXCIudHJpYmUtbWFpbi1ibG9nX19maWx0ZXJzLW1vYmlsZS1tZW51XCIpO1xyXG5cclxuXHRcdFx0aWYobW9iaWxlRmlsdGVyTWVudUJ1dHRvbiAmJiBtb2JpbGVGaWx0ZXJNZW51KXtcclxuXHJcblx0XHRcdFx0Y29uc3QgY2xvc2VCdXR0b24gPSBtb2JpbGVGaWx0ZXJNZW51LnF1ZXJ5U2VsZWN0b3IoXCIudHJpYmUtbWFpbi1ibG9nX19maWx0ZXJzLW1vYmlsZV9fZmlsdGVyLWNsb3NlXCIpO1xyXG5cdFx0XHRcdGNvbnN0IGFwcGx5QnV0dG9uID0gbW9iaWxlRmlsdGVyTWVudS5xdWVyeVNlbGVjdG9yKFwiLnRyaWJlLW1haW4tYmxvZ19fZmlsdGVycy1tb2JpbGUtbWVudV9fYXBwbHlcIik7XHJcblxyXG5cdFx0XHRcdGlmKGNsb3NlQnV0dG9uICYmIGFwcGx5QnV0dG9uKXtcclxuXHRcdFx0XHRcdC8vYmluZCBvcGVuXHJcblx0XHRcdFx0XHRtb2JpbGVGaWx0ZXJNZW51QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XHRcdFx0XHRcdFxyXG5cdFx0XHRcdFx0XHRtb2JpbGVGaWx0ZXJDb250ZW50LmNsYXNzTGlzdC5hZGQoXCJmaWx0ZXItbWVudS1vcGVuXCIpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdFx0Ly9DbG9zZSB0aGUgbWVudVxyXG5cdFx0XHRcdFx0Y2xvc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuXHRcdFx0XHRcdFx0bW9iaWxlRmlsdGVyQ29udGVudC5jbGFzc0xpc3QucmVtb3ZlKFwiZmlsdGVyLW1lbnUtb3BlblwiKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdC8vQXBwbHkgRmlsdGVycyBjbGlja2VkXHJcblx0XHRcdFx0XHRhcHBseUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuXHRcdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1x0XHJcblxyXG5cdFx0XHRcdFx0XHRjb25zdCB0YXJnZXRTZWxlY3RMaXN0cyA9IG1vYmlsZUZpbHRlck1lbnUucXVlcnlTZWxlY3RvckFsbChcInNlbGVjdFwiKTtcclxuXHRcdFx0XHRcdFx0YXBwbHlSZWNpcGVGaWx0ZXJzKHRhcmdldFNlbGVjdExpc3RzKTtcdFx0XHRcdFx0XHRcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1lbHNle1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coXCJjb3VsZCBub3QgZmluZCBjbG9zZSBhbmQvb3IgYXBwbHkgZmlsdGVyIGJ1dHRvblwiKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblxyXG5cdFx0Ly9EZXNrdG9wIGZpbHRlciBoYW5kbGluZ1xyXG5cdFx0Y29uc3QgZGVza3RvcEZpbHRlcnMgPSBmaWx0ZXJTZWN0aW9uLnF1ZXJ5U2VsZWN0b3IoXCIudHJpYmUtbWFpbi1ibG9nX19maWx0ZXJzLWRlc2t0b3BcIik7XHJcblx0XHRpZihkZXNrdG9wRmlsdGVycyl7XHJcblxyXG5cdFx0XHQvL0JpbmQgYWxsIG9mIHRoZSBzZWxlY3QgbGlzdHMgdG8gY2FwdHVyZSB0aGVtIGNoYW5naW5nXHJcblx0XHRcdGNvbnN0IGRlc2t0b3BTZWxlY3RzID0gZGVza3RvcEZpbHRlcnMucXVlcnlTZWxlY3RvckFsbChcIi50cmliZS1tYWluLWJsb2dfX2ZpbHRlci1zZWxlY3RcIik7XHJcblx0XHRcdGlmKGRlc2t0b3BTZWxlY3RzKXtcclxuXHRcdFx0XHRkZXNrdG9wU2VsZWN0cy5mb3JFYWNoKChkZXNrdG9wU2VsZWN0KSA9PiB7XHJcblx0XHRcdFx0XHRkZXNrdG9wU2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRhcHBseVJlY2lwZUZpbHRlcnMoZGVza3RvcFNlbGVjdHMpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn1cclxuXHJcbiovIl0sIm5hbWVzIjpbInJlY2lwZUFyY2hpdmUiLCJsb2NrQmFja2dyb3VuZCIsImRvY3VtZW50IiwiYm9keSIsImNsYXNzTGlzdCIsImFkZCIsInNjcm9sbFkiLCJ3aW5kb3ciLCJzdHlsZSIsInBvc2l0aW9uIiwidG9wIiwibGVmdCIsInJpZ2h0Iiwib3ZlcmZsb3ciLCJ1bmxvY2tCYWNrZ3JvdW5kIiwicmVtb3ZlIiwiTWF0aCIsImFicyIsInBhcnNlSW50IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwic2Nyb2xsVG8iLCJiZWhhdmlvciIsInNlbmRUb0Jhc2VQYWdlIiwiJGJhc2VVcmwiLCJsb2NhdGlvbiIsImhyZWYiLCJzZW5kVG9GaWx0ZXJQYWdlIiwidGFnU3RyaW5nIiwiY2xvc2VNb2JpbGVGaWx0ZXJzIiwiJGZpbHRlck1vZGFsIiwiJGZpbHRlckJnIiwiJHJlY2lwZUFyY2hpdmUiLCJxdWVyeVNlbGVjdG9yIiwiZGF0YXNldCIsImJhc2VVcmwiLCIkZGVza3RvcEZpbHRlckNvbnQiLCIkZGVza3RvcFNlbGVjdHMiLCJxdWVyeVNlbGVjdG9yQWxsIiwibGVuZ3RoIiwiZm9yRWFjaCIsIiRkZXNrdG9wU2VsZWN0IiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJub0FjdGl2ZUZpbHRlciIsIiRkZXNrdG9wU2xjdCIsInZhbHVlIiwic2xpY2UiLCIkbW9iaWxlRmlsdGVyQ29udGFpbmVyIiwiJGZpbHRlckJ0biIsInByZXZlbnREZWZhdWx0IiwiJGZpbHRlck1vZGFsWEJ0biIsIiRhcHBseUJ0biIsIiRtb2JpbGVTZWxlY3RzIiwiJG1vYlNsY3QiXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/recipe-archive/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/recipes/main.js\":\r\n/*!****************************************************!*\\\r\n  !*** ./resources/scripts/sections/recipes/main.js ***!\r\n  \\****************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"recipes\\\": () => (/* binding */ recipes)\\n/* harmony export */ });\\nfunction _typeof(obj) { \\\"@babel/helpers - typeof\\\"; return _typeof = \\\"function\\\" == typeof Symbol && \\\"symbol\\\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \\\"function\\\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \\\"symbol\\\" : typeof obj; }, _typeof(obj); }\\nfunction _regeneratorRuntime() { \\\"use strict\\\"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return exports; }; var exports = {}, Op = Object.prototype, hasOwn = Op.hasOwnProperty, defineProperty = Object.defineProperty || function (obj, key, desc) { obj[key] = desc.value; }, $Symbol = \\\"function\\\" == typeof Symbol ? Symbol : {}, iteratorSymbol = $Symbol.iterator || \\\"@@iterator\\\", asyncIteratorSymbol = $Symbol.asyncIterator || \\\"@@asyncIterator\\\", toStringTagSymbol = $Symbol.toStringTag || \\\"@@toStringTag\\\"; function define(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: !0, configurable: !0, writable: !0 }), obj[key]; } try { define({}, \\\"\\\"); } catch (err) { define = function define(obj, key, value) { return obj[key] = value; }; } function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator, generator = Object.create(protoGenerator.prototype), context = new Context(tryLocsList || []); return defineProperty(generator, \\\"_invoke\\\", { value: makeInvokeMethod(innerFn, self, context) }), generator; } function tryCatch(fn, obj, arg) { try { return { type: \\\"normal\\\", arg: fn.call(obj, arg) }; } catch (err) { return { type: \\\"throw\\\", arg: err }; } } exports.wrap = wrap; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; define(IteratorPrototype, iteratorSymbol, function () { return this; }); var getProto = Object.getPrototypeOf, NativeIteratorPrototype = getProto && getProto(getProto(values([]))); NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol) && (IteratorPrototype = NativeIteratorPrototype); var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); function defineIteratorMethods(prototype) { [\\\"next\\\", \\\"throw\\\", \\\"return\\\"].forEach(function (method) { define(prototype, method, function (arg) { return this._invoke(method, arg); }); }); } function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (\\\"throw\\\" !== record.type) { var result = record.arg, value = result.value; return value && \\\"object\\\" == _typeof(value) && hasOwn.call(value, \\\"__await\\\") ? PromiseImpl.resolve(value.__await).then(function (value) { invoke(\\\"next\\\", value, resolve, reject); }, function (err) { invoke(\\\"throw\\\", err, resolve, reject); }) : PromiseImpl.resolve(value).then(function (unwrapped) { result.value = unwrapped, resolve(result); }, function (error) { return invoke(\\\"throw\\\", error, resolve, reject); }); } reject(record.arg); } var previousPromise; defineProperty(this, \\\"_invoke\\\", { value: function value(method, arg) { function callInvokeWithMethodAndArg() { return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(innerFn, self, context) { var state = \\\"suspendedStart\\\"; return function (method, arg) { if (\\\"executing\\\" === state) throw new Error(\\\"Generator is already running\\\"); if (\\\"completed\\\" === state) { if (\\\"throw\\\" === method) throw arg; return doneResult(); } for (context.method = method, context.arg = arg;;) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (\\\"next\\\" === context.method) context.sent = context._sent = context.arg;else if (\\\"throw\\\" === context.method) { if (\\\"suspendedStart\\\" === state) throw state = \\\"completed\\\", context.arg; context.dispatchException(context.arg); } else \\\"return\\\" === context.method && context.abrupt(\\\"return\\\", context.arg); state = \\\"executing\\\"; var record = tryCatch(innerFn, self, context); if (\\\"normal\\\" === record.type) { if (state = context.done ? \\\"completed\\\" : \\\"suspendedYield\\\", record.arg === ContinueSentinel) continue; return { value: record.arg, done: context.done }; } \\\"throw\\\" === record.type && (state = \\\"completed\\\", context.method = \\\"throw\\\", context.arg = record.arg); } }; } function maybeInvokeDelegate(delegate, context) { var methodName = context.method, method = delegate.iterator[methodName]; if (undefined === method) return context.delegate = null, \\\"throw\\\" === methodName && delegate.iterator[\\\"return\\\"] && (context.method = \\\"return\\\", context.arg = undefined, maybeInvokeDelegate(delegate, context), \\\"throw\\\" === context.method) || \\\"return\\\" !== methodName && (context.method = \\\"throw\\\", context.arg = new TypeError(\\\"The iterator does not provide a '\\\" + methodName + \\\"' method\\\")), ContinueSentinel; var record = tryCatch(method, delegate.iterator, context.arg); if (\\\"throw\\\" === record.type) return context.method = \\\"throw\\\", context.arg = record.arg, context.delegate = null, ContinueSentinel; var info = record.arg; return info ? info.done ? (context[delegate.resultName] = info.value, context.next = delegate.nextLoc, \\\"return\\\" !== context.method && (context.method = \\\"next\\\", context.arg = undefined), context.delegate = null, ContinueSentinel) : info : (context.method = \\\"throw\\\", context.arg = new TypeError(\\\"iterator result is not an object\\\"), context.delegate = null, ContinueSentinel); } function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; 1 in locs && (entry.catchLoc = locs[1]), 2 in locs && (entry.finallyLoc = locs[2], entry.afterLoc = locs[3]), this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = \\\"normal\\\", delete record.arg, entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: \\\"root\\\" }], tryLocsList.forEach(pushTryEntry, this), this.reset(!0); } function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) return iteratorMethod.call(iterable); if (\\\"function\\\" == typeof iterable.next) return iterable; if (!isNaN(iterable.length)) { var i = -1, next = function next() { for (; ++i < iterable.length;) if (hasOwn.call(iterable, i)) return next.value = iterable[i], next.done = !1, next; return next.value = undefined, next.done = !0, next; }; return next.next = next; } } return { next: doneResult }; } function doneResult() { return { value: undefined, done: !0 }; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, defineProperty(Gp, \\\"constructor\\\", { value: GeneratorFunctionPrototype, configurable: !0 }), defineProperty(GeneratorFunctionPrototype, \\\"constructor\\\", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, toStringTagSymbol, \\\"GeneratorFunction\\\"), exports.isGeneratorFunction = function (genFun) { var ctor = \\\"function\\\" == typeof genFun && genFun.constructor; return !!ctor && (ctor === GeneratorFunction || \\\"GeneratorFunction\\\" === (ctor.displayName || ctor.name)); }, exports.mark = function (genFun) { return Object.setPrototypeOf ? Object.setPrototypeOf(genFun, GeneratorFunctionPrototype) : (genFun.__proto__ = GeneratorFunctionPrototype, define(genFun, toStringTagSymbol, \\\"GeneratorFunction\\\")), genFun.prototype = Object.create(Gp), genFun; }, exports.awrap = function (arg) { return { __await: arg }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, asyncIteratorSymbol, function () { return this; }), exports.AsyncIterator = AsyncIterator, exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { void 0 === PromiseImpl && (PromiseImpl = Promise); var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); return exports.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }, defineIteratorMethods(Gp), define(Gp, toStringTagSymbol, \\\"Generator\\\"), define(Gp, iteratorSymbol, function () { return this; }), define(Gp, \\\"toString\\\", function () { return \\\"[object Generator]\\\"; }), exports.keys = function (val) { var object = Object(val), keys = []; for (var key in object) keys.push(key); return keys.reverse(), function next() { for (; keys.length;) { var key = keys.pop(); if (key in object) return next.value = key, next.done = !1, next; } return next.done = !0, next; }; }, exports.values = values, Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { if (this.prev = 0, this.next = 0, this.sent = this._sent = undefined, this.done = !1, this.delegate = null, this.method = \\\"next\\\", this.arg = undefined, this.tryEntries.forEach(resetTryEntry), !skipTempReset) for (var name in this) \\\"t\\\" === name.charAt(0) && hasOwn.call(this, name) && !isNaN(+name.slice(1)) && (this[name] = undefined); }, stop: function stop() { this.done = !0; var rootRecord = this.tryEntries[0].completion; if (\\\"throw\\\" === rootRecord.type) throw rootRecord.arg; return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) throw exception; var context = this; function handle(loc, caught) { return record.type = \\\"throw\\\", record.arg = exception, context.next = loc, caught && (context.method = \\\"next\\\", context.arg = undefined), !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i], record = entry.completion; if (\\\"root\\\" === entry.tryLoc) return handle(\\\"end\\\"); if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, \\\"catchLoc\\\"), hasFinally = hasOwn.call(entry, \\\"finallyLoc\\\"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } else if (hasCatch) { if (this.prev < entry.catchLoc) return handle(entry.catchLoc, !0); } else { if (!hasFinally) throw new Error(\\\"try statement without catch or finally\\\"); if (this.prev < entry.finallyLoc) return handle(entry.finallyLoc); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, \\\"finallyLoc\\\") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } finallyEntry && (\\\"break\\\" === type || \\\"continue\\\" === type) && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc && (finallyEntry = null); var record = finallyEntry ? finallyEntry.completion : {}; return record.type = type, record.arg = arg, finallyEntry ? (this.method = \\\"next\\\", this.next = finallyEntry.finallyLoc, ContinueSentinel) : this.complete(record); }, complete: function complete(record, afterLoc) { if (\\\"throw\\\" === record.type) throw record.arg; return \\\"break\\\" === record.type || \\\"continue\\\" === record.type ? this.next = record.arg : \\\"return\\\" === record.type ? (this.rval = this.arg = record.arg, this.method = \\\"return\\\", this.next = \\\"end\\\") : \\\"normal\\\" === record.type && afterLoc && (this.next = afterLoc), ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) return this.complete(entry.completion, entry.afterLoc), resetTryEntry(entry), ContinueSentinel; } }, \\\"catch\\\": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (\\\"throw\\\" === record.type) { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error(\\\"illegal catch attempt\\\"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { return this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }, \\\"next\\\" === this.method && (this.arg = undefined), ContinueSentinel; } }, exports; }\\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \\\"next\\\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \\\"throw\\\", err); } _next(undefined); }); }; }\\nvar recipes = function recipes() {\\n  var disableDecreaseButton = function disableDecreaseButton($decrease) {\\n    $decrease.classList.add(\\\"disabled\\\");\\n    $decrease.disabled = true;\\n  };\\n  var enableDecreaseButton = function enableDecreaseButton($decrease) {\\n    $decrease.classList.remove(\\\"disabled\\\");\\n    $decrease.disabled = false;\\n  };\\n  var updateNumericalValues = function updateNumericalValues($quantity, $decrease, $change, $nutritionContainer, $ingredientsContainer, isOldStyleIngredients) {\\n    //Extract the Current Quantity from the Product Controls\\n    var qty = parseInt($quantity.textContent);\\n\\n    //Update with chosen change\\n    qty += $change;\\n\\n    //Update the Value in Product Controls\\n    $quantity.textContent = qty;\\n    if (qty > 1) {\\n      enableDecreaseButton($decrease);\\n    } else {\\n      disableDecreaseButton($decrease);\\n    }\\n\\n    //Multiply Nutritional Information by this value\\n    if ($nutritionContainer) {\\n      var $nutritionNumbers = $nutritionContainer.querySelectorAll(\\\".nutrition-number\\\");\\n      if ($nutritionNumbers.length > 0) {\\n        $nutritionNumbers.forEach(function ($nutritionNumber) {\\n          var originalValue = parseFloat($nutritionNumber.dataset.number);\\n          if (!isNaN(originalValue)) {\\n            var multipliedValue = originalValue * qty;\\n            $nutritionNumber.textContent = parseFloat(multipliedValue.toFixed(2));\\n          }\\n        });\\n      }\\n    }\\n\\n    //If using the new design, multiply the quantities in the ingredients\\n    if (!isOldStyleIngredients) {\\n      if ($ingredientsContainer) {\\n        var $amountsToUpdate = $ingredientsContainer.querySelectorAll(\\\".amount-wrapper .amount\\\");\\n        if ($amountsToUpdate.length > 0) {\\n          $amountsToUpdate.forEach(function ($amountToUpdate) {\\n            var originalAmount = parseFloat($amountToUpdate.dataset.originalAmount);\\n            if (!isNaN(originalAmount)) {\\n              var multipliedValue = originalAmount * qty;\\n              $amountToUpdate.textContent = parseFloat(multipliedValue.toFixed(2));\\n            }\\n          });\\n        }\\n      }\\n    }\\n  };\\n  var addToBundleAndRelocate = function addToBundleAndRelocate($linkedProductContainer) {\\n    if ($linkedProductContainer.dataset.buildBundleUrl) {\\n      var bundleId = \\\"bundle_\\\" + Date.now();\\n      var bundleUrl = $linkedProductContainer.dataset.buildBundleUrl;\\n      var bundle = {\\n        bundleId: bundleId,\\n        items: {}\\n      };\\n\\n      //Ensure the bear minimum is present\\n      var id = $linkedProductContainer.dataset.id;\\n      var productTitle = $linkedProductContainer.dataset.title;\\n      var productPrice = $linkedProductContainer.dataset.price;\\n      var productPriceString = $linkedProductContainer.dataset.priceString;\\n      var productImage = $linkedProductContainer.dataset.image;\\n      if (id && productTitle && productPrice && productPriceString && productImage) {\\n        bundle.items[id] = {\\n          title: productTitle,\\n          price: productPrice,\\n          priceString: productPriceString,\\n          comparePrice: $linkedProductContainer.dataset.compareProductPrice,\\n          comparePriceString: $linkedProductContainer.dataset.compareProductPriceString,\\n          image: productImage,\\n          quantity: 1\\n        };\\n\\n        //Save Bundle\\n        localStorage.setItem(\\\"bundle\\\", JSON.stringify(bundle));\\n\\n        //Go to bundle builder\\n        window.location.href = bundleUrl;\\n      } else {\\n        alert(\\\"An error has occurred - unable to add the desired product to your bundle.\\\");\\n        console.log(\\\"One or more of the following variables were not set: id && productTitle && productPrice && productPriceString && productImage\\\");\\n      }\\n    } else {\\n      alert(\\\"An error has occurred - unable to navigate to the Build a Bundle page\\\");\\n    }\\n  };\\n  function getDynamicBundle() {\\n    return _getDynamicBundle.apply(this, arguments);\\n  }\\n  function _getDynamicBundle() {\\n    _getDynamicBundle = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {\\n      var response, data;\\n      return _regeneratorRuntime().wrap(function _callee$(_context) {\\n        while (1) switch (_context.prev = _context.next) {\\n          case 0:\\n            _context.next = 2;\\n            return fetch('https://api.skio.com/storefront-http/get-dynamic-box', {\\n              method: 'POST',\\n              headers: {\\n                \\\"Content-Type\\\": \\\"application/json\\\"\\n              },\\n              body: JSON.stringify({\\n                \\\"productPlatformId\\\": \\\"15345685561727\\\"\\n              })\\n            });\\n          case 2:\\n            response = _context.sent;\\n            _context.next = 5;\\n            return response.json();\\n          case 5:\\n            data = _context.sent;\\n            return _context.abrupt(\\\"return\\\", data);\\n          case 7:\\n          case \\\"end\\\":\\n            return _context.stop();\\n        }\\n      }, _callee);\\n    }));\\n    return _getDynamicBundle.apply(this, arguments);\\n  }\\n  function setupLinkedProducts(_x) {\\n    return _setupLinkedProducts.apply(this, arguments);\\n  }\\n  function _setupLinkedProducts() {\\n    _setupLinkedProducts = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2($linkedProductContainers) {\\n      var linkedProductHandle, isAvailableInBab, dynamicBoxData, availableHandles;\\n      return _regeneratorRuntime().wrap(function _callee2$(_context2) {\\n        while (1) switch (_context2.prev = _context2.next) {\\n          case 0:\\n            //First step - ensure our product is actually available in the Build a Bundle\\n            linkedProductHandle = \\\"\\\";\\n            isAvailableInBab = false;\\n            $linkedProductContainers.forEach(function ($linkedProductContainer) {\\n              linkedProductHandle = $linkedProductContainer.dataset.handle;\\n            });\\n            if (!linkedProductHandle) {\\n              _context2.next = 8;\\n              break;\\n            }\\n            _context2.next = 6;\\n            return getDynamicBundle();\\n          case 6:\\n            dynamicBoxData = _context2.sent;\\n            if (dynamicBoxData.ok) {\\n              availableHandles = new Set(dynamicBoxData.DynamicBox.selectableProductVariants.map(function (item) {\\n                return item.productHandle;\\n              }));\\n              if (availableHandles.has(linkedProductHandle)) {\\n                isAvailableInBab = true;\\n              }\\n            }\\n          case 8:\\n            $linkedProductContainers.forEach(function ($linkedProductContainer) {\\n              var $productControls = $linkedProductContainer.querySelector(\\\".product-controls\\\");\\n              if ($productControls) {\\n                var $productControlsOos = $linkedProductContainer.querySelector(\\\".product-controls-oos\\\");\\n                if ($productControlsOos) {\\n                  if (isAvailableInBab) {\\n                    $productControls.classList.remove(\\\"hidden\\\");\\n\\n                    //find and bind the quick add button\\n                    var $quickAddBtn = $productControls.querySelector(\\\".product-quantity__increase\\\");\\n                    if ($quickAddBtn) {\\n                      $quickAddBtn.addEventListener(\\\"click\\\", function (e) {\\n                        e.preventDefault();\\n                        var confirmationNeed = false;\\n                        var existingBundle = localStorage.getItem('bundle');\\n                        if (existingBundle) {\\n                          var existingBundleParsed = JSON.parse(existingBundle);\\n                          if (!existingBundleParsed.editing_bundle) {\\n                            confirmationNeed = true;\\n                          }\\n                        }\\n                        if (confirmationNeed) {\\n                          var restartText = \\\"This will remove any current Bundle progress and start again. Are you sure?\\\";\\n                          if ($linkedProductContainer.dataset.restartBundleText) {\\n                            restartText = $linkedProductContainer.dataset.restartBundleText;\\n                          }\\n                          var answer = confirm(restartText);\\n                          if (answer) {\\n                            // user clicked OK\\n                            addToBundleAndRelocate($linkedProductContainer);\\n                          }\\n                        } else {\\n                          addToBundleAndRelocate($linkedProductContainer);\\n                        }\\n                      });\\n                    }\\n                  } else {\\n                    $productControlsOos.classList.remove(\\\"hidden\\\");\\n                  }\\n                }\\n              }\\n            });\\n          case 9:\\n          case \\\"end\\\":\\n            return _context2.stop();\\n        }\\n      }, _callee2);\\n    }));\\n    return _setupLinkedProducts.apply(this, arguments);\\n  }\\n  var $recipeContainer = document.querySelector(\\\".article-template\\\");\\n  if ($recipeContainer) {\\n    var $linkedProductContainers = $recipeContainer.querySelectorAll(\\\".recipe-linked-product\\\");\\n    if ($linkedProductContainers.length > 0) {\\n      setupLinkedProducts($linkedProductContainers);\\n    }\\n\\n    //Handle Tabs and Serving Multipliers\\n    var isOldStyleIngredients = false;\\n    var $nutritionContainer = $recipeContainer.querySelector(\\\".nutrition-container\\\");\\n    var $ingredientsContainer = $recipeContainer.querySelector(\\\".ingredients-container\\\");\\n    var $recipeTabs = $recipeContainer.querySelectorAll(\\\".recipe-tabs .recipe-tab\\\");\\n    var $servingModifierWrapper = $recipeContainer.querySelector(\\\".recipe-controls-container\\\");\\n    var $servingModifierContainer = $servingModifierWrapper === null || $servingModifierWrapper === void 0 ? void 0 : $servingModifierWrapper.querySelector(\\\".recipe-controls\\\");\\n    if ($ingredientsContainer) {\\n      if ($ingredientsContainer.classList.contains(\\\"old-style-ingredients\\\")) {\\n        isOldStyleIngredients = true;\\n      }\\n    }\\n    if ($recipeTabs.length > 0) {\\n      $recipeTabs.forEach(function ($recipeTab) {\\n        $recipeTab.addEventListener(\\\"click\\\", function (e) {\\n          e.preventDefault();\\n          if (!$recipeTab.classList.contains(\\\"active\\\")) {\\n            if ($recipeTab.dataset.contentGroup == \\\"ingredients\\\") {\\n              $nutritionContainer.classList.remove(\\\"active\\\");\\n              $ingredientsContainer.classList.add(\\\"active\\\");\\n              if (isOldStyleIngredients) {\\n                $servingModifierWrapper.classList.add(\\\"hide\\\");\\n              }\\n            } else {\\n              $nutritionContainer.classList.add(\\\"active\\\");\\n              $ingredientsContainer.classList.remove(\\\"active\\\");\\n              if (isOldStyleIngredients) {\\n                $servingModifierWrapper.classList.remove(\\\"hide\\\");\\n              }\\n            }\\n            $recipeTabs.forEach(function ($rcpTb) {\\n              $rcpTb.classList.toggle(\\\"active\\\");\\n            });\\n          }\\n        });\\n      });\\n    }\\n    if ($servingModifierContainer) {\\n      //Bind Plus and Minus Buttons\\n      var $decrease = $servingModifierContainer.querySelector(\\\".recipe-quantity__decrease\\\");\\n      var $increase = $servingModifierContainer.querySelector(\\\".recipe-quantity__increase\\\");\\n      var $quantity = $servingModifierContainer.querySelector(\\\".recipe-quantity-container .recipe-quantity\\\");\\n      if ($decrease && $increase && $quantity) {\\n        $decrease.addEventListener(\\\"click\\\", function (e) {\\n          e.preventDefault();\\n          updateNumericalValues($quantity, $decrease, -1, $nutritionContainer, $ingredientsContainer, isOldStyleIngredients);\\n        });\\n        $increase.addEventListener(\\\"click\\\", function (e) {\\n          e.preventDefault();\\n          updateNumericalValues($quantity, $decrease, 1, $nutritionContainer, $ingredientsContainer, isOldStyleIngredients);\\n        });\\n      }\\n    }\\n\\n    //Bind Metafield Video controls\\n    var $articleVideoContainer = $recipeContainer.querySelector(\\\".article-video-container\\\");\\n    if ($articleVideoContainer) {\\n      var $video = $articleVideoContainer.querySelector(\\\"video\\\");\\n      var $videoButton = $articleVideoContainer.querySelector(\\\".video-control-button\\\");\\n      if ($video && $videoButton) {\\n        $videoButton.addEventListener(\\\"click\\\", function (e) {\\n          if ($videoButton.classList.contains(\\\"video-playing\\\")) {\\n            $videoButton.classList.remove(\\\"video-playing\\\");\\n            $video.pause();\\n          } else {\\n            $videoButton.classList.add(\\\"video-playing\\\");\\n            var playPromise = $video.play();\\n            if (playPromise !== undefined) {\\n              playPromise[\\\"catch\\\"](function () {});\\n            }\\n          }\\n        });\\n      } else {\\n        console.log(\\\"Video container is being output but could not find Video and/or the Control Buttons\\\");\\n      }\\n    }\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (recipes);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9yZWNpcGVzL21haW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OytDQUNBO0FBQUE7QUFBQTtBQURPLElBQU1BLE9BQU8sR0FBRyxTQUFWQSxPQUFPLEdBQVM7RUFFekIsSUFBTUMscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQixDQUFJQyxTQUFTLEVBQUs7SUFDekNBLFNBQVMsQ0FBQ0MsU0FBUyxDQUFDQyxHQUFHLENBQUMsVUFBVSxDQUFDO0lBQ25DRixTQUFTLENBQUNHLFFBQVEsR0FBRyxJQUFJO0VBQzdCLENBQUM7RUFFRCxJQUFNQyxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CLENBQUlKLFNBQVMsRUFBSztJQUN4Q0EsU0FBUyxDQUFDQyxTQUFTLENBQUNJLE1BQU0sQ0FBQyxVQUFVLENBQUM7SUFDdENMLFNBQVMsQ0FBQ0csUUFBUSxHQUFHLEtBQUs7RUFDOUIsQ0FBQztFQUVELElBQU1HLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUIsQ0FBSUMsU0FBUyxFQUFDUCxTQUFTLEVBQUNRLE9BQU8sRUFBQ0MsbUJBQW1CLEVBQUNDLHFCQUFxQixFQUFDQyxxQkFBcUIsRUFBSztJQUUzSDtJQUNBLElBQUlDLEdBQUcsR0FBR0MsUUFBUSxDQUFDTixTQUFTLENBQUNPLFdBQVcsQ0FBQzs7SUFFekM7SUFDQUYsR0FBRyxJQUFJSixPQUFPOztJQUVkO0lBQ0FELFNBQVMsQ0FBQ08sV0FBVyxHQUFHRixHQUFHO0lBRTNCLElBQUdBLEdBQUcsR0FBRyxDQUFDLEVBQUM7TUFDUFIsb0JBQW9CLENBQUNKLFNBQVMsQ0FBQztJQUNuQyxDQUFDLE1BQUk7TUFDREQscUJBQXFCLENBQUNDLFNBQVMsQ0FBQztJQUNwQzs7SUFFQTtJQUNBLElBQUdTLG1CQUFtQixFQUFDO01BRW5CLElBQU1NLGlCQUFpQixHQUFHTixtQkFBbUIsQ0FBQ08sZ0JBQWdCLENBQUMsbUJBQW1CLENBQUM7TUFDbkYsSUFBR0QsaUJBQWlCLENB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dHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL3Jlc291cmNlcy9zY3JpcHRzL3NlY3Rpb25zL3JlY2lwZXMvbWFpbi5qcz85YjU3Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCByZWNpcGVzID0gKCkgPT4ge1xyXG5cclxuICAgIGNvbnN0IGRpc2FibGVEZWNyZWFzZUJ1dHRvbiA9ICgkZGVjcmVhc2UpID0+IHtcclxuICAgICAgICAkZGVjcmVhc2UuY2xhc3NMaXN0LmFkZChcImRpc2FibGVkXCIpO1xyXG4gICAgICAgICRkZWNyZWFzZS5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZW5hYmxlRGVjcmVhc2VCdXR0b24gPSAoJGRlY3JlYXNlKSA9PiB7XHJcbiAgICAgICAgJGRlY3JlYXNlLmNsYXNzTGlzdC5yZW1vdmUoXCJkaXNhYmxlZFwiKTtcclxuICAgICAgICAkZGVjcmVhc2UuZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB1cGRhdGVOdW1lcmljYWxWYWx1ZXMgPSAoJHF1YW50aXR5LCRkZWNyZWFzZSwkY2hhbmdlLCRudXRyaXRpb25Db250YWluZXIsJGluZ3JlZGllbnRzQ29udGFpbmVyLGlzT2xkU3R5bGVJbmdyZWRpZW50cykgPT4ge1xyXG5cclxuICAgICAgICAvL0V4dHJhY3QgdGhlIEN1cnJlbnQgUXVhbnRpdHkgZnJvbSB0aGUgUHJvZHVjdCBDb250cm9sc1xyXG4gICAgICAgIGxldCBxdHkgPSBwYXJzZUludCgkcXVhbnRpdHkudGV4dENvbnRlbnQpO1xyXG5cclxuICAgICAgICAvL1VwZGF0ZSB3aXRoIGNob3NlbiBjaGFuZ2VcclxuICAgICAgICBxdHkgKz0gJGNoYW5nZTtcclxuXHJcbiAgICAgICAgLy9VcGRhdGUgdGhlIFZhbHVlIGluIFByb2R1Y3QgQ29udHJvbHNcclxuICAgICAgICAkcXVhbnRpdHkudGV4dENvbnRlbnQgPSBxdHk7XHJcblxyXG4gICAgICAgIGlmKHF0eSA+IDEpe1xyXG4gICAgICAgICAgICBlbmFibGVEZWNyZWFzZUJ1dHRvbigkZGVjcmVhc2UpOyAgICAgICAgICAgIFxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBkaXNhYmxlRGVjcmVhc2VCdXR0b24oJGRlY3JlYXNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vTXVsdGlwbHkgTnV0cml0aW9uYWwgSW5mb3JtYXRpb24gYnkgdGhpcyB2YWx1ZVxyXG4gICAgICAgIGlmKCRudXRyaXRpb25Db250YWluZXIpe1xyXG5cclxuICAgICAgICAgICAgY29uc3QgJG51dHJpdGlvbk51bWJlcnMgPSAkbnV0cml0aW9uQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCIubnV0cml0aW9uLW51bWJlclwiKTtcclxuICAgICAgICAgICAgaWYoJG51dHJpdGlvbk51bWJlcnMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICAkbnV0cml0aW9uTnVtYmVycy5mb3JFYWNoKCgkbnV0cml0aW9uTnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxWYWx1ZSA9IHBhcnNlRmxvYXQoJG51dHJpdGlvbk51bWJlci5kYXRhc2V0Lm51bWJlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmKCFpc05hTihvcmlnaW5hbFZhbHVlKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpcGxpZWRWYWx1ZSA9IG9yaWdpbmFsVmFsdWUgKiBxdHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRudXRyaXRpb25OdW1iZXIudGV4dENvbnRlbnQgPSBwYXJzZUZsb2F0KG11bHRpcGxpZWRWYWx1ZS50b0ZpeGVkKDIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL0lmIHVzaW5nIHRoZSBuZXcgZGVzaWduLCBtdWx0aXBseSB0aGUgcXVhbnRpdGllcyBpbiB0aGUgaW5ncmVkaWVudHNcclxuICAgICAgICBpZighaXNPbGRTdHlsZUluZ3JlZGllbnRzKXtcclxuICAgICAgICAgICAgaWYoJGluZ3JlZGllbnRzQ29udGFpbmVyKXtcclxuICAgICAgICAgICAgICAgIGNvbnN0ICRhbW91bnRzVG9VcGRhdGUgPSAkaW5ncmVkaWVudHNDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIi5hbW91bnQtd3JhcHBlciAuYW1vdW50XCIpO1xyXG4gICAgICAgICAgICAgICAgaWYoJGFtb3VudHNUb1VwZGF0ZS5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgICAgICAgICAkYW1vdW50c1RvVXBkYXRlLmZvckVhY2goKCRhbW91bnRUb1VwZGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbEFtb3VudCA9IHBhcnNlRmxvYXQoJGFtb3VudFRvVXBkYXRlLmRhdGFzZXQub3JpZ2luYWxBbW91bnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZighaXNOYU4ob3JpZ2luYWxBbW91bnQpKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpcGxpZWRWYWx1ZSA9IG9yaWdpbmFsQW1vdW50ICogcXR5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFtb3VudFRvVXBkYXRlLnRleHRDb250ZW50ID0gcGFyc2VGbG9hdChtdWx0aXBsaWVkVmFsdWUudG9GaXhlZCgyKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhZGRUb0J1bmRsZUFuZFJlbG9jYXRlID0gKCRsaW5rZWRQcm9kdWN0Q29udGFpbmVyKSA9PiB7XHJcblxyXG4gICAgICAgIGlmKCRsaW5rZWRQcm9kdWN0Q29udGFpbmVyLmRhdGFzZXQuYnVpbGRCdW5kbGVVcmwpe1xyXG5cclxuICAgICAgICAgICAgY29uc3QgYnVuZGxlSWQgPSBcImJ1bmRsZV9cIiArIERhdGUubm93KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1bmRsZVVybCA9ICRsaW5rZWRQcm9kdWN0Q29udGFpbmVyLmRhdGFzZXQuYnVpbGRCdW5kbGVVcmw7XHJcblxyXG4gICAgICAgICAgICBsZXQgYnVuZGxlID0ge1xyXG4gICAgICAgICAgICAgICAgYnVuZGxlSWQ6IGJ1bmRsZUlkLFxyXG4gICAgICAgICAgICAgICAgaXRlbXM6IHt9XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAvL0Vuc3VyZSB0aGUgYmVhciBtaW5pbXVtIGlzIHByZXNlbnRcclxuICAgICAgICAgICAgY29uc3QgaWQgPSAkbGlua2VkUHJvZHVjdENvbnRhaW5lci5kYXRhc2V0LmlkO1xyXG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0VGl0bGUgPSAkbGlua2VkUHJvZHVjdENvbnRhaW5lci5kYXRhc2V0LnRpdGxlO1xyXG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0UHJpY2UgPSAkbGlua2VkUHJvZHVjdENvbnRhaW5lci5kYXRhc2V0LnByaWNlO1xyXG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0UHJpY2VTdHJpbmcgPSAkbGlua2VkUHJvZHVjdENvbnRhaW5lci5kYXRhc2V0LnByaWNlU3RyaW5nO1xyXG4gICAgICAgICAgICBjb25zdCBwcm9kdWN0SW1hZ2UgPSAkbGlua2VkUHJvZHVjdENvbnRhaW5lci5kYXRhc2V0LmltYWdlO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoaWQgJiYgcHJvZHVjdFRpdGxlICYmIHByb2R1Y3RQcmljZSAmJiBwcm9kdWN0UHJpY2VTdHJpbmcgJiYgcHJvZHVjdEltYWdlKXtcclxuXHJcbiAgICAgICAgICAgICAgICBidW5kbGUuaXRlbXNbaWRdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBwcm9kdWN0VGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJpY2U6IHByb2R1Y3RQcmljZSxcclxuICAgICAgICAgICAgICAgICAgICBwcmljZVN0cmluZzogcHJvZHVjdFByaWNlU3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVQcmljZTogJGxpbmtlZFByb2R1Y3RDb250YWluZXIuZGF0YXNldC5jb21wYXJlUHJvZHVjdFByaWNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBhcmVQcmljZVN0cmluZzogJGxpbmtlZFByb2R1Y3RDb250YWluZXIuZGF0YXNldC5jb21wYXJlUHJvZHVjdFByaWNlU3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBwcm9kdWN0SW1hZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IDEsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIC8vU2F2ZSBCdW5kbGVcclxuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiYnVuZGxlXCIsIEpTT04uc3RyaW5naWZ5KGJ1bmRsZSkpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vR28gdG8gYnVuZGxlIGJ1aWxkZXJcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYnVuZGxlVXJsOyAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBhbGVydChcIkFuIGVycm9yIGhhcyBvY2N1cnJlZCAtIHVuYWJsZSB0byBhZGQgdGhlIGRlc2lyZWQgcHJvZHVjdCB0byB5b3VyIGJ1bmRsZS5cIik7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIk9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIHdlcmUgbm90IHNldDogaWQgJiYgcHJvZHVjdFRpdGxlICYmIHByb2R1Y3RQcmljZSAmJiBwcm9kdWN0UHJpY2VTdHJpbmcgJiYgcHJvZHVjdEltYWdlXCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgYWxlcnQoXCJBbiBlcnJvciBoYXMgb2NjdXJyZWQgLSB1bmFibGUgdG8gbmF2aWdhdGUgdG8gdGhlIEJ1aWxkIGEgQnVuZGxlIHBhZ2VcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZ1bmN0aW9uIGdldER5bmFtaWNCdW5kbGUgKCl7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9hcGkuc2tpby5jb20vc3RvcmVmcm9udC1odHRwL2dldC1keW5hbWljLWJveCcsIHtcclxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgIFwicHJvZHVjdFBsYXRmb3JtSWRcIjogXCIxNTM0NTY4NTU2MTcyN1wiXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBzZXR1cExpbmtlZFByb2R1Y3RzICgkbGlua2VkUHJvZHVjdENvbnRhaW5lcnMpIHtcclxuICAgICAgICBcclxuICAgICAgICAvL0ZpcnN0IHN0ZXAgLSBlbnN1cmUgb3VyIHByb2R1Y3QgaXMgYWN0dWFsbHkgYXZhaWxhYmxlIGluIHRoZSBCdWlsZCBhIEJ1bmRsZVxyXG5cclxuICAgICAgICBsZXQgbGlua2VkUHJvZHVjdEhhbmRsZSA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGlzQXZhaWxhYmxlSW5CYWIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgJGxpbmtlZFByb2R1Y3RDb250YWluZXJzLmZvckVhY2goKCRsaW5rZWRQcm9kdWN0Q29udGFpbmVyKSA9PiB7XHJcbiAgICAgICAgICAgIGxpbmtlZFByb2R1Y3RIYW5kbGUgPSAkbGlua2VkUHJvZHVjdENvbnRhaW5lci5kYXRhc2V0LmhhbmRsZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYobGlua2VkUHJvZHVjdEhhbmRsZSl7XHJcbiAgICAgICAgICAgIGNvbnN0IGR5bmFtaWNCb3hEYXRhID0gYXdhaXQgZ2V0RHluYW1pY0J1bmRsZSgpO1xyXG5cclxuICAgICAgICAgICAgaWYoZHluYW1pY0JveERhdGEub2spe1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjb25zdCBhdmFpbGFibGVIYW5kbGVzID0gbmV3IFNldChkeW5hbWljQm94RGF0YS5EeW5hbWljQm94LnNlbGVjdGFibGVQcm9kdWN0VmFyaWFudHMubWFwKGl0ZW0gPT4gaXRlbS5wcm9kdWN0SGFuZGxlKSk7XHJcbiAgICAgICAgICAgICAgICBpZihhdmFpbGFibGVIYW5kbGVzLmhhcyhsaW5rZWRQcm9kdWN0SGFuZGxlKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNBdmFpbGFibGVJbkJhYiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICRsaW5rZWRQcm9kdWN0Q29udGFpbmVycy5mb3JFYWNoKCgkbGlua2VkUHJvZHVjdENvbnRhaW5lcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCAkcHJvZHVjdENvbnRyb2xzID0gJGxpbmtlZFByb2R1Y3RDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LWNvbnRyb2xzXCIpO1xyXG4gICAgICAgICAgICBpZigkcHJvZHVjdENvbnRyb2xzKXtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCAkcHJvZHVjdENvbnRyb2xzT29zID0gJGxpbmtlZFByb2R1Y3RDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LWNvbnRyb2xzLW9vc1wiKTtcclxuICAgICAgICAgICAgICAgIGlmKCRwcm9kdWN0Q29udHJvbHNPb3Mpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGlzQXZhaWxhYmxlSW5CYWIpe1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJHByb2R1Y3RDb250cm9scy5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9maW5kIGFuZCBiaW5kIHRoZSBxdWljayBhZGQgYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0ICRxdWlja0FkZEJ0biA9ICRwcm9kdWN0Q29udHJvbHMucXVlcnlTZWxlY3RvcihcIi5wcm9kdWN0LXF1YW50aXR5X19pbmNyZWFzZVwiKTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoJHF1aWNrQWRkQnRuKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRxdWlja0FkZEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmZpcm1hdGlvbk5lZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0J1bmRsZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdidW5kbGUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihleGlzdGluZ0J1bmRsZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQnVuZGxlUGFyc2VkID0gSlNPTi5wYXJzZShleGlzdGluZ0J1bmRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFleGlzdGluZ0J1bmRsZVBhcnNlZC5lZGl0aW5nX2J1bmRsZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtYXRpb25OZWVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoY29uZmlybWF0aW9uTmVlZCl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdGFydFRleHQgPSBcIlRoaXMgd2lsbCByZW1vdmUgYW55IGN1cnJlbnQgQnVuZGxlIHByb2dyZXNzIGFuZCBzdGFydCBhZ2Fpbi4gQXJlIHlvdSBzdXJlP1wiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkbGlua2VkUHJvZHVjdENvbnRhaW5lci5kYXRhc2V0LnJlc3RhcnRCdW5kbGVUZXh0KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RhcnRUZXh0ID0gJGxpbmtlZFByb2R1Y3RDb250YWluZXIuZGF0YXNldC5yZXN0YXJ0QnVuZGxlVGV4dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gY29uZmlybShyZXN0YXJ0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZXIgY2xpY2tlZCBPS1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9CdW5kbGVBbmRSZWxvY2F0ZSgkbGlua2VkUHJvZHVjdENvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9CdW5kbGVBbmRSZWxvY2F0ZSgkbGlua2VkUHJvZHVjdENvbnRhaW5lcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgIFxyXG5cclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHByb2R1Y3RDb250cm9sc09vcy5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjb25zdCAkcmVjaXBlQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5hcnRpY2xlLXRlbXBsYXRlXCIpO1xyXG4gICAgaWYoJHJlY2lwZUNvbnRhaW5lcil7XHJcblxyXG4gICAgICAgIGNvbnN0ICRsaW5rZWRQcm9kdWN0Q29udGFpbmVycyA9ICRyZWNpcGVDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIi5yZWNpcGUtbGlua2VkLXByb2R1Y3RcIik7XHJcbiAgICAgICAgaWYoJGxpbmtlZFByb2R1Y3RDb250YWluZXJzLmxlbmd0aCA+IDApe1xyXG5cclxuICAgICAgICAgICAgc2V0dXBMaW5rZWRQcm9kdWN0cygkbGlua2VkUHJvZHVjdENvbnRhaW5lcnMpOyAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvL0hhbmRsZSBUYWJzIGFuZCBTZXJ2aW5nIE11bHRpcGxpZXJzXHJcbiAgICAgICAgbGV0IGlzT2xkU3R5bGVJbmdyZWRpZW50cyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBjb25zdCAkbnV0cml0aW9uQ29udGFpbmVyID0gJHJlY2lwZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLm51dHJpdGlvbi1jb250YWluZXJcIik7XHJcbiAgICAgICAgY29uc3QgJGluZ3JlZGllbnRzQ29udGFpbmVyID0gJHJlY2lwZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmluZ3JlZGllbnRzLWNvbnRhaW5lclwiKTtcclxuICAgICAgICBjb25zdCAkcmVjaXBlVGFicyA9ICRyZWNpcGVDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIi5yZWNpcGUtdGFicyAucmVjaXBlLXRhYlwiKTtcclxuICAgICAgICBjb25zdCAkc2VydmluZ01vZGlmaWVyV3JhcHBlciA9ICRyZWNpcGVDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5yZWNpcGUtY29udHJvbHMtY29udGFpbmVyXCIpO1xyXG4gICAgICAgIGNvbnN0ICRzZXJ2aW5nTW9kaWZpZXJDb250YWluZXIgPSAkc2VydmluZ01vZGlmaWVyV3JhcHBlcj8ucXVlcnlTZWxlY3RvcihcIi5yZWNpcGUtY29udHJvbHNcIik7XHJcblxyXG4gICAgICAgIGlmKCRpbmdyZWRpZW50c0NvbnRhaW5lcil7XHJcbiAgICAgICAgICAgIGlmKCRpbmdyZWRpZW50c0NvbnRhaW5lci5jbGFzc0xpc3QuY29udGFpbnMoXCJvbGQtc3R5bGUtaW5ncmVkaWVudHNcIikpe1xyXG4gICAgICAgICAgICAgICAgaXNPbGRTdHlsZUluZ3JlZGllbnRzID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoJHJlY2lwZVRhYnMubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgICAgICAgICAkcmVjaXBlVGFicy5mb3JFYWNoKCgkcmVjaXBlVGFiKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAkcmVjaXBlVGFiLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLChlKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZighJHJlY2lwZVRhYi5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZigkcmVjaXBlVGFiLmRhdGFzZXQuY29udGVudEdyb3VwID09IFwiaW5ncmVkaWVudHNcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRudXRyaXRpb25Db250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbmdyZWRpZW50c0NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzT2xkU3R5bGVJbmdyZWRpZW50cyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlcnZpbmdNb2RpZmllcldyYXBwZXIuY2xhc3NMaXN0LmFkZChcImhpZGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRudXRyaXRpb25Db250YWluZXIuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbmdyZWRpZW50c0NvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzT2xkU3R5bGVJbmdyZWRpZW50cyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNlcnZpbmdNb2RpZmllcldyYXBwZXIuY2xhc3NMaXN0LnJlbW92ZShcImhpZGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRyZWNpcGVUYWJzLmZvckVhY2goKCRyY3BUYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJjcFRiLmNsYXNzTGlzdC50b2dnbGUoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCRzZXJ2aW5nTW9kaWZpZXJDb250YWluZXIpe1xyXG5cclxuICAgICAgICAgICAgLy9CaW5kIFBsdXMgYW5kIE1pbnVzIEJ1dHRvbnNcclxuICAgICAgICAgICAgY29uc3QgJGRlY3JlYXNlID0gJHNlcnZpbmdNb2RpZmllckNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLnJlY2lwZS1xdWFudGl0eV9fZGVjcmVhc2VcIik7XHJcbiAgICAgICAgICAgIGNvbnN0ICRpbmNyZWFzZSA9ICRzZXJ2aW5nTW9kaWZpZXJDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5yZWNpcGUtcXVhbnRpdHlfX2luY3JlYXNlXCIpO1xyXG4gICAgICAgICAgICBjb25zdCAkcXVhbnRpdHkgPSAkc2VydmluZ01vZGlmaWVyQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIucmVjaXBlLXF1YW50aXR5LWNvbnRhaW5lciAucmVjaXBlLXF1YW50aXR5XCIpO1xyXG5cclxuICAgICAgICAgICAgaWYoJGRlY3JlYXNlICYmICRpbmNyZWFzZSAmJiAkcXVhbnRpdHkpe1xyXG5cclxuICAgICAgICAgICAgICAgICRkZWNyZWFzZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlTnVtZXJpY2FsVmFsdWVzKCRxdWFudGl0eSwkZGVjcmVhc2UsLTEsJG51dHJpdGlvbkNvbnRhaW5lciwkaW5ncmVkaWVudHNDb250YWluZXIsaXNPbGRTdHlsZUluZ3JlZGllbnRzKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICRpbmNyZWFzZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlTnVtZXJpY2FsVmFsdWVzKCRxdWFudGl0eSwkZGVjcmVhc2UsMSwkbnV0cml0aW9uQ29udGFpbmVyLCRpbmdyZWRpZW50c0NvbnRhaW5lcixpc09sZFN0eWxlSW5ncmVkaWVudHMpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICAgXHJcblxyXG4gICAgICAgIC8vQmluZCBNZXRhZmllbGQgVmlkZW8gY29udHJvbHNcclxuICAgICAgICBjb25zdCAkYXJ0aWNsZVZpZGVvQ29udGFpbmVyID0gJHJlY2lwZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmFydGljbGUtdmlkZW8tY29udGFpbmVyXCIpO1xyXG4gICAgICAgIGlmKCRhcnRpY2xlVmlkZW9Db250YWluZXIpe1xyXG4gICAgICAgICAgICBjb25zdCAkdmlkZW8gPSAkYXJ0aWNsZVZpZGVvQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCJ2aWRlb1wiKTtcclxuICAgICAgICAgICAgY29uc3QgJHZpZGVvQnV0dG9uID0gJGFydGljbGVWaWRlb0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLnZpZGVvLWNvbnRyb2wtYnV0dG9uXCIpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoJHZpZGVvICYmICR2aWRlb0J1dHRvbil7XHJcbiAgICAgICAgICAgICAgICAkdmlkZW9CdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZigkdmlkZW9CdXR0b24uY2xhc3NMaXN0LmNvbnRhaW5zKFwidmlkZW8tcGxheWluZ1wiKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICR2aWRlb0J1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwidmlkZW8tcGxheWluZ1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJHZpZGVvLnBhdXNlKCk7ICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICR2aWRlb0J1dHRvbi5jbGFzc0xpc3QuYWRkKFwidmlkZW8tcGxheWluZ1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGxheVByb21pc2UgPSAkdmlkZW8ucGxheSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGxheVByb21pc2UgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheVByb21pc2UuY2F0Y2goKCkgPT4ge30pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJWaWRlbyBjb250YWluZXIgaXMgYmVpbmcgb3V0cHV0IGJ1dCBjb3VsZCBub3QgZmluZCBWaWRlbyBhbmQvb3IgdGhlIENvbnRyb2wgQnV0dG9uc1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCByZWNpcGVzOyAgICAiXSwibmFtZXMiOlsicmVjaXBlcyIsImRpc2FibGVEZWNyZWFzZUJ1dHRvbiIsIiRkZWNyZWFzZSIsImNsYXNzTGlzdCIsImFkZCIsImRpc2FibGVkIiwiZW5hYmxlRGVjcmVhc2VCdXR0b24iLCJyZW1vdmUiLCJ1cGRhdGVOdW1lcmljYWxWYWx1ZXMiLCIkcXVhbnRpdHkiLCIkY2hhbmdlIiwiJG51dHJpdGlvbkNvbnRhaW5lciIsIiRpbmdyZWRpZW50c0NvbnRhaW5lciIsImlzT2xkU3R5bGVJbmdyZWRpZW50cyIsInF0eSIsInBhcnNlSW50IiwidGV4dENvbnRlbnQiLCIkbnV0cml0aW9uTnVtYmVycyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJmb3JFYWNoIiwiJG51dHJpdGlvbk51bWJlciIsIm9yaWdpbmFsVmFsdWUiLCJwYXJzZUZsb2F0IiwiZGF0YXNldCIsIm51bWJlciIsImlzTmFOIiwibXVsdGlwbGllZFZhbHVlIiwidG9GaXhlZCIsIiRhbW91bnRzVG9VcGRhdGUiLCIkYW1vdW50VG9VcGRhdGUiLCJvcmlnaW5hbEFtb3VudCIsImFkZFRvQnVuZGxlQW5kUmVsb2NhdGUiLCIkbGlua2VkUHJvZHVjdENvbnRhaW5lciIsImJ1aWxkQnVuZGxlVXJsIiwiYnVuZGxlSWQiLCJEYXRlIiwibm93IiwiYnVuZGxlVXJsIiwiYnVuZGxlIiwiaXRlbXMiLCJpZCIsInByb2R1Y3RUaXRsZSIsInRpdGxlIiwicHJvZHVjdFByaWNlIiwicHJpY2UiLCJwcm9kdWN0UHJpY2VTdHJpbmciLCJwcmljZVN0cmluZyIsInByb2R1Y3RJbWFnZSIsImltYWdlIiwiY29tcGFyZVByaWNlIiwiY29tcGFyZVByb2R1Y3RQcmljZSIsImNvbXBhcmVQcmljZVN0cmluZyIsImNvbXBhcmVQcm9kdWN0UHJpY2VTdHJpbmciLCJxdWFudGl0eSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJKU09OIiwic3RyaW5naWZ5Iiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiYWxlcnQiLCJjb25zb2xlIiwibG9nIiwiZ2V0RHluYW1pY0J1bmRsZSIsImZldGNoIiwibWV0aG9kIiwiaGVhZGVycyIsImJvZHkiLCJyZXNwb25zZSIsImpzb24iLCJkYXRhIiwic2V0dXBMaW5rZWRQcm9kdWN0cyIsIiRsaW5rZWRQcm9kdWN0Q29udGFpbmVycyIsImxpbmtlZFByb2R1Y3RIYW5kbGUiLCJpc0F2YWlsYWJsZUluQmFiIiwiaGFuZGxlIiwiZHluYW1pY0JveERhdGEiLCJvayIsImF2YWlsYWJsZUhhbmRsZXMiLCJTZXQiLCJEeW5hbWljQm94Iiwic2VsZWN0YWJsZVByb2R1Y3RWYXJpYW50cyIsIm1hcCIsIml0ZW0iLCJwcm9kdWN0SGFuZGxlIiwiaGFzIiwiJHByb2R1Y3RDb250cm9scyIsInF1ZXJ5U2VsZWN0b3IiLCIkcHJvZHVjdENvbnRyb2xzT29zIiwiJHF1aWNrQWRkQnRuIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImNvbmZpcm1hdGlvbk5lZWQiLCJleGlzdGluZ0J1bmRsZSIsImdldEl0ZW0iLCJleGlzdGluZ0J1bmRsZVBhcnNlZCIsInBhcnNlIiwiZWRpdGluZ19idW5kbGUiLCJyZXN0YXJ0VGV4dCIsInJlc3RhcnRCdW5kbGVUZXh0IiwiYW5zd2VyIiwiY29uZmlybSIsIiRyZWNpcGVDb250YWluZXIiLCJkb2N1bWVudCIsIiRyZWNpcGVUYWJzIiwiJHNlcnZpbmdNb2RpZmllcldyYXBwZXIiLCIkc2VydmluZ01vZGlmaWVyQ29udGFpbmVyIiwiY29udGFpbnMiLCIkcmVjaXBlVGFiIiwiY29udGVudEdyb3VwIiwiJHJjcFRiIiwidG9nZ2xlIiwiJGluY3JlYXNlIiwiJGFydGljbGVWaWRlb0NvbnRhaW5lciIsIiR2aWRlbyIsIiR2aWRlb0J1dHRvbiIsInBhdXNlIiwicGxheVByb21pc2UiLCJwbGF5IiwidW5kZWZpbmVkIl0sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/recipes/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/social-clips/main.js\":\r\n/*!*********************************************************!*\\\r\n  !*** ./resources/scripts/sections/social-clips/main.js ***!\r\n  \\*********************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"socialClips\\\": () => (/* binding */ socialClips)\\n/* harmony export */ });\\nvar socialClips = function socialClips() {\\n  var $socialClipsSections = document.querySelectorAll(\\\".section-social-clips\\\");\\n  if ($socialClipsSections.length > 0) {\\n    $socialClipsSections.forEach(function ($socialClipsSection) {\\n      var $gridVideoContainer = $socialClipsSection.querySelector(\\\".grid-video\\\");\\n      if ($gridVideoContainer) {\\n        var video = $gridVideoContainer.querySelector(\\\"video\\\");\\n        if (video) {\\n          //Find and bind the different video controls\\n          var playButton = $gridVideoContainer.querySelector(\\\".play-button\\\");\\n          var volumeButton = $gridVideoContainer.querySelector(\\\".volume-button\\\");\\n          if (playButton && volumeButton) {\\n            //Set the icons\\n            var pauseIcon = playButton.querySelector(\\\".pause-icon\\\");\\n            var playIcon = playButton.querySelector(\\\".play-icon\\\");\\n            var mutedIcon = volumeButton.querySelector(\\\".icon-muted\\\");\\n            var unmutedIcon = volumeButton.querySelector(\\\".icon-unmuted\\\");\\n            if (pauseIcon && playIcon && mutedIcon && unmutedIcon) {\\n              volumeButton.addEventListener(\\\"click\\\", function (e) {\\n                e.preventDefault();\\n                if (mutedIcon.classList.contains(\\\"hidden\\\")) {\\n                  video.muted = true;\\n                  mutedIcon.classList.remove(\\\"hidden\\\");\\n                  unmutedIcon.classList.add(\\\"hidden\\\");\\n                } else {\\n                  video.muted = false;\\n                  mutedIcon.classList.add(\\\"hidden\\\");\\n                  unmutedIcon.classList.remove(\\\"hidden\\\");\\n                }\\n              });\\n              playButton.addEventListener(\\\"click\\\", function (e) {\\n                e.preventDefault();\\n                if (playIcon.classList.contains(\\\"hidden\\\")) {\\n                  video.pause();\\n                  playIcon.classList.remove(\\\"hidden\\\");\\n                  pauseIcon.classList.add(\\\"hidden\\\");\\n                } else {\\n                  video.play();\\n                  playIcon.classList.add(\\\"hidden\\\");\\n                  pauseIcon.classList.remove(\\\"hidden\\\");\\n                }\\n              });\\n            } else {\\n              console.log(\\\"One or more of the icons from the control buttons are not present\\\");\\n            }\\n          } else {\\n            console.log(\\\"System expected to find both a Play button and volume button. One or both missing\\\");\\n          }\\n        }\\n      }\\n    });\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (socialClips);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9zb2NpYWwtY2xpcHMvbWFpbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFPLElBQU1BLFdBQVcsR0FBRyxTQUFkQSxXQUFXLEdBQVM7RUFFN0IsSUFBTUMsb0JBQW9CLEdBQUdDLFFBQVEsQ0FBQ0MsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUM7RUFDL0UsSUFBR0Ysb0JBQW9CLENBQUNHLE1BQU0sR0FBRyxDQUFDLEVBQUM7SUFDL0JILG9CQUFvQixDQUFDSSxPQUFPLENBQUMsVUFBQ0MsbUJBQW1CLEVBQUs7TUFDbEQsSUFBTUMsbUJBQW1CLEdBQUdELG1CQUFtQixDQUFDRSxhQUFhLENBQUMsYUFBYSxDQUFDO01BQzVFLElBQUdELG1CQUFtQixFQUFDO1FBQ25CLElBQU1FLEtBQUssR0FBR0YsbUJBQW1CLENBQUNDLGFBQWEsQ0FBQyxPQUFPLENBQUM7UUFDeEQsSUFBR0MsS0FBSyxFQUFDO1VBRUw7VUFDQSxJQUFNQyxVQUFVLEdBQUdILG1CQUFtQixDQUFDQyxhQUFhLENBQUMsY0FBYyxDQUFDO1VBQ3BFLElBQU1HLFlBQVksR0FBR0osbUJBQW1CLENBQUNDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQztVQUV4RSxJQUFHRSxVQUFVLElBQUlDLFlBQVksRUFBQztZQUUxQjtZQUNBLElBQU1DLFNBQVMsR0FBR0YsVUFBVSxDQUFDRixhQUFhLENBQUMsYUFBYSxDQUFDO1lBQ3pELElBQU1LLFFBQVEsR0FBR0gsVUFBVSxDQUFDRixhQUFhLENBQUMsWUFBWSxDQUFDO1lBQ3ZELElBQU1NLFNBQVMsR0FBR0gsWUFBWSxDQUFDSCxhQUFhLENBQUMsYUFBYSxDQUFDO1lBQzNELElBQU1PLFdBQVcsR0FBR0osWUFBWSxDQUFDSCxhQUFhLENBQUMsZUFBZSxDQUFDO1lBRS9ELElBQUdJLFNBQVMsSUFBSUMsUUFBUSxJQUFJQyxTQUFTLElBQUlDLFdBQVcsRUFBQztjQUNqREosWUFBWSxDQUFDSyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUMsVUFBQ0MsQ0FBQyxFQUFLO2dCQUN6Q0EsQ0FBQyxDQUFDQyxjQUFjLEVBQUU7Z0JBRWxCLElBQUdKLFNBQVMsQ0FBQ0ssU0FBUyxDQUFDQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUM7a0JBQ3RDWCxLQUFLLENBQUNZLEtBQUssR0FBRyxJQUFJO2tCQUNsQlAsU0FBUyxDQUFDSyxTQUFTLENBQUNHLE1BQU0sQ0FBQyxRQUFRLENBQUM7a0JBQ3BDUCxXQUFXLENBQUNJLFNBQVMsQ0FBQ0ksR0FBRyxDQUFDLFFBQVEsQ0FBQztnQkFDdkMsQ0FBQyxNQUFJO2tCQUNEZCxLQUFLLENBQUNZLEtBQUssR0FBRyxLQUFLO2tCQUNuQlAsU0FBUyxDQUFDSyxTQUFTLENBQUNJLEdBQUcsQ0FBQyxRQUFRLENBQUM7a0JBQ2pDUixXQUFXLENBQUNJLFNBQVMsQ0FBQ0csTUFBTSxDQUFDLFFBQVEsQ0FBQztnQkFDMUM7Y0FDSixDQUFDLENBQUM7Y0FFRlosVUFBVSxDQUFDTSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUMsVUFBQ0MsQ0FBQyxFQUFLO2dCQUN2Q0EsQ0FBQyxDQUFDQyxjQUFjLEVBQUU7Z0JBRWxCLElBQUdMLFFBQVEsQ0FBQ00sU0FBUyxDQUFDQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUM7a0JBQ3JDWCxLQUFLLENBQUNlLEtBQUssRUFBRTtrQkFDYlgsUUFBUSxDQUFDTSxTQUFTLENBQUNHLE1BQU0sQ0FBQyxRQUFRLENBQUM7a0JBQ25DVixTQUFTLENBQUNPLFNBQVMsQ0FBQ0ksR0FBRyxDQUFDLFFBQVEsQ0FBQztnQkFDckMsQ0FBQyxNQUFJO2tCQUNEZCxLQUFLLENBQUNnQixJQUFJLEVBQUU7a0JBQ1paLFFBQVEsQ0FBQ00sU0FBUyxDQUFDSSxHQUFHLENBQUMsUUFBUSxDQUFDO2tCQUNoQ1gsU0FBUyxDQUFDTyxTQUFTLENBQUNHLE1BQU0sQ0FBQyxRQUFRLENBQUM7Z0JBQ3hDO2NBQ0osQ0FBQyxDQUFDO1lBQ04sQ0FBQyxNQUFJO2NBQ0RJLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLG1FQUFtRSxDQUFDO1lBQ3BGO1VBQ0osQ0FBQyxNQUFJO1lBQ0RELE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLG1GQUFtRixDQUFDO1VBQ3BHO1FBQ0o7TUFDSjtJQUNKLENBQUMsQ0FBQztFQUNOO0FBQ0osQ0FBQztBQUVELGlFQUFlM0IsV0FBVyIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vcmVzb3VyY2VzL3NjcmlwdHMvc2VjdGlvbnMvc29jaWFsLWNsaXBzL21haW4uanM/MTY5NyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3Qgc29jaWFsQ2xpcHMgPSAoKSA9PiB7XHJcblxyXG4gICAgY29uc3QgJHNvY2lhbENsaXBzU2VjdGlvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnNlY3Rpb24tc29jaWFsLWNsaXBzXCIpO1xyXG4gICAgaWYoJHNvY2lhbENsaXBzU2VjdGlvbnMubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgJHNvY2lhbENsaXBzU2VjdGlvbnMuZm9yRWFjaCgoJHNvY2lhbENsaXBzU2VjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCAkZ3JpZFZpZGVvQ29udGFpbmVyID0gJHNvY2lhbENsaXBzU2VjdGlvbi5xdWVyeVNlbGVjdG9yKFwiLmdyaWQtdmlkZW9cIik7XHJcbiAgICAgICAgICAgIGlmKCRncmlkVmlkZW9Db250YWluZXIpe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmlkZW8gPSAkZ3JpZFZpZGVvQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCJ2aWRlb1wiKTtcclxuICAgICAgICAgICAgICAgIGlmKHZpZGVvKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9GaW5kIGFuZCBiaW5kIHRoZSBkaWZmZXJlbnQgdmlkZW8gY29udHJvbHNcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGF5QnV0dG9uID0gJGdyaWRWaWRlb0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLnBsYXktYnV0dG9uXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvbHVtZUJ1dHRvbiA9ICRncmlkVmlkZW9Db250YWluZXIucXVlcnlTZWxlY3RvcihcIi52b2x1bWUtYnV0dG9uXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZihwbGF5QnV0dG9uICYmIHZvbHVtZUJ1dHRvbil7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL1NldCB0aGUgaWNvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF1c2VJY29uID0gcGxheUJ1dHRvbi5xdWVyeVNlbGVjdG9yKFwiLnBhdXNlLWljb25cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYXlJY29uID0gcGxheUJ1dHRvbi5xdWVyeVNlbGVjdG9yKFwiLnBsYXktaWNvblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXV0ZWRJY29uID0gdm9sdW1lQnV0dG9uLnF1ZXJ5U2VsZWN0b3IoXCIuaWNvbi1tdXRlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5tdXRlZEljb24gPSB2b2x1bWVCdXR0b24ucXVlcnlTZWxlY3RvcihcIi5pY29uLXVubXV0ZWRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihwYXVzZUljb24gJiYgcGxheUljb24gJiYgbXV0ZWRJY29uICYmIHVubXV0ZWRJY29uKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvbHVtZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobXV0ZWRJY29uLmNsYXNzTGlzdC5jb250YWlucyhcImhpZGRlblwiKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvLm11dGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXV0ZWRJY29uLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVubXV0ZWRJY29uLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvLm11dGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGVkSWNvbi5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm11dGVkSWNvbi5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHBsYXlJY29uLmNsYXNzTGlzdC5jb250YWlucyhcImhpZGRlblwiKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZGVvLnBhdXNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlJY29uLmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlSWNvbi5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlby5wbGF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlJY29uLmNsYXNzTGlzdC5hZGQoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlSWNvbi5jbGFzc0xpc3QucmVtb3ZlKFwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIk9uZSBvciBtb3JlIG9mIHRoZSBpY29ucyBmcm9tIHRoZSBjb250cm9sIGJ1dHRvbnMgYXJlIG5vdCBwcmVzZW50XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiU3lzdGVtIGV4cGVjdGVkIHRvIGZpbmQgYm90aCBhIFBsYXkgYnV0dG9uIGFuZCB2b2x1bWUgYnV0dG9uLiBPbmUgb3IgYm90aCBtaXNzaW5nXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgc29jaWFsQ2xpcHM7Il0sIm5hbWVzIjpbInNvY2lhbENsaXBzIiwiJHNvY2lhbENsaXBzU2VjdGlvbnMiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJmb3JFYWNoIiwiJHNvY2lhbENsaXBzU2VjdGlvbiIsIiRncmlkVmlkZW9Db250YWluZXIiLCJxdWVyeVNlbGVjdG9yIiwidmlkZW8iLCJwbGF5QnV0dG9uIiwidm9sdW1lQnV0dG9uIiwicGF1c2VJY29uIiwicGxheUljb24iLCJtdXRlZEljb24iLCJ1bm11dGVkSWNvbiIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwicHJldmVudERlZmF1bHQiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsIm11dGVkIiwicmVtb3ZlIiwiYWRkIiwicGF1c2UiLCJwbGF5IiwiY29uc29sZSIsImxvZyJdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/social-clips/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/socials/main.js\":\r\n/*!****************************************************!*\\\r\n  !*** ./resources/scripts/sections/socials/main.js ***!\r\n  \\****************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"socials\\\": () => (/* binding */ socials)\\n/* harmony export */ });\\n/* harmony import */ var swiper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! swiper */ \\\"./node_modules/swiper/swiper.esm.js\\\");\\n// Import Swiper and modules\\n\\nvar socials = function socials() {\\n  var $socialsSections = document.querySelectorAll(\\\"section.socials\\\");\\n  if ($socialsSections) {\\n    $socialsSections.forEach(function ($socials) {\\n      var $socialsNav = $socials.querySelector(\\\".socials__nav\\\");\\n      var $socialsSwiper = $socials.querySelector(\\\".socials__swiper-container .socials__swiper.swiper\\\");\\n      if ($socialsSwiper) {\\n        var maxSlides = parseInt($socialsSwiper.dataset.maxSlides);\\n        var swiperConfig = {\\n          modules: [swiper__WEBPACK_IMPORTED_MODULE_0__.Navigation, swiper__WEBPACK_IMPORTED_MODULE_0__.Pagination],\\n          direction: \\\"horizontal\\\",\\n          speed: 1000,\\n          // autoplay: {\\n          //   delay: 5000,\\n          // },\\n          // pagination: {\\n          //   bulletActiveClass: \\\"socials__swiper-bullet--active\\\",\\n          //   bulletClass: \\\"socials__swiper-bullet\\\",\\n          //   bulletElement: \\\"button\\\",\\n          //   el: \\\".socials__swiper-pagination\\\",\\n          //   modifierClass: \\\"socials__swiper-pagination--\\\",\\n          //   type: \\\"bullets\\\",\\n          //   clickable: true,\\n          // },\\n          slidesPerView: 2,\\n          spaceBetween: 12,\\n          breakpoints: {\\n            768: {\\n              slidesPerView: 3,\\n              spaceBetween: 16\\n            },\\n            1024: {\\n              slidesPerView: maxSlides,\\n              spaceBetween: 32\\n            }\\n          }\\n        };\\n        if ($socialsNav) {\\n          var $socialsNavButtonPrev = $socialsNav.querySelector(\\\".socials__nav-button.socials__nav-button--prev\\\");\\n          var $socialsNavButtonNext = $socialsNav.querySelector(\\\".socials__nav-button.socials__nav-button--next\\\");\\n          swiperConfig.navigation = {\\n            disabledClass: \\\"socials__nav-button--disabled\\\",\\n            nextEl: $socialsNavButtonNext,\\n            prevEl: $socialsNavButtonPrev\\n          };\\n        }\\n        var swiperObject = new swiper__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"]($socialsSwiper, swiperConfig);\\n      }\\n    });\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (socials);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy9zb2NpYWxzL21haW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDd0Q7QUFFakQsSUFBTUcsT0FBTyxHQUFHLFNBQVZBLE9BQU8sR0FBUztFQUMzQixJQUFNQyxnQkFBZ0IsR0FBR0MsUUFBUSxDQUFDQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQztFQUNyRSxJQUFJRixnQkFBZ0IsRUFBRTtJQUNwQkEsZ0JBQWdCLENBQUNHLE9BQU8sQ0FBQyxVQUFDQyxRQUFRLEVBQUs7TUFDckMsSUFBTUMsV0FBVyxHQUFHRCxRQUFRLENBQUNFLGFBQWEsQ0FBQyxlQUFlLENBQUM7TUFFM0QsSUFBTUMsY0FBYyxHQUFHSCxRQUFRLENBQUNFLGFBQWEsQ0FDM0Msb0RBQW9ELENBQ3JEO01BRUQsSUFBSUMsY0FBYyxFQUFFO1FBQ2xCLElBQU1DLFNBQVMsR0FBR0MsUUFBUSxDQUFDRixjQUFjLENBQUNHLE9BQU8sQ0FBQ0YsU0FBUyxDQUFDO1FBQzVELElBQU1HLFlBQVksR0FBRztVQUNuQkMsT0FBTyxFQUFFLENBQUNmLDhDQUFVLEVBQUVDLDhDQUFVLENBQUM7VUFDakNlLFNBQVMsRUFBRSxZQUFZO1VBQ3ZCQyxLQUFLLEVBQUUsSUFBSTtVQUNYO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBQyxhQUFhLEVBQUUsQ0FBQztVQUNoQkMsWUFBWSxFQUFFLEVBQUU7VUFDaEJDLFdBQVcsRUFBRTtZQUNYLEdBQUcsRUFBRTtjQUNIRixhQUFhLEVBQUUsQ0FBQztjQUNoQkMsWUFBWSxFQUFFO1lBQ2hCLENBQUM7WUFDRCxJQUFJLEVBQUU7Y0FDSkQsYUFBYSxFQUFFUCxTQUFTO2NBQ3hCUSxZQUFZLEVBQUU7WUFDaEI7VUFDRjtRQUNGLENBQUM7UUFDRCxJQUFJWCxXQUFXLEVBQUU7VUFDZixJQUFNYSxxQkFBcUIsR0FBR2IsV0FBVyxDQUFDQyxhQUFhLENBQ3JELGdEQUFnRCxDQUNqRDtVQUNELElBQU1hLHFCQUFxQixHQUFHZCxXQUFXLENBQUNDLGFBQWEsQ0FDckQsZ0RBQWdELENBQ2pEO1VBQ0RLLFlBQVksQ0FBQ1MsVUFBVSxHQUFHO1lBQ3hCQyxhQUFhLEVBQUUsK0JBQStCO1lBQzlDQyxNQUFNLEVBQUVILHFCQUFxQjtZQUM3QkksTUFBTSxFQUFFTDtVQUNWLENBQUM7UUFDSDtRQUNBLElBQU1NLFlBQVksR0FBRyxJQUFJNUIsOENBQU0sQ0FBQ1csY0FBYyxFQUFFSSxZQUFZLENBQUM7TUFDL0Q7SUFDRixDQUFDLENBQUM7RUFDSjtBQUNGLENBQUM7QUFFRCxpRUFBZVosT0FBTyIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vcmVzb3VyY2VzL3NjcmlwdHMvc2VjdGlvbnMvc29jaWFscy9tYWluLmpzPzM1YTQiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gSW1wb3J0IFN3aXBlciBhbmQgbW9kdWxlc1xyXG5pbXBvcnQgU3dpcGVyLCB7IE5hdmlnYXRpb24sIFBhZ2luYXRpb24gfSBmcm9tIFwic3dpcGVyXCI7XHJcblxyXG5leHBvcnQgY29uc3Qgc29jaWFscyA9ICgpID0+IHtcclxuICBjb25zdCAkc29jaWFsc1NlY3Rpb25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInNlY3Rpb24uc29jaWFsc1wiKTtcclxuICBpZiAoJHNvY2lhbHNTZWN0aW9ucykge1xyXG4gICAgJHNvY2lhbHNTZWN0aW9ucy5mb3JFYWNoKCgkc29jaWFscykgPT4ge1xyXG4gICAgICBjb25zdCAkc29jaWFsc05hdiA9ICRzb2NpYWxzLnF1ZXJ5U2VsZWN0b3IoXCIuc29jaWFsc19fbmF2XCIpO1xyXG5cclxuICAgICAgY29uc3QgJHNvY2lhbHNTd2lwZXIgPSAkc29jaWFscy5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgIFwiLnNvY2lhbHNfX3N3aXBlci1jb250YWluZXIgLnNvY2lhbHNfX3N3aXBlci5zd2lwZXJcIlxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKCRzb2NpYWxzU3dpcGVyKSB7XHJcbiAgICAgICAgY29uc3QgbWF4U2xpZGVzID0gcGFyc2VJbnQoJHNvY2lhbHNTd2lwZXIuZGF0YXNldC5tYXhTbGlkZXMpO1xyXG4gICAgICAgIGNvbnN0IHN3aXBlckNvbmZpZyA9IHtcclxuICAgICAgICAgIG1vZHVsZXM6IFtOYXZpZ2F0aW9uLCBQYWdpbmF0aW9uXSxcclxuICAgICAgICAgIGRpcmVjdGlvbjogXCJob3Jpem9udGFsXCIsXHJcbiAgICAgICAgICBzcGVlZDogMTAwMCxcclxuICAgICAgICAgIC8vIGF1dG9wbGF5OiB7XHJcbiAgICAgICAgICAvLyAgIGRlbGF5OiA1MDAwLFxyXG4gICAgICAgICAgLy8gfSxcclxuICAgICAgICAgIC8vIHBhZ2luYXRpb246IHtcclxuICAgICAgICAgIC8vICAgYnVsbGV0QWN0aXZlQ2xhc3M6IFwic29jaWFsc19fc3dpcGVyLWJ1bGxldC0tYWN0aXZlXCIsXHJcbiAgICAgICAgICAvLyAgIGJ1bGxldENsYXNzOiBcInNvY2lhbHNfX3N3aXBlci1idWxsZXRcIixcclxuICAgICAgICAgIC8vICAgYnVsbGV0RWxlbWVudDogXCJidXR0b25cIixcclxuICAgICAgICAgIC8vICAgZWw6IFwiLnNvY2lhbHNfX3N3aXBlci1wYWdpbmF0aW9uXCIsXHJcbiAgICAgICAgICAvLyAgIG1vZGlmaWVyQ2xhc3M6IFwic29jaWFsc19fc3dpcGVyLXBhZ2luYXRpb24tLVwiLFxyXG4gICAgICAgICAgLy8gICB0eXBlOiBcImJ1bGxldHNcIixcclxuICAgICAgICAgIC8vICAgY2xpY2thYmxlOiB0cnVlLFxyXG4gICAgICAgICAgLy8gfSxcclxuICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDIsXHJcbiAgICAgICAgICBzcGFjZUJldHdlZW46IDEyLFxyXG4gICAgICAgICAgYnJlYWtwb2ludHM6IHtcclxuICAgICAgICAgICAgNzY4OiB7XHJcbiAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogMyxcclxuICAgICAgICAgICAgICBzcGFjZUJldHdlZW46IDE2LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAxMDI0OiB7XHJcbiAgICAgICAgICAgICAgc2xpZGVzUGVyVmlldzogbWF4U2xpZGVzLFxyXG4gICAgICAgICAgICAgIHNwYWNlQmV0d2VlbjogMzIsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKCRzb2NpYWxzTmF2KSB7XHJcbiAgICAgICAgICBjb25zdCAkc29jaWFsc05hdkJ1dHRvblByZXYgPSAkc29jaWFsc05hdi5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICBcIi5zb2NpYWxzX19uYXYtYnV0dG9uLnNvY2lhbHNfX25hdi1idXR0b24tLXByZXZcIlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0ICRzb2NpYWxzTmF2QnV0dG9uTmV4dCA9ICRzb2NpYWxzTmF2LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAgIFwiLnNvY2lhbHNfX25hdi1idXR0b24uc29jaWFsc19fbmF2LWJ1dHRvbi0tbmV4dFwiXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgc3dpcGVyQ29uZmlnLm5hdmlnYXRpb24gPSB7XHJcbiAgICAgICAgICAgIGRpc2FibGVkQ2xhc3M6IFwic29jaWFsc19fbmF2LWJ1dHRvbi0tZGlzYWJsZWRcIixcclxuICAgICAgICAgICAgbmV4dEVsOiAkc29jaWFsc05hdkJ1dHRvbk5leHQsXHJcbiAgICAgICAgICAgIHByZXZFbDogJHNvY2lhbHNOYXZCdXR0b25QcmV2LFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3dpcGVyT2JqZWN0ID0gbmV3IFN3aXBlcigkc29jaWFsc1N3aXBlciwgc3dpcGVyQ29uZmlnKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgc29jaWFscztcclxuIl0sIm5hbWVzIjpbIlN3aXBlciIsIk5hdmlnYXRpb24iLCJQYWdpbmF0aW9uIiwic29jaWFscyIsIiRzb2NpYWxzU2VjdGlvbnMiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwiJHNvY2lhbHMiLCIkc29jaWFsc05hdiIsInF1ZXJ5U2VsZWN0b3IiLCIkc29jaWFsc1N3aXBlciIsIm1heFNsaWRlcyIsInBhcnNlSW50IiwiZGF0YXNldCIsInN3aXBlckNvbmZpZyIsIm1vZHVsZXMiLCJkaXJlY3Rpb24iLCJzcGVlZCIsInNsaWRlc1BlclZpZXciLCJzcGFjZUJldHdlZW4iLCJicmVha3BvaW50cyIsIiRzb2NpYWxzTmF2QnV0dG9uUHJldiIsIiRzb2NpYWxzTmF2QnV0dG9uTmV4dCIsIm5hdmlnYXRpb24iLCJkaXNhYmxlZENsYXNzIiwibmV4dEVsIiwicHJldkVsIiwic3dpcGVyT2JqZWN0Il0sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/socials/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/scripts/sections/usps/main.js\":\r\n/*!*************************************************!*\\\r\n  !*** ./resources/scripts/sections/usps/main.js ***!\r\n  \\*************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */   \\\"usps\\\": () => (/* binding */ usps)\\n/* harmony export */ });\\n/* harmony import */ var swiper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! swiper */ \\\"./node_modules/swiper/swiper.esm.js\\\");\\n// Import Swiper and modules\\n\\nvar usps = function usps() {\\n  var breakpoint = window.matchMedia(\\\"(min-width:1024px)\\\");\\n  var uspsSections = document.querySelectorAll(\\\".usp\\\");\\n  if (uspsSections) {\\n    var uspsSwiper = document.querySelector(\\\"#uspSwiper\\\");\\n    var swiperConfig = {\\n      modules: [swiper__WEBPACK_IMPORTED_MODULE_0__.Navigation, swiper__WEBPACK_IMPORTED_MODULE_0__.Pagination],\\n      direction: \\\"horizontal\\\",\\n      speed: 1000,\\n      slidesPerView: 1,\\n      slidesPerGroup: 1,\\n      spaceBetween: 12,\\n      breakpoints: {\\n        768: {\\n          slidesPerView: 1,\\n          slidesPerGroup: 1,\\n          spaceBetween: 16\\n        },\\n        1024: {\\n          slidesPerView: 4,\\n          slidesPerGroup: 1,\\n          spaceBetween: 32\\n        }\\n      }\\n    };\\n    var enableSwiper = new swiper__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"](uspsSwiper, swiperConfig);\\n    return enableSwiper;\\n  }\\n};\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (usps);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc2NyaXB0cy9zZWN0aW9ucy91c3BzL21haW4uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDd0Q7QUFFakQsSUFBTUcsSUFBSSxHQUFHLFNBQVBBLElBQUksR0FBUztFQUN4QixJQUFNQyxVQUFVLEdBQUdDLE1BQU0sQ0FBQ0MsVUFBVSxDQUFDLG9CQUFvQixDQUFDO0VBRTFELElBQU1DLFlBQVksR0FBR0MsUUFBUSxDQUFDQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7RUFFdEQsSUFBSUYsWUFBWSxFQUFFO0lBQ2hCLElBQU1HLFVBQVUsR0FBR0YsUUFBUSxDQUFDRyxhQUFhLENBQUMsWUFBWSxDQUFDO0lBQ3ZELElBQU1DLFlBQVksR0FBRztNQUNuQkMsT0FBTyxFQUFFLENBQUNaLDhDQUFVLEVBQUVDLDhDQUFVLENBQUM7TUFDakNZLFNBQVMsRUFBRSxZQUFZO01BQ3ZCQyxLQUFLLEVBQUUsSUFBSTtNQUNYQyxhQUFhLEVBQUUsQ0FBQztNQUNoQkMsY0FBYyxFQUFFLENBQUM7TUFDakJDLFlBQVksRUFBRSxFQUFFO01BQ2hCQyxXQUFXLEVBQUU7UUFDWCxHQUFHLEVBQUU7VUFDSEgsYUFBYSxFQUFFLENBQUM7VUFDaEJDLGNBQWMsRUFBRSxDQUFDO1VBQ2pCQyxZQUFZLEVBQUU7UUFDaEIsQ0FBQztRQUNELElBQUksRUFBRTtVQUNKRixhQUFhLEVBQUUsQ0FBQztVQUNoQkMsY0FBYyxFQUFFLENBQUM7VUFDakJDLFlBQVksRUFBRTtRQUNoQjtNQUNGO0lBQ0YsQ0FBQztJQUVELElBQU1FLFlBQVksR0FBRyxJQUFJcEIsOENBQU0sQ0FBQ1UsVUFBVSxFQUFFRSxZQUFZLENBQUM7SUFDekQsT0FBT1EsWUFBWTtFQUNyQjtBQUNGLENBQUM7QUFFRCxpRUFBZWpCLElBQUkiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL3Jlc291cmNlcy9zY3JpcHRzL3NlY3Rpb25zL3VzcHMvbWFpbi5qcz8yNzdhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEltcG9ydCBTd2lwZXIgYW5kIG1vZHVsZXNcclxuaW1wb3J0IFN3aXBlciwgeyBOYXZpZ2F0aW9uLCBQYWdpbmF0aW9uIH0gZnJvbSBcInN3aXBlclwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IHVzcHMgPSAoKSA9PiB7XHJcbiAgY29uc3QgYnJlYWtwb2ludCA9IHdpbmRvdy5tYXRjaE1lZGlhKFwiKG1pbi13aWR0aDoxMDI0cHgpXCIpO1xyXG5cclxuICBjb25zdCB1c3BzU2VjdGlvbnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnVzcFwiKTtcclxuXHJcbiAgaWYgKHVzcHNTZWN0aW9ucykge1xyXG4gICAgY29uc3QgdXNwc1N3aXBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjdXNwU3dpcGVyXCIpO1xyXG4gICAgY29uc3Qgc3dpcGVyQ29uZmlnID0ge1xyXG4gICAgICBtb2R1bGVzOiBbTmF2aWdhdGlvbiwgUGFnaW5hdGlvbl0sXHJcbiAgICAgIGRpcmVjdGlvbjogXCJob3Jpem9udGFsXCIsXHJcbiAgICAgIHNwZWVkOiAxMDAwLFxyXG4gICAgICBzbGlkZXNQZXJWaWV3OiAxLFxyXG4gICAgICBzbGlkZXNQZXJHcm91cDogMSxcclxuICAgICAgc3BhY2VCZXR3ZWVuOiAxMixcclxuICAgICAgYnJlYWtwb2ludHM6IHtcclxuICAgICAgICA3Njg6IHtcclxuICAgICAgICAgIHNsaWRlc1BlclZpZXc6IDEsXHJcbiAgICAgICAgICBzbGlkZXNQZXJHcm91cDogMSxcclxuICAgICAgICAgIHNwYWNlQmV0d2VlbjogMTYsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAxMDI0OiB7XHJcbiAgICAgICAgICBzbGlkZXNQZXJWaWV3OiA0LFxyXG4gICAgICAgICAgc2xpZGVzUGVyR3JvdXA6IDEsXHJcbiAgICAgICAgICBzcGFjZUJldHdlZW46IDMyLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGVuYWJsZVN3aXBlciA9IG5ldyBTd2lwZXIodXNwc1N3aXBlciwgc3dpcGVyQ29uZmlnKTtcclxuICAgIHJldHVybiBlbmFibGVTd2lwZXI7XHJcbiAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdXNwcztcclxuIl0sIm5hbWVzIjpbIlN3aXBlciIsIk5hdmlnYXRpb24iLCJQYWdpbmF0aW9uIiwidXNwcyIsImJyZWFrcG9pbnQiLCJ3aW5kb3ciLCJtYXRjaE1lZGlhIiwidXNwc1NlY3Rpb25zIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwidXNwc1N3aXBlciIsInF1ZXJ5U2VsZWN0b3IiLCJzd2lwZXJDb25maWciLCJtb2R1bGVzIiwiZGlyZWN0aW9uIiwic3BlZWQiLCJzbGlkZXNQZXJWaWV3Iiwic2xpZGVzUGVyR3JvdXAiLCJzcGFjZUJldHdlZW4iLCJicmVha3BvaW50cyIsImVuYWJsZVN3aXBlciJdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./resources/scripts/sections/usps/main.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/gsap/CSSPlugin.js\":\r\n/*!****************************************!*\\\r\n  !*** ./node_modules/gsap/CSSPlugin.js ***!\r\n  \\****************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"CSSPlugin\\\": () => (/* binding */ CSSPlugin),\\n/* harmony export */   \\\"_createElement\\\": () => (/* binding */ _createElement),\\n/* harmony export */   \\\"_getBBox\\\": () => (/* binding */ _getBBox),\\n/* harmony export */   \\\"checkPrefix\\\": () => (/* binding */ _checkPropPrefix),\\n/* harmony export */   \\\"default\\\": () => (/* binding */ CSSPlugin)\\n/* harmony export */ });\\n/* harmony import */ var _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./gsap-core.js */ \\\"./node_modules/gsap/gsap-core.js\\\");\\n/*!\\n * CSSPlugin 3.12.7\\n * https://gsap.com\\n *\\n * Copyright 2008-2025, GreenSock. All rights reserved.\\n * Subject to the terms at https://gsap.com/standard-license or for\\n * Club GSAP members, the agreement issued with that membership.\\n * @author: Jack Doyle, jack@greensock.com\\n*/\\n\\n/* eslint-disable */\\n\\n\\nvar _win,\\n    _doc,\\n    _docElement,\\n    _pluginInitted,\\n    _tempDiv,\\n    _tempDivStyler,\\n    _recentSetterPlugin,\\n    _reverting,\\n    _windowExists = function _windowExists() {\\n  return typeof window !== \\\"undefined\\\";\\n},\\n    _transformProps = {},\\n    _RAD2DEG = 180 / Math.PI,\\n    _DEG2RAD = Math.PI / 180,\\n    _atan2 = Math.atan2,\\n    _bigNum = 1e8,\\n    _capsExp = /([A-Z])/g,\\n    _horizontalExp = /(left|right|width|margin|padding|x)/i,\\n    _complexExp = /[\\\\s,\\\\(]\\\\S/,\\n    _propertyAliases = {\\n  autoAlpha: \\\"opacity,visibility\\\",\\n  scale: \\\"scaleX,scaleY\\\",\\n  alpha: \\\"opacity\\\"\\n},\\n    _renderCSSProp = function _renderCSSProp(ratio, data) {\\n  return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data);\\n},\\n    _renderPropWithEnd = function _renderPropWithEnd(ratio, data) {\\n  return data.set(data.t, data.p, ratio === 1 ? data.e : Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data);\\n},\\n    _renderCSSPropWithBeginning = function _renderCSSPropWithBeginning(ratio, data) {\\n  return data.set(data.t, data.p, ratio ? Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u : data.b, data);\\n},\\n    //if units change, we need a way to render the original unit/value when the tween goes all the way back to the beginning (ratio:0)\\n_renderRoundedCSSProp = function _renderRoundedCSSProp(ratio, data) {\\n  var value = data.s + data.c * ratio;\\n  data.set(data.t, data.p, ~~(value + (value < 0 ? -.5 : .5)) + data.u, data);\\n},\\n    _renderNonTweeningValue = function _renderNonTweeningValue(ratio, data) {\\n  return data.set(data.t, data.p, ratio ? data.e : data.b, data);\\n},\\n    _renderNonTweeningValueOnlyAtEnd = function _renderNonTweeningValueOnlyAtEnd(ratio, data) {\\n  return data.set(data.t, data.p, ratio !== 1 ? data.b : data.e, data);\\n},\\n    _setterCSSStyle = function _setterCSSStyle(target, property, value) {\\n  return target.style[property] = value;\\n},\\n    _setterCSSProp = function _setterCSSProp(target, property, value) {\\n  return target.style.setProperty(property, value);\\n},\\n    _setterTransform = function _setterTransform(target, property, value) {\\n  return target._gsap[property] = value;\\n},\\n    _setterScale = function _setterScale(target, property, value) {\\n  return target._gsap.scaleX = target._gsap.scaleY = value;\\n},\\n    _setterScaleWithRender = function _setterScaleWithRender(target, property, value, data, ratio) {\\n  var cache = target._gsap;\\n  cache.scaleX = cache.scaleY = value;\\n  cache.renderTransform(ratio, cache);\\n},\\n    _setterTransformWithRender = function _setterTransformWithRender(target, property, value, data, ratio) {\\n  var cache = target._gsap;\\n  cache[property] = value;\\n  cache.renderTransform(ratio, cache);\\n},\\n    _transformProp = \\\"transform\\\",\\n    _transformOriginProp = _transformProp + \\\"Origin\\\",\\n    _saveStyle = function _saveStyle(property, isNotCSS) {\\n  var _this = this;\\n\\n  var target = this.target,\\n      style = target.style,\\n      cache = target._gsap;\\n\\n  if (property in _transformProps && style) {\\n    this.tfm = this.tfm || {};\\n\\n    if (property !== \\\"transform\\\") {\\n      property = _propertyAliases[property] || property;\\n      ~property.indexOf(\\\",\\\") ? property.split(\\\",\\\").forEach(function (a) {\\n        return _this.tfm[a] = _get(target, a);\\n      }) : this.tfm[property] = cache.x ? cache[property] : _get(target, property); // note: scale would map to \\\"scaleX,scaleY\\\", thus we loop and apply them both.\\n\\n      property === _transformOriginProp && (this.tfm.zOrigin = cache.zOrigin);\\n    } else {\\n      return _propertyAliases.transform.split(\\\",\\\").forEach(function (p) {\\n        return _saveStyle.call(_this, p, isNotCSS);\\n      });\\n    }\\n\\n    if (this.props.indexOf(_transformProp) >= 0) {\\n      return;\\n    }\\n\\n    if (cache.svg) {\\n      this.svgo = target.getAttribute(\\\"data-svg-origin\\\");\\n      this.props.push(_transformOriginProp, isNotCSS, \\\"\\\");\\n    }\\n\\n    property = _transformProp;\\n  }\\n\\n  (style || isNotCSS) && this.props.push(property, isNotCSS, style[property]);\\n},\\n    _removeIndependentTransforms = function _removeIndependentTransforms(style) {\\n  if (style.translate) {\\n    style.removeProperty(\\\"translate\\\");\\n    style.removeProperty(\\\"scale\\\");\\n    style.removeProperty(\\\"rotate\\\");\\n  }\\n},\\n    _revertStyle = function _revertStyle() {\\n  var props = this.props,\\n      target = this.target,\\n      style = target.style,\\n      cache = target._gsap,\\n      i,\\n      p;\\n\\n  for (i = 0; i < props.length; i += 3) {\\n    // stored like this: property, isNotCSS, value\\n    if (!props[i + 1]) {\\n      props[i + 2] ? style[props[i]] = props[i + 2] : style.removeProperty(props[i].substr(0, 2) === \\\"--\\\" ? props[i] : props[i].replace(_capsExp, \\\"-$1\\\").toLowerCase());\\n    } else if (props[i + 1] === 2) {\\n      // non-CSS value (function-based)\\n      target[props[i]](props[i + 2]);\\n    } else {\\n      // non-CSS value (not function-based)\\n      target[props[i]] = props[i + 2];\\n    }\\n  }\\n\\n  if (this.tfm) {\\n    for (p in this.tfm) {\\n      cache[p] = this.tfm[p];\\n    }\\n\\n    if (cache.svg) {\\n      cache.renderTransform();\\n      target.setAttribute(\\\"data-svg-origin\\\", this.svgo || \\\"\\\");\\n    }\\n\\n    i = _reverting();\\n\\n    if ((!i || !i.isStart) && !style[_transformProp]) {\\n      _removeIndependentTransforms(style);\\n\\n      if (cache.zOrigin && style[_transformOriginProp]) {\\n        style[_transformOriginProp] += \\\" \\\" + cache.zOrigin + \\\"px\\\"; // since we're uncaching, we must put the zOrigin back into the transformOrigin so that we can pull it out accurately when we parse again. Otherwise, we'd lose the z portion of the origin since we extract it to protect from Safari bugs.\\n\\n        cache.zOrigin = 0;\\n        cache.renderTransform();\\n      }\\n\\n      cache.uncache = 1; // if it's a startAt that's being reverted in the _initTween() of the core, we don't need to uncache transforms. This is purely a performance optimization.\\n    }\\n  }\\n},\\n    _getStyleSaver = function _getStyleSaver(target, properties) {\\n  var saver = {\\n    target: target,\\n    props: [],\\n    revert: _revertStyle,\\n    save: _saveStyle\\n  };\\n  target._gsap || _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap.core.getCache(target); // just make sure there's a _gsap cache defined because we read from it in _saveStyle() and it's more efficient to just check it here once.\\n\\n  properties && target.style && target.nodeType && properties.split(\\\",\\\").forEach(function (p) {\\n    return saver.save(p);\\n  }); // make sure it's a DOM node too.\\n\\n  return saver;\\n},\\n    _supports3D,\\n    _createElement = function _createElement(type, ns) {\\n  var e = _doc.createElementNS ? _doc.createElementNS((ns || \\\"http://www.w3.org/1999/xhtml\\\").replace(/^https/, \\\"http\\\"), type) : _doc.createElement(type); //some servers swap in https for http in the namespace which can break things, making \\\"style\\\" inaccessible.\\n\\n  return e && e.style ? e : _doc.createElement(type); //some environments won't allow access to the element's style when created with a namespace in which case we default to the standard createElement() to work around the issue. Also note that when GSAP is embedded directly inside an SVG file, createElement() won't allow access to the style object in Firefox (see https://gsap.com/forums/topic/20215-problem-using-tweenmax-in-standalone-self-containing-svg-file-err-cannot-set-property-csstext-of-undefined/).\\n},\\n    _getComputedProperty = function _getComputedProperty(target, property, skipPrefixFallback) {\\n  var cs = getComputedStyle(target);\\n  return cs[property] || cs.getPropertyValue(property.replace(_capsExp, \\\"-$1\\\").toLowerCase()) || cs.getPropertyValue(property) || !skipPrefixFallback && _getComputedProperty(target, _checkPropPrefix(property) || property, 1) || \\\"\\\"; //css variables may not need caps swapped out for dashes and lowercase.\\n},\\n    _prefixes = \\\"O,Moz,ms,Ms,Webkit\\\".split(\\\",\\\"),\\n    _checkPropPrefix = function _checkPropPrefix(property, element, preferPrefix) {\\n  var e = element || _tempDiv,\\n      s = e.style,\\n      i = 5;\\n\\n  if (property in s && !preferPrefix) {\\n    return property;\\n  }\\n\\n  property = property.charAt(0).toUpperCase() + property.substr(1);\\n\\n  while (i-- && !(_prefixes[i] + property in s)) {}\\n\\n  return i < 0 ? null : (i === 3 ? \\\"ms\\\" : i >= 0 ? _prefixes[i] : \\\"\\\") + property;\\n},\\n    _initCore = function _initCore() {\\n  if (_windowExists() && window.document) {\\n    _win = window;\\n    _doc = _win.document;\\n    _docElement = _doc.documentElement;\\n    _tempDiv = _createElement(\\\"div\\\") || {\\n      style: {}\\n    };\\n    _tempDivStyler = _createElement(\\\"div\\\");\\n    _transformProp = _checkPropPrefix(_transformProp);\\n    _transformOriginProp = _transformProp + \\\"Origin\\\";\\n    _tempDiv.style.cssText = \\\"border-width:0;line-height:0;position:absolute;padding:0\\\"; //make sure to override certain properties that may contaminate measurements, in case the user has overreaching style sheets.\\n\\n    _supports3D = !!_checkPropPrefix(\\\"perspective\\\");\\n    _reverting = _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap.core.reverting;\\n    _pluginInitted = 1;\\n  }\\n},\\n    _getReparentedCloneBBox = function _getReparentedCloneBBox(target) {\\n  //works around issues in some browsers (like Firefox) that don't correctly report getBBox() on SVG elements inside a <defs> element and/or <mask>. We try creating an SVG, adding it to the documentElement and toss the element in there so that it's definitely part of the rendering tree, then grab the bbox and if it works, we actually swap out the original getBBox() method for our own that does these extra steps whenever getBBox is needed. This helps ensure that performance is optimal (only do all these extra steps when absolutely necessary...most elements don't need it).\\n  var owner = target.ownerSVGElement,\\n      svg = _createElement(\\\"svg\\\", owner && owner.getAttribute(\\\"xmlns\\\") || \\\"http://www.w3.org/2000/svg\\\"),\\n      clone = target.cloneNode(true),\\n      bbox;\\n\\n  clone.style.display = \\\"block\\\";\\n  svg.appendChild(clone);\\n\\n  _docElement.appendChild(svg);\\n\\n  try {\\n    bbox = clone.getBBox();\\n  } catch (e) {}\\n\\n  svg.removeChild(clone);\\n\\n  _docElement.removeChild(svg);\\n\\n  return bbox;\\n},\\n    _getAttributeFallbacks = function _getAttributeFallbacks(target, attributesArray) {\\n  var i = attributesArray.length;\\n\\n  while (i--) {\\n    if (target.hasAttribute(attributesArray[i])) {\\n      return target.getAttribute(attributesArray[i]);\\n    }\\n  }\\n},\\n    _getBBox = function _getBBox(target) {\\n  var bounds, cloned;\\n\\n  try {\\n    bounds = target.getBBox(); //Firefox throws errors if you try calling getBBox() on an SVG element that's not rendered (like in a <symbol> or <defs>). https://bugzilla.mozilla.org/show_bug.cgi?id=612118\\n  } catch (error) {\\n    bounds = _getReparentedCloneBBox(target);\\n    cloned = 1;\\n  }\\n\\n  bounds && (bounds.width || bounds.height) || cloned || (bounds = _getReparentedCloneBBox(target)); //some browsers (like Firefox) misreport the bounds if the element has zero width and height (it just assumes it's at x:0, y:0), thus we need to manually grab the position in that case.\\n\\n  return bounds && !bounds.width && !bounds.x && !bounds.y ? {\\n    x: +_getAttributeFallbacks(target, [\\\"x\\\", \\\"cx\\\", \\\"x1\\\"]) || 0,\\n    y: +_getAttributeFallbacks(target, [\\\"y\\\", \\\"cy\\\", \\\"y1\\\"]) || 0,\\n    width: 0,\\n    height: 0\\n  } : bounds;\\n},\\n    _isSVG = function _isSVG(e) {\\n  return !!(e.getCTM && (!e.parentNode || e.ownerSVGElement) && _getBBox(e));\\n},\\n    //reports if the element is an SVG on which getBBox() actually works\\n_removeProperty = function _removeProperty(target, property) {\\n  if (property) {\\n    var style = target.style,\\n        first2Chars;\\n\\n    if (property in _transformProps && property !== _transformOriginProp) {\\n      property = _transformProp;\\n    }\\n\\n    if (style.removeProperty) {\\n      first2Chars = property.substr(0, 2);\\n\\n      if (first2Chars === \\\"ms\\\" || property.substr(0, 6) === \\\"webkit\\\") {\\n        //Microsoft and some Webkit browsers don't conform to the standard of capitalizing the first prefix character, so we adjust so that when we prefix the caps with a dash, it's correct (otherwise it'd be \\\"ms-transform\\\" instead of \\\"-ms-transform\\\" for IE9, for example)\\n        property = \\\"-\\\" + property;\\n      }\\n\\n      style.removeProperty(first2Chars === \\\"--\\\" ? property : property.replace(_capsExp, \\\"-$1\\\").toLowerCase());\\n    } else {\\n      //note: old versions of IE use \\\"removeAttribute()\\\" instead of \\\"removeProperty()\\\"\\n      style.removeAttribute(property);\\n    }\\n  }\\n},\\n    _addNonTweeningPT = function _addNonTweeningPT(plugin, target, property, beginning, end, onlySetAtEnd) {\\n  var pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(plugin._pt, target, property, 0, 1, onlySetAtEnd ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue);\\n  plugin._pt = pt;\\n  pt.b = beginning;\\n  pt.e = end;\\n\\n  plugin._props.push(property);\\n\\n  return pt;\\n},\\n    _nonConvertibleUnits = {\\n  deg: 1,\\n  rad: 1,\\n  turn: 1\\n},\\n    _nonStandardLayouts = {\\n  grid: 1,\\n  flex: 1\\n},\\n    //takes a single value like 20px and converts it to the unit specified, like \\\"%\\\", returning only the numeric amount.\\n_convertToUnit = function _convertToUnit(target, property, value, unit) {\\n  var curValue = parseFloat(value) || 0,\\n      curUnit = (value + \\\"\\\").trim().substr((curValue + \\\"\\\").length) || \\\"px\\\",\\n      // some browsers leave extra whitespace at the beginning of CSS variables, hence the need to trim()\\n  style = _tempDiv.style,\\n      horizontal = _horizontalExp.test(property),\\n      isRootSVG = target.tagName.toLowerCase() === \\\"svg\\\",\\n      measureProperty = (isRootSVG ? \\\"client\\\" : \\\"offset\\\") + (horizontal ? \\\"Width\\\" : \\\"Height\\\"),\\n      amount = 100,\\n      toPixels = unit === \\\"px\\\",\\n      toPercent = unit === \\\"%\\\",\\n      px,\\n      parent,\\n      cache,\\n      isSVG;\\n\\n  if (unit === curUnit || !curValue || _nonConvertibleUnits[unit] || _nonConvertibleUnits[curUnit]) {\\n    return curValue;\\n  }\\n\\n  curUnit !== \\\"px\\\" && !toPixels && (curValue = _convertToUnit(target, property, value, \\\"px\\\"));\\n  isSVG = target.getCTM && _isSVG(target);\\n\\n  if ((toPercent || curUnit === \\\"%\\\") && (_transformProps[property] || ~property.indexOf(\\\"adius\\\"))) {\\n    px = isSVG ? target.getBBox()[horizontal ? \\\"width\\\" : \\\"height\\\"] : target[measureProperty];\\n    return (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(toPercent ? curValue / px * amount : curValue / 100 * px);\\n  }\\n\\n  style[horizontal ? \\\"width\\\" : \\\"height\\\"] = amount + (toPixels ? curUnit : unit);\\n  parent = unit !== \\\"rem\\\" && ~property.indexOf(\\\"adius\\\") || unit === \\\"em\\\" && target.appendChild && !isRootSVG ? target : target.parentNode;\\n\\n  if (isSVG) {\\n    parent = (target.ownerSVGElement || {}).parentNode;\\n  }\\n\\n  if (!parent || parent === _doc || !parent.appendChild) {\\n    parent = _doc.body;\\n  }\\n\\n  cache = parent._gsap;\\n\\n  if (cache && toPercent && cache.width && horizontal && cache.time === _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._ticker.time && !cache.uncache) {\\n    return (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(curValue / cache.width * amount);\\n  } else {\\n    if (toPercent && (property === \\\"height\\\" || property === \\\"width\\\")) {\\n      // if we're dealing with width/height that's inside a container with padding and/or it's a flexbox/grid container, we must apply it to the target itself rather than the _tempDiv in order to ensure complete accuracy, factoring in the parent's padding.\\n      var v = target.style[property];\\n      target.style[property] = amount + unit;\\n      px = target[measureProperty];\\n      v ? target.style[property] = v : _removeProperty(target, property);\\n    } else {\\n      (toPercent || curUnit === \\\"%\\\") && !_nonStandardLayouts[_getComputedProperty(parent, \\\"display\\\")] && (style.position = _getComputedProperty(target, \\\"position\\\"));\\n      parent === target && (style.position = \\\"static\\\"); // like for borderRadius, if it's a % we must have it relative to the target itself but that may not have position: relative or position: absolute in which case it'd go up the chain until it finds its offsetParent (bad). position: static protects against that.\\n\\n      parent.appendChild(_tempDiv);\\n      px = _tempDiv[measureProperty];\\n      parent.removeChild(_tempDiv);\\n      style.position = \\\"absolute\\\";\\n    }\\n\\n    if (horizontal && toPercent) {\\n      cache = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._getCache)(parent);\\n      cache.time = _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._ticker.time;\\n      cache.width = parent[measureProperty];\\n    }\\n  }\\n\\n  return (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(toPixels ? px * curValue / amount : px && curValue ? amount / px * curValue : 0);\\n},\\n    _get = function _get(target, property, unit, uncache) {\\n  var value;\\n  _pluginInitted || _initCore();\\n\\n  if (property in _propertyAliases && property !== \\\"transform\\\") {\\n    property = _propertyAliases[property];\\n\\n    if (~property.indexOf(\\\",\\\")) {\\n      property = property.split(\\\",\\\")[0];\\n    }\\n  }\\n\\n  if (_transformProps[property] && property !== \\\"transform\\\") {\\n    value = _parseTransform(target, uncache);\\n    value = property !== \\\"transformOrigin\\\" ? value[property] : value.svg ? value.origin : _firstTwoOnly(_getComputedProperty(target, _transformOriginProp)) + \\\" \\\" + value.zOrigin + \\\"px\\\";\\n  } else {\\n    value = target.style[property];\\n\\n    if (!value || value === \\\"auto\\\" || uncache || ~(value + \\\"\\\").indexOf(\\\"calc(\\\")) {\\n      value = _specialProps[property] && _specialProps[property](target, property, unit) || _getComputedProperty(target, property) || (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._getProperty)(target, property) || (property === \\\"opacity\\\" ? 1 : 0); // note: some browsers, like Firefox, don't report borderRadius correctly! Instead, it only reports every corner like  borderTopLeftRadius\\n    }\\n  }\\n\\n  return unit && !~(value + \\\"\\\").trim().indexOf(\\\" \\\") ? _convertToUnit(target, property, value, unit) + unit : value;\\n},\\n    _tweenComplexCSSString = function _tweenComplexCSSString(target, prop, start, end) {\\n  // note: we call _tweenComplexCSSString.call(pluginInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus \\\"this\\\" would refer to the plugin.\\n  if (!start || start === \\\"none\\\") {\\n    // some browsers like Safari actually PREFER the prefixed property and mis-report the unprefixed value like clipPath (BUG). In other words, even though clipPath exists in the style (\\\"clipPath\\\" in target.style) and it's set in the CSS properly (along with -webkit-clip-path), Safari reports clipPath as \\\"none\\\" whereas WebkitClipPath reports accurately like \\\"ellipse(100% 0% at 50% 0%)\\\", so in this case we must SWITCH to using the prefixed property instead. See https://gsap.com/forums/topic/18310-clippath-doesnt-work-on-ios/\\n    var p = _checkPropPrefix(prop, target, 1),\\n        s = p && _getComputedProperty(target, p, 1);\\n\\n    if (s && s !== start) {\\n      prop = p;\\n      start = s;\\n    } else if (prop === \\\"borderColor\\\") {\\n      start = _getComputedProperty(target, \\\"borderTopColor\\\"); // Firefox bug: always reports \\\"borderColor\\\" as \\\"\\\", so we must fall back to borderTopColor. See https://gsap.com/forums/topic/24583-how-to-return-colors-that-i-had-after-reverse/\\n    }\\n  }\\n\\n  var pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(this._pt, target.style, prop, 0, 1, _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._renderComplexString),\\n      index = 0,\\n      matchIndex = 0,\\n      a,\\n      result,\\n      startValues,\\n      startNum,\\n      color,\\n      startValue,\\n      endValue,\\n      endNum,\\n      chunk,\\n      endUnit,\\n      startUnit,\\n      endValues;\\n  pt.b = start;\\n  pt.e = end;\\n  start += \\\"\\\"; // ensure values are strings\\n\\n  end += \\\"\\\";\\n\\n  if (end === \\\"auto\\\") {\\n    startValue = target.style[prop];\\n    target.style[prop] = end;\\n    end = _getComputedProperty(target, prop) || end;\\n    startValue ? target.style[prop] = startValue : _removeProperty(target, prop);\\n  }\\n\\n  a = [start, end];\\n\\n  (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._colorStringFilter)(a); // pass an array with the starting and ending values and let the filter do whatever it needs to the values. If colors are found, it returns true and then we must match where the color shows up order-wise because for things like boxShadow, sometimes the browser provides the computed values with the color FIRST, but the user provides it with the color LAST, so flip them if necessary. Same for drop-shadow().\\n\\n\\n  start = a[0];\\n  end = a[1];\\n  startValues = start.match(_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._numWithUnitExp) || [];\\n  endValues = end.match(_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._numWithUnitExp) || [];\\n\\n  if (endValues.length) {\\n    while (result = _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._numWithUnitExp.exec(end)) {\\n      endValue = result[0];\\n      chunk = end.substring(index, result.index);\\n\\n      if (color) {\\n        color = (color + 1) % 5;\\n      } else if (chunk.substr(-5) === \\\"rgba(\\\" || chunk.substr(-5) === \\\"hsla(\\\") {\\n        color = 1;\\n      }\\n\\n      if (endValue !== (startValue = startValues[matchIndex++] || \\\"\\\")) {\\n        startNum = parseFloat(startValue) || 0;\\n        startUnit = startValue.substr((startNum + \\\"\\\").length);\\n        endValue.charAt(1) === \\\"=\\\" && (endValue = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._parseRelative)(startNum, endValue) + startUnit);\\n        endNum = parseFloat(endValue);\\n        endUnit = endValue.substr((endNum + \\\"\\\").length);\\n        index = _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._numWithUnitExp.lastIndex - endUnit.length;\\n\\n        if (!endUnit) {\\n          //if something like \\\"perspective:300\\\" is passed in and we must add a unit to the end\\n          endUnit = endUnit || _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.units[prop] || startUnit;\\n\\n          if (index === end.length) {\\n            end += endUnit;\\n            pt.e += endUnit;\\n          }\\n        }\\n\\n        if (startUnit !== endUnit) {\\n          startNum = _convertToUnit(target, prop, startValue, endUnit) || 0;\\n        } // these nested PropTweens are handled in a special way - we'll never actually call a render or setter method on them. We'll just loop through them in the parent complex string PropTween's render method.\\n\\n\\n        pt._pt = {\\n          _next: pt._pt,\\n          p: chunk || matchIndex === 1 ? chunk : \\\",\\\",\\n          //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\\n          s: startNum,\\n          c: endNum - startNum,\\n          m: color && color < 4 || prop === \\\"zIndex\\\" ? Math.round : 0\\n        };\\n      }\\n    }\\n\\n    pt.c = index < end.length ? end.substring(index, end.length) : \\\"\\\"; //we use the \\\"c\\\" of the PropTween to store the final part of the string (after the last number)\\n  } else {\\n    pt.r = prop === \\\"display\\\" && end === \\\"none\\\" ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue;\\n  }\\n\\n  _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._relExp.test(end) && (pt.e = 0); //if the end string contains relative values or dynamic random(...) values, delete the end it so that on the final render we don't actually set it to the string with += or -= characters (forces it to use the calculated value).\\n\\n  this._pt = pt; //start the linked list with this new PropTween. Remember, we call _tweenComplexCSSString.call(pluginInstance...) to ensure that it's scoped properly. We may call it from within another plugin too, thus \\\"this\\\" would refer to the plugin.\\n\\n  return pt;\\n},\\n    _keywordToPercent = {\\n  top: \\\"0%\\\",\\n  bottom: \\\"100%\\\",\\n  left: \\\"0%\\\",\\n  right: \\\"100%\\\",\\n  center: \\\"50%\\\"\\n},\\n    _convertKeywordsToPercentages = function _convertKeywordsToPercentages(value) {\\n  var split = value.split(\\\" \\\"),\\n      x = split[0],\\n      y = split[1] || \\\"50%\\\";\\n\\n  if (x === \\\"top\\\" || x === \\\"bottom\\\" || y === \\\"left\\\" || y === \\\"right\\\") {\\n    //the user provided them in the wrong order, so flip them\\n    value = x;\\n    x = y;\\n    y = value;\\n  }\\n\\n  split[0] = _keywordToPercent[x] || x;\\n  split[1] = _keywordToPercent[y] || y;\\n  return split.join(\\\" \\\");\\n},\\n    _renderClearProps = function _renderClearProps(ratio, data) {\\n  if (data.tween && data.tween._time === data.tween._dur) {\\n    var target = data.t,\\n        style = target.style,\\n        props = data.u,\\n        cache = target._gsap,\\n        prop,\\n        clearTransforms,\\n        i;\\n\\n    if (props === \\\"all\\\" || props === true) {\\n      style.cssText = \\\"\\\";\\n      clearTransforms = 1;\\n    } else {\\n      props = props.split(\\\",\\\");\\n      i = props.length;\\n\\n      while (--i > -1) {\\n        prop = props[i];\\n\\n        if (_transformProps[prop]) {\\n          clearTransforms = 1;\\n          prop = prop === \\\"transformOrigin\\\" ? _transformOriginProp : _transformProp;\\n        }\\n\\n        _removeProperty(target, prop);\\n      }\\n    }\\n\\n    if (clearTransforms) {\\n      _removeProperty(target, _transformProp);\\n\\n      if (cache) {\\n        cache.svg && target.removeAttribute(\\\"transform\\\");\\n        style.scale = style.rotate = style.translate = \\\"none\\\";\\n\\n        _parseTransform(target, 1); // force all the cached values back to \\\"normal\\\"/identity, otherwise if there's another tween that's already set to render transforms on this element, it could display the wrong values.\\n\\n\\n        cache.uncache = 1;\\n\\n        _removeIndependentTransforms(style);\\n      }\\n    }\\n  }\\n},\\n    // note: specialProps should return 1 if (and only if) they have a non-zero priority. It indicates we need to sort the linked list.\\n_specialProps = {\\n  clearProps: function clearProps(plugin, target, property, endValue, tween) {\\n    if (tween.data !== \\\"isFromStart\\\") {\\n      var pt = plugin._pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(plugin._pt, target, property, 0, 0, _renderClearProps);\\n      pt.u = endValue;\\n      pt.pr = -10;\\n      pt.tween = tween;\\n\\n      plugin._props.push(property);\\n\\n      return 1;\\n    }\\n  }\\n  /* className feature (about 0.4kb gzipped).\\n  , className(plugin, target, property, endValue, tween) {\\n  \\tlet _renderClassName = (ratio, data) => {\\n  \\t\\t\\tdata.css.render(ratio, data.css);\\n  \\t\\t\\tif (!ratio || ratio === 1) {\\n  \\t\\t\\t\\tlet inline = data.rmv,\\n  \\t\\t\\t\\t\\ttarget = data.t,\\n  \\t\\t\\t\\t\\tp;\\n  \\t\\t\\t\\ttarget.setAttribute(\\\"class\\\", ratio ? data.e : data.b);\\n  \\t\\t\\t\\tfor (p in inline) {\\n  \\t\\t\\t\\t\\t_removeProperty(target, p);\\n  \\t\\t\\t\\t}\\n  \\t\\t\\t}\\n  \\t\\t},\\n  \\t\\t_getAllStyles = (target) => {\\n  \\t\\t\\tlet styles = {},\\n  \\t\\t\\t\\tcomputed = getComputedStyle(target),\\n  \\t\\t\\t\\tp;\\n  \\t\\t\\tfor (p in computed) {\\n  \\t\\t\\t\\tif (isNaN(p) && p !== \\\"cssText\\\" && p !== \\\"length\\\") {\\n  \\t\\t\\t\\t\\tstyles[p] = computed[p];\\n  \\t\\t\\t\\t}\\n  \\t\\t\\t}\\n  \\t\\t\\t_setDefaults(styles, _parseTransform(target, 1));\\n  \\t\\t\\treturn styles;\\n  \\t\\t},\\n  \\t\\tstartClassList = target.getAttribute(\\\"class\\\"),\\n  \\t\\tstyle = target.style,\\n  \\t\\tcssText = style.cssText,\\n  \\t\\tcache = target._gsap,\\n  \\t\\tclassPT = cache.classPT,\\n  \\t\\tinlineToRemoveAtEnd = {},\\n  \\t\\tdata = {t:target, plugin:plugin, rmv:inlineToRemoveAtEnd, b:startClassList, e:(endValue.charAt(1) !== \\\"=\\\") ? endValue : startClassList.replace(new RegExp(\\\"(?:\\\\\\\\s|^)\\\" + endValue.substr(2) + \\\"(?![\\\\\\\\w-])\\\"), \\\"\\\") + ((endValue.charAt(0) === \\\"+\\\") ? \\\" \\\" + endValue.substr(2) : \\\"\\\")},\\n  \\t\\tchangingVars = {},\\n  \\t\\tstartVars = _getAllStyles(target),\\n  \\t\\ttransformRelated = /(transform|perspective)/i,\\n  \\t\\tendVars, p;\\n  \\tif (classPT) {\\n  \\t\\tclassPT.r(1, classPT.d);\\n  \\t\\t_removeLinkedListItem(classPT.d.plugin, classPT, \\\"_pt\\\");\\n  \\t}\\n  \\ttarget.setAttribute(\\\"class\\\", data.e);\\n  \\tendVars = _getAllStyles(target, true);\\n  \\ttarget.setAttribute(\\\"class\\\", startClassList);\\n  \\tfor (p in endVars) {\\n  \\t\\tif (endVars[p] !== startVars[p] && !transformRelated.test(p)) {\\n  \\t\\t\\tchangingVars[p] = endVars[p];\\n  \\t\\t\\tif (!style[p] && style[p] !== \\\"0\\\") {\\n  \\t\\t\\t\\tinlineToRemoveAtEnd[p] = 1;\\n  \\t\\t\\t}\\n  \\t\\t}\\n  \\t}\\n  \\tcache.classPT = plugin._pt = new PropTween(plugin._pt, target, \\\"className\\\", 0, 0, _renderClassName, data, 0, -11);\\n  \\tif (style.cssText !== cssText) { //only apply if things change. Otherwise, in cases like a background-image that's pulled dynamically, it could cause a refresh. See https://gsap.com/forums/topic/20368-possible-gsap-bug-switching-classnames-in-chrome/.\\n  \\t\\tstyle.cssText = cssText; //we recorded cssText before we swapped classes and ran _getAllStyles() because in cases when a className tween is overwritten, we remove all the related tweening properties from that class change (otherwise class-specific stuff can't override properties we've directly set on the target's style object due to specificity).\\n  \\t}\\n  \\t_parseTransform(target, true); //to clear the caching of transforms\\n  \\tdata.css = new gsap.plugins.css();\\n  \\tdata.css.init(target, changingVars, tween);\\n  \\tplugin._props.push(...data.css._props);\\n  \\treturn 1;\\n  }\\n  */\\n\\n},\\n\\n/*\\n * --------------------------------------------------------------------------------------\\n * TRANSFORMS\\n * --------------------------------------------------------------------------------------\\n */\\n_identity2DMatrix = [1, 0, 0, 1, 0, 0],\\n    _rotationalProperties = {},\\n    _isNullTransform = function _isNullTransform(value) {\\n  return value === \\\"matrix(1, 0, 0, 1, 0, 0)\\\" || value === \\\"none\\\" || !value;\\n},\\n    _getComputedTransformMatrixAsArray = function _getComputedTransformMatrixAsArray(target) {\\n  var matrixString = _getComputedProperty(target, _transformProp);\\n\\n  return _isNullTransform(matrixString) ? _identity2DMatrix : matrixString.substr(7).match(_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._numExp).map(_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round);\\n},\\n    _getMatrix = function _getMatrix(target, force2D) {\\n  var cache = target._gsap || (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._getCache)(target),\\n      style = target.style,\\n      matrix = _getComputedTransformMatrixAsArray(target),\\n      parent,\\n      nextSibling,\\n      temp,\\n      addedToDOM;\\n\\n  if (cache.svg && target.getAttribute(\\\"transform\\\")) {\\n    temp = target.transform.baseVal.consolidate().matrix; //ensures that even complex values like \\\"translate(50,60) rotate(135,0,0)\\\" are parsed because it mashes it into a matrix.\\n\\n    matrix = [temp.a, temp.b, temp.c, temp.d, temp.e, temp.f];\\n    return matrix.join(\\\",\\\") === \\\"1,0,0,1,0,0\\\" ? _identity2DMatrix : matrix;\\n  } else if (matrix === _identity2DMatrix && !target.offsetParent && target !== _docElement && !cache.svg) {\\n    //note: if offsetParent is null, that means the element isn't in the normal document flow, like if it has display:none or one of its ancestors has display:none). Firefox returns null for getComputedStyle() if the element is in an iframe that has display:none. https://bugzilla.mozilla.org/show_bug.cgi?id=548397\\n    //browsers don't report transforms accurately unless the element is in the DOM and has a display value that's not \\\"none\\\". Firefox and Microsoft browsers have a partial bug where they'll report transforms even if display:none BUT not any percentage-based values like translate(-50%, 8px) will be reported as if it's translate(0, 8px).\\n    temp = style.display;\\n    style.display = \\\"block\\\";\\n    parent = target.parentNode;\\n\\n    if (!parent || !target.offsetParent && !target.getBoundingClientRect().width) {\\n      // note: in 3.3.0 we switched target.offsetParent to _doc.body.contains(target) to avoid [sometimes unnecessary] MutationObserver calls but that wasn't adequate because there are edge cases where nested position: fixed elements need to get reparented to accurately sense transforms. See https://github.com/greensock/GSAP/issues/388 and https://github.com/greensock/GSAP/issues/375. Note: position: fixed elements report a null offsetParent but they could also be invisible because they're in an ancestor with display: none, so we check getBoundingClientRect(). We only want to alter the DOM if we absolutely have to because it can cause iframe content to reload, like a Vimeo video.\\n      addedToDOM = 1; //flag\\n\\n      nextSibling = target.nextElementSibling;\\n\\n      _docElement.appendChild(target); //we must add it to the DOM in order to get values properly\\n\\n    }\\n\\n    matrix = _getComputedTransformMatrixAsArray(target);\\n    temp ? style.display = temp : _removeProperty(target, \\\"display\\\");\\n\\n    if (addedToDOM) {\\n      nextSibling ? parent.insertBefore(target, nextSibling) : parent ? parent.appendChild(target) : _docElement.removeChild(target);\\n    }\\n  }\\n\\n  return force2D && matrix.length > 6 ? [matrix[0], matrix[1], matrix[4], matrix[5], matrix[12], matrix[13]] : matrix;\\n},\\n    _applySVGOrigin = function _applySVGOrigin(target, origin, originIsAbsolute, smooth, matrixArray, pluginToAddPropTweensTo) {\\n  var cache = target._gsap,\\n      matrix = matrixArray || _getMatrix(target, true),\\n      xOriginOld = cache.xOrigin || 0,\\n      yOriginOld = cache.yOrigin || 0,\\n      xOffsetOld = cache.xOffset || 0,\\n      yOffsetOld = cache.yOffset || 0,\\n      a = matrix[0],\\n      b = matrix[1],\\n      c = matrix[2],\\n      d = matrix[3],\\n      tx = matrix[4],\\n      ty = matrix[5],\\n      originSplit = origin.split(\\\" \\\"),\\n      xOrigin = parseFloat(originSplit[0]) || 0,\\n      yOrigin = parseFloat(originSplit[1]) || 0,\\n      bounds,\\n      determinant,\\n      x,\\n      y;\\n\\n  if (!originIsAbsolute) {\\n    bounds = _getBBox(target);\\n    xOrigin = bounds.x + (~originSplit[0].indexOf(\\\"%\\\") ? xOrigin / 100 * bounds.width : xOrigin);\\n    yOrigin = bounds.y + (~(originSplit[1] || originSplit[0]).indexOf(\\\"%\\\") ? yOrigin / 100 * bounds.height : yOrigin); // if (!(\\\"xOrigin\\\" in cache) && (xOrigin || yOrigin)) { // added in 3.12.3, reverted in 3.12.4; requires more exploration\\n    // \\txOrigin -= bounds.x;\\n    // \\tyOrigin -= bounds.y;\\n    // }\\n  } else if (matrix !== _identity2DMatrix && (determinant = a * d - b * c)) {\\n    //if it's zero (like if scaleX and scaleY are zero), skip it to avoid errors with dividing by zero.\\n    x = xOrigin * (d / determinant) + yOrigin * (-c / determinant) + (c * ty - d * tx) / determinant;\\n    y = xOrigin * (-b / determinant) + yOrigin * (a / determinant) - (a * ty - b * tx) / determinant;\\n    xOrigin = x;\\n    yOrigin = y; // theory: we only had to do this for smoothing and it assumes that the previous one was not originIsAbsolute.\\n  }\\n\\n  if (smooth || smooth !== false && cache.smooth) {\\n    tx = xOrigin - xOriginOld;\\n    ty = yOrigin - yOriginOld;\\n    cache.xOffset = xOffsetOld + (tx * a + ty * c) - tx;\\n    cache.yOffset = yOffsetOld + (tx * b + ty * d) - ty;\\n  } else {\\n    cache.xOffset = cache.yOffset = 0;\\n  }\\n\\n  cache.xOrigin = xOrigin;\\n  cache.yOrigin = yOrigin;\\n  cache.smooth = !!smooth;\\n  cache.origin = origin;\\n  cache.originIsAbsolute = !!originIsAbsolute;\\n  target.style[_transformOriginProp] = \\\"0px 0px\\\"; //otherwise, if someone sets  an origin via CSS, it will likely interfere with the SVG transform attribute ones (because remember, we're baking the origin into the matrix() value).\\n\\n  if (pluginToAddPropTweensTo) {\\n    _addNonTweeningPT(pluginToAddPropTweensTo, cache, \\\"xOrigin\\\", xOriginOld, xOrigin);\\n\\n    _addNonTweeningPT(pluginToAddPropTweensTo, cache, \\\"yOrigin\\\", yOriginOld, yOrigin);\\n\\n    _addNonTweeningPT(pluginToAddPropTweensTo, cache, \\\"xOffset\\\", xOffsetOld, cache.xOffset);\\n\\n    _addNonTweeningPT(pluginToAddPropTweensTo, cache, \\\"yOffset\\\", yOffsetOld, cache.yOffset);\\n  }\\n\\n  target.setAttribute(\\\"data-svg-origin\\\", xOrigin + \\\" \\\" + yOrigin);\\n},\\n    _parseTransform = function _parseTransform(target, uncache) {\\n  var cache = target._gsap || new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.GSCache(target);\\n\\n  if (\\\"x\\\" in cache && !uncache && !cache.uncache) {\\n    return cache;\\n  }\\n\\n  var style = target.style,\\n      invertedScaleX = cache.scaleX < 0,\\n      px = \\\"px\\\",\\n      deg = \\\"deg\\\",\\n      cs = getComputedStyle(target),\\n      origin = _getComputedProperty(target, _transformOriginProp) || \\\"0\\\",\\n      x,\\n      y,\\n      z,\\n      scaleX,\\n      scaleY,\\n      rotation,\\n      rotationX,\\n      rotationY,\\n      skewX,\\n      skewY,\\n      perspective,\\n      xOrigin,\\n      yOrigin,\\n      matrix,\\n      angle,\\n      cos,\\n      sin,\\n      a,\\n      b,\\n      c,\\n      d,\\n      a12,\\n      a22,\\n      t1,\\n      t2,\\n      t3,\\n      a13,\\n      a23,\\n      a33,\\n      a42,\\n      a43,\\n      a32;\\n  x = y = z = rotation = rotationX = rotationY = skewX = skewY = perspective = 0;\\n  scaleX = scaleY = 1;\\n  cache.svg = !!(target.getCTM && _isSVG(target));\\n\\n  if (cs.translate) {\\n    // accommodate independent transforms by combining them into normal ones.\\n    if (cs.translate !== \\\"none\\\" || cs.scale !== \\\"none\\\" || cs.rotate !== \\\"none\\\") {\\n      style[_transformProp] = (cs.translate !== \\\"none\\\" ? \\\"translate3d(\\\" + (cs.translate + \\\" 0 0\\\").split(\\\" \\\").slice(0, 3).join(\\\", \\\") + \\\") \\\" : \\\"\\\") + (cs.rotate !== \\\"none\\\" ? \\\"rotate(\\\" + cs.rotate + \\\") \\\" : \\\"\\\") + (cs.scale !== \\\"none\\\" ? \\\"scale(\\\" + cs.scale.split(\\\" \\\").join(\\\",\\\") + \\\") \\\" : \\\"\\\") + (cs[_transformProp] !== \\\"none\\\" ? cs[_transformProp] : \\\"\\\");\\n    }\\n\\n    style.scale = style.rotate = style.translate = \\\"none\\\";\\n  }\\n\\n  matrix = _getMatrix(target, cache.svg);\\n\\n  if (cache.svg) {\\n    if (cache.uncache) {\\n      // if cache.uncache is true (and maybe if origin is 0,0), we need to set element.style.transformOrigin = (cache.xOrigin - bbox.x) + \\\"px \\\" + (cache.yOrigin - bbox.y) + \\\"px\\\". Previously we let the data-svg-origin stay instead, but when introducing revert(), it complicated things.\\n      t2 = target.getBBox();\\n      origin = cache.xOrigin - t2.x + \\\"px \\\" + (cache.yOrigin - t2.y) + \\\"px\\\";\\n      t1 = \\\"\\\";\\n    } else {\\n      t1 = !uncache && target.getAttribute(\\\"data-svg-origin\\\"); //  Remember, to work around browser inconsistencies we always force SVG elements' transformOrigin to 0,0 and offset the translation accordingly.\\n    }\\n\\n    _applySVGOrigin(target, t1 || origin, !!t1 || cache.originIsAbsolute, cache.smooth !== false, matrix);\\n  }\\n\\n  xOrigin = cache.xOrigin || 0;\\n  yOrigin = cache.yOrigin || 0;\\n\\n  if (matrix !== _identity2DMatrix) {\\n    a = matrix[0]; //a11\\n\\n    b = matrix[1]; //a21\\n\\n    c = matrix[2]; //a31\\n\\n    d = matrix[3]; //a41\\n\\n    x = a12 = matrix[4];\\n    y = a22 = matrix[5]; //2D matrix\\n\\n    if (matrix.length === 6) {\\n      scaleX = Math.sqrt(a * a + b * b);\\n      scaleY = Math.sqrt(d * d + c * c);\\n      rotation = a || b ? _atan2(b, a) * _RAD2DEG : 0; //note: if scaleX is 0, we cannot accurately measure rotation. Same for skewX with a scaleY of 0. Therefore, we default to the previously recorded value (or zero if that doesn't exist).\\n\\n      skewX = c || d ? _atan2(c, d) * _RAD2DEG + rotation : 0;\\n      skewX && (scaleY *= Math.abs(Math.cos(skewX * _DEG2RAD)));\\n\\n      if (cache.svg) {\\n        x -= xOrigin - (xOrigin * a + yOrigin * c);\\n        y -= yOrigin - (xOrigin * b + yOrigin * d);\\n      } //3D matrix\\n\\n    } else {\\n      a32 = matrix[6];\\n      a42 = matrix[7];\\n      a13 = matrix[8];\\n      a23 = matrix[9];\\n      a33 = matrix[10];\\n      a43 = matrix[11];\\n      x = matrix[12];\\n      y = matrix[13];\\n      z = matrix[14];\\n      angle = _atan2(a32, a33);\\n      rotationX = angle * _RAD2DEG; //rotationX\\n\\n      if (angle) {\\n        cos = Math.cos(-angle);\\n        sin = Math.sin(-angle);\\n        t1 = a12 * cos + a13 * sin;\\n        t2 = a22 * cos + a23 * sin;\\n        t3 = a32 * cos + a33 * sin;\\n        a13 = a12 * -sin + a13 * cos;\\n        a23 = a22 * -sin + a23 * cos;\\n        a33 = a32 * -sin + a33 * cos;\\n        a43 = a42 * -sin + a43 * cos;\\n        a12 = t1;\\n        a22 = t2;\\n        a32 = t3;\\n      } //rotationY\\n\\n\\n      angle = _atan2(-c, a33);\\n      rotationY = angle * _RAD2DEG;\\n\\n      if (angle) {\\n        cos = Math.cos(-angle);\\n        sin = Math.sin(-angle);\\n        t1 = a * cos - a13 * sin;\\n        t2 = b * cos - a23 * sin;\\n        t3 = c * cos - a33 * sin;\\n        a43 = d * sin + a43 * cos;\\n        a = t1;\\n        b = t2;\\n        c = t3;\\n      } //rotationZ\\n\\n\\n      angle = _atan2(b, a);\\n      rotation = angle * _RAD2DEG;\\n\\n      if (angle) {\\n        cos = Math.cos(angle);\\n        sin = Math.sin(angle);\\n        t1 = a * cos + b * sin;\\n        t2 = a12 * cos + a22 * sin;\\n        b = b * cos - a * sin;\\n        a22 = a22 * cos - a12 * sin;\\n        a = t1;\\n        a12 = t2;\\n      }\\n\\n      if (rotationX && Math.abs(rotationX) + Math.abs(rotation) > 359.9) {\\n        //when rotationY is set, it will often be parsed as 180 degrees different than it should be, and rotationX and rotation both being 180 (it looks the same), so we adjust for that here.\\n        rotationX = rotation = 0;\\n        rotationY = 180 - rotationY;\\n      }\\n\\n      scaleX = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(Math.sqrt(a * a + b * b + c * c));\\n      scaleY = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(Math.sqrt(a22 * a22 + a32 * a32));\\n      angle = _atan2(a12, a22);\\n      skewX = Math.abs(angle) > 0.0002 ? angle * _RAD2DEG : 0;\\n      perspective = a43 ? 1 / (a43 < 0 ? -a43 : a43) : 0;\\n    }\\n\\n    if (cache.svg) {\\n      //sense if there are CSS transforms applied on an SVG element in which case we must overwrite them when rendering. The transform attribute is more reliable cross-browser, but we can't just remove the CSS ones because they may be applied in a CSS rule somewhere (not just inline).\\n      t1 = target.getAttribute(\\\"transform\\\");\\n      cache.forceCSS = target.setAttribute(\\\"transform\\\", \\\"\\\") || !_isNullTransform(_getComputedProperty(target, _transformProp));\\n      t1 && target.setAttribute(\\\"transform\\\", t1);\\n    }\\n  }\\n\\n  if (Math.abs(skewX) > 90 && Math.abs(skewX) < 270) {\\n    if (invertedScaleX) {\\n      scaleX *= -1;\\n      skewX += rotation <= 0 ? 180 : -180;\\n      rotation += rotation <= 0 ? 180 : -180;\\n    } else {\\n      scaleY *= -1;\\n      skewX += skewX <= 0 ? 180 : -180;\\n    }\\n  }\\n\\n  uncache = uncache || cache.uncache;\\n  cache.x = x - ((cache.xPercent = x && (!uncache && cache.xPercent || (Math.round(target.offsetWidth / 2) === Math.round(-x) ? -50 : 0))) ? target.offsetWidth * cache.xPercent / 100 : 0) + px;\\n  cache.y = y - ((cache.yPercent = y && (!uncache && cache.yPercent || (Math.round(target.offsetHeight / 2) === Math.round(-y) ? -50 : 0))) ? target.offsetHeight * cache.yPercent / 100 : 0) + px;\\n  cache.z = z + px;\\n  cache.scaleX = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(scaleX);\\n  cache.scaleY = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(scaleY);\\n  cache.rotation = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(rotation) + deg;\\n  cache.rotationX = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(rotationX) + deg;\\n  cache.rotationY = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(rotationY) + deg;\\n  cache.skewX = skewX + deg;\\n  cache.skewY = skewY + deg;\\n  cache.transformPerspective = perspective + px;\\n\\n  if (cache.zOrigin = parseFloat(origin.split(\\\" \\\")[2]) || !uncache && cache.zOrigin || 0) {\\n    style[_transformOriginProp] = _firstTwoOnly(origin);\\n  }\\n\\n  cache.xOffset = cache.yOffset = 0;\\n  cache.force3D = _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.force3D;\\n  cache.renderTransform = cache.svg ? _renderSVGTransforms : _supports3D ? _renderCSSTransforms : _renderNon3DTransforms;\\n  cache.uncache = 0;\\n  return cache;\\n},\\n    _firstTwoOnly = function _firstTwoOnly(value) {\\n  return (value = value.split(\\\" \\\"))[0] + \\\" \\\" + value[1];\\n},\\n    //for handling transformOrigin values, stripping out the 3rd dimension\\n_addPxTranslate = function _addPxTranslate(target, start, value) {\\n  var unit = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(start);\\n  return (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(parseFloat(start) + parseFloat(_convertToUnit(target, \\\"x\\\", value + \\\"px\\\", unit))) + unit;\\n},\\n    _renderNon3DTransforms = function _renderNon3DTransforms(ratio, cache) {\\n  cache.z = \\\"0px\\\";\\n  cache.rotationY = cache.rotationX = \\\"0deg\\\";\\n  cache.force3D = 0;\\n\\n  _renderCSSTransforms(ratio, cache);\\n},\\n    _zeroDeg = \\\"0deg\\\",\\n    _zeroPx = \\\"0px\\\",\\n    _endParenthesis = \\\") \\\",\\n    _renderCSSTransforms = function _renderCSSTransforms(ratio, cache) {\\n  var _ref = cache || this,\\n      xPercent = _ref.xPercent,\\n      yPercent = _ref.yPercent,\\n      x = _ref.x,\\n      y = _ref.y,\\n      z = _ref.z,\\n      rotation = _ref.rotation,\\n      rotationY = _ref.rotationY,\\n      rotationX = _ref.rotationX,\\n      skewX = _ref.skewX,\\n      skewY = _ref.skewY,\\n      scaleX = _ref.scaleX,\\n      scaleY = _ref.scaleY,\\n      transformPerspective = _ref.transformPerspective,\\n      force3D = _ref.force3D,\\n      target = _ref.target,\\n      zOrigin = _ref.zOrigin,\\n      transforms = \\\"\\\",\\n      use3D = force3D === \\\"auto\\\" && ratio && ratio !== 1 || force3D === true; // Safari has a bug that causes it not to render 3D transform-origin values properly, so we force the z origin to 0, record it in the cache, and then do the math here to offset the translate values accordingly (basically do the 3D transform-origin part manually)\\n\\n\\n  if (zOrigin && (rotationX !== _zeroDeg || rotationY !== _zeroDeg)) {\\n    var angle = parseFloat(rotationY) * _DEG2RAD,\\n        a13 = Math.sin(angle),\\n        a33 = Math.cos(angle),\\n        cos;\\n\\n    angle = parseFloat(rotationX) * _DEG2RAD;\\n    cos = Math.cos(angle);\\n    x = _addPxTranslate(target, x, a13 * cos * -zOrigin);\\n    y = _addPxTranslate(target, y, -Math.sin(angle) * -zOrigin);\\n    z = _addPxTranslate(target, z, a33 * cos * -zOrigin + zOrigin);\\n  }\\n\\n  if (transformPerspective !== _zeroPx) {\\n    transforms += \\\"perspective(\\\" + transformPerspective + _endParenthesis;\\n  }\\n\\n  if (xPercent || yPercent) {\\n    transforms += \\\"translate(\\\" + xPercent + \\\"%, \\\" + yPercent + \\\"%) \\\";\\n  }\\n\\n  if (use3D || x !== _zeroPx || y !== _zeroPx || z !== _zeroPx) {\\n    transforms += z !== _zeroPx || use3D ? \\\"translate3d(\\\" + x + \\\", \\\" + y + \\\", \\\" + z + \\\") \\\" : \\\"translate(\\\" + x + \\\", \\\" + y + _endParenthesis;\\n  }\\n\\n  if (rotation !== _zeroDeg) {\\n    transforms += \\\"rotate(\\\" + rotation + _endParenthesis;\\n  }\\n\\n  if (rotationY !== _zeroDeg) {\\n    transforms += \\\"rotateY(\\\" + rotationY + _endParenthesis;\\n  }\\n\\n  if (rotationX !== _zeroDeg) {\\n    transforms += \\\"rotateX(\\\" + rotationX + _endParenthesis;\\n  }\\n\\n  if (skewX !== _zeroDeg || skewY !== _zeroDeg) {\\n    transforms += \\\"skew(\\\" + skewX + \\\", \\\" + skewY + _endParenthesis;\\n  }\\n\\n  if (scaleX !== 1 || scaleY !== 1) {\\n    transforms += \\\"scale(\\\" + scaleX + \\\", \\\" + scaleY + _endParenthesis;\\n  }\\n\\n  target.style[_transformProp] = transforms || \\\"translate(0, 0)\\\";\\n},\\n    _renderSVGTransforms = function _renderSVGTransforms(ratio, cache) {\\n  var _ref2 = cache || this,\\n      xPercent = _ref2.xPercent,\\n      yPercent = _ref2.yPercent,\\n      x = _ref2.x,\\n      y = _ref2.y,\\n      rotation = _ref2.rotation,\\n      skewX = _ref2.skewX,\\n      skewY = _ref2.skewY,\\n      scaleX = _ref2.scaleX,\\n      scaleY = _ref2.scaleY,\\n      target = _ref2.target,\\n      xOrigin = _ref2.xOrigin,\\n      yOrigin = _ref2.yOrigin,\\n      xOffset = _ref2.xOffset,\\n      yOffset = _ref2.yOffset,\\n      forceCSS = _ref2.forceCSS,\\n      tx = parseFloat(x),\\n      ty = parseFloat(y),\\n      a11,\\n      a21,\\n      a12,\\n      a22,\\n      temp;\\n\\n  rotation = parseFloat(rotation);\\n  skewX = parseFloat(skewX);\\n  skewY = parseFloat(skewY);\\n\\n  if (skewY) {\\n    //for performance reasons, we combine all skewing into the skewX and rotation values. Remember, a skewY of 10 degrees looks the same as a rotation of 10 degrees plus a skewX of 10 degrees.\\n    skewY = parseFloat(skewY);\\n    skewX += skewY;\\n    rotation += skewY;\\n  }\\n\\n  if (rotation || skewX) {\\n    rotation *= _DEG2RAD;\\n    skewX *= _DEG2RAD;\\n    a11 = Math.cos(rotation) * scaleX;\\n    a21 = Math.sin(rotation) * scaleX;\\n    a12 = Math.sin(rotation - skewX) * -scaleY;\\n    a22 = Math.cos(rotation - skewX) * scaleY;\\n\\n    if (skewX) {\\n      skewY *= _DEG2RAD;\\n      temp = Math.tan(skewX - skewY);\\n      temp = Math.sqrt(1 + temp * temp);\\n      a12 *= temp;\\n      a22 *= temp;\\n\\n      if (skewY) {\\n        temp = Math.tan(skewY);\\n        temp = Math.sqrt(1 + temp * temp);\\n        a11 *= temp;\\n        a21 *= temp;\\n      }\\n    }\\n\\n    a11 = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(a11);\\n    a21 = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(a21);\\n    a12 = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(a12);\\n    a22 = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(a22);\\n  } else {\\n    a11 = scaleX;\\n    a22 = scaleY;\\n    a21 = a12 = 0;\\n  }\\n\\n  if (tx && !~(x + \\\"\\\").indexOf(\\\"px\\\") || ty && !~(y + \\\"\\\").indexOf(\\\"px\\\")) {\\n    tx = _convertToUnit(target, \\\"x\\\", x, \\\"px\\\");\\n    ty = _convertToUnit(target, \\\"y\\\", y, \\\"px\\\");\\n  }\\n\\n  if (xOrigin || yOrigin || xOffset || yOffset) {\\n    tx = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(tx + xOrigin - (xOrigin * a11 + yOrigin * a12) + xOffset);\\n    ty = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(ty + yOrigin - (xOrigin * a21 + yOrigin * a22) + yOffset);\\n  }\\n\\n  if (xPercent || yPercent) {\\n    //The SVG spec doesn't support percentage-based translation in the \\\"transform\\\" attribute, so we merge it into the translation to simulate it.\\n    temp = target.getBBox();\\n    tx = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(tx + xPercent / 100 * temp.width);\\n    ty = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(ty + yPercent / 100 * temp.height);\\n  }\\n\\n  temp = \\\"matrix(\\\" + a11 + \\\",\\\" + a21 + \\\",\\\" + a12 + \\\",\\\" + a22 + \\\",\\\" + tx + \\\",\\\" + ty + \\\")\\\";\\n  target.setAttribute(\\\"transform\\\", temp);\\n  forceCSS && (target.style[_transformProp] = temp); //some browsers prioritize CSS transforms over the transform attribute. When we sense that the user has CSS transforms applied, we must overwrite them this way (otherwise some browser simply won't render the transform attribute changes!)\\n},\\n    _addRotationalPropTween = function _addRotationalPropTween(plugin, target, property, startNum, endValue) {\\n  var cap = 360,\\n      isString = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._isString)(endValue),\\n      endNum = parseFloat(endValue) * (isString && ~endValue.indexOf(\\\"rad\\\") ? _RAD2DEG : 1),\\n      change = endNum - startNum,\\n      finalValue = startNum + change + \\\"deg\\\",\\n      direction,\\n      pt;\\n\\n  if (isString) {\\n    direction = endValue.split(\\\"_\\\")[1];\\n\\n    if (direction === \\\"short\\\") {\\n      change %= cap;\\n\\n      if (change !== change % (cap / 2)) {\\n        change += change < 0 ? cap : -cap;\\n      }\\n    }\\n\\n    if (direction === \\\"cw\\\" && change < 0) {\\n      change = (change + cap * _bigNum) % cap - ~~(change / cap) * cap;\\n    } else if (direction === \\\"ccw\\\" && change > 0) {\\n      change = (change - cap * _bigNum) % cap - ~~(change / cap) * cap;\\n    }\\n  }\\n\\n  plugin._pt = pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(plugin._pt, target, property, startNum, change, _renderPropWithEnd);\\n  pt.e = finalValue;\\n  pt.u = \\\"deg\\\";\\n\\n  plugin._props.push(property);\\n\\n  return pt;\\n},\\n    _assign = function _assign(target, source) {\\n  // Internet Explorer doesn't have Object.assign(), so we recreate it here.\\n  for (var p in source) {\\n    target[p] = source[p];\\n  }\\n\\n  return target;\\n},\\n    _addRawTransformPTs = function _addRawTransformPTs(plugin, transforms, target) {\\n  //for handling cases where someone passes in a whole transform string, like transform: \\\"scale(2, 3) rotate(20deg) translateY(30em)\\\"\\n  var startCache = _assign({}, target._gsap),\\n      exclude = \\\"perspective,force3D,transformOrigin,svgOrigin\\\",\\n      style = target.style,\\n      endCache,\\n      p,\\n      startValue,\\n      endValue,\\n      startNum,\\n      endNum,\\n      startUnit,\\n      endUnit;\\n\\n  if (startCache.svg) {\\n    startValue = target.getAttribute(\\\"transform\\\");\\n    target.setAttribute(\\\"transform\\\", \\\"\\\");\\n    style[_transformProp] = transforms;\\n    endCache = _parseTransform(target, 1);\\n\\n    _removeProperty(target, _transformProp);\\n\\n    target.setAttribute(\\\"transform\\\", startValue);\\n  } else {\\n    startValue = getComputedStyle(target)[_transformProp];\\n    style[_transformProp] = transforms;\\n    endCache = _parseTransform(target, 1);\\n    style[_transformProp] = startValue;\\n  }\\n\\n  for (p in _transformProps) {\\n    startValue = startCache[p];\\n    endValue = endCache[p];\\n\\n    if (startValue !== endValue && exclude.indexOf(p) < 0) {\\n      //tweening to no perspective gives very unintuitive results - just keep the same perspective in that case.\\n      startUnit = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(startValue);\\n      endUnit = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(endValue);\\n      startNum = startUnit !== endUnit ? _convertToUnit(target, p, startValue, endUnit) : parseFloat(startValue);\\n      endNum = parseFloat(endValue);\\n      plugin._pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(plugin._pt, endCache, p, startNum, endNum - startNum, _renderCSSProp);\\n      plugin._pt.u = endUnit || 0;\\n\\n      plugin._props.push(p);\\n    }\\n  }\\n\\n  _assign(endCache, startCache);\\n}; // handle splitting apart padding, margin, borderWidth, and borderRadius into their 4 components. Firefox, for example, won't report borderRadius correctly - it will only do borderTopLeftRadius and the other corners. We also want to handle paddingTop, marginLeft, borderRightWidth, etc.\\n\\n\\n(0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._forEachName)(\\\"padding,margin,Width,Radius\\\", function (name, index) {\\n  var t = \\\"Top\\\",\\n      r = \\\"Right\\\",\\n      b = \\\"Bottom\\\",\\n      l = \\\"Left\\\",\\n      props = (index < 3 ? [t, r, b, l] : [t + l, t + r, b + r, b + l]).map(function (side) {\\n    return index < 2 ? name + side : \\\"border\\\" + side + name;\\n  });\\n\\n  _specialProps[index > 1 ? \\\"border\\\" + name : name] = function (plugin, target, property, endValue, tween) {\\n    var a, vars;\\n\\n    if (arguments.length < 4) {\\n      // getter, passed target, property, and unit (from _get())\\n      a = props.map(function (prop) {\\n        return _get(plugin, prop, property);\\n      });\\n      vars = a.join(\\\" \\\");\\n      return vars.split(a[0]).length === 5 ? a[0] : vars;\\n    }\\n\\n    a = (endValue + \\\"\\\").split(\\\" \\\");\\n    vars = {};\\n    props.forEach(function (prop, i) {\\n      return vars[prop] = a[i] = a[i] || a[(i - 1) / 2 | 0];\\n    });\\n    plugin.init(target, vars, tween);\\n  };\\n});\\n\\nvar CSSPlugin = {\\n  name: \\\"css\\\",\\n  register: _initCore,\\n  targetTest: function targetTest(target) {\\n    return target.style && target.nodeType;\\n  },\\n  init: function init(target, vars, tween, index, targets) {\\n    var props = this._props,\\n        style = target.style,\\n        startAt = tween.vars.startAt,\\n        startValue,\\n        endValue,\\n        endNum,\\n        startNum,\\n        type,\\n        specialProp,\\n        p,\\n        startUnit,\\n        endUnit,\\n        relative,\\n        isTransformRelated,\\n        transformPropTween,\\n        cache,\\n        smooth,\\n        hasPriority,\\n        inlineProps;\\n    _pluginInitted || _initCore(); // we may call init() multiple times on the same plugin instance, like when adding special properties, so make sure we don't overwrite the revert data or inlineProps\\n\\n    this.styles = this.styles || _getStyleSaver(target);\\n    inlineProps = this.styles.props;\\n    this.tween = tween;\\n\\n    for (p in vars) {\\n      if (p === \\\"autoRound\\\") {\\n        continue;\\n      }\\n\\n      endValue = vars[p];\\n\\n      if (_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._plugins[p] && (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._checkPlugin)(p, vars, tween, index, target, targets)) {\\n        // plugins\\n        continue;\\n      }\\n\\n      type = typeof endValue;\\n      specialProp = _specialProps[p];\\n\\n      if (type === \\\"function\\\") {\\n        endValue = endValue.call(tween, index, target, targets);\\n        type = typeof endValue;\\n      }\\n\\n      if (type === \\\"string\\\" && ~endValue.indexOf(\\\"random(\\\")) {\\n        endValue = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._replaceRandom)(endValue);\\n      }\\n\\n      if (specialProp) {\\n        specialProp(this, target, p, endValue, tween) && (hasPriority = 1);\\n      } else if (p.substr(0, 2) === \\\"--\\\") {\\n        //CSS variable\\n        startValue = (getComputedStyle(target).getPropertyValue(p) + \\\"\\\").trim();\\n        endValue += \\\"\\\";\\n        _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._colorExp.lastIndex = 0;\\n\\n        if (!_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._colorExp.test(startValue)) {\\n          // colors don't have units\\n          startUnit = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(startValue);\\n          endUnit = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(endValue);\\n        }\\n\\n        endUnit ? startUnit !== endUnit && (startValue = _convertToUnit(target, p, startValue, endUnit) + endUnit) : startUnit && (endValue += startUnit);\\n        this.add(style, \\\"setProperty\\\", startValue, endValue, index, targets, 0, 0, p);\\n        props.push(p);\\n        inlineProps.push(p, 0, style[p]);\\n      } else if (type !== \\\"undefined\\\") {\\n        if (startAt && p in startAt) {\\n          // in case someone hard-codes a complex value as the start, like top: \\\"calc(2vh / 2)\\\". Without this, it'd use the computed value (always in px)\\n          startValue = typeof startAt[p] === \\\"function\\\" ? startAt[p].call(tween, index, target, targets) : startAt[p];\\n          (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._isString)(startValue) && ~startValue.indexOf(\\\"random(\\\") && (startValue = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._replaceRandom)(startValue));\\n          (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(startValue + \\\"\\\") || startValue === \\\"auto\\\" || (startValue += _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.units[p] || (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(_get(target, p)) || \\\"\\\"); // for cases when someone passes in a unitless value like {x: 100}; if we try setting translate(100, 0px) it won't work.\\n\\n          (startValue + \\\"\\\").charAt(1) === \\\"=\\\" && (startValue = _get(target, p)); // can't work with relative values\\n        } else {\\n          startValue = _get(target, p);\\n        }\\n\\n        startNum = parseFloat(startValue);\\n        relative = type === \\\"string\\\" && endValue.charAt(1) === \\\"=\\\" && endValue.substr(0, 2);\\n        relative && (endValue = endValue.substr(2));\\n        endNum = parseFloat(endValue);\\n\\n        if (p in _propertyAliases) {\\n          if (p === \\\"autoAlpha\\\") {\\n            //special case where we control the visibility along with opacity. We still allow the opacity value to pass through and get tweened.\\n            if (startNum === 1 && _get(target, \\\"visibility\\\") === \\\"hidden\\\" && endNum) {\\n              //if visibility is initially set to \\\"hidden\\\", we should interpret that as intent to make opacity 0 (a convenience)\\n              startNum = 0;\\n            }\\n\\n            inlineProps.push(\\\"visibility\\\", 0, style.visibility);\\n\\n            _addNonTweeningPT(this, style, \\\"visibility\\\", startNum ? \\\"inherit\\\" : \\\"hidden\\\", endNum ? \\\"inherit\\\" : \\\"hidden\\\", !endNum);\\n          }\\n\\n          if (p !== \\\"scale\\\" && p !== \\\"transform\\\") {\\n            p = _propertyAliases[p];\\n            ~p.indexOf(\\\",\\\") && (p = p.split(\\\",\\\")[0]);\\n          }\\n        }\\n\\n        isTransformRelated = p in _transformProps; //--- TRANSFORM-RELATED ---\\n\\n        if (isTransformRelated) {\\n          this.styles.save(p);\\n\\n          if (!transformPropTween) {\\n            cache = target._gsap;\\n            cache.renderTransform && !vars.parseTransform || _parseTransform(target, vars.parseTransform); // if, for example, gsap.set(... {transform:\\\"translateX(50vw)\\\"}), the _get() call doesn't parse the transform, thus cache.renderTransform won't be set yet so force the parsing of the transform here.\\n\\n            smooth = vars.smoothOrigin !== false && cache.smooth;\\n            transformPropTween = this._pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(this._pt, style, _transformProp, 0, 1, cache.renderTransform, cache, 0, -1); //the first time through, create the rendering PropTween so that it runs LAST (in the linked list, we keep adding to the beginning)\\n\\n            transformPropTween.dep = 1; //flag it as dependent so that if things get killed/overwritten and this is the only PropTween left, we can safely kill the whole tween.\\n          }\\n\\n          if (p === \\\"scale\\\") {\\n            this._pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(this._pt, cache, \\\"scaleY\\\", cache.scaleY, (relative ? (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._parseRelative)(cache.scaleY, relative + endNum) : endNum) - cache.scaleY || 0, _renderCSSProp);\\n            this._pt.u = 0;\\n            props.push(\\\"scaleY\\\", p);\\n            p += \\\"X\\\";\\n          } else if (p === \\\"transformOrigin\\\") {\\n            inlineProps.push(_transformOriginProp, 0, style[_transformOriginProp]);\\n            endValue = _convertKeywordsToPercentages(endValue); //in case something like \\\"left top\\\" or \\\"bottom right\\\" is passed in. Convert to percentages.\\n\\n            if (cache.svg) {\\n              _applySVGOrigin(target, endValue, 0, smooth, 0, this);\\n            } else {\\n              endUnit = parseFloat(endValue.split(\\\" \\\")[2]) || 0; //handle the zOrigin separately!\\n\\n              endUnit !== cache.zOrigin && _addNonTweeningPT(this, cache, \\\"zOrigin\\\", cache.zOrigin, endUnit);\\n\\n              _addNonTweeningPT(this, style, p, _firstTwoOnly(startValue), _firstTwoOnly(endValue));\\n            }\\n\\n            continue;\\n          } else if (p === \\\"svgOrigin\\\") {\\n            _applySVGOrigin(target, endValue, 1, smooth, 0, this);\\n\\n            continue;\\n          } else if (p in _rotationalProperties) {\\n            _addRotationalPropTween(this, cache, p, startNum, relative ? (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._parseRelative)(startNum, relative + endValue) : endValue);\\n\\n            continue;\\n          } else if (p === \\\"smoothOrigin\\\") {\\n            _addNonTweeningPT(this, cache, \\\"smooth\\\", cache.smooth, endValue);\\n\\n            continue;\\n          } else if (p === \\\"force3D\\\") {\\n            cache[p] = endValue;\\n            continue;\\n          } else if (p === \\\"transform\\\") {\\n            _addRawTransformPTs(this, endValue, target);\\n\\n            continue;\\n          }\\n        } else if (!(p in style)) {\\n          p = _checkPropPrefix(p) || p;\\n        }\\n\\n        if (isTransformRelated || (endNum || endNum === 0) && (startNum || startNum === 0) && !_complexExp.test(endValue) && p in style) {\\n          startUnit = (startValue + \\\"\\\").substr((startNum + \\\"\\\").length);\\n          endNum || (endNum = 0); // protect against NaN\\n\\n          endUnit = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(endValue) || (p in _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.units ? _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.units[p] : startUnit);\\n          startUnit !== endUnit && (startNum = _convertToUnit(target, p, startValue, endUnit));\\n          this._pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(this._pt, isTransformRelated ? cache : style, p, startNum, (relative ? (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._parseRelative)(startNum, relative + endNum) : endNum) - startNum, !isTransformRelated && (endUnit === \\\"px\\\" || p === \\\"zIndex\\\") && vars.autoRound !== false ? _renderRoundedCSSProp : _renderCSSProp);\\n          this._pt.u = endUnit || 0;\\n\\n          if (startUnit !== endUnit && endUnit !== \\\"%\\\") {\\n            //when the tween goes all the way back to the beginning, we need to revert it to the OLD/ORIGINAL value (with those units). We record that as a \\\"b\\\" (beginning) property and point to a render method that handles that. (performance optimization)\\n            this._pt.b = startValue;\\n            this._pt.r = _renderCSSPropWithBeginning;\\n          }\\n        } else if (!(p in style)) {\\n          if (p in target) {\\n            //maybe it's not a style - it could be a property added directly to an element in which case we'll try to animate that.\\n            this.add(target, p, startValue || target[p], relative ? relative + endValue : endValue, index, targets);\\n          } else if (p !== \\\"parseTransform\\\") {\\n            (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._missingPlugin)(p, endValue);\\n\\n            continue;\\n          }\\n        } else {\\n          _tweenComplexCSSString.call(this, target, p, startValue, relative ? relative + endValue : endValue);\\n        }\\n\\n        isTransformRelated || (p in style ? inlineProps.push(p, 0, style[p]) : typeof target[p] === \\\"function\\\" ? inlineProps.push(p, 2, target[p]()) : inlineProps.push(p, 1, startValue || target[p]));\\n        props.push(p);\\n      }\\n    }\\n\\n    hasPriority && (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._sortPropTweensByPriority)(this);\\n  },\\n  render: function render(ratio, data) {\\n    if (data.tween._time || !_reverting()) {\\n      var pt = data._pt;\\n\\n      while (pt) {\\n        pt.r(ratio, pt.d);\\n        pt = pt._next;\\n      }\\n    } else {\\n      data.styles.revert();\\n    }\\n  },\\n  get: _get,\\n  aliases: _propertyAliases,\\n  getSetter: function getSetter(target, property, plugin) {\\n    //returns a setter function that accepts target, property, value and applies it accordingly. Remember, properties like \\\"x\\\" aren't as simple as target.style.property = value because they've got to be applied to a proxy object and then merged into a transform string in a renderer.\\n    var p = _propertyAliases[property];\\n    p && p.indexOf(\\\",\\\") < 0 && (property = p);\\n    return property in _transformProps && property !== _transformOriginProp && (target._gsap.x || _get(target, \\\"x\\\")) ? plugin && _recentSetterPlugin === plugin ? property === \\\"scale\\\" ? _setterScale : _setterTransform : (_recentSetterPlugin = plugin || {}) && (property === \\\"scale\\\" ? _setterScaleWithRender : _setterTransformWithRender) : target.style && !(0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._isUndefined)(target.style[property]) ? _setterCSSStyle : ~property.indexOf(\\\"-\\\") ? _setterCSSProp : (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._getSetter)(target, property);\\n  },\\n  core: {\\n    _removeProperty: _removeProperty,\\n    _getMatrix: _getMatrix\\n  }\\n};\\n_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap.utils.checkPrefix = _checkPropPrefix;\\n_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap.core.getStyleSaver = _getStyleSaver;\\n\\n(function (positionAndScale, rotation, others, aliases) {\\n  var all = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._forEachName)(positionAndScale + \\\",\\\" + rotation + \\\",\\\" + others, function (name) {\\n    _transformProps[name] = 1;\\n  });\\n\\n  (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._forEachName)(rotation, function (name) {\\n    _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.units[name] = \\\"deg\\\";\\n    _rotationalProperties[name] = 1;\\n  });\\n\\n  _propertyAliases[all[13]] = positionAndScale + \\\",\\\" + rotation;\\n\\n  (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._forEachName)(aliases, function (name) {\\n    var split = name.split(\\\":\\\");\\n    _propertyAliases[split[1]] = all[split[0]];\\n  });\\n})(\\\"x,y,z,scale,scaleX,scaleY,xPercent,yPercent\\\", \\\"rotation,rotationX,rotationY,skewX,skewY\\\", \\\"transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective\\\", \\\"0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY\\\");\\n\\n(0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._forEachName)(\\\"x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective\\\", function (name) {\\n  _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.units[name] = \\\"px\\\";\\n});\\n\\n_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap.registerPlugin(CSSPlugin);\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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ZCxJQUFJLHdEQUFhO0FBQ2pCO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQSxFQUFFLDJEQUFZO0FBQ2Q7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDOztBQUVELDJEQUFZO0FBQ1osRUFBRSx3REFBYTtBQUNmLENBQUM7O0FBRUQsOERBQW1CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvZ3NhcC9DU1NQbHVnaW4uanM/OTYwZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENTU1BsdWdpbiAzLjEyLjdcbiAqIGh0dHBzOi8vZ3NhcC5jb21cbiAqXG4gKiBDb3B5cmlnaHQgMjAwOC0yMDI1LCBHcmVlblNvY2suIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhdCBodHRwczovL2dzYXAuY29tL3N0YW5kYXJkLWxpY2Vuc2Ugb3IgZm9yXG4gKiBDbHViIEdTQVAgbWVtYmVycywgdGhlIGFncmVlbWVudCBpc3N1ZWQgd2l0aCB0aGF0IG1lbWJlcnNoaXAuXG4gKiBAYXV0aG9yOiBKYWNrIERveWxlLCBqYWNrQGdyZWVuc29jay5jb21cbiovXG5cbi8qIGVzbGludC1kaXNhYmxlICovXG5pbXBvcnQgeyBnc2FwLCBfZ2V0UHJvcGVydHksIF9udW1FeHAsIF9udW1XaXRoVW5pdEV4cCwgZ2V0VW5pdCwgX2lzU3RyaW5nLCBfaXNVbmRlZmluZWQsIF9yZW5kZXJDb21wbGV4U3RyaW5nLCBfcmVsRXhwLCBfZm9yRWFjaE5hbWUsIF9zb3J0UHJvcFR3ZWVuc0J5UHJpb3JpdHksIF9jb2xvclN0cmluZ0ZpbHRlciwgX2NoZWNrUGx1Z2luLCBfcmVwbGFjZVJhbmRvbSwgX3BsdWdpbnMsIEdTQ2FjaGUsIFByb3BUd2VlbiwgX2NvbmZpZywgX3RpY2tlciwgX3JvdW5kLCBfbWlzc2luZ1BsdWdpbiwgX2dldFNldHRlciwgX2dldENhY2hlLCBfY29sb3JFeHAsIF9wYXJzZVJlbGF0aXZlLCBfc2V0RGVmYXVsdHMsIF9yZW1vdmVMaW5rZWRMaXN0SXRlbSAvL2ZvciB0aGUgY29tbWVudGVkLW91dCBjbGFzc05hbWUgZmVhdHVyZS5cbn0gZnJvbSBcIi4vZ3NhcC1jb3JlLmpzXCI7XG5cbnZhciBfd2luLFxuICAgIF9kb2MsXG4gICAgX2RvY0VsZW1lbnQsXG4gICAgX3BsdWdpbkluaXR0ZWQsXG4gICAgX3RlbXBEaXYsXG4gICAgX3RlbXBEaXZTdHlsZXIsXG4gICAgX3JlY2VudFNldHRlclBsdWdpbixcbiAgICBfcmV2ZXJ0aW5nLFxuICAgIF93aW5kb3dFeGlzdHMgPSBmdW5jdGlvbiBfd2luZG93RXhpc3RzKCkge1xuICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIjtcbn0sXG4gICAgX3RyYW5zZm9ybVByb3BzID0ge30sXG4gICAgX1JBRDJERUcgPSAxODAgLyBNYXRoLlBJLFxuICAgIF9ERUcyUkFEID0gTWF0aC5QSSAvIDE4MCxcbiAgICBfYXRhbjIgPSBNYXRoLmF0YW4yLFxuICAgIF9iaWdOdW0gPSAxZTgsXG4gICAgX2NhcHNFeHAgPSAvKFtBLVpdKS9nLFxuICAgIF9ob3Jpem9udGFsRXhwID0gLyhsZWZ0fHJpZ2h0fHdpZHRofG1hcmdpbnxwYWRkaW5nfHgpL2ksXG4gICAgX2NvbXBsZXhFeHAgPSAvW1xccyxcXChdXFxTLyxcbiAgICBfcHJvcGVydHlBbGlhc2VzID0ge1xuICBhdXRvQWxwaGE6IFwib3BhY2l0eSx2aXNpYmlsaXR5XCIsXG4gIHNjYWxlOiBcInNjYWxlWCxzY2FsZVlcIixcbiAgYWxwaGE6IFwib3BhY2l0eVwiXG59LFxuICAgIF9yZW5kZXJDU1NQcm9wID0gZnVuY3Rpb24gX3JlbmRlckNTU1Byb3AocmF0aW8sIGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEuc2V0KGRhdGEudCwgZGF0YS5wLCBNYXRoLnJvdW5kKChkYXRhLnMgKyBkYXRhLmMgKiByYXRpbykgKiAxMDAwMCkgLyAxMDAwMCArIGRhdGEudSwgZGF0YSk7XG59LFxuICAgIF9yZW5kZXJQcm9wV2l0aEVuZCA9IGZ1bmN0aW9uIF9yZW5kZXJQcm9wV2l0aEVuZChyYXRpbywgZGF0YSkge1xuICByZXR1cm4gZGF0YS5zZXQoZGF0YS50LCBkYXRhLnAsIHJhdGlvID09PSAxID8gZGF0YS5lIDogTWF0aC5yb3VuZCgoZGF0YS5zICsgZGF0YS5jICogcmF0aW8pICogMTAwMDApIC8gMTAwMDAgKyBkYXRhLnUsIGRhdGEpO1xufSxcbiAgICBfcmVuZGVyQ1NTUHJvcFdpdGhCZWdpbm5pbmcgPSBmdW5jdGlvbiBfcmVuZGVyQ1NTUHJvcFdpdGhCZWdpbm5pbmcocmF0aW8sIGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEuc2V0KGRhdGEudCwgZGF0YS5wLCByYXRpbyA/IE1hdGgucm91bmQoKGRhdGEucyArIGRhdGEuYyAqIHJhdGlvKSAqIDEwMDAwKSAvIDEwMDAwICsgZGF0YS51IDogZGF0YS5iLCBkYXRhKTtcbn0sXG4gICAgLy9pZiB1bml0cyBjaGFuZ2UsIHdlIG5lZWQgYSB3YXkgdG8gcmVuZGVyIHRoZSBvcmlnaW5hbCB1bml0L3ZhbHVlIHdoZW4gdGhlIHR3ZWVuIGdvZXMgYWxsIHRoZSB3YXkgYmFjayB0byB0aGUgYmVnaW5uaW5nIChyYXRpbzowKVxuX3JlbmRlclJvdW5kZWRDU1NQcm9wID0gZnVuY3Rpb24gX3JlbmRlclJvdW5kZWRDU1NQcm9wKHJhdGlvLCBkYXRhKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGEucyArIGRhdGEuYyAqIHJhdGlvO1xuICBkYXRhLnNldChkYXRhLnQsIGRhdGEucCwgfn4odmFsdWUgKyAodmFsdWUgPCAwID8gLS41IDogLjUpKSArIGRhdGEudSwgZGF0YSk7XG59LFxuICAgIF9yZW5kZXJOb25Ud2VlbmluZ1ZhbHVlID0gZnVuY3Rpb24gX3JlbmRlck5vblR3ZWVuaW5nVmFsdWUocmF0aW8sIGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEuc2V0KGRhdGEudCwgZGF0YS5wLCByYXRpbyA/IGRhdGEuZSA6IGRhdGEuYiwgZGF0YSk7XG59LFxuICAgIF9yZW5kZXJOb25Ud2VlbmluZ1ZhbHVlT25seUF0RW5kID0gZnVuY3Rpb24gX3JlbmRlck5vblR3ZWVuaW5nVmFsdWVPbmx5QXRFbmQocmF0aW8sIGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEuc2V0KGRhdGEudCwgZGF0YS5wLCByYXRpbyAhPT0gMSA/IGRhdGEuYiA6IGRhdGEuZSwgZGF0YSk7XG59LFxuICAgIF9zZXR0ZXJDU1NTdHlsZSA9IGZ1bmN0aW9uIF9zZXR0ZXJDU1NTdHlsZSh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSkge1xuICByZXR1cm4gdGFyZ2V0LnN0eWxlW3Byb3BlcnR5XSA9IHZhbHVlO1xufSxcbiAgICBfc2V0dGVyQ1NTUHJvcCA9IGZ1bmN0aW9uIF9zZXR0ZXJDU1NQcm9wKHRhcmdldCwgcHJvcGVydHksIHZhbHVlKSB7XG4gIHJldHVybiB0YXJnZXQuc3R5bGUuc2V0UHJvcGVydHkocHJvcGVydHksIHZhbHVlKTtcbn0sXG4gICAgX3NldHRlclRyYW5zZm9ybSA9IGZ1bmN0aW9uIF9zZXR0ZXJUcmFuc2Zvcm0odGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgcmV0dXJuIHRhcmdldC5fZ3NhcFtwcm9wZXJ0eV0gPSB2YWx1ZTtcbn0sXG4gICAgX3NldHRlclNjYWxlID0gZnVuY3Rpb24gX3NldHRlclNjYWxlKHRhcmdldCwgcHJvcGVydHksIHZhbHVlKSB7XG4gIHJldHVybiB0YXJnZXQuX2dzYXAuc2NhbGVYID0gdGFyZ2V0Ll9nc2FwLnNjYWxlWSA9IHZhbHVlO1xufSxcbiAgICBfc2V0dGVyU2NhbGVXaXRoUmVuZGVyID0gZnVuY3Rpb24gX3NldHRlclNjYWxlV2l0aFJlbmRlcih0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSwgZGF0YSwgcmF0aW8pIHtcbiAgdmFyIGNhY2hlID0gdGFyZ2V0Ll9nc2FwO1xuICBjYWNoZS5zY2FsZVggPSBjYWNoZS5zY2FsZVkgPSB2YWx1ZTtcbiAgY2FjaGUucmVuZGVyVHJhbnNmb3JtKHJhdGlvLCBjYWNoZSk7XG59LFxuICAgIF9zZXR0ZXJUcmFuc2Zvcm1XaXRoUmVuZGVyID0gZnVuY3Rpb24gX3NldHRlclRyYW5zZm9ybVdpdGhSZW5kZXIodGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUsIGRhdGEsIHJhdGlvKSB7XG4gIHZhciBjYWNoZSA9IHRhcmdldC5fZ3NhcDtcbiAgY2FjaGVbcHJvcGVydHldID0gdmFsdWU7XG4gIGNhY2hlLnJlbmRlclRyYW5zZm9ybShyYXRpbywgY2FjaGUpO1xufSxcbiAgICBfdHJhbnNmb3JtUHJvcCA9IFwidHJhbnNmb3JtXCIsXG4gICAgX3RyYW5zZm9ybU9yaWdpblByb3AgPSBfdHJhbnNmb3JtUHJvcCArIFwiT3JpZ2luXCIsXG4gICAgX3NhdmVTdHlsZSA9IGZ1bmN0aW9uIF9zYXZlU3R5bGUocHJvcGVydHksIGlzTm90Q1NTKSB7XG4gIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgdmFyIHRhcmdldCA9IHRoaXMudGFyZ2V0LFxuICAgICAgc3R5bGUgPSB0YXJnZXQuc3R5bGUsXG4gICAgICBjYWNoZSA9IHRhcmdldC5fZ3NhcDtcblxuICBpZiAocHJvcGVydHkgaW4gX3RyYW5zZm9ybVByb3BzICYmIHN0eWxlKSB7XG4gICAgdGhpcy50Zm0gPSB0aGlzLnRmbSB8fCB7fTtcblxuICAgIGlmIChwcm9wZXJ0eSAhPT0gXCJ0cmFuc2Zvcm1cIikge1xuICAgICAgcHJvcGVydHkgPSBfcHJvcGVydHlBbGlhc2VzW3Byb3BlcnR5XSB8fCBwcm9wZXJ0eTtcbiAgICAgIH5wcm9wZXJ0eS5pbmRleE9mKFwiLFwiKSA/IHByb3BlcnR5LnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy50Zm1bYV0gPSBfZ2V0KHRhcmdldCwgYSk7XG4gICAgICB9KSA6IHRoaXMudGZtW3Byb3BlcnR5XSA9IGNhY2hlLnggPyBjYWNoZVtwcm9wZXJ0eV0gOiBfZ2V0KHRhcmdldCwgcHJvcGVydHkpOyAvLyBub3RlOiBzY2FsZSB3b3VsZCBtYXAgdG8gXCJzY2FsZVgsc2NhbGVZXCIsIHRodXMgd2UgbG9vcCBhbmQgYXBwbHkgdGhlbSBib3RoLlxuXG4gICAgICBwcm9wZXJ0eSA9PT0gX3RyYW5zZm9ybU9yaWdpblByb3AgJiYgKHRoaXMudGZtLnpPcmlnaW4gPSBjYWNoZS56T3JpZ2luKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIF9wcm9wZXJ0eUFsaWFzZXMudHJhbnNmb3JtLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIHJldHVybiBfc2F2ZVN0eWxlLmNhbGwoX3RoaXMsIHAsIGlzTm90Q1NTKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLmluZGV4T2YoX3RyYW5zZm9ybVByb3ApID49IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2FjaGUuc3ZnKSB7XG4gICAgICB0aGlzLnN2Z28gPSB0YXJnZXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1zdmctb3JpZ2luXCIpO1xuICAgICAgdGhpcy5wcm9wcy5wdXNoKF90cmFuc2Zvcm1PcmlnaW5Qcm9wLCBpc05vdENTUywgXCJcIik7XG4gICAgfVxuXG4gICAgcHJvcGVydHkgPSBfdHJhbnNmb3JtUHJvcDtcbiAgfVxuXG4gIChzdHlsZSB8fCBpc05vdENTUykgJiYgdGhpcy5wcm9wcy5wdXNoKHByb3BlcnR5LCBpc05vdENTUywgc3R5bGVbcHJvcGVydHldKTtcbn0sXG4gICAgX3JlbW92ZUluZGVwZW5kZW50VHJhbnNmb3JtcyA9IGZ1bmN0aW9uIF9yZW1vdmVJbmRlcGVuZGVudFRyYW5zZm9ybXMoc3R5bGUpIHtcbiAgaWYgKHN0eWxlLnRyYW5zbGF0ZSkge1xuICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KFwidHJhbnNsYXRlXCIpO1xuICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KFwic2NhbGVcIik7XG4gICAgc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJyb3RhdGVcIik7XG4gIH1cbn0sXG4gICAgX3JldmVydFN0eWxlID0gZnVuY3Rpb24gX3JldmVydFN0eWxlKCkge1xuICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgdGFyZ2V0ID0gdGhpcy50YXJnZXQsXG4gICAgICBzdHlsZSA9IHRhcmdldC5zdHlsZSxcbiAgICAgIGNhY2hlID0gdGFyZ2V0Ll9nc2FwLFxuICAgICAgaSxcbiAgICAgIHA7XG5cbiAgZm9yIChpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgLy8gc3RvcmVkIGxpa2UgdGhpczogcHJvcGVydHksIGlzTm90Q1NTLCB2YWx1ZVxuICAgIGlmICghcHJvcHNbaSArIDFdKSB7XG4gICAgICBwcm9wc1tpICsgMl0gPyBzdHlsZVtwcm9wc1tpXV0gPSBwcm9wc1tpICsgMl0gOiBzdHlsZS5yZW1vdmVQcm9wZXJ0eShwcm9wc1tpXS5zdWJzdHIoMCwgMikgPT09IFwiLS1cIiA/IHByb3BzW2ldIDogcHJvcHNbaV0ucmVwbGFjZShfY2Fwc0V4cCwgXCItJDFcIikudG9Mb3dlckNhc2UoKSk7XG4gICAgfSBlbHNlIGlmIChwcm9wc1tpICsgMV0gPT09IDIpIHtcbiAgICAgIC8vIG5vbi1DU1MgdmFsdWUgKGZ1bmN0aW9uLWJhc2VkKVxuICAgICAgdGFyZ2V0W3Byb3BzW2ldXShwcm9wc1tpICsgMl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBub24tQ1NTIHZhbHVlIChub3QgZnVuY3Rpb24tYmFzZWQpXG4gICAgICB0YXJnZXRbcHJvcHNbaV1dID0gcHJvcHNbaSArIDJdO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnRmbSkge1xuICAgIGZvciAocCBpbiB0aGlzLnRmbSkge1xuICAgICAgY2FjaGVbcF0gPSB0aGlzLnRmbVtwXTtcbiAgICB9XG5cbiAgICBpZiAoY2FjaGUuc3ZnKSB7XG4gICAgICBjYWNoZS5yZW5kZXJUcmFuc2Zvcm0oKTtcbiAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXN2Zy1vcmlnaW5cIiwgdGhpcy5zdmdvIHx8IFwiXCIpO1xuICAgIH1cblxuICAgIGkgPSBfcmV2ZXJ0aW5nKCk7XG5cbiAgICBpZiAoKCFpIHx8ICFpLmlzU3RhcnQpICYmICFzdHlsZVtfdHJhbnNmb3JtUHJvcF0pIHtcbiAgICAgIF9yZW1vdmVJbmRlcGVuZGVudFRyYW5zZm9ybXMoc3R5bGUpO1xuXG4gICAgICBpZiAoY2FjaGUuek9yaWdpbiAmJiBzdHlsZVtfdHJhbnNmb3JtT3JpZ2luUHJvcF0pIHtcbiAgICAgICAgc3R5bGVbX3RyYW5zZm9ybU9yaWdpblByb3BdICs9IFwiIFwiICsgY2FjaGUuek9yaWdpbiArIFwicHhcIjsgLy8gc2luY2Ugd2UncmUgdW5jYWNoaW5nLCB3ZSBtdXN0IHB1dCB0aGUgek9yaWdpbiBiYWNrIGludG8gdGhlIHRyYW5zZm9ybU9yaWdpbiBzbyB0aGF0IHdlIGNhbiBwdWxsIGl0IG91dCBhY2N1cmF0ZWx5IHdoZW4gd2UgcGFyc2UgYWdhaW4uIE90aGVyd2lzZSwgd2UnZCBsb3NlIHRoZSB6IHBvcnRpb24gb2YgdGhlIG9yaWdpbiBzaW5jZSB3ZSBleHRyYWN0IGl0IHRvIHByb3RlY3QgZnJvbSBTYWZhcmkgYnVncy5cblxuICAgICAgICBjYWNoZS56T3JpZ2luID0gMDtcbiAgICAgICAgY2FjaGUucmVuZGVyVHJhbnNmb3JtKCk7XG4gICAgICB9XG5cbiAgICAgIGNhY2hlLnVuY2FjaGUgPSAxOyAvLyBpZiBpdCdzIGEgc3RhcnRBdCB0aGF0J3MgYmVpbmcgcmV2ZXJ0ZWQgaW4gdGhlIF9pbml0VHdlZW4oKSBvZiB0aGUgY29yZSwgd2UgZG9uJ3QgbmVlZCB0byB1bmNhY2hlIHRyYW5zZm9ybXMuIFRoaXMgaXMgcHVyZWx5IGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLlxuICAgIH1cbiAgfVxufSxcbiAgICBfZ2V0U3R5bGVTYXZlciA9IGZ1bmN0aW9uIF9nZXRTdHlsZVNhdmVyKHRhcmdldCwgcHJvcGVydGllcykge1xuICB2YXIgc2F2ZXIgPSB7XG4gICAgdGFyZ2V0OiB0YXJnZXQsXG4gICAgcHJvcHM6IFtdLFxuICAgIHJldmVydDogX3JldmVydFN0eWxlLFxuICAgIHNhdmU6IF9zYXZlU3R5bGVcbiAgfTtcbiAgdGFyZ2V0Ll9nc2FwIHx8IGdzYXAuY29yZS5nZXRDYWNoZSh0YXJnZXQpOyAvLyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSdzIGEgX2dzYXAgY2FjaGUgZGVmaW5lZCBiZWNhdXNlIHdlIHJlYWQgZnJvbSBpdCBpbiBfc2F2ZVN0eWxlKCkgYW5kIGl0J3MgbW9yZSBlZmZpY2llbnQgdG8ganVzdCBjaGVjayBpdCBoZXJlIG9uY2UuXG5cbiAgcHJvcGVydGllcyAmJiB0YXJnZXQuc3R5bGUgJiYgdGFyZ2V0Lm5vZGVUeXBlICYmIHByb3BlcnRpZXMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gc2F2ZXIuc2F2ZShwKTtcbiAgfSk7IC8vIG1ha2Ugc3VyZSBpdCdzIGEgRE9NIG5vZGUgdG9vLlxuXG4gIHJldHVybiBzYXZlcjtcbn0sXG4gICAgX3N1cHBvcnRzM0QsXG4gICAgX2NyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiBfY3JlYXRlRWxlbWVudCh0eXBlLCBucykge1xuICB2YXIgZSA9IF9kb2MuY3JlYXRlRWxlbWVudE5TID8gX2RvYy5jcmVhdGVFbGVtZW50TlMoKG5zIHx8IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiKS5yZXBsYWNlKC9eaHR0cHMvLCBcImh0dHBcIiksIHR5cGUpIDogX2RvYy5jcmVhdGVFbGVtZW50KHR5cGUpOyAvL3NvbWUgc2VydmVycyBzd2FwIGluIGh0dHBzIGZvciBodHRwIGluIHRoZSBuYW1lc3BhY2Ugd2hpY2ggY2FuIGJyZWFrIHRoaW5ncywgbWFraW5nIFwic3R5bGVcIiBpbmFjY2Vzc2libGUuXG5cbiAgcmV0dXJuIGUgJiYgZS5zdHlsZSA/IGUgOiBfZG9jLmNyZWF0ZUVsZW1lbnQodHlwZSk7IC8vc29tZSBlbnZpcm9ubWVudHMgd29uJ3QgYWxsb3cgYWNjZXNzIHRvIHRoZSBlbGVtZW50J3Mgc3R5bGUgd2hlbiBjcmVhdGVkIHdpdGggYSBuYW1lc3BhY2UgaW4gd2hpY2ggY2FzZSB3ZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBjcmVhdGVFbGVtZW50KCkgdG8gd29yayBhcm91bmQgdGhlIGlzc3VlLiBBbHNvIG5vdGUgdGhhdCB3aGVuIEdTQVAgaXMgZW1iZWRkZWQgZGlyZWN0bHkgaW5zaWRlIGFuIFNWRyBmaWxlLCBjcmVhdGVFbGVtZW50KCkgd29uJ3QgYWxsb3cgYWNjZXNzIHRvIHRoZSBzdHlsZSBvYmplY3QgaW4gRmlyZWZveCAoc2VlIGh0dHBzOi8vZ3NhcC5jb20vZm9ydW1zL3RvcGljLzIwMjE1LXByb2JsZW0tdXNpbmctdHdlZW5tYXgtaW4tc3RhbmRhbG9uZS1zZWxmLWNvbnRhaW5pbmctc3ZnLWZpbGUtZXJyLWNhbm5vdC1zZXQtcHJvcGVydHktY3NzdGV4dC1vZi11bmRlZmluZWQvKS5cbn0sXG4gICAgX2dldENvbXB1dGVkUHJvcGVydHkgPSBmdW5jdGlvbiBfZ2V0Q29tcHV0ZWRQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5LCBza2lwUHJlZml4RmFsbGJhY2spIHtcbiAgdmFyIGNzID0gZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpO1xuICByZXR1cm4gY3NbcHJvcGVydHldIHx8IGNzLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkucmVwbGFjZShfY2Fwc0V4cCwgXCItJDFcIikudG9Mb3dlckNhc2UoKSkgfHwgY3MuZ2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eSkgfHwgIXNraXBQcmVmaXhGYWxsYmFjayAmJiBfZ2V0Q29tcHV0ZWRQcm9wZXJ0eSh0YXJnZXQsIF9jaGVja1Byb3BQcmVmaXgocHJvcGVydHkpIHx8IHByb3BlcnR5LCAxKSB8fCBcIlwiOyAvL2NzcyB2YXJpYWJsZXMgbWF5IG5vdCBuZWVkIGNhcHMgc3dhcHBlZCBvdXQgZm9yIGRhc2hlcyBhbmQgbG93ZXJjYXNlLlxufSxcbiAgICBfcHJlZml4ZXMgPSBcIk8sTW96LG1zLE1zLFdlYmtpdFwiLnNwbGl0KFwiLFwiKSxcbiAgICBfY2hlY2tQcm9wUHJlZml4ID0gZnVuY3Rpb24gX2NoZWNrUHJvcFByZWZpeChwcm9wZXJ0eSwgZWxlbWVudCwgcHJlZmVyUHJlZml4KSB7XG4gIHZhciBlID0gZWxlbWVudCB8fCBfdGVtcERpdixcbiAgICAgIHMgPSBlLnN0eWxlLFxuICAgICAgaSA9IDU7XG5cbiAgaWYgKHByb3BlcnR5IGluIHMgJiYgIXByZWZlclByZWZpeCkge1xuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfVxuXG4gIHByb3BlcnR5ID0gcHJvcGVydHkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBwcm9wZXJ0eS5zdWJzdHIoMSk7XG5cbiAgd2hpbGUgKGktLSAmJiAhKF9wcmVmaXhlc1tpXSArIHByb3BlcnR5IGluIHMpKSB7fVxuXG4gIHJldHVybiBpIDwgMCA/IG51bGwgOiAoaSA9PT0gMyA/IFwibXNcIiA6IGkgPj0gMCA/IF9wcmVmaXhlc1tpXSA6IFwiXCIpICsgcHJvcGVydHk7XG59LFxuICAgIF9pbml0Q29yZSA9IGZ1bmN0aW9uIF9pbml0Q29yZSgpIHtcbiAgaWYgKF93aW5kb3dFeGlzdHMoKSAmJiB3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICBfd2luID0gd2luZG93O1xuICAgIF9kb2MgPSBfd2luLmRvY3VtZW50O1xuICAgIF9kb2NFbGVtZW50ID0gX2RvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgX3RlbXBEaXYgPSBfY3JlYXRlRWxlbWVudChcImRpdlwiKSB8fCB7XG4gICAgICBzdHlsZToge31cbiAgICB9O1xuICAgIF90ZW1wRGl2U3R5bGVyID0gX2NyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgX3RyYW5zZm9ybVByb3AgPSBfY2hlY2tQcm9wUHJlZml4KF90cmFuc2Zvcm1Qcm9wKTtcbiAgICBfdHJhbnNmb3JtT3JpZ2luUHJvcCA9IF90cmFuc2Zvcm1Qcm9wICsgXCJPcmlnaW5cIjtcbiAgICBfdGVtcERpdi5zdHlsZS5jc3NUZXh0ID0gXCJib3JkZXItd2lkdGg6MDtsaW5lLWhlaWdodDowO3Bvc2l0aW9uOmFic29sdXRlO3BhZGRpbmc6MFwiOyAvL21ha2Ugc3VyZSB0byBvdmVycmlkZSBjZXJ0YWluIHByb3BlcnRpZXMgdGhhdCBtYXkgY29udGFtaW5hdGUgbWVhc3VyZW1lbnRzLCBpbiBjYXNlIHRoZSB1c2VyIGhhcyBvdmVycmVhY2hpbmcgc3R5bGUgc2hlZXRzLlxuXG4gICAgX3N1cHBvcnRzM0QgPSAhIV9jaGVja1Byb3BQcmVmaXgoXCJwZXJzcGVjdGl2ZVwiKTtcbiAgICBfcmV2ZXJ0aW5nID0gZ3NhcC5jb3JlLnJldmVydGluZztcbiAgICBfcGx1Z2luSW5pdHRlZCA9IDE7XG4gIH1cbn0sXG4gICAgX2dldFJlcGFyZW50ZWRDbG9uZUJCb3ggPSBmdW5jdGlvbiBfZ2V0UmVwYXJlbnRlZENsb25lQkJveCh0YXJnZXQpIHtcbiAgLy93b3JrcyBhcm91bmQgaXNzdWVzIGluIHNvbWUgYnJvd3NlcnMgKGxpa2UgRmlyZWZveCkgdGhhdCBkb24ndCBjb3JyZWN0bHkgcmVwb3J0IGdldEJCb3goKSBvbiBTVkcgZWxlbWVudHMgaW5zaWRlIGEgPGRlZnM+IGVsZW1lbnQgYW5kL29yIDxtYXNrPi4gV2UgdHJ5IGNyZWF0aW5nIGFuIFNWRywgYWRkaW5nIGl0IHRvIHRoZSBkb2N1bWVudEVsZW1lbnQgYW5kIHRvc3MgdGhlIGVsZW1lbnQgaW4gdGhlcmUgc28gdGhhdCBpdCdzIGRlZmluaXRlbHkgcGFydCBvZiB0aGUgcmVuZGVyaW5nIHRyZWUsIHRoZW4gZ3JhYiB0aGUgYmJveCBhbmQgaWYgaXQgd29ya3MsIHdlIGFjdHVhbGx5IHN3YXAgb3V0IHRoZSBvcmlnaW5hbCBnZXRCQm94KCkgbWV0aG9kIGZvciBvdXIgb3duIHRoYXQgZG9lcyB0aGVzZSBleHRyYSBzdGVwcyB3aGVuZXZlciBnZXRCQm94IGlzIG5lZWRlZC4gVGhpcyBoZWxwcyBlbnN1cmUgdGhhdCBwZXJmb3JtYW5jZSBpcyBvcHRpbWFsIChvbmx5IGRvIGFsbCB0aGVzZSBleHRyYSBzdGVwcyB3aGVuIGFic29sdXRlbHkgbmVjZXNzYXJ5Li4ubW9zdCBlbGVtZW50cyBkb24ndCBuZWVkIGl0KS5cbiAgdmFyIG93bmVyID0gdGFyZ2V0Lm93bmVyU1ZHRWxlbWVudCxcbiAgICAgIHN2ZyA9IF9jcmVhdGVFbGVtZW50KFwic3ZnXCIsIG93bmVyICYmIG93bmVyLmdldEF0dHJpYnV0ZShcInhtbG5zXCIpIHx8IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiksXG4gICAgICBjbG9uZSA9IHRhcmdldC5jbG9uZU5vZGUodHJ1ZSksXG4gICAgICBiYm94O1xuXG4gIGNsb25lLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gIHN2Zy5hcHBlbmRDaGlsZChjbG9uZSk7XG5cbiAgX2RvY0VsZW1lbnQuYXBwZW5kQ2hpbGQoc3ZnKTtcblxuICB0cnkge1xuICAgIGJib3ggPSBjbG9uZS5nZXRCQm94KCk7XG4gIH0gY2F0Y2ggKGUpIHt9XG5cbiAgc3ZnLnJlbW92ZUNoaWxkKGNsb25lKTtcblxuICBfZG9jRWxlbWVudC5yZW1vdmVDaGlsZChzdmcpO1xuXG4gIHJldHVybiBiYm94O1xufSxcbiAgICBfZ2V0QXR0cmlidXRlRmFsbGJhY2tzID0gZnVuY3Rpb24gX2dldEF0dHJpYnV0ZUZhbGxiYWNrcyh0YXJnZXQsIGF0dHJpYnV0ZXNBcnJheSkge1xuICB2YXIgaSA9IGF0dHJpYnV0ZXNBcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKGktLSkge1xuICAgIGlmICh0YXJnZXQuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZXNBcnJheVtpXSkpIHtcbiAgICAgIHJldHVybiB0YXJnZXQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZXNBcnJheVtpXSk7XG4gICAgfVxuICB9XG59LFxuICAgIF9nZXRCQm94ID0gZnVuY3Rpb24gX2dldEJCb3godGFyZ2V0KSB7XG4gIHZhciBib3VuZHMsIGNsb25lZDtcblxuICB0cnkge1xuICAgIGJvdW5kcyA9IHRhcmdldC5nZXRCQm94KCk7IC8vRmlyZWZveCB0aHJvd3MgZXJyb3JzIGlmIHlvdSB0cnkgY2FsbGluZyBnZXRCQm94KCkgb24gYW4gU1ZHIGVsZW1lbnQgdGhhdCdzIG5vdCByZW5kZXJlZCAobGlrZSBpbiBhIDxzeW1ib2w+IG9yIDxkZWZzPikuIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTYxMjExOFxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGJvdW5kcyA9IF9nZXRSZXBhcmVudGVkQ2xvbmVCQm94KHRhcmdldCk7XG4gICAgY2xvbmVkID0gMTtcbiAgfVxuXG4gIGJvdW5kcyAmJiAoYm91bmRzLndpZHRoIHx8IGJvdW5kcy5oZWlnaHQpIHx8IGNsb25lZCB8fCAoYm91bmRzID0gX2dldFJlcGFyZW50ZWRDbG9uZUJCb3godGFyZ2V0KSk7IC8vc29tZSBicm93c2VycyAobGlrZSBGaXJlZm94KSBtaXNyZXBvcnQgdGhlIGJvdW5kcyBpZiB0aGUgZWxlbWVudCBoYXMgemVybyB3aWR0aCBhbmQgaGVpZ2h0IChpdCBqdXN0IGFzc3VtZXMgaXQncyBhdCB4OjAsIHk6MCksIHRodXMgd2UgbmVlZCB0byBtYW51YWxseSBncmFiIHRoZSBwb3NpdGlvbiBpbiB0aGF0IGNhc2UuXG5cbiAgcmV0dXJuIGJvdW5kcyAmJiAhYm91bmRzLndpZHRoICYmICFib3VuZHMueCAmJiAhYm91bmRzLnkgPyB7XG4gICAgeDogK19nZXRBdHRyaWJ1dGVGYWxsYmFja3ModGFyZ2V0LCBbXCJ4XCIsIFwiY3hcIiwgXCJ4MVwiXSkgfHwgMCxcbiAgICB5OiArX2dldEF0dHJpYnV0ZUZhbGxiYWNrcyh0YXJnZXQsIFtcInlcIiwgXCJjeVwiLCBcInkxXCJdKSB8fCAwLFxuICAgIHdpZHRoOiAwLFxuICAgIGhlaWdodDogMFxuICB9IDogYm91bmRzO1xufSxcbiAgICBfaXNTVkcgPSBmdW5jdGlvbiBfaXNTVkcoZSkge1xuICByZXR1cm4gISEoZS5nZXRDVE0gJiYgKCFlLnBhcmVudE5vZGUgfHwgZS5vd25lclNWR0VsZW1lbnQpICYmIF9nZXRCQm94KGUpKTtcbn0sXG4gICAgLy9yZXBvcnRzIGlmIHRoZSBlbGVtZW50IGlzIGFuIFNWRyBvbiB3aGljaCBnZXRCQm94KCkgYWN0dWFsbHkgd29ya3Ncbl9yZW1vdmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIF9yZW1vdmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5KSB7XG4gIGlmIChwcm9wZXJ0eSkge1xuICAgIHZhciBzdHlsZSA9IHRhcmdldC5zdHlsZSxcbiAgICAgICAgZmlyc3QyQ2hhcnM7XG5cbiAgICBpZiAocHJvcGVydHkgaW4gX3RyYW5zZm9ybVByb3BzICYmIHByb3BlcnR5ICE9PSBfdHJhbnNmb3JtT3JpZ2luUHJvcCkge1xuICAgICAgcHJvcGVydHkgPSBfdHJhbnNmb3JtUHJvcDtcbiAgICB9XG5cbiAgICBpZiAoc3R5bGUucmVtb3ZlUHJvcGVydHkpIHtcbiAgICAgIGZpcnN0MkNoYXJzID0gcHJvcGVydHkuc3Vic3RyKDAsIDIpO1xuXG4gICAgICBpZiAoZmlyc3QyQ2hhcnMgPT09IFwibXNcIiB8fCBwcm9wZXJ0eS5zdWJzdHIoMCwgNikgPT09IFwid2Via2l0XCIpIHtcbiAgICAgICAgLy9NaWNyb3NvZnQgYW5kIHNvbWUgV2Via2l0IGJyb3dzZXJzIGRvbid0IGNvbmZvcm0gdG8gdGhlIHN0YW5kYXJkIG9mIGNhcGl0YWxpemluZyB0aGUgZmlyc3QgcHJlZml4IGNoYXJhY3Rlciwgc28gd2UgYWRqdXN0IHNvIHRoYXQgd2hlbiB3ZSBwcmVmaXggdGhlIGNhcHMgd2l0aCBhIGRhc2gsIGl0J3MgY29ycmVjdCAob3RoZXJ3aXNlIGl0J2QgYmUgXCJtcy10cmFuc2Zvcm1cIiBpbnN0ZWFkIG9mIFwiLW1zLXRyYW5zZm9ybVwiIGZvciBJRTksIGZvciBleGFtcGxlKVxuICAgICAgICBwcm9wZXJ0eSA9IFwiLVwiICsgcHJvcGVydHk7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KGZpcnN0MkNoYXJzID09PSBcIi0tXCIgPyBwcm9wZXJ0eSA6IHByb3BlcnR5LnJlcGxhY2UoX2NhcHNFeHAsIFwiLSQxXCIpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvL25vdGU6IG9sZCB2ZXJzaW9ucyBvZiBJRSB1c2UgXCJyZW1vdmVBdHRyaWJ1dGUoKVwiIGluc3RlYWQgb2YgXCJyZW1vdmVQcm9wZXJ0eSgpXCJcbiAgICAgIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZShwcm9wZXJ0eSk7XG4gICAgfVxuICB9XG59LFxuICAgIF9hZGROb25Ud2VlbmluZ1BUID0gZnVuY3Rpb24gX2FkZE5vblR3ZWVuaW5nUFQocGx1Z2luLCB0YXJnZXQsIHByb3BlcnR5LCBiZWdpbm5pbmcsIGVuZCwgb25seVNldEF0RW5kKSB7XG4gIHZhciBwdCA9IG5ldyBQcm9wVHdlZW4ocGx1Z2luLl9wdCwgdGFyZ2V0LCBwcm9wZXJ0eSwgMCwgMSwgb25seVNldEF0RW5kID8gX3JlbmRlck5vblR3ZWVuaW5nVmFsdWVPbmx5QXRFbmQgOiBfcmVuZGVyTm9uVHdlZW5pbmdWYWx1ZSk7XG4gIHBsdWdpbi5fcHQgPSBwdDtcbiAgcHQuYiA9IGJlZ2lubmluZztcbiAgcHQuZSA9IGVuZDtcblxuICBwbHVnaW4uX3Byb3BzLnB1c2gocHJvcGVydHkpO1xuXG4gIHJldHVybiBwdDtcbn0sXG4gICAgX25vbkNvbnZlcnRpYmxlVW5pdHMgPSB7XG4gIGRlZzogMSxcbiAgcmFkOiAxLFxuICB0dXJuOiAxXG59LFxuICAgIF9ub25TdGFuZGFyZExheW91dHMgPSB7XG4gIGdyaWQ6IDEsXG4gIGZsZXg6IDFcbn0sXG4gICAgLy90YWtlcyBhIHNpbmdsZSB2YWx1ZSBsaWtlIDIwcHggYW5kIGNvbnZlcnRzIGl0IHRvIHRoZSB1bml0IHNwZWNpZmllZCwgbGlrZSBcIiVcIiwgcmV0dXJuaW5nIG9ubHkgdGhlIG51bWVyaWMgYW1vdW50LlxuX2NvbnZlcnRUb1VuaXQgPSBmdW5jdGlvbiBfY29udmVydFRvVW5pdCh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSwgdW5pdCkge1xuICB2YXIgY3VyVmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKSB8fCAwLFxuICAgICAgY3VyVW5pdCA9ICh2YWx1ZSArIFwiXCIpLnRyaW0oKS5zdWJzdHIoKGN1clZhbHVlICsgXCJcIikubGVuZ3RoKSB8fCBcInB4XCIsXG4gICAgICAvLyBzb21lIGJyb3dzZXJzIGxlYXZlIGV4dHJhIHdoaXRlc3BhY2UgYXQgdGhlIGJlZ2lubmluZyBvZiBDU1MgdmFyaWFibGVzLCBoZW5jZSB0aGUgbmVlZCB0byB0cmltKClcbiAgc3R5bGUgPSBfdGVtcERpdi5zdHlsZSxcbiAgICAgIGhvcml6b250YWwgPSBfaG9yaXpvbnRhbEV4cC50ZXN0KHByb3BlcnR5KSxcbiAgICAgIGlzUm9vdFNWRyA9IHRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwic3ZnXCIsXG4gICAgICBtZWFzdXJlUHJvcGVydHkgPSAoaXNSb290U1ZHID8gXCJjbGllbnRcIiA6IFwib2Zmc2V0XCIpICsgKGhvcml6b250YWwgPyBcIldpZHRoXCIgOiBcIkhlaWdodFwiKSxcbiAgICAgIGFtb3VudCA9IDEwMCxcbiAgICAgIHRvUGl4ZWxzID0gdW5pdCA9PT0gXCJweFwiLFxuICAgICAgdG9QZXJjZW50ID0gdW5pdCA9PT0gXCIlXCIsXG4gICAgICBweCxcbiAgICAgIHBhcmVudCxcbiAgICAgIGNhY2hlLFxuICAgICAgaXNTVkc7XG5cbiAgaWYgKHVuaXQgPT09IGN1clVuaXQgfHwgIWN1clZhbHVlIHx8IF9ub25Db252ZXJ0aWJsZVVuaXRzW3VuaXRdIHx8IF9ub25Db252ZXJ0aWJsZVVuaXRzW2N1clVuaXRdKSB7XG4gICAgcmV0dXJuIGN1clZhbHVlO1xuICB9XG5cbiAgY3VyVW5pdCAhPT0gXCJweFwiICYmICF0b1BpeGVscyAmJiAoY3VyVmFsdWUgPSBfY29udmVydFRvVW5pdCh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSwgXCJweFwiKSk7XG4gIGlzU1ZHID0gdGFyZ2V0LmdldENUTSAmJiBfaXNTVkcodGFyZ2V0KTtcblxuICBpZiAoKHRvUGVyY2VudCB8fCBjdXJVbml0ID09PSBcIiVcIikgJiYgKF90cmFuc2Zvcm1Qcm9wc1twcm9wZXJ0eV0gfHwgfnByb3BlcnR5LmluZGV4T2YoXCJhZGl1c1wiKSkpIHtcbiAgICBweCA9IGlzU1ZHID8gdGFyZ2V0LmdldEJCb3goKVtob3Jpem9udGFsID8gXCJ3aWR0aFwiIDogXCJoZWlnaHRcIl0gOiB0YXJnZXRbbWVhc3VyZVByb3BlcnR5XTtcbiAgICByZXR1cm4gX3JvdW5kKHRvUGVyY2VudCA/IGN1clZhbHVlIC8gcHggKiBhbW91bnQgOiBjdXJWYWx1ZSAvIDEwMCAqIHB4KTtcbiAgfVxuXG4gIHN0eWxlW2hvcml6b250YWwgPyBcIndpZHRoXCIgOiBcImhlaWdodFwiXSA9IGFtb3VudCArICh0b1BpeGVscyA/IGN1clVuaXQgOiB1bml0KTtcbiAgcGFyZW50ID0gdW5pdCAhPT0gXCJyZW1cIiAmJiB+cHJvcGVydHkuaW5kZXhPZihcImFkaXVzXCIpIHx8IHVuaXQgPT09IFwiZW1cIiAmJiB0YXJnZXQuYXBwZW5kQ2hpbGQgJiYgIWlzUm9vdFNWRyA/IHRhcmdldCA6IHRhcmdldC5wYXJlbnROb2RlO1xuXG4gIGlmIChpc1NWRykge1xuICAgIHBhcmVudCA9ICh0YXJnZXQub3duZXJTVkdFbGVtZW50IHx8IHt9KS5wYXJlbnROb2RlO1xuICB9XG5cbiAgaWYgKCFwYXJlbnQgfHwgcGFyZW50ID09PSBfZG9jIHx8ICFwYXJlbnQuYXBwZW5kQ2hpbGQpIHtcbiAgICBwYXJlbnQgPSBfZG9jLmJvZHk7XG4gIH1cblxuICBjYWNoZSA9IHBhcmVudC5fZ3NhcDtcblxuICBpZiAoY2FjaGUgJiYgdG9QZXJjZW50ICYmIGNhY2hlLndpZHRoICYmIGhvcml6b250YWwgJiYgY2FjaGUudGltZSA9PT0gX3RpY2tlci50aW1lICYmICFjYWNoZS51bmNhY2hlKSB7XG4gICAgcmV0dXJuIF9yb3VuZChjdXJWYWx1ZSAvIGNhY2hlLndpZHRoICogYW1vdW50KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAodG9QZXJjZW50ICYmIChwcm9wZXJ0eSA9PT0gXCJoZWlnaHRcIiB8fCBwcm9wZXJ0eSA9PT0gXCJ3aWR0aFwiKSkge1xuICAgICAgLy8gaWYgd2UncmUgZGVhbGluZyB3aXRoIHdpZHRoL2hlaWdodCB0aGF0J3MgaW5zaWRlIGEgY29udGFpbmVyIHdpdGggcGFkZGluZyBhbmQvb3IgaXQncyBhIGZsZXhib3gvZ3JpZCBjb250YWluZXIsIHdlIG11c3QgYXBwbHkgaXQgdG8gdGhlIHRhcmdldCBpdHNlbGYgcmF0aGVyIHRoYW4gdGhlIF90ZW1wRGl2IGluIG9yZGVyIHRvIGVuc3VyZSBjb21wbGV0ZSBhY2N1cmFjeSwgZmFjdG9yaW5nIGluIHRoZSBwYXJlbnQncyBwYWRkaW5nLlxuICAgICAgdmFyIHYgPSB0YXJnZXQuc3R5bGVbcHJvcGVydHldO1xuICAgICAgdGFyZ2V0LnN0eWxlW3Byb3BlcnR5XSA9IGFtb3VudCArIHVuaXQ7XG4gICAgICBweCA9IHRhcmdldFttZWFzdXJlUHJvcGVydHldO1xuICAgICAgdiA/IHRhcmdldC5zdHlsZVtwcm9wZXJ0eV0gPSB2IDogX3JlbW92ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAodG9QZXJjZW50IHx8IGN1clVuaXQgPT09IFwiJVwiKSAmJiAhX25vblN0YW5kYXJkTGF5b3V0c1tfZ2V0Q29tcHV0ZWRQcm9wZXJ0eShwYXJlbnQsIFwiZGlzcGxheVwiKV0gJiYgKHN0eWxlLnBvc2l0aW9uID0gX2dldENvbXB1dGVkUHJvcGVydHkodGFyZ2V0LCBcInBvc2l0aW9uXCIpKTtcbiAgICAgIHBhcmVudCA9PT0gdGFyZ2V0ICYmIChzdHlsZS5wb3NpdGlvbiA9IFwic3RhdGljXCIpOyAvLyBsaWtlIGZvciBib3JkZXJSYWRpdXMsIGlmIGl0J3MgYSAlIHdlIG11c3QgaGF2ZSBpdCByZWxhdGl2ZSB0byB0aGUgdGFyZ2V0IGl0c2VsZiBidXQgdGhhdCBtYXkgbm90IGhhdmUgcG9zaXRpb246IHJlbGF0aXZlIG9yIHBvc2l0aW9uOiBhYnNvbHV0ZSBpbiB3aGljaCBjYXNlIGl0J2QgZ28gdXAgdGhlIGNoYWluIHVudGlsIGl0IGZpbmRzIGl0cyBvZmZzZXRQYXJlbnQgKGJhZCkuIHBvc2l0aW9uOiBzdGF0aWMgcHJvdGVjdHMgYWdhaW5zdCB0aGF0LlxuXG4gICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoX3RlbXBEaXYpO1xuICAgICAgcHggPSBfdGVtcERpdlttZWFzdXJlUHJvcGVydHldO1xuICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKF90ZW1wRGl2KTtcbiAgICAgIHN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgIH1cblxuICAgIGlmIChob3Jpem9udGFsICYmIHRvUGVyY2VudCkge1xuICAgICAgY2FjaGUgPSBfZ2V0Q2FjaGUocGFyZW50KTtcbiAgICAgIGNhY2hlLnRpbWUgPSBfdGlja2VyLnRpbWU7XG4gICAgICBjYWNoZS53aWR0aCA9IHBhcmVudFttZWFzdXJlUHJvcGVydHldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfcm91bmQodG9QaXhlbHMgPyBweCAqIGN1clZhbHVlIC8gYW1vdW50IDogcHggJiYgY3VyVmFsdWUgPyBhbW91bnQgLyBweCAqIGN1clZhbHVlIDogMCk7XG59LFxuICAgIF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHVuaXQsIHVuY2FjaGUpIHtcbiAgdmFyIHZhbHVlO1xuICBfcGx1Z2luSW5pdHRlZCB8fCBfaW5pdENvcmUoKTtcblxuICBpZiAocHJvcGVydHkgaW4gX3Byb3BlcnR5QWxpYXNlcyAmJiBwcm9wZXJ0eSAhPT0gXCJ0cmFuc2Zvcm1cIikge1xuICAgIHByb3BlcnR5ID0gX3Byb3BlcnR5QWxpYXNlc1twcm9wZXJ0eV07XG5cbiAgICBpZiAofnByb3BlcnR5LmluZGV4T2YoXCIsXCIpKSB7XG4gICAgICBwcm9wZXJ0eSA9IHByb3BlcnR5LnNwbGl0KFwiLFwiKVswXTtcbiAgICB9XG4gIH1cblxuICBpZiAoX3RyYW5zZm9ybVByb3BzW3Byb3BlcnR5XSAmJiBwcm9wZXJ0eSAhPT0gXCJ0cmFuc2Zvcm1cIikge1xuICAgIHZhbHVlID0gX3BhcnNlVHJhbnNmb3JtKHRhcmdldCwgdW5jYWNoZSk7XG4gICAgdmFsdWUgPSBwcm9wZXJ0eSAhPT0gXCJ0cmFuc2Zvcm1PcmlnaW5cIiA/IHZhbHVlW3Byb3BlcnR5XSA6IHZhbHVlLnN2ZyA/IHZhbHVlLm9yaWdpbiA6IF9maXJzdFR3b09ubHkoX2dldENvbXB1dGVkUHJvcGVydHkodGFyZ2V0LCBfdHJhbnNmb3JtT3JpZ2luUHJvcCkpICsgXCIgXCIgKyB2YWx1ZS56T3JpZ2luICsgXCJweFwiO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlID0gdGFyZ2V0LnN0eWxlW3Byb3BlcnR5XTtcblxuICAgIGlmICghdmFsdWUgfHwgdmFsdWUgPT09IFwiYXV0b1wiIHx8IHVuY2FjaGUgfHwgfih2YWx1ZSArIFwiXCIpLmluZGV4T2YoXCJjYWxjKFwiKSkge1xuICAgICAgdmFsdWUgPSBfc3BlY2lhbFByb3BzW3Byb3BlcnR5XSAmJiBfc3BlY2lhbFByb3BzW3Byb3BlcnR5XSh0YXJnZXQsIHByb3BlcnR5LCB1bml0KSB8fCBfZ2V0Q29tcHV0ZWRQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5KSB8fCBfZ2V0UHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eSkgfHwgKHByb3BlcnR5ID09PSBcIm9wYWNpdHlcIiA/IDEgOiAwKTsgLy8gbm90ZTogc29tZSBicm93c2VycywgbGlrZSBGaXJlZm94LCBkb24ndCByZXBvcnQgYm9yZGVyUmFkaXVzIGNvcnJlY3RseSEgSW5zdGVhZCwgaXQgb25seSByZXBvcnRzIGV2ZXJ5IGNvcm5lciBsaWtlICBib3JkZXJUb3BMZWZ0UmFkaXVzXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuaXQgJiYgIX4odmFsdWUgKyBcIlwiKS50cmltKCkuaW5kZXhPZihcIiBcIikgPyBfY29udmVydFRvVW5pdCh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSwgdW5pdCkgKyB1bml0IDogdmFsdWU7XG59LFxuICAgIF90d2VlbkNvbXBsZXhDU1NTdHJpbmcgPSBmdW5jdGlvbiBfdHdlZW5Db21wbGV4Q1NTU3RyaW5nKHRhcmdldCwgcHJvcCwgc3RhcnQsIGVuZCkge1xuICAvLyBub3RlOiB3ZSBjYWxsIF90d2VlbkNvbXBsZXhDU1NTdHJpbmcuY2FsbChwbHVnaW5JbnN0YW5jZS4uLikgdG8gZW5zdXJlIHRoYXQgaXQncyBzY29wZWQgcHJvcGVybHkuIFdlIG1heSBjYWxsIGl0IGZyb20gd2l0aGluIGEgcGx1Z2luIHRvbywgdGh1cyBcInRoaXNcIiB3b3VsZCByZWZlciB0byB0aGUgcGx1Z2luLlxuICBpZiAoIXN0YXJ0IHx8IHN0YXJ0ID09PSBcIm5vbmVcIikge1xuICAgIC8vIHNvbWUgYnJvd3NlcnMgbGlrZSBTYWZhcmkgYWN0dWFsbHkgUFJFRkVSIHRoZSBwcmVmaXhlZCBwcm9wZXJ0eSBhbmQgbWlzLXJlcG9ydCB0aGUgdW5wcmVmaXhlZCB2YWx1ZSBsaWtlIGNsaXBQYXRoIChCVUcpLiBJbiBvdGhlciB3b3JkcywgZXZlbiB0aG91Z2ggY2xpcFBhdGggZXhpc3RzIGluIHRoZSBzdHlsZSAoXCJjbGlwUGF0aFwiIGluIHRhcmdldC5zdHlsZSkgYW5kIGl0J3Mgc2V0IGluIHRoZSBDU1MgcHJvcGVybHkgKGFsb25nIHdpdGggLXdlYmtpdC1jbGlwLXBhdGgpLCBTYWZhcmkgcmVwb3J0cyBjbGlwUGF0aCBhcyBcIm5vbmVcIiB3aGVyZWFzIFdlYmtpdENsaXBQYXRoIHJlcG9ydHMgYWNjdXJhdGVseSBsaWtlIFwiZWxsaXBzZSgxMDAlIDAlIGF0IDUwJSAwJSlcIiwgc28gaW4gdGhpcyBjYXNlIHdlIG11c3QgU1dJVENIIHRvIHVzaW5nIHRoZSBwcmVmaXhlZCBwcm9wZXJ0eSBpbnN0ZWFkLiBTZWUgaHR0cHM6Ly9nc2FwLmNvbS9mb3J1bXMvdG9waWMvMTgzMTAtY2xpcHBhdGgtZG9lc250LXdvcmstb24taW9zL1xuICAgIHZhciBwID0gX2NoZWNrUHJvcFByZWZpeChwcm9wLCB0YXJnZXQsIDEpLFxuICAgICAgICBzID0gcCAmJiBfZ2V0Q29tcHV0ZWRQcm9wZXJ0eSh0YXJnZXQsIHAsIDEpO1xuXG4gICAgaWYgKHMgJiYgcyAhPT0gc3RhcnQpIHtcbiAgICAgIHByb3AgPSBwO1xuICAgICAgc3RhcnQgPSBzO1xuICAgIH0gZWxzZSBpZiAocHJvcCA9PT0gXCJib3JkZXJDb2xvclwiKSB7XG4gICAgICBzdGFydCA9IF9nZXRDb21wdXRlZFByb3BlcnR5KHRhcmdldCwgXCJib3JkZXJUb3BDb2xvclwiKTsgLy8gRmlyZWZveCBidWc6IGFsd2F5cyByZXBvcnRzIFwiYm9yZGVyQ29sb3JcIiBhcyBcIlwiLCBzbyB3ZSBtdXN0IGZhbGwgYmFjayB0byBib3JkZXJUb3BDb2xvci4gU2VlIGh0dHBzOi8vZ3NhcC5jb20vZm9ydW1zL3RvcGljLzI0NTgzLWhvdy10by1yZXR1cm4tY29sb3JzLXRoYXQtaS1oYWQtYWZ0ZXItcmV2ZXJzZS9cbiAgICB9XG4gIH1cblxuICB2YXIgcHQgPSBuZXcgUHJvcFR3ZWVuKHRoaXMuX3B0LCB0YXJnZXQuc3R5bGUsIHByb3AsIDAsIDEsIF9yZW5kZXJDb21wbGV4U3RyaW5nKSxcbiAgICAgIGluZGV4ID0gMCxcbiAgICAgIG1hdGNoSW5kZXggPSAwLFxuICAgICAgYSxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHN0YXJ0VmFsdWVzLFxuICAgICAgc3RhcnROdW0sXG4gICAgICBjb2xvcixcbiAgICAgIHN0YXJ0VmFsdWUsXG4gICAgICBlbmRWYWx1ZSxcbiAgICAgIGVuZE51bSxcbiAgICAgIGNodW5rLFxuICAgICAgZW5kVW5pdCxcbiAgICAgIHN0YXJ0VW5pdCxcbiAgICAgIGVuZFZhbHVlcztcbiAgcHQuYiA9IHN0YXJ0O1xuICBwdC5lID0gZW5kO1xuICBzdGFydCArPSBcIlwiOyAvLyBlbnN1cmUgdmFsdWVzIGFyZSBzdHJpbmdzXG5cbiAgZW5kICs9IFwiXCI7XG5cbiAgaWYgKGVuZCA9PT0gXCJhdXRvXCIpIHtcbiAgICBzdGFydFZhbHVlID0gdGFyZ2V0LnN0eWxlW3Byb3BdO1xuICAgIHRhcmdldC5zdHlsZVtwcm9wXSA9IGVuZDtcbiAgICBlbmQgPSBfZ2V0Q29tcHV0ZWRQcm9wZXJ0eSh0YXJnZXQsIHByb3ApIHx8IGVuZDtcbiAgICBzdGFydFZhbHVlID8gdGFyZ2V0LnN0eWxlW3Byb3BdID0gc3RhcnRWYWx1ZSA6IF9yZW1vdmVQcm9wZXJ0eSh0YXJnZXQsIHByb3ApO1xuICB9XG5cbiAgYSA9IFtzdGFydCwgZW5kXTtcblxuICBfY29sb3JTdHJpbmdGaWx0ZXIoYSk7IC8vIHBhc3MgYW4gYXJyYXkgd2l0aCB0aGUgc3RhcnRpbmcgYW5kIGVuZGluZyB2YWx1ZXMgYW5kIGxldCB0aGUgZmlsdGVyIGRvIHdoYXRldmVyIGl0IG5lZWRzIHRvIHRoZSB2YWx1ZXMuIElmIGNvbG9ycyBhcmUgZm91bmQsIGl0IHJldHVybnMgdHJ1ZSBhbmQgdGhlbiB3ZSBtdXN0IG1hdGNoIHdoZXJlIHRoZSBjb2xvciBzaG93cyB1cCBvcmRlci13aXNlIGJlY2F1c2UgZm9yIHRoaW5ncyBsaWtlIGJveFNoYWRvdywgc29tZXRpbWVzIHRoZSBicm93c2VyIHByb3ZpZGVzIHRoZSBjb21wdXRlZCB2YWx1ZXMgd2l0aCB0aGUgY29sb3IgRklSU1QsIGJ1dCB0aGUgdXNlciBwcm92aWRlcyBpdCB3aXRoIHRoZSBjb2xvciBMQVNULCBzbyBmbGlwIHRoZW0gaWYgbmVjZXNzYXJ5LiBTYW1lIGZvciBkcm9wLXNoYWRvdygpLlxuXG5cbiAgc3RhcnQgPSBhWzBdO1xuICBlbmQgPSBhWzFdO1xuICBzdGFydFZhbHVlcyA9IHN0YXJ0Lm1hdGNoKF9udW1XaXRoVW5pdEV4cCkgfHwgW107XG4gIGVuZFZhbHVlcyA9IGVuZC5tYXRjaChfbnVtV2l0aFVuaXRFeHApIHx8IFtdO1xuXG4gIGlmIChlbmRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgd2hpbGUgKHJlc3VsdCA9IF9udW1XaXRoVW5pdEV4cC5leGVjKGVuZCkpIHtcbiAgICAgIGVuZFZhbHVlID0gcmVzdWx0WzBdO1xuICAgICAgY2h1bmsgPSBlbmQuc3Vic3RyaW5nKGluZGV4LCByZXN1bHQuaW5kZXgpO1xuXG4gICAgICBpZiAoY29sb3IpIHtcbiAgICAgICAgY29sb3IgPSAoY29sb3IgKyAxKSAlIDU7XG4gICAgICB9IGVsc2UgaWYgKGNodW5rLnN1YnN0cigtNSkgPT09IFwicmdiYShcIiB8fCBjaHVuay5zdWJzdHIoLTUpID09PSBcImhzbGEoXCIpIHtcbiAgICAgICAgY29sb3IgPSAxO1xuICAgICAgfVxuXG4gICAgICBpZiAoZW5kVmFsdWUgIT09IChzdGFydFZhbHVlID0gc3RhcnRWYWx1ZXNbbWF0Y2hJbmRleCsrXSB8fCBcIlwiKSkge1xuICAgICAgICBzdGFydE51bSA9IHBhcnNlRmxvYXQoc3RhcnRWYWx1ZSkgfHwgMDtcbiAgICAgICAgc3RhcnRVbml0ID0gc3RhcnRWYWx1ZS5zdWJzdHIoKHN0YXJ0TnVtICsgXCJcIikubGVuZ3RoKTtcbiAgICAgICAgZW5kVmFsdWUuY2hhckF0KDEpID09PSBcIj1cIiAmJiAoZW5kVmFsdWUgPSBfcGFyc2VSZWxhdGl2ZShzdGFydE51bSwgZW5kVmFsdWUpICsgc3RhcnRVbml0KTtcbiAgICAgICAgZW5kTnVtID0gcGFyc2VGbG9hdChlbmRWYWx1ZSk7XG4gICAgICAgIGVuZFVuaXQgPSBlbmRWYWx1ZS5zdWJzdHIoKGVuZE51bSArIFwiXCIpLmxlbmd0aCk7XG4gICAgICAgIGluZGV4ID0gX251bVdpdGhVbml0RXhwLmxhc3RJbmRleCAtIGVuZFVuaXQubGVuZ3RoO1xuXG4gICAgICAgIGlmICghZW5kVW5pdCkge1xuICAgICAgICAgIC8vaWYgc29tZXRoaW5nIGxpa2UgXCJwZXJzcGVjdGl2ZTozMDBcIiBpcyBwYXNzZWQgaW4gYW5kIHdlIG11c3QgYWRkIGEgdW5pdCB0byB0aGUgZW5kXG4gICAgICAgICAgZW5kVW5pdCA9IGVuZFVuaXQgfHwgX2NvbmZpZy51bml0c1twcm9wXSB8fCBzdGFydFVuaXQ7XG5cbiAgICAgICAgICBpZiAoaW5kZXggPT09IGVuZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGVuZCArPSBlbmRVbml0O1xuICAgICAgICAgICAgcHQuZSArPSBlbmRVbml0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGFydFVuaXQgIT09IGVuZFVuaXQpIHtcbiAgICAgICAgICBzdGFydE51bSA9IF9jb252ZXJ0VG9Vbml0KHRhcmdldCwgcHJvcCwgc3RhcnRWYWx1ZSwgZW5kVW5pdCkgfHwgMDtcbiAgICAgICAgfSAvLyB0aGVzZSBuZXN0ZWQgUHJvcFR3ZWVucyBhcmUgaGFuZGxlZCBpbiBhIHNwZWNpYWwgd2F5IC0gd2UnbGwgbmV2ZXIgYWN0dWFsbHkgY2FsbCBhIHJlbmRlciBvciBzZXR0ZXIgbWV0aG9kIG9uIHRoZW0uIFdlJ2xsIGp1c3QgbG9vcCB0aHJvdWdoIHRoZW0gaW4gdGhlIHBhcmVudCBjb21wbGV4IHN0cmluZyBQcm9wVHdlZW4ncyByZW5kZXIgbWV0aG9kLlxuXG5cbiAgICAgICAgcHQuX3B0ID0ge1xuICAgICAgICAgIF9uZXh0OiBwdC5fcHQsXG4gICAgICAgICAgcDogY2h1bmsgfHwgbWF0Y2hJbmRleCA9PT0gMSA/IGNodW5rIDogXCIsXCIsXG4gICAgICAgICAgLy9ub3RlOiBTVkcgc3BlYyBhbGxvd3Mgb21pc3Npb24gb2YgY29tbWEvc3BhY2Ugd2hlbiBhIG5lZ2F0aXZlIHNpZ24gaXMgd2VkZ2VkIGJldHdlZW4gdHdvIG51bWJlcnMsIGxpa2UgMi41LTUuMyBpbnN0ZWFkIG9mIDIuNSwtNS4zIGJ1dCB3aGVuIHR3ZWVuaW5nLCB0aGUgbmVnYXRpdmUgdmFsdWUgbWF5IHN3aXRjaCB0byBwb3NpdGl2ZSwgc28gd2UgaW5zZXJ0IHRoZSBjb21tYSBqdXN0IGluIGNhc2UuXG4gICAgICAgICAgczogc3RhcnROdW0sXG4gICAgICAgICAgYzogZW5kTnVtIC0gc3RhcnROdW0sXG4gICAgICAgICAgbTogY29sb3IgJiYgY29sb3IgPCA0IHx8IHByb3AgPT09IFwiekluZGV4XCIgPyBNYXRoLnJvdW5kIDogMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHB0LmMgPSBpbmRleCA8IGVuZC5sZW5ndGggPyBlbmQuc3Vic3RyaW5nKGluZGV4LCBlbmQubGVuZ3RoKSA6IFwiXCI7IC8vd2UgdXNlIHRoZSBcImNcIiBvZiB0aGUgUHJvcFR3ZWVuIHRvIHN0b3JlIHRoZSBmaW5hbCBwYXJ0IG9mIHRoZSBzdHJpbmcgKGFmdGVyIHRoZSBsYXN0IG51bWJlcilcbiAgfSBlbHNlIHtcbiAgICBwdC5yID0gcHJvcCA9PT0gXCJkaXNwbGF5XCIgJiYgZW5kID09PSBcIm5vbmVcIiA/IF9yZW5kZXJOb25Ud2VlbmluZ1ZhbHVlT25seUF0RW5kIDogX3JlbmRlck5vblR3ZWVuaW5nVmFsdWU7XG4gIH1cblxuICBfcmVsRXhwLnRlc3QoZW5kKSAmJiAocHQuZSA9IDApOyAvL2lmIHRoZSBlbmQgc3RyaW5nIGNvbnRhaW5zIHJlbGF0aXZlIHZhbHVlcyBvciBkeW5hbWljIHJhbmRvbSguLi4pIHZhbHVlcywgZGVsZXRlIHRoZSBlbmQgaXQgc28gdGhhdCBvbiB0aGUgZmluYWwgcmVuZGVyIHdlIGRvbid0IGFjdHVhbGx5IHNldCBpdCB0byB0aGUgc3RyaW5nIHdpdGggKz0gb3IgLT0gY2hhcmFjdGVycyAoZm9yY2VzIGl0IHRvIHVzZSB0aGUgY2FsY3VsYXRlZCB2YWx1ZSkuXG5cbiAgdGhpcy5fcHQgPSBwdDsgLy9zdGFydCB0aGUgbGlua2VkIGxpc3Qgd2l0aCB0aGlzIG5ldyBQcm9wVHdlZW4uIFJlbWVtYmVyLCB3ZSBjYWxsIF90d2VlbkNvbXBsZXhDU1NTdHJpbmcuY2FsbChwbHVnaW5JbnN0YW5jZS4uLikgdG8gZW5zdXJlIHRoYXQgaXQncyBzY29wZWQgcHJvcGVybHkuIFdlIG1heSBjYWxsIGl0IGZyb20gd2l0aGluIGFub3RoZXIgcGx1Z2luIHRvbywgdGh1cyBcInRoaXNcIiB3b3VsZCByZWZlciB0byB0aGUgcGx1Z2luLlxuXG4gIHJldHVybiBwdDtcbn0sXG4gICAgX2tleXdvcmRUb1BlcmNlbnQgPSB7XG4gIHRvcDogXCIwJVwiLFxuICBib3R0b206IFwiMTAwJVwiLFxuICBsZWZ0OiBcIjAlXCIsXG4gIHJpZ2h0OiBcIjEwMCVcIixcbiAgY2VudGVyOiBcIjUwJVwiXG59LFxuICAgIF9jb252ZXJ0S2V5d29yZHNUb1BlcmNlbnRhZ2VzID0gZnVuY3Rpb24gX2NvbnZlcnRLZXl3b3Jkc1RvUGVyY2VudGFnZXModmFsdWUpIHtcbiAgdmFyIHNwbGl0ID0gdmFsdWUuc3BsaXQoXCIgXCIpLFxuICAgICAgeCA9IHNwbGl0WzBdLFxuICAgICAgeSA9IHNwbGl0WzFdIHx8IFwiNTAlXCI7XG5cbiAgaWYgKHggPT09IFwidG9wXCIgfHwgeCA9PT0gXCJib3R0b21cIiB8fCB5ID09PSBcImxlZnRcIiB8fCB5ID09PSBcInJpZ2h0XCIpIHtcbiAgICAvL3RoZSB1c2VyIHByb3ZpZGVkIHRoZW0gaW4gdGhlIHdyb25nIG9yZGVyLCBzbyBmbGlwIHRoZW1cbiAgICB2YWx1ZSA9IHg7XG4gICAgeCA9IHk7XG4gICAgeSA9IHZhbHVlO1xuICB9XG5cbiAgc3BsaXRbMF0gPSBfa2V5d29yZFRvUGVyY2VudFt4XSB8fCB4O1xuICBzcGxpdFsxXSA9IF9rZXl3b3JkVG9QZXJjZW50W3ldIHx8IHk7XG4gIHJldHVybiBzcGxpdC5qb2luKFwiIFwiKTtcbn0sXG4gICAgX3JlbmRlckNsZWFyUHJvcHMgPSBmdW5jdGlvbiBfcmVuZGVyQ2xlYXJQcm9wcyhyYXRpbywgZGF0YSkge1xuICBpZiAoZGF0YS50d2VlbiAmJiBkYXRhLnR3ZWVuLl90aW1lID09PSBkYXRhLnR3ZWVuLl9kdXIpIHtcbiAgICB2YXIgdGFyZ2V0ID0gZGF0YS50LFxuICAgICAgICBzdHlsZSA9IHRhcmdldC5zdHlsZSxcbiAgICAgICAgcHJvcHMgPSBkYXRhLnUsXG4gICAgICAgIGNhY2hlID0gdGFyZ2V0Ll9nc2FwLFxuICAgICAgICBwcm9wLFxuICAgICAgICBjbGVhclRyYW5zZm9ybXMsXG4gICAgICAgIGk7XG5cbiAgICBpZiAocHJvcHMgPT09IFwiYWxsXCIgfHwgcHJvcHMgPT09IHRydWUpIHtcbiAgICAgIHN0eWxlLmNzc1RleHQgPSBcIlwiO1xuICAgICAgY2xlYXJUcmFuc2Zvcm1zID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvcHMgPSBwcm9wcy5zcGxpdChcIixcIik7XG4gICAgICBpID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoLS1pID4gLTEpIHtcbiAgICAgICAgcHJvcCA9IHByb3BzW2ldO1xuXG4gICAgICAgIGlmIChfdHJhbnNmb3JtUHJvcHNbcHJvcF0pIHtcbiAgICAgICAgICBjbGVhclRyYW5zZm9ybXMgPSAxO1xuICAgICAgICAgIHByb3AgPSBwcm9wID09PSBcInRyYW5zZm9ybU9yaWdpblwiID8gX3RyYW5zZm9ybU9yaWdpblByb3AgOiBfdHJhbnNmb3JtUHJvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIF9yZW1vdmVQcm9wZXJ0eSh0YXJnZXQsIHByb3ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjbGVhclRyYW5zZm9ybXMpIHtcbiAgICAgIF9yZW1vdmVQcm9wZXJ0eSh0YXJnZXQsIF90cmFuc2Zvcm1Qcm9wKTtcblxuICAgICAgaWYgKGNhY2hlKSB7XG4gICAgICAgIGNhY2hlLnN2ZyAmJiB0YXJnZXQucmVtb3ZlQXR0cmlidXRlKFwidHJhbnNmb3JtXCIpO1xuICAgICAgICBzdHlsZS5zY2FsZSA9IHN0eWxlLnJvdGF0ZSA9IHN0eWxlLnRyYW5zbGF0ZSA9IFwibm9uZVwiO1xuXG4gICAgICAgIF9wYXJzZVRyYW5zZm9ybSh0YXJnZXQsIDEpOyAvLyBmb3JjZSBhbGwgdGhlIGNhY2hlZCB2YWx1ZXMgYmFjayB0byBcIm5vcm1hbFwiL2lkZW50aXR5LCBvdGhlcndpc2UgaWYgdGhlcmUncyBhbm90aGVyIHR3ZWVuIHRoYXQncyBhbHJlYWR5IHNldCB0byByZW5kZXIgdHJhbnNmb3JtcyBvbiB0aGlzIGVsZW1lbnQsIGl0IGNvdWxkIGRpc3BsYXkgdGhlIHdyb25nIHZhbHVlcy5cblxuXG4gICAgICAgIGNhY2hlLnVuY2FjaGUgPSAxO1xuXG4gICAgICAgIF9yZW1vdmVJbmRlcGVuZGVudFRyYW5zZm9ybXMoc3R5bGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSxcbiAgICAvLyBub3RlOiBzcGVjaWFsUHJvcHMgc2hvdWxkIHJldHVybiAxIGlmIChhbmQgb25seSBpZikgdGhleSBoYXZlIGEgbm9uLXplcm8gcHJpb3JpdHkuIEl0IGluZGljYXRlcyB3ZSBuZWVkIHRvIHNvcnQgdGhlIGxpbmtlZCBsaXN0LlxuX3NwZWNpYWxQcm9wcyA9IHtcbiAgY2xlYXJQcm9wczogZnVuY3Rpb24gY2xlYXJQcm9wcyhwbHVnaW4sIHRhcmdldCwgcHJvcGVydHksIGVuZFZhbHVlLCB0d2Vlbikge1xuICAgIGlmICh0d2Vlbi5kYXRhICE9PSBcImlzRnJvbVN0YXJ0XCIpIHtcbiAgICAgIHZhciBwdCA9IHBsdWdpbi5fcHQgPSBuZXcgUHJvcFR3ZWVuKHBsdWdpbi5fcHQsIHRhcmdldCwgcHJvcGVydHksIDAsIDAsIF9yZW5kZXJDbGVhclByb3BzKTtcbiAgICAgIHB0LnUgPSBlbmRWYWx1ZTtcbiAgICAgIHB0LnByID0gLTEwO1xuICAgICAgcHQudHdlZW4gPSB0d2VlbjtcblxuICAgICAgcGx1Z2luLl9wcm9wcy5wdXNoKHByb3BlcnR5KTtcblxuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG4gIC8qIGNsYXNzTmFtZSBmZWF0dXJlIChhYm91dCAwLjRrYiBnemlwcGVkKS5cbiAgLCBjbGFzc05hbWUocGx1Z2luLCB0YXJnZXQsIHByb3BlcnR5LCBlbmRWYWx1ZSwgdHdlZW4pIHtcbiAgXHRsZXQgX3JlbmRlckNsYXNzTmFtZSA9IChyYXRpbywgZGF0YSkgPT4ge1xuICBcdFx0XHRkYXRhLmNzcy5yZW5kZXIocmF0aW8sIGRhdGEuY3NzKTtcbiAgXHRcdFx0aWYgKCFyYXRpbyB8fCByYXRpbyA9PT0gMSkge1xuICBcdFx0XHRcdGxldCBpbmxpbmUgPSBkYXRhLnJtdixcbiAgXHRcdFx0XHRcdHRhcmdldCA9IGRhdGEudCxcbiAgXHRcdFx0XHRcdHA7XG4gIFx0XHRcdFx0dGFyZ2V0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHJhdGlvID8gZGF0YS5lIDogZGF0YS5iKTtcbiAgXHRcdFx0XHRmb3IgKHAgaW4gaW5saW5lKSB7XG4gIFx0XHRcdFx0XHRfcmVtb3ZlUHJvcGVydHkodGFyZ2V0LCBwKTtcbiAgXHRcdFx0XHR9XG4gIFx0XHRcdH1cbiAgXHRcdH0sXG4gIFx0XHRfZ2V0QWxsU3R5bGVzID0gKHRhcmdldCkgPT4ge1xuICBcdFx0XHRsZXQgc3R5bGVzID0ge30sXG4gIFx0XHRcdFx0Y29tcHV0ZWQgPSBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCksXG4gIFx0XHRcdFx0cDtcbiAgXHRcdFx0Zm9yIChwIGluIGNvbXB1dGVkKSB7XG4gIFx0XHRcdFx0aWYgKGlzTmFOKHApICYmIHAgIT09IFwiY3NzVGV4dFwiICYmIHAgIT09IFwibGVuZ3RoXCIpIHtcbiAgXHRcdFx0XHRcdHN0eWxlc1twXSA9IGNvbXB1dGVkW3BdO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0XHRfc2V0RGVmYXVsdHMoc3R5bGVzLCBfcGFyc2VUcmFuc2Zvcm0odGFyZ2V0LCAxKSk7XG4gIFx0XHRcdHJldHVybiBzdHlsZXM7XG4gIFx0XHR9LFxuICBcdFx0c3RhcnRDbGFzc0xpc3QgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIiksXG4gIFx0XHRzdHlsZSA9IHRhcmdldC5zdHlsZSxcbiAgXHRcdGNzc1RleHQgPSBzdHlsZS5jc3NUZXh0LFxuICBcdFx0Y2FjaGUgPSB0YXJnZXQuX2dzYXAsXG4gIFx0XHRjbGFzc1BUID0gY2FjaGUuY2xhc3NQVCxcbiAgXHRcdGlubGluZVRvUmVtb3ZlQXRFbmQgPSB7fSxcbiAgXHRcdGRhdGEgPSB7dDp0YXJnZXQsIHBsdWdpbjpwbHVnaW4sIHJtdjppbmxpbmVUb1JlbW92ZUF0RW5kLCBiOnN0YXJ0Q2xhc3NMaXN0LCBlOihlbmRWYWx1ZS5jaGFyQXQoMSkgIT09IFwiPVwiKSA/IGVuZFZhbHVlIDogc3RhcnRDbGFzc0xpc3QucmVwbGFjZShuZXcgUmVnRXhwKFwiKD86XFxcXHN8XilcIiArIGVuZFZhbHVlLnN1YnN0cigyKSArIFwiKD8hW1xcXFx3LV0pXCIpLCBcIlwiKSArICgoZW5kVmFsdWUuY2hhckF0KDApID09PSBcIitcIikgPyBcIiBcIiArIGVuZFZhbHVlLnN1YnN0cigyKSA6IFwiXCIpfSxcbiAgXHRcdGNoYW5naW5nVmFycyA9IHt9LFxuICBcdFx0c3RhcnRWYXJzID0gX2dldEFsbFN0eWxlcyh0YXJnZXQpLFxuICBcdFx0dHJhbnNmb3JtUmVsYXRlZCA9IC8odHJhbnNmb3JtfHBlcnNwZWN0aXZlKS9pLFxuICBcdFx0ZW5kVmFycywgcDtcbiAgXHRpZiAoY2xhc3NQVCkge1xuICBcdFx0Y2xhc3NQVC5yKDEsIGNsYXNzUFQuZCk7XG4gIFx0XHRfcmVtb3ZlTGlua2VkTGlzdEl0ZW0oY2xhc3NQVC5kLnBsdWdpbiwgY2xhc3NQVCwgXCJfcHRcIik7XG4gIFx0fVxuICBcdHRhcmdldC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBkYXRhLmUpO1xuICBcdGVuZFZhcnMgPSBfZ2V0QWxsU3R5bGVzKHRhcmdldCwgdHJ1ZSk7XG4gIFx0dGFyZ2V0LnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIHN0YXJ0Q2xhc3NMaXN0KTtcbiAgXHRmb3IgKHAgaW4gZW5kVmFycykge1xuICBcdFx0aWYgKGVuZFZhcnNbcF0gIT09IHN0YXJ0VmFyc1twXSAmJiAhdHJhbnNmb3JtUmVsYXRlZC50ZXN0KHApKSB7XG4gIFx0XHRcdGNoYW5naW5nVmFyc1twXSA9IGVuZFZhcnNbcF07XG4gIFx0XHRcdGlmICghc3R5bGVbcF0gJiYgc3R5bGVbcF0gIT09IFwiMFwiKSB7XG4gIFx0XHRcdFx0aW5saW5lVG9SZW1vdmVBdEVuZFtwXSA9IDE7XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHR9XG4gIFx0Y2FjaGUuY2xhc3NQVCA9IHBsdWdpbi5fcHQgPSBuZXcgUHJvcFR3ZWVuKHBsdWdpbi5fcHQsIHRhcmdldCwgXCJjbGFzc05hbWVcIiwgMCwgMCwgX3JlbmRlckNsYXNzTmFtZSwgZGF0YSwgMCwgLTExKTtcbiAgXHRpZiAoc3R5bGUuY3NzVGV4dCAhPT0gY3NzVGV4dCkgeyAvL29ubHkgYXBwbHkgaWYgdGhpbmdzIGNoYW5nZS4gT3RoZXJ3aXNlLCBpbiBjYXNlcyBsaWtlIGEgYmFja2dyb3VuZC1pbWFnZSB0aGF0J3MgcHVsbGVkIGR5bmFtaWNhbGx5LCBpdCBjb3VsZCBjYXVzZSBhIHJlZnJlc2guIFNlZSBodHRwczovL2dzYXAuY29tL2ZvcnVtcy90b3BpYy8yMDM2OC1wb3NzaWJsZS1nc2FwLWJ1Zy1zd2l0Y2hpbmctY2xhc3NuYW1lcy1pbi1jaHJvbWUvLlxuICBcdFx0c3R5bGUuY3NzVGV4dCA9IGNzc1RleHQ7IC8vd2UgcmVjb3JkZWQgY3NzVGV4dCBiZWZvcmUgd2Ugc3dhcHBlZCBjbGFzc2VzIGFuZCByYW4gX2dldEFsbFN0eWxlcygpIGJlY2F1c2UgaW4gY2FzZXMgd2hlbiBhIGNsYXNzTmFtZSB0d2VlbiBpcyBvdmVyd3JpdHRlbiwgd2UgcmVtb3ZlIGFsbCB0aGUgcmVsYXRlZCB0d2VlbmluZyBwcm9wZXJ0aWVzIGZyb20gdGhhdCBjbGFzcyBjaGFuZ2UgKG90aGVyd2lzZSBjbGFzcy1zcGVjaWZpYyBzdHVmZiBjYW4ndCBvdmVycmlkZSBwcm9wZXJ0aWVzIHdlJ3ZlIGRpcmVjdGx5IHNldCBvbiB0aGUgdGFyZ2V0J3Mgc3R5bGUgb2JqZWN0IGR1ZSB0byBzcGVjaWZpY2l0eSkuXG4gIFx0fVxuICBcdF9wYXJzZVRyYW5zZm9ybSh0YXJnZXQsIHRydWUpOyAvL3RvIGNsZWFyIHRoZSBjYWNoaW5nIG9mIHRyYW5zZm9ybXNcbiAgXHRkYXRhLmNzcyA9IG5ldyBnc2FwLnBsdWdpbnMuY3NzKCk7XG4gIFx0ZGF0YS5jc3MuaW5pdCh0YXJnZXQsIGNoYW5naW5nVmFycywgdHdlZW4pO1xuICBcdHBsdWdpbi5fcHJvcHMucHVzaCguLi5kYXRhLmNzcy5fcHJvcHMpO1xuICBcdHJldHVybiAxO1xuICB9XG4gICovXG5cbn0sXG5cbi8qXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogVFJBTlNGT1JNU1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuX2lkZW50aXR5MkRNYXRyaXggPSBbMSwgMCwgMCwgMSwgMCwgMF0sXG4gICAgX3JvdGF0aW9uYWxQcm9wZXJ0aWVzID0ge30sXG4gICAgX2lzTnVsbFRyYW5zZm9ybSA9IGZ1bmN0aW9uIF9pc051bGxUcmFuc2Zvcm0odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBcIm1hdHJpeCgxLCAwLCAwLCAxLCAwLCAwKVwiIHx8IHZhbHVlID09PSBcIm5vbmVcIiB8fCAhdmFsdWU7XG59LFxuICAgIF9nZXRDb21wdXRlZFRyYW5zZm9ybU1hdHJpeEFzQXJyYXkgPSBmdW5jdGlvbiBfZ2V0Q29tcHV0ZWRUcmFuc2Zvcm1NYXRyaXhBc0FycmF5KHRhcmdldCkge1xuICB2YXIgbWF0cml4U3RyaW5nID0gX2dldENvbXB1dGVkUHJvcGVydHkodGFyZ2V0LCBfdHJhbnNmb3JtUHJvcCk7XG5cbiAgcmV0dXJuIF9pc051bGxUcmFuc2Zvcm0obWF0cml4U3RyaW5nKSA/IF9pZGVudGl0eTJETWF0cml4IDogbWF0cml4U3RyaW5nLnN1YnN0cig3KS5tYXRjaChfbnVtRXhwKS5tYXAoX3JvdW5kKTtcbn0sXG4gICAgX2dldE1hdHJpeCA9IGZ1bmN0aW9uIF9nZXRNYXRyaXgodGFyZ2V0LCBmb3JjZTJEKSB7XG4gIHZhciBjYWNoZSA9IHRhcmdldC5fZ3NhcCB8fCBfZ2V0Q2FjaGUodGFyZ2V0KSxcbiAgICAgIHN0eWxlID0gdGFyZ2V0LnN0eWxlLFxuICAgICAgbWF0cml4ID0gX2dldENvbXB1dGVkVHJhbnNmb3JtTWF0cml4QXNBcnJheSh0YXJnZXQpLFxuICAgICAgcGFyZW50LFxuICAgICAgbmV4dFNpYmxpbmcsXG4gICAgICB0ZW1wLFxuICAgICAgYWRkZWRUb0RPTTtcblxuICBpZiAoY2FjaGUuc3ZnICYmIHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIikpIHtcbiAgICB0ZW1wID0gdGFyZ2V0LnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkubWF0cml4OyAvL2Vuc3VyZXMgdGhhdCBldmVuIGNvbXBsZXggdmFsdWVzIGxpa2UgXCJ0cmFuc2xhdGUoNTAsNjApIHJvdGF0ZSgxMzUsMCwwKVwiIGFyZSBwYXJzZWQgYmVjYXVzZSBpdCBtYXNoZXMgaXQgaW50byBhIG1hdHJpeC5cblxuICAgIG1hdHJpeCA9IFt0ZW1wLmEsIHRlbXAuYiwgdGVtcC5jLCB0ZW1wLmQsIHRlbXAuZSwgdGVtcC5mXTtcbiAgICByZXR1cm4gbWF0cml4LmpvaW4oXCIsXCIpID09PSBcIjEsMCwwLDEsMCwwXCIgPyBfaWRlbnRpdHkyRE1hdHJpeCA6IG1hdHJpeDtcbiAgfSBlbHNlIGlmIChtYXRyaXggPT09IF9pZGVudGl0eTJETWF0cml4ICYmICF0YXJnZXQub2Zmc2V0UGFyZW50ICYmIHRhcmdldCAhPT0gX2RvY0VsZW1lbnQgJiYgIWNhY2hlLnN2Zykge1xuICAgIC8vbm90ZTogaWYgb2Zmc2V0UGFyZW50IGlzIG51bGwsIHRoYXQgbWVhbnMgdGhlIGVsZW1lbnQgaXNuJ3QgaW4gdGhlIG5vcm1hbCBkb2N1bWVudCBmbG93LCBsaWtlIGlmIGl0IGhhcyBkaXNwbGF5Om5vbmUgb3Igb25lIG9mIGl0cyBhbmNlc3RvcnMgaGFzIGRpc3BsYXk6bm9uZSkuIEZpcmVmb3ggcmV0dXJucyBudWxsIGZvciBnZXRDb21wdXRlZFN0eWxlKCkgaWYgdGhlIGVsZW1lbnQgaXMgaW4gYW4gaWZyYW1lIHRoYXQgaGFzIGRpc3BsYXk6bm9uZS4gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTQ4Mzk3XG4gICAgLy9icm93c2VycyBkb24ndCByZXBvcnQgdHJhbnNmb3JtcyBhY2N1cmF0ZWx5IHVubGVzcyB0aGUgZWxlbWVudCBpcyBpbiB0aGUgRE9NIGFuZCBoYXMgYSBkaXNwbGF5IHZhbHVlIHRoYXQncyBub3QgXCJub25lXCIuIEZpcmVmb3ggYW5kIE1pY3Jvc29mdCBicm93c2VycyBoYXZlIGEgcGFydGlhbCBidWcgd2hlcmUgdGhleSdsbCByZXBvcnQgdHJhbnNmb3JtcyBldmVuIGlmIGRpc3BsYXk6bm9uZSBCVVQgbm90IGFueSBwZXJjZW50YWdlLWJhc2VkIHZhbHVlcyBsaWtlIHRyYW5zbGF0ZSgtNTAlLCA4cHgpIHdpbGwgYmUgcmVwb3J0ZWQgYXMgaWYgaXQncyB0cmFuc2xhdGUoMCwgOHB4KS5cbiAgICB0ZW1wID0gc3R5bGUuZGlzcGxheTtcbiAgICBzdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgIHBhcmVudCA9IHRhcmdldC5wYXJlbnROb2RlO1xuXG4gICAgaWYgKCFwYXJlbnQgfHwgIXRhcmdldC5vZmZzZXRQYXJlbnQgJiYgIXRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCkge1xuICAgICAgLy8gbm90ZTogaW4gMy4zLjAgd2Ugc3dpdGNoZWQgdGFyZ2V0Lm9mZnNldFBhcmVudCB0byBfZG9jLmJvZHkuY29udGFpbnModGFyZ2V0KSB0byBhdm9pZCBbc29tZXRpbWVzIHVubmVjZXNzYXJ5XSBNdXRhdGlvbk9ic2VydmVyIGNhbGxzIGJ1dCB0aGF0IHdhc24ndCBhZGVxdWF0ZSBiZWNhdXNlIHRoZXJlIGFyZSBlZGdlIGNhc2VzIHdoZXJlIG5lc3RlZCBwb3NpdGlvbjogZml4ZWQgZWxlbWVudHMgbmVlZCB0byBnZXQgcmVwYXJlbnRlZCB0byBhY2N1cmF0ZWx5IHNlbnNlIHRyYW5zZm9ybXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ3JlZW5zb2NrL0dTQVAvaXNzdWVzLzM4OCBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2dyZWVuc29jay9HU0FQL2lzc3Vlcy8zNzUuIE5vdGU6IHBvc2l0aW9uOiBmaXhlZCBlbGVtZW50cyByZXBvcnQgYSBudWxsIG9mZnNldFBhcmVudCBidXQgdGhleSBjb3VsZCBhbHNvIGJlIGludmlzaWJsZSBiZWNhdXNlIHRoZXkncmUgaW4gYW4gYW5jZXN0b3Igd2l0aCBkaXNwbGF5OiBub25lLCBzbyB3ZSBjaGVjayBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKS4gV2Ugb25seSB3YW50IHRvIGFsdGVyIHRoZSBET00gaWYgd2UgYWJzb2x1dGVseSBoYXZlIHRvIGJlY2F1c2UgaXQgY2FuIGNhdXNlIGlmcmFtZSBjb250ZW50IHRvIHJlbG9hZCwgbGlrZSBhIFZpbWVvIHZpZGVvLlxuICAgICAgYWRkZWRUb0RPTSA9IDE7IC8vZmxhZ1xuXG4gICAgICBuZXh0U2libGluZyA9IHRhcmdldC5uZXh0RWxlbWVudFNpYmxpbmc7XG5cbiAgICAgIF9kb2NFbGVtZW50LmFwcGVuZENoaWxkKHRhcmdldCk7IC8vd2UgbXVzdCBhZGQgaXQgdG8gdGhlIERPTSBpbiBvcmRlciB0byBnZXQgdmFsdWVzIHByb3Blcmx5XG5cbiAgICB9XG5cbiAgICBtYXRyaXggPSBfZ2V0Q29tcHV0ZWRUcmFuc2Zvcm1NYXRyaXhBc0FycmF5KHRhcmdldCk7XG4gICAgdGVtcCA/IHN0eWxlLmRpc3BsYXkgPSB0ZW1wIDogX3JlbW92ZVByb3BlcnR5KHRhcmdldCwgXCJkaXNwbGF5XCIpO1xuXG4gICAgaWYgKGFkZGVkVG9ET00pIHtcbiAgICAgIG5leHRTaWJsaW5nID8gcGFyZW50Lmluc2VydEJlZm9yZSh0YXJnZXQsIG5leHRTaWJsaW5nKSA6IHBhcmVudCA/IHBhcmVudC5hcHBlbmRDaGlsZCh0YXJnZXQpIDogX2RvY0VsZW1lbnQucmVtb3ZlQ2hpbGQodGFyZ2V0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZm9yY2UyRCAmJiBtYXRyaXgubGVuZ3RoID4gNiA/IFttYXRyaXhbMF0sIG1hdHJpeFsxXSwgbWF0cml4WzRdLCBtYXRyaXhbNV0sIG1hdHJpeFsxMl0sIG1hdHJpeFsxM11dIDogbWF0cml4O1xufSxcbiAgICBfYXBwbHlTVkdPcmlnaW4gPSBmdW5jdGlvbiBfYXBwbHlTVkdPcmlnaW4odGFyZ2V0LCBvcmlnaW4sIG9yaWdpbklzQWJzb2x1dGUsIHNtb290aCwgbWF0cml4QXJyYXksIHBsdWdpblRvQWRkUHJvcFR3ZWVuc1RvKSB7XG4gIHZhciBjYWNoZSA9IHRhcmdldC5fZ3NhcCxcbiAgICAgIG1hdHJpeCA9IG1hdHJpeEFycmF5IHx8IF9nZXRNYXRyaXgodGFyZ2V0LCB0cnVlKSxcbiAgICAgIHhPcmlnaW5PbGQgPSBjYWNoZS54T3JpZ2luIHx8IDAsXG4gICAgICB5T3JpZ2luT2xkID0gY2FjaGUueU9yaWdpbiB8fCAwLFxuICAgICAgeE9mZnNldE9sZCA9IGNhY2hlLnhPZmZzZXQgfHwgMCxcbiAgICAgIHlPZmZzZXRPbGQgPSBjYWNoZS55T2Zmc2V0IHx8IDAsXG4gICAgICBhID0gbWF0cml4WzBdLFxuICAgICAgYiA9IG1hdHJpeFsxXSxcbiAgICAgIGMgPSBtYXRyaXhbMl0sXG4gICAgICBkID0gbWF0cml4WzNdLFxuICAgICAgdHggPSBtYXRyaXhbNF0sXG4gICAgICB0eSA9IG1hdHJpeFs1XSxcbiAgICAgIG9yaWdpblNwbGl0ID0gb3JpZ2luLnNwbGl0KFwiIFwiKSxcbiAgICAgIHhPcmlnaW4gPSBwYXJzZUZsb2F0KG9yaWdpblNwbGl0WzBdKSB8fCAwLFxuICAgICAgeU9yaWdpbiA9IHBhcnNlRmxvYXQob3JpZ2luU3BsaXRbMV0pIHx8IDAsXG4gICAgICBib3VuZHMsXG4gICAgICBkZXRlcm1pbmFudCxcbiAgICAgIHgsXG4gICAgICB5O1xuXG4gIGlmICghb3JpZ2luSXNBYnNvbHV0ZSkge1xuICAgIGJvdW5kcyA9IF9nZXRCQm94KHRhcmdldCk7XG4gICAgeE9yaWdpbiA9IGJvdW5kcy54ICsgKH5vcmlnaW5TcGxpdFswXS5pbmRleE9mKFwiJVwiKSA/IHhPcmlnaW4gLyAxMDAgKiBib3VuZHMud2lkdGggOiB4T3JpZ2luKTtcbiAgICB5T3JpZ2luID0gYm91bmRzLnkgKyAofihvcmlnaW5TcGxpdFsxXSB8fCBvcmlnaW5TcGxpdFswXSkuaW5kZXhPZihcIiVcIikgPyB5T3JpZ2luIC8gMTAwICogYm91bmRzLmhlaWdodCA6IHlPcmlnaW4pOyAvLyBpZiAoIShcInhPcmlnaW5cIiBpbiBjYWNoZSkgJiYgKHhPcmlnaW4gfHwgeU9yaWdpbikpIHsgLy8gYWRkZWQgaW4gMy4xMi4zLCByZXZlcnRlZCBpbiAzLjEyLjQ7IHJlcXVpcmVzIG1vcmUgZXhwbG9yYXRpb25cbiAgICAvLyBcdHhPcmlnaW4gLT0gYm91bmRzLng7XG4gICAgLy8gXHR5T3JpZ2luIC09IGJvdW5kcy55O1xuICAgIC8vIH1cbiAgfSBlbHNlIGlmIChtYXRyaXggIT09IF9pZGVudGl0eTJETWF0cml4ICYmIChkZXRlcm1pbmFudCA9IGEgKiBkIC0gYiAqIGMpKSB7XG4gICAgLy9pZiBpdCdzIHplcm8gKGxpa2UgaWYgc2NhbGVYIGFuZCBzY2FsZVkgYXJlIHplcm8pLCBza2lwIGl0IHRvIGF2b2lkIGVycm9ycyB3aXRoIGRpdmlkaW5nIGJ5IHplcm8uXG4gICAgeCA9IHhPcmlnaW4gKiAoZCAvIGRldGVybWluYW50KSArIHlPcmlnaW4gKiAoLWMgLyBkZXRlcm1pbmFudCkgKyAoYyAqIHR5IC0gZCAqIHR4KSAvIGRldGVybWluYW50O1xuICAgIHkgPSB4T3JpZ2luICogKC1iIC8gZGV0ZXJtaW5hbnQpICsgeU9yaWdpbiAqIChhIC8gZGV0ZXJtaW5hbnQpIC0gKGEgKiB0eSAtIGIgKiB0eCkgLyBkZXRlcm1pbmFudDtcbiAgICB4T3JpZ2luID0geDtcbiAgICB5T3JpZ2luID0geTsgLy8gdGhlb3J5OiB3ZSBvbmx5IGhhZCB0byBkbyB0aGlzIGZvciBzbW9vdGhpbmcgYW5kIGl0IGFzc3VtZXMgdGhhdCB0aGUgcHJldmlvdXMgb25lIHdhcyBub3Qgb3JpZ2luSXNBYnNvbHV0ZS5cbiAgfVxuXG4gIGlmIChzbW9vdGggfHwgc21vb3RoICE9PSBmYWxzZSAmJiBjYWNoZS5zbW9vdGgpIHtcbiAgICB0eCA9IHhPcmlnaW4gLSB4T3JpZ2luT2xkO1xuICAgIHR5ID0geU9yaWdpbiAtIHlPcmlnaW5PbGQ7XG4gICAgY2FjaGUueE9mZnNldCA9IHhPZmZzZXRPbGQgKyAodHggKiBhICsgdHkgKiBjKSAtIHR4O1xuICAgIGNhY2hlLnlPZmZzZXQgPSB5T2Zmc2V0T2xkICsgKHR4ICogYiArIHR5ICogZCkgLSB0eTtcbiAgfSBlbHNlIHtcbiAgICBjYWNoZS54T2Zmc2V0ID0gY2FjaGUueU9mZnNldCA9IDA7XG4gIH1cblxuICBjYWNoZS54T3JpZ2luID0geE9yaWdpbjtcbiAgY2FjaGUueU9yaWdpbiA9IHlPcmlnaW47XG4gIGNhY2hlLnNtb290aCA9ICEhc21vb3RoO1xuICBjYWNoZS5vcmlnaW4gPSBvcmlnaW47XG4gIGNhY2hlLm9yaWdpbklzQWJzb2x1dGUgPSAhIW9yaWdpbklzQWJzb2x1dGU7XG4gIHRhcmdldC5zdHlsZVtfdHJhbnNmb3JtT3JpZ2luUHJvcF0gPSBcIjBweCAwcHhcIjsgLy9vdGhlcndpc2UsIGlmIHNvbWVvbmUgc2V0cyAgYW4gb3JpZ2luIHZpYSBDU1MsIGl0IHdpbGwgbGlrZWx5IGludGVyZmVyZSB3aXRoIHRoZSBTVkcgdHJhbnNmb3JtIGF0dHJpYnV0ZSBvbmVzIChiZWNhdXNlIHJlbWVtYmVyLCB3ZSdyZSBiYWtpbmcgdGhlIG9yaWdpbiBpbnRvIHRoZSBtYXRyaXgoKSB2YWx1ZSkuXG5cbiAgaWYgKHBsdWdpblRvQWRkUHJvcFR3ZWVuc1RvKSB7XG4gICAgX2FkZE5vblR3ZWVuaW5nUFQocGx1Z2luVG9BZGRQcm9wVHdlZW5zVG8sIGNhY2hlLCBcInhPcmlnaW5cIiwgeE9yaWdpbk9sZCwgeE9yaWdpbik7XG5cbiAgICBfYWRkTm9uVHdlZW5pbmdQVChwbHVnaW5Ub0FkZFByb3BUd2VlbnNUbywgY2FjaGUsIFwieU9yaWdpblwiLCB5T3JpZ2luT2xkLCB5T3JpZ2luKTtcblxuICAgIF9hZGROb25Ud2VlbmluZ1BUKHBsdWdpblRvQWRkUHJvcFR3ZWVuc1RvLCBjYWNoZSwgXCJ4T2Zmc2V0XCIsIHhPZmZzZXRPbGQsIGNhY2hlLnhPZmZzZXQpO1xuXG4gICAgX2FkZE5vblR3ZWVuaW5nUFQocGx1Z2luVG9BZGRQcm9wVHdlZW5zVG8sIGNhY2hlLCBcInlPZmZzZXRcIiwgeU9mZnNldE9sZCwgY2FjaGUueU9mZnNldCk7XG4gIH1cblxuICB0YXJnZXQuc2V0QXR0cmlidXRlKFwiZGF0YS1zdmctb3JpZ2luXCIsIHhPcmlnaW4gKyBcIiBcIiArIHlPcmlnaW4pO1xufSxcbiAgICBfcGFyc2VUcmFuc2Zvcm0gPSBmdW5jdGlvbiBfcGFyc2VUcmFuc2Zvcm0odGFyZ2V0LCB1bmNhY2hlKSB7XG4gIHZhciBjYWNoZSA9IHRhcmdldC5fZ3NhcCB8fCBuZXcgR1NDYWNoZSh0YXJnZXQpO1xuXG4gIGlmIChcInhcIiBpbiBjYWNoZSAmJiAhdW5jYWNoZSAmJiAhY2FjaGUudW5jYWNoZSkge1xuICAgIHJldHVybiBjYWNoZTtcbiAgfVxuXG4gIHZhciBzdHlsZSA9IHRhcmdldC5zdHlsZSxcbiAgICAgIGludmVydGVkU2NhbGVYID0gY2FjaGUuc2NhbGVYIDwgMCxcbiAgICAgIHB4ID0gXCJweFwiLFxuICAgICAgZGVnID0gXCJkZWdcIixcbiAgICAgIGNzID0gZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLFxuICAgICAgb3JpZ2luID0gX2dldENvbXB1dGVkUHJvcGVydHkodGFyZ2V0LCBfdHJhbnNmb3JtT3JpZ2luUHJvcCkgfHwgXCIwXCIsXG4gICAgICB4LFxuICAgICAgeSxcbiAgICAgIHosXG4gICAgICBzY2FsZVgsXG4gICAgICBzY2FsZVksXG4gICAgICByb3RhdGlvbixcbiAgICAgIHJvdGF0aW9uWCxcbiAgICAgIHJvdGF0aW9uWSxcbiAgICAgIHNrZXdYLFxuICAgICAgc2tld1ksXG4gICAgICBwZXJzcGVjdGl2ZSxcbiAgICAgIHhPcmlnaW4sXG4gICAgICB5T3JpZ2luLFxuICAgICAgbWF0cml4LFxuICAgICAgYW5nbGUsXG4gICAgICBjb3MsXG4gICAgICBzaW4sXG4gICAgICBhLFxuICAgICAgYixcbiAgICAgIGMsXG4gICAgICBkLFxuICAgICAgYTEyLFxuICAgICAgYTIyLFxuICAgICAgdDEsXG4gICAgICB0MixcbiAgICAgIHQzLFxuICAgICAgYTEzLFxuICAgICAgYTIzLFxuICAgICAgYTMzLFxuICAgICAgYTQyLFxuICAgICAgYTQzLFxuICAgICAgYTMyO1xuICB4ID0geSA9IHogPSByb3RhdGlvbiA9IHJvdGF0aW9uWCA9IHJvdGF0aW9uWSA9IHNrZXdYID0gc2tld1kgPSBwZXJzcGVjdGl2ZSA9IDA7XG4gIHNjYWxlWCA9IHNjYWxlWSA9IDE7XG4gIGNhY2hlLnN2ZyA9ICEhKHRhcmdldC5nZXRDVE0gJiYgX2lzU1ZHKHRhcmdldCkpO1xuXG4gIGlmIChjcy50cmFuc2xhdGUpIHtcbiAgICAvLyBhY2NvbW1vZGF0ZSBpbmRlcGVuZGVudCB0cmFuc2Zvcm1zIGJ5IGNvbWJpbmluZyB0aGVtIGludG8gbm9ybWFsIG9uZXMuXG4gICAgaWYgKGNzLnRyYW5zbGF0ZSAhPT0gXCJub25lXCIgfHwgY3Muc2NhbGUgIT09IFwibm9uZVwiIHx8IGNzLnJvdGF0ZSAhPT0gXCJub25lXCIpIHtcbiAgICAgIHN0eWxlW190cmFuc2Zvcm1Qcm9wXSA9IChjcy50cmFuc2xhdGUgIT09IFwibm9uZVwiID8gXCJ0cmFuc2xhdGUzZChcIiArIChjcy50cmFuc2xhdGUgKyBcIiAwIDBcIikuc3BsaXQoXCIgXCIpLnNsaWNlKDAsIDMpLmpvaW4oXCIsIFwiKSArIFwiKSBcIiA6IFwiXCIpICsgKGNzLnJvdGF0ZSAhPT0gXCJub25lXCIgPyBcInJvdGF0ZShcIiArIGNzLnJvdGF0ZSArIFwiKSBcIiA6IFwiXCIpICsgKGNzLnNjYWxlICE9PSBcIm5vbmVcIiA/IFwic2NhbGUoXCIgKyBjcy5zY2FsZS5zcGxpdChcIiBcIikuam9pbihcIixcIikgKyBcIikgXCIgOiBcIlwiKSArIChjc1tfdHJhbnNmb3JtUHJvcF0gIT09IFwibm9uZVwiID8gY3NbX3RyYW5zZm9ybVByb3BdIDogXCJcIik7XG4gICAgfVxuXG4gICAgc3R5bGUuc2NhbGUgPSBzdHlsZS5yb3RhdGUgPSBzdHlsZS50cmFuc2xhdGUgPSBcIm5vbmVcIjtcbiAgfVxuXG4gIG1hdHJpeCA9IF9nZXRNYXRyaXgodGFyZ2V0LCBjYWNoZS5zdmcpO1xuXG4gIGlmIChjYWNoZS5zdmcpIHtcbiAgICBpZiAoY2FjaGUudW5jYWNoZSkge1xuICAgICAgLy8gaWYgY2FjaGUudW5jYWNoZSBpcyB0cnVlIChhbmQgbWF5YmUgaWYgb3JpZ2luIGlzIDAsMCksIHdlIG5lZWQgdG8gc2V0IGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gKGNhY2hlLnhPcmlnaW4gLSBiYm94LngpICsgXCJweCBcIiArIChjYWNoZS55T3JpZ2luIC0gYmJveC55KSArIFwicHhcIi4gUHJldmlvdXNseSB3ZSBsZXQgdGhlIGRhdGEtc3ZnLW9yaWdpbiBzdGF5IGluc3RlYWQsIGJ1dCB3aGVuIGludHJvZHVjaW5nIHJldmVydCgpLCBpdCBjb21wbGljYXRlZCB0aGluZ3MuXG4gICAgICB0MiA9IHRhcmdldC5nZXRCQm94KCk7XG4gICAgICBvcmlnaW4gPSBjYWNoZS54T3JpZ2luIC0gdDIueCArIFwicHggXCIgKyAoY2FjaGUueU9yaWdpbiAtIHQyLnkpICsgXCJweFwiO1xuICAgICAgdDEgPSBcIlwiO1xuICAgIH0gZWxzZSB7XG4gICAgICB0MSA9ICF1bmNhY2hlICYmIHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXN2Zy1vcmlnaW5cIik7IC8vICBSZW1lbWJlciwgdG8gd29yayBhcm91bmQgYnJvd3NlciBpbmNvbnNpc3RlbmNpZXMgd2UgYWx3YXlzIGZvcmNlIFNWRyBlbGVtZW50cycgdHJhbnNmb3JtT3JpZ2luIHRvIDAsMCBhbmQgb2Zmc2V0IHRoZSB0cmFuc2xhdGlvbiBhY2NvcmRpbmdseS5cbiAgICB9XG5cbiAgICBfYXBwbHlTVkdPcmlnaW4odGFyZ2V0LCB0MSB8fCBvcmlnaW4sICEhdDEgfHwgY2FjaGUub3JpZ2luSXNBYnNvbHV0ZSwgY2FjaGUuc21vb3RoICE9PSBmYWxzZSwgbWF0cml4KTtcbiAgfVxuXG4gIHhPcmlnaW4gPSBjYWNoZS54T3JpZ2luIHx8IDA7XG4gIHlPcmlnaW4gPSBjYWNoZS55T3JpZ2luIHx8IDA7XG5cbiAgaWYgKG1hdHJpeCAhPT0gX2lkZW50aXR5MkRNYXRyaXgpIHtcbiAgICBhID0gbWF0cml4WzBdOyAvL2ExMVxuXG4gICAgYiA9IG1hdHJpeFsxXTsgLy9hMjFcblxuICAgIGMgPSBtYXRyaXhbMl07IC8vYTMxXG5cbiAgICBkID0gbWF0cml4WzNdOyAvL2E0MVxuXG4gICAgeCA9IGExMiA9IG1hdHJpeFs0XTtcbiAgICB5ID0gYTIyID0gbWF0cml4WzVdOyAvLzJEIG1hdHJpeFxuXG4gICAgaWYgKG1hdHJpeC5sZW5ndGggPT09IDYpIHtcbiAgICAgIHNjYWxlWCA9IE1hdGguc3FydChhICogYSArIGIgKiBiKTtcbiAgICAgIHNjYWxlWSA9IE1hdGguc3FydChkICogZCArIGMgKiBjKTtcbiAgICAgIHJvdGF0aW9uID0gYSB8fCBiID8gX2F0YW4yKGIsIGEpICogX1JBRDJERUcgOiAwOyAvL25vdGU6IGlmIHNjYWxlWCBpcyAwLCB3ZSBjYW5ub3QgYWNjdXJhdGVseSBtZWFzdXJlIHJvdGF0aW9uLiBTYW1lIGZvciBza2V3WCB3aXRoIGEgc2NhbGVZIG9mIDAuIFRoZXJlZm9yZSwgd2UgZGVmYXVsdCB0byB0aGUgcHJldmlvdXNseSByZWNvcmRlZCB2YWx1ZSAob3IgemVybyBpZiB0aGF0IGRvZXNuJ3QgZXhpc3QpLlxuXG4gICAgICBza2V3WCA9IGMgfHwgZCA/IF9hdGFuMihjLCBkKSAqIF9SQUQyREVHICsgcm90YXRpb24gOiAwO1xuICAgICAgc2tld1ggJiYgKHNjYWxlWSAqPSBNYXRoLmFicyhNYXRoLmNvcyhza2V3WCAqIF9ERUcyUkFEKSkpO1xuXG4gICAgICBpZiAoY2FjaGUuc3ZnKSB7XG4gICAgICAgIHggLT0geE9yaWdpbiAtICh4T3JpZ2luICogYSArIHlPcmlnaW4gKiBjKTtcbiAgICAgICAgeSAtPSB5T3JpZ2luIC0gKHhPcmlnaW4gKiBiICsgeU9yaWdpbiAqIGQpO1xuICAgICAgfSAvLzNEIG1hdHJpeFxuXG4gICAgfSBlbHNlIHtcbiAgICAgIGEzMiA9IG1hdHJpeFs2XTtcbiAgICAgIGE0MiA9IG1hdHJpeFs3XTtcbiAgICAgIGExMyA9IG1hdHJpeFs4XTtcbiAgICAgIGEyMyA9IG1hdHJpeFs5XTtcbiAgICAgIGEzMyA9IG1hdHJpeFsxMF07XG4gICAgICBhNDMgPSBtYXRyaXhbMTFdO1xuICAgICAgeCA9IG1hdHJpeFsxMl07XG4gICAgICB5ID0gbWF0cml4WzEzXTtcbiAgICAgIHogPSBtYXRyaXhbMTRdO1xuICAgICAgYW5nbGUgPSBfYXRhbjIoYTMyLCBhMzMpO1xuICAgICAgcm90YXRpb25YID0gYW5nbGUgKiBfUkFEMkRFRzsgLy9yb3RhdGlvblhcblxuICAgICAgaWYgKGFuZ2xlKSB7XG4gICAgICAgIGNvcyA9IE1hdGguY29zKC1hbmdsZSk7XG4gICAgICAgIHNpbiA9IE1hdGguc2luKC1hbmdsZSk7XG4gICAgICAgIHQxID0gYTEyICogY29zICsgYTEzICogc2luO1xuICAgICAgICB0MiA9IGEyMiAqIGNvcyArIGEyMyAqIHNpbjtcbiAgICAgICAgdDMgPSBhMzIgKiBjb3MgKyBhMzMgKiBzaW47XG4gICAgICAgIGExMyA9IGExMiAqIC1zaW4gKyBhMTMgKiBjb3M7XG4gICAgICAgIGEyMyA9IGEyMiAqIC1zaW4gKyBhMjMgKiBjb3M7XG4gICAgICAgIGEzMyA9IGEzMiAqIC1zaW4gKyBhMzMgKiBjb3M7XG4gICAgICAgIGE0MyA9IGE0MiAqIC1zaW4gKyBhNDMgKiBjb3M7XG4gICAgICAgIGExMiA9IHQxO1xuICAgICAgICBhMjIgPSB0MjtcbiAgICAgICAgYTMyID0gdDM7XG4gICAgICB9IC8vcm90YXRpb25ZXG5cblxuICAgICAgYW5nbGUgPSBfYXRhbjIoLWMsIGEzMyk7XG4gICAgICByb3RhdGlvblkgPSBhbmdsZSAqIF9SQUQyREVHO1xuXG4gICAgICBpZiAoYW5nbGUpIHtcbiAgICAgICAgY29zID0gTWF0aC5jb3MoLWFuZ2xlKTtcbiAgICAgICAgc2luID0gTWF0aC5zaW4oLWFuZ2xlKTtcbiAgICAgICAgdDEgPSBhICogY29zIC0gYTEzICogc2luO1xuICAgICAgICB0MiA9IGIgKiBjb3MgLSBhMjMgKiBzaW47XG4gICAgICAgIHQzID0gYyAqIGNvcyAtIGEzMyAqIHNpbjtcbiAgICAgICAgYTQzID0gZCAqIHNpbiArIGE0MyAqIGNvcztcbiAgICAgICAgYSA9IHQxO1xuICAgICAgICBiID0gdDI7XG4gICAgICAgIGMgPSB0MztcbiAgICAgIH0gLy9yb3RhdGlvblpcblxuXG4gICAgICBhbmdsZSA9IF9hdGFuMihiLCBhKTtcbiAgICAgIHJvdGF0aW9uID0gYW5nbGUgKiBfUkFEMkRFRztcblxuICAgICAgaWYgKGFuZ2xlKSB7XG4gICAgICAgIGNvcyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgc2luID0gTWF0aC5zaW4oYW5nbGUpO1xuICAgICAgICB0MSA9IGEgKiBjb3MgKyBiICogc2luO1xuICAgICAgICB0MiA9IGExMiAqIGNvcyArIGEyMiAqIHNpbjtcbiAgICAgICAgYiA9IGIgKiBjb3MgLSBhICogc2luO1xuICAgICAgICBhMjIgPSBhMjIgKiBjb3MgLSBhMTIgKiBzaW47XG4gICAgICAgIGEgPSB0MTtcbiAgICAgICAgYTEyID0gdDI7XG4gICAgICB9XG5cbiAgICAgIGlmIChyb3RhdGlvblggJiYgTWF0aC5hYnMocm90YXRpb25YKSArIE1hdGguYWJzKHJvdGF0aW9uKSA+IDM1OS45KSB7XG4gICAgICAgIC8vd2hlbiByb3RhdGlvblkgaXMgc2V0LCBpdCB3aWxsIG9mdGVuIGJlIHBhcnNlZCBhcyAxODAgZGVncmVlcyBkaWZmZXJlbnQgdGhhbiBpdCBzaG91bGQgYmUsIGFuZCByb3RhdGlvblggYW5kIHJvdGF0aW9uIGJvdGggYmVpbmcgMTgwIChpdCBsb29rcyB0aGUgc2FtZSksIHNvIHdlIGFkanVzdCBmb3IgdGhhdCBoZXJlLlxuICAgICAgICByb3RhdGlvblggPSByb3RhdGlvbiA9IDA7XG4gICAgICAgIHJvdGF0aW9uWSA9IDE4MCAtIHJvdGF0aW9uWTtcbiAgICAgIH1cblxuICAgICAgc2NhbGVYID0gX3JvdW5kKE1hdGguc3FydChhICogYSArIGIgKiBiICsgYyAqIGMpKTtcbiAgICAgIHNjYWxlWSA9IF9yb3VuZChNYXRoLnNxcnQoYTIyICogYTIyICsgYTMyICogYTMyKSk7XG4gICAgICBhbmdsZSA9IF9hdGFuMihhMTIsIGEyMik7XG4gICAgICBza2V3WCA9IE1hdGguYWJzKGFuZ2xlKSA+IDAuMDAwMiA/IGFuZ2xlICogX1JBRDJERUcgOiAwO1xuICAgICAgcGVyc3BlY3RpdmUgPSBhNDMgPyAxIC8gKGE0MyA8IDAgPyAtYTQzIDogYTQzKSA6IDA7XG4gICAgfVxuXG4gICAgaWYgKGNhY2hlLnN2Zykge1xuICAgICAgLy9zZW5zZSBpZiB0aGVyZSBhcmUgQ1NTIHRyYW5zZm9ybXMgYXBwbGllZCBvbiBhbiBTVkcgZWxlbWVudCBpbiB3aGljaCBjYXNlIHdlIG11c3Qgb3ZlcndyaXRlIHRoZW0gd2hlbiByZW5kZXJpbmcuIFRoZSB0cmFuc2Zvcm0gYXR0cmlidXRlIGlzIG1vcmUgcmVsaWFibGUgY3Jvc3MtYnJvd3NlciwgYnV0IHdlIGNhbid0IGp1c3QgcmVtb3ZlIHRoZSBDU1Mgb25lcyBiZWNhdXNlIHRoZXkgbWF5IGJlIGFwcGxpZWQgaW4gYSBDU1MgcnVsZSBzb21ld2hlcmUgKG5vdCBqdXN0IGlubGluZSkuXG4gICAgICB0MSA9IHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIik7XG4gICAgICBjYWNoZS5mb3JjZUNTUyA9IHRhcmdldC5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgXCJcIikgfHwgIV9pc051bGxUcmFuc2Zvcm0oX2dldENvbXB1dGVkUHJvcGVydHkodGFyZ2V0LCBfdHJhbnNmb3JtUHJvcCkpO1xuICAgICAgdDEgJiYgdGFyZ2V0LnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCB0MSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKE1hdGguYWJzKHNrZXdYKSA+IDkwICYmIE1hdGguYWJzKHNrZXdYKSA8IDI3MCkge1xuICAgIGlmIChpbnZlcnRlZFNjYWxlWCkge1xuICAgICAgc2NhbGVYICo9IC0xO1xuICAgICAgc2tld1ggKz0gcm90YXRpb24gPD0gMCA/IDE4MCA6IC0xODA7XG4gICAgICByb3RhdGlvbiArPSByb3RhdGlvbiA8PSAwID8gMTgwIDogLTE4MDtcbiAgICB9IGVsc2Uge1xuICAgICAgc2NhbGVZICo9IC0xO1xuICAgICAgc2tld1ggKz0gc2tld1ggPD0gMCA/IDE4MCA6IC0xODA7XG4gICAgfVxuICB9XG5cbiAgdW5jYWNoZSA9IHVuY2FjaGUgfHwgY2FjaGUudW5jYWNoZTtcbiAgY2FjaGUueCA9IHggLSAoKGNhY2hlLnhQZXJjZW50ID0geCAmJiAoIXVuY2FjaGUgJiYgY2FjaGUueFBlcmNlbnQgfHwgKE1hdGgucm91bmQodGFyZ2V0Lm9mZnNldFdpZHRoIC8gMikgPT09IE1hdGgucm91bmQoLXgpID8gLTUwIDogMCkpKSA/IHRhcmdldC5vZmZzZXRXaWR0aCAqIGNhY2hlLnhQZXJjZW50IC8gMTAwIDogMCkgKyBweDtcbiAgY2FjaGUueSA9IHkgLSAoKGNhY2hlLnlQZXJjZW50ID0geSAmJiAoIXVuY2FjaGUgJiYgY2FjaGUueVBlcmNlbnQgfHwgKE1hdGgucm91bmQodGFyZ2V0Lm9mZnNldEhlaWdodCAvIDIpID09PSBNYXRoLnJvdW5kKC15KSA/IC01MCA6IDApKSkgPyB0YXJnZXQub2Zmc2V0SGVpZ2h0ICogY2FjaGUueVBlcmNlbnQgLyAxMDAgOiAwKSArIHB4O1xuICBjYWNoZS56ID0geiArIHB4O1xuICBjYWNoZS5zY2FsZVggPSBfcm91bmQoc2NhbGVYKTtcbiAgY2FjaGUuc2NhbGVZID0gX3JvdW5kKHNjYWxlWSk7XG4gIGNhY2hlLnJvdGF0aW9uID0gX3JvdW5kKHJvdGF0aW9uKSArIGRlZztcbiAgY2FjaGUucm90YXRpb25YID0gX3JvdW5kKHJvdGF0aW9uWCkgKyBkZWc7XG4gIGNhY2hlLnJvdGF0aW9uWSA9IF9yb3VuZChyb3RhdGlvblkpICsgZGVnO1xuICBjYWNoZS5za2V3WCA9IHNrZXdYICsgZGVnO1xuICBjYWNoZS5za2V3WSA9IHNrZXdZICsgZGVnO1xuICBjYWNoZS50cmFuc2Zvcm1QZXJzcGVjdGl2ZSA9IHBlcnNwZWN0aXZlICsgcHg7XG5cbiAgaWYgKGNhY2hlLnpPcmlnaW4gPSBwYXJzZUZsb2F0KG9yaWdpbi5zcGxpdChcIiBcIilbMl0pIHx8ICF1bmNhY2hlICYmIGNhY2hlLnpPcmlnaW4gfHwgMCkge1xuICAgIHN0eWxlW190cmFuc2Zvcm1PcmlnaW5Qcm9wXSA9IF9maXJzdFR3b09ubHkob3JpZ2luKTtcbiAgfVxuXG4gIGNhY2hlLnhPZmZzZXQgPSBjYWNoZS55T2Zmc2V0ID0gMDtcbiAgY2FjaGUuZm9yY2UzRCA9IF9jb25maWcuZm9yY2UzRDtcbiAgY2FjaGUucmVuZGVyVHJhbnNmb3JtID0gY2FjaGUuc3ZnID8gX3JlbmRlclNWR1RyYW5zZm9ybXMgOiBfc3VwcG9ydHMzRCA/IF9yZW5kZXJDU1NUcmFuc2Zvcm1zIDogX3JlbmRlck5vbjNEVHJhbnNmb3JtcztcbiAgY2FjaGUudW5jYWNoZSA9IDA7XG4gIHJldHVybiBjYWNoZTtcbn0sXG4gICAgX2ZpcnN0VHdvT25seSA9IGZ1bmN0aW9uIF9maXJzdFR3b09ubHkodmFsdWUpIHtcbiAgcmV0dXJuICh2YWx1ZSA9IHZhbHVlLnNwbGl0KFwiIFwiKSlbMF0gKyBcIiBcIiArIHZhbHVlWzFdO1xufSxcbiAgICAvL2ZvciBoYW5kbGluZyB0cmFuc2Zvcm1PcmlnaW4gdmFsdWVzLCBzdHJpcHBpbmcgb3V0IHRoZSAzcmQgZGltZW5zaW9uXG5fYWRkUHhUcmFuc2xhdGUgPSBmdW5jdGlvbiBfYWRkUHhUcmFuc2xhdGUodGFyZ2V0LCBzdGFydCwgdmFsdWUpIHtcbiAgdmFyIHVuaXQgPSBnZXRVbml0KHN0YXJ0KTtcbiAgcmV0dXJuIF9yb3VuZChwYXJzZUZsb2F0KHN0YXJ0KSArIHBhcnNlRmxvYXQoX2NvbnZlcnRUb1VuaXQodGFyZ2V0LCBcInhcIiwgdmFsdWUgKyBcInB4XCIsIHVuaXQpKSkgKyB1bml0O1xufSxcbiAgICBfcmVuZGVyTm9uM0RUcmFuc2Zvcm1zID0gZnVuY3Rpb24gX3JlbmRlck5vbjNEVHJhbnNmb3JtcyhyYXRpbywgY2FjaGUpIHtcbiAgY2FjaGUueiA9IFwiMHB4XCI7XG4gIGNhY2hlLnJvdGF0aW9uWSA9IGNhY2hlLnJvdGF0aW9uWCA9IFwiMGRlZ1wiO1xuICBjYWNoZS5mb3JjZTNEID0gMDtcblxuICBfcmVuZGVyQ1NTVHJhbnNmb3JtcyhyYXRpbywgY2FjaGUpO1xufSxcbiAgICBfemVyb0RlZyA9IFwiMGRlZ1wiLFxuICAgIF96ZXJvUHggPSBcIjBweFwiLFxuICAgIF9lbmRQYXJlbnRoZXNpcyA9IFwiKSBcIixcbiAgICBfcmVuZGVyQ1NTVHJhbnNmb3JtcyA9IGZ1bmN0aW9uIF9yZW5kZXJDU1NUcmFuc2Zvcm1zKHJhdGlvLCBjYWNoZSkge1xuICB2YXIgX3JlZiA9IGNhY2hlIHx8IHRoaXMsXG4gICAgICB4UGVyY2VudCA9IF9yZWYueFBlcmNlbnQsXG4gICAgICB5UGVyY2VudCA9IF9yZWYueVBlcmNlbnQsXG4gICAgICB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueSxcbiAgICAgIHogPSBfcmVmLnosXG4gICAgICByb3RhdGlvbiA9IF9yZWYucm90YXRpb24sXG4gICAgICByb3RhdGlvblkgPSBfcmVmLnJvdGF0aW9uWSxcbiAgICAgIHJvdGF0aW9uWCA9IF9yZWYucm90YXRpb25YLFxuICAgICAgc2tld1ggPSBfcmVmLnNrZXdYLFxuICAgICAgc2tld1kgPSBfcmVmLnNrZXdZLFxuICAgICAgc2NhbGVYID0gX3JlZi5zY2FsZVgsXG4gICAgICBzY2FsZVkgPSBfcmVmLnNjYWxlWSxcbiAgICAgIHRyYW5zZm9ybVBlcnNwZWN0aXZlID0gX3JlZi50cmFuc2Zvcm1QZXJzcGVjdGl2ZSxcbiAgICAgIGZvcmNlM0QgPSBfcmVmLmZvcmNlM0QsXG4gICAgICB0YXJnZXQgPSBfcmVmLnRhcmdldCxcbiAgICAgIHpPcmlnaW4gPSBfcmVmLnpPcmlnaW4sXG4gICAgICB0cmFuc2Zvcm1zID0gXCJcIixcbiAgICAgIHVzZTNEID0gZm9yY2UzRCA9PT0gXCJhdXRvXCIgJiYgcmF0aW8gJiYgcmF0aW8gIT09IDEgfHwgZm9yY2UzRCA9PT0gdHJ1ZTsgLy8gU2FmYXJpIGhhcyBhIGJ1ZyB0aGF0IGNhdXNlcyBpdCBub3QgdG8gcmVuZGVyIDNEIHRyYW5zZm9ybS1vcmlnaW4gdmFsdWVzIHByb3Blcmx5LCBzbyB3ZSBmb3JjZSB0aGUgeiBvcmlnaW4gdG8gMCwgcmVjb3JkIGl0IGluIHRoZSBjYWNoZSwgYW5kIHRoZW4gZG8gdGhlIG1hdGggaGVyZSB0byBvZmZzZXQgdGhlIHRyYW5zbGF0ZSB2YWx1ZXMgYWNjb3JkaW5nbHkgKGJhc2ljYWxseSBkbyB0aGUgM0QgdHJhbnNmb3JtLW9yaWdpbiBwYXJ0IG1hbnVhbGx5KVxuXG5cbiAgaWYgKHpPcmlnaW4gJiYgKHJvdGF0aW9uWCAhPT0gX3plcm9EZWcgfHwgcm90YXRpb25ZICE9PSBfemVyb0RlZykpIHtcbiAgICB2YXIgYW5nbGUgPSBwYXJzZUZsb2F0KHJvdGF0aW9uWSkgKiBfREVHMlJBRCxcbiAgICAgICAgYTEzID0gTWF0aC5zaW4oYW5nbGUpLFxuICAgICAgICBhMzMgPSBNYXRoLmNvcyhhbmdsZSksXG4gICAgICAgIGNvcztcblxuICAgIGFuZ2xlID0gcGFyc2VGbG9hdChyb3RhdGlvblgpICogX0RFRzJSQUQ7XG4gICAgY29zID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgIHggPSBfYWRkUHhUcmFuc2xhdGUodGFyZ2V0LCB4LCBhMTMgKiBjb3MgKiAtek9yaWdpbik7XG4gICAgeSA9IF9hZGRQeFRyYW5zbGF0ZSh0YXJnZXQsIHksIC1NYXRoLnNpbihhbmdsZSkgKiAtek9yaWdpbik7XG4gICAgeiA9IF9hZGRQeFRyYW5zbGF0ZSh0YXJnZXQsIHosIGEzMyAqIGNvcyAqIC16T3JpZ2luICsgek9yaWdpbik7XG4gIH1cblxuICBpZiAodHJhbnNmb3JtUGVyc3BlY3RpdmUgIT09IF96ZXJvUHgpIHtcbiAgICB0cmFuc2Zvcm1zICs9IFwicGVyc3BlY3RpdmUoXCIgKyB0cmFuc2Zvcm1QZXJzcGVjdGl2ZSArIF9lbmRQYXJlbnRoZXNpcztcbiAgfVxuXG4gIGlmICh4UGVyY2VudCB8fCB5UGVyY2VudCkge1xuICAgIHRyYW5zZm9ybXMgKz0gXCJ0cmFuc2xhdGUoXCIgKyB4UGVyY2VudCArIFwiJSwgXCIgKyB5UGVyY2VudCArIFwiJSkgXCI7XG4gIH1cblxuICBpZiAodXNlM0QgfHwgeCAhPT0gX3plcm9QeCB8fCB5ICE9PSBfemVyb1B4IHx8IHogIT09IF96ZXJvUHgpIHtcbiAgICB0cmFuc2Zvcm1zICs9IHogIT09IF96ZXJvUHggfHwgdXNlM0QgPyBcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwiLCBcIiArIHkgKyBcIiwgXCIgKyB6ICsgXCIpIFwiIDogXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCIsIFwiICsgeSArIF9lbmRQYXJlbnRoZXNpcztcbiAgfVxuXG4gIGlmIChyb3RhdGlvbiAhPT0gX3plcm9EZWcpIHtcbiAgICB0cmFuc2Zvcm1zICs9IFwicm90YXRlKFwiICsgcm90YXRpb24gKyBfZW5kUGFyZW50aGVzaXM7XG4gIH1cblxuICBpZiAocm90YXRpb25ZICE9PSBfemVyb0RlZykge1xuICAgIHRyYW5zZm9ybXMgKz0gXCJyb3RhdGVZKFwiICsgcm90YXRpb25ZICsgX2VuZFBhcmVudGhlc2lzO1xuICB9XG5cbiAgaWYgKHJvdGF0aW9uWCAhPT0gX3plcm9EZWcpIHtcbiAgICB0cmFuc2Zvcm1zICs9IFwicm90YXRlWChcIiArIHJvdGF0aW9uWCArIF9lbmRQYXJlbnRoZXNpcztcbiAgfVxuXG4gIGlmIChza2V3WCAhPT0gX3plcm9EZWcgfHwgc2tld1kgIT09IF96ZXJvRGVnKSB7XG4gICAgdHJhbnNmb3JtcyArPSBcInNrZXcoXCIgKyBza2V3WCArIFwiLCBcIiArIHNrZXdZICsgX2VuZFBhcmVudGhlc2lzO1xuICB9XG5cbiAgaWYgKHNjYWxlWCAhPT0gMSB8fCBzY2FsZVkgIT09IDEpIHtcbiAgICB0cmFuc2Zvcm1zICs9IFwic2NhbGUoXCIgKyBzY2FsZVggKyBcIiwgXCIgKyBzY2FsZVkgKyBfZW5kUGFyZW50aGVzaXM7XG4gIH1cblxuICB0YXJnZXQuc3R5bGVbX3RyYW5zZm9ybVByb3BdID0gdHJhbnNmb3JtcyB8fCBcInRyYW5zbGF0ZSgwLCAwKVwiO1xufSxcbiAgICBfcmVuZGVyU1ZHVHJhbnNmb3JtcyA9IGZ1bmN0aW9uIF9yZW5kZXJTVkdUcmFuc2Zvcm1zKHJhdGlvLCBjYWNoZSkge1xuICB2YXIgX3JlZjIgPSBjYWNoZSB8fCB0aGlzLFxuICAgICAgeFBlcmNlbnQgPSBfcmVmMi54UGVyY2VudCxcbiAgICAgIHlQZXJjZW50ID0gX3JlZjIueVBlcmNlbnQsXG4gICAgICB4ID0gX3JlZjIueCxcbiAgICAgIHkgPSBfcmVmMi55LFxuICAgICAgcm90YXRpb24gPSBfcmVmMi5yb3RhdGlvbixcbiAgICAgIHNrZXdYID0gX3JlZjIuc2tld1gsXG4gICAgICBza2V3WSA9IF9yZWYyLnNrZXdZLFxuICAgICAgc2NhbGVYID0gX3JlZjIuc2NhbGVYLFxuICAgICAgc2NhbGVZID0gX3JlZjIuc2NhbGVZLFxuICAgICAgdGFyZ2V0ID0gX3JlZjIudGFyZ2V0LFxuICAgICAgeE9yaWdpbiA9IF9yZWYyLnhPcmlnaW4sXG4gICAgICB5T3JpZ2luID0gX3JlZjIueU9yaWdpbixcbiAgICAgIHhPZmZzZXQgPSBfcmVmMi54T2Zmc2V0LFxuICAgICAgeU9mZnNldCA9IF9yZWYyLnlPZmZzZXQsXG4gICAgICBmb3JjZUNTUyA9IF9yZWYyLmZvcmNlQ1NTLFxuICAgICAgdHggPSBwYXJzZUZsb2F0KHgpLFxuICAgICAgdHkgPSBwYXJzZUZsb2F0KHkpLFxuICAgICAgYTExLFxuICAgICAgYTIxLFxuICAgICAgYTEyLFxuICAgICAgYTIyLFxuICAgICAgdGVtcDtcblxuICByb3RhdGlvbiA9IHBhcnNlRmxvYXQocm90YXRpb24pO1xuICBza2V3WCA9IHBhcnNlRmxvYXQoc2tld1gpO1xuICBza2V3WSA9IHBhcnNlRmxvYXQoc2tld1kpO1xuXG4gIGlmIChza2V3WSkge1xuICAgIC8vZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHdlIGNvbWJpbmUgYWxsIHNrZXdpbmcgaW50byB0aGUgc2tld1ggYW5kIHJvdGF0aW9uIHZhbHVlcy4gUmVtZW1iZXIsIGEgc2tld1kgb2YgMTAgZGVncmVlcyBsb29rcyB0aGUgc2FtZSBhcyBhIHJvdGF0aW9uIG9mIDEwIGRlZ3JlZXMgcGx1cyBhIHNrZXdYIG9mIDEwIGRlZ3JlZXMuXG4gICAgc2tld1kgPSBwYXJzZUZsb2F0KHNrZXdZKTtcbiAgICBza2V3WCArPSBza2V3WTtcbiAgICByb3RhdGlvbiArPSBza2V3WTtcbiAgfVxuXG4gIGlmIChyb3RhdGlvbiB8fCBza2V3WCkge1xuICAgIHJvdGF0aW9uICo9IF9ERUcyUkFEO1xuICAgIHNrZXdYICo9IF9ERUcyUkFEO1xuICAgIGExMSA9IE1hdGguY29zKHJvdGF0aW9uKSAqIHNjYWxlWDtcbiAgICBhMjEgPSBNYXRoLnNpbihyb3RhdGlvbikgKiBzY2FsZVg7XG4gICAgYTEyID0gTWF0aC5zaW4ocm90YXRpb24gLSBza2V3WCkgKiAtc2NhbGVZO1xuICAgIGEyMiA9IE1hdGguY29zKHJvdGF0aW9uIC0gc2tld1gpICogc2NhbGVZO1xuXG4gICAgaWYgKHNrZXdYKSB7XG4gICAgICBza2V3WSAqPSBfREVHMlJBRDtcbiAgICAgIHRlbXAgPSBNYXRoLnRhbihza2V3WCAtIHNrZXdZKTtcbiAgICAgIHRlbXAgPSBNYXRoLnNxcnQoMSArIHRlbXAgKiB0ZW1wKTtcbiAgICAgIGExMiAqPSB0ZW1wO1xuICAgICAgYTIyICo9IHRlbXA7XG5cbiAgICAgIGlmIChza2V3WSkge1xuICAgICAgICB0ZW1wID0gTWF0aC50YW4oc2tld1kpO1xuICAgICAgICB0ZW1wID0gTWF0aC5zcXJ0KDEgKyB0ZW1wICogdGVtcCk7XG4gICAgICAgIGExMSAqPSB0ZW1wO1xuICAgICAgICBhMjEgKj0gdGVtcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhMTEgPSBfcm91bmQoYTExKTtcbiAgICBhMjEgPSBfcm91bmQoYTIxKTtcbiAgICBhMTIgPSBfcm91bmQoYTEyKTtcbiAgICBhMjIgPSBfcm91bmQoYTIyKTtcbiAgfSBlbHNlIHtcbiAgICBhMTEgPSBzY2FsZVg7XG4gICAgYTIyID0gc2NhbGVZO1xuICAgIGEyMSA9IGExMiA9IDA7XG4gIH1cblxuICBpZiAodHggJiYgIX4oeCArIFwiXCIpLmluZGV4T2YoXCJweFwiKSB8fCB0eSAmJiAhfih5ICsgXCJcIikuaW5kZXhPZihcInB4XCIpKSB7XG4gICAgdHggPSBfY29udmVydFRvVW5pdCh0YXJnZXQsIFwieFwiLCB4LCBcInB4XCIpO1xuICAgIHR5ID0gX2NvbnZlcnRUb1VuaXQodGFyZ2V0LCBcInlcIiwgeSwgXCJweFwiKTtcbiAgfVxuXG4gIGlmICh4T3JpZ2luIHx8IHlPcmlnaW4gfHwgeE9mZnNldCB8fCB5T2Zmc2V0KSB7XG4gICAgdHggPSBfcm91bmQodHggKyB4T3JpZ2luIC0gKHhPcmlnaW4gKiBhMTEgKyB5T3JpZ2luICogYTEyKSArIHhPZmZzZXQpO1xuICAgIHR5ID0gX3JvdW5kKHR5ICsgeU9yaWdpbiAtICh4T3JpZ2luICogYTIxICsgeU9yaWdpbiAqIGEyMikgKyB5T2Zmc2V0KTtcbiAgfVxuXG4gIGlmICh4UGVyY2VudCB8fCB5UGVyY2VudCkge1xuICAgIC8vVGhlIFNWRyBzcGVjIGRvZXNuJ3Qgc3VwcG9ydCBwZXJjZW50YWdlLWJhc2VkIHRyYW5zbGF0aW9uIGluIHRoZSBcInRyYW5zZm9ybVwiIGF0dHJpYnV0ZSwgc28gd2UgbWVyZ2UgaXQgaW50byB0aGUgdHJhbnNsYXRpb24gdG8gc2ltdWxhdGUgaXQuXG4gICAgdGVtcCA9IHRhcmdldC5nZXRCQm94KCk7XG4gICAgdHggPSBfcm91bmQodHggKyB4UGVyY2VudCAvIDEwMCAqIHRlbXAud2lkdGgpO1xuICAgIHR5ID0gX3JvdW5kKHR5ICsgeVBlcmNlbnQgLyAxMDAgKiB0ZW1wLmhlaWdodCk7XG4gIH1cblxuICB0ZW1wID0gXCJtYXRyaXgoXCIgKyBhMTEgKyBcIixcIiArIGEyMSArIFwiLFwiICsgYTEyICsgXCIsXCIgKyBhMjIgKyBcIixcIiArIHR4ICsgXCIsXCIgKyB0eSArIFwiKVwiO1xuICB0YXJnZXQuc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIHRlbXApO1xuICBmb3JjZUNTUyAmJiAodGFyZ2V0LnN0eWxlW190cmFuc2Zvcm1Qcm9wXSA9IHRlbXApOyAvL3NvbWUgYnJvd3NlcnMgcHJpb3JpdGl6ZSBDU1MgdHJhbnNmb3JtcyBvdmVyIHRoZSB0cmFuc2Zvcm0gYXR0cmlidXRlLiBXaGVuIHdlIHNlbnNlIHRoYXQgdGhlIHVzZXIgaGFzIENTUyB0cmFuc2Zvcm1zIGFwcGxpZWQsIHdlIG11c3Qgb3ZlcndyaXRlIHRoZW0gdGhpcyB3YXkgKG90aGVyd2lzZSBzb21lIGJyb3dzZXIgc2ltcGx5IHdvbid0IHJlbmRlciB0aGUgdHJhbnNmb3JtIGF0dHJpYnV0ZSBjaGFuZ2VzISlcbn0sXG4gICAgX2FkZFJvdGF0aW9uYWxQcm9wVHdlZW4gPSBmdW5jdGlvbiBfYWRkUm90YXRpb25hbFByb3BUd2VlbihwbHVnaW4sIHRhcmdldCwgcHJvcGVydHksIHN0YXJ0TnVtLCBlbmRWYWx1ZSkge1xuICB2YXIgY2FwID0gMzYwLFxuICAgICAgaXNTdHJpbmcgPSBfaXNTdHJpbmcoZW5kVmFsdWUpLFxuICAgICAgZW5kTnVtID0gcGFyc2VGbG9hdChlbmRWYWx1ZSkgKiAoaXNTdHJpbmcgJiYgfmVuZFZhbHVlLmluZGV4T2YoXCJyYWRcIikgPyBfUkFEMkRFRyA6IDEpLFxuICAgICAgY2hhbmdlID0gZW5kTnVtIC0gc3RhcnROdW0sXG4gICAgICBmaW5hbFZhbHVlID0gc3RhcnROdW0gKyBjaGFuZ2UgKyBcImRlZ1wiLFxuICAgICAgZGlyZWN0aW9uLFxuICAgICAgcHQ7XG5cbiAgaWYgKGlzU3RyaW5nKSB7XG4gICAgZGlyZWN0aW9uID0gZW5kVmFsdWUuc3BsaXQoXCJfXCIpWzFdO1xuXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gXCJzaG9ydFwiKSB7XG4gICAgICBjaGFuZ2UgJT0gY2FwO1xuXG4gICAgICBpZiAoY2hhbmdlICE9PSBjaGFuZ2UgJSAoY2FwIC8gMikpIHtcbiAgICAgICAgY2hhbmdlICs9IGNoYW5nZSA8IDAgPyBjYXAgOiAtY2FwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkaXJlY3Rpb24gPT09IFwiY3dcIiAmJiBjaGFuZ2UgPCAwKSB7XG4gICAgICBjaGFuZ2UgPSAoY2hhbmdlICsgY2FwICogX2JpZ051bSkgJSBjYXAgLSB+fihjaGFuZ2UgLyBjYXApICogY2FwO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSBcImNjd1wiICYmIGNoYW5nZSA+IDApIHtcbiAgICAgIGNoYW5nZSA9IChjaGFuZ2UgLSBjYXAgKiBfYmlnTnVtKSAlIGNhcCAtIH5+KGNoYW5nZSAvIGNhcCkgKiBjYXA7XG4gICAgfVxuICB9XG5cbiAgcGx1Z2luLl9wdCA9IHB0ID0gbmV3IFByb3BUd2VlbihwbHVnaW4uX3B0LCB0YXJnZXQsIHByb3BlcnR5LCBzdGFydE51bSwgY2hhbmdlLCBfcmVuZGVyUHJvcFdpdGhFbmQpO1xuICBwdC5lID0gZmluYWxWYWx1ZTtcbiAgcHQudSA9IFwiZGVnXCI7XG5cbiAgcGx1Z2luLl9wcm9wcy5wdXNoKHByb3BlcnR5KTtcblxuICByZXR1cm4gcHQ7XG59LFxuICAgIF9hc3NpZ24gPSBmdW5jdGlvbiBfYXNzaWduKHRhcmdldCwgc291cmNlKSB7XG4gIC8vIEludGVybmV0IEV4cGxvcmVyIGRvZXNuJ3QgaGF2ZSBPYmplY3QuYXNzaWduKCksIHNvIHdlIHJlY3JlYXRlIGl0IGhlcmUuXG4gIGZvciAodmFyIHAgaW4gc291cmNlKSB7XG4gICAgdGFyZ2V0W3BdID0gc291cmNlW3BdO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn0sXG4gICAgX2FkZFJhd1RyYW5zZm9ybVBUcyA9IGZ1bmN0aW9uIF9hZGRSYXdUcmFuc2Zvcm1QVHMocGx1Z2luLCB0cmFuc2Zvcm1zLCB0YXJnZXQpIHtcbiAgLy9mb3IgaGFuZGxpbmcgY2FzZXMgd2hlcmUgc29tZW9uZSBwYXNzZXMgaW4gYSB3aG9sZSB0cmFuc2Zvcm0gc3RyaW5nLCBsaWtlIHRyYW5zZm9ybTogXCJzY2FsZSgyLCAzKSByb3RhdGUoMjBkZWcpIHRyYW5zbGF0ZVkoMzBlbSlcIlxuICB2YXIgc3RhcnRDYWNoZSA9IF9hc3NpZ24oe30sIHRhcmdldC5fZ3NhcCksXG4gICAgICBleGNsdWRlID0gXCJwZXJzcGVjdGl2ZSxmb3JjZTNELHRyYW5zZm9ybU9yaWdpbixzdmdPcmlnaW5cIixcbiAgICAgIHN0eWxlID0gdGFyZ2V0LnN0eWxlLFxuICAgICAgZW5kQ2FjaGUsXG4gICAgICBwLFxuICAgICAgc3RhcnRWYWx1ZSxcbiAgICAgIGVuZFZhbHVlLFxuICAgICAgc3RhcnROdW0sXG4gICAgICBlbmROdW0sXG4gICAgICBzdGFydFVuaXQsXG4gICAgICBlbmRVbml0O1xuXG4gIGlmIChzdGFydENhY2hlLnN2Zykge1xuICAgIHN0YXJ0VmFsdWUgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIpO1xuICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgXCJcIik7XG4gICAgc3R5bGVbX3RyYW5zZm9ybVByb3BdID0gdHJhbnNmb3JtcztcbiAgICBlbmRDYWNoZSA9IF9wYXJzZVRyYW5zZm9ybSh0YXJnZXQsIDEpO1xuXG4gICAgX3JlbW92ZVByb3BlcnR5KHRhcmdldCwgX3RyYW5zZm9ybVByb3ApO1xuXG4gICAgdGFyZ2V0LnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCBzdGFydFZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICBzdGFydFZhbHVlID0gZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpW190cmFuc2Zvcm1Qcm9wXTtcbiAgICBzdHlsZVtfdHJhbnNmb3JtUHJvcF0gPSB0cmFuc2Zvcm1zO1xuICAgIGVuZENhY2hlID0gX3BhcnNlVHJhbnNmb3JtKHRhcmdldCwgMSk7XG4gICAgc3R5bGVbX3RyYW5zZm9ybVByb3BdID0gc3RhcnRWYWx1ZTtcbiAgfVxuXG4gIGZvciAocCBpbiBfdHJhbnNmb3JtUHJvcHMpIHtcbiAgICBzdGFydFZhbHVlID0gc3RhcnRDYWNoZVtwXTtcbiAgICBlbmRWYWx1ZSA9IGVuZENhY2hlW3BdO1xuXG4gICAgaWYgKHN0YXJ0VmFsdWUgIT09IGVuZFZhbHVlICYmIGV4Y2x1ZGUuaW5kZXhPZihwKSA8IDApIHtcbiAgICAgIC8vdHdlZW5pbmcgdG8gbm8gcGVyc3BlY3RpdmUgZ2l2ZXMgdmVyeSB1bmludHVpdGl2ZSByZXN1bHRzIC0ganVzdCBrZWVwIHRoZSBzYW1lIHBlcnNwZWN0aXZlIGluIHRoYXQgY2FzZS5cbiAgICAgIHN0YXJ0VW5pdCA9IGdldFVuaXQoc3RhcnRWYWx1ZSk7XG4gICAgICBlbmRVbml0ID0gZ2V0VW5pdChlbmRWYWx1ZSk7XG4gICAgICBzdGFydE51bSA9IHN0YXJ0VW5pdCAhPT0gZW5kVW5pdCA/IF9jb252ZXJ0VG9Vbml0KHRhcmdldCwgcCwgc3RhcnRWYWx1ZSwgZW5kVW5pdCkgOiBwYXJzZUZsb2F0KHN0YXJ0VmFsdWUpO1xuICAgICAgZW5kTnVtID0gcGFyc2VGbG9hdChlbmRWYWx1ZSk7XG4gICAgICBwbHVnaW4uX3B0ID0gbmV3IFByb3BUd2VlbihwbHVnaW4uX3B0LCBlbmRDYWNoZSwgcCwgc3RhcnROdW0sIGVuZE51bSAtIHN0YXJ0TnVtLCBfcmVuZGVyQ1NTUHJvcCk7XG4gICAgICBwbHVnaW4uX3B0LnUgPSBlbmRVbml0IHx8IDA7XG5cbiAgICAgIHBsdWdpbi5fcHJvcHMucHVzaChwKTtcbiAgICB9XG4gIH1cblxuICBfYXNzaWduKGVuZENhY2hlLCBzdGFydENhY2hlKTtcbn07IC8vIGhhbmRsZSBzcGxpdHRpbmcgYXBhcnQgcGFkZGluZywgbWFyZ2luLCBib3JkZXJXaWR0aCwgYW5kIGJvcmRlclJhZGl1cyBpbnRvIHRoZWlyIDQgY29tcG9uZW50cy4gRmlyZWZveCwgZm9yIGV4YW1wbGUsIHdvbid0IHJlcG9ydCBib3JkZXJSYWRpdXMgY29ycmVjdGx5IC0gaXQgd2lsbCBvbmx5IGRvIGJvcmRlclRvcExlZnRSYWRpdXMgYW5kIHRoZSBvdGhlciBjb3JuZXJzLiBXZSBhbHNvIHdhbnQgdG8gaGFuZGxlIHBhZGRpbmdUb3AsIG1hcmdpbkxlZnQsIGJvcmRlclJpZ2h0V2lkdGgsIGV0Yy5cblxuXG5fZm9yRWFjaE5hbWUoXCJwYWRkaW5nLG1hcmdpbixXaWR0aCxSYWRpdXNcIiwgZnVuY3Rpb24gKG5hbWUsIGluZGV4KSB7XG4gIHZhciB0ID0gXCJUb3BcIixcbiAgICAgIHIgPSBcIlJpZ2h0XCIsXG4gICAgICBiID0gXCJCb3R0b21cIixcbiAgICAgIGwgPSBcIkxlZnRcIixcbiAgICAgIHByb3BzID0gKGluZGV4IDwgMyA/IFt0LCByLCBiLCBsXSA6IFt0ICsgbCwgdCArIHIsIGIgKyByLCBiICsgbF0pLm1hcChmdW5jdGlvbiAoc2lkZSkge1xuICAgIHJldHVybiBpbmRleCA8IDIgPyBuYW1lICsgc2lkZSA6IFwiYm9yZGVyXCIgKyBzaWRlICsgbmFtZTtcbiAgfSk7XG5cbiAgX3NwZWNpYWxQcm9wc1tpbmRleCA+IDEgPyBcImJvcmRlclwiICsgbmFtZSA6IG5hbWVdID0gZnVuY3Rpb24gKHBsdWdpbiwgdGFyZ2V0LCBwcm9wZXJ0eSwgZW5kVmFsdWUsIHR3ZWVuKSB7XG4gICAgdmFyIGEsIHZhcnM7XG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDQpIHtcbiAgICAgIC8vIGdldHRlciwgcGFzc2VkIHRhcmdldCwgcHJvcGVydHksIGFuZCB1bml0IChmcm9tIF9nZXQoKSlcbiAgICAgIGEgPSBwcm9wcy5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgcmV0dXJuIF9nZXQocGx1Z2luLCBwcm9wLCBwcm9wZXJ0eSk7XG4gICAgICB9KTtcbiAgICAgIHZhcnMgPSBhLmpvaW4oXCIgXCIpO1xuICAgICAgcmV0dXJuIHZhcnMuc3BsaXQoYVswXSkubGVuZ3RoID09PSA1ID8gYVswXSA6IHZhcnM7XG4gICAgfVxuXG4gICAgYSA9IChlbmRWYWx1ZSArIFwiXCIpLnNwbGl0KFwiIFwiKTtcbiAgICB2YXJzID0ge307XG4gICAgcHJvcHMuZm9yRWFjaChmdW5jdGlvbiAocHJvcCwgaSkge1xuICAgICAgcmV0dXJuIHZhcnNbcHJvcF0gPSBhW2ldID0gYVtpXSB8fCBhWyhpIC0gMSkgLyAyIHwgMF07XG4gICAgfSk7XG4gICAgcGx1Z2luLmluaXQodGFyZ2V0LCB2YXJzLCB0d2Vlbik7XG4gIH07XG59KTtcblxuZXhwb3J0IHZhciBDU1NQbHVnaW4gPSB7XG4gIG5hbWU6IFwiY3NzXCIsXG4gIHJlZ2lzdGVyOiBfaW5pdENvcmUsXG4gIHRhcmdldFRlc3Q6IGZ1bmN0aW9uIHRhcmdldFRlc3QodGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRhcmdldC5zdHlsZSAmJiB0YXJnZXQubm9kZVR5cGU7XG4gIH0sXG4gIGluaXQ6IGZ1bmN0aW9uIGluaXQodGFyZ2V0LCB2YXJzLCB0d2VlbiwgaW5kZXgsIHRhcmdldHMpIHtcbiAgICB2YXIgcHJvcHMgPSB0aGlzLl9wcm9wcyxcbiAgICAgICAgc3R5bGUgPSB0YXJnZXQuc3R5bGUsXG4gICAgICAgIHN0YXJ0QXQgPSB0d2Vlbi52YXJzLnN0YXJ0QXQsXG4gICAgICAgIHN0YXJ0VmFsdWUsXG4gICAgICAgIGVuZFZhbHVlLFxuICAgICAgICBlbmROdW0sXG4gICAgICAgIHN0YXJ0TnVtLFxuICAgICAgICB0eXBlLFxuICAgICAgICBzcGVjaWFsUHJvcCxcbiAgICAgICAgcCxcbiAgICAgICAgc3RhcnRVbml0LFxuICAgICAgICBlbmRVbml0LFxuICAgICAgICByZWxhdGl2ZSxcbiAgICAgICAgaXNUcmFuc2Zvcm1SZWxhdGVkLFxuICAgICAgICB0cmFuc2Zvcm1Qcm9wVHdlZW4sXG4gICAgICAgIGNhY2hlLFxuICAgICAgICBzbW9vdGgsXG4gICAgICAgIGhhc1ByaW9yaXR5LFxuICAgICAgICBpbmxpbmVQcm9wcztcbiAgICBfcGx1Z2luSW5pdHRlZCB8fCBfaW5pdENvcmUoKTsgLy8gd2UgbWF5IGNhbGwgaW5pdCgpIG11bHRpcGxlIHRpbWVzIG9uIHRoZSBzYW1lIHBsdWdpbiBpbnN0YW5jZSwgbGlrZSB3aGVuIGFkZGluZyBzcGVjaWFsIHByb3BlcnRpZXMsIHNvIG1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVyd3JpdGUgdGhlIHJldmVydCBkYXRhIG9yIGlubGluZVByb3BzXG5cbiAgICB0aGlzLnN0eWxlcyA9IHRoaXMuc3R5bGVzIHx8IF9nZXRTdHlsZVNhdmVyKHRhcmdldCk7XG4gICAgaW5saW5lUHJvcHMgPSB0aGlzLnN0eWxlcy5wcm9wcztcbiAgICB0aGlzLnR3ZWVuID0gdHdlZW47XG5cbiAgICBmb3IgKHAgaW4gdmFycykge1xuICAgICAgaWYgKHAgPT09IFwiYXV0b1JvdW5kXCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGVuZFZhbHVlID0gdmFyc1twXTtcblxuICAgICAgaWYgKF9wbHVnaW5zW3BdICYmIF9jaGVja1BsdWdpbihwLCB2YXJzLCB0d2VlbiwgaW5kZXgsIHRhcmdldCwgdGFyZ2V0cykpIHtcbiAgICAgICAgLy8gcGx1Z2luc1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdHlwZSA9IHR5cGVvZiBlbmRWYWx1ZTtcbiAgICAgIHNwZWNpYWxQcm9wID0gX3NwZWNpYWxQcm9wc1twXTtcblxuICAgICAgaWYgKHR5cGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBlbmRWYWx1ZSA9IGVuZFZhbHVlLmNhbGwodHdlZW4sIGluZGV4LCB0YXJnZXQsIHRhcmdldHMpO1xuICAgICAgICB0eXBlID0gdHlwZW9mIGVuZFZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZSA9PT0gXCJzdHJpbmdcIiAmJiB+ZW5kVmFsdWUuaW5kZXhPZihcInJhbmRvbShcIikpIHtcbiAgICAgICAgZW5kVmFsdWUgPSBfcmVwbGFjZVJhbmRvbShlbmRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcGVjaWFsUHJvcCkge1xuICAgICAgICBzcGVjaWFsUHJvcCh0aGlzLCB0YXJnZXQsIHAsIGVuZFZhbHVlLCB0d2VlbikgJiYgKGhhc1ByaW9yaXR5ID0gMSk7XG4gICAgICB9IGVsc2UgaWYgKHAuc3Vic3RyKDAsIDIpID09PSBcIi0tXCIpIHtcbiAgICAgICAgLy9DU1MgdmFyaWFibGVcbiAgICAgICAgc3RhcnRWYWx1ZSA9IChnZXRDb21wdXRlZFN0eWxlKHRhcmdldCkuZ2V0UHJvcGVydHlWYWx1ZShwKSArIFwiXCIpLnRyaW0oKTtcbiAgICAgICAgZW5kVmFsdWUgKz0gXCJcIjtcbiAgICAgICAgX2NvbG9yRXhwLmxhc3RJbmRleCA9IDA7XG5cbiAgICAgICAgaWYgKCFfY29sb3JFeHAudGVzdChzdGFydFZhbHVlKSkge1xuICAgICAgICAgIC8vIGNvbG9ycyBkb24ndCBoYXZlIHVuaXRzXG4gICAgICAgICAgc3RhcnRVbml0ID0gZ2V0VW5pdChzdGFydFZhbHVlKTtcbiAgICAgICAgICBlbmRVbml0ID0gZ2V0VW5pdChlbmRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBlbmRVbml0ID8gc3RhcnRVbml0ICE9PSBlbmRVbml0ICYmIChzdGFydFZhbHVlID0gX2NvbnZlcnRUb1VuaXQodGFyZ2V0LCBwLCBzdGFydFZhbHVlLCBlbmRVbml0KSArIGVuZFVuaXQpIDogc3RhcnRVbml0ICYmIChlbmRWYWx1ZSArPSBzdGFydFVuaXQpO1xuICAgICAgICB0aGlzLmFkZChzdHlsZSwgXCJzZXRQcm9wZXJ0eVwiLCBzdGFydFZhbHVlLCBlbmRWYWx1ZSwgaW5kZXgsIHRhcmdldHMsIDAsIDAsIHApO1xuICAgICAgICBwcm9wcy5wdXNoKHApO1xuICAgICAgICBpbmxpbmVQcm9wcy5wdXNoKHAsIDAsIHN0eWxlW3BdKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAoc3RhcnRBdCAmJiBwIGluIHN0YXJ0QXQpIHtcbiAgICAgICAgICAvLyBpbiBjYXNlIHNvbWVvbmUgaGFyZC1jb2RlcyBhIGNvbXBsZXggdmFsdWUgYXMgdGhlIHN0YXJ0LCBsaWtlIHRvcDogXCJjYWxjKDJ2aCAvIDIpXCIuIFdpdGhvdXQgdGhpcywgaXQnZCB1c2UgdGhlIGNvbXB1dGVkIHZhbHVlIChhbHdheXMgaW4gcHgpXG4gICAgICAgICAgc3RhcnRWYWx1ZSA9IHR5cGVvZiBzdGFydEF0W3BdID09PSBcImZ1bmN0aW9uXCIgPyBzdGFydEF0W3BdLmNhbGwodHdlZW4sIGluZGV4LCB0YXJnZXQsIHRhcmdldHMpIDogc3RhcnRBdFtwXTtcbiAgICAgICAgICBfaXNTdHJpbmcoc3RhcnRWYWx1ZSkgJiYgfnN0YXJ0VmFsdWUuaW5kZXhPZihcInJhbmRvbShcIikgJiYgKHN0YXJ0VmFsdWUgPSBfcmVwbGFjZVJhbmRvbShzdGFydFZhbHVlKSk7XG4gICAgICAgICAgZ2V0VW5pdChzdGFydFZhbHVlICsgXCJcIikgfHwgc3RhcnRWYWx1ZSA9PT0gXCJhdXRvXCIgfHwgKHN0YXJ0VmFsdWUgKz0gX2NvbmZpZy51bml0c1twXSB8fCBnZXRVbml0KF9nZXQodGFyZ2V0LCBwKSkgfHwgXCJcIik7IC8vIGZvciBjYXNlcyB3aGVuIHNvbWVvbmUgcGFzc2VzIGluIGEgdW5pdGxlc3MgdmFsdWUgbGlrZSB7eDogMTAwfTsgaWYgd2UgdHJ5IHNldHRpbmcgdHJhbnNsYXRlKDEwMCwgMHB4KSBpdCB3b24ndCB3b3JrLlxuXG4gICAgICAgICAgKHN0YXJ0VmFsdWUgKyBcIlwiKS5jaGFyQXQoMSkgPT09IFwiPVwiICYmIChzdGFydFZhbHVlID0gX2dldCh0YXJnZXQsIHApKTsgLy8gY2FuJ3Qgd29yayB3aXRoIHJlbGF0aXZlIHZhbHVlc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXJ0VmFsdWUgPSBfZ2V0KHRhcmdldCwgcCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFydE51bSA9IHBhcnNlRmxvYXQoc3RhcnRWYWx1ZSk7XG4gICAgICAgIHJlbGF0aXZlID0gdHlwZSA9PT0gXCJzdHJpbmdcIiAmJiBlbmRWYWx1ZS5jaGFyQXQoMSkgPT09IFwiPVwiICYmIGVuZFZhbHVlLnN1YnN0cigwLCAyKTtcbiAgICAgICAgcmVsYXRpdmUgJiYgKGVuZFZhbHVlID0gZW5kVmFsdWUuc3Vic3RyKDIpKTtcbiAgICAgICAgZW5kTnVtID0gcGFyc2VGbG9hdChlbmRWYWx1ZSk7XG5cbiAgICAgICAgaWYgKHAgaW4gX3Byb3BlcnR5QWxpYXNlcykge1xuICAgICAgICAgIGlmIChwID09PSBcImF1dG9BbHBoYVwiKSB7XG4gICAgICAgICAgICAvL3NwZWNpYWwgY2FzZSB3aGVyZSB3ZSBjb250cm9sIHRoZSB2aXNpYmlsaXR5IGFsb25nIHdpdGggb3BhY2l0eS4gV2Ugc3RpbGwgYWxsb3cgdGhlIG9wYWNpdHkgdmFsdWUgdG8gcGFzcyB0aHJvdWdoIGFuZCBnZXQgdHdlZW5lZC5cbiAgICAgICAgICAgIGlmIChzdGFydE51bSA9PT0gMSAmJiBfZ2V0KHRhcmdldCwgXCJ2aXNpYmlsaXR5XCIpID09PSBcImhpZGRlblwiICYmIGVuZE51bSkge1xuICAgICAgICAgICAgICAvL2lmIHZpc2liaWxpdHkgaXMgaW5pdGlhbGx5IHNldCB0byBcImhpZGRlblwiLCB3ZSBzaG91bGQgaW50ZXJwcmV0IHRoYXQgYXMgaW50ZW50IHRvIG1ha2Ugb3BhY2l0eSAwIChhIGNvbnZlbmllbmNlKVxuICAgICAgICAgICAgICBzdGFydE51bSA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlubGluZVByb3BzLnB1c2goXCJ2aXNpYmlsaXR5XCIsIDAsIHN0eWxlLnZpc2liaWxpdHkpO1xuXG4gICAgICAgICAgICBfYWRkTm9uVHdlZW5pbmdQVCh0aGlzLCBzdHlsZSwgXCJ2aXNpYmlsaXR5XCIsIHN0YXJ0TnVtID8gXCJpbmhlcml0XCIgOiBcImhpZGRlblwiLCBlbmROdW0gPyBcImluaGVyaXRcIiA6IFwiaGlkZGVuXCIsICFlbmROdW0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwICE9PSBcInNjYWxlXCIgJiYgcCAhPT0gXCJ0cmFuc2Zvcm1cIikge1xuICAgICAgICAgICAgcCA9IF9wcm9wZXJ0eUFsaWFzZXNbcF07XG4gICAgICAgICAgICB+cC5pbmRleE9mKFwiLFwiKSAmJiAocCA9IHAuc3BsaXQoXCIsXCIpWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpc1RyYW5zZm9ybVJlbGF0ZWQgPSBwIGluIF90cmFuc2Zvcm1Qcm9wczsgLy8tLS0gVFJBTlNGT1JNLVJFTEFURUQgLS0tXG5cbiAgICAgICAgaWYgKGlzVHJhbnNmb3JtUmVsYXRlZCkge1xuICAgICAgICAgIHRoaXMuc3R5bGVzLnNhdmUocCk7XG5cbiAgICAgICAgICBpZiAoIXRyYW5zZm9ybVByb3BUd2Vlbikge1xuICAgICAgICAgICAgY2FjaGUgPSB0YXJnZXQuX2dzYXA7XG4gICAgICAgICAgICBjYWNoZS5yZW5kZXJUcmFuc2Zvcm0gJiYgIXZhcnMucGFyc2VUcmFuc2Zvcm0gfHwgX3BhcnNlVHJhbnNmb3JtKHRhcmdldCwgdmFycy5wYXJzZVRyYW5zZm9ybSk7IC8vIGlmLCBmb3IgZXhhbXBsZSwgZ3NhcC5zZXQoLi4uIHt0cmFuc2Zvcm06XCJ0cmFuc2xhdGVYKDUwdncpXCJ9KSwgdGhlIF9nZXQoKSBjYWxsIGRvZXNuJ3QgcGFyc2UgdGhlIHRyYW5zZm9ybSwgdGh1cyBjYWNoZS5yZW5kZXJUcmFuc2Zvcm0gd29uJ3QgYmUgc2V0IHlldCBzbyBmb3JjZSB0aGUgcGFyc2luZyBvZiB0aGUgdHJhbnNmb3JtIGhlcmUuXG5cbiAgICAgICAgICAgIHNtb290aCA9IHZhcnMuc21vb3RoT3JpZ2luICE9PSBmYWxzZSAmJiBjYWNoZS5zbW9vdGg7XG4gICAgICAgICAgICB0cmFuc2Zvcm1Qcm9wVHdlZW4gPSB0aGlzLl9wdCA9IG5ldyBQcm9wVHdlZW4odGhpcy5fcHQsIHN0eWxlLCBfdHJhbnNmb3JtUHJvcCwgMCwgMSwgY2FjaGUucmVuZGVyVHJhbnNmb3JtLCBjYWNoZSwgMCwgLTEpOyAvL3RoZSBmaXJzdCB0aW1lIHRocm91Z2gsIGNyZWF0ZSB0aGUgcmVuZGVyaW5nIFByb3BUd2VlbiBzbyB0aGF0IGl0IHJ1bnMgTEFTVCAoaW4gdGhlIGxpbmtlZCBsaXN0LCB3ZSBrZWVwIGFkZGluZyB0byB0aGUgYmVnaW5uaW5nKVxuXG4gICAgICAgICAgICB0cmFuc2Zvcm1Qcm9wVHdlZW4uZGVwID0gMTsgLy9mbGFnIGl0IGFzIGRlcGVuZGVudCBzbyB0aGF0IGlmIHRoaW5ncyBnZXQga2lsbGVkL292ZXJ3cml0dGVuIGFuZCB0aGlzIGlzIHRoZSBvbmx5IFByb3BUd2VlbiBsZWZ0LCB3ZSBjYW4gc2FmZWx5IGtpbGwgdGhlIHdob2xlIHR3ZWVuLlxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwID09PSBcInNjYWxlXCIpIHtcbiAgICAgICAgICAgIHRoaXMuX3B0ID0gbmV3IFByb3BUd2Vlbih0aGlzLl9wdCwgY2FjaGUsIFwic2NhbGVZXCIsIGNhY2hlLnNjYWxlWSwgKHJlbGF0aXZlID8gX3BhcnNlUmVsYXRpdmUoY2FjaGUuc2NhbGVZLCByZWxhdGl2ZSArIGVuZE51bSkgOiBlbmROdW0pIC0gY2FjaGUuc2NhbGVZIHx8IDAsIF9yZW5kZXJDU1NQcm9wKTtcbiAgICAgICAgICAgIHRoaXMuX3B0LnUgPSAwO1xuICAgICAgICAgICAgcHJvcHMucHVzaChcInNjYWxlWVwiLCBwKTtcbiAgICAgICAgICAgIHAgKz0gXCJYXCI7XG4gICAgICAgICAgfSBlbHNlIGlmIChwID09PSBcInRyYW5zZm9ybU9yaWdpblwiKSB7XG4gICAgICAgICAgICBpbmxpbmVQcm9wcy5wdXNoKF90cmFuc2Zvcm1PcmlnaW5Qcm9wLCAwLCBzdHlsZVtfdHJhbnNmb3JtT3JpZ2luUHJvcF0pO1xuICAgICAgICAgICAgZW5kVmFsdWUgPSBfY29udmVydEtleXdvcmRzVG9QZXJjZW50YWdlcyhlbmRWYWx1ZSk7IC8vaW4gY2FzZSBzb21ldGhpbmcgbGlrZSBcImxlZnQgdG9wXCIgb3IgXCJib3R0b20gcmlnaHRcIiBpcyBwYXNzZWQgaW4uIENvbnZlcnQgdG8gcGVyY2VudGFnZXMuXG5cbiAgICAgICAgICAgIGlmIChjYWNoZS5zdmcpIHtcbiAgICAgICAgICAgICAgX2FwcGx5U1ZHT3JpZ2luKHRhcmdldCwgZW5kVmFsdWUsIDAsIHNtb290aCwgMCwgdGhpcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlbmRVbml0ID0gcGFyc2VGbG9hdChlbmRWYWx1ZS5zcGxpdChcIiBcIilbMl0pIHx8IDA7IC8vaGFuZGxlIHRoZSB6T3JpZ2luIHNlcGFyYXRlbHkhXG5cbiAgICAgICAgICAgICAgZW5kVW5pdCAhPT0gY2FjaGUuek9yaWdpbiAmJiBfYWRkTm9uVHdlZW5pbmdQVCh0aGlzLCBjYWNoZSwgXCJ6T3JpZ2luXCIsIGNhY2hlLnpPcmlnaW4sIGVuZFVuaXQpO1xuXG4gICAgICAgICAgICAgIF9hZGROb25Ud2VlbmluZ1BUKHRoaXMsIHN0eWxlLCBwLCBfZmlyc3RUd29Pbmx5KHN0YXJ0VmFsdWUpLCBfZmlyc3RUd29Pbmx5KGVuZFZhbHVlKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocCA9PT0gXCJzdmdPcmlnaW5cIikge1xuICAgICAgICAgICAgX2FwcGx5U1ZHT3JpZ2luKHRhcmdldCwgZW5kVmFsdWUsIDEsIHNtb290aCwgMCwgdGhpcyk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocCBpbiBfcm90YXRpb25hbFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIF9hZGRSb3RhdGlvbmFsUHJvcFR3ZWVuKHRoaXMsIGNhY2hlLCBwLCBzdGFydE51bSwgcmVsYXRpdmUgPyBfcGFyc2VSZWxhdGl2ZShzdGFydE51bSwgcmVsYXRpdmUgKyBlbmRWYWx1ZSkgOiBlbmRWYWx1ZSk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocCA9PT0gXCJzbW9vdGhPcmlnaW5cIikge1xuICAgICAgICAgICAgX2FkZE5vblR3ZWVuaW5nUFQodGhpcywgY2FjaGUsIFwic21vb3RoXCIsIGNhY2hlLnNtb290aCwgZW5kVmFsdWUpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHAgPT09IFwiZm9yY2UzRFwiKSB7XG4gICAgICAgICAgICBjYWNoZVtwXSA9IGVuZFZhbHVlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChwID09PSBcInRyYW5zZm9ybVwiKSB7XG4gICAgICAgICAgICBfYWRkUmF3VHJhbnNmb3JtUFRzKHRoaXMsIGVuZFZhbHVlLCB0YXJnZXQpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIShwIGluIHN0eWxlKSkge1xuICAgICAgICAgIHAgPSBfY2hlY2tQcm9wUHJlZml4KHApIHx8IHA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNUcmFuc2Zvcm1SZWxhdGVkIHx8IChlbmROdW0gfHwgZW5kTnVtID09PSAwKSAmJiAoc3RhcnROdW0gfHwgc3RhcnROdW0gPT09IDApICYmICFfY29tcGxleEV4cC50ZXN0KGVuZFZhbHVlKSAmJiBwIGluIHN0eWxlKSB7XG4gICAgICAgICAgc3RhcnRVbml0ID0gKHN0YXJ0VmFsdWUgKyBcIlwiKS5zdWJzdHIoKHN0YXJ0TnVtICsgXCJcIikubGVuZ3RoKTtcbiAgICAgICAgICBlbmROdW0gfHwgKGVuZE51bSA9IDApOyAvLyBwcm90ZWN0IGFnYWluc3QgTmFOXG5cbiAgICAgICAgICBlbmRVbml0ID0gZ2V0VW5pdChlbmRWYWx1ZSkgfHwgKHAgaW4gX2NvbmZpZy51bml0cyA/IF9jb25maWcudW5pdHNbcF0gOiBzdGFydFVuaXQpO1xuICAgICAgICAgIHN0YXJ0VW5pdCAhPT0gZW5kVW5pdCAmJiAoc3RhcnROdW0gPSBfY29udmVydFRvVW5pdCh0YXJnZXQsIHAsIHN0YXJ0VmFsdWUsIGVuZFVuaXQpKTtcbiAgICAgICAgICB0aGlzLl9wdCA9IG5ldyBQcm9wVHdlZW4odGhpcy5fcHQsIGlzVHJhbnNmb3JtUmVsYXRlZCA/IGNhY2hlIDogc3R5bGUsIHAsIHN0YXJ0TnVtLCAocmVsYXRpdmUgPyBfcGFyc2VSZWxhdGl2ZShzdGFydE51bSwgcmVsYXRpdmUgKyBlbmROdW0pIDogZW5kTnVtKSAtIHN0YXJ0TnVtLCAhaXNUcmFuc2Zvcm1SZWxhdGVkICYmIChlbmRVbml0ID09PSBcInB4XCIgfHwgcCA9PT0gXCJ6SW5kZXhcIikgJiYgdmFycy5hdXRvUm91bmQgIT09IGZhbHNlID8gX3JlbmRlclJvdW5kZWRDU1NQcm9wIDogX3JlbmRlckNTU1Byb3ApO1xuICAgICAgICAgIHRoaXMuX3B0LnUgPSBlbmRVbml0IHx8IDA7XG5cbiAgICAgICAgICBpZiAoc3RhcnRVbml0ICE9PSBlbmRVbml0ICYmIGVuZFVuaXQgIT09IFwiJVwiKSB7XG4gICAgICAgICAgICAvL3doZW4gdGhlIHR3ZWVuIGdvZXMgYWxsIHRoZSB3YXkgYmFjayB0byB0aGUgYmVnaW5uaW5nLCB3ZSBuZWVkIHRvIHJldmVydCBpdCB0byB0aGUgT0xEL09SSUdJTkFMIHZhbHVlICh3aXRoIHRob3NlIHVuaXRzKS4gV2UgcmVjb3JkIHRoYXQgYXMgYSBcImJcIiAoYmVnaW5uaW5nKSBwcm9wZXJ0eSBhbmQgcG9pbnQgdG8gYSByZW5kZXIgbWV0aG9kIHRoYXQgaGFuZGxlcyB0aGF0LiAocGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uKVxuICAgICAgICAgICAgdGhpcy5fcHQuYiA9IHN0YXJ0VmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9wdC5yID0gX3JlbmRlckNTU1Byb3BXaXRoQmVnaW5uaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghKHAgaW4gc3R5bGUpKSB7XG4gICAgICAgICAgaWYgKHAgaW4gdGFyZ2V0KSB7XG4gICAgICAgICAgICAvL21heWJlIGl0J3Mgbm90IGEgc3R5bGUgLSBpdCBjb3VsZCBiZSBhIHByb3BlcnR5IGFkZGVkIGRpcmVjdGx5IHRvIGFuIGVsZW1lbnQgaW4gd2hpY2ggY2FzZSB3ZSdsbCB0cnkgdG8gYW5pbWF0ZSB0aGF0LlxuICAgICAgICAgICAgdGhpcy5hZGQodGFyZ2V0LCBwLCBzdGFydFZhbHVlIHx8IHRhcmdldFtwXSwgcmVsYXRpdmUgPyByZWxhdGl2ZSArIGVuZFZhbHVlIDogZW5kVmFsdWUsIGluZGV4LCB0YXJnZXRzKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHAgIT09IFwicGFyc2VUcmFuc2Zvcm1cIikge1xuICAgICAgICAgICAgX21pc3NpbmdQbHVnaW4ocCwgZW5kVmFsdWUpO1xuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgX3R3ZWVuQ29tcGxleENTU1N0cmluZy5jYWxsKHRoaXMsIHRhcmdldCwgcCwgc3RhcnRWYWx1ZSwgcmVsYXRpdmUgPyByZWxhdGl2ZSArIGVuZFZhbHVlIDogZW5kVmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaXNUcmFuc2Zvcm1SZWxhdGVkIHx8IChwIGluIHN0eWxlID8gaW5saW5lUHJvcHMucHVzaChwLCAwLCBzdHlsZVtwXSkgOiB0eXBlb2YgdGFyZ2V0W3BdID09PSBcImZ1bmN0aW9uXCIgPyBpbmxpbmVQcm9wcy5wdXNoKHAsIDIsIHRhcmdldFtwXSgpKSA6IGlubGluZVByb3BzLnB1c2gocCwgMSwgc3RhcnRWYWx1ZSB8fCB0YXJnZXRbcF0pKTtcbiAgICAgICAgcHJvcHMucHVzaChwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBoYXNQcmlvcml0eSAmJiBfc29ydFByb3BUd2VlbnNCeVByaW9yaXR5KHRoaXMpO1xuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihyYXRpbywgZGF0YSkge1xuICAgIGlmIChkYXRhLnR3ZWVuLl90aW1lIHx8ICFfcmV2ZXJ0aW5nKCkpIHtcbiAgICAgIHZhciBwdCA9IGRhdGEuX3B0O1xuXG4gICAgICB3aGlsZSAocHQpIHtcbiAgICAgICAgcHQucihyYXRpbywgcHQuZCk7XG4gICAgICAgIHB0ID0gcHQuX25leHQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEuc3R5bGVzLnJldmVydCgpO1xuICAgIH1cbiAgfSxcbiAgZ2V0OiBfZ2V0LFxuICBhbGlhc2VzOiBfcHJvcGVydHlBbGlhc2VzLFxuICBnZXRTZXR0ZXI6IGZ1bmN0aW9uIGdldFNldHRlcih0YXJnZXQsIHByb3BlcnR5LCBwbHVnaW4pIHtcbiAgICAvL3JldHVybnMgYSBzZXR0ZXIgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRhcmdldCwgcHJvcGVydHksIHZhbHVlIGFuZCBhcHBsaWVzIGl0IGFjY29yZGluZ2x5LiBSZW1lbWJlciwgcHJvcGVydGllcyBsaWtlIFwieFwiIGFyZW4ndCBhcyBzaW1wbGUgYXMgdGFyZ2V0LnN0eWxlLnByb3BlcnR5ID0gdmFsdWUgYmVjYXVzZSB0aGV5J3ZlIGdvdCB0byBiZSBhcHBsaWVkIHRvIGEgcHJveHkgb2JqZWN0IGFuZCB0aGVuIG1lcmdlZCBpbnRvIGEgdHJhbnNmb3JtIHN0cmluZyBpbiBhIHJlbmRlcmVyLlxuICAgIHZhciBwID0gX3Byb3BlcnR5QWxpYXNlc1twcm9wZXJ0eV07XG4gICAgcCAmJiBwLmluZGV4T2YoXCIsXCIpIDwgMCAmJiAocHJvcGVydHkgPSBwKTtcbiAgICByZXR1cm4gcHJvcGVydHkgaW4gX3RyYW5zZm9ybVByb3BzICYmIHByb3BlcnR5ICE9PSBfdHJhbnNmb3JtT3JpZ2luUHJvcCAmJiAodGFyZ2V0Ll9nc2FwLnggfHwgX2dldCh0YXJnZXQsIFwieFwiKSkgPyBwbHVnaW4gJiYgX3JlY2VudFNldHRlclBsdWdpbiA9PT0gcGx1Z2luID8gcHJvcGVydHkgPT09IFwic2NhbGVcIiA/IF9zZXR0ZXJTY2FsZSA6IF9zZXR0ZXJUcmFuc2Zvcm0gOiAoX3JlY2VudFNldHRlclBsdWdpbiA9IHBsdWdpbiB8fCB7fSkgJiYgKHByb3BlcnR5ID09PSBcInNjYWxlXCIgPyBfc2V0dGVyU2NhbGVXaXRoUmVuZGVyIDogX3NldHRlclRyYW5zZm9ybVdpdGhSZW5kZXIpIDogdGFyZ2V0LnN0eWxlICYmICFfaXNVbmRlZmluZWQodGFyZ2V0LnN0eWxlW3Byb3BlcnR5XSkgPyBfc2V0dGVyQ1NTU3R5bGUgOiB+cHJvcGVydHkuaW5kZXhPZihcIi1cIikgPyBfc2V0dGVyQ1NTUHJvcCA6IF9nZXRTZXR0ZXIodGFyZ2V0LCBwcm9wZXJ0eSk7XG4gIH0sXG4gIGNvcmU6IHtcbiAgICBfcmVtb3ZlUHJvcGVydHk6IF9yZW1vdmVQcm9wZXJ0eSxcbiAgICBfZ2V0TWF0cml4OiBfZ2V0TWF0cml4XG4gIH1cbn07XG5nc2FwLnV0aWxzLmNoZWNrUHJlZml4ID0gX2NoZWNrUHJvcFByZWZpeDtcbmdzYXAuY29yZS5nZXRTdHlsZVNhdmVyID0gX2dldFN0eWxlU2F2ZXI7XG5cbihmdW5jdGlvbiAocG9zaXRpb25BbmRTY2FsZSwgcm90YXRpb24sIG90aGVycywgYWxpYXNlcykge1xuICB2YXIgYWxsID0gX2ZvckVhY2hOYW1lKHBvc2l0aW9uQW5kU2NhbGUgKyBcIixcIiArIHJvdGF0aW9uICsgXCIsXCIgKyBvdGhlcnMsIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgX3RyYW5zZm9ybVByb3BzW25hbWVdID0gMTtcbiAgfSk7XG5cbiAgX2ZvckVhY2hOYW1lKHJvdGF0aW9uLCBmdW5jdGlvbiAobmFtZSkge1xuICAgIF9jb25maWcudW5pdHNbbmFtZV0gPSBcImRlZ1wiO1xuICAgIF9yb3RhdGlvbmFsUHJvcGVydGllc1tuYW1lXSA9IDE7XG4gIH0pO1xuXG4gIF9wcm9wZXJ0eUFsaWFzZXNbYWxsWzEzXV0gPSBwb3NpdGlvbkFuZFNjYWxlICsgXCIsXCIgKyByb3RhdGlvbjtcblxuICBfZm9yRWFjaE5hbWUoYWxpYXNlcywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgc3BsaXQgPSBuYW1lLnNwbGl0KFwiOlwiKTtcbiAgICBfcHJvcGVydHlBbGlhc2VzW3NwbGl0WzFdXSA9IGFsbFtzcGxpdFswXV07XG4gIH0pO1xufSkoXCJ4LHkseixzY2FsZSxzY2FsZVgsc2NhbGVZLHhQZXJjZW50LHlQZXJjZW50XCIsIFwicm90YXRpb24scm90YXRpb25YLHJvdGF0aW9uWSxza2V3WCxza2V3WVwiLCBcInRyYW5zZm9ybSx0cmFuc2Zvcm1PcmlnaW4sc3ZnT3JpZ2luLGZvcmNlM0Qsc21vb3RoT3JpZ2luLHRyYW5zZm9ybVBlcnNwZWN0aXZlXCIsIFwiMDp0cmFuc2xhdGVYLDE6dHJhbnNsYXRlWSwyOnRyYW5zbGF0ZVosODpyb3RhdGUsODpyb3RhdGlvblosODpyb3RhdGVaLDk6cm90YXRlWCwxMDpyb3RhdGVZXCIpO1xuXG5fZm9yRWFjaE5hbWUoXCJ4LHkseix0b3AscmlnaHQsYm90dG9tLGxlZnQsd2lkdGgsaGVpZ2h0LGZvbnRTaXplLHBhZGRpbmcsbWFyZ2luLHBlcnNwZWN0aXZlXCIsIGZ1bmN0aW9uIChuYW1lKSB7XG4gIF9jb25maWcudW5pdHNbbmFtZV0gPSBcInB4XCI7XG59KTtcblxuZ3NhcC5yZWdpc3RlclBsdWdpbihDU1NQbHVnaW4pO1xuZXhwb3J0IHsgQ1NTUGx1Z2luIGFzIGRlZmF1bHQsIF9nZXRCQm94LCBfY3JlYXRlRWxlbWVudCwgX2NoZWNrUHJvcFByZWZpeCBhcyBjaGVja1ByZWZpeCB9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/gsap/CSSPlugin.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/gsap/Observer.js\":\r\n/*!***************************************!*\\\r\n  !*** ./node_modules/gsap/Observer.js ***!\r\n  \\***************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"Observer\\\": () => (/* binding */ Observer),\\n/* harmony export */   \\\"_getProxyProp\\\": () => (/* binding */ _getProxyProp),\\n/* harmony export */   \\\"_getScrollFunc\\\": () => (/* binding */ _getScrollFunc),\\n/* harmony export */   \\\"_getTarget\\\": () => (/* binding */ _getTarget),\\n/* harmony export */   \\\"_getVelocityProp\\\": () => (/* binding */ _getVelocityProp),\\n/* harmony export */   \\\"_horizontal\\\": () => (/* binding */ _horizontal),\\n/* harmony export */   \\\"_isViewport\\\": () => (/* binding */ _isViewport),\\n/* harmony export */   \\\"_proxies\\\": () => (/* binding */ _proxies),\\n/* harmony export */   \\\"_scrollers\\\": () => (/* binding */ _scrollers),\\n/* harmony export */   \\\"_vertical\\\": () => (/* binding */ _vertical),\\n/* harmony export */   \\\"default\\\": () => (/* binding */ Observer)\\n/* harmony export */ });\\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\\\"value\\\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\\n\\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\\n\\n/*!\\n * Observer 3.12.7\\n * https://gsap.com\\n *\\n * @license Copyright 2008-2025, GreenSock. All rights reserved.\\n * Subject to the terms at https://gsap.com/standard-license or for\\n * Club GSAP members, the agreement issued with that membership.\\n * @author: Jack Doyle, jack@greensock.com\\n*/\\n\\n/* eslint-disable */\\nvar gsap,\\n    _coreInitted,\\n    _clamp,\\n    _win,\\n    _doc,\\n    _docEl,\\n    _body,\\n    _isTouch,\\n    _pointerType,\\n    ScrollTrigger,\\n    _root,\\n    _normalizer,\\n    _eventTypes,\\n    _context,\\n    _getGSAP = function _getGSAP() {\\n  return gsap || typeof window !== \\\"undefined\\\" && (gsap = window.gsap) && gsap.registerPlugin && gsap;\\n},\\n    _startup = 1,\\n    _observers = [],\\n    _scrollers = [],\\n    _proxies = [],\\n    _getTime = Date.now,\\n    _bridge = function _bridge(name, value) {\\n  return value;\\n},\\n    _integrate = function _integrate() {\\n  var core = ScrollTrigger.core,\\n      data = core.bridge || {},\\n      scrollers = core._scrollers,\\n      proxies = core._proxies;\\n  scrollers.push.apply(scrollers, _scrollers);\\n  proxies.push.apply(proxies, _proxies);\\n  _scrollers = scrollers;\\n  _proxies = proxies;\\n\\n  _bridge = function _bridge(name, value) {\\n    return data[name](value);\\n  };\\n},\\n    _getProxyProp = function _getProxyProp(element, property) {\\n  return ~_proxies.indexOf(element) && _proxies[_proxies.indexOf(element) + 1][property];\\n},\\n    _isViewport = function _isViewport(el) {\\n  return !!~_root.indexOf(el);\\n},\\n    _addListener = function _addListener(element, type, func, passive, capture) {\\n  return element.addEventListener(type, func, {\\n    passive: passive !== false,\\n    capture: !!capture\\n  });\\n},\\n    _removeListener = function _removeListener(element, type, func, capture) {\\n  return element.removeEventListener(type, func, !!capture);\\n},\\n    _scrollLeft = \\\"scrollLeft\\\",\\n    _scrollTop = \\\"scrollTop\\\",\\n    _onScroll = function _onScroll() {\\n  return _normalizer && _normalizer.isPressed || _scrollers.cache++;\\n},\\n    _scrollCacheFunc = function _scrollCacheFunc(f, doNotCache) {\\n  var cachingFunc = function cachingFunc(value) {\\n    // since reading the scrollTop/scrollLeft/pageOffsetY/pageOffsetX can trigger a layout, this function allows us to cache the value so it only gets read fresh after a \\\"scroll\\\" event fires (or while we're refreshing because that can lengthen the page and alter the scroll position). when \\\"soft\\\" is true, that means don't actually set the scroll, but cache the new value instead (useful in ScrollSmoother)\\n    if (value || value === 0) {\\n      _startup && (_win.history.scrollRestoration = \\\"manual\\\"); // otherwise the new position will get overwritten by the browser onload.\\n\\n      var isNormalizing = _normalizer && _normalizer.isPressed;\\n      value = cachingFunc.v = Math.round(value) || (_normalizer && _normalizer.iOS ? 1 : 0); //TODO: iOS Bug: if you allow it to go to 0, Safari can start to report super strange (wildly inaccurate) touch positions!\\n\\n      f(value);\\n      cachingFunc.cacheID = _scrollers.cache;\\n      isNormalizing && _bridge(\\\"ss\\\", value); // set scroll (notify ScrollTrigger so it can dispatch a \\\"scrollStart\\\" event if necessary\\n    } else if (doNotCache || _scrollers.cache !== cachingFunc.cacheID || _bridge(\\\"ref\\\")) {\\n      cachingFunc.cacheID = _scrollers.cache;\\n      cachingFunc.v = f();\\n    }\\n\\n    return cachingFunc.v + cachingFunc.offset;\\n  };\\n\\n  cachingFunc.offset = 0;\\n  return f && cachingFunc;\\n},\\n    _horizontal = {\\n  s: _scrollLeft,\\n  p: \\\"left\\\",\\n  p2: \\\"Left\\\",\\n  os: \\\"right\\\",\\n  os2: \\\"Right\\\",\\n  d: \\\"width\\\",\\n  d2: \\\"Width\\\",\\n  a: \\\"x\\\",\\n  sc: _scrollCacheFunc(function (value) {\\n    return arguments.length ? _win.scrollTo(value, _vertical.sc()) : _win.pageXOffset || _doc[_scrollLeft] || _docEl[_scrollLeft] || _body[_scrollLeft] || 0;\\n  })\\n},\\n    _vertical = {\\n  s: _scrollTop,\\n  p: \\\"top\\\",\\n  p2: \\\"Top\\\",\\n  os: \\\"bottom\\\",\\n  os2: \\\"Bottom\\\",\\n  d: \\\"height\\\",\\n  d2: \\\"Height\\\",\\n  a: \\\"y\\\",\\n  op: _horizontal,\\n  sc: _scrollCacheFunc(function (value) {\\n    return arguments.length ? _win.scrollTo(_horizontal.sc(), value) : _win.pageYOffset || _doc[_scrollTop] || _docEl[_scrollTop] || _body[_scrollTop] || 0;\\n  })\\n},\\n    _getTarget = function _getTarget(t, self) {\\n  return (self && self._ctx && self._ctx.selector || gsap.utils.toArray)(t)[0] || (typeof t === \\\"string\\\" && gsap.config().nullTargetWarn !== false ? console.warn(\\\"Element not found:\\\", t) : null);\\n},\\n    _getScrollFunc = function _getScrollFunc(element, _ref) {\\n  var s = _ref.s,\\n      sc = _ref.sc;\\n  // we store the scroller functions in an alternating sequenced Array like [element, verticalScrollFunc, horizontalScrollFunc, ...] so that we can minimize memory, maximize performance, and we also record the last position as a \\\".rec\\\" property in order to revert to that after refreshing to ensure things don't shift around.\\n  _isViewport(element) && (element = _doc.scrollingElement || _docEl);\\n\\n  var i = _scrollers.indexOf(element),\\n      offset = sc === _vertical.sc ? 1 : 2;\\n\\n  !~i && (i = _scrollers.push(element) - 1);\\n  _scrollers[i + offset] || _addListener(element, \\\"scroll\\\", _onScroll); // clear the cache when a scroll occurs\\n\\n  var prev = _scrollers[i + offset],\\n      func = prev || (_scrollers[i + offset] = _scrollCacheFunc(_getProxyProp(element, s), true) || (_isViewport(element) ? sc : _scrollCacheFunc(function (value) {\\n    return arguments.length ? element[s] = value : element[s];\\n  })));\\n  func.target = element;\\n  prev || (func.smooth = gsap.getProperty(element, \\\"scrollBehavior\\\") === \\\"smooth\\\"); // only set it the first time (don't reset every time a scrollFunc is requested because perhaps it happens during a refresh() when it's disabled in ScrollTrigger.\\n\\n  return func;\\n},\\n    _getVelocityProp = function _getVelocityProp(value, minTimeRefresh, useDelta) {\\n  var v1 = value,\\n      v2 = value,\\n      t1 = _getTime(),\\n      t2 = t1,\\n      min = minTimeRefresh || 50,\\n      dropToZeroTime = Math.max(500, min * 3),\\n      update = function update(value, force) {\\n    var t = _getTime();\\n\\n    if (force || t - t1 > min) {\\n      v2 = v1;\\n      v1 = value;\\n      t2 = t1;\\n      t1 = t;\\n    } else if (useDelta) {\\n      v1 += value;\\n    } else {\\n      // not totally necessary, but makes it a bit more accurate by adjusting the v1 value according to the new slope. This way we're not just ignoring the incoming data. Removing for now because it doesn't seem to make much practical difference and it's probably not worth the kb.\\n      v1 = v2 + (value - v2) / (t - t2) * (t1 - t2);\\n    }\\n  },\\n      reset = function reset() {\\n    v2 = v1 = useDelta ? 0 : v1;\\n    t2 = t1 = 0;\\n  },\\n      getVelocity = function getVelocity(latestValue) {\\n    var tOld = t2,\\n        vOld = v2,\\n        t = _getTime();\\n\\n    (latestValue || latestValue === 0) && latestValue !== v1 && update(latestValue);\\n    return t1 === t2 || t - t2 > dropToZeroTime ? 0 : (v1 + (useDelta ? vOld : -vOld)) / ((useDelta ? t : t1) - tOld) * 1000;\\n  };\\n\\n  return {\\n    update: update,\\n    reset: reset,\\n    getVelocity: getVelocity\\n  };\\n},\\n    _getEvent = function _getEvent(e, preventDefault) {\\n  preventDefault && !e._gsapAllow && e.preventDefault();\\n  return e.changedTouches ? e.changedTouches[0] : e;\\n},\\n    _getAbsoluteMax = function _getAbsoluteMax(a) {\\n  var max = Math.max.apply(Math, a),\\n      min = Math.min.apply(Math, a);\\n  return Math.abs(max) >= Math.abs(min) ? max : min;\\n},\\n    _setScrollTrigger = function _setScrollTrigger() {\\n  ScrollTrigger = gsap.core.globals().ScrollTrigger;\\n  ScrollTrigger && ScrollTrigger.core && _integrate();\\n},\\n    _initCore = function _initCore(core) {\\n  gsap = core || _getGSAP();\\n\\n  if (!_coreInitted && gsap && typeof document !== \\\"undefined\\\" && document.body) {\\n    _win = window;\\n    _doc = document;\\n    _docEl = _doc.documentElement;\\n    _body = _doc.body;\\n    _root = [_win, _doc, _docEl, _body];\\n    _clamp = gsap.utils.clamp;\\n\\n    _context = gsap.core.context || function () {};\\n\\n    _pointerType = \\\"onpointerenter\\\" in _body ? \\\"pointer\\\" : \\\"mouse\\\"; // isTouch is 0 if no touch, 1 if ONLY touch, and 2 if it can accommodate touch but also other types like mouse/pointer.\\n\\n    _isTouch = Observer.isTouch = _win.matchMedia && _win.matchMedia(\\\"(hover: none), (pointer: coarse)\\\").matches ? 1 : \\\"ontouchstart\\\" in _win || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0 ? 2 : 0;\\n    _eventTypes = Observer.eventTypes = (\\\"ontouchstart\\\" in _docEl ? \\\"touchstart,touchmove,touchcancel,touchend\\\" : !(\\\"onpointerdown\\\" in _docEl) ? \\\"mousedown,mousemove,mouseup,mouseup\\\" : \\\"pointerdown,pointermove,pointercancel,pointerup\\\").split(\\\",\\\");\\n    setTimeout(function () {\\n      return _startup = 0;\\n    }, 500);\\n\\n    _setScrollTrigger();\\n\\n    _coreInitted = 1;\\n  }\\n\\n  return _coreInitted;\\n};\\n\\n_horizontal.op = _vertical;\\n_scrollers.cache = 0;\\nvar Observer = /*#__PURE__*/function () {\\n  function Observer(vars) {\\n    this.init(vars);\\n  }\\n\\n  var _proto = Observer.prototype;\\n\\n  _proto.init = function init(vars) {\\n    _coreInitted || _initCore(gsap) || console.warn(\\\"Please gsap.registerPlugin(Observer)\\\");\\n    ScrollTrigger || _setScrollTrigger();\\n    var tolerance = vars.tolerance,\\n        dragMinimum = vars.dragMinimum,\\n        type = vars.type,\\n        target = vars.target,\\n        lineHeight = vars.lineHeight,\\n        debounce = vars.debounce,\\n        preventDefault = vars.preventDefault,\\n        onStop = vars.onStop,\\n        onStopDelay = vars.onStopDelay,\\n        ignore = vars.ignore,\\n        wheelSpeed = vars.wheelSpeed,\\n        event = vars.event,\\n        onDragStart = vars.onDragStart,\\n        onDragEnd = vars.onDragEnd,\\n        onDrag = vars.onDrag,\\n        onPress = vars.onPress,\\n        onRelease = vars.onRelease,\\n        onRight = vars.onRight,\\n        onLeft = vars.onLeft,\\n        onUp = vars.onUp,\\n        onDown = vars.onDown,\\n        onChangeX = vars.onChangeX,\\n        onChangeY = vars.onChangeY,\\n        onChange = vars.onChange,\\n        onToggleX = vars.onToggleX,\\n        onToggleY = vars.onToggleY,\\n        onHover = vars.onHover,\\n        onHoverEnd = vars.onHoverEnd,\\n        onMove = vars.onMove,\\n        ignoreCheck = vars.ignoreCheck,\\n        isNormalizer = vars.isNormalizer,\\n        onGestureStart = vars.onGestureStart,\\n        onGestureEnd = vars.onGestureEnd,\\n        onWheel = vars.onWheel,\\n        onEnable = vars.onEnable,\\n        onDisable = vars.onDisable,\\n        onClick = vars.onClick,\\n        scrollSpeed = vars.scrollSpeed,\\n        capture = vars.capture,\\n        allowClicks = vars.allowClicks,\\n        lockAxis = vars.lockAxis,\\n        onLockAxis = vars.onLockAxis;\\n    this.target = target = _getTarget(target) || _docEl;\\n    this.vars = vars;\\n    ignore && (ignore = gsap.utils.toArray(ignore));\\n    tolerance = tolerance || 1e-9;\\n    dragMinimum = dragMinimum || 0;\\n    wheelSpeed = wheelSpeed || 1;\\n    scrollSpeed = scrollSpeed || 1;\\n    type = type || \\\"wheel,touch,pointer\\\";\\n    debounce = debounce !== false;\\n    lineHeight || (lineHeight = parseFloat(_win.getComputedStyle(_body).lineHeight) || 22); // note: browser may report \\\"normal\\\", so default to 22.\\n\\n    var id,\\n        onStopDelayedCall,\\n        dragged,\\n        moved,\\n        wheeled,\\n        locked,\\n        axis,\\n        self = this,\\n        prevDeltaX = 0,\\n        prevDeltaY = 0,\\n        passive = vars.passive || !preventDefault && vars.passive !== false,\\n        scrollFuncX = _getScrollFunc(target, _horizontal),\\n        scrollFuncY = _getScrollFunc(target, _vertical),\\n        scrollX = scrollFuncX(),\\n        scrollY = scrollFuncY(),\\n        limitToTouch = ~type.indexOf(\\\"touch\\\") && !~type.indexOf(\\\"pointer\\\") && _eventTypes[0] === \\\"pointerdown\\\",\\n        // for devices that accommodate mouse events and touch events, we need to distinguish.\\n    isViewport = _isViewport(target),\\n        ownerDoc = target.ownerDocument || _doc,\\n        deltaX = [0, 0, 0],\\n        // wheel, scroll, pointer/touch\\n    deltaY = [0, 0, 0],\\n        onClickTime = 0,\\n        clickCapture = function clickCapture() {\\n      return onClickTime = _getTime();\\n    },\\n        _ignoreCheck = function _ignoreCheck(e, isPointerOrTouch) {\\n      return (self.event = e) && ignore && ~ignore.indexOf(e.target) || isPointerOrTouch && limitToTouch && e.pointerType !== \\\"touch\\\" || ignoreCheck && ignoreCheck(e, isPointerOrTouch);\\n    },\\n        onStopFunc = function onStopFunc() {\\n      self._vx.reset();\\n\\n      self._vy.reset();\\n\\n      onStopDelayedCall.pause();\\n      onStop && onStop(self);\\n    },\\n        update = function update() {\\n      var dx = self.deltaX = _getAbsoluteMax(deltaX),\\n          dy = self.deltaY = _getAbsoluteMax(deltaY),\\n          changedX = Math.abs(dx) >= tolerance,\\n          changedY = Math.abs(dy) >= tolerance;\\n\\n      onChange && (changedX || changedY) && onChange(self, dx, dy, deltaX, deltaY); // in ScrollTrigger.normalizeScroll(), we need to know if it was touch/pointer so we need access to the deltaX/deltaY Arrays before we clear them out.\\n\\n      if (changedX) {\\n        onRight && self.deltaX > 0 && onRight(self);\\n        onLeft && self.deltaX < 0 && onLeft(self);\\n        onChangeX && onChangeX(self);\\n        onToggleX && self.deltaX < 0 !== prevDeltaX < 0 && onToggleX(self);\\n        prevDeltaX = self.deltaX;\\n        deltaX[0] = deltaX[1] = deltaX[2] = 0;\\n      }\\n\\n      if (changedY) {\\n        onDown && self.deltaY > 0 && onDown(self);\\n        onUp && self.deltaY < 0 && onUp(self);\\n        onChangeY && onChangeY(self);\\n        onToggleY && self.deltaY < 0 !== prevDeltaY < 0 && onToggleY(self);\\n        prevDeltaY = self.deltaY;\\n        deltaY[0] = deltaY[1] = deltaY[2] = 0;\\n      }\\n\\n      if (moved || dragged) {\\n        onMove && onMove(self);\\n\\n        if (dragged) {\\n          onDragStart && dragged === 1 && onDragStart(self);\\n          onDrag && onDrag(self);\\n          dragged = 0;\\n        }\\n\\n        moved = false;\\n      }\\n\\n      locked && !(locked = false) && onLockAxis && onLockAxis(self);\\n\\n      if (wheeled) {\\n        onWheel(self);\\n        wheeled = false;\\n      }\\n\\n      id = 0;\\n    },\\n        onDelta = function onDelta(x, y, index) {\\n      deltaX[index] += x;\\n      deltaY[index] += y;\\n\\n      self._vx.update(x);\\n\\n      self._vy.update(y);\\n\\n      debounce ? id || (id = requestAnimationFrame(update)) : update();\\n    },\\n        onTouchOrPointerDelta = function onTouchOrPointerDelta(x, y) {\\n      if (lockAxis && !axis) {\\n        self.axis = axis = Math.abs(x) > Math.abs(y) ? \\\"x\\\" : \\\"y\\\";\\n        locked = true;\\n      }\\n\\n      if (axis !== \\\"y\\\") {\\n        deltaX[2] += x;\\n\\n        self._vx.update(x, true); // update the velocity as frequently as possible instead of in the debounced function so that very quick touch-scrolls (flicks) feel natural. If it's the mouse/touch/pointer, force it so that we get snappy/accurate momentum scroll.\\n\\n      }\\n\\n      if (axis !== \\\"x\\\") {\\n        deltaY[2] += y;\\n\\n        self._vy.update(y, true);\\n      }\\n\\n      debounce ? id || (id = requestAnimationFrame(update)) : update();\\n    },\\n        _onDrag = function _onDrag(e) {\\n      if (_ignoreCheck(e, 1)) {\\n        return;\\n      }\\n\\n      e = _getEvent(e, preventDefault);\\n      var x = e.clientX,\\n          y = e.clientY,\\n          dx = x - self.x,\\n          dy = y - self.y,\\n          isDragging = self.isDragging;\\n      self.x = x;\\n      self.y = y;\\n\\n      if (isDragging || (dx || dy) && (Math.abs(self.startX - x) >= dragMinimum || Math.abs(self.startY - y) >= dragMinimum)) {\\n        dragged = isDragging ? 2 : 1; // dragged: 0 = not dragging, 1 = first drag, 2 = normal drag\\n\\n        isDragging || (self.isDragging = true);\\n        onTouchOrPointerDelta(dx, dy);\\n      }\\n    },\\n        _onPress = self.onPress = function (e) {\\n      if (_ignoreCheck(e, 1) || e && e.button) {\\n        return;\\n      }\\n\\n      self.axis = axis = null;\\n      onStopDelayedCall.pause();\\n      self.isPressed = true;\\n      e = _getEvent(e); // note: may need to preventDefault(?) Won't side-scroll on iOS Safari if we do, though.\\n\\n      prevDeltaX = prevDeltaY = 0;\\n      self.startX = self.x = e.clientX;\\n      self.startY = self.y = e.clientY;\\n\\n      self._vx.reset(); // otherwise the t2 may be stale if the user touches and flicks super fast and releases in less than 2 requestAnimationFrame ticks, causing velocity to be 0.\\n\\n\\n      self._vy.reset();\\n\\n      _addListener(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, passive, true);\\n\\n      self.deltaX = self.deltaY = 0;\\n      onPress && onPress(self);\\n    },\\n        _onRelease = self.onRelease = function (e) {\\n      if (_ignoreCheck(e, 1)) {\\n        return;\\n      }\\n\\n      _removeListener(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, true);\\n\\n      var isTrackingDrag = !isNaN(self.y - self.startY),\\n          wasDragging = self.isDragging,\\n          isDragNotClick = wasDragging && (Math.abs(self.x - self.startX) > 3 || Math.abs(self.y - self.startY) > 3),\\n          // some touch devices need some wiggle room in terms of sensing clicks - the finger may move a few pixels.\\n      eventData = _getEvent(e);\\n\\n      if (!isDragNotClick && isTrackingDrag) {\\n        self._vx.reset();\\n\\n        self._vy.reset(); //if (preventDefault && allowClicks && self.isPressed) { // check isPressed because in a rare edge case, the inputObserver in ScrollTrigger may stopPropagation() on the press/drag, so the onRelease may get fired without the onPress/onDrag ever getting called, thus it could trigger a click to occur on a link after scroll-dragging it.\\n\\n\\n        if (preventDefault && allowClicks) {\\n          gsap.delayedCall(0.08, function () {\\n            // some browsers (like Firefox) won't trust script-generated clicks, so if the user tries to click on a video to play it, for example, it simply won't work. Since a regular \\\"click\\\" event will most likely be generated anyway (one that has its isTrusted flag set to true), we must slightly delay our script-generated click so that the \\\"real\\\"/trusted one is prioritized. Remember, when there are duplicate events in quick succession, we suppress all but the first one. Some browsers don't even trigger the \\\"real\\\" one at all, so our synthetic one is a safety valve that ensures that no matter what, a click event does get dispatched.\\n            if (_getTime() - onClickTime > 300 && !e.defaultPrevented) {\\n              if (e.target.click) {\\n                //some browsers (like mobile Safari) don't properly trigger the click event\\n                e.target.click();\\n              } else if (ownerDoc.createEvent) {\\n                var syntheticEvent = ownerDoc.createEvent(\\\"MouseEvents\\\");\\n                syntheticEvent.initMouseEvent(\\\"click\\\", true, true, _win, 1, eventData.screenX, eventData.screenY, eventData.clientX, eventData.clientY, false, false, false, false, 0, null);\\n                e.target.dispatchEvent(syntheticEvent);\\n              }\\n            }\\n          });\\n        }\\n      }\\n\\n      self.isDragging = self.isGesturing = self.isPressed = false;\\n      onStop && wasDragging && !isNormalizer && onStopDelayedCall.restart(true);\\n      dragged && update(); // in case debouncing, we don't want onDrag to fire AFTER onDragEnd().\\n\\n      onDragEnd && wasDragging && onDragEnd(self);\\n      onRelease && onRelease(self, isDragNotClick);\\n    },\\n        _onGestureStart = function _onGestureStart(e) {\\n      return e.touches && e.touches.length > 1 && (self.isGesturing = true) && onGestureStart(e, self.isDragging);\\n    },\\n        _onGestureEnd = function _onGestureEnd() {\\n      return (self.isGesturing = false) || onGestureEnd(self);\\n    },\\n        onScroll = function onScroll(e) {\\n      if (_ignoreCheck(e)) {\\n        return;\\n      }\\n\\n      var x = scrollFuncX(),\\n          y = scrollFuncY();\\n      onDelta((x - scrollX) * scrollSpeed, (y - scrollY) * scrollSpeed, 1);\\n      scrollX = x;\\n      scrollY = y;\\n      onStop && onStopDelayedCall.restart(true);\\n    },\\n        _onWheel = function _onWheel(e) {\\n      if (_ignoreCheck(e)) {\\n        return;\\n      }\\n\\n      e = _getEvent(e, preventDefault);\\n      onWheel && (wheeled = true);\\n      var multiplier = (e.deltaMode === 1 ? lineHeight : e.deltaMode === 2 ? _win.innerHeight : 1) * wheelSpeed;\\n      onDelta(e.deltaX * multiplier, e.deltaY * multiplier, 0);\\n      onStop && !isNormalizer && onStopDelayedCall.restart(true);\\n    },\\n        _onMove = function _onMove(e) {\\n      if (_ignoreCheck(e)) {\\n        return;\\n      }\\n\\n      var x = e.clientX,\\n          y = e.clientY,\\n          dx = x - self.x,\\n          dy = y - self.y;\\n      self.x = x;\\n      self.y = y;\\n      moved = true;\\n      onStop && onStopDelayedCall.restart(true);\\n      (dx || dy) && onTouchOrPointerDelta(dx, dy);\\n    },\\n        _onHover = function _onHover(e) {\\n      self.event = e;\\n      onHover(self);\\n    },\\n        _onHoverEnd = function _onHoverEnd(e) {\\n      self.event = e;\\n      onHoverEnd(self);\\n    },\\n        _onClick = function _onClick(e) {\\n      return _ignoreCheck(e) || _getEvent(e, preventDefault) && onClick(self);\\n    };\\n\\n    onStopDelayedCall = self._dc = gsap.delayedCall(onStopDelay || 0.25, onStopFunc).pause();\\n    self.deltaX = self.deltaY = 0;\\n    self._vx = _getVelocityProp(0, 50, true);\\n    self._vy = _getVelocityProp(0, 50, true);\\n    self.scrollX = scrollFuncX;\\n    self.scrollY = scrollFuncY;\\n    self.isDragging = self.isGesturing = self.isPressed = false;\\n\\n    _context(this);\\n\\n    self.enable = function (e) {\\n      if (!self.isEnabled) {\\n        _addListener(isViewport ? ownerDoc : target, \\\"scroll\\\", _onScroll);\\n\\n        type.indexOf(\\\"scroll\\\") >= 0 && _addListener(isViewport ? ownerDoc : target, \\\"scroll\\\", onScroll, passive, capture);\\n        type.indexOf(\\\"wheel\\\") >= 0 && _addListener(target, \\\"wheel\\\", _onWheel, passive, capture);\\n\\n        if (type.indexOf(\\\"touch\\\") >= 0 && _isTouch || type.indexOf(\\\"pointer\\\") >= 0) {\\n          _addListener(target, _eventTypes[0], _onPress, passive, capture);\\n\\n          _addListener(ownerDoc, _eventTypes[2], _onRelease);\\n\\n          _addListener(ownerDoc, _eventTypes[3], _onRelease);\\n\\n          allowClicks && _addListener(target, \\\"click\\\", clickCapture, true, true);\\n          onClick && _addListener(target, \\\"click\\\", _onClick);\\n          onGestureStart && _addListener(ownerDoc, \\\"gesturestart\\\", _onGestureStart);\\n          onGestureEnd && _addListener(ownerDoc, \\\"gestureend\\\", _onGestureEnd);\\n          onHover && _addListener(target, _pointerType + \\\"enter\\\", _onHover);\\n          onHoverEnd && _addListener(target, _pointerType + \\\"leave\\\", _onHoverEnd);\\n          onMove && _addListener(target, _pointerType + \\\"move\\\", _onMove);\\n        }\\n\\n        self.isEnabled = true;\\n        self.isDragging = self.isGesturing = self.isPressed = moved = dragged = false;\\n\\n        self._vx.reset();\\n\\n        self._vy.reset();\\n\\n        scrollX = scrollFuncX();\\n        scrollY = scrollFuncY();\\n        e && e.type && _onPress(e);\\n        onEnable && onEnable(self);\\n      }\\n\\n      return self;\\n    };\\n\\n    self.disable = function () {\\n      if (self.isEnabled) {\\n        // only remove the _onScroll listener if there aren't any others that rely on the functionality.\\n        _observers.filter(function (o) {\\n          return o !== self && _isViewport(o.target);\\n        }).length || _removeListener(isViewport ? ownerDoc : target, \\\"scroll\\\", _onScroll);\\n\\n        if (self.isPressed) {\\n          self._vx.reset();\\n\\n          self._vy.reset();\\n\\n          _removeListener(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, true);\\n        }\\n\\n        _removeListener(isViewport ? ownerDoc : target, \\\"scroll\\\", onScroll, capture);\\n\\n        _removeListener(target, \\\"wheel\\\", _onWheel, capture);\\n\\n        _removeListener(target, _eventTypes[0], _onPress, capture);\\n\\n        _removeListener(ownerDoc, _eventTypes[2], _onRelease);\\n\\n        _removeListener(ownerDoc, _eventTypes[3], _onRelease);\\n\\n        _removeListener(target, \\\"click\\\", clickCapture, true);\\n\\n        _removeListener(target, \\\"click\\\", _onClick);\\n\\n        _removeListener(ownerDoc, \\\"gesturestart\\\", _onGestureStart);\\n\\n        _removeListener(ownerDoc, \\\"gestureend\\\", _onGestureEnd);\\n\\n        _removeListener(target, _pointerType + \\\"enter\\\", _onHover);\\n\\n        _removeListener(target, _pointerType + \\\"leave\\\", _onHoverEnd);\\n\\n        _removeListener(target, _pointerType + \\\"move\\\", _onMove);\\n\\n        self.isEnabled = self.isPressed = self.isDragging = false;\\n        onDisable && onDisable(self);\\n      }\\n    };\\n\\n    self.kill = self.revert = function () {\\n      self.disable();\\n\\n      var i = _observers.indexOf(self);\\n\\n      i >= 0 && _observers.splice(i, 1);\\n      _normalizer === self && (_normalizer = 0);\\n    };\\n\\n    _observers.push(self);\\n\\n    isNormalizer && _isViewport(target) && (_normalizer = self);\\n    self.enable(event);\\n  };\\n\\n  _createClass(Observer, [{\\n    key: \\\"velocityX\\\",\\n    get: function get() {\\n      return this._vx.getVelocity();\\n    }\\n  }, {\\n    key: \\\"velocityY\\\",\\n    get: function get() {\\n      return this._vy.getVelocity();\\n    }\\n  }]);\\n\\n  return Observer;\\n}();\\nObserver.version = \\\"3.12.7\\\";\\n\\nObserver.create = function (vars) {\\n  return new Observer(vars);\\n};\\n\\nObserver.register = _initCore;\\n\\nObserver.getAll = function () {\\n  return _observers.slice();\\n};\\n\\nObserver.getById = function (id) {\\n  return _observers.filter(function (o) {\\n    return o.vars.id === id;\\n  })[0];\\n};\\n\\n_getGSAP() && gsap.registerPlugin(Observer);\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZ3NhcC9PYnNlcnZlci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLDRDQUE0QyxnQkFBZ0Isa0JBQWtCLE9BQU8sMkJBQTJCLHdEQUF3RCxnQ0FBZ0MsdURBQXVEOztBQUUvUCw4REFBOEQsc0VBQXNFLDhEQUE4RDs7QUFFbE07QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRDs7QUFFL0Q7QUFDQSw2RkFBNkY7O0FBRTdGO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0MsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHdFQUF3RTs7QUFFeEU7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0Esb0ZBQW9GOztBQUVwRjtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxvRUFBb0U7O0FBRXBFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRGQUE0Rjs7QUFFNUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvRkFBb0Y7O0FBRXBGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGtDQUFrQzs7QUFFbEM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQ0FBc0M7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7O0FBRXhCO0FBQ0E7QUFDQTs7QUFFQSx3QkFBd0I7OztBQUd4Qjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwwQkFBMEIseURBQXlEOzs7QUFHbkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkI7O0FBRTNCO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL2dzYXAvT2JzZXJ2ZXIuanM/MDk2NCJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbi8qIVxuICogT2JzZXJ2ZXIgMy4xMi43XG4gKiBodHRwczovL2dzYXAuY29tXG4gKlxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IDIwMDgtMjAyNSwgR3JlZW5Tb2NrLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogU3ViamVjdCB0byB0aGUgdGVybXMgYXQgaHR0cHM6Ly9nc2FwLmNvbS9zdGFuZGFyZC1saWNlbnNlIG9yIGZvclxuICogQ2x1YiBHU0FQIG1lbWJlcnMsIHRoZSBhZ3JlZW1lbnQgaXNzdWVkIHdpdGggdGhhdCBtZW1iZXJzaGlwLlxuICogQGF1dGhvcjogSmFjayBEb3lsZSwgamFja0BncmVlbnNvY2suY29tXG4qL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xudmFyIGdzYXAsXG4gICAgX2NvcmVJbml0dGVkLFxuICAgIF9jbGFtcCxcbiAgICBfd2luLFxuICAgIF9kb2MsXG4gICAgX2RvY0VsLFxuICAgIF9ib2R5LFxuICAgIF9pc1RvdWNoLFxuICAgIF9wb2ludGVyVHlwZSxcbiAgICBTY3JvbGxUcmlnZ2VyLFxuICAgIF9yb290LFxuICAgIF9ub3JtYWxpemVyLFxuICAgIF9ldmVudFR5cGVzLFxuICAgIF9jb250ZXh0LFxuICAgIF9nZXRHU0FQID0gZnVuY3Rpb24gX2dldEdTQVAoKSB7XG4gIHJldHVybiBnc2FwIHx8IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgKGdzYXAgPSB3aW5kb3cuZ3NhcCkgJiYgZ3NhcC5yZWdpc3RlclBsdWdpbiAmJiBnc2FwO1xufSxcbiAgICBfc3RhcnR1cCA9IDEsXG4gICAgX29ic2VydmVycyA9IFtdLFxuICAgIF9zY3JvbGxlcnMgPSBbXSxcbiAgICBfcHJveGllcyA9IFtdLFxuICAgIF9nZXRUaW1lID0gRGF0ZS5ub3csXG4gICAgX2JyaWRnZSA9IGZ1bmN0aW9uIF9icmlkZ2UobmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufSxcbiAgICBfaW50ZWdyYXRlID0gZnVuY3Rpb24gX2ludGVncmF0ZSgpIHtcbiAgdmFyIGNvcmUgPSBTY3JvbGxUcmlnZ2VyLmNvcmUsXG4gICAgICBkYXRhID0gY29yZS5icmlkZ2UgfHwge30sXG4gICAgICBzY3JvbGxlcnMgPSBjb3JlLl9zY3JvbGxlcnMsXG4gICAgICBwcm94aWVzID0gY29yZS5fcHJveGllcztcbiAgc2Nyb2xsZXJzLnB1c2guYXBwbHkoc2Nyb2xsZXJzLCBfc2Nyb2xsZXJzKTtcbiAgcHJveGllcy5wdXNoLmFwcGx5KHByb3hpZXMsIF9wcm94aWVzKTtcbiAgX3Njcm9sbGVycyA9IHNjcm9sbGVycztcbiAgX3Byb3hpZXMgPSBwcm94aWVzO1xuXG4gIF9icmlkZ2UgPSBmdW5jdGlvbiBfYnJpZGdlKG5hbWUsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGRhdGFbbmFtZV0odmFsdWUpO1xuICB9O1xufSxcbiAgICBfZ2V0UHJveHlQcm9wID0gZnVuY3Rpb24gX2dldFByb3h5UHJvcChlbGVtZW50LCBwcm9wZXJ0eSkge1xuICByZXR1cm4gfl9wcm94aWVzLmluZGV4T2YoZWxlbWVudCkgJiYgX3Byb3hpZXNbX3Byb3hpZXMuaW5kZXhPZihlbGVtZW50KSArIDFdW3Byb3BlcnR5XTtcbn0sXG4gICAgX2lzVmlld3BvcnQgPSBmdW5jdGlvbiBfaXNWaWV3cG9ydChlbCkge1xuICByZXR1cm4gISF+X3Jvb3QuaW5kZXhPZihlbCk7XG59LFxuICAgIF9hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uIF9hZGRMaXN0ZW5lcihlbGVtZW50LCB0eXBlLCBmdW5jLCBwYXNzaXZlLCBjYXB0dXJlKSB7XG4gIHJldHVybiBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZnVuYywge1xuICAgIHBhc3NpdmU6IHBhc3NpdmUgIT09IGZhbHNlLFxuICAgIGNhcHR1cmU6ICEhY2FwdHVyZVxuICB9KTtcbn0sXG4gICAgX3JlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24gX3JlbW92ZUxpc3RlbmVyKGVsZW1lbnQsIHR5cGUsIGZ1bmMsIGNhcHR1cmUpIHtcbiAgcmV0dXJuIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBmdW5jLCAhIWNhcHR1cmUpO1xufSxcbiAgICBfc2Nyb2xsTGVmdCA9IFwic2Nyb2xsTGVmdFwiLFxuICAgIF9zY3JvbGxUb3AgPSBcInNjcm9sbFRvcFwiLFxuICAgIF9vblNjcm9sbCA9IGZ1bmN0aW9uIF9vblNjcm9sbCgpIHtcbiAgcmV0dXJuIF9ub3JtYWxpemVyICYmIF9ub3JtYWxpemVyLmlzUHJlc3NlZCB8fCBfc2Nyb2xsZXJzLmNhY2hlKys7XG59LFxuICAgIF9zY3JvbGxDYWNoZUZ1bmMgPSBmdW5jdGlvbiBfc2Nyb2xsQ2FjaGVGdW5jKGYsIGRvTm90Q2FjaGUpIHtcbiAgdmFyIGNhY2hpbmdGdW5jID0gZnVuY3Rpb24gY2FjaGluZ0Z1bmModmFsdWUpIHtcbiAgICAvLyBzaW5jZSByZWFkaW5nIHRoZSBzY3JvbGxUb3Avc2Nyb2xsTGVmdC9wYWdlT2Zmc2V0WS9wYWdlT2Zmc2V0WCBjYW4gdHJpZ2dlciBhIGxheW91dCwgdGhpcyBmdW5jdGlvbiBhbGxvd3MgdXMgdG8gY2FjaGUgdGhlIHZhbHVlIHNvIGl0IG9ubHkgZ2V0cyByZWFkIGZyZXNoIGFmdGVyIGEgXCJzY3JvbGxcIiBldmVudCBmaXJlcyAob3Igd2hpbGUgd2UncmUgcmVmcmVzaGluZyBiZWNhdXNlIHRoYXQgY2FuIGxlbmd0aGVuIHRoZSBwYWdlIGFuZCBhbHRlciB0aGUgc2Nyb2xsIHBvc2l0aW9uKS4gd2hlbiBcInNvZnRcIiBpcyB0cnVlLCB0aGF0IG1lYW5zIGRvbid0IGFjdHVhbGx5IHNldCB0aGUgc2Nyb2xsLCBidXQgY2FjaGUgdGhlIG5ldyB2YWx1ZSBpbnN0ZWFkICh1c2VmdWwgaW4gU2Nyb2xsU21vb3RoZXIpXG4gICAgaWYgKHZhbHVlIHx8IHZhbHVlID09PSAwKSB7XG4gICAgICBfc3RhcnR1cCAmJiAoX3dpbi5oaXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uID0gXCJtYW51YWxcIik7IC8vIG90aGVyd2lzZSB0aGUgbmV3IHBvc2l0aW9uIHdpbGwgZ2V0IG92ZXJ3cml0dGVuIGJ5IHRoZSBicm93c2VyIG9ubG9hZC5cblxuICAgICAgdmFyIGlzTm9ybWFsaXppbmcgPSBfbm9ybWFsaXplciAmJiBfbm9ybWFsaXplci5pc1ByZXNzZWQ7XG4gICAgICB2YWx1ZSA9IGNhY2hpbmdGdW5jLnYgPSBNYXRoLnJvdW5kKHZhbHVlKSB8fCAoX25vcm1hbGl6ZXIgJiYgX25vcm1hbGl6ZXIuaU9TID8gMSA6IDApOyAvL1RPRE86IGlPUyBCdWc6IGlmIHlvdSBhbGxvdyBpdCB0byBnbyB0byAwLCBTYWZhcmkgY2FuIHN0YXJ0IHRvIHJlcG9ydCBzdXBlciBzdHJhbmdlICh3aWxkbHkgaW5hY2N1cmF0ZSkgdG91Y2ggcG9zaXRpb25zIVxuXG4gICAgICBmKHZhbHVlKTtcbiAgICAgIGNhY2hpbmdGdW5jLmNhY2hlSUQgPSBfc2Nyb2xsZXJzLmNhY2hlO1xuICAgICAgaXNOb3JtYWxpemluZyAmJiBfYnJpZGdlKFwic3NcIiwgdmFsdWUpOyAvLyBzZXQgc2Nyb2xsIChub3RpZnkgU2Nyb2xsVHJpZ2dlciBzbyBpdCBjYW4gZGlzcGF0Y2ggYSBcInNjcm9sbFN0YXJ0XCIgZXZlbnQgaWYgbmVjZXNzYXJ5XG4gICAgfSBlbHNlIGlmIChkb05vdENhY2hlIHx8IF9zY3JvbGxlcnMuY2FjaGUgIT09IGNhY2hpbmdGdW5jLmNhY2hlSUQgfHwgX2JyaWRnZShcInJlZlwiKSkge1xuICAgICAgY2FjaGluZ0Z1bmMuY2FjaGVJRCA9IF9zY3JvbGxlcnMuY2FjaGU7XG4gICAgICBjYWNoaW5nRnVuYy52ID0gZigpO1xuICAgIH1cblxuICAgIHJldHVybiBjYWNoaW5nRnVuYy52ICsgY2FjaGluZ0Z1bmMub2Zmc2V0O1xuICB9O1xuXG4gIGNhY2hpbmdGdW5jLm9mZnNldCA9IDA7XG4gIHJldHVybiBmICYmIGNhY2hpbmdGdW5jO1xufSxcbiAgICBfaG9yaXpvbnRhbCA9IHtcbiAgczogX3Njcm9sbExlZnQsXG4gIHA6IFwibGVmdFwiLFxuICBwMjogXCJMZWZ0XCIsXG4gIG9zOiBcInJpZ2h0XCIsXG4gIG9zMjogXCJSaWdodFwiLFxuICBkOiBcIndpZHRoXCIsXG4gIGQyOiBcIldpZHRoXCIsXG4gIGE6IFwieFwiLFxuICBzYzogX3Njcm9sbENhY2hlRnVuYyhmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IF93aW4uc2Nyb2xsVG8odmFsdWUsIF92ZXJ0aWNhbC5zYygpKSA6IF93aW4ucGFnZVhPZmZzZXQgfHwgX2RvY1tfc2Nyb2xsTGVmdF0gfHwgX2RvY0VsW19zY3JvbGxMZWZ0XSB8fCBfYm9keVtfc2Nyb2xsTGVmdF0gfHwgMDtcbiAgfSlcbn0sXG4gICAgX3ZlcnRpY2FsID0ge1xuICBzOiBfc2Nyb2xsVG9wLFxuICBwOiBcInRvcFwiLFxuICBwMjogXCJUb3BcIixcbiAgb3M6IFwiYm90dG9tXCIsXG4gIG9zMjogXCJCb3R0b21cIixcbiAgZDogXCJoZWlnaHRcIixcbiAgZDI6IFwiSGVpZ2h0XCIsXG4gIGE6IFwieVwiLFxuICBvcDogX2hvcml6b250YWwsXG4gIHNjOiBfc2Nyb2xsQ2FjaGVGdW5jKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gX3dpbi5zY3JvbGxUbyhfaG9yaXpvbnRhbC5zYygpLCB2YWx1ZSkgOiBfd2luLnBhZ2VZT2Zmc2V0IHx8IF9kb2NbX3Njcm9sbFRvcF0gfHwgX2RvY0VsW19zY3JvbGxUb3BdIHx8IF9ib2R5W19zY3JvbGxUb3BdIHx8IDA7XG4gIH0pXG59LFxuICAgIF9nZXRUYXJnZXQgPSBmdW5jdGlvbiBfZ2V0VGFyZ2V0KHQsIHNlbGYpIHtcbiAgcmV0dXJuIChzZWxmICYmIHNlbGYuX2N0eCAmJiBzZWxmLl9jdHguc2VsZWN0b3IgfHwgZ3NhcC51dGlscy50b0FycmF5KSh0KVswXSB8fCAodHlwZW9mIHQgPT09IFwic3RyaW5nXCIgJiYgZ3NhcC5jb25maWcoKS5udWxsVGFyZ2V0V2FybiAhPT0gZmFsc2UgPyBjb25zb2xlLndhcm4oXCJFbGVtZW50IG5vdCBmb3VuZDpcIiwgdCkgOiBudWxsKTtcbn0sXG4gICAgX2dldFNjcm9sbEZ1bmMgPSBmdW5jdGlvbiBfZ2V0U2Nyb2xsRnVuYyhlbGVtZW50LCBfcmVmKSB7XG4gIHZhciBzID0gX3JlZi5zLFxuICAgICAgc2MgPSBfcmVmLnNjO1xuICAvLyB3ZSBzdG9yZSB0aGUgc2Nyb2xsZXIgZnVuY3Rpb25zIGluIGFuIGFsdGVybmF0aW5nIHNlcXVlbmNlZCBBcnJheSBsaWtlIFtlbGVtZW50LCB2ZXJ0aWNhbFNjcm9sbEZ1bmMsIGhvcml6b250YWxTY3JvbGxGdW5jLCAuLi5dIHNvIHRoYXQgd2UgY2FuIG1pbmltaXplIG1lbW9yeSwgbWF4aW1pemUgcGVyZm9ybWFuY2UsIGFuZCB3ZSBhbHNvIHJlY29yZCB0aGUgbGFzdCBwb3NpdGlvbiBhcyBhIFwiLnJlY1wiIHByb3BlcnR5IGluIG9yZGVyIHRvIHJldmVydCB0byB0aGF0IGFmdGVyIHJlZnJlc2hpbmcgdG8gZW5zdXJlIHRoaW5ncyBkb24ndCBzaGlmdCBhcm91bmQuXG4gIF9pc1ZpZXdwb3J0KGVsZW1lbnQpICYmIChlbGVtZW50ID0gX2RvYy5zY3JvbGxpbmdFbGVtZW50IHx8IF9kb2NFbCk7XG5cbiAgdmFyIGkgPSBfc2Nyb2xsZXJzLmluZGV4T2YoZWxlbWVudCksXG4gICAgICBvZmZzZXQgPSBzYyA9PT0gX3ZlcnRpY2FsLnNjID8gMSA6IDI7XG5cbiAgIX5pICYmIChpID0gX3Njcm9sbGVycy5wdXNoKGVsZW1lbnQpIC0gMSk7XG4gIF9zY3JvbGxlcnNbaSArIG9mZnNldF0gfHwgX2FkZExpc3RlbmVyKGVsZW1lbnQsIFwic2Nyb2xsXCIsIF9vblNjcm9sbCk7IC8vIGNsZWFyIHRoZSBjYWNoZSB3aGVuIGEgc2Nyb2xsIG9jY3Vyc1xuXG4gIHZhciBwcmV2ID0gX3Njcm9sbGVyc1tpICsgb2Zmc2V0XSxcbiAgICAgIGZ1bmMgPSBwcmV2IHx8IChfc2Nyb2xsZXJzW2kgKyBvZmZzZXRdID0gX3Njcm9sbENhY2hlRnVuYyhfZ2V0UHJveHlQcm9wKGVsZW1lbnQsIHMpLCB0cnVlKSB8fCAoX2lzVmlld3BvcnQoZWxlbWVudCkgPyBzYyA6IF9zY3JvbGxDYWNoZUZ1bmMoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyBlbGVtZW50W3NdID0gdmFsdWUgOiBlbGVtZW50W3NdO1xuICB9KSkpO1xuICBmdW5jLnRhcmdldCA9IGVsZW1lbnQ7XG4gIHByZXYgfHwgKGZ1bmMuc21vb3RoID0gZ3NhcC5nZXRQcm9wZXJ0eShlbGVtZW50LCBcInNjcm9sbEJlaGF2aW9yXCIpID09PSBcInNtb290aFwiKTsgLy8gb25seSBzZXQgaXQgdGhlIGZpcnN0IHRpbWUgKGRvbid0IHJlc2V0IGV2ZXJ5IHRpbWUgYSBzY3JvbGxGdW5jIGlzIHJlcXVlc3RlZCBiZWNhdXNlIHBlcmhhcHMgaXQgaGFwcGVucyBkdXJpbmcgYSByZWZyZXNoKCkgd2hlbiBpdCdzIGRpc2FibGVkIGluIFNjcm9sbFRyaWdnZXIuXG5cbiAgcmV0dXJuIGZ1bmM7XG59LFxuICAgIF9nZXRWZWxvY2l0eVByb3AgPSBmdW5jdGlvbiBfZ2V0VmVsb2NpdHlQcm9wKHZhbHVlLCBtaW5UaW1lUmVmcmVzaCwgdXNlRGVsdGEpIHtcbiAgdmFyIHYxID0gdmFsdWUsXG4gICAgICB2MiA9IHZhbHVlLFxuICAgICAgdDEgPSBfZ2V0VGltZSgpLFxuICAgICAgdDIgPSB0MSxcbiAgICAgIG1pbiA9IG1pblRpbWVSZWZyZXNoIHx8IDUwLFxuICAgICAgZHJvcFRvWmVyb1RpbWUgPSBNYXRoLm1heCg1MDAsIG1pbiAqIDMpLFxuICAgICAgdXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlKHZhbHVlLCBmb3JjZSkge1xuICAgIHZhciB0ID0gX2dldFRpbWUoKTtcblxuICAgIGlmIChmb3JjZSB8fCB0IC0gdDEgPiBtaW4pIHtcbiAgICAgIHYyID0gdjE7XG4gICAgICB2MSA9IHZhbHVlO1xuICAgICAgdDIgPSB0MTtcbiAgICAgIHQxID0gdDtcbiAgICB9IGVsc2UgaWYgKHVzZURlbHRhKSB7XG4gICAgICB2MSArPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbm90IHRvdGFsbHkgbmVjZXNzYXJ5LCBidXQgbWFrZXMgaXQgYSBiaXQgbW9yZSBhY2N1cmF0ZSBieSBhZGp1c3RpbmcgdGhlIHYxIHZhbHVlIGFjY29yZGluZyB0byB0aGUgbmV3IHNsb3BlLiBUaGlzIHdheSB3ZSdyZSBub3QganVzdCBpZ25vcmluZyB0aGUgaW5jb21pbmcgZGF0YS4gUmVtb3ZpbmcgZm9yIG5vdyBiZWNhdXNlIGl0IGRvZXNuJ3Qgc2VlbSB0byBtYWtlIG11Y2ggcHJhY3RpY2FsIGRpZmZlcmVuY2UgYW5kIGl0J3MgcHJvYmFibHkgbm90IHdvcnRoIHRoZSBrYi5cbiAgICAgIHYxID0gdjIgKyAodmFsdWUgLSB2MikgLyAodCAtIHQyKSAqICh0MSAtIHQyKTtcbiAgICB9XG4gIH0sXG4gICAgICByZXNldCA9IGZ1bmN0aW9uIHJlc2V0KCkge1xuICAgIHYyID0gdjEgPSB1c2VEZWx0YSA/IDAgOiB2MTtcbiAgICB0MiA9IHQxID0gMDtcbiAgfSxcbiAgICAgIGdldFZlbG9jaXR5ID0gZnVuY3Rpb24gZ2V0VmVsb2NpdHkobGF0ZXN0VmFsdWUpIHtcbiAgICB2YXIgdE9sZCA9IHQyLFxuICAgICAgICB2T2xkID0gdjIsXG4gICAgICAgIHQgPSBfZ2V0VGltZSgpO1xuXG4gICAgKGxhdGVzdFZhbHVlIHx8IGxhdGVzdFZhbHVlID09PSAwKSAmJiBsYXRlc3RWYWx1ZSAhPT0gdjEgJiYgdXBkYXRlKGxhdGVzdFZhbHVlKTtcbiAgICByZXR1cm4gdDEgPT09IHQyIHx8IHQgLSB0MiA+IGRyb3BUb1plcm9UaW1lID8gMCA6ICh2MSArICh1c2VEZWx0YSA/IHZPbGQgOiAtdk9sZCkpIC8gKCh1c2VEZWx0YSA/IHQgOiB0MSkgLSB0T2xkKSAqIDEwMDA7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICB1cGRhdGU6IHVwZGF0ZSxcbiAgICByZXNldDogcmVzZXQsXG4gICAgZ2V0VmVsb2NpdHk6IGdldFZlbG9jaXR5XG4gIH07XG59LFxuICAgIF9nZXRFdmVudCA9IGZ1bmN0aW9uIF9nZXRFdmVudChlLCBwcmV2ZW50RGVmYXVsdCkge1xuICBwcmV2ZW50RGVmYXVsdCAmJiAhZS5fZ3NhcEFsbG93ICYmIGUucHJldmVudERlZmF1bHQoKTtcbiAgcmV0dXJuIGUuY2hhbmdlZFRvdWNoZXMgPyBlLmNoYW5nZWRUb3VjaGVzWzBdIDogZTtcbn0sXG4gICAgX2dldEFic29sdXRlTWF4ID0gZnVuY3Rpb24gX2dldEFic29sdXRlTWF4KGEpIHtcbiAgdmFyIG1heCA9IE1hdGgubWF4LmFwcGx5KE1hdGgsIGEpLFxuICAgICAgbWluID0gTWF0aC5taW4uYXBwbHkoTWF0aCwgYSk7XG4gIHJldHVybiBNYXRoLmFicyhtYXgpID49IE1hdGguYWJzKG1pbikgPyBtYXggOiBtaW47XG59LFxuICAgIF9zZXRTY3JvbGxUcmlnZ2VyID0gZnVuY3Rpb24gX3NldFNjcm9sbFRyaWdnZXIoKSB7XG4gIFNjcm9sbFRyaWdnZXIgPSBnc2FwLmNvcmUuZ2xvYmFscygpLlNjcm9sbFRyaWdnZXI7XG4gIFNjcm9sbFRyaWdnZXIgJiYgU2Nyb2xsVHJpZ2dlci5jb3JlICYmIF9pbnRlZ3JhdGUoKTtcbn0sXG4gICAgX2luaXRDb3JlID0gZnVuY3Rpb24gX2luaXRDb3JlKGNvcmUpIHtcbiAgZ3NhcCA9IGNvcmUgfHwgX2dldEdTQVAoKTtcblxuICBpZiAoIV9jb3JlSW5pdHRlZCAmJiBnc2FwICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5ib2R5KSB7XG4gICAgX3dpbiA9IHdpbmRvdztcbiAgICBfZG9jID0gZG9jdW1lbnQ7XG4gICAgX2RvY0VsID0gX2RvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgX2JvZHkgPSBfZG9jLmJvZHk7XG4gICAgX3Jvb3QgPSBbX3dpbiwgX2RvYywgX2RvY0VsLCBfYm9keV07XG4gICAgX2NsYW1wID0gZ3NhcC51dGlscy5jbGFtcDtcblxuICAgIF9jb250ZXh0ID0gZ3NhcC5jb3JlLmNvbnRleHQgfHwgZnVuY3Rpb24gKCkge307XG5cbiAgICBfcG9pbnRlclR5cGUgPSBcIm9ucG9pbnRlcmVudGVyXCIgaW4gX2JvZHkgPyBcInBvaW50ZXJcIiA6IFwibW91c2VcIjsgLy8gaXNUb3VjaCBpcyAwIGlmIG5vIHRvdWNoLCAxIGlmIE9OTFkgdG91Y2gsIGFuZCAyIGlmIGl0IGNhbiBhY2NvbW1vZGF0ZSB0b3VjaCBidXQgYWxzbyBvdGhlciB0eXBlcyBsaWtlIG1vdXNlL3BvaW50ZXIuXG5cbiAgICBfaXNUb3VjaCA9IE9ic2VydmVyLmlzVG91Y2ggPSBfd2luLm1hdGNoTWVkaWEgJiYgX3dpbi5tYXRjaE1lZGlhKFwiKGhvdmVyOiBub25lKSwgKHBvaW50ZXI6IGNvYXJzZSlcIikubWF0Y2hlcyA/IDEgOiBcIm9udG91Y2hzdGFydFwiIGluIF93aW4gfHwgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMCB8fCBuYXZpZ2F0b3IubXNNYXhUb3VjaFBvaW50cyA+IDAgPyAyIDogMDtcbiAgICBfZXZlbnRUeXBlcyA9IE9ic2VydmVyLmV2ZW50VHlwZXMgPSAoXCJvbnRvdWNoc3RhcnRcIiBpbiBfZG9jRWwgPyBcInRvdWNoc3RhcnQsdG91Y2htb3ZlLHRvdWNoY2FuY2VsLHRvdWNoZW5kXCIgOiAhKFwib25wb2ludGVyZG93blwiIGluIF9kb2NFbCkgPyBcIm1vdXNlZG93bixtb3VzZW1vdmUsbW91c2V1cCxtb3VzZXVwXCIgOiBcInBvaW50ZXJkb3duLHBvaW50ZXJtb3ZlLHBvaW50ZXJjYW5jZWwscG9pbnRlcnVwXCIpLnNwbGl0KFwiLFwiKTtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfc3RhcnR1cCA9IDA7XG4gICAgfSwgNTAwKTtcblxuICAgIF9zZXRTY3JvbGxUcmlnZ2VyKCk7XG5cbiAgICBfY29yZUluaXR0ZWQgPSAxO1xuICB9XG5cbiAgcmV0dXJuIF9jb3JlSW5pdHRlZDtcbn07XG5cbl9ob3Jpem9udGFsLm9wID0gX3ZlcnRpY2FsO1xuX3Njcm9sbGVycy5jYWNoZSA9IDA7XG5leHBvcnQgdmFyIE9ic2VydmVyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gT2JzZXJ2ZXIodmFycykge1xuICAgIHRoaXMuaW5pdCh2YXJzKTtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBPYnNlcnZlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmluaXQgPSBmdW5jdGlvbiBpbml0KHZhcnMpIHtcbiAgICBfY29yZUluaXR0ZWQgfHwgX2luaXRDb3JlKGdzYXApIHx8IGNvbnNvbGUud2FybihcIlBsZWFzZSBnc2FwLnJlZ2lzdGVyUGx1Z2luKE9ic2VydmVyKVwiKTtcbiAgICBTY3JvbGxUcmlnZ2VyIHx8IF9zZXRTY3JvbGxUcmlnZ2VyKCk7XG4gICAgdmFyIHRvbGVyYW5jZSA9IHZhcnMudG9sZXJhbmNlLFxuICAgICAgICBkcmFnTWluaW11bSA9IHZhcnMuZHJhZ01pbmltdW0sXG4gICAgICAgIHR5cGUgPSB2YXJzLnR5cGUsXG4gICAgICAgIHRhcmdldCA9IHZhcnMudGFyZ2V0LFxuICAgICAgICBsaW5lSGVpZ2h0ID0gdmFycy5saW5lSGVpZ2h0LFxuICAgICAgICBkZWJvdW5jZSA9IHZhcnMuZGVib3VuY2UsXG4gICAgICAgIHByZXZlbnREZWZhdWx0ID0gdmFycy5wcmV2ZW50RGVmYXVsdCxcbiAgICAgICAgb25TdG9wID0gdmFycy5vblN0b3AsXG4gICAgICAgIG9uU3RvcERlbGF5ID0gdmFycy5vblN0b3BEZWxheSxcbiAgICAgICAgaWdub3JlID0gdmFycy5pZ25vcmUsXG4gICAgICAgIHdoZWVsU3BlZWQgPSB2YXJzLndoZWVsU3BlZWQsXG4gICAgICAgIGV2ZW50ID0gdmFycy5ldmVudCxcbiAgICAgICAgb25EcmFnU3RhcnQgPSB2YXJzLm9uRHJhZ1N0YXJ0LFxuICAgICAgICBvbkRyYWdFbmQgPSB2YXJzLm9uRHJhZ0VuZCxcbiAgICAgICAgb25EcmFnID0gdmFycy5vbkRyYWcsXG4gICAgICAgIG9uUHJlc3MgPSB2YXJzLm9uUHJlc3MsXG4gICAgICAgIG9uUmVsZWFzZSA9IHZhcnMub25SZWxlYXNlLFxuICAgICAgICBvblJpZ2h0ID0gdmFycy5vblJpZ2h0LFxuICAgICAgICBvbkxlZnQgPSB2YXJzLm9uTGVmdCxcbiAgICAgICAgb25VcCA9IHZhcnMub25VcCxcbiAgICAgICAgb25Eb3duID0gdmFycy5vbkRvd24sXG4gICAgICAgIG9uQ2hhbmdlWCA9IHZhcnMub25DaGFuZ2VYLFxuICAgICAgICBvbkNoYW5nZVkgPSB2YXJzLm9uQ2hhbmdlWSxcbiAgICAgICAgb25DaGFuZ2UgPSB2YXJzLm9uQ2hhbmdlLFxuICAgICAgICBvblRvZ2dsZVggPSB2YXJzLm9uVG9nZ2xlWCxcbiAgICAgICAgb25Ub2dnbGVZID0gdmFycy5vblRvZ2dsZVksXG4gICAgICAgIG9uSG92ZXIgPSB2YXJzLm9uSG92ZXIsXG4gICAgICAgIG9uSG92ZXJFbmQgPSB2YXJzLm9uSG92ZXJFbmQsXG4gICAgICAgIG9uTW92ZSA9IHZhcnMub25Nb3ZlLFxuICAgICAgICBpZ25vcmVDaGVjayA9IHZhcnMuaWdub3JlQ2hlY2ssXG4gICAgICAgIGlzTm9ybWFsaXplciA9IHZhcnMuaXNOb3JtYWxpemVyLFxuICAgICAgICBvbkdlc3R1cmVTdGFydCA9IHZhcnMub25HZXN0dXJlU3RhcnQsXG4gICAgICAgIG9uR2VzdHVyZUVuZCA9IHZhcnMub25HZXN0dXJlRW5kLFxuICAgICAgICBvbldoZWVsID0gdmFycy5vbldoZWVsLFxuICAgICAgICBvbkVuYWJsZSA9IHZhcnMub25FbmFibGUsXG4gICAgICAgIG9uRGlzYWJsZSA9IHZhcnMub25EaXNhYmxlLFxuICAgICAgICBvbkNsaWNrID0gdmFycy5vbkNsaWNrLFxuICAgICAgICBzY3JvbGxTcGVlZCA9IHZhcnMuc2Nyb2xsU3BlZWQsXG4gICAgICAgIGNhcHR1cmUgPSB2YXJzLmNhcHR1cmUsXG4gICAgICAgIGFsbG93Q2xpY2tzID0gdmFycy5hbGxvd0NsaWNrcyxcbiAgICAgICAgbG9ja0F4aXMgPSB2YXJzLmxvY2tBeGlzLFxuICAgICAgICBvbkxvY2tBeGlzID0gdmFycy5vbkxvY2tBeGlzO1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0ID0gX2dldFRhcmdldCh0YXJnZXQpIHx8IF9kb2NFbDtcbiAgICB0aGlzLnZhcnMgPSB2YXJzO1xuICAgIGlnbm9yZSAmJiAoaWdub3JlID0gZ3NhcC51dGlscy50b0FycmF5KGlnbm9yZSkpO1xuICAgIHRvbGVyYW5jZSA9IHRvbGVyYW5jZSB8fCAxZS05O1xuICAgIGRyYWdNaW5pbXVtID0gZHJhZ01pbmltdW0gfHwgMDtcbiAgICB3aGVlbFNwZWVkID0gd2hlZWxTcGVlZCB8fCAxO1xuICAgIHNjcm9sbFNwZWVkID0gc2Nyb2xsU3BlZWQgfHwgMTtcbiAgICB0eXBlID0gdHlwZSB8fCBcIndoZWVsLHRvdWNoLHBvaW50ZXJcIjtcbiAgICBkZWJvdW5jZSA9IGRlYm91bmNlICE9PSBmYWxzZTtcbiAgICBsaW5lSGVpZ2h0IHx8IChsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdChfd2luLmdldENvbXB1dGVkU3R5bGUoX2JvZHkpLmxpbmVIZWlnaHQpIHx8IDIyKTsgLy8gbm90ZTogYnJvd3NlciBtYXkgcmVwb3J0IFwibm9ybWFsXCIsIHNvIGRlZmF1bHQgdG8gMjIuXG5cbiAgICB2YXIgaWQsXG4gICAgICAgIG9uU3RvcERlbGF5ZWRDYWxsLFxuICAgICAgICBkcmFnZ2VkLFxuICAgICAgICBtb3ZlZCxcbiAgICAgICAgd2hlZWxlZCxcbiAgICAgICAgbG9ja2VkLFxuICAgICAgICBheGlzLFxuICAgICAgICBzZWxmID0gdGhpcyxcbiAgICAgICAgcHJldkRlbHRhWCA9IDAsXG4gICAgICAgIHByZXZEZWx0YVkgPSAwLFxuICAgICAgICBwYXNzaXZlID0gdmFycy5wYXNzaXZlIHx8ICFwcmV2ZW50RGVmYXVsdCAmJiB2YXJzLnBhc3NpdmUgIT09IGZhbHNlLFxuICAgICAgICBzY3JvbGxGdW5jWCA9IF9nZXRTY3JvbGxGdW5jKHRhcmdldCwgX2hvcml6b250YWwpLFxuICAgICAgICBzY3JvbGxGdW5jWSA9IF9nZXRTY3JvbGxGdW5jKHRhcmdldCwgX3ZlcnRpY2FsKSxcbiAgICAgICAgc2Nyb2xsWCA9IHNjcm9sbEZ1bmNYKCksXG4gICAgICAgIHNjcm9sbFkgPSBzY3JvbGxGdW5jWSgpLFxuICAgICAgICBsaW1pdFRvVG91Y2ggPSB+dHlwZS5pbmRleE9mKFwidG91Y2hcIikgJiYgIX50eXBlLmluZGV4T2YoXCJwb2ludGVyXCIpICYmIF9ldmVudFR5cGVzWzBdID09PSBcInBvaW50ZXJkb3duXCIsXG4gICAgICAgIC8vIGZvciBkZXZpY2VzIHRoYXQgYWNjb21tb2RhdGUgbW91c2UgZXZlbnRzIGFuZCB0b3VjaCBldmVudHMsIHdlIG5lZWQgdG8gZGlzdGluZ3Vpc2guXG4gICAgaXNWaWV3cG9ydCA9IF9pc1ZpZXdwb3J0KHRhcmdldCksXG4gICAgICAgIG93bmVyRG9jID0gdGFyZ2V0Lm93bmVyRG9jdW1lbnQgfHwgX2RvYyxcbiAgICAgICAgZGVsdGFYID0gWzAsIDAsIDBdLFxuICAgICAgICAvLyB3aGVlbCwgc2Nyb2xsLCBwb2ludGVyL3RvdWNoXG4gICAgZGVsdGFZID0gWzAsIDAsIDBdLFxuICAgICAgICBvbkNsaWNrVGltZSA9IDAsXG4gICAgICAgIGNsaWNrQ2FwdHVyZSA9IGZ1bmN0aW9uIGNsaWNrQ2FwdHVyZSgpIHtcbiAgICAgIHJldHVybiBvbkNsaWNrVGltZSA9IF9nZXRUaW1lKCk7XG4gICAgfSxcbiAgICAgICAgX2lnbm9yZUNoZWNrID0gZnVuY3Rpb24gX2lnbm9yZUNoZWNrKGUsIGlzUG9pbnRlck9yVG91Y2gpIHtcbiAgICAgIHJldHVybiAoc2VsZi5ldmVudCA9IGUpICYmIGlnbm9yZSAmJiB+aWdub3JlLmluZGV4T2YoZS50YXJnZXQpIHx8IGlzUG9pbnRlck9yVG91Y2ggJiYgbGltaXRUb1RvdWNoICYmIGUucG9pbnRlclR5cGUgIT09IFwidG91Y2hcIiB8fCBpZ25vcmVDaGVjayAmJiBpZ25vcmVDaGVjayhlLCBpc1BvaW50ZXJPclRvdWNoKTtcbiAgICB9LFxuICAgICAgICBvblN0b3BGdW5jID0gZnVuY3Rpb24gb25TdG9wRnVuYygpIHtcbiAgICAgIHNlbGYuX3Z4LnJlc2V0KCk7XG5cbiAgICAgIHNlbGYuX3Z5LnJlc2V0KCk7XG5cbiAgICAgIG9uU3RvcERlbGF5ZWRDYWxsLnBhdXNlKCk7XG4gICAgICBvblN0b3AgJiYgb25TdG9wKHNlbGYpO1xuICAgIH0sXG4gICAgICAgIHVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgIHZhciBkeCA9IHNlbGYuZGVsdGFYID0gX2dldEFic29sdXRlTWF4KGRlbHRhWCksXG4gICAgICAgICAgZHkgPSBzZWxmLmRlbHRhWSA9IF9nZXRBYnNvbHV0ZU1heChkZWx0YVkpLFxuICAgICAgICAgIGNoYW5nZWRYID0gTWF0aC5hYnMoZHgpID49IHRvbGVyYW5jZSxcbiAgICAgICAgICBjaGFuZ2VkWSA9IE1hdGguYWJzKGR5KSA+PSB0b2xlcmFuY2U7XG5cbiAgICAgIG9uQ2hhbmdlICYmIChjaGFuZ2VkWCB8fCBjaGFuZ2VkWSkgJiYgb25DaGFuZ2Uoc2VsZiwgZHgsIGR5LCBkZWx0YVgsIGRlbHRhWSk7IC8vIGluIFNjcm9sbFRyaWdnZXIubm9ybWFsaXplU2Nyb2xsKCksIHdlIG5lZWQgdG8ga25vdyBpZiBpdCB3YXMgdG91Y2gvcG9pbnRlciBzbyB3ZSBuZWVkIGFjY2VzcyB0byB0aGUgZGVsdGFYL2RlbHRhWSBBcnJheXMgYmVmb3JlIHdlIGNsZWFyIHRoZW0gb3V0LlxuXG4gICAgICBpZiAoY2hhbmdlZFgpIHtcbiAgICAgICAgb25SaWdodCAmJiBzZWxmLmRlbHRhWCA+IDAgJiYgb25SaWdodChzZWxmKTtcbiAgICAgICAgb25MZWZ0ICYmIHNlbGYuZGVsdGFYIDwgMCAmJiBvbkxlZnQoc2VsZik7XG4gICAgICAgIG9uQ2hhbmdlWCAmJiBvbkNoYW5nZVgoc2VsZik7XG4gICAgICAgIG9uVG9nZ2xlWCAmJiBzZWxmLmRlbHRhWCA8IDAgIT09IHByZXZEZWx0YVggPCAwICYmIG9uVG9nZ2xlWChzZWxmKTtcbiAgICAgICAgcHJldkRlbHRhWCA9IHNlbGYuZGVsdGFYO1xuICAgICAgICBkZWx0YVhbMF0gPSBkZWx0YVhbMV0gPSBkZWx0YVhbMl0gPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlZFkpIHtcbiAgICAgICAgb25Eb3duICYmIHNlbGYuZGVsdGFZID4gMCAmJiBvbkRvd24oc2VsZik7XG4gICAgICAgIG9uVXAgJiYgc2VsZi5kZWx0YVkgPCAwICYmIG9uVXAoc2VsZik7XG4gICAgICAgIG9uQ2hhbmdlWSAmJiBvbkNoYW5nZVkoc2VsZik7XG4gICAgICAgIG9uVG9nZ2xlWSAmJiBzZWxmLmRlbHRhWSA8IDAgIT09IHByZXZEZWx0YVkgPCAwICYmIG9uVG9nZ2xlWShzZWxmKTtcbiAgICAgICAgcHJldkRlbHRhWSA9IHNlbGYuZGVsdGFZO1xuICAgICAgICBkZWx0YVlbMF0gPSBkZWx0YVlbMV0gPSBkZWx0YVlbMl0gPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAobW92ZWQgfHwgZHJhZ2dlZCkge1xuICAgICAgICBvbk1vdmUgJiYgb25Nb3ZlKHNlbGYpO1xuXG4gICAgICAgIGlmIChkcmFnZ2VkKSB7XG4gICAgICAgICAgb25EcmFnU3RhcnQgJiYgZHJhZ2dlZCA9PT0gMSAmJiBvbkRyYWdTdGFydChzZWxmKTtcbiAgICAgICAgICBvbkRyYWcgJiYgb25EcmFnKHNlbGYpO1xuICAgICAgICAgIGRyYWdnZWQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbW92ZWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgbG9ja2VkICYmICEobG9ja2VkID0gZmFsc2UpICYmIG9uTG9ja0F4aXMgJiYgb25Mb2NrQXhpcyhzZWxmKTtcblxuICAgICAgaWYgKHdoZWVsZWQpIHtcbiAgICAgICAgb25XaGVlbChzZWxmKTtcbiAgICAgICAgd2hlZWxlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZCA9IDA7XG4gICAgfSxcbiAgICAgICAgb25EZWx0YSA9IGZ1bmN0aW9uIG9uRGVsdGEoeCwgeSwgaW5kZXgpIHtcbiAgICAgIGRlbHRhWFtpbmRleF0gKz0geDtcbiAgICAgIGRlbHRhWVtpbmRleF0gKz0geTtcblxuICAgICAgc2VsZi5fdngudXBkYXRlKHgpO1xuXG4gICAgICBzZWxmLl92eS51cGRhdGUoeSk7XG5cbiAgICAgIGRlYm91bmNlID8gaWQgfHwgKGlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZSkpIDogdXBkYXRlKCk7XG4gICAgfSxcbiAgICAgICAgb25Ub3VjaE9yUG9pbnRlckRlbHRhID0gZnVuY3Rpb24gb25Ub3VjaE9yUG9pbnRlckRlbHRhKHgsIHkpIHtcbiAgICAgIGlmIChsb2NrQXhpcyAmJiAhYXhpcykge1xuICAgICAgICBzZWxmLmF4aXMgPSBheGlzID0gTWF0aC5hYnMoeCkgPiBNYXRoLmFicyh5KSA/IFwieFwiIDogXCJ5XCI7XG4gICAgICAgIGxvY2tlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChheGlzICE9PSBcInlcIikge1xuICAgICAgICBkZWx0YVhbMl0gKz0geDtcblxuICAgICAgICBzZWxmLl92eC51cGRhdGUoeCwgdHJ1ZSk7IC8vIHVwZGF0ZSB0aGUgdmVsb2NpdHkgYXMgZnJlcXVlbnRseSBhcyBwb3NzaWJsZSBpbnN0ZWFkIG9mIGluIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gc28gdGhhdCB2ZXJ5IHF1aWNrIHRvdWNoLXNjcm9sbHMgKGZsaWNrcykgZmVlbCBuYXR1cmFsLiBJZiBpdCdzIHRoZSBtb3VzZS90b3VjaC9wb2ludGVyLCBmb3JjZSBpdCBzbyB0aGF0IHdlIGdldCBzbmFwcHkvYWNjdXJhdGUgbW9tZW50dW0gc2Nyb2xsLlxuXG4gICAgICB9XG5cbiAgICAgIGlmIChheGlzICE9PSBcInhcIikge1xuICAgICAgICBkZWx0YVlbMl0gKz0geTtcblxuICAgICAgICBzZWxmLl92eS51cGRhdGUoeSwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGRlYm91bmNlID8gaWQgfHwgKGlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZSkpIDogdXBkYXRlKCk7XG4gICAgfSxcbiAgICAgICAgX29uRHJhZyA9IGZ1bmN0aW9uIF9vbkRyYWcoZSkge1xuICAgICAgaWYgKF9pZ25vcmVDaGVjayhlLCAxKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGUgPSBfZ2V0RXZlbnQoZSwgcHJldmVudERlZmF1bHQpO1xuICAgICAgdmFyIHggPSBlLmNsaWVudFgsXG4gICAgICAgICAgeSA9IGUuY2xpZW50WSxcbiAgICAgICAgICBkeCA9IHggLSBzZWxmLngsXG4gICAgICAgICAgZHkgPSB5IC0gc2VsZi55LFxuICAgICAgICAgIGlzRHJhZ2dpbmcgPSBzZWxmLmlzRHJhZ2dpbmc7XG4gICAgICBzZWxmLnggPSB4O1xuICAgICAgc2VsZi55ID0geTtcblxuICAgICAgaWYgKGlzRHJhZ2dpbmcgfHwgKGR4IHx8IGR5KSAmJiAoTWF0aC5hYnMoc2VsZi5zdGFydFggLSB4KSA+PSBkcmFnTWluaW11bSB8fCBNYXRoLmFicyhzZWxmLnN0YXJ0WSAtIHkpID49IGRyYWdNaW5pbXVtKSkge1xuICAgICAgICBkcmFnZ2VkID0gaXNEcmFnZ2luZyA/IDIgOiAxOyAvLyBkcmFnZ2VkOiAwID0gbm90IGRyYWdnaW5nLCAxID0gZmlyc3QgZHJhZywgMiA9IG5vcm1hbCBkcmFnXG5cbiAgICAgICAgaXNEcmFnZ2luZyB8fCAoc2VsZi5pc0RyYWdnaW5nID0gdHJ1ZSk7XG4gICAgICAgIG9uVG91Y2hPclBvaW50ZXJEZWx0YShkeCwgZHkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgICAgIF9vblByZXNzID0gc2VsZi5vblByZXNzID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChfaWdub3JlQ2hlY2soZSwgMSkgfHwgZSAmJiBlLmJ1dHRvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNlbGYuYXhpcyA9IGF4aXMgPSBudWxsO1xuICAgICAgb25TdG9wRGVsYXllZENhbGwucGF1c2UoKTtcbiAgICAgIHNlbGYuaXNQcmVzc2VkID0gdHJ1ZTtcbiAgICAgIGUgPSBfZ2V0RXZlbnQoZSk7IC8vIG5vdGU6IG1heSBuZWVkIHRvIHByZXZlbnREZWZhdWx0KD8pIFdvbid0IHNpZGUtc2Nyb2xsIG9uIGlPUyBTYWZhcmkgaWYgd2UgZG8sIHRob3VnaC5cblxuICAgICAgcHJldkRlbHRhWCA9IHByZXZEZWx0YVkgPSAwO1xuICAgICAgc2VsZi5zdGFydFggPSBzZWxmLnggPSBlLmNsaWVudFg7XG4gICAgICBzZWxmLnN0YXJ0WSA9IHNlbGYueSA9IGUuY2xpZW50WTtcblxuICAgICAgc2VsZi5fdngucmVzZXQoKTsgLy8gb3RoZXJ3aXNlIHRoZSB0MiBtYXkgYmUgc3RhbGUgaWYgdGhlIHVzZXIgdG91Y2hlcyBhbmQgZmxpY2tzIHN1cGVyIGZhc3QgYW5kIHJlbGVhc2VzIGluIGxlc3MgdGhhbiAyIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0aWNrcywgY2F1c2luZyB2ZWxvY2l0eSB0byBiZSAwLlxuXG5cbiAgICAgIHNlbGYuX3Z5LnJlc2V0KCk7XG5cbiAgICAgIF9hZGRMaXN0ZW5lcihpc05vcm1hbGl6ZXIgPyB0YXJnZXQgOiBvd25lckRvYywgX2V2ZW50VHlwZXNbMV0sIF9vbkRyYWcsIHBhc3NpdmUsIHRydWUpO1xuXG4gICAgICBzZWxmLmRlbHRhWCA9IHNlbGYuZGVsdGFZID0gMDtcbiAgICAgIG9uUHJlc3MgJiYgb25QcmVzcyhzZWxmKTtcbiAgICB9LFxuICAgICAgICBfb25SZWxlYXNlID0gc2VsZi5vblJlbGVhc2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgaWYgKF9pZ25vcmVDaGVjayhlLCAxKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF9yZW1vdmVMaXN0ZW5lcihpc05vcm1hbGl6ZXIgPyB0YXJnZXQgOiBvd25lckRvYywgX2V2ZW50VHlwZXNbMV0sIF9vbkRyYWcsIHRydWUpO1xuXG4gICAgICB2YXIgaXNUcmFja2luZ0RyYWcgPSAhaXNOYU4oc2VsZi55IC0gc2VsZi5zdGFydFkpLFxuICAgICAgICAgIHdhc0RyYWdnaW5nID0gc2VsZi5pc0RyYWdnaW5nLFxuICAgICAgICAgIGlzRHJhZ05vdENsaWNrID0gd2FzRHJhZ2dpbmcgJiYgKE1hdGguYWJzKHNlbGYueCAtIHNlbGYuc3RhcnRYKSA+IDMgfHwgTWF0aC5hYnMoc2VsZi55IC0gc2VsZi5zdGFydFkpID4gMyksXG4gICAgICAgICAgLy8gc29tZSB0b3VjaCBkZXZpY2VzIG5lZWQgc29tZSB3aWdnbGUgcm9vbSBpbiB0ZXJtcyBvZiBzZW5zaW5nIGNsaWNrcyAtIHRoZSBmaW5nZXIgbWF5IG1vdmUgYSBmZXcgcGl4ZWxzLlxuICAgICAgZXZlbnREYXRhID0gX2dldEV2ZW50KGUpO1xuXG4gICAgICBpZiAoIWlzRHJhZ05vdENsaWNrICYmIGlzVHJhY2tpbmdEcmFnKSB7XG4gICAgICAgIHNlbGYuX3Z4LnJlc2V0KCk7XG5cbiAgICAgICAgc2VsZi5fdnkucmVzZXQoKTsgLy9pZiAocHJldmVudERlZmF1bHQgJiYgYWxsb3dDbGlja3MgJiYgc2VsZi5pc1ByZXNzZWQpIHsgLy8gY2hlY2sgaXNQcmVzc2VkIGJlY2F1c2UgaW4gYSByYXJlIGVkZ2UgY2FzZSwgdGhlIGlucHV0T2JzZXJ2ZXIgaW4gU2Nyb2xsVHJpZ2dlciBtYXkgc3RvcFByb3BhZ2F0aW9uKCkgb24gdGhlIHByZXNzL2RyYWcsIHNvIHRoZSBvblJlbGVhc2UgbWF5IGdldCBmaXJlZCB3aXRob3V0IHRoZSBvblByZXNzL29uRHJhZyBldmVyIGdldHRpbmcgY2FsbGVkLCB0aHVzIGl0IGNvdWxkIHRyaWdnZXIgYSBjbGljayB0byBvY2N1ciBvbiBhIGxpbmsgYWZ0ZXIgc2Nyb2xsLWRyYWdnaW5nIGl0LlxuXG5cbiAgICAgICAgaWYgKHByZXZlbnREZWZhdWx0ICYmIGFsbG93Q2xpY2tzKSB7XG4gICAgICAgICAgZ3NhcC5kZWxheWVkQ2FsbCgwLjA4LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBzb21lIGJyb3dzZXJzIChsaWtlIEZpcmVmb3gpIHdvbid0IHRydXN0IHNjcmlwdC1nZW5lcmF0ZWQgY2xpY2tzLCBzbyBpZiB0aGUgdXNlciB0cmllcyB0byBjbGljayBvbiBhIHZpZGVvIHRvIHBsYXkgaXQsIGZvciBleGFtcGxlLCBpdCBzaW1wbHkgd29uJ3Qgd29yay4gU2luY2UgYSByZWd1bGFyIFwiY2xpY2tcIiBldmVudCB3aWxsIG1vc3QgbGlrZWx5IGJlIGdlbmVyYXRlZCBhbnl3YXkgKG9uZSB0aGF0IGhhcyBpdHMgaXNUcnVzdGVkIGZsYWcgc2V0IHRvIHRydWUpLCB3ZSBtdXN0IHNsaWdodGx5IGRlbGF5IG91ciBzY3JpcHQtZ2VuZXJhdGVkIGNsaWNrIHNvIHRoYXQgdGhlIFwicmVhbFwiL3RydXN0ZWQgb25lIGlzIHByaW9yaXRpemVkLiBSZW1lbWJlciwgd2hlbiB0aGVyZSBhcmUgZHVwbGljYXRlIGV2ZW50cyBpbiBxdWljayBzdWNjZXNzaW9uLCB3ZSBzdXBwcmVzcyBhbGwgYnV0IHRoZSBmaXJzdCBvbmUuIFNvbWUgYnJvd3NlcnMgZG9uJ3QgZXZlbiB0cmlnZ2VyIHRoZSBcInJlYWxcIiBvbmUgYXQgYWxsLCBzbyBvdXIgc3ludGhldGljIG9uZSBpcyBhIHNhZmV0eSB2YWx2ZSB0aGF0IGVuc3VyZXMgdGhhdCBubyBtYXR0ZXIgd2hhdCwgYSBjbGljayBldmVudCBkb2VzIGdldCBkaXNwYXRjaGVkLlxuICAgICAgICAgICAgaWYgKF9nZXRUaW1lKCkgLSBvbkNsaWNrVGltZSA+IDMwMCAmJiAhZS5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgIGlmIChlLnRhcmdldC5jbGljaykge1xuICAgICAgICAgICAgICAgIC8vc29tZSBicm93c2VycyAobGlrZSBtb2JpbGUgU2FmYXJpKSBkb24ndCBwcm9wZXJseSB0cmlnZ2VyIHRoZSBjbGljayBldmVudFxuICAgICAgICAgICAgICAgIGUudGFyZ2V0LmNsaWNrKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAob3duZXJEb2MuY3JlYXRlRXZlbnQpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3ludGhldGljRXZlbnQgPSBvd25lckRvYy5jcmVhdGVFdmVudChcIk1vdXNlRXZlbnRzXCIpO1xuICAgICAgICAgICAgICAgIHN5bnRoZXRpY0V2ZW50LmluaXRNb3VzZUV2ZW50KFwiY2xpY2tcIiwgdHJ1ZSwgdHJ1ZSwgX3dpbiwgMSwgZXZlbnREYXRhLnNjcmVlblgsIGV2ZW50RGF0YS5zY3JlZW5ZLCBldmVudERhdGEuY2xpZW50WCwgZXZlbnREYXRhLmNsaWVudFksIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLCBudWxsKTtcbiAgICAgICAgICAgICAgICBlLnRhcmdldC5kaXNwYXRjaEV2ZW50KHN5bnRoZXRpY0V2ZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNlbGYuaXNEcmFnZ2luZyA9IHNlbGYuaXNHZXN0dXJpbmcgPSBzZWxmLmlzUHJlc3NlZCA9IGZhbHNlO1xuICAgICAgb25TdG9wICYmIHdhc0RyYWdnaW5nICYmICFpc05vcm1hbGl6ZXIgJiYgb25TdG9wRGVsYXllZENhbGwucmVzdGFydCh0cnVlKTtcbiAgICAgIGRyYWdnZWQgJiYgdXBkYXRlKCk7IC8vIGluIGNhc2UgZGVib3VuY2luZywgd2UgZG9uJ3Qgd2FudCBvbkRyYWcgdG8gZmlyZSBBRlRFUiBvbkRyYWdFbmQoKS5cblxuICAgICAgb25EcmFnRW5kICYmIHdhc0RyYWdnaW5nICYmIG9uRHJhZ0VuZChzZWxmKTtcbiAgICAgIG9uUmVsZWFzZSAmJiBvblJlbGVhc2Uoc2VsZiwgaXNEcmFnTm90Q2xpY2spO1xuICAgIH0sXG4gICAgICAgIF9vbkdlc3R1cmVTdGFydCA9IGZ1bmN0aW9uIF9vbkdlc3R1cmVTdGFydChlKSB7XG4gICAgICByZXR1cm4gZS50b3VjaGVzICYmIGUudG91Y2hlcy5sZW5ndGggPiAxICYmIChzZWxmLmlzR2VzdHVyaW5nID0gdHJ1ZSkgJiYgb25HZXN0dXJlU3RhcnQoZSwgc2VsZi5pc0RyYWdnaW5nKTtcbiAgICB9LFxuICAgICAgICBfb25HZXN0dXJlRW5kID0gZnVuY3Rpb24gX29uR2VzdHVyZUVuZCgpIHtcbiAgICAgIHJldHVybiAoc2VsZi5pc0dlc3R1cmluZyA9IGZhbHNlKSB8fCBvbkdlc3R1cmVFbmQoc2VsZik7XG4gICAgfSxcbiAgICAgICAgb25TY3JvbGwgPSBmdW5jdGlvbiBvblNjcm9sbChlKSB7XG4gICAgICBpZiAoX2lnbm9yZUNoZWNrKGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIHggPSBzY3JvbGxGdW5jWCgpLFxuICAgICAgICAgIHkgPSBzY3JvbGxGdW5jWSgpO1xuICAgICAgb25EZWx0YSgoeCAtIHNjcm9sbFgpICogc2Nyb2xsU3BlZWQsICh5IC0gc2Nyb2xsWSkgKiBzY3JvbGxTcGVlZCwgMSk7XG4gICAgICBzY3JvbGxYID0geDtcbiAgICAgIHNjcm9sbFkgPSB5O1xuICAgICAgb25TdG9wICYmIG9uU3RvcERlbGF5ZWRDYWxsLnJlc3RhcnQodHJ1ZSk7XG4gICAgfSxcbiAgICAgICAgX29uV2hlZWwgPSBmdW5jdGlvbiBfb25XaGVlbChlKSB7XG4gICAgICBpZiAoX2lnbm9yZUNoZWNrKGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZSA9IF9nZXRFdmVudChlLCBwcmV2ZW50RGVmYXVsdCk7XG4gICAgICBvbldoZWVsICYmICh3aGVlbGVkID0gdHJ1ZSk7XG4gICAgICB2YXIgbXVsdGlwbGllciA9IChlLmRlbHRhTW9kZSA9PT0gMSA/IGxpbmVIZWlnaHQgOiBlLmRlbHRhTW9kZSA9PT0gMiA/IF93aW4uaW5uZXJIZWlnaHQgOiAxKSAqIHdoZWVsU3BlZWQ7XG4gICAgICBvbkRlbHRhKGUuZGVsdGFYICogbXVsdGlwbGllciwgZS5kZWx0YVkgKiBtdWx0aXBsaWVyLCAwKTtcbiAgICAgIG9uU3RvcCAmJiAhaXNOb3JtYWxpemVyICYmIG9uU3RvcERlbGF5ZWRDYWxsLnJlc3RhcnQodHJ1ZSk7XG4gICAgfSxcbiAgICAgICAgX29uTW92ZSA9IGZ1bmN0aW9uIF9vbk1vdmUoZSkge1xuICAgICAgaWYgKF9pZ25vcmVDaGVjayhlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciB4ID0gZS5jbGllbnRYLFxuICAgICAgICAgIHkgPSBlLmNsaWVudFksXG4gICAgICAgICAgZHggPSB4IC0gc2VsZi54LFxuICAgICAgICAgIGR5ID0geSAtIHNlbGYueTtcbiAgICAgIHNlbGYueCA9IHg7XG4gICAgICBzZWxmLnkgPSB5O1xuICAgICAgbW92ZWQgPSB0cnVlO1xuICAgICAgb25TdG9wICYmIG9uU3RvcERlbGF5ZWRDYWxsLnJlc3RhcnQodHJ1ZSk7XG4gICAgICAoZHggfHwgZHkpICYmIG9uVG91Y2hPclBvaW50ZXJEZWx0YShkeCwgZHkpO1xuICAgIH0sXG4gICAgICAgIF9vbkhvdmVyID0gZnVuY3Rpb24gX29uSG92ZXIoZSkge1xuICAgICAgc2VsZi5ldmVudCA9IGU7XG4gICAgICBvbkhvdmVyKHNlbGYpO1xuICAgIH0sXG4gICAgICAgIF9vbkhvdmVyRW5kID0gZnVuY3Rpb24gX29uSG92ZXJFbmQoZSkge1xuICAgICAgc2VsZi5ldmVudCA9IGU7XG4gICAgICBvbkhvdmVyRW5kKHNlbGYpO1xuICAgIH0sXG4gICAgICAgIF9vbkNsaWNrID0gZnVuY3Rpb24gX29uQ2xpY2soZSkge1xuICAgICAgcmV0dXJuIF9pZ25vcmVDaGVjayhlKSB8fCBfZ2V0RXZlbnQoZSwgcHJldmVudERlZmF1bHQpICYmIG9uQ2xpY2soc2VsZik7XG4gICAgfTtcblxuICAgIG9uU3RvcERlbGF5ZWRDYWxsID0gc2VsZi5fZGMgPSBnc2FwLmRlbGF5ZWRDYWxsKG9uU3RvcERlbGF5IHx8IDAuMjUsIG9uU3RvcEZ1bmMpLnBhdXNlKCk7XG4gICAgc2VsZi5kZWx0YVggPSBzZWxmLmRlbHRhWSA9IDA7XG4gICAgc2VsZi5fdnggPSBfZ2V0VmVsb2NpdHlQcm9wKDAsIDUwLCB0cnVlKTtcbiAgICBzZWxmLl92eSA9IF9nZXRWZWxvY2l0eVByb3AoMCwgNTAsIHRydWUpO1xuICAgIHNlbGYuc2Nyb2xsWCA9IHNjcm9sbEZ1bmNYO1xuICAgIHNlbGYuc2Nyb2xsWSA9IHNjcm9sbEZ1bmNZO1xuICAgIHNlbGYuaXNEcmFnZ2luZyA9IHNlbGYuaXNHZXN0dXJpbmcgPSBzZWxmLmlzUHJlc3NlZCA9IGZhbHNlO1xuXG4gICAgX2NvbnRleHQodGhpcyk7XG5cbiAgICBzZWxmLmVuYWJsZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICBpZiAoIXNlbGYuaXNFbmFibGVkKSB7XG4gICAgICAgIF9hZGRMaXN0ZW5lcihpc1ZpZXdwb3J0ID8gb3duZXJEb2MgOiB0YXJnZXQsIFwic2Nyb2xsXCIsIF9vblNjcm9sbCk7XG5cbiAgICAgICAgdHlwZS5pbmRleE9mKFwic2Nyb2xsXCIpID49IDAgJiYgX2FkZExpc3RlbmVyKGlzVmlld3BvcnQgPyBvd25lckRvYyA6IHRhcmdldCwgXCJzY3JvbGxcIiwgb25TY3JvbGwsIHBhc3NpdmUsIGNhcHR1cmUpO1xuICAgICAgICB0eXBlLmluZGV4T2YoXCJ3aGVlbFwiKSA+PSAwICYmIF9hZGRMaXN0ZW5lcih0YXJnZXQsIFwid2hlZWxcIiwgX29uV2hlZWwsIHBhc3NpdmUsIGNhcHR1cmUpO1xuXG4gICAgICAgIGlmICh0eXBlLmluZGV4T2YoXCJ0b3VjaFwiKSA+PSAwICYmIF9pc1RvdWNoIHx8IHR5cGUuaW5kZXhPZihcInBvaW50ZXJcIikgPj0gMCkge1xuICAgICAgICAgIF9hZGRMaXN0ZW5lcih0YXJnZXQsIF9ldmVudFR5cGVzWzBdLCBfb25QcmVzcywgcGFzc2l2ZSwgY2FwdHVyZSk7XG5cbiAgICAgICAgICBfYWRkTGlzdGVuZXIob3duZXJEb2MsIF9ldmVudFR5cGVzWzJdLCBfb25SZWxlYXNlKTtcblxuICAgICAgICAgIF9hZGRMaXN0ZW5lcihvd25lckRvYywgX2V2ZW50VHlwZXNbM10sIF9vblJlbGVhc2UpO1xuXG4gICAgICAgICAgYWxsb3dDbGlja3MgJiYgX2FkZExpc3RlbmVyKHRhcmdldCwgXCJjbGlja1wiLCBjbGlja0NhcHR1cmUsIHRydWUsIHRydWUpO1xuICAgICAgICAgIG9uQ2xpY2sgJiYgX2FkZExpc3RlbmVyKHRhcmdldCwgXCJjbGlja1wiLCBfb25DbGljayk7XG4gICAgICAgICAgb25HZXN0dXJlU3RhcnQgJiYgX2FkZExpc3RlbmVyKG93bmVyRG9jLCBcImdlc3R1cmVzdGFydFwiLCBfb25HZXN0dXJlU3RhcnQpO1xuICAgICAgICAgIG9uR2VzdHVyZUVuZCAmJiBfYWRkTGlzdGVuZXIob3duZXJEb2MsIFwiZ2VzdHVyZWVuZFwiLCBfb25HZXN0dXJlRW5kKTtcbiAgICAgICAgICBvbkhvdmVyICYmIF9hZGRMaXN0ZW5lcih0YXJnZXQsIF9wb2ludGVyVHlwZSArIFwiZW50ZXJcIiwgX29uSG92ZXIpO1xuICAgICAgICAgIG9uSG92ZXJFbmQgJiYgX2FkZExpc3RlbmVyKHRhcmdldCwgX3BvaW50ZXJUeXBlICsgXCJsZWF2ZVwiLCBfb25Ib3ZlckVuZCk7XG4gICAgICAgICAgb25Nb3ZlICYmIF9hZGRMaXN0ZW5lcih0YXJnZXQsIF9wb2ludGVyVHlwZSArIFwibW92ZVwiLCBfb25Nb3ZlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuaXNFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgc2VsZi5pc0RyYWdnaW5nID0gc2VsZi5pc0dlc3R1cmluZyA9IHNlbGYuaXNQcmVzc2VkID0gbW92ZWQgPSBkcmFnZ2VkID0gZmFsc2U7XG5cbiAgICAgICAgc2VsZi5fdngucmVzZXQoKTtcblxuICAgICAgICBzZWxmLl92eS5yZXNldCgpO1xuXG4gICAgICAgIHNjcm9sbFggPSBzY3JvbGxGdW5jWCgpO1xuICAgICAgICBzY3JvbGxZID0gc2Nyb2xsRnVuY1koKTtcbiAgICAgICAgZSAmJiBlLnR5cGUgJiYgX29uUHJlc3MoZSk7XG4gICAgICAgIG9uRW5hYmxlICYmIG9uRW5hYmxlKHNlbGYpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuXG4gICAgc2VsZi5kaXNhYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHNlbGYuaXNFbmFibGVkKSB7XG4gICAgICAgIC8vIG9ubHkgcmVtb3ZlIHRoZSBfb25TY3JvbGwgbGlzdGVuZXIgaWYgdGhlcmUgYXJlbid0IGFueSBvdGhlcnMgdGhhdCByZWx5IG9uIHRoZSBmdW5jdGlvbmFsaXR5LlxuICAgICAgICBfb2JzZXJ2ZXJzLmZpbHRlcihmdW5jdGlvbiAobykge1xuICAgICAgICAgIHJldHVybiBvICE9PSBzZWxmICYmIF9pc1ZpZXdwb3J0KG8udGFyZ2V0KTtcbiAgICAgICAgfSkubGVuZ3RoIHx8IF9yZW1vdmVMaXN0ZW5lcihpc1ZpZXdwb3J0ID8gb3duZXJEb2MgOiB0YXJnZXQsIFwic2Nyb2xsXCIsIF9vblNjcm9sbCk7XG5cbiAgICAgICAgaWYgKHNlbGYuaXNQcmVzc2VkKSB7XG4gICAgICAgICAgc2VsZi5fdngucmVzZXQoKTtcblxuICAgICAgICAgIHNlbGYuX3Z5LnJlc2V0KCk7XG5cbiAgICAgICAgICBfcmVtb3ZlTGlzdGVuZXIoaXNOb3JtYWxpemVyID8gdGFyZ2V0IDogb3duZXJEb2MsIF9ldmVudFR5cGVzWzFdLCBfb25EcmFnLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF9yZW1vdmVMaXN0ZW5lcihpc1ZpZXdwb3J0ID8gb3duZXJEb2MgOiB0YXJnZXQsIFwic2Nyb2xsXCIsIG9uU2Nyb2xsLCBjYXB0dXJlKTtcblxuICAgICAgICBfcmVtb3ZlTGlzdGVuZXIodGFyZ2V0LCBcIndoZWVsXCIsIF9vbldoZWVsLCBjYXB0dXJlKTtcblxuICAgICAgICBfcmVtb3ZlTGlzdGVuZXIodGFyZ2V0LCBfZXZlbnRUeXBlc1swXSwgX29uUHJlc3MsIGNhcHR1cmUpO1xuXG4gICAgICAgIF9yZW1vdmVMaXN0ZW5lcihvd25lckRvYywgX2V2ZW50VHlwZXNbMl0sIF9vblJlbGVhc2UpO1xuXG4gICAgICAgIF9yZW1vdmVMaXN0ZW5lcihvd25lckRvYywgX2V2ZW50VHlwZXNbM10sIF9vblJlbGVhc2UpO1xuXG4gICAgICAgIF9yZW1vdmVMaXN0ZW5lcih0YXJnZXQsIFwiY2xpY2tcIiwgY2xpY2tDYXB0dXJlLCB0cnVlKTtcblxuICAgICAgICBfcmVtb3ZlTGlzdGVuZXIodGFyZ2V0LCBcImNsaWNrXCIsIF9vbkNsaWNrKTtcblxuICAgICAgICBfcmVtb3ZlTGlzdGVuZXIob3duZXJEb2MsIFwiZ2VzdHVyZXN0YXJ0XCIsIF9vbkdlc3R1cmVTdGFydCk7XG5cbiAgICAgICAgX3JlbW92ZUxpc3RlbmVyKG93bmVyRG9jLCBcImdlc3R1cmVlbmRcIiwgX29uR2VzdHVyZUVuZCk7XG5cbiAgICAgICAgX3JlbW92ZUxpc3RlbmVyKHRhcmdldCwgX3BvaW50ZXJUeXBlICsgXCJlbnRlclwiLCBfb25Ib3Zlcik7XG5cbiAgICAgICAgX3JlbW92ZUxpc3RlbmVyKHRhcmdldCwgX3BvaW50ZXJUeXBlICsgXCJsZWF2ZVwiLCBfb25Ib3ZlckVuZCk7XG5cbiAgICAgICAgX3JlbW92ZUxpc3RlbmVyKHRhcmdldCwgX3BvaW50ZXJUeXBlICsgXCJtb3ZlXCIsIF9vbk1vdmUpO1xuXG4gICAgICAgIHNlbGYuaXNFbmFibGVkID0gc2VsZi5pc1ByZXNzZWQgPSBzZWxmLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgb25EaXNhYmxlICYmIG9uRGlzYWJsZShzZWxmKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc2VsZi5raWxsID0gc2VsZi5yZXZlcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLmRpc2FibGUoKTtcblxuICAgICAgdmFyIGkgPSBfb2JzZXJ2ZXJzLmluZGV4T2Yoc2VsZik7XG5cbiAgICAgIGkgPj0gMCAmJiBfb2JzZXJ2ZXJzLnNwbGljZShpLCAxKTtcbiAgICAgIF9ub3JtYWxpemVyID09PSBzZWxmICYmIChfbm9ybWFsaXplciA9IDApO1xuICAgIH07XG5cbiAgICBfb2JzZXJ2ZXJzLnB1c2goc2VsZik7XG5cbiAgICBpc05vcm1hbGl6ZXIgJiYgX2lzVmlld3BvcnQodGFyZ2V0KSAmJiAoX25vcm1hbGl6ZXIgPSBzZWxmKTtcbiAgICBzZWxmLmVuYWJsZShldmVudCk7XG4gIH07XG5cbiAgX2NyZWF0ZUNsYXNzKE9ic2VydmVyLCBbe1xuICAgIGtleTogXCJ2ZWxvY2l0eVhcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl92eC5nZXRWZWxvY2l0eSgpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2ZWxvY2l0eVlcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl92eS5nZXRWZWxvY2l0eSgpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBPYnNlcnZlcjtcbn0oKTtcbk9ic2VydmVyLnZlcnNpb24gPSBcIjMuMTIuN1wiO1xuXG5PYnNlcnZlci5jcmVhdGUgPSBmdW5jdGlvbiAodmFycykge1xuICByZXR1cm4gbmV3IE9ic2VydmVyKHZhcnMpO1xufTtcblxuT2JzZXJ2ZXIucmVnaXN0ZXIgPSBfaW5pdENvcmU7XG5cbk9ic2VydmVyLmdldEFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9vYnNlcnZlcnMuc2xpY2UoKTtcbn07XG5cbk9ic2VydmVyLmdldEJ5SWQgPSBmdW5jdGlvbiAoaWQpIHtcbiAgcmV0dXJuIF9vYnNlcnZlcnMuZmlsdGVyKGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8udmFycy5pZCA9PT0gaWQ7XG4gIH0pWzBdO1xufTtcblxuX2dldEdTQVAoKSAmJiBnc2FwLnJlZ2lzdGVyUGx1Z2luKE9ic2VydmVyKTtcbmV4cG9ydCB7IE9ic2VydmVyIGFzIGRlZmF1bHQsIF9pc1ZpZXdwb3J0LCBfc2Nyb2xsZXJzLCBfZ2V0U2Nyb2xsRnVuYywgX2dldFByb3h5UHJvcCwgX3Byb3hpZXMsIF9nZXRWZWxvY2l0eVByb3AsIF92ZXJ0aWNhbCwgX2hvcml6b250YWwsIF9nZXRUYXJnZXQgfTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/gsap/Observer.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/gsap/ScrollTrigger.js\":\r\n/*!********************************************!*\\\r\n  !*** ./node_modules/gsap/ScrollTrigger.js ***!\r\n  \\********************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"ScrollTrigger\\\": () => (/* binding */ ScrollTrigger),\\n/* harmony export */   \\\"default\\\": () => (/* binding */ ScrollTrigger)\\n/* harmony export */ });\\n/* harmony import */ var _Observer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Observer.js */ \\\"./node_modules/gsap/Observer.js\\\");\\n/*!\\n * ScrollTrigger 3.12.7\\n * https://gsap.com\\n *\\n * @license Copyright 2008-2025, GreenSock. All rights reserved.\\n * Subject to the terms at https://gsap.com/standard-license or for\\n * Club GSAP members, the agreement issued with that membership.\\n * @author: Jack Doyle, jack@greensock.com\\n*/\\n\\n/* eslint-disable */\\n\\n\\nvar gsap,\\n    _coreInitted,\\n    _win,\\n    _doc,\\n    _docEl,\\n    _body,\\n    _root,\\n    _resizeDelay,\\n    _toArray,\\n    _clamp,\\n    _time2,\\n    _syncInterval,\\n    _refreshing,\\n    _pointerIsDown,\\n    _transformProp,\\n    _i,\\n    _prevWidth,\\n    _prevHeight,\\n    _autoRefresh,\\n    _sort,\\n    _suppressOverwrites,\\n    _ignoreResize,\\n    _normalizer,\\n    _ignoreMobileResize,\\n    _baseScreenHeight,\\n    _baseScreenWidth,\\n    _fixIOSBug,\\n    _context,\\n    _scrollRestoration,\\n    _div100vh,\\n    _100vh,\\n    _isReverted,\\n    _clampingMax,\\n    _limitCallbacks,\\n    // if true, we'll only trigger callbacks if the active state toggles, so if you scroll immediately past both the start and end positions of a ScrollTrigger (thus inactive to inactive), neither its onEnter nor onLeave will be called. This is useful during startup.\\n_startup = 1,\\n    _getTime = Date.now,\\n    _time1 = _getTime(),\\n    _lastScrollTime = 0,\\n    _enabled = 0,\\n    _parseClamp = function _parseClamp(value, type, self) {\\n  var clamp = _isString(value) && (value.substr(0, 6) === \\\"clamp(\\\" || value.indexOf(\\\"max\\\") > -1);\\n  self[\\\"_\\\" + type + \\\"Clamp\\\"] = clamp;\\n  return clamp ? value.substr(6, value.length - 7) : value;\\n},\\n    _keepClamp = function _keepClamp(value, clamp) {\\n  return clamp && (!_isString(value) || value.substr(0, 6) !== \\\"clamp(\\\") ? \\\"clamp(\\\" + value + \\\")\\\" : value;\\n},\\n    _rafBugFix = function _rafBugFix() {\\n  return _enabled && requestAnimationFrame(_rafBugFix);\\n},\\n    // in some browsers (like Firefox), screen repaints weren't consistent unless we had SOMETHING queued up in requestAnimationFrame()! So this just creates a super simple loop to keep it alive and smooth out repaints.\\n_pointerDownHandler = function _pointerDownHandler() {\\n  return _pointerIsDown = 1;\\n},\\n    _pointerUpHandler = function _pointerUpHandler() {\\n  return _pointerIsDown = 0;\\n},\\n    _passThrough = function _passThrough(v) {\\n  return v;\\n},\\n    _round = function _round(value) {\\n  return Math.round(value * 100000) / 100000 || 0;\\n},\\n    _windowExists = function _windowExists() {\\n  return typeof window !== \\\"undefined\\\";\\n},\\n    _getGSAP = function _getGSAP() {\\n  return gsap || _windowExists() && (gsap = window.gsap) && gsap.registerPlugin && gsap;\\n},\\n    _isViewport = function _isViewport(e) {\\n  return !!~_root.indexOf(e);\\n},\\n    _getViewportDimension = function _getViewportDimension(dimensionProperty) {\\n  return (dimensionProperty === \\\"Height\\\" ? _100vh : _win[\\\"inner\\\" + dimensionProperty]) || _docEl[\\\"client\\\" + dimensionProperty] || _body[\\\"client\\\" + dimensionProperty];\\n},\\n    _getBoundsFunc = function _getBoundsFunc(element) {\\n  return (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(element, \\\"getBoundingClientRect\\\") || (_isViewport(element) ? function () {\\n    _winOffsets.width = _win.innerWidth;\\n    _winOffsets.height = _100vh;\\n    return _winOffsets;\\n  } : function () {\\n    return _getBounds(element);\\n  });\\n},\\n    _getSizeFunc = function _getSizeFunc(scroller, isViewport, _ref) {\\n  var d = _ref.d,\\n      d2 = _ref.d2,\\n      a = _ref.a;\\n  return (a = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(scroller, \\\"getBoundingClientRect\\\")) ? function () {\\n    return a()[d];\\n  } : function () {\\n    return (isViewport ? _getViewportDimension(d2) : scroller[\\\"client\\\" + d2]) || 0;\\n  };\\n},\\n    _getOffsetsFunc = function _getOffsetsFunc(element, isViewport) {\\n  return !isViewport || ~_Observer_js__WEBPACK_IMPORTED_MODULE_0__._proxies.indexOf(element) ? _getBoundsFunc(element) : function () {\\n    return _winOffsets;\\n  };\\n},\\n    _maxScroll = function _maxScroll(element, _ref2) {\\n  var s = _ref2.s,\\n      d2 = _ref2.d2,\\n      d = _ref2.d,\\n      a = _ref2.a;\\n  return Math.max(0, (s = \\\"scroll\\\" + d2) && (a = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(element, s)) ? a() - _getBoundsFunc(element)()[d] : _isViewport(element) ? (_docEl[s] || _body[s]) - _getViewportDimension(d2) : element[s] - element[\\\"offset\\\" + d2]);\\n},\\n    _iterateAutoRefresh = function _iterateAutoRefresh(func, events) {\\n  for (var i = 0; i < _autoRefresh.length; i += 3) {\\n    (!events || ~events.indexOf(_autoRefresh[i + 1])) && func(_autoRefresh[i], _autoRefresh[i + 1], _autoRefresh[i + 2]);\\n  }\\n},\\n    _isString = function _isString(value) {\\n  return typeof value === \\\"string\\\";\\n},\\n    _isFunction = function _isFunction(value) {\\n  return typeof value === \\\"function\\\";\\n},\\n    _isNumber = function _isNumber(value) {\\n  return typeof value === \\\"number\\\";\\n},\\n    _isObject = function _isObject(value) {\\n  return typeof value === \\\"object\\\";\\n},\\n    _endAnimation = function _endAnimation(animation, reversed, pause) {\\n  return animation && animation.progress(reversed ? 0 : 1) && pause && animation.pause();\\n},\\n    _callback = function _callback(self, func) {\\n  if (self.enabled) {\\n    var result = self._ctx ? self._ctx.add(function () {\\n      return func(self);\\n    }) : func(self);\\n    result && result.totalTime && (self.callbackAnimation = result);\\n  }\\n},\\n    _abs = Math.abs,\\n    _left = \\\"left\\\",\\n    _top = \\\"top\\\",\\n    _right = \\\"right\\\",\\n    _bottom = \\\"bottom\\\",\\n    _width = \\\"width\\\",\\n    _height = \\\"height\\\",\\n    _Right = \\\"Right\\\",\\n    _Left = \\\"Left\\\",\\n    _Top = \\\"Top\\\",\\n    _Bottom = \\\"Bottom\\\",\\n    _padding = \\\"padding\\\",\\n    _margin = \\\"margin\\\",\\n    _Width = \\\"Width\\\",\\n    _Height = \\\"Height\\\",\\n    _px = \\\"px\\\",\\n    _getComputedStyle = function _getComputedStyle(element) {\\n  return _win.getComputedStyle(element);\\n},\\n    _makePositionable = function _makePositionable(element) {\\n  // if the element already has position: absolute or fixed, leave that, otherwise make it position: relative\\n  var position = _getComputedStyle(element).position;\\n\\n  element.style.position = position === \\\"absolute\\\" || position === \\\"fixed\\\" ? position : \\\"relative\\\";\\n},\\n    _setDefaults = function _setDefaults(obj, defaults) {\\n  for (var p in defaults) {\\n    p in obj || (obj[p] = defaults[p]);\\n  }\\n\\n  return obj;\\n},\\n    _getBounds = function _getBounds(element, withoutTransforms) {\\n  var tween = withoutTransforms && _getComputedStyle(element)[_transformProp] !== \\\"matrix(1, 0, 0, 1, 0, 0)\\\" && gsap.to(element, {\\n    x: 0,\\n    y: 0,\\n    xPercent: 0,\\n    yPercent: 0,\\n    rotation: 0,\\n    rotationX: 0,\\n    rotationY: 0,\\n    scale: 1,\\n    skewX: 0,\\n    skewY: 0\\n  }).progress(1),\\n      bounds = element.getBoundingClientRect();\\n  tween && tween.progress(0).kill();\\n  return bounds;\\n},\\n    _getSize = function _getSize(element, _ref3) {\\n  var d2 = _ref3.d2;\\n  return element[\\\"offset\\\" + d2] || element[\\\"client\\\" + d2] || 0;\\n},\\n    _getLabelRatioArray = function _getLabelRatioArray(timeline) {\\n  var a = [],\\n      labels = timeline.labels,\\n      duration = timeline.duration(),\\n      p;\\n\\n  for (p in labels) {\\n    a.push(labels[p] / duration);\\n  }\\n\\n  return a;\\n},\\n    _getClosestLabel = function _getClosestLabel(animation) {\\n  return function (value) {\\n    return gsap.utils.snap(_getLabelRatioArray(animation), value);\\n  };\\n},\\n    _snapDirectional = function _snapDirectional(snapIncrementOrArray) {\\n  var snap = gsap.utils.snap(snapIncrementOrArray),\\n      a = Array.isArray(snapIncrementOrArray) && snapIncrementOrArray.slice(0).sort(function (a, b) {\\n    return a - b;\\n  });\\n  return a ? function (value, direction, threshold) {\\n    if (threshold === void 0) {\\n      threshold = 1e-3;\\n    }\\n\\n    var i;\\n\\n    if (!direction) {\\n      return snap(value);\\n    }\\n\\n    if (direction > 0) {\\n      value -= threshold; // to avoid rounding errors. If we're too strict, it might snap forward, then immediately again, and again.\\n\\n      for (i = 0; i < a.length; i++) {\\n        if (a[i] >= value) {\\n          return a[i];\\n        }\\n      }\\n\\n      return a[i - 1];\\n    } else {\\n      i = a.length;\\n      value += threshold;\\n\\n      while (i--) {\\n        if (a[i] <= value) {\\n          return a[i];\\n        }\\n      }\\n    }\\n\\n    return a[0];\\n  } : function (value, direction, threshold) {\\n    if (threshold === void 0) {\\n      threshold = 1e-3;\\n    }\\n\\n    var snapped = snap(value);\\n    return !direction || Math.abs(snapped - value) < threshold || snapped - value < 0 === direction < 0 ? snapped : snap(direction < 0 ? value - snapIncrementOrArray : value + snapIncrementOrArray);\\n  };\\n},\\n    _getLabelAtDirection = function _getLabelAtDirection(timeline) {\\n  return function (value, st) {\\n    return _snapDirectional(_getLabelRatioArray(timeline))(value, st.direction);\\n  };\\n},\\n    _multiListener = function _multiListener(func, element, types, callback) {\\n  return types.split(\\\",\\\").forEach(function (type) {\\n    return func(element, type, callback);\\n  });\\n},\\n    _addListener = function _addListener(element, type, func, nonPassive, capture) {\\n  return element.addEventListener(type, func, {\\n    passive: !nonPassive,\\n    capture: !!capture\\n  });\\n},\\n    _removeListener = function _removeListener(element, type, func, capture) {\\n  return element.removeEventListener(type, func, !!capture);\\n},\\n    _wheelListener = function _wheelListener(func, el, scrollFunc) {\\n  scrollFunc = scrollFunc && scrollFunc.wheelHandler;\\n\\n  if (scrollFunc) {\\n    func(el, \\\"wheel\\\", scrollFunc);\\n    func(el, \\\"touchmove\\\", scrollFunc);\\n  }\\n},\\n    _markerDefaults = {\\n  startColor: \\\"green\\\",\\n  endColor: \\\"red\\\",\\n  indent: 0,\\n  fontSize: \\\"16px\\\",\\n  fontWeight: \\\"normal\\\"\\n},\\n    _defaults = {\\n  toggleActions: \\\"play\\\",\\n  anticipatePin: 0\\n},\\n    _keywords = {\\n  top: 0,\\n  left: 0,\\n  center: 0.5,\\n  bottom: 1,\\n  right: 1\\n},\\n    _offsetToPx = function _offsetToPx(value, size) {\\n  if (_isString(value)) {\\n    var eqIndex = value.indexOf(\\\"=\\\"),\\n        relative = ~eqIndex ? +(value.charAt(eqIndex - 1) + 1) * parseFloat(value.substr(eqIndex + 1)) : 0;\\n\\n    if (~eqIndex) {\\n      value.indexOf(\\\"%\\\") > eqIndex && (relative *= size / 100);\\n      value = value.substr(0, eqIndex - 1);\\n    }\\n\\n    value = relative + (value in _keywords ? _keywords[value] * size : ~value.indexOf(\\\"%\\\") ? parseFloat(value) * size / 100 : parseFloat(value) || 0);\\n  }\\n\\n  return value;\\n},\\n    _createMarker = function _createMarker(type, name, container, direction, _ref4, offset, matchWidthEl, containerAnimation) {\\n  var startColor = _ref4.startColor,\\n      endColor = _ref4.endColor,\\n      fontSize = _ref4.fontSize,\\n      indent = _ref4.indent,\\n      fontWeight = _ref4.fontWeight;\\n\\n  var e = _doc.createElement(\\\"div\\\"),\\n      useFixedPosition = _isViewport(container) || (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(container, \\\"pinType\\\") === \\\"fixed\\\",\\n      isScroller = type.indexOf(\\\"scroller\\\") !== -1,\\n      parent = useFixedPosition ? _body : container,\\n      isStart = type.indexOf(\\\"start\\\") !== -1,\\n      color = isStart ? startColor : endColor,\\n      css = \\\"border-color:\\\" + color + \\\";font-size:\\\" + fontSize + \\\";color:\\\" + color + \\\";font-weight:\\\" + fontWeight + \\\";pointer-events:none;white-space:nowrap;font-family:sans-serif,Arial;z-index:1000;padding:4px 8px;border-width:0;border-style:solid;\\\";\\n\\n  css += \\\"position:\\\" + ((isScroller || containerAnimation) && useFixedPosition ? \\\"fixed;\\\" : \\\"absolute;\\\");\\n  (isScroller || containerAnimation || !useFixedPosition) && (css += (direction === _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical ? _right : _bottom) + \\\":\\\" + (offset + parseFloat(indent)) + \\\"px;\\\");\\n  matchWidthEl && (css += \\\"box-sizing:border-box;text-align:left;width:\\\" + matchWidthEl.offsetWidth + \\\"px;\\\");\\n  e._isStart = isStart;\\n  e.setAttribute(\\\"class\\\", \\\"gsap-marker-\\\" + type + (name ? \\\" marker-\\\" + name : \\\"\\\"));\\n  e.style.cssText = css;\\n  e.innerText = name || name === 0 ? type + \\\"-\\\" + name : type;\\n  parent.children[0] ? parent.insertBefore(e, parent.children[0]) : parent.appendChild(e);\\n  e._offset = e[\\\"offset\\\" + direction.op.d2];\\n\\n  _positionMarker(e, 0, direction, isStart);\\n\\n  return e;\\n},\\n    _positionMarker = function _positionMarker(marker, start, direction, flipped) {\\n  var vars = {\\n    display: \\\"block\\\"\\n  },\\n      side = direction[flipped ? \\\"os2\\\" : \\\"p2\\\"],\\n      oppositeSide = direction[flipped ? \\\"p2\\\" : \\\"os2\\\"];\\n  marker._isFlipped = flipped;\\n  vars[direction.a + \\\"Percent\\\"] = flipped ? -100 : 0;\\n  vars[direction.a] = flipped ? \\\"1px\\\" : 0;\\n  vars[\\\"border\\\" + side + _Width] = 1;\\n  vars[\\\"border\\\" + oppositeSide + _Width] = 0;\\n  vars[direction.p] = start + \\\"px\\\";\\n  gsap.set(marker, vars);\\n},\\n    _triggers = [],\\n    _ids = {},\\n    _rafID,\\n    _sync = function _sync() {\\n  return _getTime() - _lastScrollTime > 34 && (_rafID || (_rafID = requestAnimationFrame(_updateAll)));\\n},\\n    _onScroll = function _onScroll() {\\n  // previously, we tried to optimize performance by batching/deferring to the next requestAnimationFrame(), but discovered that Safari has a few bugs that make this unworkable (especially on iOS). See https://codepen.io/GreenSock/pen/16c435b12ef09c38125204818e7b45fc?editors=0010 and https://codepen.io/GreenSock/pen/JjOxYpQ/3dd65ccec5a60f1d862c355d84d14562?editors=0010 and https://codepen.io/GreenSock/pen/ExbrPNa/087cef197dc35445a0951e8935c41503?editors=0010\\n  if (!_normalizer || !_normalizer.isPressed || _normalizer.startX > _body.clientWidth) {\\n    // if the user is dragging the scrollbar, allow it.\\n    _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache++;\\n\\n    if (_normalizer) {\\n      _rafID || (_rafID = requestAnimationFrame(_updateAll));\\n    } else {\\n      _updateAll(); // Safari in particular (on desktop) NEEDS the immediate update rather than waiting for a requestAnimationFrame() whereas iOS seems to benefit from waiting for the requestAnimationFrame() tick, at least when normalizing. See https://codepen.io/GreenSock/pen/qBYozqO?editors=0110\\n\\n    }\\n\\n    _lastScrollTime || _dispatch(\\\"scrollStart\\\");\\n    _lastScrollTime = _getTime();\\n  }\\n},\\n    _setBaseDimensions = function _setBaseDimensions() {\\n  _baseScreenWidth = _win.innerWidth;\\n  _baseScreenHeight = _win.innerHeight;\\n},\\n    _onResize = function _onResize(force) {\\n  _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache++;\\n  (force === true || !_refreshing && !_ignoreResize && !_doc.fullscreenElement && !_doc.webkitFullscreenElement && (!_ignoreMobileResize || _baseScreenWidth !== _win.innerWidth || Math.abs(_win.innerHeight - _baseScreenHeight) > _win.innerHeight * 0.25)) && _resizeDelay.restart(true);\\n},\\n    // ignore resizes triggered by refresh()\\n_listeners = {},\\n    _emptyArray = [],\\n    _softRefresh = function _softRefresh() {\\n  return _removeListener(ScrollTrigger, \\\"scrollEnd\\\", _softRefresh) || _refreshAll(true);\\n},\\n    _dispatch = function _dispatch(type) {\\n  return _listeners[type] && _listeners[type].map(function (f) {\\n    return f();\\n  }) || _emptyArray;\\n},\\n    _savedStyles = [],\\n    // when ScrollTrigger.saveStyles() is called, the inline styles are recorded in this Array in a sequential format like [element, cssText, gsCache, media]. This keeps it very memory-efficient and fast to iterate through.\\n_revertRecorded = function _revertRecorded(media) {\\n  for (var i = 0; i < _savedStyles.length; i += 5) {\\n    if (!media || _savedStyles[i + 4] && _savedStyles[i + 4].query === media) {\\n      _savedStyles[i].style.cssText = _savedStyles[i + 1];\\n      _savedStyles[i].getBBox && _savedStyles[i].setAttribute(\\\"transform\\\", _savedStyles[i + 2] || \\\"\\\");\\n      _savedStyles[i + 3].uncache = 1;\\n    }\\n  }\\n},\\n    _revertAll = function _revertAll(kill, media) {\\n  var trigger;\\n\\n  for (_i = 0; _i < _triggers.length; _i++) {\\n    trigger = _triggers[_i];\\n\\n    if (trigger && (!media || trigger._ctx === media)) {\\n      if (kill) {\\n        trigger.kill(1);\\n      } else {\\n        trigger.revert(true, true);\\n      }\\n    }\\n  }\\n\\n  _isReverted = true;\\n  media && _revertRecorded(media);\\n  media || _dispatch(\\\"revert\\\");\\n},\\n    _clearScrollMemory = function _clearScrollMemory(scrollRestoration, force) {\\n  // zero-out all the recorded scroll positions. Don't use _triggers because if, for example, .matchMedia() is used to create some ScrollTriggers and then the user resizes and it removes ALL ScrollTriggers, and then go back to a size where there are ScrollTriggers, it would have kept the position(s) saved from the initial state.\\n  _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache++;\\n  (force || !_refreshingAll) && _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.forEach(function (obj) {\\n    return _isFunction(obj) && obj.cacheID++ && (obj.rec = 0);\\n  });\\n  _isString(scrollRestoration) && (_win.history.scrollRestoration = _scrollRestoration = scrollRestoration);\\n},\\n    _refreshingAll,\\n    _refreshID = 0,\\n    _queueRefreshID,\\n    _queueRefreshAll = function _queueRefreshAll() {\\n  // we don't want to call _refreshAll() every time we create a new ScrollTrigger (for performance reasons) - it's better to batch them. Some frameworks dynamically load content and we can't rely on the window's \\\"load\\\" or \\\"DOMContentLoaded\\\" events to trigger it.\\n  if (_queueRefreshID !== _refreshID) {\\n    var id = _queueRefreshID = _refreshID;\\n    requestAnimationFrame(function () {\\n      return id === _refreshID && _refreshAll(true);\\n    });\\n  }\\n},\\n    _refresh100vh = function _refresh100vh() {\\n  _body.appendChild(_div100vh);\\n\\n  _100vh = !_normalizer && _div100vh.offsetHeight || _win.innerHeight;\\n\\n  _body.removeChild(_div100vh);\\n},\\n    _hideAllMarkers = function _hideAllMarkers(hide) {\\n  return _toArray(\\\".gsap-marker-start, .gsap-marker-end, .gsap-marker-scroller-start, .gsap-marker-scroller-end\\\").forEach(function (el) {\\n    return el.style.display = hide ? \\\"none\\\" : \\\"block\\\";\\n  });\\n},\\n    _refreshAll = function _refreshAll(force, skipRevert) {\\n  _docEl = _doc.documentElement; // some frameworks like Astro may cache the <body> and replace it during routing, so we'll just re-record the _docEl and _body for safety (otherwise, the markers may not get added properly).\\n\\n  _body = _doc.body;\\n  _root = [_win, _doc, _docEl, _body];\\n\\n  if (_lastScrollTime && !force && !_isReverted) {\\n    _addListener(ScrollTrigger, \\\"scrollEnd\\\", _softRefresh);\\n\\n    return;\\n  }\\n\\n  _refresh100vh();\\n\\n  _refreshingAll = ScrollTrigger.isRefreshing = true;\\n\\n  _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.forEach(function (obj) {\\n    return _isFunction(obj) && ++obj.cacheID && (obj.rec = obj());\\n  }); // force the clearing of the cache because some browsers take a little while to dispatch the \\\"scroll\\\" event and the user may have changed the scroll position and then called ScrollTrigger.refresh() right away\\n\\n\\n  var refreshInits = _dispatch(\\\"refreshInit\\\");\\n\\n  _sort && ScrollTrigger.sort();\\n  skipRevert || _revertAll();\\n\\n  _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.forEach(function (obj) {\\n    if (_isFunction(obj)) {\\n      obj.smooth && (obj.target.style.scrollBehavior = \\\"auto\\\"); // smooth scrolling interferes\\n\\n      obj(0);\\n    }\\n  });\\n\\n  _triggers.slice(0).forEach(function (t) {\\n    return t.refresh();\\n  }); // don't loop with _i because during a refresh() someone could call ScrollTrigger.update() which would iterate through _i resulting in a skip.\\n\\n\\n  _isReverted = false;\\n\\n  _triggers.forEach(function (t) {\\n    // nested pins (pinnedContainer) with pinSpacing may expand the container, so we must accommodate that here.\\n    if (t._subPinOffset && t.pin) {\\n      var prop = t.vars.horizontal ? \\\"offsetWidth\\\" : \\\"offsetHeight\\\",\\n          original = t.pin[prop];\\n      t.revert(true, 1);\\n      t.adjustPinSpacing(t.pin[prop] - original);\\n      t.refresh();\\n    }\\n  });\\n\\n  _clampingMax = 1; // pinSpacing might be propping a page open, thus when we .setPositions() to clamp a ScrollTrigger's end we should leave the pinSpacing alone. That's what this flag is for.\\n\\n  _hideAllMarkers(true);\\n\\n  _triggers.forEach(function (t) {\\n    // the scroller's max scroll position may change after all the ScrollTriggers refreshed (like pinning could push it down), so we need to loop back and correct any with end: \\\"max\\\". Same for anything with a clamped end\\n    var max = _maxScroll(t.scroller, t._dir),\\n        endClamp = t.vars.end === \\\"max\\\" || t._endClamp && t.end > max,\\n        startClamp = t._startClamp && t.start >= max;\\n\\n    (endClamp || startClamp) && t.setPositions(startClamp ? max - 1 : t.start, endClamp ? Math.max(startClamp ? max : t.start + 1, max) : t.end, true);\\n  });\\n\\n  _hideAllMarkers(false);\\n\\n  _clampingMax = 0;\\n  refreshInits.forEach(function (result) {\\n    return result && result.render && result.render(-1);\\n  }); // if the onRefreshInit() returns an animation (typically a gsap.set()), revert it. This makes it easy to put things in a certain spot before refreshing for measurement purposes, and then put things back.\\n\\n  _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.forEach(function (obj) {\\n    if (_isFunction(obj)) {\\n      obj.smooth && requestAnimationFrame(function () {\\n        return obj.target.style.scrollBehavior = \\\"smooth\\\";\\n      });\\n      obj.rec && obj(obj.rec);\\n    }\\n  });\\n\\n  _clearScrollMemory(_scrollRestoration, 1);\\n\\n  _resizeDelay.pause();\\n\\n  _refreshID++;\\n  _refreshingAll = 2;\\n\\n  _updateAll(2);\\n\\n  _triggers.forEach(function (t) {\\n    return _isFunction(t.vars.onRefresh) && t.vars.onRefresh(t);\\n  });\\n\\n  _refreshingAll = ScrollTrigger.isRefreshing = false;\\n\\n  _dispatch(\\\"refresh\\\");\\n},\\n    _lastScroll = 0,\\n    _direction = 1,\\n    _primary,\\n    _updateAll = function _updateAll(force) {\\n  if (force === 2 || !_refreshingAll && !_isReverted) {\\n    // _isReverted could be true if, for example, a matchMedia() is in the process of executing. We don't want to update during the time everything is reverted.\\n    ScrollTrigger.isUpdating = true;\\n    _primary && _primary.update(0); // ScrollSmoother uses refreshPriority -9999 to become the primary that gets updated before all others because it affects the scroll position.\\n\\n    var l = _triggers.length,\\n        time = _getTime(),\\n        recordVelocity = time - _time1 >= 50,\\n        scroll = l && _triggers[0].scroll();\\n\\n    _direction = _lastScroll > scroll ? -1 : 1;\\n    _refreshingAll || (_lastScroll = scroll);\\n\\n    if (recordVelocity) {\\n      if (_lastScrollTime && !_pointerIsDown && time - _lastScrollTime > 200) {\\n        _lastScrollTime = 0;\\n\\n        _dispatch(\\\"scrollEnd\\\");\\n      }\\n\\n      _time2 = _time1;\\n      _time1 = time;\\n    }\\n\\n    if (_direction < 0) {\\n      _i = l;\\n\\n      while (_i-- > 0) {\\n        _triggers[_i] && _triggers[_i].update(0, recordVelocity);\\n      }\\n\\n      _direction = 1;\\n    } else {\\n      for (_i = 0; _i < l; _i++) {\\n        _triggers[_i] && _triggers[_i].update(0, recordVelocity);\\n      }\\n    }\\n\\n    ScrollTrigger.isUpdating = false;\\n  }\\n\\n  _rafID = 0;\\n},\\n    _propNamesToCopy = [_left, _top, _bottom, _right, _margin + _Bottom, _margin + _Right, _margin + _Top, _margin + _Left, \\\"display\\\", \\\"flexShrink\\\", \\\"float\\\", \\\"zIndex\\\", \\\"gridColumnStart\\\", \\\"gridColumnEnd\\\", \\\"gridRowStart\\\", \\\"gridRowEnd\\\", \\\"gridArea\\\", \\\"justifySelf\\\", \\\"alignSelf\\\", \\\"placeSelf\\\", \\\"order\\\"],\\n    _stateProps = _propNamesToCopy.concat([_width, _height, \\\"boxSizing\\\", \\\"max\\\" + _Width, \\\"max\\\" + _Height, \\\"position\\\", _margin, _padding, _padding + _Top, _padding + _Right, _padding + _Bottom, _padding + _Left]),\\n    _swapPinOut = function _swapPinOut(pin, spacer, state) {\\n  _setState(state);\\n\\n  var cache = pin._gsap;\\n\\n  if (cache.spacerIsNative) {\\n    _setState(cache.spacerState);\\n  } else if (pin._gsap.swappedIn) {\\n    var parent = spacer.parentNode;\\n\\n    if (parent) {\\n      parent.insertBefore(pin, spacer);\\n      parent.removeChild(spacer);\\n    }\\n  }\\n\\n  pin._gsap.swappedIn = false;\\n},\\n    _swapPinIn = function _swapPinIn(pin, spacer, cs, spacerState) {\\n  if (!pin._gsap.swappedIn) {\\n    var i = _propNamesToCopy.length,\\n        spacerStyle = spacer.style,\\n        pinStyle = pin.style,\\n        p;\\n\\n    while (i--) {\\n      p = _propNamesToCopy[i];\\n      spacerStyle[p] = cs[p];\\n    }\\n\\n    spacerStyle.position = cs.position === \\\"absolute\\\" ? \\\"absolute\\\" : \\\"relative\\\";\\n    cs.display === \\\"inline\\\" && (spacerStyle.display = \\\"inline-block\\\");\\n    pinStyle[_bottom] = pinStyle[_right] = \\\"auto\\\";\\n    spacerStyle.flexBasis = cs.flexBasis || \\\"auto\\\";\\n    spacerStyle.overflow = \\\"visible\\\";\\n    spacerStyle.boxSizing = \\\"border-box\\\";\\n    spacerStyle[_width] = _getSize(pin, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal) + _px;\\n    spacerStyle[_height] = _getSize(pin, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical) + _px;\\n    spacerStyle[_padding] = pinStyle[_margin] = pinStyle[_top] = pinStyle[_left] = \\\"0\\\";\\n\\n    _setState(spacerState);\\n\\n    pinStyle[_width] = pinStyle[\\\"max\\\" + _Width] = cs[_width];\\n    pinStyle[_height] = pinStyle[\\\"max\\\" + _Height] = cs[_height];\\n    pinStyle[_padding] = cs[_padding];\\n\\n    if (pin.parentNode !== spacer) {\\n      pin.parentNode.insertBefore(spacer, pin);\\n      spacer.appendChild(pin);\\n    }\\n\\n    pin._gsap.swappedIn = true;\\n  }\\n},\\n    _capsExp = /([A-Z])/g,\\n    _setState = function _setState(state) {\\n  if (state) {\\n    var style = state.t.style,\\n        l = state.length,\\n        i = 0,\\n        p,\\n        value;\\n    (state.t._gsap || gsap.core.getCache(state.t)).uncache = 1; // otherwise transforms may be off\\n\\n    for (; i < l; i += 2) {\\n      value = state[i + 1];\\n      p = state[i];\\n\\n      if (value) {\\n        style[p] = value;\\n      } else if (style[p]) {\\n        style.removeProperty(p.replace(_capsExp, \\\"-$1\\\").toLowerCase());\\n      }\\n    }\\n  }\\n},\\n    _getState = function _getState(element) {\\n  // returns an Array with alternating values like [property, value, property, value] and a \\\"t\\\" property pointing to the target (element). Makes it fast and cheap.\\n  var l = _stateProps.length,\\n      style = element.style,\\n      state = [],\\n      i = 0;\\n\\n  for (; i < l; i++) {\\n    state.push(_stateProps[i], style[_stateProps[i]]);\\n  }\\n\\n  state.t = element;\\n  return state;\\n},\\n    _copyState = function _copyState(state, override, omitOffsets) {\\n  var result = [],\\n      l = state.length,\\n      i = omitOffsets ? 8 : 0,\\n      // skip top, left, right, bottom if omitOffsets is true\\n  p;\\n\\n  for (; i < l; i += 2) {\\n    p = state[i];\\n    result.push(p, p in override ? override[p] : state[i + 1]);\\n  }\\n\\n  result.t = state.t;\\n  return result;\\n},\\n    _winOffsets = {\\n  left: 0,\\n  top: 0\\n},\\n    // // potential future feature (?) Allow users to calculate where a trigger hits (scroll position) like getScrollPosition(\\\"#id\\\", \\\"top bottom\\\")\\n// _getScrollPosition = (trigger, position, {scroller, containerAnimation, horizontal}) => {\\n// \\tscroller = _getTarget(scroller || _win);\\n// \\tlet direction = horizontal ? _horizontal : _vertical,\\n// \\t\\tisViewport = _isViewport(scroller);\\n// \\t_getSizeFunc(scroller, isViewport, direction);\\n// \\treturn _parsePosition(position, _getTarget(trigger), _getSizeFunc(scroller, isViewport, direction)(), direction, _getScrollFunc(scroller, direction)(), 0, 0, 0, _getOffsetsFunc(scroller, isViewport)(), isViewport ? 0 : parseFloat(_getComputedStyle(scroller)[\\\"border\\\" + direction.p2 + _Width]) || 0, 0, containerAnimation ? containerAnimation.duration() : _maxScroll(scroller), containerAnimation);\\n// },\\n_parsePosition = function _parsePosition(value, trigger, scrollerSize, direction, scroll, marker, markerScroller, self, scrollerBounds, borderWidth, useFixedPosition, scrollerMax, containerAnimation, clampZeroProp) {\\n  _isFunction(value) && (value = value(self));\\n\\n  if (_isString(value) && value.substr(0, 3) === \\\"max\\\") {\\n    value = scrollerMax + (value.charAt(4) === \\\"=\\\" ? _offsetToPx(\\\"0\\\" + value.substr(3), scrollerSize) : 0);\\n  }\\n\\n  var time = containerAnimation ? containerAnimation.time() : 0,\\n      p1,\\n      p2,\\n      element;\\n  containerAnimation && containerAnimation.seek(0);\\n  isNaN(value) || (value = +value); // convert a string number like \\\"45\\\" to an actual number\\n\\n  if (!_isNumber(value)) {\\n    _isFunction(trigger) && (trigger = trigger(self));\\n    var offsets = (value || \\\"0\\\").split(\\\" \\\"),\\n        bounds,\\n        localOffset,\\n        globalOffset,\\n        display;\\n    element = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(trigger, self) || _body;\\n    bounds = _getBounds(element) || {};\\n\\n    if ((!bounds || !bounds.left && !bounds.top) && _getComputedStyle(element).display === \\\"none\\\") {\\n      // if display is \\\"none\\\", it won't report getBoundingClientRect() properly\\n      display = element.style.display;\\n      element.style.display = \\\"block\\\";\\n      bounds = _getBounds(element);\\n      display ? element.style.display = display : element.style.removeProperty(\\\"display\\\");\\n    }\\n\\n    localOffset = _offsetToPx(offsets[0], bounds[direction.d]);\\n    globalOffset = _offsetToPx(offsets[1] || \\\"0\\\", scrollerSize);\\n    value = bounds[direction.p] - scrollerBounds[direction.p] - borderWidth + localOffset + scroll - globalOffset;\\n    markerScroller && _positionMarker(markerScroller, globalOffset, direction, scrollerSize - globalOffset < 20 || markerScroller._isStart && globalOffset > 20);\\n    scrollerSize -= scrollerSize - globalOffset; // adjust for the marker\\n  } else {\\n    containerAnimation && (value = gsap.utils.mapRange(containerAnimation.scrollTrigger.start, containerAnimation.scrollTrigger.end, 0, scrollerMax, value));\\n    markerScroller && _positionMarker(markerScroller, scrollerSize, direction, true);\\n  }\\n\\n  if (clampZeroProp) {\\n    self[clampZeroProp] = value || -0.001;\\n    value < 0 && (value = 0);\\n  }\\n\\n  if (marker) {\\n    var position = value + scrollerSize,\\n        isStart = marker._isStart;\\n    p1 = \\\"scroll\\\" + direction.d2;\\n\\n    _positionMarker(marker, position, direction, isStart && position > 20 || !isStart && (useFixedPosition ? Math.max(_body[p1], _docEl[p1]) : marker.parentNode[p1]) <= position + 1);\\n\\n    if (useFixedPosition) {\\n      scrollerBounds = _getBounds(markerScroller);\\n      useFixedPosition && (marker.style[direction.op.p] = scrollerBounds[direction.op.p] - direction.op.m - marker._offset + _px);\\n    }\\n  }\\n\\n  if (containerAnimation && element) {\\n    p1 = _getBounds(element);\\n    containerAnimation.seek(scrollerMax);\\n    p2 = _getBounds(element);\\n    containerAnimation._caScrollDist = p1[direction.p] - p2[direction.p];\\n    value = value / containerAnimation._caScrollDist * scrollerMax;\\n  }\\n\\n  containerAnimation && containerAnimation.seek(time);\\n  return containerAnimation ? value : Math.round(value);\\n},\\n    _prefixExp = /(webkit|moz|length|cssText|inset)/i,\\n    _reparent = function _reparent(element, parent, top, left) {\\n  if (element.parentNode !== parent) {\\n    var style = element.style,\\n        p,\\n        cs;\\n\\n    if (parent === _body) {\\n      element._stOrig = style.cssText; // record original inline styles so we can revert them later\\n\\n      cs = _getComputedStyle(element);\\n\\n      for (p in cs) {\\n        // must copy all relevant styles to ensure that nothing changes visually when we reparent to the <body>. Skip the vendor prefixed ones.\\n        if (!+p && !_prefixExp.test(p) && cs[p] && typeof style[p] === \\\"string\\\" && p !== \\\"0\\\") {\\n          style[p] = cs[p];\\n        }\\n      }\\n\\n      style.top = top;\\n      style.left = left;\\n    } else {\\n      style.cssText = element._stOrig;\\n    }\\n\\n    gsap.core.getCache(element).uncache = 1;\\n    parent.appendChild(element);\\n  }\\n},\\n    _interruptionTracker = function _interruptionTracker(getValueFunc, initialValue, onInterrupt) {\\n  var last1 = initialValue,\\n      last2 = last1;\\n  return function (value) {\\n    var current = Math.round(getValueFunc()); // round because in some [very uncommon] Windows environments, scroll can get reported with decimals even though it was set without.\\n\\n    if (current !== last1 && current !== last2 && Math.abs(current - last1) > 3 && Math.abs(current - last2) > 3) {\\n      // if the user scrolls, kill the tween. iOS Safari intermittently misreports the scroll position, it may be the most recently-set one or the one before that! When Safari is zoomed (CMD-+), it often misreports as 1 pixel off too! So if we set the scroll position to 125, for example, it'll actually report it as 124.\\n      value = current;\\n      onInterrupt && onInterrupt();\\n    }\\n\\n    last2 = last1;\\n    last1 = Math.round(value);\\n    return last1;\\n  };\\n},\\n    _shiftMarker = function _shiftMarker(marker, direction, value) {\\n  var vars = {};\\n  vars[direction.p] = \\\"+=\\\" + value;\\n  gsap.set(marker, vars);\\n},\\n    // _mergeAnimations = animations => {\\n// \\tlet tl = gsap.timeline({smoothChildTiming: true}).startTime(Math.min(...animations.map(a => a.globalTime(0))));\\n// \\tanimations.forEach(a => {let time = a.totalTime(); tl.add(a); a.totalTime(time); });\\n// \\ttl.smoothChildTiming = false;\\n// \\treturn tl;\\n// },\\n// returns a function that can be used to tween the scroll position in the direction provided, and when doing so it'll add a .tween property to the FUNCTION itself, and remove it when the tween completes or gets killed. This gives us a way to have multiple ScrollTriggers use a central function for any given scroller and see if there's a scroll tween running (which would affect if/how things get updated)\\n_getTweenCreator = function _getTweenCreator(scroller, direction) {\\n  var getScroll = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getScrollFunc)(scroller, direction),\\n      prop = \\\"_scroll\\\" + direction.p2,\\n      // add a tweenable property to the scroller that's a getter/setter function, like _scrollTop or _scrollLeft. This way, if someone does gsap.killTweensOf(scroller) it'll kill the scroll tween.\\n  getTween = function getTween(scrollTo, vars, initialValue, change1, change2) {\\n    var tween = getTween.tween,\\n        onComplete = vars.onComplete,\\n        modifiers = {};\\n    initialValue = initialValue || getScroll();\\n\\n    var checkForInterruption = _interruptionTracker(getScroll, initialValue, function () {\\n      tween.kill();\\n      getTween.tween = 0;\\n    });\\n\\n    change2 = change1 && change2 || 0; // if change1 is 0, we set that to the difference and ignore change2. Otherwise, there would be a compound effect.\\n\\n    change1 = change1 || scrollTo - initialValue;\\n    tween && tween.kill();\\n    vars[prop] = scrollTo;\\n    vars.inherit = false;\\n    vars.modifiers = modifiers;\\n\\n    modifiers[prop] = function () {\\n      return checkForInterruption(initialValue + change1 * tween.ratio + change2 * tween.ratio * tween.ratio);\\n    };\\n\\n    vars.onUpdate = function () {\\n      _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache++;\\n      getTween.tween && _updateAll(); // if it was interrupted/killed, like in a context.revert(), don't force an updateAll()\\n    };\\n\\n    vars.onComplete = function () {\\n      getTween.tween = 0;\\n      onComplete && onComplete.call(tween);\\n    };\\n\\n    tween = getTween.tween = gsap.to(scroller, vars);\\n    return tween;\\n  };\\n\\n  scroller[prop] = getScroll;\\n\\n  getScroll.wheelHandler = function () {\\n    return getTween.tween && getTween.tween.kill() && (getTween.tween = 0);\\n  };\\n\\n  _addListener(scroller, \\\"wheel\\\", getScroll.wheelHandler); // Windows machines handle mousewheel scrolling in chunks (like \\\"3 lines per scroll\\\") meaning the typical strategy for cancelling the scroll isn't as sensitive. It's much more likely to match one of the previous 2 scroll event positions. So we kill any snapping as soon as there's a wheel event.\\n\\n\\n  ScrollTrigger.isTouch && _addListener(scroller, \\\"touchmove\\\", getScroll.wheelHandler);\\n  return getTween;\\n};\\n\\nvar ScrollTrigger = /*#__PURE__*/function () {\\n  function ScrollTrigger(vars, animation) {\\n    _coreInitted || ScrollTrigger.register(gsap) || console.warn(\\\"Please gsap.registerPlugin(ScrollTrigger)\\\");\\n\\n    _context(this);\\n\\n    this.init(vars, animation);\\n  }\\n\\n  var _proto = ScrollTrigger.prototype;\\n\\n  _proto.init = function init(vars, animation) {\\n    this.progress = this.start = 0;\\n    this.vars && this.kill(true, true); // in case it's being initted again\\n\\n    if (!_enabled) {\\n      this.update = this.refresh = this.kill = _passThrough;\\n      return;\\n    }\\n\\n    vars = _setDefaults(_isString(vars) || _isNumber(vars) || vars.nodeType ? {\\n      trigger: vars\\n    } : vars, _defaults);\\n\\n    var _vars = vars,\\n        onUpdate = _vars.onUpdate,\\n        toggleClass = _vars.toggleClass,\\n        id = _vars.id,\\n        onToggle = _vars.onToggle,\\n        onRefresh = _vars.onRefresh,\\n        scrub = _vars.scrub,\\n        trigger = _vars.trigger,\\n        pin = _vars.pin,\\n        pinSpacing = _vars.pinSpacing,\\n        invalidateOnRefresh = _vars.invalidateOnRefresh,\\n        anticipatePin = _vars.anticipatePin,\\n        onScrubComplete = _vars.onScrubComplete,\\n        onSnapComplete = _vars.onSnapComplete,\\n        once = _vars.once,\\n        snap = _vars.snap,\\n        pinReparent = _vars.pinReparent,\\n        pinSpacer = _vars.pinSpacer,\\n        containerAnimation = _vars.containerAnimation,\\n        fastScrollEnd = _vars.fastScrollEnd,\\n        preventOverlaps = _vars.preventOverlaps,\\n        direction = vars.horizontal || vars.containerAnimation && vars.horizontal !== false ? _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal : _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical,\\n        isToggle = !scrub && scrub !== 0,\\n        scroller = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(vars.scroller || _win),\\n        scrollerCache = gsap.core.getCache(scroller),\\n        isViewport = _isViewport(scroller),\\n        useFixedPosition = (\\\"pinType\\\" in vars ? vars.pinType : (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(scroller, \\\"pinType\\\") || isViewport && \\\"fixed\\\") === \\\"fixed\\\",\\n        callbacks = [vars.onEnter, vars.onLeave, vars.onEnterBack, vars.onLeaveBack],\\n        toggleActions = isToggle && vars.toggleActions.split(\\\" \\\"),\\n        markers = \\\"markers\\\" in vars ? vars.markers : _defaults.markers,\\n        borderWidth = isViewport ? 0 : parseFloat(_getComputedStyle(scroller)[\\\"border\\\" + direction.p2 + _Width]) || 0,\\n        self = this,\\n        onRefreshInit = vars.onRefreshInit && function () {\\n      return vars.onRefreshInit(self);\\n    },\\n        getScrollerSize = _getSizeFunc(scroller, isViewport, direction),\\n        getScrollerOffsets = _getOffsetsFunc(scroller, isViewport),\\n        lastSnap = 0,\\n        lastRefresh = 0,\\n        prevProgress = 0,\\n        scrollFunc = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getScrollFunc)(scroller, direction),\\n        tweenTo,\\n        pinCache,\\n        snapFunc,\\n        scroll1,\\n        scroll2,\\n        start,\\n        end,\\n        markerStart,\\n        markerEnd,\\n        markerStartTrigger,\\n        markerEndTrigger,\\n        markerVars,\\n        executingOnRefresh,\\n        change,\\n        pinOriginalState,\\n        pinActiveState,\\n        pinState,\\n        spacer,\\n        offset,\\n        pinGetter,\\n        pinSetter,\\n        pinStart,\\n        pinChange,\\n        spacingStart,\\n        spacerState,\\n        markerStartSetter,\\n        pinMoves,\\n        markerEndSetter,\\n        cs,\\n        snap1,\\n        snap2,\\n        scrubTween,\\n        scrubSmooth,\\n        snapDurClamp,\\n        snapDelayedCall,\\n        prevScroll,\\n        prevAnimProgress,\\n        caMarkerSetter,\\n        customRevertReturn; // for the sake of efficiency, _startClamp/_endClamp serve like a truthy value indicating that clamping was enabled on the start/end, and ALSO store the actual pre-clamped numeric value. We tap into that in ScrollSmoother for speed effects. So for example, if start=\\\"clamp(top bottom)\\\" results in a start of -100 naturally, it would get clamped to 0 but -100 would be stored in _startClamp.\\n\\n\\n    self._startClamp = self._endClamp = false;\\n    self._dir = direction;\\n    anticipatePin *= 45;\\n    self.scroller = scroller;\\n    self.scroll = containerAnimation ? containerAnimation.time.bind(containerAnimation) : scrollFunc;\\n    scroll1 = scrollFunc();\\n    self.vars = vars;\\n    animation = animation || vars.animation;\\n\\n    if (\\\"refreshPriority\\\" in vars) {\\n      _sort = 1;\\n      vars.refreshPriority === -9999 && (_primary = self); // used by ScrollSmoother\\n    }\\n\\n    scrollerCache.tweenScroll = scrollerCache.tweenScroll || {\\n      top: _getTweenCreator(scroller, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical),\\n      left: _getTweenCreator(scroller, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal)\\n    };\\n    self.tweenTo = tweenTo = scrollerCache.tweenScroll[direction.p];\\n\\n    self.scrubDuration = function (value) {\\n      scrubSmooth = _isNumber(value) && value;\\n\\n      if (!scrubSmooth) {\\n        scrubTween && scrubTween.progress(1).kill();\\n        scrubTween = 0;\\n      } else {\\n        scrubTween ? scrubTween.duration(value) : scrubTween = gsap.to(animation, {\\n          ease: \\\"expo\\\",\\n          totalProgress: \\\"+=0\\\",\\n          inherit: false,\\n          duration: scrubSmooth,\\n          paused: true,\\n          onComplete: function onComplete() {\\n            return onScrubComplete && onScrubComplete(self);\\n          }\\n        });\\n      }\\n    };\\n\\n    if (animation) {\\n      animation.vars.lazy = false;\\n      animation._initted && !self.isReverted || animation.vars.immediateRender !== false && vars.immediateRender !== false && animation.duration() && animation.render(0, true, true); // special case: if this ScrollTrigger gets re-initted, a from() tween with a stagger could get initted initially and then reverted on the re-init which means it'll need to get rendered again here to properly display things. Otherwise, See https://gsap.com/forums/topic/36777-scrollsmoother-splittext-nextjs/ and https://codepen.io/GreenSock/pen/eYPyPpd?editors=0010\\n\\n      self.animation = animation.pause();\\n      animation.scrollTrigger = self;\\n      self.scrubDuration(scrub);\\n      snap1 = 0;\\n      id || (id = animation.vars.id);\\n    }\\n\\n    if (snap) {\\n      // TODO: potential idea: use legitimate CSS scroll snapping by pushing invisible elements into the DOM that serve as snap positions, and toggle the document.scrollingElement.style.scrollSnapType onToggle. See https://codepen.io/GreenSock/pen/JjLrgWM for a quick proof of concept.\\n      if (!_isObject(snap) || snap.push) {\\n        snap = {\\n          snapTo: snap\\n        };\\n      }\\n\\n      \\\"scrollBehavior\\\" in _body.style && gsap.set(isViewport ? [_body, _docEl] : scroller, {\\n        scrollBehavior: \\\"auto\\\"\\n      }); // smooth scrolling doesn't work with snap.\\n\\n      _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.forEach(function (o) {\\n        return _isFunction(o) && o.target === (isViewport ? _doc.scrollingElement || _docEl : scroller) && (o.smooth = false);\\n      }); // note: set smooth to false on both the vertical and horizontal scroll getters/setters\\n\\n\\n      snapFunc = _isFunction(snap.snapTo) ? snap.snapTo : snap.snapTo === \\\"labels\\\" ? _getClosestLabel(animation) : snap.snapTo === \\\"labelsDirectional\\\" ? _getLabelAtDirection(animation) : snap.directional !== false ? function (value, st) {\\n        return _snapDirectional(snap.snapTo)(value, _getTime() - lastRefresh < 500 ? 0 : st.direction);\\n      } : gsap.utils.snap(snap.snapTo);\\n      snapDurClamp = snap.duration || {\\n        min: 0.1,\\n        max: 2\\n      };\\n      snapDurClamp = _isObject(snapDurClamp) ? _clamp(snapDurClamp.min, snapDurClamp.max) : _clamp(snapDurClamp, snapDurClamp);\\n      snapDelayedCall = gsap.delayedCall(snap.delay || scrubSmooth / 2 || 0.1, function () {\\n        var scroll = scrollFunc(),\\n            refreshedRecently = _getTime() - lastRefresh < 500,\\n            tween = tweenTo.tween;\\n\\n        if ((refreshedRecently || Math.abs(self.getVelocity()) < 10) && !tween && !_pointerIsDown && lastSnap !== scroll) {\\n          var progress = (scroll - start) / change,\\n              totalProgress = animation && !isToggle ? animation.totalProgress() : progress,\\n              velocity = refreshedRecently ? 0 : (totalProgress - snap2) / (_getTime() - _time2) * 1000 || 0,\\n              change1 = gsap.utils.clamp(-progress, 1 - progress, _abs(velocity / 2) * velocity / 0.185),\\n              naturalEnd = progress + (snap.inertia === false ? 0 : change1),\\n              endValue,\\n              endScroll,\\n              _snap = snap,\\n              onStart = _snap.onStart,\\n              _onInterrupt = _snap.onInterrupt,\\n              _onComplete = _snap.onComplete;\\n          endValue = snapFunc(naturalEnd, self);\\n          _isNumber(endValue) || (endValue = naturalEnd); // in case the function didn't return a number, fall back to using the naturalEnd\\n\\n          endScroll = Math.max(0, Math.round(start + endValue * change));\\n\\n          if (scroll <= end && scroll >= start && endScroll !== scroll) {\\n            if (tween && !tween._initted && tween.data <= _abs(endScroll - scroll)) {\\n              // there's an overlapping snap! So we must figure out which one is closer and let that tween live.\\n              return;\\n            }\\n\\n            if (snap.inertia === false) {\\n              change1 = endValue - progress;\\n            }\\n\\n            tweenTo(endScroll, {\\n              duration: snapDurClamp(_abs(Math.max(_abs(naturalEnd - totalProgress), _abs(endValue - totalProgress)) * 0.185 / velocity / 0.05 || 0)),\\n              ease: snap.ease || \\\"power3\\\",\\n              data: _abs(endScroll - scroll),\\n              // record the distance so that if another snap tween occurs (conflict) we can prioritize the closest snap.\\n              onInterrupt: function onInterrupt() {\\n                return snapDelayedCall.restart(true) && _onInterrupt && _onInterrupt(self);\\n              },\\n              onComplete: function onComplete() {\\n                self.update();\\n                lastSnap = scrollFunc();\\n\\n                if (animation && !isToggle) {\\n                  // the resolution of the scrollbar is limited, so we should correct the scrubbed animation's playhead at the end to match EXACTLY where it was supposed to snap\\n                  scrubTween ? scrubTween.resetTo(\\\"totalProgress\\\", endValue, animation._tTime / animation._tDur) : animation.progress(endValue);\\n                }\\n\\n                snap1 = snap2 = animation && !isToggle ? animation.totalProgress() : self.progress;\\n                onSnapComplete && onSnapComplete(self);\\n                _onComplete && _onComplete(self);\\n              }\\n            }, scroll, change1 * change, endScroll - scroll - change1 * change);\\n            onStart && onStart(self, tweenTo.tween);\\n          }\\n        } else if (self.isActive && lastSnap !== scroll) {\\n          snapDelayedCall.restart(true);\\n        }\\n      }).pause();\\n    }\\n\\n    id && (_ids[id] = self);\\n    trigger = self.trigger = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(trigger || pin !== true && pin); // if a trigger has some kind of scroll-related effect applied that could contaminate the \\\"y\\\" or \\\"x\\\" position (like a ScrollSmoother effect), we needed a way to temporarily revert it, so we use the stRevert property of the gsCache. It can return another function that we'll call at the end so it can return to its normal state.\\n\\n    customRevertReturn = trigger && trigger._gsap && trigger._gsap.stRevert;\\n    customRevertReturn && (customRevertReturn = customRevertReturn(self));\\n    pin = pin === true ? trigger : (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(pin);\\n    _isString(toggleClass) && (toggleClass = {\\n      targets: trigger,\\n      className: toggleClass\\n    });\\n\\n    if (pin) {\\n      pinSpacing === false || pinSpacing === _margin || (pinSpacing = !pinSpacing && pin.parentNode && pin.parentNode.style && _getComputedStyle(pin.parentNode).display === \\\"flex\\\" ? false : _padding); // if the parent is display: flex, don't apply pinSpacing by default. We should check that pin.parentNode is an element (not shadow dom window)\\n\\n      self.pin = pin;\\n      pinCache = gsap.core.getCache(pin);\\n\\n      if (!pinCache.spacer) {\\n        // record the spacer and pinOriginalState on the cache in case someone tries pinning the same element with MULTIPLE ScrollTriggers - we don't want to have multiple spacers or record the \\\"original\\\" pin state after it has already been affected by another ScrollTrigger.\\n        if (pinSpacer) {\\n          pinSpacer = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(pinSpacer);\\n          pinSpacer && !pinSpacer.nodeType && (pinSpacer = pinSpacer.current || pinSpacer.nativeElement); // for React & Angular\\n\\n          pinCache.spacerIsNative = !!pinSpacer;\\n          pinSpacer && (pinCache.spacerState = _getState(pinSpacer));\\n        }\\n\\n        pinCache.spacer = spacer = pinSpacer || _doc.createElement(\\\"div\\\");\\n        spacer.classList.add(\\\"pin-spacer\\\");\\n        id && spacer.classList.add(\\\"pin-spacer-\\\" + id);\\n        pinCache.pinState = pinOriginalState = _getState(pin);\\n      } else {\\n        pinOriginalState = pinCache.pinState;\\n      }\\n\\n      vars.force3D !== false && gsap.set(pin, {\\n        force3D: true\\n      });\\n      self.spacer = spacer = pinCache.spacer;\\n      cs = _getComputedStyle(pin);\\n      spacingStart = cs[pinSpacing + direction.os2];\\n      pinGetter = gsap.getProperty(pin);\\n      pinSetter = gsap.quickSetter(pin, direction.a, _px); // pin.firstChild && !_maxScroll(pin, direction) && (pin.style.overflow = \\\"hidden\\\"); // protects from collapsing margins, but can have unintended consequences as demonstrated here: https://codepen.io/GreenSock/pen/1e42c7a73bfa409d2cf1e184e7a4248d so it was removed in favor of just telling people to set up their CSS to avoid the collapsing margins (overflow: hidden | auto is just one option. Another is border-top: 1px solid transparent).\\n\\n      _swapPinIn(pin, spacer, cs);\\n\\n      pinState = _getState(pin);\\n    }\\n\\n    if (markers) {\\n      markerVars = _isObject(markers) ? _setDefaults(markers, _markerDefaults) : _markerDefaults;\\n      markerStartTrigger = _createMarker(\\\"scroller-start\\\", id, scroller, direction, markerVars, 0);\\n      markerEndTrigger = _createMarker(\\\"scroller-end\\\", id, scroller, direction, markerVars, 0, markerStartTrigger);\\n      offset = markerStartTrigger[\\\"offset\\\" + direction.op.d2];\\n\\n      var content = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)((0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(scroller, \\\"content\\\") || scroller);\\n\\n      markerStart = this.markerStart = _createMarker(\\\"start\\\", id, content, direction, markerVars, offset, 0, containerAnimation);\\n      markerEnd = this.markerEnd = _createMarker(\\\"end\\\", id, content, direction, markerVars, offset, 0, containerAnimation);\\n      containerAnimation && (caMarkerSetter = gsap.quickSetter([markerStart, markerEnd], direction.a, _px));\\n\\n      if (!useFixedPosition && !(_Observer_js__WEBPACK_IMPORTED_MODULE_0__._proxies.length && (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(scroller, \\\"fixedMarkers\\\") === true)) {\\n        _makePositionable(isViewport ? _body : scroller);\\n\\n        gsap.set([markerStartTrigger, markerEndTrigger], {\\n          force3D: true\\n        });\\n        markerStartSetter = gsap.quickSetter(markerStartTrigger, direction.a, _px);\\n        markerEndSetter = gsap.quickSetter(markerEndTrigger, direction.a, _px);\\n      }\\n    }\\n\\n    if (containerAnimation) {\\n      var oldOnUpdate = containerAnimation.vars.onUpdate,\\n          oldParams = containerAnimation.vars.onUpdateParams;\\n      containerAnimation.eventCallback(\\\"onUpdate\\\", function () {\\n        self.update(0, 0, 1);\\n        oldOnUpdate && oldOnUpdate.apply(containerAnimation, oldParams || []);\\n      });\\n    }\\n\\n    self.previous = function () {\\n      return _triggers[_triggers.indexOf(self) - 1];\\n    };\\n\\n    self.next = function () {\\n      return _triggers[_triggers.indexOf(self) + 1];\\n    };\\n\\n    self.revert = function (revert, temp) {\\n      if (!temp) {\\n        return self.kill(true);\\n      } // for compatibility with gsap.context() and gsap.matchMedia() which call revert()\\n\\n\\n      var r = revert !== false || !self.enabled,\\n          prevRefreshing = _refreshing;\\n\\n      if (r !== self.isReverted) {\\n        if (r) {\\n          prevScroll = Math.max(scrollFunc(), self.scroll.rec || 0); // record the scroll so we can revert later (repositioning/pinning things can affect scroll position). In the static refresh() method, we first record all the scroll positions as a reference.\\n\\n          prevProgress = self.progress;\\n          prevAnimProgress = animation && animation.progress();\\n        }\\n\\n        markerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(function (m) {\\n          return m.style.display = r ? \\\"none\\\" : \\\"block\\\";\\n        });\\n\\n        if (r) {\\n          _refreshing = self;\\n          self.update(r); // make sure the pin is back in its original position so that all the measurements are correct. do this BEFORE swapping the pin out\\n        }\\n\\n        if (pin && (!pinReparent || !self.isActive)) {\\n          if (r) {\\n            _swapPinOut(pin, spacer, pinOriginalState);\\n          } else {\\n            _swapPinIn(pin, spacer, _getComputedStyle(pin), spacerState);\\n          }\\n        }\\n\\n        r || self.update(r); // when we're restoring, the update should run AFTER swapping the pin into its pin-spacer.\\n\\n        _refreshing = prevRefreshing; // restore. We set it to true during the update() so that things fire properly in there.\\n\\n        self.isReverted = r;\\n      }\\n    };\\n\\n    self.refresh = function (soft, force, position, pinOffset) {\\n      // position is typically only defined if it's coming from setPositions() - it's a way to skip the normal parsing. pinOffset is also only from setPositions() and is mostly related to fancy stuff we need to do in ScrollSmoother with effects\\n      if ((_refreshing || !self.enabled) && !force) {\\n        return;\\n      }\\n\\n      if (pin && soft && _lastScrollTime) {\\n        _addListener(ScrollTrigger, \\\"scrollEnd\\\", _softRefresh);\\n\\n        return;\\n      }\\n\\n      !_refreshingAll && onRefreshInit && onRefreshInit(self);\\n      _refreshing = self;\\n\\n      if (tweenTo.tween && !position) {\\n        // we skip this if a position is passed in because typically that's from .setPositions() and it's best to allow in-progress snapping to continue.\\n        tweenTo.tween.kill();\\n        tweenTo.tween = 0;\\n      }\\n\\n      scrubTween && scrubTween.pause();\\n      invalidateOnRefresh && animation && animation.revert({\\n        kill: false\\n      }).invalidate();\\n      self.isReverted || self.revert(true, true);\\n      self._subPinOffset = false; // we'll set this to true in the sub-pins if we find any\\n\\n      var size = getScrollerSize(),\\n          scrollerBounds = getScrollerOffsets(),\\n          max = containerAnimation ? containerAnimation.duration() : _maxScroll(scroller, direction),\\n          isFirstRefresh = change <= 0.01,\\n          offset = 0,\\n          otherPinOffset = pinOffset || 0,\\n          parsedEnd = _isObject(position) ? position.end : vars.end,\\n          parsedEndTrigger = vars.endTrigger || trigger,\\n          parsedStart = _isObject(position) ? position.start : vars.start || (vars.start === 0 || !trigger ? 0 : pin ? \\\"0 0\\\" : \\\"0 100%\\\"),\\n          pinnedContainer = self.pinnedContainer = vars.pinnedContainer && (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(vars.pinnedContainer, self),\\n          triggerIndex = trigger && Math.max(0, _triggers.indexOf(self)) || 0,\\n          i = triggerIndex,\\n          cs,\\n          bounds,\\n          scroll,\\n          isVertical,\\n          override,\\n          curTrigger,\\n          curPin,\\n          oppositeScroll,\\n          initted,\\n          revertedPins,\\n          forcedOverflow,\\n          markerStartOffset,\\n          markerEndOffset;\\n\\n      if (markers && _isObject(position)) {\\n        // if we alter the start/end positions with .setPositions(), it generally feeds in absolute NUMBERS which don't convey information about where to line up the markers, so to keep it intuitive, we record how far the trigger positions shift after applying the new numbers and then offset by that much in the opposite direction. We do the same to the associated trigger markers too of course.\\n        markerStartOffset = gsap.getProperty(markerStartTrigger, direction.p);\\n        markerEndOffset = gsap.getProperty(markerEndTrigger, direction.p);\\n      }\\n\\n      while (i-- > 0) {\\n        // user might try to pin the same element more than once, so we must find any prior triggers with the same pin, revert them, and determine how long they're pinning so that we can offset things appropriately. Make sure we revert from last to first so that things \\\"rewind\\\" properly.\\n        curTrigger = _triggers[i];\\n        curTrigger.end || curTrigger.refresh(0, 1) || (_refreshing = self); // if it's a timeline-based trigger that hasn't been fully initialized yet because it's waiting for 1 tick, just force the refresh() here, otherwise if it contains a pin that's supposed to affect other ScrollTriggers further down the page, they won't be adjusted properly.\\n\\n        curPin = curTrigger.pin;\\n\\n        if (curPin && (curPin === trigger || curPin === pin || curPin === pinnedContainer) && !curTrigger.isReverted) {\\n          revertedPins || (revertedPins = []);\\n          revertedPins.unshift(curTrigger); // we'll revert from first to last to make sure things reach their end state properly\\n\\n          curTrigger.revert(true, true);\\n        }\\n\\n        if (curTrigger !== _triggers[i]) {\\n          // in case it got removed.\\n          triggerIndex--;\\n          i--;\\n        }\\n      }\\n\\n      _isFunction(parsedStart) && (parsedStart = parsedStart(self));\\n      parsedStart = _parseClamp(parsedStart, \\\"start\\\", self);\\n      start = _parsePosition(parsedStart, trigger, size, direction, scrollFunc(), markerStart, markerStartTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max, containerAnimation, self._startClamp && \\\"_startClamp\\\") || (pin ? -0.001 : 0);\\n      _isFunction(parsedEnd) && (parsedEnd = parsedEnd(self));\\n\\n      if (_isString(parsedEnd) && !parsedEnd.indexOf(\\\"+=\\\")) {\\n        if (~parsedEnd.indexOf(\\\" \\\")) {\\n          parsedEnd = (_isString(parsedStart) ? parsedStart.split(\\\" \\\")[0] : \\\"\\\") + parsedEnd;\\n        } else {\\n          offset = _offsetToPx(parsedEnd.substr(2), size);\\n          parsedEnd = _isString(parsedStart) ? parsedStart : (containerAnimation ? gsap.utils.mapRange(0, containerAnimation.duration(), containerAnimation.scrollTrigger.start, containerAnimation.scrollTrigger.end, start) : start) + offset; // _parsePosition won't factor in the offset if the start is a number, so do it here.\\n\\n          parsedEndTrigger = trigger;\\n        }\\n      }\\n\\n      parsedEnd = _parseClamp(parsedEnd, \\\"end\\\", self);\\n      end = Math.max(start, _parsePosition(parsedEnd || (parsedEndTrigger ? \\\"100% 0\\\" : max), parsedEndTrigger, size, direction, scrollFunc() + offset, markerEnd, markerEndTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max, containerAnimation, self._endClamp && \\\"_endClamp\\\")) || -0.001;\\n      offset = 0;\\n      i = triggerIndex;\\n\\n      while (i--) {\\n        curTrigger = _triggers[i];\\n        curPin = curTrigger.pin;\\n\\n        if (curPin && curTrigger.start - curTrigger._pinPush <= start && !containerAnimation && curTrigger.end > 0) {\\n          cs = curTrigger.end - (self._startClamp ? Math.max(0, curTrigger.start) : curTrigger.start);\\n\\n          if ((curPin === trigger && curTrigger.start - curTrigger._pinPush < start || curPin === pinnedContainer) && isNaN(parsedStart)) {\\n            // numeric start values shouldn't be offset at all - treat them as absolute\\n            offset += cs * (1 - curTrigger.progress);\\n          }\\n\\n          curPin === pin && (otherPinOffset += cs);\\n        }\\n      }\\n\\n      start += offset;\\n      end += offset;\\n      self._startClamp && (self._startClamp += offset);\\n\\n      if (self._endClamp && !_refreshingAll) {\\n        self._endClamp = end || -0.001;\\n        end = Math.min(end, _maxScroll(scroller, direction));\\n      }\\n\\n      change = end - start || (start -= 0.01) && 0.001;\\n\\n      if (isFirstRefresh) {\\n        // on the very first refresh(), the prevProgress couldn't have been accurate yet because the start/end were never calculated, so we set it here. Before 3.11.5, it could lead to an inaccurate scroll position restoration with snapping.\\n        prevProgress = gsap.utils.clamp(0, 1, gsap.utils.normalize(start, end, prevScroll));\\n      }\\n\\n      self._pinPush = otherPinOffset;\\n\\n      if (markerStart && offset) {\\n        // offset the markers if necessary\\n        cs = {};\\n        cs[direction.a] = \\\"+=\\\" + offset;\\n        pinnedContainer && (cs[direction.p] = \\\"-=\\\" + scrollFunc());\\n        gsap.set([markerStart, markerEnd], cs);\\n      }\\n\\n      if (pin && !(_clampingMax && self.end >= _maxScroll(scroller, direction))) {\\n        cs = _getComputedStyle(pin);\\n        isVertical = direction === _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical;\\n        scroll = scrollFunc(); // recalculate because the triggers can affect the scroll\\n\\n        pinStart = parseFloat(pinGetter(direction.a)) + otherPinOffset;\\n\\n        if (!max && end > 1) {\\n          // makes sure the scroller has a scrollbar, otherwise if something has width: 100%, for example, it would be too big (exclude the scrollbar). See https://gsap.com/forums/topic/25182-scrolltrigger-width-of-page-increase-where-markers-are-set-to-false/\\n          forcedOverflow = (isViewport ? _doc.scrollingElement || _docEl : scroller).style;\\n          forcedOverflow = {\\n            style: forcedOverflow,\\n            value: forcedOverflow[\\\"overflow\\\" + direction.a.toUpperCase()]\\n          };\\n\\n          if (isViewport && _getComputedStyle(_body)[\\\"overflow\\\" + direction.a.toUpperCase()] !== \\\"scroll\\\") {\\n            // avoid an extra scrollbar if BOTH <html> and <body> have overflow set to \\\"scroll\\\"\\n            forcedOverflow.style[\\\"overflow\\\" + direction.a.toUpperCase()] = \\\"scroll\\\";\\n          }\\n        }\\n\\n        _swapPinIn(pin, spacer, cs);\\n\\n        pinState = _getState(pin); // transforms will interfere with the top/left/right/bottom placement, so remove them temporarily. getBoundingClientRect() factors in transforms.\\n\\n        bounds = _getBounds(pin, true);\\n        oppositeScroll = useFixedPosition && (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getScrollFunc)(scroller, isVertical ? _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal : _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical)();\\n\\n        if (pinSpacing) {\\n          spacerState = [pinSpacing + direction.os2, change + otherPinOffset + _px];\\n          spacerState.t = spacer;\\n          i = pinSpacing === _padding ? _getSize(pin, direction) + change + otherPinOffset : 0;\\n\\n          if (i) {\\n            spacerState.push(direction.d, i + _px); // for box-sizing: border-box (must include padding).\\n\\n            spacer.style.flexBasis !== \\\"auto\\\" && (spacer.style.flexBasis = i + _px);\\n          }\\n\\n          _setState(spacerState);\\n\\n          if (pinnedContainer) {\\n            // in ScrollTrigger.refresh(), we need to re-evaluate the pinContainer's size because this pinSpacing may stretch it out, but we can't just add the exact distance because depending on layout, it may not push things down or it may only do so partially.\\n            _triggers.forEach(function (t) {\\n              if (t.pin === pinnedContainer && t.vars.pinSpacing !== false) {\\n                t._subPinOffset = true;\\n              }\\n            });\\n          }\\n\\n          useFixedPosition && scrollFunc(prevScroll);\\n        } else {\\n          i = _getSize(pin, direction);\\n          i && spacer.style.flexBasis !== \\\"auto\\\" && (spacer.style.flexBasis = i + _px);\\n        }\\n\\n        if (useFixedPosition) {\\n          override = {\\n            top: bounds.top + (isVertical ? scroll - start : oppositeScroll) + _px,\\n            left: bounds.left + (isVertical ? oppositeScroll : scroll - start) + _px,\\n            boxSizing: \\\"border-box\\\",\\n            position: \\\"fixed\\\"\\n          };\\n          override[_width] = override[\\\"max\\\" + _Width] = Math.ceil(bounds.width) + _px;\\n          override[_height] = override[\\\"max\\\" + _Height] = Math.ceil(bounds.height) + _px;\\n          override[_margin] = override[_margin + _Top] = override[_margin + _Right] = override[_margin + _Bottom] = override[_margin + _Left] = \\\"0\\\";\\n          override[_padding] = cs[_padding];\\n          override[_padding + _Top] = cs[_padding + _Top];\\n          override[_padding + _Right] = cs[_padding + _Right];\\n          override[_padding + _Bottom] = cs[_padding + _Bottom];\\n          override[_padding + _Left] = cs[_padding + _Left];\\n          pinActiveState = _copyState(pinOriginalState, override, pinReparent);\\n          _refreshingAll && scrollFunc(0);\\n        }\\n\\n        if (animation) {\\n          // the animation might be affecting the transform, so we must jump to the end, check the value, and compensate accordingly. Otherwise, when it becomes unpinned, the pinSetter() will get set to a value that doesn't include whatever the animation did.\\n          initted = animation._initted; // if not, we must invalidate() after this step, otherwise it could lock in starting values prematurely.\\n\\n          _suppressOverwrites(1);\\n\\n          animation.render(animation.duration(), true, true);\\n          pinChange = pinGetter(direction.a) - pinStart + change + otherPinOffset;\\n          pinMoves = Math.abs(change - pinChange) > 1;\\n          useFixedPosition && pinMoves && pinActiveState.splice(pinActiveState.length - 2, 2); // transform is the last property/value set in the state Array. Since the animation is controlling that, we should omit it.\\n\\n          animation.render(0, true, true);\\n          initted || animation.invalidate(true);\\n          animation.parent || animation.totalTime(animation.totalTime()); // if, for example, a toggleAction called play() and then refresh() happens and when we render(1) above, it would cause the animation to complete and get removed from its parent, so this makes sure it gets put back in.\\n\\n          _suppressOverwrites(0);\\n        } else {\\n          pinChange = change;\\n        }\\n\\n        forcedOverflow && (forcedOverflow.value ? forcedOverflow.style[\\\"overflow\\\" + direction.a.toUpperCase()] = forcedOverflow.value : forcedOverflow.style.removeProperty(\\\"overflow-\\\" + direction.a));\\n      } else if (trigger && scrollFunc() && !containerAnimation) {\\n        // it may be INSIDE a pinned element, so walk up the tree and look for any elements with _pinOffset to compensate because anything with pinSpacing that's already scrolled would throw off the measurements in getBoundingClientRect()\\n        bounds = trigger.parentNode;\\n\\n        while (bounds && bounds !== _body) {\\n          if (bounds._pinOffset) {\\n            start -= bounds._pinOffset;\\n            end -= bounds._pinOffset;\\n          }\\n\\n          bounds = bounds.parentNode;\\n        }\\n      }\\n\\n      revertedPins && revertedPins.forEach(function (t) {\\n        return t.revert(false, true);\\n      });\\n      self.start = start;\\n      self.end = end;\\n      scroll1 = scroll2 = _refreshingAll ? prevScroll : scrollFunc(); // reset velocity\\n\\n      if (!containerAnimation && !_refreshingAll) {\\n        scroll1 < prevScroll && scrollFunc(prevScroll);\\n        self.scroll.rec = 0;\\n      }\\n\\n      self.revert(false, true);\\n      lastRefresh = _getTime();\\n\\n      if (snapDelayedCall) {\\n        lastSnap = -1; // just so snapping gets re-enabled, clear out any recorded last value\\n        // self.isActive && scrollFunc(start + change * prevProgress); // previously this line was here to ensure that when snapping kicks in, it's from the previous progress but in some cases that's not desirable, like an all-page ScrollTrigger when new content gets added to the page, that'd totally change the progress.\\n\\n        snapDelayedCall.restart(true);\\n      }\\n\\n      _refreshing = 0;\\n      animation && isToggle && (animation._initted || prevAnimProgress) && animation.progress() !== prevAnimProgress && animation.progress(prevAnimProgress || 0, true).render(animation.time(), true, true); // must force a re-render because if saveStyles() was used on the target(s), the styles could have been wiped out during the refresh().\\n\\n      if (isFirstRefresh || prevProgress !== self.progress || containerAnimation || invalidateOnRefresh || animation && !animation._initted) {\\n        // ensures that the direction is set properly (when refreshing, progress is set back to 0 initially, then back again to wherever it needs to be) and that callbacks are triggered.\\n        animation && !isToggle && animation.totalProgress(containerAnimation && start < -0.001 && !prevProgress ? gsap.utils.normalize(start, end, 0) : prevProgress, true); // to avoid issues where animation callbacks like onStart aren't triggered.\\n\\n        self.progress = isFirstRefresh || (scroll1 - start) / change === prevProgress ? 0 : prevProgress;\\n      }\\n\\n      pin && pinSpacing && (spacer._pinOffset = Math.round(self.progress * pinChange));\\n      scrubTween && scrubTween.invalidate();\\n\\n      if (!isNaN(markerStartOffset)) {\\n        // numbers were passed in for the position which are absolute, so instead of just putting the markers at the very bottom of the viewport, we figure out how far they shifted down (it's safe to assume they were originally positioned in closer relation to the trigger element with values like \\\"top\\\", \\\"center\\\", a percentage or whatever, so we offset that much in the opposite direction to basically revert them to the relative position thy were at previously.\\n        markerStartOffset -= gsap.getProperty(markerStartTrigger, direction.p);\\n        markerEndOffset -= gsap.getProperty(markerEndTrigger, direction.p);\\n\\n        _shiftMarker(markerStartTrigger, direction, markerStartOffset);\\n\\n        _shiftMarker(markerStart, direction, markerStartOffset - (pinOffset || 0));\\n\\n        _shiftMarker(markerEndTrigger, direction, markerEndOffset);\\n\\n        _shiftMarker(markerEnd, direction, markerEndOffset - (pinOffset || 0));\\n      }\\n\\n      isFirstRefresh && !_refreshingAll && self.update(); // edge case - when you reload a page when it's already scrolled down, some browsers fire a \\\"scroll\\\" event before DOMContentLoaded, triggering an updateAll(). If we don't update the self.progress as part of refresh(), then when it happens next, it may record prevProgress as 0 when it really shouldn't, potentially causing a callback in an animation to fire again.\\n\\n      if (onRefresh && !_refreshingAll && !executingOnRefresh) {\\n        // when refreshing all, we do extra work to correct pinnedContainer sizes and ensure things don't exceed the maxScroll, so we should do all the refreshes at the end after all that work so that the start/end values are corrected.\\n        executingOnRefresh = true;\\n        onRefresh(self);\\n        executingOnRefresh = false;\\n      }\\n    };\\n\\n    self.getVelocity = function () {\\n      return (scrollFunc() - scroll2) / (_getTime() - _time2) * 1000 || 0;\\n    };\\n\\n    self.endAnimation = function () {\\n      _endAnimation(self.callbackAnimation);\\n\\n      if (animation) {\\n        scrubTween ? scrubTween.progress(1) : !animation.paused() ? _endAnimation(animation, animation.reversed()) : isToggle || _endAnimation(animation, self.direction < 0, 1);\\n      }\\n    };\\n\\n    self.labelToScroll = function (label) {\\n      return animation && animation.labels && (start || self.refresh() || start) + animation.labels[label] / animation.duration() * change || 0;\\n    };\\n\\n    self.getTrailing = function (name) {\\n      var i = _triggers.indexOf(self),\\n          a = self.direction > 0 ? _triggers.slice(0, i).reverse() : _triggers.slice(i + 1);\\n\\n      return (_isString(name) ? a.filter(function (t) {\\n        return t.vars.preventOverlaps === name;\\n      }) : a).filter(function (t) {\\n        return self.direction > 0 ? t.end <= start : t.start >= end;\\n      });\\n    };\\n\\n    self.update = function (reset, recordVelocity, forceFake) {\\n      if (containerAnimation && !forceFake && !reset) {\\n        return;\\n      }\\n\\n      var scroll = _refreshingAll === true ? prevScroll : self.scroll(),\\n          p = reset ? 0 : (scroll - start) / change,\\n          clipped = p < 0 ? 0 : p > 1 ? 1 : p || 0,\\n          prevProgress = self.progress,\\n          isActive,\\n          wasActive,\\n          toggleState,\\n          action,\\n          stateChanged,\\n          toggled,\\n          isAtMax,\\n          isTakingAction;\\n\\n      if (recordVelocity) {\\n        scroll2 = scroll1;\\n        scroll1 = containerAnimation ? scrollFunc() : scroll;\\n\\n        if (snap) {\\n          snap2 = snap1;\\n          snap1 = animation && !isToggle ? animation.totalProgress() : clipped;\\n        }\\n      } // anticipate the pinning a few ticks ahead of time based on velocity to avoid a visual glitch due to the fact that most browsers do scrolling on a separate thread (not synced with requestAnimationFrame).\\n\\n\\n      if (anticipatePin && pin && !_refreshing && !_startup && _lastScrollTime) {\\n        if (!clipped && start < scroll + (scroll - scroll2) / (_getTime() - _time2) * anticipatePin) {\\n          clipped = 0.0001;\\n        } else if (clipped === 1 && end > scroll + (scroll - scroll2) / (_getTime() - _time2) * anticipatePin) {\\n          clipped = 0.9999;\\n        }\\n      }\\n\\n      if (clipped !== prevProgress && self.enabled) {\\n        isActive = self.isActive = !!clipped && clipped < 1;\\n        wasActive = !!prevProgress && prevProgress < 1;\\n        toggled = isActive !== wasActive;\\n        stateChanged = toggled || !!clipped !== !!prevProgress; // could go from start all the way to end, thus it didn't toggle but it did change state in a sense (may need to fire a callback)\\n\\n        self.direction = clipped > prevProgress ? 1 : -1;\\n        self.progress = clipped;\\n\\n        if (stateChanged && !_refreshing) {\\n          toggleState = clipped && !prevProgress ? 0 : clipped === 1 ? 1 : prevProgress === 1 ? 2 : 3; // 0 = enter, 1 = leave, 2 = enterBack, 3 = leaveBack (we prioritize the FIRST encounter, thus if you scroll really fast past the onEnter and onLeave in one tick, it'd prioritize onEnter.\\n\\n          if (isToggle) {\\n            action = !toggled && toggleActions[toggleState + 1] !== \\\"none\\\" && toggleActions[toggleState + 1] || toggleActions[toggleState]; // if it didn't toggle, that means it shot right past and since we prioritize the \\\"enter\\\" action, we should switch to the \\\"leave\\\" in this case (but only if one is defined)\\n\\n            isTakingAction = animation && (action === \\\"complete\\\" || action === \\\"reset\\\" || action in animation);\\n          }\\n        }\\n\\n        preventOverlaps && (toggled || isTakingAction) && (isTakingAction || scrub || !animation) && (_isFunction(preventOverlaps) ? preventOverlaps(self) : self.getTrailing(preventOverlaps).forEach(function (t) {\\n          return t.endAnimation();\\n        }));\\n\\n        if (!isToggle) {\\n          if (scrubTween && !_refreshing && !_startup) {\\n            scrubTween._dp._time - scrubTween._start !== scrubTween._time && scrubTween.render(scrubTween._dp._time - scrubTween._start); // if there's a scrub on both the container animation and this one (or a ScrollSmoother), the update order would cause this one not to have rendered yet, so it wouldn't make any progress before we .restart() it heading toward the new progress so it'd appear stuck thus we force a render here.\\n\\n            if (scrubTween.resetTo) {\\n              scrubTween.resetTo(\\\"totalProgress\\\", clipped, animation._tTime / animation._tDur);\\n            } else {\\n              // legacy support (courtesy), before 3.10.0\\n              scrubTween.vars.totalProgress = clipped;\\n              scrubTween.invalidate().restart();\\n            }\\n          } else if (animation) {\\n            animation.totalProgress(clipped, !!(_refreshing && (lastRefresh || reset)));\\n          }\\n        }\\n\\n        if (pin) {\\n          reset && pinSpacing && (spacer.style[pinSpacing + direction.os2] = spacingStart);\\n\\n          if (!useFixedPosition) {\\n            pinSetter(_round(pinStart + pinChange * clipped));\\n          } else if (stateChanged) {\\n            isAtMax = !reset && clipped > prevProgress && end + 1 > scroll && scroll + 1 >= _maxScroll(scroller, direction); // if it's at the VERY end of the page, don't switch away from position: fixed because it's pointless and it could cause a brief flash when the user scrolls back up (when it gets pinned again)\\n\\n            if (pinReparent) {\\n              if (!reset && (isActive || isAtMax)) {\\n                var bounds = _getBounds(pin, true),\\n                    _offset = scroll - start;\\n\\n                _reparent(pin, _body, bounds.top + (direction === _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical ? _offset : 0) + _px, bounds.left + (direction === _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical ? 0 : _offset) + _px);\\n              } else {\\n                _reparent(pin, spacer);\\n              }\\n            }\\n\\n            _setState(isActive || isAtMax ? pinActiveState : pinState);\\n\\n            pinMoves && clipped < 1 && isActive || pinSetter(pinStart + (clipped === 1 && !isAtMax ? pinChange : 0));\\n          }\\n        }\\n\\n        snap && !tweenTo.tween && !_refreshing && !_startup && snapDelayedCall.restart(true);\\n        toggleClass && (toggled || once && clipped && (clipped < 1 || !_limitCallbacks)) && _toArray(toggleClass.targets).forEach(function (el) {\\n          return el.classList[isActive || once ? \\\"add\\\" : \\\"remove\\\"](toggleClass.className);\\n        }); // classes could affect positioning, so do it even if reset or refreshing is true.\\n\\n        onUpdate && !isToggle && !reset && onUpdate(self);\\n\\n        if (stateChanged && !_refreshing) {\\n          if (isToggle) {\\n            if (isTakingAction) {\\n              if (action === \\\"complete\\\") {\\n                animation.pause().totalProgress(1);\\n              } else if (action === \\\"reset\\\") {\\n                animation.restart(true).pause();\\n              } else if (action === \\\"restart\\\") {\\n                animation.restart(true);\\n              } else {\\n                animation[action]();\\n              }\\n            }\\n\\n            onUpdate && onUpdate(self);\\n          }\\n\\n          if (toggled || !_limitCallbacks) {\\n            // on startup, the page could be scrolled and we don't want to fire callbacks that didn't toggle. For example onEnter shouldn't fire if the ScrollTrigger isn't actually entered.\\n            onToggle && toggled && _callback(self, onToggle);\\n            callbacks[toggleState] && _callback(self, callbacks[toggleState]);\\n            once && (clipped === 1 ? self.kill(false, 1) : callbacks[toggleState] = 0); // a callback shouldn't be called again if once is true.\\n\\n            if (!toggled) {\\n              // it's possible to go completely past, like from before the start to after the end (or vice-versa) in which case BOTH callbacks should be fired in that order\\n              toggleState = clipped === 1 ? 1 : 3;\\n              callbacks[toggleState] && _callback(self, callbacks[toggleState]);\\n            }\\n          }\\n\\n          if (fastScrollEnd && !isActive && Math.abs(self.getVelocity()) > (_isNumber(fastScrollEnd) ? fastScrollEnd : 2500)) {\\n            _endAnimation(self.callbackAnimation);\\n\\n            scrubTween ? scrubTween.progress(1) : _endAnimation(animation, action === \\\"reverse\\\" ? 1 : !clipped, 1);\\n          }\\n        } else if (isToggle && onUpdate && !_refreshing) {\\n          onUpdate(self);\\n        }\\n      } // update absolutely-positioned markers (only if the scroller isn't the viewport)\\n\\n\\n      if (markerEndSetter) {\\n        var n = containerAnimation ? scroll / containerAnimation.duration() * (containerAnimation._caScrollDist || 0) : scroll;\\n        markerStartSetter(n + (markerStartTrigger._isFlipped ? 1 : 0));\\n        markerEndSetter(n);\\n      }\\n\\n      caMarkerSetter && caMarkerSetter(-scroll / containerAnimation.duration() * (containerAnimation._caScrollDist || 0));\\n    };\\n\\n    self.enable = function (reset, refresh) {\\n      if (!self.enabled) {\\n        self.enabled = true;\\n\\n        _addListener(scroller, \\\"resize\\\", _onResize);\\n\\n        isViewport || _addListener(scroller, \\\"scroll\\\", _onScroll);\\n        onRefreshInit && _addListener(ScrollTrigger, \\\"refreshInit\\\", onRefreshInit);\\n\\n        if (reset !== false) {\\n          self.progress = prevProgress = 0;\\n          scroll1 = scroll2 = lastSnap = scrollFunc();\\n        }\\n\\n        refresh !== false && self.refresh();\\n      }\\n    };\\n\\n    self.getTween = function (snap) {\\n      return snap && tweenTo ? tweenTo.tween : scrubTween;\\n    };\\n\\n    self.setPositions = function (newStart, newEnd, keepClamp, pinOffset) {\\n      // doesn't persist after refresh()! Intended to be a way to override values that were set during refresh(), like you could set it in onRefresh()\\n      if (containerAnimation) {\\n        // convert ratios into scroll positions. Remember, start/end values on ScrollTriggers that have a containerAnimation refer to the time (in seconds), NOT scroll positions.\\n        var st = containerAnimation.scrollTrigger,\\n            duration = containerAnimation.duration(),\\n            _change = st.end - st.start;\\n\\n        newStart = st.start + _change * newStart / duration;\\n        newEnd = st.start + _change * newEnd / duration;\\n      }\\n\\n      self.refresh(false, false, {\\n        start: _keepClamp(newStart, keepClamp && !!self._startClamp),\\n        end: _keepClamp(newEnd, keepClamp && !!self._endClamp)\\n      }, pinOffset);\\n      self.update();\\n    };\\n\\n    self.adjustPinSpacing = function (amount) {\\n      if (spacerState && amount) {\\n        var i = spacerState.indexOf(direction.d) + 1;\\n        spacerState[i] = parseFloat(spacerState[i]) + amount + _px;\\n        spacerState[1] = parseFloat(spacerState[1]) + amount + _px;\\n\\n        _setState(spacerState);\\n      }\\n    };\\n\\n    self.disable = function (reset, allowAnimation) {\\n      if (self.enabled) {\\n        reset !== false && self.revert(true, true);\\n        self.enabled = self.isActive = false;\\n        allowAnimation || scrubTween && scrubTween.pause();\\n        prevScroll = 0;\\n        pinCache && (pinCache.uncache = 1);\\n        onRefreshInit && _removeListener(ScrollTrigger, \\\"refreshInit\\\", onRefreshInit);\\n\\n        if (snapDelayedCall) {\\n          snapDelayedCall.pause();\\n          tweenTo.tween && tweenTo.tween.kill() && (tweenTo.tween = 0);\\n        }\\n\\n        if (!isViewport) {\\n          var i = _triggers.length;\\n\\n          while (i--) {\\n            if (_triggers[i].scroller === scroller && _triggers[i] !== self) {\\n              return; //don't remove the listeners if there are still other triggers referencing it.\\n            }\\n          }\\n\\n          _removeListener(scroller, \\\"resize\\\", _onResize);\\n\\n          isViewport || _removeListener(scroller, \\\"scroll\\\", _onScroll);\\n        }\\n      }\\n    };\\n\\n    self.kill = function (revert, allowAnimation) {\\n      self.disable(revert, allowAnimation);\\n      scrubTween && !allowAnimation && scrubTween.kill();\\n      id && delete _ids[id];\\n\\n      var i = _triggers.indexOf(self);\\n\\n      i >= 0 && _triggers.splice(i, 1);\\n      i === _i && _direction > 0 && _i--; // if we're in the middle of a refresh() or update(), splicing would cause skips in the index, so adjust...\\n      // if no other ScrollTrigger instances of the same scroller are found, wipe out any recorded scroll position. Otherwise, in a single page application, for example, it could maintain scroll position when it really shouldn't.\\n\\n      i = 0;\\n\\n      _triggers.forEach(function (t) {\\n        return t.scroller === self.scroller && (i = 1);\\n      });\\n\\n      i || _refreshingAll || (self.scroll.rec = 0);\\n\\n      if (animation) {\\n        animation.scrollTrigger = null;\\n        revert && animation.revert({\\n          kill: false\\n        });\\n        allowAnimation || animation.kill();\\n      }\\n\\n      markerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(function (m) {\\n        return m.parentNode && m.parentNode.removeChild(m);\\n      });\\n      _primary === self && (_primary = 0);\\n\\n      if (pin) {\\n        pinCache && (pinCache.uncache = 1);\\n        i = 0;\\n\\n        _triggers.forEach(function (t) {\\n          return t.pin === pin && i++;\\n        });\\n\\n        i || (pinCache.spacer = 0); // if there aren't any more ScrollTriggers with the same pin, remove the spacer, otherwise it could be contaminated with old/stale values if the user re-creates a ScrollTrigger for the same element.\\n      }\\n\\n      vars.onKill && vars.onKill(self);\\n    };\\n\\n    _triggers.push(self);\\n\\n    self.enable(false, false);\\n    customRevertReturn && customRevertReturn(self);\\n\\n    if (animation && animation.add && !change) {\\n      // if the animation is a timeline, it may not have been populated yet, so it wouldn't render at the proper place on the first refresh(), thus we should schedule one for the next tick. If \\\"change\\\" is defined, we know it must be re-enabling, thus we can refresh() right away.\\n      var updateFunc = self.update; // some browsers may fire a scroll event BEFORE a tick elapses and/or the DOMContentLoaded fires. So there's a chance update() will be called BEFORE a refresh() has happened on a Timeline-attached ScrollTrigger which means the start/end won't be calculated yet. We don't want to add conditional logic inside the update() method (like check to see if end is defined and if not, force a refresh()) because that's a function that gets hit a LOT (performance). So we swap out the real update() method for this one that'll re-attach it the first time it gets called and of course forces a refresh().\\n\\n      self.update = function () {\\n        self.update = updateFunc;\\n        _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache++; // otherwise a cached scroll position may get used in the refresh() in a very rare scenario, like if ScrollTriggers are created inside a DOMContentLoaded event and the queued requestAnimationFrame() fires beforehand. See https://gsap.com/community/forums/topic/41267-scrolltrigger-breaks-on-refresh-when-using-domcontentloaded/\\n\\n        start || end || self.refresh();\\n      };\\n\\n      gsap.delayedCall(0.01, self.update);\\n      change = 0.01;\\n      start = end = 0;\\n    } else {\\n      self.refresh();\\n    }\\n\\n    pin && _queueRefreshAll(); // pinning could affect the positions of other things, so make sure we queue a full refresh()\\n  };\\n\\n  ScrollTrigger.register = function register(core) {\\n    if (!_coreInitted) {\\n      gsap = core || _getGSAP();\\n      _windowExists() && window.document && ScrollTrigger.enable();\\n      _coreInitted = _enabled;\\n    }\\n\\n    return _coreInitted;\\n  };\\n\\n  ScrollTrigger.defaults = function defaults(config) {\\n    if (config) {\\n      for (var p in config) {\\n        _defaults[p] = config[p];\\n      }\\n    }\\n\\n    return _defaults;\\n  };\\n\\n  ScrollTrigger.disable = function disable(reset, kill) {\\n    _enabled = 0;\\n\\n    _triggers.forEach(function (trigger) {\\n      return trigger[kill ? \\\"kill\\\" : \\\"disable\\\"](reset);\\n    });\\n\\n    _removeListener(_win, \\\"wheel\\\", _onScroll);\\n\\n    _removeListener(_doc, \\\"scroll\\\", _onScroll);\\n\\n    clearInterval(_syncInterval);\\n\\n    _removeListener(_doc, \\\"touchcancel\\\", _passThrough);\\n\\n    _removeListener(_body, \\\"touchstart\\\", _passThrough);\\n\\n    _multiListener(_removeListener, _doc, \\\"pointerdown,touchstart,mousedown\\\", _pointerDownHandler);\\n\\n    _multiListener(_removeListener, _doc, \\\"pointerup,touchend,mouseup\\\", _pointerUpHandler);\\n\\n    _resizeDelay.kill();\\n\\n    _iterateAutoRefresh(_removeListener);\\n\\n    for (var i = 0; i < _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.length; i += 3) {\\n      _wheelListener(_removeListener, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i], _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i + 1]);\\n\\n      _wheelListener(_removeListener, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i], _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i + 2]);\\n    }\\n  };\\n\\n  ScrollTrigger.enable = function enable() {\\n    _win = window;\\n    _doc = document;\\n    _docEl = _doc.documentElement;\\n    _body = _doc.body;\\n\\n    if (gsap) {\\n      _toArray = gsap.utils.toArray;\\n      _clamp = gsap.utils.clamp;\\n      _context = gsap.core.context || _passThrough;\\n      _suppressOverwrites = gsap.core.suppressOverwrites || _passThrough;\\n      _scrollRestoration = _win.history.scrollRestoration || \\\"auto\\\";\\n      _lastScroll = _win.pageYOffset || 0;\\n      gsap.core.globals(\\\"ScrollTrigger\\\", ScrollTrigger); // must register the global manually because in Internet Explorer, functions (classes) don't have a \\\"name\\\" property.\\n\\n      if (_body) {\\n        _enabled = 1;\\n        _div100vh = document.createElement(\\\"div\\\"); // to solve mobile browser address bar show/hide resizing, we shouldn't rely on window.innerHeight. Instead, use a <div> with its height set to 100vh and measure that since that's what the scrolling is based on anyway and it's not affected by address bar showing/hiding.\\n\\n        _div100vh.style.height = \\\"100vh\\\";\\n        _div100vh.style.position = \\\"absolute\\\";\\n\\n        _refresh100vh();\\n\\n        _rafBugFix();\\n\\n        _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.register(gsap); // isTouch is 0 if no touch, 1 if ONLY touch, and 2 if it can accommodate touch but also other types like mouse/pointer.\\n\\n        ScrollTrigger.isTouch = _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.isTouch;\\n        _fixIOSBug = _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.isTouch && /(iPad|iPhone|iPod|Mac)/g.test(navigator.userAgent); // since 2017, iOS has had a bug that causes event.clientX/Y to be inaccurate when a scroll occurs, thus we must alternate ignoring every other touchmove event to work around it. See https://bugs.webkit.org/show_bug.cgi?id=181954 and https://codepen.io/GreenSock/pen/ExbrPNa/087cef197dc35445a0951e8935c41503\\n\\n        _ignoreMobileResize = _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.isTouch === 1;\\n\\n        _addListener(_win, \\\"wheel\\\", _onScroll); // mostly for 3rd party smooth scrolling libraries.\\n\\n\\n        _root = [_win, _doc, _docEl, _body];\\n\\n        if (gsap.matchMedia) {\\n          ScrollTrigger.matchMedia = function (vars) {\\n            var mm = gsap.matchMedia(),\\n                p;\\n\\n            for (p in vars) {\\n              mm.add(p, vars[p]);\\n            }\\n\\n            return mm;\\n          };\\n\\n          gsap.addEventListener(\\\"matchMediaInit\\\", function () {\\n            return _revertAll();\\n          });\\n          gsap.addEventListener(\\\"matchMediaRevert\\\", function () {\\n            return _revertRecorded();\\n          });\\n          gsap.addEventListener(\\\"matchMedia\\\", function () {\\n            _refreshAll(0, 1);\\n\\n            _dispatch(\\\"matchMedia\\\");\\n          });\\n          gsap.matchMedia().add(\\\"(orientation: portrait)\\\", function () {\\n            // when orientation changes, we should take new base measurements for the ignoreMobileResize feature.\\n            _setBaseDimensions();\\n\\n            return _setBaseDimensions;\\n          });\\n        } else {\\n          console.warn(\\\"Requires GSAP 3.11.0 or later\\\");\\n        }\\n\\n        _setBaseDimensions();\\n\\n        _addListener(_doc, \\\"scroll\\\", _onScroll); // some browsers (like Chrome), the window stops dispatching scroll events on the window if you scroll really fast, but it's consistent on the document!\\n\\n\\n        var bodyHasStyle = _body.hasAttribute(\\\"style\\\"),\\n            bodyStyle = _body.style,\\n            border = bodyStyle.borderTopStyle,\\n            AnimationProto = gsap.core.Animation.prototype,\\n            bounds,\\n            i;\\n\\n        AnimationProto.revert || Object.defineProperty(AnimationProto, \\\"revert\\\", {\\n          value: function value() {\\n            return this.time(-0.01, true);\\n          }\\n        }); // only for backwards compatibility (Animation.revert() was added after 3.10.4)\\n\\n        bodyStyle.borderTopStyle = \\\"solid\\\"; // works around an issue where a margin of a child element could throw off the bounds of the _body, making it seem like there's a margin when there actually isn't. The border ensures that the bounds are accurate.\\n\\n        bounds = _getBounds(_body);\\n        _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical.m = Math.round(bounds.top + _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical.sc()) || 0; // accommodate the offset of the <body> caused by margins and/or padding\\n\\n        _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal.m = Math.round(bounds.left + _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal.sc()) || 0;\\n        border ? bodyStyle.borderTopStyle = border : bodyStyle.removeProperty(\\\"border-top-style\\\");\\n\\n        if (!bodyHasStyle) {\\n          // SSR frameworks like Next.js complain if this attribute gets added.\\n          _body.setAttribute(\\\"style\\\", \\\"\\\"); // it's not enough to just removeAttribute() - we must first set it to empty, otherwise Next.js complains.\\n\\n\\n          _body.removeAttribute(\\\"style\\\");\\n        } // TODO: (?) maybe move to leveraging the velocity mechanism in Observer and skip intervals.\\n\\n\\n        _syncInterval = setInterval(_sync, 250);\\n        gsap.delayedCall(0.5, function () {\\n          return _startup = 0;\\n        });\\n\\n        _addListener(_doc, \\\"touchcancel\\\", _passThrough); // some older Android devices intermittently stop dispatching \\\"touchmove\\\" events if we don't listen for \\\"touchcancel\\\" on the document.\\n\\n\\n        _addListener(_body, \\\"touchstart\\\", _passThrough); //works around Safari bug: https://gsap.com/forums/topic/21450-draggable-in-iframe-on-mobile-is-buggy/\\n\\n\\n        _multiListener(_addListener, _doc, \\\"pointerdown,touchstart,mousedown\\\", _pointerDownHandler);\\n\\n        _multiListener(_addListener, _doc, \\\"pointerup,touchend,mouseup\\\", _pointerUpHandler);\\n\\n        _transformProp = gsap.utils.checkPrefix(\\\"transform\\\");\\n\\n        _stateProps.push(_transformProp);\\n\\n        _coreInitted = _getTime();\\n        _resizeDelay = gsap.delayedCall(0.2, _refreshAll).pause();\\n        _autoRefresh = [_doc, \\\"visibilitychange\\\", function () {\\n          var w = _win.innerWidth,\\n              h = _win.innerHeight;\\n\\n          if (_doc.hidden) {\\n            _prevWidth = w;\\n            _prevHeight = h;\\n          } else if (_prevWidth !== w || _prevHeight !== h) {\\n            _onResize();\\n          }\\n        }, _doc, \\\"DOMContentLoaded\\\", _refreshAll, _win, \\\"load\\\", _refreshAll, _win, \\\"resize\\\", _onResize];\\n\\n        _iterateAutoRefresh(_addListener);\\n\\n        _triggers.forEach(function (trigger) {\\n          return trigger.enable(0, 1);\\n        });\\n\\n        for (i = 0; i < _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.length; i += 3) {\\n          _wheelListener(_removeListener, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i], _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i + 1]);\\n\\n          _wheelListener(_removeListener, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i], _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i + 2]);\\n        }\\n      }\\n    }\\n  };\\n\\n  ScrollTrigger.config = function config(vars) {\\n    \\\"limitCallbacks\\\" in vars && (_limitCallbacks = !!vars.limitCallbacks);\\n    var ms = vars.syncInterval;\\n    ms && clearInterval(_syncInterval) || (_syncInterval = ms) && setInterval(_sync, ms);\\n    \\\"ignoreMobileResize\\\" in vars && (_ignoreMobileResize = ScrollTrigger.isTouch === 1 && vars.ignoreMobileResize);\\n\\n    if (\\\"autoRefreshEvents\\\" in vars) {\\n      _iterateAutoRefresh(_removeListener) || _iterateAutoRefresh(_addListener, vars.autoRefreshEvents || \\\"none\\\");\\n      _ignoreResize = (vars.autoRefreshEvents + \\\"\\\").indexOf(\\\"resize\\\") === -1;\\n    }\\n  };\\n\\n  ScrollTrigger.scrollerProxy = function scrollerProxy(target, vars) {\\n    var t = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(target),\\n        i = _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.indexOf(t),\\n        isViewport = _isViewport(t);\\n\\n    if (~i) {\\n      _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.splice(i, isViewport ? 6 : 2);\\n    }\\n\\n    if (vars) {\\n      isViewport ? _Observer_js__WEBPACK_IMPORTED_MODULE_0__._proxies.unshift(_win, vars, _body, vars, _docEl, vars) : _Observer_js__WEBPACK_IMPORTED_MODULE_0__._proxies.unshift(t, vars);\\n    }\\n  };\\n\\n  ScrollTrigger.clearMatchMedia = function clearMatchMedia(query) {\\n    _triggers.forEach(function (t) {\\n      return t._ctx && t._ctx.query === query && t._ctx.kill(true, true);\\n    });\\n  };\\n\\n  ScrollTrigger.isInViewport = function isInViewport(element, ratio, horizontal) {\\n    var bounds = (_isString(element) ? (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(element) : element).getBoundingClientRect(),\\n        offset = bounds[horizontal ? _width : _height] * ratio || 0;\\n    return horizontal ? bounds.right - offset > 0 && bounds.left + offset < _win.innerWidth : bounds.bottom - offset > 0 && bounds.top + offset < _win.innerHeight;\\n  };\\n\\n  ScrollTrigger.positionInViewport = function positionInViewport(element, referencePoint, horizontal) {\\n    _isString(element) && (element = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(element));\\n    var bounds = element.getBoundingClientRect(),\\n        size = bounds[horizontal ? _width : _height],\\n        offset = referencePoint == null ? size / 2 : referencePoint in _keywords ? _keywords[referencePoint] * size : ~referencePoint.indexOf(\\\"%\\\") ? parseFloat(referencePoint) * size / 100 : parseFloat(referencePoint) || 0;\\n    return horizontal ? (bounds.left + offset) / _win.innerWidth : (bounds.top + offset) / _win.innerHeight;\\n  };\\n\\n  ScrollTrigger.killAll = function killAll(allowListeners) {\\n    _triggers.slice(0).forEach(function (t) {\\n      return t.vars.id !== \\\"ScrollSmoother\\\" && t.kill();\\n    });\\n\\n    if (allowListeners !== true) {\\n      var listeners = _listeners.killAll || [];\\n      _listeners = {};\\n      listeners.forEach(function (f) {\\n        return f();\\n      });\\n    }\\n  };\\n\\n  return ScrollTrigger;\\n}();\\nScrollTrigger.version = \\\"3.12.7\\\";\\n\\nScrollTrigger.saveStyles = function (targets) {\\n  return targets ? _toArray(targets).forEach(function (target) {\\n    // saved styles are recorded in a consecutive alternating Array, like [element, cssText, transform attribute, cache, matchMedia, ...]\\n    if (target && target.style) {\\n      var i = _savedStyles.indexOf(target);\\n\\n      i >= 0 && _savedStyles.splice(i, 5);\\n\\n      _savedStyles.push(target, target.style.cssText, target.getBBox && target.getAttribute(\\\"transform\\\"), gsap.core.getCache(target), _context());\\n    }\\n  }) : _savedStyles;\\n};\\n\\nScrollTrigger.revert = function (soft, media) {\\n  return _revertAll(!soft, media);\\n};\\n\\nScrollTrigger.create = function (vars, animation) {\\n  return new ScrollTrigger(vars, animation);\\n};\\n\\nScrollTrigger.refresh = function (safe) {\\n  return safe ? _onResize(true) : (_coreInitted || ScrollTrigger.register()) && _refreshAll(true);\\n};\\n\\nScrollTrigger.update = function (force) {\\n  return ++_Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache && _updateAll(force === true ? 2 : 0);\\n};\\n\\nScrollTrigger.clearScrollMemory = _clearScrollMemory;\\n\\nScrollTrigger.maxScroll = function (element, horizontal) {\\n  return _maxScroll(element, horizontal ? _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal : _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical);\\n};\\n\\nScrollTrigger.getScrollFunc = function (element, horizontal) {\\n  return (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getScrollFunc)((0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(element), horizontal ? _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal : _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical);\\n};\\n\\nScrollTrigger.getById = function (id) {\\n  return _ids[id];\\n};\\n\\nScrollTrigger.getAll = function () {\\n  return _triggers.filter(function (t) {\\n    return t.vars.id !== \\\"ScrollSmoother\\\";\\n  });\\n}; // it's common for people to ScrollTrigger.getAll(t => t.kill()) on page routes, for example, and we don't want it to ruin smooth scrolling by killing the main ScrollSmoother one.\\n\\n\\nScrollTrigger.isScrolling = function () {\\n  return !!_lastScrollTime;\\n};\\n\\nScrollTrigger.snapDirectional = _snapDirectional;\\n\\nScrollTrigger.addEventListener = function (type, callback) {\\n  var a = _listeners[type] || (_listeners[type] = []);\\n  ~a.indexOf(callback) || a.push(callback);\\n};\\n\\nScrollTrigger.removeEventListener = function (type, callback) {\\n  var a = _listeners[type],\\n      i = a && a.indexOf(callback);\\n  i >= 0 && a.splice(i, 1);\\n};\\n\\nScrollTrigger.batch = function (targets, vars) {\\n  var result = [],\\n      varsCopy = {},\\n      interval = vars.interval || 0.016,\\n      batchMax = vars.batchMax || 1e9,\\n      proxyCallback = function proxyCallback(type, callback) {\\n    var elements = [],\\n        triggers = [],\\n        delay = gsap.delayedCall(interval, function () {\\n      callback(elements, triggers);\\n      elements = [];\\n      triggers = [];\\n    }).pause();\\n    return function (self) {\\n      elements.length || delay.restart(true);\\n      elements.push(self.trigger);\\n      triggers.push(self);\\n      batchMax <= elements.length && delay.progress(1);\\n    };\\n  },\\n      p;\\n\\n  for (p in vars) {\\n    varsCopy[p] = p.substr(0, 2) === \\\"on\\\" && _isFunction(vars[p]) && p !== \\\"onRefreshInit\\\" ? proxyCallback(p, vars[p]) : vars[p];\\n  }\\n\\n  if (_isFunction(batchMax)) {\\n    batchMax = batchMax();\\n\\n    _addListener(ScrollTrigger, \\\"refresh\\\", function () {\\n      return batchMax = vars.batchMax();\\n    });\\n  }\\n\\n  _toArray(targets).forEach(function (target) {\\n    var config = {};\\n\\n    for (p in varsCopy) {\\n      config[p] = varsCopy[p];\\n    }\\n\\n    config.trigger = target;\\n    result.push(ScrollTrigger.create(config));\\n  });\\n\\n  return result;\\n}; // to reduce file size. clamps the scroll and also returns a duration multiplier so that if the scroll gets chopped shorter, the duration gets curtailed as well (otherwise if you're very close to the top of the page, for example, and swipe up really fast, it'll suddenly slow down and take a long time to reach the top).\\n\\n\\nvar _clampScrollAndGetDurationMultiplier = function _clampScrollAndGetDurationMultiplier(scrollFunc, current, end, max) {\\n  current > max ? scrollFunc(max) : current < 0 && scrollFunc(0);\\n  return end > max ? (max - current) / (end - current) : end < 0 ? current / (current - end) : 1;\\n},\\n    _allowNativePanning = function _allowNativePanning(target, direction) {\\n  if (direction === true) {\\n    target.style.removeProperty(\\\"touch-action\\\");\\n  } else {\\n    target.style.touchAction = direction === true ? \\\"auto\\\" : direction ? \\\"pan-\\\" + direction + (_Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.isTouch ? \\\" pinch-zoom\\\" : \\\"\\\") : \\\"none\\\"; // note: Firefox doesn't support it pinch-zoom properly, at least in addition to a pan-x or pan-y.\\n  }\\n\\n  target === _docEl && _allowNativePanning(_body, direction);\\n},\\n    _overflow = {\\n  auto: 1,\\n  scroll: 1\\n},\\n    _nestedScroll = function _nestedScroll(_ref5) {\\n  var event = _ref5.event,\\n      target = _ref5.target,\\n      axis = _ref5.axis;\\n\\n  var node = (event.changedTouches ? event.changedTouches[0] : event).target,\\n      cache = node._gsap || gsap.core.getCache(node),\\n      time = _getTime(),\\n      cs;\\n\\n  if (!cache._isScrollT || time - cache._isScrollT > 2000) {\\n    // cache for 2 seconds to improve performance.\\n    while (node && node !== _body && (node.scrollHeight <= node.clientHeight && node.scrollWidth <= node.clientWidth || !(_overflow[(cs = _getComputedStyle(node)).overflowY] || _overflow[cs.overflowX]))) {\\n      node = node.parentNode;\\n    }\\n\\n    cache._isScroll = node && node !== target && !_isViewport(node) && (_overflow[(cs = _getComputedStyle(node)).overflowY] || _overflow[cs.overflowX]);\\n    cache._isScrollT = time;\\n  }\\n\\n  if (cache._isScroll || axis === \\\"x\\\") {\\n    event.stopPropagation();\\n    event._gsapAllow = true;\\n  }\\n},\\n    // capture events on scrollable elements INSIDE the <body> and allow those by calling stopPropagation() when we find a scrollable ancestor\\n_inputObserver = function _inputObserver(target, type, inputs, nested) {\\n  return _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.create({\\n    target: target,\\n    capture: true,\\n    debounce: false,\\n    lockAxis: true,\\n    type: type,\\n    onWheel: nested = nested && _nestedScroll,\\n    onPress: nested,\\n    onDrag: nested,\\n    onScroll: nested,\\n    onEnable: function onEnable() {\\n      return inputs && _addListener(_doc, _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.eventTypes[0], _captureInputs, false, true);\\n    },\\n    onDisable: function onDisable() {\\n      return _removeListener(_doc, _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.eventTypes[0], _captureInputs, true);\\n    }\\n  });\\n},\\n    _inputExp = /(input|label|select|textarea)/i,\\n    _inputIsFocused,\\n    _captureInputs = function _captureInputs(e) {\\n  var isInput = _inputExp.test(e.target.tagName);\\n\\n  if (isInput || _inputIsFocused) {\\n    e._gsapAllow = true;\\n    _inputIsFocused = isInput;\\n  }\\n},\\n    _getScrollNormalizer = function _getScrollNormalizer(vars) {\\n  _isObject(vars) || (vars = {});\\n  vars.preventDefault = vars.isNormalizer = vars.allowClicks = true;\\n  vars.type || (vars.type = \\\"wheel,touch\\\");\\n  vars.debounce = !!vars.debounce;\\n  vars.id = vars.id || \\\"normalizer\\\";\\n\\n  var _vars2 = vars,\\n      normalizeScrollX = _vars2.normalizeScrollX,\\n      momentum = _vars2.momentum,\\n      allowNestedScroll = _vars2.allowNestedScroll,\\n      onRelease = _vars2.onRelease,\\n      self,\\n      maxY,\\n      target = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(vars.target) || _docEl,\\n      smoother = gsap.core.globals().ScrollSmoother,\\n      smootherInstance = smoother && smoother.get(),\\n      content = _fixIOSBug && (vars.content && (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(vars.content) || smootherInstance && vars.content !== false && !smootherInstance.smooth() && smootherInstance.content()),\\n      scrollFuncY = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getScrollFunc)(target, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical),\\n      scrollFuncX = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getScrollFunc)(target, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal),\\n      scale = 1,\\n      initialScale = (_Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.isTouch && _win.visualViewport ? _win.visualViewport.scale * _win.visualViewport.width : _win.outerWidth) / _win.innerWidth,\\n      wheelRefresh = 0,\\n      resolveMomentumDuration = _isFunction(momentum) ? function () {\\n    return momentum(self);\\n  } : function () {\\n    return momentum || 2.8;\\n  },\\n      lastRefreshID,\\n      skipTouchMove,\\n      inputObserver = _inputObserver(target, vars.type, true, allowNestedScroll),\\n      resumeTouchMove = function resumeTouchMove() {\\n    return skipTouchMove = false;\\n  },\\n      scrollClampX = _passThrough,\\n      scrollClampY = _passThrough,\\n      updateClamps = function updateClamps() {\\n    maxY = _maxScroll(target, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical);\\n    scrollClampY = _clamp(_fixIOSBug ? 1 : 0, maxY);\\n    normalizeScrollX && (scrollClampX = _clamp(0, _maxScroll(target, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal)));\\n    lastRefreshID = _refreshID;\\n  },\\n      removeContentOffset = function removeContentOffset() {\\n    content._gsap.y = _round(parseFloat(content._gsap.y) + scrollFuncY.offset) + \\\"px\\\";\\n    content.style.transform = \\\"matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, \\\" + parseFloat(content._gsap.y) + \\\", 0, 1)\\\";\\n    scrollFuncY.offset = scrollFuncY.cacheID = 0;\\n  },\\n      ignoreDrag = function ignoreDrag() {\\n    if (skipTouchMove) {\\n      requestAnimationFrame(resumeTouchMove);\\n\\n      var offset = _round(self.deltaY / 2),\\n          scroll = scrollClampY(scrollFuncY.v - offset);\\n\\n      if (content && scroll !== scrollFuncY.v + scrollFuncY.offset) {\\n        scrollFuncY.offset = scroll - scrollFuncY.v;\\n\\n        var y = _round((parseFloat(content && content._gsap.y) || 0) - scrollFuncY.offset);\\n\\n        content.style.transform = \\\"matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, \\\" + y + \\\", 0, 1)\\\";\\n        content._gsap.y = y + \\\"px\\\";\\n        scrollFuncY.cacheID = _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache;\\n\\n        _updateAll();\\n      }\\n\\n      return true;\\n    }\\n\\n    scrollFuncY.offset && removeContentOffset();\\n    skipTouchMove = true;\\n  },\\n      tween,\\n      startScrollX,\\n      startScrollY,\\n      onStopDelayedCall,\\n      onResize = function onResize() {\\n    // if the window resizes, like on an iPhone which Apple FORCES the address bar to show/hide even if we event.preventDefault(), it may be scrolling too far now that the address bar is showing, so we must dynamically adjust the momentum tween.\\n    updateClamps();\\n\\n    if (tween.isActive() && tween.vars.scrollY > maxY) {\\n      scrollFuncY() > maxY ? tween.progress(1) && scrollFuncY(maxY) : tween.resetTo(\\\"scrollY\\\", maxY);\\n    }\\n  };\\n\\n  content && gsap.set(content, {\\n    y: \\\"+=0\\\"\\n  }); // to ensure there's a cache (element._gsap)\\n\\n  vars.ignoreCheck = function (e) {\\n    return _fixIOSBug && e.type === \\\"touchmove\\\" && ignoreDrag(e) || scale > 1.05 && e.type !== \\\"touchstart\\\" || self.isGesturing || e.touches && e.touches.length > 1;\\n  };\\n\\n  vars.onPress = function () {\\n    skipTouchMove = false;\\n    var prevScale = scale;\\n    scale = _round((_win.visualViewport && _win.visualViewport.scale || 1) / initialScale);\\n    tween.pause();\\n    prevScale !== scale && _allowNativePanning(target, scale > 1.01 ? true : normalizeScrollX ? false : \\\"x\\\");\\n    startScrollX = scrollFuncX();\\n    startScrollY = scrollFuncY();\\n    updateClamps();\\n    lastRefreshID = _refreshID;\\n  };\\n\\n  vars.onRelease = vars.onGestureStart = function (self, wasDragging) {\\n    scrollFuncY.offset && removeContentOffset();\\n\\n    if (!wasDragging) {\\n      onStopDelayedCall.restart(true);\\n    } else {\\n      _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache++; // make sure we're pulling the non-cached value\\n      // alternate algorithm: durX = Math.min(6, Math.abs(self.velocityX / 800)),\\tdur = Math.max(durX, Math.min(6, Math.abs(self.velocityY / 800))); dur = dur * (0.4 + (1 - _power4In(dur / 6)) * 0.6)) * (momentumSpeed || 1)\\n\\n      var dur = resolveMomentumDuration(),\\n          currentScroll,\\n          endScroll;\\n\\n      if (normalizeScrollX) {\\n        currentScroll = scrollFuncX();\\n        endScroll = currentScroll + dur * 0.05 * -self.velocityX / 0.227; // the constant .227 is from power4(0.05). velocity is inverted because scrolling goes in the opposite direction.\\n\\n        dur *= _clampScrollAndGetDurationMultiplier(scrollFuncX, currentScroll, endScroll, _maxScroll(target, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal));\\n        tween.vars.scrollX = scrollClampX(endScroll);\\n      }\\n\\n      currentScroll = scrollFuncY();\\n      endScroll = currentScroll + dur * 0.05 * -self.velocityY / 0.227; // the constant .227 is from power4(0.05)\\n\\n      dur *= _clampScrollAndGetDurationMultiplier(scrollFuncY, currentScroll, endScroll, _maxScroll(target, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical));\\n      tween.vars.scrollY = scrollClampY(endScroll);\\n      tween.invalidate().duration(dur).play(0.01);\\n\\n      if (_fixIOSBug && tween.vars.scrollY >= maxY || currentScroll >= maxY - 1) {\\n        // iOS bug: it'll show the address bar but NOT fire the window \\\"resize\\\" event until the animation is done but we must protect against overshoot so we leverage an onUpdate to do so.\\n        gsap.to({}, {\\n          onUpdate: onResize,\\n          duration: dur\\n        });\\n      }\\n    }\\n\\n    onRelease && onRelease(self);\\n  };\\n\\n  vars.onWheel = function () {\\n    tween._ts && tween.pause();\\n\\n    if (_getTime() - wheelRefresh > 1000) {\\n      // after 1 second, refresh the clamps otherwise that'll only happen when ScrollTrigger.refresh() is called or for touch-scrolling.\\n      lastRefreshID = 0;\\n      wheelRefresh = _getTime();\\n    }\\n  };\\n\\n  vars.onChange = function (self, dx, dy, xArray, yArray) {\\n    _refreshID !== lastRefreshID && updateClamps();\\n    dx && normalizeScrollX && scrollFuncX(scrollClampX(xArray[2] === dx ? startScrollX + (self.startX - self.x) : scrollFuncX() + dx - xArray[1])); // for more precision, we track pointer/touch movement from the start, otherwise it'll drift.\\n\\n    if (dy) {\\n      scrollFuncY.offset && removeContentOffset();\\n      var isTouch = yArray[2] === dy,\\n          y = isTouch ? startScrollY + self.startY - self.y : scrollFuncY() + dy - yArray[1],\\n          yClamped = scrollClampY(y);\\n      isTouch && y !== yClamped && (startScrollY += yClamped - y);\\n      scrollFuncY(yClamped);\\n    }\\n\\n    (dy || dx) && _updateAll();\\n  };\\n\\n  vars.onEnable = function () {\\n    _allowNativePanning(target, normalizeScrollX ? false : \\\"x\\\");\\n\\n    ScrollTrigger.addEventListener(\\\"refresh\\\", onResize);\\n\\n    _addListener(_win, \\\"resize\\\", onResize);\\n\\n    if (scrollFuncY.smooth) {\\n      scrollFuncY.target.style.scrollBehavior = \\\"auto\\\";\\n      scrollFuncY.smooth = scrollFuncX.smooth = false;\\n    }\\n\\n    inputObserver.enable();\\n  };\\n\\n  vars.onDisable = function () {\\n    _allowNativePanning(target, true);\\n\\n    _removeListener(_win, \\\"resize\\\", onResize);\\n\\n    ScrollTrigger.removeEventListener(\\\"refresh\\\", onResize);\\n    inputObserver.kill();\\n  };\\n\\n  vars.lockAxis = vars.lockAxis !== false;\\n  self = new _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer(vars);\\n  self.iOS = _fixIOSBug; // used in the Observer getCachedScroll() function to work around an iOS bug that wreaks havoc with TouchEvent.clientY if we allow scroll to go all the way back to 0.\\n\\n  _fixIOSBug && !scrollFuncY() && scrollFuncY(1); // iOS bug causes event.clientY values to freak out (wildly inaccurate) if the scroll position is exactly 0.\\n\\n  _fixIOSBug && gsap.ticker.add(_passThrough); // prevent the ticker from sleeping\\n\\n  onStopDelayedCall = self._dc;\\n  tween = gsap.to(self, {\\n    ease: \\\"power4\\\",\\n    paused: true,\\n    inherit: false,\\n    scrollX: normalizeScrollX ? \\\"+=0.1\\\" : \\\"+=0\\\",\\n    scrollY: \\\"+=0.1\\\",\\n    modifiers: {\\n      scrollY: _interruptionTracker(scrollFuncY, scrollFuncY(), function () {\\n        return tween.pause();\\n      })\\n    },\\n    onUpdate: _updateAll,\\n    onComplete: onStopDelayedCall.vars.onComplete\\n  }); // we need the modifier to sense if the scroll position is altered outside of the momentum tween (like with a scrollTo tween) so we can pause() it to prevent conflicts.\\n\\n  return self;\\n};\\n\\nScrollTrigger.sort = function (func) {\\n  if (_isFunction(func)) {\\n    return _triggers.sort(func);\\n  }\\n\\n  var scroll = _win.pageYOffset || 0;\\n  ScrollTrigger.getAll().forEach(function (t) {\\n    return t._sortY = t.trigger ? scroll + t.trigger.getBoundingClientRect().top : t.start + _win.innerHeight;\\n  });\\n  return _triggers.sort(func || function (a, b) {\\n    return (a.vars.refreshPriority || 0) * -1e6 + (a.vars.containerAnimation ? 1e6 : a._sortY) - ((b.vars.containerAnimation ? 1e6 : b._sortY) + (b.vars.refreshPriority || 0) * -1e6);\\n  }); // anything with a containerAnimation should refresh last.\\n};\\n\\nScrollTrigger.observe = function (vars) {\\n  return new _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer(vars);\\n};\\n\\nScrollTrigger.normalizeScroll = function (vars) {\\n  if (typeof vars === \\\"undefined\\\") {\\n    return _normalizer;\\n  }\\n\\n  if (vars === true && _normalizer) {\\n    return _normalizer.enable();\\n  }\\n\\n  if (vars === false) {\\n    _normalizer && _normalizer.kill();\\n    _normalizer = vars;\\n    return;\\n  }\\n\\n  var normalizer = vars instanceof _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer ? vars : _getScrollNormalizer(vars);\\n  _normalizer && _normalizer.target === normalizer.target && _normalizer.kill();\\n  _isViewport(normalizer.target) && (_normalizer = normalizer);\\n  return normalizer;\\n};\\n\\nScrollTrigger.core = {\\n  // smaller file size way to leverage in ScrollSmoother and Observer\\n  _getVelocityProp: _Observer_js__WEBPACK_IMPORTED_MODULE_0__._getVelocityProp,\\n  _inputObserver: _inputObserver,\\n  _scrollers: _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers,\\n  _proxies: _Observer_js__WEBPACK_IMPORTED_MODULE_0__._proxies,\\n  bridge: {\\n    // when normalizeScroll sets the scroll position (ss = setScroll)\\n    ss: function ss() {\\n      _lastScrollTime || _dispatch(\\\"scrollStart\\\");\\n      _lastScrollTime = _getTime();\\n    },\\n    // a way to get the _refreshing value in Observer\\n    ref: function ref() {\\n      return _refreshing;\\n    }\\n  }\\n};\\n_getGSAP() && gsap.registerPlugin(ScrollTrigger);\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZ3NhcC9TY3JvbGxUcmlnZ2VyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNvSjs7QUFFcEo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxTQUFTLDJEQUFhO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLDJEQUFhO0FBQzNCO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSx5QkFBeUIsMERBQWdCO0FBQ3pDO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCwyREFBYTtBQUM5RCxDQUFDO0FBQ0Q7QUFDQSxrQkFBa0IseUJBQXlCO0FBQzNDO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7O0FBRTFCLGtCQUFrQixjQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNE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O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLDBDQUEwQztBQUMxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTOztBQUVULG9DQUFvQztBQUNwQzs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9DQUFvQzs7QUFFcEM7QUFDQTtBQUNBLFFBQVEsMERBQWdCLElBQUk7O0FBRTVCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUEsK0JBQStCO0FBQy9COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUEsb0JBQW9CLElBQUksMkRB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RDs7QUFFbEQsK0NBQStDOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUcsR0FBRzs7QUFFTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRyxHQUFHO0FBQ047O0FBRUE7QUFDQSxhQUFhLGtEQUFRO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1DQUFtQyxrREFBUTtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0JBQW9CLDBEQUFnQjtBQUNwQztBQUNBLGNBQWMsb0RBQVU7QUFDeEIsWUFBWSxrREFBUTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvZ3NhcC9TY3JvbGxUcmlnZ2VyLmpzP2UxMWUiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBTY3JvbGxUcmlnZ2VyIDMuMTIuN1xuICogaHR0cHM6Ly9nc2FwLmNvbVxuICpcbiAqIEBsaWNlbnNlIENvcHlyaWdodCAyMDA4LTIwMjUsIEdyZWVuU29jay4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFN1YmplY3QgdG8gdGhlIHRlcm1zIGF0IGh0dHBzOi8vZ3NhcC5jb20vc3RhbmRhcmQtbGljZW5zZSBvciBmb3JcbiAqIENsdWIgR1NBUCBtZW1iZXJzLCB0aGUgYWdyZWVtZW50IGlzc3VlZCB3aXRoIHRoYXQgbWVtYmVyc2hpcC5cbiAqIEBhdXRob3I6IEphY2sgRG95bGUsIGphY2tAZ3JlZW5zb2NrLmNvbVxuKi9cblxuLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IE9ic2VydmVyLCBfZ2V0VGFyZ2V0LCBfdmVydGljYWwsIF9ob3Jpem9udGFsLCBfc2Nyb2xsZXJzLCBfcHJveGllcywgX2dldFNjcm9sbEZ1bmMsIF9nZXRQcm94eVByb3AsIF9nZXRWZWxvY2l0eVByb3AgfSBmcm9tIFwiLi9PYnNlcnZlci5qc1wiO1xuXG52YXIgZ3NhcCxcbiAgICBfY29yZUluaXR0ZWQsXG4gICAgX3dpbixcbiAgICBfZG9jLFxuICAgIF9kb2NFbCxcbiAgICBfYm9keSxcbiAgICBfcm9vdCxcbiAgICBfcmVzaXplRGVsYXksXG4gICAgX3RvQXJyYXksXG4gICAgX2NsYW1wLFxuICAgIF90aW1lMixcbiAgICBfc3luY0ludGVydmFsLFxuICAgIF9yZWZyZXNoaW5nLFxuICAgIF9wb2ludGVySXNEb3duLFxuICAgIF90cmFuc2Zvcm1Qcm9wLFxuICAgIF9pLFxuICAgIF9wcmV2V2lkdGgsXG4gICAgX3ByZXZIZWlnaHQsXG4gICAgX2F1dG9SZWZyZXNoLFxuICAgIF9zb3J0LFxuICAgIF9zdXBwcmVzc092ZXJ3cml0ZXMsXG4gICAgX2lnbm9yZVJlc2l6ZSxcbiAgICBfbm9ybWFsaXplcixcbiAgICBfaWdub3JlTW9iaWxlUmVzaXplLFxuICAgIF9iYXNlU2NyZWVuSGVpZ2h0LFxuICAgIF9iYXNlU2NyZWVuV2lkdGgsXG4gICAgX2ZpeElPU0J1ZyxcbiAgICBfY29udGV4dCxcbiAgICBfc2Nyb2xsUmVzdG9yYXRpb24sXG4gICAgX2RpdjEwMHZoLFxuICAgIF8xMDB2aCxcbiAgICBfaXNSZXZlcnRlZCxcbiAgICBfY2xhbXBpbmdNYXgsXG4gICAgX2xpbWl0Q2FsbGJhY2tzLFxuICAgIC8vIGlmIHRydWUsIHdlJ2xsIG9ubHkgdHJpZ2dlciBjYWxsYmFja3MgaWYgdGhlIGFjdGl2ZSBzdGF0ZSB0b2dnbGVzLCBzbyBpZiB5b3Ugc2Nyb2xsIGltbWVkaWF0ZWx5IHBhc3QgYm90aCB0aGUgc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgb2YgYSBTY3JvbGxUcmlnZ2VyICh0aHVzIGluYWN0aXZlIHRvIGluYWN0aXZlKSwgbmVpdGhlciBpdHMgb25FbnRlciBub3Igb25MZWF2ZSB3aWxsIGJlIGNhbGxlZC4gVGhpcyBpcyB1c2VmdWwgZHVyaW5nIHN0YXJ0dXAuXG5fc3RhcnR1cCA9IDEsXG4gICAgX2dldFRpbWUgPSBEYXRlLm5vdyxcbiAgICBfdGltZTEgPSBfZ2V0VGltZSgpLFxuICAgIF9sYXN0U2Nyb2xsVGltZSA9IDAsXG4gICAgX2VuYWJsZWQgPSAwLFxuICAgIF9wYXJzZUNsYW1wID0gZnVuY3Rpb24gX3BhcnNlQ2xhbXAodmFsdWUsIHR5cGUsIHNlbGYpIHtcbiAgdmFyIGNsYW1wID0gX2lzU3RyaW5nKHZhbHVlKSAmJiAodmFsdWUuc3Vic3RyKDAsIDYpID09PSBcImNsYW1wKFwiIHx8IHZhbHVlLmluZGV4T2YoXCJtYXhcIikgPiAtMSk7XG4gIHNlbGZbXCJfXCIgKyB0eXBlICsgXCJDbGFtcFwiXSA9IGNsYW1wO1xuICByZXR1cm4gY2xhbXAgPyB2YWx1ZS5zdWJzdHIoNiwgdmFsdWUubGVuZ3RoIC0gNykgOiB2YWx1ZTtcbn0sXG4gICAgX2tlZXBDbGFtcCA9IGZ1bmN0aW9uIF9rZWVwQ2xhbXAodmFsdWUsIGNsYW1wKSB7XG4gIHJldHVybiBjbGFtcCAmJiAoIV9pc1N0cmluZyh2YWx1ZSkgfHwgdmFsdWUuc3Vic3RyKDAsIDYpICE9PSBcImNsYW1wKFwiKSA/IFwiY2xhbXAoXCIgKyB2YWx1ZSArIFwiKVwiIDogdmFsdWU7XG59LFxuICAgIF9yYWZCdWdGaXggPSBmdW5jdGlvbiBfcmFmQnVnRml4KCkge1xuICByZXR1cm4gX2VuYWJsZWQgJiYgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKF9yYWZCdWdGaXgpO1xufSxcbiAgICAvLyBpbiBzb21lIGJyb3dzZXJzIChsaWtlIEZpcmVmb3gpLCBzY3JlZW4gcmVwYWludHMgd2VyZW4ndCBjb25zaXN0ZW50IHVubGVzcyB3ZSBoYWQgU09NRVRISU5HIHF1ZXVlZCB1cCBpbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSEgU28gdGhpcyBqdXN0IGNyZWF0ZXMgYSBzdXBlciBzaW1wbGUgbG9vcCB0byBrZWVwIGl0IGFsaXZlIGFuZCBzbW9vdGggb3V0IHJlcGFpbnRzLlxuX3BvaW50ZXJEb3duSGFuZGxlciA9IGZ1bmN0aW9uIF9wb2ludGVyRG93bkhhbmRsZXIoKSB7XG4gIHJldHVybiBfcG9pbnRlcklzRG93biA9IDE7XG59LFxuICAgIF9wb2ludGVyVXBIYW5kbGVyID0gZnVuY3Rpb24gX3BvaW50ZXJVcEhhbmRsZXIoKSB7XG4gIHJldHVybiBfcG9pbnRlcklzRG93biA9IDA7XG59LFxuICAgIF9wYXNzVGhyb3VnaCA9IGZ1bmN0aW9uIF9wYXNzVGhyb3VnaCh2KSB7XG4gIHJldHVybiB2O1xufSxcbiAgICBfcm91bmQgPSBmdW5jdGlvbiBfcm91bmQodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiAxMDAwMDApIC8gMTAwMDAwIHx8IDA7XG59LFxuICAgIF93aW5kb3dFeGlzdHMgPSBmdW5jdGlvbiBfd2luZG93RXhpc3RzKCkge1xuICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIjtcbn0sXG4gICAgX2dldEdTQVAgPSBmdW5jdGlvbiBfZ2V0R1NBUCgpIHtcbiAgcmV0dXJuIGdzYXAgfHwgX3dpbmRvd0V4aXN0cygpICYmIChnc2FwID0gd2luZG93LmdzYXApICYmIGdzYXAucmVnaXN0ZXJQbHVnaW4gJiYgZ3NhcDtcbn0sXG4gICAgX2lzVmlld3BvcnQgPSBmdW5jdGlvbiBfaXNWaWV3cG9ydChlKSB7XG4gIHJldHVybiAhIX5fcm9vdC5pbmRleE9mKGUpO1xufSxcbiAgICBfZ2V0Vmlld3BvcnREaW1lbnNpb24gPSBmdW5jdGlvbiBfZ2V0Vmlld3BvcnREaW1lbnNpb24oZGltZW5zaW9uUHJvcGVydHkpIHtcbiAgcmV0dXJuIChkaW1lbnNpb25Qcm9wZXJ0eSA9PT0gXCJIZWlnaHRcIiA/IF8xMDB2aCA6IF93aW5bXCJpbm5lclwiICsgZGltZW5zaW9uUHJvcGVydHldKSB8fCBfZG9jRWxbXCJjbGllbnRcIiArIGRpbWVuc2lvblByb3BlcnR5XSB8fCBfYm9keVtcImNsaWVudFwiICsgZGltZW5zaW9uUHJvcGVydHldO1xufSxcbiAgICBfZ2V0Qm91bmRzRnVuYyA9IGZ1bmN0aW9uIF9nZXRCb3VuZHNGdW5jKGVsZW1lbnQpIHtcbiAgcmV0dXJuIF9nZXRQcm94eVByb3AoZWxlbWVudCwgXCJnZXRCb3VuZGluZ0NsaWVudFJlY3RcIikgfHwgKF9pc1ZpZXdwb3J0KGVsZW1lbnQpID8gZnVuY3Rpb24gKCkge1xuICAgIF93aW5PZmZzZXRzLndpZHRoID0gX3dpbi5pbm5lcldpZHRoO1xuICAgIF93aW5PZmZzZXRzLmhlaWdodCA9IF8xMDB2aDtcbiAgICByZXR1cm4gX3dpbk9mZnNldHM7XG4gIH0gOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9nZXRCb3VuZHMoZWxlbWVudCk7XG4gIH0pO1xufSxcbiAgICBfZ2V0U2l6ZUZ1bmMgPSBmdW5jdGlvbiBfZ2V0U2l6ZUZ1bmMoc2Nyb2xsZXIsIGlzVmlld3BvcnQsIF9yZWYpIHtcbiAgdmFyIGQgPSBfcmVmLmQsXG4gICAgICBkMiA9IF9yZWYuZDIsXG4gICAgICBhID0gX3JlZi5hO1xuICByZXR1cm4gKGEgPSBfZ2V0UHJveHlQcm9wKHNjcm9sbGVyLCBcImdldEJvdW5kaW5nQ2xpZW50UmVjdFwiKSkgPyBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGEoKVtkXTtcbiAgfSA6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKGlzVmlld3BvcnQgPyBfZ2V0Vmlld3BvcnREaW1lbnNpb24oZDIpIDogc2Nyb2xsZXJbXCJjbGllbnRcIiArIGQyXSkgfHwgMDtcbiAgfTtcbn0sXG4gICAgX2dldE9mZnNldHNGdW5jID0gZnVuY3Rpb24gX2dldE9mZnNldHNGdW5jKGVsZW1lbnQsIGlzVmlld3BvcnQpIHtcbiAgcmV0dXJuICFpc1ZpZXdwb3J0IHx8IH5fcHJveGllcy5pbmRleE9mKGVsZW1lbnQpID8gX2dldEJvdW5kc0Z1bmMoZWxlbWVudCkgOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF93aW5PZmZzZXRzO1xuICB9O1xufSxcbiAgICBfbWF4U2Nyb2xsID0gZnVuY3Rpb24gX21heFNjcm9sbChlbGVtZW50LCBfcmVmMikge1xuICB2YXIgcyA9IF9yZWYyLnMsXG4gICAgICBkMiA9IF9yZWYyLmQyLFxuICAgICAgZCA9IF9yZWYyLmQsXG4gICAgICBhID0gX3JlZjIuYTtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIChzID0gXCJzY3JvbGxcIiArIGQyKSAmJiAoYSA9IF9nZXRQcm94eVByb3AoZWxlbWVudCwgcykpID8gYSgpIC0gX2dldEJvdW5kc0Z1bmMoZWxlbWVudCkoKVtkXSA6IF9pc1ZpZXdwb3J0KGVsZW1lbnQpID8gKF9kb2NFbFtzXSB8fCBfYm9keVtzXSkgLSBfZ2V0Vmlld3BvcnREaW1lbnNpb24oZDIpIDogZWxlbWVudFtzXSAtIGVsZW1lbnRbXCJvZmZzZXRcIiArIGQyXSk7XG59LFxuICAgIF9pdGVyYXRlQXV0b1JlZnJlc2ggPSBmdW5jdGlvbiBfaXRlcmF0ZUF1dG9SZWZyZXNoKGZ1bmMsIGV2ZW50cykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IF9hdXRvUmVmcmVzaC5sZW5ndGg7IGkgKz0gMykge1xuICAgICghZXZlbnRzIHx8IH5ldmVudHMuaW5kZXhPZihfYXV0b1JlZnJlc2hbaSArIDFdKSkgJiYgZnVuYyhfYXV0b1JlZnJlc2hbaV0sIF9hdXRvUmVmcmVzaFtpICsgMV0sIF9hdXRvUmVmcmVzaFtpICsgMl0pO1xuICB9XG59LFxuICAgIF9pc1N0cmluZyA9IGZ1bmN0aW9uIF9pc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xufSxcbiAgICBfaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIF9pc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIjtcbn0sXG4gICAgX2lzTnVtYmVyID0gZnVuY3Rpb24gX2lzTnVtYmVyKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCI7XG59LFxuICAgIF9pc09iamVjdCA9IGZ1bmN0aW9uIF9pc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiO1xufSxcbiAgICBfZW5kQW5pbWF0aW9uID0gZnVuY3Rpb24gX2VuZEFuaW1hdGlvbihhbmltYXRpb24sIHJldmVyc2VkLCBwYXVzZSkge1xuICByZXR1cm4gYW5pbWF0aW9uICYmIGFuaW1hdGlvbi5wcm9ncmVzcyhyZXZlcnNlZCA/IDAgOiAxKSAmJiBwYXVzZSAmJiBhbmltYXRpb24ucGF1c2UoKTtcbn0sXG4gICAgX2NhbGxiYWNrID0gZnVuY3Rpb24gX2NhbGxiYWNrKHNlbGYsIGZ1bmMpIHtcbiAgaWYgKHNlbGYuZW5hYmxlZCkge1xuICAgIHZhciByZXN1bHQgPSBzZWxmLl9jdHggPyBzZWxmLl9jdHguYWRkKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBmdW5jKHNlbGYpO1xuICAgIH0pIDogZnVuYyhzZWxmKTtcbiAgICByZXN1bHQgJiYgcmVzdWx0LnRvdGFsVGltZSAmJiAoc2VsZi5jYWxsYmFja0FuaW1hdGlvbiA9IHJlc3VsdCk7XG4gIH1cbn0sXG4gICAgX2FicyA9IE1hdGguYWJzLFxuICAgIF9sZWZ0ID0gXCJsZWZ0XCIsXG4gICAgX3RvcCA9IFwidG9wXCIsXG4gICAgX3JpZ2h0ID0gXCJyaWdodFwiLFxuICAgIF9ib3R0b20gPSBcImJvdHRvbVwiLFxuICAgIF93aWR0aCA9IFwid2lkdGhcIixcbiAgICBfaGVpZ2h0ID0gXCJoZWlnaHRcIixcbiAgICBfUmlnaHQgPSBcIlJpZ2h0XCIsXG4gICAgX0xlZnQgPSBcIkxlZnRcIixcbiAgICBfVG9wID0gXCJUb3BcIixcbiAgICBfQm90dG9tID0gXCJCb3R0b21cIixcbiAgICBfcGFkZGluZyA9IFwicGFkZGluZ1wiLFxuICAgIF9tYXJnaW4gPSBcIm1hcmdpblwiLFxuICAgIF9XaWR0aCA9IFwiV2lkdGhcIixcbiAgICBfSGVpZ2h0ID0gXCJIZWlnaHRcIixcbiAgICBfcHggPSBcInB4XCIsXG4gICAgX2dldENvbXB1dGVkU3R5bGUgPSBmdW5jdGlvbiBfZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBfd2luLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59LFxuICAgIF9tYWtlUG9zaXRpb25hYmxlID0gZnVuY3Rpb24gX21ha2VQb3NpdGlvbmFibGUoZWxlbWVudCkge1xuICAvLyBpZiB0aGUgZWxlbWVudCBhbHJlYWR5IGhhcyBwb3NpdGlvbjogYWJzb2x1dGUgb3IgZml4ZWQsIGxlYXZlIHRoYXQsIG90aGVyd2lzZSBtYWtlIGl0IHBvc2l0aW9uOiByZWxhdGl2ZVxuICB2YXIgcG9zaXRpb24gPSBfZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbjtcblxuICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiID8gcG9zaXRpb24gOiBcInJlbGF0aXZlXCI7XG59LFxuICAgIF9zZXREZWZhdWx0cyA9IGZ1bmN0aW9uIF9zZXREZWZhdWx0cyhvYmosIGRlZmF1bHRzKSB7XG4gIGZvciAodmFyIHAgaW4gZGVmYXVsdHMpIHtcbiAgICBwIGluIG9iaiB8fCAob2JqW3BdID0gZGVmYXVsdHNbcF0pO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn0sXG4gICAgX2dldEJvdW5kcyA9IGZ1bmN0aW9uIF9nZXRCb3VuZHMoZWxlbWVudCwgd2l0aG91dFRyYW5zZm9ybXMpIHtcbiAgdmFyIHR3ZWVuID0gd2l0aG91dFRyYW5zZm9ybXMgJiYgX2dldENvbXB1dGVkU3R5bGUoZWxlbWVudClbX3RyYW5zZm9ybVByb3BdICE9PSBcIm1hdHJpeCgxLCAwLCAwLCAxLCAwLCAwKVwiICYmIGdzYXAudG8oZWxlbWVudCwge1xuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgICB4UGVyY2VudDogMCxcbiAgICB5UGVyY2VudDogMCxcbiAgICByb3RhdGlvbjogMCxcbiAgICByb3RhdGlvblg6IDAsXG4gICAgcm90YXRpb25ZOiAwLFxuICAgIHNjYWxlOiAxLFxuICAgIHNrZXdYOiAwLFxuICAgIHNrZXdZOiAwXG4gIH0pLnByb2dyZXNzKDEpLFxuICAgICAgYm91bmRzID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdHdlZW4gJiYgdHdlZW4ucHJvZ3Jlc3MoMCkua2lsbCgpO1xuICByZXR1cm4gYm91bmRzO1xufSxcbiAgICBfZ2V0U2l6ZSA9IGZ1bmN0aW9uIF9nZXRTaXplKGVsZW1lbnQsIF9yZWYzKSB7XG4gIHZhciBkMiA9IF9yZWYzLmQyO1xuICByZXR1cm4gZWxlbWVudFtcIm9mZnNldFwiICsgZDJdIHx8IGVsZW1lbnRbXCJjbGllbnRcIiArIGQyXSB8fCAwO1xufSxcbiAgICBfZ2V0TGFiZWxSYXRpb0FycmF5ID0gZnVuY3Rpb24gX2dldExhYmVsUmF0aW9BcnJheSh0aW1lbGluZSkge1xuICB2YXIgYSA9IFtdLFxuICAgICAgbGFiZWxzID0gdGltZWxpbmUubGFiZWxzLFxuICAgICAgZHVyYXRpb24gPSB0aW1lbGluZS5kdXJhdGlvbigpLFxuICAgICAgcDtcblxuICBmb3IgKHAgaW4gbGFiZWxzKSB7XG4gICAgYS5wdXNoKGxhYmVsc1twXSAvIGR1cmF0aW9uKTtcbiAgfVxuXG4gIHJldHVybiBhO1xufSxcbiAgICBfZ2V0Q2xvc2VzdExhYmVsID0gZnVuY3Rpb24gX2dldENsb3Nlc3RMYWJlbChhbmltYXRpb24pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBnc2FwLnV0aWxzLnNuYXAoX2dldExhYmVsUmF0aW9BcnJheShhbmltYXRpb24pLCB2YWx1ZSk7XG4gIH07XG59LFxuICAgIF9zbmFwRGlyZWN0aW9uYWwgPSBmdW5jdGlvbiBfc25hcERpcmVjdGlvbmFsKHNuYXBJbmNyZW1lbnRPckFycmF5KSB7XG4gIHZhciBzbmFwID0gZ3NhcC51dGlscy5zbmFwKHNuYXBJbmNyZW1lbnRPckFycmF5KSxcbiAgICAgIGEgPSBBcnJheS5pc0FycmF5KHNuYXBJbmNyZW1lbnRPckFycmF5KSAmJiBzbmFwSW5jcmVtZW50T3JBcnJheS5zbGljZSgwKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEgLSBiO1xuICB9KTtcbiAgcmV0dXJuIGEgPyBmdW5jdGlvbiAodmFsdWUsIGRpcmVjdGlvbiwgdGhyZXNob2xkKSB7XG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJlc2hvbGQgPSAxZS0zO1xuICAgIH1cblxuICAgIHZhciBpO1xuXG4gICAgaWYgKCFkaXJlY3Rpb24pIHtcbiAgICAgIHJldHVybiBzbmFwKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoZGlyZWN0aW9uID4gMCkge1xuICAgICAgdmFsdWUgLT0gdGhyZXNob2xkOyAvLyB0byBhdm9pZCByb3VuZGluZyBlcnJvcnMuIElmIHdlJ3JlIHRvbyBzdHJpY3QsIGl0IG1pZ2h0IHNuYXAgZm9yd2FyZCwgdGhlbiBpbW1lZGlhdGVseSBhZ2FpbiwgYW5kIGFnYWluLlxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYVtpXSA+PSB2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBhW2ldO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhW2kgLSAxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaSA9IGEubGVuZ3RoO1xuICAgICAgdmFsdWUgKz0gdGhyZXNob2xkO1xuXG4gICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIGlmIChhW2ldIDw9IHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIGFbaV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYVswXTtcbiAgfSA6IGZ1bmN0aW9uICh2YWx1ZSwgZGlyZWN0aW9uLCB0aHJlc2hvbGQpIHtcbiAgICBpZiAodGhyZXNob2xkID09PSB2b2lkIDApIHtcbiAgICAgIHRocmVzaG9sZCA9IDFlLTM7XG4gICAgfVxuXG4gICAgdmFyIHNuYXBwZWQgPSBzbmFwKHZhbHVlKTtcbiAgICByZXR1cm4gIWRpcmVjdGlvbiB8fCBNYXRoLmFicyhzbmFwcGVkIC0gdmFsdWUpIDwgdGhyZXNob2xkIHx8IHNuYXBwZWQgLSB2YWx1ZSA8IDAgPT09IGRpcmVjdGlvbiA8IDAgPyBzbmFwcGVkIDogc25hcChkaXJlY3Rpb24gPCAwID8gdmFsdWUgLSBzbmFwSW5jcmVtZW50T3JBcnJheSA6IHZhbHVlICsgc25hcEluY3JlbWVudE9yQXJyYXkpO1xuICB9O1xufSxcbiAgICBfZ2V0TGFiZWxBdERpcmVjdGlvbiA9IGZ1bmN0aW9uIF9nZXRMYWJlbEF0RGlyZWN0aW9uKHRpbWVsaW5lKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUsIHN0KSB7XG4gICAgcmV0dXJuIF9zbmFwRGlyZWN0aW9uYWwoX2dldExhYmVsUmF0aW9BcnJheSh0aW1lbGluZSkpKHZhbHVlLCBzdC5kaXJlY3Rpb24pO1xuICB9O1xufSxcbiAgICBfbXVsdGlMaXN0ZW5lciA9IGZ1bmN0aW9uIF9tdWx0aUxpc3RlbmVyKGZ1bmMsIGVsZW1lbnQsIHR5cGVzLCBjYWxsYmFjaykge1xuICByZXR1cm4gdHlwZXMuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24gKHR5cGUpIHtcbiAgICByZXR1cm4gZnVuYyhlbGVtZW50LCB0eXBlLCBjYWxsYmFjayk7XG4gIH0pO1xufSxcbiAgICBfYWRkTGlzdGVuZXIgPSBmdW5jdGlvbiBfYWRkTGlzdGVuZXIoZWxlbWVudCwgdHlwZSwgZnVuYywgbm9uUGFzc2l2ZSwgY2FwdHVyZSkge1xuICByZXR1cm4gZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmMsIHtcbiAgICBwYXNzaXZlOiAhbm9uUGFzc2l2ZSxcbiAgICBjYXB0dXJlOiAhIWNhcHR1cmVcbiAgfSk7XG59LFxuICAgIF9yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uIF9yZW1vdmVMaXN0ZW5lcihlbGVtZW50LCB0eXBlLCBmdW5jLCBjYXB0dXJlKSB7XG4gIHJldHVybiBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZnVuYywgISFjYXB0dXJlKTtcbn0sXG4gICAgX3doZWVsTGlzdGVuZXIgPSBmdW5jdGlvbiBfd2hlZWxMaXN0ZW5lcihmdW5jLCBlbCwgc2Nyb2xsRnVuYykge1xuICBzY3JvbGxGdW5jID0gc2Nyb2xsRnVuYyAmJiBzY3JvbGxGdW5jLndoZWVsSGFuZGxlcjtcblxuICBpZiAoc2Nyb2xsRnVuYykge1xuICAgIGZ1bmMoZWwsIFwid2hlZWxcIiwgc2Nyb2xsRnVuYyk7XG4gICAgZnVuYyhlbCwgXCJ0b3VjaG1vdmVcIiwgc2Nyb2xsRnVuYyk7XG4gIH1cbn0sXG4gICAgX21hcmtlckRlZmF1bHRzID0ge1xuICBzdGFydENvbG9yOiBcImdyZWVuXCIsXG4gIGVuZENvbG9yOiBcInJlZFwiLFxuICBpbmRlbnQ6IDAsXG4gIGZvbnRTaXplOiBcIjE2cHhcIixcbiAgZm9udFdlaWdodDogXCJub3JtYWxcIlxufSxcbiAgICBfZGVmYXVsdHMgPSB7XG4gIHRvZ2dsZUFjdGlvbnM6IFwicGxheVwiLFxuICBhbnRpY2lwYXRlUGluOiAwXG59LFxuICAgIF9rZXl3b3JkcyA9IHtcbiAgdG9wOiAwLFxuICBsZWZ0OiAwLFxuICBjZW50ZXI6IDAuNSxcbiAgYm90dG9tOiAxLFxuICByaWdodDogMVxufSxcbiAgICBfb2Zmc2V0VG9QeCA9IGZ1bmN0aW9uIF9vZmZzZXRUb1B4KHZhbHVlLCBzaXplKSB7XG4gIGlmIChfaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgdmFyIGVxSW5kZXggPSB2YWx1ZS5pbmRleE9mKFwiPVwiKSxcbiAgICAgICAgcmVsYXRpdmUgPSB+ZXFJbmRleCA/ICsodmFsdWUuY2hhckF0KGVxSW5kZXggLSAxKSArIDEpICogcGFyc2VGbG9hdCh2YWx1ZS5zdWJzdHIoZXFJbmRleCArIDEpKSA6IDA7XG5cbiAgICBpZiAofmVxSW5kZXgpIHtcbiAgICAgIHZhbHVlLmluZGV4T2YoXCIlXCIpID4gZXFJbmRleCAmJiAocmVsYXRpdmUgKj0gc2l6ZSAvIDEwMCk7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cigwLCBlcUluZGV4IC0gMSk7XG4gICAgfVxuXG4gICAgdmFsdWUgPSByZWxhdGl2ZSArICh2YWx1ZSBpbiBfa2V5d29yZHMgPyBfa2V5d29yZHNbdmFsdWVdICogc2l6ZSA6IH52YWx1ZS5pbmRleE9mKFwiJVwiKSA/IHBhcnNlRmxvYXQodmFsdWUpICogc2l6ZSAvIDEwMCA6IHBhcnNlRmxvYXQodmFsdWUpIHx8IDApO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufSxcbiAgICBfY3JlYXRlTWFya2VyID0gZnVuY3Rpb24gX2NyZWF0ZU1hcmtlcih0eXBlLCBuYW1lLCBjb250YWluZXIsIGRpcmVjdGlvbiwgX3JlZjQsIG9mZnNldCwgbWF0Y2hXaWR0aEVsLCBjb250YWluZXJBbmltYXRpb24pIHtcbiAgdmFyIHN0YXJ0Q29sb3IgPSBfcmVmNC5zdGFydENvbG9yLFxuICAgICAgZW5kQ29sb3IgPSBfcmVmNC5lbmRDb2xvcixcbiAgICAgIGZvbnRTaXplID0gX3JlZjQuZm9udFNpemUsXG4gICAgICBpbmRlbnQgPSBfcmVmNC5pbmRlbnQsXG4gICAgICBmb250V2VpZ2h0ID0gX3JlZjQuZm9udFdlaWdodDtcblxuICB2YXIgZSA9IF9kb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKSxcbiAgICAgIHVzZUZpeGVkUG9zaXRpb24gPSBfaXNWaWV3cG9ydChjb250YWluZXIpIHx8IF9nZXRQcm94eVByb3AoY29udGFpbmVyLCBcInBpblR5cGVcIikgPT09IFwiZml4ZWRcIixcbiAgICAgIGlzU2Nyb2xsZXIgPSB0eXBlLmluZGV4T2YoXCJzY3JvbGxlclwiKSAhPT0gLTEsXG4gICAgICBwYXJlbnQgPSB1c2VGaXhlZFBvc2l0aW9uID8gX2JvZHkgOiBjb250YWluZXIsXG4gICAgICBpc1N0YXJ0ID0gdHlwZS5pbmRleE9mKFwic3RhcnRcIikgIT09IC0xLFxuICAgICAgY29sb3IgPSBpc1N0YXJ0ID8gc3RhcnRDb2xvciA6IGVuZENvbG9yLFxuICAgICAgY3NzID0gXCJib3JkZXItY29sb3I6XCIgKyBjb2xvciArIFwiO2ZvbnQtc2l6ZTpcIiArIGZvbnRTaXplICsgXCI7Y29sb3I6XCIgKyBjb2xvciArIFwiO2ZvbnQtd2VpZ2h0OlwiICsgZm9udFdlaWdodCArIFwiO3BvaW50ZXItZXZlbnRzOm5vbmU7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWYsQXJpYWw7ei1pbmRleDoxMDAwO3BhZGRpbmc6NHB4IDhweDtib3JkZXItd2lkdGg6MDtib3JkZXItc3R5bGU6c29saWQ7XCI7XG5cbiAgY3NzICs9IFwicG9zaXRpb246XCIgKyAoKGlzU2Nyb2xsZXIgfHwgY29udGFpbmVyQW5pbWF0aW9uKSAmJiB1c2VGaXhlZFBvc2l0aW9uID8gXCJmaXhlZDtcIiA6IFwiYWJzb2x1dGU7XCIpO1xuICAoaXNTY3JvbGxlciB8fCBjb250YWluZXJBbmltYXRpb24gfHwgIXVzZUZpeGVkUG9zaXRpb24pICYmIChjc3MgKz0gKGRpcmVjdGlvbiA9PT0gX3ZlcnRpY2FsID8gX3JpZ2h0IDogX2JvdHRvbSkgKyBcIjpcIiArIChvZmZzZXQgKyBwYXJzZUZsb2F0KGluZGVudCkpICsgXCJweDtcIik7XG4gIG1hdGNoV2lkdGhFbCAmJiAoY3NzICs9IFwiYm94LXNpemluZzpib3JkZXItYm94O3RleHQtYWxpZ246bGVmdDt3aWR0aDpcIiArIG1hdGNoV2lkdGhFbC5vZmZzZXRXaWR0aCArIFwicHg7XCIpO1xuICBlLl9pc1N0YXJ0ID0gaXNTdGFydDtcbiAgZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcImdzYXAtbWFya2VyLVwiICsgdHlwZSArIChuYW1lID8gXCIgbWFya2VyLVwiICsgbmFtZSA6IFwiXCIpKTtcbiAgZS5zdHlsZS5jc3NUZXh0ID0gY3NzO1xuICBlLmlubmVyVGV4dCA9IG5hbWUgfHwgbmFtZSA9PT0gMCA/IHR5cGUgKyBcIi1cIiArIG5hbWUgOiB0eXBlO1xuICBwYXJlbnQuY2hpbGRyZW5bMF0gPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKGUsIHBhcmVudC5jaGlsZHJlblswXSkgOiBwYXJlbnQuYXBwZW5kQ2hpbGQoZSk7XG4gIGUuX29mZnNldCA9IGVbXCJvZmZzZXRcIiArIGRpcmVjdGlvbi5vcC5kMl07XG5cbiAgX3Bvc2l0aW9uTWFya2VyKGUsIDAsIGRpcmVjdGlvbiwgaXNTdGFydCk7XG5cbiAgcmV0dXJuIGU7XG59LFxuICAgIF9wb3NpdGlvbk1hcmtlciA9IGZ1bmN0aW9uIF9wb3NpdGlvbk1hcmtlcihtYXJrZXIsIHN0YXJ0LCBkaXJlY3Rpb24sIGZsaXBwZWQpIHtcbiAgdmFyIHZhcnMgPSB7XG4gICAgZGlzcGxheTogXCJibG9ja1wiXG4gIH0sXG4gICAgICBzaWRlID0gZGlyZWN0aW9uW2ZsaXBwZWQgPyBcIm9zMlwiIDogXCJwMlwiXSxcbiAgICAgIG9wcG9zaXRlU2lkZSA9IGRpcmVjdGlvbltmbGlwcGVkID8gXCJwMlwiIDogXCJvczJcIl07XG4gIG1hcmtlci5faXNGbGlwcGVkID0gZmxpcHBlZDtcbiAgdmFyc1tkaXJlY3Rpb24uYSArIFwiUGVyY2VudFwiXSA9IGZsaXBwZWQgPyAtMTAwIDogMDtcbiAgdmFyc1tkaXJlY3Rpb24uYV0gPSBmbGlwcGVkID8gXCIxcHhcIiA6IDA7XG4gIHZhcnNbXCJib3JkZXJcIiArIHNpZGUgKyBfV2lkdGhdID0gMTtcbiAgdmFyc1tcImJvcmRlclwiICsgb3Bwb3NpdGVTaWRlICsgX1dpZHRoXSA9IDA7XG4gIHZhcnNbZGlyZWN0aW9uLnBdID0gc3RhcnQgKyBcInB4XCI7XG4gIGdzYXAuc2V0KG1hcmtlciwgdmFycyk7XG59LFxuICAgIF90cmlnZ2VycyA9IFtdLFxuICAgIF9pZHMgPSB7fSxcbiAgICBfcmFmSUQsXG4gICAgX3N5bmMgPSBmdW5jdGlvbiBfc3luYygpIHtcbiAgcmV0dXJuIF9nZXRUaW1lKCkgLSBfbGFzdFNjcm9sbFRpbWUgPiAzNCAmJiAoX3JhZklEIHx8IChfcmFmSUQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3VwZGF0ZUFsbCkpKTtcbn0sXG4gICAgX29uU2Nyb2xsID0gZnVuY3Rpb24gX29uU2Nyb2xsKCkge1xuICAvLyBwcmV2aW91c2x5LCB3ZSB0cmllZCB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBieSBiYXRjaGluZy9kZWZlcnJpbmcgdG8gdGhlIG5leHQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCksIGJ1dCBkaXNjb3ZlcmVkIHRoYXQgU2FmYXJpIGhhcyBhIGZldyBidWdzIHRoYXQgbWFrZSB0aGlzIHVud29ya2FibGUgKGVzcGVjaWFsbHkgb24gaU9TKS4gU2VlIGh0dHBzOi8vY29kZXBlbi5pby9HcmVlblNvY2svcGVuLzE2YzQzNWIxMmVmMDljMzgxMjUyMDQ4MThlN2I0NWZjP2VkaXRvcnM9MDAxMCBhbmQgaHR0cHM6Ly9jb2RlcGVuLmlvL0dyZWVuU29jay9wZW4vSmpPeFlwUS8zZGQ2NWNjZWM1YTYwZjFkODYyYzM1NWQ4NGQxNDU2Mj9lZGl0b3JzPTAwMTAgYW5kIGh0dHBzOi8vY29kZXBlbi5pby9HcmVlblNvY2svcGVuL0V4YnJQTmEvMDg3Y2VmMTk3ZGMzNTQ0NWEwOTUxZTg5MzVjNDE1MDM/ZWRpdG9ycz0wMDEwXG4gIGlmICghX25vcm1hbGl6ZXIgfHwgIV9ub3JtYWxpemVyLmlzUHJlc3NlZCB8fCBfbm9ybWFsaXplci5zdGFydFggPiBfYm9keS5jbGllbnRXaWR0aCkge1xuICAgIC8vIGlmIHRoZSB1c2VyIGlzIGRyYWdnaW5nIHRoZSBzY3JvbGxiYXIsIGFsbG93IGl0LlxuICAgIF9zY3JvbGxlcnMuY2FjaGUrKztcblxuICAgIGlmIChfbm9ybWFsaXplcikge1xuICAgICAgX3JhZklEIHx8IChfcmFmSUQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3VwZGF0ZUFsbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfdXBkYXRlQWxsKCk7IC8vIFNhZmFyaSBpbiBwYXJ0aWN1bGFyIChvbiBkZXNrdG9wKSBORUVEUyB0aGUgaW1tZWRpYXRlIHVwZGF0ZSByYXRoZXIgdGhhbiB3YWl0aW5nIGZvciBhIHJlcXVlc3RBbmltYXRpb25GcmFtZSgpIHdoZXJlYXMgaU9TIHNlZW1zIHRvIGJlbmVmaXQgZnJvbSB3YWl0aW5nIGZvciB0aGUgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkgdGljaywgYXQgbGVhc3Qgd2hlbiBub3JtYWxpemluZy4gU2VlIGh0dHBzOi8vY29kZXBlbi5pby9HcmVlblNvY2svcGVuL3FCWW96cU8/ZWRpdG9ycz0wMTEwXG5cbiAgICB9XG5cbiAgICBfbGFzdFNjcm9sbFRpbWUgfHwgX2Rpc3BhdGNoKFwic2Nyb2xsU3RhcnRcIik7XG4gICAgX2xhc3RTY3JvbGxUaW1lID0gX2dldFRpbWUoKTtcbiAgfVxufSxcbiAgICBfc2V0QmFzZURpbWVuc2lvbnMgPSBmdW5jdGlvbiBfc2V0QmFzZURpbWVuc2lvbnMoKSB7XG4gIF9iYXNlU2NyZWVuV2lkdGggPSBfd2luLmlubmVyV2lkdGg7XG4gIF9iYXNlU2NyZWVuSGVpZ2h0ID0gX3dpbi5pbm5lckhlaWdodDtcbn0sXG4gICAgX29uUmVzaXplID0gZnVuY3Rpb24gX29uUmVzaXplKGZvcmNlKSB7XG4gIF9zY3JvbGxlcnMuY2FjaGUrKztcbiAgKGZvcmNlID09PSB0cnVlIHx8ICFfcmVmcmVzaGluZyAmJiAhX2lnbm9yZVJlc2l6ZSAmJiAhX2RvYy5mdWxsc2NyZWVuRWxlbWVudCAmJiAhX2RvYy53ZWJraXRGdWxsc2NyZWVuRWxlbWVudCAmJiAoIV9pZ25vcmVNb2JpbGVSZXNpemUgfHwgX2Jhc2VTY3JlZW5XaWR0aCAhPT0gX3dpbi5pbm5lcldpZHRoIHx8IE1hdGguYWJzKF93aW4uaW5uZXJIZWlnaHQgLSBfYmFzZVNjcmVlbkhlaWdodCkgPiBfd2luLmlubmVySGVpZ2h0ICogMC4yNSkpICYmIF9yZXNpemVEZWxheS5yZXN0YXJ0KHRydWUpO1xufSxcbiAgICAvLyBpZ25vcmUgcmVzaXplcyB0cmlnZ2VyZWQgYnkgcmVmcmVzaCgpXG5fbGlzdGVuZXJzID0ge30sXG4gICAgX2VtcHR5QXJyYXkgPSBbXSxcbiAgICBfc29mdFJlZnJlc2ggPSBmdW5jdGlvbiBfc29mdFJlZnJlc2goKSB7XG4gIHJldHVybiBfcmVtb3ZlTGlzdGVuZXIoU2Nyb2xsVHJpZ2dlciwgXCJzY3JvbGxFbmRcIiwgX3NvZnRSZWZyZXNoKSB8fCBfcmVmcmVzaEFsbCh0cnVlKTtcbn0sXG4gICAgX2Rpc3BhdGNoID0gZnVuY3Rpb24gX2Rpc3BhdGNoKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnNbdHlwZV0gJiYgX2xpc3RlbmVyc1t0eXBlXS5tYXAoZnVuY3Rpb24gKGYpIHtcbiAgICByZXR1cm4gZigpO1xuICB9KSB8fCBfZW1wdHlBcnJheTtcbn0sXG4gICAgX3NhdmVkU3R5bGVzID0gW10sXG4gICAgLy8gd2hlbiBTY3JvbGxUcmlnZ2VyLnNhdmVTdHlsZXMoKSBpcyBjYWxsZWQsIHRoZSBpbmxpbmUgc3R5bGVzIGFyZSByZWNvcmRlZCBpbiB0aGlzIEFycmF5IGluIGEgc2VxdWVudGlhbCBmb3JtYXQgbGlrZSBbZWxlbWVudCwgY3NzVGV4dCwgZ3NDYWNoZSwgbWVkaWFdLiBUaGlzIGtlZXBzIGl0IHZlcnkgbWVtb3J5LWVmZmljaWVudCBhbmQgZmFzdCB0byBpdGVyYXRlIHRocm91Z2guXG5fcmV2ZXJ0UmVjb3JkZWQgPSBmdW5jdGlvbiBfcmV2ZXJ0UmVjb3JkZWQobWVkaWEpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBfc2F2ZWRTdHlsZXMubGVuZ3RoOyBpICs9IDUpIHtcbiAgICBpZiAoIW1lZGlhIHx8IF9zYXZlZFN0eWxlc1tpICsgNF0gJiYgX3NhdmVkU3R5bGVzW2kgKyA0XS5xdWVyeSA9PT0gbWVkaWEpIHtcbiAgICAgIF9zYXZlZFN0eWxlc1tpXS5zdHlsZS5jc3NUZXh0ID0gX3NhdmVkU3R5bGVzW2kgKyAxXTtcbiAgICAgIF9zYXZlZFN0eWxlc1tpXS5nZXRCQm94ICYmIF9zYXZlZFN0eWxlc1tpXS5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgX3NhdmVkU3R5bGVzW2kgKyAyXSB8fCBcIlwiKTtcbiAgICAgIF9zYXZlZFN0eWxlc1tpICsgM10udW5jYWNoZSA9IDE7XG4gICAgfVxuICB9XG59LFxuICAgIF9yZXZlcnRBbGwgPSBmdW5jdGlvbiBfcmV2ZXJ0QWxsKGtpbGwsIG1lZGlhKSB7XG4gIHZhciB0cmlnZ2VyO1xuXG4gIGZvciAoX2kgPSAwOyBfaSA8IF90cmlnZ2Vycy5sZW5ndGg7IF9pKyspIHtcbiAgICB0cmlnZ2VyID0gX3RyaWdnZXJzW19pXTtcblxuICAgIGlmICh0cmlnZ2VyICYmICghbWVkaWEgfHwgdHJpZ2dlci5fY3R4ID09PSBtZWRpYSkpIHtcbiAgICAgIGlmIChraWxsKSB7XG4gICAgICAgIHRyaWdnZXIua2lsbCgxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyaWdnZXIucmV2ZXJ0KHRydWUsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9pc1JldmVydGVkID0gdHJ1ZTtcbiAgbWVkaWEgJiYgX3JldmVydFJlY29yZGVkKG1lZGlhKTtcbiAgbWVkaWEgfHwgX2Rpc3BhdGNoKFwicmV2ZXJ0XCIpO1xufSxcbiAgICBfY2xlYXJTY3JvbGxNZW1vcnkgPSBmdW5jdGlvbiBfY2xlYXJTY3JvbGxNZW1vcnkoc2Nyb2xsUmVzdG9yYXRpb24sIGZvcmNlKSB7XG4gIC8vIHplcm8tb3V0IGFsbCB0aGUgcmVjb3JkZWQgc2Nyb2xsIHBvc2l0aW9ucy4gRG9uJ3QgdXNlIF90cmlnZ2VycyBiZWNhdXNlIGlmLCBmb3IgZXhhbXBsZSwgLm1hdGNoTWVkaWEoKSBpcyB1c2VkIHRvIGNyZWF0ZSBzb21lIFNjcm9sbFRyaWdnZXJzIGFuZCB0aGVuIHRoZSB1c2VyIHJlc2l6ZXMgYW5kIGl0IHJlbW92ZXMgQUxMIFNjcm9sbFRyaWdnZXJzLCBhbmQgdGhlbiBnbyBiYWNrIHRvIGEgc2l6ZSB3aGVyZSB0aGVyZSBhcmUgU2Nyb2xsVHJpZ2dlcnMsIGl0IHdvdWxkIGhhdmUga2VwdCB0aGUgcG9zaXRpb24ocykgc2F2ZWQgZnJvbSB0aGUgaW5pdGlhbCBzdGF0ZS5cbiAgX3Njcm9sbGVycy5jYWNoZSsrO1xuICAoZm9yY2UgfHwgIV9yZWZyZXNoaW5nQWxsKSAmJiBfc2Nyb2xsZXJzLmZvckVhY2goZnVuY3Rpb24gKG9iaikge1xuICAgIHJldHVybiBfaXNGdW5jdGlvbihvYmopICYmIG9iai5jYWNoZUlEKysgJiYgKG9iai5yZWMgPSAwKTtcbiAgfSk7XG4gIF9pc1N0cmluZyhzY3JvbGxSZXN0b3JhdGlvbikgJiYgKF93aW4uaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiA9IF9zY3JvbGxSZXN0b3JhdGlvbiA9IHNjcm9sbFJlc3RvcmF0aW9uKTtcbn0sXG4gICAgX3JlZnJlc2hpbmdBbGwsXG4gICAgX3JlZnJlc2hJRCA9IDAsXG4gICAgX3F1ZXVlUmVmcmVzaElELFxuICAgIF9xdWV1ZVJlZnJlc2hBbGwgPSBmdW5jdGlvbiBfcXVldWVSZWZyZXNoQWxsKCkge1xuICAvLyB3ZSBkb24ndCB3YW50IHRvIGNhbGwgX3JlZnJlc2hBbGwoKSBldmVyeSB0aW1lIHdlIGNyZWF0ZSBhIG5ldyBTY3JvbGxUcmlnZ2VyIChmb3IgcGVyZm9ybWFuY2UgcmVhc29ucykgLSBpdCdzIGJldHRlciB0byBiYXRjaCB0aGVtLiBTb21lIGZyYW1ld29ya3MgZHluYW1pY2FsbHkgbG9hZCBjb250ZW50IGFuZCB3ZSBjYW4ndCByZWx5IG9uIHRoZSB3aW5kb3cncyBcImxvYWRcIiBvciBcIkRPTUNvbnRlbnRMb2FkZWRcIiBldmVudHMgdG8gdHJpZ2dlciBpdC5cbiAgaWYgKF9xdWV1ZVJlZnJlc2hJRCAhPT0gX3JlZnJlc2hJRCkge1xuICAgIHZhciBpZCA9IF9xdWV1ZVJlZnJlc2hJRCA9IF9yZWZyZXNoSUQ7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBpZCA9PT0gX3JlZnJlc2hJRCAmJiBfcmVmcmVzaEFsbCh0cnVlKTtcbiAgICB9KTtcbiAgfVxufSxcbiAgICBfcmVmcmVzaDEwMHZoID0gZnVuY3Rpb24gX3JlZnJlc2gxMDB2aCgpIHtcbiAgX2JvZHkuYXBwZW5kQ2hpbGQoX2RpdjEwMHZoKTtcblxuICBfMTAwdmggPSAhX25vcm1hbGl6ZXIgJiYgX2RpdjEwMHZoLm9mZnNldEhlaWdodCB8fCBfd2luLmlubmVySGVpZ2h0O1xuXG4gIF9ib2R5LnJlbW92ZUNoaWxkKF9kaXYxMDB2aCk7XG59LFxuICAgIF9oaWRlQWxsTWFya2VycyA9IGZ1bmN0aW9uIF9oaWRlQWxsTWFya2VycyhoaWRlKSB7XG4gIHJldHVybiBfdG9BcnJheShcIi5nc2FwLW1hcmtlci1zdGFydCwgLmdzYXAtbWFya2VyLWVuZCwgLmdzYXAtbWFya2VyLXNjcm9sbGVyLXN0YXJ0LCAuZ3NhcC1tYXJrZXItc2Nyb2xsZXItZW5kXCIpLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgcmV0dXJuIGVsLnN0eWxlLmRpc3BsYXkgPSBoaWRlID8gXCJub25lXCIgOiBcImJsb2NrXCI7XG4gIH0pO1xufSxcbiAgICBfcmVmcmVzaEFsbCA9IGZ1bmN0aW9uIF9yZWZyZXNoQWxsKGZvcmNlLCBza2lwUmV2ZXJ0KSB7XG4gIF9kb2NFbCA9IF9kb2MuZG9jdW1lbnRFbGVtZW50OyAvLyBzb21lIGZyYW1ld29ya3MgbGlrZSBBc3RybyBtYXkgY2FjaGUgdGhlIDxib2R5PiBhbmQgcmVwbGFjZSBpdCBkdXJpbmcgcm91dGluZywgc28gd2UnbGwganVzdCByZS1yZWNvcmQgdGhlIF9kb2NFbCBhbmQgX2JvZHkgZm9yIHNhZmV0eSAob3RoZXJ3aXNlLCB0aGUgbWFya2VycyBtYXkgbm90IGdldCBhZGRlZCBwcm9wZXJseSkuXG5cbiAgX2JvZHkgPSBfZG9jLmJvZHk7XG4gIF9yb290ID0gW193aW4sIF9kb2MsIF9kb2NFbCwgX2JvZHldO1xuXG4gIGlmIChfbGFzdFNjcm9sbFRpbWUgJiYgIWZvcmNlICYmICFfaXNSZXZlcnRlZCkge1xuICAgIF9hZGRMaXN0ZW5lcihTY3JvbGxUcmlnZ2VyLCBcInNjcm9sbEVuZFwiLCBfc29mdFJlZnJlc2gpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgX3JlZnJlc2gxMDB2aCgpO1xuXG4gIF9yZWZyZXNoaW5nQWxsID0gU2Nyb2xsVHJpZ2dlci5pc1JlZnJlc2hpbmcgPSB0cnVlO1xuXG4gIF9zY3JvbGxlcnMuZm9yRWFjaChmdW5jdGlvbiAob2JqKSB7XG4gICAgcmV0dXJuIF9pc0Z1bmN0aW9uKG9iaikgJiYgKytvYmouY2FjaGVJRCAmJiAob2JqLnJlYyA9IG9iaigpKTtcbiAgfSk7IC8vIGZvcmNlIHRoZSBjbGVhcmluZyBvZiB0aGUgY2FjaGUgYmVjYXVzZSBzb21lIGJyb3dzZXJzIHRha2UgYSBsaXR0bGUgd2hpbGUgdG8gZGlzcGF0Y2ggdGhlIFwic2Nyb2xsXCIgZXZlbnQgYW5kIHRoZSB1c2VyIG1heSBoYXZlIGNoYW5nZWQgdGhlIHNjcm9sbCBwb3NpdGlvbiBhbmQgdGhlbiBjYWxsZWQgU2Nyb2xsVHJpZ2dlci5yZWZyZXNoKCkgcmlnaHQgYXdheVxuXG5cbiAgdmFyIHJlZnJlc2hJbml0cyA9IF9kaXNwYXRjaChcInJlZnJlc2hJbml0XCIpO1xuXG4gIF9zb3J0ICYmIFNjcm9sbFRyaWdnZXIuc29ydCgpO1xuICBza2lwUmV2ZXJ0IHx8IF9yZXZlcnRBbGwoKTtcblxuICBfc2Nyb2xsZXJzLmZvckVhY2goZnVuY3Rpb24gKG9iaikge1xuICAgIGlmIChfaXNGdW5jdGlvbihvYmopKSB7XG4gICAgICBvYmouc21vb3RoICYmIChvYmoudGFyZ2V0LnN0eWxlLnNjcm9sbEJlaGF2aW9yID0gXCJhdXRvXCIpOyAvLyBzbW9vdGggc2Nyb2xsaW5nIGludGVyZmVyZXNcblxuICAgICAgb2JqKDApO1xuICAgIH1cbiAgfSk7XG5cbiAgX3RyaWdnZXJzLnNsaWNlKDApLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5yZWZyZXNoKCk7XG4gIH0pOyAvLyBkb24ndCBsb29wIHdpdGggX2kgYmVjYXVzZSBkdXJpbmcgYSByZWZyZXNoKCkgc29tZW9uZSBjb3VsZCBjYWxsIFNjcm9sbFRyaWdnZXIudXBkYXRlKCkgd2hpY2ggd291bGQgaXRlcmF0ZSB0aHJvdWdoIF9pIHJlc3VsdGluZyBpbiBhIHNraXAuXG5cblxuICBfaXNSZXZlcnRlZCA9IGZhbHNlO1xuXG4gIF90cmlnZ2Vycy5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7XG4gICAgLy8gbmVzdGVkIHBpbnMgKHBpbm5lZENvbnRhaW5lcikgd2l0aCBwaW5TcGFjaW5nIG1heSBleHBhbmQgdGhlIGNvbnRhaW5lciwgc28gd2UgbXVzdCBhY2NvbW1vZGF0ZSB0aGF0IGhlcmUuXG4gICAgaWYgKHQuX3N1YlBpbk9mZnNldCAmJiB0LnBpbikge1xuICAgICAgdmFyIHByb3AgPSB0LnZhcnMuaG9yaXpvbnRhbCA/IFwib2Zmc2V0V2lkdGhcIiA6IFwib2Zmc2V0SGVpZ2h0XCIsXG4gICAgICAgICAgb3JpZ2luYWwgPSB0LnBpbltwcm9wXTtcbiAgICAgIHQucmV2ZXJ0KHRydWUsIDEpO1xuICAgICAgdC5hZGp1c3RQaW5TcGFjaW5nKHQucGluW3Byb3BdIC0gb3JpZ2luYWwpO1xuICAgICAgdC5yZWZyZXNoKCk7XG4gICAgfVxuICB9KTtcblxuICBfY2xhbXBpbmdNYXggPSAxOyAvLyBwaW5TcGFjaW5nIG1pZ2h0IGJlIHByb3BwaW5nIGEgcGFnZSBvcGVuLCB0aHVzIHdoZW4gd2UgLnNldFBvc2l0aW9ucygpIHRvIGNsYW1wIGEgU2Nyb2xsVHJpZ2dlcidzIGVuZCB3ZSBzaG91bGQgbGVhdmUgdGhlIHBpblNwYWNpbmcgYWxvbmUuIFRoYXQncyB3aGF0IHRoaXMgZmxhZyBpcyBmb3IuXG5cbiAgX2hpZGVBbGxNYXJrZXJzKHRydWUpO1xuXG4gIF90cmlnZ2Vycy5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7XG4gICAgLy8gdGhlIHNjcm9sbGVyJ3MgbWF4IHNjcm9sbCBwb3NpdGlvbiBtYXkgY2hhbmdlIGFmdGVyIGFsbCB0aGUgU2Nyb2xsVHJpZ2dlcnMgcmVmcmVzaGVkIChsaWtlIHBpbm5pbmcgY291bGQgcHVzaCBpdCBkb3duKSwgc28gd2UgbmVlZCB0byBsb29wIGJhY2sgYW5kIGNvcnJlY3QgYW55IHdpdGggZW5kOiBcIm1heFwiLiBTYW1lIGZvciBhbnl0aGluZyB3aXRoIGEgY2xhbXBlZCBlbmRcbiAgICB2YXIgbWF4ID0gX21heFNjcm9sbCh0LnNjcm9sbGVyLCB0Ll9kaXIpLFxuICAgICAgICBlbmRDbGFtcCA9IHQudmFycy5lbmQgPT09IFwibWF4XCIgfHwgdC5fZW5kQ2xhbXAgJiYgdC5lbmQgPiBtYXgsXG4gICAgICAgIHN0YXJ0Q2xhbXAgPSB0Ll9zdGFydENsYW1wICYmIHQuc3RhcnQgPj0gbWF4O1xuXG4gICAgKGVuZENsYW1wIHx8IHN0YXJ0Q2xhbXApICYmIHQuc2V0UG9zaXRpb25zKHN0YXJ0Q2xhbXAgPyBtYXggLSAxIDogdC5zdGFydCwgZW5kQ2xhbXAgPyBNYXRoLm1heChzdGFydENsYW1wID8gbWF4IDogdC5zdGFydCArIDEsIG1heCkgOiB0LmVuZCwgdHJ1ZSk7XG4gIH0pO1xuXG4gIF9oaWRlQWxsTWFya2VycyhmYWxzZSk7XG5cbiAgX2NsYW1waW5nTWF4ID0gMDtcbiAgcmVmcmVzaEluaXRzLmZvckVhY2goZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgIHJldHVybiByZXN1bHQgJiYgcmVzdWx0LnJlbmRlciAmJiByZXN1bHQucmVuZGVyKC0xKTtcbiAgfSk7IC8vIGlmIHRoZSBvblJlZnJlc2hJbml0KCkgcmV0dXJucyBhbiBhbmltYXRpb24gKHR5cGljYWxseSBhIGdzYXAuc2V0KCkpLCByZXZlcnQgaXQuIFRoaXMgbWFrZXMgaXQgZWFzeSB0byBwdXQgdGhpbmdzIGluIGEgY2VydGFpbiBzcG90IGJlZm9yZSByZWZyZXNoaW5nIGZvciBtZWFzdXJlbWVudCBwdXJwb3NlcywgYW5kIHRoZW4gcHV0IHRoaW5ncyBiYWNrLlxuXG4gIF9zY3JvbGxlcnMuZm9yRWFjaChmdW5jdGlvbiAob2JqKSB7XG4gICAgaWYgKF9pc0Z1bmN0aW9uKG9iaikpIHtcbiAgICAgIG9iai5zbW9vdGggJiYgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG9iai50YXJnZXQuc3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSBcInNtb290aFwiO1xuICAgICAgfSk7XG4gICAgICBvYmoucmVjICYmIG9iaihvYmoucmVjKTtcbiAgICB9XG4gIH0pO1xuXG4gIF9jbGVhclNjcm9sbE1lbW9yeShfc2Nyb2xsUmVzdG9yYXRpb24sIDEpO1xuXG4gIF9yZXNpemVEZWxheS5wYXVzZSgpO1xuXG4gIF9yZWZyZXNoSUQrKztcbiAgX3JlZnJlc2hpbmdBbGwgPSAyO1xuXG4gIF91cGRhdGVBbGwoMik7XG5cbiAgX3RyaWdnZXJzLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gX2lzRnVuY3Rpb24odC52YXJzLm9uUmVmcmVzaCkgJiYgdC52YXJzLm9uUmVmcmVzaCh0KTtcbiAgfSk7XG5cbiAgX3JlZnJlc2hpbmdBbGwgPSBTY3JvbGxUcmlnZ2VyLmlzUmVmcmVzaGluZyA9IGZhbHNlO1xuXG4gIF9kaXNwYXRjaChcInJlZnJlc2hcIik7XG59LFxuICAgIF9sYXN0U2Nyb2xsID0gMCxcbiAgICBfZGlyZWN0aW9uID0gMSxcbiAgICBfcHJpbWFyeSxcbiAgICBfdXBkYXRlQWxsID0gZnVuY3Rpb24gX3VwZGF0ZUFsbChmb3JjZSkge1xuICBpZiAoZm9yY2UgPT09IDIgfHwgIV9yZWZyZXNoaW5nQWxsICYmICFfaXNSZXZlcnRlZCkge1xuICAgIC8vIF9pc1JldmVydGVkIGNvdWxkIGJlIHRydWUgaWYsIGZvciBleGFtcGxlLCBhIG1hdGNoTWVkaWEoKSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBleGVjdXRpbmcuIFdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIGR1cmluZyB0aGUgdGltZSBldmVyeXRoaW5nIGlzIHJldmVydGVkLlxuICAgIFNjcm9sbFRyaWdnZXIuaXNVcGRhdGluZyA9IHRydWU7XG4gICAgX3ByaW1hcnkgJiYgX3ByaW1hcnkudXBkYXRlKDApOyAvLyBTY3JvbGxTbW9vdGhlciB1c2VzIHJlZnJlc2hQcmlvcml0eSAtOTk5OSB0byBiZWNvbWUgdGhlIHByaW1hcnkgdGhhdCBnZXRzIHVwZGF0ZWQgYmVmb3JlIGFsbCBvdGhlcnMgYmVjYXVzZSBpdCBhZmZlY3RzIHRoZSBzY3JvbGwgcG9zaXRpb24uXG5cbiAgICB2YXIgbCA9IF90cmlnZ2Vycy5sZW5ndGgsXG4gICAgICAgIHRpbWUgPSBfZ2V0VGltZSgpLFxuICAgICAgICByZWNvcmRWZWxvY2l0eSA9IHRpbWUgLSBfdGltZTEgPj0gNTAsXG4gICAgICAgIHNjcm9sbCA9IGwgJiYgX3RyaWdnZXJzWzBdLnNjcm9sbCgpO1xuXG4gICAgX2RpcmVjdGlvbiA9IF9sYXN0U2Nyb2xsID4gc2Nyb2xsID8gLTEgOiAxO1xuICAgIF9yZWZyZXNoaW5nQWxsIHx8IChfbGFzdFNjcm9sbCA9IHNjcm9sbCk7XG5cbiAgICBpZiAocmVjb3JkVmVsb2NpdHkpIHtcbiAgICAgIGlmIChfbGFzdFNjcm9sbFRpbWUgJiYgIV9wb2ludGVySXNEb3duICYmIHRpbWUgLSBfbGFzdFNjcm9sbFRpbWUgPiAyMDApIHtcbiAgICAgICAgX2xhc3RTY3JvbGxUaW1lID0gMDtcblxuICAgICAgICBfZGlzcGF0Y2goXCJzY3JvbGxFbmRcIik7XG4gICAgICB9XG5cbiAgICAgIF90aW1lMiA9IF90aW1lMTtcbiAgICAgIF90aW1lMSA9IHRpbWU7XG4gICAgfVxuXG4gICAgaWYgKF9kaXJlY3Rpb24gPCAwKSB7XG4gICAgICBfaSA9IGw7XG5cbiAgICAgIHdoaWxlIChfaS0tID4gMCkge1xuICAgICAgICBfdHJpZ2dlcnNbX2ldICYmIF90cmlnZ2Vyc1tfaV0udXBkYXRlKDAsIHJlY29yZFZlbG9jaXR5KTtcbiAgICAgIH1cblxuICAgICAgX2RpcmVjdGlvbiA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoX2kgPSAwOyBfaSA8IGw7IF9pKyspIHtcbiAgICAgICAgX3RyaWdnZXJzW19pXSAmJiBfdHJpZ2dlcnNbX2ldLnVwZGF0ZSgwLCByZWNvcmRWZWxvY2l0eSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgU2Nyb2xsVHJpZ2dlci5pc1VwZGF0aW5nID0gZmFsc2U7XG4gIH1cblxuICBfcmFmSUQgPSAwO1xufSxcbiAgICBfcHJvcE5hbWVzVG9Db3B5ID0gW19sZWZ0LCBfdG9wLCBfYm90dG9tLCBfcmlnaHQsIF9tYXJnaW4gKyBfQm90dG9tLCBfbWFyZ2luICsgX1JpZ2h0LCBfbWFyZ2luICsgX1RvcCwgX21hcmdpbiArIF9MZWZ0LCBcImRpc3BsYXlcIiwgXCJmbGV4U2hyaW5rXCIsIFwiZmxvYXRcIiwgXCJ6SW5kZXhcIiwgXCJncmlkQ29sdW1uU3RhcnRcIiwgXCJncmlkQ29sdW1uRW5kXCIsIFwiZ3JpZFJvd1N0YXJ0XCIsIFwiZ3JpZFJvd0VuZFwiLCBcImdyaWRBcmVhXCIsIFwianVzdGlmeVNlbGZcIiwgXCJhbGlnblNlbGZcIiwgXCJwbGFjZVNlbGZcIiwgXCJvcmRlclwiXSxcbiAgICBfc3RhdGVQcm9wcyA9IF9wcm9wTmFtZXNUb0NvcHkuY29uY2F0KFtfd2lkdGgsIF9oZWlnaHQsIFwiYm94U2l6aW5nXCIsIFwibWF4XCIgKyBfV2lkdGgsIFwibWF4XCIgKyBfSGVpZ2h0LCBcInBvc2l0aW9uXCIsIF9tYXJnaW4sIF9wYWRkaW5nLCBfcGFkZGluZyArIF9Ub3AsIF9wYWRkaW5nICsgX1JpZ2h0LCBfcGFkZGluZyArIF9Cb3R0b20sIF9wYWRkaW5nICsgX0xlZnRdKSxcbiAgICBfc3dhcFBpbk91dCA9IGZ1bmN0aW9uIF9zd2FwUGluT3V0KHBpbiwgc3BhY2VyLCBzdGF0ZSkge1xuICBfc2V0U3RhdGUoc3RhdGUpO1xuXG4gIHZhciBjYWNoZSA9IHBpbi5fZ3NhcDtcblxuICBpZiAoY2FjaGUuc3BhY2VySXNOYXRpdmUpIHtcbiAgICBfc2V0U3RhdGUoY2FjaGUuc3BhY2VyU3RhdGUpO1xuICB9IGVsc2UgaWYgKHBpbi5fZ3NhcC5zd2FwcGVkSW4pIHtcbiAgICB2YXIgcGFyZW50ID0gc3BhY2VyLnBhcmVudE5vZGU7XG5cbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKHBpbiwgc3BhY2VyKTtcbiAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChzcGFjZXIpO1xuICAgIH1cbiAgfVxuXG4gIHBpbi5fZ3NhcC5zd2FwcGVkSW4gPSBmYWxzZTtcbn0sXG4gICAgX3N3YXBQaW5JbiA9IGZ1bmN0aW9uIF9zd2FwUGluSW4ocGluLCBzcGFjZXIsIGNzLCBzcGFjZXJTdGF0ZSkge1xuICBpZiAoIXBpbi5fZ3NhcC5zd2FwcGVkSW4pIHtcbiAgICB2YXIgaSA9IF9wcm9wTmFtZXNUb0NvcHkubGVuZ3RoLFxuICAgICAgICBzcGFjZXJTdHlsZSA9IHNwYWNlci5zdHlsZSxcbiAgICAgICAgcGluU3R5bGUgPSBwaW4uc3R5bGUsXG4gICAgICAgIHA7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBwID0gX3Byb3BOYW1lc1RvQ29weVtpXTtcbiAgICAgIHNwYWNlclN0eWxlW3BdID0gY3NbcF07XG4gICAgfVxuXG4gICAgc3BhY2VyU3R5bGUucG9zaXRpb24gPSBjcy5wb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiID8gXCJhYnNvbHV0ZVwiIDogXCJyZWxhdGl2ZVwiO1xuICAgIGNzLmRpc3BsYXkgPT09IFwiaW5saW5lXCIgJiYgKHNwYWNlclN0eWxlLmRpc3BsYXkgPSBcImlubGluZS1ibG9ja1wiKTtcbiAgICBwaW5TdHlsZVtfYm90dG9tXSA9IHBpblN0eWxlW19yaWdodF0gPSBcImF1dG9cIjtcbiAgICBzcGFjZXJTdHlsZS5mbGV4QmFzaXMgPSBjcy5mbGV4QmFzaXMgfHwgXCJhdXRvXCI7XG4gICAgc3BhY2VyU3R5bGUub3ZlcmZsb3cgPSBcInZpc2libGVcIjtcbiAgICBzcGFjZXJTdHlsZS5ib3hTaXppbmcgPSBcImJvcmRlci1ib3hcIjtcbiAgICBzcGFjZXJTdHlsZVtfd2lkdGhdID0gX2dldFNpemUocGluLCBfaG9yaXpvbnRhbCkgKyBfcHg7XG4gICAgc3BhY2VyU3R5bGVbX2hlaWdodF0gPSBfZ2V0U2l6ZShwaW4sIF92ZXJ0aWNhbCkgKyBfcHg7XG4gICAgc3BhY2VyU3R5bGVbX3BhZGRpbmddID0gcGluU3R5bGVbX21hcmdpbl0gPSBwaW5TdHlsZVtfdG9wXSA9IHBpblN0eWxlW19sZWZ0XSA9IFwiMFwiO1xuXG4gICAgX3NldFN0YXRlKHNwYWNlclN0YXRlKTtcblxuICAgIHBpblN0eWxlW193aWR0aF0gPSBwaW5TdHlsZVtcIm1heFwiICsgX1dpZHRoXSA9IGNzW193aWR0aF07XG4gICAgcGluU3R5bGVbX2hlaWdodF0gPSBwaW5TdHlsZVtcIm1heFwiICsgX0hlaWdodF0gPSBjc1tfaGVpZ2h0XTtcbiAgICBwaW5TdHlsZVtfcGFkZGluZ10gPSBjc1tfcGFkZGluZ107XG5cbiAgICBpZiAocGluLnBhcmVudE5vZGUgIT09IHNwYWNlcikge1xuICAgICAgcGluLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHNwYWNlciwgcGluKTtcbiAgICAgIHNwYWNlci5hcHBlbmRDaGlsZChwaW4pO1xuICAgIH1cblxuICAgIHBpbi5fZ3NhcC5zd2FwcGVkSW4gPSB0cnVlO1xuICB9XG59LFxuICAgIF9jYXBzRXhwID0gLyhbQS1aXSkvZyxcbiAgICBfc2V0U3RhdGUgPSBmdW5jdGlvbiBfc2V0U3RhdGUoc3RhdGUpIHtcbiAgaWYgKHN0YXRlKSB7XG4gICAgdmFyIHN0eWxlID0gc3RhdGUudC5zdHlsZSxcbiAgICAgICAgbCA9IHN0YXRlLmxlbmd0aCxcbiAgICAgICAgaSA9IDAsXG4gICAgICAgIHAsXG4gICAgICAgIHZhbHVlO1xuICAgIChzdGF0ZS50Ll9nc2FwIHx8IGdzYXAuY29yZS5nZXRDYWNoZShzdGF0ZS50KSkudW5jYWNoZSA9IDE7IC8vIG90aGVyd2lzZSB0cmFuc2Zvcm1zIG1heSBiZSBvZmZcblxuICAgIGZvciAoOyBpIDwgbDsgaSArPSAyKSB7XG4gICAgICB2YWx1ZSA9IHN0YXRlW2kgKyAxXTtcbiAgICAgIHAgPSBzdGF0ZVtpXTtcblxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHN0eWxlW3BdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlW3BdKSB7XG4gICAgICAgIHN0eWxlLnJlbW92ZVByb3BlcnR5KHAucmVwbGFjZShfY2Fwc0V4cCwgXCItJDFcIikudG9Mb3dlckNhc2UoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59LFxuICAgIF9nZXRTdGF0ZSA9IGZ1bmN0aW9uIF9nZXRTdGF0ZShlbGVtZW50KSB7XG4gIC8vIHJldHVybnMgYW4gQXJyYXkgd2l0aCBhbHRlcm5hdGluZyB2YWx1ZXMgbGlrZSBbcHJvcGVydHksIHZhbHVlLCBwcm9wZXJ0eSwgdmFsdWVdIGFuZCBhIFwidFwiIHByb3BlcnR5IHBvaW50aW5nIHRvIHRoZSB0YXJnZXQgKGVsZW1lbnQpLiBNYWtlcyBpdCBmYXN0IGFuZCBjaGVhcC5cbiAgdmFyIGwgPSBfc3RhdGVQcm9wcy5sZW5ndGgsXG4gICAgICBzdHlsZSA9IGVsZW1lbnQuc3R5bGUsXG4gICAgICBzdGF0ZSA9IFtdLFxuICAgICAgaSA9IDA7XG5cbiAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICBzdGF0ZS5wdXNoKF9zdGF0ZVByb3BzW2ldLCBzdHlsZVtfc3RhdGVQcm9wc1tpXV0pO1xuICB9XG5cbiAgc3RhdGUudCA9IGVsZW1lbnQ7XG4gIHJldHVybiBzdGF0ZTtcbn0sXG4gICAgX2NvcHlTdGF0ZSA9IGZ1bmN0aW9uIF9jb3B5U3RhdGUoc3RhdGUsIG92ZXJyaWRlLCBvbWl0T2Zmc2V0cykge1xuICB2YXIgcmVzdWx0ID0gW10sXG4gICAgICBsID0gc3RhdGUubGVuZ3RoLFxuICAgICAgaSA9IG9taXRPZmZzZXRzID8gOCA6IDAsXG4gICAgICAvLyBza2lwIHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSBpZiBvbWl0T2Zmc2V0cyBpcyB0cnVlXG4gIHA7XG5cbiAgZm9yICg7IGkgPCBsOyBpICs9IDIpIHtcbiAgICBwID0gc3RhdGVbaV07XG4gICAgcmVzdWx0LnB1c2gocCwgcCBpbiBvdmVycmlkZSA/IG92ZXJyaWRlW3BdIDogc3RhdGVbaSArIDFdKTtcbiAgfVxuXG4gIHJlc3VsdC50ID0gc3RhdGUudDtcbiAgcmV0dXJuIHJlc3VsdDtcbn0sXG4gICAgX3dpbk9mZnNldHMgPSB7XG4gIGxlZnQ6IDAsXG4gIHRvcDogMFxufSxcbiAgICAvLyAvLyBwb3RlbnRpYWwgZnV0dXJlIGZlYXR1cmUgKD8pIEFsbG93IHVzZXJzIHRvIGNhbGN1bGF0ZSB3aGVyZSBhIHRyaWdnZXIgaGl0cyAoc2Nyb2xsIHBvc2l0aW9uKSBsaWtlIGdldFNjcm9sbFBvc2l0aW9uKFwiI2lkXCIsIFwidG9wIGJvdHRvbVwiKVxuLy8gX2dldFNjcm9sbFBvc2l0aW9uID0gKHRyaWdnZXIsIHBvc2l0aW9uLCB7c2Nyb2xsZXIsIGNvbnRhaW5lckFuaW1hdGlvbiwgaG9yaXpvbnRhbH0pID0+IHtcbi8vIFx0c2Nyb2xsZXIgPSBfZ2V0VGFyZ2V0KHNjcm9sbGVyIHx8IF93aW4pO1xuLy8gXHRsZXQgZGlyZWN0aW9uID0gaG9yaXpvbnRhbCA/IF9ob3Jpem9udGFsIDogX3ZlcnRpY2FsLFxuLy8gXHRcdGlzVmlld3BvcnQgPSBfaXNWaWV3cG9ydChzY3JvbGxlcik7XG4vLyBcdF9nZXRTaXplRnVuYyhzY3JvbGxlciwgaXNWaWV3cG9ydCwgZGlyZWN0aW9uKTtcbi8vIFx0cmV0dXJuIF9wYXJzZVBvc2l0aW9uKHBvc2l0aW9uLCBfZ2V0VGFyZ2V0KHRyaWdnZXIpLCBfZ2V0U2l6ZUZ1bmMoc2Nyb2xsZXIsIGlzVmlld3BvcnQsIGRpcmVjdGlvbikoKSwgZGlyZWN0aW9uLCBfZ2V0U2Nyb2xsRnVuYyhzY3JvbGxlciwgZGlyZWN0aW9uKSgpLCAwLCAwLCAwLCBfZ2V0T2Zmc2V0c0Z1bmMoc2Nyb2xsZXIsIGlzVmlld3BvcnQpKCksIGlzVmlld3BvcnQgPyAwIDogcGFyc2VGbG9hdChfZ2V0Q29tcHV0ZWRTdHlsZShzY3JvbGxlcilbXCJib3JkZXJcIiArIGRpcmVjdGlvbi5wMiArIF9XaWR0aF0pIHx8IDAsIDAsIGNvbnRhaW5lckFuaW1hdGlvbiA/IGNvbnRhaW5lckFuaW1hdGlvbi5kdXJhdGlvbigpIDogX21heFNjcm9sbChzY3JvbGxlciksIGNvbnRhaW5lckFuaW1hdGlvbik7XG4vLyB9LFxuX3BhcnNlUG9zaXRpb24gPSBmdW5jdGlvbiBfcGFyc2VQb3NpdGlvbih2YWx1ZSwgdHJpZ2dlciwgc2Nyb2xsZXJTaXplLCBkaXJlY3Rpb24sIHNjcm9sbCwgbWFya2VyLCBtYXJrZXJTY3JvbGxlciwgc2VsZiwgc2Nyb2xsZXJCb3VuZHMsIGJvcmRlcldpZHRoLCB1c2VGaXhlZFBvc2l0aW9uLCBzY3JvbGxlck1heCwgY29udGFpbmVyQW5pbWF0aW9uLCBjbGFtcFplcm9Qcm9wKSB7XG4gIF9pc0Z1bmN0aW9uKHZhbHVlKSAmJiAodmFsdWUgPSB2YWx1ZShzZWxmKSk7XG5cbiAgaWYgKF9pc1N0cmluZyh2YWx1ZSkgJiYgdmFsdWUuc3Vic3RyKDAsIDMpID09PSBcIm1heFwiKSB7XG4gICAgdmFsdWUgPSBzY3JvbGxlck1heCArICh2YWx1ZS5jaGFyQXQoNCkgPT09IFwiPVwiID8gX29mZnNldFRvUHgoXCIwXCIgKyB2YWx1ZS5zdWJzdHIoMyksIHNjcm9sbGVyU2l6ZSkgOiAwKTtcbiAgfVxuXG4gIHZhciB0aW1lID0gY29udGFpbmVyQW5pbWF0aW9uID8gY29udGFpbmVyQW5pbWF0aW9uLnRpbWUoKSA6IDAsXG4gICAgICBwMSxcbiAgICAgIHAyLFxuICAgICAgZWxlbWVudDtcbiAgY29udGFpbmVyQW5pbWF0aW9uICYmIGNvbnRhaW5lckFuaW1hdGlvbi5zZWVrKDApO1xuICBpc05hTih2YWx1ZSkgfHwgKHZhbHVlID0gK3ZhbHVlKTsgLy8gY29udmVydCBhIHN0cmluZyBudW1iZXIgbGlrZSBcIjQ1XCIgdG8gYW4gYWN0dWFsIG51bWJlclxuXG4gIGlmICghX2lzTnVtYmVyKHZhbHVlKSkge1xuICAgIF9pc0Z1bmN0aW9uKHRyaWdnZXIpICYmICh0cmlnZ2VyID0gdHJpZ2dlcihzZWxmKSk7XG4gICAgdmFyIG9mZnNldHMgPSAodmFsdWUgfHwgXCIwXCIpLnNwbGl0KFwiIFwiKSxcbiAgICAgICAgYm91bmRzLFxuICAgICAgICBsb2NhbE9mZnNldCxcbiAgICAgICAgZ2xvYmFsT2Zmc2V0LFxuICAgICAgICBkaXNwbGF5O1xuICAgIGVsZW1lbnQgPSBfZ2V0VGFyZ2V0KHRyaWdnZXIsIHNlbGYpIHx8IF9ib2R5O1xuICAgIGJvdW5kcyA9IF9nZXRCb3VuZHMoZWxlbWVudCkgfHwge307XG5cbiAgICBpZiAoKCFib3VuZHMgfHwgIWJvdW5kcy5sZWZ0ICYmICFib3VuZHMudG9wKSAmJiBfZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5kaXNwbGF5ID09PSBcIm5vbmVcIikge1xuICAgICAgLy8gaWYgZGlzcGxheSBpcyBcIm5vbmVcIiwgaXQgd29uJ3QgcmVwb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIHByb3Blcmx5XG4gICAgICBkaXNwbGF5ID0gZWxlbWVudC5zdHlsZS5kaXNwbGF5O1xuICAgICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgYm91bmRzID0gX2dldEJvdW5kcyhlbGVtZW50KTtcbiAgICAgIGRpc3BsYXkgPyBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBkaXNwbGF5IDogZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcImRpc3BsYXlcIik7XG4gICAgfVxuXG4gICAgbG9jYWxPZmZzZXQgPSBfb2Zmc2V0VG9QeChvZmZzZXRzWzBdLCBib3VuZHNbZGlyZWN0aW9uLmRdKTtcbiAgICBnbG9iYWxPZmZzZXQgPSBfb2Zmc2V0VG9QeChvZmZzZXRzWzFdIHx8IFwiMFwiLCBzY3JvbGxlclNpemUpO1xuICAgIHZhbHVlID0gYm91bmRzW2RpcmVjdGlvbi5wXSAtIHNjcm9sbGVyQm91bmRzW2RpcmVjdGlvbi5wXSAtIGJvcmRlcldpZHRoICsgbG9jYWxPZmZzZXQgKyBzY3JvbGwgLSBnbG9iYWxPZmZzZXQ7XG4gICAgbWFya2VyU2Nyb2xsZXIgJiYgX3Bvc2l0aW9uTWFya2VyKG1hcmtlclNjcm9sbGVyLCBnbG9iYWxPZmZzZXQsIGRpcmVjdGlvbiwgc2Nyb2xsZXJTaXplIC0gZ2xvYmFsT2Zmc2V0IDwgMjAgfHwgbWFya2VyU2Nyb2xsZXIuX2lzU3RhcnQgJiYgZ2xvYmFsT2Zmc2V0ID4gMjApO1xuICAgIHNjcm9sbGVyU2l6ZSAtPSBzY3JvbGxlclNpemUgLSBnbG9iYWxPZmZzZXQ7IC8vIGFkanVzdCBmb3IgdGhlIG1hcmtlclxuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lckFuaW1hdGlvbiAmJiAodmFsdWUgPSBnc2FwLnV0aWxzLm1hcFJhbmdlKGNvbnRhaW5lckFuaW1hdGlvbi5zY3JvbGxUcmlnZ2VyLnN0YXJ0LCBjb250YWluZXJBbmltYXRpb24uc2Nyb2xsVHJpZ2dlci5lbmQsIDAsIHNjcm9sbGVyTWF4LCB2YWx1ZSkpO1xuICAgIG1hcmtlclNjcm9sbGVyICYmIF9wb3NpdGlvbk1hcmtlcihtYXJrZXJTY3JvbGxlciwgc2Nyb2xsZXJTaXplLCBkaXJlY3Rpb24sIHRydWUpO1xuICB9XG5cbiAgaWYgKGNsYW1wWmVyb1Byb3ApIHtcbiAgICBzZWxmW2NsYW1wWmVyb1Byb3BdID0gdmFsdWUgfHwgLTAuMDAxO1xuICAgIHZhbHVlIDwgMCAmJiAodmFsdWUgPSAwKTtcbiAgfVxuXG4gIGlmIChtYXJrZXIpIHtcbiAgICB2YXIgcG9zaXRpb24gPSB2YWx1ZSArIHNjcm9sbGVyU2l6ZSxcbiAgICAgICAgaXNTdGFydCA9IG1hcmtlci5faXNTdGFydDtcbiAgICBwMSA9IFwic2Nyb2xsXCIgKyBkaXJlY3Rpb24uZDI7XG5cbiAgICBfcG9zaXRpb25NYXJrZXIobWFya2VyLCBwb3NpdGlvbiwgZGlyZWN0aW9uLCBpc1N0YXJ0ICYmIHBvc2l0aW9uID4gMjAgfHwgIWlzU3RhcnQgJiYgKHVzZUZpeGVkUG9zaXRpb24gPyBNYXRoLm1heChfYm9keVtwMV0sIF9kb2NFbFtwMV0pIDogbWFya2VyLnBhcmVudE5vZGVbcDFdKSA8PSBwb3NpdGlvbiArIDEpO1xuXG4gICAgaWYgKHVzZUZpeGVkUG9zaXRpb24pIHtcbiAgICAgIHNjcm9sbGVyQm91bmRzID0gX2dldEJvdW5kcyhtYXJrZXJTY3JvbGxlcik7XG4gICAgICB1c2VGaXhlZFBvc2l0aW9uICYmIChtYXJrZXIuc3R5bGVbZGlyZWN0aW9uLm9wLnBdID0gc2Nyb2xsZXJCb3VuZHNbZGlyZWN0aW9uLm9wLnBdIC0gZGlyZWN0aW9uLm9wLm0gLSBtYXJrZXIuX29mZnNldCArIF9weCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbnRhaW5lckFuaW1hdGlvbiAmJiBlbGVtZW50KSB7XG4gICAgcDEgPSBfZ2V0Qm91bmRzKGVsZW1lbnQpO1xuICAgIGNvbnRhaW5lckFuaW1hdGlvbi5zZWVrKHNjcm9sbGVyTWF4KTtcbiAgICBwMiA9IF9nZXRCb3VuZHMoZWxlbWVudCk7XG4gICAgY29udGFpbmVyQW5pbWF0aW9uLl9jYVNjcm9sbERpc3QgPSBwMVtkaXJlY3Rpb24ucF0gLSBwMltkaXJlY3Rpb24ucF07XG4gICAgdmFsdWUgPSB2YWx1ZSAvIGNvbnRhaW5lckFuaW1hdGlvbi5fY2FTY3JvbGxEaXN0ICogc2Nyb2xsZXJNYXg7XG4gIH1cblxuICBjb250YWluZXJBbmltYXRpb24gJiYgY29udGFpbmVyQW5pbWF0aW9uLnNlZWsodGltZSk7XG4gIHJldHVybiBjb250YWluZXJBbmltYXRpb24gPyB2YWx1ZSA6IE1hdGgucm91bmQodmFsdWUpO1xufSxcbiAgICBfcHJlZml4RXhwID0gLyh3ZWJraXR8bW96fGxlbmd0aHxjc3NUZXh0fGluc2V0KS9pLFxuICAgIF9yZXBhcmVudCA9IGZ1bmN0aW9uIF9yZXBhcmVudChlbGVtZW50LCBwYXJlbnQsIHRvcCwgbGVmdCkge1xuICBpZiAoZWxlbWVudC5wYXJlbnROb2RlICE9PSBwYXJlbnQpIHtcbiAgICB2YXIgc3R5bGUgPSBlbGVtZW50LnN0eWxlLFxuICAgICAgICBwLFxuICAgICAgICBjcztcblxuICAgIGlmIChwYXJlbnQgPT09IF9ib2R5KSB7XG4gICAgICBlbGVtZW50Ll9zdE9yaWcgPSBzdHlsZS5jc3NUZXh0OyAvLyByZWNvcmQgb3JpZ2luYWwgaW5saW5lIHN0eWxlcyBzbyB3ZSBjYW4gcmV2ZXJ0IHRoZW0gbGF0ZXJcblxuICAgICAgY3MgPSBfZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgICAgZm9yIChwIGluIGNzKSB7XG4gICAgICAgIC8vIG11c3QgY29weSBhbGwgcmVsZXZhbnQgc3R5bGVzIHRvIGVuc3VyZSB0aGF0IG5vdGhpbmcgY2hhbmdlcyB2aXN1YWxseSB3aGVuIHdlIHJlcGFyZW50IHRvIHRoZSA8Ym9keT4uIFNraXAgdGhlIHZlbmRvciBwcmVmaXhlZCBvbmVzLlxuICAgICAgICBpZiAoIStwICYmICFfcHJlZml4RXhwLnRlc3QocCkgJiYgY3NbcF0gJiYgdHlwZW9mIHN0eWxlW3BdID09PSBcInN0cmluZ1wiICYmIHAgIT09IFwiMFwiKSB7XG4gICAgICAgICAgc3R5bGVbcF0gPSBjc1twXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdHlsZS50b3AgPSB0b3A7XG4gICAgICBzdHlsZS5sZWZ0ID0gbGVmdDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGUuY3NzVGV4dCA9IGVsZW1lbnQuX3N0T3JpZztcbiAgICB9XG5cbiAgICBnc2FwLmNvcmUuZ2V0Q2FjaGUoZWxlbWVudCkudW5jYWNoZSA9IDE7XG4gICAgcGFyZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICB9XG59LFxuICAgIF9pbnRlcnJ1cHRpb25UcmFja2VyID0gZnVuY3Rpb24gX2ludGVycnVwdGlvblRyYWNrZXIoZ2V0VmFsdWVGdW5jLCBpbml0aWFsVmFsdWUsIG9uSW50ZXJydXB0KSB7XG4gIHZhciBsYXN0MSA9IGluaXRpYWxWYWx1ZSxcbiAgICAgIGxhc3QyID0gbGFzdDE7XG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB2YXIgY3VycmVudCA9IE1hdGgucm91bmQoZ2V0VmFsdWVGdW5jKCkpOyAvLyByb3VuZCBiZWNhdXNlIGluIHNvbWUgW3ZlcnkgdW5jb21tb25dIFdpbmRvd3MgZW52aXJvbm1lbnRzLCBzY3JvbGwgY2FuIGdldCByZXBvcnRlZCB3aXRoIGRlY2ltYWxzIGV2ZW4gdGhvdWdoIGl0IHdhcyBzZXQgd2l0aG91dC5cblxuICAgIGlmIChjdXJyZW50ICE9PSBsYXN0MSAmJiBjdXJyZW50ICE9PSBsYXN0MiAmJiBNYXRoLmFicyhjdXJyZW50IC0gbGFzdDEpID4gMyAmJiBNYXRoLmFicyhjdXJyZW50IC0gbGFzdDIpID4gMykge1xuICAgICAgLy8gaWYgdGhlIHVzZXIgc2Nyb2xscywga2lsbCB0aGUgdHdlZW4uIGlPUyBTYWZhcmkgaW50ZXJtaXR0ZW50bHkgbWlzcmVwb3J0cyB0aGUgc2Nyb2xsIHBvc2l0aW9uLCBpdCBtYXkgYmUgdGhlIG1vc3QgcmVjZW50bHktc2V0IG9uZSBvciB0aGUgb25lIGJlZm9yZSB0aGF0ISBXaGVuIFNhZmFyaSBpcyB6b29tZWQgKENNRC0rKSwgaXQgb2Z0ZW4gbWlzcmVwb3J0cyBhcyAxIHBpeGVsIG9mZiB0b28hIFNvIGlmIHdlIHNldCB0aGUgc2Nyb2xsIHBvc2l0aW9uIHRvIDEyNSwgZm9yIGV4YW1wbGUsIGl0J2xsIGFjdHVhbGx5IHJlcG9ydCBpdCBhcyAxMjQuXG4gICAgICB2YWx1ZSA9IGN1cnJlbnQ7XG4gICAgICBvbkludGVycnVwdCAmJiBvbkludGVycnVwdCgpO1xuICAgIH1cblxuICAgIGxhc3QyID0gbGFzdDE7XG4gICAgbGFzdDEgPSBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgICByZXR1cm4gbGFzdDE7XG4gIH07XG59LFxuICAgIF9zaGlmdE1hcmtlciA9IGZ1bmN0aW9uIF9zaGlmdE1hcmtlcihtYXJrZXIsIGRpcmVjdGlvbiwgdmFsdWUpIHtcbiAgdmFyIHZhcnMgPSB7fTtcbiAgdmFyc1tkaXJlY3Rpb24ucF0gPSBcIis9XCIgKyB2YWx1ZTtcbiAgZ3NhcC5zZXQobWFya2VyLCB2YXJzKTtcbn0sXG4gICAgLy8gX21lcmdlQW5pbWF0aW9ucyA9IGFuaW1hdGlvbnMgPT4ge1xuLy8gXHRsZXQgdGwgPSBnc2FwLnRpbWVsaW5lKHtzbW9vdGhDaGlsZFRpbWluZzogdHJ1ZX0pLnN0YXJ0VGltZShNYXRoLm1pbiguLi5hbmltYXRpb25zLm1hcChhID0+IGEuZ2xvYmFsVGltZSgwKSkpKTtcbi8vIFx0YW5pbWF0aW9ucy5mb3JFYWNoKGEgPT4ge2xldCB0aW1lID0gYS50b3RhbFRpbWUoKTsgdGwuYWRkKGEpOyBhLnRvdGFsVGltZSh0aW1lKTsgfSk7XG4vLyBcdHRsLnNtb290aENoaWxkVGltaW5nID0gZmFsc2U7XG4vLyBcdHJldHVybiB0bDtcbi8vIH0sXG4vLyByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byB0d2VlbiB0aGUgc2Nyb2xsIHBvc2l0aW9uIGluIHRoZSBkaXJlY3Rpb24gcHJvdmlkZWQsIGFuZCB3aGVuIGRvaW5nIHNvIGl0J2xsIGFkZCBhIC50d2VlbiBwcm9wZXJ0eSB0byB0aGUgRlVOQ1RJT04gaXRzZWxmLCBhbmQgcmVtb3ZlIGl0IHdoZW4gdGhlIHR3ZWVuIGNvbXBsZXRlcyBvciBnZXRzIGtpbGxlZC4gVGhpcyBnaXZlcyB1cyBhIHdheSB0byBoYXZlIG11bHRpcGxlIFNjcm9sbFRyaWdnZXJzIHVzZSBhIGNlbnRyYWwgZnVuY3Rpb24gZm9yIGFueSBnaXZlbiBzY3JvbGxlciBhbmQgc2VlIGlmIHRoZXJlJ3MgYSBzY3JvbGwgdHdlZW4gcnVubmluZyAod2hpY2ggd291bGQgYWZmZWN0IGlmL2hvdyB0aGluZ3MgZ2V0IHVwZGF0ZWQpXG5fZ2V0VHdlZW5DcmVhdG9yID0gZnVuY3Rpb24gX2dldFR3ZWVuQ3JlYXRvcihzY3JvbGxlciwgZGlyZWN0aW9uKSB7XG4gIHZhciBnZXRTY3JvbGwgPSBfZ2V0U2Nyb2xsRnVuYyhzY3JvbGxlciwgZGlyZWN0aW9uKSxcbiAgICAgIHByb3AgPSBcIl9zY3JvbGxcIiArIGRpcmVjdGlvbi5wMixcbiAgICAgIC8vIGFkZCBhIHR3ZWVuYWJsZSBwcm9wZXJ0eSB0byB0aGUgc2Nyb2xsZXIgdGhhdCdzIGEgZ2V0dGVyL3NldHRlciBmdW5jdGlvbiwgbGlrZSBfc2Nyb2xsVG9wIG9yIF9zY3JvbGxMZWZ0LiBUaGlzIHdheSwgaWYgc29tZW9uZSBkb2VzIGdzYXAua2lsbFR3ZWVuc09mKHNjcm9sbGVyKSBpdCdsbCBraWxsIHRoZSBzY3JvbGwgdHdlZW4uXG4gIGdldFR3ZWVuID0gZnVuY3Rpb24gZ2V0VHdlZW4oc2Nyb2xsVG8sIHZhcnMsIGluaXRpYWxWYWx1ZSwgY2hhbmdlMSwgY2hhbmdlMikge1xuICAgIHZhciB0d2VlbiA9IGdldFR3ZWVuLnR3ZWVuLFxuICAgICAgICBvbkNvbXBsZXRlID0gdmFycy5vbkNvbXBsZXRlLFxuICAgICAgICBtb2RpZmllcnMgPSB7fTtcbiAgICBpbml0aWFsVmFsdWUgPSBpbml0aWFsVmFsdWUgfHwgZ2V0U2Nyb2xsKCk7XG5cbiAgICB2YXIgY2hlY2tGb3JJbnRlcnJ1cHRpb24gPSBfaW50ZXJydXB0aW9uVHJhY2tlcihnZXRTY3JvbGwsIGluaXRpYWxWYWx1ZSwgZnVuY3Rpb24gKCkge1xuICAgICAgdHdlZW4ua2lsbCgpO1xuICAgICAgZ2V0VHdlZW4udHdlZW4gPSAwO1xuICAgIH0pO1xuXG4gICAgY2hhbmdlMiA9IGNoYW5nZTEgJiYgY2hhbmdlMiB8fCAwOyAvLyBpZiBjaGFuZ2UxIGlzIDAsIHdlIHNldCB0aGF0IHRvIHRoZSBkaWZmZXJlbmNlIGFuZCBpZ25vcmUgY2hhbmdlMi4gT3RoZXJ3aXNlLCB0aGVyZSB3b3VsZCBiZSBhIGNvbXBvdW5kIGVmZmVjdC5cblxuICAgIGNoYW5nZTEgPSBjaGFuZ2UxIHx8IHNjcm9sbFRvIC0gaW5pdGlhbFZhbHVlO1xuICAgIHR3ZWVuICYmIHR3ZWVuLmtpbGwoKTtcbiAgICB2YXJzW3Byb3BdID0gc2Nyb2xsVG87XG4gICAgdmFycy5pbmhlcml0ID0gZmFsc2U7XG4gICAgdmFycy5tb2RpZmllcnMgPSBtb2RpZmllcnM7XG5cbiAgICBtb2RpZmllcnNbcHJvcF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gY2hlY2tGb3JJbnRlcnJ1cHRpb24oaW5pdGlhbFZhbHVlICsgY2hhbmdlMSAqIHR3ZWVuLnJhdGlvICsgY2hhbmdlMiAqIHR3ZWVuLnJhdGlvICogdHdlZW4ucmF0aW8pO1xuICAgIH07XG5cbiAgICB2YXJzLm9uVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgX3Njcm9sbGVycy5jYWNoZSsrO1xuICAgICAgZ2V0VHdlZW4udHdlZW4gJiYgX3VwZGF0ZUFsbCgpOyAvLyBpZiBpdCB3YXMgaW50ZXJydXB0ZWQva2lsbGVkLCBsaWtlIGluIGEgY29udGV4dC5yZXZlcnQoKSwgZG9uJ3QgZm9yY2UgYW4gdXBkYXRlQWxsKClcbiAgICB9O1xuXG4gICAgdmFycy5vbkNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgZ2V0VHdlZW4udHdlZW4gPSAwO1xuICAgICAgb25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlLmNhbGwodHdlZW4pO1xuICAgIH07XG5cbiAgICB0d2VlbiA9IGdldFR3ZWVuLnR3ZWVuID0gZ3NhcC50byhzY3JvbGxlciwgdmFycyk7XG4gICAgcmV0dXJuIHR3ZWVuO1xuICB9O1xuXG4gIHNjcm9sbGVyW3Byb3BdID0gZ2V0U2Nyb2xsO1xuXG4gIGdldFNjcm9sbC53aGVlbEhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldFR3ZWVuLnR3ZWVuICYmIGdldFR3ZWVuLnR3ZWVuLmtpbGwoKSAmJiAoZ2V0VHdlZW4udHdlZW4gPSAwKTtcbiAgfTtcblxuICBfYWRkTGlzdGVuZXIoc2Nyb2xsZXIsIFwid2hlZWxcIiwgZ2V0U2Nyb2xsLndoZWVsSGFuZGxlcik7IC8vIFdpbmRvd3MgbWFjaGluZXMgaGFuZGxlIG1vdXNld2hlZWwgc2Nyb2xsaW5nIGluIGNodW5rcyAobGlrZSBcIjMgbGluZXMgcGVyIHNjcm9sbFwiKSBtZWFuaW5nIHRoZSB0eXBpY2FsIHN0cmF0ZWd5IGZvciBjYW5jZWxsaW5nIHRoZSBzY3JvbGwgaXNuJ3QgYXMgc2Vuc2l0aXZlLiBJdCdzIG11Y2ggbW9yZSBsaWtlbHkgdG8gbWF0Y2ggb25lIG9mIHRoZSBwcmV2aW91cyAyIHNjcm9sbCBldmVudCBwb3NpdGlvbnMuIFNvIHdlIGtpbGwgYW55IHNuYXBwaW5nIGFzIHNvb24gYXMgdGhlcmUncyBhIHdoZWVsIGV2ZW50LlxuXG5cbiAgU2Nyb2xsVHJpZ2dlci5pc1RvdWNoICYmIF9hZGRMaXN0ZW5lcihzY3JvbGxlciwgXCJ0b3VjaG1vdmVcIiwgZ2V0U2Nyb2xsLndoZWVsSGFuZGxlcik7XG4gIHJldHVybiBnZXRUd2Vlbjtcbn07XG5cbmV4cG9ydCB2YXIgU2Nyb2xsVHJpZ2dlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFNjcm9sbFRyaWdnZXIodmFycywgYW5pbWF0aW9uKSB7XG4gICAgX2NvcmVJbml0dGVkIHx8IFNjcm9sbFRyaWdnZXIucmVnaXN0ZXIoZ3NhcCkgfHwgY29uc29sZS53YXJuKFwiUGxlYXNlIGdzYXAucmVnaXN0ZXJQbHVnaW4oU2Nyb2xsVHJpZ2dlcilcIik7XG5cbiAgICBfY29udGV4dCh0aGlzKTtcblxuICAgIHRoaXMuaW5pdCh2YXJzLCBhbmltYXRpb24pO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFNjcm9sbFRyaWdnZXIucHJvdG90eXBlO1xuXG4gIF9wcm90by5pbml0ID0gZnVuY3Rpb24gaW5pdCh2YXJzLCBhbmltYXRpb24pIHtcbiAgICB0aGlzLnByb2dyZXNzID0gdGhpcy5zdGFydCA9IDA7XG4gICAgdGhpcy52YXJzICYmIHRoaXMua2lsbCh0cnVlLCB0cnVlKTsgLy8gaW4gY2FzZSBpdCdzIGJlaW5nIGluaXR0ZWQgYWdhaW5cblxuICAgIGlmICghX2VuYWJsZWQpIHtcbiAgICAgIHRoaXMudXBkYXRlID0gdGhpcy5yZWZyZXNoID0gdGhpcy5raWxsID0gX3Bhc3NUaHJvdWdoO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhcnMgPSBfc2V0RGVmYXVsdHMoX2lzU3RyaW5nKHZhcnMpIHx8IF9pc051bWJlcih2YXJzKSB8fCB2YXJzLm5vZGVUeXBlID8ge1xuICAgICAgdHJpZ2dlcjogdmFyc1xuICAgIH0gOiB2YXJzLCBfZGVmYXVsdHMpO1xuXG4gICAgdmFyIF92YXJzID0gdmFycyxcbiAgICAgICAgb25VcGRhdGUgPSBfdmFycy5vblVwZGF0ZSxcbiAgICAgICAgdG9nZ2xlQ2xhc3MgPSBfdmFycy50b2dnbGVDbGFzcyxcbiAgICAgICAgaWQgPSBfdmFycy5pZCxcbiAgICAgICAgb25Ub2dnbGUgPSBfdmFycy5vblRvZ2dsZSxcbiAgICAgICAgb25SZWZyZXNoID0gX3ZhcnMub25SZWZyZXNoLFxuICAgICAgICBzY3J1YiA9IF92YXJzLnNjcnViLFxuICAgICAgICB0cmlnZ2VyID0gX3ZhcnMudHJpZ2dlcixcbiAgICAgICAgcGluID0gX3ZhcnMucGluLFxuICAgICAgICBwaW5TcGFjaW5nID0gX3ZhcnMucGluU3BhY2luZyxcbiAgICAgICAgaW52YWxpZGF0ZU9uUmVmcmVzaCA9IF92YXJzLmludmFsaWRhdGVPblJlZnJlc2gsXG4gICAgICAgIGFudGljaXBhdGVQaW4gPSBfdmFycy5hbnRpY2lwYXRlUGluLFxuICAgICAgICBvblNjcnViQ29tcGxldGUgPSBfdmFycy5vblNjcnViQ29tcGxldGUsXG4gICAgICAgIG9uU25hcENvbXBsZXRlID0gX3ZhcnMub25TbmFwQ29tcGxldGUsXG4gICAgICAgIG9uY2UgPSBfdmFycy5vbmNlLFxuICAgICAgICBzbmFwID0gX3ZhcnMuc25hcCxcbiAgICAgICAgcGluUmVwYXJlbnQgPSBfdmFycy5waW5SZXBhcmVudCxcbiAgICAgICAgcGluU3BhY2VyID0gX3ZhcnMucGluU3BhY2VyLFxuICAgICAgICBjb250YWluZXJBbmltYXRpb24gPSBfdmFycy5jb250YWluZXJBbmltYXRpb24sXG4gICAgICAgIGZhc3RTY3JvbGxFbmQgPSBfdmFycy5mYXN0U2Nyb2xsRW5kLFxuICAgICAgICBwcmV2ZW50T3ZlcmxhcHMgPSBfdmFycy5wcmV2ZW50T3ZlcmxhcHMsXG4gICAgICAgIGRpcmVjdGlvbiA9IHZhcnMuaG9yaXpvbnRhbCB8fCB2YXJzLmNvbnRhaW5lckFuaW1hdGlvbiAmJiB2YXJzLmhvcml6b250YWwgIT09IGZhbHNlID8gX2hvcml6b250YWwgOiBfdmVydGljYWwsXG4gICAgICAgIGlzVG9nZ2xlID0gIXNjcnViICYmIHNjcnViICE9PSAwLFxuICAgICAgICBzY3JvbGxlciA9IF9nZXRUYXJnZXQodmFycy5zY3JvbGxlciB8fCBfd2luKSxcbiAgICAgICAgc2Nyb2xsZXJDYWNoZSA9IGdzYXAuY29yZS5nZXRDYWNoZShzY3JvbGxlciksXG4gICAgICAgIGlzVmlld3BvcnQgPSBfaXNWaWV3cG9ydChzY3JvbGxlciksXG4gICAgICAgIHVzZUZpeGVkUG9zaXRpb24gPSAoXCJwaW5UeXBlXCIgaW4gdmFycyA/IHZhcnMucGluVHlwZSA6IF9nZXRQcm94eVByb3Aoc2Nyb2xsZXIsIFwicGluVHlwZVwiKSB8fCBpc1ZpZXdwb3J0ICYmIFwiZml4ZWRcIikgPT09IFwiZml4ZWRcIixcbiAgICAgICAgY2FsbGJhY2tzID0gW3ZhcnMub25FbnRlciwgdmFycy5vbkxlYXZlLCB2YXJzLm9uRW50ZXJCYWNrLCB2YXJzLm9uTGVhdmVCYWNrXSxcbiAgICAgICAgdG9nZ2xlQWN0aW9ucyA9IGlzVG9nZ2xlICYmIHZhcnMudG9nZ2xlQWN0aW9ucy5zcGxpdChcIiBcIiksXG4gICAgICAgIG1hcmtlcnMgPSBcIm1hcmtlcnNcIiBpbiB2YXJzID8gdmFycy5tYXJrZXJzIDogX2RlZmF1bHRzLm1hcmtlcnMsXG4gICAgICAgIGJvcmRlcldpZHRoID0gaXNWaWV3cG9ydCA/IDAgOiBwYXJzZUZsb2F0KF9nZXRDb21wdXRlZFN0eWxlKHNjcm9sbGVyKVtcImJvcmRlclwiICsgZGlyZWN0aW9uLnAyICsgX1dpZHRoXSkgfHwgMCxcbiAgICAgICAgc2VsZiA9IHRoaXMsXG4gICAgICAgIG9uUmVmcmVzaEluaXQgPSB2YXJzLm9uUmVmcmVzaEluaXQgJiYgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHZhcnMub25SZWZyZXNoSW5pdChzZWxmKTtcbiAgICB9LFxuICAgICAgICBnZXRTY3JvbGxlclNpemUgPSBfZ2V0U2l6ZUZ1bmMoc2Nyb2xsZXIsIGlzVmlld3BvcnQsIGRpcmVjdGlvbiksXG4gICAgICAgIGdldFNjcm9sbGVyT2Zmc2V0cyA9IF9nZXRPZmZzZXRzRnVuYyhzY3JvbGxlciwgaXNWaWV3cG9ydCksXG4gICAgICAgIGxhc3RTbmFwID0gMCxcbiAgICAgICAgbGFzdFJlZnJlc2ggPSAwLFxuICAgICAgICBwcmV2UHJvZ3Jlc3MgPSAwLFxuICAgICAgICBzY3JvbGxGdW5jID0gX2dldFNjcm9sbEZ1bmMoc2Nyb2xsZXIsIGRpcmVjdGlvbiksXG4gICAgICAgIHR3ZWVuVG8sXG4gICAgICAgIHBpbkNhY2hlLFxuICAgICAgICBzbmFwRnVuYyxcbiAgICAgICAgc2Nyb2xsMSxcbiAgICAgICAgc2Nyb2xsMixcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIGVuZCxcbiAgICAgICAgbWFya2VyU3RhcnQsXG4gICAgICAgIG1hcmtlckVuZCxcbiAgICAgICAgbWFya2VyU3RhcnRUcmlnZ2VyLFxuICAgICAgICBtYXJrZXJFbmRUcmlnZ2VyLFxuICAgICAgICBtYXJrZXJWYXJzLFxuICAgICAgICBleGVjdXRpbmdPblJlZnJlc2gsXG4gICAgICAgIGNoYW5nZSxcbiAgICAgICAgcGluT3JpZ2luYWxTdGF0ZSxcbiAgICAgICAgcGluQWN0aXZlU3RhdGUsXG4gICAgICAgIHBpblN0YXRlLFxuICAgICAgICBzcGFjZXIsXG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgcGluR2V0dGVyLFxuICAgICAgICBwaW5TZXR0ZXIsXG4gICAgICAgIHBpblN0YXJ0LFxuICAgICAgICBwaW5DaGFuZ2UsXG4gICAgICAgIHNwYWNpbmdTdGFydCxcbiAgICAgICAgc3BhY2VyU3RhdGUsXG4gICAgICAgIG1hcmtlclN0YXJ0U2V0dGVyLFxuICAgICAgICBwaW5Nb3ZlcyxcbiAgICAgICAgbWFya2VyRW5kU2V0dGVyLFxuICAgICAgICBjcyxcbiAgICAgICAgc25hcDEsXG4gICAgICAgIHNuYXAyLFxuICAgICAgICBzY3J1YlR3ZWVuLFxuICAgICAgICBzY3J1YlNtb290aCxcbiAgICAgICAgc25hcER1ckNsYW1wLFxuICAgICAgICBzbmFwRGVsYXllZENhbGwsXG4gICAgICAgIHByZXZTY3JvbGwsXG4gICAgICAgIHByZXZBbmltUHJvZ3Jlc3MsXG4gICAgICAgIGNhTWFya2VyU2V0dGVyLFxuICAgICAgICBjdXN0b21SZXZlcnRSZXR1cm47IC8vIGZvciB0aGUgc2FrZSBvZiBlZmZpY2llbmN5LCBfc3RhcnRDbGFtcC9fZW5kQ2xhbXAgc2VydmUgbGlrZSBhIHRydXRoeSB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgY2xhbXBpbmcgd2FzIGVuYWJsZWQgb24gdGhlIHN0YXJ0L2VuZCwgYW5kIEFMU08gc3RvcmUgdGhlIGFjdHVhbCBwcmUtY2xhbXBlZCBudW1lcmljIHZhbHVlLiBXZSB0YXAgaW50byB0aGF0IGluIFNjcm9sbFNtb290aGVyIGZvciBzcGVlZCBlZmZlY3RzLiBTbyBmb3IgZXhhbXBsZSwgaWYgc3RhcnQ9XCJjbGFtcCh0b3AgYm90dG9tKVwiIHJlc3VsdHMgaW4gYSBzdGFydCBvZiAtMTAwIG5hdHVyYWxseSwgaXQgd291bGQgZ2V0IGNsYW1wZWQgdG8gMCBidXQgLTEwMCB3b3VsZCBiZSBzdG9yZWQgaW4gX3N0YXJ0Q2xhbXAuXG5cblxuICAgIHNlbGYuX3N0YXJ0Q2xhbXAgPSBzZWxmLl9lbmRDbGFtcCA9IGZhbHNlO1xuICAgIHNlbGYuX2RpciA9IGRpcmVjdGlvbjtcbiAgICBhbnRpY2lwYXRlUGluICo9IDQ1O1xuICAgIHNlbGYuc2Nyb2xsZXIgPSBzY3JvbGxlcjtcbiAgICBzZWxmLnNjcm9sbCA9IGNvbnRhaW5lckFuaW1hdGlvbiA/IGNvbnRhaW5lckFuaW1hdGlvbi50aW1lLmJpbmQoY29udGFpbmVyQW5pbWF0aW9uKSA6IHNjcm9sbEZ1bmM7XG4gICAgc2Nyb2xsMSA9IHNjcm9sbEZ1bmMoKTtcbiAgICBzZWxmLnZhcnMgPSB2YXJzO1xuICAgIGFuaW1hdGlvbiA9IGFuaW1hdGlvbiB8fCB2YXJzLmFuaW1hdGlvbjtcblxuICAgIGlmIChcInJlZnJlc2hQcmlvcml0eVwiIGluIHZhcnMpIHtcbiAgICAgIF9zb3J0ID0gMTtcbiAgICAgIHZhcnMucmVmcmVzaFByaW9yaXR5ID09PSAtOTk5OSAmJiAoX3ByaW1hcnkgPSBzZWxmKTsgLy8gdXNlZCBieSBTY3JvbGxTbW9vdGhlclxuICAgIH1cblxuICAgIHNjcm9sbGVyQ2FjaGUudHdlZW5TY3JvbGwgPSBzY3JvbGxlckNhY2hlLnR3ZWVuU2Nyb2xsIHx8IHtcbiAgICAgIHRvcDogX2dldFR3ZWVuQ3JlYXRvcihzY3JvbGxlciwgX3ZlcnRpY2FsKSxcbiAgICAgIGxlZnQ6IF9nZXRUd2VlbkNyZWF0b3Ioc2Nyb2xsZXIsIF9ob3Jpem9udGFsKVxuICAgIH07XG4gICAgc2VsZi50d2VlblRvID0gdHdlZW5UbyA9IHNjcm9sbGVyQ2FjaGUudHdlZW5TY3JvbGxbZGlyZWN0aW9uLnBdO1xuXG4gICAgc2VsZi5zY3J1YkR1cmF0aW9uID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBzY3J1YlNtb290aCA9IF9pc051bWJlcih2YWx1ZSkgJiYgdmFsdWU7XG5cbiAgICAgIGlmICghc2NydWJTbW9vdGgpIHtcbiAgICAgICAgc2NydWJUd2VlbiAmJiBzY3J1YlR3ZWVuLnByb2dyZXNzKDEpLmtpbGwoKTtcbiAgICAgICAgc2NydWJUd2VlbiA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY3J1YlR3ZWVuID8gc2NydWJUd2Vlbi5kdXJhdGlvbih2YWx1ZSkgOiBzY3J1YlR3ZWVuID0gZ3NhcC50byhhbmltYXRpb24sIHtcbiAgICAgICAgICBlYXNlOiBcImV4cG9cIixcbiAgICAgICAgICB0b3RhbFByb2dyZXNzOiBcIis9MFwiLFxuICAgICAgICAgIGluaGVyaXQ6IGZhbHNlLFxuICAgICAgICAgIGR1cmF0aW9uOiBzY3J1YlNtb290aCxcbiAgICAgICAgICBwYXVzZWQ6IHRydWUsXG4gICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24gb25Db21wbGV0ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBvblNjcnViQ29tcGxldGUgJiYgb25TY3J1YkNvbXBsZXRlKHNlbGYpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChhbmltYXRpb24pIHtcbiAgICAgIGFuaW1hdGlvbi52YXJzLmxhenkgPSBmYWxzZTtcbiAgICAgIGFuaW1hdGlvbi5faW5pdHRlZCAmJiAhc2VsZi5pc1JldmVydGVkIHx8IGFuaW1hdGlvbi52YXJzLmltbWVkaWF0ZVJlbmRlciAhPT0gZmFsc2UgJiYgdmFycy5pbW1lZGlhdGVSZW5kZXIgIT09IGZhbHNlICYmIGFuaW1hdGlvbi5kdXJhdGlvbigpICYmIGFuaW1hdGlvbi5yZW5kZXIoMCwgdHJ1ZSwgdHJ1ZSk7IC8vIHNwZWNpYWwgY2FzZTogaWYgdGhpcyBTY3JvbGxUcmlnZ2VyIGdldHMgcmUtaW5pdHRlZCwgYSBmcm9tKCkgdHdlZW4gd2l0aCBhIHN0YWdnZXIgY291bGQgZ2V0IGluaXR0ZWQgaW5pdGlhbGx5IGFuZCB0aGVuIHJldmVydGVkIG9uIHRoZSByZS1pbml0IHdoaWNoIG1lYW5zIGl0J2xsIG5lZWQgdG8gZ2V0IHJlbmRlcmVkIGFnYWluIGhlcmUgdG8gcHJvcGVybHkgZGlzcGxheSB0aGluZ3MuIE90aGVyd2lzZSwgU2VlIGh0dHBzOi8vZ3NhcC5jb20vZm9ydW1zL3RvcGljLzM2Nzc3LXNjcm9sbHNtb290aGVyLXNwbGl0dGV4dC1uZXh0anMvIGFuZCBodHRwczovL2NvZGVwZW4uaW8vR3JlZW5Tb2NrL3Blbi9lWVB5UHBkP2VkaXRvcnM9MDAxMFxuXG4gICAgICBzZWxmLmFuaW1hdGlvbiA9IGFuaW1hdGlvbi5wYXVzZSgpO1xuICAgICAgYW5pbWF0aW9uLnNjcm9sbFRyaWdnZXIgPSBzZWxmO1xuICAgICAgc2VsZi5zY3J1YkR1cmF0aW9uKHNjcnViKTtcbiAgICAgIHNuYXAxID0gMDtcbiAgICAgIGlkIHx8IChpZCA9IGFuaW1hdGlvbi52YXJzLmlkKTtcbiAgICB9XG5cbiAgICBpZiAoc25hcCkge1xuICAgICAgLy8gVE9ETzogcG90ZW50aWFsIGlkZWE6IHVzZSBsZWdpdGltYXRlIENTUyBzY3JvbGwgc25hcHBpbmcgYnkgcHVzaGluZyBpbnZpc2libGUgZWxlbWVudHMgaW50byB0aGUgRE9NIHRoYXQgc2VydmUgYXMgc25hcCBwb3NpdGlvbnMsIGFuZCB0b2dnbGUgdGhlIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc3R5bGUuc2Nyb2xsU25hcFR5cGUgb25Ub2dnbGUuIFNlZSBodHRwczovL2NvZGVwZW4uaW8vR3JlZW5Tb2NrL3Blbi9KakxyZ1dNIGZvciBhIHF1aWNrIHByb29mIG9mIGNvbmNlcHQuXG4gICAgICBpZiAoIV9pc09iamVjdChzbmFwKSB8fCBzbmFwLnB1c2gpIHtcbiAgICAgICAgc25hcCA9IHtcbiAgICAgICAgICBzbmFwVG86IHNuYXBcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgXCJzY3JvbGxCZWhhdmlvclwiIGluIF9ib2R5LnN0eWxlICYmIGdzYXAuc2V0KGlzVmlld3BvcnQgPyBbX2JvZHksIF9kb2NFbF0gOiBzY3JvbGxlciwge1xuICAgICAgICBzY3JvbGxCZWhhdmlvcjogXCJhdXRvXCJcbiAgICAgIH0pOyAvLyBzbW9vdGggc2Nyb2xsaW5nIGRvZXNuJ3Qgd29yayB3aXRoIHNuYXAuXG5cbiAgICAgIF9zY3JvbGxlcnMuZm9yRWFjaChmdW5jdGlvbiAobykge1xuICAgICAgICByZXR1cm4gX2lzRnVuY3Rpb24obykgJiYgby50YXJnZXQgPT09IChpc1ZpZXdwb3J0ID8gX2RvYy5zY3JvbGxpbmdFbGVtZW50IHx8IF9kb2NFbCA6IHNjcm9sbGVyKSAmJiAoby5zbW9vdGggPSBmYWxzZSk7XG4gICAgICB9KTsgLy8gbm90ZTogc2V0IHNtb290aCB0byBmYWxzZSBvbiBib3RoIHRoZSB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCBzY3JvbGwgZ2V0dGVycy9zZXR0ZXJzXG5cblxuICAgICAgc25hcEZ1bmMgPSBfaXNGdW5jdGlvbihzbmFwLnNuYXBUbykgPyBzbmFwLnNuYXBUbyA6IHNuYXAuc25hcFRvID09PSBcImxhYmVsc1wiID8gX2dldENsb3Nlc3RMYWJlbChhbmltYXRpb24pIDogc25hcC5zbmFwVG8gPT09IFwibGFiZWxzRGlyZWN0aW9uYWxcIiA/IF9nZXRMYWJlbEF0RGlyZWN0aW9uKGFuaW1hdGlvbikgOiBzbmFwLmRpcmVjdGlvbmFsICE9PSBmYWxzZSA/IGZ1bmN0aW9uICh2YWx1ZSwgc3QpIHtcbiAgICAgICAgcmV0dXJuIF9zbmFwRGlyZWN0aW9uYWwoc25hcC5zbmFwVG8pKHZhbHVlLCBfZ2V0VGltZSgpIC0gbGFzdFJlZnJlc2ggPCA1MDAgPyAwIDogc3QuZGlyZWN0aW9uKTtcbiAgICAgIH0gOiBnc2FwLnV0aWxzLnNuYXAoc25hcC5zbmFwVG8pO1xuICAgICAgc25hcER1ckNsYW1wID0gc25hcC5kdXJhdGlvbiB8fCB7XG4gICAgICAgIG1pbjogMC4xLFxuICAgICAgICBtYXg6IDJcbiAgICAgIH07XG4gICAgICBzbmFwRHVyQ2xhbXAgPSBfaXNPYmplY3Qoc25hcER1ckNsYW1wKSA/IF9jbGFtcChzbmFwRHVyQ2xhbXAubWluLCBzbmFwRHVyQ2xhbXAubWF4KSA6IF9jbGFtcChzbmFwRHVyQ2xhbXAsIHNuYXBEdXJDbGFtcCk7XG4gICAgICBzbmFwRGVsYXllZENhbGwgPSBnc2FwLmRlbGF5ZWRDYWxsKHNuYXAuZGVsYXkgfHwgc2NydWJTbW9vdGggLyAyIHx8IDAuMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2Nyb2xsID0gc2Nyb2xsRnVuYygpLFxuICAgICAgICAgICAgcmVmcmVzaGVkUmVjZW50bHkgPSBfZ2V0VGltZSgpIC0gbGFzdFJlZnJlc2ggPCA1MDAsXG4gICAgICAgICAgICB0d2VlbiA9IHR3ZWVuVG8udHdlZW47XG5cbiAgICAgICAgaWYgKChyZWZyZXNoZWRSZWNlbnRseSB8fCBNYXRoLmFicyhzZWxmLmdldFZlbG9jaXR5KCkpIDwgMTApICYmICF0d2VlbiAmJiAhX3BvaW50ZXJJc0Rvd24gJiYgbGFzdFNuYXAgIT09IHNjcm9sbCkge1xuICAgICAgICAgIHZhciBwcm9ncmVzcyA9IChzY3JvbGwgLSBzdGFydCkgLyBjaGFuZ2UsXG4gICAgICAgICAgICAgIHRvdGFsUHJvZ3Jlc3MgPSBhbmltYXRpb24gJiYgIWlzVG9nZ2xlID8gYW5pbWF0aW9uLnRvdGFsUHJvZ3Jlc3MoKSA6IHByb2dyZXNzLFxuICAgICAgICAgICAgICB2ZWxvY2l0eSA9IHJlZnJlc2hlZFJlY2VudGx5ID8gMCA6ICh0b3RhbFByb2dyZXNzIC0gc25hcDIpIC8gKF9nZXRUaW1lKCkgLSBfdGltZTIpICogMTAwMCB8fCAwLFxuICAgICAgICAgICAgICBjaGFuZ2UxID0gZ3NhcC51dGlscy5jbGFtcCgtcHJvZ3Jlc3MsIDEgLSBwcm9ncmVzcywgX2Ficyh2ZWxvY2l0eSAvIDIpICogdmVsb2NpdHkgLyAwLjE4NSksXG4gICAgICAgICAgICAgIG5hdHVyYWxFbmQgPSBwcm9ncmVzcyArIChzbmFwLmluZXJ0aWEgPT09IGZhbHNlID8gMCA6IGNoYW5nZTEpLFxuICAgICAgICAgICAgICBlbmRWYWx1ZSxcbiAgICAgICAgICAgICAgZW5kU2Nyb2xsLFxuICAgICAgICAgICAgICBfc25hcCA9IHNuYXAsXG4gICAgICAgICAgICAgIG9uU3RhcnQgPSBfc25hcC5vblN0YXJ0LFxuICAgICAgICAgICAgICBfb25JbnRlcnJ1cHQgPSBfc25hcC5vbkludGVycnVwdCxcbiAgICAgICAgICAgICAgX29uQ29tcGxldGUgPSBfc25hcC5vbkNvbXBsZXRlO1xuICAgICAgICAgIGVuZFZhbHVlID0gc25hcEZ1bmMobmF0dXJhbEVuZCwgc2VsZik7XG4gICAgICAgICAgX2lzTnVtYmVyKGVuZFZhbHVlKSB8fCAoZW5kVmFsdWUgPSBuYXR1cmFsRW5kKTsgLy8gaW4gY2FzZSB0aGUgZnVuY3Rpb24gZGlkbid0IHJldHVybiBhIG51bWJlciwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBuYXR1cmFsRW5kXG5cbiAgICAgICAgICBlbmRTY3JvbGwgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKHN0YXJ0ICsgZW5kVmFsdWUgKiBjaGFuZ2UpKTtcblxuICAgICAgICAgIGlmIChzY3JvbGwgPD0gZW5kICYmIHNjcm9sbCA+PSBzdGFydCAmJiBlbmRTY3JvbGwgIT09IHNjcm9sbCkge1xuICAgICAgICAgICAgaWYgKHR3ZWVuICYmICF0d2Vlbi5faW5pdHRlZCAmJiB0d2Vlbi5kYXRhIDw9IF9hYnMoZW5kU2Nyb2xsIC0gc2Nyb2xsKSkge1xuICAgICAgICAgICAgICAvLyB0aGVyZSdzIGFuIG92ZXJsYXBwaW5nIHNuYXAhIFNvIHdlIG11c3QgZmlndXJlIG91dCB3aGljaCBvbmUgaXMgY2xvc2VyIGFuZCBsZXQgdGhhdCB0d2VlbiBsaXZlLlxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzbmFwLmluZXJ0aWEgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIGNoYW5nZTEgPSBlbmRWYWx1ZSAtIHByb2dyZXNzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0d2VlblRvKGVuZFNjcm9sbCwge1xuICAgICAgICAgICAgICBkdXJhdGlvbjogc25hcER1ckNsYW1wKF9hYnMoTWF0aC5tYXgoX2FicyhuYXR1cmFsRW5kIC0gdG90YWxQcm9ncmVzcyksIF9hYnMoZW5kVmFsdWUgLSB0b3RhbFByb2dyZXNzKSkgKiAwLjE4NSAvIHZlbG9jaXR5IC8gMC4wNSB8fCAwKSksXG4gICAgICAgICAgICAgIGVhc2U6IHNuYXAuZWFzZSB8fCBcInBvd2VyM1wiLFxuICAgICAgICAgICAgICBkYXRhOiBfYWJzKGVuZFNjcm9sbCAtIHNjcm9sbCksXG4gICAgICAgICAgICAgIC8vIHJlY29yZCB0aGUgZGlzdGFuY2Ugc28gdGhhdCBpZiBhbm90aGVyIHNuYXAgdHdlZW4gb2NjdXJzIChjb25mbGljdCkgd2UgY2FuIHByaW9yaXRpemUgdGhlIGNsb3Nlc3Qgc25hcC5cbiAgICAgICAgICAgICAgb25JbnRlcnJ1cHQ6IGZ1bmN0aW9uIG9uSW50ZXJydXB0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzbmFwRGVsYXllZENhbGwucmVzdGFydCh0cnVlKSAmJiBfb25JbnRlcnJ1cHQgJiYgX29uSW50ZXJydXB0KHNlbGYpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbiBvbkNvbXBsZXRlKCkge1xuICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgbGFzdFNuYXAgPSBzY3JvbGxGdW5jKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYW5pbWF0aW9uICYmICFpc1RvZ2dsZSkge1xuICAgICAgICAgICAgICAgICAgLy8gdGhlIHJlc29sdXRpb24gb2YgdGhlIHNjcm9sbGJhciBpcyBsaW1pdGVkLCBzbyB3ZSBzaG91bGQgY29ycmVjdCB0aGUgc2NydWJiZWQgYW5pbWF0aW9uJ3MgcGxheWhlYWQgYXQgdGhlIGVuZCB0byBtYXRjaCBFWEFDVExZIHdoZXJlIGl0IHdhcyBzdXBwb3NlZCB0byBzbmFwXG4gICAgICAgICAgICAgICAgICBzY3J1YlR3ZWVuID8gc2NydWJUd2Vlbi5yZXNldFRvKFwidG90YWxQcm9ncmVzc1wiLCBlbmRWYWx1ZSwgYW5pbWF0aW9uLl90VGltZSAvIGFuaW1hdGlvbi5fdER1cikgOiBhbmltYXRpb24ucHJvZ3Jlc3MoZW5kVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNuYXAxID0gc25hcDIgPSBhbmltYXRpb24gJiYgIWlzVG9nZ2xlID8gYW5pbWF0aW9uLnRvdGFsUHJvZ3Jlc3MoKSA6IHNlbGYucHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgb25TbmFwQ29tcGxldGUgJiYgb25TbmFwQ29tcGxldGUoc2VsZik7XG4gICAgICAgICAgICAgICAgX29uQ29tcGxldGUgJiYgX29uQ29tcGxldGUoc2VsZik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHNjcm9sbCwgY2hhbmdlMSAqIGNoYW5nZSwgZW5kU2Nyb2xsIC0gc2Nyb2xsIC0gY2hhbmdlMSAqIGNoYW5nZSk7XG4gICAgICAgICAgICBvblN0YXJ0ICYmIG9uU3RhcnQoc2VsZiwgdHdlZW5Uby50d2Vlbik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHNlbGYuaXNBY3RpdmUgJiYgbGFzdFNuYXAgIT09IHNjcm9sbCkge1xuICAgICAgICAgIHNuYXBEZWxheWVkQ2FsbC5yZXN0YXJ0KHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KS5wYXVzZSgpO1xuICAgIH1cblxuICAgIGlkICYmIChfaWRzW2lkXSA9IHNlbGYpO1xuICAgIHRyaWdnZXIgPSBzZWxmLnRyaWdnZXIgPSBfZ2V0VGFyZ2V0KHRyaWdnZXIgfHwgcGluICE9PSB0cnVlICYmIHBpbik7IC8vIGlmIGEgdHJpZ2dlciBoYXMgc29tZSBraW5kIG9mIHNjcm9sbC1yZWxhdGVkIGVmZmVjdCBhcHBsaWVkIHRoYXQgY291bGQgY29udGFtaW5hdGUgdGhlIFwieVwiIG9yIFwieFwiIHBvc2l0aW9uIChsaWtlIGEgU2Nyb2xsU21vb3RoZXIgZWZmZWN0KSwgd2UgbmVlZGVkIGEgd2F5IHRvIHRlbXBvcmFyaWx5IHJldmVydCBpdCwgc28gd2UgdXNlIHRoZSBzdFJldmVydCBwcm9wZXJ0eSBvZiB0aGUgZ3NDYWNoZS4gSXQgY2FuIHJldHVybiBhbm90aGVyIGZ1bmN0aW9uIHRoYXQgd2UnbGwgY2FsbCBhdCB0aGUgZW5kIHNvIGl0IGNhbiByZXR1cm4gdG8gaXRzIG5vcm1hbCBzdGF0ZS5cblxuICAgIGN1c3RvbVJldmVydFJldHVybiA9IHRyaWdnZXIgJiYgdHJpZ2dlci5fZ3NhcCAmJiB0cmlnZ2VyLl9nc2FwLnN0UmV2ZXJ0O1xuICAgIGN1c3RvbVJldmVydFJldHVybiAmJiAoY3VzdG9tUmV2ZXJ0UmV0dXJuID0gY3VzdG9tUmV2ZXJ0UmV0dXJuKHNlbGYpKTtcbiAgICBwaW4gPSBwaW4gPT09IHRydWUgPyB0cmlnZ2VyIDogX2dldFRhcmdldChwaW4pO1xuICAgIF9pc1N0cmluZyh0b2dnbGVDbGFzcykgJiYgKHRvZ2dsZUNsYXNzID0ge1xuICAgICAgdGFyZ2V0czogdHJpZ2dlcixcbiAgICAgIGNsYXNzTmFtZTogdG9nZ2xlQ2xhc3NcbiAgICB9KTtcblxuICAgIGlmIChwaW4pIHtcbiAgICAgIHBpblNwYWNpbmcgPT09IGZhbHNlIHx8IHBpblNwYWNpbmcgPT09IF9tYXJnaW4gfHwgKHBpblNwYWNpbmcgPSAhcGluU3BhY2luZyAmJiBwaW4ucGFyZW50Tm9kZSAmJiBwaW4ucGFyZW50Tm9kZS5zdHlsZSAmJiBfZ2V0Q29tcHV0ZWRTdHlsZShwaW4ucGFyZW50Tm9kZSkuZGlzcGxheSA9PT0gXCJmbGV4XCIgPyBmYWxzZSA6IF9wYWRkaW5nKTsgLy8gaWYgdGhlIHBhcmVudCBpcyBkaXNwbGF5OiBmbGV4LCBkb24ndCBhcHBseSBwaW5TcGFjaW5nIGJ5IGRlZmF1bHQuIFdlIHNob3VsZCBjaGVjayB0aGF0IHBpbi5wYXJlbnROb2RlIGlzIGFuIGVsZW1lbnQgKG5vdCBzaGFkb3cgZG9tIHdpbmRvdylcblxuICAgICAgc2VsZi5waW4gPSBwaW47XG4gICAgICBwaW5DYWNoZSA9IGdzYXAuY29yZS5nZXRDYWNoZShwaW4pO1xuXG4gICAgICBpZiAoIXBpbkNhY2hlLnNwYWNlcikge1xuICAgICAgICAvLyByZWNvcmQgdGhlIHNwYWNlciBhbmQgcGluT3JpZ2luYWxTdGF0ZSBvbiB0aGUgY2FjaGUgaW4gY2FzZSBzb21lb25lIHRyaWVzIHBpbm5pbmcgdGhlIHNhbWUgZWxlbWVudCB3aXRoIE1VTFRJUExFIFNjcm9sbFRyaWdnZXJzIC0gd2UgZG9uJ3Qgd2FudCB0byBoYXZlIG11bHRpcGxlIHNwYWNlcnMgb3IgcmVjb3JkIHRoZSBcIm9yaWdpbmFsXCIgcGluIHN0YXRlIGFmdGVyIGl0IGhhcyBhbHJlYWR5IGJlZW4gYWZmZWN0ZWQgYnkgYW5vdGhlciBTY3JvbGxUcmlnZ2VyLlxuICAgICAgICBpZiAocGluU3BhY2VyKSB7XG4gICAgICAgICAgcGluU3BhY2VyID0gX2dldFRhcmdldChwaW5TcGFjZXIpO1xuICAgICAgICAgIHBpblNwYWNlciAmJiAhcGluU3BhY2VyLm5vZGVUeXBlICYmIChwaW5TcGFjZXIgPSBwaW5TcGFjZXIuY3VycmVudCB8fCBwaW5TcGFjZXIubmF0aXZlRWxlbWVudCk7IC8vIGZvciBSZWFjdCAmIEFuZ3VsYXJcblxuICAgICAgICAgIHBpbkNhY2hlLnNwYWNlcklzTmF0aXZlID0gISFwaW5TcGFjZXI7XG4gICAgICAgICAgcGluU3BhY2VyICYmIChwaW5DYWNoZS5zcGFjZXJTdGF0ZSA9IF9nZXRTdGF0ZShwaW5TcGFjZXIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBpbkNhY2hlLnNwYWNlciA9IHNwYWNlciA9IHBpblNwYWNlciB8fCBfZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIHNwYWNlci5jbGFzc0xpc3QuYWRkKFwicGluLXNwYWNlclwiKTtcbiAgICAgICAgaWQgJiYgc3BhY2VyLmNsYXNzTGlzdC5hZGQoXCJwaW4tc3BhY2VyLVwiICsgaWQpO1xuICAgICAgICBwaW5DYWNoZS5waW5TdGF0ZSA9IHBpbk9yaWdpbmFsU3RhdGUgPSBfZ2V0U3RhdGUocGluKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBpbk9yaWdpbmFsU3RhdGUgPSBwaW5DYWNoZS5waW5TdGF0ZTtcbiAgICAgIH1cblxuICAgICAgdmFycy5mb3JjZTNEICE9PSBmYWxzZSAmJiBnc2FwLnNldChwaW4sIHtcbiAgICAgICAgZm9yY2UzRDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBzZWxmLnNwYWNlciA9IHNwYWNlciA9IHBpbkNhY2hlLnNwYWNlcjtcbiAgICAgIGNzID0gX2dldENvbXB1dGVkU3R5bGUocGluKTtcbiAgICAgIHNwYWNpbmdTdGFydCA9IGNzW3BpblNwYWNpbmcgKyBkaXJlY3Rpb24ub3MyXTtcbiAgICAgIHBpbkdldHRlciA9IGdzYXAuZ2V0UHJvcGVydHkocGluKTtcbiAgICAgIHBpblNldHRlciA9IGdzYXAucXVpY2tTZXR0ZXIocGluLCBkaXJlY3Rpb24uYSwgX3B4KTsgLy8gcGluLmZpcnN0Q2hpbGQgJiYgIV9tYXhTY3JvbGwocGluLCBkaXJlY3Rpb24pICYmIChwaW4uc3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiKTsgLy8gcHJvdGVjdHMgZnJvbSBjb2xsYXBzaW5nIG1hcmdpbnMsIGJ1dCBjYW4gaGF2ZSB1bmludGVuZGVkIGNvbnNlcXVlbmNlcyBhcyBkZW1vbnN0cmF0ZWQgaGVyZTogaHR0cHM6Ly9jb2RlcGVuLmlvL0dyZWVuU29jay9wZW4vMWU0MmM3YTczYmZhNDA5ZDJjZjFlMTg0ZTdhNDI0OGQgc28gaXQgd2FzIHJlbW92ZWQgaW4gZmF2b3Igb2YganVzdCB0ZWxsaW5nIHBlb3BsZSB0byBzZXQgdXAgdGhlaXIgQ1NTIHRvIGF2b2lkIHRoZSBjb2xsYXBzaW5nIG1hcmdpbnMgKG92ZXJmbG93OiBoaWRkZW4gfCBhdXRvIGlzIGp1c3Qgb25lIG9wdGlvbi4gQW5vdGhlciBpcyBib3JkZXItdG9wOiAxcHggc29saWQgdHJhbnNwYXJlbnQpLlxuXG4gICAgICBfc3dhcFBpbkluKHBpbiwgc3BhY2VyLCBjcyk7XG5cbiAgICAgIHBpblN0YXRlID0gX2dldFN0YXRlKHBpbik7XG4gICAgfVxuXG4gICAgaWYgKG1hcmtlcnMpIHtcbiAgICAgIG1hcmtlclZhcnMgPSBfaXNPYmplY3QobWFya2VycykgPyBfc2V0RGVmYXVsdHMobWFya2VycywgX21hcmtlckRlZmF1bHRzKSA6IF9tYXJrZXJEZWZhdWx0cztcbiAgICAgIG1hcmtlclN0YXJ0VHJpZ2dlciA9IF9jcmVhdGVNYXJrZXIoXCJzY3JvbGxlci1zdGFydFwiLCBpZCwgc2Nyb2xsZXIsIGRpcmVjdGlvbiwgbWFya2VyVmFycywgMCk7XG4gICAgICBtYXJrZXJFbmRUcmlnZ2VyID0gX2NyZWF0ZU1hcmtlcihcInNjcm9sbGVyLWVuZFwiLCBpZCwgc2Nyb2xsZXIsIGRpcmVjdGlvbiwgbWFya2VyVmFycywgMCwgbWFya2VyU3RhcnRUcmlnZ2VyKTtcbiAgICAgIG9mZnNldCA9IG1hcmtlclN0YXJ0VHJpZ2dlcltcIm9mZnNldFwiICsgZGlyZWN0aW9uLm9wLmQyXTtcblxuICAgICAgdmFyIGNvbnRlbnQgPSBfZ2V0VGFyZ2V0KF9nZXRQcm94eVByb3Aoc2Nyb2xsZXIsIFwiY29udGVudFwiKSB8fCBzY3JvbGxlcik7XG5cbiAgICAgIG1hcmtlclN0YXJ0ID0gdGhpcy5tYXJrZXJTdGFydCA9IF9jcmVhdGVNYXJrZXIoXCJzdGFydFwiLCBpZCwgY29udGVudCwgZGlyZWN0aW9uLCBtYXJrZXJWYXJzLCBvZmZzZXQsIDAsIGNvbnRhaW5lckFuaW1hdGlvbik7XG4gICAgICBtYXJrZXJFbmQgPSB0aGlzLm1hcmtlckVuZCA9IF9jcmVhdGVNYXJrZXIoXCJlbmRcIiwgaWQsIGNvbnRlbnQsIGRpcmVjdGlvbiwgbWFya2VyVmFycywgb2Zmc2V0LCAwLCBjb250YWluZXJBbmltYXRpb24pO1xuICAgICAgY29udGFpbmVyQW5pbWF0aW9uICYmIChjYU1hcmtlclNldHRlciA9IGdzYXAucXVpY2tTZXR0ZXIoW21hcmtlclN0YXJ0LCBtYXJrZXJFbmRdLCBkaXJlY3Rpb24uYSwgX3B4KSk7XG5cbiAgICAgIGlmICghdXNlRml4ZWRQb3NpdGlvbiAmJiAhKF9wcm94aWVzLmxlbmd0aCAmJiBfZ2V0UHJveHlQcm9wKHNjcm9sbGVyLCBcImZpeGVkTWFya2Vyc1wiKSA9PT0gdHJ1ZSkpIHtcbiAgICAgICAgX21ha2VQb3NpdGlvbmFibGUoaXNWaWV3cG9ydCA/IF9ib2R5IDogc2Nyb2xsZXIpO1xuXG4gICAgICAgIGdzYXAuc2V0KFttYXJrZXJTdGFydFRyaWdnZXIsIG1hcmtlckVuZFRyaWdnZXJdLCB7XG4gICAgICAgICAgZm9yY2UzRDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgbWFya2VyU3RhcnRTZXR0ZXIgPSBnc2FwLnF1aWNrU2V0dGVyKG1hcmtlclN0YXJ0VHJpZ2dlciwgZGlyZWN0aW9uLmEsIF9weCk7XG4gICAgICAgIG1hcmtlckVuZFNldHRlciA9IGdzYXAucXVpY2tTZXR0ZXIobWFya2VyRW5kVHJpZ2dlciwgZGlyZWN0aW9uLmEsIF9weCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5lckFuaW1hdGlvbikge1xuICAgICAgdmFyIG9sZE9uVXBkYXRlID0gY29udGFpbmVyQW5pbWF0aW9uLnZhcnMub25VcGRhdGUsXG4gICAgICAgICAgb2xkUGFyYW1zID0gY29udGFpbmVyQW5pbWF0aW9uLnZhcnMub25VcGRhdGVQYXJhbXM7XG4gICAgICBjb250YWluZXJBbmltYXRpb24uZXZlbnRDYWxsYmFjayhcIm9uVXBkYXRlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi51cGRhdGUoMCwgMCwgMSk7XG4gICAgICAgIG9sZE9uVXBkYXRlICYmIG9sZE9uVXBkYXRlLmFwcGx5KGNvbnRhaW5lckFuaW1hdGlvbiwgb2xkUGFyYW1zIHx8IFtdKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHNlbGYucHJldmlvdXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3RyaWdnZXJzW190cmlnZ2Vycy5pbmRleE9mKHNlbGYpIC0gMV07XG4gICAgfTtcblxuICAgIHNlbGYubmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfdHJpZ2dlcnNbX3RyaWdnZXJzLmluZGV4T2Yoc2VsZikgKyAxXTtcbiAgICB9O1xuXG4gICAgc2VsZi5yZXZlcnQgPSBmdW5jdGlvbiAocmV2ZXJ0LCB0ZW1wKSB7XG4gICAgICBpZiAoIXRlbXApIHtcbiAgICAgICAgcmV0dXJuIHNlbGYua2lsbCh0cnVlKTtcbiAgICAgIH0gLy8gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBnc2FwLmNvbnRleHQoKSBhbmQgZ3NhcC5tYXRjaE1lZGlhKCkgd2hpY2ggY2FsbCByZXZlcnQoKVxuXG5cbiAgICAgIHZhciByID0gcmV2ZXJ0ICE9PSBmYWxzZSB8fCAhc2VsZi5lbmFibGVkLFxuICAgICAgICAgIHByZXZSZWZyZXNoaW5nID0gX3JlZnJlc2hpbmc7XG5cbiAgICAgIGlmIChyICE9PSBzZWxmLmlzUmV2ZXJ0ZWQpIHtcbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICBwcmV2U2Nyb2xsID0gTWF0aC5tYXgoc2Nyb2xsRnVuYygpLCBzZWxmLnNjcm9sbC5yZWMgfHwgMCk7IC8vIHJlY29yZCB0aGUgc2Nyb2xsIHNvIHdlIGNhbiByZXZlcnQgbGF0ZXIgKHJlcG9zaXRpb25pbmcvcGlubmluZyB0aGluZ3MgY2FuIGFmZmVjdCBzY3JvbGwgcG9zaXRpb24pLiBJbiB0aGUgc3RhdGljIHJlZnJlc2goKSBtZXRob2QsIHdlIGZpcnN0IHJlY29yZCBhbGwgdGhlIHNjcm9sbCBwb3NpdGlvbnMgYXMgYSByZWZlcmVuY2UuXG5cbiAgICAgICAgICBwcmV2UHJvZ3Jlc3MgPSBzZWxmLnByb2dyZXNzO1xuICAgICAgICAgIHByZXZBbmltUHJvZ3Jlc3MgPSBhbmltYXRpb24gJiYgYW5pbWF0aW9uLnByb2dyZXNzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBtYXJrZXJTdGFydCAmJiBbbWFya2VyU3RhcnQsIG1hcmtlckVuZCwgbWFya2VyU3RhcnRUcmlnZ2VyLCBtYXJrZXJFbmRUcmlnZ2VyXS5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7XG4gICAgICAgICAgcmV0dXJuIG0uc3R5bGUuZGlzcGxheSA9IHIgPyBcIm5vbmVcIiA6IFwiYmxvY2tcIjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICBfcmVmcmVzaGluZyA9IHNlbGY7XG4gICAgICAgICAgc2VsZi51cGRhdGUocik7IC8vIG1ha2Ugc3VyZSB0aGUgcGluIGlzIGJhY2sgaW4gaXRzIG9yaWdpbmFsIHBvc2l0aW9uIHNvIHRoYXQgYWxsIHRoZSBtZWFzdXJlbWVudHMgYXJlIGNvcnJlY3QuIGRvIHRoaXMgQkVGT1JFIHN3YXBwaW5nIHRoZSBwaW4gb3V0XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGluICYmICghcGluUmVwYXJlbnQgfHwgIXNlbGYuaXNBY3RpdmUpKSB7XG4gICAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICAgIF9zd2FwUGluT3V0KHBpbiwgc3BhY2VyLCBwaW5PcmlnaW5hbFN0YXRlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgX3N3YXBQaW5JbihwaW4sIHNwYWNlciwgX2dldENvbXB1dGVkU3R5bGUocGluKSwgc3BhY2VyU3RhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHIgfHwgc2VsZi51cGRhdGUocik7IC8vIHdoZW4gd2UncmUgcmVzdG9yaW5nLCB0aGUgdXBkYXRlIHNob3VsZCBydW4gQUZURVIgc3dhcHBpbmcgdGhlIHBpbiBpbnRvIGl0cyBwaW4tc3BhY2VyLlxuXG4gICAgICAgIF9yZWZyZXNoaW5nID0gcHJldlJlZnJlc2hpbmc7IC8vIHJlc3RvcmUuIFdlIHNldCBpdCB0byB0cnVlIGR1cmluZyB0aGUgdXBkYXRlKCkgc28gdGhhdCB0aGluZ3MgZmlyZSBwcm9wZXJseSBpbiB0aGVyZS5cblxuICAgICAgICBzZWxmLmlzUmV2ZXJ0ZWQgPSByO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzZWxmLnJlZnJlc2ggPSBmdW5jdGlvbiAoc29mdCwgZm9yY2UsIHBvc2l0aW9uLCBwaW5PZmZzZXQpIHtcbiAgICAgIC8vIHBvc2l0aW9uIGlzIHR5cGljYWxseSBvbmx5IGRlZmluZWQgaWYgaXQncyBjb21pbmcgZnJvbSBzZXRQb3NpdGlvbnMoKSAtIGl0J3MgYSB3YXkgdG8gc2tpcCB0aGUgbm9ybWFsIHBhcnNpbmcuIHBpbk9mZnNldCBpcyBhbHNvIG9ubHkgZnJvbSBzZXRQb3NpdGlvbnMoKSBhbmQgaXMgbW9zdGx5IHJlbGF0ZWQgdG8gZmFuY3kgc3R1ZmYgd2UgbmVlZCB0byBkbyBpbiBTY3JvbGxTbW9vdGhlciB3aXRoIGVmZmVjdHNcbiAgICAgIGlmICgoX3JlZnJlc2hpbmcgfHwgIXNlbGYuZW5hYmxlZCkgJiYgIWZvcmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHBpbiAmJiBzb2Z0ICYmIF9sYXN0U2Nyb2xsVGltZSkge1xuICAgICAgICBfYWRkTGlzdGVuZXIoU2Nyb2xsVHJpZ2dlciwgXCJzY3JvbGxFbmRcIiwgX3NvZnRSZWZyZXNoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgICFfcmVmcmVzaGluZ0FsbCAmJiBvblJlZnJlc2hJbml0ICYmIG9uUmVmcmVzaEluaXQoc2VsZik7XG4gICAgICBfcmVmcmVzaGluZyA9IHNlbGY7XG5cbiAgICAgIGlmICh0d2VlblRvLnR3ZWVuICYmICFwb3NpdGlvbikge1xuICAgICAgICAvLyB3ZSBza2lwIHRoaXMgaWYgYSBwb3NpdGlvbiBpcyBwYXNzZWQgaW4gYmVjYXVzZSB0eXBpY2FsbHkgdGhhdCdzIGZyb20gLnNldFBvc2l0aW9ucygpIGFuZCBpdCdzIGJlc3QgdG8gYWxsb3cgaW4tcHJvZ3Jlc3Mgc25hcHBpbmcgdG8gY29udGludWUuXG4gICAgICAgIHR3ZWVuVG8udHdlZW4ua2lsbCgpO1xuICAgICAgICB0d2VlblRvLnR3ZWVuID0gMDtcbiAgICAgIH1cblxuICAgICAgc2NydWJUd2VlbiAmJiBzY3J1YlR3ZWVuLnBhdXNlKCk7XG4gICAgICBpbnZhbGlkYXRlT25SZWZyZXNoICYmIGFuaW1hdGlvbiAmJiBhbmltYXRpb24ucmV2ZXJ0KHtcbiAgICAgICAga2lsbDogZmFsc2VcbiAgICAgIH0pLmludmFsaWRhdGUoKTtcbiAgICAgIHNlbGYuaXNSZXZlcnRlZCB8fCBzZWxmLnJldmVydCh0cnVlLCB0cnVlKTtcbiAgICAgIHNlbGYuX3N1YlBpbk9mZnNldCA9IGZhbHNlOyAvLyB3ZSdsbCBzZXQgdGhpcyB0byB0cnVlIGluIHRoZSBzdWItcGlucyBpZiB3ZSBmaW5kIGFueVxuXG4gICAgICB2YXIgc2l6ZSA9IGdldFNjcm9sbGVyU2l6ZSgpLFxuICAgICAgICAgIHNjcm9sbGVyQm91bmRzID0gZ2V0U2Nyb2xsZXJPZmZzZXRzKCksXG4gICAgICAgICAgbWF4ID0gY29udGFpbmVyQW5pbWF0aW9uID8gY29udGFpbmVyQW5pbWF0aW9uLmR1cmF0aW9uKCkgOiBfbWF4U2Nyb2xsKHNjcm9sbGVyLCBkaXJlY3Rpb24pLFxuICAgICAgICAgIGlzRmlyc3RSZWZyZXNoID0gY2hhbmdlIDw9IDAuMDEsXG4gICAgICAgICAgb2Zmc2V0ID0gMCxcbiAgICAgICAgICBvdGhlclBpbk9mZnNldCA9IHBpbk9mZnNldCB8fCAwLFxuICAgICAgICAgIHBhcnNlZEVuZCA9IF9pc09iamVjdChwb3NpdGlvbikgPyBwb3NpdGlvbi5lbmQgOiB2YXJzLmVuZCxcbiAgICAgICAgICBwYXJzZWRFbmRUcmlnZ2VyID0gdmFycy5lbmRUcmlnZ2VyIHx8IHRyaWdnZXIsXG4gICAgICAgICAgcGFyc2VkU3RhcnQgPSBfaXNPYmplY3QocG9zaXRpb24pID8gcG9zaXRpb24uc3RhcnQgOiB2YXJzLnN0YXJ0IHx8ICh2YXJzLnN0YXJ0ID09PSAwIHx8ICF0cmlnZ2VyID8gMCA6IHBpbiA/IFwiMCAwXCIgOiBcIjAgMTAwJVwiKSxcbiAgICAgICAgICBwaW5uZWRDb250YWluZXIgPSBzZWxmLnBpbm5lZENvbnRhaW5lciA9IHZhcnMucGlubmVkQ29udGFpbmVyICYmIF9nZXRUYXJnZXQodmFycy5waW5uZWRDb250YWluZXIsIHNlbGYpLFxuICAgICAgICAgIHRyaWdnZXJJbmRleCA9IHRyaWdnZXIgJiYgTWF0aC5tYXgoMCwgX3RyaWdnZXJzLmluZGV4T2Yoc2VsZikpIHx8IDAsXG4gICAgICAgICAgaSA9IHRyaWdnZXJJbmRleCxcbiAgICAgICAgICBjcyxcbiAgICAgICAgICBib3VuZHMsXG4gICAgICAgICAgc2Nyb2xsLFxuICAgICAgICAgIGlzVmVydGljYWwsXG4gICAgICAgICAgb3ZlcnJpZGUsXG4gICAgICAgICAgY3VyVHJpZ2dlcixcbiAgICAgICAgICBjdXJQaW4sXG4gICAgICAgICAgb3Bwb3NpdGVTY3JvbGwsXG4gICAgICAgICAgaW5pdHRlZCxcbiAgICAgICAgICByZXZlcnRlZFBpbnMsXG4gICAgICAgICAgZm9yY2VkT3ZlcmZsb3csXG4gICAgICAgICAgbWFya2VyU3RhcnRPZmZzZXQsXG4gICAgICAgICAgbWFya2VyRW5kT2Zmc2V0O1xuXG4gICAgICBpZiAobWFya2VycyAmJiBfaXNPYmplY3QocG9zaXRpb24pKSB7XG4gICAgICAgIC8vIGlmIHdlIGFsdGVyIHRoZSBzdGFydC9lbmQgcG9zaXRpb25zIHdpdGggLnNldFBvc2l0aW9ucygpLCBpdCBnZW5lcmFsbHkgZmVlZHMgaW4gYWJzb2x1dGUgTlVNQkVSUyB3aGljaCBkb24ndCBjb252ZXkgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdG8gbGluZSB1cCB0aGUgbWFya2Vycywgc28gdG8ga2VlcCBpdCBpbnR1aXRpdmUsIHdlIHJlY29yZCBob3cgZmFyIHRoZSB0cmlnZ2VyIHBvc2l0aW9ucyBzaGlmdCBhZnRlciBhcHBseWluZyB0aGUgbmV3IG51bWJlcnMgYW5kIHRoZW4gb2Zmc2V0IGJ5IHRoYXQgbXVjaCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uLiBXZSBkbyB0aGUgc2FtZSB0byB0aGUgYXNzb2NpYXRlZCB0cmlnZ2VyIG1hcmtlcnMgdG9vIG9mIGNvdXJzZS5cbiAgICAgICAgbWFya2VyU3RhcnRPZmZzZXQgPSBnc2FwLmdldFByb3BlcnR5KG1hcmtlclN0YXJ0VHJpZ2dlciwgZGlyZWN0aW9uLnApO1xuICAgICAgICBtYXJrZXJFbmRPZmZzZXQgPSBnc2FwLmdldFByb3BlcnR5KG1hcmtlckVuZFRyaWdnZXIsIGRpcmVjdGlvbi5wKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgLy8gdXNlciBtaWdodCB0cnkgdG8gcGluIHRoZSBzYW1lIGVsZW1lbnQgbW9yZSB0aGFuIG9uY2UsIHNvIHdlIG11c3QgZmluZCBhbnkgcHJpb3IgdHJpZ2dlcnMgd2l0aCB0aGUgc2FtZSBwaW4sIHJldmVydCB0aGVtLCBhbmQgZGV0ZXJtaW5lIGhvdyBsb25nIHRoZXkncmUgcGlubmluZyBzbyB0aGF0IHdlIGNhbiBvZmZzZXQgdGhpbmdzIGFwcHJvcHJpYXRlbHkuIE1ha2Ugc3VyZSB3ZSByZXZlcnQgZnJvbSBsYXN0IHRvIGZpcnN0IHNvIHRoYXQgdGhpbmdzIFwicmV3aW5kXCIgcHJvcGVybHkuXG4gICAgICAgIGN1clRyaWdnZXIgPSBfdHJpZ2dlcnNbaV07XG4gICAgICAgIGN1clRyaWdnZXIuZW5kIHx8IGN1clRyaWdnZXIucmVmcmVzaCgwLCAxKSB8fCAoX3JlZnJlc2hpbmcgPSBzZWxmKTsgLy8gaWYgaXQncyBhIHRpbWVsaW5lLWJhc2VkIHRyaWdnZXIgdGhhdCBoYXNuJ3QgYmVlbiBmdWxseSBpbml0aWFsaXplZCB5ZXQgYmVjYXVzZSBpdCdzIHdhaXRpbmcgZm9yIDEgdGljaywganVzdCBmb3JjZSB0aGUgcmVmcmVzaCgpIGhlcmUsIG90aGVyd2lzZSBpZiBpdCBjb250YWlucyBhIHBpbiB0aGF0J3Mgc3VwcG9zZWQgdG8gYWZmZWN0IG90aGVyIFNjcm9sbFRyaWdnZXJzIGZ1cnRoZXIgZG93biB0aGUgcGFnZSwgdGhleSB3b24ndCBiZSBhZGp1c3RlZCBwcm9wZXJseS5cblxuICAgICAgICBjdXJQaW4gPSBjdXJUcmlnZ2VyLnBpbjtcblxuICAgICAgICBpZiAoY3VyUGluICYmIChjdXJQaW4gPT09IHRyaWdnZXIgfHwgY3VyUGluID09PSBwaW4gfHwgY3VyUGluID09PSBwaW5uZWRDb250YWluZXIpICYmICFjdXJUcmlnZ2VyLmlzUmV2ZXJ0ZWQpIHtcbiAgICAgICAgICByZXZlcnRlZFBpbnMgfHwgKHJldmVydGVkUGlucyA9IFtdKTtcbiAgICAgICAgICByZXZlcnRlZFBpbnMudW5zaGlmdChjdXJUcmlnZ2VyKTsgLy8gd2UnbGwgcmV2ZXJ0IGZyb20gZmlyc3QgdG8gbGFzdCB0byBtYWtlIHN1cmUgdGhpbmdzIHJlYWNoIHRoZWlyIGVuZCBzdGF0ZSBwcm9wZXJseVxuXG4gICAgICAgICAgY3VyVHJpZ2dlci5yZXZlcnQodHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VyVHJpZ2dlciAhPT0gX3RyaWdnZXJzW2ldKSB7XG4gICAgICAgICAgLy8gaW4gY2FzZSBpdCBnb3QgcmVtb3ZlZC5cbiAgICAgICAgICB0cmlnZ2VySW5kZXgtLTtcbiAgICAgICAgICBpLS07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX2lzRnVuY3Rpb24ocGFyc2VkU3RhcnQpICYmIChwYXJzZWRTdGFydCA9IHBhcnNlZFN0YXJ0KHNlbGYpKTtcbiAgICAgIHBhcnNlZFN0YXJ0ID0gX3BhcnNlQ2xhbXAocGFyc2VkU3RhcnQsIFwic3RhcnRcIiwgc2VsZik7XG4gICAgICBzdGFydCA9IF9wYXJzZVBvc2l0aW9uKHBhcnNlZFN0YXJ0LCB0cmlnZ2VyLCBzaXplLCBkaXJlY3Rpb24sIHNjcm9sbEZ1bmMoKSwgbWFya2VyU3RhcnQsIG1hcmtlclN0YXJ0VHJpZ2dlciwgc2VsZiwgc2Nyb2xsZXJCb3VuZHMsIGJvcmRlcldpZHRoLCB1c2VGaXhlZFBvc2l0aW9uLCBtYXgsIGNvbnRhaW5lckFuaW1hdGlvbiwgc2VsZi5fc3RhcnRDbGFtcCAmJiBcIl9zdGFydENsYW1wXCIpIHx8IChwaW4gPyAtMC4wMDEgOiAwKTtcbiAgICAgIF9pc0Z1bmN0aW9uKHBhcnNlZEVuZCkgJiYgKHBhcnNlZEVuZCA9IHBhcnNlZEVuZChzZWxmKSk7XG5cbiAgICAgIGlmIChfaXNTdHJpbmcocGFyc2VkRW5kKSAmJiAhcGFyc2VkRW5kLmluZGV4T2YoXCIrPVwiKSkge1xuICAgICAgICBpZiAofnBhcnNlZEVuZC5pbmRleE9mKFwiIFwiKSkge1xuICAgICAgICAgIHBhcnNlZEVuZCA9IChfaXNTdHJpbmcocGFyc2VkU3RhcnQpID8gcGFyc2VkU3RhcnQuc3BsaXQoXCIgXCIpWzBdIDogXCJcIikgKyBwYXJzZWRFbmQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2Zmc2V0ID0gX29mZnNldFRvUHgocGFyc2VkRW5kLnN1YnN0cigyKSwgc2l6ZSk7XG4gICAgICAgICAgcGFyc2VkRW5kID0gX2lzU3RyaW5nKHBhcnNlZFN0YXJ0KSA/IHBhcnNlZFN0YXJ0IDogKGNvbnRhaW5lckFuaW1hdGlvbiA/IGdzYXAudXRpbHMubWFwUmFuZ2UoMCwgY29udGFpbmVyQW5pbWF0aW9uLmR1cmF0aW9uKCksIGNvbnRhaW5lckFuaW1hdGlvbi5zY3JvbGxUcmlnZ2VyLnN0YXJ0LCBjb250YWluZXJBbmltYXRpb24uc2Nyb2xsVHJpZ2dlci5lbmQsIHN0YXJ0KSA6IHN0YXJ0KSArIG9mZnNldDsgLy8gX3BhcnNlUG9zaXRpb24gd29uJ3QgZmFjdG9yIGluIHRoZSBvZmZzZXQgaWYgdGhlIHN0YXJ0IGlzIGEgbnVtYmVyLCBzbyBkbyBpdCBoZXJlLlxuXG4gICAgICAgICAgcGFyc2VkRW5kVHJpZ2dlciA9IHRyaWdnZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcGFyc2VkRW5kID0gX3BhcnNlQ2xhbXAocGFyc2VkRW5kLCBcImVuZFwiLCBzZWxmKTtcbiAgICAgIGVuZCA9IE1hdGgubWF4KHN0YXJ0LCBfcGFyc2VQb3NpdGlvbihwYXJzZWRFbmQgfHwgKHBhcnNlZEVuZFRyaWdnZXIgPyBcIjEwMCUgMFwiIDogbWF4KSwgcGFyc2VkRW5kVHJpZ2dlciwgc2l6ZSwgZGlyZWN0aW9uLCBzY3JvbGxGdW5jKCkgKyBvZmZzZXQsIG1hcmtlckVuZCwgbWFya2VyRW5kVHJpZ2dlciwgc2VsZiwgc2Nyb2xsZXJCb3VuZHMsIGJvcmRlcldpZHRoLCB1c2VGaXhlZFBvc2l0aW9uLCBtYXgsIGNvbnRhaW5lckFuaW1hdGlvbiwgc2VsZi5fZW5kQ2xhbXAgJiYgXCJfZW5kQ2xhbXBcIikpIHx8IC0wLjAwMTtcbiAgICAgIG9mZnNldCA9IDA7XG4gICAgICBpID0gdHJpZ2dlckluZGV4O1xuXG4gICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIGN1clRyaWdnZXIgPSBfdHJpZ2dlcnNbaV07XG4gICAgICAgIGN1clBpbiA9IGN1clRyaWdnZXIucGluO1xuXG4gICAgICAgIGlmIChjdXJQaW4gJiYgY3VyVHJpZ2dlci5zdGFydCAtIGN1clRyaWdnZXIuX3BpblB1c2ggPD0gc3RhcnQgJiYgIWNvbnRhaW5lckFuaW1hdGlvbiAmJiBjdXJUcmlnZ2VyLmVuZCA+IDApIHtcbiAgICAgICAgICBjcyA9IGN1clRyaWdnZXIuZW5kIC0gKHNlbGYuX3N0YXJ0Q2xhbXAgPyBNYXRoLm1heCgwLCBjdXJUcmlnZ2VyLnN0YXJ0KSA6IGN1clRyaWdnZXIuc3RhcnQpO1xuXG4gICAgICAgICAgaWYgKChjdXJQaW4gPT09IHRyaWdnZXIgJiYgY3VyVHJpZ2dlci5zdGFydCAtIGN1clRyaWdnZXIuX3BpblB1c2ggPCBzdGFydCB8fCBjdXJQaW4gPT09IHBpbm5lZENvbnRhaW5lcikgJiYgaXNOYU4ocGFyc2VkU3RhcnQpKSB7XG4gICAgICAgICAgICAvLyBudW1lcmljIHN0YXJ0IHZhbHVlcyBzaG91bGRuJ3QgYmUgb2Zmc2V0IGF0IGFsbCAtIHRyZWF0IHRoZW0gYXMgYWJzb2x1dGVcbiAgICAgICAgICAgIG9mZnNldCArPSBjcyAqICgxIC0gY3VyVHJpZ2dlci5wcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VyUGluID09PSBwaW4gJiYgKG90aGVyUGluT2Zmc2V0ICs9IGNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdGFydCArPSBvZmZzZXQ7XG4gICAgICBlbmQgKz0gb2Zmc2V0O1xuICAgICAgc2VsZi5fc3RhcnRDbGFtcCAmJiAoc2VsZi5fc3RhcnRDbGFtcCArPSBvZmZzZXQpO1xuXG4gICAgICBpZiAoc2VsZi5fZW5kQ2xhbXAgJiYgIV9yZWZyZXNoaW5nQWxsKSB7XG4gICAgICAgIHNlbGYuX2VuZENsYW1wID0gZW5kIHx8IC0wLjAwMTtcbiAgICAgICAgZW5kID0gTWF0aC5taW4oZW5kLCBfbWF4U2Nyb2xsKHNjcm9sbGVyLCBkaXJlY3Rpb24pKTtcbiAgICAgIH1cblxuICAgICAgY2hhbmdlID0gZW5kIC0gc3RhcnQgfHwgKHN0YXJ0IC09IDAuMDEpICYmIDAuMDAxO1xuXG4gICAgICBpZiAoaXNGaXJzdFJlZnJlc2gpIHtcbiAgICAgICAgLy8gb24gdGhlIHZlcnkgZmlyc3QgcmVmcmVzaCgpLCB0aGUgcHJldlByb2dyZXNzIGNvdWxkbid0IGhhdmUgYmVlbiBhY2N1cmF0ZSB5ZXQgYmVjYXVzZSB0aGUgc3RhcnQvZW5kIHdlcmUgbmV2ZXIgY2FsY3VsYXRlZCwgc28gd2Ugc2V0IGl0IGhlcmUuIEJlZm9yZSAzLjExLjUsIGl0IGNvdWxkIGxlYWQgdG8gYW4gaW5hY2N1cmF0ZSBzY3JvbGwgcG9zaXRpb24gcmVzdG9yYXRpb24gd2l0aCBzbmFwcGluZy5cbiAgICAgICAgcHJldlByb2dyZXNzID0gZ3NhcC51dGlscy5jbGFtcCgwLCAxLCBnc2FwLnV0aWxzLm5vcm1hbGl6ZShzdGFydCwgZW5kLCBwcmV2U2Nyb2xsKSk7XG4gICAgICB9XG5cbiAgICAgIHNlbGYuX3BpblB1c2ggPSBvdGhlclBpbk9mZnNldDtcblxuICAgICAgaWYgKG1hcmtlclN0YXJ0ICYmIG9mZnNldCkge1xuICAgICAgICAvLyBvZmZzZXQgdGhlIG1hcmtlcnMgaWYgbmVjZXNzYXJ5XG4gICAgICAgIGNzID0ge307XG4gICAgICAgIGNzW2RpcmVjdGlvbi5hXSA9IFwiKz1cIiArIG9mZnNldDtcbiAgICAgICAgcGlubmVkQ29udGFpbmVyICYmIChjc1tkaXJlY3Rpb24ucF0gPSBcIi09XCIgKyBzY3JvbGxGdW5jKCkpO1xuICAgICAgICBnc2FwLnNldChbbWFya2VyU3RhcnQsIG1hcmtlckVuZF0sIGNzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHBpbiAmJiAhKF9jbGFtcGluZ01heCAmJiBzZWxmLmVuZCA+PSBfbWF4U2Nyb2xsKHNjcm9sbGVyLCBkaXJlY3Rpb24pKSkge1xuICAgICAgICBjcyA9IF9nZXRDb21wdXRlZFN0eWxlKHBpbik7XG4gICAgICAgIGlzVmVydGljYWwgPSBkaXJlY3Rpb24gPT09IF92ZXJ0aWNhbDtcbiAgICAgICAgc2Nyb2xsID0gc2Nyb2xsRnVuYygpOyAvLyByZWNhbGN1bGF0ZSBiZWNhdXNlIHRoZSB0cmlnZ2VycyBjYW4gYWZmZWN0IHRoZSBzY3JvbGxcblxuICAgICAgICBwaW5TdGFydCA9IHBhcnNlRmxvYXQocGluR2V0dGVyKGRpcmVjdGlvbi5hKSkgKyBvdGhlclBpbk9mZnNldDtcblxuICAgICAgICBpZiAoIW1heCAmJiBlbmQgPiAxKSB7XG4gICAgICAgICAgLy8gbWFrZXMgc3VyZSB0aGUgc2Nyb2xsZXIgaGFzIGEgc2Nyb2xsYmFyLCBvdGhlcndpc2UgaWYgc29tZXRoaW5nIGhhcyB3aWR0aDogMTAwJSwgZm9yIGV4YW1wbGUsIGl0IHdvdWxkIGJlIHRvbyBiaWcgKGV4Y2x1ZGUgdGhlIHNjcm9sbGJhcikuIFNlZSBodHRwczovL2dzYXAuY29tL2ZvcnVtcy90b3BpYy8yNTE4Mi1zY3JvbGx0cmlnZ2VyLXdpZHRoLW9mLXBhZ2UtaW5jcmVhc2Utd2hlcmUtbWFya2Vycy1hcmUtc2V0LXRvLWZhbHNlL1xuICAgICAgICAgIGZvcmNlZE92ZXJmbG93ID0gKGlzVmlld3BvcnQgPyBfZG9jLnNjcm9sbGluZ0VsZW1lbnQgfHwgX2RvY0VsIDogc2Nyb2xsZXIpLnN0eWxlO1xuICAgICAgICAgIGZvcmNlZE92ZXJmbG93ID0ge1xuICAgICAgICAgICAgc3R5bGU6IGZvcmNlZE92ZXJmbG93LFxuICAgICAgICAgICAgdmFsdWU6IGZvcmNlZE92ZXJmbG93W1wib3ZlcmZsb3dcIiArIGRpcmVjdGlvbi5hLnRvVXBwZXJDYXNlKCldXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChpc1ZpZXdwb3J0ICYmIF9nZXRDb21wdXRlZFN0eWxlKF9ib2R5KVtcIm92ZXJmbG93XCIgKyBkaXJlY3Rpb24uYS50b1VwcGVyQ2FzZSgpXSAhPT0gXCJzY3JvbGxcIikge1xuICAgICAgICAgICAgLy8gYXZvaWQgYW4gZXh0cmEgc2Nyb2xsYmFyIGlmIEJPVEggPGh0bWw+IGFuZCA8Ym9keT4gaGF2ZSBvdmVyZmxvdyBzZXQgdG8gXCJzY3JvbGxcIlxuICAgICAgICAgICAgZm9yY2VkT3ZlcmZsb3cuc3R5bGVbXCJvdmVyZmxvd1wiICsgZGlyZWN0aW9uLmEudG9VcHBlckNhc2UoKV0gPSBcInNjcm9sbFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF9zd2FwUGluSW4ocGluLCBzcGFjZXIsIGNzKTtcblxuICAgICAgICBwaW5TdGF0ZSA9IF9nZXRTdGF0ZShwaW4pOyAvLyB0cmFuc2Zvcm1zIHdpbGwgaW50ZXJmZXJlIHdpdGggdGhlIHRvcC9sZWZ0L3JpZ2h0L2JvdHRvbSBwbGFjZW1lbnQsIHNvIHJlbW92ZSB0aGVtIHRlbXBvcmFyaWx5LiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSBmYWN0b3JzIGluIHRyYW5zZm9ybXMuXG5cbiAgICAgICAgYm91bmRzID0gX2dldEJvdW5kcyhwaW4sIHRydWUpO1xuICAgICAgICBvcHBvc2l0ZVNjcm9sbCA9IHVzZUZpeGVkUG9zaXRpb24gJiYgX2dldFNjcm9sbEZ1bmMoc2Nyb2xsZXIsIGlzVmVydGljYWwgPyBfaG9yaXpvbnRhbCA6IF92ZXJ0aWNhbCkoKTtcblxuICAgICAgICBpZiAocGluU3BhY2luZykge1xuICAgICAgICAgIHNwYWNlclN0YXRlID0gW3BpblNwYWNpbmcgKyBkaXJlY3Rpb24ub3MyLCBjaGFuZ2UgKyBvdGhlclBpbk9mZnNldCArIF9weF07XG4gICAgICAgICAgc3BhY2VyU3RhdGUudCA9IHNwYWNlcjtcbiAgICAgICAgICBpID0gcGluU3BhY2luZyA9PT0gX3BhZGRpbmcgPyBfZ2V0U2l6ZShwaW4sIGRpcmVjdGlvbikgKyBjaGFuZ2UgKyBvdGhlclBpbk9mZnNldCA6IDA7XG5cbiAgICAgICAgICBpZiAoaSkge1xuICAgICAgICAgICAgc3BhY2VyU3RhdGUucHVzaChkaXJlY3Rpb24uZCwgaSArIF9weCk7IC8vIGZvciBib3gtc2l6aW5nOiBib3JkZXItYm94IChtdXN0IGluY2x1ZGUgcGFkZGluZykuXG5cbiAgICAgICAgICAgIHNwYWNlci5zdHlsZS5mbGV4QmFzaXMgIT09IFwiYXV0b1wiICYmIChzcGFjZXIuc3R5bGUuZmxleEJhc2lzID0gaSArIF9weCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3NldFN0YXRlKHNwYWNlclN0YXRlKTtcblxuICAgICAgICAgIGlmIChwaW5uZWRDb250YWluZXIpIHtcbiAgICAgICAgICAgIC8vIGluIFNjcm9sbFRyaWdnZXIucmVmcmVzaCgpLCB3ZSBuZWVkIHRvIHJlLWV2YWx1YXRlIHRoZSBwaW5Db250YWluZXIncyBzaXplIGJlY2F1c2UgdGhpcyBwaW5TcGFjaW5nIG1heSBzdHJldGNoIGl0IG91dCwgYnV0IHdlIGNhbid0IGp1c3QgYWRkIHRoZSBleGFjdCBkaXN0YW5jZSBiZWNhdXNlIGRlcGVuZGluZyBvbiBsYXlvdXQsIGl0IG1heSBub3QgcHVzaCB0aGluZ3MgZG93biBvciBpdCBtYXkgb25seSBkbyBzbyBwYXJ0aWFsbHkuXG4gICAgICAgICAgICBfdHJpZ2dlcnMuZm9yRWFjaChmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICBpZiAodC5waW4gPT09IHBpbm5lZENvbnRhaW5lciAmJiB0LnZhcnMucGluU3BhY2luZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0Ll9zdWJQaW5PZmZzZXQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1c2VGaXhlZFBvc2l0aW9uICYmIHNjcm9sbEZ1bmMocHJldlNjcm9sbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaSA9IF9nZXRTaXplKHBpbiwgZGlyZWN0aW9uKTtcbiAgICAgICAgICBpICYmIHNwYWNlci5zdHlsZS5mbGV4QmFzaXMgIT09IFwiYXV0b1wiICYmIChzcGFjZXIuc3R5bGUuZmxleEJhc2lzID0gaSArIF9weCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXNlRml4ZWRQb3NpdGlvbikge1xuICAgICAgICAgIG92ZXJyaWRlID0ge1xuICAgICAgICAgICAgdG9wOiBib3VuZHMudG9wICsgKGlzVmVydGljYWwgPyBzY3JvbGwgLSBzdGFydCA6IG9wcG9zaXRlU2Nyb2xsKSArIF9weCxcbiAgICAgICAgICAgIGxlZnQ6IGJvdW5kcy5sZWZ0ICsgKGlzVmVydGljYWwgPyBvcHBvc2l0ZVNjcm9sbCA6IHNjcm9sbCAtIHN0YXJ0KSArIF9weCxcbiAgICAgICAgICAgIGJveFNpemluZzogXCJib3JkZXItYm94XCIsXG4gICAgICAgICAgICBwb3NpdGlvbjogXCJmaXhlZFwiXG4gICAgICAgICAgfTtcbiAgICAgICAgICBvdmVycmlkZVtfd2lkdGhdID0gb3ZlcnJpZGVbXCJtYXhcIiArIF9XaWR0aF0gPSBNYXRoLmNlaWwoYm91bmRzLndpZHRoKSArIF9weDtcbiAgICAgICAgICBvdmVycmlkZVtfaGVpZ2h0XSA9IG92ZXJyaWRlW1wibWF4XCIgKyBfSGVpZ2h0XSA9IE1hdGguY2VpbChib3VuZHMuaGVpZ2h0KSArIF9weDtcbiAgICAgICAgICBvdmVycmlkZVtfbWFyZ2luXSA9IG92ZXJyaWRlW19tYXJnaW4gKyBfVG9wXSA9IG92ZXJyaWRlW19tYXJnaW4gKyBfUmlnaHRdID0gb3ZlcnJpZGVbX21hcmdpbiArIF9Cb3R0b21dID0gb3ZlcnJpZGVbX21hcmdpbiArIF9MZWZ0XSA9IFwiMFwiO1xuICAgICAgICAgIG92ZXJyaWRlW19wYWRkaW5nXSA9IGNzW19wYWRkaW5nXTtcbiAgICAgICAgICBvdmVycmlkZVtfcGFkZGluZyArIF9Ub3BdID0gY3NbX3BhZGRpbmcgKyBfVG9wXTtcbiAgICAgICAgICBvdmVycmlkZVtfcGFkZGluZyArIF9SaWdodF0gPSBjc1tfcGFkZGluZyArIF9SaWdodF07XG4gICAgICAgICAgb3ZlcnJpZGVbX3BhZGRpbmcgKyBfQm90dG9tXSA9IGNzW19wYWRkaW5nICsgX0JvdHRvbV07XG4gICAgICAgICAgb3ZlcnJpZGVbX3BhZGRpbmcgKyBfTGVmdF0gPSBjc1tfcGFkZGluZyArIF9MZWZ0XTtcbiAgICAgICAgICBwaW5BY3RpdmVTdGF0ZSA9IF9jb3B5U3RhdGUocGluT3JpZ2luYWxTdGF0ZSwgb3ZlcnJpZGUsIHBpblJlcGFyZW50KTtcbiAgICAgICAgICBfcmVmcmVzaGluZ0FsbCAmJiBzY3JvbGxGdW5jKDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFuaW1hdGlvbikge1xuICAgICAgICAgIC8vIHRoZSBhbmltYXRpb24gbWlnaHQgYmUgYWZmZWN0aW5nIHRoZSB0cmFuc2Zvcm0sIHNvIHdlIG11c3QganVtcCB0byB0aGUgZW5kLCBjaGVjayB0aGUgdmFsdWUsIGFuZCBjb21wZW5zYXRlIGFjY29yZGluZ2x5LiBPdGhlcndpc2UsIHdoZW4gaXQgYmVjb21lcyB1bnBpbm5lZCwgdGhlIHBpblNldHRlcigpIHdpbGwgZ2V0IHNldCB0byBhIHZhbHVlIHRoYXQgZG9lc24ndCBpbmNsdWRlIHdoYXRldmVyIHRoZSBhbmltYXRpb24gZGlkLlxuICAgICAgICAgIGluaXR0ZWQgPSBhbmltYXRpb24uX2luaXR0ZWQ7IC8vIGlmIG5vdCwgd2UgbXVzdCBpbnZhbGlkYXRlKCkgYWZ0ZXIgdGhpcyBzdGVwLCBvdGhlcndpc2UgaXQgY291bGQgbG9jayBpbiBzdGFydGluZyB2YWx1ZXMgcHJlbWF0dXJlbHkuXG5cbiAgICAgICAgICBfc3VwcHJlc3NPdmVyd3JpdGVzKDEpO1xuXG4gICAgICAgICAgYW5pbWF0aW9uLnJlbmRlcihhbmltYXRpb24uZHVyYXRpb24oKSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgcGluQ2hhbmdlID0gcGluR2V0dGVyKGRpcmVjdGlvbi5hKSAtIHBpblN0YXJ0ICsgY2hhbmdlICsgb3RoZXJQaW5PZmZzZXQ7XG4gICAgICAgICAgcGluTW92ZXMgPSBNYXRoLmFicyhjaGFuZ2UgLSBwaW5DaGFuZ2UpID4gMTtcbiAgICAgICAgICB1c2VGaXhlZFBvc2l0aW9uICYmIHBpbk1vdmVzICYmIHBpbkFjdGl2ZVN0YXRlLnNwbGljZShwaW5BY3RpdmVTdGF0ZS5sZW5ndGggLSAyLCAyKTsgLy8gdHJhbnNmb3JtIGlzIHRoZSBsYXN0IHByb3BlcnR5L3ZhbHVlIHNldCBpbiB0aGUgc3RhdGUgQXJyYXkuIFNpbmNlIHRoZSBhbmltYXRpb24gaXMgY29udHJvbGxpbmcgdGhhdCwgd2Ugc2hvdWxkIG9taXQgaXQuXG5cbiAgICAgICAgICBhbmltYXRpb24ucmVuZGVyKDAsIHRydWUsIHRydWUpO1xuICAgICAgICAgIGluaXR0ZWQgfHwgYW5pbWF0aW9uLmludmFsaWRhdGUodHJ1ZSk7XG4gICAgICAgICAgYW5pbWF0aW9uLnBhcmVudCB8fCBhbmltYXRpb24udG90YWxUaW1lKGFuaW1hdGlvbi50b3RhbFRpbWUoKSk7IC8vIGlmLCBmb3IgZXhhbXBsZSwgYSB0b2dnbGVBY3Rpb24gY2FsbGVkIHBsYXkoKSBhbmQgdGhlbiByZWZyZXNoKCkgaGFwcGVucyBhbmQgd2hlbiB3ZSByZW5kZXIoMSkgYWJvdmUsIGl0IHdvdWxkIGNhdXNlIHRoZSBhbmltYXRpb24gdG8gY29tcGxldGUgYW5kIGdldCByZW1vdmVkIGZyb20gaXRzIHBhcmVudCwgc28gdGhpcyBtYWtlcyBzdXJlIGl0IGdldHMgcHV0IGJhY2sgaW4uXG5cbiAgICAgICAgICBfc3VwcHJlc3NPdmVyd3JpdGVzKDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBpbkNoYW5nZSA9IGNoYW5nZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcmNlZE92ZXJmbG93ICYmIChmb3JjZWRPdmVyZmxvdy52YWx1ZSA/IGZvcmNlZE92ZXJmbG93LnN0eWxlW1wib3ZlcmZsb3dcIiArIGRpcmVjdGlvbi5hLnRvVXBwZXJDYXNlKCldID0gZm9yY2VkT3ZlcmZsb3cudmFsdWUgOiBmb3JjZWRPdmVyZmxvdy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcIm92ZXJmbG93LVwiICsgZGlyZWN0aW9uLmEpKTtcbiAgICAgIH0gZWxzZSBpZiAodHJpZ2dlciAmJiBzY3JvbGxGdW5jKCkgJiYgIWNvbnRhaW5lckFuaW1hdGlvbikge1xuICAgICAgICAvLyBpdCBtYXkgYmUgSU5TSURFIGEgcGlubmVkIGVsZW1lbnQsIHNvIHdhbGsgdXAgdGhlIHRyZWUgYW5kIGxvb2sgZm9yIGFueSBlbGVtZW50cyB3aXRoIF9waW5PZmZzZXQgdG8gY29tcGVuc2F0ZSBiZWNhdXNlIGFueXRoaW5nIHdpdGggcGluU3BhY2luZyB0aGF0J3MgYWxyZWFkeSBzY3JvbGxlZCB3b3VsZCB0aHJvdyBvZmYgdGhlIG1lYXN1cmVtZW50cyBpbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBib3VuZHMgPSB0cmlnZ2VyLnBhcmVudE5vZGU7XG5cbiAgICAgICAgd2hpbGUgKGJvdW5kcyAmJiBib3VuZHMgIT09IF9ib2R5KSB7XG4gICAgICAgICAgaWYgKGJvdW5kcy5fcGluT2Zmc2V0KSB7XG4gICAgICAgICAgICBzdGFydCAtPSBib3VuZHMuX3Bpbk9mZnNldDtcbiAgICAgICAgICAgIGVuZCAtPSBib3VuZHMuX3Bpbk9mZnNldDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBib3VuZHMgPSBib3VuZHMucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXZlcnRlZFBpbnMgJiYgcmV2ZXJ0ZWRQaW5zLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQucmV2ZXJ0KGZhbHNlLCB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgc2VsZi5zdGFydCA9IHN0YXJ0O1xuICAgICAgc2VsZi5lbmQgPSBlbmQ7XG4gICAgICBzY3JvbGwxID0gc2Nyb2xsMiA9IF9yZWZyZXNoaW5nQWxsID8gcHJldlNjcm9sbCA6IHNjcm9sbEZ1bmMoKTsgLy8gcmVzZXQgdmVsb2NpdHlcblxuICAgICAgaWYgKCFjb250YWluZXJBbmltYXRpb24gJiYgIV9yZWZyZXNoaW5nQWxsKSB7XG4gICAgICAgIHNjcm9sbDEgPCBwcmV2U2Nyb2xsICYmIHNjcm9sbEZ1bmMocHJldlNjcm9sbCk7XG4gICAgICAgIHNlbGYuc2Nyb2xsLnJlYyA9IDA7XG4gICAgICB9XG5cbiAgICAgIHNlbGYucmV2ZXJ0KGZhbHNlLCB0cnVlKTtcbiAgICAgIGxhc3RSZWZyZXNoID0gX2dldFRpbWUoKTtcblxuICAgICAgaWYgKHNuYXBEZWxheWVkQ2FsbCkge1xuICAgICAgICBsYXN0U25hcCA9IC0xOyAvLyBqdXN0IHNvIHNuYXBwaW5nIGdldHMgcmUtZW5hYmxlZCwgY2xlYXIgb3V0IGFueSByZWNvcmRlZCBsYXN0IHZhbHVlXG4gICAgICAgIC8vIHNlbGYuaXNBY3RpdmUgJiYgc2Nyb2xsRnVuYyhzdGFydCArIGNoYW5nZSAqIHByZXZQcm9ncmVzcyk7IC8vIHByZXZpb3VzbHkgdGhpcyBsaW5lIHdhcyBoZXJlIHRvIGVuc3VyZSB0aGF0IHdoZW4gc25hcHBpbmcga2lja3MgaW4sIGl0J3MgZnJvbSB0aGUgcHJldmlvdXMgcHJvZ3Jlc3MgYnV0IGluIHNvbWUgY2FzZXMgdGhhdCdzIG5vdCBkZXNpcmFibGUsIGxpa2UgYW4gYWxsLXBhZ2UgU2Nyb2xsVHJpZ2dlciB3aGVuIG5ldyBjb250ZW50IGdldHMgYWRkZWQgdG8gdGhlIHBhZ2UsIHRoYXQnZCB0b3RhbGx5IGNoYW5nZSB0aGUgcHJvZ3Jlc3MuXG5cbiAgICAgICAgc25hcERlbGF5ZWRDYWxsLnJlc3RhcnQodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIF9yZWZyZXNoaW5nID0gMDtcbiAgICAgIGFuaW1hdGlvbiAmJiBpc1RvZ2dsZSAmJiAoYW5pbWF0aW9uLl9pbml0dGVkIHx8IHByZXZBbmltUHJvZ3Jlc3MpICYmIGFuaW1hdGlvbi5wcm9ncmVzcygpICE9PSBwcmV2QW5pbVByb2dyZXNzICYmIGFuaW1hdGlvbi5wcm9ncmVzcyhwcmV2QW5pbVByb2dyZXNzIHx8IDAsIHRydWUpLnJlbmRlcihhbmltYXRpb24udGltZSgpLCB0cnVlLCB0cnVlKTsgLy8gbXVzdCBmb3JjZSBhIHJlLXJlbmRlciBiZWNhdXNlIGlmIHNhdmVTdHlsZXMoKSB3YXMgdXNlZCBvbiB0aGUgdGFyZ2V0KHMpLCB0aGUgc3R5bGVzIGNvdWxkIGhhdmUgYmVlbiB3aXBlZCBvdXQgZHVyaW5nIHRoZSByZWZyZXNoKCkuXG5cbiAgICAgIGlmIChpc0ZpcnN0UmVmcmVzaCB8fCBwcmV2UHJvZ3Jlc3MgIT09IHNlbGYucHJvZ3Jlc3MgfHwgY29udGFpbmVyQW5pbWF0aW9uIHx8IGludmFsaWRhdGVPblJlZnJlc2ggfHwgYW5pbWF0aW9uICYmICFhbmltYXRpb24uX2luaXR0ZWQpIHtcbiAgICAgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBkaXJlY3Rpb24gaXMgc2V0IHByb3Blcmx5ICh3aGVuIHJlZnJlc2hpbmcsIHByb2dyZXNzIGlzIHNldCBiYWNrIHRvIDAgaW5pdGlhbGx5LCB0aGVuIGJhY2sgYWdhaW4gdG8gd2hlcmV2ZXIgaXQgbmVlZHMgdG8gYmUpIGFuZCB0aGF0IGNhbGxiYWNrcyBhcmUgdHJpZ2dlcmVkLlxuICAgICAgICBhbmltYXRpb24gJiYgIWlzVG9nZ2xlICYmIGFuaW1hdGlvbi50b3RhbFByb2dyZXNzKGNvbnRhaW5lckFuaW1hdGlvbiAmJiBzdGFydCA8IC0wLjAwMSAmJiAhcHJldlByb2dyZXNzID8gZ3NhcC51dGlscy5ub3JtYWxpemUoc3RhcnQsIGVuZCwgMCkgOiBwcmV2UHJvZ3Jlc3MsIHRydWUpOyAvLyB0byBhdm9pZCBpc3N1ZXMgd2hlcmUgYW5pbWF0aW9uIGNhbGxiYWNrcyBsaWtlIG9uU3RhcnQgYXJlbid0IHRyaWdnZXJlZC5cblxuICAgICAgICBzZWxmLnByb2dyZXNzID0gaXNGaXJzdFJlZnJlc2ggfHwgKHNjcm9sbDEgLSBzdGFydCkgLyBjaGFuZ2UgPT09IHByZXZQcm9ncmVzcyA/IDAgOiBwcmV2UHJvZ3Jlc3M7XG4gICAgICB9XG5cbiAgICAgIHBpbiAmJiBwaW5TcGFjaW5nICYmIChzcGFjZXIuX3Bpbk9mZnNldCA9IE1hdGgucm91bmQoc2VsZi5wcm9ncmVzcyAqIHBpbkNoYW5nZSkpO1xuICAgICAgc2NydWJUd2VlbiAmJiBzY3J1YlR3ZWVuLmludmFsaWRhdGUoKTtcblxuICAgICAgaWYgKCFpc05hTihtYXJrZXJTdGFydE9mZnNldCkpIHtcbiAgICAgICAgLy8gbnVtYmVycyB3ZXJlIHBhc3NlZCBpbiBmb3IgdGhlIHBvc2l0aW9uIHdoaWNoIGFyZSBhYnNvbHV0ZSwgc28gaW5zdGVhZCBvZiBqdXN0IHB1dHRpbmcgdGhlIG1hcmtlcnMgYXQgdGhlIHZlcnkgYm90dG9tIG9mIHRoZSB2aWV3cG9ydCwgd2UgZmlndXJlIG91dCBob3cgZmFyIHRoZXkgc2hpZnRlZCBkb3duIChpdCdzIHNhZmUgdG8gYXNzdW1lIHRoZXkgd2VyZSBvcmlnaW5hbGx5IHBvc2l0aW9uZWQgaW4gY2xvc2VyIHJlbGF0aW9uIHRvIHRoZSB0cmlnZ2VyIGVsZW1lbnQgd2l0aCB2YWx1ZXMgbGlrZSBcInRvcFwiLCBcImNlbnRlclwiLCBhIHBlcmNlbnRhZ2Ugb3Igd2hhdGV2ZXIsIHNvIHdlIG9mZnNldCB0aGF0IG11Y2ggaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbiB0byBiYXNpY2FsbHkgcmV2ZXJ0IHRoZW0gdG8gdGhlIHJlbGF0aXZlIHBvc2l0aW9uIHRoeSB3ZXJlIGF0IHByZXZpb3VzbHkuXG4gICAgICAgIG1hcmtlclN0YXJ0T2Zmc2V0IC09IGdzYXAuZ2V0UHJvcGVydHkobWFya2VyU3RhcnRUcmlnZ2VyLCBkaXJlY3Rpb24ucCk7XG4gICAgICAgIG1hcmtlckVuZE9mZnNldCAtPSBnc2FwLmdldFByb3BlcnR5KG1hcmtlckVuZFRyaWdnZXIsIGRpcmVjdGlvbi5wKTtcblxuICAgICAgICBfc2hpZnRNYXJrZXIobWFya2VyU3RhcnRUcmlnZ2VyLCBkaXJlY3Rpb24sIG1hcmtlclN0YXJ0T2Zmc2V0KTtcblxuICAgICAgICBfc2hpZnRNYXJrZXIobWFya2VyU3RhcnQsIGRpcmVjdGlvbiwgbWFya2VyU3RhcnRPZmZzZXQgLSAocGluT2Zmc2V0IHx8IDApKTtcblxuICAgICAgICBfc2hpZnRNYXJrZXIobWFya2VyRW5kVHJpZ2dlciwgZGlyZWN0aW9uLCBtYXJrZXJFbmRPZmZzZXQpO1xuXG4gICAgICAgIF9zaGlmdE1hcmtlcihtYXJrZXJFbmQsIGRpcmVjdGlvbiwgbWFya2VyRW5kT2Zmc2V0IC0gKHBpbk9mZnNldCB8fCAwKSk7XG4gICAgICB9XG5cbiAgICAgIGlzRmlyc3RSZWZyZXNoICYmICFfcmVmcmVzaGluZ0FsbCAmJiBzZWxmLnVwZGF0ZSgpOyAvLyBlZGdlIGNhc2UgLSB3aGVuIHlvdSByZWxvYWQgYSBwYWdlIHdoZW4gaXQncyBhbHJlYWR5IHNjcm9sbGVkIGRvd24sIHNvbWUgYnJvd3NlcnMgZmlyZSBhIFwic2Nyb2xsXCIgZXZlbnQgYmVmb3JlIERPTUNvbnRlbnRMb2FkZWQsIHRyaWdnZXJpbmcgYW4gdXBkYXRlQWxsKCkuIElmIHdlIGRvbid0IHVwZGF0ZSB0aGUgc2VsZi5wcm9ncmVzcyBhcyBwYXJ0IG9mIHJlZnJlc2goKSwgdGhlbiB3aGVuIGl0IGhhcHBlbnMgbmV4dCwgaXQgbWF5IHJlY29yZCBwcmV2UHJvZ3Jlc3MgYXMgMCB3aGVuIGl0IHJlYWxseSBzaG91bGRuJ3QsIHBvdGVudGlhbGx5IGNhdXNpbmcgYSBjYWxsYmFjayBpbiBhbiBhbmltYXRpb24gdG8gZmlyZSBhZ2Fpbi5cblxuICAgICAgaWYgKG9uUmVmcmVzaCAmJiAhX3JlZnJlc2hpbmdBbGwgJiYgIWV4ZWN1dGluZ09uUmVmcmVzaCkge1xuICAgICAgICAvLyB3aGVuIHJlZnJlc2hpbmcgYWxsLCB3ZSBkbyBleHRyYSB3b3JrIHRvIGNvcnJlY3QgcGlubmVkQ29udGFpbmVyIHNpemVzIGFuZCBlbnN1cmUgdGhpbmdzIGRvbid0IGV4Y2VlZCB0aGUgbWF4U2Nyb2xsLCBzbyB3ZSBzaG91bGQgZG8gYWxsIHRoZSByZWZyZXNoZXMgYXQgdGhlIGVuZCBhZnRlciBhbGwgdGhhdCB3b3JrIHNvIHRoYXQgdGhlIHN0YXJ0L2VuZCB2YWx1ZXMgYXJlIGNvcnJlY3RlZC5cbiAgICAgICAgZXhlY3V0aW5nT25SZWZyZXNoID0gdHJ1ZTtcbiAgICAgICAgb25SZWZyZXNoKHNlbGYpO1xuICAgICAgICBleGVjdXRpbmdPblJlZnJlc2ggPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc2VsZi5nZXRWZWxvY2l0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiAoc2Nyb2xsRnVuYygpIC0gc2Nyb2xsMikgLyAoX2dldFRpbWUoKSAtIF90aW1lMikgKiAxMDAwIHx8IDA7XG4gICAgfTtcblxuICAgIHNlbGYuZW5kQW5pbWF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgX2VuZEFuaW1hdGlvbihzZWxmLmNhbGxiYWNrQW5pbWF0aW9uKTtcblxuICAgICAgaWYgKGFuaW1hdGlvbikge1xuICAgICAgICBzY3J1YlR3ZWVuID8gc2NydWJUd2Vlbi5wcm9ncmVzcygxKSA6ICFhbmltYXRpb24ucGF1c2VkKCkgPyBfZW5kQW5pbWF0aW9uKGFuaW1hdGlvbiwgYW5pbWF0aW9uLnJldmVyc2VkKCkpIDogaXNUb2dnbGUgfHwgX2VuZEFuaW1hdGlvbihhbmltYXRpb24sIHNlbGYuZGlyZWN0aW9uIDwgMCwgMSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHNlbGYubGFiZWxUb1Njcm9sbCA9IGZ1bmN0aW9uIChsYWJlbCkge1xuICAgICAgcmV0dXJuIGFuaW1hdGlvbiAmJiBhbmltYXRpb24ubGFiZWxzICYmIChzdGFydCB8fCBzZWxmLnJlZnJlc2goKSB8fCBzdGFydCkgKyBhbmltYXRpb24ubGFiZWxzW2xhYmVsXSAvIGFuaW1hdGlvbi5kdXJhdGlvbigpICogY2hhbmdlIHx8IDA7XG4gICAgfTtcblxuICAgIHNlbGYuZ2V0VHJhaWxpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIGkgPSBfdHJpZ2dlcnMuaW5kZXhPZihzZWxmKSxcbiAgICAgICAgICBhID0gc2VsZi5kaXJlY3Rpb24gPiAwID8gX3RyaWdnZXJzLnNsaWNlKDAsIGkpLnJldmVyc2UoKSA6IF90cmlnZ2Vycy5zbGljZShpICsgMSk7XG5cbiAgICAgIHJldHVybiAoX2lzU3RyaW5nKG5hbWUpID8gYS5maWx0ZXIoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQudmFycy5wcmV2ZW50T3ZlcmxhcHMgPT09IG5hbWU7XG4gICAgICB9KSA6IGEpLmZpbHRlcihmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gc2VsZi5kaXJlY3Rpb24gPiAwID8gdC5lbmQgPD0gc3RhcnQgOiB0LnN0YXJ0ID49IGVuZDtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBzZWxmLnVwZGF0ZSA9IGZ1bmN0aW9uIChyZXNldCwgcmVjb3JkVmVsb2NpdHksIGZvcmNlRmFrZSkge1xuICAgICAgaWYgKGNvbnRhaW5lckFuaW1hdGlvbiAmJiAhZm9yY2VGYWtlICYmICFyZXNldCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBzY3JvbGwgPSBfcmVmcmVzaGluZ0FsbCA9PT0gdHJ1ZSA/IHByZXZTY3JvbGwgOiBzZWxmLnNjcm9sbCgpLFxuICAgICAgICAgIHAgPSByZXNldCA/IDAgOiAoc2Nyb2xsIC0gc3RhcnQpIC8gY2hhbmdlLFxuICAgICAgICAgIGNsaXBwZWQgPSBwIDwgMCA/IDAgOiBwID4gMSA/IDEgOiBwIHx8IDAsXG4gICAgICAgICAgcHJldlByb2dyZXNzID0gc2VsZi5wcm9ncmVzcyxcbiAgICAgICAgICBpc0FjdGl2ZSxcbiAgICAgICAgICB3YXNBY3RpdmUsXG4gICAgICAgICAgdG9nZ2xlU3RhdGUsXG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIHN0YXRlQ2hhbmdlZCxcbiAgICAgICAgICB0b2dnbGVkLFxuICAgICAgICAgIGlzQXRNYXgsXG4gICAgICAgICAgaXNUYWtpbmdBY3Rpb247XG5cbiAgICAgIGlmIChyZWNvcmRWZWxvY2l0eSkge1xuICAgICAgICBzY3JvbGwyID0gc2Nyb2xsMTtcbiAgICAgICAgc2Nyb2xsMSA9IGNvbnRhaW5lckFuaW1hdGlvbiA/IHNjcm9sbEZ1bmMoKSA6IHNjcm9sbDtcblxuICAgICAgICBpZiAoc25hcCkge1xuICAgICAgICAgIHNuYXAyID0gc25hcDE7XG4gICAgICAgICAgc25hcDEgPSBhbmltYXRpb24gJiYgIWlzVG9nZ2xlID8gYW5pbWF0aW9uLnRvdGFsUHJvZ3Jlc3MoKSA6IGNsaXBwZWQ7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gYW50aWNpcGF0ZSB0aGUgcGlubmluZyBhIGZldyB0aWNrcyBhaGVhZCBvZiB0aW1lIGJhc2VkIG9uIHZlbG9jaXR5IHRvIGF2b2lkIGEgdmlzdWFsIGdsaXRjaCBkdWUgdG8gdGhlIGZhY3QgdGhhdCBtb3N0IGJyb3dzZXJzIGRvIHNjcm9sbGluZyBvbiBhIHNlcGFyYXRlIHRocmVhZCAobm90IHN5bmNlZCB3aXRoIHJlcXVlc3RBbmltYXRpb25GcmFtZSkuXG5cblxuICAgICAgaWYgKGFudGljaXBhdGVQaW4gJiYgcGluICYmICFfcmVmcmVzaGluZyAmJiAhX3N0YXJ0dXAgJiYgX2xhc3RTY3JvbGxUaW1lKSB7XG4gICAgICAgIGlmICghY2xpcHBlZCAmJiBzdGFydCA8IHNjcm9sbCArIChzY3JvbGwgLSBzY3JvbGwyKSAvIChfZ2V0VGltZSgpIC0gX3RpbWUyKSAqIGFudGljaXBhdGVQaW4pIHtcbiAgICAgICAgICBjbGlwcGVkID0gMC4wMDAxO1xuICAgICAgICB9IGVsc2UgaWYgKGNsaXBwZWQgPT09IDEgJiYgZW5kID4gc2Nyb2xsICsgKHNjcm9sbCAtIHNjcm9sbDIpIC8gKF9nZXRUaW1lKCkgLSBfdGltZTIpICogYW50aWNpcGF0ZVBpbikge1xuICAgICAgICAgIGNsaXBwZWQgPSAwLjk5OTk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNsaXBwZWQgIT09IHByZXZQcm9ncmVzcyAmJiBzZWxmLmVuYWJsZWQpIHtcbiAgICAgICAgaXNBY3RpdmUgPSBzZWxmLmlzQWN0aXZlID0gISFjbGlwcGVkICYmIGNsaXBwZWQgPCAxO1xuICAgICAgICB3YXNBY3RpdmUgPSAhIXByZXZQcm9ncmVzcyAmJiBwcmV2UHJvZ3Jlc3MgPCAxO1xuICAgICAgICB0b2dnbGVkID0gaXNBY3RpdmUgIT09IHdhc0FjdGl2ZTtcbiAgICAgICAgc3RhdGVDaGFuZ2VkID0gdG9nZ2xlZCB8fCAhIWNsaXBwZWQgIT09ICEhcHJldlByb2dyZXNzOyAvLyBjb3VsZCBnbyBmcm9tIHN0YXJ0IGFsbCB0aGUgd2F5IHRvIGVuZCwgdGh1cyBpdCBkaWRuJ3QgdG9nZ2xlIGJ1dCBpdCBkaWQgY2hhbmdlIHN0YXRlIGluIGEgc2Vuc2UgKG1heSBuZWVkIHRvIGZpcmUgYSBjYWxsYmFjaylcblxuICAgICAgICBzZWxmLmRpcmVjdGlvbiA9IGNsaXBwZWQgPiBwcmV2UHJvZ3Jlc3MgPyAxIDogLTE7XG4gICAgICAgIHNlbGYucHJvZ3Jlc3MgPSBjbGlwcGVkO1xuXG4gICAgICAgIGlmIChzdGF0ZUNoYW5nZWQgJiYgIV9yZWZyZXNoaW5nKSB7XG4gICAgICAgICAgdG9nZ2xlU3RhdGUgPSBjbGlwcGVkICYmICFwcmV2UHJvZ3Jlc3MgPyAwIDogY2xpcHBlZCA9PT0gMSA/IDEgOiBwcmV2UHJvZ3Jlc3MgPT09IDEgPyAyIDogMzsgLy8gMCA9IGVudGVyLCAxID0gbGVhdmUsIDIgPSBlbnRlckJhY2ssIDMgPSBsZWF2ZUJhY2sgKHdlIHByaW9yaXRpemUgdGhlIEZJUlNUIGVuY291bnRlciwgdGh1cyBpZiB5b3Ugc2Nyb2xsIHJlYWxseSBmYXN0IHBhc3QgdGhlIG9uRW50ZXIgYW5kIG9uTGVhdmUgaW4gb25lIHRpY2ssIGl0J2QgcHJpb3JpdGl6ZSBvbkVudGVyLlxuXG4gICAgICAgICAgaWYgKGlzVG9nZ2xlKSB7XG4gICAgICAgICAgICBhY3Rpb24gPSAhdG9nZ2xlZCAmJiB0b2dnbGVBY3Rpb25zW3RvZ2dsZVN0YXRlICsgMV0gIT09IFwibm9uZVwiICYmIHRvZ2dsZUFjdGlvbnNbdG9nZ2xlU3RhdGUgKyAxXSB8fCB0b2dnbGVBY3Rpb25zW3RvZ2dsZVN0YXRlXTsgLy8gaWYgaXQgZGlkbid0IHRvZ2dsZSwgdGhhdCBtZWFucyBpdCBzaG90IHJpZ2h0IHBhc3QgYW5kIHNpbmNlIHdlIHByaW9yaXRpemUgdGhlIFwiZW50ZXJcIiBhY3Rpb24sIHdlIHNob3VsZCBzd2l0Y2ggdG8gdGhlIFwibGVhdmVcIiBpbiB0aGlzIGNhc2UgKGJ1dCBvbmx5IGlmIG9uZSBpcyBkZWZpbmVkKVxuXG4gICAgICAgICAgICBpc1Rha2luZ0FjdGlvbiA9IGFuaW1hdGlvbiAmJiAoYWN0aW9uID09PSBcImNvbXBsZXRlXCIgfHwgYWN0aW9uID09PSBcInJlc2V0XCIgfHwgYWN0aW9uIGluIGFuaW1hdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJldmVudE92ZXJsYXBzICYmICh0b2dnbGVkIHx8IGlzVGFraW5nQWN0aW9uKSAmJiAoaXNUYWtpbmdBY3Rpb24gfHwgc2NydWIgfHwgIWFuaW1hdGlvbikgJiYgKF9pc0Z1bmN0aW9uKHByZXZlbnRPdmVybGFwcykgPyBwcmV2ZW50T3ZlcmxhcHMoc2VsZikgOiBzZWxmLmdldFRyYWlsaW5nKHByZXZlbnRPdmVybGFwcykuZm9yRWFjaChmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHJldHVybiB0LmVuZEFuaW1hdGlvbigpO1xuICAgICAgICB9KSk7XG5cbiAgICAgICAgaWYgKCFpc1RvZ2dsZSkge1xuICAgICAgICAgIGlmIChzY3J1YlR3ZWVuICYmICFfcmVmcmVzaGluZyAmJiAhX3N0YXJ0dXApIHtcbiAgICAgICAgICAgIHNjcnViVHdlZW4uX2RwLl90aW1lIC0gc2NydWJUd2Vlbi5fc3RhcnQgIT09IHNjcnViVHdlZW4uX3RpbWUgJiYgc2NydWJUd2Vlbi5yZW5kZXIoc2NydWJUd2Vlbi5fZHAuX3RpbWUgLSBzY3J1YlR3ZWVuLl9zdGFydCk7IC8vIGlmIHRoZXJlJ3MgYSBzY3J1YiBvbiBib3RoIHRoZSBjb250YWluZXIgYW5pbWF0aW9uIGFuZCB0aGlzIG9uZSAob3IgYSBTY3JvbGxTbW9vdGhlciksIHRoZSB1cGRhdGUgb3JkZXIgd291bGQgY2F1c2UgdGhpcyBvbmUgbm90IHRvIGhhdmUgcmVuZGVyZWQgeWV0LCBzbyBpdCB3b3VsZG4ndCBtYWtlIGFueSBwcm9ncmVzcyBiZWZvcmUgd2UgLnJlc3RhcnQoKSBpdCBoZWFkaW5nIHRvd2FyZCB0aGUgbmV3IHByb2dyZXNzIHNvIGl0J2QgYXBwZWFyIHN0dWNrIHRodXMgd2UgZm9yY2UgYSByZW5kZXIgaGVyZS5cblxuICAgICAgICAgICAgaWYgKHNjcnViVHdlZW4ucmVzZXRUbykge1xuICAgICAgICAgICAgICBzY3J1YlR3ZWVuLnJlc2V0VG8oXCJ0b3RhbFByb2dyZXNzXCIsIGNsaXBwZWQsIGFuaW1hdGlvbi5fdFRpbWUgLyBhbmltYXRpb24uX3REdXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gbGVnYWN5IHN1cHBvcnQgKGNvdXJ0ZXN5KSwgYmVmb3JlIDMuMTAuMFxuICAgICAgICAgICAgICBzY3J1YlR3ZWVuLnZhcnMudG90YWxQcm9ncmVzcyA9IGNsaXBwZWQ7XG4gICAgICAgICAgICAgIHNjcnViVHdlZW4uaW52YWxpZGF0ZSgpLnJlc3RhcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGFuaW1hdGlvbikge1xuICAgICAgICAgICAgYW5pbWF0aW9uLnRvdGFsUHJvZ3Jlc3MoY2xpcHBlZCwgISEoX3JlZnJlc2hpbmcgJiYgKGxhc3RSZWZyZXNoIHx8IHJlc2V0KSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwaW4pIHtcbiAgICAgICAgICByZXNldCAmJiBwaW5TcGFjaW5nICYmIChzcGFjZXIuc3R5bGVbcGluU3BhY2luZyArIGRpcmVjdGlvbi5vczJdID0gc3BhY2luZ1N0YXJ0KTtcblxuICAgICAgICAgIGlmICghdXNlRml4ZWRQb3NpdGlvbikge1xuICAgICAgICAgICAgcGluU2V0dGVyKF9yb3VuZChwaW5TdGFydCArIHBpbkNoYW5nZSAqIGNsaXBwZWQpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlQ2hhbmdlZCkge1xuICAgICAgICAgICAgaXNBdE1heCA9ICFyZXNldCAmJiBjbGlwcGVkID4gcHJldlByb2dyZXNzICYmIGVuZCArIDEgPiBzY3JvbGwgJiYgc2Nyb2xsICsgMSA+PSBfbWF4U2Nyb2xsKHNjcm9sbGVyLCBkaXJlY3Rpb24pOyAvLyBpZiBpdCdzIGF0IHRoZSBWRVJZIGVuZCBvZiB0aGUgcGFnZSwgZG9uJ3Qgc3dpdGNoIGF3YXkgZnJvbSBwb3NpdGlvbjogZml4ZWQgYmVjYXVzZSBpdCdzIHBvaW50bGVzcyBhbmQgaXQgY291bGQgY2F1c2UgYSBicmllZiBmbGFzaCB3aGVuIHRoZSB1c2VyIHNjcm9sbHMgYmFjayB1cCAod2hlbiBpdCBnZXRzIHBpbm5lZCBhZ2FpbilcblxuICAgICAgICAgICAgaWYgKHBpblJlcGFyZW50KSB7XG4gICAgICAgICAgICAgIGlmICghcmVzZXQgJiYgKGlzQWN0aXZlIHx8IGlzQXRNYXgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IF9nZXRCb3VuZHMocGluLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgX29mZnNldCA9IHNjcm9sbCAtIHN0YXJ0O1xuXG4gICAgICAgICAgICAgICAgX3JlcGFyZW50KHBpbiwgX2JvZHksIGJvdW5kcy50b3AgKyAoZGlyZWN0aW9uID09PSBfdmVydGljYWwgPyBfb2Zmc2V0IDogMCkgKyBfcHgsIGJvdW5kcy5sZWZ0ICsgKGRpcmVjdGlvbiA9PT0gX3ZlcnRpY2FsID8gMCA6IF9vZmZzZXQpICsgX3B4KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfcmVwYXJlbnQocGluLCBzcGFjZXIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF9zZXRTdGF0ZShpc0FjdGl2ZSB8fCBpc0F0TWF4ID8gcGluQWN0aXZlU3RhdGUgOiBwaW5TdGF0ZSk7XG5cbiAgICAgICAgICAgIHBpbk1vdmVzICYmIGNsaXBwZWQgPCAxICYmIGlzQWN0aXZlIHx8IHBpblNldHRlcihwaW5TdGFydCArIChjbGlwcGVkID09PSAxICYmICFpc0F0TWF4ID8gcGluQ2hhbmdlIDogMCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNuYXAgJiYgIXR3ZWVuVG8udHdlZW4gJiYgIV9yZWZyZXNoaW5nICYmICFfc3RhcnR1cCAmJiBzbmFwRGVsYXllZENhbGwucmVzdGFydCh0cnVlKTtcbiAgICAgICAgdG9nZ2xlQ2xhc3MgJiYgKHRvZ2dsZWQgfHwgb25jZSAmJiBjbGlwcGVkICYmIChjbGlwcGVkIDwgMSB8fCAhX2xpbWl0Q2FsbGJhY2tzKSkgJiYgX3RvQXJyYXkodG9nZ2xlQ2xhc3MudGFyZ2V0cykuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICByZXR1cm4gZWwuY2xhc3NMaXN0W2lzQWN0aXZlIHx8IG9uY2UgPyBcImFkZFwiIDogXCJyZW1vdmVcIl0odG9nZ2xlQ2xhc3MuY2xhc3NOYW1lKTtcbiAgICAgICAgfSk7IC8vIGNsYXNzZXMgY291bGQgYWZmZWN0IHBvc2l0aW9uaW5nLCBzbyBkbyBpdCBldmVuIGlmIHJlc2V0IG9yIHJlZnJlc2hpbmcgaXMgdHJ1ZS5cblxuICAgICAgICBvblVwZGF0ZSAmJiAhaXNUb2dnbGUgJiYgIXJlc2V0ICYmIG9uVXBkYXRlKHNlbGYpO1xuXG4gICAgICAgIGlmIChzdGF0ZUNoYW5nZWQgJiYgIV9yZWZyZXNoaW5nKSB7XG4gICAgICAgICAgaWYgKGlzVG9nZ2xlKSB7XG4gICAgICAgICAgICBpZiAoaXNUYWtpbmdBY3Rpb24pIHtcbiAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gXCJjb21wbGV0ZVwiKSB7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uLnBhdXNlKCkudG90YWxQcm9ncmVzcygxKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09IFwicmVzZXRcIikge1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbi5yZXN0YXJ0KHRydWUpLnBhdXNlKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSBcInJlc3RhcnRcIikge1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbi5yZXN0YXJ0KHRydWUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvblthY3Rpb25dKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb25VcGRhdGUgJiYgb25VcGRhdGUoc2VsZik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRvZ2dsZWQgfHwgIV9saW1pdENhbGxiYWNrcykge1xuICAgICAgICAgICAgLy8gb24gc3RhcnR1cCwgdGhlIHBhZ2UgY291bGQgYmUgc2Nyb2xsZWQgYW5kIHdlIGRvbid0IHdhbnQgdG8gZmlyZSBjYWxsYmFja3MgdGhhdCBkaWRuJ3QgdG9nZ2xlLiBGb3IgZXhhbXBsZSBvbkVudGVyIHNob3VsZG4ndCBmaXJlIGlmIHRoZSBTY3JvbGxUcmlnZ2VyIGlzbid0IGFjdHVhbGx5IGVudGVyZWQuXG4gICAgICAgICAgICBvblRvZ2dsZSAmJiB0b2dnbGVkICYmIF9jYWxsYmFjayhzZWxmLCBvblRvZ2dsZSk7XG4gICAgICAgICAgICBjYWxsYmFja3NbdG9nZ2xlU3RhdGVdICYmIF9jYWxsYmFjayhzZWxmLCBjYWxsYmFja3NbdG9nZ2xlU3RhdGVdKTtcbiAgICAgICAgICAgIG9uY2UgJiYgKGNsaXBwZWQgPT09IDEgPyBzZWxmLmtpbGwoZmFsc2UsIDEpIDogY2FsbGJhY2tzW3RvZ2dsZVN0YXRlXSA9IDApOyAvLyBhIGNhbGxiYWNrIHNob3VsZG4ndCBiZSBjYWxsZWQgYWdhaW4gaWYgb25jZSBpcyB0cnVlLlxuXG4gICAgICAgICAgICBpZiAoIXRvZ2dsZWQpIHtcbiAgICAgICAgICAgICAgLy8gaXQncyBwb3NzaWJsZSB0byBnbyBjb21wbGV0ZWx5IHBhc3QsIGxpa2UgZnJvbSBiZWZvcmUgdGhlIHN0YXJ0IHRvIGFmdGVyIHRoZSBlbmQgKG9yIHZpY2UtdmVyc2EpIGluIHdoaWNoIGNhc2UgQk9USCBjYWxsYmFja3Mgc2hvdWxkIGJlIGZpcmVkIGluIHRoYXQgb3JkZXJcbiAgICAgICAgICAgICAgdG9nZ2xlU3RhdGUgPSBjbGlwcGVkID09PSAxID8gMSA6IDM7XG4gICAgICAgICAgICAgIGNhbGxiYWNrc1t0b2dnbGVTdGF0ZV0gJiYgX2NhbGxiYWNrKHNlbGYsIGNhbGxiYWNrc1t0b2dnbGVTdGF0ZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChmYXN0U2Nyb2xsRW5kICYmICFpc0FjdGl2ZSAmJiBNYXRoLmFicyhzZWxmLmdldFZlbG9jaXR5KCkpID4gKF9pc051bWJlcihmYXN0U2Nyb2xsRW5kKSA/IGZhc3RTY3JvbGxFbmQgOiAyNTAwKSkge1xuICAgICAgICAgICAgX2VuZEFuaW1hdGlvbihzZWxmLmNhbGxiYWNrQW5pbWF0aW9uKTtcblxuICAgICAgICAgICAgc2NydWJUd2VlbiA/IHNjcnViVHdlZW4ucHJvZ3Jlc3MoMSkgOiBfZW5kQW5pbWF0aW9uKGFuaW1hdGlvbiwgYWN0aW9uID09PSBcInJldmVyc2VcIiA/IDEgOiAhY2xpcHBlZCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzVG9nZ2xlICYmIG9uVXBkYXRlICYmICFfcmVmcmVzaGluZykge1xuICAgICAgICAgIG9uVXBkYXRlKHNlbGYpO1xuICAgICAgICB9XG4gICAgICB9IC8vIHVwZGF0ZSBhYnNvbHV0ZWx5LXBvc2l0aW9uZWQgbWFya2VycyAob25seSBpZiB0aGUgc2Nyb2xsZXIgaXNuJ3QgdGhlIHZpZXdwb3J0KVxuXG5cbiAgICAgIGlmIChtYXJrZXJFbmRTZXR0ZXIpIHtcbiAgICAgICAgdmFyIG4gPSBjb250YWluZXJBbmltYXRpb24gPyBzY3JvbGwgLyBjb250YWluZXJBbmltYXRpb24uZHVyYXRpb24oKSAqIChjb250YWluZXJBbmltYXRpb24uX2NhU2Nyb2xsRGlzdCB8fCAwKSA6IHNjcm9sbDtcbiAgICAgICAgbWFya2VyU3RhcnRTZXR0ZXIobiArIChtYXJrZXJTdGFydFRyaWdnZXIuX2lzRmxpcHBlZCA/IDEgOiAwKSk7XG4gICAgICAgIG1hcmtlckVuZFNldHRlcihuKTtcbiAgICAgIH1cblxuICAgICAgY2FNYXJrZXJTZXR0ZXIgJiYgY2FNYXJrZXJTZXR0ZXIoLXNjcm9sbCAvIGNvbnRhaW5lckFuaW1hdGlvbi5kdXJhdGlvbigpICogKGNvbnRhaW5lckFuaW1hdGlvbi5fY2FTY3JvbGxEaXN0IHx8IDApKTtcbiAgICB9O1xuXG4gICAgc2VsZi5lbmFibGUgPSBmdW5jdGlvbiAocmVzZXQsIHJlZnJlc2gpIHtcbiAgICAgIGlmICghc2VsZi5lbmFibGVkKSB7XG4gICAgICAgIHNlbGYuZW5hYmxlZCA9IHRydWU7XG5cbiAgICAgICAgX2FkZExpc3RlbmVyKHNjcm9sbGVyLCBcInJlc2l6ZVwiLCBfb25SZXNpemUpO1xuXG4gICAgICAgIGlzVmlld3BvcnQgfHwgX2FkZExpc3RlbmVyKHNjcm9sbGVyLCBcInNjcm9sbFwiLCBfb25TY3JvbGwpO1xuICAgICAgICBvblJlZnJlc2hJbml0ICYmIF9hZGRMaXN0ZW5lcihTY3JvbGxUcmlnZ2VyLCBcInJlZnJlc2hJbml0XCIsIG9uUmVmcmVzaEluaXQpO1xuXG4gICAgICAgIGlmIChyZXNldCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBzZWxmLnByb2dyZXNzID0gcHJldlByb2dyZXNzID0gMDtcbiAgICAgICAgICBzY3JvbGwxID0gc2Nyb2xsMiA9IGxhc3RTbmFwID0gc2Nyb2xsRnVuYygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVmcmVzaCAhPT0gZmFsc2UgJiYgc2VsZi5yZWZyZXNoKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHNlbGYuZ2V0VHdlZW4gPSBmdW5jdGlvbiAoc25hcCkge1xuICAgICAgcmV0dXJuIHNuYXAgJiYgdHdlZW5UbyA/IHR3ZWVuVG8udHdlZW4gOiBzY3J1YlR3ZWVuO1xuICAgIH07XG5cbiAgICBzZWxmLnNldFBvc2l0aW9ucyA9IGZ1bmN0aW9uIChuZXdTdGFydCwgbmV3RW5kLCBrZWVwQ2xhbXAsIHBpbk9mZnNldCkge1xuICAgICAgLy8gZG9lc24ndCBwZXJzaXN0IGFmdGVyIHJlZnJlc2goKSEgSW50ZW5kZWQgdG8gYmUgYSB3YXkgdG8gb3ZlcnJpZGUgdmFsdWVzIHRoYXQgd2VyZSBzZXQgZHVyaW5nIHJlZnJlc2goKSwgbGlrZSB5b3UgY291bGQgc2V0IGl0IGluIG9uUmVmcmVzaCgpXG4gICAgICBpZiAoY29udGFpbmVyQW5pbWF0aW9uKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgcmF0aW9zIGludG8gc2Nyb2xsIHBvc2l0aW9ucy4gUmVtZW1iZXIsIHN0YXJ0L2VuZCB2YWx1ZXMgb24gU2Nyb2xsVHJpZ2dlcnMgdGhhdCBoYXZlIGEgY29udGFpbmVyQW5pbWF0aW9uIHJlZmVyIHRvIHRoZSB0aW1lIChpbiBzZWNvbmRzKSwgTk9UIHNjcm9sbCBwb3NpdGlvbnMuXG4gICAgICAgIHZhciBzdCA9IGNvbnRhaW5lckFuaW1hdGlvbi5zY3JvbGxUcmlnZ2VyLFxuICAgICAgICAgICAgZHVyYXRpb24gPSBjb250YWluZXJBbmltYXRpb24uZHVyYXRpb24oKSxcbiAgICAgICAgICAgIF9jaGFuZ2UgPSBzdC5lbmQgLSBzdC5zdGFydDtcblxuICAgICAgICBuZXdTdGFydCA9IHN0LnN0YXJ0ICsgX2NoYW5nZSAqIG5ld1N0YXJ0IC8gZHVyYXRpb247XG4gICAgICAgIG5ld0VuZCA9IHN0LnN0YXJ0ICsgX2NoYW5nZSAqIG5ld0VuZCAvIGR1cmF0aW9uO1xuICAgICAgfVxuXG4gICAgICBzZWxmLnJlZnJlc2goZmFsc2UsIGZhbHNlLCB7XG4gICAgICAgIHN0YXJ0OiBfa2VlcENsYW1wKG5ld1N0YXJ0LCBrZWVwQ2xhbXAgJiYgISFzZWxmLl9zdGFydENsYW1wKSxcbiAgICAgICAgZW5kOiBfa2VlcENsYW1wKG5ld0VuZCwga2VlcENsYW1wICYmICEhc2VsZi5fZW5kQ2xhbXApXG4gICAgICB9LCBwaW5PZmZzZXQpO1xuICAgICAgc2VsZi51cGRhdGUoKTtcbiAgICB9O1xuXG4gICAgc2VsZi5hZGp1c3RQaW5TcGFjaW5nID0gZnVuY3Rpb24gKGFtb3VudCkge1xuICAgICAgaWYgKHNwYWNlclN0YXRlICYmIGFtb3VudCkge1xuICAgICAgICB2YXIgaSA9IHNwYWNlclN0YXRlLmluZGV4T2YoZGlyZWN0aW9uLmQpICsgMTtcbiAgICAgICAgc3BhY2VyU3RhdGVbaV0gPSBwYXJzZUZsb2F0KHNwYWNlclN0YXRlW2ldKSArIGFtb3VudCArIF9weDtcbiAgICAgICAgc3BhY2VyU3RhdGVbMV0gPSBwYXJzZUZsb2F0KHNwYWNlclN0YXRlWzFdKSArIGFtb3VudCArIF9weDtcblxuICAgICAgICBfc2V0U3RhdGUoc3BhY2VyU3RhdGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzZWxmLmRpc2FibGUgPSBmdW5jdGlvbiAocmVzZXQsIGFsbG93QW5pbWF0aW9uKSB7XG4gICAgICBpZiAoc2VsZi5lbmFibGVkKSB7XG4gICAgICAgIHJlc2V0ICE9PSBmYWxzZSAmJiBzZWxmLnJldmVydCh0cnVlLCB0cnVlKTtcbiAgICAgICAgc2VsZi5lbmFibGVkID0gc2VsZi5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBhbGxvd0FuaW1hdGlvbiB8fCBzY3J1YlR3ZWVuICYmIHNjcnViVHdlZW4ucGF1c2UoKTtcbiAgICAgICAgcHJldlNjcm9sbCA9IDA7XG4gICAgICAgIHBpbkNhY2hlICYmIChwaW5DYWNoZS51bmNhY2hlID0gMSk7XG4gICAgICAgIG9uUmVmcmVzaEluaXQgJiYgX3JlbW92ZUxpc3RlbmVyKFNjcm9sbFRyaWdnZXIsIFwicmVmcmVzaEluaXRcIiwgb25SZWZyZXNoSW5pdCk7XG5cbiAgICAgICAgaWYgKHNuYXBEZWxheWVkQ2FsbCkge1xuICAgICAgICAgIHNuYXBEZWxheWVkQ2FsbC5wYXVzZSgpO1xuICAgICAgICAgIHR3ZWVuVG8udHdlZW4gJiYgdHdlZW5Uby50d2Vlbi5raWxsKCkgJiYgKHR3ZWVuVG8udHdlZW4gPSAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNWaWV3cG9ydCkge1xuICAgICAgICAgIHZhciBpID0gX3RyaWdnZXJzLmxlbmd0aDtcblxuICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIGlmIChfdHJpZ2dlcnNbaV0uc2Nyb2xsZXIgPT09IHNjcm9sbGVyICYmIF90cmlnZ2Vyc1tpXSAhPT0gc2VsZikge1xuICAgICAgICAgICAgICByZXR1cm47IC8vZG9uJ3QgcmVtb3ZlIHRoZSBsaXN0ZW5lcnMgaWYgdGhlcmUgYXJlIHN0aWxsIG90aGVyIHRyaWdnZXJzIHJlZmVyZW5jaW5nIGl0LlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIF9yZW1vdmVMaXN0ZW5lcihzY3JvbGxlciwgXCJyZXNpemVcIiwgX29uUmVzaXplKTtcblxuICAgICAgICAgIGlzVmlld3BvcnQgfHwgX3JlbW92ZUxpc3RlbmVyKHNjcm9sbGVyLCBcInNjcm9sbFwiLCBfb25TY3JvbGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHNlbGYua2lsbCA9IGZ1bmN0aW9uIChyZXZlcnQsIGFsbG93QW5pbWF0aW9uKSB7XG4gICAgICBzZWxmLmRpc2FibGUocmV2ZXJ0LCBhbGxvd0FuaW1hdGlvbik7XG4gICAgICBzY3J1YlR3ZWVuICYmICFhbGxvd0FuaW1hdGlvbiAmJiBzY3J1YlR3ZWVuLmtpbGwoKTtcbiAgICAgIGlkICYmIGRlbGV0ZSBfaWRzW2lkXTtcblxuICAgICAgdmFyIGkgPSBfdHJpZ2dlcnMuaW5kZXhPZihzZWxmKTtcblxuICAgICAgaSA+PSAwICYmIF90cmlnZ2Vycy5zcGxpY2UoaSwgMSk7XG4gICAgICBpID09PSBfaSAmJiBfZGlyZWN0aW9uID4gMCAmJiBfaS0tOyAvLyBpZiB3ZSdyZSBpbiB0aGUgbWlkZGxlIG9mIGEgcmVmcmVzaCgpIG9yIHVwZGF0ZSgpLCBzcGxpY2luZyB3b3VsZCBjYXVzZSBza2lwcyBpbiB0aGUgaW5kZXgsIHNvIGFkanVzdC4uLlxuICAgICAgLy8gaWYgbm8gb3RoZXIgU2Nyb2xsVHJpZ2dlciBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgc2Nyb2xsZXIgYXJlIGZvdW5kLCB3aXBlIG91dCBhbnkgcmVjb3JkZWQgc2Nyb2xsIHBvc2l0aW9uLiBPdGhlcndpc2UsIGluIGEgc2luZ2xlIHBhZ2UgYXBwbGljYXRpb24sIGZvciBleGFtcGxlLCBpdCBjb3VsZCBtYWludGFpbiBzY3JvbGwgcG9zaXRpb24gd2hlbiBpdCByZWFsbHkgc2hvdWxkbid0LlxuXG4gICAgICBpID0gMDtcblxuICAgICAgX3RyaWdnZXJzLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQuc2Nyb2xsZXIgPT09IHNlbGYuc2Nyb2xsZXIgJiYgKGkgPSAxKTtcbiAgICAgIH0pO1xuXG4gICAgICBpIHx8IF9yZWZyZXNoaW5nQWxsIHx8IChzZWxmLnNjcm9sbC5yZWMgPSAwKTtcblxuICAgICAgaWYgKGFuaW1hdGlvbikge1xuICAgICAgICBhbmltYXRpb24uc2Nyb2xsVHJpZ2dlciA9IG51bGw7XG4gICAgICAgIHJldmVydCAmJiBhbmltYXRpb24ucmV2ZXJ0KHtcbiAgICAgICAgICBraWxsOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgICAgYWxsb3dBbmltYXRpb24gfHwgYW5pbWF0aW9uLmtpbGwoKTtcbiAgICAgIH1cblxuICAgICAgbWFya2VyU3RhcnQgJiYgW21hcmtlclN0YXJ0LCBtYXJrZXJFbmQsIG1hcmtlclN0YXJ0VHJpZ2dlciwgbWFya2VyRW5kVHJpZ2dlcl0uZm9yRWFjaChmdW5jdGlvbiAobSkge1xuICAgICAgICByZXR1cm4gbS5wYXJlbnROb2RlICYmIG0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChtKTtcbiAgICAgIH0pO1xuICAgICAgX3ByaW1hcnkgPT09IHNlbGYgJiYgKF9wcmltYXJ5ID0gMCk7XG5cbiAgICAgIGlmIChwaW4pIHtcbiAgICAgICAgcGluQ2FjaGUgJiYgKHBpbkNhY2hlLnVuY2FjaGUgPSAxKTtcbiAgICAgICAgaSA9IDA7XG5cbiAgICAgICAgX3RyaWdnZXJzLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICByZXR1cm4gdC5waW4gPT09IHBpbiAmJiBpKys7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGkgfHwgKHBpbkNhY2hlLnNwYWNlciA9IDApOyAvLyBpZiB0aGVyZSBhcmVuJ3QgYW55IG1vcmUgU2Nyb2xsVHJpZ2dlcnMgd2l0aCB0aGUgc2FtZSBwaW4sIHJlbW92ZSB0aGUgc3BhY2VyLCBvdGhlcndpc2UgaXQgY291bGQgYmUgY29udGFtaW5hdGVkIHdpdGggb2xkL3N0YWxlIHZhbHVlcyBpZiB0aGUgdXNlciByZS1jcmVhdGVzIGEgU2Nyb2xsVHJpZ2dlciBmb3IgdGhlIHNhbWUgZWxlbWVudC5cbiAgICAgIH1cblxuICAgICAgdmFycy5vbktpbGwgJiYgdmFycy5vbktpbGwoc2VsZik7XG4gICAgfTtcblxuICAgIF90cmlnZ2Vycy5wdXNoKHNlbGYpO1xuXG4gICAgc2VsZi5lbmFibGUoZmFsc2UsIGZhbHNlKTtcbiAgICBjdXN0b21SZXZlcnRSZXR1cm4gJiYgY3VzdG9tUmV2ZXJ0UmV0dXJuKHNlbGYpO1xuXG4gICAgaWYgKGFuaW1hdGlvbiAmJiBhbmltYXRpb24uYWRkICYmICFjaGFuZ2UpIHtcbiAgICAgIC8vIGlmIHRoZSBhbmltYXRpb24gaXMgYSB0aW1lbGluZSwgaXQgbWF5IG5vdCBoYXZlIGJlZW4gcG9wdWxhdGVkIHlldCwgc28gaXQgd291bGRuJ3QgcmVuZGVyIGF0IHRoZSBwcm9wZXIgcGxhY2Ugb24gdGhlIGZpcnN0IHJlZnJlc2goKSwgdGh1cyB3ZSBzaG91bGQgc2NoZWR1bGUgb25lIGZvciB0aGUgbmV4dCB0aWNrLiBJZiBcImNoYW5nZVwiIGlzIGRlZmluZWQsIHdlIGtub3cgaXQgbXVzdCBiZSByZS1lbmFibGluZywgdGh1cyB3ZSBjYW4gcmVmcmVzaCgpIHJpZ2h0IGF3YXkuXG4gICAgICB2YXIgdXBkYXRlRnVuYyA9IHNlbGYudXBkYXRlOyAvLyBzb21lIGJyb3dzZXJzIG1heSBmaXJlIGEgc2Nyb2xsIGV2ZW50IEJFRk9SRSBhIHRpY2sgZWxhcHNlcyBhbmQvb3IgdGhlIERPTUNvbnRlbnRMb2FkZWQgZmlyZXMuIFNvIHRoZXJlJ3MgYSBjaGFuY2UgdXBkYXRlKCkgd2lsbCBiZSBjYWxsZWQgQkVGT1JFIGEgcmVmcmVzaCgpIGhhcyBoYXBwZW5lZCBvbiBhIFRpbWVsaW5lLWF0dGFjaGVkIFNjcm9sbFRyaWdnZXIgd2hpY2ggbWVhbnMgdGhlIHN0YXJ0L2VuZCB3b24ndCBiZSBjYWxjdWxhdGVkIHlldC4gV2UgZG9uJ3Qgd2FudCB0byBhZGQgY29uZGl0aW9uYWwgbG9naWMgaW5zaWRlIHRoZSB1cGRhdGUoKSBtZXRob2QgKGxpa2UgY2hlY2sgdG8gc2VlIGlmIGVuZCBpcyBkZWZpbmVkIGFuZCBpZiBub3QsIGZvcmNlIGEgcmVmcmVzaCgpKSBiZWNhdXNlIHRoYXQncyBhIGZ1bmN0aW9uIHRoYXQgZ2V0cyBoaXQgYSBMT1QgKHBlcmZvcm1hbmNlKS4gU28gd2Ugc3dhcCBvdXQgdGhlIHJlYWwgdXBkYXRlKCkgbWV0aG9kIGZvciB0aGlzIG9uZSB0aGF0J2xsIHJlLWF0dGFjaCBpdCB0aGUgZmlyc3QgdGltZSBpdCBnZXRzIGNhbGxlZCBhbmQgb2YgY291cnNlIGZvcmNlcyBhIHJlZnJlc2goKS5cblxuICAgICAgc2VsZi51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNlbGYudXBkYXRlID0gdXBkYXRlRnVuYztcbiAgICAgICAgX3Njcm9sbGVycy5jYWNoZSsrOyAvLyBvdGhlcndpc2UgYSBjYWNoZWQgc2Nyb2xsIHBvc2l0aW9uIG1heSBnZXQgdXNlZCBpbiB0aGUgcmVmcmVzaCgpIGluIGEgdmVyeSByYXJlIHNjZW5hcmlvLCBsaWtlIGlmIFNjcm9sbFRyaWdnZXJzIGFyZSBjcmVhdGVkIGluc2lkZSBhIERPTUNvbnRlbnRMb2FkZWQgZXZlbnQgYW5kIHRoZSBxdWV1ZWQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkgZmlyZXMgYmVmb3JlaGFuZC4gU2VlIGh0dHBzOi8vZ3NhcC5jb20vY29tbXVuaXR5L2ZvcnVtcy90b3BpYy80MTI2Ny1zY3JvbGx0cmlnZ2VyLWJyZWFrcy1vbi1yZWZyZXNoLXdoZW4tdXNpbmctZG9tY29udGVudGxvYWRlZC9cblxuICAgICAgICBzdGFydCB8fCBlbmQgfHwgc2VsZi5yZWZyZXNoKCk7XG4gICAgICB9O1xuXG4gICAgICBnc2FwLmRlbGF5ZWRDYWxsKDAuMDEsIHNlbGYudXBkYXRlKTtcbiAgICAgIGNoYW5nZSA9IDAuMDE7XG4gICAgICBzdGFydCA9IGVuZCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlbGYucmVmcmVzaCgpO1xuICAgIH1cblxuICAgIHBpbiAmJiBfcXVldWVSZWZyZXNoQWxsKCk7IC8vIHBpbm5pbmcgY291bGQgYWZmZWN0IHRoZSBwb3NpdGlvbnMgb2Ygb3RoZXIgdGhpbmdzLCBzbyBtYWtlIHN1cmUgd2UgcXVldWUgYSBmdWxsIHJlZnJlc2goKVxuICB9O1xuXG4gIFNjcm9sbFRyaWdnZXIucmVnaXN0ZXIgPSBmdW5jdGlvbiByZWdpc3Rlcihjb3JlKSB7XG4gICAgaWYgKCFfY29yZUluaXR0ZWQpIHtcbiAgICAgIGdzYXAgPSBjb3JlIHx8IF9nZXRHU0FQKCk7XG4gICAgICBfd2luZG93RXhpc3RzKCkgJiYgd2luZG93LmRvY3VtZW50ICYmIFNjcm9sbFRyaWdnZXIuZW5hYmxlKCk7XG4gICAgICBfY29yZUluaXR0ZWQgPSBfZW5hYmxlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gX2NvcmVJbml0dGVkO1xuICB9O1xuXG4gIFNjcm9sbFRyaWdnZXIuZGVmYXVsdHMgPSBmdW5jdGlvbiBkZWZhdWx0cyhjb25maWcpIHtcbiAgICBpZiAoY29uZmlnKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGNvbmZpZykge1xuICAgICAgICBfZGVmYXVsdHNbcF0gPSBjb25maWdbcF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIF9kZWZhdWx0cztcbiAgfTtcblxuICBTY3JvbGxUcmlnZ2VyLmRpc2FibGUgPSBmdW5jdGlvbiBkaXNhYmxlKHJlc2V0LCBraWxsKSB7XG4gICAgX2VuYWJsZWQgPSAwO1xuXG4gICAgX3RyaWdnZXJzLmZvckVhY2goZnVuY3Rpb24gKHRyaWdnZXIpIHtcbiAgICAgIHJldHVybiB0cmlnZ2VyW2tpbGwgPyBcImtpbGxcIiA6IFwiZGlzYWJsZVwiXShyZXNldCk7XG4gICAgfSk7XG5cbiAgICBfcmVtb3ZlTGlzdGVuZXIoX3dpbiwgXCJ3aGVlbFwiLCBfb25TY3JvbGwpO1xuXG4gICAgX3JlbW92ZUxpc3RlbmVyKF9kb2MsIFwic2Nyb2xsXCIsIF9vblNjcm9sbCk7XG5cbiAgICBjbGVhckludGVydmFsKF9zeW5jSW50ZXJ2YWwpO1xuXG4gICAgX3JlbW92ZUxpc3RlbmVyKF9kb2MsIFwidG91Y2hjYW5jZWxcIiwgX3Bhc3NUaHJvdWdoKTtcblxuICAgIF9yZW1vdmVMaXN0ZW5lcihfYm9keSwgXCJ0b3VjaHN0YXJ0XCIsIF9wYXNzVGhyb3VnaCk7XG5cbiAgICBfbXVsdGlMaXN0ZW5lcihfcmVtb3ZlTGlzdGVuZXIsIF9kb2MsIFwicG9pbnRlcmRvd24sdG91Y2hzdGFydCxtb3VzZWRvd25cIiwgX3BvaW50ZXJEb3duSGFuZGxlcik7XG5cbiAgICBfbXVsdGlMaXN0ZW5lcihfcmVtb3ZlTGlzdGVuZXIsIF9kb2MsIFwicG9pbnRlcnVwLHRvdWNoZW5kLG1vdXNldXBcIiwgX3BvaW50ZXJVcEhhbmRsZXIpO1xuXG4gICAgX3Jlc2l6ZURlbGF5LmtpbGwoKTtcblxuICAgIF9pdGVyYXRlQXV0b1JlZnJlc2goX3JlbW92ZUxpc3RlbmVyKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3Njcm9sbGVycy5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgX3doZWVsTGlzdGVuZXIoX3JlbW92ZUxpc3RlbmVyLCBfc2Nyb2xsZXJzW2ldLCBfc2Nyb2xsZXJzW2kgKyAxXSk7XG5cbiAgICAgIF93aGVlbExpc3RlbmVyKF9yZW1vdmVMaXN0ZW5lciwgX3Njcm9sbGVyc1tpXSwgX3Njcm9sbGVyc1tpICsgMl0pO1xuICAgIH1cbiAgfTtcblxuICBTY3JvbGxUcmlnZ2VyLmVuYWJsZSA9IGZ1bmN0aW9uIGVuYWJsZSgpIHtcbiAgICBfd2luID0gd2luZG93O1xuICAgIF9kb2MgPSBkb2N1bWVudDtcbiAgICBfZG9jRWwgPSBfZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICBfYm9keSA9IF9kb2MuYm9keTtcblxuICAgIGlmIChnc2FwKSB7XG4gICAgICBfdG9BcnJheSA9IGdzYXAudXRpbHMudG9BcnJheTtcbiAgICAgIF9jbGFtcCA9IGdzYXAudXRpbHMuY2xhbXA7XG4gICAgICBfY29udGV4dCA9IGdzYXAuY29yZS5jb250ZXh0IHx8IF9wYXNzVGhyb3VnaDtcbiAgICAgIF9zdXBwcmVzc092ZXJ3cml0ZXMgPSBnc2FwLmNvcmUuc3VwcHJlc3NPdmVyd3JpdGVzIHx8IF9wYXNzVGhyb3VnaDtcbiAgICAgIF9zY3JvbGxSZXN0b3JhdGlvbiA9IF93aW4uaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiB8fCBcImF1dG9cIjtcbiAgICAgIF9sYXN0U2Nyb2xsID0gX3dpbi5wYWdlWU9mZnNldCB8fCAwO1xuICAgICAgZ3NhcC5jb3JlLmdsb2JhbHMoXCJTY3JvbGxUcmlnZ2VyXCIsIFNjcm9sbFRyaWdnZXIpOyAvLyBtdXN0IHJlZ2lzdGVyIHRoZSBnbG9iYWwgbWFudWFsbHkgYmVjYXVzZSBpbiBJbnRlcm5ldCBFeHBsb3JlciwgZnVuY3Rpb25zIChjbGFzc2VzKSBkb24ndCBoYXZlIGEgXCJuYW1lXCIgcHJvcGVydHkuXG5cbiAgICAgIGlmIChfYm9keSkge1xuICAgICAgICBfZW5hYmxlZCA9IDE7XG4gICAgICAgIF9kaXYxMDB2aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7IC8vIHRvIHNvbHZlIG1vYmlsZSBicm93c2VyIGFkZHJlc3MgYmFyIHNob3cvaGlkZSByZXNpemluZywgd2Ugc2hvdWxkbid0IHJlbHkgb24gd2luZG93LmlubmVySGVpZ2h0LiBJbnN0ZWFkLCB1c2UgYSA8ZGl2PiB3aXRoIGl0cyBoZWlnaHQgc2V0IHRvIDEwMHZoIGFuZCBtZWFzdXJlIHRoYXQgc2luY2UgdGhhdCdzIHdoYXQgdGhlIHNjcm9sbGluZyBpcyBiYXNlZCBvbiBhbnl3YXkgYW5kIGl0J3Mgbm90IGFmZmVjdGVkIGJ5IGFkZHJlc3MgYmFyIHNob3dpbmcvaGlkaW5nLlxuXG4gICAgICAgIF9kaXYxMDB2aC5zdHlsZS5oZWlnaHQgPSBcIjEwMHZoXCI7XG4gICAgICAgIF9kaXYxMDB2aC5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblxuICAgICAgICBfcmVmcmVzaDEwMHZoKCk7XG5cbiAgICAgICAgX3JhZkJ1Z0ZpeCgpO1xuXG4gICAgICAgIE9ic2VydmVyLnJlZ2lzdGVyKGdzYXApOyAvLyBpc1RvdWNoIGlzIDAgaWYgbm8gdG91Y2gsIDEgaWYgT05MWSB0b3VjaCwgYW5kIDIgaWYgaXQgY2FuIGFjY29tbW9kYXRlIHRvdWNoIGJ1dCBhbHNvIG90aGVyIHR5cGVzIGxpa2UgbW91c2UvcG9pbnRlci5cblxuICAgICAgICBTY3JvbGxUcmlnZ2VyLmlzVG91Y2ggPSBPYnNlcnZlci5pc1RvdWNoO1xuICAgICAgICBfZml4SU9TQnVnID0gT2JzZXJ2ZXIuaXNUb3VjaCAmJiAvKGlQYWR8aVBob25lfGlQb2R8TWFjKS9nLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7IC8vIHNpbmNlIDIwMTcsIGlPUyBoYXMgaGFkIGEgYnVnIHRoYXQgY2F1c2VzIGV2ZW50LmNsaWVudFgvWSB0byBiZSBpbmFjY3VyYXRlIHdoZW4gYSBzY3JvbGwgb2NjdXJzLCB0aHVzIHdlIG11c3QgYWx0ZXJuYXRlIGlnbm9yaW5nIGV2ZXJ5IG90aGVyIHRvdWNobW92ZSBldmVudCB0byB3b3JrIGFyb3VuZCBpdC4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE5NTQgYW5kIGh0dHBzOi8vY29kZXBlbi5pby9HcmVlblNvY2svcGVuL0V4YnJQTmEvMDg3Y2VmMTk3ZGMzNTQ0NWEwOTUxZTg5MzVjNDE1MDNcblxuICAgICAgICBfaWdub3JlTW9iaWxlUmVzaXplID0gT2JzZXJ2ZXIuaXNUb3VjaCA9PT0gMTtcblxuICAgICAgICBfYWRkTGlzdGVuZXIoX3dpbiwgXCJ3aGVlbFwiLCBfb25TY3JvbGwpOyAvLyBtb3N0bHkgZm9yIDNyZCBwYXJ0eSBzbW9vdGggc2Nyb2xsaW5nIGxpYnJhcmllcy5cblxuXG4gICAgICAgIF9yb290ID0gW193aW4sIF9kb2MsIF9kb2NFbCwgX2JvZHldO1xuXG4gICAgICAgIGlmIChnc2FwLm1hdGNoTWVkaWEpIHtcbiAgICAgICAgICBTY3JvbGxUcmlnZ2VyLm1hdGNoTWVkaWEgPSBmdW5jdGlvbiAodmFycykge1xuICAgICAgICAgICAgdmFyIG1tID0gZ3NhcC5tYXRjaE1lZGlhKCksXG4gICAgICAgICAgICAgICAgcDtcblxuICAgICAgICAgICAgZm9yIChwIGluIHZhcnMpIHtcbiAgICAgICAgICAgICAgbW0uYWRkKHAsIHZhcnNbcF0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbW07XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGdzYXAuYWRkRXZlbnRMaXN0ZW5lcihcIm1hdGNoTWVkaWFJbml0XCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfcmV2ZXJ0QWxsKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZ3NhcC5hZGRFdmVudExpc3RlbmVyKFwibWF0Y2hNZWRpYVJldmVydFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3JldmVydFJlY29yZGVkKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZ3NhcC5hZGRFdmVudExpc3RlbmVyKFwibWF0Y2hNZWRpYVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfcmVmcmVzaEFsbCgwLCAxKTtcblxuICAgICAgICAgICAgX2Rpc3BhdGNoKFwibWF0Y2hNZWRpYVwiKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBnc2FwLm1hdGNoTWVkaWEoKS5hZGQoXCIob3JpZW50YXRpb246IHBvcnRyYWl0KVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyB3aGVuIG9yaWVudGF0aW9uIGNoYW5nZXMsIHdlIHNob3VsZCB0YWtlIG5ldyBiYXNlIG1lYXN1cmVtZW50cyBmb3IgdGhlIGlnbm9yZU1vYmlsZVJlc2l6ZSBmZWF0dXJlLlxuICAgICAgICAgICAgX3NldEJhc2VEaW1lbnNpb25zKCk7XG5cbiAgICAgICAgICAgIHJldHVybiBfc2V0QmFzZURpbWVuc2lvbnM7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiUmVxdWlyZXMgR1NBUCAzLjExLjAgb3IgbGF0ZXJcIik7XG4gICAgICAgIH1cblxuICAgICAgICBfc2V0QmFzZURpbWVuc2lvbnMoKTtcblxuICAgICAgICBfYWRkTGlzdGVuZXIoX2RvYywgXCJzY3JvbGxcIiwgX29uU2Nyb2xsKTsgLy8gc29tZSBicm93c2VycyAobGlrZSBDaHJvbWUpLCB0aGUgd2luZG93IHN0b3BzIGRpc3BhdGNoaW5nIHNjcm9sbCBldmVudHMgb24gdGhlIHdpbmRvdyBpZiB5b3Ugc2Nyb2xsIHJlYWxseSBmYXN0LCBidXQgaXQncyBjb25zaXN0ZW50IG9uIHRoZSBkb2N1bWVudCFcblxuXG4gICAgICAgIHZhciBib2R5SGFzU3R5bGUgPSBfYm9keS5oYXNBdHRyaWJ1dGUoXCJzdHlsZVwiKSxcbiAgICAgICAgICAgIGJvZHlTdHlsZSA9IF9ib2R5LnN0eWxlLFxuICAgICAgICAgICAgYm9yZGVyID0gYm9keVN0eWxlLmJvcmRlclRvcFN0eWxlLFxuICAgICAgICAgICAgQW5pbWF0aW9uUHJvdG8gPSBnc2FwLmNvcmUuQW5pbWF0aW9uLnByb3RvdHlwZSxcbiAgICAgICAgICAgIGJvdW5kcyxcbiAgICAgICAgICAgIGk7XG5cbiAgICAgICAgQW5pbWF0aW9uUHJvdG8ucmV2ZXJ0IHx8IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBbmltYXRpb25Qcm90bywgXCJyZXZlcnRcIiwge1xuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRpbWUoLTAuMDEsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7IC8vIG9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IChBbmltYXRpb24ucmV2ZXJ0KCkgd2FzIGFkZGVkIGFmdGVyIDMuMTAuNClcblxuICAgICAgICBib2R5U3R5bGUuYm9yZGVyVG9wU3R5bGUgPSBcInNvbGlkXCI7IC8vIHdvcmtzIGFyb3VuZCBhbiBpc3N1ZSB3aGVyZSBhIG1hcmdpbiBvZiBhIGNoaWxkIGVsZW1lbnQgY291bGQgdGhyb3cgb2ZmIHRoZSBib3VuZHMgb2YgdGhlIF9ib2R5LCBtYWtpbmcgaXQgc2VlbSBsaWtlIHRoZXJlJ3MgYSBtYXJnaW4gd2hlbiB0aGVyZSBhY3R1YWxseSBpc24ndC4gVGhlIGJvcmRlciBlbnN1cmVzIHRoYXQgdGhlIGJvdW5kcyBhcmUgYWNjdXJhdGUuXG5cbiAgICAgICAgYm91bmRzID0gX2dldEJvdW5kcyhfYm9keSk7XG4gICAgICAgIF92ZXJ0aWNhbC5tID0gTWF0aC5yb3VuZChib3VuZHMudG9wICsgX3ZlcnRpY2FsLnNjKCkpIHx8IDA7IC8vIGFjY29tbW9kYXRlIHRoZSBvZmZzZXQgb2YgdGhlIDxib2R5PiBjYXVzZWQgYnkgbWFyZ2lucyBhbmQvb3IgcGFkZGluZ1xuXG4gICAgICAgIF9ob3Jpem9udGFsLm0gPSBNYXRoLnJvdW5kKGJvdW5kcy5sZWZ0ICsgX2hvcml6b250YWwuc2MoKSkgfHwgMDtcbiAgICAgICAgYm9yZGVyID8gYm9keVN0eWxlLmJvcmRlclRvcFN0eWxlID0gYm9yZGVyIDogYm9keVN0eWxlLnJlbW92ZVByb3BlcnR5KFwiYm9yZGVyLXRvcC1zdHlsZVwiKTtcblxuICAgICAgICBpZiAoIWJvZHlIYXNTdHlsZSkge1xuICAgICAgICAgIC8vIFNTUiBmcmFtZXdvcmtzIGxpa2UgTmV4dC5qcyBjb21wbGFpbiBpZiB0aGlzIGF0dHJpYnV0ZSBnZXRzIGFkZGVkLlxuICAgICAgICAgIF9ib2R5LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiXCIpOyAvLyBpdCdzIG5vdCBlbm91Z2ggdG8ganVzdCByZW1vdmVBdHRyaWJ1dGUoKSAtIHdlIG11c3QgZmlyc3Qgc2V0IGl0IHRvIGVtcHR5LCBvdGhlcndpc2UgTmV4dC5qcyBjb21wbGFpbnMuXG5cblxuICAgICAgICAgIF9ib2R5LnJlbW92ZUF0dHJpYnV0ZShcInN0eWxlXCIpO1xuICAgICAgICB9IC8vIFRPRE86ICg/KSBtYXliZSBtb3ZlIHRvIGxldmVyYWdpbmcgdGhlIHZlbG9jaXR5IG1lY2hhbmlzbSBpbiBPYnNlcnZlciBhbmQgc2tpcCBpbnRlcnZhbHMuXG5cblxuICAgICAgICBfc3luY0ludGVydmFsID0gc2V0SW50ZXJ2YWwoX3N5bmMsIDI1MCk7XG4gICAgICAgIGdzYXAuZGVsYXllZENhbGwoMC41LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF9zdGFydHVwID0gMDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgX2FkZExpc3RlbmVyKF9kb2MsIFwidG91Y2hjYW5jZWxcIiwgX3Bhc3NUaHJvdWdoKTsgLy8gc29tZSBvbGRlciBBbmRyb2lkIGRldmljZXMgaW50ZXJtaXR0ZW50bHkgc3RvcCBkaXNwYXRjaGluZyBcInRvdWNobW92ZVwiIGV2ZW50cyBpZiB3ZSBkb24ndCBsaXN0ZW4gZm9yIFwidG91Y2hjYW5jZWxcIiBvbiB0aGUgZG9jdW1lbnQuXG5cblxuICAgICAgICBfYWRkTGlzdGVuZXIoX2JvZHksIFwidG91Y2hzdGFydFwiLCBfcGFzc1Rocm91Z2gpOyAvL3dvcmtzIGFyb3VuZCBTYWZhcmkgYnVnOiBodHRwczovL2dzYXAuY29tL2ZvcnVtcy90b3BpYy8yMTQ1MC1kcmFnZ2FibGUtaW4taWZyYW1lLW9uLW1vYmlsZS1pcy1idWdneS9cblxuXG4gICAgICAgIF9tdWx0aUxpc3RlbmVyKF9hZGRMaXN0ZW5lciwgX2RvYywgXCJwb2ludGVyZG93bix0b3VjaHN0YXJ0LG1vdXNlZG93blwiLCBfcG9pbnRlckRvd25IYW5kbGVyKTtcblxuICAgICAgICBfbXVsdGlMaXN0ZW5lcihfYWRkTGlzdGVuZXIsIF9kb2MsIFwicG9pbnRlcnVwLHRvdWNoZW5kLG1vdXNldXBcIiwgX3BvaW50ZXJVcEhhbmRsZXIpO1xuXG4gICAgICAgIF90cmFuc2Zvcm1Qcm9wID0gZ3NhcC51dGlscy5jaGVja1ByZWZpeChcInRyYW5zZm9ybVwiKTtcblxuICAgICAgICBfc3RhdGVQcm9wcy5wdXNoKF90cmFuc2Zvcm1Qcm9wKTtcblxuICAgICAgICBfY29yZUluaXR0ZWQgPSBfZ2V0VGltZSgpO1xuICAgICAgICBfcmVzaXplRGVsYXkgPSBnc2FwLmRlbGF5ZWRDYWxsKDAuMiwgX3JlZnJlc2hBbGwpLnBhdXNlKCk7XG4gICAgICAgIF9hdXRvUmVmcmVzaCA9IFtfZG9jLCBcInZpc2liaWxpdHljaGFuZ2VcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciB3ID0gX3dpbi5pbm5lcldpZHRoLFxuICAgICAgICAgICAgICBoID0gX3dpbi5pbm5lckhlaWdodDtcblxuICAgICAgICAgIGlmIChfZG9jLmhpZGRlbikge1xuICAgICAgICAgICAgX3ByZXZXaWR0aCA9IHc7XG4gICAgICAgICAgICBfcHJldkhlaWdodCA9IGg7XG4gICAgICAgICAgfSBlbHNlIGlmIChfcHJldldpZHRoICE9PSB3IHx8IF9wcmV2SGVpZ2h0ICE9PSBoKSB7XG4gICAgICAgICAgICBfb25SZXNpemUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIF9kb2MsIFwiRE9NQ29udGVudExvYWRlZFwiLCBfcmVmcmVzaEFsbCwgX3dpbiwgXCJsb2FkXCIsIF9yZWZyZXNoQWxsLCBfd2luLCBcInJlc2l6ZVwiLCBfb25SZXNpemVdO1xuXG4gICAgICAgIF9pdGVyYXRlQXV0b1JlZnJlc2goX2FkZExpc3RlbmVyKTtcblxuICAgICAgICBfdHJpZ2dlcnMuZm9yRWFjaChmdW5jdGlvbiAodHJpZ2dlcikge1xuICAgICAgICAgIHJldHVybiB0cmlnZ2VyLmVuYWJsZSgwLCAxKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IF9zY3JvbGxlcnMubGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgICAgICBfd2hlZWxMaXN0ZW5lcihfcmVtb3ZlTGlzdGVuZXIsIF9zY3JvbGxlcnNbaV0sIF9zY3JvbGxlcnNbaSArIDFdKTtcblxuICAgICAgICAgIF93aGVlbExpc3RlbmVyKF9yZW1vdmVMaXN0ZW5lciwgX3Njcm9sbGVyc1tpXSwgX3Njcm9sbGVyc1tpICsgMl0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIFNjcm9sbFRyaWdnZXIuY29uZmlnID0gZnVuY3Rpb24gY29uZmlnKHZhcnMpIHtcbiAgICBcImxpbWl0Q2FsbGJhY2tzXCIgaW4gdmFycyAmJiAoX2xpbWl0Q2FsbGJhY2tzID0gISF2YXJzLmxpbWl0Q2FsbGJhY2tzKTtcbiAgICB2YXIgbXMgPSB2YXJzLnN5bmNJbnRlcnZhbDtcbiAgICBtcyAmJiBjbGVhckludGVydmFsKF9zeW5jSW50ZXJ2YWwpIHx8IChfc3luY0ludGVydmFsID0gbXMpICYmIHNldEludGVydmFsKF9zeW5jLCBtcyk7XG4gICAgXCJpZ25vcmVNb2JpbGVSZXNpemVcIiBpbiB2YXJzICYmIChfaWdub3JlTW9iaWxlUmVzaXplID0gU2Nyb2xsVHJpZ2dlci5pc1RvdWNoID09PSAxICYmIHZhcnMuaWdub3JlTW9iaWxlUmVzaXplKTtcblxuICAgIGlmIChcImF1dG9SZWZyZXNoRXZlbnRzXCIgaW4gdmFycykge1xuICAgICAgX2l0ZXJhdGVBdXRvUmVmcmVzaChfcmVtb3ZlTGlzdGVuZXIpIHx8IF9pdGVyYXRlQXV0b1JlZnJlc2goX2FkZExpc3RlbmVyLCB2YXJzLmF1dG9SZWZyZXNoRXZlbnRzIHx8IFwibm9uZVwiKTtcbiAgICAgIF9pZ25vcmVSZXNpemUgPSAodmFycy5hdXRvUmVmcmVzaEV2ZW50cyArIFwiXCIpLmluZGV4T2YoXCJyZXNpemVcIikgPT09IC0xO1xuICAgIH1cbiAgfTtcblxuICBTY3JvbGxUcmlnZ2VyLnNjcm9sbGVyUHJveHkgPSBmdW5jdGlvbiBzY3JvbGxlclByb3h5KHRhcmdldCwgdmFycykge1xuICAgIHZhciB0ID0gX2dldFRhcmdldCh0YXJnZXQpLFxuICAgICAgICBpID0gX3Njcm9sbGVycy5pbmRleE9mKHQpLFxuICAgICAgICBpc1ZpZXdwb3J0ID0gX2lzVmlld3BvcnQodCk7XG5cbiAgICBpZiAofmkpIHtcbiAgICAgIF9zY3JvbGxlcnMuc3BsaWNlKGksIGlzVmlld3BvcnQgPyA2IDogMik7XG4gICAgfVxuXG4gICAgaWYgKHZhcnMpIHtcbiAgICAgIGlzVmlld3BvcnQgPyBfcHJveGllcy51bnNoaWZ0KF93aW4sIHZhcnMsIF9ib2R5LCB2YXJzLCBfZG9jRWwsIHZhcnMpIDogX3Byb3hpZXMudW5zaGlmdCh0LCB2YXJzKTtcbiAgICB9XG4gIH07XG5cbiAgU2Nyb2xsVHJpZ2dlci5jbGVhck1hdGNoTWVkaWEgPSBmdW5jdGlvbiBjbGVhck1hdGNoTWVkaWEocXVlcnkpIHtcbiAgICBfdHJpZ2dlcnMuZm9yRWFjaChmdW5jdGlvbiAodCkge1xuICAgICAgcmV0dXJuIHQuX2N0eCAmJiB0Ll9jdHgucXVlcnkgPT09IHF1ZXJ5ICYmIHQuX2N0eC5raWxsKHRydWUsIHRydWUpO1xuICAgIH0pO1xuICB9O1xuXG4gIFNjcm9sbFRyaWdnZXIuaXNJblZpZXdwb3J0ID0gZnVuY3Rpb24gaXNJblZpZXdwb3J0KGVsZW1lbnQsIHJhdGlvLCBob3Jpem9udGFsKSB7XG4gICAgdmFyIGJvdW5kcyA9IChfaXNTdHJpbmcoZWxlbWVudCkgPyBfZ2V0VGFyZ2V0KGVsZW1lbnQpIDogZWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgIG9mZnNldCA9IGJvdW5kc1tob3Jpem9udGFsID8gX3dpZHRoIDogX2hlaWdodF0gKiByYXRpbyB8fCAwO1xuICAgIHJldHVybiBob3Jpem9udGFsID8gYm91bmRzLnJpZ2h0IC0gb2Zmc2V0ID4gMCAmJiBib3VuZHMubGVmdCArIG9mZnNldCA8IF93aW4uaW5uZXJXaWR0aCA6IGJvdW5kcy5ib3R0b20gLSBvZmZzZXQgPiAwICYmIGJvdW5kcy50b3AgKyBvZmZzZXQgPCBfd2luLmlubmVySGVpZ2h0O1xuICB9O1xuXG4gIFNjcm9sbFRyaWdnZXIucG9zaXRpb25JblZpZXdwb3J0ID0gZnVuY3Rpb24gcG9zaXRpb25JblZpZXdwb3J0KGVsZW1lbnQsIHJlZmVyZW5jZVBvaW50LCBob3Jpem9udGFsKSB7XG4gICAgX2lzU3RyaW5nKGVsZW1lbnQpICYmIChlbGVtZW50ID0gX2dldFRhcmdldChlbGVtZW50KSk7XG4gICAgdmFyIGJvdW5kcyA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgIHNpemUgPSBib3VuZHNbaG9yaXpvbnRhbCA/IF93aWR0aCA6IF9oZWlnaHRdLFxuICAgICAgICBvZmZzZXQgPSByZWZlcmVuY2VQb2ludCA9PSBudWxsID8gc2l6ZSAvIDIgOiByZWZlcmVuY2VQb2ludCBpbiBfa2V5d29yZHMgPyBfa2V5d29yZHNbcmVmZXJlbmNlUG9pbnRdICogc2l6ZSA6IH5yZWZlcmVuY2VQb2ludC5pbmRleE9mKFwiJVwiKSA/IHBhcnNlRmxvYXQocmVmZXJlbmNlUG9pbnQpICogc2l6ZSAvIDEwMCA6IHBhcnNlRmxvYXQocmVmZXJlbmNlUG9pbnQpIHx8IDA7XG4gICAgcmV0dXJuIGhvcml6b250YWwgPyAoYm91bmRzLmxlZnQgKyBvZmZzZXQpIC8gX3dpbi5pbm5lcldpZHRoIDogKGJvdW5kcy50b3AgKyBvZmZzZXQpIC8gX3dpbi5pbm5lckhlaWdodDtcbiAgfTtcblxuICBTY3JvbGxUcmlnZ2VyLmtpbGxBbGwgPSBmdW5jdGlvbiBraWxsQWxsKGFsbG93TGlzdGVuZXJzKSB7XG4gICAgX3RyaWdnZXJzLnNsaWNlKDApLmZvckVhY2goZnVuY3Rpb24gKHQpIHtcbiAgICAgIHJldHVybiB0LnZhcnMuaWQgIT09IFwiU2Nyb2xsU21vb3RoZXJcIiAmJiB0LmtpbGwoKTtcbiAgICB9KTtcblxuICAgIGlmIChhbGxvd0xpc3RlbmVycyAhPT0gdHJ1ZSkge1xuICAgICAgdmFyIGxpc3RlbmVycyA9IF9saXN0ZW5lcnMua2lsbEFsbCB8fCBbXTtcbiAgICAgIF9saXN0ZW5lcnMgPSB7fTtcbiAgICAgIGxpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChmKSB7XG4gICAgICAgIHJldHVybiBmKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFNjcm9sbFRyaWdnZXI7XG59KCk7XG5TY3JvbGxUcmlnZ2VyLnZlcnNpb24gPSBcIjMuMTIuN1wiO1xuXG5TY3JvbGxUcmlnZ2VyLnNhdmVTdHlsZXMgPSBmdW5jdGlvbiAodGFyZ2V0cykge1xuICByZXR1cm4gdGFyZ2V0cyA/IF90b0FycmF5KHRhcmdldHMpLmZvckVhY2goZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIC8vIHNhdmVkIHN0eWxlcyBhcmUgcmVjb3JkZWQgaW4gYSBjb25zZWN1dGl2ZSBhbHRlcm5hdGluZyBBcnJheSwgbGlrZSBbZWxlbWVudCwgY3NzVGV4dCwgdHJhbnNmb3JtIGF0dHJpYnV0ZSwgY2FjaGUsIG1hdGNoTWVkaWEsIC4uLl1cbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5zdHlsZSkge1xuICAgICAgdmFyIGkgPSBfc2F2ZWRTdHlsZXMuaW5kZXhPZih0YXJnZXQpO1xuXG4gICAgICBpID49IDAgJiYgX3NhdmVkU3R5bGVzLnNwbGljZShpLCA1KTtcblxuICAgICAgX3NhdmVkU3R5bGVzLnB1c2godGFyZ2V0LCB0YXJnZXQuc3R5bGUuY3NzVGV4dCwgdGFyZ2V0LmdldEJCb3ggJiYgdGFyZ2V0LmdldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiKSwgZ3NhcC5jb3JlLmdldENhY2hlKHRhcmdldCksIF9jb250ZXh0KCkpO1xuICAgIH1cbiAgfSkgOiBfc2F2ZWRTdHlsZXM7XG59O1xuXG5TY3JvbGxUcmlnZ2VyLnJldmVydCA9IGZ1bmN0aW9uIChzb2Z0LCBtZWRpYSkge1xuICByZXR1cm4gX3JldmVydEFsbCghc29mdCwgbWVkaWEpO1xufTtcblxuU2Nyb2xsVHJpZ2dlci5jcmVhdGUgPSBmdW5jdGlvbiAodmFycywgYW5pbWF0aW9uKSB7XG4gIHJldHVybiBuZXcgU2Nyb2xsVHJpZ2dlcih2YXJzLCBhbmltYXRpb24pO1xufTtcblxuU2Nyb2xsVHJpZ2dlci5yZWZyZXNoID0gZnVuY3Rpb24gKHNhZmUpIHtcbiAgcmV0dXJuIHNhZmUgPyBfb25SZXNpemUodHJ1ZSkgOiAoX2NvcmVJbml0dGVkIHx8IFNjcm9sbFRyaWdnZXIucmVnaXN0ZXIoKSkgJiYgX3JlZnJlc2hBbGwodHJ1ZSk7XG59O1xuXG5TY3JvbGxUcmlnZ2VyLnVwZGF0ZSA9IGZ1bmN0aW9uIChmb3JjZSkge1xuICByZXR1cm4gKytfc2Nyb2xsZXJzLmNhY2hlICYmIF91cGRhdGVBbGwoZm9yY2UgPT09IHRydWUgPyAyIDogMCk7XG59O1xuXG5TY3JvbGxUcmlnZ2VyLmNsZWFyU2Nyb2xsTWVtb3J5ID0gX2NsZWFyU2Nyb2xsTWVtb3J5O1xuXG5TY3JvbGxUcmlnZ2VyLm1heFNjcm9sbCA9IGZ1bmN0aW9uIChlbGVtZW50LCBob3Jpem9udGFsKSB7XG4gIHJldHVybiBfbWF4U2Nyb2xsKGVsZW1lbnQsIGhvcml6b250YWwgPyBfaG9yaXpvbnRhbCA6IF92ZXJ0aWNhbCk7XG59O1xuXG5TY3JvbGxUcmlnZ2VyLmdldFNjcm9sbEZ1bmMgPSBmdW5jdGlvbiAoZWxlbWVudCwgaG9yaXpvbnRhbCkge1xuICByZXR1cm4gX2dldFNjcm9sbEZ1bmMoX2dldFRhcmdldChlbGVtZW50KSwgaG9yaXpvbnRhbCA/IF9ob3Jpem9udGFsIDogX3ZlcnRpY2FsKTtcbn07XG5cblNjcm9sbFRyaWdnZXIuZ2V0QnlJZCA9IGZ1bmN0aW9uIChpZCkge1xuICByZXR1cm4gX2lkc1tpZF07XG59O1xuXG5TY3JvbGxUcmlnZ2VyLmdldEFsbCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF90cmlnZ2Vycy5maWx0ZXIoZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC52YXJzLmlkICE9PSBcIlNjcm9sbFNtb290aGVyXCI7XG4gIH0pO1xufTsgLy8gaXQncyBjb21tb24gZm9yIHBlb3BsZSB0byBTY3JvbGxUcmlnZ2VyLmdldEFsbCh0ID0+IHQua2lsbCgpKSBvbiBwYWdlIHJvdXRlcywgZm9yIGV4YW1wbGUsIGFuZCB3ZSBkb24ndCB3YW50IGl0IHRvIHJ1aW4gc21vb3RoIHNjcm9sbGluZyBieSBraWxsaW5nIHRoZSBtYWluIFNjcm9sbFNtb290aGVyIG9uZS5cblxuXG5TY3JvbGxUcmlnZ2VyLmlzU2Nyb2xsaW5nID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gISFfbGFzdFNjcm9sbFRpbWU7XG59O1xuXG5TY3JvbGxUcmlnZ2VyLnNuYXBEaXJlY3Rpb25hbCA9IF9zbmFwRGlyZWN0aW9uYWw7XG5cblNjcm9sbFRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uICh0eXBlLCBjYWxsYmFjaykge1xuICB2YXIgYSA9IF9saXN0ZW5lcnNbdHlwZV0gfHwgKF9saXN0ZW5lcnNbdHlwZV0gPSBbXSk7XG4gIH5hLmluZGV4T2YoY2FsbGJhY2spIHx8IGEucHVzaChjYWxsYmFjayk7XG59O1xuXG5TY3JvbGxUcmlnZ2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAodHlwZSwgY2FsbGJhY2spIHtcbiAgdmFyIGEgPSBfbGlzdGVuZXJzW3R5cGVdLFxuICAgICAgaSA9IGEgJiYgYS5pbmRleE9mKGNhbGxiYWNrKTtcbiAgaSA+PSAwICYmIGEuc3BsaWNlKGksIDEpO1xufTtcblxuU2Nyb2xsVHJpZ2dlci5iYXRjaCA9IGZ1bmN0aW9uICh0YXJnZXRzLCB2YXJzKSB7XG4gIHZhciByZXN1bHQgPSBbXSxcbiAgICAgIHZhcnNDb3B5ID0ge30sXG4gICAgICBpbnRlcnZhbCA9IHZhcnMuaW50ZXJ2YWwgfHwgMC4wMTYsXG4gICAgICBiYXRjaE1heCA9IHZhcnMuYmF0Y2hNYXggfHwgMWU5LFxuICAgICAgcHJveHlDYWxsYmFjayA9IGZ1bmN0aW9uIHByb3h5Q2FsbGJhY2sodHlwZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgZWxlbWVudHMgPSBbXSxcbiAgICAgICAgdHJpZ2dlcnMgPSBbXSxcbiAgICAgICAgZGVsYXkgPSBnc2FwLmRlbGF5ZWRDYWxsKGludGVydmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsYmFjayhlbGVtZW50cywgdHJpZ2dlcnMpO1xuICAgICAgZWxlbWVudHMgPSBbXTtcbiAgICAgIHRyaWdnZXJzID0gW107XG4gICAgfSkucGF1c2UoKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNlbGYpIHtcbiAgICAgIGVsZW1lbnRzLmxlbmd0aCB8fCBkZWxheS5yZXN0YXJ0KHRydWUpO1xuICAgICAgZWxlbWVudHMucHVzaChzZWxmLnRyaWdnZXIpO1xuICAgICAgdHJpZ2dlcnMucHVzaChzZWxmKTtcbiAgICAgIGJhdGNoTWF4IDw9IGVsZW1lbnRzLmxlbmd0aCAmJiBkZWxheS5wcm9ncmVzcygxKTtcbiAgICB9O1xuICB9LFxuICAgICAgcDtcblxuICBmb3IgKHAgaW4gdmFycykge1xuICAgIHZhcnNDb3B5W3BdID0gcC5zdWJzdHIoMCwgMikgPT09IFwib25cIiAmJiBfaXNGdW5jdGlvbih2YXJzW3BdKSAmJiBwICE9PSBcIm9uUmVmcmVzaEluaXRcIiA/IHByb3h5Q2FsbGJhY2socCwgdmFyc1twXSkgOiB2YXJzW3BdO1xuICB9XG5cbiAgaWYgKF9pc0Z1bmN0aW9uKGJhdGNoTWF4KSkge1xuICAgIGJhdGNoTWF4ID0gYmF0Y2hNYXgoKTtcblxuICAgIF9hZGRMaXN0ZW5lcihTY3JvbGxUcmlnZ2VyLCBcInJlZnJlc2hcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGJhdGNoTWF4ID0gdmFycy5iYXRjaE1heCgpO1xuICAgIH0pO1xuICB9XG5cbiAgX3RvQXJyYXkodGFyZ2V0cykuZm9yRWFjaChmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgdmFyIGNvbmZpZyA9IHt9O1xuXG4gICAgZm9yIChwIGluIHZhcnNDb3B5KSB7XG4gICAgICBjb25maWdbcF0gPSB2YXJzQ29weVtwXTtcbiAgICB9XG5cbiAgICBjb25maWcudHJpZ2dlciA9IHRhcmdldDtcbiAgICByZXN1bHQucHVzaChTY3JvbGxUcmlnZ2VyLmNyZWF0ZShjb25maWcpKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07IC8vIHRvIHJlZHVjZSBmaWxlIHNpemUuIGNsYW1wcyB0aGUgc2Nyb2xsIGFuZCBhbHNvIHJldHVybnMgYSBkdXJhdGlvbiBtdWx0aXBsaWVyIHNvIHRoYXQgaWYgdGhlIHNjcm9sbCBnZXRzIGNob3BwZWQgc2hvcnRlciwgdGhlIGR1cmF0aW9uIGdldHMgY3VydGFpbGVkIGFzIHdlbGwgKG90aGVyd2lzZSBpZiB5b3UncmUgdmVyeSBjbG9zZSB0byB0aGUgdG9wIG9mIHRoZSBwYWdlLCBmb3IgZXhhbXBsZSwgYW5kIHN3aXBlIHVwIHJlYWxseSBmYXN0LCBpdCdsbCBzdWRkZW5seSBzbG93IGRvd24gYW5kIHRha2UgYSBsb25nIHRpbWUgdG8gcmVhY2ggdGhlIHRvcCkuXG5cblxudmFyIF9jbGFtcFNjcm9sbEFuZEdldER1cmF0aW9uTXVsdGlwbGllciA9IGZ1bmN0aW9uIF9jbGFtcFNjcm9sbEFuZEdldER1cmF0aW9uTXVsdGlwbGllcihzY3JvbGxGdW5jLCBjdXJyZW50LCBlbmQsIG1heCkge1xuICBjdXJyZW50ID4gbWF4ID8gc2Nyb2xsRnVuYyhtYXgpIDogY3VycmVudCA8IDAgJiYgc2Nyb2xsRnVuYygwKTtcbiAgcmV0dXJuIGVuZCA+IG1heCA/IChtYXggLSBjdXJyZW50KSAvIChlbmQgLSBjdXJyZW50KSA6IGVuZCA8IDAgPyBjdXJyZW50IC8gKGN1cnJlbnQgLSBlbmQpIDogMTtcbn0sXG4gICAgX2FsbG93TmF0aXZlUGFubmluZyA9IGZ1bmN0aW9uIF9hbGxvd05hdGl2ZVBhbm5pbmcodGFyZ2V0LCBkaXJlY3Rpb24pIHtcbiAgaWYgKGRpcmVjdGlvbiA9PT0gdHJ1ZSkge1xuICAgIHRhcmdldC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcInRvdWNoLWFjdGlvblwiKTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQuc3R5bGUudG91Y2hBY3Rpb24gPSBkaXJlY3Rpb24gPT09IHRydWUgPyBcImF1dG9cIiA6IGRpcmVjdGlvbiA/IFwicGFuLVwiICsgZGlyZWN0aW9uICsgKE9ic2VydmVyLmlzVG91Y2ggPyBcIiBwaW5jaC16b29tXCIgOiBcIlwiKSA6IFwibm9uZVwiOyAvLyBub3RlOiBGaXJlZm94IGRvZXNuJ3Qgc3VwcG9ydCBpdCBwaW5jaC16b29tIHByb3Blcmx5LCBhdCBsZWFzdCBpbiBhZGRpdGlvbiB0byBhIHBhbi14IG9yIHBhbi15LlxuICB9XG5cbiAgdGFyZ2V0ID09PSBfZG9jRWwgJiYgX2FsbG93TmF0aXZlUGFubmluZyhfYm9keSwgZGlyZWN0aW9uKTtcbn0sXG4gICAgX292ZXJmbG93ID0ge1xuICBhdXRvOiAxLFxuICBzY3JvbGw6IDFcbn0sXG4gICAgX25lc3RlZFNjcm9sbCA9IGZ1bmN0aW9uIF9uZXN0ZWRTY3JvbGwoX3JlZjUpIHtcbiAgdmFyIGV2ZW50ID0gX3JlZjUuZXZlbnQsXG4gICAgICB0YXJnZXQgPSBfcmVmNS50YXJnZXQsXG4gICAgICBheGlzID0gX3JlZjUuYXhpcztcblxuICB2YXIgbm9kZSA9IChldmVudC5jaGFuZ2VkVG91Y2hlcyA/IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdIDogZXZlbnQpLnRhcmdldCxcbiAgICAgIGNhY2hlID0gbm9kZS5fZ3NhcCB8fCBnc2FwLmNvcmUuZ2V0Q2FjaGUobm9kZSksXG4gICAgICB0aW1lID0gX2dldFRpbWUoKSxcbiAgICAgIGNzO1xuXG4gIGlmICghY2FjaGUuX2lzU2Nyb2xsVCB8fCB0aW1lIC0gY2FjaGUuX2lzU2Nyb2xsVCA+IDIwMDApIHtcbiAgICAvLyBjYWNoZSBmb3IgMiBzZWNvbmRzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UuXG4gICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPT0gX2JvZHkgJiYgKG5vZGUuc2Nyb2xsSGVpZ2h0IDw9IG5vZGUuY2xpZW50SGVpZ2h0ICYmIG5vZGUuc2Nyb2xsV2lkdGggPD0gbm9kZS5jbGllbnRXaWR0aCB8fCAhKF9vdmVyZmxvd1soY3MgPSBfZ2V0Q29tcHV0ZWRTdHlsZShub2RlKSkub3ZlcmZsb3dZXSB8fCBfb3ZlcmZsb3dbY3Mub3ZlcmZsb3dYXSkpKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cblxuICAgIGNhY2hlLl9pc1Njcm9sbCA9IG5vZGUgJiYgbm9kZSAhPT0gdGFyZ2V0ICYmICFfaXNWaWV3cG9ydChub2RlKSAmJiAoX292ZXJmbG93WyhjcyA9IF9nZXRDb21wdXRlZFN0eWxlKG5vZGUpKS5vdmVyZmxvd1ldIHx8IF9vdmVyZmxvd1tjcy5vdmVyZmxvd1hdKTtcbiAgICBjYWNoZS5faXNTY3JvbGxUID0gdGltZTtcbiAgfVxuXG4gIGlmIChjYWNoZS5faXNTY3JvbGwgfHwgYXhpcyA9PT0gXCJ4XCIpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5fZ3NhcEFsbG93ID0gdHJ1ZTtcbiAgfVxufSxcbiAgICAvLyBjYXB0dXJlIGV2ZW50cyBvbiBzY3JvbGxhYmxlIGVsZW1lbnRzIElOU0lERSB0aGUgPGJvZHk+IGFuZCBhbGxvdyB0aG9zZSBieSBjYWxsaW5nIHN0b3BQcm9wYWdhdGlvbigpIHdoZW4gd2UgZmluZCBhIHNjcm9sbGFibGUgYW5jZXN0b3Jcbl9pbnB1dE9ic2VydmVyID0gZnVuY3Rpb24gX2lucHV0T2JzZXJ2ZXIodGFyZ2V0LCB0eXBlLCBpbnB1dHMsIG5lc3RlZCkge1xuICByZXR1cm4gT2JzZXJ2ZXIuY3JlYXRlKHtcbiAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICBjYXB0dXJlOiB0cnVlLFxuICAgIGRlYm91bmNlOiBmYWxzZSxcbiAgICBsb2NrQXhpczogdHJ1ZSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIG9uV2hlZWw6IG5lc3RlZCA9IG5lc3RlZCAmJiBfbmVzdGVkU2Nyb2xsLFxuICAgIG9uUHJlc3M6IG5lc3RlZCxcbiAgICBvbkRyYWc6IG5lc3RlZCxcbiAgICBvblNjcm9sbDogbmVzdGVkLFxuICAgIG9uRW5hYmxlOiBmdW5jdGlvbiBvbkVuYWJsZSgpIHtcbiAgICAgIHJldHVybiBpbnB1dHMgJiYgX2FkZExpc3RlbmVyKF9kb2MsIE9ic2VydmVyLmV2ZW50VHlwZXNbMF0sIF9jYXB0dXJlSW5wdXRzLCBmYWxzZSwgdHJ1ZSk7XG4gICAgfSxcbiAgICBvbkRpc2FibGU6IGZ1bmN0aW9uIG9uRGlzYWJsZSgpIHtcbiAgICAgIHJldHVybiBfcmVtb3ZlTGlzdGVuZXIoX2RvYywgT2JzZXJ2ZXIuZXZlbnRUeXBlc1swXSwgX2NhcHR1cmVJbnB1dHMsIHRydWUpO1xuICAgIH1cbiAgfSk7XG59LFxuICAgIF9pbnB1dEV4cCA9IC8oaW5wdXR8bGFiZWx8c2VsZWN0fHRleHRhcmVhKS9pLFxuICAgIF9pbnB1dElzRm9jdXNlZCxcbiAgICBfY2FwdHVyZUlucHV0cyA9IGZ1bmN0aW9uIF9jYXB0dXJlSW5wdXRzKGUpIHtcbiAgdmFyIGlzSW5wdXQgPSBfaW5wdXRFeHAudGVzdChlLnRhcmdldC50YWdOYW1lKTtcblxuICBpZiAoaXNJbnB1dCB8fCBfaW5wdXRJc0ZvY3VzZWQpIHtcbiAgICBlLl9nc2FwQWxsb3cgPSB0cnVlO1xuICAgIF9pbnB1dElzRm9jdXNlZCA9IGlzSW5wdXQ7XG4gIH1cbn0sXG4gICAgX2dldFNjcm9sbE5vcm1hbGl6ZXIgPSBmdW5jdGlvbiBfZ2V0U2Nyb2xsTm9ybWFsaXplcih2YXJzKSB7XG4gIF9pc09iamVjdCh2YXJzKSB8fCAodmFycyA9IHt9KTtcbiAgdmFycy5wcmV2ZW50RGVmYXVsdCA9IHZhcnMuaXNOb3JtYWxpemVyID0gdmFycy5hbGxvd0NsaWNrcyA9IHRydWU7XG4gIHZhcnMudHlwZSB8fCAodmFycy50eXBlID0gXCJ3aGVlbCx0b3VjaFwiKTtcbiAgdmFycy5kZWJvdW5jZSA9ICEhdmFycy5kZWJvdW5jZTtcbiAgdmFycy5pZCA9IHZhcnMuaWQgfHwgXCJub3JtYWxpemVyXCI7XG5cbiAgdmFyIF92YXJzMiA9IHZhcnMsXG4gICAgICBub3JtYWxpemVTY3JvbGxYID0gX3ZhcnMyLm5vcm1hbGl6ZVNjcm9sbFgsXG4gICAgICBtb21lbnR1bSA9IF92YXJzMi5tb21lbnR1bSxcbiAgICAgIGFsbG93TmVzdGVkU2Nyb2xsID0gX3ZhcnMyLmFsbG93TmVzdGVkU2Nyb2xsLFxuICAgICAgb25SZWxlYXNlID0gX3ZhcnMyLm9uUmVsZWFzZSxcbiAgICAgIHNlbGYsXG4gICAgICBtYXhZLFxuICAgICAgdGFyZ2V0ID0gX2dldFRhcmdldCh2YXJzLnRhcmdldCkgfHwgX2RvY0VsLFxuICAgICAgc21vb3RoZXIgPSBnc2FwLmNvcmUuZ2xvYmFscygpLlNjcm9sbFNtb290aGVyLFxuICAgICAgc21vb3RoZXJJbnN0YW5jZSA9IHNtb290aGVyICYmIHNtb290aGVyLmdldCgpLFxuICAgICAgY29udGVudCA9IF9maXhJT1NCdWcgJiYgKHZhcnMuY29udGVudCAmJiBfZ2V0VGFyZ2V0KHZhcnMuY29udGVudCkgfHwgc21vb3RoZXJJbnN0YW5jZSAmJiB2YXJzLmNvbnRlbnQgIT09IGZhbHNlICYmICFzbW9vdGhlckluc3RhbmNlLnNtb290aCgpICYmIHNtb290aGVySW5zdGFuY2UuY29udGVudCgpKSxcbiAgICAgIHNjcm9sbEZ1bmNZID0gX2dldFNjcm9sbEZ1bmModGFyZ2V0LCBfdmVydGljYWwpLFxuICAgICAgc2Nyb2xsRnVuY1ggPSBfZ2V0U2Nyb2xsRnVuYyh0YXJnZXQsIF9ob3Jpem9udGFsKSxcbiAgICAgIHNjYWxlID0gMSxcbiAgICAgIGluaXRpYWxTY2FsZSA9IChPYnNlcnZlci5pc1RvdWNoICYmIF93aW4udmlzdWFsVmlld3BvcnQgPyBfd2luLnZpc3VhbFZpZXdwb3J0LnNjYWxlICogX3dpbi52aXN1YWxWaWV3cG9ydC53aWR0aCA6IF93aW4ub3V0ZXJXaWR0aCkgLyBfd2luLmlubmVyV2lkdGgsXG4gICAgICB3aGVlbFJlZnJlc2ggPSAwLFxuICAgICAgcmVzb2x2ZU1vbWVudHVtRHVyYXRpb24gPSBfaXNGdW5jdGlvbihtb21lbnR1bSkgPyBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG1vbWVudHVtKHNlbGYpO1xuICB9IDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBtb21lbnR1bSB8fCAyLjg7XG4gIH0sXG4gICAgICBsYXN0UmVmcmVzaElELFxuICAgICAgc2tpcFRvdWNoTW92ZSxcbiAgICAgIGlucHV0T2JzZXJ2ZXIgPSBfaW5wdXRPYnNlcnZlcih0YXJnZXQsIHZhcnMudHlwZSwgdHJ1ZSwgYWxsb3dOZXN0ZWRTY3JvbGwpLFxuICAgICAgcmVzdW1lVG91Y2hNb3ZlID0gZnVuY3Rpb24gcmVzdW1lVG91Y2hNb3ZlKCkge1xuICAgIHJldHVybiBza2lwVG91Y2hNb3ZlID0gZmFsc2U7XG4gIH0sXG4gICAgICBzY3JvbGxDbGFtcFggPSBfcGFzc1Rocm91Z2gsXG4gICAgICBzY3JvbGxDbGFtcFkgPSBfcGFzc1Rocm91Z2gsXG4gICAgICB1cGRhdGVDbGFtcHMgPSBmdW5jdGlvbiB1cGRhdGVDbGFtcHMoKSB7XG4gICAgbWF4WSA9IF9tYXhTY3JvbGwodGFyZ2V0LCBfdmVydGljYWwpO1xuICAgIHNjcm9sbENsYW1wWSA9IF9jbGFtcChfZml4SU9TQnVnID8gMSA6IDAsIG1heFkpO1xuICAgIG5vcm1hbGl6ZVNjcm9sbFggJiYgKHNjcm9sbENsYW1wWCA9IF9jbGFtcCgwLCBfbWF4U2Nyb2xsKHRhcmdldCwgX2hvcml6b250YWwpKSk7XG4gICAgbGFzdFJlZnJlc2hJRCA9IF9yZWZyZXNoSUQ7XG4gIH0sXG4gICAgICByZW1vdmVDb250ZW50T2Zmc2V0ID0gZnVuY3Rpb24gcmVtb3ZlQ29udGVudE9mZnNldCgpIHtcbiAgICBjb250ZW50Ll9nc2FwLnkgPSBfcm91bmQocGFyc2VGbG9hdChjb250ZW50Ll9nc2FwLnkpICsgc2Nyb2xsRnVuY1kub2Zmc2V0KSArIFwicHhcIjtcbiAgICBjb250ZW50LnN0eWxlLnRyYW5zZm9ybSA9IFwibWF0cml4M2QoMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgXCIgKyBwYXJzZUZsb2F0KGNvbnRlbnQuX2dzYXAueSkgKyBcIiwgMCwgMSlcIjtcbiAgICBzY3JvbGxGdW5jWS5vZmZzZXQgPSBzY3JvbGxGdW5jWS5jYWNoZUlEID0gMDtcbiAgfSxcbiAgICAgIGlnbm9yZURyYWcgPSBmdW5jdGlvbiBpZ25vcmVEcmFnKCkge1xuICAgIGlmIChza2lwVG91Y2hNb3ZlKSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVzdW1lVG91Y2hNb3ZlKTtcblxuICAgICAgdmFyIG9mZnNldCA9IF9yb3VuZChzZWxmLmRlbHRhWSAvIDIpLFxuICAgICAgICAgIHNjcm9sbCA9IHNjcm9sbENsYW1wWShzY3JvbGxGdW5jWS52IC0gb2Zmc2V0KTtcblxuICAgICAgaWYgKGNvbnRlbnQgJiYgc2Nyb2xsICE9PSBzY3JvbGxGdW5jWS52ICsgc2Nyb2xsRnVuY1kub2Zmc2V0KSB7XG4gICAgICAgIHNjcm9sbEZ1bmNZLm9mZnNldCA9IHNjcm9sbCAtIHNjcm9sbEZ1bmNZLnY7XG5cbiAgICAgICAgdmFyIHkgPSBfcm91bmQoKHBhcnNlRmxvYXQoY29udGVudCAmJiBjb250ZW50Ll9nc2FwLnkpIHx8IDApIC0gc2Nyb2xsRnVuY1kub2Zmc2V0KTtcblxuICAgICAgICBjb250ZW50LnN0eWxlLnRyYW5zZm9ybSA9IFwibWF0cml4M2QoMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgXCIgKyB5ICsgXCIsIDAsIDEpXCI7XG4gICAgICAgIGNvbnRlbnQuX2dzYXAueSA9IHkgKyBcInB4XCI7XG4gICAgICAgIHNjcm9sbEZ1bmNZLmNhY2hlSUQgPSBfc2Nyb2xsZXJzLmNhY2hlO1xuXG4gICAgICAgIF91cGRhdGVBbGwoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc2Nyb2xsRnVuY1kub2Zmc2V0ICYmIHJlbW92ZUNvbnRlbnRPZmZzZXQoKTtcbiAgICBza2lwVG91Y2hNb3ZlID0gdHJ1ZTtcbiAgfSxcbiAgICAgIHR3ZWVuLFxuICAgICAgc3RhcnRTY3JvbGxYLFxuICAgICAgc3RhcnRTY3JvbGxZLFxuICAgICAgb25TdG9wRGVsYXllZENhbGwsXG4gICAgICBvblJlc2l6ZSA9IGZ1bmN0aW9uIG9uUmVzaXplKCkge1xuICAgIC8vIGlmIHRoZSB3aW5kb3cgcmVzaXplcywgbGlrZSBvbiBhbiBpUGhvbmUgd2hpY2ggQXBwbGUgRk9SQ0VTIHRoZSBhZGRyZXNzIGJhciB0byBzaG93L2hpZGUgZXZlbiBpZiB3ZSBldmVudC5wcmV2ZW50RGVmYXVsdCgpLCBpdCBtYXkgYmUgc2Nyb2xsaW5nIHRvbyBmYXIgbm93IHRoYXQgdGhlIGFkZHJlc3MgYmFyIGlzIHNob3dpbmcsIHNvIHdlIG11c3QgZHluYW1pY2FsbHkgYWRqdXN0IHRoZSBtb21lbnR1bSB0d2Vlbi5cbiAgICB1cGRhdGVDbGFtcHMoKTtcblxuICAgIGlmICh0d2Vlbi5pc0FjdGl2ZSgpICYmIHR3ZWVuLnZhcnMuc2Nyb2xsWSA+IG1heFkpIHtcbiAgICAgIHNjcm9sbEZ1bmNZKCkgPiBtYXhZID8gdHdlZW4ucHJvZ3Jlc3MoMSkgJiYgc2Nyb2xsRnVuY1kobWF4WSkgOiB0d2Vlbi5yZXNldFRvKFwic2Nyb2xsWVwiLCBtYXhZKTtcbiAgICB9XG4gIH07XG5cbiAgY29udGVudCAmJiBnc2FwLnNldChjb250ZW50LCB7XG4gICAgeTogXCIrPTBcIlxuICB9KTsgLy8gdG8gZW5zdXJlIHRoZXJlJ3MgYSBjYWNoZSAoZWxlbWVudC5fZ3NhcClcblxuICB2YXJzLmlnbm9yZUNoZWNrID0gZnVuY3Rpb24gKGUpIHtcbiAgICByZXR1cm4gX2ZpeElPU0J1ZyAmJiBlLnR5cGUgPT09IFwidG91Y2htb3ZlXCIgJiYgaWdub3JlRHJhZyhlKSB8fCBzY2FsZSA+IDEuMDUgJiYgZS50eXBlICE9PSBcInRvdWNoc3RhcnRcIiB8fCBzZWxmLmlzR2VzdHVyaW5nIHx8IGUudG91Y2hlcyAmJiBlLnRvdWNoZXMubGVuZ3RoID4gMTtcbiAgfTtcblxuICB2YXJzLm9uUHJlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgc2tpcFRvdWNoTW92ZSA9IGZhbHNlO1xuICAgIHZhciBwcmV2U2NhbGUgPSBzY2FsZTtcbiAgICBzY2FsZSA9IF9yb3VuZCgoX3dpbi52aXN1YWxWaWV3cG9ydCAmJiBfd2luLnZpc3VhbFZpZXdwb3J0LnNjYWxlIHx8IDEpIC8gaW5pdGlhbFNjYWxlKTtcbiAgICB0d2Vlbi5wYXVzZSgpO1xuICAgIHByZXZTY2FsZSAhPT0gc2NhbGUgJiYgX2FsbG93TmF0aXZlUGFubmluZyh0YXJnZXQsIHNjYWxlID4gMS4wMSA/IHRydWUgOiBub3JtYWxpemVTY3JvbGxYID8gZmFsc2UgOiBcInhcIik7XG4gICAgc3RhcnRTY3JvbGxYID0gc2Nyb2xsRnVuY1goKTtcbiAgICBzdGFydFNjcm9sbFkgPSBzY3JvbGxGdW5jWSgpO1xuICAgIHVwZGF0ZUNsYW1wcygpO1xuICAgIGxhc3RSZWZyZXNoSUQgPSBfcmVmcmVzaElEO1xuICB9O1xuXG4gIHZhcnMub25SZWxlYXNlID0gdmFycy5vbkdlc3R1cmVTdGFydCA9IGZ1bmN0aW9uIChzZWxmLCB3YXNEcmFnZ2luZykge1xuICAgIHNjcm9sbEZ1bmNZLm9mZnNldCAmJiByZW1vdmVDb250ZW50T2Zmc2V0KCk7XG5cbiAgICBpZiAoIXdhc0RyYWdnaW5nKSB7XG4gICAgICBvblN0b3BEZWxheWVkQ2FsbC5yZXN0YXJ0KHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfc2Nyb2xsZXJzLmNhY2hlKys7IC8vIG1ha2Ugc3VyZSB3ZSdyZSBwdWxsaW5nIHRoZSBub24tY2FjaGVkIHZhbHVlXG4gICAgICAvLyBhbHRlcm5hdGUgYWxnb3JpdGhtOiBkdXJYID0gTWF0aC5taW4oNiwgTWF0aC5hYnMoc2VsZi52ZWxvY2l0eVggLyA4MDApKSxcdGR1ciA9IE1hdGgubWF4KGR1clgsIE1hdGgubWluKDYsIE1hdGguYWJzKHNlbGYudmVsb2NpdHlZIC8gODAwKSkpOyBkdXIgPSBkdXIgKiAoMC40ICsgKDEgLSBfcG93ZXI0SW4oZHVyIC8gNikpICogMC42KSkgKiAobW9tZW50dW1TcGVlZCB8fCAxKVxuXG4gICAgICB2YXIgZHVyID0gcmVzb2x2ZU1vbWVudHVtRHVyYXRpb24oKSxcbiAgICAgICAgICBjdXJyZW50U2Nyb2xsLFxuICAgICAgICAgIGVuZFNjcm9sbDtcblxuICAgICAgaWYgKG5vcm1hbGl6ZVNjcm9sbFgpIHtcbiAgICAgICAgY3VycmVudFNjcm9sbCA9IHNjcm9sbEZ1bmNYKCk7XG4gICAgICAgIGVuZFNjcm9sbCA9IGN1cnJlbnRTY3JvbGwgKyBkdXIgKiAwLjA1ICogLXNlbGYudmVsb2NpdHlYIC8gMC4yMjc7IC8vIHRoZSBjb25zdGFudCAuMjI3IGlzIGZyb20gcG93ZXI0KDAuMDUpLiB2ZWxvY2l0eSBpcyBpbnZlcnRlZCBiZWNhdXNlIHNjcm9sbGluZyBnb2VzIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uXG5cbiAgICAgICAgZHVyICo9IF9jbGFtcFNjcm9sbEFuZEdldER1cmF0aW9uTXVsdGlwbGllcihzY3JvbGxGdW5jWCwgY3VycmVudFNjcm9sbCwgZW5kU2Nyb2xsLCBfbWF4U2Nyb2xsKHRhcmdldCwgX2hvcml6b250YWwpKTtcbiAgICAgICAgdHdlZW4udmFycy5zY3JvbGxYID0gc2Nyb2xsQ2xhbXBYKGVuZFNjcm9sbCk7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRTY3JvbGwgPSBzY3JvbGxGdW5jWSgpO1xuICAgICAgZW5kU2Nyb2xsID0gY3VycmVudFNjcm9sbCArIGR1ciAqIDAuMDUgKiAtc2VsZi52ZWxvY2l0eVkgLyAwLjIyNzsgLy8gdGhlIGNvbnN0YW50IC4yMjcgaXMgZnJvbSBwb3dlcjQoMC4wNSlcblxuICAgICAgZHVyICo9IF9jbGFtcFNjcm9sbEFuZEdldER1cmF0aW9uTXVsdGlwbGllcihzY3JvbGxGdW5jWSwgY3VycmVudFNjcm9sbCwgZW5kU2Nyb2xsLCBfbWF4U2Nyb2xsKHRhcmdldCwgX3ZlcnRpY2FsKSk7XG4gICAgICB0d2Vlbi52YXJzLnNjcm9sbFkgPSBzY3JvbGxDbGFtcFkoZW5kU2Nyb2xsKTtcbiAgICAgIHR3ZWVuLmludmFsaWRhdGUoKS5kdXJhdGlvbihkdXIpLnBsYXkoMC4wMSk7XG5cbiAgICAgIGlmIChfZml4SU9TQnVnICYmIHR3ZWVuLnZhcnMuc2Nyb2xsWSA+PSBtYXhZIHx8IGN1cnJlbnRTY3JvbGwgPj0gbWF4WSAtIDEpIHtcbiAgICAgICAgLy8gaU9TIGJ1ZzogaXQnbGwgc2hvdyB0aGUgYWRkcmVzcyBiYXIgYnV0IE5PVCBmaXJlIHRoZSB3aW5kb3cgXCJyZXNpemVcIiBldmVudCB1bnRpbCB0aGUgYW5pbWF0aW9uIGlzIGRvbmUgYnV0IHdlIG11c3QgcHJvdGVjdCBhZ2FpbnN0IG92ZXJzaG9vdCBzbyB3ZSBsZXZlcmFnZSBhbiBvblVwZGF0ZSB0byBkbyBzby5cbiAgICAgICAgZ3NhcC50byh7fSwge1xuICAgICAgICAgIG9uVXBkYXRlOiBvblJlc2l6ZSxcbiAgICAgICAgICBkdXJhdGlvbjogZHVyXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIG9uUmVsZWFzZSAmJiBvblJlbGVhc2Uoc2VsZik7XG4gIH07XG5cbiAgdmFycy5vbldoZWVsID0gZnVuY3Rpb24gKCkge1xuICAgIHR3ZWVuLl90cyAmJiB0d2Vlbi5wYXVzZSgpO1xuXG4gICAgaWYgKF9nZXRUaW1lKCkgLSB3aGVlbFJlZnJlc2ggPiAxMDAwKSB7XG4gICAgICAvLyBhZnRlciAxIHNlY29uZCwgcmVmcmVzaCB0aGUgY2xhbXBzIG90aGVyd2lzZSB0aGF0J2xsIG9ubHkgaGFwcGVuIHdoZW4gU2Nyb2xsVHJpZ2dlci5yZWZyZXNoKCkgaXMgY2FsbGVkIG9yIGZvciB0b3VjaC1zY3JvbGxpbmcuXG4gICAgICBsYXN0UmVmcmVzaElEID0gMDtcbiAgICAgIHdoZWVsUmVmcmVzaCA9IF9nZXRUaW1lKCk7XG4gICAgfVxuICB9O1xuXG4gIHZhcnMub25DaGFuZ2UgPSBmdW5jdGlvbiAoc2VsZiwgZHgsIGR5LCB4QXJyYXksIHlBcnJheSkge1xuICAgIF9yZWZyZXNoSUQgIT09IGxhc3RSZWZyZXNoSUQgJiYgdXBkYXRlQ2xhbXBzKCk7XG4gICAgZHggJiYgbm9ybWFsaXplU2Nyb2xsWCAmJiBzY3JvbGxGdW5jWChzY3JvbGxDbGFtcFgoeEFycmF5WzJdID09PSBkeCA/IHN0YXJ0U2Nyb2xsWCArIChzZWxmLnN0YXJ0WCAtIHNlbGYueCkgOiBzY3JvbGxGdW5jWCgpICsgZHggLSB4QXJyYXlbMV0pKTsgLy8gZm9yIG1vcmUgcHJlY2lzaW9uLCB3ZSB0cmFjayBwb2ludGVyL3RvdWNoIG1vdmVtZW50IGZyb20gdGhlIHN0YXJ0LCBvdGhlcndpc2UgaXQnbGwgZHJpZnQuXG5cbiAgICBpZiAoZHkpIHtcbiAgICAgIHNjcm9sbEZ1bmNZLm9mZnNldCAmJiByZW1vdmVDb250ZW50T2Zmc2V0KCk7XG4gICAgICB2YXIgaXNUb3VjaCA9IHlBcnJheVsyXSA9PT0gZHksXG4gICAgICAgICAgeSA9IGlzVG91Y2ggPyBzdGFydFNjcm9sbFkgKyBzZWxmLnN0YXJ0WSAtIHNlbGYueSA6IHNjcm9sbEZ1bmNZKCkgKyBkeSAtIHlBcnJheVsxXSxcbiAgICAgICAgICB5Q2xhbXBlZCA9IHNjcm9sbENsYW1wWSh5KTtcbiAgICAgIGlzVG91Y2ggJiYgeSAhPT0geUNsYW1wZWQgJiYgKHN0YXJ0U2Nyb2xsWSArPSB5Q2xhbXBlZCAtIHkpO1xuICAgICAgc2Nyb2xsRnVuY1koeUNsYW1wZWQpO1xuICAgIH1cblxuICAgIChkeSB8fCBkeCkgJiYgX3VwZGF0ZUFsbCgpO1xuICB9O1xuXG4gIHZhcnMub25FbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgX2FsbG93TmF0aXZlUGFubmluZyh0YXJnZXQsIG5vcm1hbGl6ZVNjcm9sbFggPyBmYWxzZSA6IFwieFwiKTtcblxuICAgIFNjcm9sbFRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcihcInJlZnJlc2hcIiwgb25SZXNpemUpO1xuXG4gICAgX2FkZExpc3RlbmVyKF93aW4sIFwicmVzaXplXCIsIG9uUmVzaXplKTtcblxuICAgIGlmIChzY3JvbGxGdW5jWS5zbW9vdGgpIHtcbiAgICAgIHNjcm9sbEZ1bmNZLnRhcmdldC5zdHlsZS5zY3JvbGxCZWhhdmlvciA9IFwiYXV0b1wiO1xuICAgICAgc2Nyb2xsRnVuY1kuc21vb3RoID0gc2Nyb2xsRnVuY1guc21vb3RoID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaW5wdXRPYnNlcnZlci5lbmFibGUoKTtcbiAgfTtcblxuICB2YXJzLm9uRGlzYWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBfYWxsb3dOYXRpdmVQYW5uaW5nKHRhcmdldCwgdHJ1ZSk7XG5cbiAgICBfcmVtb3ZlTGlzdGVuZXIoX3dpbiwgXCJyZXNpemVcIiwgb25SZXNpemUpO1xuXG4gICAgU2Nyb2xsVHJpZ2dlci5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVmcmVzaFwiLCBvblJlc2l6ZSk7XG4gICAgaW5wdXRPYnNlcnZlci5raWxsKCk7XG4gIH07XG5cbiAgdmFycy5sb2NrQXhpcyA9IHZhcnMubG9ja0F4aXMgIT09IGZhbHNlO1xuICBzZWxmID0gbmV3IE9ic2VydmVyKHZhcnMpO1xuICBzZWxmLmlPUyA9IF9maXhJT1NCdWc7IC8vIHVzZWQgaW4gdGhlIE9ic2VydmVyIGdldENhY2hlZFNjcm9sbCgpIGZ1bmN0aW9uIHRvIHdvcmsgYXJvdW5kIGFuIGlPUyBidWcgdGhhdCB3cmVha3MgaGF2b2Mgd2l0aCBUb3VjaEV2ZW50LmNsaWVudFkgaWYgd2UgYWxsb3cgc2Nyb2xsIHRvIGdvIGFsbCB0aGUgd2F5IGJhY2sgdG8gMC5cblxuICBfZml4SU9TQnVnICYmICFzY3JvbGxGdW5jWSgpICYmIHNjcm9sbEZ1bmNZKDEpOyAvLyBpT1MgYnVnIGNhdXNlcyBldmVudC5jbGllbnRZIHZhbHVlcyB0byBmcmVhayBvdXQgKHdpbGRseSBpbmFjY3VyYXRlKSBpZiB0aGUgc2Nyb2xsIHBvc2l0aW9uIGlzIGV4YWN0bHkgMC5cblxuICBfZml4SU9TQnVnICYmIGdzYXAudGlja2VyLmFkZChfcGFzc1Rocm91Z2gpOyAvLyBwcmV2ZW50IHRoZSB0aWNrZXIgZnJvbSBzbGVlcGluZ1xuXG4gIG9uU3RvcERlbGF5ZWRDYWxsID0gc2VsZi5fZGM7XG4gIHR3ZWVuID0gZ3NhcC50byhzZWxmLCB7XG4gICAgZWFzZTogXCJwb3dlcjRcIixcbiAgICBwYXVzZWQ6IHRydWUsXG4gICAgaW5oZXJpdDogZmFsc2UsXG4gICAgc2Nyb2xsWDogbm9ybWFsaXplU2Nyb2xsWCA/IFwiKz0wLjFcIiA6IFwiKz0wXCIsXG4gICAgc2Nyb2xsWTogXCIrPTAuMVwiLFxuICAgIG1vZGlmaWVyczoge1xuICAgICAgc2Nyb2xsWTogX2ludGVycnVwdGlvblRyYWNrZXIoc2Nyb2xsRnVuY1ksIHNjcm9sbEZ1bmNZKCksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHR3ZWVuLnBhdXNlKCk7XG4gICAgICB9KVxuICAgIH0sXG4gICAgb25VcGRhdGU6IF91cGRhdGVBbGwsXG4gICAgb25Db21wbGV0ZTogb25TdG9wRGVsYXllZENhbGwudmFycy5vbkNvbXBsZXRlXG4gIH0pOyAvLyB3ZSBuZWVkIHRoZSBtb2RpZmllciB0byBzZW5zZSBpZiB0aGUgc2Nyb2xsIHBvc2l0aW9uIGlzIGFsdGVyZWQgb3V0c2lkZSBvZiB0aGUgbW9tZW50dW0gdHdlZW4gKGxpa2Ugd2l0aCBhIHNjcm9sbFRvIHR3ZWVuKSBzbyB3ZSBjYW4gcGF1c2UoKSBpdCB0byBwcmV2ZW50IGNvbmZsaWN0cy5cblxuICByZXR1cm4gc2VsZjtcbn07XG5cblNjcm9sbFRyaWdnZXIuc29ydCA9IGZ1bmN0aW9uIChmdW5jKSB7XG4gIGlmIChfaXNGdW5jdGlvbihmdW5jKSkge1xuICAgIHJldHVybiBfdHJpZ2dlcnMuc29ydChmdW5jKTtcbiAgfVxuXG4gIHZhciBzY3JvbGwgPSBfd2luLnBhZ2VZT2Zmc2V0IHx8IDA7XG4gIFNjcm9sbFRyaWdnZXIuZ2V0QWxsKCkuZm9yRWFjaChmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB0Ll9zb3J0WSA9IHQudHJpZ2dlciA/IHNjcm9sbCArIHQudHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgOiB0LnN0YXJ0ICsgX3dpbi5pbm5lckhlaWdodDtcbiAgfSk7XG4gIHJldHVybiBfdHJpZ2dlcnMuc29ydChmdW5jIHx8IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIChhLnZhcnMucmVmcmVzaFByaW9yaXR5IHx8IDApICogLTFlNiArIChhLnZhcnMuY29udGFpbmVyQW5pbWF0aW9uID8gMWU2IDogYS5fc29ydFkpIC0gKChiLnZhcnMuY29udGFpbmVyQW5pbWF0aW9uID8gMWU2IDogYi5fc29ydFkpICsgKGIudmFycy5yZWZyZXNoUHJpb3JpdHkgfHwgMCkgKiAtMWU2KTtcbiAgfSk7IC8vIGFueXRoaW5nIHdpdGggYSBjb250YWluZXJBbmltYXRpb24gc2hvdWxkIHJlZnJlc2ggbGFzdC5cbn07XG5cblNjcm9sbFRyaWdnZXIub2JzZXJ2ZSA9IGZ1bmN0aW9uICh2YXJzKSB7XG4gIHJldHVybiBuZXcgT2JzZXJ2ZXIodmFycyk7XG59O1xuXG5TY3JvbGxUcmlnZ2VyLm5vcm1hbGl6ZVNjcm9sbCA9IGZ1bmN0aW9uICh2YXJzKSB7XG4gIGlmICh0eXBlb2YgdmFycyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBfbm9ybWFsaXplcjtcbiAgfVxuXG4gIGlmICh2YXJzID09PSB0cnVlICYmIF9ub3JtYWxpemVyKSB7XG4gICAgcmV0dXJuIF9ub3JtYWxpemVyLmVuYWJsZSgpO1xuICB9XG5cbiAgaWYgKHZhcnMgPT09IGZhbHNlKSB7XG4gICAgX25vcm1hbGl6ZXIgJiYgX25vcm1hbGl6ZXIua2lsbCgpO1xuICAgIF9ub3JtYWxpemVyID0gdmFycztcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbm9ybWFsaXplciA9IHZhcnMgaW5zdGFuY2VvZiBPYnNlcnZlciA/IHZhcnMgOiBfZ2V0U2Nyb2xsTm9ybWFsaXplcih2YXJzKTtcbiAgX25vcm1hbGl6ZXIgJiYgX25vcm1hbGl6ZXIudGFyZ2V0ID09PSBub3JtYWxpemVyLnRhcmdldCAmJiBfbm9ybWFsaXplci5raWxsKCk7XG4gIF9pc1ZpZXdwb3J0KG5vcm1hbGl6ZXIudGFyZ2V0KSAmJiAoX25vcm1hbGl6ZXIgPSBub3JtYWxpemVyKTtcbiAgcmV0dXJuIG5vcm1hbGl6ZXI7XG59O1xuXG5TY3JvbGxUcmlnZ2VyLmNvcmUgPSB7XG4gIC8vIHNtYWxsZXIgZmlsZSBzaXplIHdheSB0byBsZXZlcmFnZSBpbiBTY3JvbGxTbW9vdGhlciBhbmQgT2JzZXJ2ZXJcbiAgX2dldFZlbG9jaXR5UHJvcDogX2dldFZlbG9jaXR5UHJvcCxcbiAgX2lucHV0T2JzZXJ2ZXI6IF9pbnB1dE9ic2VydmVyLFxuICBfc2Nyb2xsZXJzOiBfc2Nyb2xsZXJzLFxuICBfcHJveGllczogX3Byb3hpZXMsXG4gIGJyaWRnZToge1xuICAgIC8vIHdoZW4gbm9ybWFsaXplU2Nyb2xsIHNldHMgdGhlIHNjcm9sbCBwb3NpdGlvbiAoc3MgPSBzZXRTY3JvbGwpXG4gICAgc3M6IGZ1bmN0aW9uIHNzKCkge1xuICAgICAgX2xhc3RTY3JvbGxUaW1lIHx8IF9kaXNwYXRjaChcInNjcm9sbFN0YXJ0XCIpO1xuICAgICAgX2xhc3RTY3JvbGxUaW1lID0gX2dldFRpbWUoKTtcbiAgICB9LFxuICAgIC8vIGEgd2F5IHRvIGdldCB0aGUgX3JlZnJlc2hpbmcgdmFsdWUgaW4gT2JzZXJ2ZXJcbiAgICByZWY6IGZ1bmN0aW9uIHJlZigpIHtcbiAgICAgIHJldHVybiBfcmVmcmVzaGluZztcbiAgICB9XG4gIH1cbn07XG5fZ2V0R1NBUCgpICYmIGdzYXAucmVnaXN0ZXJQbHVnaW4oU2Nyb2xsVHJpZ2dlcik7XG5leHBvcnQgeyBTY3JvbGxUcmlnZ2VyIGFzIGRlZmF1bHQgfTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/gsap/ScrollTrigger.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/gsap/gsap-core.js\":\r\n/*!****************************************!*\\\r\n  !*** ./node_modules/gsap/gsap-core.js ***!\r\n  \\****************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"Animation\\\": () => (/* binding */ Animation),\\n/* harmony export */   \\\"Back\\\": () => (/* binding */ Back),\\n/* harmony export */   \\\"Bounce\\\": () => (/* binding */ Bounce),\\n/* harmony export */   \\\"Circ\\\": () => (/* binding */ Circ),\\n/* harmony export */   \\\"Cubic\\\": () => (/* binding */ Cubic),\\n/* harmony export */   \\\"Elastic\\\": () => (/* binding */ Elastic),\\n/* harmony export */   \\\"Expo\\\": () => (/* binding */ Expo),\\n/* harmony export */   \\\"GSCache\\\": () => (/* binding */ GSCache),\\n/* harmony export */   \\\"Linear\\\": () => (/* binding */ Linear),\\n/* harmony export */   \\\"Power0\\\": () => (/* binding */ Power0),\\n/* harmony export */   \\\"Power1\\\": () => (/* binding */ Power1),\\n/* harmony export */   \\\"Power2\\\": () => (/* binding */ Power2),\\n/* harmony export */   \\\"Power3\\\": () => (/* binding */ Power3),\\n/* harmony export */   \\\"Power4\\\": () => (/* binding */ Power4),\\n/* harmony export */   \\\"PropTween\\\": () => (/* binding */ PropTween),\\n/* harmony export */   \\\"Quad\\\": () => (/* binding */ Quad),\\n/* harmony export */   \\\"Quart\\\": () => (/* binding */ Quart),\\n/* harmony export */   \\\"Quint\\\": () => (/* binding */ Quint),\\n/* harmony export */   \\\"Sine\\\": () => (/* binding */ Sine),\\n/* harmony export */   \\\"SteppedEase\\\": () => (/* binding */ SteppedEase),\\n/* harmony export */   \\\"Strong\\\": () => (/* binding */ Strong),\\n/* harmony export */   \\\"Timeline\\\": () => (/* binding */ Timeline),\\n/* harmony export */   \\\"TimelineLite\\\": () => (/* binding */ Timeline),\\n/* harmony export */   \\\"TimelineMax\\\": () => (/* binding */ Timeline),\\n/* harmony export */   \\\"Tween\\\": () => (/* binding */ Tween),\\n/* harmony export */   \\\"TweenLite\\\": () => (/* binding */ Tween),\\n/* harmony export */   \\\"TweenMax\\\": () => (/* binding */ Tween),\\n/* harmony export */   \\\"_checkPlugin\\\": () => (/* binding */ _checkPlugin),\\n/* harmony export */   \\\"_colorExp\\\": () => (/* binding */ _colorExp),\\n/* harmony export */   \\\"_colorStringFilter\\\": () => (/* binding */ _colorStringFilter),\\n/* harmony export */   \\\"_config\\\": () => (/* binding */ _config),\\n/* harmony export */   \\\"_forEachName\\\": () => (/* binding */ _forEachName),\\n/* harmony export */   \\\"_getCache\\\": () => (/* binding */ _getCache),\\n/* harmony export */   \\\"_getProperty\\\": () => (/* binding */ _getProperty),\\n/* harmony export */   \\\"_getSetter\\\": () => (/* binding */ _getSetter),\\n/* harmony export */   \\\"_isString\\\": () => (/* binding */ _isString),\\n/* harmony export */   \\\"_isUndefined\\\": () => (/* binding */ _isUndefined),\\n/* harmony export */   \\\"_missingPlugin\\\": () => (/* binding */ _missingPlugin),\\n/* harmony export */   \\\"_numExp\\\": () => (/* binding */ _numExp),\\n/* harmony export */   \\\"_numWithUnitExp\\\": () => (/* binding */ _numWithUnitExp),\\n/* harmony export */   \\\"_parseRelative\\\": () => (/* binding */ _parseRelative),\\n/* harmony export */   \\\"_plugins\\\": () => (/* binding */ _plugins),\\n/* harmony export */   \\\"_relExp\\\": () => (/* binding */ _relExp),\\n/* harmony export */   \\\"_removeLinkedListItem\\\": () => (/* binding */ _removeLinkedListItem),\\n/* harmony export */   \\\"_renderComplexString\\\": () => (/* binding */ _renderComplexString),\\n/* harmony export */   \\\"_replaceRandom\\\": () => (/* binding */ _replaceRandom),\\n/* harmony export */   \\\"_round\\\": () => (/* binding */ _round),\\n/* harmony export */   \\\"_roundModifier\\\": () => (/* binding */ _roundModifier),\\n/* harmony export */   \\\"_setDefaults\\\": () => (/* binding */ _setDefaults),\\n/* harmony export */   \\\"_sortPropTweensByPriority\\\": () => (/* binding */ _sortPropTweensByPriority),\\n/* harmony export */   \\\"_ticker\\\": () => (/* binding */ _ticker),\\n/* harmony export */   \\\"clamp\\\": () => (/* binding */ clamp),\\n/* harmony export */   \\\"default\\\": () => (/* binding */ gsap),\\n/* harmony export */   \\\"distribute\\\": () => (/* binding */ distribute),\\n/* harmony export */   \\\"getUnit\\\": () => (/* binding */ getUnit),\\n/* harmony export */   \\\"gsap\\\": () => (/* binding */ gsap),\\n/* harmony export */   \\\"interpolate\\\": () => (/* binding */ interpolate),\\n/* harmony export */   \\\"mapRange\\\": () => (/* binding */ mapRange),\\n/* harmony export */   \\\"normalize\\\": () => (/* binding */ normalize),\\n/* harmony export */   \\\"pipe\\\": () => (/* binding */ pipe),\\n/* harmony export */   \\\"random\\\": () => (/* binding */ random),\\n/* harmony export */   \\\"selector\\\": () => (/* binding */ selector),\\n/* harmony export */   \\\"shuffle\\\": () => (/* binding */ shuffle),\\n/* harmony export */   \\\"snap\\\": () => (/* binding */ snap),\\n/* harmony export */   \\\"splitColor\\\": () => (/* binding */ splitColor),\\n/* harmony export */   \\\"toArray\\\": () => (/* binding */ toArray),\\n/* harmony export */   \\\"unitize\\\": () => (/* binding */ unitize),\\n/* harmony export */   \\\"wrap\\\": () => (/* binding */ wrap),\\n/* harmony export */   \\\"wrapYoyo\\\": () => (/* binding */ wrapYoyo)\\n/* harmony export */ });\\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\\\"this hasn't been initialised - super() hasn't been called\\\"); } return self; }\\n\\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\\n\\n/*!\\n * GSAP 3.12.7\\n * https://gsap.com\\n *\\n * @license Copyright 2008-2025, GreenSock. All rights reserved.\\n * Subject to the terms at https://gsap.com/standard-license or for\\n * Club GSAP members, the agreement issued with that membership.\\n * @author: Jack Doyle, jack@greensock.com\\n*/\\n\\n/* eslint-disable */\\nvar _config = {\\n  autoSleep: 120,\\n  force3D: \\\"auto\\\",\\n  nullTargetWarn: 1,\\n  units: {\\n    lineHeight: \\\"\\\"\\n  }\\n},\\n    _defaults = {\\n  duration: .5,\\n  overwrite: false,\\n  delay: 0\\n},\\n    _suppressOverwrites,\\n    _reverting,\\n    _context,\\n    _bigNum = 1e8,\\n    _tinyNum = 1 / _bigNum,\\n    _2PI = Math.PI * 2,\\n    _HALF_PI = _2PI / 4,\\n    _gsID = 0,\\n    _sqrt = Math.sqrt,\\n    _cos = Math.cos,\\n    _sin = Math.sin,\\n    _isString = function _isString(value) {\\n  return typeof value === \\\"string\\\";\\n},\\n    _isFunction = function _isFunction(value) {\\n  return typeof value === \\\"function\\\";\\n},\\n    _isNumber = function _isNumber(value) {\\n  return typeof value === \\\"number\\\";\\n},\\n    _isUndefined = function _isUndefined(value) {\\n  return typeof value === \\\"undefined\\\";\\n},\\n    _isObject = function _isObject(value) {\\n  return typeof value === \\\"object\\\";\\n},\\n    _isNotFalse = function _isNotFalse(value) {\\n  return value !== false;\\n},\\n    _windowExists = function _windowExists() {\\n  return typeof window !== \\\"undefined\\\";\\n},\\n    _isFuncOrString = function _isFuncOrString(value) {\\n  return _isFunction(value) || _isString(value);\\n},\\n    _isTypedArray = typeof ArrayBuffer === \\\"function\\\" && ArrayBuffer.isView || function () {},\\n    // note: IE10 has ArrayBuffer, but NOT ArrayBuffer.isView().\\n_isArray = Array.isArray,\\n    _strictNumExp = /(?:-?\\\\.?\\\\d|\\\\.)+/gi,\\n    //only numbers (including negatives and decimals) but NOT relative values.\\n_numExp = /[-+=.]*\\\\d+[.e\\\\-+]*\\\\d*[e\\\\-+]*\\\\d*/g,\\n    //finds any numbers, including ones that start with += or -=, negative numbers, and ones in scientific notation like 1e-8.\\n_numWithUnitExp = /[-+=.]*\\\\d+[.e-]*\\\\d*[a-z%]*/g,\\n    _complexStringNumExp = /[-+=.]*\\\\d+\\\\.?\\\\d*(?:e-|e\\\\+)?\\\\d*/gi,\\n    //duplicate so that while we're looping through matches from exec(), it doesn't contaminate the lastIndex of _numExp which we use to search for colors too.\\n_relExp = /[+-]=-?[.\\\\d]+/,\\n    _delimitedValueExp = /[^,'\\\"\\\\[\\\\]\\\\s]+/gi,\\n    // previously /[#\\\\-+.]*\\\\b[a-z\\\\d\\\\-=+%.]+/gi but didn't catch special characters.\\n_unitExp = /^[+\\\\-=e\\\\s\\\\d]*\\\\d+[.\\\\d]*([a-z]*|%)\\\\s*$/i,\\n    _globalTimeline,\\n    _win,\\n    _coreInitted,\\n    _doc,\\n    _globals = {},\\n    _installScope = {},\\n    _coreReady,\\n    _install = function _install(scope) {\\n  return (_installScope = _merge(scope, _globals)) && gsap;\\n},\\n    _missingPlugin = function _missingPlugin(property, value) {\\n  return console.warn(\\\"Invalid property\\\", property, \\\"set to\\\", value, \\\"Missing plugin? gsap.registerPlugin()\\\");\\n},\\n    _warn = function _warn(message, suppress) {\\n  return !suppress && console.warn(message);\\n},\\n    _addGlobal = function _addGlobal(name, obj) {\\n  return name && (_globals[name] = obj) && _installScope && (_installScope[name] = obj) || _globals;\\n},\\n    _emptyFunc = function _emptyFunc() {\\n  return 0;\\n},\\n    _startAtRevertConfig = {\\n  suppressEvents: true,\\n  isStart: true,\\n  kill: false\\n},\\n    _revertConfigNoKill = {\\n  suppressEvents: true,\\n  kill: false\\n},\\n    _revertConfig = {\\n  suppressEvents: true\\n},\\n    _reservedProps = {},\\n    _lazyTweens = [],\\n    _lazyLookup = {},\\n    _lastRenderedFrame,\\n    _plugins = {},\\n    _effects = {},\\n    _nextGCFrame = 30,\\n    _harnessPlugins = [],\\n    _callbackNames = \\\"\\\",\\n    _harness = function _harness(targets) {\\n  var target = targets[0],\\n      harnessPlugin,\\n      i;\\n  _isObject(target) || _isFunction(target) || (targets = [targets]);\\n\\n  if (!(harnessPlugin = (target._gsap || {}).harness)) {\\n    // find the first target with a harness. We assume targets passed into an animation will be of similar type, meaning the same kind of harness can be used for them all (performance optimization)\\n    i = _harnessPlugins.length;\\n\\n    while (i-- && !_harnessPlugins[i].targetTest(target)) {}\\n\\n    harnessPlugin = _harnessPlugins[i];\\n  }\\n\\n  i = targets.length;\\n\\n  while (i--) {\\n    targets[i] && (targets[i]._gsap || (targets[i]._gsap = new GSCache(targets[i], harnessPlugin))) || targets.splice(i, 1);\\n  }\\n\\n  return targets;\\n},\\n    _getCache = function _getCache(target) {\\n  return target._gsap || _harness(toArray(target))[0]._gsap;\\n},\\n    _getProperty = function _getProperty(target, property, v) {\\n  return (v = target[property]) && _isFunction(v) ? target[property]() : _isUndefined(v) && target.getAttribute && target.getAttribute(property) || v;\\n},\\n    _forEachName = function _forEachName(names, func) {\\n  return (names = names.split(\\\",\\\")).forEach(func) || names;\\n},\\n    //split a comma-delimited list of names into an array, then run a forEach() function and return the split array (this is just a way to consolidate/shorten some code).\\n_round = function _round(value) {\\n  return Math.round(value * 100000) / 100000 || 0;\\n},\\n    _roundPrecise = function _roundPrecise(value) {\\n  return Math.round(value * 10000000) / 10000000 || 0;\\n},\\n    // increased precision mostly for timing values.\\n_parseRelative = function _parseRelative(start, value) {\\n  var operator = value.charAt(0),\\n      end = parseFloat(value.substr(2));\\n  start = parseFloat(start);\\n  return operator === \\\"+\\\" ? start + end : operator === \\\"-\\\" ? start - end : operator === \\\"*\\\" ? start * end : start / end;\\n},\\n    _arrayContainsAny = function _arrayContainsAny(toSearch, toFind) {\\n  //searches one array to find matches for any of the items in the toFind array. As soon as one is found, it returns true. It does NOT return all the matches; it's simply a boolean search.\\n  var l = toFind.length,\\n      i = 0;\\n\\n  for (; toSearch.indexOf(toFind[i]) < 0 && ++i < l;) {}\\n\\n  return i < l;\\n},\\n    _lazyRender = function _lazyRender() {\\n  var l = _lazyTweens.length,\\n      a = _lazyTweens.slice(0),\\n      i,\\n      tween;\\n\\n  _lazyLookup = {};\\n  _lazyTweens.length = 0;\\n\\n  for (i = 0; i < l; i++) {\\n    tween = a[i];\\n    tween && tween._lazy && (tween.render(tween._lazy[0], tween._lazy[1], true)._lazy = 0);\\n  }\\n},\\n    _lazySafeRender = function _lazySafeRender(animation, time, suppressEvents, force) {\\n  _lazyTweens.length && !_reverting && _lazyRender();\\n  animation.render(time, suppressEvents, force || _reverting && time < 0 && (animation._initted || animation._startAt));\\n  _lazyTweens.length && !_reverting && _lazyRender(); //in case rendering caused any tweens to lazy-init, we should render them because typically when someone calls seek() or time() or progress(), they expect an immediate render.\\n},\\n    _numericIfPossible = function _numericIfPossible(value) {\\n  var n = parseFloat(value);\\n  return (n || n === 0) && (value + \\\"\\\").match(_delimitedValueExp).length < 2 ? n : _isString(value) ? value.trim() : value;\\n},\\n    _passThrough = function _passThrough(p) {\\n  return p;\\n},\\n    _setDefaults = function _setDefaults(obj, defaults) {\\n  for (var p in defaults) {\\n    p in obj || (obj[p] = defaults[p]);\\n  }\\n\\n  return obj;\\n},\\n    _setKeyframeDefaults = function _setKeyframeDefaults(excludeDuration) {\\n  return function (obj, defaults) {\\n    for (var p in defaults) {\\n      p in obj || p === \\\"duration\\\" && excludeDuration || p === \\\"ease\\\" || (obj[p] = defaults[p]);\\n    }\\n  };\\n},\\n    _merge = function _merge(base, toMerge) {\\n  for (var p in toMerge) {\\n    base[p] = toMerge[p];\\n  }\\n\\n  return base;\\n},\\n    _mergeDeep = function _mergeDeep(base, toMerge) {\\n  for (var p in toMerge) {\\n    p !== \\\"__proto__\\\" && p !== \\\"constructor\\\" && p !== \\\"prototype\\\" && (base[p] = _isObject(toMerge[p]) ? _mergeDeep(base[p] || (base[p] = {}), toMerge[p]) : toMerge[p]);\\n  }\\n\\n  return base;\\n},\\n    _copyExcluding = function _copyExcluding(obj, excluding) {\\n  var copy = {},\\n      p;\\n\\n  for (p in obj) {\\n    p in excluding || (copy[p] = obj[p]);\\n  }\\n\\n  return copy;\\n},\\n    _inheritDefaults = function _inheritDefaults(vars) {\\n  var parent = vars.parent || _globalTimeline,\\n      func = vars.keyframes ? _setKeyframeDefaults(_isArray(vars.keyframes)) : _setDefaults;\\n\\n  if (_isNotFalse(vars.inherit)) {\\n    while (parent) {\\n      func(vars, parent.vars.defaults);\\n      parent = parent.parent || parent._dp;\\n    }\\n  }\\n\\n  return vars;\\n},\\n    _arraysMatch = function _arraysMatch(a1, a2) {\\n  var i = a1.length,\\n      match = i === a2.length;\\n\\n  while (match && i-- && a1[i] === a2[i]) {}\\n\\n  return i < 0;\\n},\\n    _addLinkedListItem = function _addLinkedListItem(parent, child, firstProp, lastProp, sortBy) {\\n  if (firstProp === void 0) {\\n    firstProp = \\\"_first\\\";\\n  }\\n\\n  if (lastProp === void 0) {\\n    lastProp = \\\"_last\\\";\\n  }\\n\\n  var prev = parent[lastProp],\\n      t;\\n\\n  if (sortBy) {\\n    t = child[sortBy];\\n\\n    while (prev && prev[sortBy] > t) {\\n      prev = prev._prev;\\n    }\\n  }\\n\\n  if (prev) {\\n    child._next = prev._next;\\n    prev._next = child;\\n  } else {\\n    child._next = parent[firstProp];\\n    parent[firstProp] = child;\\n  }\\n\\n  if (child._next) {\\n    child._next._prev = child;\\n  } else {\\n    parent[lastProp] = child;\\n  }\\n\\n  child._prev = prev;\\n  child.parent = child._dp = parent;\\n  return child;\\n},\\n    _removeLinkedListItem = function _removeLinkedListItem(parent, child, firstProp, lastProp) {\\n  if (firstProp === void 0) {\\n    firstProp = \\\"_first\\\";\\n  }\\n\\n  if (lastProp === void 0) {\\n    lastProp = \\\"_last\\\";\\n  }\\n\\n  var prev = child._prev,\\n      next = child._next;\\n\\n  if (prev) {\\n    prev._next = next;\\n  } else if (parent[firstProp] === child) {\\n    parent[firstProp] = next;\\n  }\\n\\n  if (next) {\\n    next._prev = prev;\\n  } else if (parent[lastProp] === child) {\\n    parent[lastProp] = prev;\\n  }\\n\\n  child._next = child._prev = child.parent = null; // don't delete the _dp just so we can revert if necessary. But parent should be null to indicate the item isn't in a linked list.\\n},\\n    _removeFromParent = function _removeFromParent(child, onlyIfParentHasAutoRemove) {\\n  child.parent && (!onlyIfParentHasAutoRemove || child.parent.autoRemoveChildren) && child.parent.remove && child.parent.remove(child);\\n  child._act = 0;\\n},\\n    _uncache = function _uncache(animation, child) {\\n  if (animation && (!child || child._end > animation._dur || child._start < 0)) {\\n    // performance optimization: if a child animation is passed in we should only uncache if that child EXTENDS the animation (its end time is beyond the end)\\n    var a = animation;\\n\\n    while (a) {\\n      a._dirty = 1;\\n      a = a.parent;\\n    }\\n  }\\n\\n  return animation;\\n},\\n    _recacheAncestors = function _recacheAncestors(animation) {\\n  var parent = animation.parent;\\n\\n  while (parent && parent.parent) {\\n    //sometimes we must force a re-sort of all children and update the duration/totalDuration of all ancestor timelines immediately in case, for example, in the middle of a render loop, one tween alters another tween's timeScale which shoves its startTime before 0, forcing the parent timeline to shift around and shiftChildren() which could affect that next tween's render (startTime). Doesn't matter for the root timeline though.\\n    parent._dirty = 1;\\n    parent.totalDuration();\\n    parent = parent.parent;\\n  }\\n\\n  return animation;\\n},\\n    _rewindStartAt = function _rewindStartAt(tween, totalTime, suppressEvents, force) {\\n  return tween._startAt && (_reverting ? tween._startAt.revert(_revertConfigNoKill) : tween.vars.immediateRender && !tween.vars.autoRevert || tween._startAt.render(totalTime, true, force));\\n},\\n    _hasNoPausedAncestors = function _hasNoPausedAncestors(animation) {\\n  return !animation || animation._ts && _hasNoPausedAncestors(animation.parent);\\n},\\n    _elapsedCycleDuration = function _elapsedCycleDuration(animation) {\\n  return animation._repeat ? _animationCycle(animation._tTime, animation = animation.duration() + animation._rDelay) * animation : 0;\\n},\\n    // feed in the totalTime and cycleDuration and it'll return the cycle (iteration minus 1) and if the playhead is exactly at the very END, it will NOT bump up to the next cycle.\\n_animationCycle = function _animationCycle(tTime, cycleDuration) {\\n  var whole = Math.floor(tTime = _roundPrecise(tTime / cycleDuration));\\n  return tTime && whole === tTime ? whole - 1 : whole;\\n},\\n    _parentToChildTotalTime = function _parentToChildTotalTime(parentTime, child) {\\n  return (parentTime - child._start) * child._ts + (child._ts >= 0 ? 0 : child._dirty ? child.totalDuration() : child._tDur);\\n},\\n    _setEnd = function _setEnd(animation) {\\n  return animation._end = _roundPrecise(animation._start + (animation._tDur / Math.abs(animation._ts || animation._rts || _tinyNum) || 0));\\n},\\n    _alignPlayhead = function _alignPlayhead(animation, totalTime) {\\n  // adjusts the animation's _start and _end according to the provided totalTime (only if the parent's smoothChildTiming is true and the animation isn't paused). It doesn't do any rendering or forcing things back into parent timelines, etc. - that's what totalTime() is for.\\n  var parent = animation._dp;\\n\\n  if (parent && parent.smoothChildTiming && animation._ts) {\\n    animation._start = _roundPrecise(parent._time - (animation._ts > 0 ? totalTime / animation._ts : ((animation._dirty ? animation.totalDuration() : animation._tDur) - totalTime) / -animation._ts));\\n\\n    _setEnd(animation);\\n\\n    parent._dirty || _uncache(parent, animation); //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here.\\n  }\\n\\n  return animation;\\n},\\n\\n/*\\n_totalTimeToTime = (clampedTotalTime, duration, repeat, repeatDelay, yoyo) => {\\n\\tlet cycleDuration = duration + repeatDelay,\\n\\t\\ttime = _round(clampedTotalTime % cycleDuration);\\n\\tif (time > duration) {\\n\\t\\ttime = duration;\\n\\t}\\n\\treturn (yoyo && (~~(clampedTotalTime / cycleDuration) & 1)) ? duration - time : time;\\n},\\n*/\\n_postAddChecks = function _postAddChecks(timeline, child) {\\n  var t;\\n\\n  if (child._time || !child._dur && child._initted || child._start < timeline._time && (child._dur || !child.add)) {\\n    // in case, for example, the _start is moved on a tween that has already rendered, or if it's being inserted into a timeline BEFORE where the playhead is currently. Imagine it's at its end state, then the startTime is moved WAY later (after the end of this timeline), it should render at its beginning. Special case: if it's a timeline (has .add() method) and no duration, we can skip rendering because the user may be populating it AFTER adding it to a parent timeline (unconventional, but possible, and we wouldn't want it to get removed if the parent's autoRemoveChildren is true).\\n    t = _parentToChildTotalTime(timeline.rawTime(), child);\\n\\n    if (!child._dur || _clamp(0, child.totalDuration(), t) - child._tTime > _tinyNum) {\\n      child.render(t, true);\\n    }\\n  } //if the timeline has already ended but the inserted tween/timeline extends the duration, we should enable this timeline again so that it renders properly. We should also align the playhead with the parent timeline's when appropriate.\\n\\n\\n  if (_uncache(timeline, child)._dp && timeline._initted && timeline._time >= timeline._dur && timeline._ts) {\\n    //in case any of the ancestors had completed but should now be enabled...\\n    if (timeline._dur < timeline.duration()) {\\n      t = timeline;\\n\\n      while (t._dp) {\\n        t.rawTime() >= 0 && t.totalTime(t._tTime); //moves the timeline (shifts its startTime) if necessary, and also enables it. If it's currently zero, though, it may not be scheduled to render until later so there's no need to force it to align with the current playhead position. Only move to catch up with the playhead.\\n\\n        t = t._dp;\\n      }\\n    }\\n\\n    timeline._zTime = -_tinyNum; // helps ensure that the next render() will be forced (crossingStart = true in render()), even if the duration hasn't changed (we're adding a child which would need to get rendered). Definitely an edge case. Note: we MUST do this AFTER the loop above where the totalTime() might trigger a render() because this _addToTimeline() method gets called from the Animation constructor, BEFORE tweens even record their targets, etc. so we wouldn't want things to get triggered in the wrong order.\\n  }\\n},\\n    _addToTimeline = function _addToTimeline(timeline, child, position, skipChecks) {\\n  child.parent && _removeFromParent(child);\\n  child._start = _roundPrecise((_isNumber(position) ? position : position || timeline !== _globalTimeline ? _parsePosition(timeline, position, child) : timeline._time) + child._delay);\\n  child._end = _roundPrecise(child._start + (child.totalDuration() / Math.abs(child.timeScale()) || 0));\\n\\n  _addLinkedListItem(timeline, child, \\\"_first\\\", \\\"_last\\\", timeline._sort ? \\\"_start\\\" : 0);\\n\\n  _isFromOrFromStart(child) || (timeline._recent = child);\\n  skipChecks || _postAddChecks(timeline, child);\\n  timeline._ts < 0 && _alignPlayhead(timeline, timeline._tTime); // if the timeline is reversed and the new child makes it longer, we may need to adjust the parent's _start (push it back)\\n\\n  return timeline;\\n},\\n    _scrollTrigger = function _scrollTrigger(animation, trigger) {\\n  return (_globals.ScrollTrigger || _missingPlugin(\\\"scrollTrigger\\\", trigger)) && _globals.ScrollTrigger.create(trigger, animation);\\n},\\n    _attemptInitTween = function _attemptInitTween(tween, time, force, suppressEvents, tTime) {\\n  _initTween(tween, time, tTime);\\n\\n  if (!tween._initted) {\\n    return 1;\\n  }\\n\\n  if (!force && tween._pt && !_reverting && (tween._dur && tween.vars.lazy !== false || !tween._dur && tween.vars.lazy) && _lastRenderedFrame !== _ticker.frame) {\\n    _lazyTweens.push(tween);\\n\\n    tween._lazy = [tTime, suppressEvents];\\n    return 1;\\n  }\\n},\\n    _parentPlayheadIsBeforeStart = function _parentPlayheadIsBeforeStart(_ref) {\\n  var parent = _ref.parent;\\n  return parent && parent._ts && parent._initted && !parent._lock && (parent.rawTime() < 0 || _parentPlayheadIsBeforeStart(parent));\\n},\\n    // check parent's _lock because when a timeline repeats/yoyos and does its artificial wrapping, we shouldn't force the ratio back to 0\\n_isFromOrFromStart = function _isFromOrFromStart(_ref2) {\\n  var data = _ref2.data;\\n  return data === \\\"isFromStart\\\" || data === \\\"isStart\\\";\\n},\\n    _renderZeroDurationTween = function _renderZeroDurationTween(tween, totalTime, suppressEvents, force) {\\n  var prevRatio = tween.ratio,\\n      ratio = totalTime < 0 || !totalTime && (!tween._start && _parentPlayheadIsBeforeStart(tween) && !(!tween._initted && _isFromOrFromStart(tween)) || (tween._ts < 0 || tween._dp._ts < 0) && !_isFromOrFromStart(tween)) ? 0 : 1,\\n      // if the tween or its parent is reversed and the totalTime is 0, we should go to a ratio of 0. Edge case: if a from() or fromTo() stagger tween is placed later in a timeline, the \\\"startAt\\\" zero-duration tween could initially render at a time when the parent timeline's playhead is technically BEFORE where this tween is, so make sure that any \\\"from\\\" and \\\"fromTo\\\" startAt tweens are rendered the first time at a ratio of 1.\\n  repeatDelay = tween._rDelay,\\n      tTime = 0,\\n      pt,\\n      iteration,\\n      prevIteration;\\n\\n  if (repeatDelay && tween._repeat) {\\n    // in case there's a zero-duration tween that has a repeat with a repeatDelay\\n    tTime = _clamp(0, tween._tDur, totalTime);\\n    iteration = _animationCycle(tTime, repeatDelay);\\n    tween._yoyo && iteration & 1 && (ratio = 1 - ratio);\\n\\n    if (iteration !== _animationCycle(tween._tTime, repeatDelay)) {\\n      // if iteration changed\\n      prevRatio = 1 - ratio;\\n      tween.vars.repeatRefresh && tween._initted && tween.invalidate();\\n    }\\n  }\\n\\n  if (ratio !== prevRatio || _reverting || force || tween._zTime === _tinyNum || !totalTime && tween._zTime) {\\n    if (!tween._initted && _attemptInitTween(tween, totalTime, force, suppressEvents, tTime)) {\\n      // if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately.\\n      return;\\n    }\\n\\n    prevIteration = tween._zTime;\\n    tween._zTime = totalTime || (suppressEvents ? _tinyNum : 0); // when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect.\\n\\n    suppressEvents || (suppressEvents = totalTime && !prevIteration); // if it was rendered previously at exactly 0 (_zTime) and now the playhead is moving away, DON'T fire callbacks otherwise they'll seem like duplicates.\\n\\n    tween.ratio = ratio;\\n    tween._from && (ratio = 1 - ratio);\\n    tween._time = 0;\\n    tween._tTime = tTime;\\n    pt = tween._pt;\\n\\n    while (pt) {\\n      pt.r(ratio, pt.d);\\n      pt = pt._next;\\n    }\\n\\n    totalTime < 0 && _rewindStartAt(tween, totalTime, suppressEvents, true);\\n    tween._onUpdate && !suppressEvents && _callback(tween, \\\"onUpdate\\\");\\n    tTime && tween._repeat && !suppressEvents && tween.parent && _callback(tween, \\\"onRepeat\\\");\\n\\n    if ((totalTime >= tween._tDur || totalTime < 0) && tween.ratio === ratio) {\\n      ratio && _removeFromParent(tween, 1);\\n\\n      if (!suppressEvents && !_reverting) {\\n        _callback(tween, ratio ? \\\"onComplete\\\" : \\\"onReverseComplete\\\", true);\\n\\n        tween._prom && tween._prom();\\n      }\\n    }\\n  } else if (!tween._zTime) {\\n    tween._zTime = totalTime;\\n  }\\n},\\n    _findNextPauseTween = function _findNextPauseTween(animation, prevTime, time) {\\n  var child;\\n\\n  if (time > prevTime) {\\n    child = animation._first;\\n\\n    while (child && child._start <= time) {\\n      if (child.data === \\\"isPause\\\" && child._start > prevTime) {\\n        return child;\\n      }\\n\\n      child = child._next;\\n    }\\n  } else {\\n    child = animation._last;\\n\\n    while (child && child._start >= time) {\\n      if (child.data === \\\"isPause\\\" && child._start < prevTime) {\\n        return child;\\n      }\\n\\n      child = child._prev;\\n    }\\n  }\\n},\\n    _setDuration = function _setDuration(animation, duration, skipUncache, leavePlayhead) {\\n  var repeat = animation._repeat,\\n      dur = _roundPrecise(duration) || 0,\\n      totalProgress = animation._tTime / animation._tDur;\\n  totalProgress && !leavePlayhead && (animation._time *= dur / animation._dur);\\n  animation._dur = dur;\\n  animation._tDur = !repeat ? dur : repeat < 0 ? 1e10 : _roundPrecise(dur * (repeat + 1) + animation._rDelay * repeat);\\n  totalProgress > 0 && !leavePlayhead && _alignPlayhead(animation, animation._tTime = animation._tDur * totalProgress);\\n  animation.parent && _setEnd(animation);\\n  skipUncache || _uncache(animation.parent, animation);\\n  return animation;\\n},\\n    _onUpdateTotalDuration = function _onUpdateTotalDuration(animation) {\\n  return animation instanceof Timeline ? _uncache(animation) : _setDuration(animation, animation._dur);\\n},\\n    _zeroPosition = {\\n  _start: 0,\\n  endTime: _emptyFunc,\\n  totalDuration: _emptyFunc\\n},\\n    _parsePosition = function _parsePosition(animation, position, percentAnimation) {\\n  var labels = animation.labels,\\n      recent = animation._recent || _zeroPosition,\\n      clippedDuration = animation.duration() >= _bigNum ? recent.endTime(false) : animation._dur,\\n      //in case there's a child that infinitely repeats, users almost never intend for the insertion point of a new child to be based on a SUPER long value like that so we clip it and assume the most recently-added child's endTime should be used instead.\\n  i,\\n      offset,\\n      isPercent;\\n\\n  if (_isString(position) && (isNaN(position) || position in labels)) {\\n    //if the string is a number like \\\"1\\\", check to see if there's a label with that name, otherwise interpret it as a number (absolute value).\\n    offset = position.charAt(0);\\n    isPercent = position.substr(-1) === \\\"%\\\";\\n    i = position.indexOf(\\\"=\\\");\\n\\n    if (offset === \\\"<\\\" || offset === \\\">\\\") {\\n      i >= 0 && (position = position.replace(/=/, \\\"\\\"));\\n      return (offset === \\\"<\\\" ? recent._start : recent.endTime(recent._repeat >= 0)) + (parseFloat(position.substr(1)) || 0) * (isPercent ? (i < 0 ? recent : percentAnimation).totalDuration() / 100 : 1);\\n    }\\n\\n    if (i < 0) {\\n      position in labels || (labels[position] = clippedDuration);\\n      return labels[position];\\n    }\\n\\n    offset = parseFloat(position.charAt(i - 1) + position.substr(i + 1));\\n\\n    if (isPercent && percentAnimation) {\\n      offset = offset / 100 * (_isArray(percentAnimation) ? percentAnimation[0] : percentAnimation).totalDuration();\\n    }\\n\\n    return i > 1 ? _parsePosition(animation, position.substr(0, i - 1), percentAnimation) + offset : clippedDuration + offset;\\n  }\\n\\n  return position == null ? clippedDuration : +position;\\n},\\n    _createTweenType = function _createTweenType(type, params, timeline) {\\n  var isLegacy = _isNumber(params[1]),\\n      varsIndex = (isLegacy ? 2 : 1) + (type < 2 ? 0 : 1),\\n      vars = params[varsIndex],\\n      irVars,\\n      parent;\\n\\n  isLegacy && (vars.duration = params[1]);\\n  vars.parent = timeline;\\n\\n  if (type) {\\n    irVars = vars;\\n    parent = timeline;\\n\\n    while (parent && !(\\\"immediateRender\\\" in irVars)) {\\n      // inheritance hasn't happened yet, but someone may have set a default in an ancestor timeline. We could do vars.immediateRender = _isNotFalse(_inheritDefaults(vars).immediateRender) but that'd exact a slight performance penalty because _inheritDefaults() also runs in the Tween constructor. We're paying a small kb price here to gain speed.\\n      irVars = parent.vars.defaults || {};\\n      parent = _isNotFalse(parent.vars.inherit) && parent.parent;\\n    }\\n\\n    vars.immediateRender = _isNotFalse(irVars.immediateRender);\\n    type < 2 ? vars.runBackwards = 1 : vars.startAt = params[varsIndex - 1]; // \\\"from\\\" vars\\n  }\\n\\n  return new Tween(params[0], vars, params[varsIndex + 1]);\\n},\\n    _conditionalReturn = function _conditionalReturn(value, func) {\\n  return value || value === 0 ? func(value) : func;\\n},\\n    _clamp = function _clamp(min, max, value) {\\n  return value < min ? min : value > max ? max : value;\\n},\\n    getUnit = function getUnit(value, v) {\\n  return !_isString(value) || !(v = _unitExp.exec(value)) ? \\\"\\\" : v[1];\\n},\\n    // note: protect against padded numbers as strings, like \\\"100.100\\\". That shouldn't return \\\"00\\\" as the unit. If it's numeric, return no unit.\\nclamp = function clamp(min, max, value) {\\n  return _conditionalReturn(value, function (v) {\\n    return _clamp(min, max, v);\\n  });\\n},\\n    _slice = [].slice,\\n    _isArrayLike = function _isArrayLike(value, nonEmpty) {\\n  return value && _isObject(value) && \\\"length\\\" in value && (!nonEmpty && !value.length || value.length - 1 in value && _isObject(value[0])) && !value.nodeType && value !== _win;\\n},\\n    _flatten = function _flatten(ar, leaveStrings, accumulator) {\\n  if (accumulator === void 0) {\\n    accumulator = [];\\n  }\\n\\n  return ar.forEach(function (value) {\\n    var _accumulator;\\n\\n    return _isString(value) && !leaveStrings || _isArrayLike(value, 1) ? (_accumulator = accumulator).push.apply(_accumulator, toArray(value)) : accumulator.push(value);\\n  }) || accumulator;\\n},\\n    //takes any value and returns an array. If it's a string (and leaveStrings isn't true), it'll use document.querySelectorAll() and convert that to an array. It'll also accept iterables like jQuery objects.\\ntoArray = function toArray(value, scope, leaveStrings) {\\n  return _context && !scope && _context.selector ? _context.selector(value) : _isString(value) && !leaveStrings && (_coreInitted || !_wake()) ? _slice.call((scope || _doc).querySelectorAll(value), 0) : _isArray(value) ? _flatten(value, leaveStrings) : _isArrayLike(value) ? _slice.call(value, 0) : value ? [value] : [];\\n},\\n    selector = function selector(value) {\\n  value = toArray(value)[0] || _warn(\\\"Invalid scope\\\") || {};\\n  return function (v) {\\n    var el = value.current || value.nativeElement || value;\\n    return toArray(v, el.querySelectorAll ? el : el === value ? _warn(\\\"Invalid scope\\\") || _doc.createElement(\\\"div\\\") : value);\\n  };\\n},\\n    shuffle = function shuffle(a) {\\n  return a.sort(function () {\\n    return .5 - Math.random();\\n  });\\n},\\n    // alternative that's a bit faster and more reliably diverse but bigger:   for (let j, v, i = a.length; i; j = (Math.random() * i) | 0, v = a[--i], a[i] = a[j], a[j] = v); return a;\\n//for distributing values across an array. Can accept a number, a function or (most commonly) a function which can contain the following properties: {base, amount, from, ease, grid, axis, length, each}. Returns a function that expects the following parameters: index, target, array. Recognizes the following\\ndistribute = function distribute(v) {\\n  if (_isFunction(v)) {\\n    return v;\\n  }\\n\\n  var vars = _isObject(v) ? v : {\\n    each: v\\n  },\\n      //n:1 is just to indicate v was a number; we leverage that later to set v according to the length we get. If a number is passed in, we treat it like the old stagger value where 0.1, for example, would mean that things would be distributed with 0.1 between each element in the array rather than a total \\\"amount\\\" that's chunked out among them all.\\n  ease = _parseEase(vars.ease),\\n      from = vars.from || 0,\\n      base = parseFloat(vars.base) || 0,\\n      cache = {},\\n      isDecimal = from > 0 && from < 1,\\n      ratios = isNaN(from) || isDecimal,\\n      axis = vars.axis,\\n      ratioX = from,\\n      ratioY = from;\\n\\n  if (_isString(from)) {\\n    ratioX = ratioY = {\\n      center: .5,\\n      edges: .5,\\n      end: 1\\n    }[from] || 0;\\n  } else if (!isDecimal && ratios) {\\n    ratioX = from[0];\\n    ratioY = from[1];\\n  }\\n\\n  return function (i, target, a) {\\n    var l = (a || vars).length,\\n        distances = cache[l],\\n        originX,\\n        originY,\\n        x,\\n        y,\\n        d,\\n        j,\\n        max,\\n        min,\\n        wrapAt;\\n\\n    if (!distances) {\\n      wrapAt = vars.grid === \\\"auto\\\" ? 0 : (vars.grid || [1, _bigNum])[1];\\n\\n      if (!wrapAt) {\\n        max = -_bigNum;\\n\\n        while (max < (max = a[wrapAt++].getBoundingClientRect().left) && wrapAt < l) {}\\n\\n        wrapAt < l && wrapAt--;\\n      }\\n\\n      distances = cache[l] = [];\\n      originX = ratios ? Math.min(wrapAt, l) * ratioX - .5 : from % wrapAt;\\n      originY = wrapAt === _bigNum ? 0 : ratios ? l * ratioY / wrapAt - .5 : from / wrapAt | 0;\\n      max = 0;\\n      min = _bigNum;\\n\\n      for (j = 0; j < l; j++) {\\n        x = j % wrapAt - originX;\\n        y = originY - (j / wrapAt | 0);\\n        distances[j] = d = !axis ? _sqrt(x * x + y * y) : Math.abs(axis === \\\"y\\\" ? y : x);\\n        d > max && (max = d);\\n        d < min && (min = d);\\n      }\\n\\n      from === \\\"random\\\" && shuffle(distances);\\n      distances.max = max - min;\\n      distances.min = min;\\n      distances.v = l = (parseFloat(vars.amount) || parseFloat(vars.each) * (wrapAt > l ? l - 1 : !axis ? Math.max(wrapAt, l / wrapAt) : axis === \\\"y\\\" ? l / wrapAt : wrapAt) || 0) * (from === \\\"edges\\\" ? -1 : 1);\\n      distances.b = l < 0 ? base - l : base;\\n      distances.u = getUnit(vars.amount || vars.each) || 0; //unit\\n\\n      ease = ease && l < 0 ? _invertEase(ease) : ease;\\n    }\\n\\n    l = (distances[i] - distances.min) / distances.max || 0;\\n    return _roundPrecise(distances.b + (ease ? ease(l) : l) * distances.v) + distances.u; //round in order to work around floating point errors\\n  };\\n},\\n    _roundModifier = function _roundModifier(v) {\\n  //pass in 0.1 get a function that'll round to the nearest tenth, or 5 to round to the closest 5, or 0.001 to the closest 1000th, etc.\\n  var p = Math.pow(10, ((v + \\\"\\\").split(\\\".\\\")[1] || \\\"\\\").length); //to avoid floating point math errors (like 24 * 0.1 == 2.4000000000000004), we chop off at a specific number of decimal places (much faster than toFixed())\\n\\n  return function (raw) {\\n    var n = _roundPrecise(Math.round(parseFloat(raw) / v) * v * p);\\n\\n    return (n - n % 1) / p + (_isNumber(raw) ? 0 : getUnit(raw)); // n - n % 1 replaces Math.floor() in order to handle negative values properly. For example, Math.floor(-150.00000000000003) is 151!\\n  };\\n},\\n    snap = function snap(snapTo, value) {\\n  var isArray = _isArray(snapTo),\\n      radius,\\n      is2D;\\n\\n  if (!isArray && _isObject(snapTo)) {\\n    radius = isArray = snapTo.radius || _bigNum;\\n\\n    if (snapTo.values) {\\n      snapTo = toArray(snapTo.values);\\n\\n      if (is2D = !_isNumber(snapTo[0])) {\\n        radius *= radius; //performance optimization so we don't have to Math.sqrt() in the loop.\\n      }\\n    } else {\\n      snapTo = _roundModifier(snapTo.increment);\\n    }\\n  }\\n\\n  return _conditionalReturn(value, !isArray ? _roundModifier(snapTo) : _isFunction(snapTo) ? function (raw) {\\n    is2D = snapTo(raw);\\n    return Math.abs(is2D - raw) <= radius ? is2D : raw;\\n  } : function (raw) {\\n    var x = parseFloat(is2D ? raw.x : raw),\\n        y = parseFloat(is2D ? raw.y : 0),\\n        min = _bigNum,\\n        closest = 0,\\n        i = snapTo.length,\\n        dx,\\n        dy;\\n\\n    while (i--) {\\n      if (is2D) {\\n        dx = snapTo[i].x - x;\\n        dy = snapTo[i].y - y;\\n        dx = dx * dx + dy * dy;\\n      } else {\\n        dx = Math.abs(snapTo[i] - x);\\n      }\\n\\n      if (dx < min) {\\n        min = dx;\\n        closest = i;\\n      }\\n    }\\n\\n    closest = !radius || min <= radius ? snapTo[closest] : raw;\\n    return is2D || closest === raw || _isNumber(raw) ? closest : closest + getUnit(raw);\\n  });\\n},\\n    random = function random(min, max, roundingIncrement, returnFunction) {\\n  return _conditionalReturn(_isArray(min) ? !max : roundingIncrement === true ? !!(roundingIncrement = 0) : !returnFunction, function () {\\n    return _isArray(min) ? min[~~(Math.random() * min.length)] : (roundingIncrement = roundingIncrement || 1e-5) && (returnFunction = roundingIncrement < 1 ? Math.pow(10, (roundingIncrement + \\\"\\\").length - 2) : 1) && Math.floor(Math.round((min - roundingIncrement / 2 + Math.random() * (max - min + roundingIncrement * .99)) / roundingIncrement) * roundingIncrement * returnFunction) / returnFunction;\\n  });\\n},\\n    pipe = function pipe() {\\n  for (var _len = arguments.length, functions = new Array(_len), _key = 0; _key < _len; _key++) {\\n    functions[_key] = arguments[_key];\\n  }\\n\\n  return function (value) {\\n    return functions.reduce(function (v, f) {\\n      return f(v);\\n    }, value);\\n  };\\n},\\n    unitize = function unitize(func, unit) {\\n  return function (value) {\\n    return func(parseFloat(value)) + (unit || getUnit(value));\\n  };\\n},\\n    normalize = function normalize(min, max, value) {\\n  return mapRange(min, max, 0, 1, value);\\n},\\n    _wrapArray = function _wrapArray(a, wrapper, value) {\\n  return _conditionalReturn(value, function (index) {\\n    return a[~~wrapper(index)];\\n  });\\n},\\n    wrap = function wrap(min, max, value) {\\n  // NOTE: wrap() CANNOT be an arrow function! A very odd compiling bug causes problems (unrelated to GSAP).\\n  var range = max - min;\\n  return _isArray(min) ? _wrapArray(min, wrap(0, min.length), max) : _conditionalReturn(value, function (value) {\\n    return (range + (value - min) % range) % range + min;\\n  });\\n},\\n    wrapYoyo = function wrapYoyo(min, max, value) {\\n  var range = max - min,\\n      total = range * 2;\\n  return _isArray(min) ? _wrapArray(min, wrapYoyo(0, min.length - 1), max) : _conditionalReturn(value, function (value) {\\n    value = (total + (value - min) % total) % total || 0;\\n    return min + (value > range ? total - value : value);\\n  });\\n},\\n    _replaceRandom = function _replaceRandom(value) {\\n  //replaces all occurrences of random(...) in a string with the calculated random value. can be a range like random(-100, 100, 5) or an array like random([0, 100, 500])\\n  var prev = 0,\\n      s = \\\"\\\",\\n      i,\\n      nums,\\n      end,\\n      isArray;\\n\\n  while (~(i = value.indexOf(\\\"random(\\\", prev))) {\\n    end = value.indexOf(\\\")\\\", i);\\n    isArray = value.charAt(i + 7) === \\\"[\\\";\\n    nums = value.substr(i + 7, end - i - 7).match(isArray ? _delimitedValueExp : _strictNumExp);\\n    s += value.substr(prev, i - prev) + random(isArray ? nums : +nums[0], isArray ? 0 : +nums[1], +nums[2] || 1e-5);\\n    prev = end + 1;\\n  }\\n\\n  return s + value.substr(prev, value.length - prev);\\n},\\n    mapRange = function mapRange(inMin, inMax, outMin, outMax, value) {\\n  var inRange = inMax - inMin,\\n      outRange = outMax - outMin;\\n  return _conditionalReturn(value, function (value) {\\n    return outMin + ((value - inMin) / inRange * outRange || 0);\\n  });\\n},\\n    interpolate = function interpolate(start, end, progress, mutate) {\\n  var func = isNaN(start + end) ? 0 : function (p) {\\n    return (1 - p) * start + p * end;\\n  };\\n\\n  if (!func) {\\n    var isString = _isString(start),\\n        master = {},\\n        p,\\n        i,\\n        interpolators,\\n        l,\\n        il;\\n\\n    progress === true && (mutate = 1) && (progress = null);\\n\\n    if (isString) {\\n      start = {\\n        p: start\\n      };\\n      end = {\\n        p: end\\n      };\\n    } else if (_isArray(start) && !_isArray(end)) {\\n      interpolators = [];\\n      l = start.length;\\n      il = l - 2;\\n\\n      for (i = 1; i < l; i++) {\\n        interpolators.push(interpolate(start[i - 1], start[i])); //build the interpolators up front as a performance optimization so that when the function is called many times, it can just reuse them.\\n      }\\n\\n      l--;\\n\\n      func = function func(p) {\\n        p *= l;\\n        var i = Math.min(il, ~~p);\\n        return interpolators[i](p - i);\\n      };\\n\\n      progress = end;\\n    } else if (!mutate) {\\n      start = _merge(_isArray(start) ? [] : {}, start);\\n    }\\n\\n    if (!interpolators) {\\n      for (p in end) {\\n        _addPropTween.call(master, start, p, \\\"get\\\", end[p]);\\n      }\\n\\n      func = function func(p) {\\n        return _renderPropTweens(p, master) || (isString ? start.p : start);\\n      };\\n    }\\n  }\\n\\n  return _conditionalReturn(progress, func);\\n},\\n    _getLabelInDirection = function _getLabelInDirection(timeline, fromTime, backward) {\\n  //used for nextLabel() and previousLabel()\\n  var labels = timeline.labels,\\n      min = _bigNum,\\n      p,\\n      distance,\\n      label;\\n\\n  for (p in labels) {\\n    distance = labels[p] - fromTime;\\n\\n    if (distance < 0 === !!backward && distance && min > (distance = Math.abs(distance))) {\\n      label = p;\\n      min = distance;\\n    }\\n  }\\n\\n  return label;\\n},\\n    _callback = function _callback(animation, type, executeLazyFirst) {\\n  var v = animation.vars,\\n      callback = v[type],\\n      prevContext = _context,\\n      context = animation._ctx,\\n      params,\\n      scope,\\n      result;\\n\\n  if (!callback) {\\n    return;\\n  }\\n\\n  params = v[type + \\\"Params\\\"];\\n  scope = v.callbackScope || animation;\\n  executeLazyFirst && _lazyTweens.length && _lazyRender(); //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onUpdate on a timeline that reports/checks tweened values.\\n\\n  context && (_context = context);\\n  result = params ? callback.apply(scope, params) : callback.call(scope);\\n  _context = prevContext;\\n  return result;\\n},\\n    _interrupt = function _interrupt(animation) {\\n  _removeFromParent(animation);\\n\\n  animation.scrollTrigger && animation.scrollTrigger.kill(!!_reverting);\\n  animation.progress() < 1 && _callback(animation, \\\"onInterrupt\\\");\\n  return animation;\\n},\\n    _quickTween,\\n    _registerPluginQueue = [],\\n    _createPlugin = function _createPlugin(config) {\\n  if (!config) return;\\n  config = !config.name && config[\\\"default\\\"] || config; // UMD packaging wraps things oddly, so for example MotionPathHelper becomes {MotionPathHelper:MotionPathHelper, default:MotionPathHelper}.\\n\\n  if (_windowExists() || config.headless) {\\n    // edge case: some build tools may pass in a null/undefined value\\n    var name = config.name,\\n        isFunc = _isFunction(config),\\n        Plugin = name && !isFunc && config.init ? function () {\\n      this._props = [];\\n    } : config,\\n        //in case someone passes in an object that's not a plugin, like CustomEase\\n    instanceDefaults = {\\n      init: _emptyFunc,\\n      render: _renderPropTweens,\\n      add: _addPropTween,\\n      kill: _killPropTweensOf,\\n      modifier: _addPluginModifier,\\n      rawVars: 0\\n    },\\n        statics = {\\n      targetTest: 0,\\n      get: 0,\\n      getSetter: _getSetter,\\n      aliases: {},\\n      register: 0\\n    };\\n\\n    _wake();\\n\\n    if (config !== Plugin) {\\n      if (_plugins[name]) {\\n        return;\\n      }\\n\\n      _setDefaults(Plugin, _setDefaults(_copyExcluding(config, instanceDefaults), statics)); //static methods\\n\\n\\n      _merge(Plugin.prototype, _merge(instanceDefaults, _copyExcluding(config, statics))); //instance methods\\n\\n\\n      _plugins[Plugin.prop = name] = Plugin;\\n\\n      if (config.targetTest) {\\n        _harnessPlugins.push(Plugin);\\n\\n        _reservedProps[name] = 1;\\n      }\\n\\n      name = (name === \\\"css\\\" ? \\\"CSS\\\" : name.charAt(0).toUpperCase() + name.substr(1)) + \\\"Plugin\\\"; //for the global name. \\\"motionPath\\\" should become MotionPathPlugin\\n    }\\n\\n    _addGlobal(name, Plugin);\\n\\n    config.register && config.register(gsap, Plugin, PropTween);\\n  } else {\\n    _registerPluginQueue.push(config);\\n  }\\n},\\n\\n/*\\n * --------------------------------------------------------------------------------------\\n * COLORS\\n * --------------------------------------------------------------------------------------\\n */\\n_255 = 255,\\n    _colorLookup = {\\n  aqua: [0, _255, _255],\\n  lime: [0, _255, 0],\\n  silver: [192, 192, 192],\\n  black: [0, 0, 0],\\n  maroon: [128, 0, 0],\\n  teal: [0, 128, 128],\\n  blue: [0, 0, _255],\\n  navy: [0, 0, 128],\\n  white: [_255, _255, _255],\\n  olive: [128, 128, 0],\\n  yellow: [_255, _255, 0],\\n  orange: [_255, 165, 0],\\n  gray: [128, 128, 128],\\n  purple: [128, 0, 128],\\n  green: [0, 128, 0],\\n  red: [_255, 0, 0],\\n  pink: [_255, 192, 203],\\n  cyan: [0, _255, _255],\\n  transparent: [_255, _255, _255, 0]\\n},\\n    // possible future idea to replace the hard-coded color name values - put this in the ticker.wake() where we set the _doc:\\n// let ctx = _doc.createElement(\\\"canvas\\\").getContext(\\\"2d\\\");\\n// _forEachName(\\\"aqua,lime,silver,black,maroon,teal,blue,navy,white,olive,yellow,orange,gray,purple,green,red,pink,cyan\\\", color => {ctx.fillStyle = color; _colorLookup[color] = splitColor(ctx.fillStyle)});\\n_hue = function _hue(h, m1, m2) {\\n  h += h < 0 ? 1 : h > 1 ? -1 : 0;\\n  return (h * 6 < 1 ? m1 + (m2 - m1) * h * 6 : h < .5 ? m2 : h * 3 < 2 ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * _255 + .5 | 0;\\n},\\n    splitColor = function splitColor(v, toHSL, forceAlpha) {\\n  var a = !v ? _colorLookup.black : _isNumber(v) ? [v >> 16, v >> 8 & _255, v & _255] : 0,\\n      r,\\n      g,\\n      b,\\n      h,\\n      s,\\n      l,\\n      max,\\n      min,\\n      d,\\n      wasHSL;\\n\\n  if (!a) {\\n    if (v.substr(-1) === \\\",\\\") {\\n      //sometimes a trailing comma is included and we should chop it off (typically from a comma-delimited list of values like a textShadow:\\\"2px 2px 2px blue, 5px 5px 5px rgb(255,0,0)\\\" - in this example \\\"blue,\\\" has a trailing comma. We could strip it out inside parseComplex() but we'd need to do it to the beginning and ending values plus it wouldn't provide protection from other potential scenarios like if the user passes in a similar value.\\n      v = v.substr(0, v.length - 1);\\n    }\\n\\n    if (_colorLookup[v]) {\\n      a = _colorLookup[v];\\n    } else if (v.charAt(0) === \\\"#\\\") {\\n      if (v.length < 6) {\\n        //for shorthand like #9F0 or #9F0F (could have alpha)\\n        r = v.charAt(1);\\n        g = v.charAt(2);\\n        b = v.charAt(3);\\n        v = \\\"#\\\" + r + r + g + g + b + b + (v.length === 5 ? v.charAt(4) + v.charAt(4) : \\\"\\\");\\n      }\\n\\n      if (v.length === 9) {\\n        // hex with alpha, like #fd5e53ff\\n        a = parseInt(v.substr(1, 6), 16);\\n        return [a >> 16, a >> 8 & _255, a & _255, parseInt(v.substr(7), 16) / 255];\\n      }\\n\\n      v = parseInt(v.substr(1), 16);\\n      a = [v >> 16, v >> 8 & _255, v & _255];\\n    } else if (v.substr(0, 3) === \\\"hsl\\\") {\\n      a = wasHSL = v.match(_strictNumExp);\\n\\n      if (!toHSL) {\\n        h = +a[0] % 360 / 360;\\n        s = +a[1] / 100;\\n        l = +a[2] / 100;\\n        g = l <= .5 ? l * (s + 1) : l + s - l * s;\\n        r = l * 2 - g;\\n        a.length > 3 && (a[3] *= 1); //cast as number\\n\\n        a[0] = _hue(h + 1 / 3, r, g);\\n        a[1] = _hue(h, r, g);\\n        a[2] = _hue(h - 1 / 3, r, g);\\n      } else if (~v.indexOf(\\\"=\\\")) {\\n        //if relative values are found, just return the raw strings with the relative prefixes in place.\\n        a = v.match(_numExp);\\n        forceAlpha && a.length < 4 && (a[3] = 1);\\n        return a;\\n      }\\n    } else {\\n      a = v.match(_strictNumExp) || _colorLookup.transparent;\\n    }\\n\\n    a = a.map(Number);\\n  }\\n\\n  if (toHSL && !wasHSL) {\\n    r = a[0] / _255;\\n    g = a[1] / _255;\\n    b = a[2] / _255;\\n    max = Math.max(r, g, b);\\n    min = Math.min(r, g, b);\\n    l = (max + min) / 2;\\n\\n    if (max === min) {\\n      h = s = 0;\\n    } else {\\n      d = max - min;\\n      s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\\n      h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4;\\n      h *= 60;\\n    }\\n\\n    a[0] = ~~(h + .5);\\n    a[1] = ~~(s * 100 + .5);\\n    a[2] = ~~(l * 100 + .5);\\n  }\\n\\n  forceAlpha && a.length < 4 && (a[3] = 1);\\n  return a;\\n},\\n    _colorOrderData = function _colorOrderData(v) {\\n  // strips out the colors from the string, finds all the numeric slots (with units) and returns an array of those. The Array also has a \\\"c\\\" property which is an Array of the index values where the colors belong. This is to help work around issues where there's a mis-matched order of color/numeric data like drop-shadow(#f00 0px 1px 2px) and drop-shadow(0x 1px 2px #f00). This is basically a helper function used in _formatColors()\\n  var values = [],\\n      c = [],\\n      i = -1;\\n  v.split(_colorExp).forEach(function (v) {\\n    var a = v.match(_numWithUnitExp) || [];\\n    values.push.apply(values, a);\\n    c.push(i += a.length + 1);\\n  });\\n  values.c = c;\\n  return values;\\n},\\n    _formatColors = function _formatColors(s, toHSL, orderMatchData) {\\n  var result = \\\"\\\",\\n      colors = (s + result).match(_colorExp),\\n      type = toHSL ? \\\"hsla(\\\" : \\\"rgba(\\\",\\n      i = 0,\\n      c,\\n      shell,\\n      d,\\n      l;\\n\\n  if (!colors) {\\n    return s;\\n  }\\n\\n  colors = colors.map(function (color) {\\n    return (color = splitColor(color, toHSL, 1)) && type + (toHSL ? color[0] + \\\",\\\" + color[1] + \\\"%,\\\" + color[2] + \\\"%,\\\" + color[3] : color.join(\\\",\\\")) + \\\")\\\";\\n  });\\n\\n  if (orderMatchData) {\\n    d = _colorOrderData(s);\\n    c = orderMatchData.c;\\n\\n    if (c.join(result) !== d.c.join(result)) {\\n      shell = s.replace(_colorExp, \\\"1\\\").split(_numWithUnitExp);\\n      l = shell.length - 1;\\n\\n      for (; i < l; i++) {\\n        result += shell[i] + (~c.indexOf(i) ? colors.shift() || type + \\\"0,0,0,0)\\\" : (d.length ? d : colors.length ? colors : orderMatchData).shift());\\n      }\\n    }\\n  }\\n\\n  if (!shell) {\\n    shell = s.split(_colorExp);\\n    l = shell.length - 1;\\n\\n    for (; i < l; i++) {\\n      result += shell[i] + colors[i];\\n    }\\n  }\\n\\n  return result + shell[l];\\n},\\n    _colorExp = function () {\\n  var s = \\\"(?:\\\\\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\\\\\(.+?\\\\\\\\))|\\\\\\\\B#(?:[0-9a-f]{3,4}){1,2}\\\\\\\\b\\\",\\n      //we'll dynamically build this Regular Expression to conserve file size. After building it, it will be able to find rgb(), rgba(), # (hexadecimal), and named color values like red, blue, purple, etc.,\\n  p;\\n\\n  for (p in _colorLookup) {\\n    s += \\\"|\\\" + p + \\\"\\\\\\\\b\\\";\\n  }\\n\\n  return new RegExp(s + \\\")\\\", \\\"gi\\\");\\n}(),\\n    _hslExp = /hsl[a]?\\\\(/,\\n    _colorStringFilter = function _colorStringFilter(a) {\\n  var combined = a.join(\\\" \\\"),\\n      toHSL;\\n  _colorExp.lastIndex = 0;\\n\\n  if (_colorExp.test(combined)) {\\n    toHSL = _hslExp.test(combined);\\n    a[1] = _formatColors(a[1], toHSL);\\n    a[0] = _formatColors(a[0], toHSL, _colorOrderData(a[1])); // make sure the order of numbers/colors match with the END value.\\n\\n    return true;\\n  }\\n},\\n\\n/*\\n * --------------------------------------------------------------------------------------\\n * TICKER\\n * --------------------------------------------------------------------------------------\\n */\\n_tickerActive,\\n    _ticker = function () {\\n  var _getTime = Date.now,\\n      _lagThreshold = 500,\\n      _adjustedLag = 33,\\n      _startTime = _getTime(),\\n      _lastUpdate = _startTime,\\n      _gap = 1000 / 240,\\n      _nextTime = _gap,\\n      _listeners = [],\\n      _id,\\n      _req,\\n      _raf,\\n      _self,\\n      _delta,\\n      _i,\\n      _tick = function _tick(v) {\\n    var elapsed = _getTime() - _lastUpdate,\\n        manual = v === true,\\n        overlap,\\n        dispatch,\\n        time,\\n        frame;\\n\\n    (elapsed > _lagThreshold || elapsed < 0) && (_startTime += elapsed - _adjustedLag);\\n    _lastUpdate += elapsed;\\n    time = _lastUpdate - _startTime;\\n    overlap = time - _nextTime;\\n\\n    if (overlap > 0 || manual) {\\n      frame = ++_self.frame;\\n      _delta = time - _self.time * 1000;\\n      _self.time = time = time / 1000;\\n      _nextTime += overlap + (overlap >= _gap ? 4 : _gap - overlap);\\n      dispatch = 1;\\n    }\\n\\n    manual || (_id = _req(_tick)); //make sure the request is made before we dispatch the \\\"tick\\\" event so that timing is maintained. Otherwise, if processing the \\\"tick\\\" requires a bunch of time (like 15ms) and we're using a setTimeout() that's based on 16.7ms, it'd technically take 31.7ms between frames otherwise.\\n\\n    if (dispatch) {\\n      for (_i = 0; _i < _listeners.length; _i++) {\\n        // use _i and check _listeners.length instead of a variable because a listener could get removed during the loop, and if that happens to an element less than the current index, it'd throw things off in the loop.\\n        _listeners[_i](time, _delta, frame, v);\\n      }\\n    }\\n  };\\n\\n  _self = {\\n    time: 0,\\n    frame: 0,\\n    tick: function tick() {\\n      _tick(true);\\n    },\\n    deltaRatio: function deltaRatio(fps) {\\n      return _delta / (1000 / (fps || 60));\\n    },\\n    wake: function wake() {\\n      if (_coreReady) {\\n        if (!_coreInitted && _windowExists()) {\\n          _win = _coreInitted = window;\\n          _doc = _win.document || {};\\n          _globals.gsap = gsap;\\n          (_win.gsapVersions || (_win.gsapVersions = [])).push(gsap.version);\\n\\n          _install(_installScope || _win.GreenSockGlobals || !_win.gsap && _win || {});\\n\\n          _registerPluginQueue.forEach(_createPlugin);\\n        }\\n\\n        _raf = typeof requestAnimationFrame !== \\\"undefined\\\" && requestAnimationFrame;\\n        _id && _self.sleep();\\n\\n        _req = _raf || function (f) {\\n          return setTimeout(f, _nextTime - _self.time * 1000 + 1 | 0);\\n        };\\n\\n        _tickerActive = 1;\\n\\n        _tick(2);\\n      }\\n    },\\n    sleep: function sleep() {\\n      (_raf ? cancelAnimationFrame : clearTimeout)(_id);\\n      _tickerActive = 0;\\n      _req = _emptyFunc;\\n    },\\n    lagSmoothing: function lagSmoothing(threshold, adjustedLag) {\\n      _lagThreshold = threshold || Infinity; // zero should be interpreted as basically unlimited\\n\\n      _adjustedLag = Math.min(adjustedLag || 33, _lagThreshold);\\n    },\\n    fps: function fps(_fps) {\\n      _gap = 1000 / (_fps || 240);\\n      _nextTime = _self.time * 1000 + _gap;\\n    },\\n    add: function add(callback, once, prioritize) {\\n      var func = once ? function (t, d, f, v) {\\n        callback(t, d, f, v);\\n\\n        _self.remove(func);\\n      } : callback;\\n\\n      _self.remove(callback);\\n\\n      _listeners[prioritize ? \\\"unshift\\\" : \\\"push\\\"](func);\\n\\n      _wake();\\n\\n      return func;\\n    },\\n    remove: function remove(callback, i) {\\n      ~(i = _listeners.indexOf(callback)) && _listeners.splice(i, 1) && _i >= i && _i--;\\n    },\\n    _listeners: _listeners\\n  };\\n  return _self;\\n}(),\\n    _wake = function _wake() {\\n  return !_tickerActive && _ticker.wake();\\n},\\n    //also ensures the core classes are initialized.\\n\\n/*\\n* -------------------------------------------------\\n* EASING\\n* -------------------------------------------------\\n*/\\n_easeMap = {},\\n    _customEaseExp = /^[\\\\d.\\\\-M][\\\\d.\\\\-,\\\\s]/,\\n    _quotesExp = /[\\\"']/g,\\n    _parseObjectInString = function _parseObjectInString(value) {\\n  //takes a string like \\\"{wiggles:10, type:anticipate})\\\" and turns it into a real object. Notice it ends in \\\")\\\" and includes the {} wrappers. This is because we only use this function for parsing ease configs and prioritized optimization rather than reusability.\\n  var obj = {},\\n      split = value.substr(1, value.length - 3).split(\\\":\\\"),\\n      key = split[0],\\n      i = 1,\\n      l = split.length,\\n      index,\\n      val,\\n      parsedVal;\\n\\n  for (; i < l; i++) {\\n    val = split[i];\\n    index = i !== l - 1 ? val.lastIndexOf(\\\",\\\") : val.length;\\n    parsedVal = val.substr(0, index);\\n    obj[key] = isNaN(parsedVal) ? parsedVal.replace(_quotesExp, \\\"\\\").trim() : +parsedVal;\\n    key = val.substr(index + 1).trim();\\n  }\\n\\n  return obj;\\n},\\n    _valueInParentheses = function _valueInParentheses(value) {\\n  var open = value.indexOf(\\\"(\\\") + 1,\\n      close = value.indexOf(\\\")\\\"),\\n      nested = value.indexOf(\\\"(\\\", open);\\n  return value.substring(open, ~nested && nested < close ? value.indexOf(\\\")\\\", close + 1) : close);\\n},\\n    _configEaseFromString = function _configEaseFromString(name) {\\n  //name can be a string like \\\"elastic.out(1,0.5)\\\", and pass in _easeMap as obj and it'll parse it out and call the actual function like _easeMap.Elastic.easeOut.config(1,0.5). It will also parse custom ease strings as long as CustomEase is loaded and registered (internally as _easeMap._CE).\\n  var split = (name + \\\"\\\").split(\\\"(\\\"),\\n      ease = _easeMap[split[0]];\\n  return ease && split.length > 1 && ease.config ? ease.config.apply(null, ~name.indexOf(\\\"{\\\") ? [_parseObjectInString(split[1])] : _valueInParentheses(name).split(\\\",\\\").map(_numericIfPossible)) : _easeMap._CE && _customEaseExp.test(name) ? _easeMap._CE(\\\"\\\", name) : ease;\\n},\\n    _invertEase = function _invertEase(ease) {\\n  return function (p) {\\n    return 1 - ease(1 - p);\\n  };\\n},\\n    // allow yoyoEase to be set in children and have those affected when the parent/ancestor timeline yoyos.\\n_propagateYoyoEase = function _propagateYoyoEase(timeline, isYoyo) {\\n  var child = timeline._first,\\n      ease;\\n\\n  while (child) {\\n    if (child instanceof Timeline) {\\n      _propagateYoyoEase(child, isYoyo);\\n    } else if (child.vars.yoyoEase && (!child._yoyo || !child._repeat) && child._yoyo !== isYoyo) {\\n      if (child.timeline) {\\n        _propagateYoyoEase(child.timeline, isYoyo);\\n      } else {\\n        ease = child._ease;\\n        child._ease = child._yEase;\\n        child._yEase = ease;\\n        child._yoyo = isYoyo;\\n      }\\n    }\\n\\n    child = child._next;\\n  }\\n},\\n    _parseEase = function _parseEase(ease, defaultEase) {\\n  return !ease ? defaultEase : (_isFunction(ease) ? ease : _easeMap[ease] || _configEaseFromString(ease)) || defaultEase;\\n},\\n    _insertEase = function _insertEase(names, easeIn, easeOut, easeInOut) {\\n  if (easeOut === void 0) {\\n    easeOut = function easeOut(p) {\\n      return 1 - easeIn(1 - p);\\n    };\\n  }\\n\\n  if (easeInOut === void 0) {\\n    easeInOut = function easeInOut(p) {\\n      return p < .5 ? easeIn(p * 2) / 2 : 1 - easeIn((1 - p) * 2) / 2;\\n    };\\n  }\\n\\n  var ease = {\\n    easeIn: easeIn,\\n    easeOut: easeOut,\\n    easeInOut: easeInOut\\n  },\\n      lowercaseName;\\n\\n  _forEachName(names, function (name) {\\n    _easeMap[name] = _globals[name] = ease;\\n    _easeMap[lowercaseName = name.toLowerCase()] = easeOut;\\n\\n    for (var p in ease) {\\n      _easeMap[lowercaseName + (p === \\\"easeIn\\\" ? \\\".in\\\" : p === \\\"easeOut\\\" ? \\\".out\\\" : \\\".inOut\\\")] = _easeMap[name + \\\".\\\" + p] = ease[p];\\n    }\\n  });\\n\\n  return ease;\\n},\\n    _easeInOutFromOut = function _easeInOutFromOut(easeOut) {\\n  return function (p) {\\n    return p < .5 ? (1 - easeOut(1 - p * 2)) / 2 : .5 + easeOut((p - .5) * 2) / 2;\\n  };\\n},\\n    _configElastic = function _configElastic(type, amplitude, period) {\\n  var p1 = amplitude >= 1 ? amplitude : 1,\\n      //note: if amplitude is < 1, we simply adjust the period for a more natural feel. Otherwise the math doesn't work right and the curve starts at 1.\\n  p2 = (period || (type ? .3 : .45)) / (amplitude < 1 ? amplitude : 1),\\n      p3 = p2 / _2PI * (Math.asin(1 / p1) || 0),\\n      easeOut = function easeOut(p) {\\n    return p === 1 ? 1 : p1 * Math.pow(2, -10 * p) * _sin((p - p3) * p2) + 1;\\n  },\\n      ease = type === \\\"out\\\" ? easeOut : type === \\\"in\\\" ? function (p) {\\n    return 1 - easeOut(1 - p);\\n  } : _easeInOutFromOut(easeOut);\\n\\n  p2 = _2PI / p2; //precalculate to optimize\\n\\n  ease.config = function (amplitude, period) {\\n    return _configElastic(type, amplitude, period);\\n  };\\n\\n  return ease;\\n},\\n    _configBack = function _configBack(type, overshoot) {\\n  if (overshoot === void 0) {\\n    overshoot = 1.70158;\\n  }\\n\\n  var easeOut = function easeOut(p) {\\n    return p ? --p * p * ((overshoot + 1) * p + overshoot) + 1 : 0;\\n  },\\n      ease = type === \\\"out\\\" ? easeOut : type === \\\"in\\\" ? function (p) {\\n    return 1 - easeOut(1 - p);\\n  } : _easeInOutFromOut(easeOut);\\n\\n  ease.config = function (overshoot) {\\n    return _configBack(type, overshoot);\\n  };\\n\\n  return ease;\\n}; // a cheaper (kb and cpu) but more mild way to get a parameterized weighted ease by feeding in a value between -1 (easeIn) and 1 (easeOut) where 0 is linear.\\n// _weightedEase = ratio => {\\n// \\tlet y = 0.5 + ratio / 2;\\n// \\treturn p => (2 * (1 - p) * p * y + p * p);\\n// },\\n// a stronger (but more expensive kb/cpu) parameterized weighted ease that lets you feed in a value between -1 (easeIn) and 1 (easeOut) where 0 is linear.\\n// _weightedEaseStrong = ratio => {\\n// \\tratio = .5 + ratio / 2;\\n// \\tlet o = 1 / 3 * (ratio < .5 ? ratio : 1 - ratio),\\n// \\t\\tb = ratio - o,\\n// \\t\\tc = ratio + o;\\n// \\treturn p => p === 1 ? p : 3 * b * (1 - p) * (1 - p) * p + 3 * c * (1 - p) * p * p + p * p * p;\\n// };\\n\\n\\n_forEachName(\\\"Linear,Quad,Cubic,Quart,Quint,Strong\\\", function (name, i) {\\n  var power = i < 5 ? i + 1 : i;\\n\\n  _insertEase(name + \\\",Power\\\" + (power - 1), i ? function (p) {\\n    return Math.pow(p, power);\\n  } : function (p) {\\n    return p;\\n  }, function (p) {\\n    return 1 - Math.pow(1 - p, power);\\n  }, function (p) {\\n    return p < .5 ? Math.pow(p * 2, power) / 2 : 1 - Math.pow((1 - p) * 2, power) / 2;\\n  });\\n});\\n\\n_easeMap.Linear.easeNone = _easeMap.none = _easeMap.Linear.easeIn;\\n\\n_insertEase(\\\"Elastic\\\", _configElastic(\\\"in\\\"), _configElastic(\\\"out\\\"), _configElastic());\\n\\n(function (n, c) {\\n  var n1 = 1 / c,\\n      n2 = 2 * n1,\\n      n3 = 2.5 * n1,\\n      easeOut = function easeOut(p) {\\n    return p < n1 ? n * p * p : p < n2 ? n * Math.pow(p - 1.5 / c, 2) + .75 : p < n3 ? n * (p -= 2.25 / c) * p + .9375 : n * Math.pow(p - 2.625 / c, 2) + .984375;\\n  };\\n\\n  _insertEase(\\\"Bounce\\\", function (p) {\\n    return 1 - easeOut(1 - p);\\n  }, easeOut);\\n})(7.5625, 2.75);\\n\\n_insertEase(\\\"Expo\\\", function (p) {\\n  return Math.pow(2, 10 * (p - 1)) * p + p * p * p * p * p * p * (1 - p);\\n}); // previously 2 ** (10 * (p - 1)) but that doesn't end up with the value quite at the right spot so we do a blended ease to ensure it lands where it should perfectly.\\n\\n\\n_insertEase(\\\"Circ\\\", function (p) {\\n  return -(_sqrt(1 - p * p) - 1);\\n});\\n\\n_insertEase(\\\"Sine\\\", function (p) {\\n  return p === 1 ? 1 : -_cos(p * _HALF_PI) + 1;\\n});\\n\\n_insertEase(\\\"Back\\\", _configBack(\\\"in\\\"), _configBack(\\\"out\\\"), _configBack());\\n\\n_easeMap.SteppedEase = _easeMap.steps = _globals.SteppedEase = {\\n  config: function config(steps, immediateStart) {\\n    if (steps === void 0) {\\n      steps = 1;\\n    }\\n\\n    var p1 = 1 / steps,\\n        p2 = steps + (immediateStart ? 0 : 1),\\n        p3 = immediateStart ? 1 : 0,\\n        max = 1 - _tinyNum;\\n    return function (p) {\\n      return ((p2 * _clamp(0, max, p) | 0) + p3) * p1;\\n    };\\n  }\\n};\\n_defaults.ease = _easeMap[\\\"quad.out\\\"];\\n\\n_forEachName(\\\"onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt\\\", function (name) {\\n  return _callbackNames += name + \\\",\\\" + name + \\\"Params,\\\";\\n});\\n/*\\n * --------------------------------------------------------------------------------------\\n * CACHE\\n * --------------------------------------------------------------------------------------\\n */\\n\\n\\nvar GSCache = function GSCache(target, harness) {\\n  this.id = _gsID++;\\n  target._gsap = this;\\n  this.target = target;\\n  this.harness = harness;\\n  this.get = harness ? harness.get : _getProperty;\\n  this.set = harness ? harness.getSetter : _getSetter;\\n};\\n/*\\n * --------------------------------------------------------------------------------------\\n * ANIMATION\\n * --------------------------------------------------------------------------------------\\n */\\n\\nvar Animation = /*#__PURE__*/function () {\\n  function Animation(vars) {\\n    this.vars = vars;\\n    this._delay = +vars.delay || 0;\\n\\n    if (this._repeat = vars.repeat === Infinity ? -2 : vars.repeat || 0) {\\n      // TODO: repeat: Infinity on a timeline's children must flag that timeline internally and affect its totalDuration, otherwise it'll stop in the negative direction when reaching the start.\\n      this._rDelay = vars.repeatDelay || 0;\\n      this._yoyo = !!vars.yoyo || !!vars.yoyoEase;\\n    }\\n\\n    this._ts = 1;\\n\\n    _setDuration(this, +vars.duration, 1, 1);\\n\\n    this.data = vars.data;\\n\\n    if (_context) {\\n      this._ctx = _context;\\n\\n      _context.data.push(this);\\n    }\\n\\n    _tickerActive || _ticker.wake();\\n  }\\n\\n  var _proto = Animation.prototype;\\n\\n  _proto.delay = function delay(value) {\\n    if (value || value === 0) {\\n      this.parent && this.parent.smoothChildTiming && this.startTime(this._start + value - this._delay);\\n      this._delay = value;\\n      return this;\\n    }\\n\\n    return this._delay;\\n  };\\n\\n  _proto.duration = function duration(value) {\\n    return arguments.length ? this.totalDuration(this._repeat > 0 ? value + (value + this._rDelay) * this._repeat : value) : this.totalDuration() && this._dur;\\n  };\\n\\n  _proto.totalDuration = function totalDuration(value) {\\n    if (!arguments.length) {\\n      return this._tDur;\\n    }\\n\\n    this._dirty = 0;\\n    return _setDuration(this, this._repeat < 0 ? value : (value - this._repeat * this._rDelay) / (this._repeat + 1));\\n  };\\n\\n  _proto.totalTime = function totalTime(_totalTime, suppressEvents) {\\n    _wake();\\n\\n    if (!arguments.length) {\\n      return this._tTime;\\n    }\\n\\n    var parent = this._dp;\\n\\n    if (parent && parent.smoothChildTiming && this._ts) {\\n      _alignPlayhead(this, _totalTime);\\n\\n      !parent._dp || parent.parent || _postAddChecks(parent, this); // edge case: if this is a child of a timeline that already completed, for example, we must re-activate the parent.\\n      //in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The start of that child would get pushed out, but one of the ancestors may have completed.\\n\\n      while (parent && parent.parent) {\\n        if (parent.parent._time !== parent._start + (parent._ts >= 0 ? parent._tTime / parent._ts : (parent.totalDuration() - parent._tTime) / -parent._ts)) {\\n          parent.totalTime(parent._tTime, true);\\n        }\\n\\n        parent = parent.parent;\\n      }\\n\\n      if (!this.parent && this._dp.autoRemoveChildren && (this._ts > 0 && _totalTime < this._tDur || this._ts < 0 && _totalTime > 0 || !this._tDur && !_totalTime)) {\\n        //if the animation doesn't have a parent, put it back into its last parent (recorded as _dp for exactly cases like this). Limit to parents with autoRemoveChildren (like globalTimeline) so that if the user manually removes an animation from a timeline and then alters its playhead, it doesn't get added back in.\\n        _addToTimeline(this._dp, this, this._start - this._delay);\\n      }\\n    }\\n\\n    if (this._tTime !== _totalTime || !this._dur && !suppressEvents || this._initted && Math.abs(this._zTime) === _tinyNum || !_totalTime && !this._initted && (this.add || this._ptLookup)) {\\n      // check for _ptLookup on a Tween instance to ensure it has actually finished being instantiated, otherwise if this.reverse() gets called in the Animation constructor, it could trigger a render() here even though the _targets weren't populated, thus when _init() is called there won't be any PropTweens (it'll act like the tween is non-functional)\\n      this._ts || (this._pTime = _totalTime); // otherwise, if an animation is paused, then the playhead is moved back to zero, then resumed, it'd revert back to the original time at the pause\\n      //if (!this._lock) { // avoid endless recursion (not sure we need this yet or if it's worth the performance hit)\\n      //   this._lock = 1;\\n\\n      _lazySafeRender(this, _totalTime, suppressEvents); //   this._lock = 0;\\n      //}\\n\\n    }\\n\\n    return this;\\n  };\\n\\n  _proto.time = function time(value, suppressEvents) {\\n    return arguments.length ? this.totalTime(Math.min(this.totalDuration(), value + _elapsedCycleDuration(this)) % (this._dur + this._rDelay) || (value ? this._dur : 0), suppressEvents) : this._time; // note: if the modulus results in 0, the playhead could be exactly at the end or the beginning, and we always defer to the END with a non-zero value, otherwise if you set the time() to the very end (duration()), it would render at the START!\\n  };\\n\\n  _proto.totalProgress = function totalProgress(value, suppressEvents) {\\n    return arguments.length ? this.totalTime(this.totalDuration() * value, suppressEvents) : this.totalDuration() ? Math.min(1, this._tTime / this._tDur) : this.rawTime() >= 0 && this._initted ? 1 : 0;\\n  };\\n\\n  _proto.progress = function progress(value, suppressEvents) {\\n    return arguments.length ? this.totalTime(this.duration() * (this._yoyo && !(this.iteration() & 1) ? 1 - value : value) + _elapsedCycleDuration(this), suppressEvents) : this.duration() ? Math.min(1, this._time / this._dur) : this.rawTime() > 0 ? 1 : 0;\\n  };\\n\\n  _proto.iteration = function iteration(value, suppressEvents) {\\n    var cycleDuration = this.duration() + this._rDelay;\\n\\n    return arguments.length ? this.totalTime(this._time + (value - 1) * cycleDuration, suppressEvents) : this._repeat ? _animationCycle(this._tTime, cycleDuration) + 1 : 1;\\n  } // potential future addition:\\n  // isPlayingBackwards() {\\n  // \\tlet animation = this,\\n  // \\t\\torientation = 1; // 1 = forward, -1 = backward\\n  // \\twhile (animation) {\\n  // \\t\\torientation *= animation.reversed() || (animation.repeat() && !(animation.iteration() & 1)) ? -1 : 1;\\n  // \\t\\tanimation = animation.parent;\\n  // \\t}\\n  // \\treturn orientation < 0;\\n  // }\\n  ;\\n\\n  _proto.timeScale = function timeScale(value, suppressEvents) {\\n    if (!arguments.length) {\\n      return this._rts === -_tinyNum ? 0 : this._rts; // recorded timeScale. Special case: if someone calls reverse() on an animation with timeScale of 0, we assign it -_tinyNum to remember it's reversed.\\n    }\\n\\n    if (this._rts === value) {\\n      return this;\\n    }\\n\\n    var tTime = this.parent && this._ts ? _parentToChildTotalTime(this.parent._time, this) : this._tTime; // make sure to do the parentToChildTotalTime() BEFORE setting the new _ts because the old one must be used in that calculation.\\n    // future addition? Up side: fast and minimal file size. Down side: only works on this animation; if a timeline is reversed, for example, its childrens' onReverse wouldn't get called.\\n    //(+value < 0 && this._rts >= 0) && _callback(this, \\\"onReverse\\\", true);\\n    // prioritize rendering where the parent's playhead lines up instead of this._tTime because there could be a tween that's animating another tween's timeScale in the same rendering loop (same parent), thus if the timeScale tween renders first, it would alter _start BEFORE _tTime was set on that tick (in the rendering loop), effectively freezing it until the timeScale tween finishes.\\n\\n    this._rts = +value || 0;\\n    this._ts = this._ps || value === -_tinyNum ? 0 : this._rts; // _ts is the functional timeScale which would be 0 if the animation is paused.\\n\\n    this.totalTime(_clamp(-Math.abs(this._delay), this._tDur, tTime), suppressEvents !== false);\\n\\n    _setEnd(this); // if parent.smoothChildTiming was false, the end time didn't get updated in the _alignPlayhead() method, so do it here.\\n\\n\\n    return _recacheAncestors(this);\\n  };\\n\\n  _proto.paused = function paused(value) {\\n    if (!arguments.length) {\\n      return this._ps;\\n    } // possible future addition - if an animation is removed from its parent and then .restart() or .play() or .resume() is called, perhaps we should force it back into the globalTimeline but be careful because what if it's already at its end? We don't want it to just persist forever and not get released for GC.\\n    // !this.parent && !value && this._tTime < this._tDur && this !== _globalTimeline && _globalTimeline.add(this);\\n\\n\\n    if (this._ps !== value) {\\n      this._ps = value;\\n\\n      if (value) {\\n        this._pTime = this._tTime || Math.max(-this._delay, this.rawTime()); // if the pause occurs during the delay phase, make sure that's factored in when resuming.\\n\\n        this._ts = this._act = 0; // _ts is the functional timeScale, so a paused tween would effectively have a timeScale of 0. We record the \\\"real\\\" timeScale as _rts (recorded time scale)\\n      } else {\\n        _wake();\\n\\n        this._ts = this._rts; //only defer to _pTime (pauseTime) if tTime is zero. Remember, someone could pause() an animation, then scrub the playhead and resume(). If the parent doesn't have smoothChildTiming, we render at the rawTime() because the startTime won't get updated.\\n\\n        this.totalTime(this.parent && !this.parent.smoothChildTiming ? this.rawTime() : this._tTime || this._pTime, this.progress() === 1 && Math.abs(this._zTime) !== _tinyNum && (this._tTime -= _tinyNum)); // edge case: animation.progress(1).pause().play() wouldn't render again because the playhead is already at the end, but the call to totalTime() below will add it back to its parent...and not remove it again (since removing only happens upon rendering at a new time). Offsetting the _tTime slightly is done simply to cause the final render in totalTime() that'll pop it off its timeline (if autoRemoveChildren is true, of course). Check to make sure _zTime isn't -_tinyNum to avoid an edge case where the playhead is pushed to the end but INSIDE a tween/callback, the timeline itself is paused thus halting rendering and leaving a few unrendered. When resuming, it wouldn't render those otherwise.\\n      }\\n    }\\n\\n    return this;\\n  };\\n\\n  _proto.startTime = function startTime(value) {\\n    if (arguments.length) {\\n      this._start = value;\\n      var parent = this.parent || this._dp;\\n      parent && (parent._sort || !this.parent) && _addToTimeline(parent, this, value - this._delay);\\n      return this;\\n    }\\n\\n    return this._start;\\n  };\\n\\n  _proto.endTime = function endTime(includeRepeats) {\\n    return this._start + (_isNotFalse(includeRepeats) ? this.totalDuration() : this.duration()) / Math.abs(this._ts || 1);\\n  };\\n\\n  _proto.rawTime = function rawTime(wrapRepeats) {\\n    var parent = this.parent || this._dp; // _dp = detached parent\\n\\n    return !parent ? this._tTime : wrapRepeats && (!this._ts || this._repeat && this._time && this.totalProgress() < 1) ? this._tTime % (this._dur + this._rDelay) : !this._ts ? this._tTime : _parentToChildTotalTime(parent.rawTime(wrapRepeats), this);\\n  };\\n\\n  _proto.revert = function revert(config) {\\n    if (config === void 0) {\\n      config = _revertConfig;\\n    }\\n\\n    var prevIsReverting = _reverting;\\n    _reverting = config;\\n\\n    if (this._initted || this._startAt) {\\n      this.timeline && this.timeline.revert(config);\\n      this.totalTime(-0.01, config.suppressEvents);\\n    }\\n\\n    this.data !== \\\"nested\\\" && config.kill !== false && this.kill();\\n    _reverting = prevIsReverting;\\n    return this;\\n  };\\n\\n  _proto.globalTime = function globalTime(rawTime) {\\n    var animation = this,\\n        time = arguments.length ? rawTime : animation.rawTime();\\n\\n    while (animation) {\\n      time = animation._start + time / (Math.abs(animation._ts) || 1);\\n      animation = animation._dp;\\n    }\\n\\n    return !this.parent && this._sat ? this._sat.globalTime(rawTime) : time; // the _startAt tweens for .fromTo() and .from() that have immediateRender should always be FIRST in the timeline (important for context.revert()). \\\"_sat\\\" stands for _startAtTween, referring to the parent tween that created the _startAt. We must discern if that tween had immediateRender so that we can know whether or not to prioritize it in revert().\\n  };\\n\\n  _proto.repeat = function repeat(value) {\\n    if (arguments.length) {\\n      this._repeat = value === Infinity ? -2 : value;\\n      return _onUpdateTotalDuration(this);\\n    }\\n\\n    return this._repeat === -2 ? Infinity : this._repeat;\\n  };\\n\\n  _proto.repeatDelay = function repeatDelay(value) {\\n    if (arguments.length) {\\n      var time = this._time;\\n      this._rDelay = value;\\n\\n      _onUpdateTotalDuration(this);\\n\\n      return time ? this.time(time) : this;\\n    }\\n\\n    return this._rDelay;\\n  };\\n\\n  _proto.yoyo = function yoyo(value) {\\n    if (arguments.length) {\\n      this._yoyo = value;\\n      return this;\\n    }\\n\\n    return this._yoyo;\\n  };\\n\\n  _proto.seek = function seek(position, suppressEvents) {\\n    return this.totalTime(_parsePosition(this, position), _isNotFalse(suppressEvents));\\n  };\\n\\n  _proto.restart = function restart(includeDelay, suppressEvents) {\\n    this.play().totalTime(includeDelay ? -this._delay : 0, _isNotFalse(suppressEvents));\\n    this._dur || (this._zTime = -_tinyNum); // ensures onComplete fires on a zero-duration animation that gets restarted.\\n\\n    return this;\\n  };\\n\\n  _proto.play = function play(from, suppressEvents) {\\n    from != null && this.seek(from, suppressEvents);\\n    return this.reversed(false).paused(false);\\n  };\\n\\n  _proto.reverse = function reverse(from, suppressEvents) {\\n    from != null && this.seek(from || this.totalDuration(), suppressEvents);\\n    return this.reversed(true).paused(false);\\n  };\\n\\n  _proto.pause = function pause(atTime, suppressEvents) {\\n    atTime != null && this.seek(atTime, suppressEvents);\\n    return this.paused(true);\\n  };\\n\\n  _proto.resume = function resume() {\\n    return this.paused(false);\\n  };\\n\\n  _proto.reversed = function reversed(value) {\\n    if (arguments.length) {\\n      !!value !== this.reversed() && this.timeScale(-this._rts || (value ? -_tinyNum : 0)); // in case timeScale is zero, reversing would have no effect so we use _tinyNum.\\n\\n      return this;\\n    }\\n\\n    return this._rts < 0;\\n  };\\n\\n  _proto.invalidate = function invalidate() {\\n    this._initted = this._act = 0;\\n    this._zTime = -_tinyNum;\\n    return this;\\n  };\\n\\n  _proto.isActive = function isActive() {\\n    var parent = this.parent || this._dp,\\n        start = this._start,\\n        rawTime;\\n    return !!(!parent || this._ts && this._initted && parent.isActive() && (rawTime = parent.rawTime(true)) >= start && rawTime < this.endTime(true) - _tinyNum);\\n  };\\n\\n  _proto.eventCallback = function eventCallback(type, callback, params) {\\n    var vars = this.vars;\\n\\n    if (arguments.length > 1) {\\n      if (!callback) {\\n        delete vars[type];\\n      } else {\\n        vars[type] = callback;\\n        params && (vars[type + \\\"Params\\\"] = params);\\n        type === \\\"onUpdate\\\" && (this._onUpdate = callback);\\n      }\\n\\n      return this;\\n    }\\n\\n    return vars[type];\\n  };\\n\\n  _proto.then = function then(onFulfilled) {\\n    var self = this;\\n    return new Promise(function (resolve) {\\n      var f = _isFunction(onFulfilled) ? onFulfilled : _passThrough,\\n          _resolve = function _resolve() {\\n        var _then = self.then;\\n        self.then = null; // temporarily null the then() method to avoid an infinite loop (see https://github.com/greensock/GSAP/issues/322)\\n\\n        _isFunction(f) && (f = f(self)) && (f.then || f === self) && (self.then = _then);\\n        resolve(f);\\n        self.then = _then;\\n      };\\n\\n      if (self._initted && self.totalProgress() === 1 && self._ts >= 0 || !self._tTime && self._ts < 0) {\\n        _resolve();\\n      } else {\\n        self._prom = _resolve;\\n      }\\n    });\\n  };\\n\\n  _proto.kill = function kill() {\\n    _interrupt(this);\\n  };\\n\\n  return Animation;\\n}();\\n\\n_setDefaults(Animation.prototype, {\\n  _time: 0,\\n  _start: 0,\\n  _end: 0,\\n  _tTime: 0,\\n  _tDur: 0,\\n  _dirty: 0,\\n  _repeat: 0,\\n  _yoyo: false,\\n  parent: null,\\n  _initted: false,\\n  _rDelay: 0,\\n  _ts: 1,\\n  _dp: 0,\\n  ratio: 0,\\n  _zTime: -_tinyNum,\\n  _prom: 0,\\n  _ps: false,\\n  _rts: 1\\n});\\n/*\\n * -------------------------------------------------\\n * TIMELINE\\n * -------------------------------------------------\\n */\\n\\n\\nvar Timeline = /*#__PURE__*/function (_Animation) {\\n  _inheritsLoose(Timeline, _Animation);\\n\\n  function Timeline(vars, position) {\\n    var _this;\\n\\n    if (vars === void 0) {\\n      vars = {};\\n    }\\n\\n    _this = _Animation.call(this, vars) || this;\\n    _this.labels = {};\\n    _this.smoothChildTiming = !!vars.smoothChildTiming;\\n    _this.autoRemoveChildren = !!vars.autoRemoveChildren;\\n    _this._sort = _isNotFalse(vars.sortChildren);\\n    _globalTimeline && _addToTimeline(vars.parent || _globalTimeline, _assertThisInitialized(_this), position);\\n    vars.reversed && _this.reverse();\\n    vars.paused && _this.paused(true);\\n    vars.scrollTrigger && _scrollTrigger(_assertThisInitialized(_this), vars.scrollTrigger);\\n    return _this;\\n  }\\n\\n  var _proto2 = Timeline.prototype;\\n\\n  _proto2.to = function to(targets, vars, position) {\\n    _createTweenType(0, arguments, this);\\n\\n    return this;\\n  };\\n\\n  _proto2.from = function from(targets, vars, position) {\\n    _createTweenType(1, arguments, this);\\n\\n    return this;\\n  };\\n\\n  _proto2.fromTo = function fromTo(targets, fromVars, toVars, position) {\\n    _createTweenType(2, arguments, this);\\n\\n    return this;\\n  };\\n\\n  _proto2.set = function set(targets, vars, position) {\\n    vars.duration = 0;\\n    vars.parent = this;\\n    _inheritDefaults(vars).repeatDelay || (vars.repeat = 0);\\n    vars.immediateRender = !!vars.immediateRender;\\n    new Tween(targets, vars, _parsePosition(this, position), 1);\\n    return this;\\n  };\\n\\n  _proto2.call = function call(callback, params, position) {\\n    return _addToTimeline(this, Tween.delayedCall(0, callback, params), position);\\n  } //ONLY for backward compatibility! Maybe delete?\\n  ;\\n\\n  _proto2.staggerTo = function staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {\\n    vars.duration = duration;\\n    vars.stagger = vars.stagger || stagger;\\n    vars.onComplete = onCompleteAll;\\n    vars.onCompleteParams = onCompleteAllParams;\\n    vars.parent = this;\\n    new Tween(targets, vars, _parsePosition(this, position));\\n    return this;\\n  };\\n\\n  _proto2.staggerFrom = function staggerFrom(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {\\n    vars.runBackwards = 1;\\n    _inheritDefaults(vars).immediateRender = _isNotFalse(vars.immediateRender);\\n    return this.staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams);\\n  };\\n\\n  _proto2.staggerFromTo = function staggerFromTo(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams) {\\n    toVars.startAt = fromVars;\\n    _inheritDefaults(toVars).immediateRender = _isNotFalse(toVars.immediateRender);\\n    return this.staggerTo(targets, duration, toVars, stagger, position, onCompleteAll, onCompleteAllParams);\\n  };\\n\\n  _proto2.render = function render(totalTime, suppressEvents, force) {\\n    var prevTime = this._time,\\n        tDur = this._dirty ? this.totalDuration() : this._tDur,\\n        dur = this._dur,\\n        tTime = totalTime <= 0 ? 0 : _roundPrecise(totalTime),\\n        // if a paused timeline is resumed (or its _start is updated for another reason...which rounds it), that could result in the playhead shifting a **tiny** amount and a zero-duration child at that spot may get rendered at a different ratio, like its totalTime in render() may be 1e-17 instead of 0, for example.\\n    crossingStart = this._zTime < 0 !== totalTime < 0 && (this._initted || !dur),\\n        time,\\n        child,\\n        next,\\n        iteration,\\n        cycleDuration,\\n        prevPaused,\\n        pauseTween,\\n        timeScale,\\n        prevStart,\\n        prevIteration,\\n        yoyo,\\n        isYoyo;\\n    this !== _globalTimeline && tTime > tDur && totalTime >= 0 && (tTime = tDur);\\n\\n    if (tTime !== this._tTime || force || crossingStart) {\\n      if (prevTime !== this._time && dur) {\\n        //if totalDuration() finds a child with a negative startTime and smoothChildTiming is true, things get shifted around internally so we need to adjust the time accordingly. For example, if a tween starts at -30 we must shift EVERYTHING forward 30 seconds and move this timeline's startTime backward by 30 seconds so that things align with the playhead (no jump).\\n        tTime += this._time - prevTime;\\n        totalTime += this._time - prevTime;\\n      }\\n\\n      time = tTime;\\n      prevStart = this._start;\\n      timeScale = this._ts;\\n      prevPaused = !timeScale;\\n\\n      if (crossingStart) {\\n        dur || (prevTime = this._zTime); //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect.\\n\\n        (totalTime || !suppressEvents) && (this._zTime = totalTime);\\n      }\\n\\n      if (this._repeat) {\\n        //adjust the time for repeats and yoyos\\n        yoyo = this._yoyo;\\n        cycleDuration = dur + this._rDelay;\\n\\n        if (this._repeat < -1 && totalTime < 0) {\\n          return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);\\n        }\\n\\n        time = _roundPrecise(tTime % cycleDuration); //round to avoid floating point errors. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!)\\n\\n        if (tTime === tDur) {\\n          // the tDur === tTime is for edge cases where there's a lengthy decimal on the duration and it may reach the very end but the time is rendered as not-quite-there (remember, tDur is rounded to 4 decimals whereas dur isn't)\\n          iteration = this._repeat;\\n          time = dur;\\n        } else {\\n          prevIteration = _roundPrecise(tTime / cycleDuration); // full decimal version of iterations, not the previous iteration (we're reusing prevIteration variable for efficiency)\\n\\n          iteration = ~~prevIteration;\\n\\n          if (iteration && iteration === prevIteration) {\\n            time = dur;\\n            iteration--;\\n          }\\n\\n          time > dur && (time = dur);\\n        }\\n\\n        prevIteration = _animationCycle(this._tTime, cycleDuration);\\n        !prevTime && this._tTime && prevIteration !== iteration && this._tTime - prevIteration * cycleDuration - this._dur <= 0 && (prevIteration = iteration); // edge case - if someone does addPause() at the very beginning of a repeating timeline, that pause is technically at the same spot as the end which causes this._time to get set to 0 when the totalTime would normally place the playhead at the end. See https://gsap.com/forums/topic/23823-closing-nav-animation-not-working-on-ie-and-iphone-6-maybe-other-older-browser/?tab=comments#comment-113005 also, this._tTime - prevIteration * cycleDuration - this._dur <= 0 just checks to make sure it wasn't previously in the \\\"repeatDelay\\\" portion\\n\\n        if (yoyo && iteration & 1) {\\n          time = dur - time;\\n          isYoyo = 1;\\n        }\\n        /*\\n        make sure children at the end/beginning of the timeline are rendered properly. If, for example,\\n        a 3-second long timeline rendered at 2.9 seconds previously, and now renders at 3.2 seconds (which\\n        would get translated to 2.8 seconds if the timeline yoyos or 0.2 seconds if it just repeats), there\\n        could be a callback or a short tween that's at 2.95 or 3 seconds in which wouldn't render. So\\n        we need to push the timeline to the end (and/or beginning depending on its yoyo value). Also we must\\n        ensure that zero-duration tweens at the very beginning or end of the Timeline work.\\n        */\\n\\n\\n        if (iteration !== prevIteration && !this._lock) {\\n          var rewinding = yoyo && prevIteration & 1,\\n              doesWrap = rewinding === (yoyo && iteration & 1);\\n          iteration < prevIteration && (rewinding = !rewinding);\\n          prevTime = rewinding ? 0 : tTime % dur ? dur : tTime; // if the playhead is landing exactly at the end of an iteration, use that totalTime rather than only the duration, otherwise it'll skip the 2nd render since it's effectively at the same time.\\n\\n          this._lock = 1;\\n          this.render(prevTime || (isYoyo ? 0 : _roundPrecise(iteration * cycleDuration)), suppressEvents, !dur)._lock = 0;\\n          this._tTime = tTime; // if a user gets the iteration() inside the onRepeat, for example, it should be accurate.\\n\\n          !suppressEvents && this.parent && _callback(this, \\\"onRepeat\\\");\\n          this.vars.repeatRefresh && !isYoyo && (this.invalidate()._lock = 1);\\n\\n          if (prevTime && prevTime !== this._time || prevPaused !== !this._ts || this.vars.onRepeat && !this.parent && !this._act) {\\n            // if prevTime is 0 and we render at the very end, _time will be the end, thus won't match. So in this edge case, prevTime won't match _time but that's okay. If it gets killed in the onRepeat, eject as well.\\n            return this;\\n          }\\n\\n          dur = this._dur; // in case the duration changed in the onRepeat\\n\\n          tDur = this._tDur;\\n\\n          if (doesWrap) {\\n            this._lock = 2;\\n            prevTime = rewinding ? dur : -0.0001;\\n            this.render(prevTime, true);\\n            this.vars.repeatRefresh && !isYoyo && this.invalidate();\\n          }\\n\\n          this._lock = 0;\\n\\n          if (!this._ts && !prevPaused) {\\n            return this;\\n          } //in order for yoyoEase to work properly when there's a stagger, we must swap out the ease in each sub-tween.\\n\\n\\n          _propagateYoyoEase(this, isYoyo);\\n        }\\n      }\\n\\n      if (this._hasPause && !this._forcing && this._lock < 2) {\\n        pauseTween = _findNextPauseTween(this, _roundPrecise(prevTime), _roundPrecise(time));\\n\\n        if (pauseTween) {\\n          tTime -= time - (time = pauseTween._start);\\n        }\\n      }\\n\\n      this._tTime = tTime;\\n      this._time = time;\\n      this._act = !timeScale; //as long as it's not paused, force it to be active so that if the user renders independent of the parent timeline, it'll be forced to re-render on the next tick.\\n\\n      if (!this._initted) {\\n        this._onUpdate = this.vars.onUpdate;\\n        this._initted = 1;\\n        this._zTime = totalTime;\\n        prevTime = 0; // upon init, the playhead should always go forward; someone could invalidate() a completed timeline and then if they restart(), that would make child tweens render in reverse order which could lock in the wrong starting values if they build on each other, like tl.to(obj, {x: 100}).to(obj, {x: 0}).\\n      }\\n\\n      if (!prevTime && time && !suppressEvents && !iteration) {\\n        _callback(this, \\\"onStart\\\");\\n\\n        if (this._tTime !== tTime) {\\n          // in case the onStart triggered a render at a different spot, eject. Like if someone did animation.pause(0.5) or something inside the onStart.\\n          return this;\\n        }\\n      }\\n\\n      if (time >= prevTime && totalTime >= 0) {\\n        child = this._first;\\n\\n        while (child) {\\n          next = child._next;\\n\\n          if ((child._act || time >= child._start) && child._ts && pauseTween !== child) {\\n            if (child.parent !== this) {\\n              // an extreme edge case - the child's render could do something like kill() the \\\"next\\\" one in the linked list, or reparent it. In that case we must re-initiate the whole render to be safe.\\n              return this.render(totalTime, suppressEvents, force);\\n            }\\n\\n            child.render(child._ts > 0 ? (time - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (time - child._start) * child._ts, suppressEvents, force);\\n\\n            if (time !== this._time || !this._ts && !prevPaused) {\\n              //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\\n              pauseTween = 0;\\n              next && (tTime += this._zTime = -_tinyNum); // it didn't finish rendering, so flag zTime as negative so that the next time render() is called it'll be forced (to render any remaining children)\\n\\n              break;\\n            }\\n          }\\n\\n          child = next;\\n        }\\n      } else {\\n        child = this._last;\\n        var adjustedTime = totalTime < 0 ? totalTime : time; //when the playhead goes backward beyond the start of this timeline, we must pass that information down to the child animations so that zero-duration tweens know whether to render their starting or ending values.\\n\\n        while (child) {\\n          next = child._prev;\\n\\n          if ((child._act || adjustedTime <= child._end) && child._ts && pauseTween !== child) {\\n            if (child.parent !== this) {\\n              // an extreme edge case - the child's render could do something like kill() the \\\"next\\\" one in the linked list, or reparent it. In that case we must re-initiate the whole render to be safe.\\n              return this.render(totalTime, suppressEvents, force);\\n            }\\n\\n            child.render(child._ts > 0 ? (adjustedTime - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (adjustedTime - child._start) * child._ts, suppressEvents, force || _reverting && (child._initted || child._startAt)); // if reverting, we should always force renders of initted tweens (but remember that .fromTo() or .from() may have a _startAt but not _initted yet). If, for example, a .fromTo() tween with a stagger (which creates an internal timeline) gets reverted BEFORE some of its child tweens render for the first time, it may not properly trigger them to revert.\\n\\n            if (time !== this._time || !this._ts && !prevPaused) {\\n              //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete\\n              pauseTween = 0;\\n              next && (tTime += this._zTime = adjustedTime ? -_tinyNum : _tinyNum); // it didn't finish rendering, so adjust zTime so that so that the next time render() is called it'll be forced (to render any remaining children)\\n\\n              break;\\n            }\\n          }\\n\\n          child = next;\\n        }\\n      }\\n\\n      if (pauseTween && !suppressEvents) {\\n        this.pause();\\n        pauseTween.render(time >= prevTime ? 0 : -_tinyNum)._zTime = time >= prevTime ? 1 : -1;\\n\\n        if (this._ts) {\\n          //the callback resumed playback! So since we may have held back the playhead due to where the pause is positioned, go ahead and jump to where it's SUPPOSED to be (if no pause happened).\\n          this._start = prevStart; //if the pause was at an earlier time and the user resumed in the callback, it could reposition the timeline (changing its startTime), throwing things off slightly, so we make sure the _start doesn't shift.\\n\\n          _setEnd(this);\\n\\n          return this.render(totalTime, suppressEvents, force);\\n        }\\n      }\\n\\n      this._onUpdate && !suppressEvents && _callback(this, \\\"onUpdate\\\", true);\\n      if (tTime === tDur && this._tTime >= this.totalDuration() || !tTime && prevTime) if (prevStart === this._start || Math.abs(timeScale) !== Math.abs(this._ts)) if (!this._lock) {\\n        // remember, a child's callback may alter this timeline's playhead or timeScale which is why we need to add some of these checks.\\n        (totalTime || !dur) && (tTime === tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1); // don't remove if the timeline is reversed and the playhead isn't at 0, otherwise tl.progress(1).reverse() won't work. Only remove if the playhead is at the end and timeScale is positive, or if the playhead is at 0 and the timeScale is negative.\\n\\n        if (!suppressEvents && !(totalTime < 0 && !prevTime) && (tTime || prevTime || !tDur)) {\\n          _callback(this, tTime === tDur && totalTime >= 0 ? \\\"onComplete\\\" : \\\"onReverseComplete\\\", true);\\n\\n          this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();\\n        }\\n      }\\n    }\\n\\n    return this;\\n  };\\n\\n  _proto2.add = function add(child, position) {\\n    var _this2 = this;\\n\\n    _isNumber(position) || (position = _parsePosition(this, position, child));\\n\\n    if (!(child instanceof Animation)) {\\n      if (_isArray(child)) {\\n        child.forEach(function (obj) {\\n          return _this2.add(obj, position);\\n        });\\n        return this;\\n      }\\n\\n      if (_isString(child)) {\\n        return this.addLabel(child, position);\\n      }\\n\\n      if (_isFunction(child)) {\\n        child = Tween.delayedCall(0, child);\\n      } else {\\n        return this;\\n      }\\n    }\\n\\n    return this !== child ? _addToTimeline(this, child, position) : this; //don't allow a timeline to be added to itself as a child!\\n  };\\n\\n  _proto2.getChildren = function getChildren(nested, tweens, timelines, ignoreBeforeTime) {\\n    if (nested === void 0) {\\n      nested = true;\\n    }\\n\\n    if (tweens === void 0) {\\n      tweens = true;\\n    }\\n\\n    if (timelines === void 0) {\\n      timelines = true;\\n    }\\n\\n    if (ignoreBeforeTime === void 0) {\\n      ignoreBeforeTime = -_bigNum;\\n    }\\n\\n    var a = [],\\n        child = this._first;\\n\\n    while (child) {\\n      if (child._start >= ignoreBeforeTime) {\\n        if (child instanceof Tween) {\\n          tweens && a.push(child);\\n        } else {\\n          timelines && a.push(child);\\n          nested && a.push.apply(a, child.getChildren(true, tweens, timelines));\\n        }\\n      }\\n\\n      child = child._next;\\n    }\\n\\n    return a;\\n  };\\n\\n  _proto2.getById = function getById(id) {\\n    var animations = this.getChildren(1, 1, 1),\\n        i = animations.length;\\n\\n    while (i--) {\\n      if (animations[i].vars.id === id) {\\n        return animations[i];\\n      }\\n    }\\n  };\\n\\n  _proto2.remove = function remove(child) {\\n    if (_isString(child)) {\\n      return this.removeLabel(child);\\n    }\\n\\n    if (_isFunction(child)) {\\n      return this.killTweensOf(child);\\n    }\\n\\n    child.parent === this && _removeLinkedListItem(this, child);\\n\\n    if (child === this._recent) {\\n      this._recent = this._last;\\n    }\\n\\n    return _uncache(this);\\n  };\\n\\n  _proto2.totalTime = function totalTime(_totalTime2, suppressEvents) {\\n    if (!arguments.length) {\\n      return this._tTime;\\n    }\\n\\n    this._forcing = 1;\\n\\n    if (!this._dp && this._ts) {\\n      //special case for the global timeline (or any other that has no parent or detached parent).\\n      this._start = _roundPrecise(_ticker.time - (this._ts > 0 ? _totalTime2 / this._ts : (this.totalDuration() - _totalTime2) / -this._ts));\\n    }\\n\\n    _Animation.prototype.totalTime.call(this, _totalTime2, suppressEvents);\\n\\n    this._forcing = 0;\\n    return this;\\n  };\\n\\n  _proto2.addLabel = function addLabel(label, position) {\\n    this.labels[label] = _parsePosition(this, position);\\n    return this;\\n  };\\n\\n  _proto2.removeLabel = function removeLabel(label) {\\n    delete this.labels[label];\\n    return this;\\n  };\\n\\n  _proto2.addPause = function addPause(position, callback, params) {\\n    var t = Tween.delayedCall(0, callback || _emptyFunc, params);\\n    t.data = \\\"isPause\\\";\\n    this._hasPause = 1;\\n    return _addToTimeline(this, t, _parsePosition(this, position));\\n  };\\n\\n  _proto2.removePause = function removePause(position) {\\n    var child = this._first;\\n    position = _parsePosition(this, position);\\n\\n    while (child) {\\n      if (child._start === position && child.data === \\\"isPause\\\") {\\n        _removeFromParent(child);\\n      }\\n\\n      child = child._next;\\n    }\\n  };\\n\\n  _proto2.killTweensOf = function killTweensOf(targets, props, onlyActive) {\\n    var tweens = this.getTweensOf(targets, onlyActive),\\n        i = tweens.length;\\n\\n    while (i--) {\\n      _overwritingTween !== tweens[i] && tweens[i].kill(targets, props);\\n    }\\n\\n    return this;\\n  };\\n\\n  _proto2.getTweensOf = function getTweensOf(targets, onlyActive) {\\n    var a = [],\\n        parsedTargets = toArray(targets),\\n        child = this._first,\\n        isGlobalTime = _isNumber(onlyActive),\\n        // a number is interpreted as a global time. If the animation spans\\n    children;\\n\\n    while (child) {\\n      if (child instanceof Tween) {\\n        if (_arrayContainsAny(child._targets, parsedTargets) && (isGlobalTime ? (!_overwritingTween || child._initted && child._ts) && child.globalTime(0) <= onlyActive && child.globalTime(child.totalDuration()) > onlyActive : !onlyActive || child.isActive())) {\\n          // note: if this is for overwriting, it should only be for tweens that aren't paused and are initted.\\n          a.push(child);\\n        }\\n      } else if ((children = child.getTweensOf(parsedTargets, onlyActive)).length) {\\n        a.push.apply(a, children);\\n      }\\n\\n      child = child._next;\\n    }\\n\\n    return a;\\n  } // potential future feature - targets() on timelines\\n  // targets() {\\n  // \\tlet result = [];\\n  // \\tthis.getChildren(true, true, false).forEach(t => result.push(...t.targets()));\\n  // \\treturn result.filter((v, i) => result.indexOf(v) === i);\\n  // }\\n  ;\\n\\n  _proto2.tweenTo = function tweenTo(position, vars) {\\n    vars = vars || {};\\n\\n    var tl = this,\\n        endTime = _parsePosition(tl, position),\\n        _vars = vars,\\n        startAt = _vars.startAt,\\n        _onStart = _vars.onStart,\\n        onStartParams = _vars.onStartParams,\\n        immediateRender = _vars.immediateRender,\\n        initted,\\n        tween = Tween.to(tl, _setDefaults({\\n      ease: vars.ease || \\\"none\\\",\\n      lazy: false,\\n      immediateRender: false,\\n      time: endTime,\\n      overwrite: \\\"auto\\\",\\n      duration: vars.duration || Math.abs((endTime - (startAt && \\\"time\\\" in startAt ? startAt.time : tl._time)) / tl.timeScale()) || _tinyNum,\\n      onStart: function onStart() {\\n        tl.pause();\\n\\n        if (!initted) {\\n          var duration = vars.duration || Math.abs((endTime - (startAt && \\\"time\\\" in startAt ? startAt.time : tl._time)) / tl.timeScale());\\n          tween._dur !== duration && _setDuration(tween, duration, 0, 1).render(tween._time, true, true);\\n          initted = 1;\\n        }\\n\\n        _onStart && _onStart.apply(tween, onStartParams || []); //in case the user had an onStart in the vars - we don't want to overwrite it.\\n      }\\n    }, vars));\\n\\n    return immediateRender ? tween.render(0) : tween;\\n  };\\n\\n  _proto2.tweenFromTo = function tweenFromTo(fromPosition, toPosition, vars) {\\n    return this.tweenTo(toPosition, _setDefaults({\\n      startAt: {\\n        time: _parsePosition(this, fromPosition)\\n      }\\n    }, vars));\\n  };\\n\\n  _proto2.recent = function recent() {\\n    return this._recent;\\n  };\\n\\n  _proto2.nextLabel = function nextLabel(afterTime) {\\n    if (afterTime === void 0) {\\n      afterTime = this._time;\\n    }\\n\\n    return _getLabelInDirection(this, _parsePosition(this, afterTime));\\n  };\\n\\n  _proto2.previousLabel = function previousLabel(beforeTime) {\\n    if (beforeTime === void 0) {\\n      beforeTime = this._time;\\n    }\\n\\n    return _getLabelInDirection(this, _parsePosition(this, beforeTime), 1);\\n  };\\n\\n  _proto2.currentLabel = function currentLabel(value) {\\n    return arguments.length ? this.seek(value, true) : this.previousLabel(this._time + _tinyNum);\\n  };\\n\\n  _proto2.shiftChildren = function shiftChildren(amount, adjustLabels, ignoreBeforeTime) {\\n    if (ignoreBeforeTime === void 0) {\\n      ignoreBeforeTime = 0;\\n    }\\n\\n    var child = this._first,\\n        labels = this.labels,\\n        p;\\n\\n    while (child) {\\n      if (child._start >= ignoreBeforeTime) {\\n        child._start += amount;\\n        child._end += amount;\\n      }\\n\\n      child = child._next;\\n    }\\n\\n    if (adjustLabels) {\\n      for (p in labels) {\\n        if (labels[p] >= ignoreBeforeTime) {\\n          labels[p] += amount;\\n        }\\n      }\\n    }\\n\\n    return _uncache(this);\\n  };\\n\\n  _proto2.invalidate = function invalidate(soft) {\\n    var child = this._first;\\n    this._lock = 0;\\n\\n    while (child) {\\n      child.invalidate(soft);\\n      child = child._next;\\n    }\\n\\n    return _Animation.prototype.invalidate.call(this, soft);\\n  };\\n\\n  _proto2.clear = function clear(includeLabels) {\\n    if (includeLabels === void 0) {\\n      includeLabels = true;\\n    }\\n\\n    var child = this._first,\\n        next;\\n\\n    while (child) {\\n      next = child._next;\\n      this.remove(child);\\n      child = next;\\n    }\\n\\n    this._dp && (this._time = this._tTime = this._pTime = 0);\\n    includeLabels && (this.labels = {});\\n    return _uncache(this);\\n  };\\n\\n  _proto2.totalDuration = function totalDuration(value) {\\n    var max = 0,\\n        self = this,\\n        child = self._last,\\n        prevStart = _bigNum,\\n        prev,\\n        start,\\n        parent;\\n\\n    if (arguments.length) {\\n      return self.timeScale((self._repeat < 0 ? self.duration() : self.totalDuration()) / (self.reversed() ? -value : value));\\n    }\\n\\n    if (self._dirty) {\\n      parent = self.parent;\\n\\n      while (child) {\\n        prev = child._prev; //record it here in case the tween changes position in the sequence...\\n\\n        child._dirty && child.totalDuration(); //could change the tween._startTime, so make sure the animation's cache is clean before analyzing it.\\n\\n        start = child._start;\\n\\n        if (start > prevStart && self._sort && child._ts && !self._lock) {\\n          //in case one of the tweens shifted out of order, it needs to be re-inserted into the correct position in the sequence\\n          self._lock = 1; //prevent endless recursive calls - there are methods that get triggered that check duration/totalDuration when we add().\\n\\n          _addToTimeline(self, child, start - child._delay, 1)._lock = 0;\\n        } else {\\n          prevStart = start;\\n        }\\n\\n        if (start < 0 && child._ts) {\\n          //children aren't allowed to have negative startTimes unless smoothChildTiming is true, so adjust here if one is found.\\n          max -= start;\\n\\n          if (!parent && !self._dp || parent && parent.smoothChildTiming) {\\n            self._start += start / self._ts;\\n            self._time -= start;\\n            self._tTime -= start;\\n          }\\n\\n          self.shiftChildren(-start, false, -1e999);\\n          prevStart = 0;\\n        }\\n\\n        child._end > max && child._ts && (max = child._end);\\n        child = prev;\\n      }\\n\\n      _setDuration(self, self === _globalTimeline && self._time > max ? self._time : max, 1, 1);\\n\\n      self._dirty = 0;\\n    }\\n\\n    return self._tDur;\\n  };\\n\\n  Timeline.updateRoot = function updateRoot(time) {\\n    if (_globalTimeline._ts) {\\n      _lazySafeRender(_globalTimeline, _parentToChildTotalTime(time, _globalTimeline));\\n\\n      _lastRenderedFrame = _ticker.frame;\\n    }\\n\\n    if (_ticker.frame >= _nextGCFrame) {\\n      _nextGCFrame += _config.autoSleep || 120;\\n      var child = _globalTimeline._first;\\n      if (!child || !child._ts) if (_config.autoSleep && _ticker._listeners.length < 2) {\\n        while (child && !child._ts) {\\n          child = child._next;\\n        }\\n\\n        child || _ticker.sleep();\\n      }\\n    }\\n  };\\n\\n  return Timeline;\\n}(Animation);\\n\\n_setDefaults(Timeline.prototype, {\\n  _lock: 0,\\n  _hasPause: 0,\\n  _forcing: 0\\n});\\n\\nvar _addComplexStringPropTween = function _addComplexStringPropTween(target, prop, start, end, setter, stringFilter, funcParam) {\\n  //note: we call _addComplexStringPropTween.call(tweenInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus \\\"this\\\" would refer to the plugin.\\n  var pt = new PropTween(this._pt, target, prop, 0, 1, _renderComplexString, null, setter),\\n      index = 0,\\n      matchIndex = 0,\\n      result,\\n      startNums,\\n      color,\\n      endNum,\\n      chunk,\\n      startNum,\\n      hasRandom,\\n      a;\\n  pt.b = start;\\n  pt.e = end;\\n  start += \\\"\\\"; //ensure values are strings\\n\\n  end += \\\"\\\";\\n\\n  if (hasRandom = ~end.indexOf(\\\"random(\\\")) {\\n    end = _replaceRandom(end);\\n  }\\n\\n  if (stringFilter) {\\n    a = [start, end];\\n    stringFilter(a, target, prop); //pass an array with the starting and ending values and let the filter do whatever it needs to the values.\\n\\n    start = a[0];\\n    end = a[1];\\n  }\\n\\n  startNums = start.match(_complexStringNumExp) || [];\\n\\n  while (result = _complexStringNumExp.exec(end)) {\\n    endNum = result[0];\\n    chunk = end.substring(index, result.index);\\n\\n    if (color) {\\n      color = (color + 1) % 5;\\n    } else if (chunk.substr(-5) === \\\"rgba(\\\") {\\n      color = 1;\\n    }\\n\\n    if (endNum !== startNums[matchIndex++]) {\\n      startNum = parseFloat(startNums[matchIndex - 1]) || 0; //these nested PropTweens are handled in a special way - we'll never actually call a render or setter method on them. We'll just loop through them in the parent complex string PropTween's render method.\\n\\n      pt._pt = {\\n        _next: pt._pt,\\n        p: chunk || matchIndex === 1 ? chunk : \\\",\\\",\\n        //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case.\\n        s: startNum,\\n        c: endNum.charAt(1) === \\\"=\\\" ? _parseRelative(startNum, endNum) - startNum : parseFloat(endNum) - startNum,\\n        m: color && color < 4 ? Math.round : 0\\n      };\\n      index = _complexStringNumExp.lastIndex;\\n    }\\n  }\\n\\n  pt.c = index < end.length ? end.substring(index, end.length) : \\\"\\\"; //we use the \\\"c\\\" of the PropTween to store the final part of the string (after the last number)\\n\\n  pt.fp = funcParam;\\n\\n  if (_relExp.test(end) || hasRandom) {\\n    pt.e = 0; //if the end string contains relative values or dynamic random(...) values, delete the end it so that on the final render we don't actually set it to the string with += or -= characters (forces it to use the calculated value).\\n  }\\n\\n  this._pt = pt; //start the linked list with this new PropTween. Remember, we call _addComplexStringPropTween.call(tweenInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus \\\"this\\\" would refer to the plugin.\\n\\n  return pt;\\n},\\n    _addPropTween = function _addPropTween(target, prop, start, end, index, targets, modifier, stringFilter, funcParam, optional) {\\n  _isFunction(end) && (end = end(index || 0, target, targets));\\n  var currentValue = target[prop],\\n      parsedStart = start !== \\\"get\\\" ? start : !_isFunction(currentValue) ? currentValue : funcParam ? target[prop.indexOf(\\\"set\\\") || !_isFunction(target[\\\"get\\\" + prop.substr(3)]) ? prop : \\\"get\\\" + prop.substr(3)](funcParam) : target[prop](),\\n      setter = !_isFunction(currentValue) ? _setterPlain : funcParam ? _setterFuncWithParam : _setterFunc,\\n      pt;\\n\\n  if (_isString(end)) {\\n    if (~end.indexOf(\\\"random(\\\")) {\\n      end = _replaceRandom(end);\\n    }\\n\\n    if (end.charAt(1) === \\\"=\\\") {\\n      pt = _parseRelative(parsedStart, end) + (getUnit(parsedStart) || 0);\\n\\n      if (pt || pt === 0) {\\n        // to avoid isNaN, like if someone passes in a value like \\\"!= whatever\\\"\\n        end = pt;\\n      }\\n    }\\n  }\\n\\n  if (!optional || parsedStart !== end || _forceAllPropTweens) {\\n    if (!isNaN(parsedStart * end) && end !== \\\"\\\") {\\n      // fun fact: any number multiplied by \\\"\\\" is evaluated as the number 0!\\n      pt = new PropTween(this._pt, target, prop, +parsedStart || 0, end - (parsedStart || 0), typeof currentValue === \\\"boolean\\\" ? _renderBoolean : _renderPlain, 0, setter);\\n      funcParam && (pt.fp = funcParam);\\n      modifier && pt.modifier(modifier, this, target);\\n      return this._pt = pt;\\n    }\\n\\n    !currentValue && !(prop in target) && _missingPlugin(prop, end);\\n    return _addComplexStringPropTween.call(this, target, prop, parsedStart, end, setter, stringFilter || _config.stringFilter, funcParam);\\n  }\\n},\\n    //creates a copy of the vars object and processes any function-based values (putting the resulting values directly into the copy) as well as strings with \\\"random()\\\" in them. It does NOT process relative values.\\n_processVars = function _processVars(vars, index, target, targets, tween) {\\n  _isFunction(vars) && (vars = _parseFuncOrString(vars, tween, index, target, targets));\\n\\n  if (!_isObject(vars) || vars.style && vars.nodeType || _isArray(vars) || _isTypedArray(vars)) {\\n    return _isString(vars) ? _parseFuncOrString(vars, tween, index, target, targets) : vars;\\n  }\\n\\n  var copy = {},\\n      p;\\n\\n  for (p in vars) {\\n    copy[p] = _parseFuncOrString(vars[p], tween, index, target, targets);\\n  }\\n\\n  return copy;\\n},\\n    _checkPlugin = function _checkPlugin(property, vars, tween, index, target, targets) {\\n  var plugin, pt, ptLookup, i;\\n\\n  if (_plugins[property] && (plugin = new _plugins[property]()).init(target, plugin.rawVars ? vars[property] : _processVars(vars[property], index, target, targets, tween), tween, index, targets) !== false) {\\n    tween._pt = pt = new PropTween(tween._pt, target, property, 0, 1, plugin.render, plugin, 0, plugin.priority);\\n\\n    if (tween !== _quickTween) {\\n      ptLookup = tween._ptLookup[tween._targets.indexOf(target)]; //note: we can't use tween._ptLookup[index] because for staggered tweens, the index from the fullTargets array won't match what it is in each individual tween that spawns from the stagger.\\n\\n      i = plugin._props.length;\\n\\n      while (i--) {\\n        ptLookup[plugin._props[i]] = pt;\\n      }\\n    }\\n  }\\n\\n  return plugin;\\n},\\n    _overwritingTween,\\n    //store a reference temporarily so we can avoid overwriting itself.\\n_forceAllPropTweens,\\n    _initTween = function _initTween(tween, time, tTime) {\\n  var vars = tween.vars,\\n      ease = vars.ease,\\n      startAt = vars.startAt,\\n      immediateRender = vars.immediateRender,\\n      lazy = vars.lazy,\\n      onUpdate = vars.onUpdate,\\n      runBackwards = vars.runBackwards,\\n      yoyoEase = vars.yoyoEase,\\n      keyframes = vars.keyframes,\\n      autoRevert = vars.autoRevert,\\n      dur = tween._dur,\\n      prevStartAt = tween._startAt,\\n      targets = tween._targets,\\n      parent = tween.parent,\\n      fullTargets = parent && parent.data === \\\"nested\\\" ? parent.vars.targets : targets,\\n      autoOverwrite = tween._overwrite === \\\"auto\\\" && !_suppressOverwrites,\\n      tl = tween.timeline,\\n      cleanVars,\\n      i,\\n      p,\\n      pt,\\n      target,\\n      hasPriority,\\n      gsData,\\n      harness,\\n      plugin,\\n      ptLookup,\\n      index,\\n      harnessVars,\\n      overwritten;\\n  tl && (!keyframes || !ease) && (ease = \\\"none\\\");\\n  tween._ease = _parseEase(ease, _defaults.ease);\\n  tween._yEase = yoyoEase ? _invertEase(_parseEase(yoyoEase === true ? ease : yoyoEase, _defaults.ease)) : 0;\\n\\n  if (yoyoEase && tween._yoyo && !tween._repeat) {\\n    //there must have been a parent timeline with yoyo:true that is currently in its yoyo phase, so flip the eases.\\n    yoyoEase = tween._yEase;\\n    tween._yEase = tween._ease;\\n    tween._ease = yoyoEase;\\n  }\\n\\n  tween._from = !tl && !!vars.runBackwards; //nested timelines should never run backwards - the backwards-ness is in the child tweens.\\n\\n  if (!tl || keyframes && !vars.stagger) {\\n    //if there's an internal timeline, skip all the parsing because we passed that task down the chain.\\n    harness = targets[0] ? _getCache(targets[0]).harness : 0;\\n    harnessVars = harness && vars[harness.prop]; //someone may need to specify CSS-specific values AND non-CSS values, like if the element has an \\\"x\\\" property plus it's a standard DOM element. We allow people to distinguish by wrapping plugin-specific stuff in a css:{} object for example.\\n\\n    cleanVars = _copyExcluding(vars, _reservedProps);\\n\\n    if (prevStartAt) {\\n      prevStartAt._zTime < 0 && prevStartAt.progress(1); // in case it's a lazy startAt that hasn't rendered yet.\\n\\n      time < 0 && runBackwards && immediateRender && !autoRevert ? prevStartAt.render(-1, true) : prevStartAt.revert(runBackwards && dur ? _revertConfigNoKill : _startAtRevertConfig); // if it's a \\\"startAt\\\" (not \\\"from()\\\" or runBackwards: true), we only need to do a shallow revert (keep transforms cached in CSSPlugin)\\n      // don't just _removeFromParent(prevStartAt.render(-1, true)) because that'll leave inline styles. We're creating a new _startAt for \\\"startAt\\\" tweens that re-capture things to ensure that if the pre-tween values changed since the tween was created, they're recorded.\\n\\n      prevStartAt._lazy = 0;\\n    }\\n\\n    if (startAt) {\\n      _removeFromParent(tween._startAt = Tween.set(targets, _setDefaults({\\n        data: \\\"isStart\\\",\\n        overwrite: false,\\n        parent: parent,\\n        immediateRender: true,\\n        lazy: !prevStartAt && _isNotFalse(lazy),\\n        startAt: null,\\n        delay: 0,\\n        onUpdate: onUpdate && function () {\\n          return _callback(tween, \\\"onUpdate\\\");\\n        },\\n        stagger: 0\\n      }, startAt))); //copy the properties/values into a new object to avoid collisions, like var to = {x:0}, from = {x:500}; timeline.fromTo(e, from, to).fromTo(e, to, from);\\n\\n\\n      tween._startAt._dp = 0; // don't allow it to get put back into root timeline! Like when revert() is called and totalTime() gets set.\\n\\n      tween._startAt._sat = tween; // used in globalTime(). _sat stands for _startAtTween\\n\\n      time < 0 && (_reverting || !immediateRender && !autoRevert) && tween._startAt.revert(_revertConfigNoKill); // rare edge case, like if a render is forced in the negative direction of a non-initted tween.\\n\\n      if (immediateRender) {\\n        if (dur && time <= 0 && tTime <= 0) {\\n          // check tTime here because in the case of a yoyo tween whose playhead gets pushed to the end like tween.progress(1), we should allow it through so that the onComplete gets fired properly.\\n          time && (tween._zTime = time);\\n          return; //we skip initialization here so that overwriting doesn't occur until the tween actually begins. Otherwise, if you create several immediateRender:true tweens of the same target/properties to drop into a Timeline, the last one created would overwrite the first ones because they didn't get placed into the timeline yet before the first render occurs and kicks in overwriting.\\n        }\\n      }\\n    } else if (runBackwards && dur) {\\n      //from() tweens must be handled uniquely: their beginning values must be rendered but we don't want overwriting to occur yet (when time is still 0). Wait until the tween actually begins before doing all the routines like overwriting. At that time, we should render at the END of the tween to ensure that things initialize correctly (remember, from() tweens go backwards)\\n      if (!prevStartAt) {\\n        time && (immediateRender = false); //in rare cases (like if a from() tween runs and then is invalidate()-ed), immediateRender could be true but the initial forced-render gets skipped, so there's no need to force the render in this context when the _time is greater than 0\\n\\n        p = _setDefaults({\\n          overwrite: false,\\n          data: \\\"isFromStart\\\",\\n          //we tag the tween with as \\\"isFromStart\\\" so that if [inside a plugin] we need to only do something at the very END of a tween, we have a way of identifying this tween as merely the one that's setting the beginning values for a \\\"from()\\\" tween. For example, clearProps in CSSPlugin should only get applied at the very END of a tween and without this tag, from(...{height:100, clearProps:\\\"height\\\", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in.\\n          lazy: immediateRender && !prevStartAt && _isNotFalse(lazy),\\n          immediateRender: immediateRender,\\n          //zero-duration tweens render immediately by default, but if we're not specifically instructed to render this tween immediately, we should skip this and merely _init() to record the starting values (rendering them immediately would push them to completion which is wasteful in that case - we'd have to render(-1) immediately after)\\n          stagger: 0,\\n          parent: parent //ensures that nested tweens that had a stagger are handled properly, like gsap.from(\\\".class\\\", {y: gsap.utils.wrap([-100,100]), stagger: 0.5})\\n\\n        }, cleanVars);\\n        harnessVars && (p[harness.prop] = harnessVars); // in case someone does something like .from(..., {css:{}})\\n\\n        _removeFromParent(tween._startAt = Tween.set(targets, p));\\n\\n        tween._startAt._dp = 0; // don't allow it to get put back into root timeline!\\n\\n        tween._startAt._sat = tween; // used in globalTime()\\n\\n        time < 0 && (_reverting ? tween._startAt.revert(_revertConfigNoKill) : tween._startAt.render(-1, true));\\n        tween._zTime = time;\\n\\n        if (!immediateRender) {\\n          _initTween(tween._startAt, _tinyNum, _tinyNum); //ensures that the initial values are recorded\\n\\n        } else if (!time) {\\n          return;\\n        }\\n      }\\n    }\\n\\n    tween._pt = tween._ptCache = 0;\\n    lazy = dur && _isNotFalse(lazy) || lazy && !dur;\\n\\n    for (i = 0; i < targets.length; i++) {\\n      target = targets[i];\\n      gsData = target._gsap || _harness(targets)[i]._gsap;\\n      tween._ptLookup[i] = ptLookup = {};\\n      _lazyLookup[gsData.id] && _lazyTweens.length && _lazyRender(); //if other tweens of the same target have recently initted but haven't rendered yet, we've got to force the render so that the starting values are correct (imagine populating a timeline with a bunch of sequential tweens and then jumping to the end)\\n\\n      index = fullTargets === targets ? i : fullTargets.indexOf(target);\\n\\n      if (harness && (plugin = new harness()).init(target, harnessVars || cleanVars, tween, index, fullTargets) !== false) {\\n        tween._pt = pt = new PropTween(tween._pt, target, plugin.name, 0, 1, plugin.render, plugin, 0, plugin.priority);\\n\\n        plugin._props.forEach(function (name) {\\n          ptLookup[name] = pt;\\n        });\\n\\n        plugin.priority && (hasPriority = 1);\\n      }\\n\\n      if (!harness || harnessVars) {\\n        for (p in cleanVars) {\\n          if (_plugins[p] && (plugin = _checkPlugin(p, cleanVars, tween, index, target, fullTargets))) {\\n            plugin.priority && (hasPriority = 1);\\n          } else {\\n            ptLookup[p] = pt = _addPropTween.call(tween, target, p, \\\"get\\\", cleanVars[p], index, fullTargets, 0, vars.stringFilter);\\n          }\\n        }\\n      }\\n\\n      tween._op && tween._op[i] && tween.kill(target, tween._op[i]);\\n\\n      if (autoOverwrite && tween._pt) {\\n        _overwritingTween = tween;\\n\\n        _globalTimeline.killTweensOf(target, ptLookup, tween.globalTime(time)); // make sure the overwriting doesn't overwrite THIS tween!!!\\n\\n\\n        overwritten = !tween.parent;\\n        _overwritingTween = 0;\\n      }\\n\\n      tween._pt && lazy && (_lazyLookup[gsData.id] = 1);\\n    }\\n\\n    hasPriority && _sortPropTweensByPriority(tween);\\n    tween._onInit && tween._onInit(tween); //plugins like RoundProps must wait until ALL of the PropTweens are instantiated. In the plugin's init() function, it sets the _onInit on the tween instance. May not be pretty/intuitive, but it's fast and keeps file size down.\\n  }\\n\\n  tween._onUpdate = onUpdate;\\n  tween._initted = (!tween._op || tween._pt) && !overwritten; // if overwrittenProps resulted in the entire tween being killed, do NOT flag it as initted or else it may render for one tick.\\n\\n  keyframes && time <= 0 && tl.render(_bigNum, true, true); // if there's a 0% keyframe, it'll render in the \\\"before\\\" state for any staggered/delayed animations thus when the following tween initializes, it'll use the \\\"before\\\" state instead of the \\\"after\\\" state as the initial values.\\n},\\n    _updatePropTweens = function _updatePropTweens(tween, property, value, start, startIsRelative, ratio, time, skipRecursion) {\\n  var ptCache = (tween._pt && tween._ptCache || (tween._ptCache = {}))[property],\\n      pt,\\n      rootPT,\\n      lookup,\\n      i;\\n\\n  if (!ptCache) {\\n    ptCache = tween._ptCache[property] = [];\\n    lookup = tween._ptLookup;\\n    i = tween._targets.length;\\n\\n    while (i--) {\\n      pt = lookup[i][property];\\n\\n      if (pt && pt.d && pt.d._pt) {\\n        // it's a plugin, so find the nested PropTween\\n        pt = pt.d._pt;\\n\\n        while (pt && pt.p !== property && pt.fp !== property) {\\n          // \\\"fp\\\" is functionParam for things like setting CSS variables which require .setProperty(\\\"--var-name\\\", value)\\n          pt = pt._next;\\n        }\\n      }\\n\\n      if (!pt) {\\n        // there is no PropTween associated with that property, so we must FORCE one to be created and ditch out of this\\n        // if the tween has other properties that already rendered at new positions, we'd normally have to rewind to put them back like tween.render(0, true) before forcing an _initTween(), but that can create another edge case like tweening a timeline's progress would trigger onUpdates to fire which could move other things around. It's better to just inform users that .resetTo() should ONLY be used for tweens that already have that property. For example, you can't gsap.to(...{ y: 0 }) and then tween.restTo(\\\"x\\\", 200) for example.\\n        _forceAllPropTweens = 1; // otherwise, when we _addPropTween() and it finds no change between the start and end values, it skips creating a PropTween (for efficiency...why tween when there's no difference?) but in this case we NEED that PropTween created so we can edit it.\\n\\n        tween.vars[property] = \\\"+=0\\\";\\n\\n        _initTween(tween, time);\\n\\n        _forceAllPropTweens = 0;\\n        return skipRecursion ? _warn(property + \\\" not eligible for reset\\\") : 1; // if someone tries to do a quickTo() on a special property like borderRadius which must get split into 4 different properties, that's not eligible for .resetTo().\\n      }\\n\\n      ptCache.push(pt);\\n    }\\n  }\\n\\n  i = ptCache.length;\\n\\n  while (i--) {\\n    rootPT = ptCache[i];\\n    pt = rootPT._pt || rootPT; // complex values may have nested PropTweens. We only accommodate the FIRST value.\\n\\n    pt.s = (start || start === 0) && !startIsRelative ? start : pt.s + (start || 0) + ratio * pt.c;\\n    pt.c = value - pt.s;\\n    rootPT.e && (rootPT.e = _round(value) + getUnit(rootPT.e)); // mainly for CSSPlugin (end value)\\n\\n    rootPT.b && (rootPT.b = pt.s + getUnit(rootPT.b)); // (beginning value)\\n  }\\n},\\n    _addAliasesToVars = function _addAliasesToVars(targets, vars) {\\n  var harness = targets[0] ? _getCache(targets[0]).harness : 0,\\n      propertyAliases = harness && harness.aliases,\\n      copy,\\n      p,\\n      i,\\n      aliases;\\n\\n  if (!propertyAliases) {\\n    return vars;\\n  }\\n\\n  copy = _merge({}, vars);\\n\\n  for (p in propertyAliases) {\\n    if (p in copy) {\\n      aliases = propertyAliases[p].split(\\\",\\\");\\n      i = aliases.length;\\n\\n      while (i--) {\\n        copy[aliases[i]] = copy[p];\\n      }\\n    }\\n  }\\n\\n  return copy;\\n},\\n    // parses multiple formats, like {\\\"0%\\\": {x: 100}, {\\\"50%\\\": {x: -20}} and { x: {\\\"0%\\\": 100, \\\"50%\\\": -20} }, and an \\\"ease\\\" can be set on any object. We populate an \\\"allProps\\\" object with an Array for each property, like {x: [{}, {}], y:[{}, {}]} with data for each property tween. The objects have a \\\"t\\\" (time), \\\"v\\\", (value), and \\\"e\\\" (ease) property. This allows us to piece together a timeline later.\\n_parseKeyframe = function _parseKeyframe(prop, obj, allProps, easeEach) {\\n  var ease = obj.ease || easeEach || \\\"power1.inOut\\\",\\n      p,\\n      a;\\n\\n  if (_isArray(obj)) {\\n    a = allProps[prop] || (allProps[prop] = []); // t = time (out of 100), v = value, e = ease\\n\\n    obj.forEach(function (value, i) {\\n      return a.push({\\n        t: i / (obj.length - 1) * 100,\\n        v: value,\\n        e: ease\\n      });\\n    });\\n  } else {\\n    for (p in obj) {\\n      a = allProps[p] || (allProps[p] = []);\\n      p === \\\"ease\\\" || a.push({\\n        t: parseFloat(prop),\\n        v: obj[p],\\n        e: ease\\n      });\\n    }\\n  }\\n},\\n    _parseFuncOrString = function _parseFuncOrString(value, tween, i, target, targets) {\\n  return _isFunction(value) ? value.call(tween, i, target, targets) : _isString(value) && ~value.indexOf(\\\"random(\\\") ? _replaceRandom(value) : value;\\n},\\n    _staggerTweenProps = _callbackNames + \\\"repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase,autoRevert\\\",\\n    _staggerPropsToSkip = {};\\n\\n_forEachName(_staggerTweenProps + \\\",id,stagger,delay,duration,paused,scrollTrigger\\\", function (name) {\\n  return _staggerPropsToSkip[name] = 1;\\n});\\n/*\\n * --------------------------------------------------------------------------------------\\n * TWEEN\\n * --------------------------------------------------------------------------------------\\n */\\n\\n\\nvar Tween = /*#__PURE__*/function (_Animation2) {\\n  _inheritsLoose(Tween, _Animation2);\\n\\n  function Tween(targets, vars, position, skipInherit) {\\n    var _this3;\\n\\n    if (typeof vars === \\\"number\\\") {\\n      position.duration = vars;\\n      vars = position;\\n      position = null;\\n    }\\n\\n    _this3 = _Animation2.call(this, skipInherit ? vars : _inheritDefaults(vars)) || this;\\n    var _this3$vars = _this3.vars,\\n        duration = _this3$vars.duration,\\n        delay = _this3$vars.delay,\\n        immediateRender = _this3$vars.immediateRender,\\n        stagger = _this3$vars.stagger,\\n        overwrite = _this3$vars.overwrite,\\n        keyframes = _this3$vars.keyframes,\\n        defaults = _this3$vars.defaults,\\n        scrollTrigger = _this3$vars.scrollTrigger,\\n        yoyoEase = _this3$vars.yoyoEase,\\n        parent = vars.parent || _globalTimeline,\\n        parsedTargets = (_isArray(targets) || _isTypedArray(targets) ? _isNumber(targets[0]) : \\\"length\\\" in vars) ? [targets] : toArray(targets),\\n        tl,\\n        i,\\n        copy,\\n        l,\\n        p,\\n        curTarget,\\n        staggerFunc,\\n        staggerVarsToMerge;\\n    _this3._targets = parsedTargets.length ? _harness(parsedTargets) : _warn(\\\"GSAP target \\\" + targets + \\\" not found. https://gsap.com\\\", !_config.nullTargetWarn) || [];\\n    _this3._ptLookup = []; //PropTween lookup. An array containing an object for each target, having keys for each tweening property\\n\\n    _this3._overwrite = overwrite;\\n\\n    if (keyframes || stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {\\n      vars = _this3.vars;\\n      tl = _this3.timeline = new Timeline({\\n        data: \\\"nested\\\",\\n        defaults: defaults || {},\\n        targets: parent && parent.data === \\\"nested\\\" ? parent.vars.targets : parsedTargets\\n      }); // we need to store the targets because for staggers and keyframes, we end up creating an individual tween for each but function-based values need to know the index and the whole Array of targets.\\n\\n      tl.kill();\\n      tl.parent = tl._dp = _assertThisInitialized(_this3);\\n      tl._start = 0;\\n\\n      if (stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {\\n        l = parsedTargets.length;\\n        staggerFunc = stagger && distribute(stagger);\\n\\n        if (_isObject(stagger)) {\\n          //users can pass in callbacks like onStart/onComplete in the stagger object. These should fire with each individual tween.\\n          for (p in stagger) {\\n            if (~_staggerTweenProps.indexOf(p)) {\\n              staggerVarsToMerge || (staggerVarsToMerge = {});\\n              staggerVarsToMerge[p] = stagger[p];\\n            }\\n          }\\n        }\\n\\n        for (i = 0; i < l; i++) {\\n          copy = _copyExcluding(vars, _staggerPropsToSkip);\\n          copy.stagger = 0;\\n          yoyoEase && (copy.yoyoEase = yoyoEase);\\n          staggerVarsToMerge && _merge(copy, staggerVarsToMerge);\\n          curTarget = parsedTargets[i]; //don't just copy duration or delay because if they're a string or function, we'd end up in an infinite loop because _isFuncOrString() would evaluate as true in the child tweens, entering this loop, etc. So we parse the value straight from vars and default to 0.\\n\\n          copy.duration = +_parseFuncOrString(duration, _assertThisInitialized(_this3), i, curTarget, parsedTargets);\\n          copy.delay = (+_parseFuncOrString(delay, _assertThisInitialized(_this3), i, curTarget, parsedTargets) || 0) - _this3._delay;\\n\\n          if (!stagger && l === 1 && copy.delay) {\\n            // if someone does delay:\\\"random(1, 5)\\\", repeat:-1, for example, the delay shouldn't be inside the repeat.\\n            _this3._delay = delay = copy.delay;\\n            _this3._start += delay;\\n            copy.delay = 0;\\n          }\\n\\n          tl.to(curTarget, copy, staggerFunc ? staggerFunc(i, curTarget, parsedTargets) : 0);\\n          tl._ease = _easeMap.none;\\n        }\\n\\n        tl.duration() ? duration = delay = 0 : _this3.timeline = 0; // if the timeline's duration is 0, we don't need a timeline internally!\\n      } else if (keyframes) {\\n        _inheritDefaults(_setDefaults(tl.vars.defaults, {\\n          ease: \\\"none\\\"\\n        }));\\n\\n        tl._ease = _parseEase(keyframes.ease || vars.ease || \\\"none\\\");\\n        var time = 0,\\n            a,\\n            kf,\\n            v;\\n\\n        if (_isArray(keyframes)) {\\n          keyframes.forEach(function (frame) {\\n            return tl.to(parsedTargets, frame, \\\">\\\");\\n          });\\n          tl.duration(); // to ensure tl._dur is cached because we tap into it for performance purposes in the render() method.\\n        } else {\\n          copy = {};\\n\\n          for (p in keyframes) {\\n            p === \\\"ease\\\" || p === \\\"easeEach\\\" || _parseKeyframe(p, keyframes[p], copy, keyframes.easeEach);\\n          }\\n\\n          for (p in copy) {\\n            a = copy[p].sort(function (a, b) {\\n              return a.t - b.t;\\n            });\\n            time = 0;\\n\\n            for (i = 0; i < a.length; i++) {\\n              kf = a[i];\\n              v = {\\n                ease: kf.e,\\n                duration: (kf.t - (i ? a[i - 1].t : 0)) / 100 * duration\\n              };\\n              v[p] = kf.v;\\n              tl.to(parsedTargets, v, time);\\n              time += v.duration;\\n            }\\n          }\\n\\n          tl.duration() < duration && tl.to({}, {\\n            duration: duration - tl.duration()\\n          }); // in case keyframes didn't go to 100%\\n        }\\n      }\\n\\n      duration || _this3.duration(duration = tl.duration());\\n    } else {\\n      _this3.timeline = 0; //speed optimization, faster lookups (no going up the prototype chain)\\n    }\\n\\n    if (overwrite === true && !_suppressOverwrites) {\\n      _overwritingTween = _assertThisInitialized(_this3);\\n\\n      _globalTimeline.killTweensOf(parsedTargets);\\n\\n      _overwritingTween = 0;\\n    }\\n\\n    _addToTimeline(parent, _assertThisInitialized(_this3), position);\\n\\n    vars.reversed && _this3.reverse();\\n    vars.paused && _this3.paused(true);\\n\\n    if (immediateRender || !duration && !keyframes && _this3._start === _roundPrecise(parent._time) && _isNotFalse(immediateRender) && _hasNoPausedAncestors(_assertThisInitialized(_this3)) && parent.data !== \\\"nested\\\") {\\n      _this3._tTime = -_tinyNum; //forces a render without having to set the render() \\\"force\\\" parameter to true because we want to allow lazying by default (using the \\\"force\\\" parameter always forces an immediate full render)\\n\\n      _this3.render(Math.max(0, -delay) || 0); //in case delay is negative\\n\\n    }\\n\\n    scrollTrigger && _scrollTrigger(_assertThisInitialized(_this3), scrollTrigger);\\n    return _this3;\\n  }\\n\\n  var _proto3 = Tween.prototype;\\n\\n  _proto3.render = function render(totalTime, suppressEvents, force) {\\n    var prevTime = this._time,\\n        tDur = this._tDur,\\n        dur = this._dur,\\n        isNegative = totalTime < 0,\\n        tTime = totalTime > tDur - _tinyNum && !isNegative ? tDur : totalTime < _tinyNum ? 0 : totalTime,\\n        time,\\n        pt,\\n        iteration,\\n        cycleDuration,\\n        prevIteration,\\n        isYoyo,\\n        ratio,\\n        timeline,\\n        yoyoEase;\\n\\n    if (!dur) {\\n      _renderZeroDurationTween(this, totalTime, suppressEvents, force);\\n    } else if (tTime !== this._tTime || !totalTime || force || !this._initted && this._tTime || this._startAt && this._zTime < 0 !== isNegative || this._lazy) {\\n      // this senses if we're crossing over the start time, in which case we must record _zTime and force the render, but we do it in this lengthy conditional way for performance reasons (usually we can skip the calculations): this._initted && (this._zTime < 0) !== (totalTime < 0)\\n      time = tTime;\\n      timeline = this.timeline;\\n\\n      if (this._repeat) {\\n        //adjust the time for repeats and yoyos\\n        cycleDuration = dur + this._rDelay;\\n\\n        if (this._repeat < -1 && isNegative) {\\n          return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);\\n        }\\n\\n        time = _roundPrecise(tTime % cycleDuration); //round to avoid floating point errors. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!)\\n\\n        if (tTime === tDur) {\\n          // the tDur === tTime is for edge cases where there's a lengthy decimal on the duration and it may reach the very end but the time is rendered as not-quite-there (remember, tDur is rounded to 4 decimals whereas dur isn't)\\n          iteration = this._repeat;\\n          time = dur;\\n        } else {\\n          prevIteration = _roundPrecise(tTime / cycleDuration); // full decimal version of iterations, not the previous iteration (we're reusing prevIteration variable for efficiency)\\n\\n          iteration = ~~prevIteration;\\n\\n          if (iteration && iteration === prevIteration) {\\n            time = dur;\\n            iteration--;\\n          } else if (time > dur) {\\n            time = dur;\\n          }\\n        }\\n\\n        isYoyo = this._yoyo && iteration & 1;\\n\\n        if (isYoyo) {\\n          yoyoEase = this._yEase;\\n          time = dur - time;\\n        }\\n\\n        prevIteration = _animationCycle(this._tTime, cycleDuration);\\n\\n        if (time === prevTime && !force && this._initted && iteration === prevIteration) {\\n          //could be during the repeatDelay part. No need to render and fire callbacks.\\n          this._tTime = tTime;\\n          return this;\\n        }\\n\\n        if (iteration !== prevIteration) {\\n          timeline && this._yEase && _propagateYoyoEase(timeline, isYoyo); //repeatRefresh functionality\\n\\n          if (this.vars.repeatRefresh && !isYoyo && !this._lock && time !== cycleDuration && this._initted) {\\n            // this._time will === cycleDuration when we render at EXACTLY the end of an iteration. Without this condition, it'd often do the repeatRefresh render TWICE (again on the very next tick).\\n            this._lock = force = 1; //force, otherwise if lazy is true, the _attemptInitTween() will return and we'll jump out and get caught bouncing on each tick.\\n\\n            this.render(_roundPrecise(cycleDuration * iteration), true).invalidate()._lock = 0;\\n          }\\n        }\\n      }\\n\\n      if (!this._initted) {\\n        if (_attemptInitTween(this, isNegative ? totalTime : time, force, suppressEvents, tTime)) {\\n          this._tTime = 0; // in constructor if immediateRender is true, we set _tTime to -_tinyNum to have the playhead cross the starting point but we can't leave _tTime as a negative number.\\n\\n          return this;\\n        }\\n\\n        if (prevTime !== this._time && !(force && this.vars.repeatRefresh && iteration !== prevIteration)) {\\n          // rare edge case - during initialization, an onUpdate in the _startAt (.fromTo()) might force this tween to render at a different spot in which case we should ditch this render() call so that it doesn't revert the values. But we also don't want to dump if we're doing a repeatRefresh render!\\n          return this;\\n        }\\n\\n        if (dur !== this._dur) {\\n          // while initting, a plugin like InertiaPlugin might alter the duration, so rerun from the start to ensure everything renders as it should.\\n          return this.render(totalTime, suppressEvents, force);\\n        }\\n      }\\n\\n      this._tTime = tTime;\\n      this._time = time;\\n\\n      if (!this._act && this._ts) {\\n        this._act = 1; //as long as it's not paused, force it to be active so that if the user renders independent of the parent timeline, it'll be forced to re-render on the next tick.\\n\\n        this._lazy = 0;\\n      }\\n\\n      this.ratio = ratio = (yoyoEase || this._ease)(time / dur);\\n\\n      if (this._from) {\\n        this.ratio = ratio = 1 - ratio;\\n      }\\n\\n      if (time && !prevTime && !suppressEvents && !iteration) {\\n        _callback(this, \\\"onStart\\\");\\n\\n        if (this._tTime !== tTime) {\\n          // in case the onStart triggered a render at a different spot, eject. Like if someone did animation.pause(0.5) or something inside the onStart.\\n          return this;\\n        }\\n      }\\n\\n      pt = this._pt;\\n\\n      while (pt) {\\n        pt.r(ratio, pt.d);\\n        pt = pt._next;\\n      }\\n\\n      timeline && timeline.render(totalTime < 0 ? totalTime : timeline._dur * timeline._ease(time / this._dur), suppressEvents, force) || this._startAt && (this._zTime = totalTime);\\n\\n      if (this._onUpdate && !suppressEvents) {\\n        isNegative && _rewindStartAt(this, totalTime, suppressEvents, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete.\\n\\n        _callback(this, \\\"onUpdate\\\");\\n      }\\n\\n      this._repeat && iteration !== prevIteration && this.vars.onRepeat && !suppressEvents && this.parent && _callback(this, \\\"onRepeat\\\");\\n\\n      if ((tTime === this._tDur || !tTime) && this._tTime === tTime) {\\n        isNegative && !this._onUpdate && _rewindStartAt(this, totalTime, true, true);\\n        (totalTime || !dur) && (tTime === this._tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1); // don't remove if we're rendering at exactly a time of 0, as there could be autoRevert values that should get set on the next tick (if the playhead goes backward beyond the startTime, negative totalTime). Don't remove if the timeline is reversed and the playhead isn't at 0, otherwise tl.progress(1).reverse() won't work. Only remove if the playhead is at the end and timeScale is positive, or if the playhead is at 0 and the timeScale is negative.\\n\\n        if (!suppressEvents && !(isNegative && !prevTime) && (tTime || prevTime || isYoyo)) {\\n          // if prevTime and tTime are zero, we shouldn't fire the onReverseComplete. This could happen if you gsap.to(... {paused:true}).play();\\n          _callback(this, tTime === tDur ? \\\"onComplete\\\" : \\\"onReverseComplete\\\", true);\\n\\n          this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();\\n        }\\n      }\\n    }\\n\\n    return this;\\n  };\\n\\n  _proto3.targets = function targets() {\\n    return this._targets;\\n  };\\n\\n  _proto3.invalidate = function invalidate(soft) {\\n    // \\\"soft\\\" gives us a way to clear out everything EXCEPT the recorded pre-\\\"from\\\" portion of from() tweens. Otherwise, for example, if you tween.progress(1).render(0, true true).invalidate(), the \\\"from\\\" values would persist and then on the next render, the from() tweens would initialize and the current value would match the \\\"from\\\" values, thus animate from the same value to the same value (no animation). We tap into this in ScrollTrigger's refresh() where we must push a tween to completion and then back again but honor its init state in case the tween is dependent on another tween further up on the page.\\n    (!soft || !this.vars.runBackwards) && (this._startAt = 0);\\n    this._pt = this._op = this._onUpdate = this._lazy = this.ratio = 0;\\n    this._ptLookup = [];\\n    this.timeline && this.timeline.invalidate(soft);\\n    return _Animation2.prototype.invalidate.call(this, soft);\\n  };\\n\\n  _proto3.resetTo = function resetTo(property, value, start, startIsRelative, skipRecursion) {\\n    _tickerActive || _ticker.wake();\\n    this._ts || this.play();\\n    var time = Math.min(this._dur, (this._dp._time - this._start) * this._ts),\\n        ratio;\\n    this._initted || _initTween(this, time);\\n    ratio = this._ease(time / this._dur); // don't just get tween.ratio because it may not have rendered yet.\\n    // possible future addition to allow an object with multiple values to update, like tween.resetTo({x: 100, y: 200}); At this point, it doesn't seem worth the added kb given the fact that most users will likely opt for the convenient gsap.quickTo() way of interacting with this method.\\n    // if (_isObject(property)) { // performance optimization\\n    // \\tfor (p in property) {\\n    // \\t\\tif (_updatePropTweens(this, p, property[p], value ? value[p] : null, start, ratio, time)) {\\n    // \\t\\t\\treturn this.resetTo(property, value, start, startIsRelative); // if a PropTween wasn't found for the property, it'll get forced with a re-initialization so we need to jump out and start over again.\\n    // \\t\\t}\\n    // \\t}\\n    // } else {\\n\\n    if (_updatePropTweens(this, property, value, start, startIsRelative, ratio, time, skipRecursion)) {\\n      return this.resetTo(property, value, start, startIsRelative, 1); // if a PropTween wasn't found for the property, it'll get forced with a re-initialization so we need to jump out and start over again.\\n    } //}\\n\\n\\n    _alignPlayhead(this, 0);\\n\\n    this.parent || _addLinkedListItem(this._dp, this, \\\"_first\\\", \\\"_last\\\", this._dp._sort ? \\\"_start\\\" : 0);\\n    return this.render(0);\\n  };\\n\\n  _proto3.kill = function kill(targets, vars) {\\n    if (vars === void 0) {\\n      vars = \\\"all\\\";\\n    }\\n\\n    if (!targets && (!vars || vars === \\\"all\\\")) {\\n      this._lazy = this._pt = 0;\\n      this.parent ? _interrupt(this) : this.scrollTrigger && this.scrollTrigger.kill(!!_reverting);\\n      return this;\\n    }\\n\\n    if (this.timeline) {\\n      var tDur = this.timeline.totalDuration();\\n      this.timeline.killTweensOf(targets, vars, _overwritingTween && _overwritingTween.vars.overwrite !== true)._first || _interrupt(this); // if nothing is left tweening, interrupt.\\n\\n      this.parent && tDur !== this.timeline.totalDuration() && _setDuration(this, this._dur * this.timeline._tDur / tDur, 0, 1); // if a nested tween is killed that changes the duration, it should affect this tween's duration. We must use the ratio, though, because sometimes the internal timeline is stretched like for keyframes where they don't all add up to whatever the parent tween's duration was set to.\\n\\n      return this;\\n    }\\n\\n    var parsedTargets = this._targets,\\n        killingTargets = targets ? toArray(targets) : parsedTargets,\\n        propTweenLookup = this._ptLookup,\\n        firstPT = this._pt,\\n        overwrittenProps,\\n        curLookup,\\n        curOverwriteProps,\\n        props,\\n        p,\\n        pt,\\n        i;\\n\\n    if ((!vars || vars === \\\"all\\\") && _arraysMatch(parsedTargets, killingTargets)) {\\n      vars === \\\"all\\\" && (this._pt = 0);\\n      return _interrupt(this);\\n    }\\n\\n    overwrittenProps = this._op = this._op || [];\\n\\n    if (vars !== \\\"all\\\") {\\n      //so people can pass in a comma-delimited list of property names\\n      if (_isString(vars)) {\\n        p = {};\\n\\n        _forEachName(vars, function (name) {\\n          return p[name] = 1;\\n        });\\n\\n        vars = p;\\n      }\\n\\n      vars = _addAliasesToVars(parsedTargets, vars);\\n    }\\n\\n    i = parsedTargets.length;\\n\\n    while (i--) {\\n      if (~killingTargets.indexOf(parsedTargets[i])) {\\n        curLookup = propTweenLookup[i];\\n\\n        if (vars === \\\"all\\\") {\\n          overwrittenProps[i] = vars;\\n          props = curLookup;\\n          curOverwriteProps = {};\\n        } else {\\n          curOverwriteProps = overwrittenProps[i] = overwrittenProps[i] || {};\\n          props = vars;\\n        }\\n\\n        for (p in props) {\\n          pt = curLookup && curLookup[p];\\n\\n          if (pt) {\\n            if (!(\\\"kill\\\" in pt.d) || pt.d.kill(p) === true) {\\n              _removeLinkedListItem(this, pt, \\\"_pt\\\");\\n            }\\n\\n            delete curLookup[p];\\n          }\\n\\n          if (curOverwriteProps !== \\\"all\\\") {\\n            curOverwriteProps[p] = 1;\\n          }\\n        }\\n      }\\n    }\\n\\n    this._initted && !this._pt && firstPT && _interrupt(this); //if all tweening properties are killed, kill the tween. Without this line, if there's a tween with multiple targets and then you killTweensOf() each target individually, the tween would technically still remain active and fire its onComplete even though there aren't any more properties tweening.\\n\\n    return this;\\n  };\\n\\n  Tween.to = function to(targets, vars) {\\n    return new Tween(targets, vars, arguments[2]);\\n  };\\n\\n  Tween.from = function from(targets, vars) {\\n    return _createTweenType(1, arguments);\\n  };\\n\\n  Tween.delayedCall = function delayedCall(delay, callback, params, scope) {\\n    return new Tween(callback, 0, {\\n      immediateRender: false,\\n      lazy: false,\\n      overwrite: false,\\n      delay: delay,\\n      onComplete: callback,\\n      onReverseComplete: callback,\\n      onCompleteParams: params,\\n      onReverseCompleteParams: params,\\n      callbackScope: scope\\n    }); // we must use onReverseComplete too for things like timeline.add(() => {...}) which should be triggered in BOTH directions (forward and reverse)\\n  };\\n\\n  Tween.fromTo = function fromTo(targets, fromVars, toVars) {\\n    return _createTweenType(2, arguments);\\n  };\\n\\n  Tween.set = function set(targets, vars) {\\n    vars.duration = 0;\\n    vars.repeatDelay || (vars.repeat = 0);\\n    return new Tween(targets, vars);\\n  };\\n\\n  Tween.killTweensOf = function killTweensOf(targets, props, onlyActive) {\\n    return _globalTimeline.killTweensOf(targets, props, onlyActive);\\n  };\\n\\n  return Tween;\\n}(Animation);\\n\\n_setDefaults(Tween.prototype, {\\n  _targets: [],\\n  _lazy: 0,\\n  _startAt: 0,\\n  _op: 0,\\n  _onInit: 0\\n}); //add the pertinent timeline methods to Tween instances so that users can chain conveniently and create a timeline automatically. (removed due to concerns that it'd ultimately add to more confusion especially for beginners)\\n// _forEachName(\\\"to,from,fromTo,set,call,add,addLabel,addPause\\\", name => {\\n// \\tTween.prototype[name] = function() {\\n// \\t\\tlet tl = new Timeline();\\n// \\t\\treturn _addToTimeline(tl, this)[name].apply(tl, toArray(arguments));\\n// \\t}\\n// });\\n//for backward compatibility. Leverage the timeline calls.\\n\\n\\n_forEachName(\\\"staggerTo,staggerFrom,staggerFromTo\\\", function (name) {\\n  Tween[name] = function () {\\n    var tl = new Timeline(),\\n        params = _slice.call(arguments, 0);\\n\\n    params.splice(name === \\\"staggerFromTo\\\" ? 5 : 4, 0, 0);\\n    return tl[name].apply(tl, params);\\n  };\\n});\\n/*\\n * --------------------------------------------------------------------------------------\\n * PROPTWEEN\\n * --------------------------------------------------------------------------------------\\n */\\n\\n\\nvar _setterPlain = function _setterPlain(target, property, value) {\\n  return target[property] = value;\\n},\\n    _setterFunc = function _setterFunc(target, property, value) {\\n  return target[property](value);\\n},\\n    _setterFuncWithParam = function _setterFuncWithParam(target, property, value, data) {\\n  return target[property](data.fp, value);\\n},\\n    _setterAttribute = function _setterAttribute(target, property, value) {\\n  return target.setAttribute(property, value);\\n},\\n    _getSetter = function _getSetter(target, property) {\\n  return _isFunction(target[property]) ? _setterFunc : _isUndefined(target[property]) && target.setAttribute ? _setterAttribute : _setterPlain;\\n},\\n    _renderPlain = function _renderPlain(ratio, data) {\\n  return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 1000000) / 1000000, data);\\n},\\n    _renderBoolean = function _renderBoolean(ratio, data) {\\n  return data.set(data.t, data.p, !!(data.s + data.c * ratio), data);\\n},\\n    _renderComplexString = function _renderComplexString(ratio, data) {\\n  var pt = data._pt,\\n      s = \\\"\\\";\\n\\n  if (!ratio && data.b) {\\n    //b = beginning string\\n    s = data.b;\\n  } else if (ratio === 1 && data.e) {\\n    //e = ending string\\n    s = data.e;\\n  } else {\\n    while (pt) {\\n      s = pt.p + (pt.m ? pt.m(pt.s + pt.c * ratio) : Math.round((pt.s + pt.c * ratio) * 10000) / 10000) + s; //we use the \\\"p\\\" property for the text inbetween (like a suffix). And in the context of a complex string, the modifier (m) is typically just Math.round(), like for RGB colors.\\n\\n      pt = pt._next;\\n    }\\n\\n    s += data.c; //we use the \\\"c\\\" of the PropTween to store the final chunk of non-numeric text.\\n  }\\n\\n  data.set(data.t, data.p, s, data);\\n},\\n    _renderPropTweens = function _renderPropTweens(ratio, data) {\\n  var pt = data._pt;\\n\\n  while (pt) {\\n    pt.r(ratio, pt.d);\\n    pt = pt._next;\\n  }\\n},\\n    _addPluginModifier = function _addPluginModifier(modifier, tween, target, property) {\\n  var pt = this._pt,\\n      next;\\n\\n  while (pt) {\\n    next = pt._next;\\n    pt.p === property && pt.modifier(modifier, tween, target);\\n    pt = next;\\n  }\\n},\\n    _killPropTweensOf = function _killPropTweensOf(property) {\\n  var pt = this._pt,\\n      hasNonDependentRemaining,\\n      next;\\n\\n  while (pt) {\\n    next = pt._next;\\n\\n    if (pt.p === property && !pt.op || pt.op === property) {\\n      _removeLinkedListItem(this, pt, \\\"_pt\\\");\\n    } else if (!pt.dep) {\\n      hasNonDependentRemaining = 1;\\n    }\\n\\n    pt = next;\\n  }\\n\\n  return !hasNonDependentRemaining;\\n},\\n    _setterWithModifier = function _setterWithModifier(target, property, value, data) {\\n  data.mSet(target, property, data.m.call(data.tween, value, data.mt), data);\\n},\\n    _sortPropTweensByPriority = function _sortPropTweensByPriority(parent) {\\n  var pt = parent._pt,\\n      next,\\n      pt2,\\n      first,\\n      last; //sorts the PropTween linked list in order of priority because some plugins need to do their work after ALL of the PropTweens were created (like RoundPropsPlugin and ModifiersPlugin)\\n\\n  while (pt) {\\n    next = pt._next;\\n    pt2 = first;\\n\\n    while (pt2 && pt2.pr > pt.pr) {\\n      pt2 = pt2._next;\\n    }\\n\\n    if (pt._prev = pt2 ? pt2._prev : last) {\\n      pt._prev._next = pt;\\n    } else {\\n      first = pt;\\n    }\\n\\n    if (pt._next = pt2) {\\n      pt2._prev = pt;\\n    } else {\\n      last = pt;\\n    }\\n\\n    pt = next;\\n  }\\n\\n  parent._pt = first;\\n}; //PropTween key: t = target, p = prop, r = renderer, d = data, s = start, c = change, op = overwriteProperty (ONLY populated when it's different than p), pr = priority, _next/_prev for the linked list siblings, set = setter, m = modifier, mSet = modifierSetter (the original setter, before a modifier was added)\\n\\n\\nvar PropTween = /*#__PURE__*/function () {\\n  function PropTween(next, target, prop, start, change, renderer, data, setter, priority) {\\n    this.t = target;\\n    this.s = start;\\n    this.c = change;\\n    this.p = prop;\\n    this.r = renderer || _renderPlain;\\n    this.d = data || this;\\n    this.set = setter || _setterPlain;\\n    this.pr = priority || 0;\\n    this._next = next;\\n\\n    if (next) {\\n      next._prev = this;\\n    }\\n  }\\n\\n  var _proto4 = PropTween.prototype;\\n\\n  _proto4.modifier = function modifier(func, tween, target) {\\n    this.mSet = this.mSet || this.set; //in case it was already set (a PropTween can only have one modifier)\\n\\n    this.set = _setterWithModifier;\\n    this.m = func;\\n    this.mt = target; //modifier target\\n\\n    this.tween = tween;\\n  };\\n\\n  return PropTween;\\n}(); //Initialization tasks\\n\\n_forEachName(_callbackNames + \\\"parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger\\\", function (name) {\\n  return _reservedProps[name] = 1;\\n});\\n\\n_globals.TweenMax = _globals.TweenLite = Tween;\\n_globals.TimelineLite = _globals.TimelineMax = Timeline;\\n_globalTimeline = new Timeline({\\n  sortChildren: false,\\n  defaults: _defaults,\\n  autoRemoveChildren: true,\\n  id: \\\"root\\\",\\n  smoothChildTiming: true\\n});\\n_config.stringFilter = _colorStringFilter;\\n\\nvar _media = [],\\n    _listeners = {},\\n    _emptyArray = [],\\n    _lastMediaTime = 0,\\n    _contextID = 0,\\n    _dispatch = function _dispatch(type) {\\n  return (_listeners[type] || _emptyArray).map(function (f) {\\n    return f();\\n  });\\n},\\n    _onMediaChange = function _onMediaChange() {\\n  var time = Date.now(),\\n      matches = [];\\n\\n  if (time - _lastMediaTime > 2) {\\n    _dispatch(\\\"matchMediaInit\\\");\\n\\n    _media.forEach(function (c) {\\n      var queries = c.queries,\\n          conditions = c.conditions,\\n          match,\\n          p,\\n          anyMatch,\\n          toggled;\\n\\n      for (p in queries) {\\n        match = _win.matchMedia(queries[p]).matches; // Firefox doesn't update the \\\"matches\\\" property of the MediaQueryList object correctly - it only does so as it calls its change handler - so we must re-create a media query here to ensure it's accurate.\\n\\n        match && (anyMatch = 1);\\n\\n        if (match !== conditions[p]) {\\n          conditions[p] = match;\\n          toggled = 1;\\n        }\\n      }\\n\\n      if (toggled) {\\n        c.revert();\\n        anyMatch && matches.push(c);\\n      }\\n    });\\n\\n    _dispatch(\\\"matchMediaRevert\\\");\\n\\n    matches.forEach(function (c) {\\n      return c.onMatch(c, function (func) {\\n        return c.add(null, func);\\n      });\\n    });\\n    _lastMediaTime = time;\\n\\n    _dispatch(\\\"matchMedia\\\");\\n  }\\n};\\n\\nvar Context = /*#__PURE__*/function () {\\n  function Context(func, scope) {\\n    this.selector = scope && selector(scope);\\n    this.data = [];\\n    this._r = []; // returned/cleanup functions\\n\\n    this.isReverted = false;\\n    this.id = _contextID++; // to work around issues that frameworks like Vue cause by making things into Proxies which make it impossible to do something like _media.indexOf(this) because \\\"this\\\" would no longer refer to the Context instance itself - it'd refer to a Proxy! We needed a way to identify the context uniquely\\n\\n    func && this.add(func);\\n  }\\n\\n  var _proto5 = Context.prototype;\\n\\n  _proto5.add = function add(name, func, scope) {\\n    // possible future addition if we need the ability to add() an animation to a context and for whatever reason cannot create that animation inside of a context.add(() => {...}) function.\\n    // if (name && _isFunction(name.revert)) {\\n    // \\tthis.data.push(name);\\n    // \\treturn (name._ctx = this);\\n    // }\\n    if (_isFunction(name)) {\\n      scope = func;\\n      func = name;\\n      name = _isFunction;\\n    }\\n\\n    var self = this,\\n        f = function f() {\\n      var prev = _context,\\n          prevSelector = self.selector,\\n          result;\\n      prev && prev !== self && prev.data.push(self);\\n      scope && (self.selector = selector(scope));\\n      _context = self;\\n      result = func.apply(self, arguments);\\n      _isFunction(result) && self._r.push(result);\\n      _context = prev;\\n      self.selector = prevSelector;\\n      self.isReverted = false;\\n      return result;\\n    };\\n\\n    self.last = f;\\n    return name === _isFunction ? f(self, function (func) {\\n      return self.add(null, func);\\n    }) : name ? self[name] = f : f;\\n  };\\n\\n  _proto5.ignore = function ignore(func) {\\n    var prev = _context;\\n    _context = null;\\n    func(this);\\n    _context = prev;\\n  };\\n\\n  _proto5.getTweens = function getTweens() {\\n    var a = [];\\n    this.data.forEach(function (e) {\\n      return e instanceof Context ? a.push.apply(a, e.getTweens()) : e instanceof Tween && !(e.parent && e.parent.data === \\\"nested\\\") && a.push(e);\\n    });\\n    return a;\\n  };\\n\\n  _proto5.clear = function clear() {\\n    this._r.length = this.data.length = 0;\\n  };\\n\\n  _proto5.kill = function kill(revert, matchMedia) {\\n    var _this4 = this;\\n\\n    if (revert) {\\n      (function () {\\n        var tweens = _this4.getTweens(),\\n            i = _this4.data.length,\\n            t;\\n\\n        while (i--) {\\n          // Flip plugin tweens are very different in that they should actually be pushed to their end. The plugin replaces the timeline's .revert() method to do exactly that. But we also need to remove any of those nested tweens inside the flip timeline so that they don't get individually reverted.\\n          t = _this4.data[i];\\n\\n          if (t.data === \\\"isFlip\\\") {\\n            t.revert();\\n            t.getChildren(true, true, false).forEach(function (tween) {\\n              return tweens.splice(tweens.indexOf(tween), 1);\\n            });\\n          }\\n        } // save as an object so that we can cache the globalTime for each tween to optimize performance during the sort\\n\\n\\n        tweens.map(function (t) {\\n          return {\\n            g: t._dur || t._delay || t._sat && !t._sat.vars.immediateRender ? t.globalTime(0) : -Infinity,\\n            t: t\\n          };\\n        }).sort(function (a, b) {\\n          return b.g - a.g || -Infinity;\\n        }).forEach(function (o) {\\n          return o.t.revert(revert);\\n        }); // note: all of the _startAt tweens should be reverted in reverse order that they were created, and they'll all have the same globalTime (-1) so the \\\" || -1\\\" in the sort keeps the order properly.\\n\\n        i = _this4.data.length;\\n\\n        while (i--) {\\n          // make sure we loop backwards so that, for example, SplitTexts that were created later on the same element get reverted first\\n          t = _this4.data[i];\\n\\n          if (t instanceof Timeline) {\\n            if (t.data !== \\\"nested\\\") {\\n              t.scrollTrigger && t.scrollTrigger.revert();\\n              t.kill(); // don't revert() the timeline because that's duplicating efforts since we already reverted all the tweens\\n            }\\n          } else {\\n            !(t instanceof Tween) && t.revert && t.revert(revert);\\n          }\\n        }\\n\\n        _this4._r.forEach(function (f) {\\n          return f(revert, _this4);\\n        });\\n\\n        _this4.isReverted = true;\\n      })();\\n    } else {\\n      this.data.forEach(function (e) {\\n        return e.kill && e.kill();\\n      });\\n    }\\n\\n    this.clear();\\n\\n    if (matchMedia) {\\n      var i = _media.length;\\n\\n      while (i--) {\\n        // previously, we checked _media.indexOf(this), but some frameworks like Vue enforce Proxy objects that make it impossible to get the proper result that way, so we must use a unique ID number instead.\\n        _media[i].id === this.id && _media.splice(i, 1);\\n      }\\n    }\\n  } // killWithCleanup() {\\n  // \\tthis.kill();\\n  // \\tthis._r.forEach(f => f(false, this));\\n  // }\\n  ;\\n\\n  _proto5.revert = function revert(config) {\\n    this.kill(config || {});\\n  };\\n\\n  return Context;\\n}();\\n\\nvar MatchMedia = /*#__PURE__*/function () {\\n  function MatchMedia(scope) {\\n    this.contexts = [];\\n    this.scope = scope;\\n    _context && _context.data.push(this);\\n  }\\n\\n  var _proto6 = MatchMedia.prototype;\\n\\n  _proto6.add = function add(conditions, func, scope) {\\n    _isObject(conditions) || (conditions = {\\n      matches: conditions\\n    });\\n    var context = new Context(0, scope || this.scope),\\n        cond = context.conditions = {},\\n        mq,\\n        p,\\n        active;\\n    _context && !context.selector && (context.selector = _context.selector); // in case a context is created inside a context. Like a gsap.matchMedia() that's inside a scoped gsap.context()\\n\\n    this.contexts.push(context);\\n    func = context.add(\\\"onMatch\\\", func);\\n    context.queries = conditions;\\n\\n    for (p in conditions) {\\n      if (p === \\\"all\\\") {\\n        active = 1;\\n      } else {\\n        mq = _win.matchMedia(conditions[p]);\\n\\n        if (mq) {\\n          _media.indexOf(context) < 0 && _media.push(context);\\n          (cond[p] = mq.matches) && (active = 1);\\n          mq.addListener ? mq.addListener(_onMediaChange) : mq.addEventListener(\\\"change\\\", _onMediaChange);\\n        }\\n      }\\n    }\\n\\n    active && func(context, function (f) {\\n      return context.add(null, f);\\n    });\\n    return this;\\n  } // refresh() {\\n  // \\tlet time = _lastMediaTime,\\n  // \\t\\tmedia = _media;\\n  // \\t_lastMediaTime = -1;\\n  // \\t_media = this.contexts;\\n  // \\t_onMediaChange();\\n  // \\t_lastMediaTime = time;\\n  // \\t_media = media;\\n  // }\\n  ;\\n\\n  _proto6.revert = function revert(config) {\\n    this.kill(config || {});\\n  };\\n\\n  _proto6.kill = function kill(revert) {\\n    this.contexts.forEach(function (c) {\\n      return c.kill(revert, true);\\n    });\\n  };\\n\\n  return MatchMedia;\\n}();\\n/*\\n * --------------------------------------------------------------------------------------\\n * GSAP\\n * --------------------------------------------------------------------------------------\\n */\\n\\n\\nvar _gsap = {\\n  registerPlugin: function registerPlugin() {\\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\\n      args[_key2] = arguments[_key2];\\n    }\\n\\n    args.forEach(function (config) {\\n      return _createPlugin(config);\\n    });\\n  },\\n  timeline: function timeline(vars) {\\n    return new Timeline(vars);\\n  },\\n  getTweensOf: function getTweensOf(targets, onlyActive) {\\n    return _globalTimeline.getTweensOf(targets, onlyActive);\\n  },\\n  getProperty: function getProperty(target, property, unit, uncache) {\\n    _isString(target) && (target = toArray(target)[0]); //in case selector text or an array is passed in\\n\\n    var getter = _getCache(target || {}).get,\\n        format = unit ? _passThrough : _numericIfPossible;\\n\\n    unit === \\\"native\\\" && (unit = \\\"\\\");\\n    return !target ? target : !property ? function (property, unit, uncache) {\\n      return format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));\\n    } : format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));\\n  },\\n  quickSetter: function quickSetter(target, property, unit) {\\n    target = toArray(target);\\n\\n    if (target.length > 1) {\\n      var setters = target.map(function (t) {\\n        return gsap.quickSetter(t, property, unit);\\n      }),\\n          l = setters.length;\\n      return function (value) {\\n        var i = l;\\n\\n        while (i--) {\\n          setters[i](value);\\n        }\\n      };\\n    }\\n\\n    target = target[0] || {};\\n\\n    var Plugin = _plugins[property],\\n        cache = _getCache(target),\\n        p = cache.harness && (cache.harness.aliases || {})[property] || property,\\n        // in case it's an alias, like \\\"rotate\\\" for \\\"rotation\\\".\\n    setter = Plugin ? function (value) {\\n      var p = new Plugin();\\n      _quickTween._pt = 0;\\n      p.init(target, unit ? value + unit : value, _quickTween, 0, [target]);\\n      p.render(1, p);\\n      _quickTween._pt && _renderPropTweens(1, _quickTween);\\n    } : cache.set(target, p);\\n\\n    return Plugin ? setter : function (value) {\\n      return setter(target, p, unit ? value + unit : value, cache, 1);\\n    };\\n  },\\n  quickTo: function quickTo(target, property, vars) {\\n    var _setDefaults2;\\n\\n    var tween = gsap.to(target, _setDefaults((_setDefaults2 = {}, _setDefaults2[property] = \\\"+=0.1\\\", _setDefaults2.paused = true, _setDefaults2.stagger = 0, _setDefaults2), vars || {})),\\n        func = function func(value, start, startIsRelative) {\\n      return tween.resetTo(property, value, start, startIsRelative);\\n    };\\n\\n    func.tween = tween;\\n    return func;\\n  },\\n  isTweening: function isTweening(targets) {\\n    return _globalTimeline.getTweensOf(targets, true).length > 0;\\n  },\\n  defaults: function defaults(value) {\\n    value && value.ease && (value.ease = _parseEase(value.ease, _defaults.ease));\\n    return _mergeDeep(_defaults, value || {});\\n  },\\n  config: function config(value) {\\n    return _mergeDeep(_config, value || {});\\n  },\\n  registerEffect: function registerEffect(_ref3) {\\n    var name = _ref3.name,\\n        effect = _ref3.effect,\\n        plugins = _ref3.plugins,\\n        defaults = _ref3.defaults,\\n        extendTimeline = _ref3.extendTimeline;\\n    (plugins || \\\"\\\").split(\\\",\\\").forEach(function (pluginName) {\\n      return pluginName && !_plugins[pluginName] && !_globals[pluginName] && _warn(name + \\\" effect requires \\\" + pluginName + \\\" plugin.\\\");\\n    });\\n\\n    _effects[name] = function (targets, vars, tl) {\\n      return effect(toArray(targets), _setDefaults(vars || {}, defaults), tl);\\n    };\\n\\n    if (extendTimeline) {\\n      Timeline.prototype[name] = function (targets, vars, position) {\\n        return this.add(_effects[name](targets, _isObject(vars) ? vars : (position = vars) && {}, this), position);\\n      };\\n    }\\n  },\\n  registerEase: function registerEase(name, ease) {\\n    _easeMap[name] = _parseEase(ease);\\n  },\\n  parseEase: function parseEase(ease, defaultEase) {\\n    return arguments.length ? _parseEase(ease, defaultEase) : _easeMap;\\n  },\\n  getById: function getById(id) {\\n    return _globalTimeline.getById(id);\\n  },\\n  exportRoot: function exportRoot(vars, includeDelayedCalls) {\\n    if (vars === void 0) {\\n      vars = {};\\n    }\\n\\n    var tl = new Timeline(vars),\\n        child,\\n        next;\\n    tl.smoothChildTiming = _isNotFalse(vars.smoothChildTiming);\\n\\n    _globalTimeline.remove(tl);\\n\\n    tl._dp = 0; //otherwise it'll get re-activated when adding children and be re-introduced into _globalTimeline's linked list (then added to itself).\\n\\n    tl._time = tl._tTime = _globalTimeline._time;\\n    child = _globalTimeline._first;\\n\\n    while (child) {\\n      next = child._next;\\n\\n      if (includeDelayedCalls || !(!child._dur && child instanceof Tween && child.vars.onComplete === child._targets[0])) {\\n        _addToTimeline(tl, child, child._start - child._delay);\\n      }\\n\\n      child = next;\\n    }\\n\\n    _addToTimeline(_globalTimeline, tl, 0);\\n\\n    return tl;\\n  },\\n  context: function context(func, scope) {\\n    return func ? new Context(func, scope) : _context;\\n  },\\n  matchMedia: function matchMedia(scope) {\\n    return new MatchMedia(scope);\\n  },\\n  matchMediaRefresh: function matchMediaRefresh() {\\n    return _media.forEach(function (c) {\\n      var cond = c.conditions,\\n          found,\\n          p;\\n\\n      for (p in cond) {\\n        if (cond[p]) {\\n          cond[p] = false;\\n          found = 1;\\n        }\\n      }\\n\\n      found && c.revert();\\n    }) || _onMediaChange();\\n  },\\n  addEventListener: function addEventListener(type, callback) {\\n    var a = _listeners[type] || (_listeners[type] = []);\\n    ~a.indexOf(callback) || a.push(callback);\\n  },\\n  removeEventListener: function removeEventListener(type, callback) {\\n    var a = _listeners[type],\\n        i = a && a.indexOf(callback);\\n    i >= 0 && a.splice(i, 1);\\n  },\\n  utils: {\\n    wrap: wrap,\\n    wrapYoyo: wrapYoyo,\\n    distribute: distribute,\\n    random: random,\\n    snap: snap,\\n    normalize: normalize,\\n    getUnit: getUnit,\\n    clamp: clamp,\\n    splitColor: splitColor,\\n    toArray: toArray,\\n    selector: selector,\\n    mapRange: mapRange,\\n    pipe: pipe,\\n    unitize: unitize,\\n    interpolate: interpolate,\\n    shuffle: shuffle\\n  },\\n  install: _install,\\n  effects: _effects,\\n  ticker: _ticker,\\n  updateRoot: Timeline.updateRoot,\\n  plugins: _plugins,\\n  globalTimeline: _globalTimeline,\\n  core: {\\n    PropTween: PropTween,\\n    globals: _addGlobal,\\n    Tween: Tween,\\n    Timeline: Timeline,\\n    Animation: Animation,\\n    getCache: _getCache,\\n    _removeLinkedListItem: _removeLinkedListItem,\\n    reverting: function reverting() {\\n      return _reverting;\\n    },\\n    context: function context(toAdd) {\\n      if (toAdd && _context) {\\n        _context.data.push(toAdd);\\n\\n        toAdd._ctx = _context;\\n      }\\n\\n      return _context;\\n    },\\n    suppressOverwrites: function suppressOverwrites(value) {\\n      return _suppressOverwrites = value;\\n    }\\n  }\\n};\\n\\n_forEachName(\\\"to,from,fromTo,delayedCall,set,killTweensOf\\\", function (name) {\\n  return _gsap[name] = Tween[name];\\n});\\n\\n_ticker.add(Timeline.updateRoot);\\n\\n_quickTween = _gsap.to({}, {\\n  duration: 0\\n}); // ---- EXTRA PLUGINS --------------------------------------------------------\\n\\nvar _getPluginPropTween = function _getPluginPropTween(plugin, prop) {\\n  var pt = plugin._pt;\\n\\n  while (pt && pt.p !== prop && pt.op !== prop && pt.fp !== prop) {\\n    pt = pt._next;\\n  }\\n\\n  return pt;\\n},\\n    _addModifiers = function _addModifiers(tween, modifiers) {\\n  var targets = tween._targets,\\n      p,\\n      i,\\n      pt;\\n\\n  for (p in modifiers) {\\n    i = targets.length;\\n\\n    while (i--) {\\n      pt = tween._ptLookup[i][p];\\n\\n      if (pt && (pt = pt.d)) {\\n        if (pt._pt) {\\n          // is a plugin\\n          pt = _getPluginPropTween(pt, p);\\n        }\\n\\n        pt && pt.modifier && pt.modifier(modifiers[p], tween, targets[i], p);\\n      }\\n    }\\n  }\\n},\\n    _buildModifierPlugin = function _buildModifierPlugin(name, modifier) {\\n  return {\\n    name: name,\\n    rawVars: 1,\\n    //don't pre-process function-based values or \\\"random()\\\" strings.\\n    init: function init(target, vars, tween) {\\n      tween._onInit = function (tween) {\\n        var temp, p;\\n\\n        if (_isString(vars)) {\\n          temp = {};\\n\\n          _forEachName(vars, function (name) {\\n            return temp[name] = 1;\\n          }); //if the user passes in a comma-delimited list of property names to roundProps, like \\\"x,y\\\", we round to whole numbers.\\n\\n\\n          vars = temp;\\n        }\\n\\n        if (modifier) {\\n          temp = {};\\n\\n          for (p in vars) {\\n            temp[p] = modifier(vars[p]);\\n          }\\n\\n          vars = temp;\\n        }\\n\\n        _addModifiers(tween, vars);\\n      };\\n    }\\n  };\\n}; //register core plugins\\n\\n\\nvar gsap = _gsap.registerPlugin({\\n  name: \\\"attr\\\",\\n  init: function init(target, vars, tween, index, targets) {\\n    var p, pt, v;\\n    this.tween = tween;\\n\\n    for (p in vars) {\\n      v = target.getAttribute(p) || \\\"\\\";\\n      pt = this.add(target, \\\"setAttribute\\\", (v || 0) + \\\"\\\", vars[p], index, targets, 0, 0, p);\\n      pt.op = p;\\n      pt.b = v; // record the beginning value so we can revert()\\n\\n      this._props.push(p);\\n    }\\n  },\\n  render: function render(ratio, data) {\\n    var pt = data._pt;\\n\\n    while (pt) {\\n      _reverting ? pt.set(pt.t, pt.p, pt.b, pt) : pt.r(ratio, pt.d); // if reverting, go back to the original (pt.b)\\n\\n      pt = pt._next;\\n    }\\n  }\\n}, {\\n  name: \\\"endArray\\\",\\n  init: function init(target, value) {\\n    var i = value.length;\\n\\n    while (i--) {\\n      this.add(target, i, target[i] || 0, value[i], 0, 0, 0, 0, 0, 1);\\n    }\\n  }\\n}, _buildModifierPlugin(\\\"roundProps\\\", _roundModifier), _buildModifierPlugin(\\\"modifiers\\\"), _buildModifierPlugin(\\\"snap\\\", snap)) || _gsap; //to prevent the core plugins from being dropped via aggressive tree shaking, we must include them in the variable declaration in this way.\\n\\nTween.version = Timeline.version = gsap.version = \\\"3.12.7\\\";\\n_coreReady = 1;\\n_windowExists() && _wake();\\nvar Power0 = _easeMap.Power0,\\n    Power1 = _easeMap.Power1,\\n    Power2 = _easeMap.Power2,\\n    Power3 = _easeMap.Power3,\\n    Power4 = _easeMap.Power4,\\n    Linear = _easeMap.Linear,\\n    Quad = _easeMap.Quad,\\n    Cubic = _easeMap.Cubic,\\n    Quart = _easeMap.Quart,\\n    Quint = _easeMap.Quint,\\n    Strong = _easeMap.Strong,\\n    Elastic = _easeMap.Elastic,\\n    Back = _easeMap.Back,\\n    SteppedEase = _easeMap.SteppedEase,\\n    Bounce = _easeMap.Bounce,\\n    Sine = _easeMap.Sine,\\n    Expo = _easeMap.Expo,\\n    Circ = _easeMap.Circ;\\n\\n //export some internal methods/orojects for use in CSSPlugin so that we can externalize that file and allow custom builds that exclude it.\\n\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZ3NhcC9nc2FwLWNvcmUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsd0NBQXdDLHVCQUF1Qix5RkFBeUY7O0FBRXhKLGdEQUFnRCwwREFBMEQsMkNBQTJDOztBQUVySjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNELDZGQUE2RjtBQUM3RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRCx1QkFBdUI7QUFDdkI7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQSxpQkFBaUI7QUFDakIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDO0FBQzNDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsK0pBQStKO0FBQy9KO0FBQ0E7O0FBRUEsU0FBUywyQ0FBMkM7O0FBRXBEO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxjQUFjLE9BQU87QUFDckI7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSwySUFBMkk7QUFDM0k7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxlQUFlO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7O0FBRUEsbURBQW1EO0FBQ25ELENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsa0RBQWtEO0FBQ2xEOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtREFBbUQ7O0FBRW5EO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUM7QUFDakM7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGlFQUFpRTs7QUFFakU7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpRUFBaUU7O0FBRWpFLHNFQUFzRTs7QUFFdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkVBQTZFO0FBQzdFOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNB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TUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxvRUFBb0UsSUFBSSxFQUFFLElBQUk7QUFDOUU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw4REFBOEQ7O0FBRTlEO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1DQUFtQzs7QUFFbkM7QUFDQSxtQkFBbUIsd0JBQXdCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFGQUFxRjs7QUFFckY7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsNkNBQTZDOztBQUU3QztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUTs7QUFFUjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLDRCQUE0Qiw4RUFBOEU7QUFDcEksY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsT0FBTztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJGQUEyRjtBQUMzRixDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsSUFBSTs7QUFFSixrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNILENBQUM7O0FBRUQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDOztBQUVEO0FBQ0E7QUFDQSxDQUFDLEdBQUc7OztBQUdKO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSxvRUFBb0U7QUFDcEU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUMsMkJBQTJCO0FBQzNCOztBQUVBLHlEQUF5RDtBQUN6RDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esd01BQXdNO0FBQ3hNOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDBHQUEwRztBQUMxRyxzR0FBc0c7QUFDdEc7QUFDQTs7QUFFQTtBQUNBLGdFQUFnRTs7QUFFaEU7O0FBRUEsbUJBQW1COzs7QUFHbkI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047OztBQUdBO0FBQ0E7O0FBRUE7QUFDQSw2RUFBNkU7O0FBRTdFLGtDQUFrQztBQUNsQyxRQUFRO0FBQ1I7O0FBRUEsOEJBQThCOztBQUU5QiwrTUFBK007QUFDL007QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMENBQTBDOztBQUUxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZFQUE2RTtBQUM3RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0Qzs7QUFFNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRGQUE0Rjs7QUFFNUY7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7O0FBRTFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0VBQWdFO0FBQ2hFO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQztB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O0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXLEdBQUc7OztBQUdkO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdJO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7O0FBRWhCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBLHFFQUFxRTs7QUFFckU7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsdUlBQXVJOztBQUV4STtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDbUo7QUFDcUgsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL2dzYXAvZ3NhcC1jb3JlLmpzPzcyOGUiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpOyBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzczsgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG4vKiFcbiAqIEdTQVAgMy4xMi43XG4gKiBodHRwczovL2dzYXAuY29tXG4gKlxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IDIwMDgtMjAyNSwgR3JlZW5Tb2NrLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogU3ViamVjdCB0byB0aGUgdGVybXMgYXQgaHR0cHM6Ly9nc2FwLmNvbS9zdGFuZGFyZC1saWNlbnNlIG9yIGZvclxuICogQ2x1YiBHU0FQIG1lbWJlcnMsIHRoZSBhZ3JlZW1lbnQgaXNzdWVkIHdpdGggdGhhdCBtZW1iZXJzaGlwLlxuICogQGF1dGhvcjogSmFjayBEb3lsZSwgamFja0BncmVlbnNvY2suY29tXG4qL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xudmFyIF9jb25maWcgPSB7XG4gIGF1dG9TbGVlcDogMTIwLFxuICBmb3JjZTNEOiBcImF1dG9cIixcbiAgbnVsbFRhcmdldFdhcm46IDEsXG4gIHVuaXRzOiB7XG4gICAgbGluZUhlaWdodDogXCJcIlxuICB9XG59LFxuICAgIF9kZWZhdWx0cyA9IHtcbiAgZHVyYXRpb246IC41LFxuICBvdmVyd3JpdGU6IGZhbHNlLFxuICBkZWxheTogMFxufSxcbiAgICBfc3VwcHJlc3NPdmVyd3JpdGVzLFxuICAgIF9yZXZlcnRpbmcsXG4gICAgX2NvbnRleHQsXG4gICAgX2JpZ051bSA9IDFlOCxcbiAgICBfdGlueU51bSA9IDEgLyBfYmlnTnVtLFxuICAgIF8yUEkgPSBNYXRoLlBJICogMixcbiAgICBfSEFMRl9QSSA9IF8yUEkgLyA0LFxuICAgIF9nc0lEID0gMCxcbiAgICBfc3FydCA9IE1hdGguc3FydCxcbiAgICBfY29zID0gTWF0aC5jb3MsXG4gICAgX3NpbiA9IE1hdGguc2luLFxuICAgIF9pc1N0cmluZyA9IGZ1bmN0aW9uIF9pc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xufSxcbiAgICBfaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIF9pc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIjtcbn0sXG4gICAgX2lzTnVtYmVyID0gZnVuY3Rpb24gX2lzTnVtYmVyKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCI7XG59LFxuICAgIF9pc1VuZGVmaW5lZCA9IGZ1bmN0aW9uIF9pc1VuZGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiO1xufSxcbiAgICBfaXNPYmplY3QgPSBmdW5jdGlvbiBfaXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIjtcbn0sXG4gICAgX2lzTm90RmFsc2UgPSBmdW5jdGlvbiBfaXNOb3RGYWxzZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IGZhbHNlO1xufSxcbiAgICBfd2luZG93RXhpc3RzID0gZnVuY3Rpb24gX3dpbmRvd0V4aXN0cygpIHtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCI7XG59LFxuICAgIF9pc0Z1bmNPclN0cmluZyA9IGZ1bmN0aW9uIF9pc0Z1bmNPclN0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gX2lzRnVuY3Rpb24odmFsdWUpIHx8IF9pc1N0cmluZyh2YWx1ZSk7XG59LFxuICAgIF9pc1R5cGVkQXJyYXkgPSB0eXBlb2YgQXJyYXlCdWZmZXIgPT09IFwiZnVuY3Rpb25cIiAmJiBBcnJheUJ1ZmZlci5pc1ZpZXcgfHwgZnVuY3Rpb24gKCkge30sXG4gICAgLy8gbm90ZTogSUUxMCBoYXMgQXJyYXlCdWZmZXIsIGJ1dCBOT1QgQXJyYXlCdWZmZXIuaXNWaWV3KCkuXG5faXNBcnJheSA9IEFycmF5LmlzQXJyYXksXG4gICAgX3N0cmljdE51bUV4cCA9IC8oPzotP1xcLj9cXGR8XFwuKSsvZ2ksXG4gICAgLy9vbmx5IG51bWJlcnMgKGluY2x1ZGluZyBuZWdhdGl2ZXMgYW5kIGRlY2ltYWxzKSBidXQgTk9UIHJlbGF0aXZlIHZhbHVlcy5cbl9udW1FeHAgPSAvWy0rPS5dKlxcZCtbLmVcXC0rXSpcXGQqW2VcXC0rXSpcXGQqL2csXG4gICAgLy9maW5kcyBhbnkgbnVtYmVycywgaW5jbHVkaW5nIG9uZXMgdGhhdCBzdGFydCB3aXRoICs9IG9yIC09LCBuZWdhdGl2ZSBudW1iZXJzLCBhbmQgb25lcyBpbiBzY2llbnRpZmljIG5vdGF0aW9uIGxpa2UgMWUtOC5cbl9udW1XaXRoVW5pdEV4cCA9IC9bLSs9Ll0qXFxkK1suZS1dKlxcZCpbYS16JV0qL2csXG4gICAgX2NvbXBsZXhTdHJpbmdOdW1FeHAgPSAvWy0rPS5dKlxcZCtcXC4/XFxkKig/OmUtfGVcXCspP1xcZCovZ2ksXG4gICAgLy9kdXBsaWNhdGUgc28gdGhhdCB3aGlsZSB3ZSdyZSBsb29waW5nIHRocm91Z2ggbWF0Y2hlcyBmcm9tIGV4ZWMoKSwgaXQgZG9lc24ndCBjb250YW1pbmF0ZSB0aGUgbGFzdEluZGV4IG9mIF9udW1FeHAgd2hpY2ggd2UgdXNlIHRvIHNlYXJjaCBmb3IgY29sb3JzIHRvby5cbl9yZWxFeHAgPSAvWystXT0tP1suXFxkXSsvLFxuICAgIF9kZWxpbWl0ZWRWYWx1ZUV4cCA9IC9bXiwnXCJcXFtcXF1cXHNdKy9naSxcbiAgICAvLyBwcmV2aW91c2x5IC9bI1xcLSsuXSpcXGJbYS16XFxkXFwtPSslLl0rL2dpIGJ1dCBkaWRuJ3QgY2F0Y2ggc3BlY2lhbCBjaGFyYWN0ZXJzLlxuX3VuaXRFeHAgPSAvXlsrXFwtPWVcXHNcXGRdKlxcZCtbLlxcZF0qKFthLXpdKnwlKVxccyokL2ksXG4gICAgX2dsb2JhbFRpbWVsaW5lLFxuICAgIF93aW4sXG4gICAgX2NvcmVJbml0dGVkLFxuICAgIF9kb2MsXG4gICAgX2dsb2JhbHMgPSB7fSxcbiAgICBfaW5zdGFsbFNjb3BlID0ge30sXG4gICAgX2NvcmVSZWFkeSxcbiAgICBfaW5zdGFsbCA9IGZ1bmN0aW9uIF9pbnN0YWxsKHNjb3BlKSB7XG4gIHJldHVybiAoX2luc3RhbGxTY29wZSA9IF9tZXJnZShzY29wZSwgX2dsb2JhbHMpKSAmJiBnc2FwO1xufSxcbiAgICBfbWlzc2luZ1BsdWdpbiA9IGZ1bmN0aW9uIF9taXNzaW5nUGx1Z2luKHByb3BlcnR5LCB2YWx1ZSkge1xuICByZXR1cm4gY29uc29sZS53YXJuKFwiSW52YWxpZCBwcm9wZXJ0eVwiLCBwcm9wZXJ0eSwgXCJzZXQgdG9cIiwgdmFsdWUsIFwiTWlzc2luZyBwbHVnaW4/IGdzYXAucmVnaXN0ZXJQbHVnaW4oKVwiKTtcbn0sXG4gICAgX3dhcm4gPSBmdW5jdGlvbiBfd2FybihtZXNzYWdlLCBzdXBwcmVzcykge1xuICByZXR1cm4gIXN1cHByZXNzICYmIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbn0sXG4gICAgX2FkZEdsb2JhbCA9IGZ1bmN0aW9uIF9hZGRHbG9iYWwobmFtZSwgb2JqKSB7XG4gIHJldHVybiBuYW1lICYmIChfZ2xvYmFsc1tuYW1lXSA9IG9iaikgJiYgX2luc3RhbGxTY29wZSAmJiAoX2luc3RhbGxTY29wZVtuYW1lXSA9IG9iaikgfHwgX2dsb2JhbHM7XG59LFxuICAgIF9lbXB0eUZ1bmMgPSBmdW5jdGlvbiBfZW1wdHlGdW5jKCkge1xuICByZXR1cm4gMDtcbn0sXG4gICAgX3N0YXJ0QXRSZXZlcnRDb25maWcgPSB7XG4gIHN1cHByZXNzRXZlbnRzOiB0cnVlLFxuICBpc1N0YXJ0OiB0cnVlLFxuICBraWxsOiBmYWxzZVxufSxcbiAgICBfcmV2ZXJ0Q29uZmlnTm9LaWxsID0ge1xuICBzdXBwcmVzc0V2ZW50czogdHJ1ZSxcbiAga2lsbDogZmFsc2Vcbn0sXG4gICAgX3JldmVydENvbmZpZyA9IHtcbiAgc3VwcHJlc3NFdmVudHM6IHRydWVcbn0sXG4gICAgX3Jlc2VydmVkUHJvcHMgPSB7fSxcbiAgICBfbGF6eVR3ZWVucyA9IFtdLFxuICAgIF9sYXp5TG9va3VwID0ge30sXG4gICAgX2xhc3RSZW5kZXJlZEZyYW1lLFxuICAgIF9wbHVnaW5zID0ge30sXG4gICAgX2VmZmVjdHMgPSB7fSxcbiAgICBfbmV4dEdDRnJhbWUgPSAzMCxcbiAgICBfaGFybmVzc1BsdWdpbnMgPSBbXSxcbiAgICBfY2FsbGJhY2tOYW1lcyA9IFwiXCIsXG4gICAgX2hhcm5lc3MgPSBmdW5jdGlvbiBfaGFybmVzcyh0YXJnZXRzKSB7XG4gIHZhciB0YXJnZXQgPSB0YXJnZXRzWzBdLFxuICAgICAgaGFybmVzc1BsdWdpbixcbiAgICAgIGk7XG4gIF9pc09iamVjdCh0YXJnZXQpIHx8IF9pc0Z1bmN0aW9uKHRhcmdldCkgfHwgKHRhcmdldHMgPSBbdGFyZ2V0c10pO1xuXG4gIGlmICghKGhhcm5lc3NQbHVnaW4gPSAodGFyZ2V0Ll9nc2FwIHx8IHt9KS5oYXJuZXNzKSkge1xuICAgIC8vIGZpbmQgdGhlIGZpcnN0IHRhcmdldCB3aXRoIGEgaGFybmVzcy4gV2UgYXNzdW1lIHRhcmdldHMgcGFzc2VkIGludG8gYW4gYW5pbWF0aW9uIHdpbGwgYmUgb2Ygc2ltaWxhciB0eXBlLCBtZWFuaW5nIHRoZSBzYW1lIGtpbmQgb2YgaGFybmVzcyBjYW4gYmUgdXNlZCBmb3IgdGhlbSBhbGwgKHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbilcbiAgICBpID0gX2hhcm5lc3NQbHVnaW5zLmxlbmd0aDtcblxuICAgIHdoaWxlIChpLS0gJiYgIV9oYXJuZXNzUGx1Z2luc1tpXS50YXJnZXRUZXN0KHRhcmdldCkpIHt9XG5cbiAgICBoYXJuZXNzUGx1Z2luID0gX2hhcm5lc3NQbHVnaW5zW2ldO1xuICB9XG5cbiAgaSA9IHRhcmdldHMubGVuZ3RoO1xuXG4gIHdoaWxlIChpLS0pIHtcbiAgICB0YXJnZXRzW2ldICYmICh0YXJnZXRzW2ldLl9nc2FwIHx8ICh0YXJnZXRzW2ldLl9nc2FwID0gbmV3IEdTQ2FjaGUodGFyZ2V0c1tpXSwgaGFybmVzc1BsdWdpbikpKSB8fCB0YXJnZXRzLnNwbGljZShpLCAxKTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXRzO1xufSxcbiAgICBfZ2V0Q2FjaGUgPSBmdW5jdGlvbiBfZ2V0Q2FjaGUodGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQuX2dzYXAgfHwgX2hhcm5lc3ModG9BcnJheSh0YXJnZXQpKVswXS5fZ3NhcDtcbn0sXG4gICAgX2dldFByb3BlcnR5ID0gZnVuY3Rpb24gX2dldFByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIHYpIHtcbiAgcmV0dXJuICh2ID0gdGFyZ2V0W3Byb3BlcnR5XSkgJiYgX2lzRnVuY3Rpb24odikgPyB0YXJnZXRbcHJvcGVydHldKCkgOiBfaXNVbmRlZmluZWQodikgJiYgdGFyZ2V0LmdldEF0dHJpYnV0ZSAmJiB0YXJnZXQuZ2V0QXR0cmlidXRlKHByb3BlcnR5KSB8fCB2O1xufSxcbiAgICBfZm9yRWFjaE5hbWUgPSBmdW5jdGlvbiBfZm9yRWFjaE5hbWUobmFtZXMsIGZ1bmMpIHtcbiAgcmV0dXJuIChuYW1lcyA9IG5hbWVzLnNwbGl0KFwiLFwiKSkuZm9yRWFjaChmdW5jKSB8fCBuYW1lcztcbn0sXG4gICAgLy9zcGxpdCBhIGNvbW1hLWRlbGltaXRlZCBsaXN0IG9mIG5hbWVzIGludG8gYW4gYXJyYXksIHRoZW4gcnVuIGEgZm9yRWFjaCgpIGZ1bmN0aW9uIGFuZCByZXR1cm4gdGhlIHNwbGl0IGFycmF5ICh0aGlzIGlzIGp1c3QgYSB3YXkgdG8gY29uc29saWRhdGUvc2hvcnRlbiBzb21lIGNvZGUpLlxuX3JvdW5kID0gZnVuY3Rpb24gX3JvdW5kKHZhbHVlKSB7XG4gIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogMTAwMDAwKSAvIDEwMDAwMCB8fCAwO1xufSxcbiAgICBfcm91bmRQcmVjaXNlID0gZnVuY3Rpb24gX3JvdW5kUHJlY2lzZSh2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSAqIDEwMDAwMDAwKSAvIDEwMDAwMDAwIHx8IDA7XG59LFxuICAgIC8vIGluY3JlYXNlZCBwcmVjaXNpb24gbW9zdGx5IGZvciB0aW1pbmcgdmFsdWVzLlxuX3BhcnNlUmVsYXRpdmUgPSBmdW5jdGlvbiBfcGFyc2VSZWxhdGl2ZShzdGFydCwgdmFsdWUpIHtcbiAgdmFyIG9wZXJhdG9yID0gdmFsdWUuY2hhckF0KDApLFxuICAgICAgZW5kID0gcGFyc2VGbG9hdCh2YWx1ZS5zdWJzdHIoMikpO1xuICBzdGFydCA9IHBhcnNlRmxvYXQoc3RhcnQpO1xuICByZXR1cm4gb3BlcmF0b3IgPT09IFwiK1wiID8gc3RhcnQgKyBlbmQgOiBvcGVyYXRvciA9PT0gXCItXCIgPyBzdGFydCAtIGVuZCA6IG9wZXJhdG9yID09PSBcIipcIiA/IHN0YXJ0ICogZW5kIDogc3RhcnQgLyBlbmQ7XG59LFxuICAgIF9hcnJheUNvbnRhaW5zQW55ID0gZnVuY3Rpb24gX2FycmF5Q29udGFpbnNBbnkodG9TZWFyY2gsIHRvRmluZCkge1xuICAvL3NlYXJjaGVzIG9uZSBhcnJheSB0byBmaW5kIG1hdGNoZXMgZm9yIGFueSBvZiB0aGUgaXRlbXMgaW4gdGhlIHRvRmluZCBhcnJheS4gQXMgc29vbiBhcyBvbmUgaXMgZm91bmQsIGl0IHJldHVybnMgdHJ1ZS4gSXQgZG9lcyBOT1QgcmV0dXJuIGFsbCB0aGUgbWF0Y2hlczsgaXQncyBzaW1wbHkgYSBib29sZWFuIHNlYXJjaC5cbiAgdmFyIGwgPSB0b0ZpbmQubGVuZ3RoLFxuICAgICAgaSA9IDA7XG5cbiAgZm9yICg7IHRvU2VhcmNoLmluZGV4T2YodG9GaW5kW2ldKSA8IDAgJiYgKytpIDwgbDspIHt9XG5cbiAgcmV0dXJuIGkgPCBsO1xufSxcbiAgICBfbGF6eVJlbmRlciA9IGZ1bmN0aW9uIF9sYXp5UmVuZGVyKCkge1xuICB2YXIgbCA9IF9sYXp5VHdlZW5zLmxlbmd0aCxcbiAgICAgIGEgPSBfbGF6eVR3ZWVucy5zbGljZSgwKSxcbiAgICAgIGksXG4gICAgICB0d2VlbjtcblxuICBfbGF6eUxvb2t1cCA9IHt9O1xuICBfbGF6eVR3ZWVucy5sZW5ndGggPSAwO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICB0d2VlbiA9IGFbaV07XG4gICAgdHdlZW4gJiYgdHdlZW4uX2xhenkgJiYgKHR3ZWVuLnJlbmRlcih0d2Vlbi5fbGF6eVswXSwgdHdlZW4uX2xhenlbMV0sIHRydWUpLl9sYXp5ID0gMCk7XG4gIH1cbn0sXG4gICAgX2xhenlTYWZlUmVuZGVyID0gZnVuY3Rpb24gX2xhenlTYWZlUmVuZGVyKGFuaW1hdGlvbiwgdGltZSwgc3VwcHJlc3NFdmVudHMsIGZvcmNlKSB7XG4gIF9sYXp5VHdlZW5zLmxlbmd0aCAmJiAhX3JldmVydGluZyAmJiBfbGF6eVJlbmRlcigpO1xuICBhbmltYXRpb24ucmVuZGVyKHRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSB8fCBfcmV2ZXJ0aW5nICYmIHRpbWUgPCAwICYmIChhbmltYXRpb24uX2luaXR0ZWQgfHwgYW5pbWF0aW9uLl9zdGFydEF0KSk7XG4gIF9sYXp5VHdlZW5zLmxlbmd0aCAmJiAhX3JldmVydGluZyAmJiBfbGF6eVJlbmRlcigpOyAvL2luIGNhc2UgcmVuZGVyaW5nIGNhdXNlZCBhbnkgdHdlZW5zIHRvIGxhenktaW5pdCwgd2Ugc2hvdWxkIHJlbmRlciB0aGVtIGJlY2F1c2UgdHlwaWNhbGx5IHdoZW4gc29tZW9uZSBjYWxscyBzZWVrKCkgb3IgdGltZSgpIG9yIHByb2dyZXNzKCksIHRoZXkgZXhwZWN0IGFuIGltbWVkaWF0ZSByZW5kZXIuXG59LFxuICAgIF9udW1lcmljSWZQb3NzaWJsZSA9IGZ1bmN0aW9uIF9udW1lcmljSWZQb3NzaWJsZSh2YWx1ZSkge1xuICB2YXIgbiA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICByZXR1cm4gKG4gfHwgbiA9PT0gMCkgJiYgKHZhbHVlICsgXCJcIikubWF0Y2goX2RlbGltaXRlZFZhbHVlRXhwKS5sZW5ndGggPCAyID8gbiA6IF9pc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZS50cmltKCkgOiB2YWx1ZTtcbn0sXG4gICAgX3Bhc3NUaHJvdWdoID0gZnVuY3Rpb24gX3Bhc3NUaHJvdWdoKHApIHtcbiAgcmV0dXJuIHA7XG59LFxuICAgIF9zZXREZWZhdWx0cyA9IGZ1bmN0aW9uIF9zZXREZWZhdWx0cyhvYmosIGRlZmF1bHRzKSB7XG4gIGZvciAodmFyIHAgaW4gZGVmYXVsdHMpIHtcbiAgICBwIGluIG9iaiB8fCAob2JqW3BdID0gZGVmYXVsdHNbcF0pO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn0sXG4gICAgX3NldEtleWZyYW1lRGVmYXVsdHMgPSBmdW5jdGlvbiBfc2V0S2V5ZnJhbWVEZWZhdWx0cyhleGNsdWRlRHVyYXRpb24pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChvYmosIGRlZmF1bHRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBkZWZhdWx0cykge1xuICAgICAgcCBpbiBvYmogfHwgcCA9PT0gXCJkdXJhdGlvblwiICYmIGV4Y2x1ZGVEdXJhdGlvbiB8fCBwID09PSBcImVhc2VcIiB8fCAob2JqW3BdID0gZGVmYXVsdHNbcF0pO1xuICAgIH1cbiAgfTtcbn0sXG4gICAgX21lcmdlID0gZnVuY3Rpb24gX21lcmdlKGJhc2UsIHRvTWVyZ2UpIHtcbiAgZm9yICh2YXIgcCBpbiB0b01lcmdlKSB7XG4gICAgYmFzZVtwXSA9IHRvTWVyZ2VbcF07XG4gIH1cblxuICByZXR1cm4gYmFzZTtcbn0sXG4gICAgX21lcmdlRGVlcCA9IGZ1bmN0aW9uIF9tZXJnZURlZXAoYmFzZSwgdG9NZXJnZSkge1xuICBmb3IgKHZhciBwIGluIHRvTWVyZ2UpIHtcbiAgICBwICE9PSBcIl9fcHJvdG9fX1wiICYmIHAgIT09IFwiY29uc3RydWN0b3JcIiAmJiBwICE9PSBcInByb3RvdHlwZVwiICYmIChiYXNlW3BdID0gX2lzT2JqZWN0KHRvTWVyZ2VbcF0pID8gX21lcmdlRGVlcChiYXNlW3BdIHx8IChiYXNlW3BdID0ge30pLCB0b01lcmdlW3BdKSA6IHRvTWVyZ2VbcF0pO1xuICB9XG5cbiAgcmV0dXJuIGJhc2U7XG59LFxuICAgIF9jb3B5RXhjbHVkaW5nID0gZnVuY3Rpb24gX2NvcHlFeGNsdWRpbmcob2JqLCBleGNsdWRpbmcpIHtcbiAgdmFyIGNvcHkgPSB7fSxcbiAgICAgIHA7XG5cbiAgZm9yIChwIGluIG9iaikge1xuICAgIHAgaW4gZXhjbHVkaW5nIHx8IChjb3B5W3BdID0gb2JqW3BdKTtcbiAgfVxuXG4gIHJldHVybiBjb3B5O1xufSxcbiAgICBfaW5oZXJpdERlZmF1bHRzID0gZnVuY3Rpb24gX2luaGVyaXREZWZhdWx0cyh2YXJzKSB7XG4gIHZhciBwYXJlbnQgPSB2YXJzLnBhcmVudCB8fCBfZ2xvYmFsVGltZWxpbmUsXG4gICAgICBmdW5jID0gdmFycy5rZXlmcmFtZXMgPyBfc2V0S2V5ZnJhbWVEZWZhdWx0cyhfaXNBcnJheSh2YXJzLmtleWZyYW1lcykpIDogX3NldERlZmF1bHRzO1xuXG4gIGlmIChfaXNOb3RGYWxzZSh2YXJzLmluaGVyaXQpKSB7XG4gICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgZnVuYyh2YXJzLCBwYXJlbnQudmFycy5kZWZhdWx0cyk7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50IHx8IHBhcmVudC5fZHA7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhcnM7XG59LFxuICAgIF9hcnJheXNNYXRjaCA9IGZ1bmN0aW9uIF9hcnJheXNNYXRjaChhMSwgYTIpIHtcbiAgdmFyIGkgPSBhMS5sZW5ndGgsXG4gICAgICBtYXRjaCA9IGkgPT09IGEyLmxlbmd0aDtcblxuICB3aGlsZSAobWF0Y2ggJiYgaS0tICYmIGExW2ldID09PSBhMltpXSkge31cblxuICByZXR1cm4gaSA8IDA7XG59LFxuICAgIF9hZGRMaW5rZWRMaXN0SXRlbSA9IGZ1bmN0aW9uIF9hZGRMaW5rZWRMaXN0SXRlbShwYXJlbnQsIGNoaWxkLCBmaXJzdFByb3AsIGxhc3RQcm9wLCBzb3J0QnkpIHtcbiAgaWYgKGZpcnN0UHJvcCA9PT0gdm9pZCAwKSB7XG4gICAgZmlyc3RQcm9wID0gXCJfZmlyc3RcIjtcbiAgfVxuXG4gIGlmIChsYXN0UHJvcCA9PT0gdm9pZCAwKSB7XG4gICAgbGFzdFByb3AgPSBcIl9sYXN0XCI7XG4gIH1cblxuICB2YXIgcHJldiA9IHBhcmVudFtsYXN0UHJvcF0sXG4gICAgICB0O1xuXG4gIGlmIChzb3J0QnkpIHtcbiAgICB0ID0gY2hpbGRbc29ydEJ5XTtcblxuICAgIHdoaWxlIChwcmV2ICYmIHByZXZbc29ydEJ5XSA+IHQpIHtcbiAgICAgIHByZXYgPSBwcmV2Ll9wcmV2O1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcmV2KSB7XG4gICAgY2hpbGQuX25leHQgPSBwcmV2Ll9uZXh0O1xuICAgIHByZXYuX25leHQgPSBjaGlsZDtcbiAgfSBlbHNlIHtcbiAgICBjaGlsZC5fbmV4dCA9IHBhcmVudFtmaXJzdFByb3BdO1xuICAgIHBhcmVudFtmaXJzdFByb3BdID0gY2hpbGQ7XG4gIH1cblxuICBpZiAoY2hpbGQuX25leHQpIHtcbiAgICBjaGlsZC5fbmV4dC5fcHJldiA9IGNoaWxkO1xuICB9IGVsc2Uge1xuICAgIHBhcmVudFtsYXN0UHJvcF0gPSBjaGlsZDtcbiAgfVxuXG4gIGNoaWxkLl9wcmV2ID0gcHJldjtcbiAgY2hpbGQucGFyZW50ID0gY2hpbGQuX2RwID0gcGFyZW50O1xuICByZXR1cm4gY2hpbGQ7XG59LFxuICAgIF9yZW1vdmVMaW5rZWRMaXN0SXRlbSA9IGZ1bmN0aW9uIF9yZW1vdmVMaW5rZWRMaXN0SXRlbShwYXJlbnQsIGNoaWxkLCBmaXJzdFByb3AsIGxhc3RQcm9wKSB7XG4gIGlmIChmaXJzdFByb3AgPT09IHZvaWQgMCkge1xuICAgIGZpcnN0UHJvcCA9IFwiX2ZpcnN0XCI7XG4gIH1cblxuICBpZiAobGFzdFByb3AgPT09IHZvaWQgMCkge1xuICAgIGxhc3RQcm9wID0gXCJfbGFzdFwiO1xuICB9XG5cbiAgdmFyIHByZXYgPSBjaGlsZC5fcHJldixcbiAgICAgIG5leHQgPSBjaGlsZC5fbmV4dDtcblxuICBpZiAocHJldikge1xuICAgIHByZXYuX25leHQgPSBuZXh0O1xuICB9IGVsc2UgaWYgKHBhcmVudFtmaXJzdFByb3BdID09PSBjaGlsZCkge1xuICAgIHBhcmVudFtmaXJzdFByb3BdID0gbmV4dDtcbiAgfVxuXG4gIGlmIChuZXh0KSB7XG4gICAgbmV4dC5fcHJldiA9IHByZXY7XG4gIH0gZWxzZSBpZiAocGFyZW50W2xhc3RQcm9wXSA9PT0gY2hpbGQpIHtcbiAgICBwYXJlbnRbbGFzdFByb3BdID0gcHJldjtcbiAgfVxuXG4gIGNoaWxkLl9uZXh0ID0gY2hpbGQuX3ByZXYgPSBjaGlsZC5wYXJlbnQgPSBudWxsOyAvLyBkb24ndCBkZWxldGUgdGhlIF9kcCBqdXN0IHNvIHdlIGNhbiByZXZlcnQgaWYgbmVjZXNzYXJ5LiBCdXQgcGFyZW50IHNob3VsZCBiZSBudWxsIHRvIGluZGljYXRlIHRoZSBpdGVtIGlzbid0IGluIGEgbGlua2VkIGxpc3QuXG59LFxuICAgIF9yZW1vdmVGcm9tUGFyZW50ID0gZnVuY3Rpb24gX3JlbW92ZUZyb21QYXJlbnQoY2hpbGQsIG9ubHlJZlBhcmVudEhhc0F1dG9SZW1vdmUpIHtcbiAgY2hpbGQucGFyZW50ICYmICghb25seUlmUGFyZW50SGFzQXV0b1JlbW92ZSB8fCBjaGlsZC5wYXJlbnQuYXV0b1JlbW92ZUNoaWxkcmVuKSAmJiBjaGlsZC5wYXJlbnQucmVtb3ZlICYmIGNoaWxkLnBhcmVudC5yZW1vdmUoY2hpbGQpO1xuICBjaGlsZC5fYWN0ID0gMDtcbn0sXG4gICAgX3VuY2FjaGUgPSBmdW5jdGlvbiBfdW5jYWNoZShhbmltYXRpb24sIGNoaWxkKSB7XG4gIGlmIChhbmltYXRpb24gJiYgKCFjaGlsZCB8fCBjaGlsZC5fZW5kID4gYW5pbWF0aW9uLl9kdXIgfHwgY2hpbGQuX3N0YXJ0IDwgMCkpIHtcbiAgICAvLyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb246IGlmIGEgY2hpbGQgYW5pbWF0aW9uIGlzIHBhc3NlZCBpbiB3ZSBzaG91bGQgb25seSB1bmNhY2hlIGlmIHRoYXQgY2hpbGQgRVhURU5EUyB0aGUgYW5pbWF0aW9uIChpdHMgZW5kIHRpbWUgaXMgYmV5b25kIHRoZSBlbmQpXG4gICAgdmFyIGEgPSBhbmltYXRpb247XG5cbiAgICB3aGlsZSAoYSkge1xuICAgICAgYS5fZGlydHkgPSAxO1xuICAgICAgYSA9IGEucGFyZW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhbmltYXRpb247XG59LFxuICAgIF9yZWNhY2hlQW5jZXN0b3JzID0gZnVuY3Rpb24gX3JlY2FjaGVBbmNlc3RvcnMoYW5pbWF0aW9uKSB7XG4gIHZhciBwYXJlbnQgPSBhbmltYXRpb24ucGFyZW50O1xuXG4gIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50LnBhcmVudCkge1xuICAgIC8vc29tZXRpbWVzIHdlIG11c3QgZm9yY2UgYSByZS1zb3J0IG9mIGFsbCBjaGlsZHJlbiBhbmQgdXBkYXRlIHRoZSBkdXJhdGlvbi90b3RhbER1cmF0aW9uIG9mIGFsbCBhbmNlc3RvciB0aW1lbGluZXMgaW1tZWRpYXRlbHkgaW4gY2FzZSwgZm9yIGV4YW1wbGUsIGluIHRoZSBtaWRkbGUgb2YgYSByZW5kZXIgbG9vcCwgb25lIHR3ZWVuIGFsdGVycyBhbm90aGVyIHR3ZWVuJ3MgdGltZVNjYWxlIHdoaWNoIHNob3ZlcyBpdHMgc3RhcnRUaW1lIGJlZm9yZSAwLCBmb3JjaW5nIHRoZSBwYXJlbnQgdGltZWxpbmUgdG8gc2hpZnQgYXJvdW5kIGFuZCBzaGlmdENoaWxkcmVuKCkgd2hpY2ggY291bGQgYWZmZWN0IHRoYXQgbmV4dCB0d2VlbidzIHJlbmRlciAoc3RhcnRUaW1lKS4gRG9lc24ndCBtYXR0ZXIgZm9yIHRoZSByb290IHRpbWVsaW5lIHRob3VnaC5cbiAgICBwYXJlbnQuX2RpcnR5ID0gMTtcbiAgICBwYXJlbnQudG90YWxEdXJhdGlvbigpO1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gIH1cblxuICByZXR1cm4gYW5pbWF0aW9uO1xufSxcbiAgICBfcmV3aW5kU3RhcnRBdCA9IGZ1bmN0aW9uIF9yZXdpbmRTdGFydEF0KHR3ZWVuLCB0b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSkge1xuICByZXR1cm4gdHdlZW4uX3N0YXJ0QXQgJiYgKF9yZXZlcnRpbmcgPyB0d2Vlbi5fc3RhcnRBdC5yZXZlcnQoX3JldmVydENvbmZpZ05vS2lsbCkgOiB0d2Vlbi52YXJzLmltbWVkaWF0ZVJlbmRlciAmJiAhdHdlZW4udmFycy5hdXRvUmV2ZXJ0IHx8IHR3ZWVuLl9zdGFydEF0LnJlbmRlcih0b3RhbFRpbWUsIHRydWUsIGZvcmNlKSk7XG59LFxuICAgIF9oYXNOb1BhdXNlZEFuY2VzdG9ycyA9IGZ1bmN0aW9uIF9oYXNOb1BhdXNlZEFuY2VzdG9ycyhhbmltYXRpb24pIHtcbiAgcmV0dXJuICFhbmltYXRpb24gfHwgYW5pbWF0aW9uLl90cyAmJiBfaGFzTm9QYXVzZWRBbmNlc3RvcnMoYW5pbWF0aW9uLnBhcmVudCk7XG59LFxuICAgIF9lbGFwc2VkQ3ljbGVEdXJhdGlvbiA9IGZ1bmN0aW9uIF9lbGFwc2VkQ3ljbGVEdXJhdGlvbihhbmltYXRpb24pIHtcbiAgcmV0dXJuIGFuaW1hdGlvbi5fcmVwZWF0ID8gX2FuaW1hdGlvbkN5Y2xlKGFuaW1hdGlvbi5fdFRpbWUsIGFuaW1hdGlvbiA9IGFuaW1hdGlvbi5kdXJhdGlvbigpICsgYW5pbWF0aW9uLl9yRGVsYXkpICogYW5pbWF0aW9uIDogMDtcbn0sXG4gICAgLy8gZmVlZCBpbiB0aGUgdG90YWxUaW1lIGFuZCBjeWNsZUR1cmF0aW9uIGFuZCBpdCdsbCByZXR1cm4gdGhlIGN5Y2xlIChpdGVyYXRpb24gbWludXMgMSkgYW5kIGlmIHRoZSBwbGF5aGVhZCBpcyBleGFjdGx5IGF0IHRoZSB2ZXJ5IEVORCwgaXQgd2lsbCBOT1QgYnVtcCB1cCB0byB0aGUgbmV4dCBjeWNsZS5cbl9hbmltYXRpb25DeWNsZSA9IGZ1bmN0aW9uIF9hbmltYXRpb25DeWNsZSh0VGltZSwgY3ljbGVEdXJhdGlvbikge1xuICB2YXIgd2hvbGUgPSBNYXRoLmZsb29yKHRUaW1lID0gX3JvdW5kUHJlY2lzZSh0VGltZSAvIGN5Y2xlRHVyYXRpb24pKTtcbiAgcmV0dXJuIHRUaW1lICYmIHdob2xlID09PSB0VGltZSA/IHdob2xlIC0gMSA6IHdob2xlO1xufSxcbiAgICBfcGFyZW50VG9DaGlsZFRvdGFsVGltZSA9IGZ1bmN0aW9uIF9wYXJlbnRUb0NoaWxkVG90YWxUaW1lKHBhcmVudFRpbWUsIGNoaWxkKSB7XG4gIHJldHVybiAocGFyZW50VGltZSAtIGNoaWxkLl9zdGFydCkgKiBjaGlsZC5fdHMgKyAoY2hpbGQuX3RzID49IDAgPyAwIDogY2hpbGQuX2RpcnR5ID8gY2hpbGQudG90YWxEdXJhdGlvbigpIDogY2hpbGQuX3REdXIpO1xufSxcbiAgICBfc2V0RW5kID0gZnVuY3Rpb24gX3NldEVuZChhbmltYXRpb24pIHtcbiAgcmV0dXJuIGFuaW1hdGlvbi5fZW5kID0gX3JvdW5kUHJlY2lzZShhbmltYXRpb24uX3N0YXJ0ICsgKGFuaW1hdGlvbi5fdER1ciAvIE1hdGguYWJzKGFuaW1hdGlvbi5fdHMgfHwgYW5pbWF0aW9uLl9ydHMgfHwgX3RpbnlOdW0pIHx8IDApKTtcbn0sXG4gICAgX2FsaWduUGxheWhlYWQgPSBmdW5jdGlvbiBfYWxpZ25QbGF5aGVhZChhbmltYXRpb24sIHRvdGFsVGltZSkge1xuICAvLyBhZGp1c3RzIHRoZSBhbmltYXRpb24ncyBfc3RhcnQgYW5kIF9lbmQgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCB0b3RhbFRpbWUgKG9ubHkgaWYgdGhlIHBhcmVudCdzIHNtb290aENoaWxkVGltaW5nIGlzIHRydWUgYW5kIHRoZSBhbmltYXRpb24gaXNuJ3QgcGF1c2VkKS4gSXQgZG9lc24ndCBkbyBhbnkgcmVuZGVyaW5nIG9yIGZvcmNpbmcgdGhpbmdzIGJhY2sgaW50byBwYXJlbnQgdGltZWxpbmVzLCBldGMuIC0gdGhhdCdzIHdoYXQgdG90YWxUaW1lKCkgaXMgZm9yLlxuICB2YXIgcGFyZW50ID0gYW5pbWF0aW9uLl9kcDtcblxuICBpZiAocGFyZW50ICYmIHBhcmVudC5zbW9vdGhDaGlsZFRpbWluZyAmJiBhbmltYXRpb24uX3RzKSB7XG4gICAgYW5pbWF0aW9uLl9zdGFydCA9IF9yb3VuZFByZWNpc2UocGFyZW50Ll90aW1lIC0gKGFuaW1hdGlvbi5fdHMgPiAwID8gdG90YWxUaW1lIC8gYW5pbWF0aW9uLl90cyA6ICgoYW5pbWF0aW9uLl9kaXJ0eSA/IGFuaW1hdGlvbi50b3RhbER1cmF0aW9uKCkgOiBhbmltYXRpb24uX3REdXIpIC0gdG90YWxUaW1lKSAvIC1hbmltYXRpb24uX3RzKSk7XG5cbiAgICBfc2V0RW5kKGFuaW1hdGlvbik7XG5cbiAgICBwYXJlbnQuX2RpcnR5IHx8IF91bmNhY2hlKHBhcmVudCwgYW5pbWF0aW9uKTsgLy9mb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuIElmIHRoZSBwYXJlbnQncyBjYWNoZSBpcyBhbHJlYWR5IGRpcnR5LCBpdCBhbHJlYWR5IHRvb2sgY2FyZSBvZiBtYXJraW5nIHRoZSBhbmNlc3RvcnMgYXMgZGlydHkgdG9vLCBzbyBza2lwIHRoZSBmdW5jdGlvbiBjYWxsIGhlcmUuXG4gIH1cblxuICByZXR1cm4gYW5pbWF0aW9uO1xufSxcblxuLypcbl90b3RhbFRpbWVUb1RpbWUgPSAoY2xhbXBlZFRvdGFsVGltZSwgZHVyYXRpb24sIHJlcGVhdCwgcmVwZWF0RGVsYXksIHlveW8pID0+IHtcblx0bGV0IGN5Y2xlRHVyYXRpb24gPSBkdXJhdGlvbiArIHJlcGVhdERlbGF5LFxuXHRcdHRpbWUgPSBfcm91bmQoY2xhbXBlZFRvdGFsVGltZSAlIGN5Y2xlRHVyYXRpb24pO1xuXHRpZiAodGltZSA+IGR1cmF0aW9uKSB7XG5cdFx0dGltZSA9IGR1cmF0aW9uO1xuXHR9XG5cdHJldHVybiAoeW95byAmJiAofn4oY2xhbXBlZFRvdGFsVGltZSAvIGN5Y2xlRHVyYXRpb24pICYgMSkpID8gZHVyYXRpb24gLSB0aW1lIDogdGltZTtcbn0sXG4qL1xuX3Bvc3RBZGRDaGVja3MgPSBmdW5jdGlvbiBfcG9zdEFkZENoZWNrcyh0aW1lbGluZSwgY2hpbGQpIHtcbiAgdmFyIHQ7XG5cbiAgaWYgKGNoaWxkLl90aW1lIHx8ICFjaGlsZC5fZHVyICYmIGNoaWxkLl9pbml0dGVkIHx8IGNoaWxkLl9zdGFydCA8IHRpbWVsaW5lLl90aW1lICYmIChjaGlsZC5fZHVyIHx8ICFjaGlsZC5hZGQpKSB7XG4gICAgLy8gaW4gY2FzZSwgZm9yIGV4YW1wbGUsIHRoZSBfc3RhcnQgaXMgbW92ZWQgb24gYSB0d2VlbiB0aGF0IGhhcyBhbHJlYWR5IHJlbmRlcmVkLCBvciBpZiBpdCdzIGJlaW5nIGluc2VydGVkIGludG8gYSB0aW1lbGluZSBCRUZPUkUgd2hlcmUgdGhlIHBsYXloZWFkIGlzIGN1cnJlbnRseS4gSW1hZ2luZSBpdCdzIGF0IGl0cyBlbmQgc3RhdGUsIHRoZW4gdGhlIHN0YXJ0VGltZSBpcyBtb3ZlZCBXQVkgbGF0ZXIgKGFmdGVyIHRoZSBlbmQgb2YgdGhpcyB0aW1lbGluZSksIGl0IHNob3VsZCByZW5kZXIgYXQgaXRzIGJlZ2lubmluZy4gU3BlY2lhbCBjYXNlOiBpZiBpdCdzIGEgdGltZWxpbmUgKGhhcyAuYWRkKCkgbWV0aG9kKSBhbmQgbm8gZHVyYXRpb24sIHdlIGNhbiBza2lwIHJlbmRlcmluZyBiZWNhdXNlIHRoZSB1c2VyIG1heSBiZSBwb3B1bGF0aW5nIGl0IEFGVEVSIGFkZGluZyBpdCB0byBhIHBhcmVudCB0aW1lbGluZSAodW5jb252ZW50aW9uYWwsIGJ1dCBwb3NzaWJsZSwgYW5kIHdlIHdvdWxkbid0IHdhbnQgaXQgdG8gZ2V0IHJlbW92ZWQgaWYgdGhlIHBhcmVudCdzIGF1dG9SZW1vdmVDaGlsZHJlbiBpcyB0cnVlKS5cbiAgICB0ID0gX3BhcmVudFRvQ2hpbGRUb3RhbFRpbWUodGltZWxpbmUucmF3VGltZSgpLCBjaGlsZCk7XG5cbiAgICBpZiAoIWNoaWxkLl9kdXIgfHwgX2NsYW1wKDAsIGNoaWxkLnRvdGFsRHVyYXRpb24oKSwgdCkgLSBjaGlsZC5fdFRpbWUgPiBfdGlueU51bSkge1xuICAgICAgY2hpbGQucmVuZGVyKHQsIHRydWUpO1xuICAgIH1cbiAgfSAvL2lmIHRoZSB0aW1lbGluZSBoYXMgYWxyZWFkeSBlbmRlZCBidXQgdGhlIGluc2VydGVkIHR3ZWVuL3RpbWVsaW5lIGV4dGVuZHMgdGhlIGR1cmF0aW9uLCB3ZSBzaG91bGQgZW5hYmxlIHRoaXMgdGltZWxpbmUgYWdhaW4gc28gdGhhdCBpdCByZW5kZXJzIHByb3Blcmx5LiBXZSBzaG91bGQgYWxzbyBhbGlnbiB0aGUgcGxheWhlYWQgd2l0aCB0aGUgcGFyZW50IHRpbWVsaW5lJ3Mgd2hlbiBhcHByb3ByaWF0ZS5cblxuXG4gIGlmIChfdW5jYWNoZSh0aW1lbGluZSwgY2hpbGQpLl9kcCAmJiB0aW1lbGluZS5faW5pdHRlZCAmJiB0aW1lbGluZS5fdGltZSA+PSB0aW1lbGluZS5fZHVyICYmIHRpbWVsaW5lLl90cykge1xuICAgIC8vaW4gY2FzZSBhbnkgb2YgdGhlIGFuY2VzdG9ycyBoYWQgY29tcGxldGVkIGJ1dCBzaG91bGQgbm93IGJlIGVuYWJsZWQuLi5cbiAgICBpZiAodGltZWxpbmUuX2R1ciA8IHRpbWVsaW5lLmR1cmF0aW9uKCkpIHtcbiAgICAgIHQgPSB0aW1lbGluZTtcblxuICAgICAgd2hpbGUgKHQuX2RwKSB7XG4gICAgICAgIHQucmF3VGltZSgpID49IDAgJiYgdC50b3RhbFRpbWUodC5fdFRpbWUpOyAvL21vdmVzIHRoZSB0aW1lbGluZSAoc2hpZnRzIGl0cyBzdGFydFRpbWUpIGlmIG5lY2Vzc2FyeSwgYW5kIGFsc28gZW5hYmxlcyBpdC4gSWYgaXQncyBjdXJyZW50bHkgemVybywgdGhvdWdoLCBpdCBtYXkgbm90IGJlIHNjaGVkdWxlZCB0byByZW5kZXIgdW50aWwgbGF0ZXIgc28gdGhlcmUncyBubyBuZWVkIHRvIGZvcmNlIGl0IHRvIGFsaWduIHdpdGggdGhlIGN1cnJlbnQgcGxheWhlYWQgcG9zaXRpb24uIE9ubHkgbW92ZSB0byBjYXRjaCB1cCB3aXRoIHRoZSBwbGF5aGVhZC5cblxuICAgICAgICB0ID0gdC5fZHA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGltZWxpbmUuX3pUaW1lID0gLV90aW55TnVtOyAvLyBoZWxwcyBlbnN1cmUgdGhhdCB0aGUgbmV4dCByZW5kZXIoKSB3aWxsIGJlIGZvcmNlZCAoY3Jvc3NpbmdTdGFydCA9IHRydWUgaW4gcmVuZGVyKCkpLCBldmVuIGlmIHRoZSBkdXJhdGlvbiBoYXNuJ3QgY2hhbmdlZCAod2UncmUgYWRkaW5nIGEgY2hpbGQgd2hpY2ggd291bGQgbmVlZCB0byBnZXQgcmVuZGVyZWQpLiBEZWZpbml0ZWx5IGFuIGVkZ2UgY2FzZS4gTm90ZTogd2UgTVVTVCBkbyB0aGlzIEFGVEVSIHRoZSBsb29wIGFib3ZlIHdoZXJlIHRoZSB0b3RhbFRpbWUoKSBtaWdodCB0cmlnZ2VyIGEgcmVuZGVyKCkgYmVjYXVzZSB0aGlzIF9hZGRUb1RpbWVsaW5lKCkgbWV0aG9kIGdldHMgY2FsbGVkIGZyb20gdGhlIEFuaW1hdGlvbiBjb25zdHJ1Y3RvciwgQkVGT1JFIHR3ZWVucyBldmVuIHJlY29yZCB0aGVpciB0YXJnZXRzLCBldGMuIHNvIHdlIHdvdWxkbid0IHdhbnQgdGhpbmdzIHRvIGdldCB0cmlnZ2VyZWQgaW4gdGhlIHdyb25nIG9yZGVyLlxuICB9XG59LFxuICAgIF9hZGRUb1RpbWVsaW5lID0gZnVuY3Rpb24gX2FkZFRvVGltZWxpbmUodGltZWxpbmUsIGNoaWxkLCBwb3NpdGlvbiwgc2tpcENoZWNrcykge1xuICBjaGlsZC5wYXJlbnQgJiYgX3JlbW92ZUZyb21QYXJlbnQoY2hpbGQpO1xuICBjaGlsZC5fc3RhcnQgPSBfcm91bmRQcmVjaXNlKChfaXNOdW1iZXIocG9zaXRpb24pID8gcG9zaXRpb24gOiBwb3NpdGlvbiB8fCB0aW1lbGluZSAhPT0gX2dsb2JhbFRpbWVsaW5lID8gX3BhcnNlUG9zaXRpb24odGltZWxpbmUsIHBvc2l0aW9uLCBjaGlsZCkgOiB0aW1lbGluZS5fdGltZSkgKyBjaGlsZC5fZGVsYXkpO1xuICBjaGlsZC5fZW5kID0gX3JvdW5kUHJlY2lzZShjaGlsZC5fc3RhcnQgKyAoY2hpbGQudG90YWxEdXJhdGlvbigpIC8gTWF0aC5hYnMoY2hpbGQudGltZVNjYWxlKCkpIHx8IDApKTtcblxuICBfYWRkTGlua2VkTGlzdEl0ZW0odGltZWxpbmUsIGNoaWxkLCBcIl9maXJzdFwiLCBcIl9sYXN0XCIsIHRpbWVsaW5lLl9zb3J0ID8gXCJfc3RhcnRcIiA6IDApO1xuXG4gIF9pc0Zyb21PckZyb21TdGFydChjaGlsZCkgfHwgKHRpbWVsaW5lLl9yZWNlbnQgPSBjaGlsZCk7XG4gIHNraXBDaGVja3MgfHwgX3Bvc3RBZGRDaGVja3ModGltZWxpbmUsIGNoaWxkKTtcbiAgdGltZWxpbmUuX3RzIDwgMCAmJiBfYWxpZ25QbGF5aGVhZCh0aW1lbGluZSwgdGltZWxpbmUuX3RUaW1lKTsgLy8gaWYgdGhlIHRpbWVsaW5lIGlzIHJldmVyc2VkIGFuZCB0aGUgbmV3IGNoaWxkIG1ha2VzIGl0IGxvbmdlciwgd2UgbWF5IG5lZWQgdG8gYWRqdXN0IHRoZSBwYXJlbnQncyBfc3RhcnQgKHB1c2ggaXQgYmFjaylcblxuICByZXR1cm4gdGltZWxpbmU7XG59LFxuICAgIF9zY3JvbGxUcmlnZ2VyID0gZnVuY3Rpb24gX3Njcm9sbFRyaWdnZXIoYW5pbWF0aW9uLCB0cmlnZ2VyKSB7XG4gIHJldHVybiAoX2dsb2JhbHMuU2Nyb2xsVHJpZ2dlciB8fCBfbWlzc2luZ1BsdWdpbihcInNjcm9sbFRyaWdnZXJcIiwgdHJpZ2dlcikpICYmIF9nbG9iYWxzLlNjcm9sbFRyaWdnZXIuY3JlYXRlKHRyaWdnZXIsIGFuaW1hdGlvbik7XG59LFxuICAgIF9hdHRlbXB0SW5pdFR3ZWVuID0gZnVuY3Rpb24gX2F0dGVtcHRJbml0VHdlZW4odHdlZW4sIHRpbWUsIGZvcmNlLCBzdXBwcmVzc0V2ZW50cywgdFRpbWUpIHtcbiAgX2luaXRUd2Vlbih0d2VlbiwgdGltZSwgdFRpbWUpO1xuXG4gIGlmICghdHdlZW4uX2luaXR0ZWQpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGlmICghZm9yY2UgJiYgdHdlZW4uX3B0ICYmICFfcmV2ZXJ0aW5nICYmICh0d2Vlbi5fZHVyICYmIHR3ZWVuLnZhcnMubGF6eSAhPT0gZmFsc2UgfHwgIXR3ZWVuLl9kdXIgJiYgdHdlZW4udmFycy5sYXp5KSAmJiBfbGFzdFJlbmRlcmVkRnJhbWUgIT09IF90aWNrZXIuZnJhbWUpIHtcbiAgICBfbGF6eVR3ZWVucy5wdXNoKHR3ZWVuKTtcblxuICAgIHR3ZWVuLl9sYXp5ID0gW3RUaW1lLCBzdXBwcmVzc0V2ZW50c107XG4gICAgcmV0dXJuIDE7XG4gIH1cbn0sXG4gICAgX3BhcmVudFBsYXloZWFkSXNCZWZvcmVTdGFydCA9IGZ1bmN0aW9uIF9wYXJlbnRQbGF5aGVhZElzQmVmb3JlU3RhcnQoX3JlZikge1xuICB2YXIgcGFyZW50ID0gX3JlZi5wYXJlbnQ7XG4gIHJldHVybiBwYXJlbnQgJiYgcGFyZW50Ll90cyAmJiBwYXJlbnQuX2luaXR0ZWQgJiYgIXBhcmVudC5fbG9jayAmJiAocGFyZW50LnJhd1RpbWUoKSA8IDAgfHwgX3BhcmVudFBsYXloZWFkSXNCZWZvcmVTdGFydChwYXJlbnQpKTtcbn0sXG4gICAgLy8gY2hlY2sgcGFyZW50J3MgX2xvY2sgYmVjYXVzZSB3aGVuIGEgdGltZWxpbmUgcmVwZWF0cy95b3lvcyBhbmQgZG9lcyBpdHMgYXJ0aWZpY2lhbCB3cmFwcGluZywgd2Ugc2hvdWxkbid0IGZvcmNlIHRoZSByYXRpbyBiYWNrIHRvIDBcbl9pc0Zyb21PckZyb21TdGFydCA9IGZ1bmN0aW9uIF9pc0Zyb21PckZyb21TdGFydChfcmVmMikge1xuICB2YXIgZGF0YSA9IF9yZWYyLmRhdGE7XG4gIHJldHVybiBkYXRhID09PSBcImlzRnJvbVN0YXJ0XCIgfHwgZGF0YSA9PT0gXCJpc1N0YXJ0XCI7XG59LFxuICAgIF9yZW5kZXJaZXJvRHVyYXRpb25Ud2VlbiA9IGZ1bmN0aW9uIF9yZW5kZXJaZXJvRHVyYXRpb25Ud2Vlbih0d2VlbiwgdG90YWxUaW1lLCBzdXBwcmVzc0V2ZW50cywgZm9yY2UpIHtcbiAgdmFyIHByZXZSYXRpbyA9IHR3ZWVuLnJhdGlvLFxuICAgICAgcmF0aW8gPSB0b3RhbFRpbWUgPCAwIHx8ICF0b3RhbFRpbWUgJiYgKCF0d2Vlbi5fc3RhcnQgJiYgX3BhcmVudFBsYXloZWFkSXNCZWZvcmVTdGFydCh0d2VlbikgJiYgISghdHdlZW4uX2luaXR0ZWQgJiYgX2lzRnJvbU9yRnJvbVN0YXJ0KHR3ZWVuKSkgfHwgKHR3ZWVuLl90cyA8IDAgfHwgdHdlZW4uX2RwLl90cyA8IDApICYmICFfaXNGcm9tT3JGcm9tU3RhcnQodHdlZW4pKSA/IDAgOiAxLFxuICAgICAgLy8gaWYgdGhlIHR3ZWVuIG9yIGl0cyBwYXJlbnQgaXMgcmV2ZXJzZWQgYW5kIHRoZSB0b3RhbFRpbWUgaXMgMCwgd2Ugc2hvdWxkIGdvIHRvIGEgcmF0aW8gb2YgMC4gRWRnZSBjYXNlOiBpZiBhIGZyb20oKSBvciBmcm9tVG8oKSBzdGFnZ2VyIHR3ZWVuIGlzIHBsYWNlZCBsYXRlciBpbiBhIHRpbWVsaW5lLCB0aGUgXCJzdGFydEF0XCIgemVyby1kdXJhdGlvbiB0d2VlbiBjb3VsZCBpbml0aWFsbHkgcmVuZGVyIGF0IGEgdGltZSB3aGVuIHRoZSBwYXJlbnQgdGltZWxpbmUncyBwbGF5aGVhZCBpcyB0ZWNobmljYWxseSBCRUZPUkUgd2hlcmUgdGhpcyB0d2VlbiBpcywgc28gbWFrZSBzdXJlIHRoYXQgYW55IFwiZnJvbVwiIGFuZCBcImZyb21Ub1wiIHN0YXJ0QXQgdHdlZW5zIGFyZSByZW5kZXJlZCB0aGUgZmlyc3QgdGltZSBhdCBhIHJhdGlvIG9mIDEuXG4gIHJlcGVhdERlbGF5ID0gdHdlZW4uX3JEZWxheSxcbiAgICAgIHRUaW1lID0gMCxcbiAgICAgIHB0LFxuICAgICAgaXRlcmF0aW9uLFxuICAgICAgcHJldkl0ZXJhdGlvbjtcblxuICBpZiAocmVwZWF0RGVsYXkgJiYgdHdlZW4uX3JlcGVhdCkge1xuICAgIC8vIGluIGNhc2UgdGhlcmUncyBhIHplcm8tZHVyYXRpb24gdHdlZW4gdGhhdCBoYXMgYSByZXBlYXQgd2l0aCBhIHJlcGVhdERlbGF5XG4gICAgdFRpbWUgPSBfY2xhbXAoMCwgdHdlZW4uX3REdXIsIHRvdGFsVGltZSk7XG4gICAgaXRlcmF0aW9uID0gX2FuaW1hdGlvbkN5Y2xlKHRUaW1lLCByZXBlYXREZWxheSk7XG4gICAgdHdlZW4uX3lveW8gJiYgaXRlcmF0aW9uICYgMSAmJiAocmF0aW8gPSAxIC0gcmF0aW8pO1xuXG4gICAgaWYgKGl0ZXJhdGlvbiAhPT0gX2FuaW1hdGlvbkN5Y2xlKHR3ZWVuLl90VGltZSwgcmVwZWF0RGVsYXkpKSB7XG4gICAgICAvLyBpZiBpdGVyYXRpb24gY2hhbmdlZFxuICAgICAgcHJldlJhdGlvID0gMSAtIHJhdGlvO1xuICAgICAgdHdlZW4udmFycy5yZXBlYXRSZWZyZXNoICYmIHR3ZWVuLl9pbml0dGVkICYmIHR3ZWVuLmludmFsaWRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBpZiAocmF0aW8gIT09IHByZXZSYXRpbyB8fCBfcmV2ZXJ0aW5nIHx8IGZvcmNlIHx8IHR3ZWVuLl96VGltZSA9PT0gX3RpbnlOdW0gfHwgIXRvdGFsVGltZSAmJiB0d2Vlbi5felRpbWUpIHtcbiAgICBpZiAoIXR3ZWVuLl9pbml0dGVkICYmIF9hdHRlbXB0SW5pdFR3ZWVuKHR3ZWVuLCB0b3RhbFRpbWUsIGZvcmNlLCBzdXBwcmVzc0V2ZW50cywgdFRpbWUpKSB7XG4gICAgICAvLyBpZiB3ZSByZW5kZXIgdGhlIHZlcnkgYmVnaW5uaW5nICh0aW1lID09IDApIG9mIGEgZnJvbVRvKCksIHdlIG11c3QgZm9yY2UgdGhlIHJlbmRlciAobm9ybWFsIHR3ZWVucyB3b3VsZG4ndCBuZWVkIHRvIHJlbmRlciBhdCBhIHRpbWUgb2YgMCB3aGVuIHRoZSBwcmV2VGltZSB3YXMgYWxzbyAwKS4gVGhpcyBpcyBhbHNvIG1hbmRhdG9yeSB0byBtYWtlIHN1cmUgb3ZlcndyaXRpbmcga2lja3MgaW4gaW1tZWRpYXRlbHkuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJldkl0ZXJhdGlvbiA9IHR3ZWVuLl96VGltZTtcbiAgICB0d2Vlbi5felRpbWUgPSB0b3RhbFRpbWUgfHwgKHN1cHByZXNzRXZlbnRzID8gX3RpbnlOdW0gOiAwKTsgLy8gd2hlbiB0aGUgcGxheWhlYWQgYXJyaXZlcyBhdCBFWEFDVExZIHRpbWUgMCAocmlnaHQgb24gdG9wKSBvZiBhIHplcm8tZHVyYXRpb24gdHdlZW4sIHdlIG5lZWQgdG8gZGlzY2VybiBpZiBldmVudHMgYXJlIHN1cHByZXNzZWQgc28gdGhhdCB3aGVuIHRoZSBwbGF5aGVhZCBtb3ZlcyBhZ2FpbiAobmV4dCB0aW1lKSwgaXQnbGwgdHJpZ2dlciB0aGUgY2FsbGJhY2suIElmIGV2ZW50cyBhcmUgTk9UIHN1cHByZXNzZWQsIG9idmlvdXNseSB0aGUgY2FsbGJhY2sgd291bGQgYmUgdHJpZ2dlcmVkIGluIHRoaXMgcmVuZGVyLiBCYXNpY2FsbHksIHRoZSBjYWxsYmFjayBzaG91bGQgZmlyZSBlaXRoZXIgd2hlbiB0aGUgcGxheWhlYWQgQVJSSVZFUyBvciBMRUFWRVMgdGhpcyBleGFjdCBzcG90LCBub3QgYm90aC4gSW1hZ2luZSBkb2luZyBhIHRpbWVsaW5lLnNlZWsoMCkgYW5kIHRoZXJlJ3MgYSBjYWxsYmFjayB0aGF0IHNpdHMgYXQgMC4gU2luY2UgZXZlbnRzIGFyZSBzdXBwcmVzc2VkIG9uIHRoYXQgc2VlaygpIGJ5IGRlZmF1bHQsIG5vdGhpbmcgd2lsbCBmaXJlLCBidXQgd2hlbiB0aGUgcGxheWhlYWQgbW92ZXMgb2ZmIG9mIHRoYXQgcG9zaXRpb24sIHRoZSBjYWxsYmFjayBzaG91bGQgZmlyZS4gVGhpcyBiZWhhdmlvciBpcyB3aGF0IHBlb3BsZSBpbnR1aXRpdmVseSBleHBlY3QuXG5cbiAgICBzdXBwcmVzc0V2ZW50cyB8fCAoc3VwcHJlc3NFdmVudHMgPSB0b3RhbFRpbWUgJiYgIXByZXZJdGVyYXRpb24pOyAvLyBpZiBpdCB3YXMgcmVuZGVyZWQgcHJldmlvdXNseSBhdCBleGFjdGx5IDAgKF96VGltZSkgYW5kIG5vdyB0aGUgcGxheWhlYWQgaXMgbW92aW5nIGF3YXksIERPTidUIGZpcmUgY2FsbGJhY2tzIG90aGVyd2lzZSB0aGV5J2xsIHNlZW0gbGlrZSBkdXBsaWNhdGVzLlxuXG4gICAgdHdlZW4ucmF0aW8gPSByYXRpbztcbiAgICB0d2Vlbi5fZnJvbSAmJiAocmF0aW8gPSAxIC0gcmF0aW8pO1xuICAgIHR3ZWVuLl90aW1lID0gMDtcbiAgICB0d2Vlbi5fdFRpbWUgPSB0VGltZTtcbiAgICBwdCA9IHR3ZWVuLl9wdDtcblxuICAgIHdoaWxlIChwdCkge1xuICAgICAgcHQucihyYXRpbywgcHQuZCk7XG4gICAgICBwdCA9IHB0Ll9uZXh0O1xuICAgIH1cblxuICAgIHRvdGFsVGltZSA8IDAgJiYgX3Jld2luZFN0YXJ0QXQodHdlZW4sIHRvdGFsVGltZSwgc3VwcHJlc3NFdmVudHMsIHRydWUpO1xuICAgIHR3ZWVuLl9vblVwZGF0ZSAmJiAhc3VwcHJlc3NFdmVudHMgJiYgX2NhbGxiYWNrKHR3ZWVuLCBcIm9uVXBkYXRlXCIpO1xuICAgIHRUaW1lICYmIHR3ZWVuLl9yZXBlYXQgJiYgIXN1cHByZXNzRXZlbnRzICYmIHR3ZWVuLnBhcmVudCAmJiBfY2FsbGJhY2sodHdlZW4sIFwib25SZXBlYXRcIik7XG5cbiAgICBpZiAoKHRvdGFsVGltZSA+PSB0d2Vlbi5fdER1ciB8fCB0b3RhbFRpbWUgPCAwKSAmJiB0d2Vlbi5yYXRpbyA9PT0gcmF0aW8pIHtcbiAgICAgIHJhdGlvICYmIF9yZW1vdmVGcm9tUGFyZW50KHR3ZWVuLCAxKTtcblxuICAgICAgaWYgKCFzdXBwcmVzc0V2ZW50cyAmJiAhX3JldmVydGluZykge1xuICAgICAgICBfY2FsbGJhY2sodHdlZW4sIHJhdGlvID8gXCJvbkNvbXBsZXRlXCIgOiBcIm9uUmV2ZXJzZUNvbXBsZXRlXCIsIHRydWUpO1xuXG4gICAgICAgIHR3ZWVuLl9wcm9tICYmIHR3ZWVuLl9wcm9tKCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKCF0d2Vlbi5felRpbWUpIHtcbiAgICB0d2Vlbi5felRpbWUgPSB0b3RhbFRpbWU7XG4gIH1cbn0sXG4gICAgX2ZpbmROZXh0UGF1c2VUd2VlbiA9IGZ1bmN0aW9uIF9maW5kTmV4dFBhdXNlVHdlZW4oYW5pbWF0aW9uLCBwcmV2VGltZSwgdGltZSkge1xuICB2YXIgY2hpbGQ7XG5cbiAgaWYgKHRpbWUgPiBwcmV2VGltZSkge1xuICAgIGNoaWxkID0gYW5pbWF0aW9uLl9maXJzdDtcblxuICAgIHdoaWxlIChjaGlsZCAmJiBjaGlsZC5fc3RhcnQgPD0gdGltZSkge1xuICAgICAgaWYgKGNoaWxkLmRhdGEgPT09IFwiaXNQYXVzZVwiICYmIGNoaWxkLl9zdGFydCA+IHByZXZUaW1lKSB7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cblxuICAgICAgY2hpbGQgPSBjaGlsZC5fbmV4dDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY2hpbGQgPSBhbmltYXRpb24uX2xhc3Q7XG5cbiAgICB3aGlsZSAoY2hpbGQgJiYgY2hpbGQuX3N0YXJ0ID49IHRpbWUpIHtcbiAgICAgIGlmIChjaGlsZC5kYXRhID09PSBcImlzUGF1c2VcIiAmJiBjaGlsZC5fc3RhcnQgPCBwcmV2VGltZSkge1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkID0gY2hpbGQuX3ByZXY7XG4gICAgfVxuICB9XG59LFxuICAgIF9zZXREdXJhdGlvbiA9IGZ1bmN0aW9uIF9zZXREdXJhdGlvbihhbmltYXRpb24sIGR1cmF0aW9uLCBza2lwVW5jYWNoZSwgbGVhdmVQbGF5aGVhZCkge1xuICB2YXIgcmVwZWF0ID0gYW5pbWF0aW9uLl9yZXBlYXQsXG4gICAgICBkdXIgPSBfcm91bmRQcmVjaXNlKGR1cmF0aW9uKSB8fCAwLFxuICAgICAgdG90YWxQcm9ncmVzcyA9IGFuaW1hdGlvbi5fdFRpbWUgLyBhbmltYXRpb24uX3REdXI7XG4gIHRvdGFsUHJvZ3Jlc3MgJiYgIWxlYXZlUGxheWhlYWQgJiYgKGFuaW1hdGlvbi5fdGltZSAqPSBkdXIgLyBhbmltYXRpb24uX2R1cik7XG4gIGFuaW1hdGlvbi5fZHVyID0gZHVyO1xuICBhbmltYXRpb24uX3REdXIgPSAhcmVwZWF0ID8gZHVyIDogcmVwZWF0IDwgMCA/IDFlMTAgOiBfcm91bmRQcmVjaXNlKGR1ciAqIChyZXBlYXQgKyAxKSArIGFuaW1hdGlvbi5fckRlbGF5ICogcmVwZWF0KTtcbiAgdG90YWxQcm9ncmVzcyA+IDAgJiYgIWxlYXZlUGxheWhlYWQgJiYgX2FsaWduUGxheWhlYWQoYW5pbWF0aW9uLCBhbmltYXRpb24uX3RUaW1lID0gYW5pbWF0aW9uLl90RHVyICogdG90YWxQcm9ncmVzcyk7XG4gIGFuaW1hdGlvbi5wYXJlbnQgJiYgX3NldEVuZChhbmltYXRpb24pO1xuICBza2lwVW5jYWNoZSB8fCBfdW5jYWNoZShhbmltYXRpb24ucGFyZW50LCBhbmltYXRpb24pO1xuICByZXR1cm4gYW5pbWF0aW9uO1xufSxcbiAgICBfb25VcGRhdGVUb3RhbER1cmF0aW9uID0gZnVuY3Rpb24gX29uVXBkYXRlVG90YWxEdXJhdGlvbihhbmltYXRpb24pIHtcbiAgcmV0dXJuIGFuaW1hdGlvbiBpbnN0YW5jZW9mIFRpbWVsaW5lID8gX3VuY2FjaGUoYW5pbWF0aW9uKSA6IF9zZXREdXJhdGlvbihhbmltYXRpb24sIGFuaW1hdGlvbi5fZHVyKTtcbn0sXG4gICAgX3plcm9Qb3NpdGlvbiA9IHtcbiAgX3N0YXJ0OiAwLFxuICBlbmRUaW1lOiBfZW1wdHlGdW5jLFxuICB0b3RhbER1cmF0aW9uOiBfZW1wdHlGdW5jXG59LFxuICAgIF9wYXJzZVBvc2l0aW9uID0gZnVuY3Rpb24gX3BhcnNlUG9zaXRpb24oYW5pbWF0aW9uLCBwb3NpdGlvbiwgcGVyY2VudEFuaW1hdGlvbikge1xuICB2YXIgbGFiZWxzID0gYW5pbWF0aW9uLmxhYmVscyxcbiAgICAgIHJlY2VudCA9IGFuaW1hdGlvbi5fcmVjZW50IHx8IF96ZXJvUG9zaXRpb24sXG4gICAgICBjbGlwcGVkRHVyYXRpb24gPSBhbmltYXRpb24uZHVyYXRpb24oKSA+PSBfYmlnTnVtID8gcmVjZW50LmVuZFRpbWUoZmFsc2UpIDogYW5pbWF0aW9uLl9kdXIsXG4gICAgICAvL2luIGNhc2UgdGhlcmUncyBhIGNoaWxkIHRoYXQgaW5maW5pdGVseSByZXBlYXRzLCB1c2VycyBhbG1vc3QgbmV2ZXIgaW50ZW5kIGZvciB0aGUgaW5zZXJ0aW9uIHBvaW50IG9mIGEgbmV3IGNoaWxkIHRvIGJlIGJhc2VkIG9uIGEgU1VQRVIgbG9uZyB2YWx1ZSBsaWtlIHRoYXQgc28gd2UgY2xpcCBpdCBhbmQgYXNzdW1lIHRoZSBtb3N0IHJlY2VudGx5LWFkZGVkIGNoaWxkJ3MgZW5kVGltZSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICBpLFxuICAgICAgb2Zmc2V0LFxuICAgICAgaXNQZXJjZW50O1xuXG4gIGlmIChfaXNTdHJpbmcocG9zaXRpb24pICYmIChpc05hTihwb3NpdGlvbikgfHwgcG9zaXRpb24gaW4gbGFiZWxzKSkge1xuICAgIC8vaWYgdGhlIHN0cmluZyBpcyBhIG51bWJlciBsaWtlIFwiMVwiLCBjaGVjayB0byBzZWUgaWYgdGhlcmUncyBhIGxhYmVsIHdpdGggdGhhdCBuYW1lLCBvdGhlcndpc2UgaW50ZXJwcmV0IGl0IGFzIGEgbnVtYmVyIChhYnNvbHV0ZSB2YWx1ZSkuXG4gICAgb2Zmc2V0ID0gcG9zaXRpb24uY2hhckF0KDApO1xuICAgIGlzUGVyY2VudCA9IHBvc2l0aW9uLnN1YnN0cigtMSkgPT09IFwiJVwiO1xuICAgIGkgPSBwb3NpdGlvbi5pbmRleE9mKFwiPVwiKTtcblxuICAgIGlmIChvZmZzZXQgPT09IFwiPFwiIHx8IG9mZnNldCA9PT0gXCI+XCIpIHtcbiAgICAgIGkgPj0gMCAmJiAocG9zaXRpb24gPSBwb3NpdGlvbi5yZXBsYWNlKC89LywgXCJcIikpO1xuICAgICAgcmV0dXJuIChvZmZzZXQgPT09IFwiPFwiID8gcmVjZW50Ll9zdGFydCA6IHJlY2VudC5lbmRUaW1lKHJlY2VudC5fcmVwZWF0ID49IDApKSArIChwYXJzZUZsb2F0KHBvc2l0aW9uLnN1YnN0cigxKSkgfHwgMCkgKiAoaXNQZXJjZW50ID8gKGkgPCAwID8gcmVjZW50IDogcGVyY2VudEFuaW1hdGlvbikudG90YWxEdXJhdGlvbigpIC8gMTAwIDogMSk7XG4gICAgfVxuXG4gICAgaWYgKGkgPCAwKSB7XG4gICAgICBwb3NpdGlvbiBpbiBsYWJlbHMgfHwgKGxhYmVsc1twb3NpdGlvbl0gPSBjbGlwcGVkRHVyYXRpb24pO1xuICAgICAgcmV0dXJuIGxhYmVsc1twb3NpdGlvbl07XG4gICAgfVxuXG4gICAgb2Zmc2V0ID0gcGFyc2VGbG9hdChwb3NpdGlvbi5jaGFyQXQoaSAtIDEpICsgcG9zaXRpb24uc3Vic3RyKGkgKyAxKSk7XG5cbiAgICBpZiAoaXNQZXJjZW50ICYmIHBlcmNlbnRBbmltYXRpb24pIHtcbiAgICAgIG9mZnNldCA9IG9mZnNldCAvIDEwMCAqIChfaXNBcnJheShwZXJjZW50QW5pbWF0aW9uKSA/IHBlcmNlbnRBbmltYXRpb25bMF0gOiBwZXJjZW50QW5pbWF0aW9uKS50b3RhbER1cmF0aW9uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGkgPiAxID8gX3BhcnNlUG9zaXRpb24oYW5pbWF0aW9uLCBwb3NpdGlvbi5zdWJzdHIoMCwgaSAtIDEpLCBwZXJjZW50QW5pbWF0aW9uKSArIG9mZnNldCA6IGNsaXBwZWREdXJhdGlvbiArIG9mZnNldDtcbiAgfVxuXG4gIHJldHVybiBwb3NpdGlvbiA9PSBudWxsID8gY2xpcHBlZER1cmF0aW9uIDogK3Bvc2l0aW9uO1xufSxcbiAgICBfY3JlYXRlVHdlZW5UeXBlID0gZnVuY3Rpb24gX2NyZWF0ZVR3ZWVuVHlwZSh0eXBlLCBwYXJhbXMsIHRpbWVsaW5lKSB7XG4gIHZhciBpc0xlZ2FjeSA9IF9pc051bWJlcihwYXJhbXNbMV0pLFxuICAgICAgdmFyc0luZGV4ID0gKGlzTGVnYWN5ID8gMiA6IDEpICsgKHR5cGUgPCAyID8gMCA6IDEpLFxuICAgICAgdmFycyA9IHBhcmFtc1t2YXJzSW5kZXhdLFxuICAgICAgaXJWYXJzLFxuICAgICAgcGFyZW50O1xuXG4gIGlzTGVnYWN5ICYmICh2YXJzLmR1cmF0aW9uID0gcGFyYW1zWzFdKTtcbiAgdmFycy5wYXJlbnQgPSB0aW1lbGluZTtcblxuICBpZiAodHlwZSkge1xuICAgIGlyVmFycyA9IHZhcnM7XG4gICAgcGFyZW50ID0gdGltZWxpbmU7XG5cbiAgICB3aGlsZSAocGFyZW50ICYmICEoXCJpbW1lZGlhdGVSZW5kZXJcIiBpbiBpclZhcnMpKSB7XG4gICAgICAvLyBpbmhlcml0YW5jZSBoYXNuJ3QgaGFwcGVuZWQgeWV0LCBidXQgc29tZW9uZSBtYXkgaGF2ZSBzZXQgYSBkZWZhdWx0IGluIGFuIGFuY2VzdG9yIHRpbWVsaW5lLiBXZSBjb3VsZCBkbyB2YXJzLmltbWVkaWF0ZVJlbmRlciA9IF9pc05vdEZhbHNlKF9pbmhlcml0RGVmYXVsdHModmFycykuaW1tZWRpYXRlUmVuZGVyKSBidXQgdGhhdCdkIGV4YWN0IGEgc2xpZ2h0IHBlcmZvcm1hbmNlIHBlbmFsdHkgYmVjYXVzZSBfaW5oZXJpdERlZmF1bHRzKCkgYWxzbyBydW5zIGluIHRoZSBUd2VlbiBjb25zdHJ1Y3Rvci4gV2UncmUgcGF5aW5nIGEgc21hbGwga2IgcHJpY2UgaGVyZSB0byBnYWluIHNwZWVkLlxuICAgICAgaXJWYXJzID0gcGFyZW50LnZhcnMuZGVmYXVsdHMgfHwge307XG4gICAgICBwYXJlbnQgPSBfaXNOb3RGYWxzZShwYXJlbnQudmFycy5pbmhlcml0KSAmJiBwYXJlbnQucGFyZW50O1xuICAgIH1cblxuICAgIHZhcnMuaW1tZWRpYXRlUmVuZGVyID0gX2lzTm90RmFsc2UoaXJWYXJzLmltbWVkaWF0ZVJlbmRlcik7XG4gICAgdHlwZSA8IDIgPyB2YXJzLnJ1bkJhY2t3YXJkcyA9IDEgOiB2YXJzLnN0YXJ0QXQgPSBwYXJhbXNbdmFyc0luZGV4IC0gMV07IC8vIFwiZnJvbVwiIHZhcnNcbiAgfVxuXG4gIHJldHVybiBuZXcgVHdlZW4ocGFyYW1zWzBdLCB2YXJzLCBwYXJhbXNbdmFyc0luZGV4ICsgMV0pO1xufSxcbiAgICBfY29uZGl0aW9uYWxSZXR1cm4gPSBmdW5jdGlvbiBfY29uZGl0aW9uYWxSZXR1cm4odmFsdWUsIGZ1bmMpIHtcbiAgcmV0dXJuIHZhbHVlIHx8IHZhbHVlID09PSAwID8gZnVuYyh2YWx1ZSkgOiBmdW5jO1xufSxcbiAgICBfY2xhbXAgPSBmdW5jdGlvbiBfY2xhbXAobWluLCBtYXgsIHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA8IG1pbiA/IG1pbiA6IHZhbHVlID4gbWF4ID8gbWF4IDogdmFsdWU7XG59LFxuICAgIGdldFVuaXQgPSBmdW5jdGlvbiBnZXRVbml0KHZhbHVlLCB2KSB7XG4gIHJldHVybiAhX2lzU3RyaW5nKHZhbHVlKSB8fCAhKHYgPSBfdW5pdEV4cC5leGVjKHZhbHVlKSkgPyBcIlwiIDogdlsxXTtcbn0sXG4gICAgLy8gbm90ZTogcHJvdGVjdCBhZ2FpbnN0IHBhZGRlZCBudW1iZXJzIGFzIHN0cmluZ3MsIGxpa2UgXCIxMDAuMTAwXCIuIFRoYXQgc2hvdWxkbid0IHJldHVybiBcIjAwXCIgYXMgdGhlIHVuaXQuIElmIGl0J3MgbnVtZXJpYywgcmV0dXJuIG5vIHVuaXQuXG5jbGFtcCA9IGZ1bmN0aW9uIGNsYW1wKG1pbiwgbWF4LCB2YWx1ZSkge1xuICByZXR1cm4gX2NvbmRpdGlvbmFsUmV0dXJuKHZhbHVlLCBmdW5jdGlvbiAodikge1xuICAgIHJldHVybiBfY2xhbXAobWluLCBtYXgsIHYpO1xuICB9KTtcbn0sXG4gICAgX3NsaWNlID0gW10uc2xpY2UsXG4gICAgX2lzQXJyYXlMaWtlID0gZnVuY3Rpb24gX2lzQXJyYXlMaWtlKHZhbHVlLCBub25FbXB0eSkge1xuICByZXR1cm4gdmFsdWUgJiYgX2lzT2JqZWN0KHZhbHVlKSAmJiBcImxlbmd0aFwiIGluIHZhbHVlICYmICghbm9uRW1wdHkgJiYgIXZhbHVlLmxlbmd0aCB8fCB2YWx1ZS5sZW5ndGggLSAxIGluIHZhbHVlICYmIF9pc09iamVjdCh2YWx1ZVswXSkpICYmICF2YWx1ZS5ub2RlVHlwZSAmJiB2YWx1ZSAhPT0gX3dpbjtcbn0sXG4gICAgX2ZsYXR0ZW4gPSBmdW5jdGlvbiBfZmxhdHRlbihhciwgbGVhdmVTdHJpbmdzLCBhY2N1bXVsYXRvcikge1xuICBpZiAoYWNjdW11bGF0b3IgPT09IHZvaWQgMCkge1xuICAgIGFjY3VtdWxhdG9yID0gW107XG4gIH1cblxuICByZXR1cm4gYXIuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB2YXIgX2FjY3VtdWxhdG9yO1xuXG4gICAgcmV0dXJuIF9pc1N0cmluZyh2YWx1ZSkgJiYgIWxlYXZlU3RyaW5ncyB8fCBfaXNBcnJheUxpa2UodmFsdWUsIDEpID8gKF9hY2N1bXVsYXRvciA9IGFjY3VtdWxhdG9yKS5wdXNoLmFwcGx5KF9hY2N1bXVsYXRvciwgdG9BcnJheSh2YWx1ZSkpIDogYWNjdW11bGF0b3IucHVzaCh2YWx1ZSk7XG4gIH0pIHx8IGFjY3VtdWxhdG9yO1xufSxcbiAgICAvL3Rha2VzIGFueSB2YWx1ZSBhbmQgcmV0dXJucyBhbiBhcnJheS4gSWYgaXQncyBhIHN0cmluZyAoYW5kIGxlYXZlU3RyaW5ncyBpc24ndCB0cnVlKSwgaXQnbGwgdXNlIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoKSBhbmQgY29udmVydCB0aGF0IHRvIGFuIGFycmF5LiBJdCdsbCBhbHNvIGFjY2VwdCBpdGVyYWJsZXMgbGlrZSBqUXVlcnkgb2JqZWN0cy5cbnRvQXJyYXkgPSBmdW5jdGlvbiB0b0FycmF5KHZhbHVlLCBzY29wZSwgbGVhdmVTdHJpbmdzKSB7XG4gIHJldHVybiBfY29udGV4dCAmJiAhc2NvcGUgJiYgX2NvbnRleHQuc2VsZWN0b3IgPyBfY29udGV4dC5zZWxlY3Rvcih2YWx1ZSkgOiBfaXNTdHJpbmcodmFsdWUpICYmICFsZWF2ZVN0cmluZ3MgJiYgKF9jb3JlSW5pdHRlZCB8fCAhX3dha2UoKSkgPyBfc2xpY2UuY2FsbCgoc2NvcGUgfHwgX2RvYykucXVlcnlTZWxlY3RvckFsbCh2YWx1ZSksIDApIDogX2lzQXJyYXkodmFsdWUpID8gX2ZsYXR0ZW4odmFsdWUsIGxlYXZlU3RyaW5ncykgOiBfaXNBcnJheUxpa2UodmFsdWUpID8gX3NsaWNlLmNhbGwodmFsdWUsIDApIDogdmFsdWUgPyBbdmFsdWVdIDogW107XG59LFxuICAgIHNlbGVjdG9yID0gZnVuY3Rpb24gc2VsZWN0b3IodmFsdWUpIHtcbiAgdmFsdWUgPSB0b0FycmF5KHZhbHVlKVswXSB8fCBfd2FybihcIkludmFsaWQgc2NvcGVcIikgfHwge307XG4gIHJldHVybiBmdW5jdGlvbiAodikge1xuICAgIHZhciBlbCA9IHZhbHVlLmN1cnJlbnQgfHwgdmFsdWUubmF0aXZlRWxlbWVudCB8fCB2YWx1ZTtcbiAgICByZXR1cm4gdG9BcnJheSh2LCBlbC5xdWVyeVNlbGVjdG9yQWxsID8gZWwgOiBlbCA9PT0gdmFsdWUgPyBfd2FybihcIkludmFsaWQgc2NvcGVcIikgfHwgX2RvYy5jcmVhdGVFbGVtZW50KFwiZGl2XCIpIDogdmFsdWUpO1xuICB9O1xufSxcbiAgICBzaHVmZmxlID0gZnVuY3Rpb24gc2h1ZmZsZShhKSB7XG4gIHJldHVybiBhLnNvcnQoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAuNSAtIE1hdGgucmFuZG9tKCk7XG4gIH0pO1xufSxcbiAgICAvLyBhbHRlcm5hdGl2ZSB0aGF0J3MgYSBiaXQgZmFzdGVyIGFuZCBtb3JlIHJlbGlhYmx5IGRpdmVyc2UgYnV0IGJpZ2dlcjogICBmb3IgKGxldCBqLCB2LCBpID0gYS5sZW5ndGg7IGk7IGogPSAoTWF0aC5yYW5kb20oKSAqIGkpIHwgMCwgdiA9IGFbLS1pXSwgYVtpXSA9IGFbal0sIGFbal0gPSB2KTsgcmV0dXJuIGE7XG4vL2ZvciBkaXN0cmlidXRpbmcgdmFsdWVzIGFjcm9zcyBhbiBhcnJheS4gQ2FuIGFjY2VwdCBhIG51bWJlciwgYSBmdW5jdGlvbiBvciAobW9zdCBjb21tb25seSkgYSBmdW5jdGlvbiB3aGljaCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6IHtiYXNlLCBhbW91bnQsIGZyb20sIGVhc2UsIGdyaWQsIGF4aXMsIGxlbmd0aCwgZWFjaH0uIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGV4cGVjdHMgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOiBpbmRleCwgdGFyZ2V0LCBhcnJheS4gUmVjb2duaXplcyB0aGUgZm9sbG93aW5nXG5kaXN0cmlidXRlID0gZnVuY3Rpb24gZGlzdHJpYnV0ZSh2KSB7XG4gIGlmIChfaXNGdW5jdGlvbih2KSkge1xuICAgIHJldHVybiB2O1xuICB9XG5cbiAgdmFyIHZhcnMgPSBfaXNPYmplY3QodikgPyB2IDoge1xuICAgIGVhY2g6IHZcbiAgfSxcbiAgICAgIC8vbjoxIGlzIGp1c3QgdG8gaW5kaWNhdGUgdiB3YXMgYSBudW1iZXI7IHdlIGxldmVyYWdlIHRoYXQgbGF0ZXIgdG8gc2V0IHYgYWNjb3JkaW5nIHRvIHRoZSBsZW5ndGggd2UgZ2V0LiBJZiBhIG51bWJlciBpcyBwYXNzZWQgaW4sIHdlIHRyZWF0IGl0IGxpa2UgdGhlIG9sZCBzdGFnZ2VyIHZhbHVlIHdoZXJlIDAuMSwgZm9yIGV4YW1wbGUsIHdvdWxkIG1lYW4gdGhhdCB0aGluZ3Mgd291bGQgYmUgZGlzdHJpYnV0ZWQgd2l0aCAwLjEgYmV0d2VlbiBlYWNoIGVsZW1lbnQgaW4gdGhlIGFycmF5IHJhdGhlciB0aGFuIGEgdG90YWwgXCJhbW91bnRcIiB0aGF0J3MgY2h1bmtlZCBvdXQgYW1vbmcgdGhlbSBhbGwuXG4gIGVhc2UgPSBfcGFyc2VFYXNlKHZhcnMuZWFzZSksXG4gICAgICBmcm9tID0gdmFycy5mcm9tIHx8IDAsXG4gICAgICBiYXNlID0gcGFyc2VGbG9hdCh2YXJzLmJhc2UpIHx8IDAsXG4gICAgICBjYWNoZSA9IHt9LFxuICAgICAgaXNEZWNpbWFsID0gZnJvbSA+IDAgJiYgZnJvbSA8IDEsXG4gICAgICByYXRpb3MgPSBpc05hTihmcm9tKSB8fCBpc0RlY2ltYWwsXG4gICAgICBheGlzID0gdmFycy5heGlzLFxuICAgICAgcmF0aW9YID0gZnJvbSxcbiAgICAgIHJhdGlvWSA9IGZyb207XG5cbiAgaWYgKF9pc1N0cmluZyhmcm9tKSkge1xuICAgIHJhdGlvWCA9IHJhdGlvWSA9IHtcbiAgICAgIGNlbnRlcjogLjUsXG4gICAgICBlZGdlczogLjUsXG4gICAgICBlbmQ6IDFcbiAgICB9W2Zyb21dIHx8IDA7XG4gIH0gZWxzZSBpZiAoIWlzRGVjaW1hbCAmJiByYXRpb3MpIHtcbiAgICByYXRpb1ggPSBmcm9tWzBdO1xuICAgIHJhdGlvWSA9IGZyb21bMV07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGksIHRhcmdldCwgYSkge1xuICAgIHZhciBsID0gKGEgfHwgdmFycykubGVuZ3RoLFxuICAgICAgICBkaXN0YW5jZXMgPSBjYWNoZVtsXSxcbiAgICAgICAgb3JpZ2luWCxcbiAgICAgICAgb3JpZ2luWSxcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgZCxcbiAgICAgICAgaixcbiAgICAgICAgbWF4LFxuICAgICAgICBtaW4sXG4gICAgICAgIHdyYXBBdDtcblxuICAgIGlmICghZGlzdGFuY2VzKSB7XG4gICAgICB3cmFwQXQgPSB2YXJzLmdyaWQgPT09IFwiYXV0b1wiID8gMCA6ICh2YXJzLmdyaWQgfHwgWzEsIF9iaWdOdW1dKVsxXTtcblxuICAgICAgaWYgKCF3cmFwQXQpIHtcbiAgICAgICAgbWF4ID0gLV9iaWdOdW07XG5cbiAgICAgICAgd2hpbGUgKG1heCA8IChtYXggPSBhW3dyYXBBdCsrXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0KSAmJiB3cmFwQXQgPCBsKSB7fVxuXG4gICAgICAgIHdyYXBBdCA8IGwgJiYgd3JhcEF0LS07XG4gICAgICB9XG5cbiAgICAgIGRpc3RhbmNlcyA9IGNhY2hlW2xdID0gW107XG4gICAgICBvcmlnaW5YID0gcmF0aW9zID8gTWF0aC5taW4od3JhcEF0LCBsKSAqIHJhdGlvWCAtIC41IDogZnJvbSAlIHdyYXBBdDtcbiAgICAgIG9yaWdpblkgPSB3cmFwQXQgPT09IF9iaWdOdW0gPyAwIDogcmF0aW9zID8gbCAqIHJhdGlvWSAvIHdyYXBBdCAtIC41IDogZnJvbSAvIHdyYXBBdCB8IDA7XG4gICAgICBtYXggPSAwO1xuICAgICAgbWluID0gX2JpZ051bTtcblxuICAgICAgZm9yIChqID0gMDsgaiA8IGw7IGorKykge1xuICAgICAgICB4ID0gaiAlIHdyYXBBdCAtIG9yaWdpblg7XG4gICAgICAgIHkgPSBvcmlnaW5ZIC0gKGogLyB3cmFwQXQgfCAwKTtcbiAgICAgICAgZGlzdGFuY2VzW2pdID0gZCA9ICFheGlzID8gX3NxcnQoeCAqIHggKyB5ICogeSkgOiBNYXRoLmFicyhheGlzID09PSBcInlcIiA/IHkgOiB4KTtcbiAgICAgICAgZCA+IG1heCAmJiAobWF4ID0gZCk7XG4gICAgICAgIGQgPCBtaW4gJiYgKG1pbiA9IGQpO1xuICAgICAgfVxuXG4gICAgICBmcm9tID09PSBcInJhbmRvbVwiICYmIHNodWZmbGUoZGlzdGFuY2VzKTtcbiAgICAgIGRpc3RhbmNlcy5tYXggPSBtYXggLSBtaW47XG4gICAgICBkaXN0YW5jZXMubWluID0gbWluO1xuICAgICAgZGlzdGFuY2VzLnYgPSBsID0gKHBhcnNlRmxvYXQodmFycy5hbW91bnQpIHx8IHBhcnNlRmxvYXQodmFycy5lYWNoKSAqICh3cmFwQXQgPiBsID8gbCAtIDEgOiAhYXhpcyA/IE1hdGgubWF4KHdyYXBBdCwgbCAvIHdyYXBBdCkgOiBheGlzID09PSBcInlcIiA/IGwgLyB3cmFwQXQgOiB3cmFwQXQpIHx8IDApICogKGZyb20gPT09IFwiZWRnZXNcIiA/IC0xIDogMSk7XG4gICAgICBkaXN0YW5jZXMuYiA9IGwgPCAwID8gYmFzZSAtIGwgOiBiYXNlO1xuICAgICAgZGlzdGFuY2VzLnUgPSBnZXRVbml0KHZhcnMuYW1vdW50IHx8IHZhcnMuZWFjaCkgfHwgMDsgLy91bml0XG5cbiAgICAgIGVhc2UgPSBlYXNlICYmIGwgPCAwID8gX2ludmVydEVhc2UoZWFzZSkgOiBlYXNlO1xuICAgIH1cblxuICAgIGwgPSAoZGlzdGFuY2VzW2ldIC0gZGlzdGFuY2VzLm1pbikgLyBkaXN0YW5jZXMubWF4IHx8IDA7XG4gICAgcmV0dXJuIF9yb3VuZFByZWNpc2UoZGlzdGFuY2VzLmIgKyAoZWFzZSA/IGVhc2UobCkgOiBsKSAqIGRpc3RhbmNlcy52KSArIGRpc3RhbmNlcy51OyAvL3JvdW5kIGluIG9yZGVyIHRvIHdvcmsgYXJvdW5kIGZsb2F0aW5nIHBvaW50IGVycm9yc1xuICB9O1xufSxcbiAgICBfcm91bmRNb2RpZmllciA9IGZ1bmN0aW9uIF9yb3VuZE1vZGlmaWVyKHYpIHtcbiAgLy9wYXNzIGluIDAuMSBnZXQgYSBmdW5jdGlvbiB0aGF0J2xsIHJvdW5kIHRvIHRoZSBuZWFyZXN0IHRlbnRoLCBvciA1IHRvIHJvdW5kIHRvIHRoZSBjbG9zZXN0IDUsIG9yIDAuMDAxIHRvIHRoZSBjbG9zZXN0IDEwMDB0aCwgZXRjLlxuICB2YXIgcCA9IE1hdGgucG93KDEwLCAoKHYgKyBcIlwiKS5zcGxpdChcIi5cIilbMV0gfHwgXCJcIikubGVuZ3RoKTsgLy90byBhdm9pZCBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAobGlrZSAyNCAqIDAuMSA9PSAyLjQwMDAwMDAwMDAwMDAwMDQpLCB3ZSBjaG9wIG9mZiBhdCBhIHNwZWNpZmljIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyAobXVjaCBmYXN0ZXIgdGhhbiB0b0ZpeGVkKCkpXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChyYXcpIHtcbiAgICB2YXIgbiA9IF9yb3VuZFByZWNpc2UoTWF0aC5yb3VuZChwYXJzZUZsb2F0KHJhdykgLyB2KSAqIHYgKiBwKTtcblxuICAgIHJldHVybiAobiAtIG4gJSAxKSAvIHAgKyAoX2lzTnVtYmVyKHJhdykgPyAwIDogZ2V0VW5pdChyYXcpKTsgLy8gbiAtIG4gJSAxIHJlcGxhY2VzIE1hdGguZmxvb3IoKSBpbiBvcmRlciB0byBoYW5kbGUgbmVnYXRpdmUgdmFsdWVzIHByb3Blcmx5LiBGb3IgZXhhbXBsZSwgTWF0aC5mbG9vcigtMTUwLjAwMDAwMDAwMDAwMDAzKSBpcyAxNTEhXG4gIH07XG59LFxuICAgIHNuYXAgPSBmdW5jdGlvbiBzbmFwKHNuYXBUbywgdmFsdWUpIHtcbiAgdmFyIGlzQXJyYXkgPSBfaXNBcnJheShzbmFwVG8pLFxuICAgICAgcmFkaXVzLFxuICAgICAgaXMyRDtcblxuICBpZiAoIWlzQXJyYXkgJiYgX2lzT2JqZWN0KHNuYXBUbykpIHtcbiAgICByYWRpdXMgPSBpc0FycmF5ID0gc25hcFRvLnJhZGl1cyB8fCBfYmlnTnVtO1xuXG4gICAgaWYgKHNuYXBUby52YWx1ZXMpIHtcbiAgICAgIHNuYXBUbyA9IHRvQXJyYXkoc25hcFRvLnZhbHVlcyk7XG5cbiAgICAgIGlmIChpczJEID0gIV9pc051bWJlcihzbmFwVG9bMF0pKSB7XG4gICAgICAgIHJhZGl1cyAqPSByYWRpdXM7IC8vcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHNvIHdlIGRvbid0IGhhdmUgdG8gTWF0aC5zcXJ0KCkgaW4gdGhlIGxvb3AuXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNuYXBUbyA9IF9yb3VuZE1vZGlmaWVyKHNuYXBUby5pbmNyZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBfY29uZGl0aW9uYWxSZXR1cm4odmFsdWUsICFpc0FycmF5ID8gX3JvdW5kTW9kaWZpZXIoc25hcFRvKSA6IF9pc0Z1bmN0aW9uKHNuYXBUbykgPyBmdW5jdGlvbiAocmF3KSB7XG4gICAgaXMyRCA9IHNuYXBUbyhyYXcpO1xuICAgIHJldHVybiBNYXRoLmFicyhpczJEIC0gcmF3KSA8PSByYWRpdXMgPyBpczJEIDogcmF3O1xuICB9IDogZnVuY3Rpb24gKHJhdykge1xuICAgIHZhciB4ID0gcGFyc2VGbG9hdChpczJEID8gcmF3LnggOiByYXcpLFxuICAgICAgICB5ID0gcGFyc2VGbG9hdChpczJEID8gcmF3LnkgOiAwKSxcbiAgICAgICAgbWluID0gX2JpZ051bSxcbiAgICAgICAgY2xvc2VzdCA9IDAsXG4gICAgICAgIGkgPSBzbmFwVG8ubGVuZ3RoLFxuICAgICAgICBkeCxcbiAgICAgICAgZHk7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBpZiAoaXMyRCkge1xuICAgICAgICBkeCA9IHNuYXBUb1tpXS54IC0geDtcbiAgICAgICAgZHkgPSBzbmFwVG9baV0ueSAtIHk7XG4gICAgICAgIGR4ID0gZHggKiBkeCArIGR5ICogZHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkeCA9IE1hdGguYWJzKHNuYXBUb1tpXSAtIHgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZHggPCBtaW4pIHtcbiAgICAgICAgbWluID0gZHg7XG4gICAgICAgIGNsb3Nlc3QgPSBpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNsb3Nlc3QgPSAhcmFkaXVzIHx8IG1pbiA8PSByYWRpdXMgPyBzbmFwVG9bY2xvc2VzdF0gOiByYXc7XG4gICAgcmV0dXJuIGlzMkQgfHwgY2xvc2VzdCA9PT0gcmF3IHx8IF9pc051bWJlcihyYXcpID8gY2xvc2VzdCA6IGNsb3Nlc3QgKyBnZXRVbml0KHJhdyk7XG4gIH0pO1xufSxcbiAgICByYW5kb20gPSBmdW5jdGlvbiByYW5kb20obWluLCBtYXgsIHJvdW5kaW5nSW5jcmVtZW50LCByZXR1cm5GdW5jdGlvbikge1xuICByZXR1cm4gX2NvbmRpdGlvbmFsUmV0dXJuKF9pc0FycmF5KG1pbikgPyAhbWF4IDogcm91bmRpbmdJbmNyZW1lbnQgPT09IHRydWUgPyAhIShyb3VuZGluZ0luY3JlbWVudCA9IDApIDogIXJldHVybkZ1bmN0aW9uLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9pc0FycmF5KG1pbikgPyBtaW5bfn4oTWF0aC5yYW5kb20oKSAqIG1pbi5sZW5ndGgpXSA6IChyb3VuZGluZ0luY3JlbWVudCA9IHJvdW5kaW5nSW5jcmVtZW50IHx8IDFlLTUpICYmIChyZXR1cm5GdW5jdGlvbiA9IHJvdW5kaW5nSW5jcmVtZW50IDwgMSA/IE1hdGgucG93KDEwLCAocm91bmRpbmdJbmNyZW1lbnQgKyBcIlwiKS5sZW5ndGggLSAyKSA6IDEpICYmIE1hdGguZmxvb3IoTWF0aC5yb3VuZCgobWluIC0gcm91bmRpbmdJbmNyZW1lbnQgLyAyICsgTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyByb3VuZGluZ0luY3JlbWVudCAqIC45OSkpIC8gcm91bmRpbmdJbmNyZW1lbnQpICogcm91bmRpbmdJbmNyZW1lbnQgKiByZXR1cm5GdW5jdGlvbikgLyByZXR1cm5GdW5jdGlvbjtcbiAgfSk7XG59LFxuICAgIHBpcGUgPSBmdW5jdGlvbiBwaXBlKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZnVuY3Rpb25zID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGZ1bmN0aW9uc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25zLnJlZHVjZShmdW5jdGlvbiAodiwgZikge1xuICAgICAgcmV0dXJuIGYodik7XG4gICAgfSwgdmFsdWUpO1xuICB9O1xufSxcbiAgICB1bml0aXplID0gZnVuY3Rpb24gdW5pdGl6ZShmdW5jLCB1bml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyhwYXJzZUZsb2F0KHZhbHVlKSkgKyAodW5pdCB8fCBnZXRVbml0KHZhbHVlKSk7XG4gIH07XG59LFxuICAgIG5vcm1hbGl6ZSA9IGZ1bmN0aW9uIG5vcm1hbGl6ZShtaW4sIG1heCwgdmFsdWUpIHtcbiAgcmV0dXJuIG1hcFJhbmdlKG1pbiwgbWF4LCAwLCAxLCB2YWx1ZSk7XG59LFxuICAgIF93cmFwQXJyYXkgPSBmdW5jdGlvbiBfd3JhcEFycmF5KGEsIHdyYXBwZXIsIHZhbHVlKSB7XG4gIHJldHVybiBfY29uZGl0aW9uYWxSZXR1cm4odmFsdWUsIGZ1bmN0aW9uIChpbmRleCkge1xuICAgIHJldHVybiBhW35+d3JhcHBlcihpbmRleCldO1xuICB9KTtcbn0sXG4gICAgd3JhcCA9IGZ1bmN0aW9uIHdyYXAobWluLCBtYXgsIHZhbHVlKSB7XG4gIC8vIE5PVEU6IHdyYXAoKSBDQU5OT1QgYmUgYW4gYXJyb3cgZnVuY3Rpb24hIEEgdmVyeSBvZGQgY29tcGlsaW5nIGJ1ZyBjYXVzZXMgcHJvYmxlbXMgKHVucmVsYXRlZCB0byBHU0FQKS5cbiAgdmFyIHJhbmdlID0gbWF4IC0gbWluO1xuICByZXR1cm4gX2lzQXJyYXkobWluKSA/IF93cmFwQXJyYXkobWluLCB3cmFwKDAsIG1pbi5sZW5ndGgpLCBtYXgpIDogX2NvbmRpdGlvbmFsUmV0dXJuKHZhbHVlLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gKHJhbmdlICsgKHZhbHVlIC0gbWluKSAlIHJhbmdlKSAlIHJhbmdlICsgbWluO1xuICB9KTtcbn0sXG4gICAgd3JhcFlveW8gPSBmdW5jdGlvbiB3cmFwWW95byhtaW4sIG1heCwgdmFsdWUpIHtcbiAgdmFyIHJhbmdlID0gbWF4IC0gbWluLFxuICAgICAgdG90YWwgPSByYW5nZSAqIDI7XG4gIHJldHVybiBfaXNBcnJheShtaW4pID8gX3dyYXBBcnJheShtaW4sIHdyYXBZb3lvKDAsIG1pbi5sZW5ndGggLSAxKSwgbWF4KSA6IF9jb25kaXRpb25hbFJldHVybih2YWx1ZSwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFsdWUgPSAodG90YWwgKyAodmFsdWUgLSBtaW4pICUgdG90YWwpICUgdG90YWwgfHwgMDtcbiAgICByZXR1cm4gbWluICsgKHZhbHVlID4gcmFuZ2UgPyB0b3RhbCAtIHZhbHVlIDogdmFsdWUpO1xuICB9KTtcbn0sXG4gICAgX3JlcGxhY2VSYW5kb20gPSBmdW5jdGlvbiBfcmVwbGFjZVJhbmRvbSh2YWx1ZSkge1xuICAvL3JlcGxhY2VzIGFsbCBvY2N1cnJlbmNlcyBvZiByYW5kb20oLi4uKSBpbiBhIHN0cmluZyB3aXRoIHRoZSBjYWxjdWxhdGVkIHJhbmRvbSB2YWx1ZS4gY2FuIGJlIGEgcmFuZ2UgbGlrZSByYW5kb20oLTEwMCwgMTAwLCA1KSBvciBhbiBhcnJheSBsaWtlIHJhbmRvbShbMCwgMTAwLCA1MDBdKVxuICB2YXIgcHJldiA9IDAsXG4gICAgICBzID0gXCJcIixcbiAgICAgIGksXG4gICAgICBudW1zLFxuICAgICAgZW5kLFxuICAgICAgaXNBcnJheTtcblxuICB3aGlsZSAofihpID0gdmFsdWUuaW5kZXhPZihcInJhbmRvbShcIiwgcHJldikpKSB7XG4gICAgZW5kID0gdmFsdWUuaW5kZXhPZihcIilcIiwgaSk7XG4gICAgaXNBcnJheSA9IHZhbHVlLmNoYXJBdChpICsgNykgPT09IFwiW1wiO1xuICAgIG51bXMgPSB2YWx1ZS5zdWJzdHIoaSArIDcsIGVuZCAtIGkgLSA3KS5tYXRjaChpc0FycmF5ID8gX2RlbGltaXRlZFZhbHVlRXhwIDogX3N0cmljdE51bUV4cCk7XG4gICAgcyArPSB2YWx1ZS5zdWJzdHIocHJldiwgaSAtIHByZXYpICsgcmFuZG9tKGlzQXJyYXkgPyBudW1zIDogK251bXNbMF0sIGlzQXJyYXkgPyAwIDogK251bXNbMV0sICtudW1zWzJdIHx8IDFlLTUpO1xuICAgIHByZXYgPSBlbmQgKyAxO1xuICB9XG5cbiAgcmV0dXJuIHMgKyB2YWx1ZS5zdWJzdHIocHJldiwgdmFsdWUubGVuZ3RoIC0gcHJldik7XG59LFxuICAgIG1hcFJhbmdlID0gZnVuY3Rpb24gbWFwUmFuZ2UoaW5NaW4sIGluTWF4LCBvdXRNaW4sIG91dE1heCwgdmFsdWUpIHtcbiAgdmFyIGluUmFuZ2UgPSBpbk1heCAtIGluTWluLFxuICAgICAgb3V0UmFuZ2UgPSBvdXRNYXggLSBvdXRNaW47XG4gIHJldHVybiBfY29uZGl0aW9uYWxSZXR1cm4odmFsdWUsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBvdXRNaW4gKyAoKHZhbHVlIC0gaW5NaW4pIC8gaW5SYW5nZSAqIG91dFJhbmdlIHx8IDApO1xuICB9KTtcbn0sXG4gICAgaW50ZXJwb2xhdGUgPSBmdW5jdGlvbiBpbnRlcnBvbGF0ZShzdGFydCwgZW5kLCBwcm9ncmVzcywgbXV0YXRlKSB7XG4gIHZhciBmdW5jID0gaXNOYU4oc3RhcnQgKyBlbmQpID8gMCA6IGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuICgxIC0gcCkgKiBzdGFydCArIHAgKiBlbmQ7XG4gIH07XG5cbiAgaWYgKCFmdW5jKSB7XG4gICAgdmFyIGlzU3RyaW5nID0gX2lzU3RyaW5nKHN0YXJ0KSxcbiAgICAgICAgbWFzdGVyID0ge30sXG4gICAgICAgIHAsXG4gICAgICAgIGksXG4gICAgICAgIGludGVycG9sYXRvcnMsXG4gICAgICAgIGwsXG4gICAgICAgIGlsO1xuXG4gICAgcHJvZ3Jlc3MgPT09IHRydWUgJiYgKG11dGF0ZSA9IDEpICYmIChwcm9ncmVzcyA9IG51bGwpO1xuXG4gICAgaWYgKGlzU3RyaW5nKSB7XG4gICAgICBzdGFydCA9IHtcbiAgICAgICAgcDogc3RhcnRcbiAgICAgIH07XG4gICAgICBlbmQgPSB7XG4gICAgICAgIHA6IGVuZFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKF9pc0FycmF5KHN0YXJ0KSAmJiAhX2lzQXJyYXkoZW5kKSkge1xuICAgICAgaW50ZXJwb2xhdG9ycyA9IFtdO1xuICAgICAgbCA9IHN0YXJ0Lmxlbmd0aDtcbiAgICAgIGlsID0gbCAtIDI7XG5cbiAgICAgIGZvciAoaSA9IDE7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgaW50ZXJwb2xhdG9ycy5wdXNoKGludGVycG9sYXRlKHN0YXJ0W2kgLSAxXSwgc3RhcnRbaV0pKTsgLy9idWlsZCB0aGUgaW50ZXJwb2xhdG9ycyB1cCBmcm9udCBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBzbyB0aGF0IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBtYW55IHRpbWVzLCBpdCBjYW4ganVzdCByZXVzZSB0aGVtLlxuICAgICAgfVxuXG4gICAgICBsLS07XG5cbiAgICAgIGZ1bmMgPSBmdW5jdGlvbiBmdW5jKHApIHtcbiAgICAgICAgcCAqPSBsO1xuICAgICAgICB2YXIgaSA9IE1hdGgubWluKGlsLCB+fnApO1xuICAgICAgICByZXR1cm4gaW50ZXJwb2xhdG9yc1tpXShwIC0gaSk7XG4gICAgICB9O1xuXG4gICAgICBwcm9ncmVzcyA9IGVuZDtcbiAgICB9IGVsc2UgaWYgKCFtdXRhdGUpIHtcbiAgICAgIHN0YXJ0ID0gX21lcmdlKF9pc0FycmF5KHN0YXJ0KSA/IFtdIDoge30sIHN0YXJ0KTtcbiAgICB9XG5cbiAgICBpZiAoIWludGVycG9sYXRvcnMpIHtcbiAgICAgIGZvciAocCBpbiBlbmQpIHtcbiAgICAgICAgX2FkZFByb3BUd2Vlbi5jYWxsKG1hc3Rlciwgc3RhcnQsIHAsIFwiZ2V0XCIsIGVuZFtwXSk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmMgPSBmdW5jdGlvbiBmdW5jKHApIHtcbiAgICAgICAgcmV0dXJuIF9yZW5kZXJQcm9wVHdlZW5zKHAsIG1hc3RlcikgfHwgKGlzU3RyaW5nID8gc3RhcnQucCA6IHN0YXJ0KTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIF9jb25kaXRpb25hbFJldHVybihwcm9ncmVzcywgZnVuYyk7XG59LFxuICAgIF9nZXRMYWJlbEluRGlyZWN0aW9uID0gZnVuY3Rpb24gX2dldExhYmVsSW5EaXJlY3Rpb24odGltZWxpbmUsIGZyb21UaW1lLCBiYWNrd2FyZCkge1xuICAvL3VzZWQgZm9yIG5leHRMYWJlbCgpIGFuZCBwcmV2aW91c0xhYmVsKClcbiAgdmFyIGxhYmVscyA9IHRpbWVsaW5lLmxhYmVscyxcbiAgICAgIG1pbiA9IF9iaWdOdW0sXG4gICAgICBwLFxuICAgICAgZGlzdGFuY2UsXG4gICAgICBsYWJlbDtcblxuICBmb3IgKHAgaW4gbGFiZWxzKSB7XG4gICAgZGlzdGFuY2UgPSBsYWJlbHNbcF0gLSBmcm9tVGltZTtcblxuICAgIGlmIChkaXN0YW5jZSA8IDAgPT09ICEhYmFja3dhcmQgJiYgZGlzdGFuY2UgJiYgbWluID4gKGRpc3RhbmNlID0gTWF0aC5hYnMoZGlzdGFuY2UpKSkge1xuICAgICAgbGFiZWwgPSBwO1xuICAgICAgbWluID0gZGlzdGFuY2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxhYmVsO1xufSxcbiAgICBfY2FsbGJhY2sgPSBmdW5jdGlvbiBfY2FsbGJhY2soYW5pbWF0aW9uLCB0eXBlLCBleGVjdXRlTGF6eUZpcnN0KSB7XG4gIHZhciB2ID0gYW5pbWF0aW9uLnZhcnMsXG4gICAgICBjYWxsYmFjayA9IHZbdHlwZV0sXG4gICAgICBwcmV2Q29udGV4dCA9IF9jb250ZXh0LFxuICAgICAgY29udGV4dCA9IGFuaW1hdGlvbi5fY3R4LFxuICAgICAgcGFyYW1zLFxuICAgICAgc2NvcGUsXG4gICAgICByZXN1bHQ7XG5cbiAgaWYgKCFjYWxsYmFjaykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHBhcmFtcyA9IHZbdHlwZSArIFwiUGFyYW1zXCJdO1xuICBzY29wZSA9IHYuY2FsbGJhY2tTY29wZSB8fCBhbmltYXRpb247XG4gIGV4ZWN1dGVMYXp5Rmlyc3QgJiYgX2xhenlUd2VlbnMubGVuZ3RoICYmIF9sYXp5UmVuZGVyKCk7IC8vaW4gY2FzZSByZW5kZXJpbmcgY2F1c2VkIGFueSB0d2VlbnMgdG8gbGF6eS1pbml0LCB3ZSBzaG91bGQgcmVuZGVyIHRoZW0gYmVjYXVzZSB0eXBpY2FsbHkgd2hlbiBhIHRpbWVsaW5lIGZpbmlzaGVzLCB1c2VycyBleHBlY3QgdGhpbmdzIHRvIGhhdmUgcmVuZGVyZWQgZnVsbHkuIEltYWdpbmUgYW4gb25VcGRhdGUgb24gYSB0aW1lbGluZSB0aGF0IHJlcG9ydHMvY2hlY2tzIHR3ZWVuZWQgdmFsdWVzLlxuXG4gIGNvbnRleHQgJiYgKF9jb250ZXh0ID0gY29udGV4dCk7XG4gIHJlc3VsdCA9IHBhcmFtcyA/IGNhbGxiYWNrLmFwcGx5KHNjb3BlLCBwYXJhbXMpIDogY2FsbGJhY2suY2FsbChzY29wZSk7XG4gIF9jb250ZXh0ID0gcHJldkNvbnRleHQ7XG4gIHJldHVybiByZXN1bHQ7XG59LFxuICAgIF9pbnRlcnJ1cHQgPSBmdW5jdGlvbiBfaW50ZXJydXB0KGFuaW1hdGlvbikge1xuICBfcmVtb3ZlRnJvbVBhcmVudChhbmltYXRpb24pO1xuXG4gIGFuaW1hdGlvbi5zY3JvbGxUcmlnZ2VyICYmIGFuaW1hdGlvbi5zY3JvbGxUcmlnZ2VyLmtpbGwoISFfcmV2ZXJ0aW5nKTtcbiAgYW5pbWF0aW9uLnByb2dyZXNzKCkgPCAxICYmIF9jYWxsYmFjayhhbmltYXRpb24sIFwib25JbnRlcnJ1cHRcIik7XG4gIHJldHVybiBhbmltYXRpb247XG59LFxuICAgIF9xdWlja1R3ZWVuLFxuICAgIF9yZWdpc3RlclBsdWdpblF1ZXVlID0gW10sXG4gICAgX2NyZWF0ZVBsdWdpbiA9IGZ1bmN0aW9uIF9jcmVhdGVQbHVnaW4oY29uZmlnKSB7XG4gIGlmICghY29uZmlnKSByZXR1cm47XG4gIGNvbmZpZyA9ICFjb25maWcubmFtZSAmJiBjb25maWdbXCJkZWZhdWx0XCJdIHx8IGNvbmZpZzsgLy8gVU1EIHBhY2thZ2luZyB3cmFwcyB0aGluZ3Mgb2RkbHksIHNvIGZvciBleGFtcGxlIE1vdGlvblBhdGhIZWxwZXIgYmVjb21lcyB7TW90aW9uUGF0aEhlbHBlcjpNb3Rpb25QYXRoSGVscGVyLCBkZWZhdWx0Ok1vdGlvblBhdGhIZWxwZXJ9LlxuXG4gIGlmIChfd2luZG93RXhpc3RzKCkgfHwgY29uZmlnLmhlYWRsZXNzKSB7XG4gICAgLy8gZWRnZSBjYXNlOiBzb21lIGJ1aWxkIHRvb2xzIG1heSBwYXNzIGluIGEgbnVsbC91bmRlZmluZWQgdmFsdWVcbiAgICB2YXIgbmFtZSA9IGNvbmZpZy5uYW1lLFxuICAgICAgICBpc0Z1bmMgPSBfaXNGdW5jdGlvbihjb25maWcpLFxuICAgICAgICBQbHVnaW4gPSBuYW1lICYmICFpc0Z1bmMgJiYgY29uZmlnLmluaXQgPyBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLl9wcm9wcyA9IFtdO1xuICAgIH0gOiBjb25maWcsXG4gICAgICAgIC8vaW4gY2FzZSBzb21lb25lIHBhc3NlcyBpbiBhbiBvYmplY3QgdGhhdCdzIG5vdCBhIHBsdWdpbiwgbGlrZSBDdXN0b21FYXNlXG4gICAgaW5zdGFuY2VEZWZhdWx0cyA9IHtcbiAgICAgIGluaXQ6IF9lbXB0eUZ1bmMsXG4gICAgICByZW5kZXI6IF9yZW5kZXJQcm9wVHdlZW5zLFxuICAgICAgYWRkOiBfYWRkUHJvcFR3ZWVuLFxuICAgICAga2lsbDogX2tpbGxQcm9wVHdlZW5zT2YsXG4gICAgICBtb2RpZmllcjogX2FkZFBsdWdpbk1vZGlmaWVyLFxuICAgICAgcmF3VmFyczogMFxuICAgIH0sXG4gICAgICAgIHN0YXRpY3MgPSB7XG4gICAgICB0YXJnZXRUZXN0OiAwLFxuICAgICAgZ2V0OiAwLFxuICAgICAgZ2V0U2V0dGVyOiBfZ2V0U2V0dGVyLFxuICAgICAgYWxpYXNlczoge30sXG4gICAgICByZWdpc3RlcjogMFxuICAgIH07XG5cbiAgICBfd2FrZSgpO1xuXG4gICAgaWYgKGNvbmZpZyAhPT0gUGx1Z2luKSB7XG4gICAgICBpZiAoX3BsdWdpbnNbbmFtZV0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfc2V0RGVmYXVsdHMoUGx1Z2luLCBfc2V0RGVmYXVsdHMoX2NvcHlFeGNsdWRpbmcoY29uZmlnLCBpbnN0YW5jZURlZmF1bHRzKSwgc3RhdGljcykpOyAvL3N0YXRpYyBtZXRob2RzXG5cblxuICAgICAgX21lcmdlKFBsdWdpbi5wcm90b3R5cGUsIF9tZXJnZShpbnN0YW5jZURlZmF1bHRzLCBfY29weUV4Y2x1ZGluZyhjb25maWcsIHN0YXRpY3MpKSk7IC8vaW5zdGFuY2UgbWV0aG9kc1xuXG5cbiAgICAgIF9wbHVnaW5zW1BsdWdpbi5wcm9wID0gbmFtZV0gPSBQbHVnaW47XG5cbiAgICAgIGlmIChjb25maWcudGFyZ2V0VGVzdCkge1xuICAgICAgICBfaGFybmVzc1BsdWdpbnMucHVzaChQbHVnaW4pO1xuXG4gICAgICAgIF9yZXNlcnZlZFByb3BzW25hbWVdID0gMTtcbiAgICAgIH1cblxuICAgICAgbmFtZSA9IChuYW1lID09PSBcImNzc1wiID8gXCJDU1NcIiA6IG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnN1YnN0cigxKSkgKyBcIlBsdWdpblwiOyAvL2ZvciB0aGUgZ2xvYmFsIG5hbWUuIFwibW90aW9uUGF0aFwiIHNob3VsZCBiZWNvbWUgTW90aW9uUGF0aFBsdWdpblxuICAgIH1cblxuICAgIF9hZGRHbG9iYWwobmFtZSwgUGx1Z2luKTtcblxuICAgIGNvbmZpZy5yZWdpc3RlciAmJiBjb25maWcucmVnaXN0ZXIoZ3NhcCwgUGx1Z2luLCBQcm9wVHdlZW4pO1xuICB9IGVsc2Uge1xuICAgIF9yZWdpc3RlclBsdWdpblF1ZXVlLnB1c2goY29uZmlnKTtcbiAgfVxufSxcblxuLypcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDT0xPUlNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cbl8yNTUgPSAyNTUsXG4gICAgX2NvbG9yTG9va3VwID0ge1xuICBhcXVhOiBbMCwgXzI1NSwgXzI1NV0sXG4gIGxpbWU6IFswLCBfMjU1LCAwXSxcbiAgc2lsdmVyOiBbMTkyLCAxOTIsIDE5Ml0sXG4gIGJsYWNrOiBbMCwgMCwgMF0sXG4gIG1hcm9vbjogWzEyOCwgMCwgMF0sXG4gIHRlYWw6IFswLCAxMjgsIDEyOF0sXG4gIGJsdWU6IFswLCAwLCBfMjU1XSxcbiAgbmF2eTogWzAsIDAsIDEyOF0sXG4gIHdoaXRlOiBbXzI1NSwgXzI1NSwgXzI1NV0sXG4gIG9saXZlOiBbMTI4LCAxMjgsIDBdLFxuICB5ZWxsb3c6IFtfMjU1LCBfMjU1LCAwXSxcbiAgb3JhbmdlOiBbXzI1NSwgMTY1LCAwXSxcbiAgZ3JheTogWzEyOCwgMTI4LCAxMjhdLFxuICBwdXJwbGU6IFsxMjgsIDAsIDEyOF0sXG4gIGdyZWVuOiBbMCwgMTI4LCAwXSxcbiAgcmVkOiBbXzI1NSwgMCwgMF0sXG4gIHBpbms6IFtfMjU1LCAxOTIsIDIwM10sXG4gIGN5YW46IFswLCBfMjU1LCBfMjU1XSxcbiAgdHJhbnNwYXJlbnQ6IFtfMjU1LCBfMjU1LCBfMjU1LCAwXVxufSxcbiAgICAvLyBwb3NzaWJsZSBmdXR1cmUgaWRlYSB0byByZXBsYWNlIHRoZSBoYXJkLWNvZGVkIGNvbG9yIG5hbWUgdmFsdWVzIC0gcHV0IHRoaXMgaW4gdGhlIHRpY2tlci53YWtlKCkgd2hlcmUgd2Ugc2V0IHRoZSBfZG9jOlxuLy8gbGV0IGN0eCA9IF9kb2MuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKS5nZXRDb250ZXh0KFwiMmRcIik7XG4vLyBfZm9yRWFjaE5hbWUoXCJhcXVhLGxpbWUsc2lsdmVyLGJsYWNrLG1hcm9vbix0ZWFsLGJsdWUsbmF2eSx3aGl0ZSxvbGl2ZSx5ZWxsb3csb3JhbmdlLGdyYXkscHVycGxlLGdyZWVuLHJlZCxwaW5rLGN5YW5cIiwgY29sb3IgPT4ge2N0eC5maWxsU3R5bGUgPSBjb2xvcjsgX2NvbG9yTG9va3VwW2NvbG9yXSA9IHNwbGl0Q29sb3IoY3R4LmZpbGxTdHlsZSl9KTtcbl9odWUgPSBmdW5jdGlvbiBfaHVlKGgsIG0xLCBtMikge1xuICBoICs9IGggPCAwID8gMSA6IGggPiAxID8gLTEgOiAwO1xuICByZXR1cm4gKGggKiA2IDwgMSA/IG0xICsgKG0yIC0gbTEpICogaCAqIDYgOiBoIDwgLjUgPyBtMiA6IGggKiAzIDwgMiA/IG0xICsgKG0yIC0gbTEpICogKDIgLyAzIC0gaCkgKiA2IDogbTEpICogXzI1NSArIC41IHwgMDtcbn0sXG4gICAgc3BsaXRDb2xvciA9IGZ1bmN0aW9uIHNwbGl0Q29sb3IodiwgdG9IU0wsIGZvcmNlQWxwaGEpIHtcbiAgdmFyIGEgPSAhdiA/IF9jb2xvckxvb2t1cC5ibGFjayA6IF9pc051bWJlcih2KSA/IFt2ID4+IDE2LCB2ID4+IDggJiBfMjU1LCB2ICYgXzI1NV0gOiAwLFxuICAgICAgcixcbiAgICAgIGcsXG4gICAgICBiLFxuICAgICAgaCxcbiAgICAgIHMsXG4gICAgICBsLFxuICAgICAgbWF4LFxuICAgICAgbWluLFxuICAgICAgZCxcbiAgICAgIHdhc0hTTDtcblxuICBpZiAoIWEpIHtcbiAgICBpZiAodi5zdWJzdHIoLTEpID09PSBcIixcIikge1xuICAgICAgLy9zb21ldGltZXMgYSB0cmFpbGluZyBjb21tYSBpcyBpbmNsdWRlZCBhbmQgd2Ugc2hvdWxkIGNob3AgaXQgb2ZmICh0eXBpY2FsbHkgZnJvbSBhIGNvbW1hLWRlbGltaXRlZCBsaXN0IG9mIHZhbHVlcyBsaWtlIGEgdGV4dFNoYWRvdzpcIjJweCAycHggMnB4IGJsdWUsIDVweCA1cHggNXB4IHJnYigyNTUsMCwwKVwiIC0gaW4gdGhpcyBleGFtcGxlIFwiYmx1ZSxcIiBoYXMgYSB0cmFpbGluZyBjb21tYS4gV2UgY291bGQgc3RyaXAgaXQgb3V0IGluc2lkZSBwYXJzZUNvbXBsZXgoKSBidXQgd2UnZCBuZWVkIHRvIGRvIGl0IHRvIHRoZSBiZWdpbm5pbmcgYW5kIGVuZGluZyB2YWx1ZXMgcGx1cyBpdCB3b3VsZG4ndCBwcm92aWRlIHByb3RlY3Rpb24gZnJvbSBvdGhlciBwb3RlbnRpYWwgc2NlbmFyaW9zIGxpa2UgaWYgdGhlIHVzZXIgcGFzc2VzIGluIGEgc2ltaWxhciB2YWx1ZS5cbiAgICAgIHYgPSB2LnN1YnN0cigwLCB2Lmxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIGlmIChfY29sb3JMb29rdXBbdl0pIHtcbiAgICAgIGEgPSBfY29sb3JMb29rdXBbdl07XG4gICAgfSBlbHNlIGlmICh2LmNoYXJBdCgwKSA9PT0gXCIjXCIpIHtcbiAgICAgIGlmICh2Lmxlbmd0aCA8IDYpIHtcbiAgICAgICAgLy9mb3Igc2hvcnRoYW5kIGxpa2UgIzlGMCBvciAjOUYwRiAoY291bGQgaGF2ZSBhbHBoYSlcbiAgICAgICAgciA9IHYuY2hhckF0KDEpO1xuICAgICAgICBnID0gdi5jaGFyQXQoMik7XG4gICAgICAgIGIgPSB2LmNoYXJBdCgzKTtcbiAgICAgICAgdiA9IFwiI1wiICsgciArIHIgKyBnICsgZyArIGIgKyBiICsgKHYubGVuZ3RoID09PSA1ID8gdi5jaGFyQXQoNCkgKyB2LmNoYXJBdCg0KSA6IFwiXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodi5sZW5ndGggPT09IDkpIHtcbiAgICAgICAgLy8gaGV4IHdpdGggYWxwaGEsIGxpa2UgI2ZkNWU1M2ZmXG4gICAgICAgIGEgPSBwYXJzZUludCh2LnN1YnN0cigxLCA2KSwgMTYpO1xuICAgICAgICByZXR1cm4gW2EgPj4gMTYsIGEgPj4gOCAmIF8yNTUsIGEgJiBfMjU1LCBwYXJzZUludCh2LnN1YnN0cig3KSwgMTYpIC8gMjU1XTtcbiAgICAgIH1cblxuICAgICAgdiA9IHBhcnNlSW50KHYuc3Vic3RyKDEpLCAxNik7XG4gICAgICBhID0gW3YgPj4gMTYsIHYgPj4gOCAmIF8yNTUsIHYgJiBfMjU1XTtcbiAgICB9IGVsc2UgaWYgKHYuc3Vic3RyKDAsIDMpID09PSBcImhzbFwiKSB7XG4gICAgICBhID0gd2FzSFNMID0gdi5tYXRjaChfc3RyaWN0TnVtRXhwKTtcblxuICAgICAgaWYgKCF0b0hTTCkge1xuICAgICAgICBoID0gK2FbMF0gJSAzNjAgLyAzNjA7XG4gICAgICAgIHMgPSArYVsxXSAvIDEwMDtcbiAgICAgICAgbCA9ICthWzJdIC8gMTAwO1xuICAgICAgICBnID0gbCA8PSAuNSA/IGwgKiAocyArIDEpIDogbCArIHMgLSBsICogcztcbiAgICAgICAgciA9IGwgKiAyIC0gZztcbiAgICAgICAgYS5sZW5ndGggPiAzICYmIChhWzNdICo9IDEpOyAvL2Nhc3QgYXMgbnVtYmVyXG5cbiAgICAgICAgYVswXSA9IF9odWUoaCArIDEgLyAzLCByLCBnKTtcbiAgICAgICAgYVsxXSA9IF9odWUoaCwgciwgZyk7XG4gICAgICAgIGFbMl0gPSBfaHVlKGggLSAxIC8gMywgciwgZyk7XG4gICAgICB9IGVsc2UgaWYgKH52LmluZGV4T2YoXCI9XCIpKSB7XG4gICAgICAgIC8vaWYgcmVsYXRpdmUgdmFsdWVzIGFyZSBmb3VuZCwganVzdCByZXR1cm4gdGhlIHJhdyBzdHJpbmdzIHdpdGggdGhlIHJlbGF0aXZlIHByZWZpeGVzIGluIHBsYWNlLlxuICAgICAgICBhID0gdi5tYXRjaChfbnVtRXhwKTtcbiAgICAgICAgZm9yY2VBbHBoYSAmJiBhLmxlbmd0aCA8IDQgJiYgKGFbM10gPSAxKTtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSB2Lm1hdGNoKF9zdHJpY3ROdW1FeHApIHx8IF9jb2xvckxvb2t1cC50cmFuc3BhcmVudDtcbiAgICB9XG5cbiAgICBhID0gYS5tYXAoTnVtYmVyKTtcbiAgfVxuXG4gIGlmICh0b0hTTCAmJiAhd2FzSFNMKSB7XG4gICAgciA9IGFbMF0gLyBfMjU1O1xuICAgIGcgPSBhWzFdIC8gXzI1NTtcbiAgICBiID0gYVsyXSAvIF8yNTU7XG4gICAgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XG4gICAgbWluID0gTWF0aC5taW4ociwgZywgYik7XG4gICAgbCA9IChtYXggKyBtaW4pIC8gMjtcblxuICAgIGlmIChtYXggPT09IG1pbikge1xuICAgICAgaCA9IHMgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBkID0gbWF4IC0gbWluO1xuICAgICAgcyA9IGwgPiAwLjUgPyBkIC8gKDIgLSBtYXggLSBtaW4pIDogZCAvIChtYXggKyBtaW4pO1xuICAgICAgaCA9IG1heCA9PT0gciA/IChnIC0gYikgLyBkICsgKGcgPCBiID8gNiA6IDApIDogbWF4ID09PSBnID8gKGIgLSByKSAvIGQgKyAyIDogKHIgLSBnKSAvIGQgKyA0O1xuICAgICAgaCAqPSA2MDtcbiAgICB9XG5cbiAgICBhWzBdID0gfn4oaCArIC41KTtcbiAgICBhWzFdID0gfn4ocyAqIDEwMCArIC41KTtcbiAgICBhWzJdID0gfn4obCAqIDEwMCArIC41KTtcbiAgfVxuXG4gIGZvcmNlQWxwaGEgJiYgYS5sZW5ndGggPCA0ICYmIChhWzNdID0gMSk7XG4gIHJldHVybiBhO1xufSxcbiAgICBfY29sb3JPcmRlckRhdGEgPSBmdW5jdGlvbiBfY29sb3JPcmRlckRhdGEodikge1xuICAvLyBzdHJpcHMgb3V0IHRoZSBjb2xvcnMgZnJvbSB0aGUgc3RyaW5nLCBmaW5kcyBhbGwgdGhlIG51bWVyaWMgc2xvdHMgKHdpdGggdW5pdHMpIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHRob3NlLiBUaGUgQXJyYXkgYWxzbyBoYXMgYSBcImNcIiBwcm9wZXJ0eSB3aGljaCBpcyBhbiBBcnJheSBvZiB0aGUgaW5kZXggdmFsdWVzIHdoZXJlIHRoZSBjb2xvcnMgYmVsb25nLiBUaGlzIGlzIHRvIGhlbHAgd29yayBhcm91bmQgaXNzdWVzIHdoZXJlIHRoZXJlJ3MgYSBtaXMtbWF0Y2hlZCBvcmRlciBvZiBjb2xvci9udW1lcmljIGRhdGEgbGlrZSBkcm9wLXNoYWRvdygjZjAwIDBweCAxcHggMnB4KSBhbmQgZHJvcC1zaGFkb3coMHggMXB4IDJweCAjZjAwKS4gVGhpcyBpcyBiYXNpY2FsbHkgYSBoZWxwZXIgZnVuY3Rpb24gdXNlZCBpbiBfZm9ybWF0Q29sb3JzKClcbiAgdmFyIHZhbHVlcyA9IFtdLFxuICAgICAgYyA9IFtdLFxuICAgICAgaSA9IC0xO1xuICB2LnNwbGl0KF9jb2xvckV4cCkuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgIHZhciBhID0gdi5tYXRjaChfbnVtV2l0aFVuaXRFeHApIHx8IFtdO1xuICAgIHZhbHVlcy5wdXNoLmFwcGx5KHZhbHVlcywgYSk7XG4gICAgYy5wdXNoKGkgKz0gYS5sZW5ndGggKyAxKTtcbiAgfSk7XG4gIHZhbHVlcy5jID0gYztcbiAgcmV0dXJuIHZhbHVlcztcbn0sXG4gICAgX2Zvcm1hdENvbG9ycyA9IGZ1bmN0aW9uIF9mb3JtYXRDb2xvcnMocywgdG9IU0wsIG9yZGVyTWF0Y2hEYXRhKSB7XG4gIHZhciByZXN1bHQgPSBcIlwiLFxuICAgICAgY29sb3JzID0gKHMgKyByZXN1bHQpLm1hdGNoKF9jb2xvckV4cCksXG4gICAgICB0eXBlID0gdG9IU0wgPyBcImhzbGEoXCIgOiBcInJnYmEoXCIsXG4gICAgICBpID0gMCxcbiAgICAgIGMsXG4gICAgICBzaGVsbCxcbiAgICAgIGQsXG4gICAgICBsO1xuXG4gIGlmICghY29sb3JzKSB7XG4gICAgcmV0dXJuIHM7XG4gIH1cblxuICBjb2xvcnMgPSBjb2xvcnMubWFwKGZ1bmN0aW9uIChjb2xvcikge1xuICAgIHJldHVybiAoY29sb3IgPSBzcGxpdENvbG9yKGNvbG9yLCB0b0hTTCwgMSkpICYmIHR5cGUgKyAodG9IU0wgPyBjb2xvclswXSArIFwiLFwiICsgY29sb3JbMV0gKyBcIiUsXCIgKyBjb2xvclsyXSArIFwiJSxcIiArIGNvbG9yWzNdIDogY29sb3Iuam9pbihcIixcIikpICsgXCIpXCI7XG4gIH0pO1xuXG4gIGlmIChvcmRlck1hdGNoRGF0YSkge1xuICAgIGQgPSBfY29sb3JPcmRlckRhdGEocyk7XG4gICAgYyA9IG9yZGVyTWF0Y2hEYXRhLmM7XG5cbiAgICBpZiAoYy5qb2luKHJlc3VsdCkgIT09IGQuYy5qb2luKHJlc3VsdCkpIHtcbiAgICAgIHNoZWxsID0gcy5yZXBsYWNlKF9jb2xvckV4cCwgXCIxXCIpLnNwbGl0KF9udW1XaXRoVW5pdEV4cCk7XG4gICAgICBsID0gc2hlbGwubGVuZ3RoIC0gMTtcblxuICAgICAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ICs9IHNoZWxsW2ldICsgKH5jLmluZGV4T2YoaSkgPyBjb2xvcnMuc2hpZnQoKSB8fCB0eXBlICsgXCIwLDAsMCwwKVwiIDogKGQubGVuZ3RoID8gZCA6IGNvbG9ycy5sZW5ndGggPyBjb2xvcnMgOiBvcmRlck1hdGNoRGF0YSkuc2hpZnQoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCFzaGVsbCkge1xuICAgIHNoZWxsID0gcy5zcGxpdChfY29sb3JFeHApO1xuICAgIGwgPSBzaGVsbC5sZW5ndGggLSAxO1xuXG4gICAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHJlc3VsdCArPSBzaGVsbFtpXSArIGNvbG9yc1tpXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0ICsgc2hlbGxbbF07XG59LFxuICAgIF9jb2xvckV4cCA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHMgPSBcIig/OlxcXFxiKD86KD86cmdifHJnYmF8aHNsfGhzbGEpXFxcXCguKz9cXFxcKSl8XFxcXEIjKD86WzAtOWEtZl17Myw0fSl7MSwyfVxcXFxiXCIsXG4gICAgICAvL3dlJ2xsIGR5bmFtaWNhbGx5IGJ1aWxkIHRoaXMgUmVndWxhciBFeHByZXNzaW9uIHRvIGNvbnNlcnZlIGZpbGUgc2l6ZS4gQWZ0ZXIgYnVpbGRpbmcgaXQsIGl0IHdpbGwgYmUgYWJsZSB0byBmaW5kIHJnYigpLCByZ2JhKCksICMgKGhleGFkZWNpbWFsKSwgYW5kIG5hbWVkIGNvbG9yIHZhbHVlcyBsaWtlIHJlZCwgYmx1ZSwgcHVycGxlLCBldGMuLFxuICBwO1xuXG4gIGZvciAocCBpbiBfY29sb3JMb29rdXApIHtcbiAgICBzICs9IFwifFwiICsgcCArIFwiXFxcXGJcIjtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmVnRXhwKHMgKyBcIilcIiwgXCJnaVwiKTtcbn0oKSxcbiAgICBfaHNsRXhwID0gL2hzbFthXT9cXCgvLFxuICAgIF9jb2xvclN0cmluZ0ZpbHRlciA9IGZ1bmN0aW9uIF9jb2xvclN0cmluZ0ZpbHRlcihhKSB7XG4gIHZhciBjb21iaW5lZCA9IGEuam9pbihcIiBcIiksXG4gICAgICB0b0hTTDtcbiAgX2NvbG9yRXhwLmxhc3RJbmRleCA9IDA7XG5cbiAgaWYgKF9jb2xvckV4cC50ZXN0KGNvbWJpbmVkKSkge1xuICAgIHRvSFNMID0gX2hzbEV4cC50ZXN0KGNvbWJpbmVkKTtcbiAgICBhWzFdID0gX2Zvcm1hdENvbG9ycyhhWzFdLCB0b0hTTCk7XG4gICAgYVswXSA9IF9mb3JtYXRDb2xvcnMoYVswXSwgdG9IU0wsIF9jb2xvck9yZGVyRGF0YShhWzFdKSk7IC8vIG1ha2Ugc3VyZSB0aGUgb3JkZXIgb2YgbnVtYmVycy9jb2xvcnMgbWF0Y2ggd2l0aCB0aGUgRU5EIHZhbHVlLlxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn0sXG5cbi8qXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogVElDS0VSXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5fdGlja2VyQWN0aXZlLFxuICAgIF90aWNrZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZ2V0VGltZSA9IERhdGUubm93LFxuICAgICAgX2xhZ1RocmVzaG9sZCA9IDUwMCxcbiAgICAgIF9hZGp1c3RlZExhZyA9IDMzLFxuICAgICAgX3N0YXJ0VGltZSA9IF9nZXRUaW1lKCksXG4gICAgICBfbGFzdFVwZGF0ZSA9IF9zdGFydFRpbWUsXG4gICAgICBfZ2FwID0gMTAwMCAvIDI0MCxcbiAgICAgIF9uZXh0VGltZSA9IF9nYXAsXG4gICAgICBfbGlzdGVuZXJzID0gW10sXG4gICAgICBfaWQsXG4gICAgICBfcmVxLFxuICAgICAgX3JhZixcbiAgICAgIF9zZWxmLFxuICAgICAgX2RlbHRhLFxuICAgICAgX2ksXG4gICAgICBfdGljayA9IGZ1bmN0aW9uIF90aWNrKHYpIHtcbiAgICB2YXIgZWxhcHNlZCA9IF9nZXRUaW1lKCkgLSBfbGFzdFVwZGF0ZSxcbiAgICAgICAgbWFudWFsID0gdiA9PT0gdHJ1ZSxcbiAgICAgICAgb3ZlcmxhcCxcbiAgICAgICAgZGlzcGF0Y2gsXG4gICAgICAgIHRpbWUsXG4gICAgICAgIGZyYW1lO1xuXG4gICAgKGVsYXBzZWQgPiBfbGFnVGhyZXNob2xkIHx8IGVsYXBzZWQgPCAwKSAmJiAoX3N0YXJ0VGltZSArPSBlbGFwc2VkIC0gX2FkanVzdGVkTGFnKTtcbiAgICBfbGFzdFVwZGF0ZSArPSBlbGFwc2VkO1xuICAgIHRpbWUgPSBfbGFzdFVwZGF0ZSAtIF9zdGFydFRpbWU7XG4gICAgb3ZlcmxhcCA9IHRpbWUgLSBfbmV4dFRpbWU7XG5cbiAgICBpZiAob3ZlcmxhcCA+IDAgfHwgbWFudWFsKSB7XG4gICAgICBmcmFtZSA9ICsrX3NlbGYuZnJhbWU7XG4gICAgICBfZGVsdGEgPSB0aW1lIC0gX3NlbGYudGltZSAqIDEwMDA7XG4gICAgICBfc2VsZi50aW1lID0gdGltZSA9IHRpbWUgLyAxMDAwO1xuICAgICAgX25leHRUaW1lICs9IG92ZXJsYXAgKyAob3ZlcmxhcCA+PSBfZ2FwID8gNCA6IF9nYXAgLSBvdmVybGFwKTtcbiAgICAgIGRpc3BhdGNoID0gMTtcbiAgICB9XG5cbiAgICBtYW51YWwgfHwgKF9pZCA9IF9yZXEoX3RpY2spKTsgLy9tYWtlIHN1cmUgdGhlIHJlcXVlc3QgaXMgbWFkZSBiZWZvcmUgd2UgZGlzcGF0Y2ggdGhlIFwidGlja1wiIGV2ZW50IHNvIHRoYXQgdGltaW5nIGlzIG1haW50YWluZWQuIE90aGVyd2lzZSwgaWYgcHJvY2Vzc2luZyB0aGUgXCJ0aWNrXCIgcmVxdWlyZXMgYSBidW5jaCBvZiB0aW1lIChsaWtlIDE1bXMpIGFuZCB3ZSdyZSB1c2luZyBhIHNldFRpbWVvdXQoKSB0aGF0J3MgYmFzZWQgb24gMTYuN21zLCBpdCdkIHRlY2huaWNhbGx5IHRha2UgMzEuN21zIGJldHdlZW4gZnJhbWVzIG90aGVyd2lzZS5cblxuICAgIGlmIChkaXNwYXRjaCkge1xuICAgICAgZm9yIChfaSA9IDA7IF9pIDwgX2xpc3RlbmVycy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgLy8gdXNlIF9pIGFuZCBjaGVjayBfbGlzdGVuZXJzLmxlbmd0aCBpbnN0ZWFkIG9mIGEgdmFyaWFibGUgYmVjYXVzZSBhIGxpc3RlbmVyIGNvdWxkIGdldCByZW1vdmVkIGR1cmluZyB0aGUgbG9vcCwgYW5kIGlmIHRoYXQgaGFwcGVucyB0byBhbiBlbGVtZW50IGxlc3MgdGhhbiB0aGUgY3VycmVudCBpbmRleCwgaXQnZCB0aHJvdyB0aGluZ3Mgb2ZmIGluIHRoZSBsb29wLlxuICAgICAgICBfbGlzdGVuZXJzW19pXSh0aW1lLCBfZGVsdGEsIGZyYW1lLCB2KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgX3NlbGYgPSB7XG4gICAgdGltZTogMCxcbiAgICBmcmFtZTogMCxcbiAgICB0aWNrOiBmdW5jdGlvbiB0aWNrKCkge1xuICAgICAgX3RpY2sodHJ1ZSk7XG4gICAgfSxcbiAgICBkZWx0YVJhdGlvOiBmdW5jdGlvbiBkZWx0YVJhdGlvKGZwcykge1xuICAgICAgcmV0dXJuIF9kZWx0YSAvICgxMDAwIC8gKGZwcyB8fCA2MCkpO1xuICAgIH0sXG4gICAgd2FrZTogZnVuY3Rpb24gd2FrZSgpIHtcbiAgICAgIGlmIChfY29yZVJlYWR5KSB7XG4gICAgICAgIGlmICghX2NvcmVJbml0dGVkICYmIF93aW5kb3dFeGlzdHMoKSkge1xuICAgICAgICAgIF93aW4gPSBfY29yZUluaXR0ZWQgPSB3aW5kb3c7XG4gICAgICAgICAgX2RvYyA9IF93aW4uZG9jdW1lbnQgfHwge307XG4gICAgICAgICAgX2dsb2JhbHMuZ3NhcCA9IGdzYXA7XG4gICAgICAgICAgKF93aW4uZ3NhcFZlcnNpb25zIHx8IChfd2luLmdzYXBWZXJzaW9ucyA9IFtdKSkucHVzaChnc2FwLnZlcnNpb24pO1xuXG4gICAgICAgICAgX2luc3RhbGwoX2luc3RhbGxTY29wZSB8fCBfd2luLkdyZWVuU29ja0dsb2JhbHMgfHwgIV93aW4uZ3NhcCAmJiBfd2luIHx8IHt9KTtcblxuICAgICAgICAgIF9yZWdpc3RlclBsdWdpblF1ZXVlLmZvckVhY2goX2NyZWF0ZVBsdWdpbik7XG4gICAgICAgIH1cblxuICAgICAgICBfcmFmID0gdHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG4gICAgICAgIF9pZCAmJiBfc2VsZi5zbGVlcCgpO1xuXG4gICAgICAgIF9yZXEgPSBfcmFmIHx8IGZ1bmN0aW9uIChmKSB7XG4gICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZiwgX25leHRUaW1lIC0gX3NlbGYudGltZSAqIDEwMDAgKyAxIHwgMCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgX3RpY2tlckFjdGl2ZSA9IDE7XG5cbiAgICAgICAgX3RpY2soMik7XG4gICAgICB9XG4gICAgfSxcbiAgICBzbGVlcDogZnVuY3Rpb24gc2xlZXAoKSB7XG4gICAgICAoX3JhZiA/IGNhbmNlbEFuaW1hdGlvbkZyYW1lIDogY2xlYXJUaW1lb3V0KShfaWQpO1xuICAgICAgX3RpY2tlckFjdGl2ZSA9IDA7XG4gICAgICBfcmVxID0gX2VtcHR5RnVuYztcbiAgICB9LFxuICAgIGxhZ1Ntb290aGluZzogZnVuY3Rpb24gbGFnU21vb3RoaW5nKHRocmVzaG9sZCwgYWRqdXN0ZWRMYWcpIHtcbiAgICAgIF9sYWdUaHJlc2hvbGQgPSB0aHJlc2hvbGQgfHwgSW5maW5pdHk7IC8vIHplcm8gc2hvdWxkIGJlIGludGVycHJldGVkIGFzIGJhc2ljYWxseSB1bmxpbWl0ZWRcblxuICAgICAgX2FkanVzdGVkTGFnID0gTWF0aC5taW4oYWRqdXN0ZWRMYWcgfHwgMzMsIF9sYWdUaHJlc2hvbGQpO1xuICAgIH0sXG4gICAgZnBzOiBmdW5jdGlvbiBmcHMoX2Zwcykge1xuICAgICAgX2dhcCA9IDEwMDAgLyAoX2ZwcyB8fCAyNDApO1xuICAgICAgX25leHRUaW1lID0gX3NlbGYudGltZSAqIDEwMDAgKyBfZ2FwO1xuICAgIH0sXG4gICAgYWRkOiBmdW5jdGlvbiBhZGQoY2FsbGJhY2ssIG9uY2UsIHByaW9yaXRpemUpIHtcbiAgICAgIHZhciBmdW5jID0gb25jZSA/IGZ1bmN0aW9uICh0LCBkLCBmLCB2KSB7XG4gICAgICAgIGNhbGxiYWNrKHQsIGQsIGYsIHYpO1xuXG4gICAgICAgIF9zZWxmLnJlbW92ZShmdW5jKTtcbiAgICAgIH0gOiBjYWxsYmFjaztcblxuICAgICAgX3NlbGYucmVtb3ZlKGNhbGxiYWNrKTtcblxuICAgICAgX2xpc3RlbmVyc1twcmlvcml0aXplID8gXCJ1bnNoaWZ0XCIgOiBcInB1c2hcIl0oZnVuYyk7XG5cbiAgICAgIF93YWtlKCk7XG5cbiAgICAgIHJldHVybiBmdW5jO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoY2FsbGJhY2ssIGkpIHtcbiAgICAgIH4oaSA9IF9saXN0ZW5lcnMuaW5kZXhPZihjYWxsYmFjaykpICYmIF9saXN0ZW5lcnMuc3BsaWNlKGksIDEpICYmIF9pID49IGkgJiYgX2ktLTtcbiAgICB9LFxuICAgIF9saXN0ZW5lcnM6IF9saXN0ZW5lcnNcbiAgfTtcbiAgcmV0dXJuIF9zZWxmO1xufSgpLFxuICAgIF93YWtlID0gZnVuY3Rpb24gX3dha2UoKSB7XG4gIHJldHVybiAhX3RpY2tlckFjdGl2ZSAmJiBfdGlja2VyLndha2UoKTtcbn0sXG4gICAgLy9hbHNvIGVuc3VyZXMgdGhlIGNvcmUgY2xhc3NlcyBhcmUgaW5pdGlhbGl6ZWQuXG5cbi8qXG4qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiogRUFTSU5HXG4qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiovXG5fZWFzZU1hcCA9IHt9LFxuICAgIF9jdXN0b21FYXNlRXhwID0gL15bXFxkLlxcLU1dW1xcZC5cXC0sXFxzXS8sXG4gICAgX3F1b3Rlc0V4cCA9IC9bXCInXS9nLFxuICAgIF9wYXJzZU9iamVjdEluU3RyaW5nID0gZnVuY3Rpb24gX3BhcnNlT2JqZWN0SW5TdHJpbmcodmFsdWUpIHtcbiAgLy90YWtlcyBhIHN0cmluZyBsaWtlIFwie3dpZ2dsZXM6MTAsIHR5cGU6YW50aWNpcGF0ZX0pXCIgYW5kIHR1cm5zIGl0IGludG8gYSByZWFsIG9iamVjdC4gTm90aWNlIGl0IGVuZHMgaW4gXCIpXCIgYW5kIGluY2x1ZGVzIHRoZSB7fSB3cmFwcGVycy4gVGhpcyBpcyBiZWNhdXNlIHdlIG9ubHkgdXNlIHRoaXMgZnVuY3Rpb24gZm9yIHBhcnNpbmcgZWFzZSBjb25maWdzIGFuZCBwcmlvcml0aXplZCBvcHRpbWl6YXRpb24gcmF0aGVyIHRoYW4gcmV1c2FiaWxpdHkuXG4gIHZhciBvYmogPSB7fSxcbiAgICAgIHNwbGl0ID0gdmFsdWUuc3Vic3RyKDEsIHZhbHVlLmxlbmd0aCAtIDMpLnNwbGl0KFwiOlwiKSxcbiAgICAgIGtleSA9IHNwbGl0WzBdLFxuICAgICAgaSA9IDEsXG4gICAgICBsID0gc3BsaXQubGVuZ3RoLFxuICAgICAgaW5kZXgsXG4gICAgICB2YWwsXG4gICAgICBwYXJzZWRWYWw7XG5cbiAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICB2YWwgPSBzcGxpdFtpXTtcbiAgICBpbmRleCA9IGkgIT09IGwgLSAxID8gdmFsLmxhc3RJbmRleE9mKFwiLFwiKSA6IHZhbC5sZW5ndGg7XG4gICAgcGFyc2VkVmFsID0gdmFsLnN1YnN0cigwLCBpbmRleCk7XG4gICAgb2JqW2tleV0gPSBpc05hTihwYXJzZWRWYWwpID8gcGFyc2VkVmFsLnJlcGxhY2UoX3F1b3Rlc0V4cCwgXCJcIikudHJpbSgpIDogK3BhcnNlZFZhbDtcbiAgICBrZXkgPSB2YWwuc3Vic3RyKGluZGV4ICsgMSkudHJpbSgpO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn0sXG4gICAgX3ZhbHVlSW5QYXJlbnRoZXNlcyA9IGZ1bmN0aW9uIF92YWx1ZUluUGFyZW50aGVzZXModmFsdWUpIHtcbiAgdmFyIG9wZW4gPSB2YWx1ZS5pbmRleE9mKFwiKFwiKSArIDEsXG4gICAgICBjbG9zZSA9IHZhbHVlLmluZGV4T2YoXCIpXCIpLFxuICAgICAgbmVzdGVkID0gdmFsdWUuaW5kZXhPZihcIihcIiwgb3Blbik7XG4gIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcob3Blbiwgfm5lc3RlZCAmJiBuZXN0ZWQgPCBjbG9zZSA/IHZhbHVlLmluZGV4T2YoXCIpXCIsIGNsb3NlICsgMSkgOiBjbG9zZSk7XG59LFxuICAgIF9jb25maWdFYXNlRnJvbVN0cmluZyA9IGZ1bmN0aW9uIF9jb25maWdFYXNlRnJvbVN0cmluZyhuYW1lKSB7XG4gIC8vbmFtZSBjYW4gYmUgYSBzdHJpbmcgbGlrZSBcImVsYXN0aWMub3V0KDEsMC41KVwiLCBhbmQgcGFzcyBpbiBfZWFzZU1hcCBhcyBvYmogYW5kIGl0J2xsIHBhcnNlIGl0IG91dCBhbmQgY2FsbCB0aGUgYWN0dWFsIGZ1bmN0aW9uIGxpa2UgX2Vhc2VNYXAuRWxhc3RpYy5lYXNlT3V0LmNvbmZpZygxLDAuNSkuIEl0IHdpbGwgYWxzbyBwYXJzZSBjdXN0b20gZWFzZSBzdHJpbmdzIGFzIGxvbmcgYXMgQ3VzdG9tRWFzZSBpcyBsb2FkZWQgYW5kIHJlZ2lzdGVyZWQgKGludGVybmFsbHkgYXMgX2Vhc2VNYXAuX0NFKS5cbiAgdmFyIHNwbGl0ID0gKG5hbWUgKyBcIlwiKS5zcGxpdChcIihcIiksXG4gICAgICBlYXNlID0gX2Vhc2VNYXBbc3BsaXRbMF1dO1xuICByZXR1cm4gZWFzZSAmJiBzcGxpdC5sZW5ndGggPiAxICYmIGVhc2UuY29uZmlnID8gZWFzZS5jb25maWcuYXBwbHkobnVsbCwgfm5hbWUuaW5kZXhPZihcIntcIikgPyBbX3BhcnNlT2JqZWN0SW5TdHJpbmcoc3BsaXRbMV0pXSA6IF92YWx1ZUluUGFyZW50aGVzZXMobmFtZSkuc3BsaXQoXCIsXCIpLm1hcChfbnVtZXJpY0lmUG9zc2libGUpKSA6IF9lYXNlTWFwLl9DRSAmJiBfY3VzdG9tRWFzZUV4cC50ZXN0KG5hbWUpID8gX2Vhc2VNYXAuX0NFKFwiXCIsIG5hbWUpIDogZWFzZTtcbn0sXG4gICAgX2ludmVydEVhc2UgPSBmdW5jdGlvbiBfaW52ZXJ0RWFzZShlYXNlKSB7XG4gIHJldHVybiBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiAxIC0gZWFzZSgxIC0gcCk7XG4gIH07XG59LFxuICAgIC8vIGFsbG93IHlveW9FYXNlIHRvIGJlIHNldCBpbiBjaGlsZHJlbiBhbmQgaGF2ZSB0aG9zZSBhZmZlY3RlZCB3aGVuIHRoZSBwYXJlbnQvYW5jZXN0b3IgdGltZWxpbmUgeW95b3MuXG5fcHJvcGFnYXRlWW95b0Vhc2UgPSBmdW5jdGlvbiBfcHJvcGFnYXRlWW95b0Vhc2UodGltZWxpbmUsIGlzWW95bykge1xuICB2YXIgY2hpbGQgPSB0aW1lbGluZS5fZmlyc3QsXG4gICAgICBlYXNlO1xuXG4gIHdoaWxlIChjaGlsZCkge1xuICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFRpbWVsaW5lKSB7XG4gICAgICBfcHJvcGFnYXRlWW95b0Vhc2UoY2hpbGQsIGlzWW95byk7XG4gICAgfSBlbHNlIGlmIChjaGlsZC52YXJzLnlveW9FYXNlICYmICghY2hpbGQuX3lveW8gfHwgIWNoaWxkLl9yZXBlYXQpICYmIGNoaWxkLl95b3lvICE9PSBpc1lveW8pIHtcbiAgICAgIGlmIChjaGlsZC50aW1lbGluZSkge1xuICAgICAgICBfcHJvcGFnYXRlWW95b0Vhc2UoY2hpbGQudGltZWxpbmUsIGlzWW95byk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlYXNlID0gY2hpbGQuX2Vhc2U7XG4gICAgICAgIGNoaWxkLl9lYXNlID0gY2hpbGQuX3lFYXNlO1xuICAgICAgICBjaGlsZC5feUVhc2UgPSBlYXNlO1xuICAgICAgICBjaGlsZC5feW95byA9IGlzWW95bztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaGlsZCA9IGNoaWxkLl9uZXh0O1xuICB9XG59LFxuICAgIF9wYXJzZUVhc2UgPSBmdW5jdGlvbiBfcGFyc2VFYXNlKGVhc2UsIGRlZmF1bHRFYXNlKSB7XG4gIHJldHVybiAhZWFzZSA/IGRlZmF1bHRFYXNlIDogKF9pc0Z1bmN0aW9uKGVhc2UpID8gZWFzZSA6IF9lYXNlTWFwW2Vhc2VdIHx8IF9jb25maWdFYXNlRnJvbVN0cmluZyhlYXNlKSkgfHwgZGVmYXVsdEVhc2U7XG59LFxuICAgIF9pbnNlcnRFYXNlID0gZnVuY3Rpb24gX2luc2VydEVhc2UobmFtZXMsIGVhc2VJbiwgZWFzZU91dCwgZWFzZUluT3V0KSB7XG4gIGlmIChlYXNlT3V0ID09PSB2b2lkIDApIHtcbiAgICBlYXNlT3V0ID0gZnVuY3Rpb24gZWFzZU91dChwKSB7XG4gICAgICByZXR1cm4gMSAtIGVhc2VJbigxIC0gcCk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChlYXNlSW5PdXQgPT09IHZvaWQgMCkge1xuICAgIGVhc2VJbk91dCA9IGZ1bmN0aW9uIGVhc2VJbk91dChwKSB7XG4gICAgICByZXR1cm4gcCA8IC41ID8gZWFzZUluKHAgKiAyKSAvIDIgOiAxIC0gZWFzZUluKCgxIC0gcCkgKiAyKSAvIDI7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBlYXNlID0ge1xuICAgIGVhc2VJbjogZWFzZUluLFxuICAgIGVhc2VPdXQ6IGVhc2VPdXQsXG4gICAgZWFzZUluT3V0OiBlYXNlSW5PdXRcbiAgfSxcbiAgICAgIGxvd2VyY2FzZU5hbWU7XG5cbiAgX2ZvckVhY2hOYW1lKG5hbWVzLCBmdW5jdGlvbiAobmFtZSkge1xuICAgIF9lYXNlTWFwW25hbWVdID0gX2dsb2JhbHNbbmFtZV0gPSBlYXNlO1xuICAgIF9lYXNlTWFwW2xvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCldID0gZWFzZU91dDtcblxuICAgIGZvciAodmFyIHAgaW4gZWFzZSkge1xuICAgICAgX2Vhc2VNYXBbbG93ZXJjYXNlTmFtZSArIChwID09PSBcImVhc2VJblwiID8gXCIuaW5cIiA6IHAgPT09IFwiZWFzZU91dFwiID8gXCIub3V0XCIgOiBcIi5pbk91dFwiKV0gPSBfZWFzZU1hcFtuYW1lICsgXCIuXCIgKyBwXSA9IGVhc2VbcF07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWFzZTtcbn0sXG4gICAgX2Vhc2VJbk91dEZyb21PdXQgPSBmdW5jdGlvbiBfZWFzZUluT3V0RnJvbU91dChlYXNlT3V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiBwIDwgLjUgPyAoMSAtIGVhc2VPdXQoMSAtIHAgKiAyKSkgLyAyIDogLjUgKyBlYXNlT3V0KChwIC0gLjUpICogMikgLyAyO1xuICB9O1xufSxcbiAgICBfY29uZmlnRWxhc3RpYyA9IGZ1bmN0aW9uIF9jb25maWdFbGFzdGljKHR5cGUsIGFtcGxpdHVkZSwgcGVyaW9kKSB7XG4gIHZhciBwMSA9IGFtcGxpdHVkZSA+PSAxID8gYW1wbGl0dWRlIDogMSxcbiAgICAgIC8vbm90ZTogaWYgYW1wbGl0dWRlIGlzIDwgMSwgd2Ugc2ltcGx5IGFkanVzdCB0aGUgcGVyaW9kIGZvciBhIG1vcmUgbmF0dXJhbCBmZWVsLiBPdGhlcndpc2UgdGhlIG1hdGggZG9lc24ndCB3b3JrIHJpZ2h0IGFuZCB0aGUgY3VydmUgc3RhcnRzIGF0IDEuXG4gIHAyID0gKHBlcmlvZCB8fCAodHlwZSA/IC4zIDogLjQ1KSkgLyAoYW1wbGl0dWRlIDwgMSA/IGFtcGxpdHVkZSA6IDEpLFxuICAgICAgcDMgPSBwMiAvIF8yUEkgKiAoTWF0aC5hc2luKDEgLyBwMSkgfHwgMCksXG4gICAgICBlYXNlT3V0ID0gZnVuY3Rpb24gZWFzZU91dChwKSB7XG4gICAgcmV0dXJuIHAgPT09IDEgPyAxIDogcDEgKiBNYXRoLnBvdygyLCAtMTAgKiBwKSAqIF9zaW4oKHAgLSBwMykgKiBwMikgKyAxO1xuICB9LFxuICAgICAgZWFzZSA9IHR5cGUgPT09IFwib3V0XCIgPyBlYXNlT3V0IDogdHlwZSA9PT0gXCJpblwiID8gZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gMSAtIGVhc2VPdXQoMSAtIHApO1xuICB9IDogX2Vhc2VJbk91dEZyb21PdXQoZWFzZU91dCk7XG5cbiAgcDIgPSBfMlBJIC8gcDI7IC8vcHJlY2FsY3VsYXRlIHRvIG9wdGltaXplXG5cbiAgZWFzZS5jb25maWcgPSBmdW5jdGlvbiAoYW1wbGl0dWRlLCBwZXJpb2QpIHtcbiAgICByZXR1cm4gX2NvbmZpZ0VsYXN0aWModHlwZSwgYW1wbGl0dWRlLCBwZXJpb2QpO1xuICB9O1xuXG4gIHJldHVybiBlYXNlO1xufSxcbiAgICBfY29uZmlnQmFjayA9IGZ1bmN0aW9uIF9jb25maWdCYWNrKHR5cGUsIG92ZXJzaG9vdCkge1xuICBpZiAob3ZlcnNob290ID09PSB2b2lkIDApIHtcbiAgICBvdmVyc2hvb3QgPSAxLjcwMTU4O1xuICB9XG5cbiAgdmFyIGVhc2VPdXQgPSBmdW5jdGlvbiBlYXNlT3V0KHApIHtcbiAgICByZXR1cm4gcCA/IC0tcCAqIHAgKiAoKG92ZXJzaG9vdCArIDEpICogcCArIG92ZXJzaG9vdCkgKyAxIDogMDtcbiAgfSxcbiAgICAgIGVhc2UgPSB0eXBlID09PSBcIm91dFwiID8gZWFzZU91dCA6IHR5cGUgPT09IFwiaW5cIiA/IGZ1bmN0aW9uIChwKSB7XG4gICAgcmV0dXJuIDEgLSBlYXNlT3V0KDEgLSBwKTtcbiAgfSA6IF9lYXNlSW5PdXRGcm9tT3V0KGVhc2VPdXQpO1xuXG4gIGVhc2UuY29uZmlnID0gZnVuY3Rpb24gKG92ZXJzaG9vdCkge1xuICAgIHJldHVybiBfY29uZmlnQmFjayh0eXBlLCBvdmVyc2hvb3QpO1xuICB9O1xuXG4gIHJldHVybiBlYXNlO1xufTsgLy8gYSBjaGVhcGVyIChrYiBhbmQgY3B1KSBidXQgbW9yZSBtaWxkIHdheSB0byBnZXQgYSBwYXJhbWV0ZXJpemVkIHdlaWdodGVkIGVhc2UgYnkgZmVlZGluZyBpbiBhIHZhbHVlIGJldHdlZW4gLTEgKGVhc2VJbikgYW5kIDEgKGVhc2VPdXQpIHdoZXJlIDAgaXMgbGluZWFyLlxuLy8gX3dlaWdodGVkRWFzZSA9IHJhdGlvID0+IHtcbi8vIFx0bGV0IHkgPSAwLjUgKyByYXRpbyAvIDI7XG4vLyBcdHJldHVybiBwID0+ICgyICogKDEgLSBwKSAqIHAgKiB5ICsgcCAqIHApO1xuLy8gfSxcbi8vIGEgc3Ryb25nZXIgKGJ1dCBtb3JlIGV4cGVuc2l2ZSBrYi9jcHUpIHBhcmFtZXRlcml6ZWQgd2VpZ2h0ZWQgZWFzZSB0aGF0IGxldHMgeW91IGZlZWQgaW4gYSB2YWx1ZSBiZXR3ZWVuIC0xIChlYXNlSW4pIGFuZCAxIChlYXNlT3V0KSB3aGVyZSAwIGlzIGxpbmVhci5cbi8vIF93ZWlnaHRlZEVhc2VTdHJvbmcgPSByYXRpbyA9PiB7XG4vLyBcdHJhdGlvID0gLjUgKyByYXRpbyAvIDI7XG4vLyBcdGxldCBvID0gMSAvIDMgKiAocmF0aW8gPCAuNSA/IHJhdGlvIDogMSAtIHJhdGlvKSxcbi8vIFx0XHRiID0gcmF0aW8gLSBvLFxuLy8gXHRcdGMgPSByYXRpbyArIG87XG4vLyBcdHJldHVybiBwID0+IHAgPT09IDEgPyBwIDogMyAqIGIgKiAoMSAtIHApICogKDEgLSBwKSAqIHAgKyAzICogYyAqICgxIC0gcCkgKiBwICogcCArIHAgKiBwICogcDtcbi8vIH07XG5cblxuX2ZvckVhY2hOYW1lKFwiTGluZWFyLFF1YWQsQ3ViaWMsUXVhcnQsUXVpbnQsU3Ryb25nXCIsIGZ1bmN0aW9uIChuYW1lLCBpKSB7XG4gIHZhciBwb3dlciA9IGkgPCA1ID8gaSArIDEgOiBpO1xuXG4gIF9pbnNlcnRFYXNlKG5hbWUgKyBcIixQb3dlclwiICsgKHBvd2VyIC0gMSksIGkgPyBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiBNYXRoLnBvdyhwLCBwb3dlcik7XG4gIH0gOiBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiBwO1xuICB9LCBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiAxIC0gTWF0aC5wb3coMSAtIHAsIHBvd2VyKTtcbiAgfSwgZnVuY3Rpb24gKHApIHtcbiAgICByZXR1cm4gcCA8IC41ID8gTWF0aC5wb3cocCAqIDIsIHBvd2VyKSAvIDIgOiAxIC0gTWF0aC5wb3coKDEgLSBwKSAqIDIsIHBvd2VyKSAvIDI7XG4gIH0pO1xufSk7XG5cbl9lYXNlTWFwLkxpbmVhci5lYXNlTm9uZSA9IF9lYXNlTWFwLm5vbmUgPSBfZWFzZU1hcC5MaW5lYXIuZWFzZUluO1xuXG5faW5zZXJ0RWFzZShcIkVsYXN0aWNcIiwgX2NvbmZpZ0VsYXN0aWMoXCJpblwiKSwgX2NvbmZpZ0VsYXN0aWMoXCJvdXRcIiksIF9jb25maWdFbGFzdGljKCkpO1xuXG4oZnVuY3Rpb24gKG4sIGMpIHtcbiAgdmFyIG4xID0gMSAvIGMsXG4gICAgICBuMiA9IDIgKiBuMSxcbiAgICAgIG4zID0gMi41ICogbjEsXG4gICAgICBlYXNlT3V0ID0gZnVuY3Rpb24gZWFzZU91dChwKSB7XG4gICAgcmV0dXJuIHAgPCBuMSA/IG4gKiBwICogcCA6IHAgPCBuMiA/IG4gKiBNYXRoLnBvdyhwIC0gMS41IC8gYywgMikgKyAuNzUgOiBwIDwgbjMgPyBuICogKHAgLT0gMi4yNSAvIGMpICogcCArIC45Mzc1IDogbiAqIE1hdGgucG93KHAgLSAyLjYyNSAvIGMsIDIpICsgLjk4NDM3NTtcbiAgfTtcblxuICBfaW5zZXJ0RWFzZShcIkJvdW5jZVwiLCBmdW5jdGlvbiAocCkge1xuICAgIHJldHVybiAxIC0gZWFzZU91dCgxIC0gcCk7XG4gIH0sIGVhc2VPdXQpO1xufSkoNy41NjI1LCAyLjc1KTtcblxuX2luc2VydEVhc2UoXCJFeHBvXCIsIGZ1bmN0aW9uIChwKSB7XG4gIHJldHVybiBNYXRoLnBvdygyLCAxMCAqIChwIC0gMSkpICogcCArIHAgKiBwICogcCAqIHAgKiBwICogcCAqICgxIC0gcCk7XG59KTsgLy8gcHJldmlvdXNseSAyICoqICgxMCAqIChwIC0gMSkpIGJ1dCB0aGF0IGRvZXNuJ3QgZW5kIHVwIHdpdGggdGhlIHZhbHVlIHF1aXRlIGF0IHRoZSByaWdodCBzcG90IHNvIHdlIGRvIGEgYmxlbmRlZCBlYXNlIHRvIGVuc3VyZSBpdCBsYW5kcyB3aGVyZSBpdCBzaG91bGQgcGVyZmVjdGx5LlxuXG5cbl9pbnNlcnRFYXNlKFwiQ2lyY1wiLCBmdW5jdGlvbiAocCkge1xuICByZXR1cm4gLShfc3FydCgxIC0gcCAqIHApIC0gMSk7XG59KTtcblxuX2luc2VydEVhc2UoXCJTaW5lXCIsIGZ1bmN0aW9uIChwKSB7XG4gIHJldHVybiBwID09PSAxID8gMSA6IC1fY29zKHAgKiBfSEFMRl9QSSkgKyAxO1xufSk7XG5cbl9pbnNlcnRFYXNlKFwiQmFja1wiLCBfY29uZmlnQmFjayhcImluXCIpLCBfY29uZmlnQmFjayhcIm91dFwiKSwgX2NvbmZpZ0JhY2soKSk7XG5cbl9lYXNlTWFwLlN0ZXBwZWRFYXNlID0gX2Vhc2VNYXAuc3RlcHMgPSBfZ2xvYmFscy5TdGVwcGVkRWFzZSA9IHtcbiAgY29uZmlnOiBmdW5jdGlvbiBjb25maWcoc3RlcHMsIGltbWVkaWF0ZVN0YXJ0KSB7XG4gICAgaWYgKHN0ZXBzID09PSB2b2lkIDApIHtcbiAgICAgIHN0ZXBzID0gMTtcbiAgICB9XG5cbiAgICB2YXIgcDEgPSAxIC8gc3RlcHMsXG4gICAgICAgIHAyID0gc3RlcHMgKyAoaW1tZWRpYXRlU3RhcnQgPyAwIDogMSksXG4gICAgICAgIHAzID0gaW1tZWRpYXRlU3RhcnQgPyAxIDogMCxcbiAgICAgICAgbWF4ID0gMSAtIF90aW55TnVtO1xuICAgIHJldHVybiBmdW5jdGlvbiAocCkge1xuICAgICAgcmV0dXJuICgocDIgKiBfY2xhbXAoMCwgbWF4LCBwKSB8IDApICsgcDMpICogcDE7XG4gICAgfTtcbiAgfVxufTtcbl9kZWZhdWx0cy5lYXNlID0gX2Vhc2VNYXBbXCJxdWFkLm91dFwiXTtcblxuX2ZvckVhY2hOYW1lKFwib25Db21wbGV0ZSxvblVwZGF0ZSxvblN0YXJ0LG9uUmVwZWF0LG9uUmV2ZXJzZUNvbXBsZXRlLG9uSW50ZXJydXB0XCIsIGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBfY2FsbGJhY2tOYW1lcyArPSBuYW1lICsgXCIsXCIgKyBuYW1lICsgXCJQYXJhbXMsXCI7XG59KTtcbi8qXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ0FDSEVcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG5leHBvcnQgdmFyIEdTQ2FjaGUgPSBmdW5jdGlvbiBHU0NhY2hlKHRhcmdldCwgaGFybmVzcykge1xuICB0aGlzLmlkID0gX2dzSUQrKztcbiAgdGFyZ2V0Ll9nc2FwID0gdGhpcztcbiAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gIHRoaXMuaGFybmVzcyA9IGhhcm5lc3M7XG4gIHRoaXMuZ2V0ID0gaGFybmVzcyA/IGhhcm5lc3MuZ2V0IDogX2dldFByb3BlcnR5O1xuICB0aGlzLnNldCA9IGhhcm5lc3MgPyBoYXJuZXNzLmdldFNldHRlciA6IF9nZXRTZXR0ZXI7XG59O1xuLypcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBBTklNQVRJT05cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuZXhwb3J0IHZhciBBbmltYXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBBbmltYXRpb24odmFycykge1xuICAgIHRoaXMudmFycyA9IHZhcnM7XG4gICAgdGhpcy5fZGVsYXkgPSArdmFycy5kZWxheSB8fCAwO1xuXG4gICAgaWYgKHRoaXMuX3JlcGVhdCA9IHZhcnMucmVwZWF0ID09PSBJbmZpbml0eSA/IC0yIDogdmFycy5yZXBlYXQgfHwgMCkge1xuICAgICAgLy8gVE9ETzogcmVwZWF0OiBJbmZpbml0eSBvbiBhIHRpbWVsaW5lJ3MgY2hpbGRyZW4gbXVzdCBmbGFnIHRoYXQgdGltZWxpbmUgaW50ZXJuYWxseSBhbmQgYWZmZWN0IGl0cyB0b3RhbER1cmF0aW9uLCBvdGhlcndpc2UgaXQnbGwgc3RvcCBpbiB0aGUgbmVnYXRpdmUgZGlyZWN0aW9uIHdoZW4gcmVhY2hpbmcgdGhlIHN0YXJ0LlxuICAgICAgdGhpcy5fckRlbGF5ID0gdmFycy5yZXBlYXREZWxheSB8fCAwO1xuICAgICAgdGhpcy5feW95byA9ICEhdmFycy55b3lvIHx8ICEhdmFycy55b3lvRWFzZTtcbiAgICB9XG5cbiAgICB0aGlzLl90cyA9IDE7XG5cbiAgICBfc2V0RHVyYXRpb24odGhpcywgK3ZhcnMuZHVyYXRpb24sIDEsIDEpO1xuXG4gICAgdGhpcy5kYXRhID0gdmFycy5kYXRhO1xuXG4gICAgaWYgKF9jb250ZXh0KSB7XG4gICAgICB0aGlzLl9jdHggPSBfY29udGV4dDtcblxuICAgICAgX2NvbnRleHQuZGF0YS5wdXNoKHRoaXMpO1xuICAgIH1cblxuICAgIF90aWNrZXJBY3RpdmUgfHwgX3RpY2tlci53YWtlKCk7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gQW5pbWF0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uZGVsYXkgPSBmdW5jdGlvbiBkZWxheSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkge1xuICAgICAgdGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuc21vb3RoQ2hpbGRUaW1pbmcgJiYgdGhpcy5zdGFydFRpbWUodGhpcy5fc3RhcnQgKyB2YWx1ZSAtIHRoaXMuX2RlbGF5KTtcbiAgICAgIHRoaXMuX2RlbGF5ID0gdmFsdWU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZGVsYXk7XG4gIH07XG5cbiAgX3Byb3RvLmR1cmF0aW9uID0gZnVuY3Rpb24gZHVyYXRpb24odmFsdWUpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IHRoaXMudG90YWxEdXJhdGlvbih0aGlzLl9yZXBlYXQgPiAwID8gdmFsdWUgKyAodmFsdWUgKyB0aGlzLl9yRGVsYXkpICogdGhpcy5fcmVwZWF0IDogdmFsdWUpIDogdGhpcy50b3RhbER1cmF0aW9uKCkgJiYgdGhpcy5fZHVyO1xuICB9O1xuXG4gIF9wcm90by50b3RhbER1cmF0aW9uID0gZnVuY3Rpb24gdG90YWxEdXJhdGlvbih2YWx1ZSkge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3REdXI7XG4gICAgfVxuXG4gICAgdGhpcy5fZGlydHkgPSAwO1xuICAgIHJldHVybiBfc2V0RHVyYXRpb24odGhpcywgdGhpcy5fcmVwZWF0IDwgMCA/IHZhbHVlIDogKHZhbHVlIC0gdGhpcy5fcmVwZWF0ICogdGhpcy5fckRlbGF5KSAvICh0aGlzLl9yZXBlYXQgKyAxKSk7XG4gIH07XG5cbiAgX3Byb3RvLnRvdGFsVGltZSA9IGZ1bmN0aW9uIHRvdGFsVGltZShfdG90YWxUaW1lLCBzdXBwcmVzc0V2ZW50cykge1xuICAgIF93YWtlKCk7XG5cbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLl90VGltZTtcbiAgICB9XG5cbiAgICB2YXIgcGFyZW50ID0gdGhpcy5fZHA7XG5cbiAgICBpZiAocGFyZW50ICYmIHBhcmVudC5zbW9vdGhDaGlsZFRpbWluZyAmJiB0aGlzLl90cykge1xuICAgICAgX2FsaWduUGxheWhlYWQodGhpcywgX3RvdGFsVGltZSk7XG5cbiAgICAgICFwYXJlbnQuX2RwIHx8IHBhcmVudC5wYXJlbnQgfHwgX3Bvc3RBZGRDaGVja3MocGFyZW50LCB0aGlzKTsgLy8gZWRnZSBjYXNlOiBpZiB0aGlzIGlzIGEgY2hpbGQgb2YgYSB0aW1lbGluZSB0aGF0IGFscmVhZHkgY29tcGxldGVkLCBmb3IgZXhhbXBsZSwgd2UgbXVzdCByZS1hY3RpdmF0ZSB0aGUgcGFyZW50LlxuICAgICAgLy9pbiBjYXNlIGFueSBvZiB0aGUgYW5jZXN0b3IgdGltZWxpbmVzIGhhZCBjb21wbGV0ZWQgYnV0IHNob3VsZCBub3cgYmUgZW5hYmxlZCwgd2Ugc2hvdWxkIHJlc2V0IHRoZWlyIHRvdGFsVGltZSgpIHdoaWNoIHdpbGwgYWxzbyBlbnN1cmUgdGhhdCB0aGV5J3JlIGxpbmVkIHVwIHByb3Blcmx5IGFuZCBlbmFibGVkLiBTa2lwIGZvciBhbmltYXRpb25zIHRoYXQgYXJlIG9uIHRoZSByb290ICh3YXN0ZWZ1bCkuIEV4YW1wbGU6IGEgVGltZWxpbmVMaXRlLmV4cG9ydFJvb3QoKSBpcyBwZXJmb3JtZWQgd2hlbiB0aGVyZSdzIGEgcGF1c2VkIHR3ZWVuIG9uIHRoZSByb290LCB0aGUgZXhwb3J0IHdpbGwgbm90IGNvbXBsZXRlIHVudGlsIHRoYXQgdHdlZW4gaXMgdW5wYXVzZWQsIGJ1dCBpbWFnaW5lIGEgY2hpbGQgZ2V0cyByZXN0YXJ0ZWQgbGF0ZXIsIGFmdGVyIGFsbCBbdW5wYXVzZWRdIHR3ZWVucyBoYXZlIGNvbXBsZXRlZC4gVGhlIHN0YXJ0IG9mIHRoYXQgY2hpbGQgd291bGQgZ2V0IHB1c2hlZCBvdXQsIGJ1dCBvbmUgb2YgdGhlIGFuY2VzdG9ycyBtYXkgaGF2ZSBjb21wbGV0ZWQuXG5cbiAgICAgIHdoaWxlIChwYXJlbnQgJiYgcGFyZW50LnBhcmVudCkge1xuICAgICAgICBpZiAocGFyZW50LnBhcmVudC5fdGltZSAhPT0gcGFyZW50Ll9zdGFydCArIChwYXJlbnQuX3RzID49IDAgPyBwYXJlbnQuX3RUaW1lIC8gcGFyZW50Ll90cyA6IChwYXJlbnQudG90YWxEdXJhdGlvbigpIC0gcGFyZW50Ll90VGltZSkgLyAtcGFyZW50Ll90cykpIHtcbiAgICAgICAgICBwYXJlbnQudG90YWxUaW1lKHBhcmVudC5fdFRpbWUsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnBhcmVudCAmJiB0aGlzLl9kcC5hdXRvUmVtb3ZlQ2hpbGRyZW4gJiYgKHRoaXMuX3RzID4gMCAmJiBfdG90YWxUaW1lIDwgdGhpcy5fdER1ciB8fCB0aGlzLl90cyA8IDAgJiYgX3RvdGFsVGltZSA+IDAgfHwgIXRoaXMuX3REdXIgJiYgIV90b3RhbFRpbWUpKSB7XG4gICAgICAgIC8vaWYgdGhlIGFuaW1hdGlvbiBkb2Vzbid0IGhhdmUgYSBwYXJlbnQsIHB1dCBpdCBiYWNrIGludG8gaXRzIGxhc3QgcGFyZW50IChyZWNvcmRlZCBhcyBfZHAgZm9yIGV4YWN0bHkgY2FzZXMgbGlrZSB0aGlzKS4gTGltaXQgdG8gcGFyZW50cyB3aXRoIGF1dG9SZW1vdmVDaGlsZHJlbiAobGlrZSBnbG9iYWxUaW1lbGluZSkgc28gdGhhdCBpZiB0aGUgdXNlciBtYW51YWxseSByZW1vdmVzIGFuIGFuaW1hdGlvbiBmcm9tIGEgdGltZWxpbmUgYW5kIHRoZW4gYWx0ZXJzIGl0cyBwbGF5aGVhZCwgaXQgZG9lc24ndCBnZXQgYWRkZWQgYmFjayBpbi5cbiAgICAgICAgX2FkZFRvVGltZWxpbmUodGhpcy5fZHAsIHRoaXMsIHRoaXMuX3N0YXJ0IC0gdGhpcy5fZGVsYXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl90VGltZSAhPT0gX3RvdGFsVGltZSB8fCAhdGhpcy5fZHVyICYmICFzdXBwcmVzc0V2ZW50cyB8fCB0aGlzLl9pbml0dGVkICYmIE1hdGguYWJzKHRoaXMuX3pUaW1lKSA9PT0gX3RpbnlOdW0gfHwgIV90b3RhbFRpbWUgJiYgIXRoaXMuX2luaXR0ZWQgJiYgKHRoaXMuYWRkIHx8IHRoaXMuX3B0TG9va3VwKSkge1xuICAgICAgLy8gY2hlY2sgZm9yIF9wdExvb2t1cCBvbiBhIFR3ZWVuIGluc3RhbmNlIHRvIGVuc3VyZSBpdCBoYXMgYWN0dWFsbHkgZmluaXNoZWQgYmVpbmcgaW5zdGFudGlhdGVkLCBvdGhlcndpc2UgaWYgdGhpcy5yZXZlcnNlKCkgZ2V0cyBjYWxsZWQgaW4gdGhlIEFuaW1hdGlvbiBjb25zdHJ1Y3RvciwgaXQgY291bGQgdHJpZ2dlciBhIHJlbmRlcigpIGhlcmUgZXZlbiB0aG91Z2ggdGhlIF90YXJnZXRzIHdlcmVuJ3QgcG9wdWxhdGVkLCB0aHVzIHdoZW4gX2luaXQoKSBpcyBjYWxsZWQgdGhlcmUgd29uJ3QgYmUgYW55IFByb3BUd2VlbnMgKGl0J2xsIGFjdCBsaWtlIHRoZSB0d2VlbiBpcyBub24tZnVuY3Rpb25hbClcbiAgICAgIHRoaXMuX3RzIHx8ICh0aGlzLl9wVGltZSA9IF90b3RhbFRpbWUpOyAvLyBvdGhlcndpc2UsIGlmIGFuIGFuaW1hdGlvbiBpcyBwYXVzZWQsIHRoZW4gdGhlIHBsYXloZWFkIGlzIG1vdmVkIGJhY2sgdG8gemVybywgdGhlbiByZXN1bWVkLCBpdCdkIHJldmVydCBiYWNrIHRvIHRoZSBvcmlnaW5hbCB0aW1lIGF0IHRoZSBwYXVzZVxuICAgICAgLy9pZiAoIXRoaXMuX2xvY2spIHsgLy8gYXZvaWQgZW5kbGVzcyByZWN1cnNpb24gKG5vdCBzdXJlIHdlIG5lZWQgdGhpcyB5ZXQgb3IgaWYgaXQncyB3b3J0aCB0aGUgcGVyZm9ybWFuY2UgaGl0KVxuICAgICAgLy8gICB0aGlzLl9sb2NrID0gMTtcblxuICAgICAgX2xhenlTYWZlUmVuZGVyKHRoaXMsIF90b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzKTsgLy8gICB0aGlzLl9sb2NrID0gMDtcbiAgICAgIC8vfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvLnRpbWUgPSBmdW5jdGlvbiB0aW1lKHZhbHVlLCBzdXBwcmVzc0V2ZW50cykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gdGhpcy50b3RhbFRpbWUoTWF0aC5taW4odGhpcy50b3RhbER1cmF0aW9uKCksIHZhbHVlICsgX2VsYXBzZWRDeWNsZUR1cmF0aW9uKHRoaXMpKSAlICh0aGlzLl9kdXIgKyB0aGlzLl9yRGVsYXkpIHx8ICh2YWx1ZSA/IHRoaXMuX2R1ciA6IDApLCBzdXBwcmVzc0V2ZW50cykgOiB0aGlzLl90aW1lOyAvLyBub3RlOiBpZiB0aGUgbW9kdWx1cyByZXN1bHRzIGluIDAsIHRoZSBwbGF5aGVhZCBjb3VsZCBiZSBleGFjdGx5IGF0IHRoZSBlbmQgb3IgdGhlIGJlZ2lubmluZywgYW5kIHdlIGFsd2F5cyBkZWZlciB0byB0aGUgRU5EIHdpdGggYSBub24temVybyB2YWx1ZSwgb3RoZXJ3aXNlIGlmIHlvdSBzZXQgdGhlIHRpbWUoKSB0byB0aGUgdmVyeSBlbmQgKGR1cmF0aW9uKCkpLCBpdCB3b3VsZCByZW5kZXIgYXQgdGhlIFNUQVJUIVxuICB9O1xuXG4gIF9wcm90by50b3RhbFByb2dyZXNzID0gZnVuY3Rpb24gdG90YWxQcm9ncmVzcyh2YWx1ZSwgc3VwcHJlc3NFdmVudHMpIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IHRoaXMudG90YWxUaW1lKHRoaXMudG90YWxEdXJhdGlvbigpICogdmFsdWUsIHN1cHByZXNzRXZlbnRzKSA6IHRoaXMudG90YWxEdXJhdGlvbigpID8gTWF0aC5taW4oMSwgdGhpcy5fdFRpbWUgLyB0aGlzLl90RHVyKSA6IHRoaXMucmF3VGltZSgpID49IDAgJiYgdGhpcy5faW5pdHRlZCA/IDEgOiAwO1xuICB9O1xuXG4gIF9wcm90by5wcm9ncmVzcyA9IGZ1bmN0aW9uIHByb2dyZXNzKHZhbHVlLCBzdXBwcmVzc0V2ZW50cykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gdGhpcy50b3RhbFRpbWUodGhpcy5kdXJhdGlvbigpICogKHRoaXMuX3lveW8gJiYgISh0aGlzLml0ZXJhdGlvbigpICYgMSkgPyAxIC0gdmFsdWUgOiB2YWx1ZSkgKyBfZWxhcHNlZEN5Y2xlRHVyYXRpb24odGhpcyksIHN1cHByZXNzRXZlbnRzKSA6IHRoaXMuZHVyYXRpb24oKSA/IE1hdGgubWluKDEsIHRoaXMuX3RpbWUgLyB0aGlzLl9kdXIpIDogdGhpcy5yYXdUaW1lKCkgPiAwID8gMSA6IDA7XG4gIH07XG5cbiAgX3Byb3RvLml0ZXJhdGlvbiA9IGZ1bmN0aW9uIGl0ZXJhdGlvbih2YWx1ZSwgc3VwcHJlc3NFdmVudHMpIHtcbiAgICB2YXIgY3ljbGVEdXJhdGlvbiA9IHRoaXMuZHVyYXRpb24oKSArIHRoaXMuX3JEZWxheTtcblxuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gdGhpcy50b3RhbFRpbWUodGhpcy5fdGltZSArICh2YWx1ZSAtIDEpICogY3ljbGVEdXJhdGlvbiwgc3VwcHJlc3NFdmVudHMpIDogdGhpcy5fcmVwZWF0ID8gX2FuaW1hdGlvbkN5Y2xlKHRoaXMuX3RUaW1lLCBjeWNsZUR1cmF0aW9uKSArIDEgOiAxO1xuICB9IC8vIHBvdGVudGlhbCBmdXR1cmUgYWRkaXRpb246XG4gIC8vIGlzUGxheWluZ0JhY2t3YXJkcygpIHtcbiAgLy8gXHRsZXQgYW5pbWF0aW9uID0gdGhpcyxcbiAgLy8gXHRcdG9yaWVudGF0aW9uID0gMTsgLy8gMSA9IGZvcndhcmQsIC0xID0gYmFja3dhcmRcbiAgLy8gXHR3aGlsZSAoYW5pbWF0aW9uKSB7XG4gIC8vIFx0XHRvcmllbnRhdGlvbiAqPSBhbmltYXRpb24ucmV2ZXJzZWQoKSB8fCAoYW5pbWF0aW9uLnJlcGVhdCgpICYmICEoYW5pbWF0aW9uLml0ZXJhdGlvbigpICYgMSkpID8gLTEgOiAxO1xuICAvLyBcdFx0YW5pbWF0aW9uID0gYW5pbWF0aW9uLnBhcmVudDtcbiAgLy8gXHR9XG4gIC8vIFx0cmV0dXJuIG9yaWVudGF0aW9uIDwgMDtcbiAgLy8gfVxuICA7XG5cbiAgX3Byb3RvLnRpbWVTY2FsZSA9IGZ1bmN0aW9uIHRpbWVTY2FsZSh2YWx1ZSwgc3VwcHJlc3NFdmVudHMpIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9ydHMgPT09IC1fdGlueU51bSA/IDAgOiB0aGlzLl9ydHM7IC8vIHJlY29yZGVkIHRpbWVTY2FsZS4gU3BlY2lhbCBjYXNlOiBpZiBzb21lb25lIGNhbGxzIHJldmVyc2UoKSBvbiBhbiBhbmltYXRpb24gd2l0aCB0aW1lU2NhbGUgb2YgMCwgd2UgYXNzaWduIGl0IC1fdGlueU51bSB0byByZW1lbWJlciBpdCdzIHJldmVyc2VkLlxuICAgIH1cblxuICAgIGlmICh0aGlzLl9ydHMgPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgdFRpbWUgPSB0aGlzLnBhcmVudCAmJiB0aGlzLl90cyA/IF9wYXJlbnRUb0NoaWxkVG90YWxUaW1lKHRoaXMucGFyZW50Ll90aW1lLCB0aGlzKSA6IHRoaXMuX3RUaW1lOyAvLyBtYWtlIHN1cmUgdG8gZG8gdGhlIHBhcmVudFRvQ2hpbGRUb3RhbFRpbWUoKSBCRUZPUkUgc2V0dGluZyB0aGUgbmV3IF90cyBiZWNhdXNlIHRoZSBvbGQgb25lIG11c3QgYmUgdXNlZCBpbiB0aGF0IGNhbGN1bGF0aW9uLlxuICAgIC8vIGZ1dHVyZSBhZGRpdGlvbj8gVXAgc2lkZTogZmFzdCBhbmQgbWluaW1hbCBmaWxlIHNpemUuIERvd24gc2lkZTogb25seSB3b3JrcyBvbiB0aGlzIGFuaW1hdGlvbjsgaWYgYSB0aW1lbGluZSBpcyByZXZlcnNlZCwgZm9yIGV4YW1wbGUsIGl0cyBjaGlsZHJlbnMnIG9uUmV2ZXJzZSB3b3VsZG4ndCBnZXQgY2FsbGVkLlxuICAgIC8vKCt2YWx1ZSA8IDAgJiYgdGhpcy5fcnRzID49IDApICYmIF9jYWxsYmFjayh0aGlzLCBcIm9uUmV2ZXJzZVwiLCB0cnVlKTtcbiAgICAvLyBwcmlvcml0aXplIHJlbmRlcmluZyB3aGVyZSB0aGUgcGFyZW50J3MgcGxheWhlYWQgbGluZXMgdXAgaW5zdGVhZCBvZiB0aGlzLl90VGltZSBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIGEgdHdlZW4gdGhhdCdzIGFuaW1hdGluZyBhbm90aGVyIHR3ZWVuJ3MgdGltZVNjYWxlIGluIHRoZSBzYW1lIHJlbmRlcmluZyBsb29wIChzYW1lIHBhcmVudCksIHRodXMgaWYgdGhlIHRpbWVTY2FsZSB0d2VlbiByZW5kZXJzIGZpcnN0LCBpdCB3b3VsZCBhbHRlciBfc3RhcnQgQkVGT1JFIF90VGltZSB3YXMgc2V0IG9uIHRoYXQgdGljayAoaW4gdGhlIHJlbmRlcmluZyBsb29wKSwgZWZmZWN0aXZlbHkgZnJlZXppbmcgaXQgdW50aWwgdGhlIHRpbWVTY2FsZSB0d2VlbiBmaW5pc2hlcy5cblxuICAgIHRoaXMuX3J0cyA9ICt2YWx1ZSB8fCAwO1xuICAgIHRoaXMuX3RzID0gdGhpcy5fcHMgfHwgdmFsdWUgPT09IC1fdGlueU51bSA/IDAgOiB0aGlzLl9ydHM7IC8vIF90cyBpcyB0aGUgZnVuY3Rpb25hbCB0aW1lU2NhbGUgd2hpY2ggd291bGQgYmUgMCBpZiB0aGUgYW5pbWF0aW9uIGlzIHBhdXNlZC5cblxuICAgIHRoaXMudG90YWxUaW1lKF9jbGFtcCgtTWF0aC5hYnModGhpcy5fZGVsYXkpLCB0aGlzLl90RHVyLCB0VGltZSksIHN1cHByZXNzRXZlbnRzICE9PSBmYWxzZSk7XG5cbiAgICBfc2V0RW5kKHRoaXMpOyAvLyBpZiBwYXJlbnQuc21vb3RoQ2hpbGRUaW1pbmcgd2FzIGZhbHNlLCB0aGUgZW5kIHRpbWUgZGlkbid0IGdldCB1cGRhdGVkIGluIHRoZSBfYWxpZ25QbGF5aGVhZCgpIG1ldGhvZCwgc28gZG8gaXQgaGVyZS5cblxuXG4gICAgcmV0dXJuIF9yZWNhY2hlQW5jZXN0b3JzKHRoaXMpO1xuICB9O1xuXG4gIF9wcm90by5wYXVzZWQgPSBmdW5jdGlvbiBwYXVzZWQodmFsdWUpIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wcztcbiAgICB9IC8vIHBvc3NpYmxlIGZ1dHVyZSBhZGRpdGlvbiAtIGlmIGFuIGFuaW1hdGlvbiBpcyByZW1vdmVkIGZyb20gaXRzIHBhcmVudCBhbmQgdGhlbiAucmVzdGFydCgpIG9yIC5wbGF5KCkgb3IgLnJlc3VtZSgpIGlzIGNhbGxlZCwgcGVyaGFwcyB3ZSBzaG91bGQgZm9yY2UgaXQgYmFjayBpbnRvIHRoZSBnbG9iYWxUaW1lbGluZSBidXQgYmUgY2FyZWZ1bCBiZWNhdXNlIHdoYXQgaWYgaXQncyBhbHJlYWR5IGF0IGl0cyBlbmQ/IFdlIGRvbid0IHdhbnQgaXQgdG8ganVzdCBwZXJzaXN0IGZvcmV2ZXIgYW5kIG5vdCBnZXQgcmVsZWFzZWQgZm9yIEdDLlxuICAgIC8vICF0aGlzLnBhcmVudCAmJiAhdmFsdWUgJiYgdGhpcy5fdFRpbWUgPCB0aGlzLl90RHVyICYmIHRoaXMgIT09IF9nbG9iYWxUaW1lbGluZSAmJiBfZ2xvYmFsVGltZWxpbmUuYWRkKHRoaXMpO1xuXG5cbiAgICBpZiAodGhpcy5fcHMgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl9wcyA9IHZhbHVlO1xuXG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fcFRpbWUgPSB0aGlzLl90VGltZSB8fCBNYXRoLm1heCgtdGhpcy5fZGVsYXksIHRoaXMucmF3VGltZSgpKTsgLy8gaWYgdGhlIHBhdXNlIG9jY3VycyBkdXJpbmcgdGhlIGRlbGF5IHBoYXNlLCBtYWtlIHN1cmUgdGhhdCdzIGZhY3RvcmVkIGluIHdoZW4gcmVzdW1pbmcuXG5cbiAgICAgICAgdGhpcy5fdHMgPSB0aGlzLl9hY3QgPSAwOyAvLyBfdHMgaXMgdGhlIGZ1bmN0aW9uYWwgdGltZVNjYWxlLCBzbyBhIHBhdXNlZCB0d2VlbiB3b3VsZCBlZmZlY3RpdmVseSBoYXZlIGEgdGltZVNjYWxlIG9mIDAuIFdlIHJlY29yZCB0aGUgXCJyZWFsXCIgdGltZVNjYWxlIGFzIF9ydHMgKHJlY29yZGVkIHRpbWUgc2NhbGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfd2FrZSgpO1xuXG4gICAgICAgIHRoaXMuX3RzID0gdGhpcy5fcnRzOyAvL29ubHkgZGVmZXIgdG8gX3BUaW1lIChwYXVzZVRpbWUpIGlmIHRUaW1lIGlzIHplcm8uIFJlbWVtYmVyLCBzb21lb25lIGNvdWxkIHBhdXNlKCkgYW4gYW5pbWF0aW9uLCB0aGVuIHNjcnViIHRoZSBwbGF5aGVhZCBhbmQgcmVzdW1lKCkuIElmIHRoZSBwYXJlbnQgZG9lc24ndCBoYXZlIHNtb290aENoaWxkVGltaW5nLCB3ZSByZW5kZXIgYXQgdGhlIHJhd1RpbWUoKSBiZWNhdXNlIHRoZSBzdGFydFRpbWUgd29uJ3QgZ2V0IHVwZGF0ZWQuXG5cbiAgICAgICAgdGhpcy50b3RhbFRpbWUodGhpcy5wYXJlbnQgJiYgIXRoaXMucGFyZW50LnNtb290aENoaWxkVGltaW5nID8gdGhpcy5yYXdUaW1lKCkgOiB0aGlzLl90VGltZSB8fCB0aGlzLl9wVGltZSwgdGhpcy5wcm9ncmVzcygpID09PSAxICYmIE1hdGguYWJzKHRoaXMuX3pUaW1lKSAhPT0gX3RpbnlOdW0gJiYgKHRoaXMuX3RUaW1lIC09IF90aW55TnVtKSk7IC8vIGVkZ2UgY2FzZTogYW5pbWF0aW9uLnByb2dyZXNzKDEpLnBhdXNlKCkucGxheSgpIHdvdWxkbid0IHJlbmRlciBhZ2FpbiBiZWNhdXNlIHRoZSBwbGF5aGVhZCBpcyBhbHJlYWR5IGF0IHRoZSBlbmQsIGJ1dCB0aGUgY2FsbCB0byB0b3RhbFRpbWUoKSBiZWxvdyB3aWxsIGFkZCBpdCBiYWNrIHRvIGl0cyBwYXJlbnQuLi5hbmQgbm90IHJlbW92ZSBpdCBhZ2FpbiAoc2luY2UgcmVtb3Zpbmcgb25seSBoYXBwZW5zIHVwb24gcmVuZGVyaW5nIGF0IGEgbmV3IHRpbWUpLiBPZmZzZXR0aW5nIHRoZSBfdFRpbWUgc2xpZ2h0bHkgaXMgZG9uZSBzaW1wbHkgdG8gY2F1c2UgdGhlIGZpbmFsIHJlbmRlciBpbiB0b3RhbFRpbWUoKSB0aGF0J2xsIHBvcCBpdCBvZmYgaXRzIHRpbWVsaW5lIChpZiBhdXRvUmVtb3ZlQ2hpbGRyZW4gaXMgdHJ1ZSwgb2YgY291cnNlKS4gQ2hlY2sgdG8gbWFrZSBzdXJlIF96VGltZSBpc24ndCAtX3RpbnlOdW0gdG8gYXZvaWQgYW4gZWRnZSBjYXNlIHdoZXJlIHRoZSBwbGF5aGVhZCBpcyBwdXNoZWQgdG8gdGhlIGVuZCBidXQgSU5TSURFIGEgdHdlZW4vY2FsbGJhY2ssIHRoZSB0aW1lbGluZSBpdHNlbGYgaXMgcGF1c2VkIHRodXMgaGFsdGluZyByZW5kZXJpbmcgYW5kIGxlYXZpbmcgYSBmZXcgdW5yZW5kZXJlZC4gV2hlbiByZXN1bWluZywgaXQgd291bGRuJ3QgcmVuZGVyIHRob3NlIG90aGVyd2lzZS5cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8uc3RhcnRUaW1lID0gZnVuY3Rpb24gc3RhcnRUaW1lKHZhbHVlKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3N0YXJ0ID0gdmFsdWU7XG4gICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQgfHwgdGhpcy5fZHA7XG4gICAgICBwYXJlbnQgJiYgKHBhcmVudC5fc29ydCB8fCAhdGhpcy5wYXJlbnQpICYmIF9hZGRUb1RpbWVsaW5lKHBhcmVudCwgdGhpcywgdmFsdWUgLSB0aGlzLl9kZWxheSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fc3RhcnQ7XG4gIH07XG5cbiAgX3Byb3RvLmVuZFRpbWUgPSBmdW5jdGlvbiBlbmRUaW1lKGluY2x1ZGVSZXBlYXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0ICsgKF9pc05vdEZhbHNlKGluY2x1ZGVSZXBlYXRzKSA/IHRoaXMudG90YWxEdXJhdGlvbigpIDogdGhpcy5kdXJhdGlvbigpKSAvIE1hdGguYWJzKHRoaXMuX3RzIHx8IDEpO1xuICB9O1xuXG4gIF9wcm90by5yYXdUaW1lID0gZnVuY3Rpb24gcmF3VGltZSh3cmFwUmVwZWF0cykge1xuICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCB8fCB0aGlzLl9kcDsgLy8gX2RwID0gZGV0YWNoZWQgcGFyZW50XG5cbiAgICByZXR1cm4gIXBhcmVudCA/IHRoaXMuX3RUaW1lIDogd3JhcFJlcGVhdHMgJiYgKCF0aGlzLl90cyB8fCB0aGlzLl9yZXBlYXQgJiYgdGhpcy5fdGltZSAmJiB0aGlzLnRvdGFsUHJvZ3Jlc3MoKSA8IDEpID8gdGhpcy5fdFRpbWUgJSAodGhpcy5fZHVyICsgdGhpcy5fckRlbGF5KSA6ICF0aGlzLl90cyA/IHRoaXMuX3RUaW1lIDogX3BhcmVudFRvQ2hpbGRUb3RhbFRpbWUocGFyZW50LnJhd1RpbWUod3JhcFJlcGVhdHMpLCB0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8ucmV2ZXJ0ID0gZnVuY3Rpb24gcmV2ZXJ0KGNvbmZpZykge1xuICAgIGlmIChjb25maWcgPT09IHZvaWQgMCkge1xuICAgICAgY29uZmlnID0gX3JldmVydENvbmZpZztcbiAgICB9XG5cbiAgICB2YXIgcHJldklzUmV2ZXJ0aW5nID0gX3JldmVydGluZztcbiAgICBfcmV2ZXJ0aW5nID0gY29uZmlnO1xuXG4gICAgaWYgKHRoaXMuX2luaXR0ZWQgfHwgdGhpcy5fc3RhcnRBdCkge1xuICAgICAgdGhpcy50aW1lbGluZSAmJiB0aGlzLnRpbWVsaW5lLnJldmVydChjb25maWcpO1xuICAgICAgdGhpcy50b3RhbFRpbWUoLTAuMDEsIGNvbmZpZy5zdXBwcmVzc0V2ZW50cyk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhICE9PSBcIm5lc3RlZFwiICYmIGNvbmZpZy5raWxsICE9PSBmYWxzZSAmJiB0aGlzLmtpbGwoKTtcbiAgICBfcmV2ZXJ0aW5nID0gcHJldklzUmV2ZXJ0aW5nO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIF9wcm90by5nbG9iYWxUaW1lID0gZnVuY3Rpb24gZ2xvYmFsVGltZShyYXdUaW1lKSB7XG4gICAgdmFyIGFuaW1hdGlvbiA9IHRoaXMsXG4gICAgICAgIHRpbWUgPSBhcmd1bWVudHMubGVuZ3RoID8gcmF3VGltZSA6IGFuaW1hdGlvbi5yYXdUaW1lKCk7XG5cbiAgICB3aGlsZSAoYW5pbWF0aW9uKSB7XG4gICAgICB0aW1lID0gYW5pbWF0aW9uLl9zdGFydCArIHRpbWUgLyAoTWF0aC5hYnMoYW5pbWF0aW9uLl90cykgfHwgMSk7XG4gICAgICBhbmltYXRpb24gPSBhbmltYXRpb24uX2RwO1xuICAgIH1cblxuICAgIHJldHVybiAhdGhpcy5wYXJlbnQgJiYgdGhpcy5fc2F0ID8gdGhpcy5fc2F0Lmdsb2JhbFRpbWUocmF3VGltZSkgOiB0aW1lOyAvLyB0aGUgX3N0YXJ0QXQgdHdlZW5zIGZvciAuZnJvbVRvKCkgYW5kIC5mcm9tKCkgdGhhdCBoYXZlIGltbWVkaWF0ZVJlbmRlciBzaG91bGQgYWx3YXlzIGJlIEZJUlNUIGluIHRoZSB0aW1lbGluZSAoaW1wb3J0YW50IGZvciBjb250ZXh0LnJldmVydCgpKS4gXCJfc2F0XCIgc3RhbmRzIGZvciBfc3RhcnRBdFR3ZWVuLCByZWZlcnJpbmcgdG8gdGhlIHBhcmVudCB0d2VlbiB0aGF0IGNyZWF0ZWQgdGhlIF9zdGFydEF0LiBXZSBtdXN0IGRpc2Nlcm4gaWYgdGhhdCB0d2VlbiBoYWQgaW1tZWRpYXRlUmVuZGVyIHNvIHRoYXQgd2UgY2FuIGtub3cgd2hldGhlciBvciBub3QgdG8gcHJpb3JpdGl6ZSBpdCBpbiByZXZlcnQoKS5cbiAgfTtcblxuICBfcHJvdG8ucmVwZWF0ID0gZnVuY3Rpb24gcmVwZWF0KHZhbHVlKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3JlcGVhdCA9IHZhbHVlID09PSBJbmZpbml0eSA/IC0yIDogdmFsdWU7XG4gICAgICByZXR1cm4gX29uVXBkYXRlVG90YWxEdXJhdGlvbih0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcmVwZWF0ID09PSAtMiA/IEluZmluaXR5IDogdGhpcy5fcmVwZWF0O1xuICB9O1xuXG4gIF9wcm90by5yZXBlYXREZWxheSA9IGZ1bmN0aW9uIHJlcGVhdERlbGF5KHZhbHVlKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHZhciB0aW1lID0gdGhpcy5fdGltZTtcbiAgICAgIHRoaXMuX3JEZWxheSA9IHZhbHVlO1xuXG4gICAgICBfb25VcGRhdGVUb3RhbER1cmF0aW9uKHRoaXMpO1xuXG4gICAgICByZXR1cm4gdGltZSA/IHRoaXMudGltZSh0aW1lKSA6IHRoaXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3JEZWxheTtcbiAgfTtcblxuICBfcHJvdG8ueW95byA9IGZ1bmN0aW9uIHlveW8odmFsdWUpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5feW95byA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3lveW87XG4gIH07XG5cbiAgX3Byb3RvLnNlZWsgPSBmdW5jdGlvbiBzZWVrKHBvc2l0aW9uLCBzdXBwcmVzc0V2ZW50cykge1xuICAgIHJldHVybiB0aGlzLnRvdGFsVGltZShfcGFyc2VQb3NpdGlvbih0aGlzLCBwb3NpdGlvbiksIF9pc05vdEZhbHNlKHN1cHByZXNzRXZlbnRzKSk7XG4gIH07XG5cbiAgX3Byb3RvLnJlc3RhcnQgPSBmdW5jdGlvbiByZXN0YXJ0KGluY2x1ZGVEZWxheSwgc3VwcHJlc3NFdmVudHMpIHtcbiAgICB0aGlzLnBsYXkoKS50b3RhbFRpbWUoaW5jbHVkZURlbGF5ID8gLXRoaXMuX2RlbGF5IDogMCwgX2lzTm90RmFsc2Uoc3VwcHJlc3NFdmVudHMpKTtcbiAgICB0aGlzLl9kdXIgfHwgKHRoaXMuX3pUaW1lID0gLV90aW55TnVtKTsgLy8gZW5zdXJlcyBvbkNvbXBsZXRlIGZpcmVzIG9uIGEgemVyby1kdXJhdGlvbiBhbmltYXRpb24gdGhhdCBnZXRzIHJlc3RhcnRlZC5cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIF9wcm90by5wbGF5ID0gZnVuY3Rpb24gcGxheShmcm9tLCBzdXBwcmVzc0V2ZW50cykge1xuICAgIGZyb20gIT0gbnVsbCAmJiB0aGlzLnNlZWsoZnJvbSwgc3VwcHJlc3NFdmVudHMpO1xuICAgIHJldHVybiB0aGlzLnJldmVyc2VkKGZhbHNlKS5wYXVzZWQoZmFsc2UpO1xuICB9O1xuXG4gIF9wcm90by5yZXZlcnNlID0gZnVuY3Rpb24gcmV2ZXJzZShmcm9tLCBzdXBwcmVzc0V2ZW50cykge1xuICAgIGZyb20gIT0gbnVsbCAmJiB0aGlzLnNlZWsoZnJvbSB8fCB0aGlzLnRvdGFsRHVyYXRpb24oKSwgc3VwcHJlc3NFdmVudHMpO1xuICAgIHJldHVybiB0aGlzLnJldmVyc2VkKHRydWUpLnBhdXNlZChmYWxzZSk7XG4gIH07XG5cbiAgX3Byb3RvLnBhdXNlID0gZnVuY3Rpb24gcGF1c2UoYXRUaW1lLCBzdXBwcmVzc0V2ZW50cykge1xuICAgIGF0VGltZSAhPSBudWxsICYmIHRoaXMuc2VlayhhdFRpbWUsIHN1cHByZXNzRXZlbnRzKTtcbiAgICByZXR1cm4gdGhpcy5wYXVzZWQodHJ1ZSk7XG4gIH07XG5cbiAgX3Byb3RvLnJlc3VtZSA9IGZ1bmN0aW9uIHJlc3VtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXVzZWQoZmFsc2UpO1xuICB9O1xuXG4gIF9wcm90by5yZXZlcnNlZCA9IGZ1bmN0aW9uIHJldmVyc2VkKHZhbHVlKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICEhdmFsdWUgIT09IHRoaXMucmV2ZXJzZWQoKSAmJiB0aGlzLnRpbWVTY2FsZSgtdGhpcy5fcnRzIHx8ICh2YWx1ZSA/IC1fdGlueU51bSA6IDApKTsgLy8gaW4gY2FzZSB0aW1lU2NhbGUgaXMgemVybywgcmV2ZXJzaW5nIHdvdWxkIGhhdmUgbm8gZWZmZWN0IHNvIHdlIHVzZSBfdGlueU51bS5cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3J0cyA8IDA7XG4gIH07XG5cbiAgX3Byb3RvLmludmFsaWRhdGUgPSBmdW5jdGlvbiBpbnZhbGlkYXRlKCkge1xuICAgIHRoaXMuX2luaXR0ZWQgPSB0aGlzLl9hY3QgPSAwO1xuICAgIHRoaXMuX3pUaW1lID0gLV90aW55TnVtO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIF9wcm90by5pc0FjdGl2ZSA9IGZ1bmN0aW9uIGlzQWN0aXZlKCkge1xuICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCB8fCB0aGlzLl9kcCxcbiAgICAgICAgc3RhcnQgPSB0aGlzLl9zdGFydCxcbiAgICAgICAgcmF3VGltZTtcbiAgICByZXR1cm4gISEoIXBhcmVudCB8fCB0aGlzLl90cyAmJiB0aGlzLl9pbml0dGVkICYmIHBhcmVudC5pc0FjdGl2ZSgpICYmIChyYXdUaW1lID0gcGFyZW50LnJhd1RpbWUodHJ1ZSkpID49IHN0YXJ0ICYmIHJhd1RpbWUgPCB0aGlzLmVuZFRpbWUodHJ1ZSkgLSBfdGlueU51bSk7XG4gIH07XG5cbiAgX3Byb3RvLmV2ZW50Q2FsbGJhY2sgPSBmdW5jdGlvbiBldmVudENhbGxiYWNrKHR5cGUsIGNhbGxiYWNrLCBwYXJhbXMpIHtcbiAgICB2YXIgdmFycyA9IHRoaXMudmFycztcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICBkZWxldGUgdmFyc1t0eXBlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhcnNbdHlwZV0gPSBjYWxsYmFjaztcbiAgICAgICAgcGFyYW1zICYmICh2YXJzW3R5cGUgKyBcIlBhcmFtc1wiXSA9IHBhcmFtcyk7XG4gICAgICAgIHR5cGUgPT09IFwib25VcGRhdGVcIiAmJiAodGhpcy5fb25VcGRhdGUgPSBjYWxsYmFjayk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHJldHVybiB2YXJzW3R5cGVdO1xuICB9O1xuXG4gIF9wcm90by50aGVuID0gZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIHZhciBmID0gX2lzRnVuY3Rpb24ob25GdWxmaWxsZWQpID8gb25GdWxmaWxsZWQgOiBfcGFzc1Rocm91Z2gsXG4gICAgICAgICAgX3Jlc29sdmUgPSBmdW5jdGlvbiBfcmVzb2x2ZSgpIHtcbiAgICAgICAgdmFyIF90aGVuID0gc2VsZi50aGVuO1xuICAgICAgICBzZWxmLnRoZW4gPSBudWxsOyAvLyB0ZW1wb3JhcmlseSBudWxsIHRoZSB0aGVuKCkgbWV0aG9kIHRvIGF2b2lkIGFuIGluZmluaXRlIGxvb3AgKHNlZSBodHRwczovL2dpdGh1Yi5jb20vZ3JlZW5zb2NrL0dTQVAvaXNzdWVzLzMyMilcblxuICAgICAgICBfaXNGdW5jdGlvbihmKSAmJiAoZiA9IGYoc2VsZikpICYmIChmLnRoZW4gfHwgZiA9PT0gc2VsZikgJiYgKHNlbGYudGhlbiA9IF90aGVuKTtcbiAgICAgICAgcmVzb2x2ZShmKTtcbiAgICAgICAgc2VsZi50aGVuID0gX3RoZW47XG4gICAgICB9O1xuXG4gICAgICBpZiAoc2VsZi5faW5pdHRlZCAmJiBzZWxmLnRvdGFsUHJvZ3Jlc3MoKSA9PT0gMSAmJiBzZWxmLl90cyA+PSAwIHx8ICFzZWxmLl90VGltZSAmJiBzZWxmLl90cyA8IDApIHtcbiAgICAgICAgX3Jlc29sdmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGYuX3Byb20gPSBfcmVzb2x2ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ua2lsbCA9IGZ1bmN0aW9uIGtpbGwoKSB7XG4gICAgX2ludGVycnVwdCh0aGlzKTtcbiAgfTtcblxuICByZXR1cm4gQW5pbWF0aW9uO1xufSgpO1xuXG5fc2V0RGVmYXVsdHMoQW5pbWF0aW9uLnByb3RvdHlwZSwge1xuICBfdGltZTogMCxcbiAgX3N0YXJ0OiAwLFxuICBfZW5kOiAwLFxuICBfdFRpbWU6IDAsXG4gIF90RHVyOiAwLFxuICBfZGlydHk6IDAsXG4gIF9yZXBlYXQ6IDAsXG4gIF95b3lvOiBmYWxzZSxcbiAgcGFyZW50OiBudWxsLFxuICBfaW5pdHRlZDogZmFsc2UsXG4gIF9yRGVsYXk6IDAsXG4gIF90czogMSxcbiAgX2RwOiAwLFxuICByYXRpbzogMCxcbiAgX3pUaW1lOiAtX3RpbnlOdW0sXG4gIF9wcm9tOiAwLFxuICBfcHM6IGZhbHNlLFxuICBfcnRzOiAxXG59KTtcbi8qXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBUSU1FTElORVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuZXhwb3J0IHZhciBUaW1lbGluZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0FuaW1hdGlvbikge1xuICBfaW5oZXJpdHNMb29zZShUaW1lbGluZSwgX0FuaW1hdGlvbik7XG5cbiAgZnVuY3Rpb24gVGltZWxpbmUodmFycywgcG9zaXRpb24pIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBpZiAodmFycyA9PT0gdm9pZCAwKSB7XG4gICAgICB2YXJzID0ge307XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfQW5pbWF0aW9uLmNhbGwodGhpcywgdmFycykgfHwgdGhpcztcbiAgICBfdGhpcy5sYWJlbHMgPSB7fTtcbiAgICBfdGhpcy5zbW9vdGhDaGlsZFRpbWluZyA9ICEhdmFycy5zbW9vdGhDaGlsZFRpbWluZztcbiAgICBfdGhpcy5hdXRvUmVtb3ZlQ2hpbGRyZW4gPSAhIXZhcnMuYXV0b1JlbW92ZUNoaWxkcmVuO1xuICAgIF90aGlzLl9zb3J0ID0gX2lzTm90RmFsc2UodmFycy5zb3J0Q2hpbGRyZW4pO1xuICAgIF9nbG9iYWxUaW1lbGluZSAmJiBfYWRkVG9UaW1lbGluZSh2YXJzLnBhcmVudCB8fCBfZ2xvYmFsVGltZWxpbmUsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBwb3NpdGlvbik7XG4gICAgdmFycy5yZXZlcnNlZCAmJiBfdGhpcy5yZXZlcnNlKCk7XG4gICAgdmFycy5wYXVzZWQgJiYgX3RoaXMucGF1c2VkKHRydWUpO1xuICAgIHZhcnMuc2Nyb2xsVHJpZ2dlciAmJiBfc2Nyb2xsVHJpZ2dlcihfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgdmFycy5zY3JvbGxUcmlnZ2VyKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvMiA9IFRpbWVsaW5lLnByb3RvdHlwZTtcblxuICBfcHJvdG8yLnRvID0gZnVuY3Rpb24gdG8odGFyZ2V0cywgdmFycywgcG9zaXRpb24pIHtcbiAgICBfY3JlYXRlVHdlZW5UeXBlKDAsIGFyZ3VtZW50cywgdGhpcyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8yLmZyb20gPSBmdW5jdGlvbiBmcm9tKHRhcmdldHMsIHZhcnMsIHBvc2l0aW9uKSB7XG4gICAgX2NyZWF0ZVR3ZWVuVHlwZSgxLCBhcmd1bWVudHMsIHRoaXMpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvMi5mcm9tVG8gPSBmdW5jdGlvbiBmcm9tVG8odGFyZ2V0cywgZnJvbVZhcnMsIHRvVmFycywgcG9zaXRpb24pIHtcbiAgICBfY3JlYXRlVHdlZW5UeXBlKDIsIGFyZ3VtZW50cywgdGhpcyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8yLnNldCA9IGZ1bmN0aW9uIHNldCh0YXJnZXRzLCB2YXJzLCBwb3NpdGlvbikge1xuICAgIHZhcnMuZHVyYXRpb24gPSAwO1xuICAgIHZhcnMucGFyZW50ID0gdGhpcztcbiAgICBfaW5oZXJpdERlZmF1bHRzKHZhcnMpLnJlcGVhdERlbGF5IHx8ICh2YXJzLnJlcGVhdCA9IDApO1xuICAgIHZhcnMuaW1tZWRpYXRlUmVuZGVyID0gISF2YXJzLmltbWVkaWF0ZVJlbmRlcjtcbiAgICBuZXcgVHdlZW4odGFyZ2V0cywgdmFycywgX3BhcnNlUG9zaXRpb24odGhpcywgcG9zaXRpb24pLCAxKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8yLmNhbGwgPSBmdW5jdGlvbiBjYWxsKGNhbGxiYWNrLCBwYXJhbXMsIHBvc2l0aW9uKSB7XG4gICAgcmV0dXJuIF9hZGRUb1RpbWVsaW5lKHRoaXMsIFR3ZWVuLmRlbGF5ZWRDYWxsKDAsIGNhbGxiYWNrLCBwYXJhbXMpLCBwb3NpdGlvbik7XG4gIH0gLy9PTkxZIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ISBNYXliZSBkZWxldGU/XG4gIDtcblxuICBfcHJvdG8yLnN0YWdnZXJUbyA9IGZ1bmN0aW9uIHN0YWdnZXJUbyh0YXJnZXRzLCBkdXJhdGlvbiwgdmFycywgc3RhZ2dlciwgcG9zaXRpb24sIG9uQ29tcGxldGVBbGwsIG9uQ29tcGxldGVBbGxQYXJhbXMpIHtcbiAgICB2YXJzLmR1cmF0aW9uID0gZHVyYXRpb247XG4gICAgdmFycy5zdGFnZ2VyID0gdmFycy5zdGFnZ2VyIHx8IHN0YWdnZXI7XG4gICAgdmFycy5vbkNvbXBsZXRlID0gb25Db21wbGV0ZUFsbDtcbiAgICB2YXJzLm9uQ29tcGxldGVQYXJhbXMgPSBvbkNvbXBsZXRlQWxsUGFyYW1zO1xuICAgIHZhcnMucGFyZW50ID0gdGhpcztcbiAgICBuZXcgVHdlZW4odGFyZ2V0cywgdmFycywgX3BhcnNlUG9zaXRpb24odGhpcywgcG9zaXRpb24pKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8yLnN0YWdnZXJGcm9tID0gZnVuY3Rpb24gc3RhZ2dlckZyb20odGFyZ2V0cywgZHVyYXRpb24sIHZhcnMsIHN0YWdnZXIsIHBvc2l0aW9uLCBvbkNvbXBsZXRlQWxsLCBvbkNvbXBsZXRlQWxsUGFyYW1zKSB7XG4gICAgdmFycy5ydW5CYWNrd2FyZHMgPSAxO1xuICAgIF9pbmhlcml0RGVmYXVsdHModmFycykuaW1tZWRpYXRlUmVuZGVyID0gX2lzTm90RmFsc2UodmFycy5pbW1lZGlhdGVSZW5kZXIpO1xuICAgIHJldHVybiB0aGlzLnN0YWdnZXJUbyh0YXJnZXRzLCBkdXJhdGlvbiwgdmFycywgc3RhZ2dlciwgcG9zaXRpb24sIG9uQ29tcGxldGVBbGwsIG9uQ29tcGxldGVBbGxQYXJhbXMpO1xuICB9O1xuXG4gIF9wcm90bzIuc3RhZ2dlckZyb21UbyA9IGZ1bmN0aW9uIHN0YWdnZXJGcm9tVG8odGFyZ2V0cywgZHVyYXRpb24sIGZyb21WYXJzLCB0b1ZhcnMsIHN0YWdnZXIsIHBvc2l0aW9uLCBvbkNvbXBsZXRlQWxsLCBvbkNvbXBsZXRlQWxsUGFyYW1zKSB7XG4gICAgdG9WYXJzLnN0YXJ0QXQgPSBmcm9tVmFycztcbiAgICBfaW5oZXJpdERlZmF1bHRzKHRvVmFycykuaW1tZWRpYXRlUmVuZGVyID0gX2lzTm90RmFsc2UodG9WYXJzLmltbWVkaWF0ZVJlbmRlcik7XG4gICAgcmV0dXJuIHRoaXMuc3RhZ2dlclRvKHRhcmdldHMsIGR1cmF0aW9uLCB0b1ZhcnMsIHN0YWdnZXIsIHBvc2l0aW9uLCBvbkNvbXBsZXRlQWxsLCBvbkNvbXBsZXRlQWxsUGFyYW1zKTtcbiAgfTtcblxuICBfcHJvdG8yLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcih0b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSkge1xuICAgIHZhciBwcmV2VGltZSA9IHRoaXMuX3RpbWUsXG4gICAgICAgIHREdXIgPSB0aGlzLl9kaXJ0eSA/IHRoaXMudG90YWxEdXJhdGlvbigpIDogdGhpcy5fdER1cixcbiAgICAgICAgZHVyID0gdGhpcy5fZHVyLFxuICAgICAgICB0VGltZSA9IHRvdGFsVGltZSA8PSAwID8gMCA6IF9yb3VuZFByZWNpc2UodG90YWxUaW1lKSxcbiAgICAgICAgLy8gaWYgYSBwYXVzZWQgdGltZWxpbmUgaXMgcmVzdW1lZCAob3IgaXRzIF9zdGFydCBpcyB1cGRhdGVkIGZvciBhbm90aGVyIHJlYXNvbi4uLndoaWNoIHJvdW5kcyBpdCksIHRoYXQgY291bGQgcmVzdWx0IGluIHRoZSBwbGF5aGVhZCBzaGlmdGluZyBhICoqdGlueSoqIGFtb3VudCBhbmQgYSB6ZXJvLWR1cmF0aW9uIGNoaWxkIGF0IHRoYXQgc3BvdCBtYXkgZ2V0IHJlbmRlcmVkIGF0IGEgZGlmZmVyZW50IHJhdGlvLCBsaWtlIGl0cyB0b3RhbFRpbWUgaW4gcmVuZGVyKCkgbWF5IGJlIDFlLTE3IGluc3RlYWQgb2YgMCwgZm9yIGV4YW1wbGUuXG4gICAgY3Jvc3NpbmdTdGFydCA9IHRoaXMuX3pUaW1lIDwgMCAhPT0gdG90YWxUaW1lIDwgMCAmJiAodGhpcy5faW5pdHRlZCB8fCAhZHVyKSxcbiAgICAgICAgdGltZSxcbiAgICAgICAgY2hpbGQsXG4gICAgICAgIG5leHQsXG4gICAgICAgIGl0ZXJhdGlvbixcbiAgICAgICAgY3ljbGVEdXJhdGlvbixcbiAgICAgICAgcHJldlBhdXNlZCxcbiAgICAgICAgcGF1c2VUd2VlbixcbiAgICAgICAgdGltZVNjYWxlLFxuICAgICAgICBwcmV2U3RhcnQsXG4gICAgICAgIHByZXZJdGVyYXRpb24sXG4gICAgICAgIHlveW8sXG4gICAgICAgIGlzWW95bztcbiAgICB0aGlzICE9PSBfZ2xvYmFsVGltZWxpbmUgJiYgdFRpbWUgPiB0RHVyICYmIHRvdGFsVGltZSA+PSAwICYmICh0VGltZSA9IHREdXIpO1xuXG4gICAgaWYgKHRUaW1lICE9PSB0aGlzLl90VGltZSB8fCBmb3JjZSB8fCBjcm9zc2luZ1N0YXJ0KSB7XG4gICAgICBpZiAocHJldlRpbWUgIT09IHRoaXMuX3RpbWUgJiYgZHVyKSB7XG4gICAgICAgIC8vaWYgdG90YWxEdXJhdGlvbigpIGZpbmRzIGEgY2hpbGQgd2l0aCBhIG5lZ2F0aXZlIHN0YXJ0VGltZSBhbmQgc21vb3RoQ2hpbGRUaW1pbmcgaXMgdHJ1ZSwgdGhpbmdzIGdldCBzaGlmdGVkIGFyb3VuZCBpbnRlcm5hbGx5IHNvIHdlIG5lZWQgdG8gYWRqdXN0IHRoZSB0aW1lIGFjY29yZGluZ2x5LiBGb3IgZXhhbXBsZSwgaWYgYSB0d2VlbiBzdGFydHMgYXQgLTMwIHdlIG11c3Qgc2hpZnQgRVZFUllUSElORyBmb3J3YXJkIDMwIHNlY29uZHMgYW5kIG1vdmUgdGhpcyB0aW1lbGluZSdzIHN0YXJ0VGltZSBiYWNrd2FyZCBieSAzMCBzZWNvbmRzIHNvIHRoYXQgdGhpbmdzIGFsaWduIHdpdGggdGhlIHBsYXloZWFkIChubyBqdW1wKS5cbiAgICAgICAgdFRpbWUgKz0gdGhpcy5fdGltZSAtIHByZXZUaW1lO1xuICAgICAgICB0b3RhbFRpbWUgKz0gdGhpcy5fdGltZSAtIHByZXZUaW1lO1xuICAgICAgfVxuXG4gICAgICB0aW1lID0gdFRpbWU7XG4gICAgICBwcmV2U3RhcnQgPSB0aGlzLl9zdGFydDtcbiAgICAgIHRpbWVTY2FsZSA9IHRoaXMuX3RzO1xuICAgICAgcHJldlBhdXNlZCA9ICF0aW1lU2NhbGU7XG5cbiAgICAgIGlmIChjcm9zc2luZ1N0YXJ0KSB7XG4gICAgICAgIGR1ciB8fCAocHJldlRpbWUgPSB0aGlzLl96VGltZSk7IC8vd2hlbiB0aGUgcGxheWhlYWQgYXJyaXZlcyBhdCBFWEFDVExZIHRpbWUgMCAocmlnaHQgb24gdG9wKSBvZiBhIHplcm8tZHVyYXRpb24gdGltZWxpbmUsIHdlIG5lZWQgdG8gZGlzY2VybiBpZiBldmVudHMgYXJlIHN1cHByZXNzZWQgc28gdGhhdCB3aGVuIHRoZSBwbGF5aGVhZCBtb3ZlcyBhZ2FpbiAobmV4dCB0aW1lKSwgaXQnbGwgdHJpZ2dlciB0aGUgY2FsbGJhY2suIElmIGV2ZW50cyBhcmUgTk9UIHN1cHByZXNzZWQsIG9idmlvdXNseSB0aGUgY2FsbGJhY2sgd291bGQgYmUgdHJpZ2dlcmVkIGluIHRoaXMgcmVuZGVyLiBCYXNpY2FsbHksIHRoZSBjYWxsYmFjayBzaG91bGQgZmlyZSBlaXRoZXIgd2hlbiB0aGUgcGxheWhlYWQgQVJSSVZFUyBvciBMRUFWRVMgdGhpcyBleGFjdCBzcG90LCBub3QgYm90aC4gSW1hZ2luZSBkb2luZyBhIHRpbWVsaW5lLnNlZWsoMCkgYW5kIHRoZXJlJ3MgYSBjYWxsYmFjayB0aGF0IHNpdHMgYXQgMC4gU2luY2UgZXZlbnRzIGFyZSBzdXBwcmVzc2VkIG9uIHRoYXQgc2VlaygpIGJ5IGRlZmF1bHQsIG5vdGhpbmcgd2lsbCBmaXJlLCBidXQgd2hlbiB0aGUgcGxheWhlYWQgbW92ZXMgb2ZmIG9mIHRoYXQgcG9zaXRpb24sIHRoZSBjYWxsYmFjayBzaG91bGQgZmlyZS4gVGhpcyBiZWhhdmlvciBpcyB3aGF0IHBlb3BsZSBpbnR1aXRpdmVseSBleHBlY3QuXG5cbiAgICAgICAgKHRvdGFsVGltZSB8fCAhc3VwcHJlc3NFdmVudHMpICYmICh0aGlzLl96VGltZSA9IHRvdGFsVGltZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9yZXBlYXQpIHtcbiAgICAgICAgLy9hZGp1c3QgdGhlIHRpbWUgZm9yIHJlcGVhdHMgYW5kIHlveW9zXG4gICAgICAgIHlveW8gPSB0aGlzLl95b3lvO1xuICAgICAgICBjeWNsZUR1cmF0aW9uID0gZHVyICsgdGhpcy5fckRlbGF5O1xuXG4gICAgICAgIGlmICh0aGlzLl9yZXBlYXQgPCAtMSAmJiB0b3RhbFRpbWUgPCAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudG90YWxUaW1lKGN5Y2xlRHVyYXRpb24gKiAxMDAgKyB0b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aW1lID0gX3JvdW5kUHJlY2lzZSh0VGltZSAlIGN5Y2xlRHVyYXRpb24pOyAvL3JvdW5kIHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IGVycm9ycy4gKDQgJSAwLjggc2hvdWxkIGJlIDAgYnV0IHNvbWUgYnJvd3NlcnMgcmVwb3J0IGl0IGFzIDAuNzk5OTk5OTkhKVxuXG4gICAgICAgIGlmICh0VGltZSA9PT0gdER1cikge1xuICAgICAgICAgIC8vIHRoZSB0RHVyID09PSB0VGltZSBpcyBmb3IgZWRnZSBjYXNlcyB3aGVyZSB0aGVyZSdzIGEgbGVuZ3RoeSBkZWNpbWFsIG9uIHRoZSBkdXJhdGlvbiBhbmQgaXQgbWF5IHJlYWNoIHRoZSB2ZXJ5IGVuZCBidXQgdGhlIHRpbWUgaXMgcmVuZGVyZWQgYXMgbm90LXF1aXRlLXRoZXJlIChyZW1lbWJlciwgdER1ciBpcyByb3VuZGVkIHRvIDQgZGVjaW1hbHMgd2hlcmVhcyBkdXIgaXNuJ3QpXG4gICAgICAgICAgaXRlcmF0aW9uID0gdGhpcy5fcmVwZWF0O1xuICAgICAgICAgIHRpbWUgPSBkdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldkl0ZXJhdGlvbiA9IF9yb3VuZFByZWNpc2UodFRpbWUgLyBjeWNsZUR1cmF0aW9uKTsgLy8gZnVsbCBkZWNpbWFsIHZlcnNpb24gb2YgaXRlcmF0aW9ucywgbm90IHRoZSBwcmV2aW91cyBpdGVyYXRpb24gKHdlJ3JlIHJldXNpbmcgcHJldkl0ZXJhdGlvbiB2YXJpYWJsZSBmb3IgZWZmaWNpZW5jeSlcblxuICAgICAgICAgIGl0ZXJhdGlvbiA9IH5+cHJldkl0ZXJhdGlvbjtcblxuICAgICAgICAgIGlmIChpdGVyYXRpb24gJiYgaXRlcmF0aW9uID09PSBwcmV2SXRlcmF0aW9uKSB7XG4gICAgICAgICAgICB0aW1lID0gZHVyO1xuICAgICAgICAgICAgaXRlcmF0aW9uLS07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGltZSA+IGR1ciAmJiAodGltZSA9IGR1cik7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2SXRlcmF0aW9uID0gX2FuaW1hdGlvbkN5Y2xlKHRoaXMuX3RUaW1lLCBjeWNsZUR1cmF0aW9uKTtcbiAgICAgICAgIXByZXZUaW1lICYmIHRoaXMuX3RUaW1lICYmIHByZXZJdGVyYXRpb24gIT09IGl0ZXJhdGlvbiAmJiB0aGlzLl90VGltZSAtIHByZXZJdGVyYXRpb24gKiBjeWNsZUR1cmF0aW9uIC0gdGhpcy5fZHVyIDw9IDAgJiYgKHByZXZJdGVyYXRpb24gPSBpdGVyYXRpb24pOyAvLyBlZGdlIGNhc2UgLSBpZiBzb21lb25lIGRvZXMgYWRkUGF1c2UoKSBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgYSByZXBlYXRpbmcgdGltZWxpbmUsIHRoYXQgcGF1c2UgaXMgdGVjaG5pY2FsbHkgYXQgdGhlIHNhbWUgc3BvdCBhcyB0aGUgZW5kIHdoaWNoIGNhdXNlcyB0aGlzLl90aW1lIHRvIGdldCBzZXQgdG8gMCB3aGVuIHRoZSB0b3RhbFRpbWUgd291bGQgbm9ybWFsbHkgcGxhY2UgdGhlIHBsYXloZWFkIGF0IHRoZSBlbmQuIFNlZSBodHRwczovL2dzYXAuY29tL2ZvcnVtcy90b3BpYy8yMzgyMy1jbG9zaW5nLW5hdi1hbmltYXRpb24tbm90LXdvcmtpbmctb24taWUtYW5kLWlwaG9uZS02LW1heWJlLW90aGVyLW9sZGVyLWJyb3dzZXIvP3RhYj1jb21tZW50cyNjb21tZW50LTExMzAwNSBhbHNvLCB0aGlzLl90VGltZSAtIHByZXZJdGVyYXRpb24gKiBjeWNsZUR1cmF0aW9uIC0gdGhpcy5fZHVyIDw9IDAganVzdCBjaGVja3MgdG8gbWFrZSBzdXJlIGl0IHdhc24ndCBwcmV2aW91c2x5IGluIHRoZSBcInJlcGVhdERlbGF5XCIgcG9ydGlvblxuXG4gICAgICAgIGlmICh5b3lvICYmIGl0ZXJhdGlvbiAmIDEpIHtcbiAgICAgICAgICB0aW1lID0gZHVyIC0gdGltZTtcbiAgICAgICAgICBpc1lveW8gPSAxO1xuICAgICAgICB9XG4gICAgICAgIC8qXG4gICAgICAgIG1ha2Ugc3VyZSBjaGlsZHJlbiBhdCB0aGUgZW5kL2JlZ2lubmluZyBvZiB0aGUgdGltZWxpbmUgYXJlIHJlbmRlcmVkIHByb3Blcmx5LiBJZiwgZm9yIGV4YW1wbGUsXG4gICAgICAgIGEgMy1zZWNvbmQgbG9uZyB0aW1lbGluZSByZW5kZXJlZCBhdCAyLjkgc2Vjb25kcyBwcmV2aW91c2x5LCBhbmQgbm93IHJlbmRlcnMgYXQgMy4yIHNlY29uZHMgKHdoaWNoXG4gICAgICAgIHdvdWxkIGdldCB0cmFuc2xhdGVkIHRvIDIuOCBzZWNvbmRzIGlmIHRoZSB0aW1lbGluZSB5b3lvcyBvciAwLjIgc2Vjb25kcyBpZiBpdCBqdXN0IHJlcGVhdHMpLCB0aGVyZVxuICAgICAgICBjb3VsZCBiZSBhIGNhbGxiYWNrIG9yIGEgc2hvcnQgdHdlZW4gdGhhdCdzIGF0IDIuOTUgb3IgMyBzZWNvbmRzIGluIHdoaWNoIHdvdWxkbid0IHJlbmRlci4gU29cbiAgICAgICAgd2UgbmVlZCB0byBwdXNoIHRoZSB0aW1lbGluZSB0byB0aGUgZW5kIChhbmQvb3IgYmVnaW5uaW5nIGRlcGVuZGluZyBvbiBpdHMgeW95byB2YWx1ZSkuIEFsc28gd2UgbXVzdFxuICAgICAgICBlbnN1cmUgdGhhdCB6ZXJvLWR1cmF0aW9uIHR3ZWVucyBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb3IgZW5kIG9mIHRoZSBUaW1lbGluZSB3b3JrLlxuICAgICAgICAqL1xuXG5cbiAgICAgICAgaWYgKGl0ZXJhdGlvbiAhPT0gcHJldkl0ZXJhdGlvbiAmJiAhdGhpcy5fbG9jaykge1xuICAgICAgICAgIHZhciByZXdpbmRpbmcgPSB5b3lvICYmIHByZXZJdGVyYXRpb24gJiAxLFxuICAgICAgICAgICAgICBkb2VzV3JhcCA9IHJld2luZGluZyA9PT0gKHlveW8gJiYgaXRlcmF0aW9uICYgMSk7XG4gICAgICAgICAgaXRlcmF0aW9uIDwgcHJldkl0ZXJhdGlvbiAmJiAocmV3aW5kaW5nID0gIXJld2luZGluZyk7XG4gICAgICAgICAgcHJldlRpbWUgPSByZXdpbmRpbmcgPyAwIDogdFRpbWUgJSBkdXIgPyBkdXIgOiB0VGltZTsgLy8gaWYgdGhlIHBsYXloZWFkIGlzIGxhbmRpbmcgZXhhY3RseSBhdCB0aGUgZW5kIG9mIGFuIGl0ZXJhdGlvbiwgdXNlIHRoYXQgdG90YWxUaW1lIHJhdGhlciB0aGFuIG9ubHkgdGhlIGR1cmF0aW9uLCBvdGhlcndpc2UgaXQnbGwgc2tpcCB0aGUgMm5kIHJlbmRlciBzaW5jZSBpdCdzIGVmZmVjdGl2ZWx5IGF0IHRoZSBzYW1lIHRpbWUuXG5cbiAgICAgICAgICB0aGlzLl9sb2NrID0gMTtcbiAgICAgICAgICB0aGlzLnJlbmRlcihwcmV2VGltZSB8fCAoaXNZb3lvID8gMCA6IF9yb3VuZFByZWNpc2UoaXRlcmF0aW9uICogY3ljbGVEdXJhdGlvbikpLCBzdXBwcmVzc0V2ZW50cywgIWR1cikuX2xvY2sgPSAwO1xuICAgICAgICAgIHRoaXMuX3RUaW1lID0gdFRpbWU7IC8vIGlmIGEgdXNlciBnZXRzIHRoZSBpdGVyYXRpb24oKSBpbnNpZGUgdGhlIG9uUmVwZWF0LCBmb3IgZXhhbXBsZSwgaXQgc2hvdWxkIGJlIGFjY3VyYXRlLlxuXG4gICAgICAgICAgIXN1cHByZXNzRXZlbnRzICYmIHRoaXMucGFyZW50ICYmIF9jYWxsYmFjayh0aGlzLCBcIm9uUmVwZWF0XCIpO1xuICAgICAgICAgIHRoaXMudmFycy5yZXBlYXRSZWZyZXNoICYmICFpc1lveW8gJiYgKHRoaXMuaW52YWxpZGF0ZSgpLl9sb2NrID0gMSk7XG5cbiAgICAgICAgICBpZiAocHJldlRpbWUgJiYgcHJldlRpbWUgIT09IHRoaXMuX3RpbWUgfHwgcHJldlBhdXNlZCAhPT0gIXRoaXMuX3RzIHx8IHRoaXMudmFycy5vblJlcGVhdCAmJiAhdGhpcy5wYXJlbnQgJiYgIXRoaXMuX2FjdCkge1xuICAgICAgICAgICAgLy8gaWYgcHJldlRpbWUgaXMgMCBhbmQgd2UgcmVuZGVyIGF0IHRoZSB2ZXJ5IGVuZCwgX3RpbWUgd2lsbCBiZSB0aGUgZW5kLCB0aHVzIHdvbid0IG1hdGNoLiBTbyBpbiB0aGlzIGVkZ2UgY2FzZSwgcHJldlRpbWUgd29uJ3QgbWF0Y2ggX3RpbWUgYnV0IHRoYXQncyBva2F5LiBJZiBpdCBnZXRzIGtpbGxlZCBpbiB0aGUgb25SZXBlYXQsIGVqZWN0IGFzIHdlbGwuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkdXIgPSB0aGlzLl9kdXI7IC8vIGluIGNhc2UgdGhlIGR1cmF0aW9uIGNoYW5nZWQgaW4gdGhlIG9uUmVwZWF0XG5cbiAgICAgICAgICB0RHVyID0gdGhpcy5fdER1cjtcblxuICAgICAgICAgIGlmIChkb2VzV3JhcCkge1xuICAgICAgICAgICAgdGhpcy5fbG9jayA9IDI7XG4gICAgICAgICAgICBwcmV2VGltZSA9IHJld2luZGluZyA/IGR1ciA6IC0wLjAwMDE7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcihwcmV2VGltZSwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnZhcnMucmVwZWF0UmVmcmVzaCAmJiAhaXNZb3lvICYmIHRoaXMuaW52YWxpZGF0ZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2xvY2sgPSAwO1xuXG4gICAgICAgICAgaWYgKCF0aGlzLl90cyAmJiAhcHJldlBhdXNlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgfSAvL2luIG9yZGVyIGZvciB5b3lvRWFzZSB0byB3b3JrIHByb3Blcmx5IHdoZW4gdGhlcmUncyBhIHN0YWdnZXIsIHdlIG11c3Qgc3dhcCBvdXQgdGhlIGVhc2UgaW4gZWFjaCBzdWItdHdlZW4uXG5cblxuICAgICAgICAgIF9wcm9wYWdhdGVZb3lvRWFzZSh0aGlzLCBpc1lveW8pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9oYXNQYXVzZSAmJiAhdGhpcy5fZm9yY2luZyAmJiB0aGlzLl9sb2NrIDwgMikge1xuICAgICAgICBwYXVzZVR3ZWVuID0gX2ZpbmROZXh0UGF1c2VUd2Vlbih0aGlzLCBfcm91bmRQcmVjaXNlKHByZXZUaW1lKSwgX3JvdW5kUHJlY2lzZSh0aW1lKSk7XG5cbiAgICAgICAgaWYgKHBhdXNlVHdlZW4pIHtcbiAgICAgICAgICB0VGltZSAtPSB0aW1lIC0gKHRpbWUgPSBwYXVzZVR3ZWVuLl9zdGFydCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fdFRpbWUgPSB0VGltZTtcbiAgICAgIHRoaXMuX3RpbWUgPSB0aW1lO1xuICAgICAgdGhpcy5fYWN0ID0gIXRpbWVTY2FsZTsgLy9hcyBsb25nIGFzIGl0J3Mgbm90IHBhdXNlZCwgZm9yY2UgaXQgdG8gYmUgYWN0aXZlIHNvIHRoYXQgaWYgdGhlIHVzZXIgcmVuZGVycyBpbmRlcGVuZGVudCBvZiB0aGUgcGFyZW50IHRpbWVsaW5lLCBpdCdsbCBiZSBmb3JjZWQgdG8gcmUtcmVuZGVyIG9uIHRoZSBuZXh0IHRpY2suXG5cbiAgICAgIGlmICghdGhpcy5faW5pdHRlZCkge1xuICAgICAgICB0aGlzLl9vblVwZGF0ZSA9IHRoaXMudmFycy5vblVwZGF0ZTtcbiAgICAgICAgdGhpcy5faW5pdHRlZCA9IDE7XG4gICAgICAgIHRoaXMuX3pUaW1lID0gdG90YWxUaW1lO1xuICAgICAgICBwcmV2VGltZSA9IDA7IC8vIHVwb24gaW5pdCwgdGhlIHBsYXloZWFkIHNob3VsZCBhbHdheXMgZ28gZm9yd2FyZDsgc29tZW9uZSBjb3VsZCBpbnZhbGlkYXRlKCkgYSBjb21wbGV0ZWQgdGltZWxpbmUgYW5kIHRoZW4gaWYgdGhleSByZXN0YXJ0KCksIHRoYXQgd291bGQgbWFrZSBjaGlsZCB0d2VlbnMgcmVuZGVyIGluIHJldmVyc2Ugb3JkZXIgd2hpY2ggY291bGQgbG9jayBpbiB0aGUgd3Jvbmcgc3RhcnRpbmcgdmFsdWVzIGlmIHRoZXkgYnVpbGQgb24gZWFjaCBvdGhlciwgbGlrZSB0bC50byhvYmosIHt4OiAxMDB9KS50byhvYmosIHt4OiAwfSkuXG4gICAgICB9XG5cbiAgICAgIGlmICghcHJldlRpbWUgJiYgdGltZSAmJiAhc3VwcHJlc3NFdmVudHMgJiYgIWl0ZXJhdGlvbikge1xuICAgICAgICBfY2FsbGJhY2sodGhpcywgXCJvblN0YXJ0XCIpO1xuXG4gICAgICAgIGlmICh0aGlzLl90VGltZSAhPT0gdFRpbWUpIHtcbiAgICAgICAgICAvLyBpbiBjYXNlIHRoZSBvblN0YXJ0IHRyaWdnZXJlZCBhIHJlbmRlciBhdCBhIGRpZmZlcmVudCBzcG90LCBlamVjdC4gTGlrZSBpZiBzb21lb25lIGRpZCBhbmltYXRpb24ucGF1c2UoMC41KSBvciBzb21ldGhpbmcgaW5zaWRlIHRoZSBvblN0YXJ0LlxuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aW1lID49IHByZXZUaW1lICYmIHRvdGFsVGltZSA+PSAwKSB7XG4gICAgICAgIGNoaWxkID0gdGhpcy5fZmlyc3Q7XG5cbiAgICAgICAgd2hpbGUgKGNoaWxkKSB7XG4gICAgICAgICAgbmV4dCA9IGNoaWxkLl9uZXh0O1xuXG4gICAgICAgICAgaWYgKChjaGlsZC5fYWN0IHx8IHRpbWUgPj0gY2hpbGQuX3N0YXJ0KSAmJiBjaGlsZC5fdHMgJiYgcGF1c2VUd2VlbiAhPT0gY2hpbGQpIHtcbiAgICAgICAgICAgIGlmIChjaGlsZC5wYXJlbnQgIT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgLy8gYW4gZXh0cmVtZSBlZGdlIGNhc2UgLSB0aGUgY2hpbGQncyByZW5kZXIgY291bGQgZG8gc29tZXRoaW5nIGxpa2Uga2lsbCgpIHRoZSBcIm5leHRcIiBvbmUgaW4gdGhlIGxpbmtlZCBsaXN0LCBvciByZXBhcmVudCBpdC4gSW4gdGhhdCBjYXNlIHdlIG11c3QgcmUtaW5pdGlhdGUgdGhlIHdob2xlIHJlbmRlciB0byBiZSBzYWZlLlxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXIodG90YWxUaW1lLCBzdXBwcmVzc0V2ZW50cywgZm9yY2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjaGlsZC5yZW5kZXIoY2hpbGQuX3RzID4gMCA/ICh0aW1lIC0gY2hpbGQuX3N0YXJ0KSAqIGNoaWxkLl90cyA6IChjaGlsZC5fZGlydHkgPyBjaGlsZC50b3RhbER1cmF0aW9uKCkgOiBjaGlsZC5fdER1cikgKyAodGltZSAtIGNoaWxkLl9zdGFydCkgKiBjaGlsZC5fdHMsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSk7XG5cbiAgICAgICAgICAgIGlmICh0aW1lICE9PSB0aGlzLl90aW1lIHx8ICF0aGlzLl90cyAmJiAhcHJldlBhdXNlZCkge1xuICAgICAgICAgICAgICAvL2luIGNhc2UgYSB0d2VlbiBwYXVzZXMgb3Igc2Vla3MgdGhlIHRpbWVsaW5lIHdoZW4gcmVuZGVyaW5nLCBsaWtlIGluc2lkZSBvZiBhbiBvblVwZGF0ZS9vbkNvbXBsZXRlXG4gICAgICAgICAgICAgIHBhdXNlVHdlZW4gPSAwO1xuICAgICAgICAgICAgICBuZXh0ICYmICh0VGltZSArPSB0aGlzLl96VGltZSA9IC1fdGlueU51bSk7IC8vIGl0IGRpZG4ndCBmaW5pc2ggcmVuZGVyaW5nLCBzbyBmbGFnIHpUaW1lIGFzIG5lZ2F0aXZlIHNvIHRoYXQgdGhlIG5leHQgdGltZSByZW5kZXIoKSBpcyBjYWxsZWQgaXQnbGwgYmUgZm9yY2VkICh0byByZW5kZXIgYW55IHJlbWFpbmluZyBjaGlsZHJlbilcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGlsZCA9IG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkID0gdGhpcy5fbGFzdDtcbiAgICAgICAgdmFyIGFkanVzdGVkVGltZSA9IHRvdGFsVGltZSA8IDAgPyB0b3RhbFRpbWUgOiB0aW1lOyAvL3doZW4gdGhlIHBsYXloZWFkIGdvZXMgYmFja3dhcmQgYmV5b25kIHRoZSBzdGFydCBvZiB0aGlzIHRpbWVsaW5lLCB3ZSBtdXN0IHBhc3MgdGhhdCBpbmZvcm1hdGlvbiBkb3duIHRvIHRoZSBjaGlsZCBhbmltYXRpb25zIHNvIHRoYXQgemVyby1kdXJhdGlvbiB0d2VlbnMga25vdyB3aGV0aGVyIHRvIHJlbmRlciB0aGVpciBzdGFydGluZyBvciBlbmRpbmcgdmFsdWVzLlxuXG4gICAgICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgICAgIG5leHQgPSBjaGlsZC5fcHJldjtcblxuICAgICAgICAgIGlmICgoY2hpbGQuX2FjdCB8fCBhZGp1c3RlZFRpbWUgPD0gY2hpbGQuX2VuZCkgJiYgY2hpbGQuX3RzICYmIHBhdXNlVHdlZW4gIT09IGNoaWxkKSB7XG4gICAgICAgICAgICBpZiAoY2hpbGQucGFyZW50ICE9PSB0aGlzKSB7XG4gICAgICAgICAgICAgIC8vIGFuIGV4dHJlbWUgZWRnZSBjYXNlIC0gdGhlIGNoaWxkJ3MgcmVuZGVyIGNvdWxkIGRvIHNvbWV0aGluZyBsaWtlIGtpbGwoKSB0aGUgXCJuZXh0XCIgb25lIGluIHRoZSBsaW5rZWQgbGlzdCwgb3IgcmVwYXJlbnQgaXQuIEluIHRoYXQgY2FzZSB3ZSBtdXN0IHJlLWluaXRpYXRlIHRoZSB3aG9sZSByZW5kZXIgdG8gYmUgc2FmZS5cbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKHRvdGFsVGltZSwgc3VwcHJlc3NFdmVudHMsIGZvcmNlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2hpbGQucmVuZGVyKGNoaWxkLl90cyA+IDAgPyAoYWRqdXN0ZWRUaW1lIC0gY2hpbGQuX3N0YXJ0KSAqIGNoaWxkLl90cyA6IChjaGlsZC5fZGlydHkgPyBjaGlsZC50b3RhbER1cmF0aW9uKCkgOiBjaGlsZC5fdER1cikgKyAoYWRqdXN0ZWRUaW1lIC0gY2hpbGQuX3N0YXJ0KSAqIGNoaWxkLl90cywgc3VwcHJlc3NFdmVudHMsIGZvcmNlIHx8IF9yZXZlcnRpbmcgJiYgKGNoaWxkLl9pbml0dGVkIHx8IGNoaWxkLl9zdGFydEF0KSk7IC8vIGlmIHJldmVydGluZywgd2Ugc2hvdWxkIGFsd2F5cyBmb3JjZSByZW5kZXJzIG9mIGluaXR0ZWQgdHdlZW5zIChidXQgcmVtZW1iZXIgdGhhdCAuZnJvbVRvKCkgb3IgLmZyb20oKSBtYXkgaGF2ZSBhIF9zdGFydEF0IGJ1dCBub3QgX2luaXR0ZWQgeWV0KS4gSWYsIGZvciBleGFtcGxlLCBhIC5mcm9tVG8oKSB0d2VlbiB3aXRoIGEgc3RhZ2dlciAod2hpY2ggY3JlYXRlcyBhbiBpbnRlcm5hbCB0aW1lbGluZSkgZ2V0cyByZXZlcnRlZCBCRUZPUkUgc29tZSBvZiBpdHMgY2hpbGQgdHdlZW5zIHJlbmRlciBmb3IgdGhlIGZpcnN0IHRpbWUsIGl0IG1heSBub3QgcHJvcGVybHkgdHJpZ2dlciB0aGVtIHRvIHJldmVydC5cblxuICAgICAgICAgICAgaWYgKHRpbWUgIT09IHRoaXMuX3RpbWUgfHwgIXRoaXMuX3RzICYmICFwcmV2UGF1c2VkKSB7XG4gICAgICAgICAgICAgIC8vaW4gY2FzZSBhIHR3ZWVuIHBhdXNlcyBvciBzZWVrcyB0aGUgdGltZWxpbmUgd2hlbiByZW5kZXJpbmcsIGxpa2UgaW5zaWRlIG9mIGFuIG9uVXBkYXRlL29uQ29tcGxldGVcbiAgICAgICAgICAgICAgcGF1c2VUd2VlbiA9IDA7XG4gICAgICAgICAgICAgIG5leHQgJiYgKHRUaW1lICs9IHRoaXMuX3pUaW1lID0gYWRqdXN0ZWRUaW1lID8gLV90aW55TnVtIDogX3RpbnlOdW0pOyAvLyBpdCBkaWRuJ3QgZmluaXNoIHJlbmRlcmluZywgc28gYWRqdXN0IHpUaW1lIHNvIHRoYXQgc28gdGhhdCB0aGUgbmV4dCB0aW1lIHJlbmRlcigpIGlzIGNhbGxlZCBpdCdsbCBiZSBmb3JjZWQgKHRvIHJlbmRlciBhbnkgcmVtYWluaW5nIGNoaWxkcmVuKVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoaWxkID0gbmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocGF1c2VUd2VlbiAmJiAhc3VwcHJlc3NFdmVudHMpIHtcbiAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgICBwYXVzZVR3ZWVuLnJlbmRlcih0aW1lID49IHByZXZUaW1lID8gMCA6IC1fdGlueU51bSkuX3pUaW1lID0gdGltZSA+PSBwcmV2VGltZSA/IDEgOiAtMTtcblxuICAgICAgICBpZiAodGhpcy5fdHMpIHtcbiAgICAgICAgICAvL3RoZSBjYWxsYmFjayByZXN1bWVkIHBsYXliYWNrISBTbyBzaW5jZSB3ZSBtYXkgaGF2ZSBoZWxkIGJhY2sgdGhlIHBsYXloZWFkIGR1ZSB0byB3aGVyZSB0aGUgcGF1c2UgaXMgcG9zaXRpb25lZCwgZ28gYWhlYWQgYW5kIGp1bXAgdG8gd2hlcmUgaXQncyBTVVBQT1NFRCB0byBiZSAoaWYgbm8gcGF1c2UgaGFwcGVuZWQpLlxuICAgICAgICAgIHRoaXMuX3N0YXJ0ID0gcHJldlN0YXJ0OyAvL2lmIHRoZSBwYXVzZSB3YXMgYXQgYW4gZWFybGllciB0aW1lIGFuZCB0aGUgdXNlciByZXN1bWVkIGluIHRoZSBjYWxsYmFjaywgaXQgY291bGQgcmVwb3NpdGlvbiB0aGUgdGltZWxpbmUgKGNoYW5naW5nIGl0cyBzdGFydFRpbWUpLCB0aHJvd2luZyB0aGluZ3Mgb2ZmIHNsaWdodGx5LCBzbyB3ZSBtYWtlIHN1cmUgdGhlIF9zdGFydCBkb2Vzbid0IHNoaWZ0LlxuXG4gICAgICAgICAgX3NldEVuZCh0aGlzKTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlcih0b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fb25VcGRhdGUgJiYgIXN1cHByZXNzRXZlbnRzICYmIF9jYWxsYmFjayh0aGlzLCBcIm9uVXBkYXRlXCIsIHRydWUpO1xuICAgICAgaWYgKHRUaW1lID09PSB0RHVyICYmIHRoaXMuX3RUaW1lID49IHRoaXMudG90YWxEdXJhdGlvbigpIHx8ICF0VGltZSAmJiBwcmV2VGltZSkgaWYgKHByZXZTdGFydCA9PT0gdGhpcy5fc3RhcnQgfHwgTWF0aC5hYnModGltZVNjYWxlKSAhPT0gTWF0aC5hYnModGhpcy5fdHMpKSBpZiAoIXRoaXMuX2xvY2spIHtcbiAgICAgICAgLy8gcmVtZW1iZXIsIGEgY2hpbGQncyBjYWxsYmFjayBtYXkgYWx0ZXIgdGhpcyB0aW1lbGluZSdzIHBsYXloZWFkIG9yIHRpbWVTY2FsZSB3aGljaCBpcyB3aHkgd2UgbmVlZCB0byBhZGQgc29tZSBvZiB0aGVzZSBjaGVja3MuXG4gICAgICAgICh0b3RhbFRpbWUgfHwgIWR1cikgJiYgKHRUaW1lID09PSB0RHVyICYmIHRoaXMuX3RzID4gMCB8fCAhdFRpbWUgJiYgdGhpcy5fdHMgPCAwKSAmJiBfcmVtb3ZlRnJvbVBhcmVudCh0aGlzLCAxKTsgLy8gZG9uJ3QgcmVtb3ZlIGlmIHRoZSB0aW1lbGluZSBpcyByZXZlcnNlZCBhbmQgdGhlIHBsYXloZWFkIGlzbid0IGF0IDAsIG90aGVyd2lzZSB0bC5wcm9ncmVzcygxKS5yZXZlcnNlKCkgd29uJ3Qgd29yay4gT25seSByZW1vdmUgaWYgdGhlIHBsYXloZWFkIGlzIGF0IHRoZSBlbmQgYW5kIHRpbWVTY2FsZSBpcyBwb3NpdGl2ZSwgb3IgaWYgdGhlIHBsYXloZWFkIGlzIGF0IDAgYW5kIHRoZSB0aW1lU2NhbGUgaXMgbmVnYXRpdmUuXG5cbiAgICAgICAgaWYgKCFzdXBwcmVzc0V2ZW50cyAmJiAhKHRvdGFsVGltZSA8IDAgJiYgIXByZXZUaW1lKSAmJiAodFRpbWUgfHwgcHJldlRpbWUgfHwgIXREdXIpKSB7XG4gICAgICAgICAgX2NhbGxiYWNrKHRoaXMsIHRUaW1lID09PSB0RHVyICYmIHRvdGFsVGltZSA+PSAwID8gXCJvbkNvbXBsZXRlXCIgOiBcIm9uUmV2ZXJzZUNvbXBsZXRlXCIsIHRydWUpO1xuXG4gICAgICAgICAgdGhpcy5fcHJvbSAmJiAhKHRUaW1lIDwgdER1ciAmJiB0aGlzLnRpbWVTY2FsZSgpID4gMCkgJiYgdGhpcy5fcHJvbSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvMi5hZGQgPSBmdW5jdGlvbiBhZGQoY2hpbGQsIHBvc2l0aW9uKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICBfaXNOdW1iZXIocG9zaXRpb24pIHx8IChwb3NpdGlvbiA9IF9wYXJzZVBvc2l0aW9uKHRoaXMsIHBvc2l0aW9uLCBjaGlsZCkpO1xuXG4gICAgaWYgKCEoY2hpbGQgaW5zdGFuY2VvZiBBbmltYXRpb24pKSB7XG4gICAgICBpZiAoX2lzQXJyYXkoY2hpbGQpKSB7XG4gICAgICAgIGNoaWxkLmZvckVhY2goZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgIHJldHVybiBfdGhpczIuYWRkKG9iaiwgcG9zaXRpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIGlmIChfaXNTdHJpbmcoY2hpbGQpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZExhYmVsKGNoaWxkLCBwb3NpdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChfaXNGdW5jdGlvbihjaGlsZCkpIHtcbiAgICAgICAgY2hpbGQgPSBUd2Vlbi5kZWxheWVkQ2FsbCgwLCBjaGlsZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcyAhPT0gY2hpbGQgPyBfYWRkVG9UaW1lbGluZSh0aGlzLCBjaGlsZCwgcG9zaXRpb24pIDogdGhpczsgLy9kb24ndCBhbGxvdyBhIHRpbWVsaW5lIHRvIGJlIGFkZGVkIHRvIGl0c2VsZiBhcyBhIGNoaWxkIVxuICB9O1xuXG4gIF9wcm90bzIuZ2V0Q2hpbGRyZW4gPSBmdW5jdGlvbiBnZXRDaGlsZHJlbihuZXN0ZWQsIHR3ZWVucywgdGltZWxpbmVzLCBpZ25vcmVCZWZvcmVUaW1lKSB7XG4gICAgaWYgKG5lc3RlZCA9PT0gdm9pZCAwKSB7XG4gICAgICBuZXN0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0d2VlbnMgPT09IHZvaWQgMCkge1xuICAgICAgdHdlZW5zID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGltZWxpbmVzID09PSB2b2lkIDApIHtcbiAgICAgIHRpbWVsaW5lcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGlnbm9yZUJlZm9yZVRpbWUgPT09IHZvaWQgMCkge1xuICAgICAgaWdub3JlQmVmb3JlVGltZSA9IC1fYmlnTnVtO1xuICAgIH1cblxuICAgIHZhciBhID0gW10sXG4gICAgICAgIGNoaWxkID0gdGhpcy5fZmlyc3Q7XG5cbiAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgIGlmIChjaGlsZC5fc3RhcnQgPj0gaWdub3JlQmVmb3JlVGltZSkge1xuICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBUd2Vlbikge1xuICAgICAgICAgIHR3ZWVucyAmJiBhLnB1c2goY2hpbGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRpbWVsaW5lcyAmJiBhLnB1c2goY2hpbGQpO1xuICAgICAgICAgIG5lc3RlZCAmJiBhLnB1c2guYXBwbHkoYSwgY2hpbGQuZ2V0Q2hpbGRyZW4odHJ1ZSwgdHdlZW5zLCB0aW1lbGluZXMpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjaGlsZCA9IGNoaWxkLl9uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBhO1xuICB9O1xuXG4gIF9wcm90bzIuZ2V0QnlJZCA9IGZ1bmN0aW9uIGdldEJ5SWQoaWQpIHtcbiAgICB2YXIgYW5pbWF0aW9ucyA9IHRoaXMuZ2V0Q2hpbGRyZW4oMSwgMSwgMSksXG4gICAgICAgIGkgPSBhbmltYXRpb25zLmxlbmd0aDtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGlmIChhbmltYXRpb25zW2ldLnZhcnMuaWQgPT09IGlkKSB7XG4gICAgICAgIHJldHVybiBhbmltYXRpb25zW2ldO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG8yLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShjaGlsZCkge1xuICAgIGlmIChfaXNTdHJpbmcoY2hpbGQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW1vdmVMYWJlbChjaGlsZCk7XG4gICAgfVxuXG4gICAgaWYgKF9pc0Z1bmN0aW9uKGNoaWxkKSkge1xuICAgICAgcmV0dXJuIHRoaXMua2lsbFR3ZWVuc09mKGNoaWxkKTtcbiAgICB9XG5cbiAgICBjaGlsZC5wYXJlbnQgPT09IHRoaXMgJiYgX3JlbW92ZUxpbmtlZExpc3RJdGVtKHRoaXMsIGNoaWxkKTtcblxuICAgIGlmIChjaGlsZCA9PT0gdGhpcy5fcmVjZW50KSB7XG4gICAgICB0aGlzLl9yZWNlbnQgPSB0aGlzLl9sYXN0O1xuICAgIH1cblxuICAgIHJldHVybiBfdW5jYWNoZSh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8yLnRvdGFsVGltZSA9IGZ1bmN0aW9uIHRvdGFsVGltZShfdG90YWxUaW1lMiwgc3VwcHJlc3NFdmVudHMpIHtcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLl90VGltZTtcbiAgICB9XG5cbiAgICB0aGlzLl9mb3JjaW5nID0gMTtcblxuICAgIGlmICghdGhpcy5fZHAgJiYgdGhpcy5fdHMpIHtcbiAgICAgIC8vc3BlY2lhbCBjYXNlIGZvciB0aGUgZ2xvYmFsIHRpbWVsaW5lIChvciBhbnkgb3RoZXIgdGhhdCBoYXMgbm8gcGFyZW50IG9yIGRldGFjaGVkIHBhcmVudCkuXG4gICAgICB0aGlzLl9zdGFydCA9IF9yb3VuZFByZWNpc2UoX3RpY2tlci50aW1lIC0gKHRoaXMuX3RzID4gMCA/IF90b3RhbFRpbWUyIC8gdGhpcy5fdHMgOiAodGhpcy50b3RhbER1cmF0aW9uKCkgLSBfdG90YWxUaW1lMikgLyAtdGhpcy5fdHMpKTtcbiAgICB9XG5cbiAgICBfQW5pbWF0aW9uLnByb3RvdHlwZS50b3RhbFRpbWUuY2FsbCh0aGlzLCBfdG90YWxUaW1lMiwgc3VwcHJlc3NFdmVudHMpO1xuXG4gICAgdGhpcy5fZm9yY2luZyA9IDA7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvMi5hZGRMYWJlbCA9IGZ1bmN0aW9uIGFkZExhYmVsKGxhYmVsLCBwb3NpdGlvbikge1xuICAgIHRoaXMubGFiZWxzW2xhYmVsXSA9IF9wYXJzZVBvc2l0aW9uKHRoaXMsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8yLnJlbW92ZUxhYmVsID0gZnVuY3Rpb24gcmVtb3ZlTGFiZWwobGFiZWwpIHtcbiAgICBkZWxldGUgdGhpcy5sYWJlbHNbbGFiZWxdO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIF9wcm90bzIuYWRkUGF1c2UgPSBmdW5jdGlvbiBhZGRQYXVzZShwb3NpdGlvbiwgY2FsbGJhY2ssIHBhcmFtcykge1xuICAgIHZhciB0ID0gVHdlZW4uZGVsYXllZENhbGwoMCwgY2FsbGJhY2sgfHwgX2VtcHR5RnVuYywgcGFyYW1zKTtcbiAgICB0LmRhdGEgPSBcImlzUGF1c2VcIjtcbiAgICB0aGlzLl9oYXNQYXVzZSA9IDE7XG4gICAgcmV0dXJuIF9hZGRUb1RpbWVsaW5lKHRoaXMsIHQsIF9wYXJzZVBvc2l0aW9uKHRoaXMsIHBvc2l0aW9uKSk7XG4gIH07XG5cbiAgX3Byb3RvMi5yZW1vdmVQYXVzZSA9IGZ1bmN0aW9uIHJlbW92ZVBhdXNlKHBvc2l0aW9uKSB7XG4gICAgdmFyIGNoaWxkID0gdGhpcy5fZmlyc3Q7XG4gICAgcG9zaXRpb24gPSBfcGFyc2VQb3NpdGlvbih0aGlzLCBwb3NpdGlvbik7XG5cbiAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgIGlmIChjaGlsZC5fc3RhcnQgPT09IHBvc2l0aW9uICYmIGNoaWxkLmRhdGEgPT09IFwiaXNQYXVzZVwiKSB7XG4gICAgICAgIF9yZW1vdmVGcm9tUGFyZW50KGNoaWxkKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGQgPSBjaGlsZC5fbmV4dDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvMi5raWxsVHdlZW5zT2YgPSBmdW5jdGlvbiBraWxsVHdlZW5zT2YodGFyZ2V0cywgcHJvcHMsIG9ubHlBY3RpdmUpIHtcbiAgICB2YXIgdHdlZW5zID0gdGhpcy5nZXRUd2VlbnNPZih0YXJnZXRzLCBvbmx5QWN0aXZlKSxcbiAgICAgICAgaSA9IHR3ZWVucy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBfb3ZlcndyaXRpbmdUd2VlbiAhPT0gdHdlZW5zW2ldICYmIHR3ZWVuc1tpXS5raWxsKHRhcmdldHMsIHByb3BzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8yLmdldFR3ZWVuc09mID0gZnVuY3Rpb24gZ2V0VHdlZW5zT2YodGFyZ2V0cywgb25seUFjdGl2ZSkge1xuICAgIHZhciBhID0gW10sXG4gICAgICAgIHBhcnNlZFRhcmdldHMgPSB0b0FycmF5KHRhcmdldHMpLFxuICAgICAgICBjaGlsZCA9IHRoaXMuX2ZpcnN0LFxuICAgICAgICBpc0dsb2JhbFRpbWUgPSBfaXNOdW1iZXIob25seUFjdGl2ZSksXG4gICAgICAgIC8vIGEgbnVtYmVyIGlzIGludGVycHJldGVkIGFzIGEgZ2xvYmFsIHRpbWUuIElmIHRoZSBhbmltYXRpb24gc3BhbnNcbiAgICBjaGlsZHJlbjtcblxuICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgVHdlZW4pIHtcbiAgICAgICAgaWYgKF9hcnJheUNvbnRhaW5zQW55KGNoaWxkLl90YXJnZXRzLCBwYXJzZWRUYXJnZXRzKSAmJiAoaXNHbG9iYWxUaW1lID8gKCFfb3ZlcndyaXRpbmdUd2VlbiB8fCBjaGlsZC5faW5pdHRlZCAmJiBjaGlsZC5fdHMpICYmIGNoaWxkLmdsb2JhbFRpbWUoMCkgPD0gb25seUFjdGl2ZSAmJiBjaGlsZC5nbG9iYWxUaW1lKGNoaWxkLnRvdGFsRHVyYXRpb24oKSkgPiBvbmx5QWN0aXZlIDogIW9ubHlBY3RpdmUgfHwgY2hpbGQuaXNBY3RpdmUoKSkpIHtcbiAgICAgICAgICAvLyBub3RlOiBpZiB0aGlzIGlzIGZvciBvdmVyd3JpdGluZywgaXQgc2hvdWxkIG9ubHkgYmUgZm9yIHR3ZWVucyB0aGF0IGFyZW4ndCBwYXVzZWQgYW5kIGFyZSBpbml0dGVkLlxuICAgICAgICAgIGEucHVzaChjaGlsZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKGNoaWxkcmVuID0gY2hpbGQuZ2V0VHdlZW5zT2YocGFyc2VkVGFyZ2V0cywgb25seUFjdGl2ZSkpLmxlbmd0aCkge1xuICAgICAgICBhLnB1c2guYXBwbHkoYSwgY2hpbGRyZW4pO1xuICAgICAgfVxuXG4gICAgICBjaGlsZCA9IGNoaWxkLl9uZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBhO1xuICB9IC8vIHBvdGVudGlhbCBmdXR1cmUgZmVhdHVyZSAtIHRhcmdldHMoKSBvbiB0aW1lbGluZXNcbiAgLy8gdGFyZ2V0cygpIHtcbiAgLy8gXHRsZXQgcmVzdWx0ID0gW107XG4gIC8vIFx0dGhpcy5nZXRDaGlsZHJlbih0cnVlLCB0cnVlLCBmYWxzZSkuZm9yRWFjaCh0ID0+IHJlc3VsdC5wdXNoKC4uLnQudGFyZ2V0cygpKSk7XG4gIC8vIFx0cmV0dXJuIHJlc3VsdC5maWx0ZXIoKHYsIGkpID0+IHJlc3VsdC5pbmRleE9mKHYpID09PSBpKTtcbiAgLy8gfVxuICA7XG5cbiAgX3Byb3RvMi50d2VlblRvID0gZnVuY3Rpb24gdHdlZW5Ubyhwb3NpdGlvbiwgdmFycykge1xuICAgIHZhcnMgPSB2YXJzIHx8IHt9O1xuXG4gICAgdmFyIHRsID0gdGhpcyxcbiAgICAgICAgZW5kVGltZSA9IF9wYXJzZVBvc2l0aW9uKHRsLCBwb3NpdGlvbiksXG4gICAgICAgIF92YXJzID0gdmFycyxcbiAgICAgICAgc3RhcnRBdCA9IF92YXJzLnN0YXJ0QXQsXG4gICAgICAgIF9vblN0YXJ0ID0gX3ZhcnMub25TdGFydCxcbiAgICAgICAgb25TdGFydFBhcmFtcyA9IF92YXJzLm9uU3RhcnRQYXJhbXMsXG4gICAgICAgIGltbWVkaWF0ZVJlbmRlciA9IF92YXJzLmltbWVkaWF0ZVJlbmRlcixcbiAgICAgICAgaW5pdHRlZCxcbiAgICAgICAgdHdlZW4gPSBUd2Vlbi50byh0bCwgX3NldERlZmF1bHRzKHtcbiAgICAgIGVhc2U6IHZhcnMuZWFzZSB8fCBcIm5vbmVcIixcbiAgICAgIGxhenk6IGZhbHNlLFxuICAgICAgaW1tZWRpYXRlUmVuZGVyOiBmYWxzZSxcbiAgICAgIHRpbWU6IGVuZFRpbWUsXG4gICAgICBvdmVyd3JpdGU6IFwiYXV0b1wiLFxuICAgICAgZHVyYXRpb246IHZhcnMuZHVyYXRpb24gfHwgTWF0aC5hYnMoKGVuZFRpbWUgLSAoc3RhcnRBdCAmJiBcInRpbWVcIiBpbiBzdGFydEF0ID8gc3RhcnRBdC50aW1lIDogdGwuX3RpbWUpKSAvIHRsLnRpbWVTY2FsZSgpKSB8fCBfdGlueU51bSxcbiAgICAgIG9uU3RhcnQ6IGZ1bmN0aW9uIG9uU3RhcnQoKSB7XG4gICAgICAgIHRsLnBhdXNlKCk7XG5cbiAgICAgICAgaWYgKCFpbml0dGVkKSB7XG4gICAgICAgICAgdmFyIGR1cmF0aW9uID0gdmFycy5kdXJhdGlvbiB8fCBNYXRoLmFicygoZW5kVGltZSAtIChzdGFydEF0ICYmIFwidGltZVwiIGluIHN0YXJ0QXQgPyBzdGFydEF0LnRpbWUgOiB0bC5fdGltZSkpIC8gdGwudGltZVNjYWxlKCkpO1xuICAgICAgICAgIHR3ZWVuLl9kdXIgIT09IGR1cmF0aW9uICYmIF9zZXREdXJhdGlvbih0d2VlbiwgZHVyYXRpb24sIDAsIDEpLnJlbmRlcih0d2Vlbi5fdGltZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgaW5pdHRlZCA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBfb25TdGFydCAmJiBfb25TdGFydC5hcHBseSh0d2Vlbiwgb25TdGFydFBhcmFtcyB8fCBbXSk7IC8vaW4gY2FzZSB0aGUgdXNlciBoYWQgYW4gb25TdGFydCBpbiB0aGUgdmFycyAtIHdlIGRvbid0IHdhbnQgdG8gb3ZlcndyaXRlIGl0LlxuICAgICAgfVxuICAgIH0sIHZhcnMpKTtcblxuICAgIHJldHVybiBpbW1lZGlhdGVSZW5kZXIgPyB0d2Vlbi5yZW5kZXIoMCkgOiB0d2VlbjtcbiAgfTtcblxuICBfcHJvdG8yLnR3ZWVuRnJvbVRvID0gZnVuY3Rpb24gdHdlZW5Gcm9tVG8oZnJvbVBvc2l0aW9uLCB0b1Bvc2l0aW9uLCB2YXJzKSB7XG4gICAgcmV0dXJuIHRoaXMudHdlZW5Ubyh0b1Bvc2l0aW9uLCBfc2V0RGVmYXVsdHMoe1xuICAgICAgc3RhcnRBdDoge1xuICAgICAgICB0aW1lOiBfcGFyc2VQb3NpdGlvbih0aGlzLCBmcm9tUG9zaXRpb24pXG4gICAgICB9XG4gICAgfSwgdmFycykpO1xuICB9O1xuXG4gIF9wcm90bzIucmVjZW50ID0gZnVuY3Rpb24gcmVjZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWNlbnQ7XG4gIH07XG5cbiAgX3Byb3RvMi5uZXh0TGFiZWwgPSBmdW5jdGlvbiBuZXh0TGFiZWwoYWZ0ZXJUaW1lKSB7XG4gICAgaWYgKGFmdGVyVGltZSA9PT0gdm9pZCAwKSB7XG4gICAgICBhZnRlclRpbWUgPSB0aGlzLl90aW1lO1xuICAgIH1cblxuICAgIHJldHVybiBfZ2V0TGFiZWxJbkRpcmVjdGlvbih0aGlzLCBfcGFyc2VQb3NpdGlvbih0aGlzLCBhZnRlclRpbWUpKTtcbiAgfTtcblxuICBfcHJvdG8yLnByZXZpb3VzTGFiZWwgPSBmdW5jdGlvbiBwcmV2aW91c0xhYmVsKGJlZm9yZVRpbWUpIHtcbiAgICBpZiAoYmVmb3JlVGltZSA9PT0gdm9pZCAwKSB7XG4gICAgICBiZWZvcmVUaW1lID0gdGhpcy5fdGltZTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2dldExhYmVsSW5EaXJlY3Rpb24odGhpcywgX3BhcnNlUG9zaXRpb24odGhpcywgYmVmb3JlVGltZSksIDEpO1xuICB9O1xuXG4gIF9wcm90bzIuY3VycmVudExhYmVsID0gZnVuY3Rpb24gY3VycmVudExhYmVsKHZhbHVlKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyB0aGlzLnNlZWsodmFsdWUsIHRydWUpIDogdGhpcy5wcmV2aW91c0xhYmVsKHRoaXMuX3RpbWUgKyBfdGlueU51bSk7XG4gIH07XG5cbiAgX3Byb3RvMi5zaGlmdENoaWxkcmVuID0gZnVuY3Rpb24gc2hpZnRDaGlsZHJlbihhbW91bnQsIGFkanVzdExhYmVscywgaWdub3JlQmVmb3JlVGltZSkge1xuICAgIGlmIChpZ25vcmVCZWZvcmVUaW1lID09PSB2b2lkIDApIHtcbiAgICAgIGlnbm9yZUJlZm9yZVRpbWUgPSAwO1xuICAgIH1cblxuICAgIHZhciBjaGlsZCA9IHRoaXMuX2ZpcnN0LFxuICAgICAgICBsYWJlbHMgPSB0aGlzLmxhYmVscyxcbiAgICAgICAgcDtcblxuICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgaWYgKGNoaWxkLl9zdGFydCA+PSBpZ25vcmVCZWZvcmVUaW1lKSB7XG4gICAgICAgIGNoaWxkLl9zdGFydCArPSBhbW91bnQ7XG4gICAgICAgIGNoaWxkLl9lbmQgKz0gYW1vdW50O1xuICAgICAgfVxuXG4gICAgICBjaGlsZCA9IGNoaWxkLl9uZXh0O1xuICAgIH1cblxuICAgIGlmIChhZGp1c3RMYWJlbHMpIHtcbiAgICAgIGZvciAocCBpbiBsYWJlbHMpIHtcbiAgICAgICAgaWYgKGxhYmVsc1twXSA+PSBpZ25vcmVCZWZvcmVUaW1lKSB7XG4gICAgICAgICAgbGFiZWxzW3BdICs9IGFtb3VudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBfdW5jYWNoZSh0aGlzKTtcbiAgfTtcblxuICBfcHJvdG8yLmludmFsaWRhdGUgPSBmdW5jdGlvbiBpbnZhbGlkYXRlKHNvZnQpIHtcbiAgICB2YXIgY2hpbGQgPSB0aGlzLl9maXJzdDtcbiAgICB0aGlzLl9sb2NrID0gMDtcblxuICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgY2hpbGQuaW52YWxpZGF0ZShzb2Z0KTtcbiAgICAgIGNoaWxkID0gY2hpbGQuX25leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9BbmltYXRpb24ucHJvdG90eXBlLmludmFsaWRhdGUuY2FsbCh0aGlzLCBzb2Z0KTtcbiAgfTtcblxuICBfcHJvdG8yLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoaW5jbHVkZUxhYmVscykge1xuICAgIGlmIChpbmNsdWRlTGFiZWxzID09PSB2b2lkIDApIHtcbiAgICAgIGluY2x1ZGVMYWJlbHMgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBjaGlsZCA9IHRoaXMuX2ZpcnN0LFxuICAgICAgICBuZXh0O1xuXG4gICAgd2hpbGUgKGNoaWxkKSB7XG4gICAgICBuZXh0ID0gY2hpbGQuX25leHQ7XG4gICAgICB0aGlzLnJlbW92ZShjaGlsZCk7XG4gICAgICBjaGlsZCA9IG5leHQ7XG4gICAgfVxuXG4gICAgdGhpcy5fZHAgJiYgKHRoaXMuX3RpbWUgPSB0aGlzLl90VGltZSA9IHRoaXMuX3BUaW1lID0gMCk7XG4gICAgaW5jbHVkZUxhYmVscyAmJiAodGhpcy5sYWJlbHMgPSB7fSk7XG4gICAgcmV0dXJuIF91bmNhY2hlKHRoaXMpO1xuICB9O1xuXG4gIF9wcm90bzIudG90YWxEdXJhdGlvbiA9IGZ1bmN0aW9uIHRvdGFsRHVyYXRpb24odmFsdWUpIHtcbiAgICB2YXIgbWF4ID0gMCxcbiAgICAgICAgc2VsZiA9IHRoaXMsXG4gICAgICAgIGNoaWxkID0gc2VsZi5fbGFzdCxcbiAgICAgICAgcHJldlN0YXJ0ID0gX2JpZ051bSxcbiAgICAgICAgcHJldixcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIHBhcmVudDtcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gc2VsZi50aW1lU2NhbGUoKHNlbGYuX3JlcGVhdCA8IDAgPyBzZWxmLmR1cmF0aW9uKCkgOiBzZWxmLnRvdGFsRHVyYXRpb24oKSkgLyAoc2VsZi5yZXZlcnNlZCgpID8gLXZhbHVlIDogdmFsdWUpKTtcbiAgICB9XG5cbiAgICBpZiAoc2VsZi5fZGlydHkpIHtcbiAgICAgIHBhcmVudCA9IHNlbGYucGFyZW50O1xuXG4gICAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgICAgcHJldiA9IGNoaWxkLl9wcmV2OyAvL3JlY29yZCBpdCBoZXJlIGluIGNhc2UgdGhlIHR3ZWVuIGNoYW5nZXMgcG9zaXRpb24gaW4gdGhlIHNlcXVlbmNlLi4uXG5cbiAgICAgICAgY2hpbGQuX2RpcnR5ICYmIGNoaWxkLnRvdGFsRHVyYXRpb24oKTsgLy9jb3VsZCBjaGFuZ2UgdGhlIHR3ZWVuLl9zdGFydFRpbWUsIHNvIG1ha2Ugc3VyZSB0aGUgYW5pbWF0aW9uJ3MgY2FjaGUgaXMgY2xlYW4gYmVmb3JlIGFuYWx5emluZyBpdC5cblxuICAgICAgICBzdGFydCA9IGNoaWxkLl9zdGFydDtcblxuICAgICAgICBpZiAoc3RhcnQgPiBwcmV2U3RhcnQgJiYgc2VsZi5fc29ydCAmJiBjaGlsZC5fdHMgJiYgIXNlbGYuX2xvY2spIHtcbiAgICAgICAgICAvL2luIGNhc2Ugb25lIG9mIHRoZSB0d2VlbnMgc2hpZnRlZCBvdXQgb2Ygb3JkZXIsIGl0IG5lZWRzIHRvIGJlIHJlLWluc2VydGVkIGludG8gdGhlIGNvcnJlY3QgcG9zaXRpb24gaW4gdGhlIHNlcXVlbmNlXG4gICAgICAgICAgc2VsZi5fbG9jayA9IDE7IC8vcHJldmVudCBlbmRsZXNzIHJlY3Vyc2l2ZSBjYWxscyAtIHRoZXJlIGFyZSBtZXRob2RzIHRoYXQgZ2V0IHRyaWdnZXJlZCB0aGF0IGNoZWNrIGR1cmF0aW9uL3RvdGFsRHVyYXRpb24gd2hlbiB3ZSBhZGQoKS5cblxuICAgICAgICAgIF9hZGRUb1RpbWVsaW5lKHNlbGYsIGNoaWxkLCBzdGFydCAtIGNoaWxkLl9kZWxheSwgMSkuX2xvY2sgPSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZTdGFydCA9IHN0YXJ0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXJ0IDwgMCAmJiBjaGlsZC5fdHMpIHtcbiAgICAgICAgICAvL2NoaWxkcmVuIGFyZW4ndCBhbGxvd2VkIHRvIGhhdmUgbmVnYXRpdmUgc3RhcnRUaW1lcyB1bmxlc3Mgc21vb3RoQ2hpbGRUaW1pbmcgaXMgdHJ1ZSwgc28gYWRqdXN0IGhlcmUgaWYgb25lIGlzIGZvdW5kLlxuICAgICAgICAgIG1heCAtPSBzdGFydDtcblxuICAgICAgICAgIGlmICghcGFyZW50ICYmICFzZWxmLl9kcCB8fCBwYXJlbnQgJiYgcGFyZW50LnNtb290aENoaWxkVGltaW5nKSB7XG4gICAgICAgICAgICBzZWxmLl9zdGFydCArPSBzdGFydCAvIHNlbGYuX3RzO1xuICAgICAgICAgICAgc2VsZi5fdGltZSAtPSBzdGFydDtcbiAgICAgICAgICAgIHNlbGYuX3RUaW1lIC09IHN0YXJ0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNlbGYuc2hpZnRDaGlsZHJlbigtc3RhcnQsIGZhbHNlLCAtMWU5OTkpO1xuICAgICAgICAgIHByZXZTdGFydCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZC5fZW5kID4gbWF4ICYmIGNoaWxkLl90cyAmJiAobWF4ID0gY2hpbGQuX2VuZCk7XG4gICAgICAgIGNoaWxkID0gcHJldjtcbiAgICAgIH1cblxuICAgICAgX3NldER1cmF0aW9uKHNlbGYsIHNlbGYgPT09IF9nbG9iYWxUaW1lbGluZSAmJiBzZWxmLl90aW1lID4gbWF4ID8gc2VsZi5fdGltZSA6IG1heCwgMSwgMSk7XG5cbiAgICAgIHNlbGYuX2RpcnR5ID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZi5fdER1cjtcbiAgfTtcblxuICBUaW1lbGluZS51cGRhdGVSb290ID0gZnVuY3Rpb24gdXBkYXRlUm9vdCh0aW1lKSB7XG4gICAgaWYgKF9nbG9iYWxUaW1lbGluZS5fdHMpIHtcbiAgICAgIF9sYXp5U2FmZVJlbmRlcihfZ2xvYmFsVGltZWxpbmUsIF9wYXJlbnRUb0NoaWxkVG90YWxUaW1lKHRpbWUsIF9nbG9iYWxUaW1lbGluZSkpO1xuXG4gICAgICBfbGFzdFJlbmRlcmVkRnJhbWUgPSBfdGlja2VyLmZyYW1lO1xuICAgIH1cblxuICAgIGlmIChfdGlja2VyLmZyYW1lID49IF9uZXh0R0NGcmFtZSkge1xuICAgICAgX25leHRHQ0ZyYW1lICs9IF9jb25maWcuYXV0b1NsZWVwIHx8IDEyMDtcbiAgICAgIHZhciBjaGlsZCA9IF9nbG9iYWxUaW1lbGluZS5fZmlyc3Q7XG4gICAgICBpZiAoIWNoaWxkIHx8ICFjaGlsZC5fdHMpIGlmIChfY29uZmlnLmF1dG9TbGVlcCAmJiBfdGlja2VyLl9saXN0ZW5lcnMubGVuZ3RoIDwgMikge1xuICAgICAgICB3aGlsZSAoY2hpbGQgJiYgIWNoaWxkLl90cykge1xuICAgICAgICAgIGNoaWxkID0gY2hpbGQuX25leHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCB8fCBfdGlja2VyLnNsZWVwKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBUaW1lbGluZTtcbn0oQW5pbWF0aW9uKTtcblxuX3NldERlZmF1bHRzKFRpbWVsaW5lLnByb3RvdHlwZSwge1xuICBfbG9jazogMCxcbiAgX2hhc1BhdXNlOiAwLFxuICBfZm9yY2luZzogMFxufSk7XG5cbnZhciBfYWRkQ29tcGxleFN0cmluZ1Byb3BUd2VlbiA9IGZ1bmN0aW9uIF9hZGRDb21wbGV4U3RyaW5nUHJvcFR3ZWVuKHRhcmdldCwgcHJvcCwgc3RhcnQsIGVuZCwgc2V0dGVyLCBzdHJpbmdGaWx0ZXIsIGZ1bmNQYXJhbSkge1xuICAvL25vdGU6IHdlIGNhbGwgX2FkZENvbXBsZXhTdHJpbmdQcm9wVHdlZW4uY2FsbCh0d2Vlbkluc3RhbmNlLi4uKSB0byBlbnN1cmUgdGhhdCBpdCdzIHNjb3BlZCBwcm9wZXJseS4gV2UgbWF5IGNhbGwgaXQgZnJvbSB3aXRoaW4gYSBwbHVnaW4gdG9vLCB0aHVzIFwidGhpc1wiIHdvdWxkIHJlZmVyIHRvIHRoZSBwbHVnaW4uXG4gIHZhciBwdCA9IG5ldyBQcm9wVHdlZW4odGhpcy5fcHQsIHRhcmdldCwgcHJvcCwgMCwgMSwgX3JlbmRlckNvbXBsZXhTdHJpbmcsIG51bGwsIHNldHRlciksXG4gICAgICBpbmRleCA9IDAsXG4gICAgICBtYXRjaEluZGV4ID0gMCxcbiAgICAgIHJlc3VsdCxcbiAgICAgIHN0YXJ0TnVtcyxcbiAgICAgIGNvbG9yLFxuICAgICAgZW5kTnVtLFxuICAgICAgY2h1bmssXG4gICAgICBzdGFydE51bSxcbiAgICAgIGhhc1JhbmRvbSxcbiAgICAgIGE7XG4gIHB0LmIgPSBzdGFydDtcbiAgcHQuZSA9IGVuZDtcbiAgc3RhcnQgKz0gXCJcIjsgLy9lbnN1cmUgdmFsdWVzIGFyZSBzdHJpbmdzXG5cbiAgZW5kICs9IFwiXCI7XG5cbiAgaWYgKGhhc1JhbmRvbSA9IH5lbmQuaW5kZXhPZihcInJhbmRvbShcIikpIHtcbiAgICBlbmQgPSBfcmVwbGFjZVJhbmRvbShlbmQpO1xuICB9XG5cbiAgaWYgKHN0cmluZ0ZpbHRlcikge1xuICAgIGEgPSBbc3RhcnQsIGVuZF07XG4gICAgc3RyaW5nRmlsdGVyKGEsIHRhcmdldCwgcHJvcCk7IC8vcGFzcyBhbiBhcnJheSB3aXRoIHRoZSBzdGFydGluZyBhbmQgZW5kaW5nIHZhbHVlcyBhbmQgbGV0IHRoZSBmaWx0ZXIgZG8gd2hhdGV2ZXIgaXQgbmVlZHMgdG8gdGhlIHZhbHVlcy5cblxuICAgIHN0YXJ0ID0gYVswXTtcbiAgICBlbmQgPSBhWzFdO1xuICB9XG5cbiAgc3RhcnROdW1zID0gc3RhcnQubWF0Y2goX2NvbXBsZXhTdHJpbmdOdW1FeHApIHx8IFtdO1xuXG4gIHdoaWxlIChyZXN1bHQgPSBfY29tcGxleFN0cmluZ051bUV4cC5leGVjKGVuZCkpIHtcbiAgICBlbmROdW0gPSByZXN1bHRbMF07XG4gICAgY2h1bmsgPSBlbmQuc3Vic3RyaW5nKGluZGV4LCByZXN1bHQuaW5kZXgpO1xuXG4gICAgaWYgKGNvbG9yKSB7XG4gICAgICBjb2xvciA9IChjb2xvciArIDEpICUgNTtcbiAgICB9IGVsc2UgaWYgKGNodW5rLnN1YnN0cigtNSkgPT09IFwicmdiYShcIikge1xuICAgICAgY29sb3IgPSAxO1xuICAgIH1cblxuICAgIGlmIChlbmROdW0gIT09IHN0YXJ0TnVtc1ttYXRjaEluZGV4KytdKSB7XG4gICAgICBzdGFydE51bSA9IHBhcnNlRmxvYXQoc3RhcnROdW1zW21hdGNoSW5kZXggLSAxXSkgfHwgMDsgLy90aGVzZSBuZXN0ZWQgUHJvcFR3ZWVucyBhcmUgaGFuZGxlZCBpbiBhIHNwZWNpYWwgd2F5IC0gd2UnbGwgbmV2ZXIgYWN0dWFsbHkgY2FsbCBhIHJlbmRlciBvciBzZXR0ZXIgbWV0aG9kIG9uIHRoZW0uIFdlJ2xsIGp1c3QgbG9vcCB0aHJvdWdoIHRoZW0gaW4gdGhlIHBhcmVudCBjb21wbGV4IHN0cmluZyBQcm9wVHdlZW4ncyByZW5kZXIgbWV0aG9kLlxuXG4gICAgICBwdC5fcHQgPSB7XG4gICAgICAgIF9uZXh0OiBwdC5fcHQsXG4gICAgICAgIHA6IGNodW5rIHx8IG1hdGNoSW5kZXggPT09IDEgPyBjaHVuayA6IFwiLFwiLFxuICAgICAgICAvL25vdGU6IFNWRyBzcGVjIGFsbG93cyBvbWlzc2lvbiBvZiBjb21tYS9zcGFjZSB3aGVuIGEgbmVnYXRpdmUgc2lnbiBpcyB3ZWRnZWQgYmV0d2VlbiB0d28gbnVtYmVycywgbGlrZSAyLjUtNS4zIGluc3RlYWQgb2YgMi41LC01LjMgYnV0IHdoZW4gdHdlZW5pbmcsIHRoZSBuZWdhdGl2ZSB2YWx1ZSBtYXkgc3dpdGNoIHRvIHBvc2l0aXZlLCBzbyB3ZSBpbnNlcnQgdGhlIGNvbW1hIGp1c3QgaW4gY2FzZS5cbiAgICAgICAgczogc3RhcnROdW0sXG4gICAgICAgIGM6IGVuZE51bS5jaGFyQXQoMSkgPT09IFwiPVwiID8gX3BhcnNlUmVsYXRpdmUoc3RhcnROdW0sIGVuZE51bSkgLSBzdGFydE51bSA6IHBhcnNlRmxvYXQoZW5kTnVtKSAtIHN0YXJ0TnVtLFxuICAgICAgICBtOiBjb2xvciAmJiBjb2xvciA8IDQgPyBNYXRoLnJvdW5kIDogMFxuICAgICAgfTtcbiAgICAgIGluZGV4ID0gX2NvbXBsZXhTdHJpbmdOdW1FeHAubGFzdEluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHB0LmMgPSBpbmRleCA8IGVuZC5sZW5ndGggPyBlbmQuc3Vic3RyaW5nKGluZGV4LCBlbmQubGVuZ3RoKSA6IFwiXCI7IC8vd2UgdXNlIHRoZSBcImNcIiBvZiB0aGUgUHJvcFR3ZWVuIHRvIHN0b3JlIHRoZSBmaW5hbCBwYXJ0IG9mIHRoZSBzdHJpbmcgKGFmdGVyIHRoZSBsYXN0IG51bWJlcilcblxuICBwdC5mcCA9IGZ1bmNQYXJhbTtcblxuICBpZiAoX3JlbEV4cC50ZXN0KGVuZCkgfHwgaGFzUmFuZG9tKSB7XG4gICAgcHQuZSA9IDA7IC8vaWYgdGhlIGVuZCBzdHJpbmcgY29udGFpbnMgcmVsYXRpdmUgdmFsdWVzIG9yIGR5bmFtaWMgcmFuZG9tKC4uLikgdmFsdWVzLCBkZWxldGUgdGhlIGVuZCBpdCBzbyB0aGF0IG9uIHRoZSBmaW5hbCByZW5kZXIgd2UgZG9uJ3QgYWN0dWFsbHkgc2V0IGl0IHRvIHRoZSBzdHJpbmcgd2l0aCArPSBvciAtPSBjaGFyYWN0ZXJzIChmb3JjZXMgaXQgdG8gdXNlIHRoZSBjYWxjdWxhdGVkIHZhbHVlKS5cbiAgfVxuXG4gIHRoaXMuX3B0ID0gcHQ7IC8vc3RhcnQgdGhlIGxpbmtlZCBsaXN0IHdpdGggdGhpcyBuZXcgUHJvcFR3ZWVuLiBSZW1lbWJlciwgd2UgY2FsbCBfYWRkQ29tcGxleFN0cmluZ1Byb3BUd2Vlbi5jYWxsKHR3ZWVuSW5zdGFuY2UuLi4pIHRvIGVuc3VyZSB0aGF0IGl0J3Mgc2NvcGVkIHByb3Blcmx5LiBXZSBtYXkgY2FsbCBpdCBmcm9tIHdpdGhpbiBhIHBsdWdpbiB0b28sIHRodXMgXCJ0aGlzXCIgd291bGQgcmVmZXIgdG8gdGhlIHBsdWdpbi5cblxuICByZXR1cm4gcHQ7XG59LFxuICAgIF9hZGRQcm9wVHdlZW4gPSBmdW5jdGlvbiBfYWRkUHJvcFR3ZWVuKHRhcmdldCwgcHJvcCwgc3RhcnQsIGVuZCwgaW5kZXgsIHRhcmdldHMsIG1vZGlmaWVyLCBzdHJpbmdGaWx0ZXIsIGZ1bmNQYXJhbSwgb3B0aW9uYWwpIHtcbiAgX2lzRnVuY3Rpb24oZW5kKSAmJiAoZW5kID0gZW5kKGluZGV4IHx8IDAsIHRhcmdldCwgdGFyZ2V0cykpO1xuICB2YXIgY3VycmVudFZhbHVlID0gdGFyZ2V0W3Byb3BdLFxuICAgICAgcGFyc2VkU3RhcnQgPSBzdGFydCAhPT0gXCJnZXRcIiA/IHN0YXJ0IDogIV9pc0Z1bmN0aW9uKGN1cnJlbnRWYWx1ZSkgPyBjdXJyZW50VmFsdWUgOiBmdW5jUGFyYW0gPyB0YXJnZXRbcHJvcC5pbmRleE9mKFwic2V0XCIpIHx8ICFfaXNGdW5jdGlvbih0YXJnZXRbXCJnZXRcIiArIHByb3Auc3Vic3RyKDMpXSkgPyBwcm9wIDogXCJnZXRcIiArIHByb3Auc3Vic3RyKDMpXShmdW5jUGFyYW0pIDogdGFyZ2V0W3Byb3BdKCksXG4gICAgICBzZXR0ZXIgPSAhX2lzRnVuY3Rpb24oY3VycmVudFZhbHVlKSA/IF9zZXR0ZXJQbGFpbiA6IGZ1bmNQYXJhbSA/IF9zZXR0ZXJGdW5jV2l0aFBhcmFtIDogX3NldHRlckZ1bmMsXG4gICAgICBwdDtcblxuICBpZiAoX2lzU3RyaW5nKGVuZCkpIHtcbiAgICBpZiAofmVuZC5pbmRleE9mKFwicmFuZG9tKFwiKSkge1xuICAgICAgZW5kID0gX3JlcGxhY2VSYW5kb20oZW5kKTtcbiAgICB9XG5cbiAgICBpZiAoZW5kLmNoYXJBdCgxKSA9PT0gXCI9XCIpIHtcbiAgICAgIHB0ID0gX3BhcnNlUmVsYXRpdmUocGFyc2VkU3RhcnQsIGVuZCkgKyAoZ2V0VW5pdChwYXJzZWRTdGFydCkgfHwgMCk7XG5cbiAgICAgIGlmIChwdCB8fCBwdCA9PT0gMCkge1xuICAgICAgICAvLyB0byBhdm9pZCBpc05hTiwgbGlrZSBpZiBzb21lb25lIHBhc3NlcyBpbiBhIHZhbHVlIGxpa2UgXCIhPSB3aGF0ZXZlclwiXG4gICAgICAgIGVuZCA9IHB0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICghb3B0aW9uYWwgfHwgcGFyc2VkU3RhcnQgIT09IGVuZCB8fCBfZm9yY2VBbGxQcm9wVHdlZW5zKSB7XG4gICAgaWYgKCFpc05hTihwYXJzZWRTdGFydCAqIGVuZCkgJiYgZW5kICE9PSBcIlwiKSB7XG4gICAgICAvLyBmdW4gZmFjdDogYW55IG51bWJlciBtdWx0aXBsaWVkIGJ5IFwiXCIgaXMgZXZhbHVhdGVkIGFzIHRoZSBudW1iZXIgMCFcbiAgICAgIHB0ID0gbmV3IFByb3BUd2Vlbih0aGlzLl9wdCwgdGFyZ2V0LCBwcm9wLCArcGFyc2VkU3RhcnQgfHwgMCwgZW5kIC0gKHBhcnNlZFN0YXJ0IHx8IDApLCB0eXBlb2YgY3VycmVudFZhbHVlID09PSBcImJvb2xlYW5cIiA/IF9yZW5kZXJCb29sZWFuIDogX3JlbmRlclBsYWluLCAwLCBzZXR0ZXIpO1xuICAgICAgZnVuY1BhcmFtICYmIChwdC5mcCA9IGZ1bmNQYXJhbSk7XG4gICAgICBtb2RpZmllciAmJiBwdC5tb2RpZmllcihtb2RpZmllciwgdGhpcywgdGFyZ2V0KTtcbiAgICAgIHJldHVybiB0aGlzLl9wdCA9IHB0O1xuICAgIH1cblxuICAgICFjdXJyZW50VmFsdWUgJiYgIShwcm9wIGluIHRhcmdldCkgJiYgX21pc3NpbmdQbHVnaW4ocHJvcCwgZW5kKTtcbiAgICByZXR1cm4gX2FkZENvbXBsZXhTdHJpbmdQcm9wVHdlZW4uY2FsbCh0aGlzLCB0YXJnZXQsIHByb3AsIHBhcnNlZFN0YXJ0LCBlbmQsIHNldHRlciwgc3RyaW5nRmlsdGVyIHx8IF9jb25maWcuc3RyaW5nRmlsdGVyLCBmdW5jUGFyYW0pO1xuICB9XG59LFxuICAgIC8vY3JlYXRlcyBhIGNvcHkgb2YgdGhlIHZhcnMgb2JqZWN0IGFuZCBwcm9jZXNzZXMgYW55IGZ1bmN0aW9uLWJhc2VkIHZhbHVlcyAocHV0dGluZyB0aGUgcmVzdWx0aW5nIHZhbHVlcyBkaXJlY3RseSBpbnRvIHRoZSBjb3B5KSBhcyB3ZWxsIGFzIHN0cmluZ3Mgd2l0aCBcInJhbmRvbSgpXCIgaW4gdGhlbS4gSXQgZG9lcyBOT1QgcHJvY2VzcyByZWxhdGl2ZSB2YWx1ZXMuXG5fcHJvY2Vzc1ZhcnMgPSBmdW5jdGlvbiBfcHJvY2Vzc1ZhcnModmFycywgaW5kZXgsIHRhcmdldCwgdGFyZ2V0cywgdHdlZW4pIHtcbiAgX2lzRnVuY3Rpb24odmFycykgJiYgKHZhcnMgPSBfcGFyc2VGdW5jT3JTdHJpbmcodmFycywgdHdlZW4sIGluZGV4LCB0YXJnZXQsIHRhcmdldHMpKTtcblxuICBpZiAoIV9pc09iamVjdCh2YXJzKSB8fCB2YXJzLnN0eWxlICYmIHZhcnMubm9kZVR5cGUgfHwgX2lzQXJyYXkodmFycykgfHwgX2lzVHlwZWRBcnJheSh2YXJzKSkge1xuICAgIHJldHVybiBfaXNTdHJpbmcodmFycykgPyBfcGFyc2VGdW5jT3JTdHJpbmcodmFycywgdHdlZW4sIGluZGV4LCB0YXJnZXQsIHRhcmdldHMpIDogdmFycztcbiAgfVxuXG4gIHZhciBjb3B5ID0ge30sXG4gICAgICBwO1xuXG4gIGZvciAocCBpbiB2YXJzKSB7XG4gICAgY29weVtwXSA9IF9wYXJzZUZ1bmNPclN0cmluZyh2YXJzW3BdLCB0d2VlbiwgaW5kZXgsIHRhcmdldCwgdGFyZ2V0cyk7XG4gIH1cblxuICByZXR1cm4gY29weTtcbn0sXG4gICAgX2NoZWNrUGx1Z2luID0gZnVuY3Rpb24gX2NoZWNrUGx1Z2luKHByb3BlcnR5LCB2YXJzLCB0d2VlbiwgaW5kZXgsIHRhcmdldCwgdGFyZ2V0cykge1xuICB2YXIgcGx1Z2luLCBwdCwgcHRMb29rdXAsIGk7XG5cbiAgaWYgKF9wbHVnaW5zW3Byb3BlcnR5XSAmJiAocGx1Z2luID0gbmV3IF9wbHVnaW5zW3Byb3BlcnR5XSgpKS5pbml0KHRhcmdldCwgcGx1Z2luLnJhd1ZhcnMgPyB2YXJzW3Byb3BlcnR5XSA6IF9wcm9jZXNzVmFycyh2YXJzW3Byb3BlcnR5XSwgaW5kZXgsIHRhcmdldCwgdGFyZ2V0cywgdHdlZW4pLCB0d2VlbiwgaW5kZXgsIHRhcmdldHMpICE9PSBmYWxzZSkge1xuICAgIHR3ZWVuLl9wdCA9IHB0ID0gbmV3IFByb3BUd2Vlbih0d2Vlbi5fcHQsIHRhcmdldCwgcHJvcGVydHksIDAsIDEsIHBsdWdpbi5yZW5kZXIsIHBsdWdpbiwgMCwgcGx1Z2luLnByaW9yaXR5KTtcblxuICAgIGlmICh0d2VlbiAhPT0gX3F1aWNrVHdlZW4pIHtcbiAgICAgIHB0TG9va3VwID0gdHdlZW4uX3B0TG9va3VwW3R3ZWVuLl90YXJnZXRzLmluZGV4T2YodGFyZ2V0KV07IC8vbm90ZTogd2UgY2FuJ3QgdXNlIHR3ZWVuLl9wdExvb2t1cFtpbmRleF0gYmVjYXVzZSBmb3Igc3RhZ2dlcmVkIHR3ZWVucywgdGhlIGluZGV4IGZyb20gdGhlIGZ1bGxUYXJnZXRzIGFycmF5IHdvbid0IG1hdGNoIHdoYXQgaXQgaXMgaW4gZWFjaCBpbmRpdmlkdWFsIHR3ZWVuIHRoYXQgc3Bhd25zIGZyb20gdGhlIHN0YWdnZXIuXG5cbiAgICAgIGkgPSBwbHVnaW4uX3Byb3BzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICBwdExvb2t1cFtwbHVnaW4uX3Byb3BzW2ldXSA9IHB0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwbHVnaW47XG59LFxuICAgIF9vdmVyd3JpdGluZ1R3ZWVuLFxuICAgIC8vc3RvcmUgYSByZWZlcmVuY2UgdGVtcG9yYXJpbHkgc28gd2UgY2FuIGF2b2lkIG92ZXJ3cml0aW5nIGl0c2VsZi5cbl9mb3JjZUFsbFByb3BUd2VlbnMsXG4gICAgX2luaXRUd2VlbiA9IGZ1bmN0aW9uIF9pbml0VHdlZW4odHdlZW4sIHRpbWUsIHRUaW1lKSB7XG4gIHZhciB2YXJzID0gdHdlZW4udmFycyxcbiAgICAgIGVhc2UgPSB2YXJzLmVhc2UsXG4gICAgICBzdGFydEF0ID0gdmFycy5zdGFydEF0LFxuICAgICAgaW1tZWRpYXRlUmVuZGVyID0gdmFycy5pbW1lZGlhdGVSZW5kZXIsXG4gICAgICBsYXp5ID0gdmFycy5sYXp5LFxuICAgICAgb25VcGRhdGUgPSB2YXJzLm9uVXBkYXRlLFxuICAgICAgcnVuQmFja3dhcmRzID0gdmFycy5ydW5CYWNrd2FyZHMsXG4gICAgICB5b3lvRWFzZSA9IHZhcnMueW95b0Vhc2UsXG4gICAgICBrZXlmcmFtZXMgPSB2YXJzLmtleWZyYW1lcyxcbiAgICAgIGF1dG9SZXZlcnQgPSB2YXJzLmF1dG9SZXZlcnQsXG4gICAgICBkdXIgPSB0d2Vlbi5fZHVyLFxuICAgICAgcHJldlN0YXJ0QXQgPSB0d2Vlbi5fc3RhcnRBdCxcbiAgICAgIHRhcmdldHMgPSB0d2Vlbi5fdGFyZ2V0cyxcbiAgICAgIHBhcmVudCA9IHR3ZWVuLnBhcmVudCxcbiAgICAgIGZ1bGxUYXJnZXRzID0gcGFyZW50ICYmIHBhcmVudC5kYXRhID09PSBcIm5lc3RlZFwiID8gcGFyZW50LnZhcnMudGFyZ2V0cyA6IHRhcmdldHMsXG4gICAgICBhdXRvT3ZlcndyaXRlID0gdHdlZW4uX292ZXJ3cml0ZSA9PT0gXCJhdXRvXCIgJiYgIV9zdXBwcmVzc092ZXJ3cml0ZXMsXG4gICAgICB0bCA9IHR3ZWVuLnRpbWVsaW5lLFxuICAgICAgY2xlYW5WYXJzLFxuICAgICAgaSxcbiAgICAgIHAsXG4gICAgICBwdCxcbiAgICAgIHRhcmdldCxcbiAgICAgIGhhc1ByaW9yaXR5LFxuICAgICAgZ3NEYXRhLFxuICAgICAgaGFybmVzcyxcbiAgICAgIHBsdWdpbixcbiAgICAgIHB0TG9va3VwLFxuICAgICAgaW5kZXgsXG4gICAgICBoYXJuZXNzVmFycyxcbiAgICAgIG92ZXJ3cml0dGVuO1xuICB0bCAmJiAoIWtleWZyYW1lcyB8fCAhZWFzZSkgJiYgKGVhc2UgPSBcIm5vbmVcIik7XG4gIHR3ZWVuLl9lYXNlID0gX3BhcnNlRWFzZShlYXNlLCBfZGVmYXVsdHMuZWFzZSk7XG4gIHR3ZWVuLl95RWFzZSA9IHlveW9FYXNlID8gX2ludmVydEVhc2UoX3BhcnNlRWFzZSh5b3lvRWFzZSA9PT0gdHJ1ZSA/IGVhc2UgOiB5b3lvRWFzZSwgX2RlZmF1bHRzLmVhc2UpKSA6IDA7XG5cbiAgaWYgKHlveW9FYXNlICYmIHR3ZWVuLl95b3lvICYmICF0d2Vlbi5fcmVwZWF0KSB7XG4gICAgLy90aGVyZSBtdXN0IGhhdmUgYmVlbiBhIHBhcmVudCB0aW1lbGluZSB3aXRoIHlveW86dHJ1ZSB0aGF0IGlzIGN1cnJlbnRseSBpbiBpdHMgeW95byBwaGFzZSwgc28gZmxpcCB0aGUgZWFzZXMuXG4gICAgeW95b0Vhc2UgPSB0d2Vlbi5feUVhc2U7XG4gICAgdHdlZW4uX3lFYXNlID0gdHdlZW4uX2Vhc2U7XG4gICAgdHdlZW4uX2Vhc2UgPSB5b3lvRWFzZTtcbiAgfVxuXG4gIHR3ZWVuLl9mcm9tID0gIXRsICYmICEhdmFycy5ydW5CYWNrd2FyZHM7IC8vbmVzdGVkIHRpbWVsaW5lcyBzaG91bGQgbmV2ZXIgcnVuIGJhY2t3YXJkcyAtIHRoZSBiYWNrd2FyZHMtbmVzcyBpcyBpbiB0aGUgY2hpbGQgdHdlZW5zLlxuXG4gIGlmICghdGwgfHwga2V5ZnJhbWVzICYmICF2YXJzLnN0YWdnZXIpIHtcbiAgICAvL2lmIHRoZXJlJ3MgYW4gaW50ZXJuYWwgdGltZWxpbmUsIHNraXAgYWxsIHRoZSBwYXJzaW5nIGJlY2F1c2Ugd2UgcGFzc2VkIHRoYXQgdGFzayBkb3duIHRoZSBjaGFpbi5cbiAgICBoYXJuZXNzID0gdGFyZ2V0c1swXSA/IF9nZXRDYWNoZSh0YXJnZXRzWzBdKS5oYXJuZXNzIDogMDtcbiAgICBoYXJuZXNzVmFycyA9IGhhcm5lc3MgJiYgdmFyc1toYXJuZXNzLnByb3BdOyAvL3NvbWVvbmUgbWF5IG5lZWQgdG8gc3BlY2lmeSBDU1Mtc3BlY2lmaWMgdmFsdWVzIEFORCBub24tQ1NTIHZhbHVlcywgbGlrZSBpZiB0aGUgZWxlbWVudCBoYXMgYW4gXCJ4XCIgcHJvcGVydHkgcGx1cyBpdCdzIGEgc3RhbmRhcmQgRE9NIGVsZW1lbnQuIFdlIGFsbG93IHBlb3BsZSB0byBkaXN0aW5ndWlzaCBieSB3cmFwcGluZyBwbHVnaW4tc3BlY2lmaWMgc3R1ZmYgaW4gYSBjc3M6e30gb2JqZWN0IGZvciBleGFtcGxlLlxuXG4gICAgY2xlYW5WYXJzID0gX2NvcHlFeGNsdWRpbmcodmFycywgX3Jlc2VydmVkUHJvcHMpO1xuXG4gICAgaWYgKHByZXZTdGFydEF0KSB7XG4gICAgICBwcmV2U3RhcnRBdC5felRpbWUgPCAwICYmIHByZXZTdGFydEF0LnByb2dyZXNzKDEpOyAvLyBpbiBjYXNlIGl0J3MgYSBsYXp5IHN0YXJ0QXQgdGhhdCBoYXNuJ3QgcmVuZGVyZWQgeWV0LlxuXG4gICAgICB0aW1lIDwgMCAmJiBydW5CYWNrd2FyZHMgJiYgaW1tZWRpYXRlUmVuZGVyICYmICFhdXRvUmV2ZXJ0ID8gcHJldlN0YXJ0QXQucmVuZGVyKC0xLCB0cnVlKSA6IHByZXZTdGFydEF0LnJldmVydChydW5CYWNrd2FyZHMgJiYgZHVyID8gX3JldmVydENvbmZpZ05vS2lsbCA6IF9zdGFydEF0UmV2ZXJ0Q29uZmlnKTsgLy8gaWYgaXQncyBhIFwic3RhcnRBdFwiIChub3QgXCJmcm9tKClcIiBvciBydW5CYWNrd2FyZHM6IHRydWUpLCB3ZSBvbmx5IG5lZWQgdG8gZG8gYSBzaGFsbG93IHJldmVydCAoa2VlcCB0cmFuc2Zvcm1zIGNhY2hlZCBpbiBDU1NQbHVnaW4pXG4gICAgICAvLyBkb24ndCBqdXN0IF9yZW1vdmVGcm9tUGFyZW50KHByZXZTdGFydEF0LnJlbmRlcigtMSwgdHJ1ZSkpIGJlY2F1c2UgdGhhdCdsbCBsZWF2ZSBpbmxpbmUgc3R5bGVzLiBXZSdyZSBjcmVhdGluZyBhIG5ldyBfc3RhcnRBdCBmb3IgXCJzdGFydEF0XCIgdHdlZW5zIHRoYXQgcmUtY2FwdHVyZSB0aGluZ3MgdG8gZW5zdXJlIHRoYXQgaWYgdGhlIHByZS10d2VlbiB2YWx1ZXMgY2hhbmdlZCBzaW5jZSB0aGUgdHdlZW4gd2FzIGNyZWF0ZWQsIHRoZXkncmUgcmVjb3JkZWQuXG5cbiAgICAgIHByZXZTdGFydEF0Ll9sYXp5ID0gMDtcbiAgICB9XG5cbiAgICBpZiAoc3RhcnRBdCkge1xuICAgICAgX3JlbW92ZUZyb21QYXJlbnQodHdlZW4uX3N0YXJ0QXQgPSBUd2Vlbi5zZXQodGFyZ2V0cywgX3NldERlZmF1bHRzKHtcbiAgICAgICAgZGF0YTogXCJpc1N0YXJ0XCIsXG4gICAgICAgIG92ZXJ3cml0ZTogZmFsc2UsXG4gICAgICAgIHBhcmVudDogcGFyZW50LFxuICAgICAgICBpbW1lZGlhdGVSZW5kZXI6IHRydWUsXG4gICAgICAgIGxhenk6ICFwcmV2U3RhcnRBdCAmJiBfaXNOb3RGYWxzZShsYXp5KSxcbiAgICAgICAgc3RhcnRBdDogbnVsbCxcbiAgICAgICAgZGVsYXk6IDAsXG4gICAgICAgIG9uVXBkYXRlOiBvblVwZGF0ZSAmJiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIF9jYWxsYmFjayh0d2VlbiwgXCJvblVwZGF0ZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3RhZ2dlcjogMFxuICAgICAgfSwgc3RhcnRBdCkpKTsgLy9jb3B5IHRoZSBwcm9wZXJ0aWVzL3ZhbHVlcyBpbnRvIGEgbmV3IG9iamVjdCB0byBhdm9pZCBjb2xsaXNpb25zLCBsaWtlIHZhciB0byA9IHt4OjB9LCBmcm9tID0ge3g6NTAwfTsgdGltZWxpbmUuZnJvbVRvKGUsIGZyb20sIHRvKS5mcm9tVG8oZSwgdG8sIGZyb20pO1xuXG5cbiAgICAgIHR3ZWVuLl9zdGFydEF0Ll9kcCA9IDA7IC8vIGRvbid0IGFsbG93IGl0IHRvIGdldCBwdXQgYmFjayBpbnRvIHJvb3QgdGltZWxpbmUhIExpa2Ugd2hlbiByZXZlcnQoKSBpcyBjYWxsZWQgYW5kIHRvdGFsVGltZSgpIGdldHMgc2V0LlxuXG4gICAgICB0d2Vlbi5fc3RhcnRBdC5fc2F0ID0gdHdlZW47IC8vIHVzZWQgaW4gZ2xvYmFsVGltZSgpLiBfc2F0IHN0YW5kcyBmb3IgX3N0YXJ0QXRUd2VlblxuXG4gICAgICB0aW1lIDwgMCAmJiAoX3JldmVydGluZyB8fCAhaW1tZWRpYXRlUmVuZGVyICYmICFhdXRvUmV2ZXJ0KSAmJiB0d2Vlbi5fc3RhcnRBdC5yZXZlcnQoX3JldmVydENvbmZpZ05vS2lsbCk7IC8vIHJhcmUgZWRnZSBjYXNlLCBsaWtlIGlmIGEgcmVuZGVyIGlzIGZvcmNlZCBpbiB0aGUgbmVnYXRpdmUgZGlyZWN0aW9uIG9mIGEgbm9uLWluaXR0ZWQgdHdlZW4uXG5cbiAgICAgIGlmIChpbW1lZGlhdGVSZW5kZXIpIHtcbiAgICAgICAgaWYgKGR1ciAmJiB0aW1lIDw9IDAgJiYgdFRpbWUgPD0gMCkge1xuICAgICAgICAgIC8vIGNoZWNrIHRUaW1lIGhlcmUgYmVjYXVzZSBpbiB0aGUgY2FzZSBvZiBhIHlveW8gdHdlZW4gd2hvc2UgcGxheWhlYWQgZ2V0cyBwdXNoZWQgdG8gdGhlIGVuZCBsaWtlIHR3ZWVuLnByb2dyZXNzKDEpLCB3ZSBzaG91bGQgYWxsb3cgaXQgdGhyb3VnaCBzbyB0aGF0IHRoZSBvbkNvbXBsZXRlIGdldHMgZmlyZWQgcHJvcGVybHkuXG4gICAgICAgICAgdGltZSAmJiAodHdlZW4uX3pUaW1lID0gdGltZSk7XG4gICAgICAgICAgcmV0dXJuOyAvL3dlIHNraXAgaW5pdGlhbGl6YXRpb24gaGVyZSBzbyB0aGF0IG92ZXJ3cml0aW5nIGRvZXNuJ3Qgb2NjdXIgdW50aWwgdGhlIHR3ZWVuIGFjdHVhbGx5IGJlZ2lucy4gT3RoZXJ3aXNlLCBpZiB5b3UgY3JlYXRlIHNldmVyYWwgaW1tZWRpYXRlUmVuZGVyOnRydWUgdHdlZW5zIG9mIHRoZSBzYW1lIHRhcmdldC9wcm9wZXJ0aWVzIHRvIGRyb3AgaW50byBhIFRpbWVsaW5lLCB0aGUgbGFzdCBvbmUgY3JlYXRlZCB3b3VsZCBvdmVyd3JpdGUgdGhlIGZpcnN0IG9uZXMgYmVjYXVzZSB0aGV5IGRpZG4ndCBnZXQgcGxhY2VkIGludG8gdGhlIHRpbWVsaW5lIHlldCBiZWZvcmUgdGhlIGZpcnN0IHJlbmRlciBvY2N1cnMgYW5kIGtpY2tzIGluIG92ZXJ3cml0aW5nLlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChydW5CYWNrd2FyZHMgJiYgZHVyKSB7XG4gICAgICAvL2Zyb20oKSB0d2VlbnMgbXVzdCBiZSBoYW5kbGVkIHVuaXF1ZWx5OiB0aGVpciBiZWdpbm5pbmcgdmFsdWVzIG11c3QgYmUgcmVuZGVyZWQgYnV0IHdlIGRvbid0IHdhbnQgb3ZlcndyaXRpbmcgdG8gb2NjdXIgeWV0ICh3aGVuIHRpbWUgaXMgc3RpbGwgMCkuIFdhaXQgdW50aWwgdGhlIHR3ZWVuIGFjdHVhbGx5IGJlZ2lucyBiZWZvcmUgZG9pbmcgYWxsIHRoZSByb3V0aW5lcyBsaWtlIG92ZXJ3cml0aW5nLiBBdCB0aGF0IHRpbWUsIHdlIHNob3VsZCByZW5kZXIgYXQgdGhlIEVORCBvZiB0aGUgdHdlZW4gdG8gZW5zdXJlIHRoYXQgdGhpbmdzIGluaXRpYWxpemUgY29ycmVjdGx5IChyZW1lbWJlciwgZnJvbSgpIHR3ZWVucyBnbyBiYWNrd2FyZHMpXG4gICAgICBpZiAoIXByZXZTdGFydEF0KSB7XG4gICAgICAgIHRpbWUgJiYgKGltbWVkaWF0ZVJlbmRlciA9IGZhbHNlKTsgLy9pbiByYXJlIGNhc2VzIChsaWtlIGlmIGEgZnJvbSgpIHR3ZWVuIHJ1bnMgYW5kIHRoZW4gaXMgaW52YWxpZGF0ZSgpLWVkKSwgaW1tZWRpYXRlUmVuZGVyIGNvdWxkIGJlIHRydWUgYnV0IHRoZSBpbml0aWFsIGZvcmNlZC1yZW5kZXIgZ2V0cyBza2lwcGVkLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gZm9yY2UgdGhlIHJlbmRlciBpbiB0aGlzIGNvbnRleHQgd2hlbiB0aGUgX3RpbWUgaXMgZ3JlYXRlciB0aGFuIDBcblxuICAgICAgICBwID0gX3NldERlZmF1bHRzKHtcbiAgICAgICAgICBvdmVyd3JpdGU6IGZhbHNlLFxuICAgICAgICAgIGRhdGE6IFwiaXNGcm9tU3RhcnRcIixcbiAgICAgICAgICAvL3dlIHRhZyB0aGUgdHdlZW4gd2l0aCBhcyBcImlzRnJvbVN0YXJ0XCIgc28gdGhhdCBpZiBbaW5zaWRlIGEgcGx1Z2luXSB3ZSBuZWVkIHRvIG9ubHkgZG8gc29tZXRoaW5nIGF0IHRoZSB2ZXJ5IEVORCBvZiBhIHR3ZWVuLCB3ZSBoYXZlIGEgd2F5IG9mIGlkZW50aWZ5aW5nIHRoaXMgdHdlZW4gYXMgbWVyZWx5IHRoZSBvbmUgdGhhdCdzIHNldHRpbmcgdGhlIGJlZ2lubmluZyB2YWx1ZXMgZm9yIGEgXCJmcm9tKClcIiB0d2Vlbi4gRm9yIGV4YW1wbGUsIGNsZWFyUHJvcHMgaW4gQ1NTUGx1Z2luIHNob3VsZCBvbmx5IGdldCBhcHBsaWVkIGF0IHRoZSB2ZXJ5IEVORCBvZiBhIHR3ZWVuIGFuZCB3aXRob3V0IHRoaXMgdGFnLCBmcm9tKC4uLntoZWlnaHQ6MTAwLCBjbGVhclByb3BzOlwiaGVpZ2h0XCIsIGRlbGF5OjF9KSB3b3VsZCB3aXBlIHRoZSBoZWlnaHQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHdlZW4gYW5kIGFmdGVyIDEgc2Vjb25kLCBpdCdkIGtpY2sgYmFjayBpbi5cbiAgICAgICAgICBsYXp5OiBpbW1lZGlhdGVSZW5kZXIgJiYgIXByZXZTdGFydEF0ICYmIF9pc05vdEZhbHNlKGxhenkpLFxuICAgICAgICAgIGltbWVkaWF0ZVJlbmRlcjogaW1tZWRpYXRlUmVuZGVyLFxuICAgICAgICAgIC8vemVyby1kdXJhdGlvbiB0d2VlbnMgcmVuZGVyIGltbWVkaWF0ZWx5IGJ5IGRlZmF1bHQsIGJ1dCBpZiB3ZSdyZSBub3Qgc3BlY2lmaWNhbGx5IGluc3RydWN0ZWQgdG8gcmVuZGVyIHRoaXMgdHdlZW4gaW1tZWRpYXRlbHksIHdlIHNob3VsZCBza2lwIHRoaXMgYW5kIG1lcmVseSBfaW5pdCgpIHRvIHJlY29yZCB0aGUgc3RhcnRpbmcgdmFsdWVzIChyZW5kZXJpbmcgdGhlbSBpbW1lZGlhdGVseSB3b3VsZCBwdXNoIHRoZW0gdG8gY29tcGxldGlvbiB3aGljaCBpcyB3YXN0ZWZ1bCBpbiB0aGF0IGNhc2UgLSB3ZSdkIGhhdmUgdG8gcmVuZGVyKC0xKSBpbW1lZGlhdGVseSBhZnRlcilcbiAgICAgICAgICBzdGFnZ2VyOiAwLFxuICAgICAgICAgIHBhcmVudDogcGFyZW50IC8vZW5zdXJlcyB0aGF0IG5lc3RlZCB0d2VlbnMgdGhhdCBoYWQgYSBzdGFnZ2VyIGFyZSBoYW5kbGVkIHByb3Blcmx5LCBsaWtlIGdzYXAuZnJvbShcIi5jbGFzc1wiLCB7eTogZ3NhcC51dGlscy53cmFwKFstMTAwLDEwMF0pLCBzdGFnZ2VyOiAwLjV9KVxuXG4gICAgICAgIH0sIGNsZWFuVmFycyk7XG4gICAgICAgIGhhcm5lc3NWYXJzICYmIChwW2hhcm5lc3MucHJvcF0gPSBoYXJuZXNzVmFycyk7IC8vIGluIGNhc2Ugc29tZW9uZSBkb2VzIHNvbWV0aGluZyBsaWtlIC5mcm9tKC4uLiwge2Nzczp7fX0pXG5cbiAgICAgICAgX3JlbW92ZUZyb21QYXJlbnQodHdlZW4uX3N0YXJ0QXQgPSBUd2Vlbi5zZXQodGFyZ2V0cywgcCkpO1xuXG4gICAgICAgIHR3ZWVuLl9zdGFydEF0Ll9kcCA9IDA7IC8vIGRvbid0IGFsbG93IGl0IHRvIGdldCBwdXQgYmFjayBpbnRvIHJvb3QgdGltZWxpbmUhXG5cbiAgICAgICAgdHdlZW4uX3N0YXJ0QXQuX3NhdCA9IHR3ZWVuOyAvLyB1c2VkIGluIGdsb2JhbFRpbWUoKVxuXG4gICAgICAgIHRpbWUgPCAwICYmIChfcmV2ZXJ0aW5nID8gdHdlZW4uX3N0YXJ0QXQucmV2ZXJ0KF9yZXZlcnRDb25maWdOb0tpbGwpIDogdHdlZW4uX3N0YXJ0QXQucmVuZGVyKC0xLCB0cnVlKSk7XG4gICAgICAgIHR3ZWVuLl96VGltZSA9IHRpbWU7XG5cbiAgICAgICAgaWYgKCFpbW1lZGlhdGVSZW5kZXIpIHtcbiAgICAgICAgICBfaW5pdFR3ZWVuKHR3ZWVuLl9zdGFydEF0LCBfdGlueU51bSwgX3RpbnlOdW0pOyAvL2Vuc3VyZXMgdGhhdCB0aGUgaW5pdGlhbCB2YWx1ZXMgYXJlIHJlY29yZGVkXG5cbiAgICAgICAgfSBlbHNlIGlmICghdGltZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHR3ZWVuLl9wdCA9IHR3ZWVuLl9wdENhY2hlID0gMDtcbiAgICBsYXp5ID0gZHVyICYmIF9pc05vdEZhbHNlKGxhenkpIHx8IGxhenkgJiYgIWR1cjtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB0YXJnZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0YXJnZXQgPSB0YXJnZXRzW2ldO1xuICAgICAgZ3NEYXRhID0gdGFyZ2V0Ll9nc2FwIHx8IF9oYXJuZXNzKHRhcmdldHMpW2ldLl9nc2FwO1xuICAgICAgdHdlZW4uX3B0TG9va3VwW2ldID0gcHRMb29rdXAgPSB7fTtcbiAgICAgIF9sYXp5TG9va3VwW2dzRGF0YS5pZF0gJiYgX2xhenlUd2VlbnMubGVuZ3RoICYmIF9sYXp5UmVuZGVyKCk7IC8vaWYgb3RoZXIgdHdlZW5zIG9mIHRoZSBzYW1lIHRhcmdldCBoYXZlIHJlY2VudGx5IGluaXR0ZWQgYnV0IGhhdmVuJ3QgcmVuZGVyZWQgeWV0LCB3ZSd2ZSBnb3QgdG8gZm9yY2UgdGhlIHJlbmRlciBzbyB0aGF0IHRoZSBzdGFydGluZyB2YWx1ZXMgYXJlIGNvcnJlY3QgKGltYWdpbmUgcG9wdWxhdGluZyBhIHRpbWVsaW5lIHdpdGggYSBidW5jaCBvZiBzZXF1ZW50aWFsIHR3ZWVucyBhbmQgdGhlbiBqdW1waW5nIHRvIHRoZSBlbmQpXG5cbiAgICAgIGluZGV4ID0gZnVsbFRhcmdldHMgPT09IHRhcmdldHMgPyBpIDogZnVsbFRhcmdldHMuaW5kZXhPZih0YXJnZXQpO1xuXG4gICAgICBpZiAoaGFybmVzcyAmJiAocGx1Z2luID0gbmV3IGhhcm5lc3MoKSkuaW5pdCh0YXJnZXQsIGhhcm5lc3NWYXJzIHx8IGNsZWFuVmFycywgdHdlZW4sIGluZGV4LCBmdWxsVGFyZ2V0cykgIT09IGZhbHNlKSB7XG4gICAgICAgIHR3ZWVuLl9wdCA9IHB0ID0gbmV3IFByb3BUd2Vlbih0d2Vlbi5fcHQsIHRhcmdldCwgcGx1Z2luLm5hbWUsIDAsIDEsIHBsdWdpbi5yZW5kZXIsIHBsdWdpbiwgMCwgcGx1Z2luLnByaW9yaXR5KTtcblxuICAgICAgICBwbHVnaW4uX3Byb3BzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICBwdExvb2t1cFtuYW1lXSA9IHB0O1xuICAgICAgICB9KTtcblxuICAgICAgICBwbHVnaW4ucHJpb3JpdHkgJiYgKGhhc1ByaW9yaXR5ID0gMSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFybmVzcyB8fCBoYXJuZXNzVmFycykge1xuICAgICAgICBmb3IgKHAgaW4gY2xlYW5WYXJzKSB7XG4gICAgICAgICAgaWYgKF9wbHVnaW5zW3BdICYmIChwbHVnaW4gPSBfY2hlY2tQbHVnaW4ocCwgY2xlYW5WYXJzLCB0d2VlbiwgaW5kZXgsIHRhcmdldCwgZnVsbFRhcmdldHMpKSkge1xuICAgICAgICAgICAgcGx1Z2luLnByaW9yaXR5ICYmIChoYXNQcmlvcml0eSA9IDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwdExvb2t1cFtwXSA9IHB0ID0gX2FkZFByb3BUd2Vlbi5jYWxsKHR3ZWVuLCB0YXJnZXQsIHAsIFwiZ2V0XCIsIGNsZWFuVmFyc1twXSwgaW5kZXgsIGZ1bGxUYXJnZXRzLCAwLCB2YXJzLnN0cmluZ0ZpbHRlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHR3ZWVuLl9vcCAmJiB0d2Vlbi5fb3BbaV0gJiYgdHdlZW4ua2lsbCh0YXJnZXQsIHR3ZWVuLl9vcFtpXSk7XG5cbiAgICAgIGlmIChhdXRvT3ZlcndyaXRlICYmIHR3ZWVuLl9wdCkge1xuICAgICAgICBfb3ZlcndyaXRpbmdUd2VlbiA9IHR3ZWVuO1xuXG4gICAgICAgIF9nbG9iYWxUaW1lbGluZS5raWxsVHdlZW5zT2YodGFyZ2V0LCBwdExvb2t1cCwgdHdlZW4uZ2xvYmFsVGltZSh0aW1lKSk7IC8vIG1ha2Ugc3VyZSB0aGUgb3ZlcndyaXRpbmcgZG9lc24ndCBvdmVyd3JpdGUgVEhJUyB0d2VlbiEhIVxuXG5cbiAgICAgICAgb3ZlcndyaXR0ZW4gPSAhdHdlZW4ucGFyZW50O1xuICAgICAgICBfb3ZlcndyaXRpbmdUd2VlbiA9IDA7XG4gICAgICB9XG5cbiAgICAgIHR3ZWVuLl9wdCAmJiBsYXp5ICYmIChfbGF6eUxvb2t1cFtnc0RhdGEuaWRdID0gMSk7XG4gICAgfVxuXG4gICAgaGFzUHJpb3JpdHkgJiYgX3NvcnRQcm9wVHdlZW5zQnlQcmlvcml0eSh0d2Vlbik7XG4gICAgdHdlZW4uX29uSW5pdCAmJiB0d2Vlbi5fb25Jbml0KHR3ZWVuKTsgLy9wbHVnaW5zIGxpa2UgUm91bmRQcm9wcyBtdXN0IHdhaXQgdW50aWwgQUxMIG9mIHRoZSBQcm9wVHdlZW5zIGFyZSBpbnN0YW50aWF0ZWQuIEluIHRoZSBwbHVnaW4ncyBpbml0KCkgZnVuY3Rpb24sIGl0IHNldHMgdGhlIF9vbkluaXQgb24gdGhlIHR3ZWVuIGluc3RhbmNlLiBNYXkgbm90IGJlIHByZXR0eS9pbnR1aXRpdmUsIGJ1dCBpdCdzIGZhc3QgYW5kIGtlZXBzIGZpbGUgc2l6ZSBkb3duLlxuICB9XG5cbiAgdHdlZW4uX29uVXBkYXRlID0gb25VcGRhdGU7XG4gIHR3ZWVuLl9pbml0dGVkID0gKCF0d2Vlbi5fb3AgfHwgdHdlZW4uX3B0KSAmJiAhb3ZlcndyaXR0ZW47IC8vIGlmIG92ZXJ3cml0dGVuUHJvcHMgcmVzdWx0ZWQgaW4gdGhlIGVudGlyZSB0d2VlbiBiZWluZyBraWxsZWQsIGRvIE5PVCBmbGFnIGl0IGFzIGluaXR0ZWQgb3IgZWxzZSBpdCBtYXkgcmVuZGVyIGZvciBvbmUgdGljay5cblxuICBrZXlmcmFtZXMgJiYgdGltZSA8PSAwICYmIHRsLnJlbmRlcihfYmlnTnVtLCB0cnVlLCB0cnVlKTsgLy8gaWYgdGhlcmUncyBhIDAlIGtleWZyYW1lLCBpdCdsbCByZW5kZXIgaW4gdGhlIFwiYmVmb3JlXCIgc3RhdGUgZm9yIGFueSBzdGFnZ2VyZWQvZGVsYXllZCBhbmltYXRpb25zIHRodXMgd2hlbiB0aGUgZm9sbG93aW5nIHR3ZWVuIGluaXRpYWxpemVzLCBpdCdsbCB1c2UgdGhlIFwiYmVmb3JlXCIgc3RhdGUgaW5zdGVhZCBvZiB0aGUgXCJhZnRlclwiIHN0YXRlIGFzIHRoZSBpbml0aWFsIHZhbHVlcy5cbn0sXG4gICAgX3VwZGF0ZVByb3BUd2VlbnMgPSBmdW5jdGlvbiBfdXBkYXRlUHJvcFR3ZWVucyh0d2VlbiwgcHJvcGVydHksIHZhbHVlLCBzdGFydCwgc3RhcnRJc1JlbGF0aXZlLCByYXRpbywgdGltZSwgc2tpcFJlY3Vyc2lvbikge1xuICB2YXIgcHRDYWNoZSA9ICh0d2Vlbi5fcHQgJiYgdHdlZW4uX3B0Q2FjaGUgfHwgKHR3ZWVuLl9wdENhY2hlID0ge30pKVtwcm9wZXJ0eV0sXG4gICAgICBwdCxcbiAgICAgIHJvb3RQVCxcbiAgICAgIGxvb2t1cCxcbiAgICAgIGk7XG5cbiAgaWYgKCFwdENhY2hlKSB7XG4gICAgcHRDYWNoZSA9IHR3ZWVuLl9wdENhY2hlW3Byb3BlcnR5XSA9IFtdO1xuICAgIGxvb2t1cCA9IHR3ZWVuLl9wdExvb2t1cDtcbiAgICBpID0gdHdlZW4uX3RhcmdldHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgcHQgPSBsb29rdXBbaV1bcHJvcGVydHldO1xuXG4gICAgICBpZiAocHQgJiYgcHQuZCAmJiBwdC5kLl9wdCkge1xuICAgICAgICAvLyBpdCdzIGEgcGx1Z2luLCBzbyBmaW5kIHRoZSBuZXN0ZWQgUHJvcFR3ZWVuXG4gICAgICAgIHB0ID0gcHQuZC5fcHQ7XG5cbiAgICAgICAgd2hpbGUgKHB0ICYmIHB0LnAgIT09IHByb3BlcnR5ICYmIHB0LmZwICE9PSBwcm9wZXJ0eSkge1xuICAgICAgICAgIC8vIFwiZnBcIiBpcyBmdW5jdGlvblBhcmFtIGZvciB0aGluZ3MgbGlrZSBzZXR0aW5nIENTUyB2YXJpYWJsZXMgd2hpY2ggcmVxdWlyZSAuc2V0UHJvcGVydHkoXCItLXZhci1uYW1lXCIsIHZhbHVlKVxuICAgICAgICAgIHB0ID0gcHQuX25leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFwdCkge1xuICAgICAgICAvLyB0aGVyZSBpcyBubyBQcm9wVHdlZW4gYXNzb2NpYXRlZCB3aXRoIHRoYXQgcHJvcGVydHksIHNvIHdlIG11c3QgRk9SQ0Ugb25lIHRvIGJlIGNyZWF0ZWQgYW5kIGRpdGNoIG91dCBvZiB0aGlzXG4gICAgICAgIC8vIGlmIHRoZSB0d2VlbiBoYXMgb3RoZXIgcHJvcGVydGllcyB0aGF0IGFscmVhZHkgcmVuZGVyZWQgYXQgbmV3IHBvc2l0aW9ucywgd2UnZCBub3JtYWxseSBoYXZlIHRvIHJld2luZCB0byBwdXQgdGhlbSBiYWNrIGxpa2UgdHdlZW4ucmVuZGVyKDAsIHRydWUpIGJlZm9yZSBmb3JjaW5nIGFuIF9pbml0VHdlZW4oKSwgYnV0IHRoYXQgY2FuIGNyZWF0ZSBhbm90aGVyIGVkZ2UgY2FzZSBsaWtlIHR3ZWVuaW5nIGEgdGltZWxpbmUncyBwcm9ncmVzcyB3b3VsZCB0cmlnZ2VyIG9uVXBkYXRlcyB0byBmaXJlIHdoaWNoIGNvdWxkIG1vdmUgb3RoZXIgdGhpbmdzIGFyb3VuZC4gSXQncyBiZXR0ZXIgdG8ganVzdCBpbmZvcm0gdXNlcnMgdGhhdCAucmVzZXRUbygpIHNob3VsZCBPTkxZIGJlIHVzZWQgZm9yIHR3ZWVucyB0aGF0IGFscmVhZHkgaGF2ZSB0aGF0IHByb3BlcnR5LiBGb3IgZXhhbXBsZSwgeW91IGNhbid0IGdzYXAudG8oLi4ueyB5OiAwIH0pIGFuZCB0aGVuIHR3ZWVuLnJlc3RUbyhcInhcIiwgMjAwKSBmb3IgZXhhbXBsZS5cbiAgICAgICAgX2ZvcmNlQWxsUHJvcFR3ZWVucyA9IDE7IC8vIG90aGVyd2lzZSwgd2hlbiB3ZSBfYWRkUHJvcFR3ZWVuKCkgYW5kIGl0IGZpbmRzIG5vIGNoYW5nZSBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kIHZhbHVlcywgaXQgc2tpcHMgY3JlYXRpbmcgYSBQcm9wVHdlZW4gKGZvciBlZmZpY2llbmN5Li4ud2h5IHR3ZWVuIHdoZW4gdGhlcmUncyBubyBkaWZmZXJlbmNlPykgYnV0IGluIHRoaXMgY2FzZSB3ZSBORUVEIHRoYXQgUHJvcFR3ZWVuIGNyZWF0ZWQgc28gd2UgY2FuIGVkaXQgaXQuXG5cbiAgICAgICAgdHdlZW4udmFyc1twcm9wZXJ0eV0gPSBcIis9MFwiO1xuXG4gICAgICAgIF9pbml0VHdlZW4odHdlZW4sIHRpbWUpO1xuXG4gICAgICAgIF9mb3JjZUFsbFByb3BUd2VlbnMgPSAwO1xuICAgICAgICByZXR1cm4gc2tpcFJlY3Vyc2lvbiA/IF93YXJuKHByb3BlcnR5ICsgXCIgbm90IGVsaWdpYmxlIGZvciByZXNldFwiKSA6IDE7IC8vIGlmIHNvbWVvbmUgdHJpZXMgdG8gZG8gYSBxdWlja1RvKCkgb24gYSBzcGVjaWFsIHByb3BlcnR5IGxpa2UgYm9yZGVyUmFkaXVzIHdoaWNoIG11c3QgZ2V0IHNwbGl0IGludG8gNCBkaWZmZXJlbnQgcHJvcGVydGllcywgdGhhdCdzIG5vdCBlbGlnaWJsZSBmb3IgLnJlc2V0VG8oKS5cbiAgICAgIH1cblxuICAgICAgcHRDYWNoZS5wdXNoKHB0KTtcbiAgICB9XG4gIH1cblxuICBpID0gcHRDYWNoZS5sZW5ndGg7XG5cbiAgd2hpbGUgKGktLSkge1xuICAgIHJvb3RQVCA9IHB0Q2FjaGVbaV07XG4gICAgcHQgPSByb290UFQuX3B0IHx8IHJvb3RQVDsgLy8gY29tcGxleCB2YWx1ZXMgbWF5IGhhdmUgbmVzdGVkIFByb3BUd2VlbnMuIFdlIG9ubHkgYWNjb21tb2RhdGUgdGhlIEZJUlNUIHZhbHVlLlxuXG4gICAgcHQucyA9IChzdGFydCB8fCBzdGFydCA9PT0gMCkgJiYgIXN0YXJ0SXNSZWxhdGl2ZSA/IHN0YXJ0IDogcHQucyArIChzdGFydCB8fCAwKSArIHJhdGlvICogcHQuYztcbiAgICBwdC5jID0gdmFsdWUgLSBwdC5zO1xuICAgIHJvb3RQVC5lICYmIChyb290UFQuZSA9IF9yb3VuZCh2YWx1ZSkgKyBnZXRVbml0KHJvb3RQVC5lKSk7IC8vIG1haW5seSBmb3IgQ1NTUGx1Z2luIChlbmQgdmFsdWUpXG5cbiAgICByb290UFQuYiAmJiAocm9vdFBULmIgPSBwdC5zICsgZ2V0VW5pdChyb290UFQuYikpOyAvLyAoYmVnaW5uaW5nIHZhbHVlKVxuICB9XG59LFxuICAgIF9hZGRBbGlhc2VzVG9WYXJzID0gZnVuY3Rpb24gX2FkZEFsaWFzZXNUb1ZhcnModGFyZ2V0cywgdmFycykge1xuICB2YXIgaGFybmVzcyA9IHRhcmdldHNbMF0gPyBfZ2V0Q2FjaGUodGFyZ2V0c1swXSkuaGFybmVzcyA6IDAsXG4gICAgICBwcm9wZXJ0eUFsaWFzZXMgPSBoYXJuZXNzICYmIGhhcm5lc3MuYWxpYXNlcyxcbiAgICAgIGNvcHksXG4gICAgICBwLFxuICAgICAgaSxcbiAgICAgIGFsaWFzZXM7XG5cbiAgaWYgKCFwcm9wZXJ0eUFsaWFzZXMpIHtcbiAgICByZXR1cm4gdmFycztcbiAgfVxuXG4gIGNvcHkgPSBfbWVyZ2Uoe30sIHZhcnMpO1xuXG4gIGZvciAocCBpbiBwcm9wZXJ0eUFsaWFzZXMpIHtcbiAgICBpZiAocCBpbiBjb3B5KSB7XG4gICAgICBhbGlhc2VzID0gcHJvcGVydHlBbGlhc2VzW3BdLnNwbGl0KFwiLFwiKTtcbiAgICAgIGkgPSBhbGlhc2VzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICBjb3B5W2FsaWFzZXNbaV1dID0gY29weVtwXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29weTtcbn0sXG4gICAgLy8gcGFyc2VzIG11bHRpcGxlIGZvcm1hdHMsIGxpa2Uge1wiMCVcIjoge3g6IDEwMH0sIHtcIjUwJVwiOiB7eDogLTIwfX0gYW5kIHsgeDoge1wiMCVcIjogMTAwLCBcIjUwJVwiOiAtMjB9IH0sIGFuZCBhbiBcImVhc2VcIiBjYW4gYmUgc2V0IG9uIGFueSBvYmplY3QuIFdlIHBvcHVsYXRlIGFuIFwiYWxsUHJvcHNcIiBvYmplY3Qgd2l0aCBhbiBBcnJheSBmb3IgZWFjaCBwcm9wZXJ0eSwgbGlrZSB7eDogW3t9LCB7fV0sIHk6W3t9LCB7fV19IHdpdGggZGF0YSBmb3IgZWFjaCBwcm9wZXJ0eSB0d2Vlbi4gVGhlIG9iamVjdHMgaGF2ZSBhIFwidFwiICh0aW1lKSwgXCJ2XCIsICh2YWx1ZSksIGFuZCBcImVcIiAoZWFzZSkgcHJvcGVydHkuIFRoaXMgYWxsb3dzIHVzIHRvIHBpZWNlIHRvZ2V0aGVyIGEgdGltZWxpbmUgbGF0ZXIuXG5fcGFyc2VLZXlmcmFtZSA9IGZ1bmN0aW9uIF9wYXJzZUtleWZyYW1lKHByb3AsIG9iaiwgYWxsUHJvcHMsIGVhc2VFYWNoKSB7XG4gIHZhciBlYXNlID0gb2JqLmVhc2UgfHwgZWFzZUVhY2ggfHwgXCJwb3dlcjEuaW5PdXRcIixcbiAgICAgIHAsXG4gICAgICBhO1xuXG4gIGlmIChfaXNBcnJheShvYmopKSB7XG4gICAgYSA9IGFsbFByb3BzW3Byb3BdIHx8IChhbGxQcm9wc1twcm9wXSA9IFtdKTsgLy8gdCA9IHRpbWUgKG91dCBvZiAxMDApLCB2ID0gdmFsdWUsIGUgPSBlYXNlXG5cbiAgICBvYmouZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGkpIHtcbiAgICAgIHJldHVybiBhLnB1c2goe1xuICAgICAgICB0OiBpIC8gKG9iai5sZW5ndGggLSAxKSAqIDEwMCxcbiAgICAgICAgdjogdmFsdWUsXG4gICAgICAgIGU6IGVhc2VcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGZvciAocCBpbiBvYmopIHtcbiAgICAgIGEgPSBhbGxQcm9wc1twXSB8fCAoYWxsUHJvcHNbcF0gPSBbXSk7XG4gICAgICBwID09PSBcImVhc2VcIiB8fCBhLnB1c2goe1xuICAgICAgICB0OiBwYXJzZUZsb2F0KHByb3ApLFxuICAgICAgICB2OiBvYmpbcF0sXG4gICAgICAgIGU6IGVhc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSxcbiAgICBfcGFyc2VGdW5jT3JTdHJpbmcgPSBmdW5jdGlvbiBfcGFyc2VGdW5jT3JTdHJpbmcodmFsdWUsIHR3ZWVuLCBpLCB0YXJnZXQsIHRhcmdldHMpIHtcbiAgcmV0dXJuIF9pc0Z1bmN0aW9uKHZhbHVlKSA/IHZhbHVlLmNhbGwodHdlZW4sIGksIHRhcmdldCwgdGFyZ2V0cykgOiBfaXNTdHJpbmcodmFsdWUpICYmIH52YWx1ZS5pbmRleE9mKFwicmFuZG9tKFwiKSA/IF9yZXBsYWNlUmFuZG9tKHZhbHVlKSA6IHZhbHVlO1xufSxcbiAgICBfc3RhZ2dlclR3ZWVuUHJvcHMgPSBfY2FsbGJhY2tOYW1lcyArIFwicmVwZWF0LHJlcGVhdERlbGF5LHlveW8scmVwZWF0UmVmcmVzaCx5b3lvRWFzZSxhdXRvUmV2ZXJ0XCIsXG4gICAgX3N0YWdnZXJQcm9wc1RvU2tpcCA9IHt9O1xuXG5fZm9yRWFjaE5hbWUoX3N0YWdnZXJUd2VlblByb3BzICsgXCIsaWQsc3RhZ2dlcixkZWxheSxkdXJhdGlvbixwYXVzZWQsc2Nyb2xsVHJpZ2dlclwiLCBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gX3N0YWdnZXJQcm9wc1RvU2tpcFtuYW1lXSA9IDE7XG59KTtcbi8qXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogVFdFRU5cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG5leHBvcnQgdmFyIFR3ZWVuID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQW5pbWF0aW9uMikge1xuICBfaW5oZXJpdHNMb29zZShUd2VlbiwgX0FuaW1hdGlvbjIpO1xuXG4gIGZ1bmN0aW9uIFR3ZWVuKHRhcmdldHMsIHZhcnMsIHBvc2l0aW9uLCBza2lwSW5oZXJpdCkge1xuICAgIHZhciBfdGhpczM7XG5cbiAgICBpZiAodHlwZW9mIHZhcnMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHBvc2l0aW9uLmR1cmF0aW9uID0gdmFycztcbiAgICAgIHZhcnMgPSBwb3NpdGlvbjtcbiAgICAgIHBvc2l0aW9uID0gbnVsbDtcbiAgICB9XG5cbiAgICBfdGhpczMgPSBfQW5pbWF0aW9uMi5jYWxsKHRoaXMsIHNraXBJbmhlcml0ID8gdmFycyA6IF9pbmhlcml0RGVmYXVsdHModmFycykpIHx8IHRoaXM7XG4gICAgdmFyIF90aGlzMyR2YXJzID0gX3RoaXMzLnZhcnMsXG4gICAgICAgIGR1cmF0aW9uID0gX3RoaXMzJHZhcnMuZHVyYXRpb24sXG4gICAgICAgIGRlbGF5ID0gX3RoaXMzJHZhcnMuZGVsYXksXG4gICAgICAgIGltbWVkaWF0ZVJlbmRlciA9IF90aGlzMyR2YXJzLmltbWVkaWF0ZVJlbmRlcixcbiAgICAgICAgc3RhZ2dlciA9IF90aGlzMyR2YXJzLnN0YWdnZXIsXG4gICAgICAgIG92ZXJ3cml0ZSA9IF90aGlzMyR2YXJzLm92ZXJ3cml0ZSxcbiAgICAgICAga2V5ZnJhbWVzID0gX3RoaXMzJHZhcnMua2V5ZnJhbWVzLFxuICAgICAgICBkZWZhdWx0cyA9IF90aGlzMyR2YXJzLmRlZmF1bHRzLFxuICAgICAgICBzY3JvbGxUcmlnZ2VyID0gX3RoaXMzJHZhcnMuc2Nyb2xsVHJpZ2dlcixcbiAgICAgICAgeW95b0Vhc2UgPSBfdGhpczMkdmFycy55b3lvRWFzZSxcbiAgICAgICAgcGFyZW50ID0gdmFycy5wYXJlbnQgfHwgX2dsb2JhbFRpbWVsaW5lLFxuICAgICAgICBwYXJzZWRUYXJnZXRzID0gKF9pc0FycmF5KHRhcmdldHMpIHx8IF9pc1R5cGVkQXJyYXkodGFyZ2V0cykgPyBfaXNOdW1iZXIodGFyZ2V0c1swXSkgOiBcImxlbmd0aFwiIGluIHZhcnMpID8gW3RhcmdldHNdIDogdG9BcnJheSh0YXJnZXRzKSxcbiAgICAgICAgdGwsXG4gICAgICAgIGksXG4gICAgICAgIGNvcHksXG4gICAgICAgIGwsXG4gICAgICAgIHAsXG4gICAgICAgIGN1clRhcmdldCxcbiAgICAgICAgc3RhZ2dlckZ1bmMsXG4gICAgICAgIHN0YWdnZXJWYXJzVG9NZXJnZTtcbiAgICBfdGhpczMuX3RhcmdldHMgPSBwYXJzZWRUYXJnZXRzLmxlbmd0aCA/IF9oYXJuZXNzKHBhcnNlZFRhcmdldHMpIDogX3dhcm4oXCJHU0FQIHRhcmdldCBcIiArIHRhcmdldHMgKyBcIiBub3QgZm91bmQuIGh0dHBzOi8vZ3NhcC5jb21cIiwgIV9jb25maWcubnVsbFRhcmdldFdhcm4pIHx8IFtdO1xuICAgIF90aGlzMy5fcHRMb29rdXAgPSBbXTsgLy9Qcm9wVHdlZW4gbG9va3VwLiBBbiBhcnJheSBjb250YWluaW5nIGFuIG9iamVjdCBmb3IgZWFjaCB0YXJnZXQsIGhhdmluZyBrZXlzIGZvciBlYWNoIHR3ZWVuaW5nIHByb3BlcnR5XG5cbiAgICBfdGhpczMuX292ZXJ3cml0ZSA9IG92ZXJ3cml0ZTtcblxuICAgIGlmIChrZXlmcmFtZXMgfHwgc3RhZ2dlciB8fCBfaXNGdW5jT3JTdHJpbmcoZHVyYXRpb24pIHx8IF9pc0Z1bmNPclN0cmluZyhkZWxheSkpIHtcbiAgICAgIHZhcnMgPSBfdGhpczMudmFycztcbiAgICAgIHRsID0gX3RoaXMzLnRpbWVsaW5lID0gbmV3IFRpbWVsaW5lKHtcbiAgICAgICAgZGF0YTogXCJuZXN0ZWRcIixcbiAgICAgICAgZGVmYXVsdHM6IGRlZmF1bHRzIHx8IHt9LFxuICAgICAgICB0YXJnZXRzOiBwYXJlbnQgJiYgcGFyZW50LmRhdGEgPT09IFwibmVzdGVkXCIgPyBwYXJlbnQudmFycy50YXJnZXRzIDogcGFyc2VkVGFyZ2V0c1xuICAgICAgfSk7IC8vIHdlIG5lZWQgdG8gc3RvcmUgdGhlIHRhcmdldHMgYmVjYXVzZSBmb3Igc3RhZ2dlcnMgYW5kIGtleWZyYW1lcywgd2UgZW5kIHVwIGNyZWF0aW5nIGFuIGluZGl2aWR1YWwgdHdlZW4gZm9yIGVhY2ggYnV0IGZ1bmN0aW9uLWJhc2VkIHZhbHVlcyBuZWVkIHRvIGtub3cgdGhlIGluZGV4IGFuZCB0aGUgd2hvbGUgQXJyYXkgb2YgdGFyZ2V0cy5cblxuICAgICAgdGwua2lsbCgpO1xuICAgICAgdGwucGFyZW50ID0gdGwuX2RwID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpczMpO1xuICAgICAgdGwuX3N0YXJ0ID0gMDtcblxuICAgICAgaWYgKHN0YWdnZXIgfHwgX2lzRnVuY09yU3RyaW5nKGR1cmF0aW9uKSB8fCBfaXNGdW5jT3JTdHJpbmcoZGVsYXkpKSB7XG4gICAgICAgIGwgPSBwYXJzZWRUYXJnZXRzLmxlbmd0aDtcbiAgICAgICAgc3RhZ2dlckZ1bmMgPSBzdGFnZ2VyICYmIGRpc3RyaWJ1dGUoc3RhZ2dlcik7XG5cbiAgICAgICAgaWYgKF9pc09iamVjdChzdGFnZ2VyKSkge1xuICAgICAgICAgIC8vdXNlcnMgY2FuIHBhc3MgaW4gY2FsbGJhY2tzIGxpa2Ugb25TdGFydC9vbkNvbXBsZXRlIGluIHRoZSBzdGFnZ2VyIG9iamVjdC4gVGhlc2Ugc2hvdWxkIGZpcmUgd2l0aCBlYWNoIGluZGl2aWR1YWwgdHdlZW4uXG4gICAgICAgICAgZm9yIChwIGluIHN0YWdnZXIpIHtcbiAgICAgICAgICAgIGlmICh+X3N0YWdnZXJUd2VlblByb3BzLmluZGV4T2YocCkpIHtcbiAgICAgICAgICAgICAgc3RhZ2dlclZhcnNUb01lcmdlIHx8IChzdGFnZ2VyVmFyc1RvTWVyZ2UgPSB7fSk7XG4gICAgICAgICAgICAgIHN0YWdnZXJWYXJzVG9NZXJnZVtwXSA9IHN0YWdnZXJbcF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgIGNvcHkgPSBfY29weUV4Y2x1ZGluZyh2YXJzLCBfc3RhZ2dlclByb3BzVG9Ta2lwKTtcbiAgICAgICAgICBjb3B5LnN0YWdnZXIgPSAwO1xuICAgICAgICAgIHlveW9FYXNlICYmIChjb3B5LnlveW9FYXNlID0geW95b0Vhc2UpO1xuICAgICAgICAgIHN0YWdnZXJWYXJzVG9NZXJnZSAmJiBfbWVyZ2UoY29weSwgc3RhZ2dlclZhcnNUb01lcmdlKTtcbiAgICAgICAgICBjdXJUYXJnZXQgPSBwYXJzZWRUYXJnZXRzW2ldOyAvL2Rvbid0IGp1c3QgY29weSBkdXJhdGlvbiBvciBkZWxheSBiZWNhdXNlIGlmIHRoZXkncmUgYSBzdHJpbmcgb3IgZnVuY3Rpb24sIHdlJ2QgZW5kIHVwIGluIGFuIGluZmluaXRlIGxvb3AgYmVjYXVzZSBfaXNGdW5jT3JTdHJpbmcoKSB3b3VsZCBldmFsdWF0ZSBhcyB0cnVlIGluIHRoZSBjaGlsZCB0d2VlbnMsIGVudGVyaW5nIHRoaXMgbG9vcCwgZXRjLiBTbyB3ZSBwYXJzZSB0aGUgdmFsdWUgc3RyYWlnaHQgZnJvbSB2YXJzIGFuZCBkZWZhdWx0IHRvIDAuXG5cbiAgICAgICAgICBjb3B5LmR1cmF0aW9uID0gK19wYXJzZUZ1bmNPclN0cmluZyhkdXJhdGlvbiwgX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpczMpLCBpLCBjdXJUYXJnZXQsIHBhcnNlZFRhcmdldHMpO1xuICAgICAgICAgIGNvcHkuZGVsYXkgPSAoK19wYXJzZUZ1bmNPclN0cmluZyhkZWxheSwgX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpczMpLCBpLCBjdXJUYXJnZXQsIHBhcnNlZFRhcmdldHMpIHx8IDApIC0gX3RoaXMzLl9kZWxheTtcblxuICAgICAgICAgIGlmICghc3RhZ2dlciAmJiBsID09PSAxICYmIGNvcHkuZGVsYXkpIHtcbiAgICAgICAgICAgIC8vIGlmIHNvbWVvbmUgZG9lcyBkZWxheTpcInJhbmRvbSgxLCA1KVwiLCByZXBlYXQ6LTEsIGZvciBleGFtcGxlLCB0aGUgZGVsYXkgc2hvdWxkbid0IGJlIGluc2lkZSB0aGUgcmVwZWF0LlxuICAgICAgICAgICAgX3RoaXMzLl9kZWxheSA9IGRlbGF5ID0gY29weS5kZWxheTtcbiAgICAgICAgICAgIF90aGlzMy5fc3RhcnQgKz0gZGVsYXk7XG4gICAgICAgICAgICBjb3B5LmRlbGF5ID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0bC50byhjdXJUYXJnZXQsIGNvcHksIHN0YWdnZXJGdW5jID8gc3RhZ2dlckZ1bmMoaSwgY3VyVGFyZ2V0LCBwYXJzZWRUYXJnZXRzKSA6IDApO1xuICAgICAgICAgIHRsLl9lYXNlID0gX2Vhc2VNYXAubm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRsLmR1cmF0aW9uKCkgPyBkdXJhdGlvbiA9IGRlbGF5ID0gMCA6IF90aGlzMy50aW1lbGluZSA9IDA7IC8vIGlmIHRoZSB0aW1lbGluZSdzIGR1cmF0aW9uIGlzIDAsIHdlIGRvbid0IG5lZWQgYSB0aW1lbGluZSBpbnRlcm5hbGx5IVxuICAgICAgfSBlbHNlIGlmIChrZXlmcmFtZXMpIHtcbiAgICAgICAgX2luaGVyaXREZWZhdWx0cyhfc2V0RGVmYXVsdHModGwudmFycy5kZWZhdWx0cywge1xuICAgICAgICAgIGVhc2U6IFwibm9uZVwiXG4gICAgICAgIH0pKTtcblxuICAgICAgICB0bC5fZWFzZSA9IF9wYXJzZUVhc2Uoa2V5ZnJhbWVzLmVhc2UgfHwgdmFycy5lYXNlIHx8IFwibm9uZVwiKTtcbiAgICAgICAgdmFyIHRpbWUgPSAwLFxuICAgICAgICAgICAgYSxcbiAgICAgICAgICAgIGtmLFxuICAgICAgICAgICAgdjtcblxuICAgICAgICBpZiAoX2lzQXJyYXkoa2V5ZnJhbWVzKSkge1xuICAgICAgICAgIGtleWZyYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChmcmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRsLnRvKHBhcnNlZFRhcmdldHMsIGZyYW1lLCBcIj5cIik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGwuZHVyYXRpb24oKTsgLy8gdG8gZW5zdXJlIHRsLl9kdXIgaXMgY2FjaGVkIGJlY2F1c2Ugd2UgdGFwIGludG8gaXQgZm9yIHBlcmZvcm1hbmNlIHB1cnBvc2VzIGluIHRoZSByZW5kZXIoKSBtZXRob2QuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29weSA9IHt9O1xuXG4gICAgICAgICAgZm9yIChwIGluIGtleWZyYW1lcykge1xuICAgICAgICAgICAgcCA9PT0gXCJlYXNlXCIgfHwgcCA9PT0gXCJlYXNlRWFjaFwiIHx8IF9wYXJzZUtleWZyYW1lKHAsIGtleWZyYW1lc1twXSwgY29weSwga2V5ZnJhbWVzLmVhc2VFYWNoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKHAgaW4gY29weSkge1xuICAgICAgICAgICAgYSA9IGNvcHlbcF0uc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICByZXR1cm4gYS50IC0gYi50O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aW1lID0gMDtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAga2YgPSBhW2ldO1xuICAgICAgICAgICAgICB2ID0ge1xuICAgICAgICAgICAgICAgIGVhc2U6IGtmLmUsXG4gICAgICAgICAgICAgICAgZHVyYXRpb246IChrZi50IC0gKGkgPyBhW2kgLSAxXS50IDogMCkpIC8gMTAwICogZHVyYXRpb25cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgdltwXSA9IGtmLnY7XG4gICAgICAgICAgICAgIHRsLnRvKHBhcnNlZFRhcmdldHMsIHYsIHRpbWUpO1xuICAgICAgICAgICAgICB0aW1lICs9IHYuZHVyYXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGwuZHVyYXRpb24oKSA8IGR1cmF0aW9uICYmIHRsLnRvKHt9LCB7XG4gICAgICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24gLSB0bC5kdXJhdGlvbigpXG4gICAgICAgICAgfSk7IC8vIGluIGNhc2Uga2V5ZnJhbWVzIGRpZG4ndCBnbyB0byAxMDAlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZHVyYXRpb24gfHwgX3RoaXMzLmR1cmF0aW9uKGR1cmF0aW9uID0gdGwuZHVyYXRpb24oKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIF90aGlzMy50aW1lbGluZSA9IDA7IC8vc3BlZWQgb3B0aW1pemF0aW9uLCBmYXN0ZXIgbG9va3VwcyAobm8gZ29pbmcgdXAgdGhlIHByb3RvdHlwZSBjaGFpbilcbiAgICB9XG5cbiAgICBpZiAob3ZlcndyaXRlID09PSB0cnVlICYmICFfc3VwcHJlc3NPdmVyd3JpdGVzKSB7XG4gICAgICBfb3ZlcndyaXRpbmdUd2VlbiA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMzKTtcblxuICAgICAgX2dsb2JhbFRpbWVsaW5lLmtpbGxUd2VlbnNPZihwYXJzZWRUYXJnZXRzKTtcblxuICAgICAgX292ZXJ3cml0aW5nVHdlZW4gPSAwO1xuICAgIH1cblxuICAgIF9hZGRUb1RpbWVsaW5lKHBhcmVudCwgX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpczMpLCBwb3NpdGlvbik7XG5cbiAgICB2YXJzLnJldmVyc2VkICYmIF90aGlzMy5yZXZlcnNlKCk7XG4gICAgdmFycy5wYXVzZWQgJiYgX3RoaXMzLnBhdXNlZCh0cnVlKTtcblxuICAgIGlmIChpbW1lZGlhdGVSZW5kZXIgfHwgIWR1cmF0aW9uICYmICFrZXlmcmFtZXMgJiYgX3RoaXMzLl9zdGFydCA9PT0gX3JvdW5kUHJlY2lzZShwYXJlbnQuX3RpbWUpICYmIF9pc05vdEZhbHNlKGltbWVkaWF0ZVJlbmRlcikgJiYgX2hhc05vUGF1c2VkQW5jZXN0b3JzKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMzKSkgJiYgcGFyZW50LmRhdGEgIT09IFwibmVzdGVkXCIpIHtcbiAgICAgIF90aGlzMy5fdFRpbWUgPSAtX3RpbnlOdW07IC8vZm9yY2VzIGEgcmVuZGVyIHdpdGhvdXQgaGF2aW5nIHRvIHNldCB0aGUgcmVuZGVyKCkgXCJmb3JjZVwiIHBhcmFtZXRlciB0byB0cnVlIGJlY2F1c2Ugd2Ugd2FudCB0byBhbGxvdyBsYXp5aW5nIGJ5IGRlZmF1bHQgKHVzaW5nIHRoZSBcImZvcmNlXCIgcGFyYW1ldGVyIGFsd2F5cyBmb3JjZXMgYW4gaW1tZWRpYXRlIGZ1bGwgcmVuZGVyKVxuXG4gICAgICBfdGhpczMucmVuZGVyKE1hdGgubWF4KDAsIC1kZWxheSkgfHwgMCk7IC8vaW4gY2FzZSBkZWxheSBpcyBuZWdhdGl2ZVxuXG4gICAgfVxuXG4gICAgc2Nyb2xsVHJpZ2dlciAmJiBfc2Nyb2xsVHJpZ2dlcihfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzMyksIHNjcm9sbFRyaWdnZXIpO1xuICAgIHJldHVybiBfdGhpczM7XG4gIH1cblxuICB2YXIgX3Byb3RvMyA9IFR3ZWVuLnByb3RvdHlwZTtcblxuICBfcHJvdG8zLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcih0b3RhbFRpbWUsIHN1cHByZXNzRXZlbnRzLCBmb3JjZSkge1xuICAgIHZhciBwcmV2VGltZSA9IHRoaXMuX3RpbWUsXG4gICAgICAgIHREdXIgPSB0aGlzLl90RHVyLFxuICAgICAgICBkdXIgPSB0aGlzLl9kdXIsXG4gICAgICAgIGlzTmVnYXRpdmUgPSB0b3RhbFRpbWUgPCAwLFxuICAgICAgICB0VGltZSA9IHRvdGFsVGltZSA+IHREdXIgLSBfdGlueU51bSAmJiAhaXNOZWdhdGl2ZSA/IHREdXIgOiB0b3RhbFRpbWUgPCBfdGlueU51bSA/IDAgOiB0b3RhbFRpbWUsXG4gICAgICAgIHRpbWUsXG4gICAgICAgIHB0LFxuICAgICAgICBpdGVyYXRpb24sXG4gICAgICAgIGN5Y2xlRHVyYXRpb24sXG4gICAgICAgIHByZXZJdGVyYXRpb24sXG4gICAgICAgIGlzWW95byxcbiAgICAgICAgcmF0aW8sXG4gICAgICAgIHRpbWVsaW5lLFxuICAgICAgICB5b3lvRWFzZTtcblxuICAgIGlmICghZHVyKSB7XG4gICAgICBfcmVuZGVyWmVyb0R1cmF0aW9uVHdlZW4odGhpcywgdG90YWxUaW1lLCBzdXBwcmVzc0V2ZW50cywgZm9yY2UpO1xuICAgIH0gZWxzZSBpZiAodFRpbWUgIT09IHRoaXMuX3RUaW1lIHx8ICF0b3RhbFRpbWUgfHwgZm9yY2UgfHwgIXRoaXMuX2luaXR0ZWQgJiYgdGhpcy5fdFRpbWUgfHwgdGhpcy5fc3RhcnRBdCAmJiB0aGlzLl96VGltZSA8IDAgIT09IGlzTmVnYXRpdmUgfHwgdGhpcy5fbGF6eSkge1xuICAgICAgLy8gdGhpcyBzZW5zZXMgaWYgd2UncmUgY3Jvc3Npbmcgb3ZlciB0aGUgc3RhcnQgdGltZSwgaW4gd2hpY2ggY2FzZSB3ZSBtdXN0IHJlY29yZCBfelRpbWUgYW5kIGZvcmNlIHRoZSByZW5kZXIsIGJ1dCB3ZSBkbyBpdCBpbiB0aGlzIGxlbmd0aHkgY29uZGl0aW9uYWwgd2F5IGZvciBwZXJmb3JtYW5jZSByZWFzb25zICh1c3VhbGx5IHdlIGNhbiBza2lwIHRoZSBjYWxjdWxhdGlvbnMpOiB0aGlzLl9pbml0dGVkICYmICh0aGlzLl96VGltZSA8IDApICE9PSAodG90YWxUaW1lIDwgMClcbiAgICAgIHRpbWUgPSB0VGltZTtcbiAgICAgIHRpbWVsaW5lID0gdGhpcy50aW1lbGluZTtcblxuICAgICAgaWYgKHRoaXMuX3JlcGVhdCkge1xuICAgICAgICAvL2FkanVzdCB0aGUgdGltZSBmb3IgcmVwZWF0cyBhbmQgeW95b3NcbiAgICAgICAgY3ljbGVEdXJhdGlvbiA9IGR1ciArIHRoaXMuX3JEZWxheTtcblxuICAgICAgICBpZiAodGhpcy5fcmVwZWF0IDwgLTEgJiYgaXNOZWdhdGl2ZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnRvdGFsVGltZShjeWNsZUR1cmF0aW9uICogMTAwICsgdG90YWxUaW1lLCBzdXBwcmVzc0V2ZW50cywgZm9yY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGltZSA9IF9yb3VuZFByZWNpc2UodFRpbWUgJSBjeWNsZUR1cmF0aW9uKTsgLy9yb3VuZCB0byBhdm9pZCBmbG9hdGluZyBwb2ludCBlcnJvcnMuICg0ICUgMC44IHNob3VsZCBiZSAwIGJ1dCBzb21lIGJyb3dzZXJzIHJlcG9ydCBpdCBhcyAwLjc5OTk5OTk5ISlcblxuICAgICAgICBpZiAodFRpbWUgPT09IHREdXIpIHtcbiAgICAgICAgICAvLyB0aGUgdER1ciA9PT0gdFRpbWUgaXMgZm9yIGVkZ2UgY2FzZXMgd2hlcmUgdGhlcmUncyBhIGxlbmd0aHkgZGVjaW1hbCBvbiB0aGUgZHVyYXRpb24gYW5kIGl0IG1heSByZWFjaCB0aGUgdmVyeSBlbmQgYnV0IHRoZSB0aW1lIGlzIHJlbmRlcmVkIGFzIG5vdC1xdWl0ZS10aGVyZSAocmVtZW1iZXIsIHREdXIgaXMgcm91bmRlZCB0byA0IGRlY2ltYWxzIHdoZXJlYXMgZHVyIGlzbid0KVxuICAgICAgICAgIGl0ZXJhdGlvbiA9IHRoaXMuX3JlcGVhdDtcbiAgICAgICAgICB0aW1lID0gZHVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZJdGVyYXRpb24gPSBfcm91bmRQcmVjaXNlKHRUaW1lIC8gY3ljbGVEdXJhdGlvbik7IC8vIGZ1bGwgZGVjaW1hbCB2ZXJzaW9uIG9mIGl0ZXJhdGlvbnMsIG5vdCB0aGUgcHJldmlvdXMgaXRlcmF0aW9uICh3ZSdyZSByZXVzaW5nIHByZXZJdGVyYXRpb24gdmFyaWFibGUgZm9yIGVmZmljaWVuY3kpXG5cbiAgICAgICAgICBpdGVyYXRpb24gPSB+fnByZXZJdGVyYXRpb247XG5cbiAgICAgICAgICBpZiAoaXRlcmF0aW9uICYmIGl0ZXJhdGlvbiA9PT0gcHJldkl0ZXJhdGlvbikge1xuICAgICAgICAgICAgdGltZSA9IGR1cjtcbiAgICAgICAgICAgIGl0ZXJhdGlvbi0tO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGltZSA+IGR1cikge1xuICAgICAgICAgICAgdGltZSA9IGR1cjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpc1lveW8gPSB0aGlzLl95b3lvICYmIGl0ZXJhdGlvbiAmIDE7XG5cbiAgICAgICAgaWYgKGlzWW95bykge1xuICAgICAgICAgIHlveW9FYXNlID0gdGhpcy5feUVhc2U7XG4gICAgICAgICAgdGltZSA9IGR1ciAtIHRpbWU7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2SXRlcmF0aW9uID0gX2FuaW1hdGlvbkN5Y2xlKHRoaXMuX3RUaW1lLCBjeWNsZUR1cmF0aW9uKTtcblxuICAgICAgICBpZiAodGltZSA9PT0gcHJldlRpbWUgJiYgIWZvcmNlICYmIHRoaXMuX2luaXR0ZWQgJiYgaXRlcmF0aW9uID09PSBwcmV2SXRlcmF0aW9uKSB7XG4gICAgICAgICAgLy9jb3VsZCBiZSBkdXJpbmcgdGhlIHJlcGVhdERlbGF5IHBhcnQuIE5vIG5lZWQgdG8gcmVuZGVyIGFuZCBmaXJlIGNhbGxiYWNrcy5cbiAgICAgICAgICB0aGlzLl90VGltZSA9IHRUaW1lO1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZXJhdGlvbiAhPT0gcHJldkl0ZXJhdGlvbikge1xuICAgICAgICAgIHRpbWVsaW5lICYmIHRoaXMuX3lFYXNlICYmIF9wcm9wYWdhdGVZb3lvRWFzZSh0aW1lbGluZSwgaXNZb3lvKTsgLy9yZXBlYXRSZWZyZXNoIGZ1bmN0aW9uYWxpdHlcblxuICAgICAgICAgIGlmICh0aGlzLnZhcnMucmVwZWF0UmVmcmVzaCAmJiAhaXNZb3lvICYmICF0aGlzLl9sb2NrICYmIHRpbWUgIT09IGN5Y2xlRHVyYXRpb24gJiYgdGhpcy5faW5pdHRlZCkge1xuICAgICAgICAgICAgLy8gdGhpcy5fdGltZSB3aWxsID09PSBjeWNsZUR1cmF0aW9uIHdoZW4gd2UgcmVuZGVyIGF0IEVYQUNUTFkgdGhlIGVuZCBvZiBhbiBpdGVyYXRpb24uIFdpdGhvdXQgdGhpcyBjb25kaXRpb24sIGl0J2Qgb2Z0ZW4gZG8gdGhlIHJlcGVhdFJlZnJlc2ggcmVuZGVyIFRXSUNFIChhZ2FpbiBvbiB0aGUgdmVyeSBuZXh0IHRpY2spLlxuICAgICAgICAgICAgdGhpcy5fbG9jayA9IGZvcmNlID0gMTsgLy9mb3JjZSwgb3RoZXJ3aXNlIGlmIGxhenkgaXMgdHJ1ZSwgdGhlIF9hdHRlbXB0SW5pdFR3ZWVuKCkgd2lsbCByZXR1cm4gYW5kIHdlJ2xsIGp1bXAgb3V0IGFuZCBnZXQgY2F1Z2h0IGJvdW5jaW5nIG9uIGVhY2ggdGljay5cblxuICAgICAgICAgICAgdGhpcy5yZW5kZXIoX3JvdW5kUHJlY2lzZShjeWNsZUR1cmF0aW9uICogaXRlcmF0aW9uKSwgdHJ1ZSkuaW52YWxpZGF0ZSgpLl9sb2NrID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLl9pbml0dGVkKSB7XG4gICAgICAgIGlmIChfYXR0ZW1wdEluaXRUd2Vlbih0aGlzLCBpc05lZ2F0aXZlID8gdG90YWxUaW1lIDogdGltZSwgZm9yY2UsIHN1cHByZXNzRXZlbnRzLCB0VGltZSkpIHtcbiAgICAgICAgICB0aGlzLl90VGltZSA9IDA7IC8vIGluIGNvbnN0cnVjdG9yIGlmIGltbWVkaWF0ZVJlbmRlciBpcyB0cnVlLCB3ZSBzZXQgX3RUaW1lIHRvIC1fdGlueU51bSB0byBoYXZlIHRoZSBwbGF5aGVhZCBjcm9zcyB0aGUgc3RhcnRpbmcgcG9pbnQgYnV0IHdlIGNhbid0IGxlYXZlIF90VGltZSBhcyBhIG5lZ2F0aXZlIG51bWJlci5cblxuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZUaW1lICE9PSB0aGlzLl90aW1lICYmICEoZm9yY2UgJiYgdGhpcy52YXJzLnJlcGVhdFJlZnJlc2ggJiYgaXRlcmF0aW9uICE9PSBwcmV2SXRlcmF0aW9uKSkge1xuICAgICAgICAgIC8vIHJhcmUgZWRnZSBjYXNlIC0gZHVyaW5nIGluaXRpYWxpemF0aW9uLCBhbiBvblVwZGF0ZSBpbiB0aGUgX3N0YXJ0QXQgKC5mcm9tVG8oKSkgbWlnaHQgZm9yY2UgdGhpcyB0d2VlbiB0byByZW5kZXIgYXQgYSBkaWZmZXJlbnQgc3BvdCBpbiB3aGljaCBjYXNlIHdlIHNob3VsZCBkaXRjaCB0aGlzIHJlbmRlcigpIGNhbGwgc28gdGhhdCBpdCBkb2Vzbid0IHJldmVydCB0aGUgdmFsdWVzLiBCdXQgd2UgYWxzbyBkb24ndCB3YW50IHRvIGR1bXAgaWYgd2UncmUgZG9pbmcgYSByZXBlYXRSZWZyZXNoIHJlbmRlciFcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkdXIgIT09IHRoaXMuX2R1cikge1xuICAgICAgICAgIC8vIHdoaWxlIGluaXR0aW5nLCBhIHBsdWdpbiBsaWtlIEluZXJ0aWFQbHVnaW4gbWlnaHQgYWx0ZXIgdGhlIGR1cmF0aW9uLCBzbyByZXJ1biBmcm9tIHRoZSBzdGFydCB0byBlbnN1cmUgZXZlcnl0aGluZyByZW5kZXJzIGFzIGl0IHNob3VsZC5cbiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXIodG90YWxUaW1lLCBzdXBwcmVzc0V2ZW50cywgZm9yY2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3RUaW1lID0gdFRpbWU7XG4gICAgICB0aGlzLl90aW1lID0gdGltZTtcblxuICAgICAgaWYgKCF0aGlzLl9hY3QgJiYgdGhpcy5fdHMpIHtcbiAgICAgICAgdGhpcy5fYWN0ID0gMTsgLy9hcyBsb25nIGFzIGl0J3Mgbm90IHBhdXNlZCwgZm9yY2UgaXQgdG8gYmUgYWN0aXZlIHNvIHRoYXQgaWYgdGhlIHVzZXIgcmVuZGVycyBpbmRlcGVuZGVudCBvZiB0aGUgcGFyZW50IHRpbWVsaW5lLCBpdCdsbCBiZSBmb3JjZWQgdG8gcmUtcmVuZGVyIG9uIHRoZSBuZXh0IHRpY2suXG5cbiAgICAgICAgdGhpcy5fbGF6eSA9IDA7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmF0aW8gPSByYXRpbyA9ICh5b3lvRWFzZSB8fCB0aGlzLl9lYXNlKSh0aW1lIC8gZHVyKTtcblxuICAgICAgaWYgKHRoaXMuX2Zyb20pIHtcbiAgICAgICAgdGhpcy5yYXRpbyA9IHJhdGlvID0gMSAtIHJhdGlvO1xuICAgICAgfVxuXG4gICAgICBpZiAodGltZSAmJiAhcHJldlRpbWUgJiYgIXN1cHByZXNzRXZlbnRzICYmICFpdGVyYXRpb24pIHtcbiAgICAgICAgX2NhbGxiYWNrKHRoaXMsIFwib25TdGFydFwiKTtcblxuICAgICAgICBpZiAodGhpcy5fdFRpbWUgIT09IHRUaW1lKSB7XG4gICAgICAgICAgLy8gaW4gY2FzZSB0aGUgb25TdGFydCB0cmlnZ2VyZWQgYSByZW5kZXIgYXQgYSBkaWZmZXJlbnQgc3BvdCwgZWplY3QuIExpa2UgaWYgc29tZW9uZSBkaWQgYW5pbWF0aW9uLnBhdXNlKDAuNSkgb3Igc29tZXRoaW5nIGluc2lkZSB0aGUgb25TdGFydC5cbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwdCA9IHRoaXMuX3B0O1xuXG4gICAgICB3aGlsZSAocHQpIHtcbiAgICAgICAgcHQucihyYXRpbywgcHQuZCk7XG4gICAgICAgIHB0ID0gcHQuX25leHQ7XG4gICAgICB9XG5cbiAgICAgIHRpbWVsaW5lICYmIHRpbWVsaW5lLnJlbmRlcih0b3RhbFRpbWUgPCAwID8gdG90YWxUaW1lIDogdGltZWxpbmUuX2R1ciAqIHRpbWVsaW5lLl9lYXNlKHRpbWUgLyB0aGlzLl9kdXIpLCBzdXBwcmVzc0V2ZW50cywgZm9yY2UpIHx8IHRoaXMuX3N0YXJ0QXQgJiYgKHRoaXMuX3pUaW1lID0gdG90YWxUaW1lKTtcblxuICAgICAgaWYgKHRoaXMuX29uVXBkYXRlICYmICFzdXBwcmVzc0V2ZW50cykge1xuICAgICAgICBpc05lZ2F0aXZlICYmIF9yZXdpbmRTdGFydEF0KHRoaXMsIHRvdGFsVGltZSwgc3VwcHJlc3NFdmVudHMsIGZvcmNlKTsgLy9ub3RlOiBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgd2UgdHVjayB0aGlzIGNvbmRpdGlvbmFsIGxvZ2ljIGluc2lkZSBsZXNzIHRyYXZlbGVkIGFyZWFzIChtb3N0IHR3ZWVucyBkb24ndCBoYXZlIGFuIG9uVXBkYXRlKS4gV2UnZCBqdXN0IGhhdmUgaXQgYXQgdGhlIGVuZCBiZWZvcmUgdGhlIG9uQ29tcGxldGUsIGJ1dCB0aGUgdmFsdWVzIHNob3VsZCBiZSB1cGRhdGVkIGJlZm9yZSBhbnkgb25VcGRhdGUgaXMgY2FsbGVkLCBzbyB3ZSBBTFNPIHB1dCBpdCBoZXJlIGFuZCB0aGVuIGlmIGl0J3Mgbm90IGNhbGxlZCwgd2UgZG8gc28gbGF0ZXIgbmVhciB0aGUgb25Db21wbGV0ZS5cblxuICAgICAgICBfY2FsbGJhY2sodGhpcywgXCJvblVwZGF0ZVwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVwZWF0ICYmIGl0ZXJhdGlvbiAhPT0gcHJldkl0ZXJhdGlvbiAmJiB0aGlzLnZhcnMub25SZXBlYXQgJiYgIXN1cHByZXNzRXZlbnRzICYmIHRoaXMucGFyZW50ICYmIF9jYWxsYmFjayh0aGlzLCBcIm9uUmVwZWF0XCIpO1xuXG4gICAgICBpZiAoKHRUaW1lID09PSB0aGlzLl90RHVyIHx8ICF0VGltZSkgJiYgdGhpcy5fdFRpbWUgPT09IHRUaW1lKSB7XG4gICAgICAgIGlzTmVnYXRpdmUgJiYgIXRoaXMuX29uVXBkYXRlICYmIF9yZXdpbmRTdGFydEF0KHRoaXMsIHRvdGFsVGltZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICh0b3RhbFRpbWUgfHwgIWR1cikgJiYgKHRUaW1lID09PSB0aGlzLl90RHVyICYmIHRoaXMuX3RzID4gMCB8fCAhdFRpbWUgJiYgdGhpcy5fdHMgPCAwKSAmJiBfcmVtb3ZlRnJvbVBhcmVudCh0aGlzLCAxKTsgLy8gZG9uJ3QgcmVtb3ZlIGlmIHdlJ3JlIHJlbmRlcmluZyBhdCBleGFjdGx5IGEgdGltZSBvZiAwLCBhcyB0aGVyZSBjb3VsZCBiZSBhdXRvUmV2ZXJ0IHZhbHVlcyB0aGF0IHNob3VsZCBnZXQgc2V0IG9uIHRoZSBuZXh0IHRpY2sgKGlmIHRoZSBwbGF5aGVhZCBnb2VzIGJhY2t3YXJkIGJleW9uZCB0aGUgc3RhcnRUaW1lLCBuZWdhdGl2ZSB0b3RhbFRpbWUpLiBEb24ndCByZW1vdmUgaWYgdGhlIHRpbWVsaW5lIGlzIHJldmVyc2VkIGFuZCB0aGUgcGxheWhlYWQgaXNuJ3QgYXQgMCwgb3RoZXJ3aXNlIHRsLnByb2dyZXNzKDEpLnJldmVyc2UoKSB3b24ndCB3b3JrLiBPbmx5IHJlbW92ZSBpZiB0aGUgcGxheWhlYWQgaXMgYXQgdGhlIGVuZCBhbmQgdGltZVNjYWxlIGlzIHBvc2l0aXZlLCBvciBpZiB0aGUgcGxheWhlYWQgaXMgYXQgMCBhbmQgdGhlIHRpbWVTY2FsZSBpcyBuZWdhdGl2ZS5cblxuICAgICAgICBpZiAoIXN1cHByZXNzRXZlbnRzICYmICEoaXNOZWdhdGl2ZSAmJiAhcHJldlRpbWUpICYmICh0VGltZSB8fCBwcmV2VGltZSB8fCBpc1lveW8pKSB7XG4gICAgICAgICAgLy8gaWYgcHJldlRpbWUgYW5kIHRUaW1lIGFyZSB6ZXJvLCB3ZSBzaG91bGRuJ3QgZmlyZSB0aGUgb25SZXZlcnNlQ29tcGxldGUuIFRoaXMgY291bGQgaGFwcGVuIGlmIHlvdSBnc2FwLnRvKC4uLiB7cGF1c2VkOnRydWV9KS5wbGF5KCk7XG4gICAgICAgICAgX2NhbGxiYWNrKHRoaXMsIHRUaW1lID09PSB0RHVyID8gXCJvbkNvbXBsZXRlXCIgOiBcIm9uUmV2ZXJzZUNvbXBsZXRlXCIsIHRydWUpO1xuXG4gICAgICAgICAgdGhpcy5fcHJvbSAmJiAhKHRUaW1lIDwgdER1ciAmJiB0aGlzLnRpbWVTY2FsZSgpID4gMCkgJiYgdGhpcy5fcHJvbSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvMy50YXJnZXRzID0gZnVuY3Rpb24gdGFyZ2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFyZ2V0cztcbiAgfTtcblxuICBfcHJvdG8zLmludmFsaWRhdGUgPSBmdW5jdGlvbiBpbnZhbGlkYXRlKHNvZnQpIHtcbiAgICAvLyBcInNvZnRcIiBnaXZlcyB1cyBhIHdheSB0byBjbGVhciBvdXQgZXZlcnl0aGluZyBFWENFUFQgdGhlIHJlY29yZGVkIHByZS1cImZyb21cIiBwb3J0aW9uIG9mIGZyb20oKSB0d2VlbnMuIE90aGVyd2lzZSwgZm9yIGV4YW1wbGUsIGlmIHlvdSB0d2Vlbi5wcm9ncmVzcygxKS5yZW5kZXIoMCwgdHJ1ZSB0cnVlKS5pbnZhbGlkYXRlKCksIHRoZSBcImZyb21cIiB2YWx1ZXMgd291bGQgcGVyc2lzdCBhbmQgdGhlbiBvbiB0aGUgbmV4dCByZW5kZXIsIHRoZSBmcm9tKCkgdHdlZW5zIHdvdWxkIGluaXRpYWxpemUgYW5kIHRoZSBjdXJyZW50IHZhbHVlIHdvdWxkIG1hdGNoIHRoZSBcImZyb21cIiB2YWx1ZXMsIHRodXMgYW5pbWF0ZSBmcm9tIHRoZSBzYW1lIHZhbHVlIHRvIHRoZSBzYW1lIHZhbHVlIChubyBhbmltYXRpb24pLiBXZSB0YXAgaW50byB0aGlzIGluIFNjcm9sbFRyaWdnZXIncyByZWZyZXNoKCkgd2hlcmUgd2UgbXVzdCBwdXNoIGEgdHdlZW4gdG8gY29tcGxldGlvbiBhbmQgdGhlbiBiYWNrIGFnYWluIGJ1dCBob25vciBpdHMgaW5pdCBzdGF0ZSBpbiBjYXNlIHRoZSB0d2VlbiBpcyBkZXBlbmRlbnQgb24gYW5vdGhlciB0d2VlbiBmdXJ0aGVyIHVwIG9uIHRoZSBwYWdlLlxuICAgICghc29mdCB8fCAhdGhpcy52YXJzLnJ1bkJhY2t3YXJkcykgJiYgKHRoaXMuX3N0YXJ0QXQgPSAwKTtcbiAgICB0aGlzLl9wdCA9IHRoaXMuX29wID0gdGhpcy5fb25VcGRhdGUgPSB0aGlzLl9sYXp5ID0gdGhpcy5yYXRpbyA9IDA7XG4gICAgdGhpcy5fcHRMb29rdXAgPSBbXTtcbiAgICB0aGlzLnRpbWVsaW5lICYmIHRoaXMudGltZWxpbmUuaW52YWxpZGF0ZShzb2Z0KTtcbiAgICByZXR1cm4gX0FuaW1hdGlvbjIucHJvdG90eXBlLmludmFsaWRhdGUuY2FsbCh0aGlzLCBzb2Z0KTtcbiAgfTtcblxuICBfcHJvdG8zLnJlc2V0VG8gPSBmdW5jdGlvbiByZXNldFRvKHByb3BlcnR5LCB2YWx1ZSwgc3RhcnQsIHN0YXJ0SXNSZWxhdGl2ZSwgc2tpcFJlY3Vyc2lvbikge1xuICAgIF90aWNrZXJBY3RpdmUgfHwgX3RpY2tlci53YWtlKCk7XG4gICAgdGhpcy5fdHMgfHwgdGhpcy5wbGF5KCk7XG4gICAgdmFyIHRpbWUgPSBNYXRoLm1pbih0aGlzLl9kdXIsICh0aGlzLl9kcC5fdGltZSAtIHRoaXMuX3N0YXJ0KSAqIHRoaXMuX3RzKSxcbiAgICAgICAgcmF0aW87XG4gICAgdGhpcy5faW5pdHRlZCB8fCBfaW5pdFR3ZWVuKHRoaXMsIHRpbWUpO1xuICAgIHJhdGlvID0gdGhpcy5fZWFzZSh0aW1lIC8gdGhpcy5fZHVyKTsgLy8gZG9uJ3QganVzdCBnZXQgdHdlZW4ucmF0aW8gYmVjYXVzZSBpdCBtYXkgbm90IGhhdmUgcmVuZGVyZWQgeWV0LlxuICAgIC8vIHBvc3NpYmxlIGZ1dHVyZSBhZGRpdGlvbiB0byBhbGxvdyBhbiBvYmplY3Qgd2l0aCBtdWx0aXBsZSB2YWx1ZXMgdG8gdXBkYXRlLCBsaWtlIHR3ZWVuLnJlc2V0VG8oe3g6IDEwMCwgeTogMjAwfSk7IEF0IHRoaXMgcG9pbnQsIGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCB0aGUgYWRkZWQga2IgZ2l2ZW4gdGhlIGZhY3QgdGhhdCBtb3N0IHVzZXJzIHdpbGwgbGlrZWx5IG9wdCBmb3IgdGhlIGNvbnZlbmllbnQgZ3NhcC5xdWlja1RvKCkgd2F5IG9mIGludGVyYWN0aW5nIHdpdGggdGhpcyBtZXRob2QuXG4gICAgLy8gaWYgKF9pc09iamVjdChwcm9wZXJ0eSkpIHsgLy8gcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uXG4gICAgLy8gXHRmb3IgKHAgaW4gcHJvcGVydHkpIHtcbiAgICAvLyBcdFx0aWYgKF91cGRhdGVQcm9wVHdlZW5zKHRoaXMsIHAsIHByb3BlcnR5W3BdLCB2YWx1ZSA/IHZhbHVlW3BdIDogbnVsbCwgc3RhcnQsIHJhdGlvLCB0aW1lKSkge1xuICAgIC8vIFx0XHRcdHJldHVybiB0aGlzLnJlc2V0VG8ocHJvcGVydHksIHZhbHVlLCBzdGFydCwgc3RhcnRJc1JlbGF0aXZlKTsgLy8gaWYgYSBQcm9wVHdlZW4gd2Fzbid0IGZvdW5kIGZvciB0aGUgcHJvcGVydHksIGl0J2xsIGdldCBmb3JjZWQgd2l0aCBhIHJlLWluaXRpYWxpemF0aW9uIHNvIHdlIG5lZWQgdG8ganVtcCBvdXQgYW5kIHN0YXJ0IG92ZXIgYWdhaW4uXG4gICAgLy8gXHRcdH1cbiAgICAvLyBcdH1cbiAgICAvLyB9IGVsc2Uge1xuXG4gICAgaWYgKF91cGRhdGVQcm9wVHdlZW5zKHRoaXMsIHByb3BlcnR5LCB2YWx1ZSwgc3RhcnQsIHN0YXJ0SXNSZWxhdGl2ZSwgcmF0aW8sIHRpbWUsIHNraXBSZWN1cnNpb24pKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNldFRvKHByb3BlcnR5LCB2YWx1ZSwgc3RhcnQsIHN0YXJ0SXNSZWxhdGl2ZSwgMSk7IC8vIGlmIGEgUHJvcFR3ZWVuIHdhc24ndCBmb3VuZCBmb3IgdGhlIHByb3BlcnR5LCBpdCdsbCBnZXQgZm9yY2VkIHdpdGggYSByZS1pbml0aWFsaXphdGlvbiBzbyB3ZSBuZWVkIHRvIGp1bXAgb3V0IGFuZCBzdGFydCBvdmVyIGFnYWluLlxuICAgIH0gLy99XG5cblxuICAgIF9hbGlnblBsYXloZWFkKHRoaXMsIDApO1xuXG4gICAgdGhpcy5wYXJlbnQgfHwgX2FkZExpbmtlZExpc3RJdGVtKHRoaXMuX2RwLCB0aGlzLCBcIl9maXJzdFwiLCBcIl9sYXN0XCIsIHRoaXMuX2RwLl9zb3J0ID8gXCJfc3RhcnRcIiA6IDApO1xuICAgIHJldHVybiB0aGlzLnJlbmRlcigwKTtcbiAgfTtcblxuICBfcHJvdG8zLmtpbGwgPSBmdW5jdGlvbiBraWxsKHRhcmdldHMsIHZhcnMpIHtcbiAgICBpZiAodmFycyA9PT0gdm9pZCAwKSB7XG4gICAgICB2YXJzID0gXCJhbGxcIjtcbiAgICB9XG5cbiAgICBpZiAoIXRhcmdldHMgJiYgKCF2YXJzIHx8IHZhcnMgPT09IFwiYWxsXCIpKSB7XG4gICAgICB0aGlzLl9sYXp5ID0gdGhpcy5fcHQgPSAwO1xuICAgICAgdGhpcy5wYXJlbnQgPyBfaW50ZXJydXB0KHRoaXMpIDogdGhpcy5zY3JvbGxUcmlnZ2VyICYmIHRoaXMuc2Nyb2xsVHJpZ2dlci5raWxsKCEhX3JldmVydGluZyk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBpZiAodGhpcy50aW1lbGluZSkge1xuICAgICAgdmFyIHREdXIgPSB0aGlzLnRpbWVsaW5lLnRvdGFsRHVyYXRpb24oKTtcbiAgICAgIHRoaXMudGltZWxpbmUua2lsbFR3ZWVuc09mKHRhcmdldHMsIHZhcnMsIF9vdmVyd3JpdGluZ1R3ZWVuICYmIF9vdmVyd3JpdGluZ1R3ZWVuLnZhcnMub3ZlcndyaXRlICE9PSB0cnVlKS5fZmlyc3QgfHwgX2ludGVycnVwdCh0aGlzKTsgLy8gaWYgbm90aGluZyBpcyBsZWZ0IHR3ZWVuaW5nLCBpbnRlcnJ1cHQuXG5cbiAgICAgIHRoaXMucGFyZW50ICYmIHREdXIgIT09IHRoaXMudGltZWxpbmUudG90YWxEdXJhdGlvbigpICYmIF9zZXREdXJhdGlvbih0aGlzLCB0aGlzLl9kdXIgKiB0aGlzLnRpbWVsaW5lLl90RHVyIC8gdER1ciwgMCwgMSk7IC8vIGlmIGEgbmVzdGVkIHR3ZWVuIGlzIGtpbGxlZCB0aGF0IGNoYW5nZXMgdGhlIGR1cmF0aW9uLCBpdCBzaG91bGQgYWZmZWN0IHRoaXMgdHdlZW4ncyBkdXJhdGlvbi4gV2UgbXVzdCB1c2UgdGhlIHJhdGlvLCB0aG91Z2gsIGJlY2F1c2Ugc29tZXRpbWVzIHRoZSBpbnRlcm5hbCB0aW1lbGluZSBpcyBzdHJldGNoZWQgbGlrZSBmb3Iga2V5ZnJhbWVzIHdoZXJlIHRoZXkgZG9uJ3QgYWxsIGFkZCB1cCB0byB3aGF0ZXZlciB0aGUgcGFyZW50IHR3ZWVuJ3MgZHVyYXRpb24gd2FzIHNldCB0by5cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIHBhcnNlZFRhcmdldHMgPSB0aGlzLl90YXJnZXRzLFxuICAgICAgICBraWxsaW5nVGFyZ2V0cyA9IHRhcmdldHMgPyB0b0FycmF5KHRhcmdldHMpIDogcGFyc2VkVGFyZ2V0cyxcbiAgICAgICAgcHJvcFR3ZWVuTG9va3VwID0gdGhpcy5fcHRMb29rdXAsXG4gICAgICAgIGZpcnN0UFQgPSB0aGlzLl9wdCxcbiAgICAgICAgb3ZlcndyaXR0ZW5Qcm9wcyxcbiAgICAgICAgY3VyTG9va3VwLFxuICAgICAgICBjdXJPdmVyd3JpdGVQcm9wcyxcbiAgICAgICAgcHJvcHMsXG4gICAgICAgIHAsXG4gICAgICAgIHB0LFxuICAgICAgICBpO1xuXG4gICAgaWYgKCghdmFycyB8fCB2YXJzID09PSBcImFsbFwiKSAmJiBfYXJyYXlzTWF0Y2gocGFyc2VkVGFyZ2V0cywga2lsbGluZ1RhcmdldHMpKSB7XG4gICAgICB2YXJzID09PSBcImFsbFwiICYmICh0aGlzLl9wdCA9IDApO1xuICAgICAgcmV0dXJuIF9pbnRlcnJ1cHQodGhpcyk7XG4gICAgfVxuXG4gICAgb3ZlcndyaXR0ZW5Qcm9wcyA9IHRoaXMuX29wID0gdGhpcy5fb3AgfHwgW107XG5cbiAgICBpZiAodmFycyAhPT0gXCJhbGxcIikge1xuICAgICAgLy9zbyBwZW9wbGUgY2FuIHBhc3MgaW4gYSBjb21tYS1kZWxpbWl0ZWQgbGlzdCBvZiBwcm9wZXJ0eSBuYW1lc1xuICAgICAgaWYgKF9pc1N0cmluZyh2YXJzKSkge1xuICAgICAgICBwID0ge307XG5cbiAgICAgICAgX2ZvckVhY2hOYW1lKHZhcnMsIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHBbbmFtZV0gPSAxO1xuICAgICAgICB9KTtcblxuICAgICAgICB2YXJzID0gcDtcbiAgICAgIH1cblxuICAgICAgdmFycyA9IF9hZGRBbGlhc2VzVG9WYXJzKHBhcnNlZFRhcmdldHMsIHZhcnMpO1xuICAgIH1cblxuICAgIGkgPSBwYXJzZWRUYXJnZXRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGlmICh+a2lsbGluZ1RhcmdldHMuaW5kZXhPZihwYXJzZWRUYXJnZXRzW2ldKSkge1xuICAgICAgICBjdXJMb29rdXAgPSBwcm9wVHdlZW5Mb29rdXBbaV07XG5cbiAgICAgICAgaWYgKHZhcnMgPT09IFwiYWxsXCIpIHtcbiAgICAgICAgICBvdmVyd3JpdHRlblByb3BzW2ldID0gdmFycztcbiAgICAgICAgICBwcm9wcyA9IGN1ckxvb2t1cDtcbiAgICAgICAgICBjdXJPdmVyd3JpdGVQcm9wcyA9IHt9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1ck92ZXJ3cml0ZVByb3BzID0gb3ZlcndyaXR0ZW5Qcm9wc1tpXSA9IG92ZXJ3cml0dGVuUHJvcHNbaV0gfHwge307XG4gICAgICAgICAgcHJvcHMgPSB2YXJzO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChwIGluIHByb3BzKSB7XG4gICAgICAgICAgcHQgPSBjdXJMb29rdXAgJiYgY3VyTG9va3VwW3BdO1xuXG4gICAgICAgICAgaWYgKHB0KSB7XG4gICAgICAgICAgICBpZiAoIShcImtpbGxcIiBpbiBwdC5kKSB8fCBwdC5kLmtpbGwocCkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgX3JlbW92ZUxpbmtlZExpc3RJdGVtKHRoaXMsIHB0LCBcIl9wdFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVsZXRlIGN1ckxvb2t1cFtwXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY3VyT3ZlcndyaXRlUHJvcHMgIT09IFwiYWxsXCIpIHtcbiAgICAgICAgICAgIGN1ck92ZXJ3cml0ZVByb3BzW3BdID0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9pbml0dGVkICYmICF0aGlzLl9wdCAmJiBmaXJzdFBUICYmIF9pbnRlcnJ1cHQodGhpcyk7IC8vaWYgYWxsIHR3ZWVuaW5nIHByb3BlcnRpZXMgYXJlIGtpbGxlZCwga2lsbCB0aGUgdHdlZW4uIFdpdGhvdXQgdGhpcyBsaW5lLCBpZiB0aGVyZSdzIGEgdHdlZW4gd2l0aCBtdWx0aXBsZSB0YXJnZXRzIGFuZCB0aGVuIHlvdSBraWxsVHdlZW5zT2YoKSBlYWNoIHRhcmdldCBpbmRpdmlkdWFsbHksIHRoZSB0d2VlbiB3b3VsZCB0ZWNobmljYWxseSBzdGlsbCByZW1haW4gYWN0aXZlIGFuZCBmaXJlIGl0cyBvbkNvbXBsZXRlIGV2ZW4gdGhvdWdoIHRoZXJlIGFyZW4ndCBhbnkgbW9yZSBwcm9wZXJ0aWVzIHR3ZWVuaW5nLlxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgVHdlZW4udG8gPSBmdW5jdGlvbiB0byh0YXJnZXRzLCB2YXJzKSB7XG4gICAgcmV0dXJuIG5ldyBUd2Vlbih0YXJnZXRzLCB2YXJzLCBhcmd1bWVudHNbMl0pO1xuICB9O1xuXG4gIFR3ZWVuLmZyb20gPSBmdW5jdGlvbiBmcm9tKHRhcmdldHMsIHZhcnMpIHtcbiAgICByZXR1cm4gX2NyZWF0ZVR3ZWVuVHlwZSgxLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIFR3ZWVuLmRlbGF5ZWRDYWxsID0gZnVuY3Rpb24gZGVsYXllZENhbGwoZGVsYXksIGNhbGxiYWNrLCBwYXJhbXMsIHNjb3BlKSB7XG4gICAgcmV0dXJuIG5ldyBUd2VlbihjYWxsYmFjaywgMCwge1xuICAgICAgaW1tZWRpYXRlUmVuZGVyOiBmYWxzZSxcbiAgICAgIGxhenk6IGZhbHNlLFxuICAgICAgb3ZlcndyaXRlOiBmYWxzZSxcbiAgICAgIGRlbGF5OiBkZWxheSxcbiAgICAgIG9uQ29tcGxldGU6IGNhbGxiYWNrLFxuICAgICAgb25SZXZlcnNlQ29tcGxldGU6IGNhbGxiYWNrLFxuICAgICAgb25Db21wbGV0ZVBhcmFtczogcGFyYW1zLFxuICAgICAgb25SZXZlcnNlQ29tcGxldGVQYXJhbXM6IHBhcmFtcyxcbiAgICAgIGNhbGxiYWNrU2NvcGU6IHNjb3BlXG4gICAgfSk7IC8vIHdlIG11c3QgdXNlIG9uUmV2ZXJzZUNvbXBsZXRlIHRvbyBmb3IgdGhpbmdzIGxpa2UgdGltZWxpbmUuYWRkKCgpID0+IHsuLi59KSB3aGljaCBzaG91bGQgYmUgdHJpZ2dlcmVkIGluIEJPVEggZGlyZWN0aW9ucyAoZm9yd2FyZCBhbmQgcmV2ZXJzZSlcbiAgfTtcblxuICBUd2Vlbi5mcm9tVG8gPSBmdW5jdGlvbiBmcm9tVG8odGFyZ2V0cywgZnJvbVZhcnMsIHRvVmFycykge1xuICAgIHJldHVybiBfY3JlYXRlVHdlZW5UeXBlKDIsIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgVHdlZW4uc2V0ID0gZnVuY3Rpb24gc2V0KHRhcmdldHMsIHZhcnMpIHtcbiAgICB2YXJzLmR1cmF0aW9uID0gMDtcbiAgICB2YXJzLnJlcGVhdERlbGF5IHx8ICh2YXJzLnJlcGVhdCA9IDApO1xuICAgIHJldHVybiBuZXcgVHdlZW4odGFyZ2V0cywgdmFycyk7XG4gIH07XG5cbiAgVHdlZW4ua2lsbFR3ZWVuc09mID0gZnVuY3Rpb24ga2lsbFR3ZWVuc09mKHRhcmdldHMsIHByb3BzLCBvbmx5QWN0aXZlKSB7XG4gICAgcmV0dXJuIF9nbG9iYWxUaW1lbGluZS5raWxsVHdlZW5zT2YodGFyZ2V0cywgcHJvcHMsIG9ubHlBY3RpdmUpO1xuICB9O1xuXG4gIHJldHVybiBUd2Vlbjtcbn0oQW5pbWF0aW9uKTtcblxuX3NldERlZmF1bHRzKFR3ZWVuLnByb3RvdHlwZSwge1xuICBfdGFyZ2V0czogW10sXG4gIF9sYXp5OiAwLFxuICBfc3RhcnRBdDogMCxcbiAgX29wOiAwLFxuICBfb25Jbml0OiAwXG59KTsgLy9hZGQgdGhlIHBlcnRpbmVudCB0aW1lbGluZSBtZXRob2RzIHRvIFR3ZWVuIGluc3RhbmNlcyBzbyB0aGF0IHVzZXJzIGNhbiBjaGFpbiBjb252ZW5pZW50bHkgYW5kIGNyZWF0ZSBhIHRpbWVsaW5lIGF1dG9tYXRpY2FsbHkuIChyZW1vdmVkIGR1ZSB0byBjb25jZXJucyB0aGF0IGl0J2QgdWx0aW1hdGVseSBhZGQgdG8gbW9yZSBjb25mdXNpb24gZXNwZWNpYWxseSBmb3IgYmVnaW5uZXJzKVxuLy8gX2ZvckVhY2hOYW1lKFwidG8sZnJvbSxmcm9tVG8sc2V0LGNhbGwsYWRkLGFkZExhYmVsLGFkZFBhdXNlXCIsIG5hbWUgPT4ge1xuLy8gXHRUd2Vlbi5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbigpIHtcbi8vIFx0XHRsZXQgdGwgPSBuZXcgVGltZWxpbmUoKTtcbi8vIFx0XHRyZXR1cm4gX2FkZFRvVGltZWxpbmUodGwsIHRoaXMpW25hbWVdLmFwcGx5KHRsLCB0b0FycmF5KGFyZ3VtZW50cykpO1xuLy8gXHR9XG4vLyB9KTtcbi8vZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIExldmVyYWdlIHRoZSB0aW1lbGluZSBjYWxscy5cblxuXG5fZm9yRWFjaE5hbWUoXCJzdGFnZ2VyVG8sc3RhZ2dlckZyb20sc3RhZ2dlckZyb21Ub1wiLCBmdW5jdGlvbiAobmFtZSkge1xuICBUd2VlbltuYW1lXSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGwgPSBuZXcgVGltZWxpbmUoKSxcbiAgICAgICAgcGFyYW1zID0gX3NsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgIHBhcmFtcy5zcGxpY2UobmFtZSA9PT0gXCJzdGFnZ2VyRnJvbVRvXCIgPyA1IDogNCwgMCwgMCk7XG4gICAgcmV0dXJuIHRsW25hbWVdLmFwcGx5KHRsLCBwYXJhbXMpO1xuICB9O1xufSk7XG4vKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIFBST1BUV0VFTlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbnZhciBfc2V0dGVyUGxhaW4gPSBmdW5jdGlvbiBfc2V0dGVyUGxhaW4odGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUpIHtcbiAgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eV0gPSB2YWx1ZTtcbn0sXG4gICAgX3NldHRlckZ1bmMgPSBmdW5jdGlvbiBfc2V0dGVyRnVuYyh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSkge1xuICByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5XSh2YWx1ZSk7XG59LFxuICAgIF9zZXR0ZXJGdW5jV2l0aFBhcmFtID0gZnVuY3Rpb24gX3NldHRlckZ1bmNXaXRoUGFyYW0odGFyZ2V0LCBwcm9wZXJ0eSwgdmFsdWUsIGRhdGEpIHtcbiAgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eV0oZGF0YS5mcCwgdmFsdWUpO1xufSxcbiAgICBfc2V0dGVyQXR0cmlidXRlID0gZnVuY3Rpb24gX3NldHRlckF0dHJpYnV0ZSh0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSkge1xuICByZXR1cm4gdGFyZ2V0LnNldEF0dHJpYnV0ZShwcm9wZXJ0eSwgdmFsdWUpO1xufSxcbiAgICBfZ2V0U2V0dGVyID0gZnVuY3Rpb24gX2dldFNldHRlcih0YXJnZXQsIHByb3BlcnR5KSB7XG4gIHJldHVybiBfaXNGdW5jdGlvbih0YXJnZXRbcHJvcGVydHldKSA/IF9zZXR0ZXJGdW5jIDogX2lzVW5kZWZpbmVkKHRhcmdldFtwcm9wZXJ0eV0pICYmIHRhcmdldC5zZXRBdHRyaWJ1dGUgPyBfc2V0dGVyQXR0cmlidXRlIDogX3NldHRlclBsYWluO1xufSxcbiAgICBfcmVuZGVyUGxhaW4gPSBmdW5jdGlvbiBfcmVuZGVyUGxhaW4ocmF0aW8sIGRhdGEpIHtcbiAgcmV0dXJuIGRhdGEuc2V0KGRhdGEudCwgZGF0YS5wLCBNYXRoLnJvdW5kKChkYXRhLnMgKyBkYXRhLmMgKiByYXRpbykgKiAxMDAwMDAwKSAvIDEwMDAwMDAsIGRhdGEpO1xufSxcbiAgICBfcmVuZGVyQm9vbGVhbiA9IGZ1bmN0aW9uIF9yZW5kZXJCb29sZWFuKHJhdGlvLCBkYXRhKSB7XG4gIHJldHVybiBkYXRhLnNldChkYXRhLnQsIGRhdGEucCwgISEoZGF0YS5zICsgZGF0YS5jICogcmF0aW8pLCBkYXRhKTtcbn0sXG4gICAgX3JlbmRlckNvbXBsZXhTdHJpbmcgPSBmdW5jdGlvbiBfcmVuZGVyQ29tcGxleFN0cmluZyhyYXRpbywgZGF0YSkge1xuICB2YXIgcHQgPSBkYXRhLl9wdCxcbiAgICAgIHMgPSBcIlwiO1xuXG4gIGlmICghcmF0aW8gJiYgZGF0YS5iKSB7XG4gICAgLy9iID0gYmVnaW5uaW5nIHN0cmluZ1xuICAgIHMgPSBkYXRhLmI7XG4gIH0gZWxzZSBpZiAocmF0aW8gPT09IDEgJiYgZGF0YS5lKSB7XG4gICAgLy9lID0gZW5kaW5nIHN0cmluZ1xuICAgIHMgPSBkYXRhLmU7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKHB0KSB7XG4gICAgICBzID0gcHQucCArIChwdC5tID8gcHQubShwdC5zICsgcHQuYyAqIHJhdGlvKSA6IE1hdGgucm91bmQoKHB0LnMgKyBwdC5jICogcmF0aW8pICogMTAwMDApIC8gMTAwMDApICsgczsgLy93ZSB1c2UgdGhlIFwicFwiIHByb3BlcnR5IGZvciB0aGUgdGV4dCBpbmJldHdlZW4gKGxpa2UgYSBzdWZmaXgpLiBBbmQgaW4gdGhlIGNvbnRleHQgb2YgYSBjb21wbGV4IHN0cmluZywgdGhlIG1vZGlmaWVyIChtKSBpcyB0eXBpY2FsbHkganVzdCBNYXRoLnJvdW5kKCksIGxpa2UgZm9yIFJHQiBjb2xvcnMuXG5cbiAgICAgIHB0ID0gcHQuX25leHQ7XG4gICAgfVxuXG4gICAgcyArPSBkYXRhLmM7IC8vd2UgdXNlIHRoZSBcImNcIiBvZiB0aGUgUHJvcFR3ZWVuIHRvIHN0b3JlIHRoZSBmaW5hbCBjaHVuayBvZiBub24tbnVtZXJpYyB0ZXh0LlxuICB9XG5cbiAgZGF0YS5zZXQoZGF0YS50LCBkYXRhLnAsIHMsIGRhdGEpO1xufSxcbiAgICBfcmVuZGVyUHJvcFR3ZWVucyA9IGZ1bmN0aW9uIF9yZW5kZXJQcm9wVHdlZW5zKHJhdGlvLCBkYXRhKSB7XG4gIHZhciBwdCA9IGRhdGEuX3B0O1xuXG4gIHdoaWxlIChwdCkge1xuICAgIHB0LnIocmF0aW8sIHB0LmQpO1xuICAgIHB0ID0gcHQuX25leHQ7XG4gIH1cbn0sXG4gICAgX2FkZFBsdWdpbk1vZGlmaWVyID0gZnVuY3Rpb24gX2FkZFBsdWdpbk1vZGlmaWVyKG1vZGlmaWVyLCB0d2VlbiwgdGFyZ2V0LCBwcm9wZXJ0eSkge1xuICB2YXIgcHQgPSB0aGlzLl9wdCxcbiAgICAgIG5leHQ7XG5cbiAgd2hpbGUgKHB0KSB7XG4gICAgbmV4dCA9IHB0Ll9uZXh0O1xuICAgIHB0LnAgPT09IHByb3BlcnR5ICYmIHB0Lm1vZGlmaWVyKG1vZGlmaWVyLCB0d2VlbiwgdGFyZ2V0KTtcbiAgICBwdCA9IG5leHQ7XG4gIH1cbn0sXG4gICAgX2tpbGxQcm9wVHdlZW5zT2YgPSBmdW5jdGlvbiBfa2lsbFByb3BUd2VlbnNPZihwcm9wZXJ0eSkge1xuICB2YXIgcHQgPSB0aGlzLl9wdCxcbiAgICAgIGhhc05vbkRlcGVuZGVudFJlbWFpbmluZyxcbiAgICAgIG5leHQ7XG5cbiAgd2hpbGUgKHB0KSB7XG4gICAgbmV4dCA9IHB0Ll9uZXh0O1xuXG4gICAgaWYgKHB0LnAgPT09IHByb3BlcnR5ICYmICFwdC5vcCB8fCBwdC5vcCA9PT0gcHJvcGVydHkpIHtcbiAgICAgIF9yZW1vdmVMaW5rZWRMaXN0SXRlbSh0aGlzLCBwdCwgXCJfcHRcIik7XG4gICAgfSBlbHNlIGlmICghcHQuZGVwKSB7XG4gICAgICBoYXNOb25EZXBlbmRlbnRSZW1haW5pbmcgPSAxO1xuICAgIH1cblxuICAgIHB0ID0gbmV4dDtcbiAgfVxuXG4gIHJldHVybiAhaGFzTm9uRGVwZW5kZW50UmVtYWluaW5nO1xufSxcbiAgICBfc2V0dGVyV2l0aE1vZGlmaWVyID0gZnVuY3Rpb24gX3NldHRlcldpdGhNb2RpZmllcih0YXJnZXQsIHByb3BlcnR5LCB2YWx1ZSwgZGF0YSkge1xuICBkYXRhLm1TZXQodGFyZ2V0LCBwcm9wZXJ0eSwgZGF0YS5tLmNhbGwoZGF0YS50d2VlbiwgdmFsdWUsIGRhdGEubXQpLCBkYXRhKTtcbn0sXG4gICAgX3NvcnRQcm9wVHdlZW5zQnlQcmlvcml0eSA9IGZ1bmN0aW9uIF9zb3J0UHJvcFR3ZWVuc0J5UHJpb3JpdHkocGFyZW50KSB7XG4gIHZhciBwdCA9IHBhcmVudC5fcHQsXG4gICAgICBuZXh0LFxuICAgICAgcHQyLFxuICAgICAgZmlyc3QsXG4gICAgICBsYXN0OyAvL3NvcnRzIHRoZSBQcm9wVHdlZW4gbGlua2VkIGxpc3QgaW4gb3JkZXIgb2YgcHJpb3JpdHkgYmVjYXVzZSBzb21lIHBsdWdpbnMgbmVlZCB0byBkbyB0aGVpciB3b3JrIGFmdGVyIEFMTCBvZiB0aGUgUHJvcFR3ZWVucyB3ZXJlIGNyZWF0ZWQgKGxpa2UgUm91bmRQcm9wc1BsdWdpbiBhbmQgTW9kaWZpZXJzUGx1Z2luKVxuXG4gIHdoaWxlIChwdCkge1xuICAgIG5leHQgPSBwdC5fbmV4dDtcbiAgICBwdDIgPSBmaXJzdDtcblxuICAgIHdoaWxlIChwdDIgJiYgcHQyLnByID4gcHQucHIpIHtcbiAgICAgIHB0MiA9IHB0Mi5fbmV4dDtcbiAgICB9XG5cbiAgICBpZiAocHQuX3ByZXYgPSBwdDIgPyBwdDIuX3ByZXYgOiBsYXN0KSB7XG4gICAgICBwdC5fcHJldi5fbmV4dCA9IHB0O1xuICAgIH0gZWxzZSB7XG4gICAgICBmaXJzdCA9IHB0O1xuICAgIH1cblxuICAgIGlmIChwdC5fbmV4dCA9IHB0Mikge1xuICAgICAgcHQyLl9wcmV2ID0gcHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3QgPSBwdDtcbiAgICB9XG5cbiAgICBwdCA9IG5leHQ7XG4gIH1cblxuICBwYXJlbnQuX3B0ID0gZmlyc3Q7XG59OyAvL1Byb3BUd2VlbiBrZXk6IHQgPSB0YXJnZXQsIHAgPSBwcm9wLCByID0gcmVuZGVyZXIsIGQgPSBkYXRhLCBzID0gc3RhcnQsIGMgPSBjaGFuZ2UsIG9wID0gb3ZlcndyaXRlUHJvcGVydHkgKE9OTFkgcG9wdWxhdGVkIHdoZW4gaXQncyBkaWZmZXJlbnQgdGhhbiBwKSwgcHIgPSBwcmlvcml0eSwgX25leHQvX3ByZXYgZm9yIHRoZSBsaW5rZWQgbGlzdCBzaWJsaW5ncywgc2V0ID0gc2V0dGVyLCBtID0gbW9kaWZpZXIsIG1TZXQgPSBtb2RpZmllclNldHRlciAodGhlIG9yaWdpbmFsIHNldHRlciwgYmVmb3JlIGEgbW9kaWZpZXIgd2FzIGFkZGVkKVxuXG5cbmV4cG9ydCB2YXIgUHJvcFR3ZWVuID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUHJvcFR3ZWVuKG5leHQsIHRhcmdldCwgcHJvcCwgc3RhcnQsIGNoYW5nZSwgcmVuZGVyZXIsIGRhdGEsIHNldHRlciwgcHJpb3JpdHkpIHtcbiAgICB0aGlzLnQgPSB0YXJnZXQ7XG4gICAgdGhpcy5zID0gc3RhcnQ7XG4gICAgdGhpcy5jID0gY2hhbmdlO1xuICAgIHRoaXMucCA9IHByb3A7XG4gICAgdGhpcy5yID0gcmVuZGVyZXIgfHwgX3JlbmRlclBsYWluO1xuICAgIHRoaXMuZCA9IGRhdGEgfHwgdGhpcztcbiAgICB0aGlzLnNldCA9IHNldHRlciB8fCBfc2V0dGVyUGxhaW47XG4gICAgdGhpcy5wciA9IHByaW9yaXR5IHx8IDA7XG4gICAgdGhpcy5fbmV4dCA9IG5leHQ7XG5cbiAgICBpZiAobmV4dCkge1xuICAgICAgbmV4dC5fcHJldiA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgdmFyIF9wcm90bzQgPSBQcm9wVHdlZW4ucHJvdG90eXBlO1xuXG4gIF9wcm90bzQubW9kaWZpZXIgPSBmdW5jdGlvbiBtb2RpZmllcihmdW5jLCB0d2VlbiwgdGFyZ2V0KSB7XG4gICAgdGhpcy5tU2V0ID0gdGhpcy5tU2V0IHx8IHRoaXMuc2V0OyAvL2luIGNhc2UgaXQgd2FzIGFscmVhZHkgc2V0IChhIFByb3BUd2VlbiBjYW4gb25seSBoYXZlIG9uZSBtb2RpZmllcilcblxuICAgIHRoaXMuc2V0ID0gX3NldHRlcldpdGhNb2RpZmllcjtcbiAgICB0aGlzLm0gPSBmdW5jO1xuICAgIHRoaXMubXQgPSB0YXJnZXQ7IC8vbW9kaWZpZXIgdGFyZ2V0XG5cbiAgICB0aGlzLnR3ZWVuID0gdHdlZW47XG4gIH07XG5cbiAgcmV0dXJuIFByb3BUd2Vlbjtcbn0oKTsgLy9Jbml0aWFsaXphdGlvbiB0YXNrc1xuXG5fZm9yRWFjaE5hbWUoX2NhbGxiYWNrTmFtZXMgKyBcInBhcmVudCxkdXJhdGlvbixlYXNlLGRlbGF5LG92ZXJ3cml0ZSxydW5CYWNrd2FyZHMsc3RhcnRBdCx5b3lvLGltbWVkaWF0ZVJlbmRlcixyZXBlYXQscmVwZWF0RGVsYXksZGF0YSxwYXVzZWQscmV2ZXJzZWQsbGF6eSxjYWxsYmFja1Njb3BlLHN0cmluZ0ZpbHRlcixpZCx5b3lvRWFzZSxzdGFnZ2VyLGluaGVyaXQscmVwZWF0UmVmcmVzaCxrZXlmcmFtZXMsYXV0b1JldmVydCxzY3JvbGxUcmlnZ2VyXCIsIGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBfcmVzZXJ2ZWRQcm9wc1tuYW1lXSA9IDE7XG59KTtcblxuX2dsb2JhbHMuVHdlZW5NYXggPSBfZ2xvYmFscy5Ud2VlbkxpdGUgPSBUd2Vlbjtcbl9nbG9iYWxzLlRpbWVsaW5lTGl0ZSA9IF9nbG9iYWxzLlRpbWVsaW5lTWF4ID0gVGltZWxpbmU7XG5fZ2xvYmFsVGltZWxpbmUgPSBuZXcgVGltZWxpbmUoe1xuICBzb3J0Q2hpbGRyZW46IGZhbHNlLFxuICBkZWZhdWx0czogX2RlZmF1bHRzLFxuICBhdXRvUmVtb3ZlQ2hpbGRyZW46IHRydWUsXG4gIGlkOiBcInJvb3RcIixcbiAgc21vb3RoQ2hpbGRUaW1pbmc6IHRydWVcbn0pO1xuX2NvbmZpZy5zdHJpbmdGaWx0ZXIgPSBfY29sb3JTdHJpbmdGaWx0ZXI7XG5cbnZhciBfbWVkaWEgPSBbXSxcbiAgICBfbGlzdGVuZXJzID0ge30sXG4gICAgX2VtcHR5QXJyYXkgPSBbXSxcbiAgICBfbGFzdE1lZGlhVGltZSA9IDAsXG4gICAgX2NvbnRleHRJRCA9IDAsXG4gICAgX2Rpc3BhdGNoID0gZnVuY3Rpb24gX2Rpc3BhdGNoKHR5cGUpIHtcbiAgcmV0dXJuIChfbGlzdGVuZXJzW3R5cGVdIHx8IF9lbXB0eUFycmF5KS5tYXAoZnVuY3Rpb24gKGYpIHtcbiAgICByZXR1cm4gZigpO1xuICB9KTtcbn0sXG4gICAgX29uTWVkaWFDaGFuZ2UgPSBmdW5jdGlvbiBfb25NZWRpYUNoYW5nZSgpIHtcbiAgdmFyIHRpbWUgPSBEYXRlLm5vdygpLFxuICAgICAgbWF0Y2hlcyA9IFtdO1xuXG4gIGlmICh0aW1lIC0gX2xhc3RNZWRpYVRpbWUgPiAyKSB7XG4gICAgX2Rpc3BhdGNoKFwibWF0Y2hNZWRpYUluaXRcIik7XG5cbiAgICBfbWVkaWEuZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgICAgdmFyIHF1ZXJpZXMgPSBjLnF1ZXJpZXMsXG4gICAgICAgICAgY29uZGl0aW9ucyA9IGMuY29uZGl0aW9ucyxcbiAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICBwLFxuICAgICAgICAgIGFueU1hdGNoLFxuICAgICAgICAgIHRvZ2dsZWQ7XG5cbiAgICAgIGZvciAocCBpbiBxdWVyaWVzKSB7XG4gICAgICAgIG1hdGNoID0gX3dpbi5tYXRjaE1lZGlhKHF1ZXJpZXNbcF0pLm1hdGNoZXM7IC8vIEZpcmVmb3ggZG9lc24ndCB1cGRhdGUgdGhlIFwibWF0Y2hlc1wiIHByb3BlcnR5IG9mIHRoZSBNZWRpYVF1ZXJ5TGlzdCBvYmplY3QgY29ycmVjdGx5IC0gaXQgb25seSBkb2VzIHNvIGFzIGl0IGNhbGxzIGl0cyBjaGFuZ2UgaGFuZGxlciAtIHNvIHdlIG11c3QgcmUtY3JlYXRlIGEgbWVkaWEgcXVlcnkgaGVyZSB0byBlbnN1cmUgaXQncyBhY2N1cmF0ZS5cblxuICAgICAgICBtYXRjaCAmJiAoYW55TWF0Y2ggPSAxKTtcblxuICAgICAgICBpZiAobWF0Y2ggIT09IGNvbmRpdGlvbnNbcF0pIHtcbiAgICAgICAgICBjb25kaXRpb25zW3BdID0gbWF0Y2g7XG4gICAgICAgICAgdG9nZ2xlZCA9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRvZ2dsZWQpIHtcbiAgICAgICAgYy5yZXZlcnQoKTtcbiAgICAgICAgYW55TWF0Y2ggJiYgbWF0Y2hlcy5wdXNoKGMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgX2Rpc3BhdGNoKFwibWF0Y2hNZWRpYVJldmVydFwiKTtcblxuICAgIG1hdGNoZXMuZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgICAgcmV0dXJuIGMub25NYXRjaChjLCBmdW5jdGlvbiAoZnVuYykge1xuICAgICAgICByZXR1cm4gYy5hZGQobnVsbCwgZnVuYyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBfbGFzdE1lZGlhVGltZSA9IHRpbWU7XG5cbiAgICBfZGlzcGF0Y2goXCJtYXRjaE1lZGlhXCIpO1xuICB9XG59O1xuXG52YXIgQ29udGV4dCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIENvbnRleHQoZnVuYywgc2NvcGUpIHtcbiAgICB0aGlzLnNlbGVjdG9yID0gc2NvcGUgJiYgc2VsZWN0b3Ioc2NvcGUpO1xuICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgIHRoaXMuX3IgPSBbXTsgLy8gcmV0dXJuZWQvY2xlYW51cCBmdW5jdGlvbnNcblxuICAgIHRoaXMuaXNSZXZlcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaWQgPSBfY29udGV4dElEKys7IC8vIHRvIHdvcmsgYXJvdW5kIGlzc3VlcyB0aGF0IGZyYW1ld29ya3MgbGlrZSBWdWUgY2F1c2UgYnkgbWFraW5nIHRoaW5ncyBpbnRvIFByb3hpZXMgd2hpY2ggbWFrZSBpdCBpbXBvc3NpYmxlIHRvIGRvIHNvbWV0aGluZyBsaWtlIF9tZWRpYS5pbmRleE9mKHRoaXMpIGJlY2F1c2UgXCJ0aGlzXCIgd291bGQgbm8gbG9uZ2VyIHJlZmVyIHRvIHRoZSBDb250ZXh0IGluc3RhbmNlIGl0c2VsZiAtIGl0J2QgcmVmZXIgdG8gYSBQcm94eSEgV2UgbmVlZGVkIGEgd2F5IHRvIGlkZW50aWZ5IHRoZSBjb250ZXh0IHVuaXF1ZWx5XG5cbiAgICBmdW5jICYmIHRoaXMuYWRkKGZ1bmMpO1xuICB9XG5cbiAgdmFyIF9wcm90bzUgPSBDb250ZXh0LnByb3RvdHlwZTtcblxuICBfcHJvdG81LmFkZCA9IGZ1bmN0aW9uIGFkZChuYW1lLCBmdW5jLCBzY29wZSkge1xuICAgIC8vIHBvc3NpYmxlIGZ1dHVyZSBhZGRpdGlvbiBpZiB3ZSBuZWVkIHRoZSBhYmlsaXR5IHRvIGFkZCgpIGFuIGFuaW1hdGlvbiB0byBhIGNvbnRleHQgYW5kIGZvciB3aGF0ZXZlciByZWFzb24gY2Fubm90IGNyZWF0ZSB0aGF0IGFuaW1hdGlvbiBpbnNpZGUgb2YgYSBjb250ZXh0LmFkZCgoKSA9PiB7Li4ufSkgZnVuY3Rpb24uXG4gICAgLy8gaWYgKG5hbWUgJiYgX2lzRnVuY3Rpb24obmFtZS5yZXZlcnQpKSB7XG4gICAgLy8gXHR0aGlzLmRhdGEucHVzaChuYW1lKTtcbiAgICAvLyBcdHJldHVybiAobmFtZS5fY3R4ID0gdGhpcyk7XG4gICAgLy8gfVxuICAgIGlmIChfaXNGdW5jdGlvbihuYW1lKSkge1xuICAgICAgc2NvcGUgPSBmdW5jO1xuICAgICAgZnVuYyA9IG5hbWU7XG4gICAgICBuYW1lID0gX2lzRnVuY3Rpb247XG4gICAgfVxuXG4gICAgdmFyIHNlbGYgPSB0aGlzLFxuICAgICAgICBmID0gZnVuY3Rpb24gZigpIHtcbiAgICAgIHZhciBwcmV2ID0gX2NvbnRleHQsXG4gICAgICAgICAgcHJldlNlbGVjdG9yID0gc2VsZi5zZWxlY3RvcixcbiAgICAgICAgICByZXN1bHQ7XG4gICAgICBwcmV2ICYmIHByZXYgIT09IHNlbGYgJiYgcHJldi5kYXRhLnB1c2goc2VsZik7XG4gICAgICBzY29wZSAmJiAoc2VsZi5zZWxlY3RvciA9IHNlbGVjdG9yKHNjb3BlKSk7XG4gICAgICBfY29udGV4dCA9IHNlbGY7XG4gICAgICByZXN1bHQgPSBmdW5jLmFwcGx5KHNlbGYsIGFyZ3VtZW50cyk7XG4gICAgICBfaXNGdW5jdGlvbihyZXN1bHQpICYmIHNlbGYuX3IucHVzaChyZXN1bHQpO1xuICAgICAgX2NvbnRleHQgPSBwcmV2O1xuICAgICAgc2VsZi5zZWxlY3RvciA9IHByZXZTZWxlY3RvcjtcbiAgICAgIHNlbGYuaXNSZXZlcnRlZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuXG4gICAgc2VsZi5sYXN0ID0gZjtcbiAgICByZXR1cm4gbmFtZSA9PT0gX2lzRnVuY3Rpb24gPyBmKHNlbGYsIGZ1bmN0aW9uIChmdW5jKSB7XG4gICAgICByZXR1cm4gc2VsZi5hZGQobnVsbCwgZnVuYyk7XG4gICAgfSkgOiBuYW1lID8gc2VsZltuYW1lXSA9IGYgOiBmO1xuICB9O1xuXG4gIF9wcm90bzUuaWdub3JlID0gZnVuY3Rpb24gaWdub3JlKGZ1bmMpIHtcbiAgICB2YXIgcHJldiA9IF9jb250ZXh0O1xuICAgIF9jb250ZXh0ID0gbnVsbDtcbiAgICBmdW5jKHRoaXMpO1xuICAgIF9jb250ZXh0ID0gcHJldjtcbiAgfTtcblxuICBfcHJvdG81LmdldFR3ZWVucyA9IGZ1bmN0aW9uIGdldFR3ZWVucygpIHtcbiAgICB2YXIgYSA9IFtdO1xuICAgIHRoaXMuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gZSBpbnN0YW5jZW9mIENvbnRleHQgPyBhLnB1c2guYXBwbHkoYSwgZS5nZXRUd2VlbnMoKSkgOiBlIGluc3RhbmNlb2YgVHdlZW4gJiYgIShlLnBhcmVudCAmJiBlLnBhcmVudC5kYXRhID09PSBcIm5lc3RlZFwiKSAmJiBhLnB1c2goZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGE7XG4gIH07XG5cbiAgX3Byb3RvNS5jbGVhciA9IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIHRoaXMuX3IubGVuZ3RoID0gdGhpcy5kYXRhLmxlbmd0aCA9IDA7XG4gIH07XG5cbiAgX3Byb3RvNS5raWxsID0gZnVuY3Rpb24ga2lsbChyZXZlcnQsIG1hdGNoTWVkaWEpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIGlmIChyZXZlcnQpIHtcbiAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0d2VlbnMgPSBfdGhpczQuZ2V0VHdlZW5zKCksXG4gICAgICAgICAgICBpID0gX3RoaXM0LmRhdGEubGVuZ3RoLFxuICAgICAgICAgICAgdDtcblxuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgLy8gRmxpcCBwbHVnaW4gdHdlZW5zIGFyZSB2ZXJ5IGRpZmZlcmVudCBpbiB0aGF0IHRoZXkgc2hvdWxkIGFjdHVhbGx5IGJlIHB1c2hlZCB0byB0aGVpciBlbmQuIFRoZSBwbHVnaW4gcmVwbGFjZXMgdGhlIHRpbWVsaW5lJ3MgLnJldmVydCgpIG1ldGhvZCB0byBkbyBleGFjdGx5IHRoYXQuIEJ1dCB3ZSBhbHNvIG5lZWQgdG8gcmVtb3ZlIGFueSBvZiB0aG9zZSBuZXN0ZWQgdHdlZW5zIGluc2lkZSB0aGUgZmxpcCB0aW1lbGluZSBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluZGl2aWR1YWxseSByZXZlcnRlZC5cbiAgICAgICAgICB0ID0gX3RoaXM0LmRhdGFbaV07XG5cbiAgICAgICAgICBpZiAodC5kYXRhID09PSBcImlzRmxpcFwiKSB7XG4gICAgICAgICAgICB0LnJldmVydCgpO1xuICAgICAgICAgICAgdC5nZXRDaGlsZHJlbih0cnVlLCB0cnVlLCBmYWxzZSkuZm9yRWFjaChmdW5jdGlvbiAodHdlZW4pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHR3ZWVucy5zcGxpY2UodHdlZW5zLmluZGV4T2YodHdlZW4pLCAxKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBzYXZlIGFzIGFuIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBjYWNoZSB0aGUgZ2xvYmFsVGltZSBmb3IgZWFjaCB0d2VlbiB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBkdXJpbmcgdGhlIHNvcnRcblxuXG4gICAgICAgIHR3ZWVucy5tYXAoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZzogdC5fZHVyIHx8IHQuX2RlbGF5IHx8IHQuX3NhdCAmJiAhdC5fc2F0LnZhcnMuaW1tZWRpYXRlUmVuZGVyID8gdC5nbG9iYWxUaW1lKDApIDogLUluZmluaXR5LFxuICAgICAgICAgICAgdDogdFxuICAgICAgICAgIH07XG4gICAgICAgIH0pLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICByZXR1cm4gYi5nIC0gYS5nIHx8IC1JbmZpbml0eTtcbiAgICAgICAgfSkuZm9yRWFjaChmdW5jdGlvbiAobykge1xuICAgICAgICAgIHJldHVybiBvLnQucmV2ZXJ0KHJldmVydCk7XG4gICAgICAgIH0pOyAvLyBub3RlOiBhbGwgb2YgdGhlIF9zdGFydEF0IHR3ZWVucyBzaG91bGQgYmUgcmV2ZXJ0ZWQgaW4gcmV2ZXJzZSBvcmRlciB0aGF0IHRoZXkgd2VyZSBjcmVhdGVkLCBhbmQgdGhleSdsbCBhbGwgaGF2ZSB0aGUgc2FtZSBnbG9iYWxUaW1lICgtMSkgc28gdGhlIFwiIHx8IC0xXCIgaW4gdGhlIHNvcnQga2VlcHMgdGhlIG9yZGVyIHByb3Blcmx5LlxuXG4gICAgICAgIGkgPSBfdGhpczQuZGF0YS5sZW5ndGg7XG5cbiAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBsb29wIGJhY2t3YXJkcyBzbyB0aGF0LCBmb3IgZXhhbXBsZSwgU3BsaXRUZXh0cyB0aGF0IHdlcmUgY3JlYXRlZCBsYXRlciBvbiB0aGUgc2FtZSBlbGVtZW50IGdldCByZXZlcnRlZCBmaXJzdFxuICAgICAgICAgIHQgPSBfdGhpczQuZGF0YVtpXTtcblxuICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgVGltZWxpbmUpIHtcbiAgICAgICAgICAgIGlmICh0LmRhdGEgIT09IFwibmVzdGVkXCIpIHtcbiAgICAgICAgICAgICAgdC5zY3JvbGxUcmlnZ2VyICYmIHQuc2Nyb2xsVHJpZ2dlci5yZXZlcnQoKTtcbiAgICAgICAgICAgICAgdC5raWxsKCk7IC8vIGRvbid0IHJldmVydCgpIHRoZSB0aW1lbGluZSBiZWNhdXNlIHRoYXQncyBkdXBsaWNhdGluZyBlZmZvcnRzIHNpbmNlIHdlIGFscmVhZHkgcmV2ZXJ0ZWQgYWxsIHRoZSB0d2VlbnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgISh0IGluc3RhbmNlb2YgVHdlZW4pICYmIHQucmV2ZXJ0ICYmIHQucmV2ZXJ0KHJldmVydCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXM0Ll9yLmZvckVhY2goZnVuY3Rpb24gKGYpIHtcbiAgICAgICAgICByZXR1cm4gZihyZXZlcnQsIF90aGlzNCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIF90aGlzNC5pc1JldmVydGVkID0gdHJ1ZTtcbiAgICAgIH0pKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBlLmtpbGwgJiYgZS5raWxsKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNsZWFyKCk7XG5cbiAgICBpZiAobWF0Y2hNZWRpYSkge1xuICAgICAgdmFyIGkgPSBfbWVkaWEubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgIC8vIHByZXZpb3VzbHksIHdlIGNoZWNrZWQgX21lZGlhLmluZGV4T2YodGhpcyksIGJ1dCBzb21lIGZyYW1ld29ya3MgbGlrZSBWdWUgZW5mb3JjZSBQcm94eSBvYmplY3RzIHRoYXQgbWFrZSBpdCBpbXBvc3NpYmxlIHRvIGdldCB0aGUgcHJvcGVyIHJlc3VsdCB0aGF0IHdheSwgc28gd2UgbXVzdCB1c2UgYSB1bmlxdWUgSUQgbnVtYmVyIGluc3RlYWQuXG4gICAgICAgIF9tZWRpYVtpXS5pZCA9PT0gdGhpcy5pZCAmJiBfbWVkaWEuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBraWxsV2l0aENsZWFudXAoKSB7XG4gIC8vIFx0dGhpcy5raWxsKCk7XG4gIC8vIFx0dGhpcy5fci5mb3JFYWNoKGYgPT4gZihmYWxzZSwgdGhpcykpO1xuICAvLyB9XG4gIDtcblxuICBfcHJvdG81LnJldmVydCA9IGZ1bmN0aW9uIHJldmVydChjb25maWcpIHtcbiAgICB0aGlzLmtpbGwoY29uZmlnIHx8IHt9KTtcbiAgfTtcblxuICByZXR1cm4gQ29udGV4dDtcbn0oKTtcblxudmFyIE1hdGNoTWVkaWEgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBNYXRjaE1lZGlhKHNjb3BlKSB7XG4gICAgdGhpcy5jb250ZXh0cyA9IFtdO1xuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICBfY29udGV4dCAmJiBfY29udGV4dC5kYXRhLnB1c2godGhpcyk7XG4gIH1cblxuICB2YXIgX3Byb3RvNiA9IE1hdGNoTWVkaWEucHJvdG90eXBlO1xuXG4gIF9wcm90bzYuYWRkID0gZnVuY3Rpb24gYWRkKGNvbmRpdGlvbnMsIGZ1bmMsIHNjb3BlKSB7XG4gICAgX2lzT2JqZWN0KGNvbmRpdGlvbnMpIHx8IChjb25kaXRpb25zID0ge1xuICAgICAgbWF0Y2hlczogY29uZGl0aW9uc1xuICAgIH0pO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQoMCwgc2NvcGUgfHwgdGhpcy5zY29wZSksXG4gICAgICAgIGNvbmQgPSBjb250ZXh0LmNvbmRpdGlvbnMgPSB7fSxcbiAgICAgICAgbXEsXG4gICAgICAgIHAsXG4gICAgICAgIGFjdGl2ZTtcbiAgICBfY29udGV4dCAmJiAhY29udGV4dC5zZWxlY3RvciAmJiAoY29udGV4dC5zZWxlY3RvciA9IF9jb250ZXh0LnNlbGVjdG9yKTsgLy8gaW4gY2FzZSBhIGNvbnRleHQgaXMgY3JlYXRlZCBpbnNpZGUgYSBjb250ZXh0LiBMaWtlIGEgZ3NhcC5tYXRjaE1lZGlhKCkgdGhhdCdzIGluc2lkZSBhIHNjb3BlZCBnc2FwLmNvbnRleHQoKVxuXG4gICAgdGhpcy5jb250ZXh0cy5wdXNoKGNvbnRleHQpO1xuICAgIGZ1bmMgPSBjb250ZXh0LmFkZChcIm9uTWF0Y2hcIiwgZnVuYyk7XG4gICAgY29udGV4dC5xdWVyaWVzID0gY29uZGl0aW9ucztcblxuICAgIGZvciAocCBpbiBjb25kaXRpb25zKSB7XG4gICAgICBpZiAocCA9PT0gXCJhbGxcIikge1xuICAgICAgICBhY3RpdmUgPSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXEgPSBfd2luLm1hdGNoTWVkaWEoY29uZGl0aW9uc1twXSk7XG5cbiAgICAgICAgaWYgKG1xKSB7XG4gICAgICAgICAgX21lZGlhLmluZGV4T2YoY29udGV4dCkgPCAwICYmIF9tZWRpYS5wdXNoKGNvbnRleHQpO1xuICAgICAgICAgIChjb25kW3BdID0gbXEubWF0Y2hlcykgJiYgKGFjdGl2ZSA9IDEpO1xuICAgICAgICAgIG1xLmFkZExpc3RlbmVyID8gbXEuYWRkTGlzdGVuZXIoX29uTWVkaWFDaGFuZ2UpIDogbXEuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBfb25NZWRpYUNoYW5nZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBhY3RpdmUgJiYgZnVuYyhjb250ZXh0LCBmdW5jdGlvbiAoZikge1xuICAgICAgcmV0dXJuIGNvbnRleHQuYWRkKG51bGwsIGYpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9IC8vIHJlZnJlc2goKSB7XG4gIC8vIFx0bGV0IHRpbWUgPSBfbGFzdE1lZGlhVGltZSxcbiAgLy8gXHRcdG1lZGlhID0gX21lZGlhO1xuICAvLyBcdF9sYXN0TWVkaWFUaW1lID0gLTE7XG4gIC8vIFx0X21lZGlhID0gdGhpcy5jb250ZXh0cztcbiAgLy8gXHRfb25NZWRpYUNoYW5nZSgpO1xuICAvLyBcdF9sYXN0TWVkaWFUaW1lID0gdGltZTtcbiAgLy8gXHRfbWVkaWEgPSBtZWRpYTtcbiAgLy8gfVxuICA7XG5cbiAgX3Byb3RvNi5yZXZlcnQgPSBmdW5jdGlvbiByZXZlcnQoY29uZmlnKSB7XG4gICAgdGhpcy5raWxsKGNvbmZpZyB8fCB7fSk7XG4gIH07XG5cbiAgX3Byb3RvNi5raWxsID0gZnVuY3Rpb24ga2lsbChyZXZlcnQpIHtcbiAgICB0aGlzLmNvbnRleHRzLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICAgIHJldHVybiBjLmtpbGwocmV2ZXJ0LCB0cnVlKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gTWF0Y2hNZWRpYTtcbn0oKTtcbi8qXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogR1NBUFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbnZhciBfZ3NhcCA9IHtcbiAgcmVnaXN0ZXJQbHVnaW46IGZ1bmN0aW9uIHJlZ2lzdGVyUGx1Z2luKCkge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIGFyZ3MuZm9yRWFjaChmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICByZXR1cm4gX2NyZWF0ZVBsdWdpbihjb25maWcpO1xuICAgIH0pO1xuICB9LFxuICB0aW1lbGluZTogZnVuY3Rpb24gdGltZWxpbmUodmFycykge1xuICAgIHJldHVybiBuZXcgVGltZWxpbmUodmFycyk7XG4gIH0sXG4gIGdldFR3ZWVuc09mOiBmdW5jdGlvbiBnZXRUd2VlbnNPZih0YXJnZXRzLCBvbmx5QWN0aXZlKSB7XG4gICAgcmV0dXJuIF9nbG9iYWxUaW1lbGluZS5nZXRUd2VlbnNPZih0YXJnZXRzLCBvbmx5QWN0aXZlKTtcbiAgfSxcbiAgZ2V0UHJvcGVydHk6IGZ1bmN0aW9uIGdldFByb3BlcnR5KHRhcmdldCwgcHJvcGVydHksIHVuaXQsIHVuY2FjaGUpIHtcbiAgICBfaXNTdHJpbmcodGFyZ2V0KSAmJiAodGFyZ2V0ID0gdG9BcnJheSh0YXJnZXQpWzBdKTsgLy9pbiBjYXNlIHNlbGVjdG9yIHRleHQgb3IgYW4gYXJyYXkgaXMgcGFzc2VkIGluXG5cbiAgICB2YXIgZ2V0dGVyID0gX2dldENhY2hlKHRhcmdldCB8fCB7fSkuZ2V0LFxuICAgICAgICBmb3JtYXQgPSB1bml0ID8gX3Bhc3NUaHJvdWdoIDogX251bWVyaWNJZlBvc3NpYmxlO1xuXG4gICAgdW5pdCA9PT0gXCJuYXRpdmVcIiAmJiAodW5pdCA9IFwiXCIpO1xuICAgIHJldHVybiAhdGFyZ2V0ID8gdGFyZ2V0IDogIXByb3BlcnR5ID8gZnVuY3Rpb24gKHByb3BlcnR5LCB1bml0LCB1bmNhY2hlKSB7XG4gICAgICByZXR1cm4gZm9ybWF0KChfcGx1Z2luc1twcm9wZXJ0eV0gJiYgX3BsdWdpbnNbcHJvcGVydHldLmdldCB8fCBnZXR0ZXIpKHRhcmdldCwgcHJvcGVydHksIHVuaXQsIHVuY2FjaGUpKTtcbiAgICB9IDogZm9ybWF0KChfcGx1Z2luc1twcm9wZXJ0eV0gJiYgX3BsdWdpbnNbcHJvcGVydHldLmdldCB8fCBnZXR0ZXIpKHRhcmdldCwgcHJvcGVydHksIHVuaXQsIHVuY2FjaGUpKTtcbiAgfSxcbiAgcXVpY2tTZXR0ZXI6IGZ1bmN0aW9uIHF1aWNrU2V0dGVyKHRhcmdldCwgcHJvcGVydHksIHVuaXQpIHtcbiAgICB0YXJnZXQgPSB0b0FycmF5KHRhcmdldCk7XG5cbiAgICBpZiAodGFyZ2V0Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHZhciBzZXR0ZXJzID0gdGFyZ2V0Lm1hcChmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gZ3NhcC5xdWlja1NldHRlcih0LCBwcm9wZXJ0eSwgdW5pdCk7XG4gICAgICB9KSxcbiAgICAgICAgICBsID0gc2V0dGVycy5sZW5ndGg7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBpID0gbDtcblxuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgc2V0dGVyc1tpXSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGFyZ2V0ID0gdGFyZ2V0WzBdIHx8IHt9O1xuXG4gICAgdmFyIFBsdWdpbiA9IF9wbHVnaW5zW3Byb3BlcnR5XSxcbiAgICAgICAgY2FjaGUgPSBfZ2V0Q2FjaGUodGFyZ2V0KSxcbiAgICAgICAgcCA9IGNhY2hlLmhhcm5lc3MgJiYgKGNhY2hlLmhhcm5lc3MuYWxpYXNlcyB8fCB7fSlbcHJvcGVydHldIHx8IHByb3BlcnR5LFxuICAgICAgICAvLyBpbiBjYXNlIGl0J3MgYW4gYWxpYXMsIGxpa2UgXCJyb3RhdGVcIiBmb3IgXCJyb3RhdGlvblwiLlxuICAgIHNldHRlciA9IFBsdWdpbiA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyIHAgPSBuZXcgUGx1Z2luKCk7XG4gICAgICBfcXVpY2tUd2Vlbi5fcHQgPSAwO1xuICAgICAgcC5pbml0KHRhcmdldCwgdW5pdCA/IHZhbHVlICsgdW5pdCA6IHZhbHVlLCBfcXVpY2tUd2VlbiwgMCwgW3RhcmdldF0pO1xuICAgICAgcC5yZW5kZXIoMSwgcCk7XG4gICAgICBfcXVpY2tUd2Vlbi5fcHQgJiYgX3JlbmRlclByb3BUd2VlbnMoMSwgX3F1aWNrVHdlZW4pO1xuICAgIH0gOiBjYWNoZS5zZXQodGFyZ2V0LCBwKTtcblxuICAgIHJldHVybiBQbHVnaW4gPyBzZXR0ZXIgOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBzZXR0ZXIodGFyZ2V0LCBwLCB1bml0ID8gdmFsdWUgKyB1bml0IDogdmFsdWUsIGNhY2hlLCAxKTtcbiAgICB9O1xuICB9LFxuICBxdWlja1RvOiBmdW5jdGlvbiBxdWlja1RvKHRhcmdldCwgcHJvcGVydHksIHZhcnMpIHtcbiAgICB2YXIgX3NldERlZmF1bHRzMjtcblxuICAgIHZhciB0d2VlbiA9IGdzYXAudG8odGFyZ2V0LCBfc2V0RGVmYXVsdHMoKF9zZXREZWZhdWx0czIgPSB7fSwgX3NldERlZmF1bHRzMltwcm9wZXJ0eV0gPSBcIis9MC4xXCIsIF9zZXREZWZhdWx0czIucGF1c2VkID0gdHJ1ZSwgX3NldERlZmF1bHRzMi5zdGFnZ2VyID0gMCwgX3NldERlZmF1bHRzMiksIHZhcnMgfHwge30pKSxcbiAgICAgICAgZnVuYyA9IGZ1bmN0aW9uIGZ1bmModmFsdWUsIHN0YXJ0LCBzdGFydElzUmVsYXRpdmUpIHtcbiAgICAgIHJldHVybiB0d2Vlbi5yZXNldFRvKHByb3BlcnR5LCB2YWx1ZSwgc3RhcnQsIHN0YXJ0SXNSZWxhdGl2ZSk7XG4gICAgfTtcblxuICAgIGZ1bmMudHdlZW4gPSB0d2VlbjtcbiAgICByZXR1cm4gZnVuYztcbiAgfSxcbiAgaXNUd2VlbmluZzogZnVuY3Rpb24gaXNUd2VlbmluZyh0YXJnZXRzKSB7XG4gICAgcmV0dXJuIF9nbG9iYWxUaW1lbGluZS5nZXRUd2VlbnNPZih0YXJnZXRzLCB0cnVlKS5sZW5ndGggPiAwO1xuICB9LFxuICBkZWZhdWx0czogZnVuY3Rpb24gZGVmYXVsdHModmFsdWUpIHtcbiAgICB2YWx1ZSAmJiB2YWx1ZS5lYXNlICYmICh2YWx1ZS5lYXNlID0gX3BhcnNlRWFzZSh2YWx1ZS5lYXNlLCBfZGVmYXVsdHMuZWFzZSkpO1xuICAgIHJldHVybiBfbWVyZ2VEZWVwKF9kZWZhdWx0cywgdmFsdWUgfHwge30pO1xuICB9LFxuICBjb25maWc6IGZ1bmN0aW9uIGNvbmZpZyh2YWx1ZSkge1xuICAgIHJldHVybiBfbWVyZ2VEZWVwKF9jb25maWcsIHZhbHVlIHx8IHt9KTtcbiAgfSxcbiAgcmVnaXN0ZXJFZmZlY3Q6IGZ1bmN0aW9uIHJlZ2lzdGVyRWZmZWN0KF9yZWYzKSB7XG4gICAgdmFyIG5hbWUgPSBfcmVmMy5uYW1lLFxuICAgICAgICBlZmZlY3QgPSBfcmVmMy5lZmZlY3QsXG4gICAgICAgIHBsdWdpbnMgPSBfcmVmMy5wbHVnaW5zLFxuICAgICAgICBkZWZhdWx0cyA9IF9yZWYzLmRlZmF1bHRzLFxuICAgICAgICBleHRlbmRUaW1lbGluZSA9IF9yZWYzLmV4dGVuZFRpbWVsaW5lO1xuICAgIChwbHVnaW5zIHx8IFwiXCIpLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChwbHVnaW5OYW1lKSB7XG4gICAgICByZXR1cm4gcGx1Z2luTmFtZSAmJiAhX3BsdWdpbnNbcGx1Z2luTmFtZV0gJiYgIV9nbG9iYWxzW3BsdWdpbk5hbWVdICYmIF93YXJuKG5hbWUgKyBcIiBlZmZlY3QgcmVxdWlyZXMgXCIgKyBwbHVnaW5OYW1lICsgXCIgcGx1Z2luLlwiKTtcbiAgICB9KTtcblxuICAgIF9lZmZlY3RzW25hbWVdID0gZnVuY3Rpb24gKHRhcmdldHMsIHZhcnMsIHRsKSB7XG4gICAgICByZXR1cm4gZWZmZWN0KHRvQXJyYXkodGFyZ2V0cyksIF9zZXREZWZhdWx0cyh2YXJzIHx8IHt9LCBkZWZhdWx0cyksIHRsKTtcbiAgICB9O1xuXG4gICAgaWYgKGV4dGVuZFRpbWVsaW5lKSB7XG4gICAgICBUaW1lbGluZS5wcm90b3R5cGVbbmFtZV0gPSBmdW5jdGlvbiAodGFyZ2V0cywgdmFycywgcG9zaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkKF9lZmZlY3RzW25hbWVdKHRhcmdldHMsIF9pc09iamVjdCh2YXJzKSA/IHZhcnMgOiAocG9zaXRpb24gPSB2YXJzKSAmJiB7fSwgdGhpcyksIHBvc2l0aW9uKTtcbiAgICAgIH07XG4gICAgfVxuICB9LFxuICByZWdpc3RlckVhc2U6IGZ1bmN0aW9uIHJlZ2lzdGVyRWFzZShuYW1lLCBlYXNlKSB7XG4gICAgX2Vhc2VNYXBbbmFtZV0gPSBfcGFyc2VFYXNlKGVhc2UpO1xuICB9LFxuICBwYXJzZUVhc2U6IGZ1bmN0aW9uIHBhcnNlRWFzZShlYXNlLCBkZWZhdWx0RWFzZSkge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gX3BhcnNlRWFzZShlYXNlLCBkZWZhdWx0RWFzZSkgOiBfZWFzZU1hcDtcbiAgfSxcbiAgZ2V0QnlJZDogZnVuY3Rpb24gZ2V0QnlJZChpZCkge1xuICAgIHJldHVybiBfZ2xvYmFsVGltZWxpbmUuZ2V0QnlJZChpZCk7XG4gIH0sXG4gIGV4cG9ydFJvb3Q6IGZ1bmN0aW9uIGV4cG9ydFJvb3QodmFycywgaW5jbHVkZURlbGF5ZWRDYWxscykge1xuICAgIGlmICh2YXJzID09PSB2b2lkIDApIHtcbiAgICAgIHZhcnMgPSB7fTtcbiAgICB9XG5cbiAgICB2YXIgdGwgPSBuZXcgVGltZWxpbmUodmFycyksXG4gICAgICAgIGNoaWxkLFxuICAgICAgICBuZXh0O1xuICAgIHRsLnNtb290aENoaWxkVGltaW5nID0gX2lzTm90RmFsc2UodmFycy5zbW9vdGhDaGlsZFRpbWluZyk7XG5cbiAgICBfZ2xvYmFsVGltZWxpbmUucmVtb3ZlKHRsKTtcblxuICAgIHRsLl9kcCA9IDA7IC8vb3RoZXJ3aXNlIGl0J2xsIGdldCByZS1hY3RpdmF0ZWQgd2hlbiBhZGRpbmcgY2hpbGRyZW4gYW5kIGJlIHJlLWludHJvZHVjZWQgaW50byBfZ2xvYmFsVGltZWxpbmUncyBsaW5rZWQgbGlzdCAodGhlbiBhZGRlZCB0byBpdHNlbGYpLlxuXG4gICAgdGwuX3RpbWUgPSB0bC5fdFRpbWUgPSBfZ2xvYmFsVGltZWxpbmUuX3RpbWU7XG4gICAgY2hpbGQgPSBfZ2xvYmFsVGltZWxpbmUuX2ZpcnN0O1xuXG4gICAgd2hpbGUgKGNoaWxkKSB7XG4gICAgICBuZXh0ID0gY2hpbGQuX25leHQ7XG5cbiAgICAgIGlmIChpbmNsdWRlRGVsYXllZENhbGxzIHx8ICEoIWNoaWxkLl9kdXIgJiYgY2hpbGQgaW5zdGFuY2VvZiBUd2VlbiAmJiBjaGlsZC52YXJzLm9uQ29tcGxldGUgPT09IGNoaWxkLl90YXJnZXRzWzBdKSkge1xuICAgICAgICBfYWRkVG9UaW1lbGluZSh0bCwgY2hpbGQsIGNoaWxkLl9zdGFydCAtIGNoaWxkLl9kZWxheSk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkID0gbmV4dDtcbiAgICB9XG5cbiAgICBfYWRkVG9UaW1lbGluZShfZ2xvYmFsVGltZWxpbmUsIHRsLCAwKTtcblxuICAgIHJldHVybiB0bDtcbiAgfSxcbiAgY29udGV4dDogZnVuY3Rpb24gY29udGV4dChmdW5jLCBzY29wZSkge1xuICAgIHJldHVybiBmdW5jID8gbmV3IENvbnRleHQoZnVuYywgc2NvcGUpIDogX2NvbnRleHQ7XG4gIH0sXG4gIG1hdGNoTWVkaWE6IGZ1bmN0aW9uIG1hdGNoTWVkaWEoc2NvcGUpIHtcbiAgICByZXR1cm4gbmV3IE1hdGNoTWVkaWEoc2NvcGUpO1xuICB9LFxuICBtYXRjaE1lZGlhUmVmcmVzaDogZnVuY3Rpb24gbWF0Y2hNZWRpYVJlZnJlc2goKSB7XG4gICAgcmV0dXJuIF9tZWRpYS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgICB2YXIgY29uZCA9IGMuY29uZGl0aW9ucyxcbiAgICAgICAgICBmb3VuZCxcbiAgICAgICAgICBwO1xuXG4gICAgICBmb3IgKHAgaW4gY29uZCkge1xuICAgICAgICBpZiAoY29uZFtwXSkge1xuICAgICAgICAgIGNvbmRbcF0gPSBmYWxzZTtcbiAgICAgICAgICBmb3VuZCA9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm91bmQgJiYgYy5yZXZlcnQoKTtcbiAgICB9KSB8fCBfb25NZWRpYUNoYW5nZSgpO1xuICB9LFxuICBhZGRFdmVudExpc3RlbmVyOiBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGEgPSBfbGlzdGVuZXJzW3R5cGVdIHx8IChfbGlzdGVuZXJzW3R5cGVdID0gW10pO1xuICAgIH5hLmluZGV4T2YoY2FsbGJhY2spIHx8IGEucHVzaChjYWxsYmFjayk7XG4gIH0sXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgYSA9IF9saXN0ZW5lcnNbdHlwZV0sXG4gICAgICAgIGkgPSBhICYmIGEuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgaSA+PSAwICYmIGEuc3BsaWNlKGksIDEpO1xuICB9LFxuICB1dGlsczoge1xuICAgIHdyYXA6IHdyYXAsXG4gICAgd3JhcFlveW86IHdyYXBZb3lvLFxuICAgIGRpc3RyaWJ1dGU6IGRpc3RyaWJ1dGUsXG4gICAgcmFuZG9tOiByYW5kb20sXG4gICAgc25hcDogc25hcCxcbiAgICBub3JtYWxpemU6IG5vcm1hbGl6ZSxcbiAgICBnZXRVbml0OiBnZXRVbml0LFxuICAgIGNsYW1wOiBjbGFtcCxcbiAgICBzcGxpdENvbG9yOiBzcGxpdENvbG9yLFxuICAgIHRvQXJyYXk6IHRvQXJyYXksXG4gICAgc2VsZWN0b3I6IHNlbGVjdG9yLFxuICAgIG1hcFJhbmdlOiBtYXBSYW5nZSxcbiAgICBwaXBlOiBwaXBlLFxuICAgIHVuaXRpemU6IHVuaXRpemUsXG4gICAgaW50ZXJwb2xhdGU6IGludGVycG9sYXRlLFxuICAgIHNodWZmbGU6IHNodWZmbGVcbiAgfSxcbiAgaW5zdGFsbDogX2luc3RhbGwsXG4gIGVmZmVjdHM6IF9lZmZlY3RzLFxuICB0aWNrZXI6IF90aWNrZXIsXG4gIHVwZGF0ZVJvb3Q6IFRpbWVsaW5lLnVwZGF0ZVJvb3QsXG4gIHBsdWdpbnM6IF9wbHVnaW5zLFxuICBnbG9iYWxUaW1lbGluZTogX2dsb2JhbFRpbWVsaW5lLFxuICBjb3JlOiB7XG4gICAgUHJvcFR3ZWVuOiBQcm9wVHdlZW4sXG4gICAgZ2xvYmFsczogX2FkZEdsb2JhbCxcbiAgICBUd2VlbjogVHdlZW4sXG4gICAgVGltZWxpbmU6IFRpbWVsaW5lLFxuICAgIEFuaW1hdGlvbjogQW5pbWF0aW9uLFxuICAgIGdldENhY2hlOiBfZ2V0Q2FjaGUsXG4gICAgX3JlbW92ZUxpbmtlZExpc3RJdGVtOiBfcmVtb3ZlTGlua2VkTGlzdEl0ZW0sXG4gICAgcmV2ZXJ0aW5nOiBmdW5jdGlvbiByZXZlcnRpbmcoKSB7XG4gICAgICByZXR1cm4gX3JldmVydGluZztcbiAgICB9LFxuICAgIGNvbnRleHQ6IGZ1bmN0aW9uIGNvbnRleHQodG9BZGQpIHtcbiAgICAgIGlmICh0b0FkZCAmJiBfY29udGV4dCkge1xuICAgICAgICBfY29udGV4dC5kYXRhLnB1c2godG9BZGQpO1xuXG4gICAgICAgIHRvQWRkLl9jdHggPSBfY29udGV4dDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9jb250ZXh0O1xuICAgIH0sXG4gICAgc3VwcHJlc3NPdmVyd3JpdGVzOiBmdW5jdGlvbiBzdXBwcmVzc092ZXJ3cml0ZXModmFsdWUpIHtcbiAgICAgIHJldHVybiBfc3VwcHJlc3NPdmVyd3JpdGVzID0gdmFsdWU7XG4gICAgfVxuICB9XG59O1xuXG5fZm9yRWFjaE5hbWUoXCJ0byxmcm9tLGZyb21UbyxkZWxheWVkQ2FsbCxzZXQsa2lsbFR3ZWVuc09mXCIsIGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBfZ3NhcFtuYW1lXSA9IFR3ZWVuW25hbWVdO1xufSk7XG5cbl90aWNrZXIuYWRkKFRpbWVsaW5lLnVwZGF0ZVJvb3QpO1xuXG5fcXVpY2tUd2VlbiA9IF9nc2FwLnRvKHt9LCB7XG4gIGR1cmF0aW9uOiAwXG59KTsgLy8gLS0tLSBFWFRSQSBQTFVHSU5TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnZhciBfZ2V0UGx1Z2luUHJvcFR3ZWVuID0gZnVuY3Rpb24gX2dldFBsdWdpblByb3BUd2VlbihwbHVnaW4sIHByb3ApIHtcbiAgdmFyIHB0ID0gcGx1Z2luLl9wdDtcblxuICB3aGlsZSAocHQgJiYgcHQucCAhPT0gcHJvcCAmJiBwdC5vcCAhPT0gcHJvcCAmJiBwdC5mcCAhPT0gcHJvcCkge1xuICAgIHB0ID0gcHQuX25leHQ7XG4gIH1cblxuICByZXR1cm4gcHQ7XG59LFxuICAgIF9hZGRNb2RpZmllcnMgPSBmdW5jdGlvbiBfYWRkTW9kaWZpZXJzKHR3ZWVuLCBtb2RpZmllcnMpIHtcbiAgdmFyIHRhcmdldHMgPSB0d2Vlbi5fdGFyZ2V0cyxcbiAgICAgIHAsXG4gICAgICBpLFxuICAgICAgcHQ7XG5cbiAgZm9yIChwIGluIG1vZGlmaWVycykge1xuICAgIGkgPSB0YXJnZXRzLmxlbmd0aDtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHB0ID0gdHdlZW4uX3B0TG9va3VwW2ldW3BdO1xuXG4gICAgICBpZiAocHQgJiYgKHB0ID0gcHQuZCkpIHtcbiAgICAgICAgaWYgKHB0Ll9wdCkge1xuICAgICAgICAgIC8vIGlzIGEgcGx1Z2luXG4gICAgICAgICAgcHQgPSBfZ2V0UGx1Z2luUHJvcFR3ZWVuKHB0LCBwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB0ICYmIHB0Lm1vZGlmaWVyICYmIHB0Lm1vZGlmaWVyKG1vZGlmaWVyc1twXSwgdHdlZW4sIHRhcmdldHNbaV0sIHApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSxcbiAgICBfYnVpbGRNb2RpZmllclBsdWdpbiA9IGZ1bmN0aW9uIF9idWlsZE1vZGlmaWVyUGx1Z2luKG5hbWUsIG1vZGlmaWVyKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSxcbiAgICByYXdWYXJzOiAxLFxuICAgIC8vZG9uJ3QgcHJlLXByb2Nlc3MgZnVuY3Rpb24tYmFzZWQgdmFsdWVzIG9yIFwicmFuZG9tKClcIiBzdHJpbmdzLlxuICAgIGluaXQ6IGZ1bmN0aW9uIGluaXQodGFyZ2V0LCB2YXJzLCB0d2Vlbikge1xuICAgICAgdHdlZW4uX29uSW5pdCA9IGZ1bmN0aW9uICh0d2Vlbikge1xuICAgICAgICB2YXIgdGVtcCwgcDtcblxuICAgICAgICBpZiAoX2lzU3RyaW5nKHZhcnMpKSB7XG4gICAgICAgICAgdGVtcCA9IHt9O1xuXG4gICAgICAgICAgX2ZvckVhY2hOYW1lKHZhcnMsIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGVtcFtuYW1lXSA9IDE7XG4gICAgICAgICAgfSk7IC8vaWYgdGhlIHVzZXIgcGFzc2VzIGluIGEgY29tbWEtZGVsaW1pdGVkIGxpc3Qgb2YgcHJvcGVydHkgbmFtZXMgdG8gcm91bmRQcm9wcywgbGlrZSBcIngseVwiLCB3ZSByb3VuZCB0byB3aG9sZSBudW1iZXJzLlxuXG5cbiAgICAgICAgICB2YXJzID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RpZmllcikge1xuICAgICAgICAgIHRlbXAgPSB7fTtcblxuICAgICAgICAgIGZvciAocCBpbiB2YXJzKSB7XG4gICAgICAgICAgICB0ZW1wW3BdID0gbW9kaWZpZXIodmFyc1twXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFycyA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICBfYWRkTW9kaWZpZXJzKHR3ZWVuLCB2YXJzKTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xufTsgLy9yZWdpc3RlciBjb3JlIHBsdWdpbnNcblxuXG5leHBvcnQgdmFyIGdzYXAgPSBfZ3NhcC5yZWdpc3RlclBsdWdpbih7XG4gIG5hbWU6IFwiYXR0clwiLFxuICBpbml0OiBmdW5jdGlvbiBpbml0KHRhcmdldCwgdmFycywgdHdlZW4sIGluZGV4LCB0YXJnZXRzKSB7XG4gICAgdmFyIHAsIHB0LCB2O1xuICAgIHRoaXMudHdlZW4gPSB0d2VlbjtcblxuICAgIGZvciAocCBpbiB2YXJzKSB7XG4gICAgICB2ID0gdGFyZ2V0LmdldEF0dHJpYnV0ZShwKSB8fCBcIlwiO1xuICAgICAgcHQgPSB0aGlzLmFkZCh0YXJnZXQsIFwic2V0QXR0cmlidXRlXCIsICh2IHx8IDApICsgXCJcIiwgdmFyc1twXSwgaW5kZXgsIHRhcmdldHMsIDAsIDAsIHApO1xuICAgICAgcHQub3AgPSBwO1xuICAgICAgcHQuYiA9IHY7IC8vIHJlY29yZCB0aGUgYmVnaW5uaW5nIHZhbHVlIHNvIHdlIGNhbiByZXZlcnQoKVxuXG4gICAgICB0aGlzLl9wcm9wcy5wdXNoKHApO1xuICAgIH1cbiAgfSxcbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIocmF0aW8sIGRhdGEpIHtcbiAgICB2YXIgcHQgPSBkYXRhLl9wdDtcblxuICAgIHdoaWxlIChwdCkge1xuICAgICAgX3JldmVydGluZyA/IHB0LnNldChwdC50LCBwdC5wLCBwdC5iLCBwdCkgOiBwdC5yKHJhdGlvLCBwdC5kKTsgLy8gaWYgcmV2ZXJ0aW5nLCBnbyBiYWNrIHRvIHRoZSBvcmlnaW5hbCAocHQuYilcblxuICAgICAgcHQgPSBwdC5fbmV4dDtcbiAgICB9XG4gIH1cbn0sIHtcbiAgbmFtZTogXCJlbmRBcnJheVwiLFxuICBpbml0OiBmdW5jdGlvbiBpbml0KHRhcmdldCwgdmFsdWUpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmxlbmd0aDtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHRoaXMuYWRkKHRhcmdldCwgaSwgdGFyZ2V0W2ldIHx8IDAsIHZhbHVlW2ldLCAwLCAwLCAwLCAwLCAwLCAxKTtcbiAgICB9XG4gIH1cbn0sIF9idWlsZE1vZGlmaWVyUGx1Z2luKFwicm91bmRQcm9wc1wiLCBfcm91bmRNb2RpZmllciksIF9idWlsZE1vZGlmaWVyUGx1Z2luKFwibW9kaWZpZXJzXCIpLCBfYnVpbGRNb2RpZmllclBsdWdpbihcInNuYXBcIiwgc25hcCkpIHx8IF9nc2FwOyAvL3RvIHByZXZlbnQgdGhlIGNvcmUgcGx1Z2lucyBmcm9tIGJlaW5nIGRyb3BwZWQgdmlhIGFnZ3Jlc3NpdmUgdHJlZSBzaGFraW5nLCB3ZSBtdXN0IGluY2x1ZGUgdGhlbSBpbiB0aGUgdmFyaWFibGUgZGVjbGFyYXRpb24gaW4gdGhpcyB3YXkuXG5cblR3ZWVuLnZlcnNpb24gPSBUaW1lbGluZS52ZXJzaW9uID0gZ3NhcC52ZXJzaW9uID0gXCIzLjEyLjdcIjtcbl9jb3JlUmVhZHkgPSAxO1xuX3dpbmRvd0V4aXN0cygpICYmIF93YWtlKCk7XG52YXIgUG93ZXIwID0gX2Vhc2VNYXAuUG93ZXIwLFxuICAgIFBvd2VyMSA9IF9lYXNlTWFwLlBvd2VyMSxcbiAgICBQb3dlcjIgPSBfZWFzZU1hcC5Qb3dlcjIsXG4gICAgUG93ZXIzID0gX2Vhc2VNYXAuUG93ZXIzLFxuICAgIFBvd2VyNCA9IF9lYXNlTWFwLlBvd2VyNCxcbiAgICBMaW5lYXIgPSBfZWFzZU1hcC5MaW5lYXIsXG4gICAgUXVhZCA9IF9lYXNlTWFwLlF1YWQsXG4gICAgQ3ViaWMgPSBfZWFzZU1hcC5DdWJpYyxcbiAgICBRdWFydCA9IF9lYXNlTWFwLlF1YXJ0LFxuICAgIFF1aW50ID0gX2Vhc2VNYXAuUXVpbnQsXG4gICAgU3Ryb25nID0gX2Vhc2VNYXAuU3Ryb25nLFxuICAgIEVsYXN0aWMgPSBfZWFzZU1hcC5FbGFzdGljLFxuICAgIEJhY2sgPSBfZWFzZU1hcC5CYWNrLFxuICAgIFN0ZXBwZWRFYXNlID0gX2Vhc2VNYXAuU3RlcHBlZEVhc2UsXG4gICAgQm91bmNlID0gX2Vhc2VNYXAuQm91bmNlLFxuICAgIFNpbmUgPSBfZWFzZU1hcC5TaW5lLFxuICAgIEV4cG8gPSBfZWFzZU1hcC5FeHBvLFxuICAgIENpcmMgPSBfZWFzZU1hcC5DaXJjO1xuZXhwb3J0IHsgUG93ZXIwLCBQb3dlcjEsIFBvd2VyMiwgUG93ZXIzLCBQb3dlcjQsIExpbmVhciwgUXVhZCwgQ3ViaWMsIFF1YXJ0LCBRdWludCwgU3Ryb25nLCBFbGFzdGljLCBCYWNrLCBTdGVwcGVkRWFzZSwgQm91bmNlLCBTaW5lLCBFeHBvLCBDaXJjIH07XG5leHBvcnQgeyBUd2VlbiBhcyBUd2Vlbk1heCwgVHdlZW4gYXMgVHdlZW5MaXRlLCBUaW1lbGluZSBhcyBUaW1lbGluZU1heCwgVGltZWxpbmUgYXMgVGltZWxpbmVMaXRlLCBnc2FwIGFzIGRlZmF1bHQsIHdyYXAsIHdyYXBZb3lvLCBkaXN0cmlidXRlLCByYW5kb20sIHNuYXAsIG5vcm1hbGl6ZSwgZ2V0VW5pdCwgY2xhbXAsIHNwbGl0Q29sb3IsIHRvQXJyYXksIHNlbGVjdG9yLCBtYXBSYW5nZSwgcGlwZSwgdW5pdGl6ZSwgaW50ZXJwb2xhdGUsIHNodWZmbGUgfTsgLy9leHBvcnQgc29tZSBpbnRlcm5hbCBtZXRob2RzL29yb2plY3RzIGZvciB1c2UgaW4gQ1NTUGx1Z2luIHNvIHRoYXQgd2UgY2FuIGV4dGVybmFsaXplIHRoYXQgZmlsZSBhbmQgYWxsb3cgY3VzdG9tIGJ1aWxkcyB0aGF0IGV4Y2x1ZGUgaXQuXG5cbmV4cG9ydCB7IF9nZXRQcm9wZXJ0eSwgX251bUV4cCwgX251bVdpdGhVbml0RXhwLCBfaXNTdHJpbmcsIF9pc1VuZGVmaW5lZCwgX3JlbmRlckNvbXBsZXhTdHJpbmcsIF9yZWxFeHAsIF9zZXREZWZhdWx0cywgX3JlbW92ZUxpbmtlZExpc3RJdGVtLCBfZm9yRWFjaE5hbWUsIF9zb3J0UHJvcFR3ZWVuc0J5UHJpb3JpdHksIF9jb2xvclN0cmluZ0ZpbHRlciwgX3JlcGxhY2VSYW5kb20sIF9jaGVja1BsdWdpbiwgX3BsdWdpbnMsIF90aWNrZXIsIF9jb25maWcsIF9yb3VuZE1vZGlmaWVyLCBfcm91bmQsIF9taXNzaW5nUGx1Z2luLCBfZ2V0U2V0dGVyLCBfZ2V0Q2FjaGUsIF9jb2xvckV4cCwgX3BhcnNlUmVsYXRpdmUgfTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/gsap/gsap-core.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/gsap/index.js\":\r\n/*!************************************!*\\\r\n  !*** ./node_modules/gsap/index.js ***!\r\n  \\************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"Back\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Back),\\n/* harmony export */   \\\"Bounce\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Bounce),\\n/* harmony export */   \\\"CSSPlugin\\\": () => (/* reexport safe */ _CSSPlugin_js__WEBPACK_IMPORTED_MODULE_1__.CSSPlugin),\\n/* harmony export */   \\\"Circ\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Circ),\\n/* harmony export */   \\\"Cubic\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Cubic),\\n/* harmony export */   \\\"Elastic\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Elastic),\\n/* harmony export */   \\\"Expo\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Expo),\\n/* harmony export */   \\\"Linear\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Linear),\\n/* harmony export */   \\\"Power0\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Power0),\\n/* harmony export */   \\\"Power1\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Power1),\\n/* harmony export */   \\\"Power2\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Power2),\\n/* harmony export */   \\\"Power3\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Power3),\\n/* harmony export */   \\\"Power4\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Power4),\\n/* harmony export */   \\\"Quad\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Quad),\\n/* harmony export */   \\\"Quart\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Quart),\\n/* harmony export */   \\\"Quint\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Quint),\\n/* harmony export */   \\\"Sine\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Sine),\\n/* harmony export */   \\\"SteppedEase\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.SteppedEase),\\n/* harmony export */   \\\"Strong\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Strong),\\n/* harmony export */   \\\"TimelineLite\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.TimelineLite),\\n/* harmony export */   \\\"TimelineMax\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.TimelineMax),\\n/* harmony export */   \\\"TweenLite\\\": () => (/* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.TweenLite),\\n/* harmony export */   \\\"TweenMax\\\": () => (/* binding */ TweenMaxWithCSS),\\n/* harmony export */   \\\"default\\\": () => (/* binding */ gsapWithCSS),\\n/* harmony export */   \\\"gsap\\\": () => (/* binding */ gsapWithCSS)\\n/* harmony export */ });\\n/* harmony import */ var _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./gsap-core.js */ \\\"./node_modules/gsap/gsap-core.js\\\");\\n/* harmony import */ var _CSSPlugin_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CSSPlugin.js */ \\\"./node_modules/gsap/CSSPlugin.js\\\");\\n\\n\\nvar gsapWithCSS = _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap.registerPlugin(_CSSPlugin_js__WEBPACK_IMPORTED_MODULE_1__.CSSPlugin) || _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap,\\n    // to protect from tree shaking\\nTweenMaxWithCSS = gsapWithCSS.core.Tween;\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZ3NhcC9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBcU47QUFDMUs7QUFDM0Msa0JBQWtCLDhEQUFtQixDQUFDLG9EQUFTLEtBQUssK0NBQUk7QUFDeEQ7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL2dzYXAvaW5kZXguanM/MThlNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnc2FwLCBQb3dlcjAsIFBvd2VyMSwgUG93ZXIyLCBQb3dlcjMsIFBvd2VyNCwgTGluZWFyLCBRdWFkLCBDdWJpYywgUXVhcnQsIFF1aW50LCBTdHJvbmcsIEVsYXN0aWMsIEJhY2ssIFN0ZXBwZWRFYXNlLCBCb3VuY2UsIFNpbmUsIEV4cG8sIENpcmMsIFR3ZWVuTGl0ZSwgVGltZWxpbmVMaXRlLCBUaW1lbGluZU1heCB9IGZyb20gXCIuL2dzYXAtY29yZS5qc1wiO1xuaW1wb3J0IHsgQ1NTUGx1Z2luIH0gZnJvbSBcIi4vQ1NTUGx1Z2luLmpzXCI7XG52YXIgZ3NhcFdpdGhDU1MgPSBnc2FwLnJlZ2lzdGVyUGx1Z2luKENTU1BsdWdpbikgfHwgZ3NhcCxcbiAgICAvLyB0byBwcm90ZWN0IGZyb20gdHJlZSBzaGFraW5nXG5Ud2Vlbk1heFdpdGhDU1MgPSBnc2FwV2l0aENTUy5jb3JlLlR3ZWVuO1xuZXhwb3J0IHsgZ3NhcFdpdGhDU1MgYXMgZ3NhcCwgZ3NhcFdpdGhDU1MgYXMgZGVmYXVsdCwgQ1NTUGx1Z2luLCBUd2Vlbk1heFdpdGhDU1MgYXMgVHdlZW5NYXgsIFR3ZWVuTGl0ZSwgVGltZWxpbmVNYXgsIFRpbWVsaW5lTGl0ZSwgUG93ZXIwLCBQb3dlcjEsIFBvd2VyMiwgUG93ZXIzLCBQb3dlcjQsIExpbmVhciwgUXVhZCwgQ3ViaWMsIFF1YXJ0LCBRdWludCwgU3Ryb25nLCBFbGFzdGljLCBCYWNrLCBTdGVwcGVkRWFzZSwgQm91bmNlLCBTaW5lLCBFeHBvLCBDaXJjIH07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/gsap/index.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/gsap/src/Observer.js\":\r\n/*!*******************************************!*\\\r\n  !*** ./node_modules/gsap/src/Observer.js ***!\r\n  \\*******************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"Observer\\\": () => (/* binding */ Observer),\\n/* harmony export */   \\\"_getProxyProp\\\": () => (/* binding */ _getProxyProp),\\n/* harmony export */   \\\"_getScrollFunc\\\": () => (/* binding */ _getScrollFunc),\\n/* harmony export */   \\\"_getTarget\\\": () => (/* binding */ _getTarget),\\n/* harmony export */   \\\"_getVelocityProp\\\": () => (/* binding */ _getVelocityProp),\\n/* harmony export */   \\\"_horizontal\\\": () => (/* binding */ _horizontal),\\n/* harmony export */   \\\"_isViewport\\\": () => (/* binding */ _isViewport),\\n/* harmony export */   \\\"_proxies\\\": () => (/* binding */ _proxies),\\n/* harmony export */   \\\"_scrollers\\\": () => (/* binding */ _scrollers),\\n/* harmony export */   \\\"_vertical\\\": () => (/* binding */ _vertical),\\n/* harmony export */   \\\"default\\\": () => (/* binding */ Observer)\\n/* harmony export */ });\\n/*!\\n * Observer 3.12.7\\n * https://gsap.com\\n *\\n * @license Copyright 2008-2025, GreenSock. All rights reserved.\\n * Subject to the terms at https://gsap.com/standard-license or for\\n * Club GSAP members, the agreement issued with that membership.\\n * @author: Jack Doyle, jack@greensock.com\\n*/\\n/* eslint-disable */\\n\\nlet gsap, _coreInitted, _clamp, _win, _doc, _docEl, _body, _isTouch, _pointerType, ScrollTrigger, _root, _normalizer, _eventTypes, _context,\\n\\t_getGSAP = () => gsap || (typeof(window) !== \\\"undefined\\\" && (gsap = window.gsap) && gsap.registerPlugin && gsap),\\n\\t_startup = 1,\\n\\t_observers = [],\\n\\t_scrollers = [],\\n\\t_proxies = [],\\n\\t_getTime = Date.now,\\n\\t_bridge = (name, value) => value,\\n\\t_integrate = () => {\\n\\t\\tlet core = ScrollTrigger.core,\\n\\t\\t\\tdata = core.bridge || {},\\n\\t\\t\\tscrollers = core._scrollers,\\n\\t\\t\\tproxies = core._proxies;\\n\\t\\tscrollers.push(..._scrollers);\\n\\t\\tproxies.push(..._proxies);\\n\\t\\t_scrollers = scrollers;\\n\\t\\t_proxies = proxies;\\n\\t\\t_bridge = (name, value) => data[name](value);\\n\\t},\\n\\t_getProxyProp = (element, property) => ~_proxies.indexOf(element) && _proxies[_proxies.indexOf(element) + 1][property],\\n\\t_isViewport = el => !!~_root.indexOf(el),\\n\\t_addListener = (element, type, func, passive, capture) => element.addEventListener(type, func, {passive: passive !== false, capture: !!capture}),\\n\\t_removeListener = (element, type, func, capture) => element.removeEventListener(type, func, !!capture),\\n\\t_scrollLeft = \\\"scrollLeft\\\",\\n\\t_scrollTop = \\\"scrollTop\\\",\\n\\t_onScroll = () => (_normalizer && _normalizer.isPressed) || _scrollers.cache++,\\n\\t_scrollCacheFunc = (f, doNotCache) => {\\n\\t\\tlet cachingFunc = value => { // since reading the scrollTop/scrollLeft/pageOffsetY/pageOffsetX can trigger a layout, this function allows us to cache the value so it only gets read fresh after a \\\"scroll\\\" event fires (or while we're refreshing because that can lengthen the page and alter the scroll position). when \\\"soft\\\" is true, that means don't actually set the scroll, but cache the new value instead (useful in ScrollSmoother)\\n\\t\\t\\tif (value || value === 0) {\\n\\t\\t\\t\\t_startup && (_win.history.scrollRestoration = \\\"manual\\\"); // otherwise the new position will get overwritten by the browser onload.\\n\\t\\t\\t\\tlet isNormalizing = _normalizer && _normalizer.isPressed;\\n\\t\\t\\t\\tvalue = cachingFunc.v = Math.round(value) || (_normalizer && _normalizer.iOS ? 1 : 0); //TODO: iOS Bug: if you allow it to go to 0, Safari can start to report super strange (wildly inaccurate) touch positions!\\n\\t\\t\\t\\tf(value);\\n\\t\\t\\t\\tcachingFunc.cacheID = _scrollers.cache;\\n\\t\\t\\t\\tisNormalizing && _bridge(\\\"ss\\\", value); // set scroll (notify ScrollTrigger so it can dispatch a \\\"scrollStart\\\" event if necessary\\n\\t\\t\\t} else if (doNotCache || _scrollers.cache !== cachingFunc.cacheID || _bridge(\\\"ref\\\")) {\\n\\t\\t\\t\\tcachingFunc.cacheID = _scrollers.cache;\\n\\t\\t\\t\\tcachingFunc.v = f();\\n\\t\\t\\t}\\n\\t\\t\\treturn cachingFunc.v + cachingFunc.offset;\\n\\t\\t};\\n\\t\\tcachingFunc.offset = 0;\\n\\t\\treturn f && cachingFunc;\\n\\t},\\n\\t_horizontal = {s: _scrollLeft, p: \\\"left\\\", p2: \\\"Left\\\", os: \\\"right\\\", os2: \\\"Right\\\", d: \\\"width\\\", d2: \\\"Width\\\", a: \\\"x\\\", sc: _scrollCacheFunc(function(value) { return arguments.length ? _win.scrollTo(value, _vertical.sc()) : _win.pageXOffset || _doc[_scrollLeft] || _docEl[_scrollLeft] || _body[_scrollLeft] || 0})},\\n\\t_vertical = {s: _scrollTop, p: \\\"top\\\", p2: \\\"Top\\\", os: \\\"bottom\\\", os2: \\\"Bottom\\\", d: \\\"height\\\", d2: \\\"Height\\\", a: \\\"y\\\", op: _horizontal, sc: _scrollCacheFunc(function(value) { return arguments.length ? _win.scrollTo(_horizontal.sc(), value) : _win.pageYOffset || _doc[_scrollTop] || _docEl[_scrollTop] || _body[_scrollTop] || 0})},\\n\\t_getTarget = (t, self) => ((self && self._ctx && self._ctx.selector) || gsap.utils.toArray)(t)[0] || (typeof(t) === \\\"string\\\" && gsap.config().nullTargetWarn !== false ? console.warn(\\\"Element not found:\\\", t) : null),\\n\\n\\t_getScrollFunc = (element, {s, sc}) => { // we store the scroller functions in an alternating sequenced Array like [element, verticalScrollFunc, horizontalScrollFunc, ...] so that we can minimize memory, maximize performance, and we also record the last position as a \\\".rec\\\" property in order to revert to that after refreshing to ensure things don't shift around.\\n\\t\\t_isViewport(element) && (element = _doc.scrollingElement || _docEl);\\n\\t\\tlet i = _scrollers.indexOf(element),\\n\\t\\t\\toffset = sc === _vertical.sc ? 1 : 2;\\n\\t\\t!~i && (i = _scrollers.push(element) - 1);\\n\\t\\t_scrollers[i + offset] || _addListener(element, \\\"scroll\\\", _onScroll); // clear the cache when a scroll occurs\\n\\t\\tlet prev = _scrollers[i + offset],\\n\\t\\t\\tfunc = prev || (_scrollers[i + offset] = _scrollCacheFunc(_getProxyProp(element, s), true) || (_isViewport(element) ? sc : _scrollCacheFunc(function(value) { return arguments.length ? (element[s] = value) : element[s]; })));\\n\\t\\tfunc.target = element;\\n\\t\\tprev || (func.smooth = gsap.getProperty(element, \\\"scrollBehavior\\\") === \\\"smooth\\\"); // only set it the first time (don't reset every time a scrollFunc is requested because perhaps it happens during a refresh() when it's disabled in ScrollTrigger.\\n\\t\\treturn func;\\n\\t},\\n\\t_getVelocityProp = (value, minTimeRefresh, useDelta) => {\\n\\t\\tlet v1 = value,\\n\\t\\t\\tv2 = value,\\n\\t\\t\\tt1 = _getTime(),\\n\\t\\t\\tt2 = t1,\\n\\t\\t\\tmin = minTimeRefresh || 50,\\n\\t\\t\\tdropToZeroTime = Math.max(500, min * 3),\\n\\t\\t\\tupdate = (value, force) => {\\n\\t\\t\\t\\tlet t = _getTime();\\n\\t\\t\\t\\tif (force || t - t1 > min) {\\n\\t\\t\\t\\t\\tv2 = v1;\\n\\t\\t\\t\\t\\tv1 = value;\\n\\t\\t\\t\\t\\tt2 = t1;\\n\\t\\t\\t\\t\\tt1 = t;\\n\\t\\t\\t\\t} else if (useDelta) {\\n\\t\\t\\t\\t\\tv1 += value;\\n\\t\\t\\t\\t} else { // not totally necessary, but makes it a bit more accurate by adjusting the v1 value according to the new slope. This way we're not just ignoring the incoming data. Removing for now because it doesn't seem to make much practical difference and it's probably not worth the kb.\\n\\t\\t\\t\\t\\tv1 = v2 + (value - v2) / (t - t2) * (t1 - t2);\\n\\t\\t\\t\\t}\\n\\t\\t\\t},\\n\\t\\t\\treset = () => { v2 = v1 = useDelta ? 0 : v1; t2 = t1 = 0; },\\n\\t\\t\\tgetVelocity = latestValue => {\\n\\t\\t\\t\\tlet tOld = t2,\\n\\t\\t\\t\\t\\tvOld = v2,\\n\\t\\t\\t\\t\\tt = _getTime();\\n\\t\\t\\t\\t(latestValue || latestValue === 0) && latestValue !== v1 && update(latestValue);\\n\\t\\t\\t\\treturn (t1 === t2 || t - t2 > dropToZeroTime) ? 0 : (v1 + (useDelta ? vOld : -vOld)) / ((useDelta ? t : t1) - tOld) * 1000;\\n\\t\\t\\t};\\n\\t\\treturn {update, reset, getVelocity};\\n\\t},\\n\\t_getEvent = (e, preventDefault) => {\\n\\t\\tpreventDefault && !e._gsapAllow && e.preventDefault();\\n\\t\\treturn e.changedTouches ? e.changedTouches[0] : e;\\n\\t},\\n\\t_getAbsoluteMax = a => {\\n\\t\\tlet max = Math.max(...a),\\n\\t\\t\\tmin = Math.min(...a);\\n\\t\\treturn Math.abs(max) >= Math.abs(min) ? max : min;\\n\\t},\\n\\t_setScrollTrigger = () => {\\n\\t\\tScrollTrigger = gsap.core.globals().ScrollTrigger;\\n\\t\\tScrollTrigger && ScrollTrigger.core && _integrate();\\n\\t},\\n\\t_initCore = core => {\\n\\t\\tgsap = core || _getGSAP();\\n\\t\\tif (!_coreInitted && gsap && typeof(document) !== \\\"undefined\\\" && document.body) {\\n\\t\\t\\t_win = window;\\n\\t\\t\\t_doc = document;\\n\\t\\t\\t_docEl = _doc.documentElement;\\n\\t\\t\\t_body = _doc.body;\\n\\t\\t\\t_root = [_win, _doc, _docEl, _body];\\n\\t\\t\\t_clamp = gsap.utils.clamp;\\n\\t\\t\\t_context = gsap.core.context || function() {};\\n\\t\\t\\t_pointerType = \\\"onpointerenter\\\" in _body ? \\\"pointer\\\" : \\\"mouse\\\";\\n\\t\\t\\t// isTouch is 0 if no touch, 1 if ONLY touch, and 2 if it can accommodate touch but also other types like mouse/pointer.\\n\\t\\t\\t_isTouch = Observer.isTouch = _win.matchMedia && _win.matchMedia(\\\"(hover: none), (pointer: coarse)\\\").matches ? 1 : (\\\"ontouchstart\\\" in _win || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0) ? 2 : 0;\\n\\t\\t\\t_eventTypes = Observer.eventTypes = (\\\"ontouchstart\\\" in _docEl ? \\\"touchstart,touchmove,touchcancel,touchend\\\" : !(\\\"onpointerdown\\\" in _docEl) ? \\\"mousedown,mousemove,mouseup,mouseup\\\" : \\\"pointerdown,pointermove,pointercancel,pointerup\\\").split(\\\",\\\");\\n\\t\\t\\tsetTimeout(() => _startup = 0, 500);\\n\\t\\t\\t_setScrollTrigger();\\n\\t\\t\\t_coreInitted = 1;\\n\\t\\t}\\n\\t\\treturn _coreInitted;\\n\\t};\\n\\n_horizontal.op = _vertical;\\n_scrollers.cache = 0;\\n\\nclass Observer {\\n\\tconstructor(vars) {\\n\\t\\tthis.init(vars);\\n\\t}\\n\\n\\tinit(vars) {\\n\\t\\t_coreInitted || _initCore(gsap) || console.warn(\\\"Please gsap.registerPlugin(Observer)\\\");\\n\\t\\tScrollTrigger || _setScrollTrigger();\\n\\t\\tlet {tolerance, dragMinimum, type, target, lineHeight, debounce, preventDefault, onStop, onStopDelay, ignore, wheelSpeed, event, onDragStart, onDragEnd, onDrag, onPress, onRelease, onRight, onLeft, onUp, onDown, onChangeX, onChangeY, onChange, onToggleX, onToggleY, onHover, onHoverEnd, onMove, ignoreCheck, isNormalizer, onGestureStart, onGestureEnd, onWheel, onEnable, onDisable, onClick, scrollSpeed, capture, allowClicks, lockAxis, onLockAxis} = vars;\\n\\t\\tthis.target = target = _getTarget(target) || _docEl;\\n\\t\\tthis.vars = vars;\\n\\t\\tignore && (ignore = gsap.utils.toArray(ignore));\\n\\t\\ttolerance = tolerance || 1e-9;\\n\\t\\tdragMinimum = dragMinimum || 0;\\n\\t\\twheelSpeed = wheelSpeed || 1;\\n\\t\\tscrollSpeed = scrollSpeed || 1;\\n\\t\\ttype = type || \\\"wheel,touch,pointer\\\";\\n\\t\\tdebounce = debounce !== false;\\n\\t\\tlineHeight || (lineHeight = parseFloat(_win.getComputedStyle(_body).lineHeight) || 22); // note: browser may report \\\"normal\\\", so default to 22.\\n\\t\\tlet id, onStopDelayedCall, dragged, moved, wheeled, locked, axis,\\n\\t\\t\\tself = this,\\n\\t\\t\\tprevDeltaX = 0,\\n\\t\\t\\tprevDeltaY = 0,\\n\\t\\t\\tpassive = vars.passive || (!preventDefault && vars.passive !== false),\\n\\t\\t\\tscrollFuncX = _getScrollFunc(target, _horizontal),\\n\\t\\t\\tscrollFuncY = _getScrollFunc(target, _vertical),\\n\\t\\t\\tscrollX = scrollFuncX(),\\n\\t\\t\\tscrollY = scrollFuncY(),\\n\\t\\t\\tlimitToTouch = ~type.indexOf(\\\"touch\\\") && !~type.indexOf(\\\"pointer\\\") && _eventTypes[0] === \\\"pointerdown\\\", // for devices that accommodate mouse events and touch events, we need to distinguish.\\n\\t\\t\\tisViewport = _isViewport(target),\\n\\t\\t\\townerDoc = target.ownerDocument || _doc,\\n\\t\\t\\tdeltaX = [0, 0, 0], // wheel, scroll, pointer/touch\\n\\t\\t\\tdeltaY = [0, 0, 0],\\n\\t\\t\\tonClickTime = 0,\\n\\t\\t\\tclickCapture = () => onClickTime = _getTime(),\\n\\t\\t\\t_ignoreCheck = (e, isPointerOrTouch) => (self.event = e) && (ignore && ~ignore.indexOf(e.target)) || (isPointerOrTouch && limitToTouch && e.pointerType !== \\\"touch\\\") || (ignoreCheck && ignoreCheck(e, isPointerOrTouch)),\\n\\t\\t\\tonStopFunc = () => {\\n\\t\\t\\t\\tself._vx.reset();\\n\\t\\t\\t\\tself._vy.reset();\\n\\t\\t\\t\\tonStopDelayedCall.pause();\\n\\t\\t\\t\\tonStop && onStop(self);\\n\\t\\t\\t},\\n\\t\\t\\tupdate = () => {\\n\\t\\t\\t\\tlet dx = self.deltaX = _getAbsoluteMax(deltaX),\\n\\t\\t\\t\\t\\tdy = self.deltaY = _getAbsoluteMax(deltaY),\\n\\t\\t\\t\\t\\tchangedX = Math.abs(dx) >= tolerance,\\n\\t\\t\\t\\t\\tchangedY = Math.abs(dy) >= tolerance;\\n\\t\\t\\t\\tonChange && (changedX || changedY) && onChange(self, dx, dy, deltaX, deltaY); // in ScrollTrigger.normalizeScroll(), we need to know if it was touch/pointer so we need access to the deltaX/deltaY Arrays before we clear them out.\\n\\t\\t\\t\\tif (changedX) {\\n\\t\\t\\t\\t\\tonRight && self.deltaX > 0 && onRight(self);\\n\\t\\t\\t\\t\\tonLeft && self.deltaX < 0 && onLeft(self);\\n\\t\\t\\t\\t\\tonChangeX && onChangeX(self);\\n\\t\\t\\t\\t\\tonToggleX && ((self.deltaX < 0) !== (prevDeltaX < 0)) && onToggleX(self);\\n\\t\\t\\t\\t\\tprevDeltaX = self.deltaX;\\n\\t\\t\\t\\t\\tdeltaX[0] = deltaX[1] = deltaX[2] = 0\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (changedY) {\\n\\t\\t\\t\\t\\tonDown && self.deltaY > 0 && onDown(self);\\n\\t\\t\\t\\t\\tonUp && self.deltaY < 0 && onUp(self);\\n\\t\\t\\t\\t\\tonChangeY && onChangeY(self);\\n\\t\\t\\t\\t\\tonToggleY && ((self.deltaY < 0) !== (prevDeltaY < 0)) && onToggleY(self);\\n\\t\\t\\t\\t\\tprevDeltaY = self.deltaY;\\n\\t\\t\\t\\t\\tdeltaY[0] = deltaY[1] = deltaY[2] = 0\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (moved || dragged) {\\n\\t\\t\\t\\t\\tonMove && onMove(self);\\n\\t\\t\\t\\t\\tif (dragged) {\\n\\t\\t\\t\\t\\t\\tonDragStart && dragged === 1 && onDragStart(self);\\n\\t\\t\\t\\t\\t\\tonDrag && onDrag(self);\\n\\t\\t\\t\\t\\t\\tdragged = 0;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tmoved = false;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tlocked && !(locked = false) && onLockAxis && onLockAxis(self);\\n\\t\\t\\t\\tif (wheeled) {\\n\\t\\t\\t\\t\\tonWheel(self);\\n\\t\\t\\t\\t\\twheeled = false;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tid = 0;\\n\\t\\t\\t},\\n\\t\\t\\tonDelta = (x, y, index) => {\\n\\t\\t\\t\\tdeltaX[index] += x;\\n\\t\\t\\t\\tdeltaY[index] += y;\\n\\t\\t\\t\\tself._vx.update(x);\\n\\t\\t\\t\\tself._vy.update(y);\\n\\t\\t\\t\\tdebounce ? id || (id = requestAnimationFrame(update)) : update();\\n\\t\\t\\t},\\n\\t\\t\\tonTouchOrPointerDelta = (x, y) => {\\n\\t\\t\\t\\tif (lockAxis && !axis) {\\n\\t\\t\\t\\t\\tself.axis = axis = Math.abs(x) > Math.abs(y) ? \\\"x\\\" : \\\"y\\\";\\n\\t\\t\\t\\t\\tlocked = true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (axis !== \\\"y\\\") {\\n\\t\\t\\t\\t\\tdeltaX[2] += x;\\n\\t\\t\\t\\t\\tself._vx.update(x, true); // update the velocity as frequently as possible instead of in the debounced function so that very quick touch-scrolls (flicks) feel natural. If it's the mouse/touch/pointer, force it so that we get snappy/accurate momentum scroll.\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (axis !== \\\"x\\\") {\\n\\t\\t\\t\\t\\tdeltaY[2] += y;\\n\\t\\t\\t\\t\\tself._vy.update(y, true);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tdebounce ? id || (id = requestAnimationFrame(update)) : update();\\n\\t\\t\\t},\\n\\t\\t\\t_onDrag = e => {\\n\\t\\t\\t\\tif (_ignoreCheck(e, 1)) {return;}\\n\\t\\t\\t\\te = _getEvent(e, preventDefault);\\n\\t\\t\\t\\tlet x = e.clientX,\\n\\t\\t\\t\\t\\ty = e.clientY,\\n\\t\\t\\t\\t\\tdx = x - self.x,\\n\\t\\t\\t\\t\\tdy = y - self.y,\\n\\t\\t\\t\\t\\tisDragging = self.isDragging;\\n\\t\\t\\t\\tself.x = x;\\n\\t\\t\\t\\tself.y = y;\\n\\t\\t\\t\\tif (isDragging || ((dx || dy) && (Math.abs(self.startX - x) >= dragMinimum || Math.abs(self.startY - y) >= dragMinimum))) {\\n\\t\\t\\t\\t\\tdragged = isDragging ? 2 : 1; // dragged: 0 = not dragging, 1 = first drag, 2 = normal drag\\n\\t\\t\\t\\t\\tisDragging || (self.isDragging = true);\\n\\t\\t\\t\\t\\tonTouchOrPointerDelta(dx, dy);\\n\\t\\t\\t\\t}\\n\\t\\t\\t},\\n\\t\\t\\t_onPress = self.onPress = e => {\\n\\t\\t\\t\\tif (_ignoreCheck(e, 1) || (e && e.button)) {return;}\\n\\t\\t\\t\\tself.axis = axis = null;\\n\\t\\t\\t\\tonStopDelayedCall.pause();\\n\\t\\t\\t\\tself.isPressed = true;\\n\\t\\t\\t\\te = _getEvent(e); // note: may need to preventDefault(?) Won't side-scroll on iOS Safari if we do, though.\\n\\t\\t\\t\\tprevDeltaX = prevDeltaY = 0;\\n\\t\\t\\t\\tself.startX = self.x = e.clientX;\\n\\t\\t\\t\\tself.startY = self.y = e.clientY;\\n\\t\\t\\t\\tself._vx.reset(); // otherwise the t2 may be stale if the user touches and flicks super fast and releases in less than 2 requestAnimationFrame ticks, causing velocity to be 0.\\n\\t\\t\\t\\tself._vy.reset();\\n\\t\\t\\t\\t_addListener(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, passive, true);\\n\\t\\t\\t\\tself.deltaX = self.deltaY = 0;\\n\\t\\t\\t\\tonPress && onPress(self);\\n\\t\\t\\t},\\n\\t\\t\\t_onRelease = self.onRelease = e => {\\n\\t\\t\\t\\tif (_ignoreCheck(e, 1)) {return;}\\n\\t\\t\\t\\t_removeListener(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, true);\\n\\t\\t\\t\\tlet isTrackingDrag = !isNaN(self.y - self.startY),\\n\\t\\t\\t\\t\\twasDragging = self.isDragging,\\n\\t\\t\\t\\t\\tisDragNotClick = wasDragging && (Math.abs(self.x - self.startX) > 3 || Math.abs(self.y - self.startY) > 3), // some touch devices need some wiggle room in terms of sensing clicks - the finger may move a few pixels.\\n\\t\\t\\t\\t\\teventData = _getEvent(e);\\n\\t\\t\\t\\tif (!isDragNotClick && isTrackingDrag) {\\n\\t\\t\\t\\t\\tself._vx.reset();\\n\\t\\t\\t\\t\\tself._vy.reset();\\n\\t\\t\\t\\t\\t//if (preventDefault && allowClicks && self.isPressed) { // check isPressed because in a rare edge case, the inputObserver in ScrollTrigger may stopPropagation() on the press/drag, so the onRelease may get fired without the onPress/onDrag ever getting called, thus it could trigger a click to occur on a link after scroll-dragging it.\\n\\t\\t\\t\\t\\tif (preventDefault && allowClicks) {\\n\\t\\t\\t\\t\\t\\tgsap.delayedCall(0.08, () => { // some browsers (like Firefox) won't trust script-generated clicks, so if the user tries to click on a video to play it, for example, it simply won't work. Since a regular \\\"click\\\" event will most likely be generated anyway (one that has its isTrusted flag set to true), we must slightly delay our script-generated click so that the \\\"real\\\"/trusted one is prioritized. Remember, when there are duplicate events in quick succession, we suppress all but the first one. Some browsers don't even trigger the \\\"real\\\" one at all, so our synthetic one is a safety valve that ensures that no matter what, a click event does get dispatched.\\n\\t\\t\\t\\t\\t\\t\\tif (_getTime() - onClickTime > 300 && !e.defaultPrevented) {\\n\\t\\t\\t\\t\\t\\t\\t\\tif (e.target.click) { //some browsers (like mobile Safari) don't properly trigger the click event\\n\\t\\t\\t\\t\\t\\t\\t\\t\\te.target.click();\\n\\t\\t\\t\\t\\t\\t\\t\\t} else if (ownerDoc.createEvent) {\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tlet syntheticEvent = ownerDoc.createEvent(\\\"MouseEvents\\\");\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tsyntheticEvent.initMouseEvent(\\\"click\\\", true, true, _win, 1, eventData.screenX, eventData.screenY, eventData.clientX, eventData.clientY, false, false, false, false, 0, null);\\n\\t\\t\\t\\t\\t\\t\\t\\t\\te.target.dispatchEvent(syntheticEvent);\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tself.isDragging = self.isGesturing = self.isPressed = false;\\n\\t\\t\\t\\tonStop && wasDragging && !isNormalizer && onStopDelayedCall.restart(true);\\n\\t\\t\\t\\tdragged && update(); // in case debouncing, we don't want onDrag to fire AFTER onDragEnd().\\n\\t\\t\\t\\tonDragEnd && wasDragging && onDragEnd(self);\\n\\t\\t\\t\\tonRelease && onRelease(self, isDragNotClick);\\n\\t\\t\\t},\\n\\t\\t\\t_onGestureStart = e => e.touches && e.touches.length > 1 && (self.isGesturing = true) && onGestureStart(e, self.isDragging),\\n\\t\\t\\t_onGestureEnd = () => (self.isGesturing = false) || onGestureEnd(self),\\n\\t\\t\\tonScroll = e => {\\n\\t\\t\\t\\tif (_ignoreCheck(e)) {return;}\\n\\t\\t\\t\\tlet x = scrollFuncX(),\\n\\t\\t\\t\\t\\ty = scrollFuncY();\\n\\t\\t\\t\\tonDelta((x - scrollX) * scrollSpeed, (y - scrollY) * scrollSpeed, 1);\\n\\t\\t\\t\\tscrollX = x;\\n\\t\\t\\t\\tscrollY = y;\\n\\t\\t\\t\\tonStop && onStopDelayedCall.restart(true);\\n\\t\\t\\t},\\n\\t\\t\\t_onWheel = e => {\\n\\t\\t\\t\\tif (_ignoreCheck(e)) {return;}\\n\\t\\t\\t\\te = _getEvent(e, preventDefault);\\n\\t\\t\\t\\tonWheel && (wheeled = true);\\n\\t\\t\\t\\tlet multiplier = (e.deltaMode === 1 ? lineHeight : e.deltaMode === 2 ? _win.innerHeight : 1) * wheelSpeed;\\n\\t\\t\\t\\tonDelta(e.deltaX * multiplier, e.deltaY * multiplier, 0);\\n\\t\\t\\t\\tonStop && !isNormalizer && onStopDelayedCall.restart(true);\\n\\t\\t\\t},\\n\\t\\t\\t_onMove = e => {\\n\\t\\t\\t\\tif (_ignoreCheck(e)) {return;}\\n\\t\\t\\t\\tlet x = e.clientX,\\n\\t\\t\\t\\t\\ty = e.clientY,\\n\\t\\t\\t\\t\\tdx = x - self.x,\\n\\t\\t\\t\\t\\tdy = y - self.y;\\n\\t\\t\\t\\tself.x = x;\\n\\t\\t\\t\\tself.y = y;\\n\\t\\t\\t\\tmoved = true;\\n\\t\\t\\t\\tonStop && onStopDelayedCall.restart(true);\\n\\t\\t\\t\\t(dx || dy) && onTouchOrPointerDelta(dx, dy);\\n\\t\\t\\t},\\n\\t\\t\\t_onHover = e => {self.event = e; onHover(self);},\\n\\t\\t\\t_onHoverEnd = e => {self.event = e; onHoverEnd(self);},\\n\\t\\t\\t_onClick = e => _ignoreCheck(e) || (_getEvent(e, preventDefault) && onClick(self));\\n\\n\\t\\tonStopDelayedCall = self._dc = gsap.delayedCall(onStopDelay || 0.25, onStopFunc).pause();\\n\\n\\t\\tself.deltaX = self.deltaY = 0;\\n\\t\\tself._vx = _getVelocityProp(0, 50, true);\\n\\t\\tself._vy = _getVelocityProp(0, 50, true);\\n\\t\\tself.scrollX = scrollFuncX;\\n\\t\\tself.scrollY = scrollFuncY;\\n\\t\\tself.isDragging = self.isGesturing = self.isPressed = false;\\n\\t\\t_context(this);\\n\\t\\tself.enable = e => {\\n\\t\\t\\tif (!self.isEnabled) {\\n\\t\\t\\t\\t_addListener(isViewport ? ownerDoc : target, \\\"scroll\\\", _onScroll);\\n\\t\\t\\t\\ttype.indexOf(\\\"scroll\\\") >= 0 && _addListener(isViewport ? ownerDoc : target, \\\"scroll\\\", onScroll, passive, capture);\\n\\t\\t\\t\\ttype.indexOf(\\\"wheel\\\") >= 0 && _addListener(target, \\\"wheel\\\", _onWheel, passive, capture);\\n\\t\\t\\t\\tif ((type.indexOf(\\\"touch\\\") >= 0 && _isTouch) || type.indexOf(\\\"pointer\\\") >= 0) {\\n\\t\\t\\t\\t\\t_addListener(target, _eventTypes[0], _onPress, passive, capture);\\n\\t\\t\\t\\t\\t_addListener(ownerDoc, _eventTypes[2], _onRelease);\\n\\t\\t\\t\\t\\t_addListener(ownerDoc, _eventTypes[3], _onRelease);\\n\\t\\t\\t\\t\\tallowClicks && _addListener(target, \\\"click\\\", clickCapture, true, true);\\n\\t\\t\\t\\t\\tonClick && _addListener(target, \\\"click\\\", _onClick);\\n\\t\\t\\t\\t\\tonGestureStart && _addListener(ownerDoc, \\\"gesturestart\\\", _onGestureStart);\\n\\t\\t\\t\\t\\tonGestureEnd && _addListener(ownerDoc, \\\"gestureend\\\", _onGestureEnd);\\n\\t\\t\\t\\t\\tonHover && _addListener(target, _pointerType + \\\"enter\\\", _onHover);\\n\\t\\t\\t\\t\\tonHoverEnd && _addListener(target, _pointerType + \\\"leave\\\", _onHoverEnd);\\n\\t\\t\\t\\t\\tonMove && _addListener(target, _pointerType + \\\"move\\\", _onMove);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tself.isEnabled = true;\\n\\t\\t\\t\\tself.isDragging = self.isGesturing = self.isPressed = moved = dragged = false;\\n\\t\\t\\t\\tself._vx.reset();\\n\\t\\t\\t\\tself._vy.reset();\\n\\t\\t\\t\\tscrollX = scrollFuncX();\\n\\t\\t\\t\\tscrollY = scrollFuncY();\\n\\t\\t\\t\\te && e.type && _onPress(e);\\n\\t\\t\\t\\tonEnable && onEnable(self);\\n\\t\\t\\t}\\n\\t\\t\\treturn self;\\n\\t\\t};\\n\\t\\tself.disable = () => {\\n\\t\\t\\tif (self.isEnabled) {\\n\\t\\t\\t\\t// only remove the _onScroll listener if there aren't any others that rely on the functionality.\\n\\t\\t\\t\\t_observers.filter(o => o !== self && _isViewport(o.target)).length || _removeListener(isViewport ? ownerDoc : target, \\\"scroll\\\", _onScroll);\\n\\t\\t\\t\\tif (self.isPressed) {\\n\\t\\t\\t\\t\\tself._vx.reset();\\n\\t\\t\\t\\t\\tself._vy.reset();\\n\\t\\t\\t\\t\\t_removeListener(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, true);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t_removeListener(isViewport ? ownerDoc : target, \\\"scroll\\\", onScroll, capture);\\n\\t\\t\\t\\t_removeListener(target, \\\"wheel\\\", _onWheel, capture);\\n\\t\\t\\t\\t_removeListener(target, _eventTypes[0], _onPress, capture);\\n\\t\\t\\t\\t_removeListener(ownerDoc, _eventTypes[2], _onRelease);\\n\\t\\t\\t\\t_removeListener(ownerDoc, _eventTypes[3], _onRelease);\\n\\t\\t\\t\\t_removeListener(target, \\\"click\\\", clickCapture, true);\\n\\t\\t\\t\\t_removeListener(target, \\\"click\\\", _onClick);\\n\\t\\t\\t\\t_removeListener(ownerDoc, \\\"gesturestart\\\", _onGestureStart);\\n\\t\\t\\t\\t_removeListener(ownerDoc, \\\"gestureend\\\", _onGestureEnd);\\n\\t\\t\\t\\t_removeListener(target, _pointerType + \\\"enter\\\", _onHover);\\n\\t\\t\\t\\t_removeListener(target, _pointerType + \\\"leave\\\", _onHoverEnd);\\n\\t\\t\\t\\t_removeListener(target, _pointerType + \\\"move\\\", _onMove);\\n\\t\\t\\t\\tself.isEnabled = self.isPressed = self.isDragging = false;\\n\\t\\t\\t\\tonDisable && onDisable(self);\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\tself.kill = self.revert = () => {\\n\\t\\t\\tself.disable();\\n\\t\\t\\tlet i = _observers.indexOf(self);\\n\\t\\t\\ti >= 0 && _observers.splice(i, 1);\\n\\t\\t\\t_normalizer === self && (_normalizer = 0);\\n\\t\\t}\\n\\n\\t\\t_observers.push(self);\\n\\t\\tisNormalizer && _isViewport(target) && (_normalizer = self);\\n\\n\\t\\tself.enable(event);\\n\\t}\\n\\n\\tget velocityX() {\\n\\t\\treturn this._vx.getVelocity();\\n\\t}\\n\\tget velocityY() {\\n\\t\\treturn this._vy.getVelocity();\\n\\t}\\n\\n}\\n\\nObserver.version = \\\"3.12.7\\\";\\nObserver.create = vars => new Observer(vars);\\nObserver.register = _initCore;\\nObserver.getAll = () => _observers.slice();\\nObserver.getById = id => _observers.filter(o => o.vars.id === id)[0];\\n\\n_getGSAP() && gsap.registerPlugin(Observer);\\n\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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cmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL2dzYXAvc3JjL09ic2VydmVyLmpzPzMyMGYiXSwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBPYnNlcnZlciAzLjEyLjdcbiAqIGh0dHBzOi8vZ3NhcC5jb21cbiAqXG4gKiBAbGljZW5zZSBDb3B5cmlnaHQgMjAwOC0yMDI1LCBHcmVlblNvY2suIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhdCBodHRwczovL2dzYXAuY29tL3N0YW5kYXJkLWxpY2Vuc2Ugb3IgZm9yXG4gKiBDbHViIEdTQVAgbWVtYmVycywgdGhlIGFncmVlbWVudCBpc3N1ZWQgd2l0aCB0aGF0IG1lbWJlcnNoaXAuXG4gKiBAYXV0aG9yOiBKYWNrIERveWxlLCBqYWNrQGdyZWVuc29jay5jb21cbiovXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG5sZXQgZ3NhcCwgX2NvcmVJbml0dGVkLCBfY2xhbXAsIF93aW4sIF9kb2MsIF9kb2NFbCwgX2JvZHksIF9pc1RvdWNoLCBfcG9pbnRlclR5cGUsIFNjcm9sbFRyaWdnZXIsIF9yb290LCBfbm9ybWFsaXplciwgX2V2ZW50VHlwZXMsIF9jb250ZXh0LFxuXHRfZ2V0R1NBUCA9ICgpID0+IGdzYXAgfHwgKHR5cGVvZih3aW5kb3cpICE9PSBcInVuZGVmaW5lZFwiICYmIChnc2FwID0gd2luZG93LmdzYXApICYmIGdzYXAucmVnaXN0ZXJQbHVnaW4gJiYgZ3NhcCksXG5cdF9zdGFydHVwID0gMSxcblx0X29ic2VydmVycyA9IFtdLFxuXHRfc2Nyb2xsZXJzID0gW10sXG5cdF9wcm94aWVzID0gW10sXG5cdF9nZXRUaW1lID0gRGF0ZS5ub3csXG5cdF9icmlkZ2UgPSAobmFtZSwgdmFsdWUpID0+IHZhbHVlLFxuXHRfaW50ZWdyYXRlID0gKCkgPT4ge1xuXHRcdGxldCBjb3JlID0gU2Nyb2xsVHJpZ2dlci5jb3JlLFxuXHRcdFx0ZGF0YSA9IGNvcmUuYnJpZGdlIHx8IHt9LFxuXHRcdFx0c2Nyb2xsZXJzID0gY29yZS5fc2Nyb2xsZXJzLFxuXHRcdFx0cHJveGllcyA9IGNvcmUuX3Byb3hpZXM7XG5cdFx0c2Nyb2xsZXJzLnB1c2goLi4uX3Njcm9sbGVycyk7XG5cdFx0cHJveGllcy5wdXNoKC4uLl9wcm94aWVzKTtcblx0XHRfc2Nyb2xsZXJzID0gc2Nyb2xsZXJzO1xuXHRcdF9wcm94aWVzID0gcHJveGllcztcblx0XHRfYnJpZGdlID0gKG5hbWUsIHZhbHVlKSA9PiBkYXRhW25hbWVdKHZhbHVlKTtcblx0fSxcblx0X2dldFByb3h5UHJvcCA9IChlbGVtZW50LCBwcm9wZXJ0eSkgPT4gfl9wcm94aWVzLmluZGV4T2YoZWxlbWVudCkgJiYgX3Byb3hpZXNbX3Byb3hpZXMuaW5kZXhPZihlbGVtZW50KSArIDFdW3Byb3BlcnR5XSxcblx0X2lzVmlld3BvcnQgPSBlbCA9PiAhIX5fcm9vdC5pbmRleE9mKGVsKSxcblx0X2FkZExpc3RlbmVyID0gKGVsZW1lbnQsIHR5cGUsIGZ1bmMsIHBhc3NpdmUsIGNhcHR1cmUpID0+IGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmdW5jLCB7cGFzc2l2ZTogcGFzc2l2ZSAhPT0gZmFsc2UsIGNhcHR1cmU6ICEhY2FwdHVyZX0pLFxuXHRfcmVtb3ZlTGlzdGVuZXIgPSAoZWxlbWVudCwgdHlwZSwgZnVuYywgY2FwdHVyZSkgPT4gZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmMsICEhY2FwdHVyZSksXG5cdF9zY3JvbGxMZWZ0ID0gXCJzY3JvbGxMZWZ0XCIsXG5cdF9zY3JvbGxUb3AgPSBcInNjcm9sbFRvcFwiLFxuXHRfb25TY3JvbGwgPSAoKSA9PiAoX25vcm1hbGl6ZXIgJiYgX25vcm1hbGl6ZXIuaXNQcmVzc2VkKSB8fCBfc2Nyb2xsZXJzLmNhY2hlKyssXG5cdF9zY3JvbGxDYWNoZUZ1bmMgPSAoZiwgZG9Ob3RDYWNoZSkgPT4ge1xuXHRcdGxldCBjYWNoaW5nRnVuYyA9IHZhbHVlID0+IHsgLy8gc2luY2UgcmVhZGluZyB0aGUgc2Nyb2xsVG9wL3Njcm9sbExlZnQvcGFnZU9mZnNldFkvcGFnZU9mZnNldFggY2FuIHRyaWdnZXIgYSBsYXlvdXQsIHRoaXMgZnVuY3Rpb24gYWxsb3dzIHVzIHRvIGNhY2hlIHRoZSB2YWx1ZSBzbyBpdCBvbmx5IGdldHMgcmVhZCBmcmVzaCBhZnRlciBhIFwic2Nyb2xsXCIgZXZlbnQgZmlyZXMgKG9yIHdoaWxlIHdlJ3JlIHJlZnJlc2hpbmcgYmVjYXVzZSB0aGF0IGNhbiBsZW5ndGhlbiB0aGUgcGFnZSBhbmQgYWx0ZXIgdGhlIHNjcm9sbCBwb3NpdGlvbikuIHdoZW4gXCJzb2Z0XCIgaXMgdHJ1ZSwgdGhhdCBtZWFucyBkb24ndCBhY3R1YWxseSBzZXQgdGhlIHNjcm9sbCwgYnV0IGNhY2hlIHRoZSBuZXcgdmFsdWUgaW5zdGVhZCAodXNlZnVsIGluIFNjcm9sbFNtb290aGVyKVxuXHRcdFx0aWYgKHZhbHVlIHx8IHZhbHVlID09PSAwKSB7XG5cdFx0XHRcdF9zdGFydHVwICYmIChfd2luLmhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb24gPSBcIm1hbnVhbFwiKTsgLy8gb3RoZXJ3aXNlIHRoZSBuZXcgcG9zaXRpb24gd2lsbCBnZXQgb3ZlcndyaXR0ZW4gYnkgdGhlIGJyb3dzZXIgb25sb2FkLlxuXHRcdFx0XHRsZXQgaXNOb3JtYWxpemluZyA9IF9ub3JtYWxpemVyICYmIF9ub3JtYWxpemVyLmlzUHJlc3NlZDtcblx0XHRcdFx0dmFsdWUgPSBjYWNoaW5nRnVuYy52ID0gTWF0aC5yb3VuZCh2YWx1ZSkgfHwgKF9ub3JtYWxpemVyICYmIF9ub3JtYWxpemVyLmlPUyA/IDEgOiAwKTsgLy9UT0RPOiBpT1MgQnVnOiBpZiB5b3UgYWxsb3cgaXQgdG8gZ28gdG8gMCwgU2FmYXJpIGNhbiBzdGFydCB0byByZXBvcnQgc3VwZXIgc3RyYW5nZSAod2lsZGx5IGluYWNjdXJhdGUpIHRvdWNoIHBvc2l0aW9ucyFcblx0XHRcdFx0Zih2YWx1ZSk7XG5cdFx0XHRcdGNhY2hpbmdGdW5jLmNhY2hlSUQgPSBfc2Nyb2xsZXJzLmNhY2hlO1xuXHRcdFx0XHRpc05vcm1hbGl6aW5nICYmIF9icmlkZ2UoXCJzc1wiLCB2YWx1ZSk7IC8vIHNldCBzY3JvbGwgKG5vdGlmeSBTY3JvbGxUcmlnZ2VyIHNvIGl0IGNhbiBkaXNwYXRjaCBhIFwic2Nyb2xsU3RhcnRcIiBldmVudCBpZiBuZWNlc3Nhcnlcblx0XHRcdH0gZWxzZSBpZiAoZG9Ob3RDYWNoZSB8fCBfc2Nyb2xsZXJzLmNhY2hlICE9PSBjYWNoaW5nRnVuYy5jYWNoZUlEIHx8IF9icmlkZ2UoXCJyZWZcIikpIHtcblx0XHRcdFx0Y2FjaGluZ0Z1bmMuY2FjaGVJRCA9IF9zY3JvbGxlcnMuY2FjaGU7XG5cdFx0XHRcdGNhY2hpbmdGdW5jLnYgPSBmKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY2FjaGluZ0Z1bmMudiArIGNhY2hpbmdGdW5jLm9mZnNldDtcblx0XHR9O1xuXHRcdGNhY2hpbmdGdW5jLm9mZnNldCA9IDA7XG5cdFx0cmV0dXJuIGYgJiYgY2FjaGluZ0Z1bmM7XG5cdH0sXG5cdF9ob3Jpem9udGFsID0ge3M6IF9zY3JvbGxMZWZ0LCBwOiBcImxlZnRcIiwgcDI6IFwiTGVmdFwiLCBvczogXCJyaWdodFwiLCBvczI6IFwiUmlnaHRcIiwgZDogXCJ3aWR0aFwiLCBkMjogXCJXaWR0aFwiLCBhOiBcInhcIiwgc2M6IF9zY3JvbGxDYWNoZUZ1bmMoZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyBfd2luLnNjcm9sbFRvKHZhbHVlLCBfdmVydGljYWwuc2MoKSkgOiBfd2luLnBhZ2VYT2Zmc2V0IHx8IF9kb2NbX3Njcm9sbExlZnRdIHx8IF9kb2NFbFtfc2Nyb2xsTGVmdF0gfHwgX2JvZHlbX3Njcm9sbExlZnRdIHx8IDB9KX0sXG5cdF92ZXJ0aWNhbCA9IHtzOiBfc2Nyb2xsVG9wLCBwOiBcInRvcFwiLCBwMjogXCJUb3BcIiwgb3M6IFwiYm90dG9tXCIsIG9zMjogXCJCb3R0b21cIiwgZDogXCJoZWlnaHRcIiwgZDI6IFwiSGVpZ2h0XCIsIGE6IFwieVwiLCBvcDogX2hvcml6b250YWwsIHNjOiBfc2Nyb2xsQ2FjaGVGdW5jKGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gX3dpbi5zY3JvbGxUbyhfaG9yaXpvbnRhbC5zYygpLCB2YWx1ZSkgOiBfd2luLnBhZ2VZT2Zmc2V0IHx8IF9kb2NbX3Njcm9sbFRvcF0gfHwgX2RvY0VsW19zY3JvbGxUb3BdIHx8IF9ib2R5W19zY3JvbGxUb3BdIHx8IDB9KX0sXG5cdF9nZXRUYXJnZXQgPSAodCwgc2VsZikgPT4gKChzZWxmICYmIHNlbGYuX2N0eCAmJiBzZWxmLl9jdHguc2VsZWN0b3IpIHx8IGdzYXAudXRpbHMudG9BcnJheSkodClbMF0gfHwgKHR5cGVvZih0KSA9PT0gXCJzdHJpbmdcIiAmJiBnc2FwLmNvbmZpZygpLm51bGxUYXJnZXRXYXJuICE9PSBmYWxzZSA/IGNvbnNvbGUud2FybihcIkVsZW1lbnQgbm90IGZvdW5kOlwiLCB0KSA6IG51bGwpLFxuXG5cdF9nZXRTY3JvbGxGdW5jID0gKGVsZW1lbnQsIHtzLCBzY30pID0+IHsgLy8gd2Ugc3RvcmUgdGhlIHNjcm9sbGVyIGZ1bmN0aW9ucyBpbiBhbiBhbHRlcm5hdGluZyBzZXF1ZW5jZWQgQXJyYXkgbGlrZSBbZWxlbWVudCwgdmVydGljYWxTY3JvbGxGdW5jLCBob3Jpem9udGFsU2Nyb2xsRnVuYywgLi4uXSBzbyB0aGF0IHdlIGNhbiBtaW5pbWl6ZSBtZW1vcnksIG1heGltaXplIHBlcmZvcm1hbmNlLCBhbmQgd2UgYWxzbyByZWNvcmQgdGhlIGxhc3QgcG9zaXRpb24gYXMgYSBcIi5yZWNcIiBwcm9wZXJ0eSBpbiBvcmRlciB0byByZXZlcnQgdG8gdGhhdCBhZnRlciByZWZyZXNoaW5nIHRvIGVuc3VyZSB0aGluZ3MgZG9uJ3Qgc2hpZnQgYXJvdW5kLlxuXHRcdF9pc1ZpZXdwb3J0KGVsZW1lbnQpICYmIChlbGVtZW50ID0gX2RvYy5zY3JvbGxpbmdFbGVtZW50IHx8IF9kb2NFbCk7XG5cdFx0bGV0IGkgPSBfc2Nyb2xsZXJzLmluZGV4T2YoZWxlbWVudCksXG5cdFx0XHRvZmZzZXQgPSBzYyA9PT0gX3ZlcnRpY2FsLnNjID8gMSA6IDI7XG5cdFx0IX5pICYmIChpID0gX3Njcm9sbGVycy5wdXNoKGVsZW1lbnQpIC0gMSk7XG5cdFx0X3Njcm9sbGVyc1tpICsgb2Zmc2V0XSB8fCBfYWRkTGlzdGVuZXIoZWxlbWVudCwgXCJzY3JvbGxcIiwgX29uU2Nyb2xsKTsgLy8gY2xlYXIgdGhlIGNhY2hlIHdoZW4gYSBzY3JvbGwgb2NjdXJzXG5cdFx0bGV0IHByZXYgPSBfc2Nyb2xsZXJzW2kgKyBvZmZzZXRdLFxuXHRcdFx0ZnVuYyA9IHByZXYgfHwgKF9zY3JvbGxlcnNbaSArIG9mZnNldF0gPSBfc2Nyb2xsQ2FjaGVGdW5jKF9nZXRQcm94eVByb3AoZWxlbWVudCwgcyksIHRydWUpIHx8IChfaXNWaWV3cG9ydChlbGVtZW50KSA/IHNjIDogX3Njcm9sbENhY2hlRnVuYyhmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChlbGVtZW50W3NdID0gdmFsdWUpIDogZWxlbWVudFtzXTsgfSkpKTtcblx0XHRmdW5jLnRhcmdldCA9IGVsZW1lbnQ7XG5cdFx0cHJldiB8fCAoZnVuYy5zbW9vdGggPSBnc2FwLmdldFByb3BlcnR5KGVsZW1lbnQsIFwic2Nyb2xsQmVoYXZpb3JcIikgPT09IFwic21vb3RoXCIpOyAvLyBvbmx5IHNldCBpdCB0aGUgZmlyc3QgdGltZSAoZG9uJ3QgcmVzZXQgZXZlcnkgdGltZSBhIHNjcm9sbEZ1bmMgaXMgcmVxdWVzdGVkIGJlY2F1c2UgcGVyaGFwcyBpdCBoYXBwZW5zIGR1cmluZyBhIHJlZnJlc2goKSB3aGVuIGl0J3MgZGlzYWJsZWQgaW4gU2Nyb2xsVHJpZ2dlci5cblx0XHRyZXR1cm4gZnVuYztcblx0fSxcblx0X2dldFZlbG9jaXR5UHJvcCA9ICh2YWx1ZSwgbWluVGltZVJlZnJlc2gsIHVzZURlbHRhKSA9PiB7XG5cdFx0bGV0IHYxID0gdmFsdWUsXG5cdFx0XHR2MiA9IHZhbHVlLFxuXHRcdFx0dDEgPSBfZ2V0VGltZSgpLFxuXHRcdFx0dDIgPSB0MSxcblx0XHRcdG1pbiA9IG1pblRpbWVSZWZyZXNoIHx8IDUwLFxuXHRcdFx0ZHJvcFRvWmVyb1RpbWUgPSBNYXRoLm1heCg1MDAsIG1pbiAqIDMpLFxuXHRcdFx0dXBkYXRlID0gKHZhbHVlLCBmb3JjZSkgPT4ge1xuXHRcdFx0XHRsZXQgdCA9IF9nZXRUaW1lKCk7XG5cdFx0XHRcdGlmIChmb3JjZSB8fCB0IC0gdDEgPiBtaW4pIHtcblx0XHRcdFx0XHR2MiA9IHYxO1xuXHRcdFx0XHRcdHYxID0gdmFsdWU7XG5cdFx0XHRcdFx0dDIgPSB0MTtcblx0XHRcdFx0XHR0MSA9IHQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAodXNlRGVsdGEpIHtcblx0XHRcdFx0XHR2MSArPSB2YWx1ZTtcblx0XHRcdFx0fSBlbHNlIHsgLy8gbm90IHRvdGFsbHkgbmVjZXNzYXJ5LCBidXQgbWFrZXMgaXQgYSBiaXQgbW9yZSBhY2N1cmF0ZSBieSBhZGp1c3RpbmcgdGhlIHYxIHZhbHVlIGFjY29yZGluZyB0byB0aGUgbmV3IHNsb3BlLiBUaGlzIHdheSB3ZSdyZSBub3QganVzdCBpZ25vcmluZyB0aGUgaW5jb21pbmcgZGF0YS4gUmVtb3ZpbmcgZm9yIG5vdyBiZWNhdXNlIGl0IGRvZXNuJ3Qgc2VlbSB0byBtYWtlIG11Y2ggcHJhY3RpY2FsIGRpZmZlcmVuY2UgYW5kIGl0J3MgcHJvYmFibHkgbm90IHdvcnRoIHRoZSBrYi5cblx0XHRcdFx0XHR2MSA9IHYyICsgKHZhbHVlIC0gdjIpIC8gKHQgLSB0MikgKiAodDEgLSB0Mik7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRyZXNldCA9ICgpID0+IHsgdjIgPSB2MSA9IHVzZURlbHRhID8gMCA6IHYxOyB0MiA9IHQxID0gMDsgfSxcblx0XHRcdGdldFZlbG9jaXR5ID0gbGF0ZXN0VmFsdWUgPT4ge1xuXHRcdFx0XHRsZXQgdE9sZCA9IHQyLFxuXHRcdFx0XHRcdHZPbGQgPSB2Mixcblx0XHRcdFx0XHR0ID0gX2dldFRpbWUoKTtcblx0XHRcdFx0KGxhdGVzdFZhbHVlIHx8IGxhdGVzdFZhbHVlID09PSAwKSAmJiBsYXRlc3RWYWx1ZSAhPT0gdjEgJiYgdXBkYXRlKGxhdGVzdFZhbHVlKTtcblx0XHRcdFx0cmV0dXJuICh0MSA9PT0gdDIgfHwgdCAtIHQyID4gZHJvcFRvWmVyb1RpbWUpID8gMCA6ICh2MSArICh1c2VEZWx0YSA/IHZPbGQgOiAtdk9sZCkpIC8gKCh1c2VEZWx0YSA/IHQgOiB0MSkgLSB0T2xkKSAqIDEwMDA7XG5cdFx0XHR9O1xuXHRcdHJldHVybiB7dXBkYXRlLCByZXNldCwgZ2V0VmVsb2NpdHl9O1xuXHR9LFxuXHRfZ2V0RXZlbnQgPSAoZSwgcHJldmVudERlZmF1bHQpID0+IHtcblx0XHRwcmV2ZW50RGVmYXVsdCAmJiAhZS5fZ3NhcEFsbG93ICYmIGUucHJldmVudERlZmF1bHQoKTtcblx0XHRyZXR1cm4gZS5jaGFuZ2VkVG91Y2hlcyA/IGUuY2hhbmdlZFRvdWNoZXNbMF0gOiBlO1xuXHR9LFxuXHRfZ2V0QWJzb2x1dGVNYXggPSBhID0+IHtcblx0XHRsZXQgbWF4ID0gTWF0aC5tYXgoLi4uYSksXG5cdFx0XHRtaW4gPSBNYXRoLm1pbiguLi5hKTtcblx0XHRyZXR1cm4gTWF0aC5hYnMobWF4KSA+PSBNYXRoLmFicyhtaW4pID8gbWF4IDogbWluO1xuXHR9LFxuXHRfc2V0U2Nyb2xsVHJpZ2dlciA9ICgpID0+IHtcblx0XHRTY3JvbGxUcmlnZ2VyID0gZ3NhcC5jb3JlLmdsb2JhbHMoKS5TY3JvbGxUcmlnZ2VyO1xuXHRcdFNjcm9sbFRyaWdnZXIgJiYgU2Nyb2xsVHJpZ2dlci5jb3JlICYmIF9pbnRlZ3JhdGUoKTtcblx0fSxcblx0X2luaXRDb3JlID0gY29yZSA9PiB7XG5cdFx0Z3NhcCA9IGNvcmUgfHwgX2dldEdTQVAoKTtcblx0XHRpZiAoIV9jb3JlSW5pdHRlZCAmJiBnc2FwICYmIHR5cGVvZihkb2N1bWVudCkgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnQuYm9keSkge1xuXHRcdFx0X3dpbiA9IHdpbmRvdztcblx0XHRcdF9kb2MgPSBkb2N1bWVudDtcblx0XHRcdF9kb2NFbCA9IF9kb2MuZG9jdW1lbnRFbGVtZW50O1xuXHRcdFx0X2JvZHkgPSBfZG9jLmJvZHk7XG5cdFx0XHRfcm9vdCA9IFtfd2luLCBfZG9jLCBfZG9jRWwsIF9ib2R5XTtcblx0XHRcdF9jbGFtcCA9IGdzYXAudXRpbHMuY2xhbXA7XG5cdFx0XHRfY29udGV4dCA9IGdzYXAuY29yZS5jb250ZXh0IHx8IGZ1bmN0aW9uKCkge307XG5cdFx0XHRfcG9pbnRlclR5cGUgPSBcIm9ucG9pbnRlcmVudGVyXCIgaW4gX2JvZHkgPyBcInBvaW50ZXJcIiA6IFwibW91c2VcIjtcblx0XHRcdC8vIGlzVG91Y2ggaXMgMCBpZiBubyB0b3VjaCwgMSBpZiBPTkxZIHRvdWNoLCBhbmQgMiBpZiBpdCBjYW4gYWNjb21tb2RhdGUgdG91Y2ggYnV0IGFsc28gb3RoZXIgdHlwZXMgbGlrZSBtb3VzZS9wb2ludGVyLlxuXHRcdFx0X2lzVG91Y2ggPSBPYnNlcnZlci5pc1RvdWNoID0gX3dpbi5tYXRjaE1lZGlhICYmIF93aW4ubWF0Y2hNZWRpYShcIihob3Zlcjogbm9uZSksIChwb2ludGVyOiBjb2Fyc2UpXCIpLm1hdGNoZXMgPyAxIDogKFwib250b3VjaHN0YXJ0XCIgaW4gX3dpbiB8fCBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAwIHx8IG5hdmlnYXRvci5tc01heFRvdWNoUG9pbnRzID4gMCkgPyAyIDogMDtcblx0XHRcdF9ldmVudFR5cGVzID0gT2JzZXJ2ZXIuZXZlbnRUeXBlcyA9IChcIm9udG91Y2hzdGFydFwiIGluIF9kb2NFbCA/IFwidG91Y2hzdGFydCx0b3VjaG1vdmUsdG91Y2hjYW5jZWwsdG91Y2hlbmRcIiA6ICEoXCJvbnBvaW50ZXJkb3duXCIgaW4gX2RvY0VsKSA/IFwibW91c2Vkb3duLG1vdXNlbW92ZSxtb3VzZXVwLG1vdXNldXBcIiA6IFwicG9pbnRlcmRvd24scG9pbnRlcm1vdmUscG9pbnRlcmNhbmNlbCxwb2ludGVydXBcIikuc3BsaXQoXCIsXCIpO1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiBfc3RhcnR1cCA9IDAsIDUwMCk7XG5cdFx0XHRfc2V0U2Nyb2xsVHJpZ2dlcigpO1xuXHRcdFx0X2NvcmVJbml0dGVkID0gMTtcblx0XHR9XG5cdFx0cmV0dXJuIF9jb3JlSW5pdHRlZDtcblx0fTtcblxuX2hvcml6b250YWwub3AgPSBfdmVydGljYWw7XG5fc2Nyb2xsZXJzLmNhY2hlID0gMDtcblxuZXhwb3J0IGNsYXNzIE9ic2VydmVyIHtcblx0Y29uc3RydWN0b3IodmFycykge1xuXHRcdHRoaXMuaW5pdCh2YXJzKTtcblx0fVxuXG5cdGluaXQodmFycykge1xuXHRcdF9jb3JlSW5pdHRlZCB8fCBfaW5pdENvcmUoZ3NhcCkgfHwgY29uc29sZS53YXJuKFwiUGxlYXNlIGdzYXAucmVnaXN0ZXJQbHVnaW4oT2JzZXJ2ZXIpXCIpO1xuXHRcdFNjcm9sbFRyaWdnZXIgfHwgX3NldFNjcm9sbFRyaWdnZXIoKTtcblx0XHRsZXQge3RvbGVyYW5jZSwgZHJhZ01pbmltdW0sIHR5cGUsIHRhcmdldCwgbGluZUhlaWdodCwgZGVib3VuY2UsIHByZXZlbnREZWZhdWx0LCBvblN0b3AsIG9uU3RvcERlbGF5LCBpZ25vcmUsIHdoZWVsU3BlZWQsIGV2ZW50LCBvbkRyYWdTdGFydCwgb25EcmFnRW5kLCBvbkRyYWcsIG9uUHJlc3MsIG9uUmVsZWFzZSwgb25SaWdodCwgb25MZWZ0LCBvblVwLCBvbkRvd24sIG9uQ2hhbmdlWCwgb25DaGFuZ2VZLCBvbkNoYW5nZSwgb25Ub2dnbGVYLCBvblRvZ2dsZVksIG9uSG92ZXIsIG9uSG92ZXJFbmQsIG9uTW92ZSwgaWdub3JlQ2hlY2ssIGlzTm9ybWFsaXplciwgb25HZXN0dXJlU3RhcnQsIG9uR2VzdHVyZUVuZCwgb25XaGVlbCwgb25FbmFibGUsIG9uRGlzYWJsZSwgb25DbGljaywgc2Nyb2xsU3BlZWQsIGNhcHR1cmUsIGFsbG93Q2xpY2tzLCBsb2NrQXhpcywgb25Mb2NrQXhpc30gPSB2YXJzO1xuXHRcdHRoaXMudGFyZ2V0ID0gdGFyZ2V0ID0gX2dldFRhcmdldCh0YXJnZXQpIHx8IF9kb2NFbDtcblx0XHR0aGlzLnZhcnMgPSB2YXJzO1xuXHRcdGlnbm9yZSAmJiAoaWdub3JlID0gZ3NhcC51dGlscy50b0FycmF5KGlnbm9yZSkpO1xuXHRcdHRvbGVyYW5jZSA9IHRvbGVyYW5jZSB8fCAxZS05O1xuXHRcdGRyYWdNaW5pbXVtID0gZHJhZ01pbmltdW0gfHwgMDtcblx0XHR3aGVlbFNwZWVkID0gd2hlZWxTcGVlZCB8fCAxO1xuXHRcdHNjcm9sbFNwZWVkID0gc2Nyb2xsU3BlZWQgfHwgMTtcblx0XHR0eXBlID0gdHlwZSB8fCBcIndoZWVsLHRvdWNoLHBvaW50ZXJcIjtcblx0XHRkZWJvdW5jZSA9IGRlYm91bmNlICE9PSBmYWxzZTtcblx0XHRsaW5lSGVpZ2h0IHx8IChsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdChfd2luLmdldENvbXB1dGVkU3R5bGUoX2JvZHkpLmxpbmVIZWlnaHQpIHx8IDIyKTsgLy8gbm90ZTogYnJvd3NlciBtYXkgcmVwb3J0IFwibm9ybWFsXCIsIHNvIGRlZmF1bHQgdG8gMjIuXG5cdFx0bGV0IGlkLCBvblN0b3BEZWxheWVkQ2FsbCwgZHJhZ2dlZCwgbW92ZWQsIHdoZWVsZWQsIGxvY2tlZCwgYXhpcyxcblx0XHRcdHNlbGYgPSB0aGlzLFxuXHRcdFx0cHJldkRlbHRhWCA9IDAsXG5cdFx0XHRwcmV2RGVsdGFZID0gMCxcblx0XHRcdHBhc3NpdmUgPSB2YXJzLnBhc3NpdmUgfHwgKCFwcmV2ZW50RGVmYXVsdCAmJiB2YXJzLnBhc3NpdmUgIT09IGZhbHNlKSxcblx0XHRcdHNjcm9sbEZ1bmNYID0gX2dldFNjcm9sbEZ1bmModGFyZ2V0LCBfaG9yaXpvbnRhbCksXG5cdFx0XHRzY3JvbGxGdW5jWSA9IF9nZXRTY3JvbGxGdW5jKHRhcmdldCwgX3ZlcnRpY2FsKSxcblx0XHRcdHNjcm9sbFggPSBzY3JvbGxGdW5jWCgpLFxuXHRcdFx0c2Nyb2xsWSA9IHNjcm9sbEZ1bmNZKCksXG5cdFx0XHRsaW1pdFRvVG91Y2ggPSB+dHlwZS5pbmRleE9mKFwidG91Y2hcIikgJiYgIX50eXBlLmluZGV4T2YoXCJwb2ludGVyXCIpICYmIF9ldmVudFR5cGVzWzBdID09PSBcInBvaW50ZXJkb3duXCIsIC8vIGZvciBkZXZpY2VzIHRoYXQgYWNjb21tb2RhdGUgbW91c2UgZXZlbnRzIGFuZCB0b3VjaCBldmVudHMsIHdlIG5lZWQgdG8gZGlzdGluZ3Vpc2guXG5cdFx0XHRpc1ZpZXdwb3J0ID0gX2lzVmlld3BvcnQodGFyZ2V0KSxcblx0XHRcdG93bmVyRG9jID0gdGFyZ2V0Lm93bmVyRG9jdW1lbnQgfHwgX2RvYyxcblx0XHRcdGRlbHRhWCA9IFswLCAwLCAwXSwgLy8gd2hlZWwsIHNjcm9sbCwgcG9pbnRlci90b3VjaFxuXHRcdFx0ZGVsdGFZID0gWzAsIDAsIDBdLFxuXHRcdFx0b25DbGlja1RpbWUgPSAwLFxuXHRcdFx0Y2xpY2tDYXB0dXJlID0gKCkgPT4gb25DbGlja1RpbWUgPSBfZ2V0VGltZSgpLFxuXHRcdFx0X2lnbm9yZUNoZWNrID0gKGUsIGlzUG9pbnRlck9yVG91Y2gpID0+IChzZWxmLmV2ZW50ID0gZSkgJiYgKGlnbm9yZSAmJiB+aWdub3JlLmluZGV4T2YoZS50YXJnZXQpKSB8fCAoaXNQb2ludGVyT3JUb3VjaCAmJiBsaW1pdFRvVG91Y2ggJiYgZS5wb2ludGVyVHlwZSAhPT0gXCJ0b3VjaFwiKSB8fCAoaWdub3JlQ2hlY2sgJiYgaWdub3JlQ2hlY2soZSwgaXNQb2ludGVyT3JUb3VjaCkpLFxuXHRcdFx0b25TdG9wRnVuYyA9ICgpID0+IHtcblx0XHRcdFx0c2VsZi5fdngucmVzZXQoKTtcblx0XHRcdFx0c2VsZi5fdnkucmVzZXQoKTtcblx0XHRcdFx0b25TdG9wRGVsYXllZENhbGwucGF1c2UoKTtcblx0XHRcdFx0b25TdG9wICYmIG9uU3RvcChzZWxmKTtcblx0XHRcdH0sXG5cdFx0XHR1cGRhdGUgPSAoKSA9PiB7XG5cdFx0XHRcdGxldCBkeCA9IHNlbGYuZGVsdGFYID0gX2dldEFic29sdXRlTWF4KGRlbHRhWCksXG5cdFx0XHRcdFx0ZHkgPSBzZWxmLmRlbHRhWSA9IF9nZXRBYnNvbHV0ZU1heChkZWx0YVkpLFxuXHRcdFx0XHRcdGNoYW5nZWRYID0gTWF0aC5hYnMoZHgpID49IHRvbGVyYW5jZSxcblx0XHRcdFx0XHRjaGFuZ2VkWSA9IE1hdGguYWJzKGR5KSA+PSB0b2xlcmFuY2U7XG5cdFx0XHRcdG9uQ2hhbmdlICYmIChjaGFuZ2VkWCB8fCBjaGFuZ2VkWSkgJiYgb25DaGFuZ2Uoc2VsZiwgZHgsIGR5LCBkZWx0YVgsIGRlbHRhWSk7IC8vIGluIFNjcm9sbFRyaWdnZXIubm9ybWFsaXplU2Nyb2xsKCksIHdlIG5lZWQgdG8ga25vdyBpZiBpdCB3YXMgdG91Y2gvcG9pbnRlciBzbyB3ZSBuZWVkIGFjY2VzcyB0byB0aGUgZGVsdGFYL2RlbHRhWSBBcnJheXMgYmVmb3JlIHdlIGNsZWFyIHRoZW0gb3V0LlxuXHRcdFx0XHRpZiAoY2hhbmdlZFgpIHtcblx0XHRcdFx0XHRvblJpZ2h0ICYmIHNlbGYuZGVsdGFYID4gMCAmJiBvblJpZ2h0KHNlbGYpO1xuXHRcdFx0XHRcdG9uTGVmdCAmJiBzZWxmLmRlbHRhWCA8IDAgJiYgb25MZWZ0KHNlbGYpO1xuXHRcdFx0XHRcdG9uQ2hhbmdlWCAmJiBvbkNoYW5nZVgoc2VsZik7XG5cdFx0XHRcdFx0b25Ub2dnbGVYICYmICgoc2VsZi5kZWx0YVggPCAwKSAhPT0gKHByZXZEZWx0YVggPCAwKSkgJiYgb25Ub2dnbGVYKHNlbGYpO1xuXHRcdFx0XHRcdHByZXZEZWx0YVggPSBzZWxmLmRlbHRhWDtcblx0XHRcdFx0XHRkZWx0YVhbMF0gPSBkZWx0YVhbMV0gPSBkZWx0YVhbMl0gPSAwXG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGNoYW5nZWRZKSB7XG5cdFx0XHRcdFx0b25Eb3duICYmIHNlbGYuZGVsdGFZID4gMCAmJiBvbkRvd24oc2VsZik7XG5cdFx0XHRcdFx0b25VcCAmJiBzZWxmLmRlbHRhWSA8IDAgJiYgb25VcChzZWxmKTtcblx0XHRcdFx0XHRvbkNoYW5nZVkgJiYgb25DaGFuZ2VZKHNlbGYpO1xuXHRcdFx0XHRcdG9uVG9nZ2xlWSAmJiAoKHNlbGYuZGVsdGFZIDwgMCkgIT09IChwcmV2RGVsdGFZIDwgMCkpICYmIG9uVG9nZ2xlWShzZWxmKTtcblx0XHRcdFx0XHRwcmV2RGVsdGFZID0gc2VsZi5kZWx0YVk7XG5cdFx0XHRcdFx0ZGVsdGFZWzBdID0gZGVsdGFZWzFdID0gZGVsdGFZWzJdID0gMFxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChtb3ZlZCB8fCBkcmFnZ2VkKSB7XG5cdFx0XHRcdFx0b25Nb3ZlICYmIG9uTW92ZShzZWxmKTtcblx0XHRcdFx0XHRpZiAoZHJhZ2dlZCkge1xuXHRcdFx0XHRcdFx0b25EcmFnU3RhcnQgJiYgZHJhZ2dlZCA9PT0gMSAmJiBvbkRyYWdTdGFydChzZWxmKTtcblx0XHRcdFx0XHRcdG9uRHJhZyAmJiBvbkRyYWcoc2VsZik7XG5cdFx0XHRcdFx0XHRkcmFnZ2VkID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bW92ZWQgPSBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsb2NrZWQgJiYgIShsb2NrZWQgPSBmYWxzZSkgJiYgb25Mb2NrQXhpcyAmJiBvbkxvY2tBeGlzKHNlbGYpO1xuXHRcdFx0XHRpZiAod2hlZWxlZCkge1xuXHRcdFx0XHRcdG9uV2hlZWwoc2VsZik7XG5cdFx0XHRcdFx0d2hlZWxlZCA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlkID0gMDtcblx0XHRcdH0sXG5cdFx0XHRvbkRlbHRhID0gKHgsIHksIGluZGV4KSA9PiB7XG5cdFx0XHRcdGRlbHRhWFtpbmRleF0gKz0geDtcblx0XHRcdFx0ZGVsdGFZW2luZGV4XSArPSB5O1xuXHRcdFx0XHRzZWxmLl92eC51cGRhdGUoeCk7XG5cdFx0XHRcdHNlbGYuX3Z5LnVwZGF0ZSh5KTtcblx0XHRcdFx0ZGVib3VuY2UgPyBpZCB8fCAoaWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlKSkgOiB1cGRhdGUoKTtcblx0XHRcdH0sXG5cdFx0XHRvblRvdWNoT3JQb2ludGVyRGVsdGEgPSAoeCwgeSkgPT4ge1xuXHRcdFx0XHRpZiAobG9ja0F4aXMgJiYgIWF4aXMpIHtcblx0XHRcdFx0XHRzZWxmLmF4aXMgPSBheGlzID0gTWF0aC5hYnMoeCkgPiBNYXRoLmFicyh5KSA/IFwieFwiIDogXCJ5XCI7XG5cdFx0XHRcdFx0bG9ja2VkID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoYXhpcyAhPT0gXCJ5XCIpIHtcblx0XHRcdFx0XHRkZWx0YVhbMl0gKz0geDtcblx0XHRcdFx0XHRzZWxmLl92eC51cGRhdGUoeCwgdHJ1ZSk7IC8vIHVwZGF0ZSB0aGUgdmVsb2NpdHkgYXMgZnJlcXVlbnRseSBhcyBwb3NzaWJsZSBpbnN0ZWFkIG9mIGluIHRoZSBkZWJvdW5jZWQgZnVuY3Rpb24gc28gdGhhdCB2ZXJ5IHF1aWNrIHRvdWNoLXNjcm9sbHMgKGZsaWNrcykgZmVlbCBuYXR1cmFsLiBJZiBpdCdzIHRoZSBtb3VzZS90b3VjaC9wb2ludGVyLCBmb3JjZSBpdCBzbyB0aGF0IHdlIGdldCBzbmFwcHkvYWNjdXJhdGUgbW9tZW50dW0gc2Nyb2xsLlxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChheGlzICE9PSBcInhcIikge1xuXHRcdFx0XHRcdGRlbHRhWVsyXSArPSB5O1xuXHRcdFx0XHRcdHNlbGYuX3Z5LnVwZGF0ZSh5LCB0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkZWJvdW5jZSA/IGlkIHx8IChpZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh1cGRhdGUpKSA6IHVwZGF0ZSgpO1xuXHRcdFx0fSxcblx0XHRcdF9vbkRyYWcgPSBlID0+IHtcblx0XHRcdFx0aWYgKF9pZ25vcmVDaGVjayhlLCAxKSkge3JldHVybjt9XG5cdFx0XHRcdGUgPSBfZ2V0RXZlbnQoZSwgcHJldmVudERlZmF1bHQpO1xuXHRcdFx0XHRsZXQgeCA9IGUuY2xpZW50WCxcblx0XHRcdFx0XHR5ID0gZS5jbGllbnRZLFxuXHRcdFx0XHRcdGR4ID0geCAtIHNlbGYueCxcblx0XHRcdFx0XHRkeSA9IHkgLSBzZWxmLnksXG5cdFx0XHRcdFx0aXNEcmFnZ2luZyA9IHNlbGYuaXNEcmFnZ2luZztcblx0XHRcdFx0c2VsZi54ID0geDtcblx0XHRcdFx0c2VsZi55ID0geTtcblx0XHRcdFx0aWYgKGlzRHJhZ2dpbmcgfHwgKChkeCB8fCBkeSkgJiYgKE1hdGguYWJzKHNlbGYuc3RhcnRYIC0geCkgPj0gZHJhZ01pbmltdW0gfHwgTWF0aC5hYnMoc2VsZi5zdGFydFkgLSB5KSA+PSBkcmFnTWluaW11bSkpKSB7XG5cdFx0XHRcdFx0ZHJhZ2dlZCA9IGlzRHJhZ2dpbmcgPyAyIDogMTsgLy8gZHJhZ2dlZDogMCA9IG5vdCBkcmFnZ2luZywgMSA9IGZpcnN0IGRyYWcsIDIgPSBub3JtYWwgZHJhZ1xuXHRcdFx0XHRcdGlzRHJhZ2dpbmcgfHwgKHNlbGYuaXNEcmFnZ2luZyA9IHRydWUpO1xuXHRcdFx0XHRcdG9uVG91Y2hPclBvaW50ZXJEZWx0YShkeCwgZHkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0X29uUHJlc3MgPSBzZWxmLm9uUHJlc3MgPSBlID0+IHtcblx0XHRcdFx0aWYgKF9pZ25vcmVDaGVjayhlLCAxKSB8fCAoZSAmJiBlLmJ1dHRvbikpIHtyZXR1cm47fVxuXHRcdFx0XHRzZWxmLmF4aXMgPSBheGlzID0gbnVsbDtcblx0XHRcdFx0b25TdG9wRGVsYXllZENhbGwucGF1c2UoKTtcblx0XHRcdFx0c2VsZi5pc1ByZXNzZWQgPSB0cnVlO1xuXHRcdFx0XHRlID0gX2dldEV2ZW50KGUpOyAvLyBub3RlOiBtYXkgbmVlZCB0byBwcmV2ZW50RGVmYXVsdCg/KSBXb24ndCBzaWRlLXNjcm9sbCBvbiBpT1MgU2FmYXJpIGlmIHdlIGRvLCB0aG91Z2guXG5cdFx0XHRcdHByZXZEZWx0YVggPSBwcmV2RGVsdGFZID0gMDtcblx0XHRcdFx0c2VsZi5zdGFydFggPSBzZWxmLnggPSBlLmNsaWVudFg7XG5cdFx0XHRcdHNlbGYuc3RhcnRZID0gc2VsZi55ID0gZS5jbGllbnRZO1xuXHRcdFx0XHRzZWxmLl92eC5yZXNldCgpOyAvLyBvdGhlcndpc2UgdGhlIHQyIG1heSBiZSBzdGFsZSBpZiB0aGUgdXNlciB0b3VjaGVzIGFuZCBmbGlja3Mgc3VwZXIgZmFzdCBhbmQgcmVsZWFzZXMgaW4gbGVzcyB0aGFuIDIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHRpY2tzLCBjYXVzaW5nIHZlbG9jaXR5IHRvIGJlIDAuXG5cdFx0XHRcdHNlbGYuX3Z5LnJlc2V0KCk7XG5cdFx0XHRcdF9hZGRMaXN0ZW5lcihpc05vcm1hbGl6ZXIgPyB0YXJnZXQgOiBvd25lckRvYywgX2V2ZW50VHlwZXNbMV0sIF9vbkRyYWcsIHBhc3NpdmUsIHRydWUpO1xuXHRcdFx0XHRzZWxmLmRlbHRhWCA9IHNlbGYuZGVsdGFZID0gMDtcblx0XHRcdFx0b25QcmVzcyAmJiBvblByZXNzKHNlbGYpO1xuXHRcdFx0fSxcblx0XHRcdF9vblJlbGVhc2UgPSBzZWxmLm9uUmVsZWFzZSA9IGUgPT4ge1xuXHRcdFx0XHRpZiAoX2lnbm9yZUNoZWNrKGUsIDEpKSB7cmV0dXJuO31cblx0XHRcdFx0X3JlbW92ZUxpc3RlbmVyKGlzTm9ybWFsaXplciA/IHRhcmdldCA6IG93bmVyRG9jLCBfZXZlbnRUeXBlc1sxXSwgX29uRHJhZywgdHJ1ZSk7XG5cdFx0XHRcdGxldCBpc1RyYWNraW5nRHJhZyA9ICFpc05hTihzZWxmLnkgLSBzZWxmLnN0YXJ0WSksXG5cdFx0XHRcdFx0d2FzRHJhZ2dpbmcgPSBzZWxmLmlzRHJhZ2dpbmcsXG5cdFx0XHRcdFx0aXNEcmFnTm90Q2xpY2sgPSB3YXNEcmFnZ2luZyAmJiAoTWF0aC5hYnMoc2VsZi54IC0gc2VsZi5zdGFydFgpID4gMyB8fCBNYXRoLmFicyhzZWxmLnkgLSBzZWxmLnN0YXJ0WSkgPiAzKSwgLy8gc29tZSB0b3VjaCBkZXZpY2VzIG5lZWQgc29tZSB3aWdnbGUgcm9vbSBpbiB0ZXJtcyBvZiBzZW5zaW5nIGNsaWNrcyAtIHRoZSBmaW5nZXIgbWF5IG1vdmUgYSBmZXcgcGl4ZWxzLlxuXHRcdFx0XHRcdGV2ZW50RGF0YSA9IF9nZXRFdmVudChlKTtcblx0XHRcdFx0aWYgKCFpc0RyYWdOb3RDbGljayAmJiBpc1RyYWNraW5nRHJhZykge1xuXHRcdFx0XHRcdHNlbGYuX3Z4LnJlc2V0KCk7XG5cdFx0XHRcdFx0c2VsZi5fdnkucmVzZXQoKTtcblx0XHRcdFx0XHQvL2lmIChwcmV2ZW50RGVmYXVsdCAmJiBhbGxvd0NsaWNrcyAmJiBzZWxmLmlzUHJlc3NlZCkgeyAvLyBjaGVjayBpc1ByZXNzZWQgYmVjYXVzZSBpbiBhIHJhcmUgZWRnZSBjYXNlLCB0aGUgaW5wdXRPYnNlcnZlciBpbiBTY3JvbGxUcmlnZ2VyIG1heSBzdG9wUHJvcGFnYXRpb24oKSBvbiB0aGUgcHJlc3MvZHJhZywgc28gdGhlIG9uUmVsZWFzZSBtYXkgZ2V0IGZpcmVkIHdpdGhvdXQgdGhlIG9uUHJlc3Mvb25EcmFnIGV2ZXIgZ2V0dGluZyBjYWxsZWQsIHRodXMgaXQgY291bGQgdHJpZ2dlciBhIGNsaWNrIHRvIG9jY3VyIG9uIGEgbGluayBhZnRlciBzY3JvbGwtZHJhZ2dpbmcgaXQuXG5cdFx0XHRcdFx0aWYgKHByZXZlbnREZWZhdWx0ICYmIGFsbG93Q2xpY2tzKSB7XG5cdFx0XHRcdFx0XHRnc2FwLmRlbGF5ZWRDYWxsKDAuMDgsICgpID0+IHsgLy8gc29tZSBicm93c2VycyAobGlrZSBGaXJlZm94KSB3b24ndCB0cnVzdCBzY3JpcHQtZ2VuZXJhdGVkIGNsaWNrcywgc28gaWYgdGhlIHVzZXIgdHJpZXMgdG8gY2xpY2sgb24gYSB2aWRlbyB0byBwbGF5IGl0LCBmb3IgZXhhbXBsZSwgaXQgc2ltcGx5IHdvbid0IHdvcmsuIFNpbmNlIGEgcmVndWxhciBcImNsaWNrXCIgZXZlbnQgd2lsbCBtb3N0IGxpa2VseSBiZSBnZW5lcmF0ZWQgYW55d2F5IChvbmUgdGhhdCBoYXMgaXRzIGlzVHJ1c3RlZCBmbGFnIHNldCB0byB0cnVlKSwgd2UgbXVzdCBzbGlnaHRseSBkZWxheSBvdXIgc2NyaXB0LWdlbmVyYXRlZCBjbGljayBzbyB0aGF0IHRoZSBcInJlYWxcIi90cnVzdGVkIG9uZSBpcyBwcmlvcml0aXplZC4gUmVtZW1iZXIsIHdoZW4gdGhlcmUgYXJlIGR1cGxpY2F0ZSBldmVudHMgaW4gcXVpY2sgc3VjY2Vzc2lvbiwgd2Ugc3VwcHJlc3MgYWxsIGJ1dCB0aGUgZmlyc3Qgb25lLiBTb21lIGJyb3dzZXJzIGRvbid0IGV2ZW4gdHJpZ2dlciB0aGUgXCJyZWFsXCIgb25lIGF0IGFsbCwgc28gb3VyIHN5bnRoZXRpYyBvbmUgaXMgYSBzYWZldHkgdmFsdmUgdGhhdCBlbnN1cmVzIHRoYXQgbm8gbWF0dGVyIHdoYXQsIGEgY2xpY2sgZXZlbnQgZG9lcyBnZXQgZGlzcGF0Y2hlZC5cblx0XHRcdFx0XHRcdFx0aWYgKF9nZXRUaW1lKCkgLSBvbkNsaWNrVGltZSA+IDMwMCAmJiAhZS5kZWZhdWx0UHJldmVudGVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGUudGFyZ2V0LmNsaWNrKSB7IC8vc29tZSBicm93c2VycyAobGlrZSBtb2JpbGUgU2FmYXJpKSBkb24ndCBwcm9wZXJseSB0cmlnZ2VyIHRoZSBjbGljayBldmVudFxuXHRcdFx0XHRcdFx0XHRcdFx0ZS50YXJnZXQuY2xpY2soKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKG93bmVyRG9jLmNyZWF0ZUV2ZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgc3ludGhldGljRXZlbnQgPSBvd25lckRvYy5jcmVhdGVFdmVudChcIk1vdXNlRXZlbnRzXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0c3ludGhldGljRXZlbnQuaW5pdE1vdXNlRXZlbnQoXCJjbGlja1wiLCB0cnVlLCB0cnVlLCBfd2luLCAxLCBldmVudERhdGEuc2NyZWVuWCwgZXZlbnREYXRhLnNjcmVlblksIGV2ZW50RGF0YS5jbGllbnRYLCBldmVudERhdGEuY2xpZW50WSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDAsIG51bGwpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZS50YXJnZXQuZGlzcGF0Y2hFdmVudChzeW50aGV0aWNFdmVudCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0c2VsZi5pc0RyYWdnaW5nID0gc2VsZi5pc0dlc3R1cmluZyA9IHNlbGYuaXNQcmVzc2VkID0gZmFsc2U7XG5cdFx0XHRcdG9uU3RvcCAmJiB3YXNEcmFnZ2luZyAmJiAhaXNOb3JtYWxpemVyICYmIG9uU3RvcERlbGF5ZWRDYWxsLnJlc3RhcnQodHJ1ZSk7XG5cdFx0XHRcdGRyYWdnZWQgJiYgdXBkYXRlKCk7IC8vIGluIGNhc2UgZGVib3VuY2luZywgd2UgZG9uJ3Qgd2FudCBvbkRyYWcgdG8gZmlyZSBBRlRFUiBvbkRyYWdFbmQoKS5cblx0XHRcdFx0b25EcmFnRW5kICYmIHdhc0RyYWdnaW5nICYmIG9uRHJhZ0VuZChzZWxmKTtcblx0XHRcdFx0b25SZWxlYXNlICYmIG9uUmVsZWFzZShzZWxmLCBpc0RyYWdOb3RDbGljayk7XG5cdFx0XHR9LFxuXHRcdFx0X29uR2VzdHVyZVN0YXJ0ID0gZSA9PiBlLnRvdWNoZXMgJiYgZS50b3VjaGVzLmxlbmd0aCA+IDEgJiYgKHNlbGYuaXNHZXN0dXJpbmcgPSB0cnVlKSAmJiBvbkdlc3R1cmVTdGFydChlLCBzZWxmLmlzRHJhZ2dpbmcpLFxuXHRcdFx0X29uR2VzdHVyZUVuZCA9ICgpID0+IChzZWxmLmlzR2VzdHVyaW5nID0gZmFsc2UpIHx8IG9uR2VzdHVyZUVuZChzZWxmKSxcblx0XHRcdG9uU2Nyb2xsID0gZSA9PiB7XG5cdFx0XHRcdGlmIChfaWdub3JlQ2hlY2soZSkpIHtyZXR1cm47fVxuXHRcdFx0XHRsZXQgeCA9IHNjcm9sbEZ1bmNYKCksXG5cdFx0XHRcdFx0eSA9IHNjcm9sbEZ1bmNZKCk7XG5cdFx0XHRcdG9uRGVsdGEoKHggLSBzY3JvbGxYKSAqIHNjcm9sbFNwZWVkLCAoeSAtIHNjcm9sbFkpICogc2Nyb2xsU3BlZWQsIDEpO1xuXHRcdFx0XHRzY3JvbGxYID0geDtcblx0XHRcdFx0c2Nyb2xsWSA9IHk7XG5cdFx0XHRcdG9uU3RvcCAmJiBvblN0b3BEZWxheWVkQ2FsbC5yZXN0YXJ0KHRydWUpO1xuXHRcdFx0fSxcblx0XHRcdF9vbldoZWVsID0gZSA9PiB7XG5cdFx0XHRcdGlmIChfaWdub3JlQ2hlY2soZSkpIHtyZXR1cm47fVxuXHRcdFx0XHRlID0gX2dldEV2ZW50KGUsIHByZXZlbnREZWZhdWx0KTtcblx0XHRcdFx0b25XaGVlbCAmJiAod2hlZWxlZCA9IHRydWUpO1xuXHRcdFx0XHRsZXQgbXVsdGlwbGllciA9IChlLmRlbHRhTW9kZSA9PT0gMSA/IGxpbmVIZWlnaHQgOiBlLmRlbHRhTW9kZSA9PT0gMiA/IF93aW4uaW5uZXJIZWlnaHQgOiAxKSAqIHdoZWVsU3BlZWQ7XG5cdFx0XHRcdG9uRGVsdGEoZS5kZWx0YVggKiBtdWx0aXBsaWVyLCBlLmRlbHRhWSAqIG11bHRpcGxpZXIsIDApO1xuXHRcdFx0XHRvblN0b3AgJiYgIWlzTm9ybWFsaXplciAmJiBvblN0b3BEZWxheWVkQ2FsbC5yZXN0YXJ0KHRydWUpO1xuXHRcdFx0fSxcblx0XHRcdF9vbk1vdmUgPSBlID0+IHtcblx0XHRcdFx0aWYgKF9pZ25vcmVDaGVjayhlKSkge3JldHVybjt9XG5cdFx0XHRcdGxldCB4ID0gZS5jbGllbnRYLFxuXHRcdFx0XHRcdHkgPSBlLmNsaWVudFksXG5cdFx0XHRcdFx0ZHggPSB4IC0gc2VsZi54LFxuXHRcdFx0XHRcdGR5ID0geSAtIHNlbGYueTtcblx0XHRcdFx0c2VsZi54ID0geDtcblx0XHRcdFx0c2VsZi55ID0geTtcblx0XHRcdFx0bW92ZWQgPSB0cnVlO1xuXHRcdFx0XHRvblN0b3AgJiYgb25TdG9wRGVsYXllZENhbGwucmVzdGFydCh0cnVlKTtcblx0XHRcdFx0KGR4IHx8IGR5KSAmJiBvblRvdWNoT3JQb2ludGVyRGVsdGEoZHgsIGR5KTtcblx0XHRcdH0sXG5cdFx0XHRfb25Ib3ZlciA9IGUgPT4ge3NlbGYuZXZlbnQgPSBlOyBvbkhvdmVyKHNlbGYpO30sXG5cdFx0XHRfb25Ib3ZlckVuZCA9IGUgPT4ge3NlbGYuZXZlbnQgPSBlOyBvbkhvdmVyRW5kKHNlbGYpO30sXG5cdFx0XHRfb25DbGljayA9IGUgPT4gX2lnbm9yZUNoZWNrKGUpIHx8IChfZ2V0RXZlbnQoZSwgcHJldmVudERlZmF1bHQpICYmIG9uQ2xpY2soc2VsZikpO1xuXG5cdFx0b25TdG9wRGVsYXllZENhbGwgPSBzZWxmLl9kYyA9IGdzYXAuZGVsYXllZENhbGwob25TdG9wRGVsYXkgfHwgMC4yNSwgb25TdG9wRnVuYykucGF1c2UoKTtcblxuXHRcdHNlbGYuZGVsdGFYID0gc2VsZi5kZWx0YVkgPSAwO1xuXHRcdHNlbGYuX3Z4ID0gX2dldFZlbG9jaXR5UHJvcCgwLCA1MCwgdHJ1ZSk7XG5cdFx0c2VsZi5fdnkgPSBfZ2V0VmVsb2NpdHlQcm9wKDAsIDUwLCB0cnVlKTtcblx0XHRzZWxmLnNjcm9sbFggPSBzY3JvbGxGdW5jWDtcblx0XHRzZWxmLnNjcm9sbFkgPSBzY3JvbGxGdW5jWTtcblx0XHRzZWxmLmlzRHJhZ2dpbmcgPSBzZWxmLmlzR2VzdHVyaW5nID0gc2VsZi5pc1ByZXNzZWQgPSBmYWxzZTtcblx0XHRfY29udGV4dCh0aGlzKTtcblx0XHRzZWxmLmVuYWJsZSA9IGUgPT4ge1xuXHRcdFx0aWYgKCFzZWxmLmlzRW5hYmxlZCkge1xuXHRcdFx0XHRfYWRkTGlzdGVuZXIoaXNWaWV3cG9ydCA/IG93bmVyRG9jIDogdGFyZ2V0LCBcInNjcm9sbFwiLCBfb25TY3JvbGwpO1xuXHRcdFx0XHR0eXBlLmluZGV4T2YoXCJzY3JvbGxcIikgPj0gMCAmJiBfYWRkTGlzdGVuZXIoaXNWaWV3cG9ydCA/IG93bmVyRG9jIDogdGFyZ2V0LCBcInNjcm9sbFwiLCBvblNjcm9sbCwgcGFzc2l2ZSwgY2FwdHVyZSk7XG5cdFx0XHRcdHR5cGUuaW5kZXhPZihcIndoZWVsXCIpID49IDAgJiYgX2FkZExpc3RlbmVyKHRhcmdldCwgXCJ3aGVlbFwiLCBfb25XaGVlbCwgcGFzc2l2ZSwgY2FwdHVyZSk7XG5cdFx0XHRcdGlmICgodHlwZS5pbmRleE9mKFwidG91Y2hcIikgPj0gMCAmJiBfaXNUb3VjaCkgfHwgdHlwZS5pbmRleE9mKFwicG9pbnRlclwiKSA+PSAwKSB7XG5cdFx0XHRcdFx0X2FkZExpc3RlbmVyKHRhcmdldCwgX2V2ZW50VHlwZXNbMF0sIF9vblByZXNzLCBwYXNzaXZlLCBjYXB0dXJlKTtcblx0XHRcdFx0XHRfYWRkTGlzdGVuZXIob3duZXJEb2MsIF9ldmVudFR5cGVzWzJdLCBfb25SZWxlYXNlKTtcblx0XHRcdFx0XHRfYWRkTGlzdGVuZXIob3duZXJEb2MsIF9ldmVudFR5cGVzWzNdLCBfb25SZWxlYXNlKTtcblx0XHRcdFx0XHRhbGxvd0NsaWNrcyAmJiBfYWRkTGlzdGVuZXIodGFyZ2V0LCBcImNsaWNrXCIsIGNsaWNrQ2FwdHVyZSwgdHJ1ZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0b25DbGljayAmJiBfYWRkTGlzdGVuZXIodGFyZ2V0LCBcImNsaWNrXCIsIF9vbkNsaWNrKTtcblx0XHRcdFx0XHRvbkdlc3R1cmVTdGFydCAmJiBfYWRkTGlzdGVuZXIob3duZXJEb2MsIFwiZ2VzdHVyZXN0YXJ0XCIsIF9vbkdlc3R1cmVTdGFydCk7XG5cdFx0XHRcdFx0b25HZXN0dXJlRW5kICYmIF9hZGRMaXN0ZW5lcihvd25lckRvYywgXCJnZXN0dXJlZW5kXCIsIF9vbkdlc3R1cmVFbmQpO1xuXHRcdFx0XHRcdG9uSG92ZXIgJiYgX2FkZExpc3RlbmVyKHRhcmdldCwgX3BvaW50ZXJUeXBlICsgXCJlbnRlclwiLCBfb25Ib3Zlcik7XG5cdFx0XHRcdFx0b25Ib3ZlckVuZCAmJiBfYWRkTGlzdGVuZXIodGFyZ2V0LCBfcG9pbnRlclR5cGUgKyBcImxlYXZlXCIsIF9vbkhvdmVyRW5kKTtcblx0XHRcdFx0XHRvbk1vdmUgJiYgX2FkZExpc3RlbmVyKHRhcmdldCwgX3BvaW50ZXJUeXBlICsgXCJtb3ZlXCIsIF9vbk1vdmUpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNlbGYuaXNFbmFibGVkID0gdHJ1ZTtcblx0XHRcdFx0c2VsZi5pc0RyYWdnaW5nID0gc2VsZi5pc0dlc3R1cmluZyA9IHNlbGYuaXNQcmVzc2VkID0gbW92ZWQgPSBkcmFnZ2VkID0gZmFsc2U7XG5cdFx0XHRcdHNlbGYuX3Z4LnJlc2V0KCk7XG5cdFx0XHRcdHNlbGYuX3Z5LnJlc2V0KCk7XG5cdFx0XHRcdHNjcm9sbFggPSBzY3JvbGxGdW5jWCgpO1xuXHRcdFx0XHRzY3JvbGxZID0gc2Nyb2xsRnVuY1koKTtcblx0XHRcdFx0ZSAmJiBlLnR5cGUgJiYgX29uUHJlc3MoZSk7XG5cdFx0XHRcdG9uRW5hYmxlICYmIG9uRW5hYmxlKHNlbGYpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNlbGY7XG5cdFx0fTtcblx0XHRzZWxmLmRpc2FibGUgPSAoKSA9PiB7XG5cdFx0XHRpZiAoc2VsZi5pc0VuYWJsZWQpIHtcblx0XHRcdFx0Ly8gb25seSByZW1vdmUgdGhlIF9vblNjcm9sbCBsaXN0ZW5lciBpZiB0aGVyZSBhcmVuJ3QgYW55IG90aGVycyB0aGF0IHJlbHkgb24gdGhlIGZ1bmN0aW9uYWxpdHkuXG5cdFx0XHRcdF9vYnNlcnZlcnMuZmlsdGVyKG8gPT4gbyAhPT0gc2VsZiAmJiBfaXNWaWV3cG9ydChvLnRhcmdldCkpLmxlbmd0aCB8fCBfcmVtb3ZlTGlzdGVuZXIoaXNWaWV3cG9ydCA/IG93bmVyRG9jIDogdGFyZ2V0LCBcInNjcm9sbFwiLCBfb25TY3JvbGwpO1xuXHRcdFx0XHRpZiAoc2VsZi5pc1ByZXNzZWQpIHtcblx0XHRcdFx0XHRzZWxmLl92eC5yZXNldCgpO1xuXHRcdFx0XHRcdHNlbGYuX3Z5LnJlc2V0KCk7XG5cdFx0XHRcdFx0X3JlbW92ZUxpc3RlbmVyKGlzTm9ybWFsaXplciA/IHRhcmdldCA6IG93bmVyRG9jLCBfZXZlbnRUeXBlc1sxXSwgX29uRHJhZywgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0X3JlbW92ZUxpc3RlbmVyKGlzVmlld3BvcnQgPyBvd25lckRvYyA6IHRhcmdldCwgXCJzY3JvbGxcIiwgb25TY3JvbGwsIGNhcHR1cmUpO1xuXHRcdFx0XHRfcmVtb3ZlTGlzdGVuZXIodGFyZ2V0LCBcIndoZWVsXCIsIF9vbldoZWVsLCBjYXB0dXJlKTtcblx0XHRcdFx0X3JlbW92ZUxpc3RlbmVyKHRhcmdldCwgX2V2ZW50VHlwZXNbMF0sIF9vblByZXNzLCBjYXB0dXJlKTtcblx0XHRcdFx0X3JlbW92ZUxpc3RlbmVyKG93bmVyRG9jLCBfZXZlbnRUeXBlc1syXSwgX29uUmVsZWFzZSk7XG5cdFx0XHRcdF9yZW1vdmVMaXN0ZW5lcihvd25lckRvYywgX2V2ZW50VHlwZXNbM10sIF9vblJlbGVhc2UpO1xuXHRcdFx0XHRfcmVtb3ZlTGlzdGVuZXIodGFyZ2V0LCBcImNsaWNrXCIsIGNsaWNrQ2FwdHVyZSwgdHJ1ZSk7XG5cdFx0XHRcdF9yZW1vdmVMaXN0ZW5lcih0YXJnZXQsIFwiY2xpY2tcIiwgX29uQ2xpY2spO1xuXHRcdFx0XHRfcmVtb3ZlTGlzdGVuZXIob3duZXJEb2MsIFwiZ2VzdHVyZXN0YXJ0XCIsIF9vbkdlc3R1cmVTdGFydCk7XG5cdFx0XHRcdF9yZW1vdmVMaXN0ZW5lcihvd25lckRvYywgXCJnZXN0dXJlZW5kXCIsIF9vbkdlc3R1cmVFbmQpO1xuXHRcdFx0XHRfcmVtb3ZlTGlzdGVuZXIodGFyZ2V0LCBfcG9pbnRlclR5cGUgKyBcImVudGVyXCIsIF9vbkhvdmVyKTtcblx0XHRcdFx0X3JlbW92ZUxpc3RlbmVyKHRhcmdldCwgX3BvaW50ZXJUeXBlICsgXCJsZWF2ZVwiLCBfb25Ib3ZlckVuZCk7XG5cdFx0XHRcdF9yZW1vdmVMaXN0ZW5lcih0YXJnZXQsIF9wb2ludGVyVHlwZSArIFwibW92ZVwiLCBfb25Nb3ZlKTtcblx0XHRcdFx0c2VsZi5pc0VuYWJsZWQgPSBzZWxmLmlzUHJlc3NlZCA9IHNlbGYuaXNEcmFnZ2luZyA9IGZhbHNlO1xuXHRcdFx0XHRvbkRpc2FibGUgJiYgb25EaXNhYmxlKHNlbGYpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRzZWxmLmtpbGwgPSBzZWxmLnJldmVydCA9ICgpID0+IHtcblx0XHRcdHNlbGYuZGlzYWJsZSgpO1xuXHRcdFx0bGV0IGkgPSBfb2JzZXJ2ZXJzLmluZGV4T2Yoc2VsZik7XG5cdFx0XHRpID49IDAgJiYgX29ic2VydmVycy5zcGxpY2UoaSwgMSk7XG5cdFx0XHRfbm9ybWFsaXplciA9PT0gc2VsZiAmJiAoX25vcm1hbGl6ZXIgPSAwKTtcblx0XHR9XG5cblx0XHRfb2JzZXJ2ZXJzLnB1c2goc2VsZik7XG5cdFx0aXNOb3JtYWxpemVyICYmIF9pc1ZpZXdwb3J0KHRhcmdldCkgJiYgKF9ub3JtYWxpemVyID0gc2VsZik7XG5cblx0XHRzZWxmLmVuYWJsZShldmVudCk7XG5cdH1cblxuXHRnZXQgdmVsb2NpdHlYKCkge1xuXHRcdHJldHVybiB0aGlzLl92eC5nZXRWZWxvY2l0eSgpO1xuXHR9XG5cdGdldCB2ZWxvY2l0eVkoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3Z5LmdldFZlbG9jaXR5KCk7XG5cdH1cblxufVxuXG5PYnNlcnZlci52ZXJzaW9uID0gXCIzLjEyLjdcIjtcbk9ic2VydmVyLmNyZWF0ZSA9IHZhcnMgPT4gbmV3IE9ic2VydmVyKHZhcnMpO1xuT2JzZXJ2ZXIucmVnaXN0ZXIgPSBfaW5pdENvcmU7XG5PYnNlcnZlci5nZXRBbGwgPSAoKSA9PiBfb2JzZXJ2ZXJzLnNsaWNlKCk7XG5PYnNlcnZlci5nZXRCeUlkID0gaWQgPT4gX29ic2VydmVycy5maWx0ZXIobyA9PiBvLnZhcnMuaWQgPT09IGlkKVswXTtcblxuX2dldEdTQVAoKSAmJiBnc2FwLnJlZ2lzdGVyUGx1Z2luKE9ic2VydmVyKTtcblxuZXhwb3J0IHsgT2JzZXJ2ZXIgYXMgZGVmYXVsdCwgX2lzVmlld3BvcnQsIF9zY3JvbGxlcnMsIF9nZXRTY3JvbGxGdW5jLCBfZ2V0UHJveHlQcm9wLCBfcHJveGllcywgX2dldFZlbG9jaXR5UHJvcCwgX3ZlcnRpY2FsLCBfaG9yaXpvbnRhbCwgX2dldFRhcmdldCB9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/gsap/src/Observer.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/gsap/src/ScrollTrigger.js\":\r\n/*!************************************************!*\\\r\n  !*** ./node_modules/gsap/src/ScrollTrigger.js ***!\r\n  \\************************************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"ScrollTrigger\\\": () => (/* binding */ ScrollTrigger),\\n/* harmony export */   \\\"default\\\": () => (/* binding */ ScrollTrigger)\\n/* harmony export */ });\\n/* harmony import */ var _Observer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Observer.js */ \\\"./node_modules/gsap/src/Observer.js\\\");\\n/*!\\n * ScrollTrigger 3.12.7\\n * https://gsap.com\\n *\\n * @license Copyright 2008-2025, GreenSock. All rights reserved.\\n * Subject to the terms at https://gsap.com/standard-license or for\\n * Club GSAP members, the agreement issued with that membership.\\n * @author: Jack Doyle, jack@greensock.com\\n*/\\n/* eslint-disable */\\n\\n\\n\\nlet gsap, _coreInitted, _win, _doc, _docEl, _body, _root, _resizeDelay, _toArray, _clamp, _time2, _syncInterval, _refreshing, _pointerIsDown, _transformProp, _i, _prevWidth, _prevHeight, _autoRefresh, _sort, _suppressOverwrites, _ignoreResize, _normalizer, _ignoreMobileResize, _baseScreenHeight, _baseScreenWidth, _fixIOSBug, _context, _scrollRestoration, _div100vh, _100vh, _isReverted, _clampingMax,\\n\\t_limitCallbacks, // if true, we'll only trigger callbacks if the active state toggles, so if you scroll immediately past both the start and end positions of a ScrollTrigger (thus inactive to inactive), neither its onEnter nor onLeave will be called. This is useful during startup.\\n\\t_startup = 1,\\n\\t_getTime = Date.now,\\n\\t_time1 = _getTime(),\\n\\t_lastScrollTime = 0,\\n\\t_enabled = 0,\\n\\t_parseClamp = (value, type, self) => {\\n\\t\\tlet clamp = (_isString(value) && (value.substr(0, 6) === \\\"clamp(\\\" || value.indexOf(\\\"max\\\") > -1));\\n\\t\\tself[\\\"_\\\" + type + \\\"Clamp\\\"] = clamp;\\n\\t\\treturn clamp ? value.substr(6, value.length - 7) : value;\\n\\t},\\n\\t_keepClamp = (value, clamp) => clamp && (!_isString(value) || value.substr(0, 6) !== \\\"clamp(\\\") ? \\\"clamp(\\\" + value + \\\")\\\" : value,\\n\\t_rafBugFix = () => _enabled && requestAnimationFrame(_rafBugFix), // in some browsers (like Firefox), screen repaints weren't consistent unless we had SOMETHING queued up in requestAnimationFrame()! So this just creates a super simple loop to keep it alive and smooth out repaints.\\n\\t_pointerDownHandler = () => _pointerIsDown = 1,\\n\\t_pointerUpHandler = () => _pointerIsDown = 0,\\n\\t_passThrough = v => v,\\n\\t_round = value => Math.round(value * 100000) / 100000 || 0,\\n\\t_windowExists = () => typeof(window) !== \\\"undefined\\\",\\n\\t_getGSAP = () => gsap || (_windowExists() && (gsap = window.gsap) && gsap.registerPlugin && gsap),\\n\\t_isViewport = e => !!~_root.indexOf(e),\\n\\t_getViewportDimension = dimensionProperty => (dimensionProperty === \\\"Height\\\" ? _100vh : _win[\\\"inner\\\" + dimensionProperty]) || _docEl[\\\"client\\\" + dimensionProperty] || _body[\\\"client\\\" + dimensionProperty],\\n\\t_getBoundsFunc = element => (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(element, \\\"getBoundingClientRect\\\") || (_isViewport(element) ? () => {_winOffsets.width = _win.innerWidth; _winOffsets.height = _100vh; return _winOffsets;} : () => _getBounds(element)),\\n\\t_getSizeFunc = (scroller, isViewport, {d, d2, a}) => (a = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(scroller, \\\"getBoundingClientRect\\\")) ? () => a()[d] : () => (isViewport ? _getViewportDimension(d2) : scroller[\\\"client\\\" + d2]) || 0,\\n\\t_getOffsetsFunc = (element, isViewport) => !isViewport || ~_Observer_js__WEBPACK_IMPORTED_MODULE_0__._proxies.indexOf(element) ? _getBoundsFunc(element) : () => _winOffsets,\\n\\t_maxScroll = (element, {s, d2, d, a}) => Math.max(0, (s = \\\"scroll\\\" + d2) && (a = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(element, s)) ? a() - _getBoundsFunc(element)()[d] : _isViewport(element) ? (_docEl[s] || _body[s]) - _getViewportDimension(d2) : element[s] - element[\\\"offset\\\" + d2]),\\n\\t_iterateAutoRefresh = (func, events) => {\\n\\t\\tfor (let i = 0; i < _autoRefresh.length; i += 3) {\\n\\t\\t\\t(!events || ~events.indexOf(_autoRefresh[i+1])) && func(_autoRefresh[i], _autoRefresh[i+1], _autoRefresh[i+2]);\\n\\t\\t}\\n\\t},\\n\\t_isString = value => typeof(value) === \\\"string\\\",\\n\\t_isFunction = value => typeof(value) === \\\"function\\\",\\n\\t_isNumber = value => typeof(value) === \\\"number\\\",\\n\\t_isObject = value => typeof(value) === \\\"object\\\",\\n\\t_endAnimation = (animation, reversed, pause) => animation && animation.progress(reversed ? 0 : 1) && pause && animation.pause(),\\n\\t_callback = (self, func) => {\\n\\t\\tif (self.enabled) {\\n\\t\\t\\tlet result = self._ctx ? self._ctx.add(() => func(self)) : func(self);\\n\\t\\t\\tresult && result.totalTime && (self.callbackAnimation = result);\\n\\t\\t}\\n\\t},\\n\\t_abs = Math.abs,\\n\\t_left = \\\"left\\\",\\n\\t_top = \\\"top\\\",\\n\\t_right = \\\"right\\\",\\n\\t_bottom = \\\"bottom\\\",\\n\\t_width = \\\"width\\\",\\n\\t_height = \\\"height\\\",\\n\\t_Right = \\\"Right\\\",\\n\\t_Left = \\\"Left\\\",\\n\\t_Top = \\\"Top\\\",\\n\\t_Bottom = \\\"Bottom\\\",\\n\\t_padding = \\\"padding\\\",\\n\\t_margin = \\\"margin\\\",\\n\\t_Width = \\\"Width\\\",\\n\\t_Height = \\\"Height\\\",\\n\\t_px = \\\"px\\\",\\n\\t_getComputedStyle = element => _win.getComputedStyle(element),\\n\\t_makePositionable = element => { // if the element already has position: absolute or fixed, leave that, otherwise make it position: relative\\n\\t\\tlet position = _getComputedStyle(element).position;\\n\\t\\telement.style.position = (position === \\\"absolute\\\" || position === \\\"fixed\\\") ? position : \\\"relative\\\";\\n\\t},\\n\\t_setDefaults = (obj, defaults) => {\\n\\t\\tfor (let p in defaults) {\\n\\t\\t\\t(p in obj) || (obj[p] = defaults[p]);\\n\\t\\t}\\n\\t\\treturn obj;\\n\\t},\\n\\t_getBounds = (element, withoutTransforms) => {\\n\\t\\tlet tween = withoutTransforms && _getComputedStyle(element)[_transformProp] !== \\\"matrix(1, 0, 0, 1, 0, 0)\\\" && gsap.to(element, {x: 0, y: 0, xPercent: 0, yPercent: 0, rotation: 0, rotationX: 0, rotationY: 0, scale: 1, skewX: 0, skewY: 0}).progress(1),\\n\\t\\t\\tbounds = element.getBoundingClientRect();\\n\\t\\ttween && tween.progress(0).kill();\\n\\t\\treturn bounds;\\n\\t},\\n\\t_getSize = (element, {d2}) => element[\\\"offset\\\" + d2] || element[\\\"client\\\" + d2] || 0,\\n\\t_getLabelRatioArray = timeline => {\\n\\t\\tlet a = [],\\n\\t\\t\\tlabels = timeline.labels,\\n\\t\\t\\tduration = timeline.duration(),\\n\\t\\t\\tp;\\n\\t\\tfor (p in labels) {\\n\\t\\t\\ta.push(labels[p] / duration);\\n\\t\\t}\\n\\t\\treturn a;\\n\\t},\\n\\t_getClosestLabel = animation => value => gsap.utils.snap(_getLabelRatioArray(animation), value),\\n\\t_snapDirectional = snapIncrementOrArray => {\\n\\t\\tlet snap = gsap.utils.snap(snapIncrementOrArray),\\n\\t\\t\\ta = Array.isArray(snapIncrementOrArray) && snapIncrementOrArray.slice(0).sort((a, b) => a - b);\\n\\t\\treturn a ? (value, direction, threshold= 1e-3) => {\\n\\t\\t\\tlet i;\\n\\t\\t\\tif (!direction) {\\n\\t\\t\\t\\treturn snap(value);\\n\\t\\t\\t}\\n\\t\\t\\tif (direction > 0) {\\n\\t\\t\\t\\tvalue -= threshold; // to avoid rounding errors. If we're too strict, it might snap forward, then immediately again, and again.\\n\\t\\t\\t\\tfor (i = 0; i < a.length; i++) {\\n\\t\\t\\t\\t\\tif (a[i] >= value) {\\n\\t\\t\\t\\t\\t\\treturn a[i];\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\treturn a[i-1];\\n\\t\\t\\t} else {\\n\\t\\t\\t\\ti = a.length;\\n\\t\\t\\t\\tvalue += threshold;\\n\\t\\t\\t\\twhile (i--) {\\n\\t\\t\\t\\t\\tif (a[i] <= value) {\\n\\t\\t\\t\\t\\t\\treturn a[i];\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\treturn a[0];\\n\\t\\t} : (value, direction, threshold= 1e-3) => {\\n\\t\\t\\tlet snapped = snap(value);\\n\\t\\t\\treturn !direction || Math.abs(snapped - value) < threshold || ((snapped - value < 0) === direction < 0) ? snapped : snap(direction < 0 ? value - snapIncrementOrArray : value + snapIncrementOrArray);\\n\\t\\t};\\n\\t},\\n\\t_getLabelAtDirection = timeline => (value, st) => _snapDirectional(_getLabelRatioArray(timeline))(value, st.direction),\\n\\t_multiListener = (func, element, types, callback) => types.split(\\\",\\\").forEach(type => func(element, type, callback)),\\n\\t_addListener = (element, type, func, nonPassive, capture) => element.addEventListener(type, func, {passive: !nonPassive, capture: !!capture}),\\n\\t_removeListener = (element, type, func, capture) => element.removeEventListener(type, func, !!capture),\\n\\t_wheelListener = (func, el, scrollFunc) => {\\n\\t\\tscrollFunc = scrollFunc && scrollFunc.wheelHandler\\n\\t\\tif (scrollFunc) {\\n\\t\\t\\tfunc(el, \\\"wheel\\\", scrollFunc);\\n\\t\\t\\tfunc(el, \\\"touchmove\\\", scrollFunc);\\n\\t\\t}\\n\\t},\\n\\t_markerDefaults = {startColor: \\\"green\\\", endColor: \\\"red\\\", indent: 0, fontSize: \\\"16px\\\", fontWeight:\\\"normal\\\"},\\n\\t_defaults = {toggleActions: \\\"play\\\", anticipatePin: 0},\\n\\t_keywords = {top: 0, left: 0, center: 0.5, bottom: 1, right: 1},\\n\\t_offsetToPx = (value, size) => {\\n\\t\\tif (_isString(value)) {\\n\\t\\t\\tlet eqIndex = value.indexOf(\\\"=\\\"),\\n\\t\\t\\t\\trelative = ~eqIndex ? +(value.charAt(eqIndex-1) + 1) * parseFloat(value.substr(eqIndex + 1)) : 0;\\n\\t\\t\\tif (~eqIndex) {\\n\\t\\t\\t\\t(value.indexOf(\\\"%\\\") > eqIndex) && (relative *= size / 100);\\n\\t\\t\\t\\tvalue = value.substr(0, eqIndex-1);\\n\\t\\t\\t}\\n\\t\\t\\tvalue = relative + ((value in _keywords) ? _keywords[value] * size : ~value.indexOf(\\\"%\\\") ? parseFloat(value) * size / 100 : parseFloat(value) || 0);\\n\\t\\t}\\n\\t\\treturn value;\\n\\t},\\n\\t_createMarker = (type, name, container, direction, {startColor, endColor, fontSize, indent, fontWeight}, offset, matchWidthEl, containerAnimation) => {\\n\\t\\tlet e = _doc.createElement(\\\"div\\\"),\\n\\t\\t\\tuseFixedPosition = _isViewport(container) || (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(container, \\\"pinType\\\") === \\\"fixed\\\",\\n\\t\\t\\tisScroller = type.indexOf(\\\"scroller\\\") !== -1,\\n\\t\\t\\tparent = useFixedPosition ? _body : container,\\n\\t\\t\\tisStart = type.indexOf(\\\"start\\\") !== -1,\\n\\t\\t\\tcolor = isStart ? startColor : endColor,\\n\\t\\t\\tcss = \\\"border-color:\\\" + color + \\\";font-size:\\\" + fontSize + \\\";color:\\\" + color + \\\";font-weight:\\\" + fontWeight + \\\";pointer-events:none;white-space:nowrap;font-family:sans-serif,Arial;z-index:1000;padding:4px 8px;border-width:0;border-style:solid;\\\";\\n\\t\\tcss += \\\"position:\\\" + ((isScroller || containerAnimation) && useFixedPosition ? \\\"fixed;\\\" : \\\"absolute;\\\");\\n\\t\\t(isScroller || containerAnimation || !useFixedPosition) && (css += (direction === _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical ? _right : _bottom) + \\\":\\\" + (offset + parseFloat(indent)) + \\\"px;\\\");\\n\\t\\tmatchWidthEl && (css += \\\"box-sizing:border-box;text-align:left;width:\\\" + matchWidthEl.offsetWidth + \\\"px;\\\");\\n\\t\\te._isStart = isStart;\\n\\t\\te.setAttribute(\\\"class\\\", \\\"gsap-marker-\\\" + type + (name ? \\\" marker-\\\" + name : \\\"\\\"));\\n\\t\\te.style.cssText = css;\\n\\t\\te.innerText = name || name === 0 ? type + \\\"-\\\" + name : type;\\n\\t\\tparent.children[0] ? parent.insertBefore(e, parent.children[0]) : parent.appendChild(e);\\n\\t\\te._offset = e[\\\"offset\\\" + direction.op.d2];\\n\\t\\t_positionMarker(e, 0, direction, isStart);\\n\\t\\treturn e;\\n\\t},\\n\\t_positionMarker = (marker, start, direction, flipped) => {\\n\\t\\tlet vars = {display: \\\"block\\\"},\\n\\t\\t\\tside = direction[flipped ? \\\"os2\\\" : \\\"p2\\\"],\\n\\t\\t\\toppositeSide = direction[flipped ? \\\"p2\\\" : \\\"os2\\\"];\\n\\t\\tmarker._isFlipped = flipped;\\n\\t\\tvars[direction.a + \\\"Percent\\\"] = flipped ? -100 : 0;\\n\\t\\tvars[direction.a] = flipped ? \\\"1px\\\" : 0;\\n\\t\\tvars[\\\"border\\\" + side + _Width] = 1;\\n\\t\\tvars[\\\"border\\\" + oppositeSide + _Width] = 0;\\n\\t\\tvars[direction.p] = start + \\\"px\\\";\\n\\t\\tgsap.set(marker, vars);\\n\\t},\\n\\t_triggers = [],\\n\\t_ids = {},\\n\\t_rafID,\\n\\t_sync = () => _getTime() - _lastScrollTime > 34 && (_rafID || (_rafID = requestAnimationFrame(_updateAll))),\\n\\t_onScroll = () => { // previously, we tried to optimize performance by batching/deferring to the next requestAnimationFrame(), but discovered that Safari has a few bugs that make this unworkable (especially on iOS). See https://codepen.io/GreenSock/pen/16c435b12ef09c38125204818e7b45fc?editors=0010 and https://codepen.io/GreenSock/pen/JjOxYpQ/3dd65ccec5a60f1d862c355d84d14562?editors=0010 and https://codepen.io/GreenSock/pen/ExbrPNa/087cef197dc35445a0951e8935c41503?editors=0010\\n\\t\\tif (!_normalizer || !_normalizer.isPressed || _normalizer.startX > _body.clientWidth) { // if the user is dragging the scrollbar, allow it.\\n\\t\\t\\t_Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache++;\\n\\t\\t\\tif (_normalizer) {\\n\\t\\t\\t\\t_rafID || (_rafID = requestAnimationFrame(_updateAll));\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t_updateAll(); // Safari in particular (on desktop) NEEDS the immediate update rather than waiting for a requestAnimationFrame() whereas iOS seems to benefit from waiting for the requestAnimationFrame() tick, at least when normalizing. See https://codepen.io/GreenSock/pen/qBYozqO?editors=0110\\n\\t\\t\\t}\\n\\t\\t\\t_lastScrollTime || _dispatch(\\\"scrollStart\\\");\\n\\t\\t\\t_lastScrollTime = _getTime();\\n\\t\\t}\\n\\t},\\n\\t_setBaseDimensions = () => {\\n\\t\\t_baseScreenWidth = _win.innerWidth;\\n\\t\\t_baseScreenHeight = _win.innerHeight;\\n\\t},\\n\\t_onResize = (force) => {\\n\\t\\t_Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache++;\\n\\t\\t(force === true || (!_refreshing && !_ignoreResize && !_doc.fullscreenElement && !_doc.webkitFullscreenElement && (!_ignoreMobileResize || _baseScreenWidth !== _win.innerWidth || Math.abs(_win.innerHeight - _baseScreenHeight) > _win.innerHeight * 0.25))) && _resizeDelay.restart(true);\\n\\t}, // ignore resizes triggered by refresh()\\n\\t_listeners = {},\\n\\t_emptyArray = [],\\n\\t_softRefresh = () => _removeListener(ScrollTrigger, \\\"scrollEnd\\\", _softRefresh) || _refreshAll(true),\\n\\t_dispatch = type => (_listeners[type] && _listeners[type].map(f => f())) || _emptyArray,\\n\\t_savedStyles = [], // when ScrollTrigger.saveStyles() is called, the inline styles are recorded in this Array in a sequential format like [element, cssText, gsCache, media]. This keeps it very memory-efficient and fast to iterate through.\\n\\t_revertRecorded = media => {\\n\\t\\tfor (let i = 0; i < _savedStyles.length; i+=5) {\\n\\t\\t\\tif (!media || _savedStyles[i+4] && _savedStyles[i+4].query === media) {\\n\\t\\t\\t\\t_savedStyles[i].style.cssText = _savedStyles[i+1];\\n\\t\\t\\t\\t_savedStyles[i].getBBox && _savedStyles[i].setAttribute(\\\"transform\\\", _savedStyles[i+2] || \\\"\\\");\\n\\t\\t\\t\\t_savedStyles[i+3].uncache = 1;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t_revertAll = (kill, media) => {\\n\\t\\tlet trigger;\\n\\t\\tfor (_i = 0; _i < _triggers.length; _i++) {\\n\\t\\t\\ttrigger = _triggers[_i];\\n\\t\\t\\tif (trigger && (!media || trigger._ctx === media)) {\\n\\t\\t\\t\\tif (kill) {\\n\\t\\t\\t\\t\\ttrigger.kill(1);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\ttrigger.revert(true, true);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t_isReverted = true;\\n\\t\\tmedia && _revertRecorded(media);\\n\\t\\tmedia || _dispatch(\\\"revert\\\");\\n\\t},\\n\\t_clearScrollMemory = (scrollRestoration, force) => { // zero-out all the recorded scroll positions. Don't use _triggers because if, for example, .matchMedia() is used to create some ScrollTriggers and then the user resizes and it removes ALL ScrollTriggers, and then go back to a size where there are ScrollTriggers, it would have kept the position(s) saved from the initial state.\\n\\t\\t_Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache++;\\n\\t\\t(force || !_refreshingAll) && _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.forEach(obj => _isFunction(obj) && obj.cacheID++ && (obj.rec = 0));\\n\\t\\t_isString(scrollRestoration) && (_win.history.scrollRestoration = _scrollRestoration = scrollRestoration);\\n\\t},\\n\\t_refreshingAll,\\n\\t_refreshID = 0,\\n\\t_queueRefreshID,\\n\\t_queueRefreshAll = () => { // we don't want to call _refreshAll() every time we create a new ScrollTrigger (for performance reasons) - it's better to batch them. Some frameworks dynamically load content and we can't rely on the window's \\\"load\\\" or \\\"DOMContentLoaded\\\" events to trigger it.\\n\\t\\tif (_queueRefreshID !== _refreshID) {\\n\\t\\t\\tlet id = _queueRefreshID = _refreshID;\\n\\t\\t\\trequestAnimationFrame(() => id === _refreshID && _refreshAll(true));\\n\\t\\t}\\n\\t},\\n\\t_refresh100vh = () => {\\n\\t\\t_body.appendChild(_div100vh);\\n\\t\\t_100vh = (!_normalizer && _div100vh.offsetHeight) || _win.innerHeight;\\n\\t\\t_body.removeChild(_div100vh);\\n\\t},\\n\\t_hideAllMarkers = hide => _toArray(\\\".gsap-marker-start, .gsap-marker-end, .gsap-marker-scroller-start, .gsap-marker-scroller-end\\\").forEach(el => el.style.display = hide ? \\\"none\\\" : \\\"block\\\"),\\n\\t_refreshAll = (force, skipRevert) => {\\n\\t\\t_docEl = _doc.documentElement; // some frameworks like Astro may cache the <body> and replace it during routing, so we'll just re-record the _docEl and _body for safety (otherwise, the markers may not get added properly).\\n\\t\\t_body = _doc.body;\\n\\t\\t_root = [_win, _doc, _docEl, _body];\\n\\t\\tif (_lastScrollTime && !force && !_isReverted) {\\n\\t\\t\\t_addListener(ScrollTrigger, \\\"scrollEnd\\\", _softRefresh);\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t\\t_refresh100vh();\\n\\t\\t_refreshingAll = ScrollTrigger.isRefreshing = true;\\n\\t\\t_Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.forEach(obj => _isFunction(obj) && ++obj.cacheID && (obj.rec = obj())); // force the clearing of the cache because some browsers take a little while to dispatch the \\\"scroll\\\" event and the user may have changed the scroll position and then called ScrollTrigger.refresh() right away\\n\\t\\tlet refreshInits = _dispatch(\\\"refreshInit\\\");\\n\\t\\t_sort && ScrollTrigger.sort();\\n\\t\\tskipRevert || _revertAll();\\n\\t\\t_Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.forEach(obj => {\\n\\t\\t\\tif (_isFunction(obj)) {\\n\\t\\t\\t\\tobj.smooth && (obj.target.style.scrollBehavior = \\\"auto\\\"); // smooth scrolling interferes\\n\\t\\t\\t\\tobj(0);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\t_triggers.slice(0).forEach(t => t.refresh()) // don't loop with _i because during a refresh() someone could call ScrollTrigger.update() which would iterate through _i resulting in a skip.\\n\\t\\t_isReverted = false;\\n\\t\\t_triggers.forEach((t) => { // nested pins (pinnedContainer) with pinSpacing may expand the container, so we must accommodate that here.\\n\\t\\t\\tif (t._subPinOffset && t.pin) {\\n\\t\\t\\t\\tlet prop = t.vars.horizontal ? \\\"offsetWidth\\\" : \\\"offsetHeight\\\",\\n\\t\\t\\t\\t\\toriginal = t.pin[prop];\\n\\t\\t\\t\\tt.revert(true, 1);\\n\\t\\t\\t\\tt.adjustPinSpacing(t.pin[prop] - original);\\n\\t\\t\\t\\tt.refresh();\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\t_clampingMax = 1; // pinSpacing might be propping a page open, thus when we .setPositions() to clamp a ScrollTrigger's end we should leave the pinSpacing alone. That's what this flag is for.\\n\\t\\t_hideAllMarkers(true);\\n\\t\\t_triggers.forEach(t => { // the scroller's max scroll position may change after all the ScrollTriggers refreshed (like pinning could push it down), so we need to loop back and correct any with end: \\\"max\\\". Same for anything with a clamped end\\n\\t\\t\\tlet max = _maxScroll(t.scroller, t._dir),\\n\\t\\t\\t\\tendClamp = t.vars.end === \\\"max\\\" || (t._endClamp && t.end > max),\\n\\t\\t\\t\\tstartClamp = t._startClamp && t.start >= max;\\n\\t\\t\\t(endClamp || startClamp) && t.setPositions(startClamp ? max - 1 : t.start, endClamp ? Math.max(startClamp ? max : t.start + 1, max) : t.end, true);\\n\\t\\t});\\n\\t\\t_hideAllMarkers(false);\\n\\t\\t_clampingMax = 0;\\n\\t\\trefreshInits.forEach(result => result && result.render && result.render(-1)); // if the onRefreshInit() returns an animation (typically a gsap.set()), revert it. This makes it easy to put things in a certain spot before refreshing for measurement purposes, and then put things back.\\n\\t\\t_Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.forEach(obj => {\\n\\t\\t\\tif (_isFunction(obj)) {\\n\\t\\t\\t\\tobj.smooth && requestAnimationFrame(() => obj.target.style.scrollBehavior = \\\"smooth\\\");\\n\\t\\t\\t\\tobj.rec && obj(obj.rec);\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\t_clearScrollMemory(_scrollRestoration, 1);\\n\\t\\t_resizeDelay.pause();\\n\\t\\t_refreshID++;\\n\\t\\t_refreshingAll = 2;\\n\\t\\t_updateAll(2);\\n\\t\\t_triggers.forEach(t => _isFunction(t.vars.onRefresh) && t.vars.onRefresh(t));\\n\\t\\t_refreshingAll = ScrollTrigger.isRefreshing = false;\\n\\t\\t_dispatch(\\\"refresh\\\");\\n\\t},\\n\\t_lastScroll = 0,\\n\\t_direction = 1,\\n\\t_primary,\\n\\t_updateAll = (force) => {\\n\\t\\tif (force === 2 || (!_refreshingAll && !_isReverted)) { // _isReverted could be true if, for example, a matchMedia() is in the process of executing. We don't want to update during the time everything is reverted.\\n\\t\\t\\tScrollTrigger.isUpdating = true;\\n\\t\\t\\t_primary && _primary.update(0); // ScrollSmoother uses refreshPriority -9999 to become the primary that gets updated before all others because it affects the scroll position.\\n\\t\\t\\tlet l = _triggers.length,\\n\\t\\t\\t\\ttime = _getTime(),\\n\\t\\t\\t\\trecordVelocity = time - _time1 >= 50,\\n\\t\\t\\t\\tscroll = l && _triggers[0].scroll();\\n\\t\\t\\t_direction = _lastScroll > scroll ? -1 : 1;\\n\\t\\t\\t_refreshingAll || (_lastScroll = scroll);\\n\\t\\t\\tif (recordVelocity) {\\n\\t\\t\\t\\tif (_lastScrollTime && !_pointerIsDown && time - _lastScrollTime > 200) {\\n\\t\\t\\t\\t\\t_lastScrollTime = 0;\\n\\t\\t\\t\\t\\t_dispatch(\\\"scrollEnd\\\");\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t_time2 = _time1;\\n\\t\\t\\t\\t_time1 = time;\\n\\t\\t\\t}\\n\\t\\t\\tif (_direction < 0) {\\n\\t\\t\\t\\t_i = l;\\n\\t\\t\\t\\twhile (_i-- > 0) {\\n\\t\\t\\t\\t\\t_triggers[_i] && _triggers[_i].update(0, recordVelocity);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t_direction = 1;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tfor (_i = 0; _i < l; _i++) {\\n\\t\\t\\t\\t\\t_triggers[_i] && _triggers[_i].update(0, recordVelocity);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tScrollTrigger.isUpdating = false;\\n\\t\\t}\\n\\t\\t_rafID = 0;\\n\\t},\\n\\t_propNamesToCopy = [_left, _top, _bottom, _right, _margin + _Bottom, _margin + _Right, _margin + _Top, _margin + _Left, \\\"display\\\", \\\"flexShrink\\\", \\\"float\\\", \\\"zIndex\\\", \\\"gridColumnStart\\\", \\\"gridColumnEnd\\\", \\\"gridRowStart\\\", \\\"gridRowEnd\\\", \\\"gridArea\\\", \\\"justifySelf\\\", \\\"alignSelf\\\", \\\"placeSelf\\\", \\\"order\\\"],\\n\\t_stateProps = _propNamesToCopy.concat([_width, _height, \\\"boxSizing\\\", \\\"max\\\" + _Width, \\\"max\\\" + _Height, \\\"position\\\", _margin, _padding, _padding + _Top, _padding + _Right, _padding + _Bottom, _padding + _Left]),\\n\\t_swapPinOut = (pin, spacer, state) => {\\n\\t\\t_setState(state);\\n\\t\\tlet cache = pin._gsap;\\n\\t\\tif (cache.spacerIsNative) {\\n\\t\\t\\t_setState(cache.spacerState);\\n\\t\\t} else if (pin._gsap.swappedIn) {\\n\\t\\t\\tlet parent = spacer.parentNode;\\n\\t\\t\\tif (parent) {\\n\\t\\t\\t\\tparent.insertBefore(pin, spacer);\\n\\t\\t\\t\\tparent.removeChild(spacer);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tpin._gsap.swappedIn = false;\\n\\t},\\n\\t_swapPinIn = (pin, spacer, cs, spacerState) => {\\n\\t\\tif (!pin._gsap.swappedIn) {\\n\\t\\t\\tlet i = _propNamesToCopy.length,\\n\\t\\t\\t\\tspacerStyle = spacer.style,\\n\\t\\t\\t\\tpinStyle = pin.style,\\n\\t\\t\\t\\tp;\\n\\t\\t\\twhile (i--) {\\n\\t\\t\\t\\tp = _propNamesToCopy[i];\\n\\t\\t\\t\\tspacerStyle[p] = cs[p];\\n\\t\\t\\t}\\n\\t\\t\\tspacerStyle.position = cs.position === \\\"absolute\\\" ? \\\"absolute\\\" : \\\"relative\\\";\\n\\t\\t\\t(cs.display === \\\"inline\\\") && (spacerStyle.display = \\\"inline-block\\\");\\n\\t\\t\\tpinStyle[_bottom] = pinStyle[_right] = \\\"auto\\\";\\n\\t\\t\\tspacerStyle.flexBasis = cs.flexBasis || \\\"auto\\\";\\n\\t\\t\\tspacerStyle.overflow = \\\"visible\\\";\\n\\t\\t\\tspacerStyle.boxSizing = \\\"border-box\\\";\\n\\t\\t\\tspacerStyle[_width] = _getSize(pin, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal) + _px;\\n\\t\\t\\tspacerStyle[_height] = _getSize(pin, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical) + _px;\\n\\t\\t\\tspacerStyle[_padding] = pinStyle[_margin] = pinStyle[_top] = pinStyle[_left] = \\\"0\\\";\\n\\t\\t\\t_setState(spacerState);\\n\\t\\t\\tpinStyle[_width] = pinStyle[\\\"max\\\" + _Width] = cs[_width];\\n\\t\\t\\tpinStyle[_height] = pinStyle[\\\"max\\\" + _Height] = cs[_height];\\n\\t\\t\\tpinStyle[_padding] = cs[_padding];\\n\\t\\t\\tif (pin.parentNode !== spacer) {\\n\\t\\t\\t\\tpin.parentNode.insertBefore(spacer, pin);\\n\\t\\t\\t\\tspacer.appendChild(pin);\\n\\t\\t\\t}\\n\\t\\t\\tpin._gsap.swappedIn = true;\\n\\t\\t}\\n\\t},\\n\\t_capsExp = /([A-Z])/g,\\n\\t_setState = state => {\\n\\t\\tif (state) {\\n\\t\\t\\tlet style = state.t.style,\\n\\t\\t\\t\\tl = state.length,\\n\\t\\t\\t\\ti = 0,\\n\\t\\t\\t\\tp, value;\\n\\t\\t\\t(state.t._gsap || gsap.core.getCache(state.t)).uncache = 1; // otherwise transforms may be off\\n\\t\\t\\tfor (; i < l; i +=2) {\\n\\t\\t\\t\\tvalue = state[i+1];\\n\\t\\t\\t\\tp = state[i];\\n\\t\\t\\t\\tif (value) {\\n\\t\\t\\t\\t\\tstyle[p] = value;\\n\\t\\t\\t\\t} else if (style[p]) {\\n\\t\\t\\t\\t\\tstyle.removeProperty(p.replace(_capsExp, \\\"-$1\\\").toLowerCase());\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t},\\n\\t_getState = element => { // returns an Array with alternating values like [property, value, property, value] and a \\\"t\\\" property pointing to the target (element). Makes it fast and cheap.\\n\\t\\tlet l = _stateProps.length,\\n\\t\\t\\tstyle = element.style,\\n\\t\\t\\tstate = [],\\n\\t\\t\\ti = 0;\\n\\t\\tfor (; i < l; i++) {\\n\\t\\t\\tstate.push(_stateProps[i], style[_stateProps[i]]);\\n\\t\\t}\\n\\t\\tstate.t = element;\\n\\t\\treturn state;\\n\\t},\\n\\t_copyState = (state, override, omitOffsets) => {\\n\\t\\tlet result = [],\\n\\t\\t\\tl = state.length,\\n\\t\\t\\ti = omitOffsets ? 8 : 0, // skip top, left, right, bottom if omitOffsets is true\\n\\t\\t\\tp;\\n\\t\\tfor (; i < l; i += 2) {\\n\\t\\t\\tp = state[i];\\n\\t\\t\\tresult.push(p, (p in override) ? override[p] : state[i+1]);\\n\\t\\t}\\n\\t\\tresult.t = state.t;\\n\\t\\treturn result;\\n\\t},\\n\\t_winOffsets = {left:0, top:0},\\n\\t// // potential future feature (?) Allow users to calculate where a trigger hits (scroll position) like getScrollPosition(\\\"#id\\\", \\\"top bottom\\\")\\n\\t// _getScrollPosition = (trigger, position, {scroller, containerAnimation, horizontal}) => {\\n\\t// \\tscroller = _getTarget(scroller || _win);\\n\\t// \\tlet direction = horizontal ? _horizontal : _vertical,\\n\\t// \\t\\tisViewport = _isViewport(scroller);\\n\\t// \\t_getSizeFunc(scroller, isViewport, direction);\\n\\t// \\treturn _parsePosition(position, _getTarget(trigger), _getSizeFunc(scroller, isViewport, direction)(), direction, _getScrollFunc(scroller, direction)(), 0, 0, 0, _getOffsetsFunc(scroller, isViewport)(), isViewport ? 0 : parseFloat(_getComputedStyle(scroller)[\\\"border\\\" + direction.p2 + _Width]) || 0, 0, containerAnimation ? containerAnimation.duration() : _maxScroll(scroller), containerAnimation);\\n\\t// },\\n\\t_parsePosition = (value, trigger, scrollerSize, direction, scroll, marker, markerScroller, self, scrollerBounds, borderWidth, useFixedPosition, scrollerMax, containerAnimation, clampZeroProp) => {\\n\\t\\t_isFunction(value) && (value = value(self));\\n\\t\\tif (_isString(value) && value.substr(0,3) === \\\"max\\\") {\\n\\t\\t\\tvalue = scrollerMax + (value.charAt(4) === \\\"=\\\" ? _offsetToPx(\\\"0\\\" + value.substr(3), scrollerSize) : 0);\\n\\t\\t}\\n\\t\\tlet time = containerAnimation ? containerAnimation.time() : 0,\\n\\t\\t\\tp1, p2, element;\\n\\t\\tcontainerAnimation && containerAnimation.seek(0);\\n\\t\\tisNaN(value) || (value = +value); // convert a string number like \\\"45\\\" to an actual number\\n\\t\\tif (!_isNumber(value)) {\\n\\t\\t\\t_isFunction(trigger) && (trigger = trigger(self));\\n\\t\\t\\tlet offsets = (value || \\\"0\\\").split(\\\" \\\"),\\n\\t\\t\\t\\tbounds, localOffset, globalOffset, display;\\n\\t\\t\\telement = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(trigger, self) || _body;\\n\\t\\t\\tbounds = _getBounds(element) || {};\\n\\t\\t\\tif ((!bounds || (!bounds.left && !bounds.top)) && _getComputedStyle(element).display === \\\"none\\\") { // if display is \\\"none\\\", it won't report getBoundingClientRect() properly\\n\\t\\t\\t\\tdisplay = element.style.display;\\n\\t\\t\\t\\telement.style.display = \\\"block\\\";\\n\\t\\t\\t\\tbounds = _getBounds(element);\\n\\t\\t\\t\\tdisplay ? (element.style.display = display) : element.style.removeProperty(\\\"display\\\");\\n\\t\\t\\t}\\n\\t\\t\\tlocalOffset = _offsetToPx(offsets[0], bounds[direction.d]);\\n\\t\\t\\tglobalOffset = _offsetToPx(offsets[1] || \\\"0\\\", scrollerSize);\\n\\t\\t\\tvalue = bounds[direction.p] - scrollerBounds[direction.p] - borderWidth + localOffset + scroll - globalOffset;\\n\\t\\t\\tmarkerScroller && _positionMarker(markerScroller, globalOffset, direction, (scrollerSize - globalOffset < 20 || (markerScroller._isStart && globalOffset > 20)));\\n\\t\\t\\tscrollerSize -= scrollerSize - globalOffset; // adjust for the marker\\n\\t\\t} else {\\n\\t\\t\\tcontainerAnimation && (value = gsap.utils.mapRange(containerAnimation.scrollTrigger.start, containerAnimation.scrollTrigger.end, 0, scrollerMax, value));\\n\\t\\t\\tmarkerScroller && _positionMarker(markerScroller, scrollerSize, direction, true);\\n\\t\\t}\\n\\t\\tif (clampZeroProp) {\\n\\t\\t\\tself[clampZeroProp] = value || -0.001;\\n\\t\\t\\tvalue < 0 && (value = 0);\\n\\t\\t}\\n\\t\\tif (marker) {\\n\\t\\t\\tlet position = value + scrollerSize,\\n\\t\\t\\t\\tisStart = marker._isStart;\\n\\t\\t\\tp1 = \\\"scroll\\\" + direction.d2;\\n\\t\\t\\t_positionMarker(marker, position, direction, (isStart && position > 20) || (!isStart && (useFixedPosition ? Math.max(_body[p1], _docEl[p1]) : marker.parentNode[p1]) <= position + 1));\\n\\t\\t\\tif (useFixedPosition) {\\n\\t\\t\\t\\tscrollerBounds = _getBounds(markerScroller);\\n\\t\\t\\t\\tuseFixedPosition && (marker.style[direction.op.p] = (scrollerBounds[direction.op.p] - direction.op.m - marker._offset) + _px);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\tif (containerAnimation && element) {\\n\\t\\t\\tp1 = _getBounds(element);\\n\\t\\t\\tcontainerAnimation.seek(scrollerMax);\\n\\t\\t\\tp2 = _getBounds(element);\\n\\t\\t\\tcontainerAnimation._caScrollDist = p1[direction.p] - p2[direction.p];\\n\\t\\t\\tvalue = value / (containerAnimation._caScrollDist) * scrollerMax;\\n\\t\\t}\\n\\t\\tcontainerAnimation && containerAnimation.seek(time);\\n\\t\\treturn containerAnimation ? value : Math.round(value);\\n\\t},\\n\\t_prefixExp = /(webkit|moz|length|cssText|inset)/i,\\n\\t_reparent = (element, parent, top, left) => {\\n\\t\\tif (element.parentNode !== parent) {\\n\\t\\t\\tlet style = element.style,\\n\\t\\t\\t\\tp, cs;\\n\\t\\t\\tif (parent === _body) {\\n\\t\\t\\t\\telement._stOrig = style.cssText; // record original inline styles so we can revert them later\\n\\t\\t\\t\\tcs = _getComputedStyle(element);\\n\\t\\t\\t\\tfor (p in cs) { // must copy all relevant styles to ensure that nothing changes visually when we reparent to the <body>. Skip the vendor prefixed ones.\\n\\t\\t\\t\\t\\tif (!+p && !_prefixExp.test(p) && cs[p] && typeof style[p] === \\\"string\\\" && p !== \\\"0\\\") {\\n\\t\\t\\t\\t\\t\\tstyle[p] = cs[p];\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tstyle.top = top;\\n\\t\\t\\t\\tstyle.left = left;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tstyle.cssText = element._stOrig;\\n\\t\\t\\t}\\n\\t\\t\\tgsap.core.getCache(element).uncache = 1;\\n\\t\\t\\tparent.appendChild(element);\\n\\t\\t}\\n\\t},\\n\\t_interruptionTracker = (getValueFunc, initialValue, onInterrupt) => {\\n\\t\\tlet last1 = initialValue,\\n\\t\\t\\tlast2 = last1;\\n\\t\\treturn value => {\\n\\t\\t\\tlet current = Math.round(getValueFunc()); // round because in some [very uncommon] Windows environments, scroll can get reported with decimals even though it was set without.\\n\\t\\t\\tif (current !== last1 && current !== last2 && Math.abs(current - last1) > 3 && Math.abs(current - last2) > 3) { // if the user scrolls, kill the tween. iOS Safari intermittently misreports the scroll position, it may be the most recently-set one or the one before that! When Safari is zoomed (CMD-+), it often misreports as 1 pixel off too! So if we set the scroll position to 125, for example, it'll actually report it as 124.\\n\\t\\t\\t\\tvalue = current;\\n\\t\\t\\t\\tonInterrupt && onInterrupt();\\n\\t\\t\\t}\\n\\t\\t\\tlast2 = last1;\\n\\t\\t\\tlast1 = Math.round(value);\\n\\t\\t\\treturn last1;\\n\\t\\t};\\n\\t},\\n\\t_shiftMarker = (marker, direction, value) => {\\n\\t\\tlet vars = {};\\n\\t\\tvars[direction.p] = \\\"+=\\\" + value;\\n\\t\\tgsap.set(marker, vars);\\n\\t},\\n\\t// _mergeAnimations = animations => {\\n\\t// \\tlet tl = gsap.timeline({smoothChildTiming: true}).startTime(Math.min(...animations.map(a => a.globalTime(0))));\\n\\t// \\tanimations.forEach(a => {let time = a.totalTime(); tl.add(a); a.totalTime(time); });\\n\\t// \\ttl.smoothChildTiming = false;\\n\\t// \\treturn tl;\\n\\t// },\\n\\n\\t// returns a function that can be used to tween the scroll position in the direction provided, and when doing so it'll add a .tween property to the FUNCTION itself, and remove it when the tween completes or gets killed. This gives us a way to have multiple ScrollTriggers use a central function for any given scroller and see if there's a scroll tween running (which would affect if/how things get updated)\\n\\t_getTweenCreator = (scroller, direction) => {\\n\\t\\tlet getScroll = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getScrollFunc)(scroller, direction),\\n\\t\\t\\tprop = \\\"_scroll\\\" + direction.p2, // add a tweenable property to the scroller that's a getter/setter function, like _scrollTop or _scrollLeft. This way, if someone does gsap.killTweensOf(scroller) it'll kill the scroll tween.\\n\\t\\t\\tgetTween = (scrollTo, vars, initialValue, change1, change2) => {\\n\\t\\t\\t\\tlet tween = getTween.tween,\\n\\t\\t\\t\\t\\tonComplete = vars.onComplete,\\n\\t\\t\\t\\t\\tmodifiers = {};\\n\\t\\t\\t\\tinitialValue = initialValue || getScroll();\\n\\t\\t\\t\\tlet checkForInterruption = _interruptionTracker(getScroll, initialValue, () => {\\n\\t\\t\\t\\t\\ttween.kill();\\n\\t\\t\\t\\t\\tgetTween.tween = 0;\\n\\t\\t\\t\\t});\\n\\t\\t\\t\\tchange2 = (change1 && change2) || 0; // if change1 is 0, we set that to the difference and ignore change2. Otherwise, there would be a compound effect.\\n\\t\\t\\t\\tchange1 = change1 || (scrollTo - initialValue);\\n\\t\\t\\t\\ttween && tween.kill();\\n\\t\\t\\t\\tvars[prop] = scrollTo;\\n\\t\\t\\t\\tvars.inherit = false;\\n\\t\\t\\t\\tvars.modifiers = modifiers;\\n\\t\\t\\t\\tmodifiers[prop] = () => checkForInterruption(initialValue + change1 * tween.ratio + change2 * tween.ratio * tween.ratio);\\n\\t\\t\\t\\tvars.onUpdate = () => {\\n\\t\\t\\t\\t\\t_Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache++;\\n\\t\\t\\t\\t\\tgetTween.tween && _updateAll(); // if it was interrupted/killed, like in a context.revert(), don't force an updateAll()\\n\\t\\t\\t\\t};\\n\\t\\t\\t\\tvars.onComplete = () => {\\n\\t\\t\\t\\t\\tgetTween.tween = 0;\\n\\t\\t\\t\\t\\tonComplete && onComplete.call(tween);\\n\\t\\t\\t\\t};\\n\\t\\t\\t\\ttween = getTween.tween = gsap.to(scroller, vars);\\n\\t\\t\\t\\treturn tween;\\n\\t\\t\\t};\\n\\t\\tscroller[prop] = getScroll;\\n\\t\\tgetScroll.wheelHandler = () => getTween.tween && getTween.tween.kill() && (getTween.tween = 0);\\n\\t\\t_addListener(scroller, \\\"wheel\\\", getScroll.wheelHandler); // Windows machines handle mousewheel scrolling in chunks (like \\\"3 lines per scroll\\\") meaning the typical strategy for cancelling the scroll isn't as sensitive. It's much more likely to match one of the previous 2 scroll event positions. So we kill any snapping as soon as there's a wheel event.\\n\\t\\tScrollTrigger.isTouch && _addListener(scroller, \\\"touchmove\\\", getScroll.wheelHandler);\\n\\t\\treturn getTween;\\n\\t};\\n\\n\\n\\n\\nclass ScrollTrigger {\\n\\n\\tconstructor(vars, animation) {\\n\\t\\t_coreInitted || ScrollTrigger.register(gsap) || console.warn(\\\"Please gsap.registerPlugin(ScrollTrigger)\\\");\\n\\t\\t_context(this);\\n\\t\\tthis.init(vars, animation);\\n\\t}\\n\\n\\tinit(vars, animation) {\\n\\t\\tthis.progress = this.start = 0;\\n\\t\\tthis.vars && this.kill(true, true); // in case it's being initted again\\n\\t\\tif (!_enabled) {\\n\\t\\t\\tthis.update = this.refresh = this.kill = _passThrough;\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\t\\tvars = _setDefaults((_isString(vars) || _isNumber(vars) || vars.nodeType) ? {trigger: vars} : vars, _defaults);\\n\\t\\tlet {onUpdate, toggleClass, id, onToggle, onRefresh, scrub, trigger, pin, pinSpacing, invalidateOnRefresh, anticipatePin, onScrubComplete, onSnapComplete, once, snap, pinReparent, pinSpacer, containerAnimation, fastScrollEnd, preventOverlaps} = vars,\\n\\t\\t\\tdirection = vars.horizontal || (vars.containerAnimation && vars.horizontal !== false) ? _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal : _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical,\\n\\t\\t\\tisToggle = !scrub && scrub !== 0,\\n\\t\\t\\tscroller = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(vars.scroller || _win),\\n\\t\\t\\tscrollerCache = gsap.core.getCache(scroller),\\n\\t\\t\\tisViewport = _isViewport(scroller),\\n\\t\\t\\tuseFixedPosition = (\\\"pinType\\\" in vars ? vars.pinType : (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(scroller, \\\"pinType\\\") || (isViewport && \\\"fixed\\\")) === \\\"fixed\\\",\\n\\t\\t\\tcallbacks = [vars.onEnter, vars.onLeave, vars.onEnterBack, vars.onLeaveBack],\\n\\t\\t\\ttoggleActions = isToggle && vars.toggleActions.split(\\\" \\\"),\\n\\t\\t\\tmarkers = \\\"markers\\\" in vars ? vars.markers : _defaults.markers,\\n\\t\\t\\tborderWidth = isViewport ? 0 : parseFloat(_getComputedStyle(scroller)[\\\"border\\\" + direction.p2 + _Width]) || 0,\\n\\t\\t\\tself = this,\\n\\t\\t\\tonRefreshInit = vars.onRefreshInit && (() => vars.onRefreshInit(self)),\\n\\t\\t\\tgetScrollerSize = _getSizeFunc(scroller, isViewport, direction),\\n\\t\\t\\tgetScrollerOffsets = _getOffsetsFunc(scroller, isViewport),\\n\\t\\t\\tlastSnap = 0,\\n\\t\\t\\tlastRefresh = 0,\\n\\t\\t\\tprevProgress = 0,\\n\\t\\t\\tscrollFunc = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getScrollFunc)(scroller, direction),\\n\\t\\t\\ttweenTo, pinCache, snapFunc, scroll1, scroll2, start, end, markerStart, markerEnd, markerStartTrigger, markerEndTrigger, markerVars, executingOnRefresh,\\n\\t\\t\\tchange, pinOriginalState, pinActiveState, pinState, spacer, offset, pinGetter, pinSetter, pinStart, pinChange, spacingStart, spacerState, markerStartSetter, pinMoves,\\n\\t\\t\\tmarkerEndSetter, cs, snap1, snap2, scrubTween, scrubSmooth, snapDurClamp, snapDelayedCall, prevScroll, prevAnimProgress, caMarkerSetter, customRevertReturn;\\n\\n\\t\\t// for the sake of efficiency, _startClamp/_endClamp serve like a truthy value indicating that clamping was enabled on the start/end, and ALSO store the actual pre-clamped numeric value. We tap into that in ScrollSmoother for speed effects. So for example, if start=\\\"clamp(top bottom)\\\" results in a start of -100 naturally, it would get clamped to 0 but -100 would be stored in _startClamp.\\n\\t\\tself._startClamp = self._endClamp = false;\\n\\t\\tself._dir = direction;\\n\\t\\tanticipatePin *= 45;\\n\\t\\tself.scroller = scroller;\\n\\t\\tself.scroll = containerAnimation ? containerAnimation.time.bind(containerAnimation) : scrollFunc;\\n\\t\\tscroll1 = scrollFunc();\\n\\t\\tself.vars = vars;\\n\\t\\tanimation = animation || vars.animation;\\n\\t\\tif (\\\"refreshPriority\\\" in vars) {\\n\\t\\t\\t_sort = 1;\\n\\t\\t\\tvars.refreshPriority === -9999 && (_primary = self); // used by ScrollSmoother\\n\\t\\t}\\n\\t\\tscrollerCache.tweenScroll = scrollerCache.tweenScroll || {\\n\\t\\t\\ttop: _getTweenCreator(scroller, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical),\\n\\t\\t\\tleft: _getTweenCreator(scroller, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal)\\n\\t\\t};\\n\\t\\tself.tweenTo = tweenTo = scrollerCache.tweenScroll[direction.p];\\n\\t\\tself.scrubDuration = value => {\\n\\t\\t\\tscrubSmooth = _isNumber(value) && value;\\n\\t\\t\\tif (!scrubSmooth) {\\n\\t\\t\\t\\tscrubTween && scrubTween.progress(1).kill();\\n\\t\\t\\t\\tscrubTween = 0;\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tscrubTween ? scrubTween.duration(value) : (scrubTween = gsap.to(animation, {ease: \\\"expo\\\", totalProgress: \\\"+=0\\\", inherit: false, duration: scrubSmooth, paused: true, onComplete: () => onScrubComplete && onScrubComplete(self)}));\\n\\t\\t\\t}\\n\\t\\t};\\n\\t\\tif (animation) {\\n\\t\\t\\tanimation.vars.lazy = false;\\n\\t\\t\\t(animation._initted && !self.isReverted) || (animation.vars.immediateRender !== false && vars.immediateRender !== false && animation.duration() && animation.render(0, true, true)); // special case: if this ScrollTrigger gets re-initted, a from() tween with a stagger could get initted initially and then reverted on the re-init which means it'll need to get rendered again here to properly display things. Otherwise, See https://gsap.com/forums/topic/36777-scrollsmoother-splittext-nextjs/ and https://codepen.io/GreenSock/pen/eYPyPpd?editors=0010\\n\\t\\t\\tself.animation = animation.pause();\\n\\t\\t\\tanimation.scrollTrigger = self;\\n\\t\\t\\tself.scrubDuration(scrub);\\n\\t\\t\\tsnap1 = 0;\\n\\t\\t\\tid || (id = animation.vars.id);\\n\\t\\t}\\n\\n\\t\\tif (snap) {\\n\\t\\t\\t// TODO: potential idea: use legitimate CSS scroll snapping by pushing invisible elements into the DOM that serve as snap positions, and toggle the document.scrollingElement.style.scrollSnapType onToggle. See https://codepen.io/GreenSock/pen/JjLrgWM for a quick proof of concept.\\n\\t\\t\\tif (!_isObject(snap) || snap.push) {\\n\\t\\t\\t\\tsnap = {snapTo: snap};\\n\\t\\t\\t}\\n\\t\\t\\t(\\\"scrollBehavior\\\" in _body.style) && gsap.set(isViewport ? [_body, _docEl] : scroller, {scrollBehavior: \\\"auto\\\"}); // smooth scrolling doesn't work with snap.\\n\\t\\t\\t_Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.forEach(o => _isFunction(o) && o.target === (isViewport ? _doc.scrollingElement || _docEl : scroller) && (o.smooth = false)); // note: set smooth to false on both the vertical and horizontal scroll getters/setters\\n\\t\\t\\tsnapFunc = _isFunction(snap.snapTo) ? snap.snapTo : snap.snapTo === \\\"labels\\\" ? _getClosestLabel(animation) : snap.snapTo === \\\"labelsDirectional\\\" ? _getLabelAtDirection(animation) : snap.directional !== false ? (value, st) => _snapDirectional(snap.snapTo)(value, _getTime() - lastRefresh < 500 ? 0 : st.direction) : gsap.utils.snap(snap.snapTo);\\n\\t\\t\\tsnapDurClamp = snap.duration || {min: 0.1, max: 2};\\n\\t\\t\\tsnapDurClamp = _isObject(snapDurClamp) ? _clamp(snapDurClamp.min, snapDurClamp.max) : _clamp(snapDurClamp, snapDurClamp);\\n\\t\\t\\tsnapDelayedCall = gsap.delayedCall(snap.delay || (scrubSmooth / 2) || 0.1, () => {\\n\\t\\t\\t\\tlet scroll = scrollFunc(),\\n\\t\\t\\t\\t\\trefreshedRecently = _getTime() - lastRefresh < 500,\\n\\t\\t\\t\\t\\ttween = tweenTo.tween;\\n\\t\\t\\t\\tif ((refreshedRecently || Math.abs(self.getVelocity()) < 10) && !tween && !_pointerIsDown && lastSnap !== scroll) {\\n\\t\\t\\t\\t\\tlet progress = (scroll - start) / change, // don't use self.progress because this might run between the refresh() and when the scroll position updates and self.progress is set properly in the update() method.\\n\\t\\t\\t\\t\\t\\ttotalProgress = animation && !isToggle ? animation.totalProgress() : progress,\\n\\t\\t\\t\\t\\t\\tvelocity = refreshedRecently ? 0 : ((totalProgress - snap2) / (_getTime() - _time2) * 1000) || 0,\\n\\t\\t\\t\\t\\t\\tchange1 = gsap.utils.clamp(-progress, 1 - progress, _abs(velocity / 2) * velocity / 0.185),\\n\\t\\t\\t\\t\\t\\tnaturalEnd = progress + (snap.inertia === false ? 0 : change1),\\n\\t\\t\\t\\t\\t\\tendValue, endScroll,\\n\\t\\t\\t\\t\\t\\t{ onStart, onInterrupt, onComplete } = snap;\\n\\t\\t\\t\\t\\tendValue = snapFunc(naturalEnd, self);\\n\\t\\t\\t\\t\\t_isNumber(endValue) || (endValue = naturalEnd); // in case the function didn't return a number, fall back to using the naturalEnd\\n\\t\\t\\t\\t\\tendScroll = Math.max(0, Math.round(start + endValue * change));\\n\\t\\t\\t\\t\\tif (scroll <= end && scroll >= start && endScroll !== scroll) {\\n\\t\\t\\t\\t\\t\\tif (tween && !tween._initted && tween.data <= _abs(endScroll - scroll)) { // there's an overlapping snap! So we must figure out which one is closer and let that tween live.\\n\\t\\t\\t\\t\\t\\t\\treturn;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\tif (snap.inertia === false) {\\n\\t\\t\\t\\t\\t\\t\\tchange1 = endValue - progress;\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\ttweenTo(endScroll, {\\n\\t\\t\\t\\t\\t\\t\\tduration: snapDurClamp(_abs( (Math.max(_abs(naturalEnd - totalProgress), _abs(endValue - totalProgress)) * 0.185 / velocity / 0.05) || 0)),\\n\\t\\t\\t\\t\\t\\t\\tease: snap.ease || \\\"power3\\\",\\n\\t\\t\\t\\t\\t\\t\\tdata: _abs(endScroll - scroll), // record the distance so that if another snap tween occurs (conflict) we can prioritize the closest snap.\\n\\t\\t\\t\\t\\t\\t\\tonInterrupt: () => snapDelayedCall.restart(true) && onInterrupt && onInterrupt(self),\\n\\t\\t\\t\\t\\t\\t\\tonComplete() {\\n\\t\\t\\t\\t\\t\\t\\t\\tself.update();\\n\\t\\t\\t\\t\\t\\t\\t\\tlastSnap = scrollFunc();\\n\\t\\t\\t\\t\\t\\t\\t\\tif (animation && !isToggle) { // the resolution of the scrollbar is limited, so we should correct the scrubbed animation's playhead at the end to match EXACTLY where it was supposed to snap\\n\\t\\t\\t\\t\\t\\t\\t\\t\\tscrubTween ? scrubTween.resetTo(\\\"totalProgress\\\", endValue, animation._tTime / animation._tDur) : animation.progress(endValue);\\n\\t\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t\\t\\tsnap1 = snap2 = animation && !isToggle ? animation.totalProgress() : self.progress;\\n\\t\\t\\t\\t\\t\\t\\t\\tonSnapComplete && onSnapComplete(self);\\n\\t\\t\\t\\t\\t\\t\\t\\tonComplete && onComplete(self);\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}, scroll, change1 * change, endScroll - scroll - change1 * change);\\n\\t\\t\\t\\t\\t\\tonStart && onStart(self, tweenTo.tween);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else if (self.isActive && lastSnap !== scroll) {\\n\\t\\t\\t\\t\\tsnapDelayedCall.restart(true);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}).pause();\\n\\t\\t}\\n\\t\\tid && (_ids[id] = self);\\n\\t\\ttrigger = self.trigger = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(trigger || (pin !== true && pin));\\n\\n\\t\\t// if a trigger has some kind of scroll-related effect applied that could contaminate the \\\"y\\\" or \\\"x\\\" position (like a ScrollSmoother effect), we needed a way to temporarily revert it, so we use the stRevert property of the gsCache. It can return another function that we'll call at the end so it can return to its normal state.\\n\\t\\tcustomRevertReturn = trigger && trigger._gsap && trigger._gsap.stRevert;\\n\\t\\tcustomRevertReturn && (customRevertReturn = customRevertReturn(self));\\n\\n\\t\\tpin = pin === true ? trigger : (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(pin);\\n\\t\\t_isString(toggleClass) && (toggleClass = {targets: trigger, className: toggleClass});\\n\\t\\tif (pin) {\\n\\t\\t\\t(pinSpacing === false || pinSpacing === _margin) || (pinSpacing = !pinSpacing && pin.parentNode && pin.parentNode.style && _getComputedStyle(pin.parentNode).display === \\\"flex\\\" ? false : _padding); // if the parent is display: flex, don't apply pinSpacing by default. We should check that pin.parentNode is an element (not shadow dom window)\\n\\t\\t\\tself.pin = pin;\\n\\t\\t\\tpinCache = gsap.core.getCache(pin);\\n\\t\\t\\tif (!pinCache.spacer) { // record the spacer and pinOriginalState on the cache in case someone tries pinning the same element with MULTIPLE ScrollTriggers - we don't want to have multiple spacers or record the \\\"original\\\" pin state after it has already been affected by another ScrollTrigger.\\n\\t\\t\\t\\tif (pinSpacer) {\\n\\t\\t\\t\\t\\tpinSpacer = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(pinSpacer);\\n\\t\\t\\t\\t\\tpinSpacer && !pinSpacer.nodeType && (pinSpacer = pinSpacer.current || pinSpacer.nativeElement); // for React & Angular\\n\\t\\t\\t\\t\\tpinCache.spacerIsNative = !!pinSpacer;\\n\\t\\t\\t\\t\\tpinSpacer && (pinCache.spacerState = _getState(pinSpacer));\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tpinCache.spacer = spacer = pinSpacer || _doc.createElement(\\\"div\\\");\\n\\t\\t\\t\\tspacer.classList.add(\\\"pin-spacer\\\");\\n\\t\\t\\t\\tid && spacer.classList.add(\\\"pin-spacer-\\\" + id);\\n\\t\\t\\t\\tpinCache.pinState = pinOriginalState = _getState(pin);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\tpinOriginalState = pinCache.pinState;\\n\\t\\t\\t}\\n\\t\\t\\tvars.force3D !== false && gsap.set(pin, {force3D: true});\\n\\t\\t\\tself.spacer = spacer = pinCache.spacer;\\n\\t\\t\\tcs = _getComputedStyle(pin);\\n\\t\\t\\tspacingStart = cs[pinSpacing + direction.os2];\\n\\t\\t\\tpinGetter = gsap.getProperty(pin);\\n\\t\\t\\tpinSetter = gsap.quickSetter(pin, direction.a, _px);\\n\\t\\t\\t// pin.firstChild && !_maxScroll(pin, direction) && (pin.style.overflow = \\\"hidden\\\"); // protects from collapsing margins, but can have unintended consequences as demonstrated here: https://codepen.io/GreenSock/pen/1e42c7a73bfa409d2cf1e184e7a4248d so it was removed in favor of just telling people to set up their CSS to avoid the collapsing margins (overflow: hidden | auto is just one option. Another is border-top: 1px solid transparent).\\n\\t\\t\\t_swapPinIn(pin, spacer, cs);\\n\\t\\t\\tpinState = _getState(pin);\\n\\t\\t}\\n\\t\\tif (markers) {\\n\\t\\t\\tmarkerVars = _isObject(markers) ? _setDefaults(markers, _markerDefaults) : _markerDefaults;\\n\\t\\t\\tmarkerStartTrigger = _createMarker(\\\"scroller-start\\\", id, scroller, direction, markerVars, 0);\\n\\t\\t\\tmarkerEndTrigger = _createMarker(\\\"scroller-end\\\", id, scroller, direction, markerVars, 0, markerStartTrigger);\\n\\t\\t\\toffset = markerStartTrigger[\\\"offset\\\" + direction.op.d2];\\n\\t\\t\\tlet content = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)((0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(scroller, \\\"content\\\") || scroller);\\n\\t\\t\\tmarkerStart = this.markerStart = _createMarker(\\\"start\\\", id, content, direction, markerVars, offset, 0, containerAnimation);\\n\\t\\t\\tmarkerEnd = this.markerEnd = _createMarker(\\\"end\\\", id, content, direction, markerVars, offset, 0, containerAnimation);\\n\\t\\t\\tcontainerAnimation && (caMarkerSetter = gsap.quickSetter([markerStart, markerEnd], direction.a, _px));\\n\\t\\t\\tif ((!useFixedPosition && !(_Observer_js__WEBPACK_IMPORTED_MODULE_0__._proxies.length && (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(scroller, \\\"fixedMarkers\\\") === true))) {\\n\\t\\t\\t\\t_makePositionable(isViewport ? _body : scroller);\\n\\t\\t\\t\\tgsap.set([markerStartTrigger, markerEndTrigger], {force3D: true});\\n\\t\\t\\t\\tmarkerStartSetter = gsap.quickSetter(markerStartTrigger, direction.a, _px);\\n\\t\\t\\t\\tmarkerEndSetter = gsap.quickSetter(markerEndTrigger, direction.a, _px);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tif (containerAnimation) {\\n\\t\\t\\tlet oldOnUpdate = containerAnimation.vars.onUpdate,\\n\\t\\t\\t\\toldParams = containerAnimation.vars.onUpdateParams;\\n\\t\\t\\tcontainerAnimation.eventCallback(\\\"onUpdate\\\", () => {\\n\\t\\t\\t\\tself.update(0, 0, 1);\\n\\t\\t\\t\\toldOnUpdate && oldOnUpdate.apply(containerAnimation, oldParams || []);\\n\\t\\t\\t});\\n\\t\\t}\\n\\n\\t\\tself.previous = () => _triggers[_triggers.indexOf(self) - 1];\\n\\t\\tself.next = () => _triggers[_triggers.indexOf(self) + 1];\\n\\n\\t\\tself.revert = (revert, temp) => {\\n\\t\\t\\tif (!temp) { return self.kill(true); } // for compatibility with gsap.context() and gsap.matchMedia() which call revert()\\n\\t\\t\\tlet r = revert !== false || !self.enabled,\\n\\t\\t\\t\\tprevRefreshing = _refreshing;\\n\\t\\t\\tif (r !== self.isReverted) {\\n\\t\\t\\t\\tif (r) {\\n\\t\\t\\t\\t\\tprevScroll = Math.max(scrollFunc(), self.scroll.rec || 0); // record the scroll so we can revert later (repositioning/pinning things can affect scroll position). In the static refresh() method, we first record all the scroll positions as a reference.\\n\\t\\t\\t\\t\\tprevProgress = self.progress;\\n\\t\\t\\t\\t\\tprevAnimProgress = animation && animation.progress();\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tmarkerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(m => m.style.display = r ? \\\"none\\\" : \\\"block\\\");\\n\\t\\t\\t\\tif (r) {\\n\\t\\t\\t\\t\\t_refreshing = self;\\n\\t\\t\\t\\t\\tself.update(r); // make sure the pin is back in its original position so that all the measurements are correct. do this BEFORE swapping the pin out\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (pin && (!pinReparent || !self.isActive)) {\\n\\t\\t\\t\\t\\tif (r) {\\n\\t\\t\\t\\t\\t\\t_swapPinOut(pin, spacer, pinOriginalState);\\n\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t_swapPinIn(pin, spacer, _getComputedStyle(pin), spacerState);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tr || self.update(r); // when we're restoring, the update should run AFTER swapping the pin into its pin-spacer.\\n\\t\\t\\t\\t_refreshing = prevRefreshing; // restore. We set it to true during the update() so that things fire properly in there.\\n\\t\\t\\t\\tself.isReverted = r;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tself.refresh = (soft, force, position, pinOffset) => { // position is typically only defined if it's coming from setPositions() - it's a way to skip the normal parsing. pinOffset is also only from setPositions() and is mostly related to fancy stuff we need to do in ScrollSmoother with effects\\n\\t\\t\\tif ((_refreshing || !self.enabled) && !force) {\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t\\tif (pin && soft && _lastScrollTime) {\\n\\t\\t\\t\\t_addListener(ScrollTrigger, \\\"scrollEnd\\\", _softRefresh);\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t\\t!_refreshingAll && onRefreshInit && onRefreshInit(self);\\n\\t\\t\\t_refreshing = self;\\n\\t\\t\\tif (tweenTo.tween && !position) { // we skip this if a position is passed in because typically that's from .setPositions() and it's best to allow in-progress snapping to continue.\\n\\t\\t\\t\\ttweenTo.tween.kill();\\n\\t\\t\\t\\ttweenTo.tween = 0;\\n\\t\\t\\t}\\n\\t\\t\\tscrubTween && scrubTween.pause();\\n\\t\\t\\tinvalidateOnRefresh && animation && animation.revert({kill: false}).invalidate();\\n\\t\\t\\tself.isReverted || self.revert(true, true);\\n\\t\\t\\tself._subPinOffset = false; // we'll set this to true in the sub-pins if we find any\\n\\t\\t\\tlet size = getScrollerSize(),\\n\\t\\t\\t\\tscrollerBounds = getScrollerOffsets(),\\n\\t\\t\\t\\tmax = containerAnimation ? containerAnimation.duration() : _maxScroll(scroller, direction),\\n\\t\\t\\t\\tisFirstRefresh = change <= 0.01,\\n\\t\\t\\t\\toffset = 0,\\n\\t\\t\\t\\totherPinOffset = pinOffset || 0,\\n\\t\\t\\t\\tparsedEnd = _isObject(position) ? position.end : vars.end,\\n\\t\\t\\t\\tparsedEndTrigger = vars.endTrigger || trigger,\\n\\t\\t\\t\\tparsedStart = _isObject(position) ? position.start : (vars.start || (vars.start === 0 || !trigger ? 0 : (pin ? \\\"0 0\\\" : \\\"0 100%\\\"))),\\n\\t\\t\\t\\tpinnedContainer = self.pinnedContainer = vars.pinnedContainer && (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(vars.pinnedContainer, self),\\n\\t\\t\\t\\ttriggerIndex = (trigger && Math.max(0, _triggers.indexOf(self))) || 0,\\n\\t\\t\\t\\ti = triggerIndex,\\n\\t\\t\\t\\tcs, bounds, scroll, isVertical, override, curTrigger, curPin, oppositeScroll, initted, revertedPins, forcedOverflow, markerStartOffset, markerEndOffset;\\n\\t\\t\\tif (markers && _isObject(position)) { // if we alter the start/end positions with .setPositions(), it generally feeds in absolute NUMBERS which don't convey information about where to line up the markers, so to keep it intuitive, we record how far the trigger positions shift after applying the new numbers and then offset by that much in the opposite direction. We do the same to the associated trigger markers too of course.\\n\\t\\t\\t\\tmarkerStartOffset = gsap.getProperty(markerStartTrigger, direction.p);\\n\\t\\t\\t\\tmarkerEndOffset = gsap.getProperty(markerEndTrigger, direction.p);\\n\\t\\t\\t}\\n\\t\\t\\twhile (i-- > 0) { // user might try to pin the same element more than once, so we must find any prior triggers with the same pin, revert them, and determine how long they're pinning so that we can offset things appropriately. Make sure we revert from last to first so that things \\\"rewind\\\" properly.\\n\\t\\t\\t\\tcurTrigger = _triggers[i];\\n\\t\\t\\t\\tcurTrigger.end || curTrigger.refresh(0, 1) || (_refreshing = self); // if it's a timeline-based trigger that hasn't been fully initialized yet because it's waiting for 1 tick, just force the refresh() here, otherwise if it contains a pin that's supposed to affect other ScrollTriggers further down the page, they won't be adjusted properly.\\n\\t\\t\\t\\tcurPin = curTrigger.pin;\\n\\t\\t\\t\\tif (curPin && (curPin === trigger || curPin === pin || curPin === pinnedContainer) && !curTrigger.isReverted) {\\n\\t\\t\\t\\t\\trevertedPins || (revertedPins = []);\\n\\t\\t\\t\\t\\trevertedPins.unshift(curTrigger); // we'll revert from first to last to make sure things reach their end state properly\\n\\t\\t\\t\\t\\tcurTrigger.revert(true, true);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (curTrigger !== _triggers[i]) { // in case it got removed.\\n\\t\\t\\t\\t\\ttriggerIndex--;\\n\\t\\t\\t\\t\\ti--;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\t_isFunction(parsedStart) && (parsedStart = parsedStart(self));\\n\\t\\t\\tparsedStart = _parseClamp(parsedStart, \\\"start\\\", self);\\n\\t\\t\\tstart = _parsePosition(parsedStart, trigger, size, direction, scrollFunc(), markerStart, markerStartTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max, containerAnimation, self._startClamp && \\\"_startClamp\\\") || (pin ? -0.001 : 0);\\n\\t\\t\\t_isFunction(parsedEnd) && (parsedEnd = parsedEnd(self));\\n\\t\\t\\tif (_isString(parsedEnd) && !parsedEnd.indexOf(\\\"+=\\\")) {\\n\\t\\t\\t\\tif (~parsedEnd.indexOf(\\\" \\\")) {\\n\\t\\t\\t\\t\\tparsedEnd = (_isString(parsedStart) ? parsedStart.split(\\\" \\\")[0] : \\\"\\\") + parsedEnd;\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\toffset = _offsetToPx(parsedEnd.substr(2), size);\\n\\t\\t\\t\\t\\tparsedEnd = _isString(parsedStart) ? parsedStart : (containerAnimation ? gsap.utils.mapRange(0, containerAnimation.duration(), containerAnimation.scrollTrigger.start, containerAnimation.scrollTrigger.end, start) : start) + offset; // _parsePosition won't factor in the offset if the start is a number, so do it here.\\n\\t\\t\\t\\t\\tparsedEndTrigger = trigger;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tparsedEnd = _parseClamp(parsedEnd, \\\"end\\\", self);\\n\\t\\t\\tend = Math.max(start, _parsePosition(parsedEnd || (parsedEndTrigger ? \\\"100% 0\\\" : max), parsedEndTrigger, size, direction, scrollFunc() + offset, markerEnd, markerEndTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max, containerAnimation, self._endClamp && \\\"_endClamp\\\")) || -0.001;\\n\\n\\t\\t\\toffset = 0;\\n\\t\\t\\ti = triggerIndex;\\n\\t\\t\\twhile (i--) {\\n\\t\\t\\t\\tcurTrigger = _triggers[i];\\n\\t\\t\\t\\tcurPin = curTrigger.pin;\\n\\t\\t\\t\\tif (curPin && curTrigger.start - curTrigger._pinPush <= start && !containerAnimation && curTrigger.end > 0) {\\n\\t\\t\\t\\t\\tcs = curTrigger.end - (self._startClamp ? Math.max(0, curTrigger.start) : curTrigger.start);\\n\\t\\t\\t\\t\\tif (((curPin === trigger && curTrigger.start - curTrigger._pinPush < start) || curPin === pinnedContainer) && isNaN(parsedStart)) { // numeric start values shouldn't be offset at all - treat them as absolute\\n\\t\\t\\t\\t\\t\\toffset += cs * (1 - curTrigger.progress);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tcurPin === pin && (otherPinOffset += cs);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tstart += offset;\\n\\t\\t\\tend += offset;\\n\\t\\t\\tself._startClamp && (self._startClamp += offset);\\n\\n\\t\\t\\tif (self._endClamp && !_refreshingAll) {\\n\\t\\t\\t\\tself._endClamp = end || -0.001;\\n\\t\\t\\t\\tend = Math.min(end, _maxScroll(scroller, direction));\\n\\t\\t\\t}\\n\\t\\t\\tchange = (end - start) || ((start -= 0.01) && 0.001);\\n\\n\\t\\t\\tif (isFirstRefresh) { // on the very first refresh(), the prevProgress couldn't have been accurate yet because the start/end were never calculated, so we set it here. Before 3.11.5, it could lead to an inaccurate scroll position restoration with snapping.\\n\\t\\t\\t\\tprevProgress = gsap.utils.clamp(0, 1, gsap.utils.normalize(start, end, prevScroll));\\n\\t\\t\\t}\\n\\t\\t\\tself._pinPush = otherPinOffset;\\n\\t\\t\\tif (markerStart && offset) { // offset the markers if necessary\\n\\t\\t\\t\\tcs = {};\\n\\t\\t\\t\\tcs[direction.a] = \\\"+=\\\" + offset;\\n\\t\\t\\t\\tpinnedContainer && (cs[direction.p] = \\\"-=\\\" + scrollFunc());\\n\\t\\t\\t\\tgsap.set([markerStart, markerEnd], cs);\\n\\t\\t\\t}\\n\\n\\t\\t\\tif (pin && !(_clampingMax && self.end >= _maxScroll(scroller, direction))) {\\n\\t\\t\\t\\tcs = _getComputedStyle(pin);\\n\\t\\t\\t\\tisVertical = direction === _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical;\\n\\t\\t\\t\\tscroll = scrollFunc(); // recalculate because the triggers can affect the scroll\\n\\t\\t\\t\\tpinStart = parseFloat(pinGetter(direction.a)) + otherPinOffset;\\n\\t\\t\\t\\tif (!max && end > 1) { // makes sure the scroller has a scrollbar, otherwise if something has width: 100%, for example, it would be too big (exclude the scrollbar). See https://gsap.com/forums/topic/25182-scrolltrigger-width-of-page-increase-where-markers-are-set-to-false/\\n\\t\\t\\t\\t\\tforcedOverflow = (isViewport ? (_doc.scrollingElement || _docEl) : scroller).style;\\n\\t\\t\\t\\t\\tforcedOverflow = {style: forcedOverflow, value: forcedOverflow[\\\"overflow\\\" + direction.a.toUpperCase()]};\\n\\t\\t\\t\\t\\tif (isViewport && _getComputedStyle(_body)[\\\"overflow\\\" + direction.a.toUpperCase()] !== \\\"scroll\\\") { // avoid an extra scrollbar if BOTH <html> and <body> have overflow set to \\\"scroll\\\"\\n\\t\\t\\t\\t\\t\\tforcedOverflow.style[\\\"overflow\\\" + direction.a.toUpperCase()] = \\\"scroll\\\";\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t_swapPinIn(pin, spacer, cs);\\n\\t\\t\\t\\tpinState = _getState(pin);\\n\\t\\t\\t\\t// transforms will interfere with the top/left/right/bottom placement, so remove them temporarily. getBoundingClientRect() factors in transforms.\\n\\t\\t\\t\\tbounds = _getBounds(pin, true);\\n\\t\\t\\t\\toppositeScroll = useFixedPosition && (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getScrollFunc)(scroller, isVertical ? _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal : _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical)();\\n\\t\\t\\t\\tif (pinSpacing) {\\n\\t\\t\\t\\t\\tspacerState = [pinSpacing + direction.os2, change + otherPinOffset + _px];\\n\\t\\t\\t\\t\\tspacerState.t = spacer;\\n\\t\\t\\t\\t\\ti = (pinSpacing === _padding) ? _getSize(pin, direction) + change + otherPinOffset : 0;\\n\\t\\t\\t\\t\\tif (i) {\\n\\t\\t\\t\\t\\t\\tspacerState.push(direction.d, i + _px); // for box-sizing: border-box (must include padding).\\n\\t\\t\\t\\t\\t\\tspacer.style.flexBasis !== \\\"auto\\\" && (spacer.style.flexBasis = i + _px);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t_setState(spacerState);\\n\\t\\t\\t\\t\\tif (pinnedContainer) { // in ScrollTrigger.refresh(), we need to re-evaluate the pinContainer's size because this pinSpacing may stretch it out, but we can't just add the exact distance because depending on layout, it may not push things down or it may only do so partially.\\n\\t\\t\\t\\t\\t\\t_triggers.forEach(t => {\\n\\t\\t\\t\\t\\t\\t\\tif (t.pin === pinnedContainer && t.vars.pinSpacing !== false) {\\n\\t\\t\\t\\t\\t\\t\\t\\tt._subPinOffset = true;\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tuseFixedPosition && scrollFunc(prevScroll);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\ti = _getSize(pin, direction);\\n\\t\\t\\t\\t\\ti && spacer.style.flexBasis !== \\\"auto\\\" && (spacer.style.flexBasis = i + _px);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (useFixedPosition) {\\n\\t\\t\\t\\t\\toverride = {\\n\\t\\t\\t\\t\\t\\ttop: (bounds.top + (isVertical ? scroll - start : oppositeScroll)) + _px,\\n\\t\\t\\t\\t\\t\\tleft: (bounds.left + (isVertical ? oppositeScroll : scroll - start)) + _px,\\n\\t\\t\\t\\t\\t\\tboxSizing: \\\"border-box\\\",\\n\\t\\t\\t\\t\\t\\tposition: \\\"fixed\\\"\\n\\t\\t\\t\\t\\t};\\n\\t\\t\\t\\t\\toverride[_width] = override[\\\"max\\\" + _Width] = Math.ceil(bounds.width) + _px;\\n\\t\\t\\t\\t\\toverride[_height] = override[\\\"max\\\" + _Height] = Math.ceil(bounds.height) + _px;\\n\\t\\t\\t\\t\\toverride[_margin] = override[_margin + _Top] = override[_margin + _Right] = override[_margin + _Bottom] = override[_margin + _Left] = \\\"0\\\";\\n\\t\\t\\t\\t\\toverride[_padding] = cs[_padding];\\n\\t\\t\\t\\t\\toverride[_padding + _Top] = cs[_padding + _Top];\\n\\t\\t\\t\\t\\toverride[_padding + _Right] = cs[_padding + _Right];\\n\\t\\t\\t\\t\\toverride[_padding + _Bottom] = cs[_padding + _Bottom];\\n\\t\\t\\t\\t\\toverride[_padding + _Left] = cs[_padding + _Left];\\n\\t\\t\\t\\t\\tpinActiveState = _copyState(pinOriginalState, override, pinReparent);\\n\\t\\t\\t\\t\\t_refreshingAll && scrollFunc(0);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (animation) { // the animation might be affecting the transform, so we must jump to the end, check the value, and compensate accordingly. Otherwise, when it becomes unpinned, the pinSetter() will get set to a value that doesn't include whatever the animation did.\\n\\t\\t\\t\\t\\tinitted = animation._initted; // if not, we must invalidate() after this step, otherwise it could lock in starting values prematurely.\\n\\t\\t\\t\\t\\t_suppressOverwrites(1);\\n\\t\\t\\t\\t\\tanimation.render(animation.duration(), true, true);\\n\\t\\t\\t\\t\\tpinChange = pinGetter(direction.a) - pinStart + change + otherPinOffset;\\n\\t\\t\\t\\t\\tpinMoves = Math.abs(change - pinChange) > 1;\\n\\t\\t\\t\\t\\tuseFixedPosition && pinMoves && pinActiveState.splice(pinActiveState.length - 2, 2); // transform is the last property/value set in the state Array. Since the animation is controlling that, we should omit it.\\n\\t\\t\\t\\t\\tanimation.render(0, true, true);\\n\\t\\t\\t\\t\\tinitted || animation.invalidate(true);\\n\\t\\t\\t\\t\\tanimation.parent || animation.totalTime(animation.totalTime()); // if, for example, a toggleAction called play() and then refresh() happens and when we render(1) above, it would cause the animation to complete and get removed from its parent, so this makes sure it gets put back in.\\n\\t\\t\\t\\t\\t_suppressOverwrites(0);\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tpinChange = change\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tforcedOverflow && (forcedOverflow.value ? (forcedOverflow.style[\\\"overflow\\\" + direction.a.toUpperCase()] = forcedOverflow.value) : forcedOverflow.style.removeProperty(\\\"overflow-\\\" + direction.a));\\n\\t\\t\\t} else if (trigger && scrollFunc() && !containerAnimation) { // it may be INSIDE a pinned element, so walk up the tree and look for any elements with _pinOffset to compensate because anything with pinSpacing that's already scrolled would throw off the measurements in getBoundingClientRect()\\n\\t\\t\\t\\tbounds = trigger.parentNode;\\n\\t\\t\\t\\twhile (bounds && bounds !== _body) {\\n\\t\\t\\t\\t\\tif (bounds._pinOffset) {\\n\\t\\t\\t\\t\\t\\tstart -= bounds._pinOffset;\\n\\t\\t\\t\\t\\t\\tend -= bounds._pinOffset;\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tbounds = bounds.parentNode;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\trevertedPins && revertedPins.forEach(t => t.revert(false, true));\\n\\t\\t\\tself.start = start;\\n\\t\\t\\tself.end = end;\\n\\t\\t\\tscroll1 = scroll2 = _refreshingAll ? prevScroll : scrollFunc(); // reset velocity\\n\\t\\t\\tif (!containerAnimation && !_refreshingAll) {\\n\\t\\t\\t\\tscroll1 < prevScroll && scrollFunc(prevScroll);\\n\\t\\t\\t\\tself.scroll.rec = 0;\\n\\t\\t\\t}\\n\\t\\t\\tself.revert(false, true);\\n\\t\\t\\tlastRefresh = _getTime();\\n\\t\\t\\tif (snapDelayedCall) {\\n\\t\\t\\t\\tlastSnap = -1; // just so snapping gets re-enabled, clear out any recorded last value\\n\\t\\t\\t\\t// self.isActive && scrollFunc(start + change * prevProgress); // previously this line was here to ensure that when snapping kicks in, it's from the previous progress but in some cases that's not desirable, like an all-page ScrollTrigger when new content gets added to the page, that'd totally change the progress.\\n\\t\\t\\t\\tsnapDelayedCall.restart(true);\\n\\t\\t\\t}\\n\\t\\t\\t_refreshing = 0;\\n\\t\\t\\tanimation && isToggle && (animation._initted || prevAnimProgress) && animation.progress() !== prevAnimProgress && animation.progress(prevAnimProgress || 0, true).render(animation.time(), true, true); // must force a re-render because if saveStyles() was used on the target(s), the styles could have been wiped out during the refresh().\\n\\t\\t\\tif (isFirstRefresh || prevProgress !== self.progress || containerAnimation || invalidateOnRefresh || (animation && !animation._initted)) { // ensures that the direction is set properly (when refreshing, progress is set back to 0 initially, then back again to wherever it needs to be) and that callbacks are triggered.\\n\\t\\t\\t\\tanimation && !isToggle && animation.totalProgress(containerAnimation && start < -0.001 && !prevProgress ? gsap.utils.normalize(start, end, 0) : prevProgress, true); // to avoid issues where animation callbacks like onStart aren't triggered.\\n\\t\\t\\t\\tself.progress = isFirstRefresh || ((scroll1 - start) / change === prevProgress) ? 0 : prevProgress;\\n\\t\\t\\t}\\n\\t\\t\\tpin && pinSpacing && (spacer._pinOffset = Math.round(self.progress * pinChange));\\n\\t\\t\\tscrubTween && scrubTween.invalidate();\\n\\n\\t\\t\\tif (!isNaN(markerStartOffset)) { // numbers were passed in for the position which are absolute, so instead of just putting the markers at the very bottom of the viewport, we figure out how far they shifted down (it's safe to assume they were originally positioned in closer relation to the trigger element with values like \\\"top\\\", \\\"center\\\", a percentage or whatever, so we offset that much in the opposite direction to basically revert them to the relative position thy were at previously.\\n\\t\\t\\t\\tmarkerStartOffset -= gsap.getProperty(markerStartTrigger, direction.p);\\n\\t\\t\\t\\tmarkerEndOffset -= gsap.getProperty(markerEndTrigger, direction.p);\\n\\t\\t\\t\\t_shiftMarker(markerStartTrigger, direction, markerStartOffset);\\n\\t\\t\\t\\t_shiftMarker(markerStart, direction, markerStartOffset - (pinOffset || 0));\\n\\t\\t\\t\\t_shiftMarker(markerEndTrigger, direction, markerEndOffset);\\n\\t\\t\\t\\t_shiftMarker(markerEnd, direction, markerEndOffset - (pinOffset || 0));\\n\\t\\t\\t}\\n\\n\\t\\t\\tisFirstRefresh && !_refreshingAll && self.update(); // edge case - when you reload a page when it's already scrolled down, some browsers fire a \\\"scroll\\\" event before DOMContentLoaded, triggering an updateAll(). If we don't update the self.progress as part of refresh(), then when it happens next, it may record prevProgress as 0 when it really shouldn't, potentially causing a callback in an animation to fire again.\\n\\n\\t\\t\\tif (onRefresh && !_refreshingAll && !executingOnRefresh) { // when refreshing all, we do extra work to correct pinnedContainer sizes and ensure things don't exceed the maxScroll, so we should do all the refreshes at the end after all that work so that the start/end values are corrected.\\n\\t\\t\\t\\texecutingOnRefresh = true;\\n\\t\\t\\t\\tonRefresh(self);\\n\\t\\t\\t\\texecutingOnRefresh = false;\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\tself.getVelocity = () => ((scrollFunc() - scroll2) / (_getTime() - _time2) * 1000) || 0;\\n\\n\\t\\tself.endAnimation = () => {\\n\\t\\t\\t_endAnimation(self.callbackAnimation);\\n\\t\\t\\tif (animation) {\\n\\t\\t\\t\\tscrubTween ? scrubTween.progress(1) : (!animation.paused() ? _endAnimation(animation, animation.reversed()) : isToggle || _endAnimation(animation, self.direction < 0, 1));\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\tself.labelToScroll = label => animation && animation.labels && ((start || self.refresh() || start) + (animation.labels[label] / animation.duration()) * change) || 0;\\n\\n\\t\\tself.getTrailing = name => {\\n\\t\\t\\tlet i = _triggers.indexOf(self),\\n\\t\\t\\t\\ta = self.direction > 0 ? _triggers.slice(0, i).reverse() : _triggers.slice(i+1);\\n\\t\\t\\treturn (_isString(name) ? a.filter(t => t.vars.preventOverlaps === name) : a).filter(t => self.direction > 0 ? t.end <= start : t.start >= end);\\n\\t\\t};\\n\\n\\n\\t\\tself.update = (reset, recordVelocity, forceFake) => {\\n\\t\\t\\tif (containerAnimation && !forceFake && !reset) {\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t\\tlet scroll = _refreshingAll === true ? prevScroll : self.scroll(),\\n\\t\\t\\t\\tp = reset ? 0 : (scroll - start) / change,\\n\\t\\t\\t\\tclipped = p < 0 ? 0 : p > 1 ? 1 : p || 0,\\n\\t\\t\\t\\tprevProgress = self.progress,\\n\\t\\t\\t\\tisActive, wasActive, toggleState, action, stateChanged, toggled, isAtMax, isTakingAction;\\n\\t\\t\\tif (recordVelocity) {\\n\\t\\t\\t\\tscroll2 = scroll1;\\n\\t\\t\\t\\tscroll1 = containerAnimation ? scrollFunc() : scroll;\\n\\t\\t\\t\\tif (snap) {\\n\\t\\t\\t\\t\\tsnap2 = snap1;\\n\\t\\t\\t\\t\\tsnap1 = animation && !isToggle ? animation.totalProgress() : clipped;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\t// anticipate the pinning a few ticks ahead of time based on velocity to avoid a visual glitch due to the fact that most browsers do scrolling on a separate thread (not synced with requestAnimationFrame).\\n\\t\\t\\tif (anticipatePin && pin && !_refreshing && !_startup && _lastScrollTime) {\\n\\t\\t\\t\\tif (!clipped && start < scroll + ((scroll - scroll2) / (_getTime() - _time2)) * anticipatePin) {\\n\\t\\t\\t\\t\\tclipped = 0.0001;\\n\\t\\t\\t\\t} else if (clipped === 1 && end > scroll + ((scroll - scroll2) / (_getTime() - _time2)) * anticipatePin) {\\n\\t\\t\\t\\t\\tclipped = 0.9999;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tif (clipped !== prevProgress && self.enabled) {\\n\\t\\t\\t\\tisActive = self.isActive = !!clipped && clipped < 1;\\n\\t\\t\\t\\twasActive = !!prevProgress && prevProgress < 1;\\n\\t\\t\\t\\ttoggled = isActive !== wasActive;\\n\\t\\t\\t\\tstateChanged = toggled || !!clipped !== !!prevProgress; // could go from start all the way to end, thus it didn't toggle but it did change state in a sense (may need to fire a callback)\\n\\t\\t\\t\\tself.direction = clipped > prevProgress ? 1 : -1;\\n\\t\\t\\t\\tself.progress = clipped;\\n\\n\\t\\t\\t\\tif (stateChanged && !_refreshing) {\\n\\t\\t\\t\\t\\ttoggleState = clipped && !prevProgress ? 0 : clipped === 1 ? 1 : prevProgress === 1 ? 2 : 3; // 0 = enter, 1 = leave, 2 = enterBack, 3 = leaveBack (we prioritize the FIRST encounter, thus if you scroll really fast past the onEnter and onLeave in one tick, it'd prioritize onEnter.\\n\\t\\t\\t\\t\\tif (isToggle) {\\n\\t\\t\\t\\t\\t\\taction = (!toggled && toggleActions[toggleState + 1] !== \\\"none\\\" && toggleActions[toggleState + 1]) || toggleActions[toggleState]; // if it didn't toggle, that means it shot right past and since we prioritize the \\\"enter\\\" action, we should switch to the \\\"leave\\\" in this case (but only if one is defined)\\n\\t\\t\\t\\t\\t\\tisTakingAction = animation && (action === \\\"complete\\\" || action === \\\"reset\\\" || action in animation);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\tpreventOverlaps && (toggled || isTakingAction) && (isTakingAction || scrub || !animation) && (_isFunction(preventOverlaps) ? preventOverlaps(self) : self.getTrailing(preventOverlaps).forEach(t => t.endAnimation()));\\n\\n\\t\\t\\t\\tif (!isToggle) {\\n\\t\\t\\t\\t\\tif (scrubTween && !_refreshing && !_startup) {\\n\\t\\t\\t\\t\\t\\t(scrubTween._dp._time - scrubTween._start !== scrubTween._time) && scrubTween.render(scrubTween._dp._time - scrubTween._start); // if there's a scrub on both the container animation and this one (or a ScrollSmoother), the update order would cause this one not to have rendered yet, so it wouldn't make any progress before we .restart() it heading toward the new progress so it'd appear stuck thus we force a render here.\\n\\t\\t\\t\\t\\t\\tif (scrubTween.resetTo) {\\n\\t\\t\\t\\t\\t\\t\\tscrubTween.resetTo(\\\"totalProgress\\\", clipped, animation._tTime / animation._tDur);\\n\\t\\t\\t\\t\\t\\t} else { // legacy support (courtesy), before 3.10.0\\n\\t\\t\\t\\t\\t\\t\\tscrubTween.vars.totalProgress = clipped;\\n\\t\\t\\t\\t\\t\\t\\tscrubTween.invalidate().restart();\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t} else if (animation) {\\n\\t\\t\\t\\t\\t\\tanimation.totalProgress(clipped, !!(_refreshing && (lastRefresh || reset)));\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (pin) {\\n\\t\\t\\t\\t\\treset && pinSpacing && (spacer.style[pinSpacing + direction.os2] = spacingStart);\\n\\t\\t\\t\\t\\tif (!useFixedPosition) {\\n\\t\\t\\t\\t\\t\\tpinSetter(_round(pinStart + pinChange * clipped));\\n\\t\\t\\t\\t\\t} else if (stateChanged) {\\n\\t\\t\\t\\t\\t\\tisAtMax = !reset && clipped > prevProgress && end + 1 > scroll && scroll + 1 >= _maxScroll(scroller, direction); // if it's at the VERY end of the page, don't switch away from position: fixed because it's pointless and it could cause a brief flash when the user scrolls back up (when it gets pinned again)\\n\\t\\t\\t\\t\\t\\tif (pinReparent) {\\n\\t\\t\\t\\t\\t\\t\\tif (!reset && (isActive || isAtMax)) {\\n\\t\\t\\t\\t\\t\\t\\t\\tlet bounds = _getBounds(pin, true),\\n\\t\\t\\t\\t\\t\\t\\t\\t\\toffset = scroll - start;\\n\\t\\t\\t\\t\\t\\t\\t\\t_reparent(pin, _body, (bounds.top + (direction === _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical ? offset : 0)) + _px, (bounds.left + (direction === _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical ? 0 : offset)) + _px);\\n\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\t_reparent(pin, spacer);\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t_setState(isActive || isAtMax ? pinActiveState : pinState);\\n\\t\\t\\t\\t\\t\\t(pinMoves && clipped < 1 && isActive) || pinSetter(pinStart + (clipped === 1 && !isAtMax ? pinChange : 0));\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tsnap && !tweenTo.tween && !_refreshing && !_startup && snapDelayedCall.restart(true);\\n\\t\\t\\t\\ttoggleClass && (toggled || (once && clipped && (clipped < 1 || !_limitCallbacks))) && _toArray(toggleClass.targets).forEach(el => el.classList[isActive || once ? \\\"add\\\" : \\\"remove\\\"](toggleClass.className)); // classes could affect positioning, so do it even if reset or refreshing is true.\\n\\t\\t\\t\\tonUpdate && !isToggle && !reset && onUpdate(self);\\n\\t\\t\\t\\tif (stateChanged && !_refreshing) {\\n\\t\\t\\t\\t\\tif (isToggle) {\\n\\t\\t\\t\\t\\t\\tif (isTakingAction) {\\n\\t\\t\\t\\t\\t\\t\\tif (action === \\\"complete\\\") {\\n\\t\\t\\t\\t\\t\\t\\t\\tanimation.pause().totalProgress(1);\\n\\t\\t\\t\\t\\t\\t\\t} else if (action === \\\"reset\\\") {\\n\\t\\t\\t\\t\\t\\t\\t\\tanimation.restart(true).pause();\\n\\t\\t\\t\\t\\t\\t\\t} else if (action === \\\"restart\\\") {\\n\\t\\t\\t\\t\\t\\t\\t\\tanimation.restart(true);\\n\\t\\t\\t\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\t\\t\\t\\tanimation[action]();\\n\\t\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\tonUpdate && onUpdate(self);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tif (toggled || !_limitCallbacks) { // on startup, the page could be scrolled and we don't want to fire callbacks that didn't toggle. For example onEnter shouldn't fire if the ScrollTrigger isn't actually entered.\\n\\t\\t\\t\\t\\t\\tonToggle && toggled && _callback(self, onToggle);\\n\\t\\t\\t\\t\\t\\tcallbacks[toggleState] && _callback(self, callbacks[toggleState]);\\n\\t\\t\\t\\t\\t\\tonce && (clipped === 1 ? self.kill(false, 1) : (callbacks[toggleState] = 0)); // a callback shouldn't be called again if once is true.\\n\\t\\t\\t\\t\\t\\tif (!toggled) { // it's possible to go completely past, like from before the start to after the end (or vice-versa) in which case BOTH callbacks should be fired in that order\\n\\t\\t\\t\\t\\t\\t\\ttoggleState = clipped === 1 ? 1 : 3;\\n\\t\\t\\t\\t\\t\\t\\tcallbacks[toggleState] && _callback(self, callbacks[toggleState]);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tif (fastScrollEnd && !isActive && Math.abs(self.getVelocity()) > (_isNumber(fastScrollEnd) ? fastScrollEnd : 2500)) {\\n\\t\\t\\t\\t\\t\\t_endAnimation(self.callbackAnimation);\\n\\t\\t\\t\\t\\t\\tscrubTween ? scrubTween.progress(1) : _endAnimation(animation, action === \\\"reverse\\\" ? 1 : !clipped, 1);\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t} else if (isToggle && onUpdate && !_refreshing) {\\n\\t\\t\\t\\t\\tonUpdate(self);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\t// update absolutely-positioned markers (only if the scroller isn't the viewport)\\n\\t\\t\\tif (markerEndSetter) {\\n\\t\\t\\t\\tlet n = containerAnimation ? scroll / containerAnimation.duration() * (containerAnimation._caScrollDist || 0) : scroll;\\n\\t\\t\\t\\tmarkerStartSetter(n + (markerStartTrigger._isFlipped ? 1 : 0));\\n\\t\\t\\t\\tmarkerEndSetter(n);\\n\\t\\t\\t}\\n\\t\\t\\tcaMarkerSetter && caMarkerSetter(-scroll / containerAnimation.duration() * (containerAnimation._caScrollDist || 0));\\n\\t\\t};\\n\\n\\t\\tself.enable = (reset, refresh) => {\\n\\t\\t\\tif (!self.enabled) {\\n\\t\\t\\t\\tself.enabled = true;\\n\\t\\t\\t\\t_addListener(scroller, \\\"resize\\\", _onResize);\\n\\t\\t\\t\\tisViewport || _addListener(scroller, \\\"scroll\\\", _onScroll);\\n\\t\\t\\t\\tonRefreshInit && _addListener(ScrollTrigger, \\\"refreshInit\\\", onRefreshInit);\\n\\t\\t\\t\\tif (reset !== false) {\\n\\t\\t\\t\\t\\tself.progress = prevProgress = 0;\\n\\t\\t\\t\\t\\tscroll1 = scroll2 = lastSnap = scrollFunc();\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\trefresh !== false && self.refresh();\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\tself.getTween = snap => snap && tweenTo ? tweenTo.tween : scrubTween;\\n\\n\\t\\tself.setPositions = (newStart, newEnd, keepClamp, pinOffset) => { // doesn't persist after refresh()! Intended to be a way to override values that were set during refresh(), like you could set it in onRefresh()\\n\\t\\t\\tif (containerAnimation) { // convert ratios into scroll positions. Remember, start/end values on ScrollTriggers that have a containerAnimation refer to the time (in seconds), NOT scroll positions.\\n\\t\\t\\t\\tlet st = containerAnimation.scrollTrigger,\\n\\t\\t\\t\\t\\tduration = containerAnimation.duration(),\\n\\t\\t\\t\\t\\tchange = st.end - st.start;\\n\\t\\t\\t\\tnewStart = st.start + change * newStart / duration;\\n\\t\\t\\t\\tnewEnd = st.start + change * newEnd / duration;\\n\\t\\t\\t}\\n\\t\\t\\tself.refresh(false, false, {start: _keepClamp(newStart, keepClamp && !!self._startClamp), end: _keepClamp(newEnd, keepClamp && !!self._endClamp)}, pinOffset);\\n\\t\\t\\tself.update();\\n\\t\\t};\\n\\n\\t\\tself.adjustPinSpacing = amount => {\\n\\t\\t\\tif (spacerState && amount) {\\n\\t\\t\\t\\tlet i = spacerState.indexOf(direction.d) + 1;\\n\\t\\t\\t\\tspacerState[i] = (parseFloat(spacerState[i]) + amount) + _px;\\n\\t\\t\\t\\tspacerState[1] = (parseFloat(spacerState[1]) + amount) + _px;\\n\\t\\t\\t\\t_setState(spacerState);\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\tself.disable = (reset, allowAnimation) => {\\n\\t\\t\\tif (self.enabled) {\\n\\t\\t\\t\\treset !== false && self.revert(true, true);\\n\\t\\t\\t\\tself.enabled = self.isActive = false;\\n\\t\\t\\t\\tallowAnimation || (scrubTween && scrubTween.pause());\\n\\t\\t\\t\\tprevScroll = 0;\\n\\t\\t\\t\\tpinCache && (pinCache.uncache = 1);\\n\\t\\t\\t\\tonRefreshInit && _removeListener(ScrollTrigger, \\\"refreshInit\\\", onRefreshInit);\\n\\t\\t\\t\\tif (snapDelayedCall) {\\n\\t\\t\\t\\t\\tsnapDelayedCall.pause();\\n\\t\\t\\t\\t\\ttweenTo.tween && tweenTo.tween.kill() && (tweenTo.tween = 0);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tif (!isViewport) {\\n\\t\\t\\t\\t\\tlet i = _triggers.length;\\n\\t\\t\\t\\t\\twhile (i--) {\\n\\t\\t\\t\\t\\t\\tif (_triggers[i].scroller === scroller && _triggers[i] !== self) {\\n\\t\\t\\t\\t\\t\\t\\treturn; //don't remove the listeners if there are still other triggers referencing it.\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t_removeListener(scroller, \\\"resize\\\", _onResize);\\n\\t\\t\\t\\t\\tisViewport || _removeListener(scroller, \\\"scroll\\\", _onScroll);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t};\\n\\n\\t\\tself.kill = (revert, allowAnimation) => {\\n\\t\\t\\tself.disable(revert, allowAnimation);\\n\\t\\t\\tscrubTween && !allowAnimation && scrubTween.kill();\\n\\t\\t\\tid && (delete _ids[id]);\\n\\t\\t\\tlet i = _triggers.indexOf(self);\\n\\t\\t\\ti >= 0 && _triggers.splice(i, 1);\\n\\t\\t\\ti === _i && _direction > 0 && _i--; // if we're in the middle of a refresh() or update(), splicing would cause skips in the index, so adjust...\\n\\n\\t\\t\\t// if no other ScrollTrigger instances of the same scroller are found, wipe out any recorded scroll position. Otherwise, in a single page application, for example, it could maintain scroll position when it really shouldn't.\\n\\t\\t\\ti = 0;\\n\\t\\t\\t_triggers.forEach(t => t.scroller === self.scroller && (i = 1));\\n\\t\\t\\ti || _refreshingAll || (self.scroll.rec = 0);\\n\\n\\t\\t\\tif (animation) {\\n\\t\\t\\t\\tanimation.scrollTrigger = null;\\n\\t\\t\\t\\trevert && animation.revert({kill: false});\\n\\t\\t\\t\\tallowAnimation || animation.kill();\\n\\t\\t\\t}\\n\\t\\t\\tmarkerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(m => m.parentNode && m.parentNode.removeChild(m));\\n\\t\\t\\t_primary === self && (_primary = 0);\\n\\t\\t\\tif (pin) {\\n\\t\\t\\t\\tpinCache && (pinCache.uncache = 1);\\n\\t\\t\\t\\ti = 0;\\n\\t\\t\\t\\t_triggers.forEach(t => t.pin === pin && i++);\\n\\t\\t\\t\\ti || (pinCache.spacer = 0); // if there aren't any more ScrollTriggers with the same pin, remove the spacer, otherwise it could be contaminated with old/stale values if the user re-creates a ScrollTrigger for the same element.\\n\\t\\t\\t}\\n\\t\\t\\tvars.onKill && vars.onKill(self);\\n\\t\\t};\\n\\n\\t\\t_triggers.push(self);\\n\\t\\tself.enable(false, false);\\n\\t\\tcustomRevertReturn && customRevertReturn(self);\\n\\n\\t\\tif (animation && animation.add && !change) { // if the animation is a timeline, it may not have been populated yet, so it wouldn't render at the proper place on the first refresh(), thus we should schedule one for the next tick. If \\\"change\\\" is defined, we know it must be re-enabling, thus we can refresh() right away.\\n\\t\\t\\tlet updateFunc = self.update; // some browsers may fire a scroll event BEFORE a tick elapses and/or the DOMContentLoaded fires. So there's a chance update() will be called BEFORE a refresh() has happened on a Timeline-attached ScrollTrigger which means the start/end won't be calculated yet. We don't want to add conditional logic inside the update() method (like check to see if end is defined and if not, force a refresh()) because that's a function that gets hit a LOT (performance). So we swap out the real update() method for this one that'll re-attach it the first time it gets called and of course forces a refresh().\\n\\t\\t\\tself.update = () => {\\n\\t\\t\\t\\tself.update = updateFunc;\\n\\t\\t\\t\\t_Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache++; // otherwise a cached scroll position may get used in the refresh() in a very rare scenario, like if ScrollTriggers are created inside a DOMContentLoaded event and the queued requestAnimationFrame() fires beforehand. See https://gsap.com/community/forums/topic/41267-scrolltrigger-breaks-on-refresh-when-using-domcontentloaded/\\n\\t\\t\\t\\tstart || end || self.refresh();\\n\\t\\t\\t};\\n\\t\\t\\tgsap.delayedCall(0.01, self.update);\\n\\t\\t\\tchange = 0.01;\\n\\t\\t\\tstart = end = 0;\\n\\t\\t} else {\\n\\t\\t\\tself.refresh();\\n\\t\\t}\\n\\t\\tpin && _queueRefreshAll(); // pinning could affect the positions of other things, so make sure we queue a full refresh()\\n\\t}\\n\\n\\n\\tstatic register(core) {\\n\\t\\tif (!_coreInitted) {\\n\\t\\t\\tgsap = core || _getGSAP();\\n\\t\\t\\t_windowExists() && window.document && ScrollTrigger.enable();\\n\\t\\t\\t_coreInitted = _enabled;\\n\\t\\t}\\n\\t\\treturn _coreInitted;\\n\\t}\\n\\n\\tstatic defaults(config) {\\n\\t\\tif (config) {\\n\\t\\t\\tfor (let p in config) {\\n\\t\\t\\t\\t_defaults[p] = config[p];\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\treturn _defaults;\\n\\t}\\n\\n\\tstatic disable(reset, kill) {\\n\\t\\t_enabled = 0;\\n\\t\\t_triggers.forEach(trigger => trigger[kill ? \\\"kill\\\" : \\\"disable\\\"](reset));\\n\\t\\t_removeListener(_win, \\\"wheel\\\", _onScroll);\\n\\t\\t_removeListener(_doc, \\\"scroll\\\", _onScroll);\\n\\t\\tclearInterval(_syncInterval);\\n\\t\\t_removeListener(_doc, \\\"touchcancel\\\", _passThrough);\\n\\t\\t_removeListener(_body, \\\"touchstart\\\", _passThrough);\\n\\t\\t_multiListener(_removeListener, _doc, \\\"pointerdown,touchstart,mousedown\\\", _pointerDownHandler);\\n\\t\\t_multiListener(_removeListener, _doc, \\\"pointerup,touchend,mouseup\\\", _pointerUpHandler);\\n\\t\\t_resizeDelay.kill();\\n\\t\\t_iterateAutoRefresh(_removeListener);\\n\\t\\tfor (let i = 0; i < _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.length; i+=3) {\\n\\t\\t\\t_wheelListener(_removeListener, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i], _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i+1]);\\n\\t\\t\\t_wheelListener(_removeListener, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i], _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i+2]);\\n\\t\\t}\\n\\t}\\n\\n\\tstatic enable() {\\n\\t\\t_win = window;\\n\\t\\t_doc = document;\\n\\t\\t_docEl = _doc.documentElement;\\n\\t\\t_body = _doc.body;\\n\\t\\tif (gsap) {\\n\\t\\t\\t_toArray = gsap.utils.toArray;\\n\\t\\t\\t_clamp = gsap.utils.clamp;\\n\\t\\t\\t_context = gsap.core.context || _passThrough;\\n\\t\\t\\t_suppressOverwrites = gsap.core.suppressOverwrites || _passThrough;\\n\\t\\t\\t_scrollRestoration = _win.history.scrollRestoration || \\\"auto\\\";\\n\\t\\t\\t_lastScroll = _win.pageYOffset || 0;\\n\\t\\t\\tgsap.core.globals(\\\"ScrollTrigger\\\", ScrollTrigger); // must register the global manually because in Internet Explorer, functions (classes) don't have a \\\"name\\\" property.\\n\\t\\t\\tif (_body) {\\n\\t\\t\\t\\t_enabled = 1;\\n\\t\\t\\t\\t_div100vh = document.createElement(\\\"div\\\"); // to solve mobile browser address bar show/hide resizing, we shouldn't rely on window.innerHeight. Instead, use a <div> with its height set to 100vh and measure that since that's what the scrolling is based on anyway and it's not affected by address bar showing/hiding.\\n\\t\\t\\t\\t_div100vh.style.height = \\\"100vh\\\";\\n\\t\\t\\t\\t_div100vh.style.position = \\\"absolute\\\";\\n\\t\\t\\t\\t_refresh100vh();\\n\\t\\t\\t\\t_rafBugFix();\\n\\t\\t\\t\\t_Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.register(gsap);\\n\\t\\t\\t\\t// isTouch is 0 if no touch, 1 if ONLY touch, and 2 if it can accommodate touch but also other types like mouse/pointer.\\n\\t\\t\\t\\tScrollTrigger.isTouch = _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.isTouch;\\n\\t\\t\\t\\t_fixIOSBug = _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.isTouch && /(iPad|iPhone|iPod|Mac)/g.test(navigator.userAgent); // since 2017, iOS has had a bug that causes event.clientX/Y to be inaccurate when a scroll occurs, thus we must alternate ignoring every other touchmove event to work around it. See https://bugs.webkit.org/show_bug.cgi?id=181954 and https://codepen.io/GreenSock/pen/ExbrPNa/087cef197dc35445a0951e8935c41503\\n\\t\\t\\t\\t_ignoreMobileResize = _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.isTouch === 1;\\n\\t\\t\\t\\t_addListener(_win, \\\"wheel\\\", _onScroll); // mostly for 3rd party smooth scrolling libraries.\\n\\t\\t\\t\\t_root = [_win, _doc, _docEl, _body];\\n\\t\\t\\t\\tif (gsap.matchMedia) {\\n\\t\\t\\t\\t\\tScrollTrigger.matchMedia = vars => {\\n\\t\\t\\t\\t\\t\\tlet mm = gsap.matchMedia(),\\n\\t\\t\\t\\t\\t\\t\\tp;\\n\\t\\t\\t\\t\\t\\tfor (p in vars) {\\n\\t\\t\\t\\t\\t\\t\\tmm.add(p, vars[p]);\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t\\treturn mm;\\n\\t\\t\\t\\t\\t};\\n\\t\\t\\t\\t\\tgsap.addEventListener(\\\"matchMediaInit\\\", () => _revertAll());\\n\\t\\t\\t\\t\\tgsap.addEventListener(\\\"matchMediaRevert\\\", () => _revertRecorded());\\n\\t\\t\\t\\t\\tgsap.addEventListener(\\\"matchMedia\\\", () => {\\n\\t\\t\\t\\t\\t\\t_refreshAll(0, 1);\\n\\t\\t\\t\\t\\t\\t_dispatch(\\\"matchMedia\\\");\\n\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t\\tgsap.matchMedia().add(\\\"(orientation: portrait)\\\", () => { // when orientation changes, we should take new base measurements for the ignoreMobileResize feature.\\n\\t\\t\\t\\t\\t\\t_setBaseDimensions();\\n\\t\\t\\t\\t\\t\\treturn _setBaseDimensions;\\n\\t\\t\\t\\t\\t});\\n\\t\\t\\t\\t} else {\\n\\t\\t\\t\\t\\tconsole.warn(\\\"Requires GSAP 3.11.0 or later\\\");\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t_setBaseDimensions();\\n\\t\\t\\t\\t_addListener(_doc, \\\"scroll\\\", _onScroll); // some browsers (like Chrome), the window stops dispatching scroll events on the window if you scroll really fast, but it's consistent on the document!\\n\\t\\t\\t\\tlet bodyHasStyle = _body.hasAttribute(\\\"style\\\"),\\n\\t\\t\\t\\t\\tbodyStyle = _body.style,\\n\\t\\t\\t\\t\\tborder = bodyStyle.borderTopStyle,\\n\\t\\t\\t\\t\\tAnimationProto = gsap.core.Animation.prototype,\\n\\t\\t\\t\\t\\tbounds, i;\\n\\t\\t\\t\\tAnimationProto.revert || Object.defineProperty(AnimationProto, \\\"revert\\\", { value: function() { return this.time(-0.01, true); }}); // only for backwards compatibility (Animation.revert() was added after 3.10.4)\\n\\t\\t\\t\\tbodyStyle.borderTopStyle = \\\"solid\\\"; // works around an issue where a margin of a child element could throw off the bounds of the _body, making it seem like there's a margin when there actually isn't. The border ensures that the bounds are accurate.\\n\\t\\t\\t\\tbounds = _getBounds(_body);\\n\\t\\t\\t\\t_Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical.m = Math.round(bounds.top + _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical.sc()) || 0; // accommodate the offset of the <body> caused by margins and/or padding\\n\\t\\t\\t\\t_Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal.m = Math.round(bounds.left + _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal.sc()) || 0;\\n\\t\\t\\t\\tborder ? (bodyStyle.borderTopStyle = border) : bodyStyle.removeProperty(\\\"border-top-style\\\");\\n\\t\\t\\t\\tif (!bodyHasStyle) { // SSR frameworks like Next.js complain if this attribute gets added.\\n\\t\\t\\t\\t\\t_body.setAttribute(\\\"style\\\", \\\"\\\"); // it's not enough to just removeAttribute() - we must first set it to empty, otherwise Next.js complains.\\n\\t\\t\\t\\t\\t_body.removeAttribute(\\\"style\\\");\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\t// TODO: (?) maybe move to leveraging the velocity mechanism in Observer and skip intervals.\\n\\t\\t\\t\\t_syncInterval = setInterval(_sync, 250);\\n\\t\\t\\t\\tgsap.delayedCall(0.5, () => _startup = 0);\\n\\t\\t\\t\\t_addListener(_doc, \\\"touchcancel\\\", _passThrough); // some older Android devices intermittently stop dispatching \\\"touchmove\\\" events if we don't listen for \\\"touchcancel\\\" on the document.\\n\\t\\t\\t\\t_addListener(_body, \\\"touchstart\\\", _passThrough); //works around Safari bug: https://gsap.com/forums/topic/21450-draggable-in-iframe-on-mobile-is-buggy/\\n\\t\\t\\t\\t_multiListener(_addListener, _doc, \\\"pointerdown,touchstart,mousedown\\\", _pointerDownHandler);\\n\\t\\t\\t\\t_multiListener(_addListener, _doc, \\\"pointerup,touchend,mouseup\\\", _pointerUpHandler);\\n\\t\\t\\t\\t_transformProp = gsap.utils.checkPrefix(\\\"transform\\\");\\n\\t\\t\\t\\t_stateProps.push(_transformProp);\\n\\t\\t\\t\\t_coreInitted = _getTime();\\n\\t\\t\\t\\t_resizeDelay = gsap.delayedCall(0.2, _refreshAll).pause();\\n\\t\\t\\t\\t_autoRefresh = [_doc, \\\"visibilitychange\\\", () => {\\n\\t\\t\\t\\t\\tlet w = _win.innerWidth,\\n\\t\\t\\t\\t\\t\\th = _win.innerHeight;\\n\\t\\t\\t\\t\\tif (_doc.hidden) {\\n\\t\\t\\t\\t\\t\\t_prevWidth = w;\\n\\t\\t\\t\\t\\t\\t_prevHeight = h;\\n\\t\\t\\t\\t\\t} else if (_prevWidth !== w || _prevHeight !== h) {\\n\\t\\t\\t\\t\\t\\t_onResize();\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t}, _doc, \\\"DOMContentLoaded\\\", _refreshAll, _win, \\\"load\\\", _refreshAll, _win, \\\"resize\\\", _onResize];\\n\\t\\t\\t\\t_iterateAutoRefresh(_addListener);\\n\\t\\t\\t\\t_triggers.forEach(trigger => trigger.enable(0, 1));\\n\\t\\t\\t\\tfor (i = 0; i < _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.length; i+=3) {\\n\\t\\t\\t\\t\\t_wheelListener(_removeListener, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i], _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i+1]);\\n\\t\\t\\t\\t\\t_wheelListener(_removeListener, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i], _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i+2]);\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\tstatic config(vars) {\\n\\t\\t(\\\"limitCallbacks\\\" in vars) && (_limitCallbacks = !!vars.limitCallbacks);\\n\\t\\tlet ms = vars.syncInterval;\\n\\t\\tms && clearInterval(_syncInterval) || ((_syncInterval = ms) && setInterval(_sync, ms));\\n\\t\\t(\\\"ignoreMobileResize\\\" in vars) && (_ignoreMobileResize = ScrollTrigger.isTouch === 1 && vars.ignoreMobileResize);\\n\\t\\tif (\\\"autoRefreshEvents\\\" in vars) {\\n\\t\\t\\t_iterateAutoRefresh(_removeListener) || _iterateAutoRefresh(_addListener, vars.autoRefreshEvents || \\\"none\\\");\\n\\t\\t\\t_ignoreResize = (vars.autoRefreshEvents + \\\"\\\").indexOf(\\\"resize\\\") === -1;\\n\\t\\t}\\n\\t}\\n\\n\\tstatic scrollerProxy(target, vars) {\\n\\t\\tlet t = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(target),\\n\\t\\t\\ti = _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.indexOf(t),\\n\\t\\t\\tisViewport = _isViewport(t);\\n\\t\\tif (~i) {\\n\\t\\t\\t_Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.splice(i, isViewport ? 6 : 2);\\n\\t\\t}\\n\\t\\tif (vars) {\\n\\t\\t\\tisViewport ? _Observer_js__WEBPACK_IMPORTED_MODULE_0__._proxies.unshift(_win, vars, _body, vars, _docEl, vars) : _Observer_js__WEBPACK_IMPORTED_MODULE_0__._proxies.unshift(t, vars);\\n\\t\\t}\\n\\t}\\n\\n\\tstatic clearMatchMedia(query) {\\n\\t\\t_triggers.forEach(t => t._ctx && t._ctx.query === query && t._ctx.kill(true, true));\\n\\t}\\n\\n\\tstatic isInViewport(element, ratio, horizontal) {\\n\\t\\tlet bounds = (_isString(element) ? (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(element) : element).getBoundingClientRect(),\\n\\t\\t\\toffset = bounds[horizontal ? _width : _height] * ratio || 0;\\n\\t\\treturn horizontal ? bounds.right - offset > 0 && bounds.left + offset < _win.innerWidth : bounds.bottom - offset > 0 && bounds.top + offset < _win.innerHeight;\\n\\t}\\n\\n\\tstatic positionInViewport(element, referencePoint, horizontal) {\\n\\t\\t_isString(element) && (element = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(element));\\n\\t\\tlet bounds = element.getBoundingClientRect(),\\n\\t\\t\\tsize = bounds[horizontal ? _width : _height],\\n\\t\\t\\toffset = referencePoint == null ? size / 2 : ((referencePoint in _keywords) ? _keywords[referencePoint] * size : ~referencePoint.indexOf(\\\"%\\\") ? parseFloat(referencePoint) * size / 100 : parseFloat(referencePoint) || 0);\\n\\t\\treturn horizontal ? (bounds.left + offset) / _win.innerWidth : (bounds.top + offset) / _win.innerHeight;\\n\\t}\\n\\n\\tstatic killAll(allowListeners) {\\n\\t\\t_triggers.slice(0).forEach(t => t.vars.id !== \\\"ScrollSmoother\\\" && t.kill());\\n\\t\\tif (allowListeners !== true) {\\n\\t\\t\\tlet listeners = _listeners.killAll || [];\\n\\t\\t\\t_listeners = {};\\n\\t\\t\\tlisteners.forEach(f => f());\\n\\t\\t}\\n\\t}\\n\\n}\\n\\nScrollTrigger.version = \\\"3.12.7\\\";\\nScrollTrigger.saveStyles = targets => targets ? _toArray(targets).forEach(target => { // saved styles are recorded in a consecutive alternating Array, like [element, cssText, transform attribute, cache, matchMedia, ...]\\n\\tif (target && target.style) {\\n\\t\\tlet i = _savedStyles.indexOf(target);\\n\\t\\ti >= 0 && _savedStyles.splice(i, 5);\\n\\t\\t_savedStyles.push(target, target.style.cssText, target.getBBox && target.getAttribute(\\\"transform\\\"), gsap.core.getCache(target), _context());\\n\\t}\\n}) : _savedStyles;\\nScrollTrigger.revert = (soft, media) => _revertAll(!soft, media);\\nScrollTrigger.create = (vars, animation) => new ScrollTrigger(vars, animation);\\nScrollTrigger.refresh = safe => safe ? _onResize(true) : (_coreInitted || ScrollTrigger.register()) && _refreshAll(true);\\nScrollTrigger.update = force => ++_Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache && _updateAll(force === true ? 2 : 0);\\nScrollTrigger.clearScrollMemory = _clearScrollMemory;\\nScrollTrigger.maxScroll = (element, horizontal) => _maxScroll(element, horizontal ? _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal : _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical);\\nScrollTrigger.getScrollFunc = (element, horizontal) => (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getScrollFunc)((0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(element), horizontal ? _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal : _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical);\\nScrollTrigger.getById = id => _ids[id];\\nScrollTrigger.getAll = () => _triggers.filter(t => t.vars.id !== \\\"ScrollSmoother\\\"); // it's common for people to ScrollTrigger.getAll(t => t.kill()) on page routes, for example, and we don't want it to ruin smooth scrolling by killing the main ScrollSmoother one.\\nScrollTrigger.isScrolling = () => !!_lastScrollTime;\\nScrollTrigger.snapDirectional = _snapDirectional;\\nScrollTrigger.addEventListener = (type, callback) => {\\n\\tlet a = _listeners[type] || (_listeners[type] = []);\\n\\t~a.indexOf(callback) || a.push(callback);\\n};\\nScrollTrigger.removeEventListener = (type, callback) => {\\n\\tlet a = _listeners[type],\\n\\t\\ti = a && a.indexOf(callback);\\n\\ti >= 0 && a.splice(i, 1);\\n};\\nScrollTrigger.batch = (targets, vars) => {\\n\\tlet result = [],\\n\\t\\tvarsCopy = {},\\n\\t\\tinterval = vars.interval || 0.016,\\n\\t\\tbatchMax = vars.batchMax || 1e9,\\n\\t\\tproxyCallback = (type, callback) => {\\n\\t\\t\\tlet elements = [],\\n\\t\\t\\t\\ttriggers = [],\\n\\t\\t\\t\\tdelay = gsap.delayedCall(interval, () => {callback(elements, triggers); elements = []; triggers = [];}).pause();\\n\\t\\t\\treturn self => {\\n\\t\\t\\t\\telements.length || delay.restart(true);\\n\\t\\t\\t\\telements.push(self.trigger);\\n\\t\\t\\t\\ttriggers.push(self);\\n\\t\\t\\t\\tbatchMax <= elements.length && delay.progress(1);\\n\\t\\t\\t};\\n\\t\\t},\\n\\t\\tp;\\n\\tfor (p in vars) {\\n\\t\\tvarsCopy[p] = (p.substr(0, 2) === \\\"on\\\" && _isFunction(vars[p]) && p !== \\\"onRefreshInit\\\") ? proxyCallback(p, vars[p]) : vars[p];\\n\\t}\\n\\tif (_isFunction(batchMax)) {\\n\\t\\tbatchMax = batchMax();\\n\\t\\t_addListener(ScrollTrigger, \\\"refresh\\\", () => batchMax = vars.batchMax());\\n\\t}\\n\\t_toArray(targets).forEach(target => {\\n\\t\\tlet config = {};\\n\\t\\tfor (p in varsCopy) {\\n\\t\\t\\tconfig[p] = varsCopy[p];\\n\\t\\t}\\n\\t\\tconfig.trigger = target;\\n\\t\\tresult.push(ScrollTrigger.create(config));\\n\\t});\\n\\treturn result;\\n}\\n\\n\\n// to reduce file size. clamps the scroll and also returns a duration multiplier so that if the scroll gets chopped shorter, the duration gets curtailed as well (otherwise if you're very close to the top of the page, for example, and swipe up really fast, it'll suddenly slow down and take a long time to reach the top).\\nlet _clampScrollAndGetDurationMultiplier = (scrollFunc, current, end, max) => {\\n\\t\\tcurrent > max ? scrollFunc(max) : current < 0 && scrollFunc(0);\\n\\t\\treturn end > max ? (max - current) / (end - current) : end < 0 ? current / (current - end) : 1;\\n\\t},\\n\\t_allowNativePanning = (target, direction) => {\\n\\t\\tif (direction === true) {\\n\\t\\t\\ttarget.style.removeProperty(\\\"touch-action\\\");\\n\\t\\t} else {\\n\\t\\t\\ttarget.style.touchAction = direction === true ? \\\"auto\\\" : direction ? \\\"pan-\\\" + direction + (_Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.isTouch ? \\\" pinch-zoom\\\" : \\\"\\\") : \\\"none\\\"; // note: Firefox doesn't support it pinch-zoom properly, at least in addition to a pan-x or pan-y.\\n\\t\\t}\\n\\t\\ttarget === _docEl && _allowNativePanning(_body, direction);\\n\\t},\\n\\t_overflow = {auto: 1, scroll: 1},\\n\\t_nestedScroll = ({event, target, axis}) => {\\n\\t\\tlet node = (event.changedTouches ? event.changedTouches[0] : event).target,\\n\\t\\t\\tcache = node._gsap || gsap.core.getCache(node),\\n\\t\\t\\ttime = _getTime(), cs;\\n\\t\\tif (!cache._isScrollT || time - cache._isScrollT > 2000) { // cache for 2 seconds to improve performance.\\n\\t\\t\\twhile (node && node !== _body && ((node.scrollHeight <= node.clientHeight && node.scrollWidth <= node.clientWidth) || !(_overflow[(cs = _getComputedStyle(node)).overflowY] || _overflow[cs.overflowX]))) node = node.parentNode;\\n\\t\\t\\tcache._isScroll = node && node !== target && !_isViewport(node) && (_overflow[(cs = _getComputedStyle(node)).overflowY] || _overflow[cs.overflowX]);\\n\\t\\t\\tcache._isScrollT = time;\\n\\t\\t}\\n\\t\\tif (cache._isScroll || axis === \\\"x\\\") {\\n\\t\\t\\tevent.stopPropagation();\\n\\t\\t\\tevent._gsapAllow = true;\\n\\t\\t}\\n\\t},\\n\\t// capture events on scrollable elements INSIDE the <body> and allow those by calling stopPropagation() when we find a scrollable ancestor\\n\\t_inputObserver = (target, type, inputs, nested) => _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.create({\\n\\t\\ttarget: target,\\n\\t\\tcapture: true,\\n\\t\\tdebounce: false,\\n\\t\\tlockAxis: true,\\n\\t\\ttype: type,\\n\\t\\tonWheel: (nested = nested && _nestedScroll),\\n\\t\\tonPress: nested,\\n\\t\\tonDrag: nested,\\n\\t\\tonScroll: nested,\\n\\t\\tonEnable: () => inputs && _addListener(_doc, _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.eventTypes[0], _captureInputs, false, true),\\n\\t\\tonDisable: () => _removeListener(_doc, _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.eventTypes[0], _captureInputs, true)\\n\\t}),\\n\\t_inputExp = /(input|label|select|textarea)/i,\\n\\t_inputIsFocused,\\n\\t_captureInputs = e => {\\n\\t\\tlet isInput = _inputExp.test(e.target.tagName);\\n\\t\\tif (isInput || _inputIsFocused) {\\n\\t\\t\\te._gsapAllow = true;\\n\\t\\t\\t_inputIsFocused = isInput;\\n\\t\\t}\\n\\t},\\n\\t_getScrollNormalizer = vars => {\\n\\t\\t_isObject(vars) || (vars = {});\\n\\t\\tvars.preventDefault = vars.isNormalizer = vars.allowClicks = true;\\n\\t\\tvars.type || (vars.type = \\\"wheel,touch\\\");\\n\\t\\tvars.debounce = !!vars.debounce;\\n\\t\\tvars.id = vars.id || \\\"normalizer\\\";\\n\\t\\tlet {normalizeScrollX, momentum, allowNestedScroll, onRelease} = vars,\\n\\t\\t\\tself, maxY,\\n\\t\\t\\ttarget = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(vars.target) || _docEl,\\n\\t\\t\\tsmoother = gsap.core.globals().ScrollSmoother,\\n\\t\\t\\tsmootherInstance = smoother && smoother.get(),\\n\\t\\t\\tcontent = _fixIOSBug && ((vars.content && (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(vars.content)) || (smootherInstance && vars.content !== false && !smootherInstance.smooth() && smootherInstance.content())),\\n\\t\\t\\tscrollFuncY = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getScrollFunc)(target, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical),\\n\\t\\t\\tscrollFuncX = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getScrollFunc)(target, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal),\\n\\t\\t\\tscale = 1,\\n\\t\\t\\tinitialScale = (_Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.isTouch && _win.visualViewport ? _win.visualViewport.scale * _win.visualViewport.width : _win.outerWidth) / _win.innerWidth,\\n\\t\\t\\twheelRefresh = 0,\\n\\t\\t\\tresolveMomentumDuration = _isFunction(momentum) ? () => momentum(self) : () => momentum || 2.8,\\n\\t\\t\\tlastRefreshID, skipTouchMove,\\n\\t\\t\\tinputObserver = _inputObserver(target, vars.type, true, allowNestedScroll),\\n\\t\\t\\tresumeTouchMove = () => skipTouchMove = false,\\n\\t\\t\\tscrollClampX = _passThrough,\\n\\t\\t\\tscrollClampY = _passThrough,\\n\\t\\t\\tupdateClamps = () => {\\n\\t\\t\\t\\tmaxY = _maxScroll(target, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical);\\n\\t\\t\\t\\tscrollClampY = _clamp(_fixIOSBug ? 1 : 0, maxY);\\n\\t\\t\\t\\tnormalizeScrollX && (scrollClampX = _clamp(0, _maxScroll(target, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal)));\\n\\t\\t\\t\\tlastRefreshID = _refreshID;\\n\\t\\t\\t},\\n\\t\\t\\tremoveContentOffset = () => {\\n\\t\\t\\t\\tcontent._gsap.y = _round(parseFloat(content._gsap.y) + scrollFuncY.offset) + \\\"px\\\";\\n\\t\\t\\t\\tcontent.style.transform = \\\"matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, \\\" + parseFloat(content._gsap.y) + \\\", 0, 1)\\\";\\n\\t\\t\\t\\tscrollFuncY.offset = scrollFuncY.cacheID = 0;\\n\\t\\t\\t},\\n\\t\\t\\tignoreDrag = () => {\\n\\t\\t\\t\\tif (skipTouchMove) {\\n\\t\\t\\t\\t\\trequestAnimationFrame(resumeTouchMove);\\n\\t\\t\\t\\t\\tlet offset = _round(self.deltaY / 2),\\n\\t\\t\\t\\t\\t\\tscroll = scrollClampY(scrollFuncY.v - offset);\\n\\t\\t\\t\\t\\tif (content && scroll !== scrollFuncY.v + scrollFuncY.offset) {\\n\\t\\t\\t\\t\\t\\tscrollFuncY.offset = scroll - scrollFuncY.v;\\n\\t\\t\\t\\t\\t\\tlet y = _round((parseFloat(content && content._gsap.y) || 0) - scrollFuncY.offset);\\n\\t\\t\\t\\t\\t\\tcontent.style.transform = \\\"matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, \\\" + y + \\\", 0, 1)\\\";\\n\\t\\t\\t\\t\\t\\tcontent._gsap.y = y + \\\"px\\\";\\n\\t\\t\\t\\t\\t\\tscrollFuncY.cacheID = _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache;\\n\\t\\t\\t\\t\\t\\t_updateAll();\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\treturn true;\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tscrollFuncY.offset && removeContentOffset();\\n\\t\\t\\t\\tskipTouchMove = true;\\n\\t\\t\\t},\\n\\t\\t\\ttween, startScrollX, startScrollY, onStopDelayedCall,\\n\\t\\t\\tonResize = () => { // if the window resizes, like on an iPhone which Apple FORCES the address bar to show/hide even if we event.preventDefault(), it may be scrolling too far now that the address bar is showing, so we must dynamically adjust the momentum tween.\\n\\t\\t\\t\\tupdateClamps();\\n\\t\\t\\t\\tif (tween.isActive() && tween.vars.scrollY > maxY) {\\n\\t\\t\\t\\t\\tscrollFuncY() > maxY ? tween.progress(1) && scrollFuncY(maxY) : tween.resetTo(\\\"scrollY\\\", maxY);\\n\\t\\t\\t\\t}\\n\\t\\t\\t};\\n\\t\\tcontent && gsap.set(content, {y: \\\"+=0\\\"}); // to ensure there's a cache (element._gsap)\\n\\t\\tvars.ignoreCheck = e => (_fixIOSBug && e.type === \\\"touchmove\\\" && ignoreDrag(e)) || (scale > 1.05 && e.type !== \\\"touchstart\\\") || self.isGesturing || (e.touches && e.touches.length > 1);\\n\\t\\tvars.onPress = () => {\\n\\t\\t\\tskipTouchMove = false;\\n\\t\\t\\tlet prevScale = scale;\\n\\t\\t\\tscale = _round(((_win.visualViewport && _win.visualViewport.scale) || 1) / initialScale);\\n\\t\\t\\ttween.pause();\\n\\t\\t\\tprevScale !== scale && _allowNativePanning(target, scale > 1.01 ? true : normalizeScrollX ? false : \\\"x\\\");\\n\\t\\t\\tstartScrollX = scrollFuncX();\\n\\t\\t\\tstartScrollY = scrollFuncY();\\n\\t\\t\\tupdateClamps();\\n\\t\\t\\tlastRefreshID = _refreshID;\\n\\t\\t}\\n\\t\\tvars.onRelease = vars.onGestureStart = (self, wasDragging) => {\\n\\t\\t\\tscrollFuncY.offset && removeContentOffset();\\n\\t\\t\\tif (!wasDragging) {\\n\\t\\t\\t\\tonStopDelayedCall.restart(true);\\n\\t\\t\\t} else {\\n\\t\\t\\t\\t_Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache++; // make sure we're pulling the non-cached value\\n\\t\\t\\t\\t// alternate algorithm: durX = Math.min(6, Math.abs(self.velocityX / 800)),\\tdur = Math.max(durX, Math.min(6, Math.abs(self.velocityY / 800))); dur = dur * (0.4 + (1 - _power4In(dur / 6)) * 0.6)) * (momentumSpeed || 1)\\n\\t\\t\\t\\tlet dur = resolveMomentumDuration(),\\n\\t\\t\\t\\t\\tcurrentScroll, endScroll;\\n\\t\\t\\t\\tif (normalizeScrollX) {\\n\\t\\t\\t\\t\\tcurrentScroll = scrollFuncX();\\n\\t\\t\\t\\t\\tendScroll = currentScroll + (dur * 0.05 * -self.velocityX) / 0.227; // the constant .227 is from power4(0.05). velocity is inverted because scrolling goes in the opposite direction.\\n\\t\\t\\t\\t\\tdur *= _clampScrollAndGetDurationMultiplier(scrollFuncX, currentScroll, endScroll, _maxScroll(target, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal));\\n\\t\\t\\t\\t\\ttween.vars.scrollX = scrollClampX(endScroll);\\n\\t\\t\\t\\t}\\n\\t\\t\\t\\tcurrentScroll = scrollFuncY();\\n\\t\\t\\t\\tendScroll = currentScroll + (dur * 0.05 * -self.velocityY) / 0.227; // the constant .227 is from power4(0.05)\\n\\t\\t\\t\\tdur *= _clampScrollAndGetDurationMultiplier(scrollFuncY, currentScroll, endScroll, _maxScroll(target, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical));\\n\\t\\t\\t\\ttween.vars.scrollY = scrollClampY(endScroll);\\n\\t\\t\\t\\ttween.invalidate().duration(dur).play(0.01);\\n\\t\\t\\t\\tif (_fixIOSBug && tween.vars.scrollY >= maxY || currentScroll >= maxY-1) { // iOS bug: it'll show the address bar but NOT fire the window \\\"resize\\\" event until the animation is done but we must protect against overshoot so we leverage an onUpdate to do so.\\n\\t\\t\\t\\t\\tgsap.to({}, {onUpdate: onResize, duration: dur});\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tonRelease && onRelease(self);\\n\\t\\t};\\n\\t\\tvars.onWheel = () => {\\n\\t\\t\\ttween._ts && tween.pause();\\n\\t\\t\\tif (_getTime() - wheelRefresh > 1000) { // after 1 second, refresh the clamps otherwise that'll only happen when ScrollTrigger.refresh() is called or for touch-scrolling.\\n\\t\\t\\t\\tlastRefreshID = 0;\\n\\t\\t\\t\\twheelRefresh = _getTime();\\n\\t\\t\\t}\\n\\t\\t};\\n\\t\\tvars.onChange = (self, dx, dy, xArray, yArray) => {\\n\\t\\t\\t_refreshID !== lastRefreshID && updateClamps();\\n\\t\\t\\tdx && normalizeScrollX && scrollFuncX(scrollClampX(xArray[2] === dx ? startScrollX + (self.startX - self.x) : scrollFuncX() + dx - xArray[1])); // for more precision, we track pointer/touch movement from the start, otherwise it'll drift.\\n\\t\\t\\tif (dy) {\\n\\t\\t\\t\\tscrollFuncY.offset && removeContentOffset();\\n\\t\\t\\t\\tlet isTouch = yArray[2] === dy,\\n\\t\\t\\t\\t\\ty = isTouch ? startScrollY + self.startY - self.y : scrollFuncY() + dy - yArray[1],\\n\\t\\t\\t\\t\\tyClamped = scrollClampY(y);\\n\\t\\t\\t\\tisTouch && y !== yClamped && (startScrollY += yClamped - y);\\n\\t\\t\\t\\tscrollFuncY(yClamped);\\n\\t\\t\\t}\\n\\t\\t\\t(dy || dx) && _updateAll();\\n\\t\\t};\\n\\t\\tvars.onEnable = () => {\\n\\t\\t\\t_allowNativePanning(target, normalizeScrollX ? false : \\\"x\\\");\\n\\t\\t\\tScrollTrigger.addEventListener(\\\"refresh\\\", onResize);\\n\\t\\t\\t_addListener(_win, \\\"resize\\\", onResize);\\n\\t\\t\\tif (scrollFuncY.smooth) {\\n\\t\\t\\t\\tscrollFuncY.target.style.scrollBehavior = \\\"auto\\\";\\n\\t\\t\\t\\tscrollFuncY.smooth = scrollFuncX.smooth = false;\\n\\t\\t\\t}\\n\\t\\t\\tinputObserver.enable();\\n\\t\\t};\\n\\t\\tvars.onDisable = () => {\\n\\t\\t\\t_allowNativePanning(target, true);\\n\\t\\t\\t_removeListener(_win, \\\"resize\\\", onResize);\\n\\t\\t\\tScrollTrigger.removeEventListener(\\\"refresh\\\", onResize);\\n\\t\\t\\tinputObserver.kill();\\n\\t\\t};\\n\\t\\tvars.lockAxis = vars.lockAxis !== false;\\n\\t\\tself = new _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer(vars);\\n\\t\\tself.iOS = _fixIOSBug; // used in the Observer getCachedScroll() function to work around an iOS bug that wreaks havoc with TouchEvent.clientY if we allow scroll to go all the way back to 0.\\n\\t\\t_fixIOSBug && !scrollFuncY() && scrollFuncY(1); // iOS bug causes event.clientY values to freak out (wildly inaccurate) if the scroll position is exactly 0.\\n\\t\\t_fixIOSBug && gsap.ticker.add(_passThrough); // prevent the ticker from sleeping\\n\\t\\tonStopDelayedCall = self._dc;\\n\\t\\ttween = gsap.to(self, {ease: \\\"power4\\\", paused: true, inherit: false, scrollX: normalizeScrollX ? \\\"+=0.1\\\" : \\\"+=0\\\", scrollY: \\\"+=0.1\\\", modifiers: {scrollY: _interruptionTracker(scrollFuncY, scrollFuncY(), () => tween.pause())\\t}, onUpdate: _updateAll, onComplete: onStopDelayedCall.vars.onComplete}); // we need the modifier to sense if the scroll position is altered outside of the momentum tween (like with a scrollTo tween) so we can pause() it to prevent conflicts.\\n\\t\\treturn self;\\n\\t};\\n\\nScrollTrigger.sort = func => {\\n\\tif (_isFunction(func)) {\\n\\t\\treturn _triggers.sort(func);\\n\\t}\\n\\tlet scroll = _win.pageYOffset || 0;\\n\\tScrollTrigger.getAll().forEach(t => t._sortY = t.trigger ? scroll + t.trigger.getBoundingClientRect().top : t.start + _win.innerHeight);\\n\\treturn _triggers.sort(func || ((a, b) => (a.vars.refreshPriority || 0) * -1e6 + (a.vars.containerAnimation ? 1e6 : a._sortY) - ((b.vars.containerAnimation ? 1e6 : b._sortY) + (b.vars.refreshPriority || 0) * -1e6))); // anything with a containerAnimation should refresh last.\\n}\\nScrollTrigger.observe = vars => new _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer(vars);\\nScrollTrigger.normalizeScroll = vars => {\\n\\tif (typeof(vars) === \\\"undefined\\\") {\\n\\t\\treturn _normalizer;\\n\\t}\\n\\tif (vars === true && _normalizer) {\\n\\t\\treturn _normalizer.enable();\\n\\t}\\n\\tif (vars === false) {\\n\\t\\t_normalizer && _normalizer.kill();\\n\\t\\t_normalizer = vars;\\n\\t\\treturn;\\n\\t}\\n\\tlet normalizer = vars instanceof _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer ? vars : _getScrollNormalizer(vars);\\n\\t_normalizer && _normalizer.target === normalizer.target && _normalizer.kill();\\n\\t_isViewport(normalizer.target) && (_normalizer = normalizer);\\n\\treturn normalizer;\\n};\\n\\n\\nScrollTrigger.core = { // smaller file size way to leverage in ScrollSmoother and Observer\\n\\t_getVelocityProp: _Observer_js__WEBPACK_IMPORTED_MODULE_0__._getVelocityProp,\\n\\t_inputObserver,\\n\\t_scrollers: _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers,\\n\\t_proxies: _Observer_js__WEBPACK_IMPORTED_MODULE_0__._proxies,\\n\\tbridge: {\\n\\t\\t// when normalizeScroll sets the scroll position (ss = setScroll)\\n\\t\\tss: () => {\\n\\t\\t\\t_lastScrollTime || _dispatch(\\\"scrollStart\\\");\\n\\t\\t\\t_lastScrollTime = _getTime();\\n\\t\\t},\\n\\t\\t// a way to get the _refreshing value in Observer\\n\\t\\tref: () => _refreshing\\n\\t}\\n};\\n\\n_getGSAP() && gsap.registerPlugin(ScrollTrigger);\\n\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZ3NhcC9zcmMvU2Nyb2xsVHJpZ2dlci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFb0o7O0FBRXBKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsMkRBQWEscUVBQXFFLHFDQUFxQyw2QkFBNkIscUJBQXFCO0FBQ3RNLHdDQUF3QyxTQUFTLFVBQVUsMkRBQWE7QUFDeEUsNERBQTRELDBEQUFnQjtBQUM1RSx5QkFBeUIsWUFBWSw2Q0FBNkMsMkRBQWE7QUFDL0Y7QUFDQSxrQkFBa0IseUJBQXlCO0FBQzNDO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQSxrSUFBa0ksNEdBQTRHO0FBQzlPO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRix1QkFBdUIsR0FBRztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7QUFDeEIsZ0JBQWdCLGNBQWM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFD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QUFDQTtBQUNBO0FBQ0E7QUFDQSxtSkFBbUo7QUFDbko7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxrREFBUTtBQUNyQix5QkFBeUI7QUFDekIsa0RBQWtEO0FBQ2xELCtDQUErQztBQUMvQztBQUNBLHlCQUF5Qix5SEFBeUgsZ0ZBQWdGLHNFQUFzRSxHQUFHO0FBQzNTO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseU5BQXlOO0FBQ3pOO0FBQ0Esb0NBQW9DLGtEQUFRO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxrREFBUTtBQUMxQztBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsdUJBQXVCO0FBQ3ZCLGlCQUFpQjtBQUNqQjtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL2dzYXAvc3JjL1Njcm9sbFRyaWdnZXIuanM/ODRlMSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIFNjcm9sbFRyaWdnZXIgMy4xMi43XG4gKiBodHRwczovL2dzYXAuY29tXG4gKlxuICogQGxpY2Vuc2UgQ29weXJpZ2h0IDIwMDgtMjAyNSwgR3JlZW5Tb2NrLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogU3ViamVjdCB0byB0aGUgdGVybXMgYXQgaHR0cHM6Ly9nc2FwLmNvbS9zdGFuZGFyZC1saWNlbnNlIG9yIGZvclxuICogQ2x1YiBHU0FQIG1lbWJlcnMsIHRoZSBhZ3JlZW1lbnQgaXNzdWVkIHdpdGggdGhhdCBtZW1iZXJzaGlwLlxuICogQGF1dGhvcjogSmFjayBEb3lsZSwgamFja0BncmVlbnNvY2suY29tXG4qL1xuLyogZXNsaW50LWRpc2FibGUgKi9cblxuaW1wb3J0IHsgT2JzZXJ2ZXIsIF9nZXRUYXJnZXQsIF92ZXJ0aWNhbCwgX2hvcml6b250YWwsIF9zY3JvbGxlcnMsIF9wcm94aWVzLCBfZ2V0U2Nyb2xsRnVuYywgX2dldFByb3h5UHJvcCwgX2dldFZlbG9jaXR5UHJvcCB9IGZyb20gXCIuL09ic2VydmVyLmpzXCI7XG5cbmxldCBnc2FwLCBfY29yZUluaXR0ZWQsIF93aW4sIF9kb2MsIF9kb2NFbCwgX2JvZHksIF9yb290LCBfcmVzaXplRGVsYXksIF90b0FycmF5LCBfY2xhbXAsIF90aW1lMiwgX3N5bmNJbnRlcnZhbCwgX3JlZnJlc2hpbmcsIF9wb2ludGVySXNEb3duLCBfdHJhbnNmb3JtUHJvcCwgX2ksIF9wcmV2V2lkdGgsIF9wcmV2SGVpZ2h0LCBfYXV0b1JlZnJlc2gsIF9zb3J0LCBfc3VwcHJlc3NPdmVyd3JpdGVzLCBfaWdub3JlUmVzaXplLCBfbm9ybWFsaXplciwgX2lnbm9yZU1vYmlsZVJlc2l6ZSwgX2Jhc2VTY3JlZW5IZWlnaHQsIF9iYXNlU2NyZWVuV2lkdGgsIF9maXhJT1NCdWcsIF9jb250ZXh0LCBfc2Nyb2xsUmVzdG9yYXRpb24sIF9kaXYxMDB2aCwgXzEwMHZoLCBfaXNSZXZlcnRlZCwgX2NsYW1waW5nTWF4LFxuXHRfbGltaXRDYWxsYmFja3MsIC8vIGlmIHRydWUsIHdlJ2xsIG9ubHkgdHJpZ2dlciBjYWxsYmFja3MgaWYgdGhlIGFjdGl2ZSBzdGF0ZSB0b2dnbGVzLCBzbyBpZiB5b3Ugc2Nyb2xsIGltbWVkaWF0ZWx5IHBhc3QgYm90aCB0aGUgc3RhcnQgYW5kIGVuZCBwb3NpdGlvbnMgb2YgYSBTY3JvbGxUcmlnZ2VyICh0aHVzIGluYWN0aXZlIHRvIGluYWN0aXZlKSwgbmVpdGhlciBpdHMgb25FbnRlciBub3Igb25MZWF2ZSB3aWxsIGJlIGNhbGxlZC4gVGhpcyBpcyB1c2VmdWwgZHVyaW5nIHN0YXJ0dXAuXG5cdF9zdGFydHVwID0gMSxcblx0X2dldFRpbWUgPSBEYXRlLm5vdyxcblx0X3RpbWUxID0gX2dldFRpbWUoKSxcblx0X2xhc3RTY3JvbGxUaW1lID0gMCxcblx0X2VuYWJsZWQgPSAwLFxuXHRfcGFyc2VDbGFtcCA9ICh2YWx1ZSwgdHlwZSwgc2VsZikgPT4ge1xuXHRcdGxldCBjbGFtcCA9IChfaXNTdHJpbmcodmFsdWUpICYmICh2YWx1ZS5zdWJzdHIoMCwgNikgPT09IFwiY2xhbXAoXCIgfHwgdmFsdWUuaW5kZXhPZihcIm1heFwiKSA+IC0xKSk7XG5cdFx0c2VsZltcIl9cIiArIHR5cGUgKyBcIkNsYW1wXCJdID0gY2xhbXA7XG5cdFx0cmV0dXJuIGNsYW1wID8gdmFsdWUuc3Vic3RyKDYsIHZhbHVlLmxlbmd0aCAtIDcpIDogdmFsdWU7XG5cdH0sXG5cdF9rZWVwQ2xhbXAgPSAodmFsdWUsIGNsYW1wKSA9PiBjbGFtcCAmJiAoIV9pc1N0cmluZyh2YWx1ZSkgfHwgdmFsdWUuc3Vic3RyKDAsIDYpICE9PSBcImNsYW1wKFwiKSA/IFwiY2xhbXAoXCIgKyB2YWx1ZSArIFwiKVwiIDogdmFsdWUsXG5cdF9yYWZCdWdGaXggPSAoKSA9PiBfZW5hYmxlZCAmJiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3JhZkJ1Z0ZpeCksIC8vIGluIHNvbWUgYnJvd3NlcnMgKGxpa2UgRmlyZWZveCksIHNjcmVlbiByZXBhaW50cyB3ZXJlbid0IGNvbnNpc3RlbnQgdW5sZXNzIHdlIGhhZCBTT01FVEhJTkcgcXVldWVkIHVwIGluIHJlcXVlc3RBbmltYXRpb25GcmFtZSgpISBTbyB0aGlzIGp1c3QgY3JlYXRlcyBhIHN1cGVyIHNpbXBsZSBsb29wIHRvIGtlZXAgaXQgYWxpdmUgYW5kIHNtb290aCBvdXQgcmVwYWludHMuXG5cdF9wb2ludGVyRG93bkhhbmRsZXIgPSAoKSA9PiBfcG9pbnRlcklzRG93biA9IDEsXG5cdF9wb2ludGVyVXBIYW5kbGVyID0gKCkgPT4gX3BvaW50ZXJJc0Rvd24gPSAwLFxuXHRfcGFzc1Rocm91Z2ggPSB2ID0+IHYsXG5cdF9yb3VuZCA9IHZhbHVlID0+IE1hdGgucm91bmQodmFsdWUgKiAxMDAwMDApIC8gMTAwMDAwIHx8IDAsXG5cdF93aW5kb3dFeGlzdHMgPSAoKSA9PiB0eXBlb2Yod2luZG93KSAhPT0gXCJ1bmRlZmluZWRcIixcblx0X2dldEdTQVAgPSAoKSA9PiBnc2FwIHx8IChfd2luZG93RXhpc3RzKCkgJiYgKGdzYXAgPSB3aW5kb3cuZ3NhcCkgJiYgZ3NhcC5yZWdpc3RlclBsdWdpbiAmJiBnc2FwKSxcblx0X2lzVmlld3BvcnQgPSBlID0+ICEhfl9yb290LmluZGV4T2YoZSksXG5cdF9nZXRWaWV3cG9ydERpbWVuc2lvbiA9IGRpbWVuc2lvblByb3BlcnR5ID0+IChkaW1lbnNpb25Qcm9wZXJ0eSA9PT0gXCJIZWlnaHRcIiA/IF8xMDB2aCA6IF93aW5bXCJpbm5lclwiICsgZGltZW5zaW9uUHJvcGVydHldKSB8fCBfZG9jRWxbXCJjbGllbnRcIiArIGRpbWVuc2lvblByb3BlcnR5XSB8fCBfYm9keVtcImNsaWVudFwiICsgZGltZW5zaW9uUHJvcGVydHldLFxuXHRfZ2V0Qm91bmRzRnVuYyA9IGVsZW1lbnQgPT4gX2dldFByb3h5UHJvcChlbGVtZW50LCBcImdldEJvdW5kaW5nQ2xpZW50UmVjdFwiKSB8fCAoX2lzVmlld3BvcnQoZWxlbWVudCkgPyAoKSA9PiB7X3dpbk9mZnNldHMud2lkdGggPSBfd2luLmlubmVyV2lkdGg7IF93aW5PZmZzZXRzLmhlaWdodCA9IF8xMDB2aDsgcmV0dXJuIF93aW5PZmZzZXRzO30gOiAoKSA9PiBfZ2V0Qm91bmRzKGVsZW1lbnQpKSxcblx0X2dldFNpemVGdW5jID0gKHNjcm9sbGVyLCBpc1ZpZXdwb3J0LCB7ZCwgZDIsIGF9KSA9PiAoYSA9IF9nZXRQcm94eVByb3Aoc2Nyb2xsZXIsIFwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0XCIpKSA/ICgpID0+IGEoKVtkXSA6ICgpID0+IChpc1ZpZXdwb3J0ID8gX2dldFZpZXdwb3J0RGltZW5zaW9uKGQyKSA6IHNjcm9sbGVyW1wiY2xpZW50XCIgKyBkMl0pIHx8IDAsXG5cdF9nZXRPZmZzZXRzRnVuYyA9IChlbGVtZW50LCBpc1ZpZXdwb3J0KSA9PiAhaXNWaWV3cG9ydCB8fCB+X3Byb3hpZXMuaW5kZXhPZihlbGVtZW50KSA/IF9nZXRCb3VuZHNGdW5jKGVsZW1lbnQpIDogKCkgPT4gX3dpbk9mZnNldHMsXG5cdF9tYXhTY3JvbGwgPSAoZWxlbWVudCwge3MsIGQyLCBkLCBhfSkgPT4gTWF0aC5tYXgoMCwgKHMgPSBcInNjcm9sbFwiICsgZDIpICYmIChhID0gX2dldFByb3h5UHJvcChlbGVtZW50LCBzKSkgPyBhKCkgLSBfZ2V0Qm91bmRzRnVuYyhlbGVtZW50KSgpW2RdIDogX2lzVmlld3BvcnQoZWxlbWVudCkgPyAoX2RvY0VsW3NdIHx8IF9ib2R5W3NdKSAtIF9nZXRWaWV3cG9ydERpbWVuc2lvbihkMikgOiBlbGVtZW50W3NdIC0gZWxlbWVudFtcIm9mZnNldFwiICsgZDJdKSxcblx0X2l0ZXJhdGVBdXRvUmVmcmVzaCA9IChmdW5jLCBldmVudHMpID0+IHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IF9hdXRvUmVmcmVzaC5sZW5ndGg7IGkgKz0gMykge1xuXHRcdFx0KCFldmVudHMgfHwgfmV2ZW50cy5pbmRleE9mKF9hdXRvUmVmcmVzaFtpKzFdKSkgJiYgZnVuYyhfYXV0b1JlZnJlc2hbaV0sIF9hdXRvUmVmcmVzaFtpKzFdLCBfYXV0b1JlZnJlc2hbaSsyXSk7XG5cdFx0fVxuXHR9LFxuXHRfaXNTdHJpbmcgPSB2YWx1ZSA9PiB0eXBlb2YodmFsdWUpID09PSBcInN0cmluZ1wiLFxuXHRfaXNGdW5jdGlvbiA9IHZhbHVlID0+IHR5cGVvZih2YWx1ZSkgPT09IFwiZnVuY3Rpb25cIixcblx0X2lzTnVtYmVyID0gdmFsdWUgPT4gdHlwZW9mKHZhbHVlKSA9PT0gXCJudW1iZXJcIixcblx0X2lzT2JqZWN0ID0gdmFsdWUgPT4gdHlwZW9mKHZhbHVlKSA9PT0gXCJvYmplY3RcIixcblx0X2VuZEFuaW1hdGlvbiA9IChhbmltYXRpb24sIHJldmVyc2VkLCBwYXVzZSkgPT4gYW5pbWF0aW9uICYmIGFuaW1hdGlvbi5wcm9ncmVzcyhyZXZlcnNlZCA/IDAgOiAxKSAmJiBwYXVzZSAmJiBhbmltYXRpb24ucGF1c2UoKSxcblx0X2NhbGxiYWNrID0gKHNlbGYsIGZ1bmMpID0+IHtcblx0XHRpZiAoc2VsZi5lbmFibGVkKSB7XG5cdFx0XHRsZXQgcmVzdWx0ID0gc2VsZi5fY3R4ID8gc2VsZi5fY3R4LmFkZCgoKSA9PiBmdW5jKHNlbGYpKSA6IGZ1bmMoc2VsZik7XG5cdFx0XHRyZXN1bHQgJiYgcmVzdWx0LnRvdGFsVGltZSAmJiAoc2VsZi5jYWxsYmFja0FuaW1hdGlvbiA9IHJlc3VsdCk7XG5cdFx0fVxuXHR9LFxuXHRfYWJzID0gTWF0aC5hYnMsXG5cdF9sZWZ0ID0gXCJsZWZ0XCIsXG5cdF90b3AgPSBcInRvcFwiLFxuXHRfcmlnaHQgPSBcInJpZ2h0XCIsXG5cdF9ib3R0b20gPSBcImJvdHRvbVwiLFxuXHRfd2lkdGggPSBcIndpZHRoXCIsXG5cdF9oZWlnaHQgPSBcImhlaWdodFwiLFxuXHRfUmlnaHQgPSBcIlJpZ2h0XCIsXG5cdF9MZWZ0ID0gXCJMZWZ0XCIsXG5cdF9Ub3AgPSBcIlRvcFwiLFxuXHRfQm90dG9tID0gXCJCb3R0b21cIixcblx0X3BhZGRpbmcgPSBcInBhZGRpbmdcIixcblx0X21hcmdpbiA9IFwibWFyZ2luXCIsXG5cdF9XaWR0aCA9IFwiV2lkdGhcIixcblx0X0hlaWdodCA9IFwiSGVpZ2h0XCIsXG5cdF9weCA9IFwicHhcIixcblx0X2dldENvbXB1dGVkU3R5bGUgPSBlbGVtZW50ID0+IF93aW4uZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSxcblx0X21ha2VQb3NpdGlvbmFibGUgPSBlbGVtZW50ID0+IHsgLy8gaWYgdGhlIGVsZW1lbnQgYWxyZWFkeSBoYXMgcG9zaXRpb246IGFic29sdXRlIG9yIGZpeGVkLCBsZWF2ZSB0aGF0LCBvdGhlcndpc2UgbWFrZSBpdCBwb3NpdGlvbjogcmVsYXRpdmVcblx0XHRsZXQgcG9zaXRpb24gPSBfZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbjtcblx0XHRlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gKHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIikgPyBwb3NpdGlvbiA6IFwicmVsYXRpdmVcIjtcblx0fSxcblx0X3NldERlZmF1bHRzID0gKG9iaiwgZGVmYXVsdHMpID0+IHtcblx0XHRmb3IgKGxldCBwIGluIGRlZmF1bHRzKSB7XG5cdFx0XHQocCBpbiBvYmopIHx8IChvYmpbcF0gPSBkZWZhdWx0c1twXSk7XG5cdFx0fVxuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cdF9nZXRCb3VuZHMgPSAoZWxlbWVudCwgd2l0aG91dFRyYW5zZm9ybXMpID0+IHtcblx0XHRsZXQgdHdlZW4gPSB3aXRob3V0VHJhbnNmb3JtcyAmJiBfZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVtfdHJhbnNmb3JtUHJvcF0gIT09IFwibWF0cml4KDEsIDAsIDAsIDEsIDAsIDApXCIgJiYgZ3NhcC50byhlbGVtZW50LCB7eDogMCwgeTogMCwgeFBlcmNlbnQ6IDAsIHlQZXJjZW50OiAwLCByb3RhdGlvbjogMCwgcm90YXRpb25YOiAwLCByb3RhdGlvblk6IDAsIHNjYWxlOiAxLCBza2V3WDogMCwgc2tld1k6IDB9KS5wcm9ncmVzcygxKSxcblx0XHRcdGJvdW5kcyA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0dHdlZW4gJiYgdHdlZW4ucHJvZ3Jlc3MoMCkua2lsbCgpO1xuXHRcdHJldHVybiBib3VuZHM7XG5cdH0sXG5cdF9nZXRTaXplID0gKGVsZW1lbnQsIHtkMn0pID0+IGVsZW1lbnRbXCJvZmZzZXRcIiArIGQyXSB8fCBlbGVtZW50W1wiY2xpZW50XCIgKyBkMl0gfHwgMCxcblx0X2dldExhYmVsUmF0aW9BcnJheSA9IHRpbWVsaW5lID0+IHtcblx0XHRsZXQgYSA9IFtdLFxuXHRcdFx0bGFiZWxzID0gdGltZWxpbmUubGFiZWxzLFxuXHRcdFx0ZHVyYXRpb24gPSB0aW1lbGluZS5kdXJhdGlvbigpLFxuXHRcdFx0cDtcblx0XHRmb3IgKHAgaW4gbGFiZWxzKSB7XG5cdFx0XHRhLnB1c2gobGFiZWxzW3BdIC8gZHVyYXRpb24pO1xuXHRcdH1cblx0XHRyZXR1cm4gYTtcblx0fSxcblx0X2dldENsb3Nlc3RMYWJlbCA9IGFuaW1hdGlvbiA9PiB2YWx1ZSA9PiBnc2FwLnV0aWxzLnNuYXAoX2dldExhYmVsUmF0aW9BcnJheShhbmltYXRpb24pLCB2YWx1ZSksXG5cdF9zbmFwRGlyZWN0aW9uYWwgPSBzbmFwSW5jcmVtZW50T3JBcnJheSA9PiB7XG5cdFx0bGV0IHNuYXAgPSBnc2FwLnV0aWxzLnNuYXAoc25hcEluY3JlbWVudE9yQXJyYXkpLFxuXHRcdFx0YSA9IEFycmF5LmlzQXJyYXkoc25hcEluY3JlbWVudE9yQXJyYXkpICYmIHNuYXBJbmNyZW1lbnRPckFycmF5LnNsaWNlKDApLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcblx0XHRyZXR1cm4gYSA/ICh2YWx1ZSwgZGlyZWN0aW9uLCB0aHJlc2hvbGQ9IDFlLTMpID0+IHtcblx0XHRcdGxldCBpO1xuXHRcdFx0aWYgKCFkaXJlY3Rpb24pIHtcblx0XHRcdFx0cmV0dXJuIHNuYXAodmFsdWUpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGRpcmVjdGlvbiA+IDApIHtcblx0XHRcdFx0dmFsdWUgLT0gdGhyZXNob2xkOyAvLyB0byBhdm9pZCByb3VuZGluZyBlcnJvcnMuIElmIHdlJ3JlIHRvbyBzdHJpY3QsIGl0IG1pZ2h0IHNuYXAgZm9yd2FyZCwgdGhlbiBpbW1lZGlhdGVseSBhZ2FpbiwgYW5kIGFnYWluLlxuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdGlmIChhW2ldID49IHZhbHVlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYVtpXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGFbaS0xXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGkgPSBhLmxlbmd0aDtcblx0XHRcdFx0dmFsdWUgKz0gdGhyZXNob2xkO1xuXHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0aWYgKGFbaV0gPD0gdmFsdWUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBhW2ldO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFbMF07XG5cdFx0fSA6ICh2YWx1ZSwgZGlyZWN0aW9uLCB0aHJlc2hvbGQ9IDFlLTMpID0+IHtcblx0XHRcdGxldCBzbmFwcGVkID0gc25hcCh2YWx1ZSk7XG5cdFx0XHRyZXR1cm4gIWRpcmVjdGlvbiB8fCBNYXRoLmFicyhzbmFwcGVkIC0gdmFsdWUpIDwgdGhyZXNob2xkIHx8ICgoc25hcHBlZCAtIHZhbHVlIDwgMCkgPT09IGRpcmVjdGlvbiA8IDApID8gc25hcHBlZCA6IHNuYXAoZGlyZWN0aW9uIDwgMCA/IHZhbHVlIC0gc25hcEluY3JlbWVudE9yQXJyYXkgOiB2YWx1ZSArIHNuYXBJbmNyZW1lbnRPckFycmF5KTtcblx0XHR9O1xuXHR9LFxuXHRfZ2V0TGFiZWxBdERpcmVjdGlvbiA9IHRpbWVsaW5lID0+ICh2YWx1ZSwgc3QpID0+IF9zbmFwRGlyZWN0aW9uYWwoX2dldExhYmVsUmF0aW9BcnJheSh0aW1lbGluZSkpKHZhbHVlLCBzdC5kaXJlY3Rpb24pLFxuXHRfbXVsdGlMaXN0ZW5lciA9IChmdW5jLCBlbGVtZW50LCB0eXBlcywgY2FsbGJhY2spID0+IHR5cGVzLnNwbGl0KFwiLFwiKS5mb3JFYWNoKHR5cGUgPT4gZnVuYyhlbGVtZW50LCB0eXBlLCBjYWxsYmFjaykpLFxuXHRfYWRkTGlzdGVuZXIgPSAoZWxlbWVudCwgdHlwZSwgZnVuYywgbm9uUGFzc2l2ZSwgY2FwdHVyZSkgPT4gZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGZ1bmMsIHtwYXNzaXZlOiAhbm9uUGFzc2l2ZSwgY2FwdHVyZTogISFjYXB0dXJlfSksXG5cdF9yZW1vdmVMaXN0ZW5lciA9IChlbGVtZW50LCB0eXBlLCBmdW5jLCBjYXB0dXJlKSA9PiBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgZnVuYywgISFjYXB0dXJlKSxcblx0X3doZWVsTGlzdGVuZXIgPSAoZnVuYywgZWwsIHNjcm9sbEZ1bmMpID0+IHtcblx0XHRzY3JvbGxGdW5jID0gc2Nyb2xsRnVuYyAmJiBzY3JvbGxGdW5jLndoZWVsSGFuZGxlclxuXHRcdGlmIChzY3JvbGxGdW5jKSB7XG5cdFx0XHRmdW5jKGVsLCBcIndoZWVsXCIsIHNjcm9sbEZ1bmMpO1xuXHRcdFx0ZnVuYyhlbCwgXCJ0b3VjaG1vdmVcIiwgc2Nyb2xsRnVuYyk7XG5cdFx0fVxuXHR9LFxuXHRfbWFya2VyRGVmYXVsdHMgPSB7c3RhcnRDb2xvcjogXCJncmVlblwiLCBlbmRDb2xvcjogXCJyZWRcIiwgaW5kZW50OiAwLCBmb250U2l6ZTogXCIxNnB4XCIsIGZvbnRXZWlnaHQ6XCJub3JtYWxcIn0sXG5cdF9kZWZhdWx0cyA9IHt0b2dnbGVBY3Rpb25zOiBcInBsYXlcIiwgYW50aWNpcGF0ZVBpbjogMH0sXG5cdF9rZXl3b3JkcyA9IHt0b3A6IDAsIGxlZnQ6IDAsIGNlbnRlcjogMC41LCBib3R0b206IDEsIHJpZ2h0OiAxfSxcblx0X29mZnNldFRvUHggPSAodmFsdWUsIHNpemUpID0+IHtcblx0XHRpZiAoX2lzU3RyaW5nKHZhbHVlKSkge1xuXHRcdFx0bGV0IGVxSW5kZXggPSB2YWx1ZS5pbmRleE9mKFwiPVwiKSxcblx0XHRcdFx0cmVsYXRpdmUgPSB+ZXFJbmRleCA/ICsodmFsdWUuY2hhckF0KGVxSW5kZXgtMSkgKyAxKSAqIHBhcnNlRmxvYXQodmFsdWUuc3Vic3RyKGVxSW5kZXggKyAxKSkgOiAwO1xuXHRcdFx0aWYgKH5lcUluZGV4KSB7XG5cdFx0XHRcdCh2YWx1ZS5pbmRleE9mKFwiJVwiKSA+IGVxSW5kZXgpICYmIChyZWxhdGl2ZSAqPSBzaXplIC8gMTAwKTtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZS5zdWJzdHIoMCwgZXFJbmRleC0xKTtcblx0XHRcdH1cblx0XHRcdHZhbHVlID0gcmVsYXRpdmUgKyAoKHZhbHVlIGluIF9rZXl3b3JkcykgPyBfa2V5d29yZHNbdmFsdWVdICogc2l6ZSA6IH52YWx1ZS5pbmRleE9mKFwiJVwiKSA/IHBhcnNlRmxvYXQodmFsdWUpICogc2l6ZSAvIDEwMCA6IHBhcnNlRmxvYXQodmFsdWUpIHx8IDApO1xuXHRcdH1cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cdF9jcmVhdGVNYXJrZXIgPSAodHlwZSwgbmFtZSwgY29udGFpbmVyLCBkaXJlY3Rpb24sIHtzdGFydENvbG9yLCBlbmRDb2xvciwgZm9udFNpemUsIGluZGVudCwgZm9udFdlaWdodH0sIG9mZnNldCwgbWF0Y2hXaWR0aEVsLCBjb250YWluZXJBbmltYXRpb24pID0+IHtcblx0XHRsZXQgZSA9IF9kb2MuY3JlYXRlRWxlbWVudChcImRpdlwiKSxcblx0XHRcdHVzZUZpeGVkUG9zaXRpb24gPSBfaXNWaWV3cG9ydChjb250YWluZXIpIHx8IF9nZXRQcm94eVByb3AoY29udGFpbmVyLCBcInBpblR5cGVcIikgPT09IFwiZml4ZWRcIixcblx0XHRcdGlzU2Nyb2xsZXIgPSB0eXBlLmluZGV4T2YoXCJzY3JvbGxlclwiKSAhPT0gLTEsXG5cdFx0XHRwYXJlbnQgPSB1c2VGaXhlZFBvc2l0aW9uID8gX2JvZHkgOiBjb250YWluZXIsXG5cdFx0XHRpc1N0YXJ0ID0gdHlwZS5pbmRleE9mKFwic3RhcnRcIikgIT09IC0xLFxuXHRcdFx0Y29sb3IgPSBpc1N0YXJ0ID8gc3RhcnRDb2xvciA6IGVuZENvbG9yLFxuXHRcdFx0Y3NzID0gXCJib3JkZXItY29sb3I6XCIgKyBjb2xvciArIFwiO2ZvbnQtc2l6ZTpcIiArIGZvbnRTaXplICsgXCI7Y29sb3I6XCIgKyBjb2xvciArIFwiO2ZvbnQtd2VpZ2h0OlwiICsgZm9udFdlaWdodCArIFwiO3BvaW50ZXItZXZlbnRzOm5vbmU7d2hpdGUtc3BhY2U6bm93cmFwO2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWYsQXJpYWw7ei1pbmRleDoxMDAwO3BhZGRpbmc6NHB4IDhweDtib3JkZXItd2lkdGg6MDtib3JkZXItc3R5bGU6c29saWQ7XCI7XG5cdFx0Y3NzICs9IFwicG9zaXRpb246XCIgKyAoKGlzU2Nyb2xsZXIgfHwgY29udGFpbmVyQW5pbWF0aW9uKSAmJiB1c2VGaXhlZFBvc2l0aW9uID8gXCJmaXhlZDtcIiA6IFwiYWJzb2x1dGU7XCIpO1xuXHRcdChpc1Njcm9sbGVyIHx8IGNvbnRhaW5lckFuaW1hdGlvbiB8fCAhdXNlRml4ZWRQb3NpdGlvbikgJiYgKGNzcyArPSAoZGlyZWN0aW9uID09PSBfdmVydGljYWwgPyBfcmlnaHQgOiBfYm90dG9tKSArIFwiOlwiICsgKG9mZnNldCArIHBhcnNlRmxvYXQoaW5kZW50KSkgKyBcInB4O1wiKTtcblx0XHRtYXRjaFdpZHRoRWwgJiYgKGNzcyArPSBcImJveC1zaXppbmc6Ym9yZGVyLWJveDt0ZXh0LWFsaWduOmxlZnQ7d2lkdGg6XCIgKyBtYXRjaFdpZHRoRWwub2Zmc2V0V2lkdGggKyBcInB4O1wiKTtcblx0XHRlLl9pc1N0YXJ0ID0gaXNTdGFydDtcblx0XHRlLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwiZ3NhcC1tYXJrZXItXCIgKyB0eXBlICsgKG5hbWUgPyBcIiBtYXJrZXItXCIgKyBuYW1lIDogXCJcIikpO1xuXHRcdGUuc3R5bGUuY3NzVGV4dCA9IGNzcztcblx0XHRlLmlubmVyVGV4dCA9IG5hbWUgfHwgbmFtZSA9PT0gMCA/IHR5cGUgKyBcIi1cIiArIG5hbWUgOiB0eXBlO1xuXHRcdHBhcmVudC5jaGlsZHJlblswXSA/IHBhcmVudC5pbnNlcnRCZWZvcmUoZSwgcGFyZW50LmNoaWxkcmVuWzBdKSA6IHBhcmVudC5hcHBlbmRDaGlsZChlKTtcblx0XHRlLl9vZmZzZXQgPSBlW1wib2Zmc2V0XCIgKyBkaXJlY3Rpb24ub3AuZDJdO1xuXHRcdF9wb3NpdGlvbk1hcmtlcihlLCAwLCBkaXJlY3Rpb24sIGlzU3RhcnQpO1xuXHRcdHJldHVybiBlO1xuXHR9LFxuXHRfcG9zaXRpb25NYXJrZXIgPSAobWFya2VyLCBzdGFydCwgZGlyZWN0aW9uLCBmbGlwcGVkKSA9PiB7XG5cdFx0bGV0IHZhcnMgPSB7ZGlzcGxheTogXCJibG9ja1wifSxcblx0XHRcdHNpZGUgPSBkaXJlY3Rpb25bZmxpcHBlZCA/IFwib3MyXCIgOiBcInAyXCJdLFxuXHRcdFx0b3Bwb3NpdGVTaWRlID0gZGlyZWN0aW9uW2ZsaXBwZWQgPyBcInAyXCIgOiBcIm9zMlwiXTtcblx0XHRtYXJrZXIuX2lzRmxpcHBlZCA9IGZsaXBwZWQ7XG5cdFx0dmFyc1tkaXJlY3Rpb24uYSArIFwiUGVyY2VudFwiXSA9IGZsaXBwZWQgPyAtMTAwIDogMDtcblx0XHR2YXJzW2RpcmVjdGlvbi5hXSA9IGZsaXBwZWQgPyBcIjFweFwiIDogMDtcblx0XHR2YXJzW1wiYm9yZGVyXCIgKyBzaWRlICsgX1dpZHRoXSA9IDE7XG5cdFx0dmFyc1tcImJvcmRlclwiICsgb3Bwb3NpdGVTaWRlICsgX1dpZHRoXSA9IDA7XG5cdFx0dmFyc1tkaXJlY3Rpb24ucF0gPSBzdGFydCArIFwicHhcIjtcblx0XHRnc2FwLnNldChtYXJrZXIsIHZhcnMpO1xuXHR9LFxuXHRfdHJpZ2dlcnMgPSBbXSxcblx0X2lkcyA9IHt9LFxuXHRfcmFmSUQsXG5cdF9zeW5jID0gKCkgPT4gX2dldFRpbWUoKSAtIF9sYXN0U2Nyb2xsVGltZSA+IDM0ICYmIChfcmFmSUQgfHwgKF9yYWZJRCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShfdXBkYXRlQWxsKSkpLFxuXHRfb25TY3JvbGwgPSAoKSA9PiB7IC8vIHByZXZpb3VzbHksIHdlIHRyaWVkIHRvIG9wdGltaXplIHBlcmZvcm1hbmNlIGJ5IGJhdGNoaW5nL2RlZmVycmluZyB0byB0aGUgbmV4dCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSwgYnV0IGRpc2NvdmVyZWQgdGhhdCBTYWZhcmkgaGFzIGEgZmV3IGJ1Z3MgdGhhdCBtYWtlIHRoaXMgdW53b3JrYWJsZSAoZXNwZWNpYWxseSBvbiBpT1MpLiBTZWUgaHR0cHM6Ly9jb2RlcGVuLmlvL0dyZWVuU29jay9wZW4vMTZjNDM1YjEyZWYwOWMzODEyNTIwNDgxOGU3YjQ1ZmM/ZWRpdG9ycz0wMDEwIGFuZCBodHRwczovL2NvZGVwZW4uaW8vR3JlZW5Tb2NrL3Blbi9Kak94WXBRLzNkZDY1Y2NlYzVhNjBmMWQ4NjJjMzU1ZDg0ZDE0NTYyP2VkaXRvcnM9MDAxMCBhbmQgaHR0cHM6Ly9jb2RlcGVuLmlvL0dyZWVuU29jay9wZW4vRXhiclBOYS8wODdjZWYxOTdkYzM1NDQ1YTA5NTFlODkzNWM0MTUwMz9lZGl0b3JzPTAwMTBcblx0XHRpZiAoIV9ub3JtYWxpemVyIHx8ICFfbm9ybWFsaXplci5pc1ByZXNzZWQgfHwgX25vcm1hbGl6ZXIuc3RhcnRYID4gX2JvZHkuY2xpZW50V2lkdGgpIHsgLy8gaWYgdGhlIHVzZXIgaXMgZHJhZ2dpbmcgdGhlIHNjcm9sbGJhciwgYWxsb3cgaXQuXG5cdFx0XHRfc2Nyb2xsZXJzLmNhY2hlKys7XG5cdFx0XHRpZiAoX25vcm1hbGl6ZXIpIHtcblx0XHRcdFx0X3JhZklEIHx8IChfcmFmSUQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3VwZGF0ZUFsbCkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0X3VwZGF0ZUFsbCgpOyAvLyBTYWZhcmkgaW4gcGFydGljdWxhciAob24gZGVza3RvcCkgTkVFRFMgdGhlIGltbWVkaWF0ZSB1cGRhdGUgcmF0aGVyIHRoYW4gd2FpdGluZyBmb3IgYSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSB3aGVyZWFzIGlPUyBzZWVtcyB0byBiZW5lZml0IGZyb20gd2FpdGluZyBmb3IgdGhlIHJlcXVlc3RBbmltYXRpb25GcmFtZSgpIHRpY2ssIGF0IGxlYXN0IHdoZW4gbm9ybWFsaXppbmcuIFNlZSBodHRwczovL2NvZGVwZW4uaW8vR3JlZW5Tb2NrL3Blbi9xQllvenFPP2VkaXRvcnM9MDExMFxuXHRcdFx0fVxuXHRcdFx0X2xhc3RTY3JvbGxUaW1lIHx8IF9kaXNwYXRjaChcInNjcm9sbFN0YXJ0XCIpO1xuXHRcdFx0X2xhc3RTY3JvbGxUaW1lID0gX2dldFRpbWUoKTtcblx0XHR9XG5cdH0sXG5cdF9zZXRCYXNlRGltZW5zaW9ucyA9ICgpID0+IHtcblx0XHRfYmFzZVNjcmVlbldpZHRoID0gX3dpbi5pbm5lcldpZHRoO1xuXHRcdF9iYXNlU2NyZWVuSGVpZ2h0ID0gX3dpbi5pbm5lckhlaWdodDtcblx0fSxcblx0X29uUmVzaXplID0gKGZvcmNlKSA9PiB7XG5cdFx0X3Njcm9sbGVycy5jYWNoZSsrO1xuXHRcdChmb3JjZSA9PT0gdHJ1ZSB8fCAoIV9yZWZyZXNoaW5nICYmICFfaWdub3JlUmVzaXplICYmICFfZG9jLmZ1bGxzY3JlZW5FbGVtZW50ICYmICFfZG9jLndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50ICYmICghX2lnbm9yZU1vYmlsZVJlc2l6ZSB8fCBfYmFzZVNjcmVlbldpZHRoICE9PSBfd2luLmlubmVyV2lkdGggfHwgTWF0aC5hYnMoX3dpbi5pbm5lckhlaWdodCAtIF9iYXNlU2NyZWVuSGVpZ2h0KSA+IF93aW4uaW5uZXJIZWlnaHQgKiAwLjI1KSkpICYmIF9yZXNpemVEZWxheS5yZXN0YXJ0KHRydWUpO1xuXHR9LCAvLyBpZ25vcmUgcmVzaXplcyB0cmlnZ2VyZWQgYnkgcmVmcmVzaCgpXG5cdF9saXN0ZW5lcnMgPSB7fSxcblx0X2VtcHR5QXJyYXkgPSBbXSxcblx0X3NvZnRSZWZyZXNoID0gKCkgPT4gX3JlbW92ZUxpc3RlbmVyKFNjcm9sbFRyaWdnZXIsIFwic2Nyb2xsRW5kXCIsIF9zb2Z0UmVmcmVzaCkgfHwgX3JlZnJlc2hBbGwodHJ1ZSksXG5cdF9kaXNwYXRjaCA9IHR5cGUgPT4gKF9saXN0ZW5lcnNbdHlwZV0gJiYgX2xpc3RlbmVyc1t0eXBlXS5tYXAoZiA9PiBmKCkpKSB8fCBfZW1wdHlBcnJheSxcblx0X3NhdmVkU3R5bGVzID0gW10sIC8vIHdoZW4gU2Nyb2xsVHJpZ2dlci5zYXZlU3R5bGVzKCkgaXMgY2FsbGVkLCB0aGUgaW5saW5lIHN0eWxlcyBhcmUgcmVjb3JkZWQgaW4gdGhpcyBBcnJheSBpbiBhIHNlcXVlbnRpYWwgZm9ybWF0IGxpa2UgW2VsZW1lbnQsIGNzc1RleHQsIGdzQ2FjaGUsIG1lZGlhXS4gVGhpcyBrZWVwcyBpdCB2ZXJ5IG1lbW9yeS1lZmZpY2llbnQgYW5kIGZhc3QgdG8gaXRlcmF0ZSB0aHJvdWdoLlxuXHRfcmV2ZXJ0UmVjb3JkZWQgPSBtZWRpYSA9PiB7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBfc2F2ZWRTdHlsZXMubGVuZ3RoOyBpKz01KSB7XG5cdFx0XHRpZiAoIW1lZGlhIHx8IF9zYXZlZFN0eWxlc1tpKzRdICYmIF9zYXZlZFN0eWxlc1tpKzRdLnF1ZXJ5ID09PSBtZWRpYSkge1xuXHRcdFx0XHRfc2F2ZWRTdHlsZXNbaV0uc3R5bGUuY3NzVGV4dCA9IF9zYXZlZFN0eWxlc1tpKzFdO1xuXHRcdFx0XHRfc2F2ZWRTdHlsZXNbaV0uZ2V0QkJveCAmJiBfc2F2ZWRTdHlsZXNbaV0uc2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIsIF9zYXZlZFN0eWxlc1tpKzJdIHx8IFwiXCIpO1xuXHRcdFx0XHRfc2F2ZWRTdHlsZXNbaSszXS51bmNhY2hlID0gMTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdF9yZXZlcnRBbGwgPSAoa2lsbCwgbWVkaWEpID0+IHtcblx0XHRsZXQgdHJpZ2dlcjtcblx0XHRmb3IgKF9pID0gMDsgX2kgPCBfdHJpZ2dlcnMubGVuZ3RoOyBfaSsrKSB7XG5cdFx0XHR0cmlnZ2VyID0gX3RyaWdnZXJzW19pXTtcblx0XHRcdGlmICh0cmlnZ2VyICYmICghbWVkaWEgfHwgdHJpZ2dlci5fY3R4ID09PSBtZWRpYSkpIHtcblx0XHRcdFx0aWYgKGtpbGwpIHtcblx0XHRcdFx0XHR0cmlnZ2VyLmtpbGwoMSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dHJpZ2dlci5yZXZlcnQodHJ1ZSwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0X2lzUmV2ZXJ0ZWQgPSB0cnVlO1xuXHRcdG1lZGlhICYmIF9yZXZlcnRSZWNvcmRlZChtZWRpYSk7XG5cdFx0bWVkaWEgfHwgX2Rpc3BhdGNoKFwicmV2ZXJ0XCIpO1xuXHR9LFxuXHRfY2xlYXJTY3JvbGxNZW1vcnkgPSAoc2Nyb2xsUmVzdG9yYXRpb24sIGZvcmNlKSA9PiB7IC8vIHplcm8tb3V0IGFsbCB0aGUgcmVjb3JkZWQgc2Nyb2xsIHBvc2l0aW9ucy4gRG9uJ3QgdXNlIF90cmlnZ2VycyBiZWNhdXNlIGlmLCBmb3IgZXhhbXBsZSwgLm1hdGNoTWVkaWEoKSBpcyB1c2VkIHRvIGNyZWF0ZSBzb21lIFNjcm9sbFRyaWdnZXJzIGFuZCB0aGVuIHRoZSB1c2VyIHJlc2l6ZXMgYW5kIGl0IHJlbW92ZXMgQUxMIFNjcm9sbFRyaWdnZXJzLCBhbmQgdGhlbiBnbyBiYWNrIHRvIGEgc2l6ZSB3aGVyZSB0aGVyZSBhcmUgU2Nyb2xsVHJpZ2dlcnMsIGl0IHdvdWxkIGhhdmUga2VwdCB0aGUgcG9zaXRpb24ocykgc2F2ZWQgZnJvbSB0aGUgaW5pdGlhbCBzdGF0ZS5cblx0XHRfc2Nyb2xsZXJzLmNhY2hlKys7XG5cdFx0KGZvcmNlIHx8ICFfcmVmcmVzaGluZ0FsbCkgJiYgX3Njcm9sbGVycy5mb3JFYWNoKG9iaiA9PiBfaXNGdW5jdGlvbihvYmopICYmIG9iai5jYWNoZUlEKysgJiYgKG9iai5yZWMgPSAwKSk7XG5cdFx0X2lzU3RyaW5nKHNjcm9sbFJlc3RvcmF0aW9uKSAmJiAoX3dpbi5oaXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uID0gX3Njcm9sbFJlc3RvcmF0aW9uID0gc2Nyb2xsUmVzdG9yYXRpb24pO1xuXHR9LFxuXHRfcmVmcmVzaGluZ0FsbCxcblx0X3JlZnJlc2hJRCA9IDAsXG5cdF9xdWV1ZVJlZnJlc2hJRCxcblx0X3F1ZXVlUmVmcmVzaEFsbCA9ICgpID0+IHsgLy8gd2UgZG9uJ3Qgd2FudCB0byBjYWxsIF9yZWZyZXNoQWxsKCkgZXZlcnkgdGltZSB3ZSBjcmVhdGUgYSBuZXcgU2Nyb2xsVHJpZ2dlciAoZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMpIC0gaXQncyBiZXR0ZXIgdG8gYmF0Y2ggdGhlbS4gU29tZSBmcmFtZXdvcmtzIGR5bmFtaWNhbGx5IGxvYWQgY29udGVudCBhbmQgd2UgY2FuJ3QgcmVseSBvbiB0aGUgd2luZG93J3MgXCJsb2FkXCIgb3IgXCJET01Db250ZW50TG9hZGVkXCIgZXZlbnRzIHRvIHRyaWdnZXIgaXQuXG5cdFx0aWYgKF9xdWV1ZVJlZnJlc2hJRCAhPT0gX3JlZnJlc2hJRCkge1xuXHRcdFx0bGV0IGlkID0gX3F1ZXVlUmVmcmVzaElEID0gX3JlZnJlc2hJRDtcblx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBpZCA9PT0gX3JlZnJlc2hJRCAmJiBfcmVmcmVzaEFsbCh0cnVlKSk7XG5cdFx0fVxuXHR9LFxuXHRfcmVmcmVzaDEwMHZoID0gKCkgPT4ge1xuXHRcdF9ib2R5LmFwcGVuZENoaWxkKF9kaXYxMDB2aCk7XG5cdFx0XzEwMHZoID0gKCFfbm9ybWFsaXplciAmJiBfZGl2MTAwdmgub2Zmc2V0SGVpZ2h0KSB8fCBfd2luLmlubmVySGVpZ2h0O1xuXHRcdF9ib2R5LnJlbW92ZUNoaWxkKF9kaXYxMDB2aCk7XG5cdH0sXG5cdF9oaWRlQWxsTWFya2VycyA9IGhpZGUgPT4gX3RvQXJyYXkoXCIuZ3NhcC1tYXJrZXItc3RhcnQsIC5nc2FwLW1hcmtlci1lbmQsIC5nc2FwLW1hcmtlci1zY3JvbGxlci1zdGFydCwgLmdzYXAtbWFya2VyLXNjcm9sbGVyLWVuZFwiKS5mb3JFYWNoKGVsID0+IGVsLnN0eWxlLmRpc3BsYXkgPSBoaWRlID8gXCJub25lXCIgOiBcImJsb2NrXCIpLFxuXHRfcmVmcmVzaEFsbCA9IChmb3JjZSwgc2tpcFJldmVydCkgPT4ge1xuXHRcdF9kb2NFbCA9IF9kb2MuZG9jdW1lbnRFbGVtZW50OyAvLyBzb21lIGZyYW1ld29ya3MgbGlrZSBBc3RybyBtYXkgY2FjaGUgdGhlIDxib2R5PiBhbmQgcmVwbGFjZSBpdCBkdXJpbmcgcm91dGluZywgc28gd2UnbGwganVzdCByZS1yZWNvcmQgdGhlIF9kb2NFbCBhbmQgX2JvZHkgZm9yIHNhZmV0eSAob3RoZXJ3aXNlLCB0aGUgbWFya2VycyBtYXkgbm90IGdldCBhZGRlZCBwcm9wZXJseSkuXG5cdFx0X2JvZHkgPSBfZG9jLmJvZHk7XG5cdFx0X3Jvb3QgPSBbX3dpbiwgX2RvYywgX2RvY0VsLCBfYm9keV07XG5cdFx0aWYgKF9sYXN0U2Nyb2xsVGltZSAmJiAhZm9yY2UgJiYgIV9pc1JldmVydGVkKSB7XG5cdFx0XHRfYWRkTGlzdGVuZXIoU2Nyb2xsVHJpZ2dlciwgXCJzY3JvbGxFbmRcIiwgX3NvZnRSZWZyZXNoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0X3JlZnJlc2gxMDB2aCgpO1xuXHRcdF9yZWZyZXNoaW5nQWxsID0gU2Nyb2xsVHJpZ2dlci5pc1JlZnJlc2hpbmcgPSB0cnVlO1xuXHRcdF9zY3JvbGxlcnMuZm9yRWFjaChvYmogPT4gX2lzRnVuY3Rpb24ob2JqKSAmJiArK29iai5jYWNoZUlEICYmIChvYmoucmVjID0gb2JqKCkpKTsgLy8gZm9yY2UgdGhlIGNsZWFyaW5nIG9mIHRoZSBjYWNoZSBiZWNhdXNlIHNvbWUgYnJvd3NlcnMgdGFrZSBhIGxpdHRsZSB3aGlsZSB0byBkaXNwYXRjaCB0aGUgXCJzY3JvbGxcIiBldmVudCBhbmQgdGhlIHVzZXIgbWF5IGhhdmUgY2hhbmdlZCB0aGUgc2Nyb2xsIHBvc2l0aW9uIGFuZCB0aGVuIGNhbGxlZCBTY3JvbGxUcmlnZ2VyLnJlZnJlc2goKSByaWdodCBhd2F5XG5cdFx0bGV0IHJlZnJlc2hJbml0cyA9IF9kaXNwYXRjaChcInJlZnJlc2hJbml0XCIpO1xuXHRcdF9zb3J0ICYmIFNjcm9sbFRyaWdnZXIuc29ydCgpO1xuXHRcdHNraXBSZXZlcnQgfHwgX3JldmVydEFsbCgpO1xuXHRcdF9zY3JvbGxlcnMuZm9yRWFjaChvYmogPT4ge1xuXHRcdFx0aWYgKF9pc0Z1bmN0aW9uKG9iaikpIHtcblx0XHRcdFx0b2JqLnNtb290aCAmJiAob2JqLnRhcmdldC5zdHlsZS5zY3JvbGxCZWhhdmlvciA9IFwiYXV0b1wiKTsgLy8gc21vb3RoIHNjcm9sbGluZyBpbnRlcmZlcmVzXG5cdFx0XHRcdG9iaigwKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRfdHJpZ2dlcnMuc2xpY2UoMCkuZm9yRWFjaCh0ID0+IHQucmVmcmVzaCgpKSAvLyBkb24ndCBsb29wIHdpdGggX2kgYmVjYXVzZSBkdXJpbmcgYSByZWZyZXNoKCkgc29tZW9uZSBjb3VsZCBjYWxsIFNjcm9sbFRyaWdnZXIudXBkYXRlKCkgd2hpY2ggd291bGQgaXRlcmF0ZSB0aHJvdWdoIF9pIHJlc3VsdGluZyBpbiBhIHNraXAuXG5cdFx0X2lzUmV2ZXJ0ZWQgPSBmYWxzZTtcblx0XHRfdHJpZ2dlcnMuZm9yRWFjaCgodCkgPT4geyAvLyBuZXN0ZWQgcGlucyAocGlubmVkQ29udGFpbmVyKSB3aXRoIHBpblNwYWNpbmcgbWF5IGV4cGFuZCB0aGUgY29udGFpbmVyLCBzbyB3ZSBtdXN0IGFjY29tbW9kYXRlIHRoYXQgaGVyZS5cblx0XHRcdGlmICh0Ll9zdWJQaW5PZmZzZXQgJiYgdC5waW4pIHtcblx0XHRcdFx0bGV0IHByb3AgPSB0LnZhcnMuaG9yaXpvbnRhbCA/IFwib2Zmc2V0V2lkdGhcIiA6IFwib2Zmc2V0SGVpZ2h0XCIsXG5cdFx0XHRcdFx0b3JpZ2luYWwgPSB0LnBpbltwcm9wXTtcblx0XHRcdFx0dC5yZXZlcnQodHJ1ZSwgMSk7XG5cdFx0XHRcdHQuYWRqdXN0UGluU3BhY2luZyh0LnBpbltwcm9wXSAtIG9yaWdpbmFsKTtcblx0XHRcdFx0dC5yZWZyZXNoKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0X2NsYW1waW5nTWF4ID0gMTsgLy8gcGluU3BhY2luZyBtaWdodCBiZSBwcm9wcGluZyBhIHBhZ2Ugb3BlbiwgdGh1cyB3aGVuIHdlIC5zZXRQb3NpdGlvbnMoKSB0byBjbGFtcCBhIFNjcm9sbFRyaWdnZXIncyBlbmQgd2Ugc2hvdWxkIGxlYXZlIHRoZSBwaW5TcGFjaW5nIGFsb25lLiBUaGF0J3Mgd2hhdCB0aGlzIGZsYWcgaXMgZm9yLlxuXHRcdF9oaWRlQWxsTWFya2Vycyh0cnVlKTtcblx0XHRfdHJpZ2dlcnMuZm9yRWFjaCh0ID0+IHsgLy8gdGhlIHNjcm9sbGVyJ3MgbWF4IHNjcm9sbCBwb3NpdGlvbiBtYXkgY2hhbmdlIGFmdGVyIGFsbCB0aGUgU2Nyb2xsVHJpZ2dlcnMgcmVmcmVzaGVkIChsaWtlIHBpbm5pbmcgY291bGQgcHVzaCBpdCBkb3duKSwgc28gd2UgbmVlZCB0byBsb29wIGJhY2sgYW5kIGNvcnJlY3QgYW55IHdpdGggZW5kOiBcIm1heFwiLiBTYW1lIGZvciBhbnl0aGluZyB3aXRoIGEgY2xhbXBlZCBlbmRcblx0XHRcdGxldCBtYXggPSBfbWF4U2Nyb2xsKHQuc2Nyb2xsZXIsIHQuX2RpciksXG5cdFx0XHRcdGVuZENsYW1wID0gdC52YXJzLmVuZCA9PT0gXCJtYXhcIiB8fCAodC5fZW5kQ2xhbXAgJiYgdC5lbmQgPiBtYXgpLFxuXHRcdFx0XHRzdGFydENsYW1wID0gdC5fc3RhcnRDbGFtcCAmJiB0LnN0YXJ0ID49IG1heDtcblx0XHRcdChlbmRDbGFtcCB8fCBzdGFydENsYW1wKSAmJiB0LnNldFBvc2l0aW9ucyhzdGFydENsYW1wID8gbWF4IC0gMSA6IHQuc3RhcnQsIGVuZENsYW1wID8gTWF0aC5tYXgoc3RhcnRDbGFtcCA/IG1heCA6IHQuc3RhcnQgKyAxLCBtYXgpIDogdC5lbmQsIHRydWUpO1xuXHRcdH0pO1xuXHRcdF9oaWRlQWxsTWFya2VycyhmYWxzZSk7XG5cdFx0X2NsYW1waW5nTWF4ID0gMDtcblx0XHRyZWZyZXNoSW5pdHMuZm9yRWFjaChyZXN1bHQgPT4gcmVzdWx0ICYmIHJlc3VsdC5yZW5kZXIgJiYgcmVzdWx0LnJlbmRlcigtMSkpOyAvLyBpZiB0aGUgb25SZWZyZXNoSW5pdCgpIHJldHVybnMgYW4gYW5pbWF0aW9uICh0eXBpY2FsbHkgYSBnc2FwLnNldCgpKSwgcmV2ZXJ0IGl0LiBUaGlzIG1ha2VzIGl0IGVhc3kgdG8gcHV0IHRoaW5ncyBpbiBhIGNlcnRhaW4gc3BvdCBiZWZvcmUgcmVmcmVzaGluZyBmb3IgbWVhc3VyZW1lbnQgcHVycG9zZXMsIGFuZCB0aGVuIHB1dCB0aGluZ3MgYmFjay5cblx0XHRfc2Nyb2xsZXJzLmZvckVhY2gob2JqID0+IHtcblx0XHRcdGlmIChfaXNGdW5jdGlvbihvYmopKSB7XG5cdFx0XHRcdG9iai5zbW9vdGggJiYgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IG9iai50YXJnZXQuc3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSBcInNtb290aFwiKTtcblx0XHRcdFx0b2JqLnJlYyAmJiBvYmoob2JqLnJlYyk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0X2NsZWFyU2Nyb2xsTWVtb3J5KF9zY3JvbGxSZXN0b3JhdGlvbiwgMSk7XG5cdFx0X3Jlc2l6ZURlbGF5LnBhdXNlKCk7XG5cdFx0X3JlZnJlc2hJRCsrO1xuXHRcdF9yZWZyZXNoaW5nQWxsID0gMjtcblx0XHRfdXBkYXRlQWxsKDIpO1xuXHRcdF90cmlnZ2Vycy5mb3JFYWNoKHQgPT4gX2lzRnVuY3Rpb24odC52YXJzLm9uUmVmcmVzaCkgJiYgdC52YXJzLm9uUmVmcmVzaCh0KSk7XG5cdFx0X3JlZnJlc2hpbmdBbGwgPSBTY3JvbGxUcmlnZ2VyLmlzUmVmcmVzaGluZyA9IGZhbHNlO1xuXHRcdF9kaXNwYXRjaChcInJlZnJlc2hcIik7XG5cdH0sXG5cdF9sYXN0U2Nyb2xsID0gMCxcblx0X2RpcmVjdGlvbiA9IDEsXG5cdF9wcmltYXJ5LFxuXHRfdXBkYXRlQWxsID0gKGZvcmNlKSA9PiB7XG5cdFx0aWYgKGZvcmNlID09PSAyIHx8ICghX3JlZnJlc2hpbmdBbGwgJiYgIV9pc1JldmVydGVkKSkgeyAvLyBfaXNSZXZlcnRlZCBjb3VsZCBiZSB0cnVlIGlmLCBmb3IgZXhhbXBsZSwgYSBtYXRjaE1lZGlhKCkgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgZXhlY3V0aW5nLiBXZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBkdXJpbmcgdGhlIHRpbWUgZXZlcnl0aGluZyBpcyByZXZlcnRlZC5cblx0XHRcdFNjcm9sbFRyaWdnZXIuaXNVcGRhdGluZyA9IHRydWU7XG5cdFx0XHRfcHJpbWFyeSAmJiBfcHJpbWFyeS51cGRhdGUoMCk7IC8vIFNjcm9sbFNtb290aGVyIHVzZXMgcmVmcmVzaFByaW9yaXR5IC05OTk5IHRvIGJlY29tZSB0aGUgcHJpbWFyeSB0aGF0IGdldHMgdXBkYXRlZCBiZWZvcmUgYWxsIG90aGVycyBiZWNhdXNlIGl0IGFmZmVjdHMgdGhlIHNjcm9sbCBwb3NpdGlvbi5cblx0XHRcdGxldCBsID0gX3RyaWdnZXJzLmxlbmd0aCxcblx0XHRcdFx0dGltZSA9IF9nZXRUaW1lKCksXG5cdFx0XHRcdHJlY29yZFZlbG9jaXR5ID0gdGltZSAtIF90aW1lMSA+PSA1MCxcblx0XHRcdFx0c2Nyb2xsID0gbCAmJiBfdHJpZ2dlcnNbMF0uc2Nyb2xsKCk7XG5cdFx0XHRfZGlyZWN0aW9uID0gX2xhc3RTY3JvbGwgPiBzY3JvbGwgPyAtMSA6IDE7XG5cdFx0XHRfcmVmcmVzaGluZ0FsbCB8fCAoX2xhc3RTY3JvbGwgPSBzY3JvbGwpO1xuXHRcdFx0aWYgKHJlY29yZFZlbG9jaXR5KSB7XG5cdFx0XHRcdGlmIChfbGFzdFNjcm9sbFRpbWUgJiYgIV9wb2ludGVySXNEb3duICYmIHRpbWUgLSBfbGFzdFNjcm9sbFRpbWUgPiAyMDApIHtcblx0XHRcdFx0XHRfbGFzdFNjcm9sbFRpbWUgPSAwO1xuXHRcdFx0XHRcdF9kaXNwYXRjaChcInNjcm9sbEVuZFwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRfdGltZTIgPSBfdGltZTE7XG5cdFx0XHRcdF90aW1lMSA9IHRpbWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoX2RpcmVjdGlvbiA8IDApIHtcblx0XHRcdFx0X2kgPSBsO1xuXHRcdFx0XHR3aGlsZSAoX2ktLSA+IDApIHtcblx0XHRcdFx0XHRfdHJpZ2dlcnNbX2ldICYmIF90cmlnZ2Vyc1tfaV0udXBkYXRlKDAsIHJlY29yZFZlbG9jaXR5KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRfZGlyZWN0aW9uID0gMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoX2kgPSAwOyBfaSA8IGw7IF9pKyspIHtcblx0XHRcdFx0XHRfdHJpZ2dlcnNbX2ldICYmIF90cmlnZ2Vyc1tfaV0udXBkYXRlKDAsIHJlY29yZFZlbG9jaXR5KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0U2Nyb2xsVHJpZ2dlci5pc1VwZGF0aW5nID0gZmFsc2U7XG5cdFx0fVxuXHRcdF9yYWZJRCA9IDA7XG5cdH0sXG5cdF9wcm9wTmFtZXNUb0NvcHkgPSBbX2xlZnQsIF90b3AsIF9ib3R0b20sIF9yaWdodCwgX21hcmdpbiArIF9Cb3R0b20sIF9tYXJnaW4gKyBfUmlnaHQsIF9tYXJnaW4gKyBfVG9wLCBfbWFyZ2luICsgX0xlZnQsIFwiZGlzcGxheVwiLCBcImZsZXhTaHJpbmtcIiwgXCJmbG9hdFwiLCBcInpJbmRleFwiLCBcImdyaWRDb2x1bW5TdGFydFwiLCBcImdyaWRDb2x1bW5FbmRcIiwgXCJncmlkUm93U3RhcnRcIiwgXCJncmlkUm93RW5kXCIsIFwiZ3JpZEFyZWFcIiwgXCJqdXN0aWZ5U2VsZlwiLCBcImFsaWduU2VsZlwiLCBcInBsYWNlU2VsZlwiLCBcIm9yZGVyXCJdLFxuXHRfc3RhdGVQcm9wcyA9IF9wcm9wTmFtZXNUb0NvcHkuY29uY2F0KFtfd2lkdGgsIF9oZWlnaHQsIFwiYm94U2l6aW5nXCIsIFwibWF4XCIgKyBfV2lkdGgsIFwibWF4XCIgKyBfSGVpZ2h0LCBcInBvc2l0aW9uXCIsIF9tYXJnaW4sIF9wYWRkaW5nLCBfcGFkZGluZyArIF9Ub3AsIF9wYWRkaW5nICsgX1JpZ2h0LCBfcGFkZGluZyArIF9Cb3R0b20sIF9wYWRkaW5nICsgX0xlZnRdKSxcblx0X3N3YXBQaW5PdXQgPSAocGluLCBzcGFjZXIsIHN0YXRlKSA9PiB7XG5cdFx0X3NldFN0YXRlKHN0YXRlKTtcblx0XHRsZXQgY2FjaGUgPSBwaW4uX2dzYXA7XG5cdFx0aWYgKGNhY2hlLnNwYWNlcklzTmF0aXZlKSB7XG5cdFx0XHRfc2V0U3RhdGUoY2FjaGUuc3BhY2VyU3RhdGUpO1xuXHRcdH0gZWxzZSBpZiAocGluLl9nc2FwLnN3YXBwZWRJbikge1xuXHRcdFx0bGV0IHBhcmVudCA9IHNwYWNlci5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKHBhcmVudCkge1xuXHRcdFx0XHRwYXJlbnQuaW5zZXJ0QmVmb3JlKHBpbiwgc3BhY2VyKTtcblx0XHRcdFx0cGFyZW50LnJlbW92ZUNoaWxkKHNwYWNlcik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHBpbi5fZ3NhcC5zd2FwcGVkSW4gPSBmYWxzZTtcblx0fSxcblx0X3N3YXBQaW5JbiA9IChwaW4sIHNwYWNlciwgY3MsIHNwYWNlclN0YXRlKSA9PiB7XG5cdFx0aWYgKCFwaW4uX2dzYXAuc3dhcHBlZEluKSB7XG5cdFx0XHRsZXQgaSA9IF9wcm9wTmFtZXNUb0NvcHkubGVuZ3RoLFxuXHRcdFx0XHRzcGFjZXJTdHlsZSA9IHNwYWNlci5zdHlsZSxcblx0XHRcdFx0cGluU3R5bGUgPSBwaW4uc3R5bGUsXG5cdFx0XHRcdHA7XG5cdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdHAgPSBfcHJvcE5hbWVzVG9Db3B5W2ldO1xuXHRcdFx0XHRzcGFjZXJTdHlsZVtwXSA9IGNzW3BdO1xuXHRcdFx0fVxuXHRcdFx0c3BhY2VyU3R5bGUucG9zaXRpb24gPSBjcy5wb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiID8gXCJhYnNvbHV0ZVwiIDogXCJyZWxhdGl2ZVwiO1xuXHRcdFx0KGNzLmRpc3BsYXkgPT09IFwiaW5saW5lXCIpICYmIChzcGFjZXJTdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIik7XG5cdFx0XHRwaW5TdHlsZVtfYm90dG9tXSA9IHBpblN0eWxlW19yaWdodF0gPSBcImF1dG9cIjtcblx0XHRcdHNwYWNlclN0eWxlLmZsZXhCYXNpcyA9IGNzLmZsZXhCYXNpcyB8fCBcImF1dG9cIjtcblx0XHRcdHNwYWNlclN0eWxlLm92ZXJmbG93ID0gXCJ2aXNpYmxlXCI7XG5cdFx0XHRzcGFjZXJTdHlsZS5ib3hTaXppbmcgPSBcImJvcmRlci1ib3hcIjtcblx0XHRcdHNwYWNlclN0eWxlW193aWR0aF0gPSBfZ2V0U2l6ZShwaW4sIF9ob3Jpem9udGFsKSArIF9weDtcblx0XHRcdHNwYWNlclN0eWxlW19oZWlnaHRdID0gX2dldFNpemUocGluLCBfdmVydGljYWwpICsgX3B4O1xuXHRcdFx0c3BhY2VyU3R5bGVbX3BhZGRpbmddID0gcGluU3R5bGVbX21hcmdpbl0gPSBwaW5TdHlsZVtfdG9wXSA9IHBpblN0eWxlW19sZWZ0XSA9IFwiMFwiO1xuXHRcdFx0X3NldFN0YXRlKHNwYWNlclN0YXRlKTtcblx0XHRcdHBpblN0eWxlW193aWR0aF0gPSBwaW5TdHlsZVtcIm1heFwiICsgX1dpZHRoXSA9IGNzW193aWR0aF07XG5cdFx0XHRwaW5TdHlsZVtfaGVpZ2h0XSA9IHBpblN0eWxlW1wibWF4XCIgKyBfSGVpZ2h0XSA9IGNzW19oZWlnaHRdO1xuXHRcdFx0cGluU3R5bGVbX3BhZGRpbmddID0gY3NbX3BhZGRpbmddO1xuXHRcdFx0aWYgKHBpbi5wYXJlbnROb2RlICE9PSBzcGFjZXIpIHtcblx0XHRcdFx0cGluLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHNwYWNlciwgcGluKTtcblx0XHRcdFx0c3BhY2VyLmFwcGVuZENoaWxkKHBpbik7XG5cdFx0XHR9XG5cdFx0XHRwaW4uX2dzYXAuc3dhcHBlZEluID0gdHJ1ZTtcblx0XHR9XG5cdH0sXG5cdF9jYXBzRXhwID0gLyhbQS1aXSkvZyxcblx0X3NldFN0YXRlID0gc3RhdGUgPT4ge1xuXHRcdGlmIChzdGF0ZSkge1xuXHRcdFx0bGV0IHN0eWxlID0gc3RhdGUudC5zdHlsZSxcblx0XHRcdFx0bCA9IHN0YXRlLmxlbmd0aCxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdHAsIHZhbHVlO1xuXHRcdFx0KHN0YXRlLnQuX2dzYXAgfHwgZ3NhcC5jb3JlLmdldENhY2hlKHN0YXRlLnQpKS51bmNhY2hlID0gMTsgLy8gb3RoZXJ3aXNlIHRyYW5zZm9ybXMgbWF5IGJlIG9mZlxuXHRcdFx0Zm9yICg7IGkgPCBsOyBpICs9Mikge1xuXHRcdFx0XHR2YWx1ZSA9IHN0YXRlW2krMV07XG5cdFx0XHRcdHAgPSBzdGF0ZVtpXTtcblx0XHRcdFx0aWYgKHZhbHVlKSB7XG5cdFx0XHRcdFx0c3R5bGVbcF0gPSB2YWx1ZTtcblx0XHRcdFx0fSBlbHNlIGlmIChzdHlsZVtwXSkge1xuXHRcdFx0XHRcdHN0eWxlLnJlbW92ZVByb3BlcnR5KHAucmVwbGFjZShfY2Fwc0V4cCwgXCItJDFcIikudG9Mb3dlckNhc2UoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdF9nZXRTdGF0ZSA9IGVsZW1lbnQgPT4geyAvLyByZXR1cm5zIGFuIEFycmF5IHdpdGggYWx0ZXJuYXRpbmcgdmFsdWVzIGxpa2UgW3Byb3BlcnR5LCB2YWx1ZSwgcHJvcGVydHksIHZhbHVlXSBhbmQgYSBcInRcIiBwcm9wZXJ0eSBwb2ludGluZyB0byB0aGUgdGFyZ2V0IChlbGVtZW50KS4gTWFrZXMgaXQgZmFzdCBhbmQgY2hlYXAuXG5cdFx0bGV0IGwgPSBfc3RhdGVQcm9wcy5sZW5ndGgsXG5cdFx0XHRzdHlsZSA9IGVsZW1lbnQuc3R5bGUsXG5cdFx0XHRzdGF0ZSA9IFtdLFxuXHRcdFx0aSA9IDA7XG5cdFx0Zm9yICg7IGkgPCBsOyBpKyspIHtcblx0XHRcdHN0YXRlLnB1c2goX3N0YXRlUHJvcHNbaV0sIHN0eWxlW19zdGF0ZVByb3BzW2ldXSk7XG5cdFx0fVxuXHRcdHN0YXRlLnQgPSBlbGVtZW50O1xuXHRcdHJldHVybiBzdGF0ZTtcblx0fSxcblx0X2NvcHlTdGF0ZSA9IChzdGF0ZSwgb3ZlcnJpZGUsIG9taXRPZmZzZXRzKSA9PiB7XG5cdFx0bGV0IHJlc3VsdCA9IFtdLFxuXHRcdFx0bCA9IHN0YXRlLmxlbmd0aCxcblx0XHRcdGkgPSBvbWl0T2Zmc2V0cyA/IDggOiAwLCAvLyBza2lwIHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSBpZiBvbWl0T2Zmc2V0cyBpcyB0cnVlXG5cdFx0XHRwO1xuXHRcdGZvciAoOyBpIDwgbDsgaSArPSAyKSB7XG5cdFx0XHRwID0gc3RhdGVbaV07XG5cdFx0XHRyZXN1bHQucHVzaChwLCAocCBpbiBvdmVycmlkZSkgPyBvdmVycmlkZVtwXSA6IHN0YXRlW2krMV0pO1xuXHRcdH1cblx0XHRyZXN1bHQudCA9IHN0YXRlLnQ7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSxcblx0X3dpbk9mZnNldHMgPSB7bGVmdDowLCB0b3A6MH0sXG5cdC8vIC8vIHBvdGVudGlhbCBmdXR1cmUgZmVhdHVyZSAoPykgQWxsb3cgdXNlcnMgdG8gY2FsY3VsYXRlIHdoZXJlIGEgdHJpZ2dlciBoaXRzIChzY3JvbGwgcG9zaXRpb24pIGxpa2UgZ2V0U2Nyb2xsUG9zaXRpb24oXCIjaWRcIiwgXCJ0b3AgYm90dG9tXCIpXG5cdC8vIF9nZXRTY3JvbGxQb3NpdGlvbiA9ICh0cmlnZ2VyLCBwb3NpdGlvbiwge3Njcm9sbGVyLCBjb250YWluZXJBbmltYXRpb24sIGhvcml6b250YWx9KSA9PiB7XG5cdC8vIFx0c2Nyb2xsZXIgPSBfZ2V0VGFyZ2V0KHNjcm9sbGVyIHx8IF93aW4pO1xuXHQvLyBcdGxldCBkaXJlY3Rpb24gPSBob3Jpem9udGFsID8gX2hvcml6b250YWwgOiBfdmVydGljYWwsXG5cdC8vIFx0XHRpc1ZpZXdwb3J0ID0gX2lzVmlld3BvcnQoc2Nyb2xsZXIpO1xuXHQvLyBcdF9nZXRTaXplRnVuYyhzY3JvbGxlciwgaXNWaWV3cG9ydCwgZGlyZWN0aW9uKTtcblx0Ly8gXHRyZXR1cm4gX3BhcnNlUG9zaXRpb24ocG9zaXRpb24sIF9nZXRUYXJnZXQodHJpZ2dlciksIF9nZXRTaXplRnVuYyhzY3JvbGxlciwgaXNWaWV3cG9ydCwgZGlyZWN0aW9uKSgpLCBkaXJlY3Rpb24sIF9nZXRTY3JvbGxGdW5jKHNjcm9sbGVyLCBkaXJlY3Rpb24pKCksIDAsIDAsIDAsIF9nZXRPZmZzZXRzRnVuYyhzY3JvbGxlciwgaXNWaWV3cG9ydCkoKSwgaXNWaWV3cG9ydCA/IDAgOiBwYXJzZUZsb2F0KF9nZXRDb21wdXRlZFN0eWxlKHNjcm9sbGVyKVtcImJvcmRlclwiICsgZGlyZWN0aW9uLnAyICsgX1dpZHRoXSkgfHwgMCwgMCwgY29udGFpbmVyQW5pbWF0aW9uID8gY29udGFpbmVyQW5pbWF0aW9uLmR1cmF0aW9uKCkgOiBfbWF4U2Nyb2xsKHNjcm9sbGVyKSwgY29udGFpbmVyQW5pbWF0aW9uKTtcblx0Ly8gfSxcblx0X3BhcnNlUG9zaXRpb24gPSAodmFsdWUsIHRyaWdnZXIsIHNjcm9sbGVyU2l6ZSwgZGlyZWN0aW9uLCBzY3JvbGwsIG1hcmtlciwgbWFya2VyU2Nyb2xsZXIsIHNlbGYsIHNjcm9sbGVyQm91bmRzLCBib3JkZXJXaWR0aCwgdXNlRml4ZWRQb3NpdGlvbiwgc2Nyb2xsZXJNYXgsIGNvbnRhaW5lckFuaW1hdGlvbiwgY2xhbXBaZXJvUHJvcCkgPT4ge1xuXHRcdF9pc0Z1bmN0aW9uKHZhbHVlKSAmJiAodmFsdWUgPSB2YWx1ZShzZWxmKSk7XG5cdFx0aWYgKF9pc1N0cmluZyh2YWx1ZSkgJiYgdmFsdWUuc3Vic3RyKDAsMykgPT09IFwibWF4XCIpIHtcblx0XHRcdHZhbHVlID0gc2Nyb2xsZXJNYXggKyAodmFsdWUuY2hhckF0KDQpID09PSBcIj1cIiA/IF9vZmZzZXRUb1B4KFwiMFwiICsgdmFsdWUuc3Vic3RyKDMpLCBzY3JvbGxlclNpemUpIDogMCk7XG5cdFx0fVxuXHRcdGxldCB0aW1lID0gY29udGFpbmVyQW5pbWF0aW9uID8gY29udGFpbmVyQW5pbWF0aW9uLnRpbWUoKSA6IDAsXG5cdFx0XHRwMSwgcDIsIGVsZW1lbnQ7XG5cdFx0Y29udGFpbmVyQW5pbWF0aW9uICYmIGNvbnRhaW5lckFuaW1hdGlvbi5zZWVrKDApO1xuXHRcdGlzTmFOKHZhbHVlKSB8fCAodmFsdWUgPSArdmFsdWUpOyAvLyBjb252ZXJ0IGEgc3RyaW5nIG51bWJlciBsaWtlIFwiNDVcIiB0byBhbiBhY3R1YWwgbnVtYmVyXG5cdFx0aWYgKCFfaXNOdW1iZXIodmFsdWUpKSB7XG5cdFx0XHRfaXNGdW5jdGlvbih0cmlnZ2VyKSAmJiAodHJpZ2dlciA9IHRyaWdnZXIoc2VsZikpO1xuXHRcdFx0bGV0IG9mZnNldHMgPSAodmFsdWUgfHwgXCIwXCIpLnNwbGl0KFwiIFwiKSxcblx0XHRcdFx0Ym91bmRzLCBsb2NhbE9mZnNldCwgZ2xvYmFsT2Zmc2V0LCBkaXNwbGF5O1xuXHRcdFx0ZWxlbWVudCA9IF9nZXRUYXJnZXQodHJpZ2dlciwgc2VsZikgfHwgX2JvZHk7XG5cdFx0XHRib3VuZHMgPSBfZ2V0Qm91bmRzKGVsZW1lbnQpIHx8IHt9O1xuXHRcdFx0aWYgKCghYm91bmRzIHx8ICghYm91bmRzLmxlZnQgJiYgIWJvdW5kcy50b3ApKSAmJiBfZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5kaXNwbGF5ID09PSBcIm5vbmVcIikgeyAvLyBpZiBkaXNwbGF5IGlzIFwibm9uZVwiLCBpdCB3b24ndCByZXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgcHJvcGVybHlcblx0XHRcdFx0ZGlzcGxheSA9IGVsZW1lbnQuc3R5bGUuZGlzcGxheTtcblx0XHRcdFx0ZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuXHRcdFx0XHRib3VuZHMgPSBfZ2V0Qm91bmRzKGVsZW1lbnQpO1xuXHRcdFx0XHRkaXNwbGF5ID8gKGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IGRpc3BsYXkpIDogZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShcImRpc3BsYXlcIik7XG5cdFx0XHR9XG5cdFx0XHRsb2NhbE9mZnNldCA9IF9vZmZzZXRUb1B4KG9mZnNldHNbMF0sIGJvdW5kc1tkaXJlY3Rpb24uZF0pO1xuXHRcdFx0Z2xvYmFsT2Zmc2V0ID0gX29mZnNldFRvUHgob2Zmc2V0c1sxXSB8fCBcIjBcIiwgc2Nyb2xsZXJTaXplKTtcblx0XHRcdHZhbHVlID0gYm91bmRzW2RpcmVjdGlvbi5wXSAtIHNjcm9sbGVyQm91bmRzW2RpcmVjdGlvbi5wXSAtIGJvcmRlcldpZHRoICsgbG9jYWxPZmZzZXQgKyBzY3JvbGwgLSBnbG9iYWxPZmZzZXQ7XG5cdFx0XHRtYXJrZXJTY3JvbGxlciAmJiBfcG9zaXRpb25NYXJrZXIobWFya2VyU2Nyb2xsZXIsIGdsb2JhbE9mZnNldCwgZGlyZWN0aW9uLCAoc2Nyb2xsZXJTaXplIC0gZ2xvYmFsT2Zmc2V0IDwgMjAgfHwgKG1hcmtlclNjcm9sbGVyLl9pc1N0YXJ0ICYmIGdsb2JhbE9mZnNldCA+IDIwKSkpO1xuXHRcdFx0c2Nyb2xsZXJTaXplIC09IHNjcm9sbGVyU2l6ZSAtIGdsb2JhbE9mZnNldDsgLy8gYWRqdXN0IGZvciB0aGUgbWFya2VyXG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRhaW5lckFuaW1hdGlvbiAmJiAodmFsdWUgPSBnc2FwLnV0aWxzLm1hcFJhbmdlKGNvbnRhaW5lckFuaW1hdGlvbi5zY3JvbGxUcmlnZ2VyLnN0YXJ0LCBjb250YWluZXJBbmltYXRpb24uc2Nyb2xsVHJpZ2dlci5lbmQsIDAsIHNjcm9sbGVyTWF4LCB2YWx1ZSkpO1xuXHRcdFx0bWFya2VyU2Nyb2xsZXIgJiYgX3Bvc2l0aW9uTWFya2VyKG1hcmtlclNjcm9sbGVyLCBzY3JvbGxlclNpemUsIGRpcmVjdGlvbiwgdHJ1ZSk7XG5cdFx0fVxuXHRcdGlmIChjbGFtcFplcm9Qcm9wKSB7XG5cdFx0XHRzZWxmW2NsYW1wWmVyb1Byb3BdID0gdmFsdWUgfHwgLTAuMDAxO1xuXHRcdFx0dmFsdWUgPCAwICYmICh2YWx1ZSA9IDApO1xuXHRcdH1cblx0XHRpZiAobWFya2VyKSB7XG5cdFx0XHRsZXQgcG9zaXRpb24gPSB2YWx1ZSArIHNjcm9sbGVyU2l6ZSxcblx0XHRcdFx0aXNTdGFydCA9IG1hcmtlci5faXNTdGFydDtcblx0XHRcdHAxID0gXCJzY3JvbGxcIiArIGRpcmVjdGlvbi5kMjtcblx0XHRcdF9wb3NpdGlvbk1hcmtlcihtYXJrZXIsIHBvc2l0aW9uLCBkaXJlY3Rpb24sIChpc1N0YXJ0ICYmIHBvc2l0aW9uID4gMjApIHx8ICghaXNTdGFydCAmJiAodXNlRml4ZWRQb3NpdGlvbiA/IE1hdGgubWF4KF9ib2R5W3AxXSwgX2RvY0VsW3AxXSkgOiBtYXJrZXIucGFyZW50Tm9kZVtwMV0pIDw9IHBvc2l0aW9uICsgMSkpO1xuXHRcdFx0aWYgKHVzZUZpeGVkUG9zaXRpb24pIHtcblx0XHRcdFx0c2Nyb2xsZXJCb3VuZHMgPSBfZ2V0Qm91bmRzKG1hcmtlclNjcm9sbGVyKTtcblx0XHRcdFx0dXNlRml4ZWRQb3NpdGlvbiAmJiAobWFya2VyLnN0eWxlW2RpcmVjdGlvbi5vcC5wXSA9IChzY3JvbGxlckJvdW5kc1tkaXJlY3Rpb24ub3AucF0gLSBkaXJlY3Rpb24ub3AubSAtIG1hcmtlci5fb2Zmc2V0KSArIF9weCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChjb250YWluZXJBbmltYXRpb24gJiYgZWxlbWVudCkge1xuXHRcdFx0cDEgPSBfZ2V0Qm91bmRzKGVsZW1lbnQpO1xuXHRcdFx0Y29udGFpbmVyQW5pbWF0aW9uLnNlZWsoc2Nyb2xsZXJNYXgpO1xuXHRcdFx0cDIgPSBfZ2V0Qm91bmRzKGVsZW1lbnQpO1xuXHRcdFx0Y29udGFpbmVyQW5pbWF0aW9uLl9jYVNjcm9sbERpc3QgPSBwMVtkaXJlY3Rpb24ucF0gLSBwMltkaXJlY3Rpb24ucF07XG5cdFx0XHR2YWx1ZSA9IHZhbHVlIC8gKGNvbnRhaW5lckFuaW1hdGlvbi5fY2FTY3JvbGxEaXN0KSAqIHNjcm9sbGVyTWF4O1xuXHRcdH1cblx0XHRjb250YWluZXJBbmltYXRpb24gJiYgY29udGFpbmVyQW5pbWF0aW9uLnNlZWsodGltZSk7XG5cdFx0cmV0dXJuIGNvbnRhaW5lckFuaW1hdGlvbiA/IHZhbHVlIDogTWF0aC5yb3VuZCh2YWx1ZSk7XG5cdH0sXG5cdF9wcmVmaXhFeHAgPSAvKHdlYmtpdHxtb3p8bGVuZ3RofGNzc1RleHR8aW5zZXQpL2ksXG5cdF9yZXBhcmVudCA9IChlbGVtZW50LCBwYXJlbnQsIHRvcCwgbGVmdCkgPT4ge1xuXHRcdGlmIChlbGVtZW50LnBhcmVudE5vZGUgIT09IHBhcmVudCkge1xuXHRcdFx0bGV0IHN0eWxlID0gZWxlbWVudC5zdHlsZSxcblx0XHRcdFx0cCwgY3M7XG5cdFx0XHRpZiAocGFyZW50ID09PSBfYm9keSkge1xuXHRcdFx0XHRlbGVtZW50Ll9zdE9yaWcgPSBzdHlsZS5jc3NUZXh0OyAvLyByZWNvcmQgb3JpZ2luYWwgaW5saW5lIHN0eWxlcyBzbyB3ZSBjYW4gcmV2ZXJ0IHRoZW0gbGF0ZXJcblx0XHRcdFx0Y3MgPSBfZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblx0XHRcdFx0Zm9yIChwIGluIGNzKSB7IC8vIG11c3QgY29weSBhbGwgcmVsZXZhbnQgc3R5bGVzIHRvIGVuc3VyZSB0aGF0IG5vdGhpbmcgY2hhbmdlcyB2aXN1YWxseSB3aGVuIHdlIHJlcGFyZW50IHRvIHRoZSA8Ym9keT4uIFNraXAgdGhlIHZlbmRvciBwcmVmaXhlZCBvbmVzLlxuXHRcdFx0XHRcdGlmICghK3AgJiYgIV9wcmVmaXhFeHAudGVzdChwKSAmJiBjc1twXSAmJiB0eXBlb2Ygc3R5bGVbcF0gPT09IFwic3RyaW5nXCIgJiYgcCAhPT0gXCIwXCIpIHtcblx0XHRcdFx0XHRcdHN0eWxlW3BdID0gY3NbcF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHN0eWxlLnRvcCA9IHRvcDtcblx0XHRcdFx0c3R5bGUubGVmdCA9IGxlZnQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzdHlsZS5jc3NUZXh0ID0gZWxlbWVudC5fc3RPcmlnO1xuXHRcdFx0fVxuXHRcdFx0Z3NhcC5jb3JlLmdldENhY2hlKGVsZW1lbnQpLnVuY2FjaGUgPSAxO1xuXHRcdFx0cGFyZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuXHRcdH1cblx0fSxcblx0X2ludGVycnVwdGlvblRyYWNrZXIgPSAoZ2V0VmFsdWVGdW5jLCBpbml0aWFsVmFsdWUsIG9uSW50ZXJydXB0KSA9PiB7XG5cdFx0bGV0IGxhc3QxID0gaW5pdGlhbFZhbHVlLFxuXHRcdFx0bGFzdDIgPSBsYXN0MTtcblx0XHRyZXR1cm4gdmFsdWUgPT4ge1xuXHRcdFx0bGV0IGN1cnJlbnQgPSBNYXRoLnJvdW5kKGdldFZhbHVlRnVuYygpKTsgLy8gcm91bmQgYmVjYXVzZSBpbiBzb21lIFt2ZXJ5IHVuY29tbW9uXSBXaW5kb3dzIGVudmlyb25tZW50cywgc2Nyb2xsIGNhbiBnZXQgcmVwb3J0ZWQgd2l0aCBkZWNpbWFscyBldmVuIHRob3VnaCBpdCB3YXMgc2V0IHdpdGhvdXQuXG5cdFx0XHRpZiAoY3VycmVudCAhPT0gbGFzdDEgJiYgY3VycmVudCAhPT0gbGFzdDIgJiYgTWF0aC5hYnMoY3VycmVudCAtIGxhc3QxKSA+IDMgJiYgTWF0aC5hYnMoY3VycmVudCAtIGxhc3QyKSA+IDMpIHsgLy8gaWYgdGhlIHVzZXIgc2Nyb2xscywga2lsbCB0aGUgdHdlZW4uIGlPUyBTYWZhcmkgaW50ZXJtaXR0ZW50bHkgbWlzcmVwb3J0cyB0aGUgc2Nyb2xsIHBvc2l0aW9uLCBpdCBtYXkgYmUgdGhlIG1vc3QgcmVjZW50bHktc2V0IG9uZSBvciB0aGUgb25lIGJlZm9yZSB0aGF0ISBXaGVuIFNhZmFyaSBpcyB6b29tZWQgKENNRC0rKSwgaXQgb2Z0ZW4gbWlzcmVwb3J0cyBhcyAxIHBpeGVsIG9mZiB0b28hIFNvIGlmIHdlIHNldCB0aGUgc2Nyb2xsIHBvc2l0aW9uIHRvIDEyNSwgZm9yIGV4YW1wbGUsIGl0J2xsIGFjdHVhbGx5IHJlcG9ydCBpdCBhcyAxMjQuXG5cdFx0XHRcdHZhbHVlID0gY3VycmVudDtcblx0XHRcdFx0b25JbnRlcnJ1cHQgJiYgb25JbnRlcnJ1cHQoKTtcblx0XHRcdH1cblx0XHRcdGxhc3QyID0gbGFzdDE7XG5cdFx0XHRsYXN0MSA9IE1hdGgucm91bmQodmFsdWUpO1xuXHRcdFx0cmV0dXJuIGxhc3QxO1xuXHRcdH07XG5cdH0sXG5cdF9zaGlmdE1hcmtlciA9IChtYXJrZXIsIGRpcmVjdGlvbiwgdmFsdWUpID0+IHtcblx0XHRsZXQgdmFycyA9IHt9O1xuXHRcdHZhcnNbZGlyZWN0aW9uLnBdID0gXCIrPVwiICsgdmFsdWU7XG5cdFx0Z3NhcC5zZXQobWFya2VyLCB2YXJzKTtcblx0fSxcblx0Ly8gX21lcmdlQW5pbWF0aW9ucyA9IGFuaW1hdGlvbnMgPT4ge1xuXHQvLyBcdGxldCB0bCA9IGdzYXAudGltZWxpbmUoe3Ntb290aENoaWxkVGltaW5nOiB0cnVlfSkuc3RhcnRUaW1lKE1hdGgubWluKC4uLmFuaW1hdGlvbnMubWFwKGEgPT4gYS5nbG9iYWxUaW1lKDApKSkpO1xuXHQvLyBcdGFuaW1hdGlvbnMuZm9yRWFjaChhID0+IHtsZXQgdGltZSA9IGEudG90YWxUaW1lKCk7IHRsLmFkZChhKTsgYS50b3RhbFRpbWUodGltZSk7IH0pO1xuXHQvLyBcdHRsLnNtb290aENoaWxkVGltaW5nID0gZmFsc2U7XG5cdC8vIFx0cmV0dXJuIHRsO1xuXHQvLyB9LFxuXG5cdC8vIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIHR3ZWVuIHRoZSBzY3JvbGwgcG9zaXRpb24gaW4gdGhlIGRpcmVjdGlvbiBwcm92aWRlZCwgYW5kIHdoZW4gZG9pbmcgc28gaXQnbGwgYWRkIGEgLnR3ZWVuIHByb3BlcnR5IHRvIHRoZSBGVU5DVElPTiBpdHNlbGYsIGFuZCByZW1vdmUgaXQgd2hlbiB0aGUgdHdlZW4gY29tcGxldGVzIG9yIGdldHMga2lsbGVkLiBUaGlzIGdpdmVzIHVzIGEgd2F5IHRvIGhhdmUgbXVsdGlwbGUgU2Nyb2xsVHJpZ2dlcnMgdXNlIGEgY2VudHJhbCBmdW5jdGlvbiBmb3IgYW55IGdpdmVuIHNjcm9sbGVyIGFuZCBzZWUgaWYgdGhlcmUncyBhIHNjcm9sbCB0d2VlbiBydW5uaW5nICh3aGljaCB3b3VsZCBhZmZlY3QgaWYvaG93IHRoaW5ncyBnZXQgdXBkYXRlZClcblx0X2dldFR3ZWVuQ3JlYXRvciA9IChzY3JvbGxlciwgZGlyZWN0aW9uKSA9PiB7XG5cdFx0bGV0IGdldFNjcm9sbCA9IF9nZXRTY3JvbGxGdW5jKHNjcm9sbGVyLCBkaXJlY3Rpb24pLFxuXHRcdFx0cHJvcCA9IFwiX3Njcm9sbFwiICsgZGlyZWN0aW9uLnAyLCAvLyBhZGQgYSB0d2VlbmFibGUgcHJvcGVydHkgdG8gdGhlIHNjcm9sbGVyIHRoYXQncyBhIGdldHRlci9zZXR0ZXIgZnVuY3Rpb24sIGxpa2UgX3Njcm9sbFRvcCBvciBfc2Nyb2xsTGVmdC4gVGhpcyB3YXksIGlmIHNvbWVvbmUgZG9lcyBnc2FwLmtpbGxUd2VlbnNPZihzY3JvbGxlcikgaXQnbGwga2lsbCB0aGUgc2Nyb2xsIHR3ZWVuLlxuXHRcdFx0Z2V0VHdlZW4gPSAoc2Nyb2xsVG8sIHZhcnMsIGluaXRpYWxWYWx1ZSwgY2hhbmdlMSwgY2hhbmdlMikgPT4ge1xuXHRcdFx0XHRsZXQgdHdlZW4gPSBnZXRUd2Vlbi50d2Vlbixcblx0XHRcdFx0XHRvbkNvbXBsZXRlID0gdmFycy5vbkNvbXBsZXRlLFxuXHRcdFx0XHRcdG1vZGlmaWVycyA9IHt9O1xuXHRcdFx0XHRpbml0aWFsVmFsdWUgPSBpbml0aWFsVmFsdWUgfHwgZ2V0U2Nyb2xsKCk7XG5cdFx0XHRcdGxldCBjaGVja0ZvckludGVycnVwdGlvbiA9IF9pbnRlcnJ1cHRpb25UcmFja2VyKGdldFNjcm9sbCwgaW5pdGlhbFZhbHVlLCAoKSA9PiB7XG5cdFx0XHRcdFx0dHdlZW4ua2lsbCgpO1xuXHRcdFx0XHRcdGdldFR3ZWVuLnR3ZWVuID0gMDtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGNoYW5nZTIgPSAoY2hhbmdlMSAmJiBjaGFuZ2UyKSB8fCAwOyAvLyBpZiBjaGFuZ2UxIGlzIDAsIHdlIHNldCB0aGF0IHRvIHRoZSBkaWZmZXJlbmNlIGFuZCBpZ25vcmUgY2hhbmdlMi4gT3RoZXJ3aXNlLCB0aGVyZSB3b3VsZCBiZSBhIGNvbXBvdW5kIGVmZmVjdC5cblx0XHRcdFx0Y2hhbmdlMSA9IGNoYW5nZTEgfHwgKHNjcm9sbFRvIC0gaW5pdGlhbFZhbHVlKTtcblx0XHRcdFx0dHdlZW4gJiYgdHdlZW4ua2lsbCgpO1xuXHRcdFx0XHR2YXJzW3Byb3BdID0gc2Nyb2xsVG87XG5cdFx0XHRcdHZhcnMuaW5oZXJpdCA9IGZhbHNlO1xuXHRcdFx0XHR2YXJzLm1vZGlmaWVycyA9IG1vZGlmaWVycztcblx0XHRcdFx0bW9kaWZpZXJzW3Byb3BdID0gKCkgPT4gY2hlY2tGb3JJbnRlcnJ1cHRpb24oaW5pdGlhbFZhbHVlICsgY2hhbmdlMSAqIHR3ZWVuLnJhdGlvICsgY2hhbmdlMiAqIHR3ZWVuLnJhdGlvICogdHdlZW4ucmF0aW8pO1xuXHRcdFx0XHR2YXJzLm9uVXBkYXRlID0gKCkgPT4ge1xuXHRcdFx0XHRcdF9zY3JvbGxlcnMuY2FjaGUrKztcblx0XHRcdFx0XHRnZXRUd2Vlbi50d2VlbiAmJiBfdXBkYXRlQWxsKCk7IC8vIGlmIGl0IHdhcyBpbnRlcnJ1cHRlZC9raWxsZWQsIGxpa2UgaW4gYSBjb250ZXh0LnJldmVydCgpLCBkb24ndCBmb3JjZSBhbiB1cGRhdGVBbGwoKVxuXHRcdFx0XHR9O1xuXHRcdFx0XHR2YXJzLm9uQ29tcGxldGUgPSAoKSA9PiB7XG5cdFx0XHRcdFx0Z2V0VHdlZW4udHdlZW4gPSAwO1xuXHRcdFx0XHRcdG9uQ29tcGxldGUgJiYgb25Db21wbGV0ZS5jYWxsKHR3ZWVuKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0dHdlZW4gPSBnZXRUd2Vlbi50d2VlbiA9IGdzYXAudG8oc2Nyb2xsZXIsIHZhcnMpO1xuXHRcdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0XHR9O1xuXHRcdHNjcm9sbGVyW3Byb3BdID0gZ2V0U2Nyb2xsO1xuXHRcdGdldFNjcm9sbC53aGVlbEhhbmRsZXIgPSAoKSA9PiBnZXRUd2Vlbi50d2VlbiAmJiBnZXRUd2Vlbi50d2Vlbi5raWxsKCkgJiYgKGdldFR3ZWVuLnR3ZWVuID0gMCk7XG5cdFx0X2FkZExpc3RlbmVyKHNjcm9sbGVyLCBcIndoZWVsXCIsIGdldFNjcm9sbC53aGVlbEhhbmRsZXIpOyAvLyBXaW5kb3dzIG1hY2hpbmVzIGhhbmRsZSBtb3VzZXdoZWVsIHNjcm9sbGluZyBpbiBjaHVua3MgKGxpa2UgXCIzIGxpbmVzIHBlciBzY3JvbGxcIikgbWVhbmluZyB0aGUgdHlwaWNhbCBzdHJhdGVneSBmb3IgY2FuY2VsbGluZyB0aGUgc2Nyb2xsIGlzbid0IGFzIHNlbnNpdGl2ZS4gSXQncyBtdWNoIG1vcmUgbGlrZWx5IHRvIG1hdGNoIG9uZSBvZiB0aGUgcHJldmlvdXMgMiBzY3JvbGwgZXZlbnQgcG9zaXRpb25zLiBTbyB3ZSBraWxsIGFueSBzbmFwcGluZyBhcyBzb29uIGFzIHRoZXJlJ3MgYSB3aGVlbCBldmVudC5cblx0XHRTY3JvbGxUcmlnZ2VyLmlzVG91Y2ggJiYgX2FkZExpc3RlbmVyKHNjcm9sbGVyLCBcInRvdWNobW92ZVwiLCBnZXRTY3JvbGwud2hlZWxIYW5kbGVyKTtcblx0XHRyZXR1cm4gZ2V0VHdlZW47XG5cdH07XG5cblxuXG5cbmV4cG9ydCBjbGFzcyBTY3JvbGxUcmlnZ2VyIHtcblxuXHRjb25zdHJ1Y3Rvcih2YXJzLCBhbmltYXRpb24pIHtcblx0XHRfY29yZUluaXR0ZWQgfHwgU2Nyb2xsVHJpZ2dlci5yZWdpc3Rlcihnc2FwKSB8fCBjb25zb2xlLndhcm4oXCJQbGVhc2UgZ3NhcC5yZWdpc3RlclBsdWdpbihTY3JvbGxUcmlnZ2VyKVwiKTtcblx0XHRfY29udGV4dCh0aGlzKTtcblx0XHR0aGlzLmluaXQodmFycywgYW5pbWF0aW9uKTtcblx0fVxuXG5cdGluaXQodmFycywgYW5pbWF0aW9uKSB7XG5cdFx0dGhpcy5wcm9ncmVzcyA9IHRoaXMuc3RhcnQgPSAwO1xuXHRcdHRoaXMudmFycyAmJiB0aGlzLmtpbGwodHJ1ZSwgdHJ1ZSk7IC8vIGluIGNhc2UgaXQncyBiZWluZyBpbml0dGVkIGFnYWluXG5cdFx0aWYgKCFfZW5hYmxlZCkge1xuXHRcdFx0dGhpcy51cGRhdGUgPSB0aGlzLnJlZnJlc2ggPSB0aGlzLmtpbGwgPSBfcGFzc1Rocm91Z2g7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHZhcnMgPSBfc2V0RGVmYXVsdHMoKF9pc1N0cmluZyh2YXJzKSB8fCBfaXNOdW1iZXIodmFycykgfHwgdmFycy5ub2RlVHlwZSkgPyB7dHJpZ2dlcjogdmFyc30gOiB2YXJzLCBfZGVmYXVsdHMpO1xuXHRcdGxldCB7b25VcGRhdGUsIHRvZ2dsZUNsYXNzLCBpZCwgb25Ub2dnbGUsIG9uUmVmcmVzaCwgc2NydWIsIHRyaWdnZXIsIHBpbiwgcGluU3BhY2luZywgaW52YWxpZGF0ZU9uUmVmcmVzaCwgYW50aWNpcGF0ZVBpbiwgb25TY3J1YkNvbXBsZXRlLCBvblNuYXBDb21wbGV0ZSwgb25jZSwgc25hcCwgcGluUmVwYXJlbnQsIHBpblNwYWNlciwgY29udGFpbmVyQW5pbWF0aW9uLCBmYXN0U2Nyb2xsRW5kLCBwcmV2ZW50T3ZlcmxhcHN9ID0gdmFycyxcblx0XHRcdGRpcmVjdGlvbiA9IHZhcnMuaG9yaXpvbnRhbCB8fCAodmFycy5jb250YWluZXJBbmltYXRpb24gJiYgdmFycy5ob3Jpem9udGFsICE9PSBmYWxzZSkgPyBfaG9yaXpvbnRhbCA6IF92ZXJ0aWNhbCxcblx0XHRcdGlzVG9nZ2xlID0gIXNjcnViICYmIHNjcnViICE9PSAwLFxuXHRcdFx0c2Nyb2xsZXIgPSBfZ2V0VGFyZ2V0KHZhcnMuc2Nyb2xsZXIgfHwgX3dpbiksXG5cdFx0XHRzY3JvbGxlckNhY2hlID0gZ3NhcC5jb3JlLmdldENhY2hlKHNjcm9sbGVyKSxcblx0XHRcdGlzVmlld3BvcnQgPSBfaXNWaWV3cG9ydChzY3JvbGxlciksXG5cdFx0XHR1c2VGaXhlZFBvc2l0aW9uID0gKFwicGluVHlwZVwiIGluIHZhcnMgPyB2YXJzLnBpblR5cGUgOiBfZ2V0UHJveHlQcm9wKHNjcm9sbGVyLCBcInBpblR5cGVcIikgfHwgKGlzVmlld3BvcnQgJiYgXCJmaXhlZFwiKSkgPT09IFwiZml4ZWRcIixcblx0XHRcdGNhbGxiYWNrcyA9IFt2YXJzLm9uRW50ZXIsIHZhcnMub25MZWF2ZSwgdmFycy5vbkVudGVyQmFjaywgdmFycy5vbkxlYXZlQmFja10sXG5cdFx0XHR0b2dnbGVBY3Rpb25zID0gaXNUb2dnbGUgJiYgdmFycy50b2dnbGVBY3Rpb25zLnNwbGl0KFwiIFwiKSxcblx0XHRcdG1hcmtlcnMgPSBcIm1hcmtlcnNcIiBpbiB2YXJzID8gdmFycy5tYXJrZXJzIDogX2RlZmF1bHRzLm1hcmtlcnMsXG5cdFx0XHRib3JkZXJXaWR0aCA9IGlzVmlld3BvcnQgPyAwIDogcGFyc2VGbG9hdChfZ2V0Q29tcHV0ZWRTdHlsZShzY3JvbGxlcilbXCJib3JkZXJcIiArIGRpcmVjdGlvbi5wMiArIF9XaWR0aF0pIHx8IDAsXG5cdFx0XHRzZWxmID0gdGhpcyxcblx0XHRcdG9uUmVmcmVzaEluaXQgPSB2YXJzLm9uUmVmcmVzaEluaXQgJiYgKCgpID0+IHZhcnMub25SZWZyZXNoSW5pdChzZWxmKSksXG5cdFx0XHRnZXRTY3JvbGxlclNpemUgPSBfZ2V0U2l6ZUZ1bmMoc2Nyb2xsZXIsIGlzVmlld3BvcnQsIGRpcmVjdGlvbiksXG5cdFx0XHRnZXRTY3JvbGxlck9mZnNldHMgPSBfZ2V0T2Zmc2V0c0Z1bmMoc2Nyb2xsZXIsIGlzVmlld3BvcnQpLFxuXHRcdFx0bGFzdFNuYXAgPSAwLFxuXHRcdFx0bGFzdFJlZnJlc2ggPSAwLFxuXHRcdFx0cHJldlByb2dyZXNzID0gMCxcblx0XHRcdHNjcm9sbEZ1bmMgPSBfZ2V0U2Nyb2xsRnVuYyhzY3JvbGxlciwgZGlyZWN0aW9uKSxcblx0XHRcdHR3ZWVuVG8sIHBpbkNhY2hlLCBzbmFwRnVuYywgc2Nyb2xsMSwgc2Nyb2xsMiwgc3RhcnQsIGVuZCwgbWFya2VyU3RhcnQsIG1hcmtlckVuZCwgbWFya2VyU3RhcnRUcmlnZ2VyLCBtYXJrZXJFbmRUcmlnZ2VyLCBtYXJrZXJWYXJzLCBleGVjdXRpbmdPblJlZnJlc2gsXG5cdFx0XHRjaGFuZ2UsIHBpbk9yaWdpbmFsU3RhdGUsIHBpbkFjdGl2ZVN0YXRlLCBwaW5TdGF0ZSwgc3BhY2VyLCBvZmZzZXQsIHBpbkdldHRlciwgcGluU2V0dGVyLCBwaW5TdGFydCwgcGluQ2hhbmdlLCBzcGFjaW5nU3RhcnQsIHNwYWNlclN0YXRlLCBtYXJrZXJTdGFydFNldHRlciwgcGluTW92ZXMsXG5cdFx0XHRtYXJrZXJFbmRTZXR0ZXIsIGNzLCBzbmFwMSwgc25hcDIsIHNjcnViVHdlZW4sIHNjcnViU21vb3RoLCBzbmFwRHVyQ2xhbXAsIHNuYXBEZWxheWVkQ2FsbCwgcHJldlNjcm9sbCwgcHJldkFuaW1Qcm9ncmVzcywgY2FNYXJrZXJTZXR0ZXIsIGN1c3RvbVJldmVydFJldHVybjtcblxuXHRcdC8vIGZvciB0aGUgc2FrZSBvZiBlZmZpY2llbmN5LCBfc3RhcnRDbGFtcC9fZW5kQ2xhbXAgc2VydmUgbGlrZSBhIHRydXRoeSB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgY2xhbXBpbmcgd2FzIGVuYWJsZWQgb24gdGhlIHN0YXJ0L2VuZCwgYW5kIEFMU08gc3RvcmUgdGhlIGFjdHVhbCBwcmUtY2xhbXBlZCBudW1lcmljIHZhbHVlLiBXZSB0YXAgaW50byB0aGF0IGluIFNjcm9sbFNtb290aGVyIGZvciBzcGVlZCBlZmZlY3RzLiBTbyBmb3IgZXhhbXBsZSwgaWYgc3RhcnQ9XCJjbGFtcCh0b3AgYm90dG9tKVwiIHJlc3VsdHMgaW4gYSBzdGFydCBvZiAtMTAwIG5hdHVyYWxseSwgaXQgd291bGQgZ2V0IGNsYW1wZWQgdG8gMCBidXQgLTEwMCB3b3VsZCBiZSBzdG9yZWQgaW4gX3N0YXJ0Q2xhbXAuXG5cdFx0c2VsZi5fc3RhcnRDbGFtcCA9IHNlbGYuX2VuZENsYW1wID0gZmFsc2U7XG5cdFx0c2VsZi5fZGlyID0gZGlyZWN0aW9uO1xuXHRcdGFudGljaXBhdGVQaW4gKj0gNDU7XG5cdFx0c2VsZi5zY3JvbGxlciA9IHNjcm9sbGVyO1xuXHRcdHNlbGYuc2Nyb2xsID0gY29udGFpbmVyQW5pbWF0aW9uID8gY29udGFpbmVyQW5pbWF0aW9uLnRpbWUuYmluZChjb250YWluZXJBbmltYXRpb24pIDogc2Nyb2xsRnVuYztcblx0XHRzY3JvbGwxID0gc2Nyb2xsRnVuYygpO1xuXHRcdHNlbGYudmFycyA9IHZhcnM7XG5cdFx0YW5pbWF0aW9uID0gYW5pbWF0aW9uIHx8IHZhcnMuYW5pbWF0aW9uO1xuXHRcdGlmIChcInJlZnJlc2hQcmlvcml0eVwiIGluIHZhcnMpIHtcblx0XHRcdF9zb3J0ID0gMTtcblx0XHRcdHZhcnMucmVmcmVzaFByaW9yaXR5ID09PSAtOTk5OSAmJiAoX3ByaW1hcnkgPSBzZWxmKTsgLy8gdXNlZCBieSBTY3JvbGxTbW9vdGhlclxuXHRcdH1cblx0XHRzY3JvbGxlckNhY2hlLnR3ZWVuU2Nyb2xsID0gc2Nyb2xsZXJDYWNoZS50d2VlblNjcm9sbCB8fCB7XG5cdFx0XHR0b3A6IF9nZXRUd2VlbkNyZWF0b3Ioc2Nyb2xsZXIsIF92ZXJ0aWNhbCksXG5cdFx0XHRsZWZ0OiBfZ2V0VHdlZW5DcmVhdG9yKHNjcm9sbGVyLCBfaG9yaXpvbnRhbClcblx0XHR9O1xuXHRcdHNlbGYudHdlZW5UbyA9IHR3ZWVuVG8gPSBzY3JvbGxlckNhY2hlLnR3ZWVuU2Nyb2xsW2RpcmVjdGlvbi5wXTtcblx0XHRzZWxmLnNjcnViRHVyYXRpb24gPSB2YWx1ZSA9PiB7XG5cdFx0XHRzY3J1YlNtb290aCA9IF9pc051bWJlcih2YWx1ZSkgJiYgdmFsdWU7XG5cdFx0XHRpZiAoIXNjcnViU21vb3RoKSB7XG5cdFx0XHRcdHNjcnViVHdlZW4gJiYgc2NydWJUd2Vlbi5wcm9ncmVzcygxKS5raWxsKCk7XG5cdFx0XHRcdHNjcnViVHdlZW4gPSAwO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2NydWJUd2VlbiA/IHNjcnViVHdlZW4uZHVyYXRpb24odmFsdWUpIDogKHNjcnViVHdlZW4gPSBnc2FwLnRvKGFuaW1hdGlvbiwge2Vhc2U6IFwiZXhwb1wiLCB0b3RhbFByb2dyZXNzOiBcIis9MFwiLCBpbmhlcml0OiBmYWxzZSwgZHVyYXRpb246IHNjcnViU21vb3RoLCBwYXVzZWQ6IHRydWUsIG9uQ29tcGxldGU6ICgpID0+IG9uU2NydWJDb21wbGV0ZSAmJiBvblNjcnViQ29tcGxldGUoc2VsZil9KSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRpZiAoYW5pbWF0aW9uKSB7XG5cdFx0XHRhbmltYXRpb24udmFycy5sYXp5ID0gZmFsc2U7XG5cdFx0XHQoYW5pbWF0aW9uLl9pbml0dGVkICYmICFzZWxmLmlzUmV2ZXJ0ZWQpIHx8IChhbmltYXRpb24udmFycy5pbW1lZGlhdGVSZW5kZXIgIT09IGZhbHNlICYmIHZhcnMuaW1tZWRpYXRlUmVuZGVyICE9PSBmYWxzZSAmJiBhbmltYXRpb24uZHVyYXRpb24oKSAmJiBhbmltYXRpb24ucmVuZGVyKDAsIHRydWUsIHRydWUpKTsgLy8gc3BlY2lhbCBjYXNlOiBpZiB0aGlzIFNjcm9sbFRyaWdnZXIgZ2V0cyByZS1pbml0dGVkLCBhIGZyb20oKSB0d2VlbiB3aXRoIGEgc3RhZ2dlciBjb3VsZCBnZXQgaW5pdHRlZCBpbml0aWFsbHkgYW5kIHRoZW4gcmV2ZXJ0ZWQgb24gdGhlIHJlLWluaXQgd2hpY2ggbWVhbnMgaXQnbGwgbmVlZCB0byBnZXQgcmVuZGVyZWQgYWdhaW4gaGVyZSB0byBwcm9wZXJseSBkaXNwbGF5IHRoaW5ncy4gT3RoZXJ3aXNlLCBTZWUgaHR0cHM6Ly9nc2FwLmNvbS9mb3J1bXMvdG9waWMvMzY3Nzctc2Nyb2xsc21vb3RoZXItc3BsaXR0ZXh0LW5leHRqcy8gYW5kIGh0dHBzOi8vY29kZXBlbi5pby9HcmVlblNvY2svcGVuL2VZUHlQcGQ/ZWRpdG9ycz0wMDEwXG5cdFx0XHRzZWxmLmFuaW1hdGlvbiA9IGFuaW1hdGlvbi5wYXVzZSgpO1xuXHRcdFx0YW5pbWF0aW9uLnNjcm9sbFRyaWdnZXIgPSBzZWxmO1xuXHRcdFx0c2VsZi5zY3J1YkR1cmF0aW9uKHNjcnViKTtcblx0XHRcdHNuYXAxID0gMDtcblx0XHRcdGlkIHx8IChpZCA9IGFuaW1hdGlvbi52YXJzLmlkKTtcblx0XHR9XG5cblx0XHRpZiAoc25hcCkge1xuXHRcdFx0Ly8gVE9ETzogcG90ZW50aWFsIGlkZWE6IHVzZSBsZWdpdGltYXRlIENTUyBzY3JvbGwgc25hcHBpbmcgYnkgcHVzaGluZyBpbnZpc2libGUgZWxlbWVudHMgaW50byB0aGUgRE9NIHRoYXQgc2VydmUgYXMgc25hcCBwb3NpdGlvbnMsIGFuZCB0b2dnbGUgdGhlIGRvY3VtZW50LnNjcm9sbGluZ0VsZW1lbnQuc3R5bGUuc2Nyb2xsU25hcFR5cGUgb25Ub2dnbGUuIFNlZSBodHRwczovL2NvZGVwZW4uaW8vR3JlZW5Tb2NrL3Blbi9KakxyZ1dNIGZvciBhIHF1aWNrIHByb29mIG9mIGNvbmNlcHQuXG5cdFx0XHRpZiAoIV9pc09iamVjdChzbmFwKSB8fCBzbmFwLnB1c2gpIHtcblx0XHRcdFx0c25hcCA9IHtzbmFwVG86IHNuYXB9O1xuXHRcdFx0fVxuXHRcdFx0KFwic2Nyb2xsQmVoYXZpb3JcIiBpbiBfYm9keS5zdHlsZSkgJiYgZ3NhcC5zZXQoaXNWaWV3cG9ydCA/IFtfYm9keSwgX2RvY0VsXSA6IHNjcm9sbGVyLCB7c2Nyb2xsQmVoYXZpb3I6IFwiYXV0b1wifSk7IC8vIHNtb290aCBzY3JvbGxpbmcgZG9lc24ndCB3b3JrIHdpdGggc25hcC5cblx0XHRcdF9zY3JvbGxlcnMuZm9yRWFjaChvID0+IF9pc0Z1bmN0aW9uKG8pICYmIG8udGFyZ2V0ID09PSAoaXNWaWV3cG9ydCA/IF9kb2Muc2Nyb2xsaW5nRWxlbWVudCB8fCBfZG9jRWwgOiBzY3JvbGxlcikgJiYgKG8uc21vb3RoID0gZmFsc2UpKTsgLy8gbm90ZTogc2V0IHNtb290aCB0byBmYWxzZSBvbiBib3RoIHRoZSB2ZXJ0aWNhbCBhbmQgaG9yaXpvbnRhbCBzY3JvbGwgZ2V0dGVycy9zZXR0ZXJzXG5cdFx0XHRzbmFwRnVuYyA9IF9pc0Z1bmN0aW9uKHNuYXAuc25hcFRvKSA/IHNuYXAuc25hcFRvIDogc25hcC5zbmFwVG8gPT09IFwibGFiZWxzXCIgPyBfZ2V0Q2xvc2VzdExhYmVsKGFuaW1hdGlvbikgOiBzbmFwLnNuYXBUbyA9PT0gXCJsYWJlbHNEaXJlY3Rpb25hbFwiID8gX2dldExhYmVsQXREaXJlY3Rpb24oYW5pbWF0aW9uKSA6IHNuYXAuZGlyZWN0aW9uYWwgIT09IGZhbHNlID8gKHZhbHVlLCBzdCkgPT4gX3NuYXBEaXJlY3Rpb25hbChzbmFwLnNuYXBUbykodmFsdWUsIF9nZXRUaW1lKCkgLSBsYXN0UmVmcmVzaCA8IDUwMCA/IDAgOiBzdC5kaXJlY3Rpb24pIDogZ3NhcC51dGlscy5zbmFwKHNuYXAuc25hcFRvKTtcblx0XHRcdHNuYXBEdXJDbGFtcCA9IHNuYXAuZHVyYXRpb24gfHwge21pbjogMC4xLCBtYXg6IDJ9O1xuXHRcdFx0c25hcER1ckNsYW1wID0gX2lzT2JqZWN0KHNuYXBEdXJDbGFtcCkgPyBfY2xhbXAoc25hcER1ckNsYW1wLm1pbiwgc25hcER1ckNsYW1wLm1heCkgOiBfY2xhbXAoc25hcER1ckNsYW1wLCBzbmFwRHVyQ2xhbXApO1xuXHRcdFx0c25hcERlbGF5ZWRDYWxsID0gZ3NhcC5kZWxheWVkQ2FsbChzbmFwLmRlbGF5IHx8IChzY3J1YlNtb290aCAvIDIpIHx8IDAuMSwgKCkgPT4ge1xuXHRcdFx0XHRsZXQgc2Nyb2xsID0gc2Nyb2xsRnVuYygpLFxuXHRcdFx0XHRcdHJlZnJlc2hlZFJlY2VudGx5ID0gX2dldFRpbWUoKSAtIGxhc3RSZWZyZXNoIDwgNTAwLFxuXHRcdFx0XHRcdHR3ZWVuID0gdHdlZW5Uby50d2Vlbjtcblx0XHRcdFx0aWYgKChyZWZyZXNoZWRSZWNlbnRseSB8fCBNYXRoLmFicyhzZWxmLmdldFZlbG9jaXR5KCkpIDwgMTApICYmICF0d2VlbiAmJiAhX3BvaW50ZXJJc0Rvd24gJiYgbGFzdFNuYXAgIT09IHNjcm9sbCkge1xuXHRcdFx0XHRcdGxldCBwcm9ncmVzcyA9IChzY3JvbGwgLSBzdGFydCkgLyBjaGFuZ2UsIC8vIGRvbid0IHVzZSBzZWxmLnByb2dyZXNzIGJlY2F1c2UgdGhpcyBtaWdodCBydW4gYmV0d2VlbiB0aGUgcmVmcmVzaCgpIGFuZCB3aGVuIHRoZSBzY3JvbGwgcG9zaXRpb24gdXBkYXRlcyBhbmQgc2VsZi5wcm9ncmVzcyBpcyBzZXQgcHJvcGVybHkgaW4gdGhlIHVwZGF0ZSgpIG1ldGhvZC5cblx0XHRcdFx0XHRcdHRvdGFsUHJvZ3Jlc3MgPSBhbmltYXRpb24gJiYgIWlzVG9nZ2xlID8gYW5pbWF0aW9uLnRvdGFsUHJvZ3Jlc3MoKSA6IHByb2dyZXNzLFxuXHRcdFx0XHRcdFx0dmVsb2NpdHkgPSByZWZyZXNoZWRSZWNlbnRseSA/IDAgOiAoKHRvdGFsUHJvZ3Jlc3MgLSBzbmFwMikgLyAoX2dldFRpbWUoKSAtIF90aW1lMikgKiAxMDAwKSB8fCAwLFxuXHRcdFx0XHRcdFx0Y2hhbmdlMSA9IGdzYXAudXRpbHMuY2xhbXAoLXByb2dyZXNzLCAxIC0gcHJvZ3Jlc3MsIF9hYnModmVsb2NpdHkgLyAyKSAqIHZlbG9jaXR5IC8gMC4xODUpLFxuXHRcdFx0XHRcdFx0bmF0dXJhbEVuZCA9IHByb2dyZXNzICsgKHNuYXAuaW5lcnRpYSA9PT0gZmFsc2UgPyAwIDogY2hhbmdlMSksXG5cdFx0XHRcdFx0XHRlbmRWYWx1ZSwgZW5kU2Nyb2xsLFxuXHRcdFx0XHRcdFx0eyBvblN0YXJ0LCBvbkludGVycnVwdCwgb25Db21wbGV0ZSB9ID0gc25hcDtcblx0XHRcdFx0XHRlbmRWYWx1ZSA9IHNuYXBGdW5jKG5hdHVyYWxFbmQsIHNlbGYpO1xuXHRcdFx0XHRcdF9pc051bWJlcihlbmRWYWx1ZSkgfHwgKGVuZFZhbHVlID0gbmF0dXJhbEVuZCk7IC8vIGluIGNhc2UgdGhlIGZ1bmN0aW9uIGRpZG4ndCByZXR1cm4gYSBudW1iZXIsIGZhbGwgYmFjayB0byB1c2luZyB0aGUgbmF0dXJhbEVuZFxuXHRcdFx0XHRcdGVuZFNjcm9sbCA9IE1hdGgubWF4KDAsIE1hdGgucm91bmQoc3RhcnQgKyBlbmRWYWx1ZSAqIGNoYW5nZSkpO1xuXHRcdFx0XHRcdGlmIChzY3JvbGwgPD0gZW5kICYmIHNjcm9sbCA+PSBzdGFydCAmJiBlbmRTY3JvbGwgIT09IHNjcm9sbCkge1xuXHRcdFx0XHRcdFx0aWYgKHR3ZWVuICYmICF0d2Vlbi5faW5pdHRlZCAmJiB0d2Vlbi5kYXRhIDw9IF9hYnMoZW5kU2Nyb2xsIC0gc2Nyb2xsKSkgeyAvLyB0aGVyZSdzIGFuIG92ZXJsYXBwaW5nIHNuYXAhIFNvIHdlIG11c3QgZmlndXJlIG91dCB3aGljaCBvbmUgaXMgY2xvc2VyIGFuZCBsZXQgdGhhdCB0d2VlbiBsaXZlLlxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoc25hcC5pbmVydGlhID09PSBmYWxzZSkge1xuXHRcdFx0XHRcdFx0XHRjaGFuZ2UxID0gZW5kVmFsdWUgLSBwcm9ncmVzcztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHR3ZWVuVG8oZW5kU2Nyb2xsLCB7XG5cdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiBzbmFwRHVyQ2xhbXAoX2FicyggKE1hdGgubWF4KF9hYnMobmF0dXJhbEVuZCAtIHRvdGFsUHJvZ3Jlc3MpLCBfYWJzKGVuZFZhbHVlIC0gdG90YWxQcm9ncmVzcykpICogMC4xODUgLyB2ZWxvY2l0eSAvIDAuMDUpIHx8IDApKSxcblx0XHRcdFx0XHRcdFx0ZWFzZTogc25hcC5lYXNlIHx8IFwicG93ZXIzXCIsXG5cdFx0XHRcdFx0XHRcdGRhdGE6IF9hYnMoZW5kU2Nyb2xsIC0gc2Nyb2xsKSwgLy8gcmVjb3JkIHRoZSBkaXN0YW5jZSBzbyB0aGF0IGlmIGFub3RoZXIgc25hcCB0d2VlbiBvY2N1cnMgKGNvbmZsaWN0KSB3ZSBjYW4gcHJpb3JpdGl6ZSB0aGUgY2xvc2VzdCBzbmFwLlxuXHRcdFx0XHRcdFx0XHRvbkludGVycnVwdDogKCkgPT4gc25hcERlbGF5ZWRDYWxsLnJlc3RhcnQodHJ1ZSkgJiYgb25JbnRlcnJ1cHQgJiYgb25JbnRlcnJ1cHQoc2VsZiksXG5cdFx0XHRcdFx0XHRcdG9uQ29tcGxldGUoKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2VsZi51cGRhdGUoKTtcblx0XHRcdFx0XHRcdFx0XHRsYXN0U25hcCA9IHNjcm9sbEZ1bmMoKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYW5pbWF0aW9uICYmICFpc1RvZ2dsZSkgeyAvLyB0aGUgcmVzb2x1dGlvbiBvZiB0aGUgc2Nyb2xsYmFyIGlzIGxpbWl0ZWQsIHNvIHdlIHNob3VsZCBjb3JyZWN0IHRoZSBzY3J1YmJlZCBhbmltYXRpb24ncyBwbGF5aGVhZCBhdCB0aGUgZW5kIHRvIG1hdGNoIEVYQUNUTFkgd2hlcmUgaXQgd2FzIHN1cHBvc2VkIHRvIHNuYXBcblx0XHRcdFx0XHRcdFx0XHRcdHNjcnViVHdlZW4gPyBzY3J1YlR3ZWVuLnJlc2V0VG8oXCJ0b3RhbFByb2dyZXNzXCIsIGVuZFZhbHVlLCBhbmltYXRpb24uX3RUaW1lIC8gYW5pbWF0aW9uLl90RHVyKSA6IGFuaW1hdGlvbi5wcm9ncmVzcyhlbmRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHNuYXAxID0gc25hcDIgPSBhbmltYXRpb24gJiYgIWlzVG9nZ2xlID8gYW5pbWF0aW9uLnRvdGFsUHJvZ3Jlc3MoKSA6IHNlbGYucHJvZ3Jlc3M7XG5cdFx0XHRcdFx0XHRcdFx0b25TbmFwQ29tcGxldGUgJiYgb25TbmFwQ29tcGxldGUoc2VsZik7XG5cdFx0XHRcdFx0XHRcdFx0b25Db21wbGV0ZSAmJiBvbkNvbXBsZXRlKHNlbGYpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LCBzY3JvbGwsIGNoYW5nZTEgKiBjaGFuZ2UsIGVuZFNjcm9sbCAtIHNjcm9sbCAtIGNoYW5nZTEgKiBjaGFuZ2UpO1xuXHRcdFx0XHRcdFx0b25TdGFydCAmJiBvblN0YXJ0KHNlbGYsIHR3ZWVuVG8udHdlZW4pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChzZWxmLmlzQWN0aXZlICYmIGxhc3RTbmFwICE9PSBzY3JvbGwpIHtcblx0XHRcdFx0XHRzbmFwRGVsYXllZENhbGwucmVzdGFydCh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSkucGF1c2UoKTtcblx0XHR9XG5cdFx0aWQgJiYgKF9pZHNbaWRdID0gc2VsZik7XG5cdFx0dHJpZ2dlciA9IHNlbGYudHJpZ2dlciA9IF9nZXRUYXJnZXQodHJpZ2dlciB8fCAocGluICE9PSB0cnVlICYmIHBpbikpO1xuXG5cdFx0Ly8gaWYgYSB0cmlnZ2VyIGhhcyBzb21lIGtpbmQgb2Ygc2Nyb2xsLXJlbGF0ZWQgZWZmZWN0IGFwcGxpZWQgdGhhdCBjb3VsZCBjb250YW1pbmF0ZSB0aGUgXCJ5XCIgb3IgXCJ4XCIgcG9zaXRpb24gKGxpa2UgYSBTY3JvbGxTbW9vdGhlciBlZmZlY3QpLCB3ZSBuZWVkZWQgYSB3YXkgdG8gdGVtcG9yYXJpbHkgcmV2ZXJ0IGl0LCBzbyB3ZSB1c2UgdGhlIHN0UmV2ZXJ0IHByb3BlcnR5IG9mIHRoZSBnc0NhY2hlLiBJdCBjYW4gcmV0dXJuIGFub3RoZXIgZnVuY3Rpb24gdGhhdCB3ZSdsbCBjYWxsIGF0IHRoZSBlbmQgc28gaXQgY2FuIHJldHVybiB0byBpdHMgbm9ybWFsIHN0YXRlLlxuXHRcdGN1c3RvbVJldmVydFJldHVybiA9IHRyaWdnZXIgJiYgdHJpZ2dlci5fZ3NhcCAmJiB0cmlnZ2VyLl9nc2FwLnN0UmV2ZXJ0O1xuXHRcdGN1c3RvbVJldmVydFJldHVybiAmJiAoY3VzdG9tUmV2ZXJ0UmV0dXJuID0gY3VzdG9tUmV2ZXJ0UmV0dXJuKHNlbGYpKTtcblxuXHRcdHBpbiA9IHBpbiA9PT0gdHJ1ZSA/IHRyaWdnZXIgOiBfZ2V0VGFyZ2V0KHBpbik7XG5cdFx0X2lzU3RyaW5nKHRvZ2dsZUNsYXNzKSAmJiAodG9nZ2xlQ2xhc3MgPSB7dGFyZ2V0czogdHJpZ2dlciwgY2xhc3NOYW1lOiB0b2dnbGVDbGFzc30pO1xuXHRcdGlmIChwaW4pIHtcblx0XHRcdChwaW5TcGFjaW5nID09PSBmYWxzZSB8fCBwaW5TcGFjaW5nID09PSBfbWFyZ2luKSB8fCAocGluU3BhY2luZyA9ICFwaW5TcGFjaW5nICYmIHBpbi5wYXJlbnROb2RlICYmIHBpbi5wYXJlbnROb2RlLnN0eWxlICYmIF9nZXRDb21wdXRlZFN0eWxlKHBpbi5wYXJlbnROb2RlKS5kaXNwbGF5ID09PSBcImZsZXhcIiA/IGZhbHNlIDogX3BhZGRpbmcpOyAvLyBpZiB0aGUgcGFyZW50IGlzIGRpc3BsYXk6IGZsZXgsIGRvbid0IGFwcGx5IHBpblNwYWNpbmcgYnkgZGVmYXVsdC4gV2Ugc2hvdWxkIGNoZWNrIHRoYXQgcGluLnBhcmVudE5vZGUgaXMgYW4gZWxlbWVudCAobm90IHNoYWRvdyBkb20gd2luZG93KVxuXHRcdFx0c2VsZi5waW4gPSBwaW47XG5cdFx0XHRwaW5DYWNoZSA9IGdzYXAuY29yZS5nZXRDYWNoZShwaW4pO1xuXHRcdFx0aWYgKCFwaW5DYWNoZS5zcGFjZXIpIHsgLy8gcmVjb3JkIHRoZSBzcGFjZXIgYW5kIHBpbk9yaWdpbmFsU3RhdGUgb24gdGhlIGNhY2hlIGluIGNhc2Ugc29tZW9uZSB0cmllcyBwaW5uaW5nIHRoZSBzYW1lIGVsZW1lbnQgd2l0aCBNVUxUSVBMRSBTY3JvbGxUcmlnZ2VycyAtIHdlIGRvbid0IHdhbnQgdG8gaGF2ZSBtdWx0aXBsZSBzcGFjZXJzIG9yIHJlY29yZCB0aGUgXCJvcmlnaW5hbFwiIHBpbiBzdGF0ZSBhZnRlciBpdCBoYXMgYWxyZWFkeSBiZWVuIGFmZmVjdGVkIGJ5IGFub3RoZXIgU2Nyb2xsVHJpZ2dlci5cblx0XHRcdFx0aWYgKHBpblNwYWNlcikge1xuXHRcdFx0XHRcdHBpblNwYWNlciA9IF9nZXRUYXJnZXQocGluU3BhY2VyKTtcblx0XHRcdFx0XHRwaW5TcGFjZXIgJiYgIXBpblNwYWNlci5ub2RlVHlwZSAmJiAocGluU3BhY2VyID0gcGluU3BhY2VyLmN1cnJlbnQgfHwgcGluU3BhY2VyLm5hdGl2ZUVsZW1lbnQpOyAvLyBmb3IgUmVhY3QgJiBBbmd1bGFyXG5cdFx0XHRcdFx0cGluQ2FjaGUuc3BhY2VySXNOYXRpdmUgPSAhIXBpblNwYWNlcjtcblx0XHRcdFx0XHRwaW5TcGFjZXIgJiYgKHBpbkNhY2hlLnNwYWNlclN0YXRlID0gX2dldFN0YXRlKHBpblNwYWNlcikpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHBpbkNhY2hlLnNwYWNlciA9IHNwYWNlciA9IHBpblNwYWNlciB8fCBfZG9jLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cdFx0XHRcdHNwYWNlci5jbGFzc0xpc3QuYWRkKFwicGluLXNwYWNlclwiKTtcblx0XHRcdFx0aWQgJiYgc3BhY2VyLmNsYXNzTGlzdC5hZGQoXCJwaW4tc3BhY2VyLVwiICsgaWQpO1xuXHRcdFx0XHRwaW5DYWNoZS5waW5TdGF0ZSA9IHBpbk9yaWdpbmFsU3RhdGUgPSBfZ2V0U3RhdGUocGluKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBpbk9yaWdpbmFsU3RhdGUgPSBwaW5DYWNoZS5waW5TdGF0ZTtcblx0XHRcdH1cblx0XHRcdHZhcnMuZm9yY2UzRCAhPT0gZmFsc2UgJiYgZ3NhcC5zZXQocGluLCB7Zm9yY2UzRDogdHJ1ZX0pO1xuXHRcdFx0c2VsZi5zcGFjZXIgPSBzcGFjZXIgPSBwaW5DYWNoZS5zcGFjZXI7XG5cdFx0XHRjcyA9IF9nZXRDb21wdXRlZFN0eWxlKHBpbik7XG5cdFx0XHRzcGFjaW5nU3RhcnQgPSBjc1twaW5TcGFjaW5nICsgZGlyZWN0aW9uLm9zMl07XG5cdFx0XHRwaW5HZXR0ZXIgPSBnc2FwLmdldFByb3BlcnR5KHBpbik7XG5cdFx0XHRwaW5TZXR0ZXIgPSBnc2FwLnF1aWNrU2V0dGVyKHBpbiwgZGlyZWN0aW9uLmEsIF9weCk7XG5cdFx0XHQvLyBwaW4uZmlyc3RDaGlsZCAmJiAhX21heFNjcm9sbChwaW4sIGRpcmVjdGlvbikgJiYgKHBpbi5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCIpOyAvLyBwcm90ZWN0cyBmcm9tIGNvbGxhcHNpbmcgbWFyZ2lucywgYnV0IGNhbiBoYXZlIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzIGFzIGRlbW9uc3RyYXRlZCBoZXJlOiBodHRwczovL2NvZGVwZW4uaW8vR3JlZW5Tb2NrL3Blbi8xZTQyYzdhNzNiZmE0MDlkMmNmMWUxODRlN2E0MjQ4ZCBzbyBpdCB3YXMgcmVtb3ZlZCBpbiBmYXZvciBvZiBqdXN0IHRlbGxpbmcgcGVvcGxlIHRvIHNldCB1cCB0aGVpciBDU1MgdG8gYXZvaWQgdGhlIGNvbGxhcHNpbmcgbWFyZ2lucyAob3ZlcmZsb3c6IGhpZGRlbiB8IGF1dG8gaXMganVzdCBvbmUgb3B0aW9uLiBBbm90aGVyIGlzIGJvcmRlci10b3A6IDFweCBzb2xpZCB0cmFuc3BhcmVudCkuXG5cdFx0XHRfc3dhcFBpbkluKHBpbiwgc3BhY2VyLCBjcyk7XG5cdFx0XHRwaW5TdGF0ZSA9IF9nZXRTdGF0ZShwaW4pO1xuXHRcdH1cblx0XHRpZiAobWFya2Vycykge1xuXHRcdFx0bWFya2VyVmFycyA9IF9pc09iamVjdChtYXJrZXJzKSA/IF9zZXREZWZhdWx0cyhtYXJrZXJzLCBfbWFya2VyRGVmYXVsdHMpIDogX21hcmtlckRlZmF1bHRzO1xuXHRcdFx0bWFya2VyU3RhcnRUcmlnZ2VyID0gX2NyZWF0ZU1hcmtlcihcInNjcm9sbGVyLXN0YXJ0XCIsIGlkLCBzY3JvbGxlciwgZGlyZWN0aW9uLCBtYXJrZXJWYXJzLCAwKTtcblx0XHRcdG1hcmtlckVuZFRyaWdnZXIgPSBfY3JlYXRlTWFya2VyKFwic2Nyb2xsZXItZW5kXCIsIGlkLCBzY3JvbGxlciwgZGlyZWN0aW9uLCBtYXJrZXJWYXJzLCAwLCBtYXJrZXJTdGFydFRyaWdnZXIpO1xuXHRcdFx0b2Zmc2V0ID0gbWFya2VyU3RhcnRUcmlnZ2VyW1wib2Zmc2V0XCIgKyBkaXJlY3Rpb24ub3AuZDJdO1xuXHRcdFx0bGV0IGNvbnRlbnQgPSBfZ2V0VGFyZ2V0KF9nZXRQcm94eVByb3Aoc2Nyb2xsZXIsIFwiY29udGVudFwiKSB8fCBzY3JvbGxlcik7XG5cdFx0XHRtYXJrZXJTdGFydCA9IHRoaXMubWFya2VyU3RhcnQgPSBfY3JlYXRlTWFya2VyKFwic3RhcnRcIiwgaWQsIGNvbnRlbnQsIGRpcmVjdGlvbiwgbWFya2VyVmFycywgb2Zmc2V0LCAwLCBjb250YWluZXJBbmltYXRpb24pO1xuXHRcdFx0bWFya2VyRW5kID0gdGhpcy5tYXJrZXJFbmQgPSBfY3JlYXRlTWFya2VyKFwiZW5kXCIsIGlkLCBjb250ZW50LCBkaXJlY3Rpb24sIG1hcmtlclZhcnMsIG9mZnNldCwgMCwgY29udGFpbmVyQW5pbWF0aW9uKTtcblx0XHRcdGNvbnRhaW5lckFuaW1hdGlvbiAmJiAoY2FNYXJrZXJTZXR0ZXIgPSBnc2FwLnF1aWNrU2V0dGVyKFttYXJrZXJTdGFydCwgbWFya2VyRW5kXSwgZGlyZWN0aW9uLmEsIF9weCkpO1xuXHRcdFx0aWYgKCghdXNlRml4ZWRQb3NpdGlvbiAmJiAhKF9wcm94aWVzLmxlbmd0aCAmJiBfZ2V0UHJveHlQcm9wKHNjcm9sbGVyLCBcImZpeGVkTWFya2Vyc1wiKSA9PT0gdHJ1ZSkpKSB7XG5cdFx0XHRcdF9tYWtlUG9zaXRpb25hYmxlKGlzVmlld3BvcnQgPyBfYm9keSA6IHNjcm9sbGVyKTtcblx0XHRcdFx0Z3NhcC5zZXQoW21hcmtlclN0YXJ0VHJpZ2dlciwgbWFya2VyRW5kVHJpZ2dlcl0sIHtmb3JjZTNEOiB0cnVlfSk7XG5cdFx0XHRcdG1hcmtlclN0YXJ0U2V0dGVyID0gZ3NhcC5xdWlja1NldHRlcihtYXJrZXJTdGFydFRyaWdnZXIsIGRpcmVjdGlvbi5hLCBfcHgpO1xuXHRcdFx0XHRtYXJrZXJFbmRTZXR0ZXIgPSBnc2FwLnF1aWNrU2V0dGVyKG1hcmtlckVuZFRyaWdnZXIsIGRpcmVjdGlvbi5hLCBfcHgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChjb250YWluZXJBbmltYXRpb24pIHtcblx0XHRcdGxldCBvbGRPblVwZGF0ZSA9IGNvbnRhaW5lckFuaW1hdGlvbi52YXJzLm9uVXBkYXRlLFxuXHRcdFx0XHRvbGRQYXJhbXMgPSBjb250YWluZXJBbmltYXRpb24udmFycy5vblVwZGF0ZVBhcmFtcztcblx0XHRcdGNvbnRhaW5lckFuaW1hdGlvbi5ldmVudENhbGxiYWNrKFwib25VcGRhdGVcIiwgKCkgPT4ge1xuXHRcdFx0XHRzZWxmLnVwZGF0ZSgwLCAwLCAxKTtcblx0XHRcdFx0b2xkT25VcGRhdGUgJiYgb2xkT25VcGRhdGUuYXBwbHkoY29udGFpbmVyQW5pbWF0aW9uLCBvbGRQYXJhbXMgfHwgW10pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0c2VsZi5wcmV2aW91cyA9ICgpID0+IF90cmlnZ2Vyc1tfdHJpZ2dlcnMuaW5kZXhPZihzZWxmKSAtIDFdO1xuXHRcdHNlbGYubmV4dCA9ICgpID0+IF90cmlnZ2Vyc1tfdHJpZ2dlcnMuaW5kZXhPZihzZWxmKSArIDFdO1xuXG5cdFx0c2VsZi5yZXZlcnQgPSAocmV2ZXJ0LCB0ZW1wKSA9PiB7XG5cdFx0XHRpZiAoIXRlbXApIHsgcmV0dXJuIHNlbGYua2lsbCh0cnVlKTsgfSAvLyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGdzYXAuY29udGV4dCgpIGFuZCBnc2FwLm1hdGNoTWVkaWEoKSB3aGljaCBjYWxsIHJldmVydCgpXG5cdFx0XHRsZXQgciA9IHJldmVydCAhPT0gZmFsc2UgfHwgIXNlbGYuZW5hYmxlZCxcblx0XHRcdFx0cHJldlJlZnJlc2hpbmcgPSBfcmVmcmVzaGluZztcblx0XHRcdGlmIChyICE9PSBzZWxmLmlzUmV2ZXJ0ZWQpIHtcblx0XHRcdFx0aWYgKHIpIHtcblx0XHRcdFx0XHRwcmV2U2Nyb2xsID0gTWF0aC5tYXgoc2Nyb2xsRnVuYygpLCBzZWxmLnNjcm9sbC5yZWMgfHwgMCk7IC8vIHJlY29yZCB0aGUgc2Nyb2xsIHNvIHdlIGNhbiByZXZlcnQgbGF0ZXIgKHJlcG9zaXRpb25pbmcvcGlubmluZyB0aGluZ3MgY2FuIGFmZmVjdCBzY3JvbGwgcG9zaXRpb24pLiBJbiB0aGUgc3RhdGljIHJlZnJlc2goKSBtZXRob2QsIHdlIGZpcnN0IHJlY29yZCBhbGwgdGhlIHNjcm9sbCBwb3NpdGlvbnMgYXMgYSByZWZlcmVuY2UuXG5cdFx0XHRcdFx0cHJldlByb2dyZXNzID0gc2VsZi5wcm9ncmVzcztcblx0XHRcdFx0XHRwcmV2QW5pbVByb2dyZXNzID0gYW5pbWF0aW9uICYmIGFuaW1hdGlvbi5wcm9ncmVzcygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1hcmtlclN0YXJ0ICYmIFttYXJrZXJTdGFydCwgbWFya2VyRW5kLCBtYXJrZXJTdGFydFRyaWdnZXIsIG1hcmtlckVuZFRyaWdnZXJdLmZvckVhY2gobSA9PiBtLnN0eWxlLmRpc3BsYXkgPSByID8gXCJub25lXCIgOiBcImJsb2NrXCIpO1xuXHRcdFx0XHRpZiAocikge1xuXHRcdFx0XHRcdF9yZWZyZXNoaW5nID0gc2VsZjtcblx0XHRcdFx0XHRzZWxmLnVwZGF0ZShyKTsgLy8gbWFrZSBzdXJlIHRoZSBwaW4gaXMgYmFjayBpbiBpdHMgb3JpZ2luYWwgcG9zaXRpb24gc28gdGhhdCBhbGwgdGhlIG1lYXN1cmVtZW50cyBhcmUgY29ycmVjdC4gZG8gdGhpcyBCRUZPUkUgc3dhcHBpbmcgdGhlIHBpbiBvdXRcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocGluICYmICghcGluUmVwYXJlbnQgfHwgIXNlbGYuaXNBY3RpdmUpKSB7XG5cdFx0XHRcdFx0aWYgKHIpIHtcblx0XHRcdFx0XHRcdF9zd2FwUGluT3V0KHBpbiwgc3BhY2VyLCBwaW5PcmlnaW5hbFN0YXRlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0X3N3YXBQaW5JbihwaW4sIHNwYWNlciwgX2dldENvbXB1dGVkU3R5bGUocGluKSwgc3BhY2VyU3RhdGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyIHx8IHNlbGYudXBkYXRlKHIpOyAvLyB3aGVuIHdlJ3JlIHJlc3RvcmluZywgdGhlIHVwZGF0ZSBzaG91bGQgcnVuIEFGVEVSIHN3YXBwaW5nIHRoZSBwaW4gaW50byBpdHMgcGluLXNwYWNlci5cblx0XHRcdFx0X3JlZnJlc2hpbmcgPSBwcmV2UmVmcmVzaGluZzsgLy8gcmVzdG9yZS4gV2Ugc2V0IGl0IHRvIHRydWUgZHVyaW5nIHRoZSB1cGRhdGUoKSBzbyB0aGF0IHRoaW5ncyBmaXJlIHByb3Blcmx5IGluIHRoZXJlLlxuXHRcdFx0XHRzZWxmLmlzUmV2ZXJ0ZWQgPSByO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHNlbGYucmVmcmVzaCA9IChzb2Z0LCBmb3JjZSwgcG9zaXRpb24sIHBpbk9mZnNldCkgPT4geyAvLyBwb3NpdGlvbiBpcyB0eXBpY2FsbHkgb25seSBkZWZpbmVkIGlmIGl0J3MgY29taW5nIGZyb20gc2V0UG9zaXRpb25zKCkgLSBpdCdzIGEgd2F5IHRvIHNraXAgdGhlIG5vcm1hbCBwYXJzaW5nLiBwaW5PZmZzZXQgaXMgYWxzbyBvbmx5IGZyb20gc2V0UG9zaXRpb25zKCkgYW5kIGlzIG1vc3RseSByZWxhdGVkIHRvIGZhbmN5IHN0dWZmIHdlIG5lZWQgdG8gZG8gaW4gU2Nyb2xsU21vb3RoZXIgd2l0aCBlZmZlY3RzXG5cdFx0XHRpZiAoKF9yZWZyZXNoaW5nIHx8ICFzZWxmLmVuYWJsZWQpICYmICFmb3JjZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRpZiAocGluICYmIHNvZnQgJiYgX2xhc3RTY3JvbGxUaW1lKSB7XG5cdFx0XHRcdF9hZGRMaXN0ZW5lcihTY3JvbGxUcmlnZ2VyLCBcInNjcm9sbEVuZFwiLCBfc29mdFJlZnJlc2gpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQhX3JlZnJlc2hpbmdBbGwgJiYgb25SZWZyZXNoSW5pdCAmJiBvblJlZnJlc2hJbml0KHNlbGYpO1xuXHRcdFx0X3JlZnJlc2hpbmcgPSBzZWxmO1xuXHRcdFx0aWYgKHR3ZWVuVG8udHdlZW4gJiYgIXBvc2l0aW9uKSB7IC8vIHdlIHNraXAgdGhpcyBpZiBhIHBvc2l0aW9uIGlzIHBhc3NlZCBpbiBiZWNhdXNlIHR5cGljYWxseSB0aGF0J3MgZnJvbSAuc2V0UG9zaXRpb25zKCkgYW5kIGl0J3MgYmVzdCB0byBhbGxvdyBpbi1wcm9ncmVzcyBzbmFwcGluZyB0byBjb250aW51ZS5cblx0XHRcdFx0dHdlZW5Uby50d2Vlbi5raWxsKCk7XG5cdFx0XHRcdHR3ZWVuVG8udHdlZW4gPSAwO1xuXHRcdFx0fVxuXHRcdFx0c2NydWJUd2VlbiAmJiBzY3J1YlR3ZWVuLnBhdXNlKCk7XG5cdFx0XHRpbnZhbGlkYXRlT25SZWZyZXNoICYmIGFuaW1hdGlvbiAmJiBhbmltYXRpb24ucmV2ZXJ0KHtraWxsOiBmYWxzZX0pLmludmFsaWRhdGUoKTtcblx0XHRcdHNlbGYuaXNSZXZlcnRlZCB8fCBzZWxmLnJldmVydCh0cnVlLCB0cnVlKTtcblx0XHRcdHNlbGYuX3N1YlBpbk9mZnNldCA9IGZhbHNlOyAvLyB3ZSdsbCBzZXQgdGhpcyB0byB0cnVlIGluIHRoZSBzdWItcGlucyBpZiB3ZSBmaW5kIGFueVxuXHRcdFx0bGV0IHNpemUgPSBnZXRTY3JvbGxlclNpemUoKSxcblx0XHRcdFx0c2Nyb2xsZXJCb3VuZHMgPSBnZXRTY3JvbGxlck9mZnNldHMoKSxcblx0XHRcdFx0bWF4ID0gY29udGFpbmVyQW5pbWF0aW9uID8gY29udGFpbmVyQW5pbWF0aW9uLmR1cmF0aW9uKCkgOiBfbWF4U2Nyb2xsKHNjcm9sbGVyLCBkaXJlY3Rpb24pLFxuXHRcdFx0XHRpc0ZpcnN0UmVmcmVzaCA9IGNoYW5nZSA8PSAwLjAxLFxuXHRcdFx0XHRvZmZzZXQgPSAwLFxuXHRcdFx0XHRvdGhlclBpbk9mZnNldCA9IHBpbk9mZnNldCB8fCAwLFxuXHRcdFx0XHRwYXJzZWRFbmQgPSBfaXNPYmplY3QocG9zaXRpb24pID8gcG9zaXRpb24uZW5kIDogdmFycy5lbmQsXG5cdFx0XHRcdHBhcnNlZEVuZFRyaWdnZXIgPSB2YXJzLmVuZFRyaWdnZXIgfHwgdHJpZ2dlcixcblx0XHRcdFx0cGFyc2VkU3RhcnQgPSBfaXNPYmplY3QocG9zaXRpb24pID8gcG9zaXRpb24uc3RhcnQgOiAodmFycy5zdGFydCB8fCAodmFycy5zdGFydCA9PT0gMCB8fCAhdHJpZ2dlciA/IDAgOiAocGluID8gXCIwIDBcIiA6IFwiMCAxMDAlXCIpKSksXG5cdFx0XHRcdHBpbm5lZENvbnRhaW5lciA9IHNlbGYucGlubmVkQ29udGFpbmVyID0gdmFycy5waW5uZWRDb250YWluZXIgJiYgX2dldFRhcmdldCh2YXJzLnBpbm5lZENvbnRhaW5lciwgc2VsZiksXG5cdFx0XHRcdHRyaWdnZXJJbmRleCA9ICh0cmlnZ2VyICYmIE1hdGgubWF4KDAsIF90cmlnZ2Vycy5pbmRleE9mKHNlbGYpKSkgfHwgMCxcblx0XHRcdFx0aSA9IHRyaWdnZXJJbmRleCxcblx0XHRcdFx0Y3MsIGJvdW5kcywgc2Nyb2xsLCBpc1ZlcnRpY2FsLCBvdmVycmlkZSwgY3VyVHJpZ2dlciwgY3VyUGluLCBvcHBvc2l0ZVNjcm9sbCwgaW5pdHRlZCwgcmV2ZXJ0ZWRQaW5zLCBmb3JjZWRPdmVyZmxvdywgbWFya2VyU3RhcnRPZmZzZXQsIG1hcmtlckVuZE9mZnNldDtcblx0XHRcdGlmIChtYXJrZXJzICYmIF9pc09iamVjdChwb3NpdGlvbikpIHsgLy8gaWYgd2UgYWx0ZXIgdGhlIHN0YXJ0L2VuZCBwb3NpdGlvbnMgd2l0aCAuc2V0UG9zaXRpb25zKCksIGl0IGdlbmVyYWxseSBmZWVkcyBpbiBhYnNvbHV0ZSBOVU1CRVJTIHdoaWNoIGRvbid0IGNvbnZleSBpbmZvcm1hdGlvbiBhYm91dCB3aGVyZSB0byBsaW5lIHVwIHRoZSBtYXJrZXJzLCBzbyB0byBrZWVwIGl0IGludHVpdGl2ZSwgd2UgcmVjb3JkIGhvdyBmYXIgdGhlIHRyaWdnZXIgcG9zaXRpb25zIHNoaWZ0IGFmdGVyIGFwcGx5aW5nIHRoZSBuZXcgbnVtYmVycyBhbmQgdGhlbiBvZmZzZXQgYnkgdGhhdCBtdWNoIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uIFdlIGRvIHRoZSBzYW1lIHRvIHRoZSBhc3NvY2lhdGVkIHRyaWdnZXIgbWFya2VycyB0b28gb2YgY291cnNlLlxuXHRcdFx0XHRtYXJrZXJTdGFydE9mZnNldCA9IGdzYXAuZ2V0UHJvcGVydHkobWFya2VyU3RhcnRUcmlnZ2VyLCBkaXJlY3Rpb24ucCk7XG5cdFx0XHRcdG1hcmtlckVuZE9mZnNldCA9IGdzYXAuZ2V0UHJvcGVydHkobWFya2VyRW5kVHJpZ2dlciwgZGlyZWN0aW9uLnApO1xuXHRcdFx0fVxuXHRcdFx0d2hpbGUgKGktLSA+IDApIHsgLy8gdXNlciBtaWdodCB0cnkgdG8gcGluIHRoZSBzYW1lIGVsZW1lbnQgbW9yZSB0aGFuIG9uY2UsIHNvIHdlIG11c3QgZmluZCBhbnkgcHJpb3IgdHJpZ2dlcnMgd2l0aCB0aGUgc2FtZSBwaW4sIHJldmVydCB0aGVtLCBhbmQgZGV0ZXJtaW5lIGhvdyBsb25nIHRoZXkncmUgcGlubmluZyBzbyB0aGF0IHdlIGNhbiBvZmZzZXQgdGhpbmdzIGFwcHJvcHJpYXRlbHkuIE1ha2Ugc3VyZSB3ZSByZXZlcnQgZnJvbSBsYXN0IHRvIGZpcnN0IHNvIHRoYXQgdGhpbmdzIFwicmV3aW5kXCIgcHJvcGVybHkuXG5cdFx0XHRcdGN1clRyaWdnZXIgPSBfdHJpZ2dlcnNbaV07XG5cdFx0XHRcdGN1clRyaWdnZXIuZW5kIHx8IGN1clRyaWdnZXIucmVmcmVzaCgwLCAxKSB8fCAoX3JlZnJlc2hpbmcgPSBzZWxmKTsgLy8gaWYgaXQncyBhIHRpbWVsaW5lLWJhc2VkIHRyaWdnZXIgdGhhdCBoYXNuJ3QgYmVlbiBmdWxseSBpbml0aWFsaXplZCB5ZXQgYmVjYXVzZSBpdCdzIHdhaXRpbmcgZm9yIDEgdGljaywganVzdCBmb3JjZSB0aGUgcmVmcmVzaCgpIGhlcmUsIG90aGVyd2lzZSBpZiBpdCBjb250YWlucyBhIHBpbiB0aGF0J3Mgc3VwcG9zZWQgdG8gYWZmZWN0IG90aGVyIFNjcm9sbFRyaWdnZXJzIGZ1cnRoZXIgZG93biB0aGUgcGFnZSwgdGhleSB3b24ndCBiZSBhZGp1c3RlZCBwcm9wZXJseS5cblx0XHRcdFx0Y3VyUGluID0gY3VyVHJpZ2dlci5waW47XG5cdFx0XHRcdGlmIChjdXJQaW4gJiYgKGN1clBpbiA9PT0gdHJpZ2dlciB8fCBjdXJQaW4gPT09IHBpbiB8fCBjdXJQaW4gPT09IHBpbm5lZENvbnRhaW5lcikgJiYgIWN1clRyaWdnZXIuaXNSZXZlcnRlZCkge1xuXHRcdFx0XHRcdHJldmVydGVkUGlucyB8fCAocmV2ZXJ0ZWRQaW5zID0gW10pO1xuXHRcdFx0XHRcdHJldmVydGVkUGlucy51bnNoaWZ0KGN1clRyaWdnZXIpOyAvLyB3ZSdsbCByZXZlcnQgZnJvbSBmaXJzdCB0byBsYXN0IHRvIG1ha2Ugc3VyZSB0aGluZ3MgcmVhY2ggdGhlaXIgZW5kIHN0YXRlIHByb3Blcmx5XG5cdFx0XHRcdFx0Y3VyVHJpZ2dlci5yZXZlcnQodHJ1ZSwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGN1clRyaWdnZXIgIT09IF90cmlnZ2Vyc1tpXSkgeyAvLyBpbiBjYXNlIGl0IGdvdCByZW1vdmVkLlxuXHRcdFx0XHRcdHRyaWdnZXJJbmRleC0tO1xuXHRcdFx0XHRcdGktLTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0X2lzRnVuY3Rpb24ocGFyc2VkU3RhcnQpICYmIChwYXJzZWRTdGFydCA9IHBhcnNlZFN0YXJ0KHNlbGYpKTtcblx0XHRcdHBhcnNlZFN0YXJ0ID0gX3BhcnNlQ2xhbXAocGFyc2VkU3RhcnQsIFwic3RhcnRcIiwgc2VsZik7XG5cdFx0XHRzdGFydCA9IF9wYXJzZVBvc2l0aW9uKHBhcnNlZFN0YXJ0LCB0cmlnZ2VyLCBzaXplLCBkaXJlY3Rpb24sIHNjcm9sbEZ1bmMoKSwgbWFya2VyU3RhcnQsIG1hcmtlclN0YXJ0VHJpZ2dlciwgc2VsZiwgc2Nyb2xsZXJCb3VuZHMsIGJvcmRlcldpZHRoLCB1c2VGaXhlZFBvc2l0aW9uLCBtYXgsIGNvbnRhaW5lckFuaW1hdGlvbiwgc2VsZi5fc3RhcnRDbGFtcCAmJiBcIl9zdGFydENsYW1wXCIpIHx8IChwaW4gPyAtMC4wMDEgOiAwKTtcblx0XHRcdF9pc0Z1bmN0aW9uKHBhcnNlZEVuZCkgJiYgKHBhcnNlZEVuZCA9IHBhcnNlZEVuZChzZWxmKSk7XG5cdFx0XHRpZiAoX2lzU3RyaW5nKHBhcnNlZEVuZCkgJiYgIXBhcnNlZEVuZC5pbmRleE9mKFwiKz1cIikpIHtcblx0XHRcdFx0aWYgKH5wYXJzZWRFbmQuaW5kZXhPZihcIiBcIikpIHtcblx0XHRcdFx0XHRwYXJzZWRFbmQgPSAoX2lzU3RyaW5nKHBhcnNlZFN0YXJ0KSA/IHBhcnNlZFN0YXJ0LnNwbGl0KFwiIFwiKVswXSA6IFwiXCIpICsgcGFyc2VkRW5kO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9mZnNldCA9IF9vZmZzZXRUb1B4KHBhcnNlZEVuZC5zdWJzdHIoMiksIHNpemUpO1xuXHRcdFx0XHRcdHBhcnNlZEVuZCA9IF9pc1N0cmluZyhwYXJzZWRTdGFydCkgPyBwYXJzZWRTdGFydCA6IChjb250YWluZXJBbmltYXRpb24gPyBnc2FwLnV0aWxzLm1hcFJhbmdlKDAsIGNvbnRhaW5lckFuaW1hdGlvbi5kdXJhdGlvbigpLCBjb250YWluZXJBbmltYXRpb24uc2Nyb2xsVHJpZ2dlci5zdGFydCwgY29udGFpbmVyQW5pbWF0aW9uLnNjcm9sbFRyaWdnZXIuZW5kLCBzdGFydCkgOiBzdGFydCkgKyBvZmZzZXQ7IC8vIF9wYXJzZVBvc2l0aW9uIHdvbid0IGZhY3RvciBpbiB0aGUgb2Zmc2V0IGlmIHRoZSBzdGFydCBpcyBhIG51bWJlciwgc28gZG8gaXQgaGVyZS5cblx0XHRcdFx0XHRwYXJzZWRFbmRUcmlnZ2VyID0gdHJpZ2dlcjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cGFyc2VkRW5kID0gX3BhcnNlQ2xhbXAocGFyc2VkRW5kLCBcImVuZFwiLCBzZWxmKTtcblx0XHRcdGVuZCA9IE1hdGgubWF4KHN0YXJ0LCBfcGFyc2VQb3NpdGlvbihwYXJzZWRFbmQgfHwgKHBhcnNlZEVuZFRyaWdnZXIgPyBcIjEwMCUgMFwiIDogbWF4KSwgcGFyc2VkRW5kVHJpZ2dlciwgc2l6ZSwgZGlyZWN0aW9uLCBzY3JvbGxGdW5jKCkgKyBvZmZzZXQsIG1hcmtlckVuZCwgbWFya2VyRW5kVHJpZ2dlciwgc2VsZiwgc2Nyb2xsZXJCb3VuZHMsIGJvcmRlcldpZHRoLCB1c2VGaXhlZFBvc2l0aW9uLCBtYXgsIGNvbnRhaW5lckFuaW1hdGlvbiwgc2VsZi5fZW5kQ2xhbXAgJiYgXCJfZW5kQ2xhbXBcIikpIHx8IC0wLjAwMTtcblxuXHRcdFx0b2Zmc2V0ID0gMDtcblx0XHRcdGkgPSB0cmlnZ2VySW5kZXg7XG5cdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdGN1clRyaWdnZXIgPSBfdHJpZ2dlcnNbaV07XG5cdFx0XHRcdGN1clBpbiA9IGN1clRyaWdnZXIucGluO1xuXHRcdFx0XHRpZiAoY3VyUGluICYmIGN1clRyaWdnZXIuc3RhcnQgLSBjdXJUcmlnZ2VyLl9waW5QdXNoIDw9IHN0YXJ0ICYmICFjb250YWluZXJBbmltYXRpb24gJiYgY3VyVHJpZ2dlci5lbmQgPiAwKSB7XG5cdFx0XHRcdFx0Y3MgPSBjdXJUcmlnZ2VyLmVuZCAtIChzZWxmLl9zdGFydENsYW1wID8gTWF0aC5tYXgoMCwgY3VyVHJpZ2dlci5zdGFydCkgOiBjdXJUcmlnZ2VyLnN0YXJ0KTtcblx0XHRcdFx0XHRpZiAoKChjdXJQaW4gPT09IHRyaWdnZXIgJiYgY3VyVHJpZ2dlci5zdGFydCAtIGN1clRyaWdnZXIuX3BpblB1c2ggPCBzdGFydCkgfHwgY3VyUGluID09PSBwaW5uZWRDb250YWluZXIpICYmIGlzTmFOKHBhcnNlZFN0YXJ0KSkgeyAvLyBudW1lcmljIHN0YXJ0IHZhbHVlcyBzaG91bGRuJ3QgYmUgb2Zmc2V0IGF0IGFsbCAtIHRyZWF0IHRoZW0gYXMgYWJzb2x1dGVcblx0XHRcdFx0XHRcdG9mZnNldCArPSBjcyAqICgxIC0gY3VyVHJpZ2dlci5wcm9ncmVzcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGN1clBpbiA9PT0gcGluICYmIChvdGhlclBpbk9mZnNldCArPSBjcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHN0YXJ0ICs9IG9mZnNldDtcblx0XHRcdGVuZCArPSBvZmZzZXQ7XG5cdFx0XHRzZWxmLl9zdGFydENsYW1wICYmIChzZWxmLl9zdGFydENsYW1wICs9IG9mZnNldCk7XG5cblx0XHRcdGlmIChzZWxmLl9lbmRDbGFtcCAmJiAhX3JlZnJlc2hpbmdBbGwpIHtcblx0XHRcdFx0c2VsZi5fZW5kQ2xhbXAgPSBlbmQgfHwgLTAuMDAxO1xuXHRcdFx0XHRlbmQgPSBNYXRoLm1pbihlbmQsIF9tYXhTY3JvbGwoc2Nyb2xsZXIsIGRpcmVjdGlvbikpO1xuXHRcdFx0fVxuXHRcdFx0Y2hhbmdlID0gKGVuZCAtIHN0YXJ0KSB8fCAoKHN0YXJ0IC09IDAuMDEpICYmIDAuMDAxKTtcblxuXHRcdFx0aWYgKGlzRmlyc3RSZWZyZXNoKSB7IC8vIG9uIHRoZSB2ZXJ5IGZpcnN0IHJlZnJlc2goKSwgdGhlIHByZXZQcm9ncmVzcyBjb3VsZG4ndCBoYXZlIGJlZW4gYWNjdXJhdGUgeWV0IGJlY2F1c2UgdGhlIHN0YXJ0L2VuZCB3ZXJlIG5ldmVyIGNhbGN1bGF0ZWQsIHNvIHdlIHNldCBpdCBoZXJlLiBCZWZvcmUgMy4xMS41LCBpdCBjb3VsZCBsZWFkIHRvIGFuIGluYWNjdXJhdGUgc2Nyb2xsIHBvc2l0aW9uIHJlc3RvcmF0aW9uIHdpdGggc25hcHBpbmcuXG5cdFx0XHRcdHByZXZQcm9ncmVzcyA9IGdzYXAudXRpbHMuY2xhbXAoMCwgMSwgZ3NhcC51dGlscy5ub3JtYWxpemUoc3RhcnQsIGVuZCwgcHJldlNjcm9sbCkpO1xuXHRcdFx0fVxuXHRcdFx0c2VsZi5fcGluUHVzaCA9IG90aGVyUGluT2Zmc2V0O1xuXHRcdFx0aWYgKG1hcmtlclN0YXJ0ICYmIG9mZnNldCkgeyAvLyBvZmZzZXQgdGhlIG1hcmtlcnMgaWYgbmVjZXNzYXJ5XG5cdFx0XHRcdGNzID0ge307XG5cdFx0XHRcdGNzW2RpcmVjdGlvbi5hXSA9IFwiKz1cIiArIG9mZnNldDtcblx0XHRcdFx0cGlubmVkQ29udGFpbmVyICYmIChjc1tkaXJlY3Rpb24ucF0gPSBcIi09XCIgKyBzY3JvbGxGdW5jKCkpO1xuXHRcdFx0XHRnc2FwLnNldChbbWFya2VyU3RhcnQsIG1hcmtlckVuZF0sIGNzKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHBpbiAmJiAhKF9jbGFtcGluZ01heCAmJiBzZWxmLmVuZCA+PSBfbWF4U2Nyb2xsKHNjcm9sbGVyLCBkaXJlY3Rpb24pKSkge1xuXHRcdFx0XHRjcyA9IF9nZXRDb21wdXRlZFN0eWxlKHBpbik7XG5cdFx0XHRcdGlzVmVydGljYWwgPSBkaXJlY3Rpb24gPT09IF92ZXJ0aWNhbDtcblx0XHRcdFx0c2Nyb2xsID0gc2Nyb2xsRnVuYygpOyAvLyByZWNhbGN1bGF0ZSBiZWNhdXNlIHRoZSB0cmlnZ2VycyBjYW4gYWZmZWN0IHRoZSBzY3JvbGxcblx0XHRcdFx0cGluU3RhcnQgPSBwYXJzZUZsb2F0KHBpbkdldHRlcihkaXJlY3Rpb24uYSkpICsgb3RoZXJQaW5PZmZzZXQ7XG5cdFx0XHRcdGlmICghbWF4ICYmIGVuZCA+IDEpIHsgLy8gbWFrZXMgc3VyZSB0aGUgc2Nyb2xsZXIgaGFzIGEgc2Nyb2xsYmFyLCBvdGhlcndpc2UgaWYgc29tZXRoaW5nIGhhcyB3aWR0aDogMTAwJSwgZm9yIGV4YW1wbGUsIGl0IHdvdWxkIGJlIHRvbyBiaWcgKGV4Y2x1ZGUgdGhlIHNjcm9sbGJhcikuIFNlZSBodHRwczovL2dzYXAuY29tL2ZvcnVtcy90b3BpYy8yNTE4Mi1zY3JvbGx0cmlnZ2VyLXdpZHRoLW9mLXBhZ2UtaW5jcmVhc2Utd2hlcmUtbWFya2Vycy1hcmUtc2V0LXRvLWZhbHNlL1xuXHRcdFx0XHRcdGZvcmNlZE92ZXJmbG93ID0gKGlzVmlld3BvcnQgPyAoX2RvYy5zY3JvbGxpbmdFbGVtZW50IHx8IF9kb2NFbCkgOiBzY3JvbGxlcikuc3R5bGU7XG5cdFx0XHRcdFx0Zm9yY2VkT3ZlcmZsb3cgPSB7c3R5bGU6IGZvcmNlZE92ZXJmbG93LCB2YWx1ZTogZm9yY2VkT3ZlcmZsb3dbXCJvdmVyZmxvd1wiICsgZGlyZWN0aW9uLmEudG9VcHBlckNhc2UoKV19O1xuXHRcdFx0XHRcdGlmIChpc1ZpZXdwb3J0ICYmIF9nZXRDb21wdXRlZFN0eWxlKF9ib2R5KVtcIm92ZXJmbG93XCIgKyBkaXJlY3Rpb24uYS50b1VwcGVyQ2FzZSgpXSAhPT0gXCJzY3JvbGxcIikgeyAvLyBhdm9pZCBhbiBleHRyYSBzY3JvbGxiYXIgaWYgQk9USCA8aHRtbD4gYW5kIDxib2R5PiBoYXZlIG92ZXJmbG93IHNldCB0byBcInNjcm9sbFwiXG5cdFx0XHRcdFx0XHRmb3JjZWRPdmVyZmxvdy5zdHlsZVtcIm92ZXJmbG93XCIgKyBkaXJlY3Rpb24uYS50b1VwcGVyQ2FzZSgpXSA9IFwic2Nyb2xsXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdF9zd2FwUGluSW4ocGluLCBzcGFjZXIsIGNzKTtcblx0XHRcdFx0cGluU3RhdGUgPSBfZ2V0U3RhdGUocGluKTtcblx0XHRcdFx0Ly8gdHJhbnNmb3JtcyB3aWxsIGludGVyZmVyZSB3aXRoIHRoZSB0b3AvbGVmdC9yaWdodC9ib3R0b20gcGxhY2VtZW50LCBzbyByZW1vdmUgdGhlbSB0ZW1wb3JhcmlseS4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgZmFjdG9ycyBpbiB0cmFuc2Zvcm1zLlxuXHRcdFx0XHRib3VuZHMgPSBfZ2V0Qm91bmRzKHBpbiwgdHJ1ZSk7XG5cdFx0XHRcdG9wcG9zaXRlU2Nyb2xsID0gdXNlRml4ZWRQb3NpdGlvbiAmJiBfZ2V0U2Nyb2xsRnVuYyhzY3JvbGxlciwgaXNWZXJ0aWNhbCA/IF9ob3Jpem9udGFsIDogX3ZlcnRpY2FsKSgpO1xuXHRcdFx0XHRpZiAocGluU3BhY2luZykge1xuXHRcdFx0XHRcdHNwYWNlclN0YXRlID0gW3BpblNwYWNpbmcgKyBkaXJlY3Rpb24ub3MyLCBjaGFuZ2UgKyBvdGhlclBpbk9mZnNldCArIF9weF07XG5cdFx0XHRcdFx0c3BhY2VyU3RhdGUudCA9IHNwYWNlcjtcblx0XHRcdFx0XHRpID0gKHBpblNwYWNpbmcgPT09IF9wYWRkaW5nKSA/IF9nZXRTaXplKHBpbiwgZGlyZWN0aW9uKSArIGNoYW5nZSArIG90aGVyUGluT2Zmc2V0IDogMDtcblx0XHRcdFx0XHRpZiAoaSkge1xuXHRcdFx0XHRcdFx0c3BhY2VyU3RhdGUucHVzaChkaXJlY3Rpb24uZCwgaSArIF9weCk7IC8vIGZvciBib3gtc2l6aW5nOiBib3JkZXItYm94IChtdXN0IGluY2x1ZGUgcGFkZGluZykuXG5cdFx0XHRcdFx0XHRzcGFjZXIuc3R5bGUuZmxleEJhc2lzICE9PSBcImF1dG9cIiAmJiAoc3BhY2VyLnN0eWxlLmZsZXhCYXNpcyA9IGkgKyBfcHgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRfc2V0U3RhdGUoc3BhY2VyU3RhdGUpO1xuXHRcdFx0XHRcdGlmIChwaW5uZWRDb250YWluZXIpIHsgLy8gaW4gU2Nyb2xsVHJpZ2dlci5yZWZyZXNoKCksIHdlIG5lZWQgdG8gcmUtZXZhbHVhdGUgdGhlIHBpbkNvbnRhaW5lcidzIHNpemUgYmVjYXVzZSB0aGlzIHBpblNwYWNpbmcgbWF5IHN0cmV0Y2ggaXQgb3V0LCBidXQgd2UgY2FuJ3QganVzdCBhZGQgdGhlIGV4YWN0IGRpc3RhbmNlIGJlY2F1c2UgZGVwZW5kaW5nIG9uIGxheW91dCwgaXQgbWF5IG5vdCBwdXNoIHRoaW5ncyBkb3duIG9yIGl0IG1heSBvbmx5IGRvIHNvIHBhcnRpYWxseS5cblx0XHRcdFx0XHRcdF90cmlnZ2Vycy5mb3JFYWNoKHQgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAodC5waW4gPT09IHBpbm5lZENvbnRhaW5lciAmJiB0LnZhcnMucGluU3BhY2luZyAhPT0gZmFsc2UpIHtcblx0XHRcdFx0XHRcdFx0XHR0Ll9zdWJQaW5PZmZzZXQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dXNlRml4ZWRQb3NpdGlvbiAmJiBzY3JvbGxGdW5jKHByZXZTY3JvbGwpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGkgPSBfZ2V0U2l6ZShwaW4sIGRpcmVjdGlvbik7XG5cdFx0XHRcdFx0aSAmJiBzcGFjZXIuc3R5bGUuZmxleEJhc2lzICE9PSBcImF1dG9cIiAmJiAoc3BhY2VyLnN0eWxlLmZsZXhCYXNpcyA9IGkgKyBfcHgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh1c2VGaXhlZFBvc2l0aW9uKSB7XG5cdFx0XHRcdFx0b3ZlcnJpZGUgPSB7XG5cdFx0XHRcdFx0XHR0b3A6IChib3VuZHMudG9wICsgKGlzVmVydGljYWwgPyBzY3JvbGwgLSBzdGFydCA6IG9wcG9zaXRlU2Nyb2xsKSkgKyBfcHgsXG5cdFx0XHRcdFx0XHRsZWZ0OiAoYm91bmRzLmxlZnQgKyAoaXNWZXJ0aWNhbCA/IG9wcG9zaXRlU2Nyb2xsIDogc2Nyb2xsIC0gc3RhcnQpKSArIF9weCxcblx0XHRcdFx0XHRcdGJveFNpemluZzogXCJib3JkZXItYm94XCIsXG5cdFx0XHRcdFx0XHRwb3NpdGlvbjogXCJmaXhlZFwiXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRvdmVycmlkZVtfd2lkdGhdID0gb3ZlcnJpZGVbXCJtYXhcIiArIF9XaWR0aF0gPSBNYXRoLmNlaWwoYm91bmRzLndpZHRoKSArIF9weDtcblx0XHRcdFx0XHRvdmVycmlkZVtfaGVpZ2h0XSA9IG92ZXJyaWRlW1wibWF4XCIgKyBfSGVpZ2h0XSA9IE1hdGguY2VpbChib3VuZHMuaGVpZ2h0KSArIF9weDtcblx0XHRcdFx0XHRvdmVycmlkZVtfbWFyZ2luXSA9IG92ZXJyaWRlW19tYXJnaW4gKyBfVG9wXSA9IG92ZXJyaWRlW19tYXJnaW4gKyBfUmlnaHRdID0gb3ZlcnJpZGVbX21hcmdpbiArIF9Cb3R0b21dID0gb3ZlcnJpZGVbX21hcmdpbiArIF9MZWZ0XSA9IFwiMFwiO1xuXHRcdFx0XHRcdG92ZXJyaWRlW19wYWRkaW5nXSA9IGNzW19wYWRkaW5nXTtcblx0XHRcdFx0XHRvdmVycmlkZVtfcGFkZGluZyArIF9Ub3BdID0gY3NbX3BhZGRpbmcgKyBfVG9wXTtcblx0XHRcdFx0XHRvdmVycmlkZVtfcGFkZGluZyArIF9SaWdodF0gPSBjc1tfcGFkZGluZyArIF9SaWdodF07XG5cdFx0XHRcdFx0b3ZlcnJpZGVbX3BhZGRpbmcgKyBfQm90dG9tXSA9IGNzW19wYWRkaW5nICsgX0JvdHRvbV07XG5cdFx0XHRcdFx0b3ZlcnJpZGVbX3BhZGRpbmcgKyBfTGVmdF0gPSBjc1tfcGFkZGluZyArIF9MZWZ0XTtcblx0XHRcdFx0XHRwaW5BY3RpdmVTdGF0ZSA9IF9jb3B5U3RhdGUocGluT3JpZ2luYWxTdGF0ZSwgb3ZlcnJpZGUsIHBpblJlcGFyZW50KTtcblx0XHRcdFx0XHRfcmVmcmVzaGluZ0FsbCAmJiBzY3JvbGxGdW5jKDApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChhbmltYXRpb24pIHsgLy8gdGhlIGFuaW1hdGlvbiBtaWdodCBiZSBhZmZlY3RpbmcgdGhlIHRyYW5zZm9ybSwgc28gd2UgbXVzdCBqdW1wIHRvIHRoZSBlbmQsIGNoZWNrIHRoZSB2YWx1ZSwgYW5kIGNvbXBlbnNhdGUgYWNjb3JkaW5nbHkuIE90aGVyd2lzZSwgd2hlbiBpdCBiZWNvbWVzIHVucGlubmVkLCB0aGUgcGluU2V0dGVyKCkgd2lsbCBnZXQgc2V0IHRvIGEgdmFsdWUgdGhhdCBkb2Vzbid0IGluY2x1ZGUgd2hhdGV2ZXIgdGhlIGFuaW1hdGlvbiBkaWQuXG5cdFx0XHRcdFx0aW5pdHRlZCA9IGFuaW1hdGlvbi5faW5pdHRlZDsgLy8gaWYgbm90LCB3ZSBtdXN0IGludmFsaWRhdGUoKSBhZnRlciB0aGlzIHN0ZXAsIG90aGVyd2lzZSBpdCBjb3VsZCBsb2NrIGluIHN0YXJ0aW5nIHZhbHVlcyBwcmVtYXR1cmVseS5cblx0XHRcdFx0XHRfc3VwcHJlc3NPdmVyd3JpdGVzKDEpO1xuXHRcdFx0XHRcdGFuaW1hdGlvbi5yZW5kZXIoYW5pbWF0aW9uLmR1cmF0aW9uKCksIHRydWUsIHRydWUpO1xuXHRcdFx0XHRcdHBpbkNoYW5nZSA9IHBpbkdldHRlcihkaXJlY3Rpb24uYSkgLSBwaW5TdGFydCArIGNoYW5nZSArIG90aGVyUGluT2Zmc2V0O1xuXHRcdFx0XHRcdHBpbk1vdmVzID0gTWF0aC5hYnMoY2hhbmdlIC0gcGluQ2hhbmdlKSA+IDE7XG5cdFx0XHRcdFx0dXNlRml4ZWRQb3NpdGlvbiAmJiBwaW5Nb3ZlcyAmJiBwaW5BY3RpdmVTdGF0ZS5zcGxpY2UocGluQWN0aXZlU3RhdGUubGVuZ3RoIC0gMiwgMik7IC8vIHRyYW5zZm9ybSBpcyB0aGUgbGFzdCBwcm9wZXJ0eS92YWx1ZSBzZXQgaW4gdGhlIHN0YXRlIEFycmF5LiBTaW5jZSB0aGUgYW5pbWF0aW9uIGlzIGNvbnRyb2xsaW5nIHRoYXQsIHdlIHNob3VsZCBvbWl0IGl0LlxuXHRcdFx0XHRcdGFuaW1hdGlvbi5yZW5kZXIoMCwgdHJ1ZSwgdHJ1ZSk7XG5cdFx0XHRcdFx0aW5pdHRlZCB8fCBhbmltYXRpb24uaW52YWxpZGF0ZSh0cnVlKTtcblx0XHRcdFx0XHRhbmltYXRpb24ucGFyZW50IHx8IGFuaW1hdGlvbi50b3RhbFRpbWUoYW5pbWF0aW9uLnRvdGFsVGltZSgpKTsgLy8gaWYsIGZvciBleGFtcGxlLCBhIHRvZ2dsZUFjdGlvbiBjYWxsZWQgcGxheSgpIGFuZCB0aGVuIHJlZnJlc2goKSBoYXBwZW5zIGFuZCB3aGVuIHdlIHJlbmRlcigxKSBhYm92ZSwgaXQgd291bGQgY2F1c2UgdGhlIGFuaW1hdGlvbiB0byBjb21wbGV0ZSBhbmQgZ2V0IHJlbW92ZWQgZnJvbSBpdHMgcGFyZW50LCBzbyB0aGlzIG1ha2VzIHN1cmUgaXQgZ2V0cyBwdXQgYmFjayBpbi5cblx0XHRcdFx0XHRfc3VwcHJlc3NPdmVyd3JpdGVzKDApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBpbkNoYW5nZSA9IGNoYW5nZVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZvcmNlZE92ZXJmbG93ICYmIChmb3JjZWRPdmVyZmxvdy52YWx1ZSA/IChmb3JjZWRPdmVyZmxvdy5zdHlsZVtcIm92ZXJmbG93XCIgKyBkaXJlY3Rpb24uYS50b1VwcGVyQ2FzZSgpXSA9IGZvcmNlZE92ZXJmbG93LnZhbHVlKSA6IGZvcmNlZE92ZXJmbG93LnN0eWxlLnJlbW92ZVByb3BlcnR5KFwib3ZlcmZsb3ctXCIgKyBkaXJlY3Rpb24uYSkpO1xuXHRcdFx0fSBlbHNlIGlmICh0cmlnZ2VyICYmIHNjcm9sbEZ1bmMoKSAmJiAhY29udGFpbmVyQW5pbWF0aW9uKSB7IC8vIGl0IG1heSBiZSBJTlNJREUgYSBwaW5uZWQgZWxlbWVudCwgc28gd2FsayB1cCB0aGUgdHJlZSBhbmQgbG9vayBmb3IgYW55IGVsZW1lbnRzIHdpdGggX3Bpbk9mZnNldCB0byBjb21wZW5zYXRlIGJlY2F1c2UgYW55dGhpbmcgd2l0aCBwaW5TcGFjaW5nIHRoYXQncyBhbHJlYWR5IHNjcm9sbGVkIHdvdWxkIHRocm93IG9mZiB0aGUgbWVhc3VyZW1lbnRzIGluIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG5cdFx0XHRcdGJvdW5kcyA9IHRyaWdnZXIucGFyZW50Tm9kZTtcblx0XHRcdFx0d2hpbGUgKGJvdW5kcyAmJiBib3VuZHMgIT09IF9ib2R5KSB7XG5cdFx0XHRcdFx0aWYgKGJvdW5kcy5fcGluT2Zmc2V0KSB7XG5cdFx0XHRcdFx0XHRzdGFydCAtPSBib3VuZHMuX3Bpbk9mZnNldDtcblx0XHRcdFx0XHRcdGVuZCAtPSBib3VuZHMuX3Bpbk9mZnNldDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ym91bmRzID0gYm91bmRzLnBhcmVudE5vZGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldmVydGVkUGlucyAmJiByZXZlcnRlZFBpbnMuZm9yRWFjaCh0ID0+IHQucmV2ZXJ0KGZhbHNlLCB0cnVlKSk7XG5cdFx0XHRzZWxmLnN0YXJ0ID0gc3RhcnQ7XG5cdFx0XHRzZWxmLmVuZCA9IGVuZDtcblx0XHRcdHNjcm9sbDEgPSBzY3JvbGwyID0gX3JlZnJlc2hpbmdBbGwgPyBwcmV2U2Nyb2xsIDogc2Nyb2xsRnVuYygpOyAvLyByZXNldCB2ZWxvY2l0eVxuXHRcdFx0aWYgKCFjb250YWluZXJBbmltYXRpb24gJiYgIV9yZWZyZXNoaW5nQWxsKSB7XG5cdFx0XHRcdHNjcm9sbDEgPCBwcmV2U2Nyb2xsICYmIHNjcm9sbEZ1bmMocHJldlNjcm9sbCk7XG5cdFx0XHRcdHNlbGYuc2Nyb2xsLnJlYyA9IDA7XG5cdFx0XHR9XG5cdFx0XHRzZWxmLnJldmVydChmYWxzZSwgdHJ1ZSk7XG5cdFx0XHRsYXN0UmVmcmVzaCA9IF9nZXRUaW1lKCk7XG5cdFx0XHRpZiAoc25hcERlbGF5ZWRDYWxsKSB7XG5cdFx0XHRcdGxhc3RTbmFwID0gLTE7IC8vIGp1c3Qgc28gc25hcHBpbmcgZ2V0cyByZS1lbmFibGVkLCBjbGVhciBvdXQgYW55IHJlY29yZGVkIGxhc3QgdmFsdWVcblx0XHRcdFx0Ly8gc2VsZi5pc0FjdGl2ZSAmJiBzY3JvbGxGdW5jKHN0YXJ0ICsgY2hhbmdlICogcHJldlByb2dyZXNzKTsgLy8gcHJldmlvdXNseSB0aGlzIGxpbmUgd2FzIGhlcmUgdG8gZW5zdXJlIHRoYXQgd2hlbiBzbmFwcGluZyBraWNrcyBpbiwgaXQncyBmcm9tIHRoZSBwcmV2aW91cyBwcm9ncmVzcyBidXQgaW4gc29tZSBjYXNlcyB0aGF0J3Mgbm90IGRlc2lyYWJsZSwgbGlrZSBhbiBhbGwtcGFnZSBTY3JvbGxUcmlnZ2VyIHdoZW4gbmV3IGNvbnRlbnQgZ2V0cyBhZGRlZCB0byB0aGUgcGFnZSwgdGhhdCdkIHRvdGFsbHkgY2hhbmdlIHRoZSBwcm9ncmVzcy5cblx0XHRcdFx0c25hcERlbGF5ZWRDYWxsLnJlc3RhcnQodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0XHRfcmVmcmVzaGluZyA9IDA7XG5cdFx0XHRhbmltYXRpb24gJiYgaXNUb2dnbGUgJiYgKGFuaW1hdGlvbi5faW5pdHRlZCB8fCBwcmV2QW5pbVByb2dyZXNzKSAmJiBhbmltYXRpb24ucHJvZ3Jlc3MoKSAhPT0gcHJldkFuaW1Qcm9ncmVzcyAmJiBhbmltYXRpb24ucHJvZ3Jlc3MocHJldkFuaW1Qcm9ncmVzcyB8fCAwLCB0cnVlKS5yZW5kZXIoYW5pbWF0aW9uLnRpbWUoKSwgdHJ1ZSwgdHJ1ZSk7IC8vIG11c3QgZm9yY2UgYSByZS1yZW5kZXIgYmVjYXVzZSBpZiBzYXZlU3R5bGVzKCkgd2FzIHVzZWQgb24gdGhlIHRhcmdldChzKSwgdGhlIHN0eWxlcyBjb3VsZCBoYXZlIGJlZW4gd2lwZWQgb3V0IGR1cmluZyB0aGUgcmVmcmVzaCgpLlxuXHRcdFx0aWYgKGlzRmlyc3RSZWZyZXNoIHx8IHByZXZQcm9ncmVzcyAhPT0gc2VsZi5wcm9ncmVzcyB8fCBjb250YWluZXJBbmltYXRpb24gfHwgaW52YWxpZGF0ZU9uUmVmcmVzaCB8fCAoYW5pbWF0aW9uICYmICFhbmltYXRpb24uX2luaXR0ZWQpKSB7IC8vIGVuc3VyZXMgdGhhdCB0aGUgZGlyZWN0aW9uIGlzIHNldCBwcm9wZXJseSAod2hlbiByZWZyZXNoaW5nLCBwcm9ncmVzcyBpcyBzZXQgYmFjayB0byAwIGluaXRpYWxseSwgdGhlbiBiYWNrIGFnYWluIHRvIHdoZXJldmVyIGl0IG5lZWRzIHRvIGJlKSBhbmQgdGhhdCBjYWxsYmFja3MgYXJlIHRyaWdnZXJlZC5cblx0XHRcdFx0YW5pbWF0aW9uICYmICFpc1RvZ2dsZSAmJiBhbmltYXRpb24udG90YWxQcm9ncmVzcyhjb250YWluZXJBbmltYXRpb24gJiYgc3RhcnQgPCAtMC4wMDEgJiYgIXByZXZQcm9ncmVzcyA/IGdzYXAudXRpbHMubm9ybWFsaXplKHN0YXJ0LCBlbmQsIDApIDogcHJldlByb2dyZXNzLCB0cnVlKTsgLy8gdG8gYXZvaWQgaXNzdWVzIHdoZXJlIGFuaW1hdGlvbiBjYWxsYmFja3MgbGlrZSBvblN0YXJ0IGFyZW4ndCB0cmlnZ2VyZWQuXG5cdFx0XHRcdHNlbGYucHJvZ3Jlc3MgPSBpc0ZpcnN0UmVmcmVzaCB8fCAoKHNjcm9sbDEgLSBzdGFydCkgLyBjaGFuZ2UgPT09IHByZXZQcm9ncmVzcykgPyAwIDogcHJldlByb2dyZXNzO1xuXHRcdFx0fVxuXHRcdFx0cGluICYmIHBpblNwYWNpbmcgJiYgKHNwYWNlci5fcGluT2Zmc2V0ID0gTWF0aC5yb3VuZChzZWxmLnByb2dyZXNzICogcGluQ2hhbmdlKSk7XG5cdFx0XHRzY3J1YlR3ZWVuICYmIHNjcnViVHdlZW4uaW52YWxpZGF0ZSgpO1xuXG5cdFx0XHRpZiAoIWlzTmFOKG1hcmtlclN0YXJ0T2Zmc2V0KSkgeyAvLyBudW1iZXJzIHdlcmUgcGFzc2VkIGluIGZvciB0aGUgcG9zaXRpb24gd2hpY2ggYXJlIGFic29sdXRlLCBzbyBpbnN0ZWFkIG9mIGp1c3QgcHV0dGluZyB0aGUgbWFya2VycyBhdCB0aGUgdmVyeSBib3R0b20gb2YgdGhlIHZpZXdwb3J0LCB3ZSBmaWd1cmUgb3V0IGhvdyBmYXIgdGhleSBzaGlmdGVkIGRvd24gKGl0J3Mgc2FmZSB0byBhc3N1bWUgdGhleSB3ZXJlIG9yaWdpbmFsbHkgcG9zaXRpb25lZCBpbiBjbG9zZXIgcmVsYXRpb24gdG8gdGhlIHRyaWdnZXIgZWxlbWVudCB3aXRoIHZhbHVlcyBsaWtlIFwidG9wXCIsIFwiY2VudGVyXCIsIGEgcGVyY2VudGFnZSBvciB3aGF0ZXZlciwgc28gd2Ugb2Zmc2V0IHRoYXQgbXVjaCBpbiB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHRvIGJhc2ljYWxseSByZXZlcnQgdGhlbSB0byB0aGUgcmVsYXRpdmUgcG9zaXRpb24gdGh5IHdlcmUgYXQgcHJldmlvdXNseS5cblx0XHRcdFx0bWFya2VyU3RhcnRPZmZzZXQgLT0gZ3NhcC5nZXRQcm9wZXJ0eShtYXJrZXJTdGFydFRyaWdnZXIsIGRpcmVjdGlvbi5wKTtcblx0XHRcdFx0bWFya2VyRW5kT2Zmc2V0IC09IGdzYXAuZ2V0UHJvcGVydHkobWFya2VyRW5kVHJpZ2dlciwgZGlyZWN0aW9uLnApO1xuXHRcdFx0XHRfc2hpZnRNYXJrZXIobWFya2VyU3RhcnRUcmlnZ2VyLCBkaXJlY3Rpb24sIG1hcmtlclN0YXJ0T2Zmc2V0KTtcblx0XHRcdFx0X3NoaWZ0TWFya2VyKG1hcmtlclN0YXJ0LCBkaXJlY3Rpb24sIG1hcmtlclN0YXJ0T2Zmc2V0IC0gKHBpbk9mZnNldCB8fCAwKSk7XG5cdFx0XHRcdF9zaGlmdE1hcmtlcihtYXJrZXJFbmRUcmlnZ2VyLCBkaXJlY3Rpb24sIG1hcmtlckVuZE9mZnNldCk7XG5cdFx0XHRcdF9zaGlmdE1hcmtlcihtYXJrZXJFbmQsIGRpcmVjdGlvbiwgbWFya2VyRW5kT2Zmc2V0IC0gKHBpbk9mZnNldCB8fCAwKSk7XG5cdFx0XHR9XG5cblx0XHRcdGlzRmlyc3RSZWZyZXNoICYmICFfcmVmcmVzaGluZ0FsbCAmJiBzZWxmLnVwZGF0ZSgpOyAvLyBlZGdlIGNhc2UgLSB3aGVuIHlvdSByZWxvYWQgYSBwYWdlIHdoZW4gaXQncyBhbHJlYWR5IHNjcm9sbGVkIGRvd24sIHNvbWUgYnJvd3NlcnMgZmlyZSBhIFwic2Nyb2xsXCIgZXZlbnQgYmVmb3JlIERPTUNvbnRlbnRMb2FkZWQsIHRyaWdnZXJpbmcgYW4gdXBkYXRlQWxsKCkuIElmIHdlIGRvbid0IHVwZGF0ZSB0aGUgc2VsZi5wcm9ncmVzcyBhcyBwYXJ0IG9mIHJlZnJlc2goKSwgdGhlbiB3aGVuIGl0IGhhcHBlbnMgbmV4dCwgaXQgbWF5IHJlY29yZCBwcmV2UHJvZ3Jlc3MgYXMgMCB3aGVuIGl0IHJlYWxseSBzaG91bGRuJ3QsIHBvdGVudGlhbGx5IGNhdXNpbmcgYSBjYWxsYmFjayBpbiBhbiBhbmltYXRpb24gdG8gZmlyZSBhZ2Fpbi5cblxuXHRcdFx0aWYgKG9uUmVmcmVzaCAmJiAhX3JlZnJlc2hpbmdBbGwgJiYgIWV4ZWN1dGluZ09uUmVmcmVzaCkgeyAvLyB3aGVuIHJlZnJlc2hpbmcgYWxsLCB3ZSBkbyBleHRyYSB3b3JrIHRvIGNvcnJlY3QgcGlubmVkQ29udGFpbmVyIHNpemVzIGFuZCBlbnN1cmUgdGhpbmdzIGRvbid0IGV4Y2VlZCB0aGUgbWF4U2Nyb2xsLCBzbyB3ZSBzaG91bGQgZG8gYWxsIHRoZSByZWZyZXNoZXMgYXQgdGhlIGVuZCBhZnRlciBhbGwgdGhhdCB3b3JrIHNvIHRoYXQgdGhlIHN0YXJ0L2VuZCB2YWx1ZXMgYXJlIGNvcnJlY3RlZC5cblx0XHRcdFx0ZXhlY3V0aW5nT25SZWZyZXNoID0gdHJ1ZTtcblx0XHRcdFx0b25SZWZyZXNoKHNlbGYpO1xuXHRcdFx0XHRleGVjdXRpbmdPblJlZnJlc2ggPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0c2VsZi5nZXRWZWxvY2l0eSA9ICgpID0+ICgoc2Nyb2xsRnVuYygpIC0gc2Nyb2xsMikgLyAoX2dldFRpbWUoKSAtIF90aW1lMikgKiAxMDAwKSB8fCAwO1xuXG5cdFx0c2VsZi5lbmRBbmltYXRpb24gPSAoKSA9PiB7XG5cdFx0XHRfZW5kQW5pbWF0aW9uKHNlbGYuY2FsbGJhY2tBbmltYXRpb24pO1xuXHRcdFx0aWYgKGFuaW1hdGlvbikge1xuXHRcdFx0XHRzY3J1YlR3ZWVuID8gc2NydWJUd2Vlbi5wcm9ncmVzcygxKSA6ICghYW5pbWF0aW9uLnBhdXNlZCgpID8gX2VuZEFuaW1hdGlvbihhbmltYXRpb24sIGFuaW1hdGlvbi5yZXZlcnNlZCgpKSA6IGlzVG9nZ2xlIHx8IF9lbmRBbmltYXRpb24oYW5pbWF0aW9uLCBzZWxmLmRpcmVjdGlvbiA8IDAsIDEpKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0c2VsZi5sYWJlbFRvU2Nyb2xsID0gbGFiZWwgPT4gYW5pbWF0aW9uICYmIGFuaW1hdGlvbi5sYWJlbHMgJiYgKChzdGFydCB8fCBzZWxmLnJlZnJlc2goKSB8fCBzdGFydCkgKyAoYW5pbWF0aW9uLmxhYmVsc1tsYWJlbF0gLyBhbmltYXRpb24uZHVyYXRpb24oKSkgKiBjaGFuZ2UpIHx8IDA7XG5cblx0XHRzZWxmLmdldFRyYWlsaW5nID0gbmFtZSA9PiB7XG5cdFx0XHRsZXQgaSA9IF90cmlnZ2Vycy5pbmRleE9mKHNlbGYpLFxuXHRcdFx0XHRhID0gc2VsZi5kaXJlY3Rpb24gPiAwID8gX3RyaWdnZXJzLnNsaWNlKDAsIGkpLnJldmVyc2UoKSA6IF90cmlnZ2Vycy5zbGljZShpKzEpO1xuXHRcdFx0cmV0dXJuIChfaXNTdHJpbmcobmFtZSkgPyBhLmZpbHRlcih0ID0+IHQudmFycy5wcmV2ZW50T3ZlcmxhcHMgPT09IG5hbWUpIDogYSkuZmlsdGVyKHQgPT4gc2VsZi5kaXJlY3Rpb24gPiAwID8gdC5lbmQgPD0gc3RhcnQgOiB0LnN0YXJ0ID49IGVuZCk7XG5cdFx0fTtcblxuXG5cdFx0c2VsZi51cGRhdGUgPSAocmVzZXQsIHJlY29yZFZlbG9jaXR5LCBmb3JjZUZha2UpID0+IHtcblx0XHRcdGlmIChjb250YWluZXJBbmltYXRpb24gJiYgIWZvcmNlRmFrZSAmJiAhcmVzZXQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0bGV0IHNjcm9sbCA9IF9yZWZyZXNoaW5nQWxsID09PSB0cnVlID8gcHJldlNjcm9sbCA6IHNlbGYuc2Nyb2xsKCksXG5cdFx0XHRcdHAgPSByZXNldCA/IDAgOiAoc2Nyb2xsIC0gc3RhcnQpIC8gY2hhbmdlLFxuXHRcdFx0XHRjbGlwcGVkID0gcCA8IDAgPyAwIDogcCA+IDEgPyAxIDogcCB8fCAwLFxuXHRcdFx0XHRwcmV2UHJvZ3Jlc3MgPSBzZWxmLnByb2dyZXNzLFxuXHRcdFx0XHRpc0FjdGl2ZSwgd2FzQWN0aXZlLCB0b2dnbGVTdGF0ZSwgYWN0aW9uLCBzdGF0ZUNoYW5nZWQsIHRvZ2dsZWQsIGlzQXRNYXgsIGlzVGFraW5nQWN0aW9uO1xuXHRcdFx0aWYgKHJlY29yZFZlbG9jaXR5KSB7XG5cdFx0XHRcdHNjcm9sbDIgPSBzY3JvbGwxO1xuXHRcdFx0XHRzY3JvbGwxID0gY29udGFpbmVyQW5pbWF0aW9uID8gc2Nyb2xsRnVuYygpIDogc2Nyb2xsO1xuXHRcdFx0XHRpZiAoc25hcCkge1xuXHRcdFx0XHRcdHNuYXAyID0gc25hcDE7XG5cdFx0XHRcdFx0c25hcDEgPSBhbmltYXRpb24gJiYgIWlzVG9nZ2xlID8gYW5pbWF0aW9uLnRvdGFsUHJvZ3Jlc3MoKSA6IGNsaXBwZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIGFudGljaXBhdGUgdGhlIHBpbm5pbmcgYSBmZXcgdGlja3MgYWhlYWQgb2YgdGltZSBiYXNlZCBvbiB2ZWxvY2l0eSB0byBhdm9pZCBhIHZpc3VhbCBnbGl0Y2ggZHVlIHRvIHRoZSBmYWN0IHRoYXQgbW9zdCBicm93c2VycyBkbyBzY3JvbGxpbmcgb24gYSBzZXBhcmF0ZSB0aHJlYWQgKG5vdCBzeW5jZWQgd2l0aCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUpLlxuXHRcdFx0aWYgKGFudGljaXBhdGVQaW4gJiYgcGluICYmICFfcmVmcmVzaGluZyAmJiAhX3N0YXJ0dXAgJiYgX2xhc3RTY3JvbGxUaW1lKSB7XG5cdFx0XHRcdGlmICghY2xpcHBlZCAmJiBzdGFydCA8IHNjcm9sbCArICgoc2Nyb2xsIC0gc2Nyb2xsMikgLyAoX2dldFRpbWUoKSAtIF90aW1lMikpICogYW50aWNpcGF0ZVBpbikge1xuXHRcdFx0XHRcdGNsaXBwZWQgPSAwLjAwMDE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoY2xpcHBlZCA9PT0gMSAmJiBlbmQgPiBzY3JvbGwgKyAoKHNjcm9sbCAtIHNjcm9sbDIpIC8gKF9nZXRUaW1lKCkgLSBfdGltZTIpKSAqIGFudGljaXBhdGVQaW4pIHtcblx0XHRcdFx0XHRjbGlwcGVkID0gMC45OTk5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoY2xpcHBlZCAhPT0gcHJldlByb2dyZXNzICYmIHNlbGYuZW5hYmxlZCkge1xuXHRcdFx0XHRpc0FjdGl2ZSA9IHNlbGYuaXNBY3RpdmUgPSAhIWNsaXBwZWQgJiYgY2xpcHBlZCA8IDE7XG5cdFx0XHRcdHdhc0FjdGl2ZSA9ICEhcHJldlByb2dyZXNzICYmIHByZXZQcm9ncmVzcyA8IDE7XG5cdFx0XHRcdHRvZ2dsZWQgPSBpc0FjdGl2ZSAhPT0gd2FzQWN0aXZlO1xuXHRcdFx0XHRzdGF0ZUNoYW5nZWQgPSB0b2dnbGVkIHx8ICEhY2xpcHBlZCAhPT0gISFwcmV2UHJvZ3Jlc3M7IC8vIGNvdWxkIGdvIGZyb20gc3RhcnQgYWxsIHRoZSB3YXkgdG8gZW5kLCB0aHVzIGl0IGRpZG4ndCB0b2dnbGUgYnV0IGl0IGRpZCBjaGFuZ2Ugc3RhdGUgaW4gYSBzZW5zZSAobWF5IG5lZWQgdG8gZmlyZSBhIGNhbGxiYWNrKVxuXHRcdFx0XHRzZWxmLmRpcmVjdGlvbiA9IGNsaXBwZWQgPiBwcmV2UHJvZ3Jlc3MgPyAxIDogLTE7XG5cdFx0XHRcdHNlbGYucHJvZ3Jlc3MgPSBjbGlwcGVkO1xuXG5cdFx0XHRcdGlmIChzdGF0ZUNoYW5nZWQgJiYgIV9yZWZyZXNoaW5nKSB7XG5cdFx0XHRcdFx0dG9nZ2xlU3RhdGUgPSBjbGlwcGVkICYmICFwcmV2UHJvZ3Jlc3MgPyAwIDogY2xpcHBlZCA9PT0gMSA/IDEgOiBwcmV2UHJvZ3Jlc3MgPT09IDEgPyAyIDogMzsgLy8gMCA9IGVudGVyLCAxID0gbGVhdmUsIDIgPSBlbnRlckJhY2ssIDMgPSBsZWF2ZUJhY2sgKHdlIHByaW9yaXRpemUgdGhlIEZJUlNUIGVuY291bnRlciwgdGh1cyBpZiB5b3Ugc2Nyb2xsIHJlYWxseSBmYXN0IHBhc3QgdGhlIG9uRW50ZXIgYW5kIG9uTGVhdmUgaW4gb25lIHRpY2ssIGl0J2QgcHJpb3JpdGl6ZSBvbkVudGVyLlxuXHRcdFx0XHRcdGlmIChpc1RvZ2dsZSkge1xuXHRcdFx0XHRcdFx0YWN0aW9uID0gKCF0b2dnbGVkICYmIHRvZ2dsZUFjdGlvbnNbdG9nZ2xlU3RhdGUgKyAxXSAhPT0gXCJub25lXCIgJiYgdG9nZ2xlQWN0aW9uc1t0b2dnbGVTdGF0ZSArIDFdKSB8fCB0b2dnbGVBY3Rpb25zW3RvZ2dsZVN0YXRlXTsgLy8gaWYgaXQgZGlkbid0IHRvZ2dsZSwgdGhhdCBtZWFucyBpdCBzaG90IHJpZ2h0IHBhc3QgYW5kIHNpbmNlIHdlIHByaW9yaXRpemUgdGhlIFwiZW50ZXJcIiBhY3Rpb24sIHdlIHNob3VsZCBzd2l0Y2ggdG8gdGhlIFwibGVhdmVcIiBpbiB0aGlzIGNhc2UgKGJ1dCBvbmx5IGlmIG9uZSBpcyBkZWZpbmVkKVxuXHRcdFx0XHRcdFx0aXNUYWtpbmdBY3Rpb24gPSBhbmltYXRpb24gJiYgKGFjdGlvbiA9PT0gXCJjb21wbGV0ZVwiIHx8IGFjdGlvbiA9PT0gXCJyZXNldFwiIHx8IGFjdGlvbiBpbiBhbmltYXRpb24pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHByZXZlbnRPdmVybGFwcyAmJiAodG9nZ2xlZCB8fCBpc1Rha2luZ0FjdGlvbikgJiYgKGlzVGFraW5nQWN0aW9uIHx8IHNjcnViIHx8ICFhbmltYXRpb24pICYmIChfaXNGdW5jdGlvbihwcmV2ZW50T3ZlcmxhcHMpID8gcHJldmVudE92ZXJsYXBzKHNlbGYpIDogc2VsZi5nZXRUcmFpbGluZyhwcmV2ZW50T3ZlcmxhcHMpLmZvckVhY2godCA9PiB0LmVuZEFuaW1hdGlvbigpKSk7XG5cblx0XHRcdFx0aWYgKCFpc1RvZ2dsZSkge1xuXHRcdFx0XHRcdGlmIChzY3J1YlR3ZWVuICYmICFfcmVmcmVzaGluZyAmJiAhX3N0YXJ0dXApIHtcblx0XHRcdFx0XHRcdChzY3J1YlR3ZWVuLl9kcC5fdGltZSAtIHNjcnViVHdlZW4uX3N0YXJ0ICE9PSBzY3J1YlR3ZWVuLl90aW1lKSAmJiBzY3J1YlR3ZWVuLnJlbmRlcihzY3J1YlR3ZWVuLl9kcC5fdGltZSAtIHNjcnViVHdlZW4uX3N0YXJ0KTsgLy8gaWYgdGhlcmUncyBhIHNjcnViIG9uIGJvdGggdGhlIGNvbnRhaW5lciBhbmltYXRpb24gYW5kIHRoaXMgb25lIChvciBhIFNjcm9sbFNtb290aGVyKSwgdGhlIHVwZGF0ZSBvcmRlciB3b3VsZCBjYXVzZSB0aGlzIG9uZSBub3QgdG8gaGF2ZSByZW5kZXJlZCB5ZXQsIHNvIGl0IHdvdWxkbid0IG1ha2UgYW55IHByb2dyZXNzIGJlZm9yZSB3ZSAucmVzdGFydCgpIGl0IGhlYWRpbmcgdG93YXJkIHRoZSBuZXcgcHJvZ3Jlc3Mgc28gaXQnZCBhcHBlYXIgc3R1Y2sgdGh1cyB3ZSBmb3JjZSBhIHJlbmRlciBoZXJlLlxuXHRcdFx0XHRcdFx0aWYgKHNjcnViVHdlZW4ucmVzZXRUbykge1xuXHRcdFx0XHRcdFx0XHRzY3J1YlR3ZWVuLnJlc2V0VG8oXCJ0b3RhbFByb2dyZXNzXCIsIGNsaXBwZWQsIGFuaW1hdGlvbi5fdFRpbWUgLyBhbmltYXRpb24uX3REdXIpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHsgLy8gbGVnYWN5IHN1cHBvcnQgKGNvdXJ0ZXN5KSwgYmVmb3JlIDMuMTAuMFxuXHRcdFx0XHRcdFx0XHRzY3J1YlR3ZWVuLnZhcnMudG90YWxQcm9ncmVzcyA9IGNsaXBwZWQ7XG5cdFx0XHRcdFx0XHRcdHNjcnViVHdlZW4uaW52YWxpZGF0ZSgpLnJlc3RhcnQoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2UgaWYgKGFuaW1hdGlvbikge1xuXHRcdFx0XHRcdFx0YW5pbWF0aW9uLnRvdGFsUHJvZ3Jlc3MoY2xpcHBlZCwgISEoX3JlZnJlc2hpbmcgJiYgKGxhc3RSZWZyZXNoIHx8IHJlc2V0KSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAocGluKSB7XG5cdFx0XHRcdFx0cmVzZXQgJiYgcGluU3BhY2luZyAmJiAoc3BhY2VyLnN0eWxlW3BpblNwYWNpbmcgKyBkaXJlY3Rpb24ub3MyXSA9IHNwYWNpbmdTdGFydCk7XG5cdFx0XHRcdFx0aWYgKCF1c2VGaXhlZFBvc2l0aW9uKSB7XG5cdFx0XHRcdFx0XHRwaW5TZXR0ZXIoX3JvdW5kKHBpblN0YXJ0ICsgcGluQ2hhbmdlICogY2xpcHBlZCkpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc3RhdGVDaGFuZ2VkKSB7XG5cdFx0XHRcdFx0XHRpc0F0TWF4ID0gIXJlc2V0ICYmIGNsaXBwZWQgPiBwcmV2UHJvZ3Jlc3MgJiYgZW5kICsgMSA+IHNjcm9sbCAmJiBzY3JvbGwgKyAxID49IF9tYXhTY3JvbGwoc2Nyb2xsZXIsIGRpcmVjdGlvbik7IC8vIGlmIGl0J3MgYXQgdGhlIFZFUlkgZW5kIG9mIHRoZSBwYWdlLCBkb24ndCBzd2l0Y2ggYXdheSBmcm9tIHBvc2l0aW9uOiBmaXhlZCBiZWNhdXNlIGl0J3MgcG9pbnRsZXNzIGFuZCBpdCBjb3VsZCBjYXVzZSBhIGJyaWVmIGZsYXNoIHdoZW4gdGhlIHVzZXIgc2Nyb2xscyBiYWNrIHVwICh3aGVuIGl0IGdldHMgcGlubmVkIGFnYWluKVxuXHRcdFx0XHRcdFx0aWYgKHBpblJlcGFyZW50KSB7XG5cdFx0XHRcdFx0XHRcdGlmICghcmVzZXQgJiYgKGlzQWN0aXZlIHx8IGlzQXRNYXgpKSB7XG5cdFx0XHRcdFx0XHRcdFx0bGV0IGJvdW5kcyA9IF9nZXRCb3VuZHMocGluLCB0cnVlKSxcblx0XHRcdFx0XHRcdFx0XHRcdG9mZnNldCA9IHNjcm9sbCAtIHN0YXJ0O1xuXHRcdFx0XHRcdFx0XHRcdF9yZXBhcmVudChwaW4sIF9ib2R5LCAoYm91bmRzLnRvcCArIChkaXJlY3Rpb24gPT09IF92ZXJ0aWNhbCA/IG9mZnNldCA6IDApKSArIF9weCwgKGJvdW5kcy5sZWZ0ICsgKGRpcmVjdGlvbiA9PT0gX3ZlcnRpY2FsID8gMCA6IG9mZnNldCkpICsgX3B4KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRfcmVwYXJlbnQocGluLCBzcGFjZXIpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRfc2V0U3RhdGUoaXNBY3RpdmUgfHwgaXNBdE1heCA/IHBpbkFjdGl2ZVN0YXRlIDogcGluU3RhdGUpO1xuXHRcdFx0XHRcdFx0KHBpbk1vdmVzICYmIGNsaXBwZWQgPCAxICYmIGlzQWN0aXZlKSB8fCBwaW5TZXR0ZXIocGluU3RhcnQgKyAoY2xpcHBlZCA9PT0gMSAmJiAhaXNBdE1heCA/IHBpbkNoYW5nZSA6IDApKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0c25hcCAmJiAhdHdlZW5Uby50d2VlbiAmJiAhX3JlZnJlc2hpbmcgJiYgIV9zdGFydHVwICYmIHNuYXBEZWxheWVkQ2FsbC5yZXN0YXJ0KHRydWUpO1xuXHRcdFx0XHR0b2dnbGVDbGFzcyAmJiAodG9nZ2xlZCB8fCAob25jZSAmJiBjbGlwcGVkICYmIChjbGlwcGVkIDwgMSB8fCAhX2xpbWl0Q2FsbGJhY2tzKSkpICYmIF90b0FycmF5KHRvZ2dsZUNsYXNzLnRhcmdldHMpLmZvckVhY2goZWwgPT4gZWwuY2xhc3NMaXN0W2lzQWN0aXZlIHx8IG9uY2UgPyBcImFkZFwiIDogXCJyZW1vdmVcIl0odG9nZ2xlQ2xhc3MuY2xhc3NOYW1lKSk7IC8vIGNsYXNzZXMgY291bGQgYWZmZWN0IHBvc2l0aW9uaW5nLCBzbyBkbyBpdCBldmVuIGlmIHJlc2V0IG9yIHJlZnJlc2hpbmcgaXMgdHJ1ZS5cblx0XHRcdFx0b25VcGRhdGUgJiYgIWlzVG9nZ2xlICYmICFyZXNldCAmJiBvblVwZGF0ZShzZWxmKTtcblx0XHRcdFx0aWYgKHN0YXRlQ2hhbmdlZCAmJiAhX3JlZnJlc2hpbmcpIHtcblx0XHRcdFx0XHRpZiAoaXNUb2dnbGUpIHtcblx0XHRcdFx0XHRcdGlmIChpc1Rha2luZ0FjdGlvbikge1xuXHRcdFx0XHRcdFx0XHRpZiAoYWN0aW9uID09PSBcImNvbXBsZXRlXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRhbmltYXRpb24ucGF1c2UoKS50b3RhbFByb2dyZXNzKDEpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJyZXNldFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0YW5pbWF0aW9uLnJlc3RhcnQodHJ1ZSkucGF1c2UoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwicmVzdGFydFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0YW5pbWF0aW9uLnJlc3RhcnQodHJ1ZSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0YW5pbWF0aW9uW2FjdGlvbl0oKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0b25VcGRhdGUgJiYgb25VcGRhdGUoc2VsZik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICh0b2dnbGVkIHx8ICFfbGltaXRDYWxsYmFja3MpIHsgLy8gb24gc3RhcnR1cCwgdGhlIHBhZ2UgY291bGQgYmUgc2Nyb2xsZWQgYW5kIHdlIGRvbid0IHdhbnQgdG8gZmlyZSBjYWxsYmFja3MgdGhhdCBkaWRuJ3QgdG9nZ2xlLiBGb3IgZXhhbXBsZSBvbkVudGVyIHNob3VsZG4ndCBmaXJlIGlmIHRoZSBTY3JvbGxUcmlnZ2VyIGlzbid0IGFjdHVhbGx5IGVudGVyZWQuXG5cdFx0XHRcdFx0XHRvblRvZ2dsZSAmJiB0b2dnbGVkICYmIF9jYWxsYmFjayhzZWxmLCBvblRvZ2dsZSk7XG5cdFx0XHRcdFx0XHRjYWxsYmFja3NbdG9nZ2xlU3RhdGVdICYmIF9jYWxsYmFjayhzZWxmLCBjYWxsYmFja3NbdG9nZ2xlU3RhdGVdKTtcblx0XHRcdFx0XHRcdG9uY2UgJiYgKGNsaXBwZWQgPT09IDEgPyBzZWxmLmtpbGwoZmFsc2UsIDEpIDogKGNhbGxiYWNrc1t0b2dnbGVTdGF0ZV0gPSAwKSk7IC8vIGEgY2FsbGJhY2sgc2hvdWxkbid0IGJlIGNhbGxlZCBhZ2FpbiBpZiBvbmNlIGlzIHRydWUuXG5cdFx0XHRcdFx0XHRpZiAoIXRvZ2dsZWQpIHsgLy8gaXQncyBwb3NzaWJsZSB0byBnbyBjb21wbGV0ZWx5IHBhc3QsIGxpa2UgZnJvbSBiZWZvcmUgdGhlIHN0YXJ0IHRvIGFmdGVyIHRoZSBlbmQgKG9yIHZpY2UtdmVyc2EpIGluIHdoaWNoIGNhc2UgQk9USCBjYWxsYmFja3Mgc2hvdWxkIGJlIGZpcmVkIGluIHRoYXQgb3JkZXJcblx0XHRcdFx0XHRcdFx0dG9nZ2xlU3RhdGUgPSBjbGlwcGVkID09PSAxID8gMSA6IDM7XG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrc1t0b2dnbGVTdGF0ZV0gJiYgX2NhbGxiYWNrKHNlbGYsIGNhbGxiYWNrc1t0b2dnbGVTdGF0ZV0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoZmFzdFNjcm9sbEVuZCAmJiAhaXNBY3RpdmUgJiYgTWF0aC5hYnMoc2VsZi5nZXRWZWxvY2l0eSgpKSA+IChfaXNOdW1iZXIoZmFzdFNjcm9sbEVuZCkgPyBmYXN0U2Nyb2xsRW5kIDogMjUwMCkpIHtcblx0XHRcdFx0XHRcdF9lbmRBbmltYXRpb24oc2VsZi5jYWxsYmFja0FuaW1hdGlvbik7XG5cdFx0XHRcdFx0XHRzY3J1YlR3ZWVuID8gc2NydWJUd2Vlbi5wcm9ncmVzcygxKSA6IF9lbmRBbmltYXRpb24oYW5pbWF0aW9uLCBhY3Rpb24gPT09IFwicmV2ZXJzZVwiID8gMSA6ICFjbGlwcGVkLCAxKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoaXNUb2dnbGUgJiYgb25VcGRhdGUgJiYgIV9yZWZyZXNoaW5nKSB7XG5cdFx0XHRcdFx0b25VcGRhdGUoc2VsZik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIHVwZGF0ZSBhYnNvbHV0ZWx5LXBvc2l0aW9uZWQgbWFya2VycyAob25seSBpZiB0aGUgc2Nyb2xsZXIgaXNuJ3QgdGhlIHZpZXdwb3J0KVxuXHRcdFx0aWYgKG1hcmtlckVuZFNldHRlcikge1xuXHRcdFx0XHRsZXQgbiA9IGNvbnRhaW5lckFuaW1hdGlvbiA/IHNjcm9sbCAvIGNvbnRhaW5lckFuaW1hdGlvbi5kdXJhdGlvbigpICogKGNvbnRhaW5lckFuaW1hdGlvbi5fY2FTY3JvbGxEaXN0IHx8IDApIDogc2Nyb2xsO1xuXHRcdFx0XHRtYXJrZXJTdGFydFNldHRlcihuICsgKG1hcmtlclN0YXJ0VHJpZ2dlci5faXNGbGlwcGVkID8gMSA6IDApKTtcblx0XHRcdFx0bWFya2VyRW5kU2V0dGVyKG4pO1xuXHRcdFx0fVxuXHRcdFx0Y2FNYXJrZXJTZXR0ZXIgJiYgY2FNYXJrZXJTZXR0ZXIoLXNjcm9sbCAvIGNvbnRhaW5lckFuaW1hdGlvbi5kdXJhdGlvbigpICogKGNvbnRhaW5lckFuaW1hdGlvbi5fY2FTY3JvbGxEaXN0IHx8IDApKTtcblx0XHR9O1xuXG5cdFx0c2VsZi5lbmFibGUgPSAocmVzZXQsIHJlZnJlc2gpID0+IHtcblx0XHRcdGlmICghc2VsZi5lbmFibGVkKSB7XG5cdFx0XHRcdHNlbGYuZW5hYmxlZCA9IHRydWU7XG5cdFx0XHRcdF9hZGRMaXN0ZW5lcihzY3JvbGxlciwgXCJyZXNpemVcIiwgX29uUmVzaXplKTtcblx0XHRcdFx0aXNWaWV3cG9ydCB8fCBfYWRkTGlzdGVuZXIoc2Nyb2xsZXIsIFwic2Nyb2xsXCIsIF9vblNjcm9sbCk7XG5cdFx0XHRcdG9uUmVmcmVzaEluaXQgJiYgX2FkZExpc3RlbmVyKFNjcm9sbFRyaWdnZXIsIFwicmVmcmVzaEluaXRcIiwgb25SZWZyZXNoSW5pdCk7XG5cdFx0XHRcdGlmIChyZXNldCAhPT0gZmFsc2UpIHtcblx0XHRcdFx0XHRzZWxmLnByb2dyZXNzID0gcHJldlByb2dyZXNzID0gMDtcblx0XHRcdFx0XHRzY3JvbGwxID0gc2Nyb2xsMiA9IGxhc3RTbmFwID0gc2Nyb2xsRnVuYygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlZnJlc2ggIT09IGZhbHNlICYmIHNlbGYucmVmcmVzaCgpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRzZWxmLmdldFR3ZWVuID0gc25hcCA9PiBzbmFwICYmIHR3ZWVuVG8gPyB0d2VlblRvLnR3ZWVuIDogc2NydWJUd2VlbjtcblxuXHRcdHNlbGYuc2V0UG9zaXRpb25zID0gKG5ld1N0YXJ0LCBuZXdFbmQsIGtlZXBDbGFtcCwgcGluT2Zmc2V0KSA9PiB7IC8vIGRvZXNuJ3QgcGVyc2lzdCBhZnRlciByZWZyZXNoKCkhIEludGVuZGVkIHRvIGJlIGEgd2F5IHRvIG92ZXJyaWRlIHZhbHVlcyB0aGF0IHdlcmUgc2V0IGR1cmluZyByZWZyZXNoKCksIGxpa2UgeW91IGNvdWxkIHNldCBpdCBpbiBvblJlZnJlc2goKVxuXHRcdFx0aWYgKGNvbnRhaW5lckFuaW1hdGlvbikgeyAvLyBjb252ZXJ0IHJhdGlvcyBpbnRvIHNjcm9sbCBwb3NpdGlvbnMuIFJlbWVtYmVyLCBzdGFydC9lbmQgdmFsdWVzIG9uIFNjcm9sbFRyaWdnZXJzIHRoYXQgaGF2ZSBhIGNvbnRhaW5lckFuaW1hdGlvbiByZWZlciB0byB0aGUgdGltZSAoaW4gc2Vjb25kcyksIE5PVCBzY3JvbGwgcG9zaXRpb25zLlxuXHRcdFx0XHRsZXQgc3QgPSBjb250YWluZXJBbmltYXRpb24uc2Nyb2xsVHJpZ2dlcixcblx0XHRcdFx0XHRkdXJhdGlvbiA9IGNvbnRhaW5lckFuaW1hdGlvbi5kdXJhdGlvbigpLFxuXHRcdFx0XHRcdGNoYW5nZSA9IHN0LmVuZCAtIHN0LnN0YXJ0O1xuXHRcdFx0XHRuZXdTdGFydCA9IHN0LnN0YXJ0ICsgY2hhbmdlICogbmV3U3RhcnQgLyBkdXJhdGlvbjtcblx0XHRcdFx0bmV3RW5kID0gc3Quc3RhcnQgKyBjaGFuZ2UgKiBuZXdFbmQgLyBkdXJhdGlvbjtcblx0XHRcdH1cblx0XHRcdHNlbGYucmVmcmVzaChmYWxzZSwgZmFsc2UsIHtzdGFydDogX2tlZXBDbGFtcChuZXdTdGFydCwga2VlcENsYW1wICYmICEhc2VsZi5fc3RhcnRDbGFtcCksIGVuZDogX2tlZXBDbGFtcChuZXdFbmQsIGtlZXBDbGFtcCAmJiAhIXNlbGYuX2VuZENsYW1wKX0sIHBpbk9mZnNldCk7XG5cdFx0XHRzZWxmLnVwZGF0ZSgpO1xuXHRcdH07XG5cblx0XHRzZWxmLmFkanVzdFBpblNwYWNpbmcgPSBhbW91bnQgPT4ge1xuXHRcdFx0aWYgKHNwYWNlclN0YXRlICYmIGFtb3VudCkge1xuXHRcdFx0XHRsZXQgaSA9IHNwYWNlclN0YXRlLmluZGV4T2YoZGlyZWN0aW9uLmQpICsgMTtcblx0XHRcdFx0c3BhY2VyU3RhdGVbaV0gPSAocGFyc2VGbG9hdChzcGFjZXJTdGF0ZVtpXSkgKyBhbW91bnQpICsgX3B4O1xuXHRcdFx0XHRzcGFjZXJTdGF0ZVsxXSA9IChwYXJzZUZsb2F0KHNwYWNlclN0YXRlWzFdKSArIGFtb3VudCkgKyBfcHg7XG5cdFx0XHRcdF9zZXRTdGF0ZShzcGFjZXJTdGF0ZSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHNlbGYuZGlzYWJsZSA9IChyZXNldCwgYWxsb3dBbmltYXRpb24pID0+IHtcblx0XHRcdGlmIChzZWxmLmVuYWJsZWQpIHtcblx0XHRcdFx0cmVzZXQgIT09IGZhbHNlICYmIHNlbGYucmV2ZXJ0KHRydWUsIHRydWUpO1xuXHRcdFx0XHRzZWxmLmVuYWJsZWQgPSBzZWxmLmlzQWN0aXZlID0gZmFsc2U7XG5cdFx0XHRcdGFsbG93QW5pbWF0aW9uIHx8IChzY3J1YlR3ZWVuICYmIHNjcnViVHdlZW4ucGF1c2UoKSk7XG5cdFx0XHRcdHByZXZTY3JvbGwgPSAwO1xuXHRcdFx0XHRwaW5DYWNoZSAmJiAocGluQ2FjaGUudW5jYWNoZSA9IDEpO1xuXHRcdFx0XHRvblJlZnJlc2hJbml0ICYmIF9yZW1vdmVMaXN0ZW5lcihTY3JvbGxUcmlnZ2VyLCBcInJlZnJlc2hJbml0XCIsIG9uUmVmcmVzaEluaXQpO1xuXHRcdFx0XHRpZiAoc25hcERlbGF5ZWRDYWxsKSB7XG5cdFx0XHRcdFx0c25hcERlbGF5ZWRDYWxsLnBhdXNlKCk7XG5cdFx0XHRcdFx0dHdlZW5Uby50d2VlbiAmJiB0d2VlblRvLnR3ZWVuLmtpbGwoKSAmJiAodHdlZW5Uby50d2VlbiA9IDApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICghaXNWaWV3cG9ydCkge1xuXHRcdFx0XHRcdGxldCBpID0gX3RyaWdnZXJzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoaS0tKSB7XG5cdFx0XHRcdFx0XHRpZiAoX3RyaWdnZXJzW2ldLnNjcm9sbGVyID09PSBzY3JvbGxlciAmJiBfdHJpZ2dlcnNbaV0gIT09IHNlbGYpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuOyAvL2Rvbid0IHJlbW92ZSB0aGUgbGlzdGVuZXJzIGlmIHRoZXJlIGFyZSBzdGlsbCBvdGhlciB0cmlnZ2VycyByZWZlcmVuY2luZyBpdC5cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0X3JlbW92ZUxpc3RlbmVyKHNjcm9sbGVyLCBcInJlc2l6ZVwiLCBfb25SZXNpemUpO1xuXHRcdFx0XHRcdGlzVmlld3BvcnQgfHwgX3JlbW92ZUxpc3RlbmVyKHNjcm9sbGVyLCBcInNjcm9sbFwiLCBfb25TY3JvbGwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHNlbGYua2lsbCA9IChyZXZlcnQsIGFsbG93QW5pbWF0aW9uKSA9PiB7XG5cdFx0XHRzZWxmLmRpc2FibGUocmV2ZXJ0LCBhbGxvd0FuaW1hdGlvbik7XG5cdFx0XHRzY3J1YlR3ZWVuICYmICFhbGxvd0FuaW1hdGlvbiAmJiBzY3J1YlR3ZWVuLmtpbGwoKTtcblx0XHRcdGlkICYmIChkZWxldGUgX2lkc1tpZF0pO1xuXHRcdFx0bGV0IGkgPSBfdHJpZ2dlcnMuaW5kZXhPZihzZWxmKTtcblx0XHRcdGkgPj0gMCAmJiBfdHJpZ2dlcnMuc3BsaWNlKGksIDEpO1xuXHRcdFx0aSA9PT0gX2kgJiYgX2RpcmVjdGlvbiA+IDAgJiYgX2ktLTsgLy8gaWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHJlZnJlc2goKSBvciB1cGRhdGUoKSwgc3BsaWNpbmcgd291bGQgY2F1c2Ugc2tpcHMgaW4gdGhlIGluZGV4LCBzbyBhZGp1c3QuLi5cblxuXHRcdFx0Ly8gaWYgbm8gb3RoZXIgU2Nyb2xsVHJpZ2dlciBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgc2Nyb2xsZXIgYXJlIGZvdW5kLCB3aXBlIG91dCBhbnkgcmVjb3JkZWQgc2Nyb2xsIHBvc2l0aW9uLiBPdGhlcndpc2UsIGluIGEgc2luZ2xlIHBhZ2UgYXBwbGljYXRpb24sIGZvciBleGFtcGxlLCBpdCBjb3VsZCBtYWludGFpbiBzY3JvbGwgcG9zaXRpb24gd2hlbiBpdCByZWFsbHkgc2hvdWxkbid0LlxuXHRcdFx0aSA9IDA7XG5cdFx0XHRfdHJpZ2dlcnMuZm9yRWFjaCh0ID0+IHQuc2Nyb2xsZXIgPT09IHNlbGYuc2Nyb2xsZXIgJiYgKGkgPSAxKSk7XG5cdFx0XHRpIHx8IF9yZWZyZXNoaW5nQWxsIHx8IChzZWxmLnNjcm9sbC5yZWMgPSAwKTtcblxuXHRcdFx0aWYgKGFuaW1hdGlvbikge1xuXHRcdFx0XHRhbmltYXRpb24uc2Nyb2xsVHJpZ2dlciA9IG51bGw7XG5cdFx0XHRcdHJldmVydCAmJiBhbmltYXRpb24ucmV2ZXJ0KHtraWxsOiBmYWxzZX0pO1xuXHRcdFx0XHRhbGxvd0FuaW1hdGlvbiB8fCBhbmltYXRpb24ua2lsbCgpO1xuXHRcdFx0fVxuXHRcdFx0bWFya2VyU3RhcnQgJiYgW21hcmtlclN0YXJ0LCBtYXJrZXJFbmQsIG1hcmtlclN0YXJ0VHJpZ2dlciwgbWFya2VyRW5kVHJpZ2dlcl0uZm9yRWFjaChtID0+IG0ucGFyZW50Tm9kZSAmJiBtLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobSkpO1xuXHRcdFx0X3ByaW1hcnkgPT09IHNlbGYgJiYgKF9wcmltYXJ5ID0gMCk7XG5cdFx0XHRpZiAocGluKSB7XG5cdFx0XHRcdHBpbkNhY2hlICYmIChwaW5DYWNoZS51bmNhY2hlID0gMSk7XG5cdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRfdHJpZ2dlcnMuZm9yRWFjaCh0ID0+IHQucGluID09PSBwaW4gJiYgaSsrKTtcblx0XHRcdFx0aSB8fCAocGluQ2FjaGUuc3BhY2VyID0gMCk7IC8vIGlmIHRoZXJlIGFyZW4ndCBhbnkgbW9yZSBTY3JvbGxUcmlnZ2VycyB3aXRoIHRoZSBzYW1lIHBpbiwgcmVtb3ZlIHRoZSBzcGFjZXIsIG90aGVyd2lzZSBpdCBjb3VsZCBiZSBjb250YW1pbmF0ZWQgd2l0aCBvbGQvc3RhbGUgdmFsdWVzIGlmIHRoZSB1c2VyIHJlLWNyZWF0ZXMgYSBTY3JvbGxUcmlnZ2VyIGZvciB0aGUgc2FtZSBlbGVtZW50LlxuXHRcdFx0fVxuXHRcdFx0dmFycy5vbktpbGwgJiYgdmFycy5vbktpbGwoc2VsZik7XG5cdFx0fTtcblxuXHRcdF90cmlnZ2Vycy5wdXNoKHNlbGYpO1xuXHRcdHNlbGYuZW5hYmxlKGZhbHNlLCBmYWxzZSk7XG5cdFx0Y3VzdG9tUmV2ZXJ0UmV0dXJuICYmIGN1c3RvbVJldmVydFJldHVybihzZWxmKTtcblxuXHRcdGlmIChhbmltYXRpb24gJiYgYW5pbWF0aW9uLmFkZCAmJiAhY2hhbmdlKSB7IC8vIGlmIHRoZSBhbmltYXRpb24gaXMgYSB0aW1lbGluZSwgaXQgbWF5IG5vdCBoYXZlIGJlZW4gcG9wdWxhdGVkIHlldCwgc28gaXQgd291bGRuJ3QgcmVuZGVyIGF0IHRoZSBwcm9wZXIgcGxhY2Ugb24gdGhlIGZpcnN0IHJlZnJlc2goKSwgdGh1cyB3ZSBzaG91bGQgc2NoZWR1bGUgb25lIGZvciB0aGUgbmV4dCB0aWNrLiBJZiBcImNoYW5nZVwiIGlzIGRlZmluZWQsIHdlIGtub3cgaXQgbXVzdCBiZSByZS1lbmFibGluZywgdGh1cyB3ZSBjYW4gcmVmcmVzaCgpIHJpZ2h0IGF3YXkuXG5cdFx0XHRsZXQgdXBkYXRlRnVuYyA9IHNlbGYudXBkYXRlOyAvLyBzb21lIGJyb3dzZXJzIG1heSBmaXJlIGEgc2Nyb2xsIGV2ZW50IEJFRk9SRSBhIHRpY2sgZWxhcHNlcyBhbmQvb3IgdGhlIERPTUNvbnRlbnRMb2FkZWQgZmlyZXMuIFNvIHRoZXJlJ3MgYSBjaGFuY2UgdXBkYXRlKCkgd2lsbCBiZSBjYWxsZWQgQkVGT1JFIGEgcmVmcmVzaCgpIGhhcyBoYXBwZW5lZCBvbiBhIFRpbWVsaW5lLWF0dGFjaGVkIFNjcm9sbFRyaWdnZXIgd2hpY2ggbWVhbnMgdGhlIHN0YXJ0L2VuZCB3b24ndCBiZSBjYWxjdWxhdGVkIHlldC4gV2UgZG9uJ3Qgd2FudCB0byBhZGQgY29uZGl0aW9uYWwgbG9naWMgaW5zaWRlIHRoZSB1cGRhdGUoKSBtZXRob2QgKGxpa2UgY2hlY2sgdG8gc2VlIGlmIGVuZCBpcyBkZWZpbmVkIGFuZCBpZiBub3QsIGZvcmNlIGEgcmVmcmVzaCgpKSBiZWNhdXNlIHRoYXQncyBhIGZ1bmN0aW9uIHRoYXQgZ2V0cyBoaXQgYSBMT1QgKHBlcmZvcm1hbmNlKS4gU28gd2Ugc3dhcCBvdXQgdGhlIHJlYWwgdXBkYXRlKCkgbWV0aG9kIGZvciB0aGlzIG9uZSB0aGF0J2xsIHJlLWF0dGFjaCBpdCB0aGUgZmlyc3QgdGltZSBpdCBnZXRzIGNhbGxlZCBhbmQgb2YgY291cnNlIGZvcmNlcyBhIHJlZnJlc2goKS5cblx0XHRcdHNlbGYudXBkYXRlID0gKCkgPT4ge1xuXHRcdFx0XHRzZWxmLnVwZGF0ZSA9IHVwZGF0ZUZ1bmM7XG5cdFx0XHRcdF9zY3JvbGxlcnMuY2FjaGUrKzsgLy8gb3RoZXJ3aXNlIGEgY2FjaGVkIHNjcm9sbCBwb3NpdGlvbiBtYXkgZ2V0IHVzZWQgaW4gdGhlIHJlZnJlc2goKSBpbiBhIHZlcnkgcmFyZSBzY2VuYXJpbywgbGlrZSBpZiBTY3JvbGxUcmlnZ2VycyBhcmUgY3JlYXRlZCBpbnNpZGUgYSBET01Db250ZW50TG9hZGVkIGV2ZW50IGFuZCB0aGUgcXVldWVkIHJlcXVlc3RBbmltYXRpb25GcmFtZSgpIGZpcmVzIGJlZm9yZWhhbmQuIFNlZSBodHRwczovL2dzYXAuY29tL2NvbW11bml0eS9mb3J1bXMvdG9waWMvNDEyNjctc2Nyb2xsdHJpZ2dlci1icmVha3Mtb24tcmVmcmVzaC13aGVuLXVzaW5nLWRvbWNvbnRlbnRsb2FkZWQvXG5cdFx0XHRcdHN0YXJ0IHx8IGVuZCB8fCBzZWxmLnJlZnJlc2goKTtcblx0XHRcdH07XG5cdFx0XHRnc2FwLmRlbGF5ZWRDYWxsKDAuMDEsIHNlbGYudXBkYXRlKTtcblx0XHRcdGNoYW5nZSA9IDAuMDE7XG5cdFx0XHRzdGFydCA9IGVuZCA9IDA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNlbGYucmVmcmVzaCgpO1xuXHRcdH1cblx0XHRwaW4gJiYgX3F1ZXVlUmVmcmVzaEFsbCgpOyAvLyBwaW5uaW5nIGNvdWxkIGFmZmVjdCB0aGUgcG9zaXRpb25zIG9mIG90aGVyIHRoaW5ncywgc28gbWFrZSBzdXJlIHdlIHF1ZXVlIGEgZnVsbCByZWZyZXNoKClcblx0fVxuXG5cblx0c3RhdGljIHJlZ2lzdGVyKGNvcmUpIHtcblx0XHRpZiAoIV9jb3JlSW5pdHRlZCkge1xuXHRcdFx0Z3NhcCA9IGNvcmUgfHwgX2dldEdTQVAoKTtcblx0XHRcdF93aW5kb3dFeGlzdHMoKSAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgU2Nyb2xsVHJpZ2dlci5lbmFibGUoKTtcblx0XHRcdF9jb3JlSW5pdHRlZCA9IF9lbmFibGVkO1xuXHRcdH1cblx0XHRyZXR1cm4gX2NvcmVJbml0dGVkO1xuXHR9XG5cblx0c3RhdGljIGRlZmF1bHRzKGNvbmZpZykge1xuXHRcdGlmIChjb25maWcpIHtcblx0XHRcdGZvciAobGV0IHAgaW4gY29uZmlnKSB7XG5cdFx0XHRcdF9kZWZhdWx0c1twXSA9IGNvbmZpZ1twXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIF9kZWZhdWx0cztcblx0fVxuXG5cdHN0YXRpYyBkaXNhYmxlKHJlc2V0LCBraWxsKSB7XG5cdFx0X2VuYWJsZWQgPSAwO1xuXHRcdF90cmlnZ2Vycy5mb3JFYWNoKHRyaWdnZXIgPT4gdHJpZ2dlcltraWxsID8gXCJraWxsXCIgOiBcImRpc2FibGVcIl0ocmVzZXQpKTtcblx0XHRfcmVtb3ZlTGlzdGVuZXIoX3dpbiwgXCJ3aGVlbFwiLCBfb25TY3JvbGwpO1xuXHRcdF9yZW1vdmVMaXN0ZW5lcihfZG9jLCBcInNjcm9sbFwiLCBfb25TY3JvbGwpO1xuXHRcdGNsZWFySW50ZXJ2YWwoX3N5bmNJbnRlcnZhbCk7XG5cdFx0X3JlbW92ZUxpc3RlbmVyKF9kb2MsIFwidG91Y2hjYW5jZWxcIiwgX3Bhc3NUaHJvdWdoKTtcblx0XHRfcmVtb3ZlTGlzdGVuZXIoX2JvZHksIFwidG91Y2hzdGFydFwiLCBfcGFzc1Rocm91Z2gpO1xuXHRcdF9tdWx0aUxpc3RlbmVyKF9yZW1vdmVMaXN0ZW5lciwgX2RvYywgXCJwb2ludGVyZG93bix0b3VjaHN0YXJ0LG1vdXNlZG93blwiLCBfcG9pbnRlckRvd25IYW5kbGVyKTtcblx0XHRfbXVsdGlMaXN0ZW5lcihfcmVtb3ZlTGlzdGVuZXIsIF9kb2MsIFwicG9pbnRlcnVwLHRvdWNoZW5kLG1vdXNldXBcIiwgX3BvaW50ZXJVcEhhbmRsZXIpO1xuXHRcdF9yZXNpemVEZWxheS5raWxsKCk7XG5cdFx0X2l0ZXJhdGVBdXRvUmVmcmVzaChfcmVtb3ZlTGlzdGVuZXIpO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgX3Njcm9sbGVycy5sZW5ndGg7IGkrPTMpIHtcblx0XHRcdF93aGVlbExpc3RlbmVyKF9yZW1vdmVMaXN0ZW5lciwgX3Njcm9sbGVyc1tpXSwgX3Njcm9sbGVyc1tpKzFdKTtcblx0XHRcdF93aGVlbExpc3RlbmVyKF9yZW1vdmVMaXN0ZW5lciwgX3Njcm9sbGVyc1tpXSwgX3Njcm9sbGVyc1tpKzJdKTtcblx0XHR9XG5cdH1cblxuXHRzdGF0aWMgZW5hYmxlKCkge1xuXHRcdF93aW4gPSB3aW5kb3c7XG5cdFx0X2RvYyA9IGRvY3VtZW50O1xuXHRcdF9kb2NFbCA9IF9kb2MuZG9jdW1lbnRFbGVtZW50O1xuXHRcdF9ib2R5ID0gX2RvYy5ib2R5O1xuXHRcdGlmIChnc2FwKSB7XG5cdFx0XHRfdG9BcnJheSA9IGdzYXAudXRpbHMudG9BcnJheTtcblx0XHRcdF9jbGFtcCA9IGdzYXAudXRpbHMuY2xhbXA7XG5cdFx0XHRfY29udGV4dCA9IGdzYXAuY29yZS5jb250ZXh0IHx8IF9wYXNzVGhyb3VnaDtcblx0XHRcdF9zdXBwcmVzc092ZXJ3cml0ZXMgPSBnc2FwLmNvcmUuc3VwcHJlc3NPdmVyd3JpdGVzIHx8IF9wYXNzVGhyb3VnaDtcblx0XHRcdF9zY3JvbGxSZXN0b3JhdGlvbiA9IF93aW4uaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiB8fCBcImF1dG9cIjtcblx0XHRcdF9sYXN0U2Nyb2xsID0gX3dpbi5wYWdlWU9mZnNldCB8fCAwO1xuXHRcdFx0Z3NhcC5jb3JlLmdsb2JhbHMoXCJTY3JvbGxUcmlnZ2VyXCIsIFNjcm9sbFRyaWdnZXIpOyAvLyBtdXN0IHJlZ2lzdGVyIHRoZSBnbG9iYWwgbWFudWFsbHkgYmVjYXVzZSBpbiBJbnRlcm5ldCBFeHBsb3JlciwgZnVuY3Rpb25zIChjbGFzc2VzKSBkb24ndCBoYXZlIGEgXCJuYW1lXCIgcHJvcGVydHkuXG5cdFx0XHRpZiAoX2JvZHkpIHtcblx0XHRcdFx0X2VuYWJsZWQgPSAxO1xuXHRcdFx0XHRfZGl2MTAwdmggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpOyAvLyB0byBzb2x2ZSBtb2JpbGUgYnJvd3NlciBhZGRyZXNzIGJhciBzaG93L2hpZGUgcmVzaXppbmcsIHdlIHNob3VsZG4ndCByZWx5IG9uIHdpbmRvdy5pbm5lckhlaWdodC4gSW5zdGVhZCwgdXNlIGEgPGRpdj4gd2l0aCBpdHMgaGVpZ2h0IHNldCB0byAxMDB2aCBhbmQgbWVhc3VyZSB0aGF0IHNpbmNlIHRoYXQncyB3aGF0IHRoZSBzY3JvbGxpbmcgaXMgYmFzZWQgb24gYW55d2F5IGFuZCBpdCdzIG5vdCBhZmZlY3RlZCBieSBhZGRyZXNzIGJhciBzaG93aW5nL2hpZGluZy5cblx0XHRcdFx0X2RpdjEwMHZoLnN0eWxlLmhlaWdodCA9IFwiMTAwdmhcIjtcblx0XHRcdFx0X2RpdjEwMHZoLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXHRcdFx0XHRfcmVmcmVzaDEwMHZoKCk7XG5cdFx0XHRcdF9yYWZCdWdGaXgoKTtcblx0XHRcdFx0T2JzZXJ2ZXIucmVnaXN0ZXIoZ3NhcCk7XG5cdFx0XHRcdC8vIGlzVG91Y2ggaXMgMCBpZiBubyB0b3VjaCwgMSBpZiBPTkxZIHRvdWNoLCBhbmQgMiBpZiBpdCBjYW4gYWNjb21tb2RhdGUgdG91Y2ggYnV0IGFsc28gb3RoZXIgdHlwZXMgbGlrZSBtb3VzZS9wb2ludGVyLlxuXHRcdFx0XHRTY3JvbGxUcmlnZ2VyLmlzVG91Y2ggPSBPYnNlcnZlci5pc1RvdWNoO1xuXHRcdFx0XHRfZml4SU9TQnVnID0gT2JzZXJ2ZXIuaXNUb3VjaCAmJiAvKGlQYWR8aVBob25lfGlQb2R8TWFjKS9nLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7IC8vIHNpbmNlIDIwMTcsIGlPUyBoYXMgaGFkIGEgYnVnIHRoYXQgY2F1c2VzIGV2ZW50LmNsaWVudFgvWSB0byBiZSBpbmFjY3VyYXRlIHdoZW4gYSBzY3JvbGwgb2NjdXJzLCB0aHVzIHdlIG11c3QgYWx0ZXJuYXRlIGlnbm9yaW5nIGV2ZXJ5IG90aGVyIHRvdWNobW92ZSBldmVudCB0byB3b3JrIGFyb3VuZCBpdC4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE5NTQgYW5kIGh0dHBzOi8vY29kZXBlbi5pby9HcmVlblNvY2svcGVuL0V4YnJQTmEvMDg3Y2VmMTk3ZGMzNTQ0NWEwOTUxZTg5MzVjNDE1MDNcblx0XHRcdFx0X2lnbm9yZU1vYmlsZVJlc2l6ZSA9IE9ic2VydmVyLmlzVG91Y2ggPT09IDE7XG5cdFx0XHRcdF9hZGRMaXN0ZW5lcihfd2luLCBcIndoZWVsXCIsIF9vblNjcm9sbCk7IC8vIG1vc3RseSBmb3IgM3JkIHBhcnR5IHNtb290aCBzY3JvbGxpbmcgbGlicmFyaWVzLlxuXHRcdFx0XHRfcm9vdCA9IFtfd2luLCBfZG9jLCBfZG9jRWwsIF9ib2R5XTtcblx0XHRcdFx0aWYgKGdzYXAubWF0Y2hNZWRpYSkge1xuXHRcdFx0XHRcdFNjcm9sbFRyaWdnZXIubWF0Y2hNZWRpYSA9IHZhcnMgPT4ge1xuXHRcdFx0XHRcdFx0bGV0IG1tID0gZ3NhcC5tYXRjaE1lZGlhKCksXG5cdFx0XHRcdFx0XHRcdHA7XG5cdFx0XHRcdFx0XHRmb3IgKHAgaW4gdmFycykge1xuXHRcdFx0XHRcdFx0XHRtbS5hZGQocCwgdmFyc1twXSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gbW07XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRnc2FwLmFkZEV2ZW50TGlzdGVuZXIoXCJtYXRjaE1lZGlhSW5pdFwiLCAoKSA9PiBfcmV2ZXJ0QWxsKCkpO1xuXHRcdFx0XHRcdGdzYXAuYWRkRXZlbnRMaXN0ZW5lcihcIm1hdGNoTWVkaWFSZXZlcnRcIiwgKCkgPT4gX3JldmVydFJlY29yZGVkKCkpO1xuXHRcdFx0XHRcdGdzYXAuYWRkRXZlbnRMaXN0ZW5lcihcIm1hdGNoTWVkaWFcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdFx0X3JlZnJlc2hBbGwoMCwgMSk7XG5cdFx0XHRcdFx0XHRfZGlzcGF0Y2goXCJtYXRjaE1lZGlhXCIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGdzYXAubWF0Y2hNZWRpYSgpLmFkZChcIihvcmllbnRhdGlvbjogcG9ydHJhaXQpXCIsICgpID0+IHsgLy8gd2hlbiBvcmllbnRhdGlvbiBjaGFuZ2VzLCB3ZSBzaG91bGQgdGFrZSBuZXcgYmFzZSBtZWFzdXJlbWVudHMgZm9yIHRoZSBpZ25vcmVNb2JpbGVSZXNpemUgZmVhdHVyZS5cblx0XHRcdFx0XHRcdF9zZXRCYXNlRGltZW5zaW9ucygpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIF9zZXRCYXNlRGltZW5zaW9ucztcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zb2xlLndhcm4oXCJSZXF1aXJlcyBHU0FQIDMuMTEuMCBvciBsYXRlclwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRfc2V0QmFzZURpbWVuc2lvbnMoKTtcblx0XHRcdFx0X2FkZExpc3RlbmVyKF9kb2MsIFwic2Nyb2xsXCIsIF9vblNjcm9sbCk7IC8vIHNvbWUgYnJvd3NlcnMgKGxpa2UgQ2hyb21lKSwgdGhlIHdpbmRvdyBzdG9wcyBkaXNwYXRjaGluZyBzY3JvbGwgZXZlbnRzIG9uIHRoZSB3aW5kb3cgaWYgeW91IHNjcm9sbCByZWFsbHkgZmFzdCwgYnV0IGl0J3MgY29uc2lzdGVudCBvbiB0aGUgZG9jdW1lbnQhXG5cdFx0XHRcdGxldCBib2R5SGFzU3R5bGUgPSBfYm9keS5oYXNBdHRyaWJ1dGUoXCJzdHlsZVwiKSxcblx0XHRcdFx0XHRib2R5U3R5bGUgPSBfYm9keS5zdHlsZSxcblx0XHRcdFx0XHRib3JkZXIgPSBib2R5U3R5bGUuYm9yZGVyVG9wU3R5bGUsXG5cdFx0XHRcdFx0QW5pbWF0aW9uUHJvdG8gPSBnc2FwLmNvcmUuQW5pbWF0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0XHRib3VuZHMsIGk7XG5cdFx0XHRcdEFuaW1hdGlvblByb3RvLnJldmVydCB8fCBPYmplY3QuZGVmaW5lUHJvcGVydHkoQW5pbWF0aW9uUHJvdG8sIFwicmV2ZXJ0XCIsIHsgdmFsdWU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy50aW1lKC0wLjAxLCB0cnVlKTsgfX0pOyAvLyBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAoQW5pbWF0aW9uLnJldmVydCgpIHdhcyBhZGRlZCBhZnRlciAzLjEwLjQpXG5cdFx0XHRcdGJvZHlTdHlsZS5ib3JkZXJUb3BTdHlsZSA9IFwic29saWRcIjsgLy8gd29ya3MgYXJvdW5kIGFuIGlzc3VlIHdoZXJlIGEgbWFyZ2luIG9mIGEgY2hpbGQgZWxlbWVudCBjb3VsZCB0aHJvdyBvZmYgdGhlIGJvdW5kcyBvZiB0aGUgX2JvZHksIG1ha2luZyBpdCBzZWVtIGxpa2UgdGhlcmUncyBhIG1hcmdpbiB3aGVuIHRoZXJlIGFjdHVhbGx5IGlzbid0LiBUaGUgYm9yZGVyIGVuc3VyZXMgdGhhdCB0aGUgYm91bmRzIGFyZSBhY2N1cmF0ZS5cblx0XHRcdFx0Ym91bmRzID0gX2dldEJvdW5kcyhfYm9keSk7XG5cdFx0XHRcdF92ZXJ0aWNhbC5tID0gTWF0aC5yb3VuZChib3VuZHMudG9wICsgX3ZlcnRpY2FsLnNjKCkpIHx8IDA7IC8vIGFjY29tbW9kYXRlIHRoZSBvZmZzZXQgb2YgdGhlIDxib2R5PiBjYXVzZWQgYnkgbWFyZ2lucyBhbmQvb3IgcGFkZGluZ1xuXHRcdFx0XHRfaG9yaXpvbnRhbC5tID0gTWF0aC5yb3VuZChib3VuZHMubGVmdCArIF9ob3Jpem9udGFsLnNjKCkpIHx8IDA7XG5cdFx0XHRcdGJvcmRlciA/IChib2R5U3R5bGUuYm9yZGVyVG9wU3R5bGUgPSBib3JkZXIpIDogYm9keVN0eWxlLnJlbW92ZVByb3BlcnR5KFwiYm9yZGVyLXRvcC1zdHlsZVwiKTtcblx0XHRcdFx0aWYgKCFib2R5SGFzU3R5bGUpIHsgLy8gU1NSIGZyYW1ld29ya3MgbGlrZSBOZXh0LmpzIGNvbXBsYWluIGlmIHRoaXMgYXR0cmlidXRlIGdldHMgYWRkZWQuXG5cdFx0XHRcdFx0X2JvZHkuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJcIik7IC8vIGl0J3Mgbm90IGVub3VnaCB0byBqdXN0IHJlbW92ZUF0dHJpYnV0ZSgpIC0gd2UgbXVzdCBmaXJzdCBzZXQgaXQgdG8gZW1wdHksIG90aGVyd2lzZSBOZXh0LmpzIGNvbXBsYWlucy5cblx0XHRcdFx0XHRfYm9keS5yZW1vdmVBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBUT0RPOiAoPykgbWF5YmUgbW92ZSB0byBsZXZlcmFnaW5nIHRoZSB2ZWxvY2l0eSBtZWNoYW5pc20gaW4gT2JzZXJ2ZXIgYW5kIHNraXAgaW50ZXJ2YWxzLlxuXHRcdFx0XHRfc3luY0ludGVydmFsID0gc2V0SW50ZXJ2YWwoX3N5bmMsIDI1MCk7XG5cdFx0XHRcdGdzYXAuZGVsYXllZENhbGwoMC41LCAoKSA9PiBfc3RhcnR1cCA9IDApO1xuXHRcdFx0XHRfYWRkTGlzdGVuZXIoX2RvYywgXCJ0b3VjaGNhbmNlbFwiLCBfcGFzc1Rocm91Z2gpOyAvLyBzb21lIG9sZGVyIEFuZHJvaWQgZGV2aWNlcyBpbnRlcm1pdHRlbnRseSBzdG9wIGRpc3BhdGNoaW5nIFwidG91Y2htb3ZlXCIgZXZlbnRzIGlmIHdlIGRvbid0IGxpc3RlbiBmb3IgXCJ0b3VjaGNhbmNlbFwiIG9uIHRoZSBkb2N1bWVudC5cblx0XHRcdFx0X2FkZExpc3RlbmVyKF9ib2R5LCBcInRvdWNoc3RhcnRcIiwgX3Bhc3NUaHJvdWdoKTsgLy93b3JrcyBhcm91bmQgU2FmYXJpIGJ1ZzogaHR0cHM6Ly9nc2FwLmNvbS9mb3J1bXMvdG9waWMvMjE0NTAtZHJhZ2dhYmxlLWluLWlmcmFtZS1vbi1tb2JpbGUtaXMtYnVnZ3kvXG5cdFx0XHRcdF9tdWx0aUxpc3RlbmVyKF9hZGRMaXN0ZW5lciwgX2RvYywgXCJwb2ludGVyZG93bix0b3VjaHN0YXJ0LG1vdXNlZG93blwiLCBfcG9pbnRlckRvd25IYW5kbGVyKTtcblx0XHRcdFx0X211bHRpTGlzdGVuZXIoX2FkZExpc3RlbmVyLCBfZG9jLCBcInBvaW50ZXJ1cCx0b3VjaGVuZCxtb3VzZXVwXCIsIF9wb2ludGVyVXBIYW5kbGVyKTtcblx0XHRcdFx0X3RyYW5zZm9ybVByb3AgPSBnc2FwLnV0aWxzLmNoZWNrUHJlZml4KFwidHJhbnNmb3JtXCIpO1xuXHRcdFx0XHRfc3RhdGVQcm9wcy5wdXNoKF90cmFuc2Zvcm1Qcm9wKTtcblx0XHRcdFx0X2NvcmVJbml0dGVkID0gX2dldFRpbWUoKTtcblx0XHRcdFx0X3Jlc2l6ZURlbGF5ID0gZ3NhcC5kZWxheWVkQ2FsbCgwLjIsIF9yZWZyZXNoQWxsKS5wYXVzZSgpO1xuXHRcdFx0XHRfYXV0b1JlZnJlc2ggPSBbX2RvYywgXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsICgpID0+IHtcblx0XHRcdFx0XHRsZXQgdyA9IF93aW4uaW5uZXJXaWR0aCxcblx0XHRcdFx0XHRcdGggPSBfd2luLmlubmVySGVpZ2h0O1xuXHRcdFx0XHRcdGlmIChfZG9jLmhpZGRlbikge1xuXHRcdFx0XHRcdFx0X3ByZXZXaWR0aCA9IHc7XG5cdFx0XHRcdFx0XHRfcHJldkhlaWdodCA9IGg7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChfcHJldldpZHRoICE9PSB3IHx8IF9wcmV2SGVpZ2h0ICE9PSBoKSB7XG5cdFx0XHRcdFx0XHRfb25SZXNpemUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sIF9kb2MsIFwiRE9NQ29udGVudExvYWRlZFwiLCBfcmVmcmVzaEFsbCwgX3dpbiwgXCJsb2FkXCIsIF9yZWZyZXNoQWxsLCBfd2luLCBcInJlc2l6ZVwiLCBfb25SZXNpemVdO1xuXHRcdFx0XHRfaXRlcmF0ZUF1dG9SZWZyZXNoKF9hZGRMaXN0ZW5lcik7XG5cdFx0XHRcdF90cmlnZ2Vycy5mb3JFYWNoKHRyaWdnZXIgPT4gdHJpZ2dlci5lbmFibGUoMCwgMSkpO1xuXHRcdFx0XHRmb3IgKGkgPSAwOyBpIDwgX3Njcm9sbGVycy5sZW5ndGg7IGkrPTMpIHtcblx0XHRcdFx0XHRfd2hlZWxMaXN0ZW5lcihfcmVtb3ZlTGlzdGVuZXIsIF9zY3JvbGxlcnNbaV0sIF9zY3JvbGxlcnNbaSsxXSk7XG5cdFx0XHRcdFx0X3doZWVsTGlzdGVuZXIoX3JlbW92ZUxpc3RlbmVyLCBfc2Nyb2xsZXJzW2ldLCBfc2Nyb2xsZXJzW2krMl0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0c3RhdGljIGNvbmZpZyh2YXJzKSB7XG5cdFx0KFwibGltaXRDYWxsYmFja3NcIiBpbiB2YXJzKSAmJiAoX2xpbWl0Q2FsbGJhY2tzID0gISF2YXJzLmxpbWl0Q2FsbGJhY2tzKTtcblx0XHRsZXQgbXMgPSB2YXJzLnN5bmNJbnRlcnZhbDtcblx0XHRtcyAmJiBjbGVhckludGVydmFsKF9zeW5jSW50ZXJ2YWwpIHx8ICgoX3N5bmNJbnRlcnZhbCA9IG1zKSAmJiBzZXRJbnRlcnZhbChfc3luYywgbXMpKTtcblx0XHQoXCJpZ25vcmVNb2JpbGVSZXNpemVcIiBpbiB2YXJzKSAmJiAoX2lnbm9yZU1vYmlsZVJlc2l6ZSA9IFNjcm9sbFRyaWdnZXIuaXNUb3VjaCA9PT0gMSAmJiB2YXJzLmlnbm9yZU1vYmlsZVJlc2l6ZSk7XG5cdFx0aWYgKFwiYXV0b1JlZnJlc2hFdmVudHNcIiBpbiB2YXJzKSB7XG5cdFx0XHRfaXRlcmF0ZUF1dG9SZWZyZXNoKF9yZW1vdmVMaXN0ZW5lcikgfHwgX2l0ZXJhdGVBdXRvUmVmcmVzaChfYWRkTGlzdGVuZXIsIHZhcnMuYXV0b1JlZnJlc2hFdmVudHMgfHwgXCJub25lXCIpO1xuXHRcdFx0X2lnbm9yZVJlc2l6ZSA9ICh2YXJzLmF1dG9SZWZyZXNoRXZlbnRzICsgXCJcIikuaW5kZXhPZihcInJlc2l6ZVwiKSA9PT0gLTE7XG5cdFx0fVxuXHR9XG5cblx0c3RhdGljIHNjcm9sbGVyUHJveHkodGFyZ2V0LCB2YXJzKSB7XG5cdFx0bGV0IHQgPSBfZ2V0VGFyZ2V0KHRhcmdldCksXG5cdFx0XHRpID0gX3Njcm9sbGVycy5pbmRleE9mKHQpLFxuXHRcdFx0aXNWaWV3cG9ydCA9IF9pc1ZpZXdwb3J0KHQpO1xuXHRcdGlmICh+aSkge1xuXHRcdFx0X3Njcm9sbGVycy5zcGxpY2UoaSwgaXNWaWV3cG9ydCA/IDYgOiAyKTtcblx0XHR9XG5cdFx0aWYgKHZhcnMpIHtcblx0XHRcdGlzVmlld3BvcnQgPyBfcHJveGllcy51bnNoaWZ0KF93aW4sIHZhcnMsIF9ib2R5LCB2YXJzLCBfZG9jRWwsIHZhcnMpIDogX3Byb3hpZXMudW5zaGlmdCh0LCB2YXJzKTtcblx0XHR9XG5cdH1cblxuXHRzdGF0aWMgY2xlYXJNYXRjaE1lZGlhKHF1ZXJ5KSB7XG5cdFx0X3RyaWdnZXJzLmZvckVhY2godCA9PiB0Ll9jdHggJiYgdC5fY3R4LnF1ZXJ5ID09PSBxdWVyeSAmJiB0Ll9jdHgua2lsbCh0cnVlLCB0cnVlKSk7XG5cdH1cblxuXHRzdGF0aWMgaXNJblZpZXdwb3J0KGVsZW1lbnQsIHJhdGlvLCBob3Jpem9udGFsKSB7XG5cdFx0bGV0IGJvdW5kcyA9IChfaXNTdHJpbmcoZWxlbWVudCkgPyBfZ2V0VGFyZ2V0KGVsZW1lbnQpIDogZWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG5cdFx0XHRvZmZzZXQgPSBib3VuZHNbaG9yaXpvbnRhbCA/IF93aWR0aCA6IF9oZWlnaHRdICogcmF0aW8gfHwgMDtcblx0XHRyZXR1cm4gaG9yaXpvbnRhbCA/IGJvdW5kcy5yaWdodCAtIG9mZnNldCA+IDAgJiYgYm91bmRzLmxlZnQgKyBvZmZzZXQgPCBfd2luLmlubmVyV2lkdGggOiBib3VuZHMuYm90dG9tIC0gb2Zmc2V0ID4gMCAmJiBib3VuZHMudG9wICsgb2Zmc2V0IDwgX3dpbi5pbm5lckhlaWdodDtcblx0fVxuXG5cdHN0YXRpYyBwb3NpdGlvbkluVmlld3BvcnQoZWxlbWVudCwgcmVmZXJlbmNlUG9pbnQsIGhvcml6b250YWwpIHtcblx0XHRfaXNTdHJpbmcoZWxlbWVudCkgJiYgKGVsZW1lbnQgPSBfZ2V0VGFyZ2V0KGVsZW1lbnQpKTtcblx0XHRsZXQgYm91bmRzID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcblx0XHRcdHNpemUgPSBib3VuZHNbaG9yaXpvbnRhbCA/IF93aWR0aCA6IF9oZWlnaHRdLFxuXHRcdFx0b2Zmc2V0ID0gcmVmZXJlbmNlUG9pbnQgPT0gbnVsbCA/IHNpemUgLyAyIDogKChyZWZlcmVuY2VQb2ludCBpbiBfa2V5d29yZHMpID8gX2tleXdvcmRzW3JlZmVyZW5jZVBvaW50XSAqIHNpemUgOiB+cmVmZXJlbmNlUG9pbnQuaW5kZXhPZihcIiVcIikgPyBwYXJzZUZsb2F0KHJlZmVyZW5jZVBvaW50KSAqIHNpemUgLyAxMDAgOiBwYXJzZUZsb2F0KHJlZmVyZW5jZVBvaW50KSB8fCAwKTtcblx0XHRyZXR1cm4gaG9yaXpvbnRhbCA/IChib3VuZHMubGVmdCArIG9mZnNldCkgLyBfd2luLmlubmVyV2lkdGggOiAoYm91bmRzLnRvcCArIG9mZnNldCkgLyBfd2luLmlubmVySGVpZ2h0O1xuXHR9XG5cblx0c3RhdGljIGtpbGxBbGwoYWxsb3dMaXN0ZW5lcnMpIHtcblx0XHRfdHJpZ2dlcnMuc2xpY2UoMCkuZm9yRWFjaCh0ID0+IHQudmFycy5pZCAhPT0gXCJTY3JvbGxTbW9vdGhlclwiICYmIHQua2lsbCgpKTtcblx0XHRpZiAoYWxsb3dMaXN0ZW5lcnMgIT09IHRydWUpIHtcblx0XHRcdGxldCBsaXN0ZW5lcnMgPSBfbGlzdGVuZXJzLmtpbGxBbGwgfHwgW107XG5cdFx0XHRfbGlzdGVuZXJzID0ge307XG5cdFx0XHRsaXN0ZW5lcnMuZm9yRWFjaChmID0+IGYoKSk7XG5cdFx0fVxuXHR9XG5cbn1cblxuU2Nyb2xsVHJpZ2dlci52ZXJzaW9uID0gXCIzLjEyLjdcIjtcblNjcm9sbFRyaWdnZXIuc2F2ZVN0eWxlcyA9IHRhcmdldHMgPT4gdGFyZ2V0cyA/IF90b0FycmF5KHRhcmdldHMpLmZvckVhY2godGFyZ2V0ID0+IHsgLy8gc2F2ZWQgc3R5bGVzIGFyZSByZWNvcmRlZCBpbiBhIGNvbnNlY3V0aXZlIGFsdGVybmF0aW5nIEFycmF5LCBsaWtlIFtlbGVtZW50LCBjc3NUZXh0LCB0cmFuc2Zvcm0gYXR0cmlidXRlLCBjYWNoZSwgbWF0Y2hNZWRpYSwgLi4uXVxuXHRpZiAodGFyZ2V0ICYmIHRhcmdldC5zdHlsZSkge1xuXHRcdGxldCBpID0gX3NhdmVkU3R5bGVzLmluZGV4T2YodGFyZ2V0KTtcblx0XHRpID49IDAgJiYgX3NhdmVkU3R5bGVzLnNwbGljZShpLCA1KTtcblx0XHRfc2F2ZWRTdHlsZXMucHVzaCh0YXJnZXQsIHRhcmdldC5zdHlsZS5jc3NUZXh0LCB0YXJnZXQuZ2V0QkJveCAmJiB0YXJnZXQuZ2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIpLCBnc2FwLmNvcmUuZ2V0Q2FjaGUodGFyZ2V0KSwgX2NvbnRleHQoKSk7XG5cdH1cbn0pIDogX3NhdmVkU3R5bGVzO1xuU2Nyb2xsVHJpZ2dlci5yZXZlcnQgPSAoc29mdCwgbWVkaWEpID0+IF9yZXZlcnRBbGwoIXNvZnQsIG1lZGlhKTtcblNjcm9sbFRyaWdnZXIuY3JlYXRlID0gKHZhcnMsIGFuaW1hdGlvbikgPT4gbmV3IFNjcm9sbFRyaWdnZXIodmFycywgYW5pbWF0aW9uKTtcblNjcm9sbFRyaWdnZXIucmVmcmVzaCA9IHNhZmUgPT4gc2FmZSA/IF9vblJlc2l6ZSh0cnVlKSA6IChfY29yZUluaXR0ZWQgfHwgU2Nyb2xsVHJpZ2dlci5yZWdpc3RlcigpKSAmJiBfcmVmcmVzaEFsbCh0cnVlKTtcblNjcm9sbFRyaWdnZXIudXBkYXRlID0gZm9yY2UgPT4gKytfc2Nyb2xsZXJzLmNhY2hlICYmIF91cGRhdGVBbGwoZm9yY2UgPT09IHRydWUgPyAyIDogMCk7XG5TY3JvbGxUcmlnZ2VyLmNsZWFyU2Nyb2xsTWVtb3J5ID0gX2NsZWFyU2Nyb2xsTWVtb3J5O1xuU2Nyb2xsVHJpZ2dlci5tYXhTY3JvbGwgPSAoZWxlbWVudCwgaG9yaXpvbnRhbCkgPT4gX21heFNjcm9sbChlbGVtZW50LCBob3Jpem9udGFsID8gX2hvcml6b250YWwgOiBfdmVydGljYWwpO1xuU2Nyb2xsVHJpZ2dlci5nZXRTY3JvbGxGdW5jID0gKGVsZW1lbnQsIGhvcml6b250YWwpID0+IF9nZXRTY3JvbGxGdW5jKF9nZXRUYXJnZXQoZWxlbWVudCksIGhvcml6b250YWwgPyBfaG9yaXpvbnRhbCA6IF92ZXJ0aWNhbCk7XG5TY3JvbGxUcmlnZ2VyLmdldEJ5SWQgPSBpZCA9PiBfaWRzW2lkXTtcblNjcm9sbFRyaWdnZXIuZ2V0QWxsID0gKCkgPT4gX3RyaWdnZXJzLmZpbHRlcih0ID0+IHQudmFycy5pZCAhPT0gXCJTY3JvbGxTbW9vdGhlclwiKTsgLy8gaXQncyBjb21tb24gZm9yIHBlb3BsZSB0byBTY3JvbGxUcmlnZ2VyLmdldEFsbCh0ID0+IHQua2lsbCgpKSBvbiBwYWdlIHJvdXRlcywgZm9yIGV4YW1wbGUsIGFuZCB3ZSBkb24ndCB3YW50IGl0IHRvIHJ1aW4gc21vb3RoIHNjcm9sbGluZyBieSBraWxsaW5nIHRoZSBtYWluIFNjcm9sbFNtb290aGVyIG9uZS5cblNjcm9sbFRyaWdnZXIuaXNTY3JvbGxpbmcgPSAoKSA9PiAhIV9sYXN0U2Nyb2xsVGltZTtcblNjcm9sbFRyaWdnZXIuc25hcERpcmVjdGlvbmFsID0gX3NuYXBEaXJlY3Rpb25hbDtcblNjcm9sbFRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lciA9ICh0eXBlLCBjYWxsYmFjaykgPT4ge1xuXHRsZXQgYSA9IF9saXN0ZW5lcnNbdHlwZV0gfHwgKF9saXN0ZW5lcnNbdHlwZV0gPSBbXSk7XG5cdH5hLmluZGV4T2YoY2FsbGJhY2spIHx8IGEucHVzaChjYWxsYmFjayk7XG59O1xuU2Nyb2xsVHJpZ2dlci5yZW1vdmVFdmVudExpc3RlbmVyID0gKHR5cGUsIGNhbGxiYWNrKSA9PiB7XG5cdGxldCBhID0gX2xpc3RlbmVyc1t0eXBlXSxcblx0XHRpID0gYSAmJiBhLmluZGV4T2YoY2FsbGJhY2spO1xuXHRpID49IDAgJiYgYS5zcGxpY2UoaSwgMSk7XG59O1xuU2Nyb2xsVHJpZ2dlci5iYXRjaCA9ICh0YXJnZXRzLCB2YXJzKSA9PiB7XG5cdGxldCByZXN1bHQgPSBbXSxcblx0XHR2YXJzQ29weSA9IHt9LFxuXHRcdGludGVydmFsID0gdmFycy5pbnRlcnZhbCB8fCAwLjAxNixcblx0XHRiYXRjaE1heCA9IHZhcnMuYmF0Y2hNYXggfHwgMWU5LFxuXHRcdHByb3h5Q2FsbGJhY2sgPSAodHlwZSwgY2FsbGJhY2spID0+IHtcblx0XHRcdGxldCBlbGVtZW50cyA9IFtdLFxuXHRcdFx0XHR0cmlnZ2VycyA9IFtdLFxuXHRcdFx0XHRkZWxheSA9IGdzYXAuZGVsYXllZENhbGwoaW50ZXJ2YWwsICgpID0+IHtjYWxsYmFjayhlbGVtZW50cywgdHJpZ2dlcnMpOyBlbGVtZW50cyA9IFtdOyB0cmlnZ2VycyA9IFtdO30pLnBhdXNlKCk7XG5cdFx0XHRyZXR1cm4gc2VsZiA9PiB7XG5cdFx0XHRcdGVsZW1lbnRzLmxlbmd0aCB8fCBkZWxheS5yZXN0YXJ0KHRydWUpO1xuXHRcdFx0XHRlbGVtZW50cy5wdXNoKHNlbGYudHJpZ2dlcik7XG5cdFx0XHRcdHRyaWdnZXJzLnB1c2goc2VsZik7XG5cdFx0XHRcdGJhdGNoTWF4IDw9IGVsZW1lbnRzLmxlbmd0aCAmJiBkZWxheS5wcm9ncmVzcygxKTtcblx0XHRcdH07XG5cdFx0fSxcblx0XHRwO1xuXHRmb3IgKHAgaW4gdmFycykge1xuXHRcdHZhcnNDb3B5W3BdID0gKHAuc3Vic3RyKDAsIDIpID09PSBcIm9uXCIgJiYgX2lzRnVuY3Rpb24odmFyc1twXSkgJiYgcCAhPT0gXCJvblJlZnJlc2hJbml0XCIpID8gcHJveHlDYWxsYmFjayhwLCB2YXJzW3BdKSA6IHZhcnNbcF07XG5cdH1cblx0aWYgKF9pc0Z1bmN0aW9uKGJhdGNoTWF4KSkge1xuXHRcdGJhdGNoTWF4ID0gYmF0Y2hNYXgoKTtcblx0XHRfYWRkTGlzdGVuZXIoU2Nyb2xsVHJpZ2dlciwgXCJyZWZyZXNoXCIsICgpID0+IGJhdGNoTWF4ID0gdmFycy5iYXRjaE1heCgpKTtcblx0fVxuXHRfdG9BcnJheSh0YXJnZXRzKS5mb3JFYWNoKHRhcmdldCA9PiB7XG5cdFx0bGV0IGNvbmZpZyA9IHt9O1xuXHRcdGZvciAocCBpbiB2YXJzQ29weSkge1xuXHRcdFx0Y29uZmlnW3BdID0gdmFyc0NvcHlbcF07XG5cdFx0fVxuXHRcdGNvbmZpZy50cmlnZ2VyID0gdGFyZ2V0O1xuXHRcdHJlc3VsdC5wdXNoKFNjcm9sbFRyaWdnZXIuY3JlYXRlKGNvbmZpZykpO1xuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuXG4vLyB0byByZWR1Y2UgZmlsZSBzaXplLiBjbGFtcHMgdGhlIHNjcm9sbCBhbmQgYWxzbyByZXR1cm5zIGEgZHVyYXRpb24gbXVsdGlwbGllciBzbyB0aGF0IGlmIHRoZSBzY3JvbGwgZ2V0cyBjaG9wcGVkIHNob3J0ZXIsIHRoZSBkdXJhdGlvbiBnZXRzIGN1cnRhaWxlZCBhcyB3ZWxsIChvdGhlcndpc2UgaWYgeW91J3JlIHZlcnkgY2xvc2UgdG8gdGhlIHRvcCBvZiB0aGUgcGFnZSwgZm9yIGV4YW1wbGUsIGFuZCBzd2lwZSB1cCByZWFsbHkgZmFzdCwgaXQnbGwgc3VkZGVubHkgc2xvdyBkb3duIGFuZCB0YWtlIGEgbG9uZyB0aW1lIHRvIHJlYWNoIHRoZSB0b3ApLlxubGV0IF9jbGFtcFNjcm9sbEFuZEdldER1cmF0aW9uTXVsdGlwbGllciA9IChzY3JvbGxGdW5jLCBjdXJyZW50LCBlbmQsIG1heCkgPT4ge1xuXHRcdGN1cnJlbnQgPiBtYXggPyBzY3JvbGxGdW5jKG1heCkgOiBjdXJyZW50IDwgMCAmJiBzY3JvbGxGdW5jKDApO1xuXHRcdHJldHVybiBlbmQgPiBtYXggPyAobWF4IC0gY3VycmVudCkgLyAoZW5kIC0gY3VycmVudCkgOiBlbmQgPCAwID8gY3VycmVudCAvIChjdXJyZW50IC0gZW5kKSA6IDE7XG5cdH0sXG5cdF9hbGxvd05hdGl2ZVBhbm5pbmcgPSAodGFyZ2V0LCBkaXJlY3Rpb24pID0+IHtcblx0XHRpZiAoZGlyZWN0aW9uID09PSB0cnVlKSB7XG5cdFx0XHR0YXJnZXQuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJ0b3VjaC1hY3Rpb25cIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldC5zdHlsZS50b3VjaEFjdGlvbiA9IGRpcmVjdGlvbiA9PT0gdHJ1ZSA/IFwiYXV0b1wiIDogZGlyZWN0aW9uID8gXCJwYW4tXCIgKyBkaXJlY3Rpb24gKyAoT2JzZXJ2ZXIuaXNUb3VjaCA/IFwiIHBpbmNoLXpvb21cIiA6IFwiXCIpIDogXCJub25lXCI7IC8vIG5vdGU6IEZpcmVmb3ggZG9lc24ndCBzdXBwb3J0IGl0IHBpbmNoLXpvb20gcHJvcGVybHksIGF0IGxlYXN0IGluIGFkZGl0aW9uIHRvIGEgcGFuLXggb3IgcGFuLXkuXG5cdFx0fVxuXHRcdHRhcmdldCA9PT0gX2RvY0VsICYmIF9hbGxvd05hdGl2ZVBhbm5pbmcoX2JvZHksIGRpcmVjdGlvbik7XG5cdH0sXG5cdF9vdmVyZmxvdyA9IHthdXRvOiAxLCBzY3JvbGw6IDF9LFxuXHRfbmVzdGVkU2Nyb2xsID0gKHtldmVudCwgdGFyZ2V0LCBheGlzfSkgPT4ge1xuXHRcdGxldCBub2RlID0gKGV2ZW50LmNoYW5nZWRUb3VjaGVzID8gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF0gOiBldmVudCkudGFyZ2V0LFxuXHRcdFx0Y2FjaGUgPSBub2RlLl9nc2FwIHx8IGdzYXAuY29yZS5nZXRDYWNoZShub2RlKSxcblx0XHRcdHRpbWUgPSBfZ2V0VGltZSgpLCBjcztcblx0XHRpZiAoIWNhY2hlLl9pc1Njcm9sbFQgfHwgdGltZSAtIGNhY2hlLl9pc1Njcm9sbFQgPiAyMDAwKSB7IC8vIGNhY2hlIGZvciAyIHNlY29uZHMgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS5cblx0XHRcdHdoaWxlIChub2RlICYmIG5vZGUgIT09IF9ib2R5ICYmICgobm9kZS5zY3JvbGxIZWlnaHQgPD0gbm9kZS5jbGllbnRIZWlnaHQgJiYgbm9kZS5zY3JvbGxXaWR0aCA8PSBub2RlLmNsaWVudFdpZHRoKSB8fCAhKF9vdmVyZmxvd1soY3MgPSBfZ2V0Q29tcHV0ZWRTdHlsZShub2RlKSkub3ZlcmZsb3dZXSB8fCBfb3ZlcmZsb3dbY3Mub3ZlcmZsb3dYXSkpKSBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXHRcdFx0Y2FjaGUuX2lzU2Nyb2xsID0gbm9kZSAmJiBub2RlICE9PSB0YXJnZXQgJiYgIV9pc1ZpZXdwb3J0KG5vZGUpICYmIChfb3ZlcmZsb3dbKGNzID0gX2dldENvbXB1dGVkU3R5bGUobm9kZSkpLm92ZXJmbG93WV0gfHwgX292ZXJmbG93W2NzLm92ZXJmbG93WF0pO1xuXHRcdFx0Y2FjaGUuX2lzU2Nyb2xsVCA9IHRpbWU7XG5cdFx0fVxuXHRcdGlmIChjYWNoZS5faXNTY3JvbGwgfHwgYXhpcyA9PT0gXCJ4XCIpIHtcblx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0ZXZlbnQuX2dzYXBBbGxvdyA9IHRydWU7XG5cdFx0fVxuXHR9LFxuXHQvLyBjYXB0dXJlIGV2ZW50cyBvbiBzY3JvbGxhYmxlIGVsZW1lbnRzIElOU0lERSB0aGUgPGJvZHk+IGFuZCBhbGxvdyB0aG9zZSBieSBjYWxsaW5nIHN0b3BQcm9wYWdhdGlvbigpIHdoZW4gd2UgZmluZCBhIHNjcm9sbGFibGUgYW5jZXN0b3Jcblx0X2lucHV0T2JzZXJ2ZXIgPSAodGFyZ2V0LCB0eXBlLCBpbnB1dHMsIG5lc3RlZCkgPT4gT2JzZXJ2ZXIuY3JlYXRlKHtcblx0XHR0YXJnZXQ6IHRhcmdldCxcblx0XHRjYXB0dXJlOiB0cnVlLFxuXHRcdGRlYm91bmNlOiBmYWxzZSxcblx0XHRsb2NrQXhpczogdHJ1ZSxcblx0XHR0eXBlOiB0eXBlLFxuXHRcdG9uV2hlZWw6IChuZXN0ZWQgPSBuZXN0ZWQgJiYgX25lc3RlZFNjcm9sbCksXG5cdFx0b25QcmVzczogbmVzdGVkLFxuXHRcdG9uRHJhZzogbmVzdGVkLFxuXHRcdG9uU2Nyb2xsOiBuZXN0ZWQsXG5cdFx0b25FbmFibGU6ICgpID0+IGlucHV0cyAmJiBfYWRkTGlzdGVuZXIoX2RvYywgT2JzZXJ2ZXIuZXZlbnRUeXBlc1swXSwgX2NhcHR1cmVJbnB1dHMsIGZhbHNlLCB0cnVlKSxcblx0XHRvbkRpc2FibGU6ICgpID0+IF9yZW1vdmVMaXN0ZW5lcihfZG9jLCBPYnNlcnZlci5ldmVudFR5cGVzWzBdLCBfY2FwdHVyZUlucHV0cywgdHJ1ZSlcblx0fSksXG5cdF9pbnB1dEV4cCA9IC8oaW5wdXR8bGFiZWx8c2VsZWN0fHRleHRhcmVhKS9pLFxuXHRfaW5wdXRJc0ZvY3VzZWQsXG5cdF9jYXB0dXJlSW5wdXRzID0gZSA9PiB7XG5cdFx0bGV0IGlzSW5wdXQgPSBfaW5wdXRFeHAudGVzdChlLnRhcmdldC50YWdOYW1lKTtcblx0XHRpZiAoaXNJbnB1dCB8fCBfaW5wdXRJc0ZvY3VzZWQpIHtcblx0XHRcdGUuX2dzYXBBbGxvdyA9IHRydWU7XG5cdFx0XHRfaW5wdXRJc0ZvY3VzZWQgPSBpc0lucHV0O1xuXHRcdH1cblx0fSxcblx0X2dldFNjcm9sbE5vcm1hbGl6ZXIgPSB2YXJzID0+IHtcblx0XHRfaXNPYmplY3QodmFycykgfHwgKHZhcnMgPSB7fSk7XG5cdFx0dmFycy5wcmV2ZW50RGVmYXVsdCA9IHZhcnMuaXNOb3JtYWxpemVyID0gdmFycy5hbGxvd0NsaWNrcyA9IHRydWU7XG5cdFx0dmFycy50eXBlIHx8ICh2YXJzLnR5cGUgPSBcIndoZWVsLHRvdWNoXCIpO1xuXHRcdHZhcnMuZGVib3VuY2UgPSAhIXZhcnMuZGVib3VuY2U7XG5cdFx0dmFycy5pZCA9IHZhcnMuaWQgfHwgXCJub3JtYWxpemVyXCI7XG5cdFx0bGV0IHtub3JtYWxpemVTY3JvbGxYLCBtb21lbnR1bSwgYWxsb3dOZXN0ZWRTY3JvbGwsIG9uUmVsZWFzZX0gPSB2YXJzLFxuXHRcdFx0c2VsZiwgbWF4WSxcblx0XHRcdHRhcmdldCA9IF9nZXRUYXJnZXQodmFycy50YXJnZXQpIHx8IF9kb2NFbCxcblx0XHRcdHNtb290aGVyID0gZ3NhcC5jb3JlLmdsb2JhbHMoKS5TY3JvbGxTbW9vdGhlcixcblx0XHRcdHNtb290aGVySW5zdGFuY2UgPSBzbW9vdGhlciAmJiBzbW9vdGhlci5nZXQoKSxcblx0XHRcdGNvbnRlbnQgPSBfZml4SU9TQnVnICYmICgodmFycy5jb250ZW50ICYmIF9nZXRUYXJnZXQodmFycy5jb250ZW50KSkgfHwgKHNtb290aGVySW5zdGFuY2UgJiYgdmFycy5jb250ZW50ICE9PSBmYWxzZSAmJiAhc21vb3RoZXJJbnN0YW5jZS5zbW9vdGgoKSAmJiBzbW9vdGhlckluc3RhbmNlLmNvbnRlbnQoKSkpLFxuXHRcdFx0c2Nyb2xsRnVuY1kgPSBfZ2V0U2Nyb2xsRnVuYyh0YXJnZXQsIF92ZXJ0aWNhbCksXG5cdFx0XHRzY3JvbGxGdW5jWCA9IF9nZXRTY3JvbGxGdW5jKHRhcmdldCwgX2hvcml6b250YWwpLFxuXHRcdFx0c2NhbGUgPSAxLFxuXHRcdFx0aW5pdGlhbFNjYWxlID0gKE9ic2VydmVyLmlzVG91Y2ggJiYgX3dpbi52aXN1YWxWaWV3cG9ydCA/IF93aW4udmlzdWFsVmlld3BvcnQuc2NhbGUgKiBfd2luLnZpc3VhbFZpZXdwb3J0LndpZHRoIDogX3dpbi5vdXRlcldpZHRoKSAvIF93aW4uaW5uZXJXaWR0aCxcblx0XHRcdHdoZWVsUmVmcmVzaCA9IDAsXG5cdFx0XHRyZXNvbHZlTW9tZW50dW1EdXJhdGlvbiA9IF9pc0Z1bmN0aW9uKG1vbWVudHVtKSA/ICgpID0+IG1vbWVudHVtKHNlbGYpIDogKCkgPT4gbW9tZW50dW0gfHwgMi44LFxuXHRcdFx0bGFzdFJlZnJlc2hJRCwgc2tpcFRvdWNoTW92ZSxcblx0XHRcdGlucHV0T2JzZXJ2ZXIgPSBfaW5wdXRPYnNlcnZlcih0YXJnZXQsIHZhcnMudHlwZSwgdHJ1ZSwgYWxsb3dOZXN0ZWRTY3JvbGwpLFxuXHRcdFx0cmVzdW1lVG91Y2hNb3ZlID0gKCkgPT4gc2tpcFRvdWNoTW92ZSA9IGZhbHNlLFxuXHRcdFx0c2Nyb2xsQ2xhbXBYID0gX3Bhc3NUaHJvdWdoLFxuXHRcdFx0c2Nyb2xsQ2xhbXBZID0gX3Bhc3NUaHJvdWdoLFxuXHRcdFx0dXBkYXRlQ2xhbXBzID0gKCkgPT4ge1xuXHRcdFx0XHRtYXhZID0gX21heFNjcm9sbCh0YXJnZXQsIF92ZXJ0aWNhbCk7XG5cdFx0XHRcdHNjcm9sbENsYW1wWSA9IF9jbGFtcChfZml4SU9TQnVnID8gMSA6IDAsIG1heFkpO1xuXHRcdFx0XHRub3JtYWxpemVTY3JvbGxYICYmIChzY3JvbGxDbGFtcFggPSBfY2xhbXAoMCwgX21heFNjcm9sbCh0YXJnZXQsIF9ob3Jpem9udGFsKSkpO1xuXHRcdFx0XHRsYXN0UmVmcmVzaElEID0gX3JlZnJlc2hJRDtcblx0XHRcdH0sXG5cdFx0XHRyZW1vdmVDb250ZW50T2Zmc2V0ID0gKCkgPT4ge1xuXHRcdFx0XHRjb250ZW50Ll9nc2FwLnkgPSBfcm91bmQocGFyc2VGbG9hdChjb250ZW50Ll9nc2FwLnkpICsgc2Nyb2xsRnVuY1kub2Zmc2V0KSArIFwicHhcIjtcblx0XHRcdFx0Y29udGVudC5zdHlsZS50cmFuc2Zvcm0gPSBcIm1hdHJpeDNkKDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIFwiICsgcGFyc2VGbG9hdChjb250ZW50Ll9nc2FwLnkpICsgXCIsIDAsIDEpXCI7XG5cdFx0XHRcdHNjcm9sbEZ1bmNZLm9mZnNldCA9IHNjcm9sbEZ1bmNZLmNhY2hlSUQgPSAwO1xuXHRcdFx0fSxcblx0XHRcdGlnbm9yZURyYWcgPSAoKSA9PiB7XG5cdFx0XHRcdGlmIChza2lwVG91Y2hNb3ZlKSB7XG5cdFx0XHRcdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc3VtZVRvdWNoTW92ZSk7XG5cdFx0XHRcdFx0bGV0IG9mZnNldCA9IF9yb3VuZChzZWxmLmRlbHRhWSAvIDIpLFxuXHRcdFx0XHRcdFx0c2Nyb2xsID0gc2Nyb2xsQ2xhbXBZKHNjcm9sbEZ1bmNZLnYgLSBvZmZzZXQpO1xuXHRcdFx0XHRcdGlmIChjb250ZW50ICYmIHNjcm9sbCAhPT0gc2Nyb2xsRnVuY1kudiArIHNjcm9sbEZ1bmNZLm9mZnNldCkge1xuXHRcdFx0XHRcdFx0c2Nyb2xsRnVuY1kub2Zmc2V0ID0gc2Nyb2xsIC0gc2Nyb2xsRnVuY1kudjtcblx0XHRcdFx0XHRcdGxldCB5ID0gX3JvdW5kKChwYXJzZUZsb2F0KGNvbnRlbnQgJiYgY29udGVudC5fZ3NhcC55KSB8fCAwKSAtIHNjcm9sbEZ1bmNZLm9mZnNldCk7XG5cdFx0XHRcdFx0XHRjb250ZW50LnN0eWxlLnRyYW5zZm9ybSA9IFwibWF0cml4M2QoMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgXCIgKyB5ICsgXCIsIDAsIDEpXCI7XG5cdFx0XHRcdFx0XHRjb250ZW50Ll9nc2FwLnkgPSB5ICsgXCJweFwiO1xuXHRcdFx0XHRcdFx0c2Nyb2xsRnVuY1kuY2FjaGVJRCA9IF9zY3JvbGxlcnMuY2FjaGU7XG5cdFx0XHRcdFx0XHRfdXBkYXRlQWxsKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNjcm9sbEZ1bmNZLm9mZnNldCAmJiByZW1vdmVDb250ZW50T2Zmc2V0KCk7XG5cdFx0XHRcdHNraXBUb3VjaE1vdmUgPSB0cnVlO1xuXHRcdFx0fSxcblx0XHRcdHR3ZWVuLCBzdGFydFNjcm9sbFgsIHN0YXJ0U2Nyb2xsWSwgb25TdG9wRGVsYXllZENhbGwsXG5cdFx0XHRvblJlc2l6ZSA9ICgpID0+IHsgLy8gaWYgdGhlIHdpbmRvdyByZXNpemVzLCBsaWtlIG9uIGFuIGlQaG9uZSB3aGljaCBBcHBsZSBGT1JDRVMgdGhlIGFkZHJlc3MgYmFyIHRvIHNob3cvaGlkZSBldmVuIGlmIHdlIGV2ZW50LnByZXZlbnREZWZhdWx0KCksIGl0IG1heSBiZSBzY3JvbGxpbmcgdG9vIGZhciBub3cgdGhhdCB0aGUgYWRkcmVzcyBiYXIgaXMgc2hvd2luZywgc28gd2UgbXVzdCBkeW5hbWljYWxseSBhZGp1c3QgdGhlIG1vbWVudHVtIHR3ZWVuLlxuXHRcdFx0XHR1cGRhdGVDbGFtcHMoKTtcblx0XHRcdFx0aWYgKHR3ZWVuLmlzQWN0aXZlKCkgJiYgdHdlZW4udmFycy5zY3JvbGxZID4gbWF4WSkge1xuXHRcdFx0XHRcdHNjcm9sbEZ1bmNZKCkgPiBtYXhZID8gdHdlZW4ucHJvZ3Jlc3MoMSkgJiYgc2Nyb2xsRnVuY1kobWF4WSkgOiB0d2Vlbi5yZXNldFRvKFwic2Nyb2xsWVwiLCBtYXhZKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRjb250ZW50ICYmIGdzYXAuc2V0KGNvbnRlbnQsIHt5OiBcIis9MFwifSk7IC8vIHRvIGVuc3VyZSB0aGVyZSdzIGEgY2FjaGUgKGVsZW1lbnQuX2dzYXApXG5cdFx0dmFycy5pZ25vcmVDaGVjayA9IGUgPT4gKF9maXhJT1NCdWcgJiYgZS50eXBlID09PSBcInRvdWNobW92ZVwiICYmIGlnbm9yZURyYWcoZSkpIHx8IChzY2FsZSA+IDEuMDUgJiYgZS50eXBlICE9PSBcInRvdWNoc3RhcnRcIikgfHwgc2VsZi5pc0dlc3R1cmluZyB8fCAoZS50b3VjaGVzICYmIGUudG91Y2hlcy5sZW5ndGggPiAxKTtcblx0XHR2YXJzLm9uUHJlc3MgPSAoKSA9PiB7XG5cdFx0XHRza2lwVG91Y2hNb3ZlID0gZmFsc2U7XG5cdFx0XHRsZXQgcHJldlNjYWxlID0gc2NhbGU7XG5cdFx0XHRzY2FsZSA9IF9yb3VuZCgoKF93aW4udmlzdWFsVmlld3BvcnQgJiYgX3dpbi52aXN1YWxWaWV3cG9ydC5zY2FsZSkgfHwgMSkgLyBpbml0aWFsU2NhbGUpO1xuXHRcdFx0dHdlZW4ucGF1c2UoKTtcblx0XHRcdHByZXZTY2FsZSAhPT0gc2NhbGUgJiYgX2FsbG93TmF0aXZlUGFubmluZyh0YXJnZXQsIHNjYWxlID4gMS4wMSA/IHRydWUgOiBub3JtYWxpemVTY3JvbGxYID8gZmFsc2UgOiBcInhcIik7XG5cdFx0XHRzdGFydFNjcm9sbFggPSBzY3JvbGxGdW5jWCgpO1xuXHRcdFx0c3RhcnRTY3JvbGxZID0gc2Nyb2xsRnVuY1koKTtcblx0XHRcdHVwZGF0ZUNsYW1wcygpO1xuXHRcdFx0bGFzdFJlZnJlc2hJRCA9IF9yZWZyZXNoSUQ7XG5cdFx0fVxuXHRcdHZhcnMub25SZWxlYXNlID0gdmFycy5vbkdlc3R1cmVTdGFydCA9IChzZWxmLCB3YXNEcmFnZ2luZykgPT4ge1xuXHRcdFx0c2Nyb2xsRnVuY1kub2Zmc2V0ICYmIHJlbW92ZUNvbnRlbnRPZmZzZXQoKTtcblx0XHRcdGlmICghd2FzRHJhZ2dpbmcpIHtcblx0XHRcdFx0b25TdG9wRGVsYXllZENhbGwucmVzdGFydCh0cnVlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdF9zY3JvbGxlcnMuY2FjaGUrKzsgLy8gbWFrZSBzdXJlIHdlJ3JlIHB1bGxpbmcgdGhlIG5vbi1jYWNoZWQgdmFsdWVcblx0XHRcdFx0Ly8gYWx0ZXJuYXRlIGFsZ29yaXRobTogZHVyWCA9IE1hdGgubWluKDYsIE1hdGguYWJzKHNlbGYudmVsb2NpdHlYIC8gODAwKSksXHRkdXIgPSBNYXRoLm1heChkdXJYLCBNYXRoLm1pbig2LCBNYXRoLmFicyhzZWxmLnZlbG9jaXR5WSAvIDgwMCkpKTsgZHVyID0gZHVyICogKDAuNCArICgxIC0gX3Bvd2VyNEluKGR1ciAvIDYpKSAqIDAuNikpICogKG1vbWVudHVtU3BlZWQgfHwgMSlcblx0XHRcdFx0bGV0IGR1ciA9IHJlc29sdmVNb21lbnR1bUR1cmF0aW9uKCksXG5cdFx0XHRcdFx0Y3VycmVudFNjcm9sbCwgZW5kU2Nyb2xsO1xuXHRcdFx0XHRpZiAobm9ybWFsaXplU2Nyb2xsWCkge1xuXHRcdFx0XHRcdGN1cnJlbnRTY3JvbGwgPSBzY3JvbGxGdW5jWCgpO1xuXHRcdFx0XHRcdGVuZFNjcm9sbCA9IGN1cnJlbnRTY3JvbGwgKyAoZHVyICogMC4wNSAqIC1zZWxmLnZlbG9jaXR5WCkgLyAwLjIyNzsgLy8gdGhlIGNvbnN0YW50IC4yMjcgaXMgZnJvbSBwb3dlcjQoMC4wNSkuIHZlbG9jaXR5IGlzIGludmVydGVkIGJlY2F1c2Ugc2Nyb2xsaW5nIGdvZXMgaW4gdGhlIG9wcG9zaXRlIGRpcmVjdGlvbi5cblx0XHRcdFx0XHRkdXIgKj0gX2NsYW1wU2Nyb2xsQW5kR2V0RHVyYXRpb25NdWx0aXBsaWVyKHNjcm9sbEZ1bmNYLCBjdXJyZW50U2Nyb2xsLCBlbmRTY3JvbGwsIF9tYXhTY3JvbGwodGFyZ2V0LCBfaG9yaXpvbnRhbCkpO1xuXHRcdFx0XHRcdHR3ZWVuLnZhcnMuc2Nyb2xsWCA9IHNjcm9sbENsYW1wWChlbmRTY3JvbGwpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGN1cnJlbnRTY3JvbGwgPSBzY3JvbGxGdW5jWSgpO1xuXHRcdFx0XHRlbmRTY3JvbGwgPSBjdXJyZW50U2Nyb2xsICsgKGR1ciAqIDAuMDUgKiAtc2VsZi52ZWxvY2l0eVkpIC8gMC4yMjc7IC8vIHRoZSBjb25zdGFudCAuMjI3IGlzIGZyb20gcG93ZXI0KDAuMDUpXG5cdFx0XHRcdGR1ciAqPSBfY2xhbXBTY3JvbGxBbmRHZXREdXJhdGlvbk11bHRpcGxpZXIoc2Nyb2xsRnVuY1ksIGN1cnJlbnRTY3JvbGwsIGVuZFNjcm9sbCwgX21heFNjcm9sbCh0YXJnZXQsIF92ZXJ0aWNhbCkpO1xuXHRcdFx0XHR0d2Vlbi52YXJzLnNjcm9sbFkgPSBzY3JvbGxDbGFtcFkoZW5kU2Nyb2xsKTtcblx0XHRcdFx0dHdlZW4uaW52YWxpZGF0ZSgpLmR1cmF0aW9uKGR1cikucGxheSgwLjAxKTtcblx0XHRcdFx0aWYgKF9maXhJT1NCdWcgJiYgdHdlZW4udmFycy5zY3JvbGxZID49IG1heFkgfHwgY3VycmVudFNjcm9sbCA+PSBtYXhZLTEpIHsgLy8gaU9TIGJ1ZzogaXQnbGwgc2hvdyB0aGUgYWRkcmVzcyBiYXIgYnV0IE5PVCBmaXJlIHRoZSB3aW5kb3cgXCJyZXNpemVcIiBldmVudCB1bnRpbCB0aGUgYW5pbWF0aW9uIGlzIGRvbmUgYnV0IHdlIG11c3QgcHJvdGVjdCBhZ2FpbnN0IG92ZXJzaG9vdCBzbyB3ZSBsZXZlcmFnZSBhbiBvblVwZGF0ZSB0byBkbyBzby5cblx0XHRcdFx0XHRnc2FwLnRvKHt9LCB7b25VcGRhdGU6IG9uUmVzaXplLCBkdXJhdGlvbjogZHVyfSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG9uUmVsZWFzZSAmJiBvblJlbGVhc2Uoc2VsZik7XG5cdFx0fTtcblx0XHR2YXJzLm9uV2hlZWwgPSAoKSA9PiB7XG5cdFx0XHR0d2Vlbi5fdHMgJiYgdHdlZW4ucGF1c2UoKTtcblx0XHRcdGlmIChfZ2V0VGltZSgpIC0gd2hlZWxSZWZyZXNoID4gMTAwMCkgeyAvLyBhZnRlciAxIHNlY29uZCwgcmVmcmVzaCB0aGUgY2xhbXBzIG90aGVyd2lzZSB0aGF0J2xsIG9ubHkgaGFwcGVuIHdoZW4gU2Nyb2xsVHJpZ2dlci5yZWZyZXNoKCkgaXMgY2FsbGVkIG9yIGZvciB0b3VjaC1zY3JvbGxpbmcuXG5cdFx0XHRcdGxhc3RSZWZyZXNoSUQgPSAwO1xuXHRcdFx0XHR3aGVlbFJlZnJlc2ggPSBfZ2V0VGltZSgpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0dmFycy5vbkNoYW5nZSA9IChzZWxmLCBkeCwgZHksIHhBcnJheSwgeUFycmF5KSA9PiB7XG5cdFx0XHRfcmVmcmVzaElEICE9PSBsYXN0UmVmcmVzaElEICYmIHVwZGF0ZUNsYW1wcygpO1xuXHRcdFx0ZHggJiYgbm9ybWFsaXplU2Nyb2xsWCAmJiBzY3JvbGxGdW5jWChzY3JvbGxDbGFtcFgoeEFycmF5WzJdID09PSBkeCA/IHN0YXJ0U2Nyb2xsWCArIChzZWxmLnN0YXJ0WCAtIHNlbGYueCkgOiBzY3JvbGxGdW5jWCgpICsgZHggLSB4QXJyYXlbMV0pKTsgLy8gZm9yIG1vcmUgcHJlY2lzaW9uLCB3ZSB0cmFjayBwb2ludGVyL3RvdWNoIG1vdmVtZW50IGZyb20gdGhlIHN0YXJ0LCBvdGhlcndpc2UgaXQnbGwgZHJpZnQuXG5cdFx0XHRpZiAoZHkpIHtcblx0XHRcdFx0c2Nyb2xsRnVuY1kub2Zmc2V0ICYmIHJlbW92ZUNvbnRlbnRPZmZzZXQoKTtcblx0XHRcdFx0bGV0IGlzVG91Y2ggPSB5QXJyYXlbMl0gPT09IGR5LFxuXHRcdFx0XHRcdHkgPSBpc1RvdWNoID8gc3RhcnRTY3JvbGxZICsgc2VsZi5zdGFydFkgLSBzZWxmLnkgOiBzY3JvbGxGdW5jWSgpICsgZHkgLSB5QXJyYXlbMV0sXG5cdFx0XHRcdFx0eUNsYW1wZWQgPSBzY3JvbGxDbGFtcFkoeSk7XG5cdFx0XHRcdGlzVG91Y2ggJiYgeSAhPT0geUNsYW1wZWQgJiYgKHN0YXJ0U2Nyb2xsWSArPSB5Q2xhbXBlZCAtIHkpO1xuXHRcdFx0XHRzY3JvbGxGdW5jWSh5Q2xhbXBlZCk7XG5cdFx0XHR9XG5cdFx0XHQoZHkgfHwgZHgpICYmIF91cGRhdGVBbGwoKTtcblx0XHR9O1xuXHRcdHZhcnMub25FbmFibGUgPSAoKSA9PiB7XG5cdFx0XHRfYWxsb3dOYXRpdmVQYW5uaW5nKHRhcmdldCwgbm9ybWFsaXplU2Nyb2xsWCA/IGZhbHNlIDogXCJ4XCIpO1xuXHRcdFx0U2Nyb2xsVHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKFwicmVmcmVzaFwiLCBvblJlc2l6ZSk7XG5cdFx0XHRfYWRkTGlzdGVuZXIoX3dpbiwgXCJyZXNpemVcIiwgb25SZXNpemUpO1xuXHRcdFx0aWYgKHNjcm9sbEZ1bmNZLnNtb290aCkge1xuXHRcdFx0XHRzY3JvbGxGdW5jWS50YXJnZXQuc3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSBcImF1dG9cIjtcblx0XHRcdFx0c2Nyb2xsRnVuY1kuc21vb3RoID0gc2Nyb2xsRnVuY1guc21vb3RoID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRpbnB1dE9ic2VydmVyLmVuYWJsZSgpO1xuXHRcdH07XG5cdFx0dmFycy5vbkRpc2FibGUgPSAoKSA9PiB7XG5cdFx0XHRfYWxsb3dOYXRpdmVQYW5uaW5nKHRhcmdldCwgdHJ1ZSk7XG5cdFx0XHRfcmVtb3ZlTGlzdGVuZXIoX3dpbiwgXCJyZXNpemVcIiwgb25SZXNpemUpO1xuXHRcdFx0U2Nyb2xsVHJpZ2dlci5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVmcmVzaFwiLCBvblJlc2l6ZSk7XG5cdFx0XHRpbnB1dE9ic2VydmVyLmtpbGwoKTtcblx0XHR9O1xuXHRcdHZhcnMubG9ja0F4aXMgPSB2YXJzLmxvY2tBeGlzICE9PSBmYWxzZTtcblx0XHRzZWxmID0gbmV3IE9ic2VydmVyKHZhcnMpO1xuXHRcdHNlbGYuaU9TID0gX2ZpeElPU0J1ZzsgLy8gdXNlZCBpbiB0aGUgT2JzZXJ2ZXIgZ2V0Q2FjaGVkU2Nyb2xsKCkgZnVuY3Rpb24gdG8gd29yayBhcm91bmQgYW4gaU9TIGJ1ZyB0aGF0IHdyZWFrcyBoYXZvYyB3aXRoIFRvdWNoRXZlbnQuY2xpZW50WSBpZiB3ZSBhbGxvdyBzY3JvbGwgdG8gZ28gYWxsIHRoZSB3YXkgYmFjayB0byAwLlxuXHRcdF9maXhJT1NCdWcgJiYgIXNjcm9sbEZ1bmNZKCkgJiYgc2Nyb2xsRnVuY1koMSk7IC8vIGlPUyBidWcgY2F1c2VzIGV2ZW50LmNsaWVudFkgdmFsdWVzIHRvIGZyZWFrIG91dCAod2lsZGx5IGluYWNjdXJhdGUpIGlmIHRoZSBzY3JvbGwgcG9zaXRpb24gaXMgZXhhY3RseSAwLlxuXHRcdF9maXhJT1NCdWcgJiYgZ3NhcC50aWNrZXIuYWRkKF9wYXNzVGhyb3VnaCk7IC8vIHByZXZlbnQgdGhlIHRpY2tlciBmcm9tIHNsZWVwaW5nXG5cdFx0b25TdG9wRGVsYXllZENhbGwgPSBzZWxmLl9kYztcblx0XHR0d2VlbiA9IGdzYXAudG8oc2VsZiwge2Vhc2U6IFwicG93ZXI0XCIsIHBhdXNlZDogdHJ1ZSwgaW5oZXJpdDogZmFsc2UsIHNjcm9sbFg6IG5vcm1hbGl6ZVNjcm9sbFggPyBcIis9MC4xXCIgOiBcIis9MFwiLCBzY3JvbGxZOiBcIis9MC4xXCIsIG1vZGlmaWVyczoge3Njcm9sbFk6IF9pbnRlcnJ1cHRpb25UcmFja2VyKHNjcm9sbEZ1bmNZLCBzY3JvbGxGdW5jWSgpLCAoKSA9PiB0d2Vlbi5wYXVzZSgpKVx0fSwgb25VcGRhdGU6IF91cGRhdGVBbGwsIG9uQ29tcGxldGU6IG9uU3RvcERlbGF5ZWRDYWxsLnZhcnMub25Db21wbGV0ZX0pOyAvLyB3ZSBuZWVkIHRoZSBtb2RpZmllciB0byBzZW5zZSBpZiB0aGUgc2Nyb2xsIHBvc2l0aW9uIGlzIGFsdGVyZWQgb3V0c2lkZSBvZiB0aGUgbW9tZW50dW0gdHdlZW4gKGxpa2Ugd2l0aCBhIHNjcm9sbFRvIHR3ZWVuKSBzbyB3ZSBjYW4gcGF1c2UoKSBpdCB0byBwcmV2ZW50IGNvbmZsaWN0cy5cblx0XHRyZXR1cm4gc2VsZjtcblx0fTtcblxuU2Nyb2xsVHJpZ2dlci5zb3J0ID0gZnVuYyA9PiB7XG5cdGlmIChfaXNGdW5jdGlvbihmdW5jKSkge1xuXHRcdHJldHVybiBfdHJpZ2dlcnMuc29ydChmdW5jKTtcblx0fVxuXHRsZXQgc2Nyb2xsID0gX3dpbi5wYWdlWU9mZnNldCB8fCAwO1xuXHRTY3JvbGxUcmlnZ2VyLmdldEFsbCgpLmZvckVhY2godCA9PiB0Ll9zb3J0WSA9IHQudHJpZ2dlciA/IHNjcm9sbCArIHQudHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgOiB0LnN0YXJ0ICsgX3dpbi5pbm5lckhlaWdodCk7XG5cdHJldHVybiBfdHJpZ2dlcnMuc29ydChmdW5jIHx8ICgoYSwgYikgPT4gKGEudmFycy5yZWZyZXNoUHJpb3JpdHkgfHwgMCkgKiAtMWU2ICsgKGEudmFycy5jb250YWluZXJBbmltYXRpb24gPyAxZTYgOiBhLl9zb3J0WSkgLSAoKGIudmFycy5jb250YWluZXJBbmltYXRpb24gPyAxZTYgOiBiLl9zb3J0WSkgKyAoYi52YXJzLnJlZnJlc2hQcmlvcml0eSB8fCAwKSAqIC0xZTYpKSk7IC8vIGFueXRoaW5nIHdpdGggYSBjb250YWluZXJBbmltYXRpb24gc2hvdWxkIHJlZnJlc2ggbGFzdC5cbn1cblNjcm9sbFRyaWdnZXIub2JzZXJ2ZSA9IHZhcnMgPT4gbmV3IE9ic2VydmVyKHZhcnMpO1xuU2Nyb2xsVHJpZ2dlci5ub3JtYWxpemVTY3JvbGwgPSB2YXJzID0+IHtcblx0aWYgKHR5cGVvZih2YXJzKSA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHJldHVybiBfbm9ybWFsaXplcjtcblx0fVxuXHRpZiAodmFycyA9PT0gdHJ1ZSAmJiBfbm9ybWFsaXplcikge1xuXHRcdHJldHVybiBfbm9ybWFsaXplci5lbmFibGUoKTtcblx0fVxuXHRpZiAodmFycyA9PT0gZmFsc2UpIHtcblx0XHRfbm9ybWFsaXplciAmJiBfbm9ybWFsaXplci5raWxsKCk7XG5cdFx0X25vcm1hbGl6ZXIgPSB2YXJzO1xuXHRcdHJldHVybjtcblx0fVxuXHRsZXQgbm9ybWFsaXplciA9IHZhcnMgaW5zdGFuY2VvZiBPYnNlcnZlciA/IHZhcnMgOiBfZ2V0U2Nyb2xsTm9ybWFsaXplcih2YXJzKTtcblx0X25vcm1hbGl6ZXIgJiYgX25vcm1hbGl6ZXIudGFyZ2V0ID09PSBub3JtYWxpemVyLnRhcmdldCAmJiBfbm9ybWFsaXplci5raWxsKCk7XG5cdF9pc1ZpZXdwb3J0KG5vcm1hbGl6ZXIudGFyZ2V0KSAmJiAoX25vcm1hbGl6ZXIgPSBub3JtYWxpemVyKTtcblx0cmV0dXJuIG5vcm1hbGl6ZXI7XG59O1xuXG5cblNjcm9sbFRyaWdnZXIuY29yZSA9IHsgLy8gc21hbGxlciBmaWxlIHNpemUgd2F5IHRvIGxldmVyYWdlIGluIFNjcm9sbFNtb290aGVyIGFuZCBPYnNlcnZlclxuXHRfZ2V0VmVsb2NpdHlQcm9wLFxuXHRfaW5wdXRPYnNlcnZlcixcblx0X3Njcm9sbGVycyxcblx0X3Byb3hpZXMsXG5cdGJyaWRnZToge1xuXHRcdC8vIHdoZW4gbm9ybWFsaXplU2Nyb2xsIHNldHMgdGhlIHNjcm9sbCBwb3NpdGlvbiAoc3MgPSBzZXRTY3JvbGwpXG5cdFx0c3M6ICgpID0+IHtcblx0XHRcdF9sYXN0U2Nyb2xsVGltZSB8fCBfZGlzcGF0Y2goXCJzY3JvbGxTdGFydFwiKTtcblx0XHRcdF9sYXN0U2Nyb2xsVGltZSA9IF9nZXRUaW1lKCk7XG5cdFx0fSxcblx0XHQvLyBhIHdheSB0byBnZXQgdGhlIF9yZWZyZXNoaW5nIHZhbHVlIGluIE9ic2VydmVyXG5cdFx0cmVmOiAoKSA9PiBfcmVmcmVzaGluZ1xuXHR9XG59O1xuXG5fZ2V0R1NBUCgpICYmIGdzYXAucmVnaXN0ZXJQbHVnaW4oU2Nyb2xsVHJpZ2dlcik7XG5cbmV4cG9ydCB7IFNjcm9sbFRyaWdnZXIgYXMgZGVmYXVsdCB9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/gsap/src/ScrollTrigger.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./resources/styles/app.scss\":\r\n/*!***********************************!*\\\r\n  !*** ./resources/styles/app.scss ***!\r\n  \\***********************************/\r\n/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n// extracted by mini-css-extract-plugin\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvc3R5bGVzL2FwcC5zY3NzLmpzIiwibWFwcGluZ3MiOiI7QUFBQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vcmVzb3VyY2VzL3N0eWxlcy9hcHAuc2Nzcz8yZjMwIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IHt9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./resources/styles/app.scss\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/js-cookie/dist/js.cookie.mjs\":\r\n/*!***************************************************!*\\\r\n  !*** ./node_modules/js-cookie/dist/js.cookie.mjs ***!\r\n  \\***************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/*! js-cookie v3.0.1 | MIT */\\n/* eslint-disable no-var */\\nfunction assign (target) {\\n  for (var i = 1; i < arguments.length; i++) {\\n    var source = arguments[i];\\n    for (var key in source) {\\n      target[key] = source[key];\\n    }\\n  }\\n  return target\\n}\\n/* eslint-enable no-var */\\n\\n/* eslint-disable no-var */\\nvar defaultConverter = {\\n  read: function (value) {\\n    if (value[0] === '\\\"') {\\n      value = value.slice(1, -1);\\n    }\\n    return value.replace(/(%[\\\\dA-F]{2})+/gi, decodeURIComponent)\\n  },\\n  write: function (value) {\\n    return encodeURIComponent(value).replace(\\n      /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\\n      decodeURIComponent\\n    )\\n  }\\n};\\n/* eslint-enable no-var */\\n\\n/* eslint-disable no-var */\\n\\nfunction init (converter, defaultAttributes) {\\n  function set (key, value, attributes) {\\n    if (typeof document === 'undefined') {\\n      return\\n    }\\n\\n    attributes = assign({}, defaultAttributes, attributes);\\n\\n    if (typeof attributes.expires === 'number') {\\n      attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\\n    }\\n    if (attributes.expires) {\\n      attributes.expires = attributes.expires.toUTCString();\\n    }\\n\\n    key = encodeURIComponent(key)\\n      .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\\n      .replace(/[()]/g, escape);\\n\\n    var stringifiedAttributes = '';\\n    for (var attributeName in attributes) {\\n      if (!attributes[attributeName]) {\\n        continue\\n      }\\n\\n      stringifiedAttributes += '; ' + attributeName;\\n\\n      if (attributes[attributeName] === true) {\\n        continue\\n      }\\n\\n      // Considers RFC 6265 section 5.2:\\n      // ...\\n      // 3.  If the remaining unparsed-attributes contains a %x3B (\\\";\\\")\\n      //     character:\\n      // Consume the characters of the unparsed-attributes up to,\\n      // not including, the first %x3B (\\\";\\\") character.\\n      // ...\\n      stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\\n    }\\n\\n    return (document.cookie =\\n      key + '=' + converter.write(value, key) + stringifiedAttributes)\\n  }\\n\\n  function get (key) {\\n    if (typeof document === 'undefined' || (arguments.length && !key)) {\\n      return\\n    }\\n\\n    // To prevent the for loop in the first place assign an empty array\\n    // in case there are no cookies at all.\\n    var cookies = document.cookie ? document.cookie.split('; ') : [];\\n    var jar = {};\\n    for (var i = 0; i < cookies.length; i++) {\\n      var parts = cookies[i].split('=');\\n      var value = parts.slice(1).join('=');\\n\\n      try {\\n        var foundKey = decodeURIComponent(parts[0]);\\n        jar[foundKey] = converter.read(value, foundKey);\\n\\n        if (key === foundKey) {\\n          break\\n        }\\n      } catch (e) {}\\n    }\\n\\n    return key ? jar[key] : jar\\n  }\\n\\n  return Object.create(\\n    {\\n      set: set,\\n      get: get,\\n      remove: function (key, attributes) {\\n        set(\\n          key,\\n          '',\\n          assign({}, attributes, {\\n            expires: -1\\n          })\\n        );\\n      },\\n      withAttributes: function (attributes) {\\n        return init(this.converter, assign({}, this.attributes, attributes))\\n      },\\n      withConverter: function (converter) {\\n        return init(assign({}, this.converter, converter), this.attributes)\\n      }\\n    },\\n    {\\n      attributes: { value: Object.freeze(defaultAttributes) },\\n      converter: { value: Object.freeze(converter) }\\n    }\\n  )\\n}\\n\\nvar api = init(defaultConverter, { path: '/' });\\n/* eslint-enable no-var */\\n\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (api);\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvanMtY29va2llL2Rpc3QvanMuY29va2llLm1qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHNCQUFzQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxFQUFFO0FBQ3RDLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCOztBQUUxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0NBQWtDOztBQUVsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFFQUFxRTtBQUNyRTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0EsdUVBQXVFO0FBQ3ZFOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkRBQTZEO0FBQzdEO0FBQ0Esb0JBQW9CLG9CQUFvQjtBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTztBQUNQO0FBQ0EsNkNBQTZDO0FBQzdDLE9BQU87QUFDUDtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBLEtBQUs7QUFDTDtBQUNBLG9CQUFvQix5Q0FBeUM7QUFDN0QsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUMsV0FBVztBQUM5Qzs7QUFFQSxpRUFBZSxHQUFHLEVBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9qcy1jb29raWUvZGlzdC9qcy5jb29raWUubWpzPzBkODUiXSwic291cmNlc0NvbnRlbnQiOlsiLyohIGpzLWNvb2tpZSB2My4wLjEgfCBNSVQgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xuZnVuY3Rpb24gYXNzaWduICh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiB0YXJnZXRcbn1cbi8qIGVzbGludC1lbmFibGUgbm8tdmFyICovXG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xudmFyIGRlZmF1bHRDb252ZXJ0ZXIgPSB7XG4gIHJlYWQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZVswXSA9PT0gJ1wiJykge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgxLCAtMSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC8oJVtcXGRBLUZdezJ9KSsvZ2ksIGRlY29kZVVSSUNvbXBvbmVudClcbiAgfSxcbiAgd3JpdGU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpLnJlcGxhY2UoXG4gICAgICAvJSgyWzM0NkJGXXwzW0FDLUZdfDQwfDVbQkRFXXw2MHw3W0JDRF0pL2csXG4gICAgICBkZWNvZGVVUklDb21wb25lbnRcbiAgICApXG4gIH1cbn07XG4vKiBlc2xpbnQtZW5hYmxlIG5vLXZhciAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12YXIgKi9cblxuZnVuY3Rpb24gaW5pdCAoY29udmVydGVyLCBkZWZhdWx0QXR0cmlidXRlcykge1xuICBmdW5jdGlvbiBzZXQgKGtleSwgdmFsdWUsIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXR0cmlidXRlcyA9IGFzc2lnbih7fSwgZGVmYXVsdEF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMpO1xuXG4gICAgaWYgKHR5cGVvZiBhdHRyaWJ1dGVzLmV4cGlyZXMgPT09ICdudW1iZXInKSB7XG4gICAgICBhdHRyaWJ1dGVzLmV4cGlyZXMgPSBuZXcgRGF0ZShEYXRlLm5vdygpICsgYXR0cmlidXRlcy5leHBpcmVzICogODY0ZTUpO1xuICAgIH1cbiAgICBpZiAoYXR0cmlidXRlcy5leHBpcmVzKSB7XG4gICAgICBhdHRyaWJ1dGVzLmV4cGlyZXMgPSBhdHRyaWJ1dGVzLmV4cGlyZXMudG9VVENTdHJpbmcoKTtcbiAgICB9XG5cbiAgICBrZXkgPSBlbmNvZGVVUklDb21wb25lbnQoa2V5KVxuICAgICAgLnJlcGxhY2UoLyUoMlszNDZCXXw1RXw2MHw3QykvZywgZGVjb2RlVVJJQ29tcG9uZW50KVxuICAgICAgLnJlcGxhY2UoL1soKV0vZywgZXNjYXBlKTtcblxuICAgIHZhciBzdHJpbmdpZmllZEF0dHJpYnV0ZXMgPSAnJztcbiAgICBmb3IgKHZhciBhdHRyaWJ1dGVOYW1lIGluIGF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmICghYXR0cmlidXRlc1thdHRyaWJ1dGVOYW1lXSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBzdHJpbmdpZmllZEF0dHJpYnV0ZXMgKz0gJzsgJyArIGF0dHJpYnV0ZU5hbWU7XG5cbiAgICAgIGlmIChhdHRyaWJ1dGVzW2F0dHJpYnV0ZU5hbWVdID09PSB0cnVlKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIENvbnNpZGVycyBSRkMgNjI2NSBzZWN0aW9uIDUuMjpcbiAgICAgIC8vIC4uLlxuICAgICAgLy8gMy4gIElmIHRoZSByZW1haW5pbmcgdW5wYXJzZWQtYXR0cmlidXRlcyBjb250YWlucyBhICV4M0IgKFwiO1wiKVxuICAgICAgLy8gICAgIGNoYXJhY3RlcjpcbiAgICAgIC8vIENvbnN1bWUgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHVucGFyc2VkLWF0dHJpYnV0ZXMgdXAgdG8sXG4gICAgICAvLyBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzQiAoXCI7XCIpIGNoYXJhY3Rlci5cbiAgICAgIC8vIC4uLlxuICAgICAgc3RyaW5naWZpZWRBdHRyaWJ1dGVzICs9ICc9JyArIGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0uc3BsaXQoJzsnKVswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGRvY3VtZW50LmNvb2tpZSA9XG4gICAgICBrZXkgKyAnPScgKyBjb252ZXJ0ZXIud3JpdGUodmFsdWUsIGtleSkgKyBzdHJpbmdpZmllZEF0dHJpYnV0ZXMpXG4gIH1cblxuICBmdW5jdGlvbiBnZXQgKGtleSkge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnIHx8IChhcmd1bWVudHMubGVuZ3RoICYmICFrZXkpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBUbyBwcmV2ZW50IHRoZSBmb3IgbG9vcCBpbiB0aGUgZmlyc3QgcGxhY2UgYXNzaWduIGFuIGVtcHR5IGFycmF5XG4gICAgLy8gaW4gY2FzZSB0aGVyZSBhcmUgbm8gY29va2llcyBhdCBhbGwuXG4gICAgdmFyIGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUgPyBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsgJykgOiBbXTtcbiAgICB2YXIgamFyID0ge307XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFydHMgPSBjb29raWVzW2ldLnNwbGl0KCc9Jyk7XG4gICAgICB2YXIgdmFsdWUgPSBwYXJ0cy5zbGljZSgxKS5qb2luKCc9Jyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBmb3VuZEtleSA9IGRlY29kZVVSSUNvbXBvbmVudChwYXJ0c1swXSk7XG4gICAgICAgIGphcltmb3VuZEtleV0gPSBjb252ZXJ0ZXIucmVhZCh2YWx1ZSwgZm91bmRLZXkpO1xuXG4gICAgICAgIGlmIChrZXkgPT09IGZvdW5kS2V5KSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG5cbiAgICByZXR1cm4ga2V5ID8gamFyW2tleV0gOiBqYXJcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuY3JlYXRlKFxuICAgIHtcbiAgICAgIHNldDogc2V0LFxuICAgICAgZ2V0OiBnZXQsXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uIChrZXksIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgc2V0KFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICBhc3NpZ24oe30sIGF0dHJpYnV0ZXMsIHtcbiAgICAgICAgICAgIGV4cGlyZXM6IC0xXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICB3aXRoQXR0cmlidXRlczogZnVuY3Rpb24gKGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgcmV0dXJuIGluaXQodGhpcy5jb252ZXJ0ZXIsIGFzc2lnbih7fSwgdGhpcy5hdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzKSlcbiAgICAgIH0sXG4gICAgICB3aXRoQ29udmVydGVyOiBmdW5jdGlvbiAoY29udmVydGVyKSB7XG4gICAgICAgIHJldHVybiBpbml0KGFzc2lnbih7fSwgdGhpcy5jb252ZXJ0ZXIsIGNvbnZlcnRlciksIHRoaXMuYXR0cmlidXRlcylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGF0dHJpYnV0ZXM6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUoZGVmYXVsdEF0dHJpYnV0ZXMpIH0sXG4gICAgICBjb252ZXJ0ZXI6IHsgdmFsdWU6IE9iamVjdC5mcmVlemUoY29udmVydGVyKSB9XG4gICAgfVxuICApXG59XG5cbnZhciBhcGkgPSBpbml0KGRlZmF1bHRDb252ZXJ0ZXIsIHsgcGF0aDogJy8nIH0pO1xuLyogZXNsaW50LWVuYWJsZSBuby12YXIgKi9cblxuZXhwb3J0IGRlZmF1bHQgYXBpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/js-cookie/dist/js.cookie.mjs\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/ssr-window/ssr-window.esm.js\":\r\n/*!***************************************************!*\\\r\n  !*** ./node_modules/ssr-window/ssr-window.esm.js ***!\r\n  \\***************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"extend\\\": () => (/* binding */ extend),\\n/* harmony export */   \\\"getDocument\\\": () => (/* binding */ getDocument),\\n/* harmony export */   \\\"getWindow\\\": () => (/* binding */ getWindow),\\n/* harmony export */   \\\"ssrDocument\\\": () => (/* binding */ ssrDocument),\\n/* harmony export */   \\\"ssrWindow\\\": () => (/* binding */ ssrWindow)\\n/* harmony export */ });\\n/**\\n * SSR Window 4.0.2\\n * Better handling for window object in SSR environment\\n * https://github.com/nolimits4web/ssr-window\\n *\\n * Copyright 2021, Vladimir Kharlampidi\\n *\\n * Licensed under MIT\\n *\\n * Released on: December 13, 2021\\n */\\n/* eslint-disable no-param-reassign */\\nfunction isObject(obj) {\\n    return (obj !== null &&\\n        typeof obj === 'object' &&\\n        'constructor' in obj &&\\n        obj.constructor === Object);\\n}\\nfunction extend(target = {}, src = {}) {\\n    Object.keys(src).forEach((key) => {\\n        if (typeof target[key] === 'undefined')\\n            target[key] = src[key];\\n        else if (isObject(src[key]) &&\\n            isObject(target[key]) &&\\n            Object.keys(src[key]).length > 0) {\\n            extend(target[key], src[key]);\\n        }\\n    });\\n}\\n\\nconst ssrDocument = {\\n    body: {},\\n    addEventListener() { },\\n    removeEventListener() { },\\n    activeElement: {\\n        blur() { },\\n        nodeName: '',\\n    },\\n    querySelector() {\\n        return null;\\n    },\\n    querySelectorAll() {\\n        return [];\\n    },\\n    getElementById() {\\n        return null;\\n    },\\n    createEvent() {\\n        return {\\n            initEvent() { },\\n        };\\n    },\\n    createElement() {\\n        return {\\n            children: [],\\n            childNodes: [],\\n            style: {},\\n            setAttribute() { },\\n            getElementsByTagName() {\\n                return [];\\n            },\\n        };\\n    },\\n    createElementNS() {\\n        return {};\\n    },\\n    importNode() {\\n        return null;\\n    },\\n    location: {\\n        hash: '',\\n        host: '',\\n        hostname: '',\\n        href: '',\\n        origin: '',\\n        pathname: '',\\n        protocol: '',\\n        search: '',\\n    },\\n};\\nfunction getDocument() {\\n    const doc = typeof document !== 'undefined' ? document : {};\\n    extend(doc, ssrDocument);\\n    return doc;\\n}\\n\\nconst ssrWindow = {\\n    document: ssrDocument,\\n    navigator: {\\n        userAgent: '',\\n    },\\n    location: {\\n        hash: '',\\n        host: '',\\n        hostname: '',\\n        href: '',\\n        origin: '',\\n        pathname: '',\\n        protocol: '',\\n        search: '',\\n    },\\n    history: {\\n        replaceState() { },\\n        pushState() { },\\n        go() { },\\n        back() { },\\n    },\\n    CustomEvent: function CustomEvent() {\\n        return this;\\n    },\\n    addEventListener() { },\\n    removeEventListener() { },\\n    getComputedStyle() {\\n        return {\\n            getPropertyValue() {\\n                return '';\\n            },\\n        };\\n    },\\n    Image() { },\\n    Date() { },\\n    screen: {},\\n    setTimeout() { },\\n    clearTimeout() { },\\n    matchMedia() {\\n        return {};\\n    },\\n    requestAnimationFrame(callback) {\\n        if (typeof setTimeout === 'undefined') {\\n            callback();\\n            return null;\\n        }\\n        return setTimeout(callback, 0);\\n    },\\n    cancelAnimationFrame(id) {\\n        if (typeof setTimeout === 'undefined') {\\n            return;\\n        }\\n        clearTimeout(id);\\n    },\\n};\\nfunction getWindow() {\\n    const win = typeof window !== 'undefined' ? window : {};\\n    extend(win, ssrWindow);\\n    return win;\\n}\\n\\n\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3NyLXdpbmRvdy9zc3Itd2luZG93LmVzbS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixVQUFVO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSxZQUFZO0FBQ1osMEJBQTBCO0FBQzFCLDZCQUE2QjtBQUM3QjtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLDBCQUEwQjtBQUMxQix1QkFBdUI7QUFDdkIsZ0JBQWdCO0FBQ2hCLGtCQUFrQjtBQUNsQixLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCwwQkFBMEI7QUFDMUIsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsS0FBSztBQUNMLGVBQWU7QUFDZixjQUFjO0FBQ2QsY0FBYztBQUNkLG9CQUFvQjtBQUNwQixzQkFBc0I7QUFDdEI7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWtFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3NyLXdpbmRvdy9zc3Itd2luZG93LmVzbS5qcz81NzkxIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU1NSIFdpbmRvdyA0LjAuMlxuICogQmV0dGVyIGhhbmRsaW5nIGZvciB3aW5kb3cgb2JqZWN0IGluIFNTUiBlbnZpcm9ubWVudFxuICogaHR0cHM6Ly9naXRodWIuY29tL25vbGltaXRzNHdlYi9zc3Itd2luZG93XG4gKlxuICogQ29weXJpZ2h0IDIwMjEsIFZsYWRpbWlyIEtoYXJsYW1waWRpXG4gKlxuICogTGljZW5zZWQgdW5kZXIgTUlUXG4gKlxuICogUmVsZWFzZWQgb246IERlY2VtYmVyIDEzLCAyMDIxXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG5mdW5jdGlvbiBpc09iamVjdChvYmopIHtcbiAgICByZXR1cm4gKG9iaiAhPT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAnY29uc3RydWN0b3InIGluIG9iaiAmJlxuICAgICAgICBvYmouY29uc3RydWN0b3IgPT09IE9iamVjdCk7XG59XG5mdW5jdGlvbiBleHRlbmQodGFyZ2V0ID0ge30sIHNyYyA9IHt9KSB7XG4gICAgT2JqZWN0LmtleXMoc3JjKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXRba2V5XSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNyY1trZXldO1xuICAgICAgICBlbHNlIGlmIChpc09iamVjdChzcmNba2V5XSkgJiZcbiAgICAgICAgICAgIGlzT2JqZWN0KHRhcmdldFtrZXldKSAmJlxuICAgICAgICAgICAgT2JqZWN0LmtleXMoc3JjW2tleV0pLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGV4dGVuZCh0YXJnZXRba2V5XSwgc3JjW2tleV0pO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmNvbnN0IHNzckRvY3VtZW50ID0ge1xuICAgIGJvZHk6IHt9LFxuICAgIGFkZEV2ZW50TGlzdGVuZXIoKSB7IH0sXG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcigpIHsgfSxcbiAgICBhY3RpdmVFbGVtZW50OiB7XG4gICAgICAgIGJsdXIoKSB7IH0sXG4gICAgICAgIG5vZGVOYW1lOiAnJyxcbiAgICB9LFxuICAgIHF1ZXJ5U2VsZWN0b3IoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcXVlcnlTZWxlY3RvckFsbCgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH0sXG4gICAgZ2V0RWxlbWVudEJ5SWQoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgY3JlYXRlRXZlbnQoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbml0RXZlbnQoKSB7IH0sXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBjcmVhdGVFbGVtZW50KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgY2hpbGROb2RlczogW10sXG4gICAgICAgICAgICBzdHlsZToge30sXG4gICAgICAgICAgICBzZXRBdHRyaWJ1dGUoKSB7IH0sXG4gICAgICAgICAgICBnZXRFbGVtZW50c0J5VGFnTmFtZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH0sXG4gICAgY3JlYXRlRWxlbWVudE5TKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfSxcbiAgICBpbXBvcnROb2RlKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIGxvY2F0aW9uOiB7XG4gICAgICAgIGhhc2g6ICcnLFxuICAgICAgICBob3N0OiAnJyxcbiAgICAgICAgaG9zdG5hbWU6ICcnLFxuICAgICAgICBocmVmOiAnJyxcbiAgICAgICAgb3JpZ2luOiAnJyxcbiAgICAgICAgcGF0aG5hbWU6ICcnLFxuICAgICAgICBwcm90b2NvbDogJycsXG4gICAgICAgIHNlYXJjaDogJycsXG4gICAgfSxcbn07XG5mdW5jdGlvbiBnZXREb2N1bWVudCgpIHtcbiAgICBjb25zdCBkb2MgPSB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnID8gZG9jdW1lbnQgOiB7fTtcbiAgICBleHRlbmQoZG9jLCBzc3JEb2N1bWVudCk7XG4gICAgcmV0dXJuIGRvYztcbn1cblxuY29uc3Qgc3NyV2luZG93ID0ge1xuICAgIGRvY3VtZW50OiBzc3JEb2N1bWVudCxcbiAgICBuYXZpZ2F0b3I6IHtcbiAgICAgICAgdXNlckFnZW50OiAnJyxcbiAgICB9LFxuICAgIGxvY2F0aW9uOiB7XG4gICAgICAgIGhhc2g6ICcnLFxuICAgICAgICBob3N0OiAnJyxcbiAgICAgICAgaG9zdG5hbWU6ICcnLFxuICAgICAgICBocmVmOiAnJyxcbiAgICAgICAgb3JpZ2luOiAnJyxcbiAgICAgICAgcGF0aG5hbWU6ICcnLFxuICAgICAgICBwcm90b2NvbDogJycsXG4gICAgICAgIHNlYXJjaDogJycsXG4gICAgfSxcbiAgICBoaXN0b3J5OiB7XG4gICAgICAgIHJlcGxhY2VTdGF0ZSgpIHsgfSxcbiAgICAgICAgcHVzaFN0YXRlKCkgeyB9LFxuICAgICAgICBnbygpIHsgfSxcbiAgICAgICAgYmFjaygpIHsgfSxcbiAgICB9LFxuICAgIEN1c3RvbUV2ZW50OiBmdW5jdGlvbiBDdXN0b21FdmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbiAgICBhZGRFdmVudExpc3RlbmVyKCkgeyB9LFxuICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoKSB7IH0sXG4gICAgZ2V0Q29tcHV0ZWRTdHlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldFByb3BlcnR5VmFsdWUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIEltYWdlKCkgeyB9LFxuICAgIERhdGUoKSB7IH0sXG4gICAgc2NyZWVuOiB7fSxcbiAgICBzZXRUaW1lb3V0KCkgeyB9LFxuICAgIGNsZWFyVGltZW91dCgpIHsgfSxcbiAgICBtYXRjaE1lZGlhKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfSxcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGNhbGxiYWNrLCAwKTtcbiAgICB9LFxuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgIH0sXG59O1xuZnVuY3Rpb24gZ2V0V2luZG93KCkge1xuICAgIGNvbnN0IHdpbiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDoge307XG4gICAgZXh0ZW5kKHdpbiwgc3NyV2luZG93KTtcbiAgICByZXR1cm4gd2luO1xufVxuXG5leHBvcnQgeyBleHRlbmQsIGdldERvY3VtZW50LCBnZXRXaW5kb3csIHNzckRvY3VtZW50LCBzc3JXaW5kb3cgfTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/ssr-window/ssr-window.esm.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/breakpoints/getBreakpoint.js\":\r\n/*!***************************************************************!*\\\r\n  !*** ./node_modules/swiper/core/breakpoints/getBreakpoint.js ***!\r\n  \\***************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ getBreakpoint)\\n/* harmony export */ });\\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \\\"./node_modules/ssr-window/ssr-window.esm.js\\\");\\n\\nfunction getBreakpoint(breakpoints, base = 'window', containerEl) {\\n  if (!breakpoints || base === 'container' && !containerEl) return undefined;\\n  let breakpoint = false;\\n  const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n  const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\\n  const points = Object.keys(breakpoints).map(point => {\\n    if (typeof point === 'string' && point.indexOf('@') === 0) {\\n      const minRatio = parseFloat(point.substr(1));\\n      const value = currentHeight * minRatio;\\n      return {\\n        value,\\n        point\\n      };\\n    }\\n    return {\\n      value: point,\\n      point\\n    };\\n  });\\n  points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\\n  for (let i = 0; i < points.length; i += 1) {\\n    const {\\n      point,\\n      value\\n    } = points[i];\\n    if (base === 'window') {\\n      if (window.matchMedia(`(min-width: ${value}px)`).matches) {\\n        breakpoint = point;\\n      }\\n    } else if (value <= containerEl.clientWidth) {\\n      breakpoint = point;\\n    }\\n  }\\n  return breakpoint || 'max';\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvYnJlYWtwb2ludHMvZ2V0QnJlYWtwb2ludC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUF1QztBQUN4QjtBQUNmO0FBQ0E7QUFDQSxpQkFBaUIscURBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLGtCQUFrQixtQkFBbUI7QUFDckM7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsMkNBQTJDLE1BQU07QUFDakQ7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvYnJlYWtwb2ludHMvZ2V0QnJlYWtwb2ludC5qcz8yZmNhIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gJ3Nzci13aW5kb3cnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QnJlYWtwb2ludChicmVha3BvaW50cywgYmFzZSA9ICd3aW5kb3cnLCBjb250YWluZXJFbCkge1xuICBpZiAoIWJyZWFrcG9pbnRzIHx8IGJhc2UgPT09ICdjb250YWluZXInICYmICFjb250YWluZXJFbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgbGV0IGJyZWFrcG9pbnQgPSBmYWxzZTtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIGNvbnN0IGN1cnJlbnRIZWlnaHQgPSBiYXNlID09PSAnd2luZG93JyA/IHdpbmRvdy5pbm5lckhlaWdodCA6IGNvbnRhaW5lckVsLmNsaWVudEhlaWdodDtcbiAgY29uc3QgcG9pbnRzID0gT2JqZWN0LmtleXMoYnJlYWtwb2ludHMpLm1hcChwb2ludCA9PiB7XG4gICAgaWYgKHR5cGVvZiBwb2ludCA9PT0gJ3N0cmluZycgJiYgcG9pbnQuaW5kZXhPZignQCcpID09PSAwKSB7XG4gICAgICBjb25zdCBtaW5SYXRpbyA9IHBhcnNlRmxvYXQocG9pbnQuc3Vic3RyKDEpKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gY3VycmVudEhlaWdodCAqIG1pblJhdGlvO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHBvaW50XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHBvaW50LFxuICAgICAgcG9pbnRcbiAgICB9O1xuICB9KTtcbiAgcG9pbnRzLnNvcnQoKGEsIGIpID0+IHBhcnNlSW50KGEudmFsdWUsIDEwKSAtIHBhcnNlSW50KGIudmFsdWUsIDEwKSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgY29uc3Qge1xuICAgICAgcG9pbnQsXG4gICAgICB2YWx1ZVxuICAgIH0gPSBwb2ludHNbaV07XG4gICAgaWYgKGJhc2UgPT09ICd3aW5kb3cnKSB7XG4gICAgICBpZiAod2luZG93Lm1hdGNoTWVkaWEoYChtaW4td2lkdGg6ICR7dmFsdWV9cHgpYCkubWF0Y2hlcykge1xuICAgICAgICBicmVha3BvaW50ID0gcG9pbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA8PSBjb250YWluZXJFbC5jbGllbnRXaWR0aCkge1xuICAgICAgYnJlYWtwb2ludCA9IHBvaW50O1xuICAgIH1cbiAgfVxuICByZXR1cm4gYnJlYWtwb2ludCB8fCAnbWF4Jztcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/breakpoints/getBreakpoint.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/breakpoints/index.js\":\r\n/*!*******************************************************!*\\\r\n  !*** ./node_modules/swiper/core/breakpoints/index.js ***!\r\n  \\*******************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* harmony import */ var _setBreakpoint_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setBreakpoint.js */ \\\"./node_modules/swiper/core/breakpoints/setBreakpoint.js\\\");\\n/* harmony import */ var _getBreakpoint_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getBreakpoint.js */ \\\"./node_modules/swiper/core/breakpoints/getBreakpoint.js\\\");\\n\\n\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\\n  setBreakpoint: _setBreakpoint_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"],\\n  getBreakpoint: _getBreakpoint_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"]\\n});//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvYnJlYWtwb2ludHMvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQStDO0FBQ0E7QUFDL0MsaUVBQWU7QUFDZixlQUFlO0FBQ2YsZUFBZTtBQUNmLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9icmVha3BvaW50cy9pbmRleC5qcz8xYzY0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzZXRCcmVha3BvaW50IGZyb20gJy4vc2V0QnJlYWtwb2ludC5qcyc7XG5pbXBvcnQgZ2V0QnJlYWtwb2ludCBmcm9tICcuL2dldEJyZWFrcG9pbnQuanMnO1xuZXhwb3J0IGRlZmF1bHQge1xuICBzZXRCcmVha3BvaW50LFxuICBnZXRCcmVha3BvaW50XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/breakpoints/index.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/breakpoints/setBreakpoint.js\":\r\n/*!***************************************************************!*\\\r\n  !*** ./node_modules/swiper/core/breakpoints/setBreakpoint.js ***!\r\n  \\***************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ setBreakpoint)\\n/* harmony export */ });\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\nconst isGridEnabled = (swiper, params) => {\\n  return swiper.grid && params.grid && params.grid.rows > 1;\\n};\\nfunction setBreakpoint() {\\n  const swiper = this;\\n  const {\\n    realIndex,\\n    initialized,\\n    params,\\n    el\\n  } = swiper;\\n  const breakpoints = params.breakpoints;\\n  if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\\n\\n  // Get breakpoint for window width and update parameters\\n  const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\\n  if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\\n  const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\\n  const breakpointParams = breakpointOnlyParams || swiper.originalParams;\\n  const wasMultiRow = isGridEnabled(swiper, params);\\n  const isMultiRow = isGridEnabled(swiper, breakpointParams);\\n  const wasEnabled = params.enabled;\\n  if (wasMultiRow && !isMultiRow) {\\n    el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\\n    swiper.emitContainerClasses();\\n  } else if (!wasMultiRow && isMultiRow) {\\n    el.classList.add(`${params.containerModifierClass}grid`);\\n    if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\\n      el.classList.add(`${params.containerModifierClass}grid-column`);\\n    }\\n    swiper.emitContainerClasses();\\n  }\\n\\n  // Toggle navigation, pagination, scrollbar\\n  ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\\n    const wasModuleEnabled = params[prop] && params[prop].enabled;\\n    const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\\n    if (wasModuleEnabled && !isModuleEnabled) {\\n      swiper[prop].disable();\\n    }\\n    if (!wasModuleEnabled && isModuleEnabled) {\\n      swiper[prop].enable();\\n    }\\n  });\\n  const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\\n  const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\\n  if (directionChanged && initialized) {\\n    swiper.changeDirection();\\n  }\\n  (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.extend)(swiper.params, breakpointParams);\\n  const isEnabled = swiper.params.enabled;\\n  Object.assign(swiper, {\\n    allowTouchMove: swiper.params.allowTouchMove,\\n    allowSlideNext: swiper.params.allowSlideNext,\\n    allowSlidePrev: swiper.params.allowSlidePrev\\n  });\\n  if (wasEnabled && !isEnabled) {\\n    swiper.disable();\\n  } else if (!wasEnabled && isEnabled) {\\n    swiper.enable();\\n  }\\n  swiper.currentBreakpoint = breakpoint;\\n  swiper.emit('_beforeBreakpoint', breakpointParams);\\n  if (needsReLoop && initialized) {\\n    swiper.loopDestroy();\\n    swiper.loopCreate(realIndex);\\n    swiper.updateSlides();\\n  }\\n  swiper.emit('breakpoint', breakpointParams);\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvYnJlYWtwb2ludHMvc2V0QnJlYWtwb2ludC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUErQztBQUMvQztBQUNBO0FBQ0E7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiw4QkFBOEIsVUFBVSw4QkFBOEI7QUFDakc7QUFDQSxJQUFJO0FBQ0osd0JBQXdCLDhCQUE4QjtBQUN0RDtBQUNBLDBCQUEwQiw4QkFBOEI7QUFDeEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLHdEQUFNO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9icmVha3BvaW50cy9zZXRCcmVha3BvaW50LmpzPzg0MzEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzLmpzJztcbmNvbnN0IGlzR3JpZEVuYWJsZWQgPSAoc3dpcGVyLCBwYXJhbXMpID0+IHtcbiAgcmV0dXJuIHN3aXBlci5ncmlkICYmIHBhcmFtcy5ncmlkICYmIHBhcmFtcy5ncmlkLnJvd3MgPiAxO1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNldEJyZWFrcG9pbnQoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHtcbiAgICByZWFsSW5kZXgsXG4gICAgaW5pdGlhbGl6ZWQsXG4gICAgcGFyYW1zLFxuICAgIGVsXG4gIH0gPSBzd2lwZXI7XG4gIGNvbnN0IGJyZWFrcG9pbnRzID0gcGFyYW1zLmJyZWFrcG9pbnRzO1xuICBpZiAoIWJyZWFrcG9pbnRzIHx8IGJyZWFrcG9pbnRzICYmIE9iamVjdC5rZXlzKGJyZWFrcG9pbnRzKS5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAvLyBHZXQgYnJlYWtwb2ludCBmb3Igd2luZG93IHdpZHRoIGFuZCB1cGRhdGUgcGFyYW1ldGVyc1xuICBjb25zdCBicmVha3BvaW50ID0gc3dpcGVyLmdldEJyZWFrcG9pbnQoYnJlYWtwb2ludHMsIHN3aXBlci5wYXJhbXMuYnJlYWtwb2ludHNCYXNlLCBzd2lwZXIuZWwpO1xuICBpZiAoIWJyZWFrcG9pbnQgfHwgc3dpcGVyLmN1cnJlbnRCcmVha3BvaW50ID09PSBicmVha3BvaW50KSByZXR1cm47XG4gIGNvbnN0IGJyZWFrcG9pbnRPbmx5UGFyYW1zID0gYnJlYWtwb2ludCBpbiBicmVha3BvaW50cyA/IGJyZWFrcG9pbnRzW2JyZWFrcG9pbnRdIDogdW5kZWZpbmVkO1xuICBjb25zdCBicmVha3BvaW50UGFyYW1zID0gYnJlYWtwb2ludE9ubHlQYXJhbXMgfHwgc3dpcGVyLm9yaWdpbmFsUGFyYW1zO1xuICBjb25zdCB3YXNNdWx0aVJvdyA9IGlzR3JpZEVuYWJsZWQoc3dpcGVyLCBwYXJhbXMpO1xuICBjb25zdCBpc011bHRpUm93ID0gaXNHcmlkRW5hYmxlZChzd2lwZXIsIGJyZWFrcG9pbnRQYXJhbXMpO1xuICBjb25zdCB3YXNFbmFibGVkID0gcGFyYW1zLmVuYWJsZWQ7XG4gIGlmICh3YXNNdWx0aVJvdyAmJiAhaXNNdWx0aVJvdykge1xuICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoYCR7cGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9Z3JpZGAsIGAke3BhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzfWdyaWQtY29sdW1uYCk7XG4gICAgc3dpcGVyLmVtaXRDb250YWluZXJDbGFzc2VzKCk7XG4gIH0gZWxzZSBpZiAoIXdhc011bHRpUm93ICYmIGlzTXVsdGlSb3cpIHtcbiAgICBlbC5jbGFzc0xpc3QuYWRkKGAke3BhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzfWdyaWRgKTtcbiAgICBpZiAoYnJlYWtwb2ludFBhcmFtcy5ncmlkLmZpbGwgJiYgYnJlYWtwb2ludFBhcmFtcy5ncmlkLmZpbGwgPT09ICdjb2x1bW4nIHx8ICFicmVha3BvaW50UGFyYW1zLmdyaWQuZmlsbCAmJiBwYXJhbXMuZ3JpZC5maWxsID09PSAnY29sdW1uJykge1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChgJHtwYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzc31ncmlkLWNvbHVtbmApO1xuICAgIH1cbiAgICBzd2lwZXIuZW1pdENvbnRhaW5lckNsYXNzZXMoKTtcbiAgfVxuXG4gIC8vIFRvZ2dsZSBuYXZpZ2F0aW9uLCBwYWdpbmF0aW9uLCBzY3JvbGxiYXJcbiAgWyduYXZpZ2F0aW9uJywgJ3BhZ2luYXRpb24nLCAnc2Nyb2xsYmFyJ10uZm9yRWFjaChwcm9wID0+IHtcbiAgICBjb25zdCB3YXNNb2R1bGVFbmFibGVkID0gcGFyYW1zW3Byb3BdICYmIHBhcmFtc1twcm9wXS5lbmFibGVkO1xuICAgIGNvbnN0IGlzTW9kdWxlRW5hYmxlZCA9IGJyZWFrcG9pbnRQYXJhbXNbcHJvcF0gJiYgYnJlYWtwb2ludFBhcmFtc1twcm9wXS5lbmFibGVkO1xuICAgIGlmICh3YXNNb2R1bGVFbmFibGVkICYmICFpc01vZHVsZUVuYWJsZWQpIHtcbiAgICAgIHN3aXBlcltwcm9wXS5kaXNhYmxlKCk7XG4gICAgfVxuICAgIGlmICghd2FzTW9kdWxlRW5hYmxlZCAmJiBpc01vZHVsZUVuYWJsZWQpIHtcbiAgICAgIHN3aXBlcltwcm9wXS5lbmFibGUoKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBkaXJlY3Rpb25DaGFuZ2VkID0gYnJlYWtwb2ludFBhcmFtcy5kaXJlY3Rpb24gJiYgYnJlYWtwb2ludFBhcmFtcy5kaXJlY3Rpb24gIT09IHBhcmFtcy5kaXJlY3Rpb247XG4gIGNvbnN0IG5lZWRzUmVMb29wID0gcGFyYW1zLmxvb3AgJiYgKGJyZWFrcG9pbnRQYXJhbXMuc2xpZGVzUGVyVmlldyAhPT0gcGFyYW1zLnNsaWRlc1BlclZpZXcgfHwgZGlyZWN0aW9uQ2hhbmdlZCk7XG4gIGlmIChkaXJlY3Rpb25DaGFuZ2VkICYmIGluaXRpYWxpemVkKSB7XG4gICAgc3dpcGVyLmNoYW5nZURpcmVjdGlvbigpO1xuICB9XG4gIGV4dGVuZChzd2lwZXIucGFyYW1zLCBicmVha3BvaW50UGFyYW1zKTtcbiAgY29uc3QgaXNFbmFibGVkID0gc3dpcGVyLnBhcmFtcy5lbmFibGVkO1xuICBPYmplY3QuYXNzaWduKHN3aXBlciwge1xuICAgIGFsbG93VG91Y2hNb3ZlOiBzd2lwZXIucGFyYW1zLmFsbG93VG91Y2hNb3ZlLFxuICAgIGFsbG93U2xpZGVOZXh0OiBzd2lwZXIucGFyYW1zLmFsbG93U2xpZGVOZXh0LFxuICAgIGFsbG93U2xpZGVQcmV2OiBzd2lwZXIucGFyYW1zLmFsbG93U2xpZGVQcmV2XG4gIH0pO1xuICBpZiAod2FzRW5hYmxlZCAmJiAhaXNFbmFibGVkKSB7XG4gICAgc3dpcGVyLmRpc2FibGUoKTtcbiAgfSBlbHNlIGlmICghd2FzRW5hYmxlZCAmJiBpc0VuYWJsZWQpIHtcbiAgICBzd2lwZXIuZW5hYmxlKCk7XG4gIH1cbiAgc3dpcGVyLmN1cnJlbnRCcmVha3BvaW50ID0gYnJlYWtwb2ludDtcbiAgc3dpcGVyLmVtaXQoJ19iZWZvcmVCcmVha3BvaW50JywgYnJlYWtwb2ludFBhcmFtcyk7XG4gIGlmIChuZWVkc1JlTG9vcCAmJiBpbml0aWFsaXplZCkge1xuICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICAgIHN3aXBlci5sb29wQ3JlYXRlKHJlYWxJbmRleCk7XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuICB9XG4gIHN3aXBlci5lbWl0KCdicmVha3BvaW50JywgYnJlYWtwb2ludFBhcmFtcyk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/breakpoints/setBreakpoint.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/check-overflow/index.js\":\r\n/*!**********************************************************!*\\\r\n  !*** ./node_modules/swiper/core/check-overflow/index.js ***!\r\n  \\**********************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\nfunction checkOverflow() {\\n  const swiper = this;\\n  const {\\n    isLocked: wasLocked,\\n    params\\n  } = swiper;\\n  const {\\n    slidesOffsetBefore\\n  } = params;\\n  if (slidesOffsetBefore) {\\n    const lastSlideIndex = swiper.slides.length - 1;\\n    const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\\n    swiper.isLocked = swiper.size > lastSlideRightEdge;\\n  } else {\\n    swiper.isLocked = swiper.snapGrid.length === 1;\\n  }\\n  if (params.allowSlideNext === true) {\\n    swiper.allowSlideNext = !swiper.isLocked;\\n  }\\n  if (params.allowSlidePrev === true) {\\n    swiper.allowSlidePrev = !swiper.isLocked;\\n  }\\n  if (wasLocked && wasLocked !== swiper.isLocked) {\\n    swiper.isEnd = false;\\n  }\\n  if (wasLocked !== swiper.isLocked) {\\n    swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\\n  }\\n}\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\\n  checkOverflow\\n});//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvY2hlY2stb3ZlcmZsb3cvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBZTtBQUNmO0FBQ0EsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2NoZWNrLW92ZXJmbG93L2luZGV4LmpzP2EzOWEiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gY2hlY2tPdmVyZmxvdygpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3Qge1xuICAgIGlzTG9ja2VkOiB3YXNMb2NrZWQsXG4gICAgcGFyYW1zXG4gIH0gPSBzd2lwZXI7XG4gIGNvbnN0IHtcbiAgICBzbGlkZXNPZmZzZXRCZWZvcmVcbiAgfSA9IHBhcmFtcztcbiAgaWYgKHNsaWRlc09mZnNldEJlZm9yZSkge1xuICAgIGNvbnN0IGxhc3RTbGlkZUluZGV4ID0gc3dpcGVyLnNsaWRlcy5sZW5ndGggLSAxO1xuICAgIGNvbnN0IGxhc3RTbGlkZVJpZ2h0RWRnZSA9IHN3aXBlci5zbGlkZXNHcmlkW2xhc3RTbGlkZUluZGV4XSArIHN3aXBlci5zbGlkZXNTaXplc0dyaWRbbGFzdFNsaWRlSW5kZXhdICsgc2xpZGVzT2Zmc2V0QmVmb3JlICogMjtcbiAgICBzd2lwZXIuaXNMb2NrZWQgPSBzd2lwZXIuc2l6ZSA+IGxhc3RTbGlkZVJpZ2h0RWRnZTtcbiAgfSBlbHNlIHtcbiAgICBzd2lwZXIuaXNMb2NrZWQgPSBzd2lwZXIuc25hcEdyaWQubGVuZ3RoID09PSAxO1xuICB9XG4gIGlmIChwYXJhbXMuYWxsb3dTbGlkZU5leHQgPT09IHRydWUpIHtcbiAgICBzd2lwZXIuYWxsb3dTbGlkZU5leHQgPSAhc3dpcGVyLmlzTG9ja2VkO1xuICB9XG4gIGlmIChwYXJhbXMuYWxsb3dTbGlkZVByZXYgPT09IHRydWUpIHtcbiAgICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSAhc3dpcGVyLmlzTG9ja2VkO1xuICB9XG4gIGlmICh3YXNMb2NrZWQgJiYgd2FzTG9ja2VkICE9PSBzd2lwZXIuaXNMb2NrZWQpIHtcbiAgICBzd2lwZXIuaXNFbmQgPSBmYWxzZTtcbiAgfVxuICBpZiAod2FzTG9ja2VkICE9PSBzd2lwZXIuaXNMb2NrZWQpIHtcbiAgICBzd2lwZXIuZW1pdChzd2lwZXIuaXNMb2NrZWQgPyAnbG9jaycgOiAndW5sb2NrJyk7XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY2hlY2tPdmVyZmxvd1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/check-overflow/index.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/classes/addClasses.js\":\r\n/*!********************************************************!*\\\r\n  !*** ./node_modules/swiper/core/classes/addClasses.js ***!\r\n  \\********************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ addClasses)\\n/* harmony export */ });\\nfunction prepareClasses(entries, prefix) {\\n  const resultClasses = [];\\n  entries.forEach(item => {\\n    if (typeof item === 'object') {\\n      Object.keys(item).forEach(classNames => {\\n        if (item[classNames]) {\\n          resultClasses.push(prefix + classNames);\\n        }\\n      });\\n    } else if (typeof item === 'string') {\\n      resultClasses.push(prefix + item);\\n    }\\n  });\\n  return resultClasses;\\n}\\nfunction addClasses() {\\n  const swiper = this;\\n  const {\\n    classNames,\\n    params,\\n    rtl,\\n    el,\\n    device\\n  } = swiper;\\n  // prettier-ignore\\n  const suffixes = prepareClasses(['initialized', params.direction, {\\n    'free-mode': swiper.params.freeMode && params.freeMode.enabled\\n  }, {\\n    'autoheight': params.autoHeight\\n  }, {\\n    'rtl': rtl\\n  }, {\\n    'grid': params.grid && params.grid.rows > 1\\n  }, {\\n    'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\\n  }, {\\n    'android': device.android\\n  }, {\\n    'ios': device.ios\\n  }, {\\n    'css-mode': params.cssMode\\n  }, {\\n    'centered': params.cssMode && params.centeredSlides\\n  }, {\\n    'watch-progress': params.watchSlidesProgress\\n  }], params.containerModifierClass);\\n  classNames.push(...suffixes);\\n  el.classList.add(...classNames);\\n  swiper.emitContainerClasses();\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvY2xhc3Nlcy9hZGRDbGFzc2VzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2NsYXNzZXMvYWRkQ2xhc3Nlcy5qcz8xYjBiIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIHByZXBhcmVDbGFzc2VzKGVudHJpZXMsIHByZWZpeCkge1xuICBjb25zdCByZXN1bHRDbGFzc2VzID0gW107XG4gIGVudHJpZXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICBPYmplY3Qua2V5cyhpdGVtKS5mb3JFYWNoKGNsYXNzTmFtZXMgPT4ge1xuICAgICAgICBpZiAoaXRlbVtjbGFzc05hbWVzXSkge1xuICAgICAgICAgIHJlc3VsdENsYXNzZXMucHVzaChwcmVmaXggKyBjbGFzc05hbWVzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlc3VsdENsYXNzZXMucHVzaChwcmVmaXggKyBpdGVtKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0Q2xhc3Nlcztcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZENsYXNzZXMoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWVzLFxuICAgIHBhcmFtcyxcbiAgICBydGwsXG4gICAgZWwsXG4gICAgZGV2aWNlXG4gIH0gPSBzd2lwZXI7XG4gIC8vIHByZXR0aWVyLWlnbm9yZVxuICBjb25zdCBzdWZmaXhlcyA9IHByZXBhcmVDbGFzc2VzKFsnaW5pdGlhbGl6ZWQnLCBwYXJhbXMuZGlyZWN0aW9uLCB7XG4gICAgJ2ZyZWUtbW9kZSc6IHN3aXBlci5wYXJhbXMuZnJlZU1vZGUgJiYgcGFyYW1zLmZyZWVNb2RlLmVuYWJsZWRcbiAgfSwge1xuICAgICdhdXRvaGVpZ2h0JzogcGFyYW1zLmF1dG9IZWlnaHRcbiAgfSwge1xuICAgICdydGwnOiBydGxcbiAgfSwge1xuICAgICdncmlkJzogcGFyYW1zLmdyaWQgJiYgcGFyYW1zLmdyaWQucm93cyA+IDFcbiAgfSwge1xuICAgICdncmlkLWNvbHVtbic6IHBhcmFtcy5ncmlkICYmIHBhcmFtcy5ncmlkLnJvd3MgPiAxICYmIHBhcmFtcy5ncmlkLmZpbGwgPT09ICdjb2x1bW4nXG4gIH0sIHtcbiAgICAnYW5kcm9pZCc6IGRldmljZS5hbmRyb2lkXG4gIH0sIHtcbiAgICAnaW9zJzogZGV2aWNlLmlvc1xuICB9LCB7XG4gICAgJ2Nzcy1tb2RlJzogcGFyYW1zLmNzc01vZGVcbiAgfSwge1xuICAgICdjZW50ZXJlZCc6IHBhcmFtcy5jc3NNb2RlICYmIHBhcmFtcy5jZW50ZXJlZFNsaWRlc1xuICB9LCB7XG4gICAgJ3dhdGNoLXByb2dyZXNzJzogcGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3NcbiAgfV0sIHBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKTtcbiAgY2xhc3NOYW1lcy5wdXNoKC4uLnN1ZmZpeGVzKTtcbiAgZWwuY2xhc3NMaXN0LmFkZCguLi5jbGFzc05hbWVzKTtcbiAgc3dpcGVyLmVtaXRDb250YWluZXJDbGFzc2VzKCk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/classes/addClasses.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/classes/index.js\":\r\n/*!***************************************************!*\\\r\n  !*** ./node_modules/swiper/core/classes/index.js ***!\r\n  \\***************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* harmony import */ var _addClasses_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./addClasses.js */ \\\"./node_modules/swiper/core/classes/addClasses.js\\\");\\n/* harmony import */ var _removeClasses_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./removeClasses.js */ \\\"./node_modules/swiper/core/classes/removeClasses.js\\\");\\n\\n\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\\n  addClasses: _addClasses_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"],\\n  removeClasses: _removeClasses_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"]\\n});//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvY2xhc3Nlcy9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBeUM7QUFDTTtBQUMvQyxpRUFBZTtBQUNmLFlBQVk7QUFDWixlQUFlO0FBQ2YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2NsYXNzZXMvaW5kZXguanM/ODA5MyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYWRkQ2xhc3NlcyBmcm9tICcuL2FkZENsYXNzZXMuanMnO1xuaW1wb3J0IHJlbW92ZUNsYXNzZXMgZnJvbSAnLi9yZW1vdmVDbGFzc2VzLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgYWRkQ2xhc3NlcyxcbiAgcmVtb3ZlQ2xhc3Nlc1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/classes/index.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/classes/removeClasses.js\":\r\n/*!***********************************************************!*\\\r\n  !*** ./node_modules/swiper/core/classes/removeClasses.js ***!\r\n  \\***********************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ removeClasses)\\n/* harmony export */ });\\nfunction removeClasses() {\\n  const swiper = this;\\n  const {\\n    el,\\n    classNames\\n  } = swiper;\\n  el.classList.remove(...classNames);\\n  swiper.emitContainerClasses();\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvY2xhc3Nlcy9yZW1vdmVDbGFzc2VzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2NsYXNzZXMvcmVtb3ZlQ2xhc3Nlcy5qcz85YzJhIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbW92ZUNsYXNzZXMoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHtcbiAgICBlbCxcbiAgICBjbGFzc05hbWVzXG4gIH0gPSBzd2lwZXI7XG4gIGVsLmNsYXNzTGlzdC5yZW1vdmUoLi4uY2xhc3NOYW1lcyk7XG4gIHN3aXBlci5lbWl0Q29udGFpbmVyQ2xhc3NlcygpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/classes/removeClasses.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/core.js\":\r\n/*!******************************************!*\\\r\n  !*** ./node_modules/swiper/core/core.js ***!\r\n  \\******************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \\\"./node_modules/ssr-window/ssr-window.esm.js\\\");\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n/* harmony import */ var _shared_get_support_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shared/get-support.js */ \\\"./node_modules/swiper/shared/get-support.js\\\");\\n/* harmony import */ var _shared_get_device_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/get-device.js */ \\\"./node_modules/swiper/shared/get-device.js\\\");\\n/* harmony import */ var _shared_get_browser_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../shared/get-browser.js */ \\\"./node_modules/swiper/shared/get-browser.js\\\");\\n/* harmony import */ var _modules_resize_resize_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modules/resize/resize.js */ \\\"./node_modules/swiper/core/modules/resize/resize.js\\\");\\n/* harmony import */ var _modules_observer_observer_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modules/observer/observer.js */ \\\"./node_modules/swiper/core/modules/observer/observer.js\\\");\\n/* harmony import */ var _events_emitter_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./events-emitter.js */ \\\"./node_modules/swiper/core/events-emitter.js\\\");\\n/* harmony import */ var _update_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./update/index.js */ \\\"./node_modules/swiper/core/update/index.js\\\");\\n/* harmony import */ var _translate_index_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./translate/index.js */ \\\"./node_modules/swiper/core/translate/index.js\\\");\\n/* harmony import */ var _transition_index_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./transition/index.js */ \\\"./node_modules/swiper/core/transition/index.js\\\");\\n/* harmony import */ var _slide_index_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./slide/index.js */ \\\"./node_modules/swiper/core/slide/index.js\\\");\\n/* harmony import */ var _loop_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./loop/index.js */ \\\"./node_modules/swiper/core/loop/index.js\\\");\\n/* harmony import */ var _grab_cursor_index_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./grab-cursor/index.js */ \\\"./node_modules/swiper/core/grab-cursor/index.js\\\");\\n/* harmony import */ var _events_index_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./events/index.js */ \\\"./node_modules/swiper/core/events/index.js\\\");\\n/* harmony import */ var _breakpoints_index_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./breakpoints/index.js */ \\\"./node_modules/swiper/core/breakpoints/index.js\\\");\\n/* harmony import */ var _classes_index_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./classes/index.js */ \\\"./node_modules/swiper/core/classes/index.js\\\");\\n/* harmony import */ var _check_overflow_index_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./check-overflow/index.js */ \\\"./node_modules/swiper/core/check-overflow/index.js\\\");\\n/* harmony import */ var _defaults_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./defaults.js */ \\\"./node_modules/swiper/core/defaults.js\\\");\\n/* harmony import */ var _moduleExtendParams_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./moduleExtendParams.js */ \\\"./node_modules/swiper/core/moduleExtendParams.js\\\");\\n/* harmony import */ var _shared_process_lazy_preloader_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../shared/process-lazy-preloader.js */ \\\"./node_modules/swiper/shared/process-lazy-preloader.js\\\");\\n/* eslint no-param-reassign: \\\"off\\\" */\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nconst prototypes = {\\n  eventsEmitter: _events_emitter_js__WEBPACK_IMPORTED_MODULE_7__[\\\"default\\\"],\\n  update: _update_index_js__WEBPACK_IMPORTED_MODULE_8__[\\\"default\\\"],\\n  translate: _translate_index_js__WEBPACK_IMPORTED_MODULE_9__[\\\"default\\\"],\\n  transition: _transition_index_js__WEBPACK_IMPORTED_MODULE_10__[\\\"default\\\"],\\n  slide: _slide_index_js__WEBPACK_IMPORTED_MODULE_11__[\\\"default\\\"],\\n  loop: _loop_index_js__WEBPACK_IMPORTED_MODULE_12__[\\\"default\\\"],\\n  grabCursor: _grab_cursor_index_js__WEBPACK_IMPORTED_MODULE_13__[\\\"default\\\"],\\n  events: _events_index_js__WEBPACK_IMPORTED_MODULE_14__[\\\"default\\\"],\\n  breakpoints: _breakpoints_index_js__WEBPACK_IMPORTED_MODULE_15__[\\\"default\\\"],\\n  checkOverflow: _check_overflow_index_js__WEBPACK_IMPORTED_MODULE_17__[\\\"default\\\"],\\n  classes: _classes_index_js__WEBPACK_IMPORTED_MODULE_16__[\\\"default\\\"]\\n};\\nconst extendedDefaults = {};\\nclass Swiper {\\n  constructor(...args) {\\n    let el;\\n    let params;\\n    if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\\n      params = args[0];\\n    } else {\\n      [el, params] = args;\\n    }\\n    if (!params) params = {};\\n    params = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.extend)({}, params);\\n    if (el && !params.el) params.el = el;\\n    const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)();\\n    if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\\n      const swipers = [];\\n      document.querySelectorAll(params.el).forEach(containerEl => {\\n        const newParams = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.extend)({}, params, {\\n          el: containerEl\\n        });\\n        swipers.push(new Swiper(newParams));\\n      });\\n      // eslint-disable-next-line no-constructor-return\\n      return swipers;\\n    }\\n\\n    // Swiper Instance\\n    const swiper = this;\\n    swiper.__swiper__ = true;\\n    swiper.support = (0,_shared_get_support_js__WEBPACK_IMPORTED_MODULE_2__.getSupport)();\\n    swiper.device = (0,_shared_get_device_js__WEBPACK_IMPORTED_MODULE_3__.getDevice)({\\n      userAgent: params.userAgent\\n    });\\n    swiper.browser = (0,_shared_get_browser_js__WEBPACK_IMPORTED_MODULE_4__.getBrowser)();\\n    swiper.eventsListeners = {};\\n    swiper.eventsAnyListeners = [];\\n    swiper.modules = [...swiper.__modules__];\\n    if (params.modules && Array.isArray(params.modules)) {\\n      swiper.modules.push(...params.modules);\\n    }\\n    const allModulesParams = {};\\n    swiper.modules.forEach(mod => {\\n      mod({\\n        params,\\n        swiper,\\n        extendParams: (0,_moduleExtendParams_js__WEBPACK_IMPORTED_MODULE_19__[\\\"default\\\"])(params, allModulesParams),\\n        on: swiper.on.bind(swiper),\\n        once: swiper.once.bind(swiper),\\n        off: swiper.off.bind(swiper),\\n        emit: swiper.emit.bind(swiper)\\n      });\\n    });\\n\\n    // Extend defaults with modules params\\n    const swiperParams = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.extend)({}, _defaults_js__WEBPACK_IMPORTED_MODULE_18__[\\\"default\\\"], allModulesParams);\\n\\n    // Extend defaults with passed params\\n    swiper.params = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.extend)({}, swiperParams, extendedDefaults, params);\\n    swiper.originalParams = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.extend)({}, swiper.params);\\n    swiper.passedParams = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.extend)({}, params);\\n\\n    // add event listeners\\n    if (swiper.params && swiper.params.on) {\\n      Object.keys(swiper.params.on).forEach(eventName => {\\n        swiper.on(eventName, swiper.params.on[eventName]);\\n      });\\n    }\\n    if (swiper.params && swiper.params.onAny) {\\n      swiper.onAny(swiper.params.onAny);\\n    }\\n\\n    // Extend Swiper\\n    Object.assign(swiper, {\\n      enabled: swiper.params.enabled,\\n      el,\\n      // Classes\\n      classNames: [],\\n      // Slides\\n      slides: [],\\n      slidesGrid: [],\\n      snapGrid: [],\\n      slidesSizesGrid: [],\\n      // isDirection\\n      isHorizontal() {\\n        return swiper.params.direction === 'horizontal';\\n      },\\n      isVertical() {\\n        return swiper.params.direction === 'vertical';\\n      },\\n      // Indexes\\n      activeIndex: 0,\\n      realIndex: 0,\\n      //\\n      isBeginning: true,\\n      isEnd: false,\\n      // Props\\n      translate: 0,\\n      previousTranslate: 0,\\n      progress: 0,\\n      velocity: 0,\\n      animating: false,\\n      // Locks\\n      allowSlideNext: swiper.params.allowSlideNext,\\n      allowSlidePrev: swiper.params.allowSlidePrev,\\n      // Touch Events\\n      touchEventsData: {\\n        isTouched: undefined,\\n        isMoved: undefined,\\n        allowTouchCallbacks: undefined,\\n        touchStartTime: undefined,\\n        isScrolling: undefined,\\n        currentTranslate: undefined,\\n        startTranslate: undefined,\\n        allowThresholdMove: undefined,\\n        // Form elements to match\\n        focusableElements: swiper.params.focusableElements,\\n        // Last click time\\n        lastClickTime: (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.now)(),\\n        clickTimeout: undefined,\\n        // Velocities\\n        velocities: [],\\n        allowMomentumBounce: undefined,\\n        startMoving: undefined,\\n        evCache: []\\n      },\\n      // Clicks\\n      allowClick: true,\\n      // Touches\\n      allowTouchMove: swiper.params.allowTouchMove,\\n      touches: {\\n        startX: 0,\\n        startY: 0,\\n        currentX: 0,\\n        currentY: 0,\\n        diff: 0\\n      },\\n      // Images\\n      imagesToLoad: [],\\n      imagesLoaded: 0\\n    });\\n    swiper.emit('_swiper');\\n\\n    // Init\\n    if (swiper.params.init) {\\n      swiper.init();\\n    }\\n\\n    // Return app instance\\n    // eslint-disable-next-line no-constructor-return\\n    return swiper;\\n  }\\n  recalcSlides() {\\n    const swiper = this;\\n    const {\\n      slidesEl,\\n      params\\n    } = swiper;\\n    swiper.slides = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementChildren)(slidesEl, `.${params.slideClass}, swiper-slide`);\\n  }\\n  enable() {\\n    const swiper = this;\\n    if (swiper.enabled) return;\\n    swiper.enabled = true;\\n    if (swiper.params.grabCursor) {\\n      swiper.setGrabCursor();\\n    }\\n    swiper.emit('enable');\\n  }\\n  disable() {\\n    const swiper = this;\\n    if (!swiper.enabled) return;\\n    swiper.enabled = false;\\n    if (swiper.params.grabCursor) {\\n      swiper.unsetGrabCursor();\\n    }\\n    swiper.emit('disable');\\n  }\\n  setProgress(progress, speed) {\\n    const swiper = this;\\n    progress = Math.min(Math.max(progress, 0), 1);\\n    const min = swiper.minTranslate();\\n    const max = swiper.maxTranslate();\\n    const current = (max - min) * progress + min;\\n    swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\\n    swiper.updateActiveIndex();\\n    swiper.updateSlidesClasses();\\n  }\\n  emitContainerClasses() {\\n    const swiper = this;\\n    if (!swiper.params._emitClasses || !swiper.el) return;\\n    const cls = swiper.el.className.split(' ').filter(className => {\\n      return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\\n    });\\n    swiper.emit('_containerClasses', cls.join(' '));\\n  }\\n  getSlideClasses(slideEl) {\\n    const swiper = this;\\n    if (swiper.destroyed) return '';\\n    return slideEl.className.split(' ').filter(className => {\\n      return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\\n    }).join(' ');\\n  }\\n  emitSlidesClasses() {\\n    const swiper = this;\\n    if (!swiper.params._emitClasses || !swiper.el) return;\\n    const updates = [];\\n    swiper.slides.forEach(slideEl => {\\n      const classNames = swiper.getSlideClasses(slideEl);\\n      updates.push({\\n        slideEl,\\n        classNames\\n      });\\n      swiper.emit('_slideClass', slideEl, classNames);\\n    });\\n    swiper.emit('_slideClasses', updates);\\n  }\\n  slidesPerViewDynamic(view = 'current', exact = false) {\\n    const swiper = this;\\n    const {\\n      params,\\n      slides,\\n      slidesGrid,\\n      slidesSizesGrid,\\n      size: swiperSize,\\n      activeIndex\\n    } = swiper;\\n    let spv = 1;\\n    if (params.centeredSlides) {\\n      let slideSize = slides[activeIndex].swiperSlideSize;\\n      let breakLoop;\\n      for (let i = activeIndex + 1; i < slides.length; i += 1) {\\n        if (slides[i] && !breakLoop) {\\n          slideSize += slides[i].swiperSlideSize;\\n          spv += 1;\\n          if (slideSize > swiperSize) breakLoop = true;\\n        }\\n      }\\n      for (let i = activeIndex - 1; i >= 0; i -= 1) {\\n        if (slides[i] && !breakLoop) {\\n          slideSize += slides[i].swiperSlideSize;\\n          spv += 1;\\n          if (slideSize > swiperSize) breakLoop = true;\\n        }\\n      }\\n    } else {\\n      // eslint-disable-next-line\\n      if (view === 'current') {\\n        for (let i = activeIndex + 1; i < slides.length; i += 1) {\\n          const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\\n          if (slideInView) {\\n            spv += 1;\\n          }\\n        }\\n      } else {\\n        // previous\\n        for (let i = activeIndex - 1; i >= 0; i -= 1) {\\n          const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\\n          if (slideInView) {\\n            spv += 1;\\n          }\\n        }\\n      }\\n    }\\n    return spv;\\n  }\\n  update() {\\n    const swiper = this;\\n    if (!swiper || swiper.destroyed) return;\\n    const {\\n      snapGrid,\\n      params\\n    } = swiper;\\n    // Breakpoints\\n    if (params.breakpoints) {\\n      swiper.setBreakpoint();\\n    }\\n    [...swiper.el.querySelectorAll('[loading=\\\"lazy\\\"]')].forEach(imageEl => {\\n      if (imageEl.complete) {\\n        (0,_shared_process_lazy_preloader_js__WEBPACK_IMPORTED_MODULE_20__.processLazyPreloader)(swiper, imageEl);\\n      }\\n    });\\n    swiper.updateSize();\\n    swiper.updateSlides();\\n    swiper.updateProgress();\\n    swiper.updateSlidesClasses();\\n    function setTranslate() {\\n      const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\\n      const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\\n      swiper.setTranslate(newTranslate);\\n      swiper.updateActiveIndex();\\n      swiper.updateSlidesClasses();\\n    }\\n    let translated;\\n    if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\\n      setTranslate();\\n      if (swiper.params.autoHeight) {\\n        swiper.updateAutoHeight();\\n      }\\n    } else {\\n      if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\\n        translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\\n      } else {\\n        translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\\n      }\\n      if (!translated) {\\n        setTranslate();\\n      }\\n    }\\n    if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\\n      swiper.checkOverflow();\\n    }\\n    swiper.emit('update');\\n  }\\n  changeDirection(newDirection, needUpdate = true) {\\n    const swiper = this;\\n    const currentDirection = swiper.params.direction;\\n    if (!newDirection) {\\n      // eslint-disable-next-line\\n      newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\\n    }\\n    if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\\n      return swiper;\\n    }\\n    swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\\n    swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\\n    swiper.emitContainerClasses();\\n    swiper.params.direction = newDirection;\\n    swiper.slides.forEach(slideEl => {\\n      if (newDirection === 'vertical') {\\n        slideEl.style.width = '';\\n      } else {\\n        slideEl.style.height = '';\\n      }\\n    });\\n    swiper.emit('changeDirection');\\n    if (needUpdate) swiper.update();\\n    return swiper;\\n  }\\n  changeLanguageDirection(direction) {\\n    const swiper = this;\\n    if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\\n    swiper.rtl = direction === 'rtl';\\n    swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\\n    if (swiper.rtl) {\\n      swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\\n      swiper.el.dir = 'rtl';\\n    } else {\\n      swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\\n      swiper.el.dir = 'ltr';\\n    }\\n    swiper.update();\\n  }\\n  mount(element) {\\n    const swiper = this;\\n    if (swiper.mounted) return true;\\n\\n    // Find el\\n    let el = element || swiper.params.el;\\n    if (typeof el === 'string') {\\n      el = document.querySelector(el);\\n    }\\n    if (!el) {\\n      return false;\\n    }\\n    el.swiper = swiper;\\n    if (el.shadowEl) {\\n      swiper.isElement = true;\\n    }\\n    const getWrapperSelector = () => {\\n      return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\\n    };\\n    const getWrapper = () => {\\n      if (el && el.shadowRoot && el.shadowRoot.querySelector) {\\n        const res = el.shadowRoot.querySelector(getWrapperSelector());\\n        // Children needs to return slot items\\n        return res;\\n      }\\n      return (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementChildren)(el, getWrapperSelector())[0];\\n    };\\n    // Find Wrapper\\n    let wrapperEl = getWrapper();\\n    if (!wrapperEl && swiper.params.createElements) {\\n      wrapperEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.createElement)('div', swiper.params.wrapperClass);\\n      el.append(wrapperEl);\\n      (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementChildren)(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\\n        wrapperEl.append(slideEl);\\n      });\\n    }\\n    Object.assign(swiper, {\\n      el,\\n      wrapperEl,\\n      slidesEl: swiper.isElement ? el : wrapperEl,\\n      mounted: true,\\n      // RTL\\n      rtl: el.dir.toLowerCase() === 'rtl' || (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementStyle)(el, 'direction') === 'rtl',\\n      rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementStyle)(el, 'direction') === 'rtl'),\\n      wrongRTL: (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementStyle)(wrapperEl, 'display') === '-webkit-box'\\n    });\\n    return true;\\n  }\\n  init(el) {\\n    const swiper = this;\\n    if (swiper.initialized) return swiper;\\n    const mounted = swiper.mount(el);\\n    if (mounted === false) return swiper;\\n    swiper.emit('beforeInit');\\n\\n    // Set breakpoint\\n    if (swiper.params.breakpoints) {\\n      swiper.setBreakpoint();\\n    }\\n\\n    // Add Classes\\n    swiper.addClasses();\\n\\n    // Update size\\n    swiper.updateSize();\\n\\n    // Update slides\\n    swiper.updateSlides();\\n    if (swiper.params.watchOverflow) {\\n      swiper.checkOverflow();\\n    }\\n\\n    // Set Grab Cursor\\n    if (swiper.params.grabCursor && swiper.enabled) {\\n      swiper.setGrabCursor();\\n    }\\n\\n    // Slide To Initial Slide\\n    if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\\n      swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\\n    } else {\\n      swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\\n    }\\n\\n    // Create loop\\n    if (swiper.params.loop) {\\n      swiper.loopCreate();\\n    }\\n\\n    // Attach events\\n    swiper.attachEvents();\\n    [...swiper.el.querySelectorAll('[loading=\\\"lazy\\\"]')].forEach(imageEl => {\\n      if (imageEl.complete) {\\n        (0,_shared_process_lazy_preloader_js__WEBPACK_IMPORTED_MODULE_20__.processLazyPreloader)(swiper, imageEl);\\n      } else {\\n        imageEl.addEventListener('load', e => {\\n          (0,_shared_process_lazy_preloader_js__WEBPACK_IMPORTED_MODULE_20__.processLazyPreloader)(swiper, e.target);\\n        });\\n      }\\n    });\\n\\n    // Init Flag\\n    swiper.initialized = true;\\n\\n    // Emit\\n    swiper.emit('init');\\n    swiper.emit('afterInit');\\n    return swiper;\\n  }\\n  destroy(deleteInstance = true, cleanStyles = true) {\\n    const swiper = this;\\n    const {\\n      params,\\n      el,\\n      wrapperEl,\\n      slides\\n    } = swiper;\\n    if (typeof swiper.params === 'undefined' || swiper.destroyed) {\\n      return null;\\n    }\\n    swiper.emit('beforeDestroy');\\n\\n    // Init Flag\\n    swiper.initialized = false;\\n\\n    // Detach events\\n    swiper.detachEvents();\\n\\n    // Destroy loop\\n    if (params.loop) {\\n      swiper.loopDestroy();\\n    }\\n\\n    // Cleanup styles\\n    if (cleanStyles) {\\n      swiper.removeClasses();\\n      el.removeAttribute('style');\\n      wrapperEl.removeAttribute('style');\\n      if (slides && slides.length) {\\n        slides.forEach(slideEl => {\\n          slideEl.classList.remove(params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\\n          slideEl.removeAttribute('style');\\n          slideEl.removeAttribute('data-swiper-slide-index');\\n        });\\n      }\\n    }\\n    swiper.emit('destroy');\\n\\n    // Detach emitter events\\n    Object.keys(swiper.eventsListeners).forEach(eventName => {\\n      swiper.off(eventName);\\n    });\\n    if (deleteInstance !== false) {\\n      swiper.el.swiper = null;\\n      (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.deleteProps)(swiper);\\n    }\\n    swiper.destroyed = true;\\n    return null;\\n  }\\n  static extendDefaults(newDefaults) {\\n    (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.extend)(extendedDefaults, newDefaults);\\n  }\\n  static get extendedDefaults() {\\n    return extendedDefaults;\\n  }\\n  static get defaults() {\\n    return _defaults_js__WEBPACK_IMPORTED_MODULE_18__[\\\"default\\\"];\\n  }\\n  static installModule(mod) {\\n    if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\\n    const modules = Swiper.prototype.__modules__;\\n    if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\\n      modules.push(mod);\\n    }\\n  }\\n  static use(module) {\\n    if (Array.isArray(module)) {\\n      module.forEach(m => Swiper.installModule(m));\\n      return Swiper;\\n    }\\n    Swiper.installModule(module);\\n    return Swiper;\\n  }\\n}\\nObject.keys(prototypes).forEach(prototypeGroup => {\\n  Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\\n    Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\\n  });\\n});\\nSwiper.use([_modules_resize_resize_js__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"], _modules_observer_observer_js__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"]]);\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Swiper);//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvY29yZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDeUM7QUFDbUU7QUFDdEQ7QUFDRjtBQUNFO0FBQ047QUFDTTtBQUNOO0FBQ1Q7QUFDTTtBQUNFO0FBQ1Y7QUFDRjtBQUNhO0FBQ1Q7QUFDVTtBQUNSO0FBQ2E7QUFDakI7QUFDb0I7QUFDa0I7QUFDM0U7QUFDQSxlQUFlO0FBQ2YsUUFBUTtBQUNSLFdBQVc7QUFDWCxZQUFZO0FBQ1osT0FBTztBQUNQLE1BQU07QUFDTixZQUFZO0FBQ1osUUFBUTtBQUNSLGFBQWE7QUFDYixlQUFlO0FBQ2YsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsYUFBYSx3REFBTSxHQUFHO0FBQ3RCO0FBQ0EscUJBQXFCLHVEQUFXO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQix3REFBTSxHQUFHO0FBQ25DO0FBQ0EsU0FBUztBQUNUO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsa0VBQVU7QUFDL0Isb0JBQW9CLGdFQUFTO0FBQzdCO0FBQ0EsS0FBSztBQUNMLHFCQUFxQixrRUFBVTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLG1FQUFrQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLOztBQUVMO0FBQ0EseUJBQXlCLHdEQUFNLEdBQUcsRUFBRSxxREFBUTs7QUFFNUM7QUFDQSxvQkFBb0Isd0RBQU0sR0FBRztBQUM3Qiw0QkFBNEIsd0RBQU0sR0FBRztBQUNyQywwQkFBMEIsd0RBQU0sR0FBRzs7QUFFbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHFEQUFHO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLG9CQUFvQixpRUFBZSxlQUFlLGtCQUFrQjtBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLG1CQUFtQjtB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRCxZQUFZLGlFQUFNLEVBQUUscUVBQVE7QUFDNUIsaUVBQWUsTUFBTSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2NvcmUuanM/ZTI0ZSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246IFwib2ZmXCIgKi9cbmltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5pbXBvcnQgeyBleHRlbmQsIG5vdywgZGVsZXRlUHJvcHMsIGNyZWF0ZUVsZW1lbnQsIGVsZW1lbnRDaGlsZHJlbiwgZWxlbWVudFN0eWxlIH0gZnJvbSAnLi4vc2hhcmVkL3V0aWxzLmpzJztcbmltcG9ydCB7IGdldFN1cHBvcnQgfSBmcm9tICcuLi9zaGFyZWQvZ2V0LXN1cHBvcnQuanMnO1xuaW1wb3J0IHsgZ2V0RGV2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2dldC1kZXZpY2UuanMnO1xuaW1wb3J0IHsgZ2V0QnJvd3NlciB9IGZyb20gJy4uL3NoYXJlZC9nZXQtYnJvd3Nlci5qcyc7XG5pbXBvcnQgUmVzaXplIGZyb20gJy4vbW9kdWxlcy9yZXNpemUvcmVzaXplLmpzJztcbmltcG9ydCBPYnNlcnZlciBmcm9tICcuL21vZHVsZXMvb2JzZXJ2ZXIvb2JzZXJ2ZXIuanMnO1xuaW1wb3J0IGV2ZW50c0VtaXR0ZXIgZnJvbSAnLi9ldmVudHMtZW1pdHRlci5qcyc7XG5pbXBvcnQgdXBkYXRlIGZyb20gJy4vdXBkYXRlL2luZGV4LmpzJztcbmltcG9ydCB0cmFuc2xhdGUgZnJvbSAnLi90cmFuc2xhdGUvaW5kZXguanMnO1xuaW1wb3J0IHRyYW5zaXRpb24gZnJvbSAnLi90cmFuc2l0aW9uL2luZGV4LmpzJztcbmltcG9ydCBzbGlkZSBmcm9tICcuL3NsaWRlL2luZGV4LmpzJztcbmltcG9ydCBsb29wIGZyb20gJy4vbG9vcC9pbmRleC5qcyc7XG5pbXBvcnQgZ3JhYkN1cnNvciBmcm9tICcuL2dyYWItY3Vyc29yL2luZGV4LmpzJztcbmltcG9ydCBldmVudHMgZnJvbSAnLi9ldmVudHMvaW5kZXguanMnO1xuaW1wb3J0IGJyZWFrcG9pbnRzIGZyb20gJy4vYnJlYWtwb2ludHMvaW5kZXguanMnO1xuaW1wb3J0IGNsYXNzZXMgZnJvbSAnLi9jbGFzc2VzL2luZGV4LmpzJztcbmltcG9ydCBjaGVja092ZXJmbG93IGZyb20gJy4vY2hlY2stb3ZlcmZsb3cvaW5kZXguanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4vZGVmYXVsdHMuanMnO1xuaW1wb3J0IG1vZHVsZUV4dGVuZFBhcmFtcyBmcm9tICcuL21vZHVsZUV4dGVuZFBhcmFtcy5qcyc7XG5pbXBvcnQgeyBwcm9jZXNzTGF6eVByZWxvYWRlciB9IGZyb20gJy4uL3NoYXJlZC9wcm9jZXNzLWxhenktcHJlbG9hZGVyLmpzJztcbmNvbnN0IHByb3RvdHlwZXMgPSB7XG4gIGV2ZW50c0VtaXR0ZXIsXG4gIHVwZGF0ZSxcbiAgdHJhbnNsYXRlLFxuICB0cmFuc2l0aW9uLFxuICBzbGlkZSxcbiAgbG9vcCxcbiAgZ3JhYkN1cnNvcixcbiAgZXZlbnRzLFxuICBicmVha3BvaW50cyxcbiAgY2hlY2tPdmVyZmxvdyxcbiAgY2xhc3Nlc1xufTtcbmNvbnN0IGV4dGVuZGVkRGVmYXVsdHMgPSB7fTtcbmNsYXNzIFN3aXBlciB7XG4gIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICBsZXQgZWw7XG4gICAgbGV0IHBhcmFtcztcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgYXJnc1swXS5jb25zdHJ1Y3RvciAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnc1swXSkuc2xpY2UoOCwgLTEpID09PSAnT2JqZWN0Jykge1xuICAgICAgcGFyYW1zID0gYXJnc1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgW2VsLCBwYXJhbXNdID0gYXJncztcbiAgICB9XG4gICAgaWYgKCFwYXJhbXMpIHBhcmFtcyA9IHt9O1xuICAgIHBhcmFtcyA9IGV4dGVuZCh7fSwgcGFyYW1zKTtcbiAgICBpZiAoZWwgJiYgIXBhcmFtcy5lbCkgcGFyYW1zLmVsID0gZWw7XG4gICAgY29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgIGlmIChwYXJhbXMuZWwgJiYgdHlwZW9mIHBhcmFtcy5lbCA9PT0gJ3N0cmluZycgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChwYXJhbXMuZWwpLmxlbmd0aCA+IDEpIHtcbiAgICAgIGNvbnN0IHN3aXBlcnMgPSBbXTtcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocGFyYW1zLmVsKS5mb3JFYWNoKGNvbnRhaW5lckVsID0+IHtcbiAgICAgICAgY29uc3QgbmV3UGFyYW1zID0gZXh0ZW5kKHt9LCBwYXJhbXMsIHtcbiAgICAgICAgICBlbDogY29udGFpbmVyRWxcbiAgICAgICAgfSk7XG4gICAgICAgIHN3aXBlcnMucHVzaChuZXcgU3dpcGVyKG5ld1BhcmFtcykpO1xuICAgICAgfSk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc3RydWN0b3ItcmV0dXJuXG4gICAgICByZXR1cm4gc3dpcGVycztcbiAgICB9XG5cbiAgICAvLyBTd2lwZXIgSW5zdGFuY2VcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIHN3aXBlci5fX3N3aXBlcl9fID0gdHJ1ZTtcbiAgICBzd2lwZXIuc3VwcG9ydCA9IGdldFN1cHBvcnQoKTtcbiAgICBzd2lwZXIuZGV2aWNlID0gZ2V0RGV2aWNlKHtcbiAgICAgIHVzZXJBZ2VudDogcGFyYW1zLnVzZXJBZ2VudFxuICAgIH0pO1xuICAgIHN3aXBlci5icm93c2VyID0gZ2V0QnJvd3NlcigpO1xuICAgIHN3aXBlci5ldmVudHNMaXN0ZW5lcnMgPSB7fTtcbiAgICBzd2lwZXIuZXZlbnRzQW55TGlzdGVuZXJzID0gW107XG4gICAgc3dpcGVyLm1vZHVsZXMgPSBbLi4uc3dpcGVyLl9fbW9kdWxlc19fXTtcbiAgICBpZiAocGFyYW1zLm1vZHVsZXMgJiYgQXJyYXkuaXNBcnJheShwYXJhbXMubW9kdWxlcykpIHtcbiAgICAgIHN3aXBlci5tb2R1bGVzLnB1c2goLi4ucGFyYW1zLm1vZHVsZXMpO1xuICAgIH1cbiAgICBjb25zdCBhbGxNb2R1bGVzUGFyYW1zID0ge307XG4gICAgc3dpcGVyLm1vZHVsZXMuZm9yRWFjaChtb2QgPT4ge1xuICAgICAgbW9kKHtcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBzd2lwZXIsXG4gICAgICAgIGV4dGVuZFBhcmFtczogbW9kdWxlRXh0ZW5kUGFyYW1zKHBhcmFtcywgYWxsTW9kdWxlc1BhcmFtcyksXG4gICAgICAgIG9uOiBzd2lwZXIub24uYmluZChzd2lwZXIpLFxuICAgICAgICBvbmNlOiBzd2lwZXIub25jZS5iaW5kKHN3aXBlciksXG4gICAgICAgIG9mZjogc3dpcGVyLm9mZi5iaW5kKHN3aXBlciksXG4gICAgICAgIGVtaXQ6IHN3aXBlci5lbWl0LmJpbmQoc3dpcGVyKVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBFeHRlbmQgZGVmYXVsdHMgd2l0aCBtb2R1bGVzIHBhcmFtc1xuICAgIGNvbnN0IHN3aXBlclBhcmFtcyA9IGV4dGVuZCh7fSwgZGVmYXVsdHMsIGFsbE1vZHVsZXNQYXJhbXMpO1xuXG4gICAgLy8gRXh0ZW5kIGRlZmF1bHRzIHdpdGggcGFzc2VkIHBhcmFtc1xuICAgIHN3aXBlci5wYXJhbXMgPSBleHRlbmQoe30sIHN3aXBlclBhcmFtcywgZXh0ZW5kZWREZWZhdWx0cywgcGFyYW1zKTtcbiAgICBzd2lwZXIub3JpZ2luYWxQYXJhbXMgPSBleHRlbmQoe30sIHN3aXBlci5wYXJhbXMpO1xuICAgIHN3aXBlci5wYXNzZWRQYXJhbXMgPSBleHRlbmQoe30sIHBhcmFtcyk7XG5cbiAgICAvLyBhZGQgZXZlbnQgbGlzdGVuZXJzXG4gICAgaWYgKHN3aXBlci5wYXJhbXMgJiYgc3dpcGVyLnBhcmFtcy5vbikge1xuICAgICAgT2JqZWN0LmtleXMoc3dpcGVyLnBhcmFtcy5vbikuZm9yRWFjaChldmVudE5hbWUgPT4ge1xuICAgICAgICBzd2lwZXIub24oZXZlbnROYW1lLCBzd2lwZXIucGFyYW1zLm9uW2V2ZW50TmFtZV0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChzd2lwZXIucGFyYW1zICYmIHN3aXBlci5wYXJhbXMub25BbnkpIHtcbiAgICAgIHN3aXBlci5vbkFueShzd2lwZXIucGFyYW1zLm9uQW55KTtcbiAgICB9XG5cbiAgICAvLyBFeHRlbmQgU3dpcGVyXG4gICAgT2JqZWN0LmFzc2lnbihzd2lwZXIsIHtcbiAgICAgIGVuYWJsZWQ6IHN3aXBlci5wYXJhbXMuZW5hYmxlZCxcbiAgICAgIGVsLFxuICAgICAgLy8gQ2xhc3Nlc1xuICAgICAgY2xhc3NOYW1lczogW10sXG4gICAgICAvLyBTbGlkZXNcbiAgICAgIHNsaWRlczogW10sXG4gICAgICBzbGlkZXNHcmlkOiBbXSxcbiAgICAgIHNuYXBHcmlkOiBbXSxcbiAgICAgIHNsaWRlc1NpemVzR3JpZDogW10sXG4gICAgICAvLyBpc0RpcmVjdGlvblxuICAgICAgaXNIb3Jpem9udGFsKCkge1xuICAgICAgICByZXR1cm4gc3dpcGVyLnBhcmFtcy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJztcbiAgICAgIH0sXG4gICAgICBpc1ZlcnRpY2FsKCkge1xuICAgICAgICByZXR1cm4gc3dpcGVyLnBhcmFtcy5kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCc7XG4gICAgICB9LFxuICAgICAgLy8gSW5kZXhlc1xuICAgICAgYWN0aXZlSW5kZXg6IDAsXG4gICAgICByZWFsSW5kZXg6IDAsXG4gICAgICAvL1xuICAgICAgaXNCZWdpbm5pbmc6IHRydWUsXG4gICAgICBpc0VuZDogZmFsc2UsXG4gICAgICAvLyBQcm9wc1xuICAgICAgdHJhbnNsYXRlOiAwLFxuICAgICAgcHJldmlvdXNUcmFuc2xhdGU6IDAsXG4gICAgICBwcm9ncmVzczogMCxcbiAgICAgIHZlbG9jaXR5OiAwLFxuICAgICAgYW5pbWF0aW5nOiBmYWxzZSxcbiAgICAgIC8vIExvY2tzXG4gICAgICBhbGxvd1NsaWRlTmV4dDogc3dpcGVyLnBhcmFtcy5hbGxvd1NsaWRlTmV4dCxcbiAgICAgIGFsbG93U2xpZGVQcmV2OiBzd2lwZXIucGFyYW1zLmFsbG93U2xpZGVQcmV2LFxuICAgICAgLy8gVG91Y2ggRXZlbnRzXG4gICAgICB0b3VjaEV2ZW50c0RhdGE6IHtcbiAgICAgICAgaXNUb3VjaGVkOiB1bmRlZmluZWQsXG4gICAgICAgIGlzTW92ZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgYWxsb3dUb3VjaENhbGxiYWNrczogdW5kZWZpbmVkLFxuICAgICAgICB0b3VjaFN0YXJ0VGltZTogdW5kZWZpbmVkLFxuICAgICAgICBpc1Njcm9sbGluZzogdW5kZWZpbmVkLFxuICAgICAgICBjdXJyZW50VHJhbnNsYXRlOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXJ0VHJhbnNsYXRlOiB1bmRlZmluZWQsXG4gICAgICAgIGFsbG93VGhyZXNob2xkTW92ZTogdW5kZWZpbmVkLFxuICAgICAgICAvLyBGb3JtIGVsZW1lbnRzIHRvIG1hdGNoXG4gICAgICAgIGZvY3VzYWJsZUVsZW1lbnRzOiBzd2lwZXIucGFyYW1zLmZvY3VzYWJsZUVsZW1lbnRzLFxuICAgICAgICAvLyBMYXN0IGNsaWNrIHRpbWVcbiAgICAgICAgbGFzdENsaWNrVGltZTogbm93KCksXG4gICAgICAgIGNsaWNrVGltZW91dDogdW5kZWZpbmVkLFxuICAgICAgICAvLyBWZWxvY2l0aWVzXG4gICAgICAgIHZlbG9jaXRpZXM6IFtdLFxuICAgICAgICBhbGxvd01vbWVudHVtQm91bmNlOiB1bmRlZmluZWQsXG4gICAgICAgIHN0YXJ0TW92aW5nOiB1bmRlZmluZWQsXG4gICAgICAgIGV2Q2FjaGU6IFtdXG4gICAgICB9LFxuICAgICAgLy8gQ2xpY2tzXG4gICAgICBhbGxvd0NsaWNrOiB0cnVlLFxuICAgICAgLy8gVG91Y2hlc1xuICAgICAgYWxsb3dUb3VjaE1vdmU6IHN3aXBlci5wYXJhbXMuYWxsb3dUb3VjaE1vdmUsXG4gICAgICB0b3VjaGVzOiB7XG4gICAgICAgIHN0YXJ0WDogMCxcbiAgICAgICAgc3RhcnRZOiAwLFxuICAgICAgICBjdXJyZW50WDogMCxcbiAgICAgICAgY3VycmVudFk6IDAsXG4gICAgICAgIGRpZmY6IDBcbiAgICAgIH0sXG4gICAgICAvLyBJbWFnZXNcbiAgICAgIGltYWdlc1RvTG9hZDogW10sXG4gICAgICBpbWFnZXNMb2FkZWQ6IDBcbiAgICB9KTtcbiAgICBzd2lwZXIuZW1pdCgnX3N3aXBlcicpO1xuXG4gICAgLy8gSW5pdFxuICAgIGlmIChzd2lwZXIucGFyYW1zLmluaXQpIHtcbiAgICAgIHN3aXBlci5pbml0KCk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFwcCBpbnN0YW5jZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zdHJ1Y3Rvci1yZXR1cm5cbiAgICByZXR1cm4gc3dpcGVyO1xuICB9XG4gIHJlY2FsY1NsaWRlcygpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGNvbnN0IHtcbiAgICAgIHNsaWRlc0VsLFxuICAgICAgcGFyYW1zXG4gICAgfSA9IHN3aXBlcjtcbiAgICBzd2lwZXIuc2xpZGVzID0gZWxlbWVudENoaWxkcmVuKHNsaWRlc0VsLCBgLiR7cGFyYW1zLnNsaWRlQ2xhc3N9LCBzd2lwZXItc2xpZGVgKTtcbiAgfVxuICBlbmFibGUoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoc3dpcGVyLmVuYWJsZWQpIHJldHVybjtcbiAgICBzd2lwZXIuZW5hYmxlZCA9IHRydWU7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuZ3JhYkN1cnNvcikge1xuICAgICAgc3dpcGVyLnNldEdyYWJDdXJzb3IoKTtcbiAgICB9XG4gICAgc3dpcGVyLmVtaXQoJ2VuYWJsZScpO1xuICB9XG4gIGRpc2FibGUoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoIXN3aXBlci5lbmFibGVkKSByZXR1cm47XG4gICAgc3dpcGVyLmVuYWJsZWQgPSBmYWxzZTtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5ncmFiQ3Vyc29yKSB7XG4gICAgICBzd2lwZXIudW5zZXRHcmFiQ3Vyc29yKCk7XG4gICAgfVxuICAgIHN3aXBlci5lbWl0KCdkaXNhYmxlJyk7XG4gIH1cbiAgc2V0UHJvZ3Jlc3MocHJvZ3Jlc3MsIHNwZWVkKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBwcm9ncmVzcyA9IE1hdGgubWluKE1hdGgubWF4KHByb2dyZXNzLCAwKSwgMSk7XG4gICAgY29uc3QgbWluID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICAgIGNvbnN0IG1heCA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKTtcbiAgICBjb25zdCBjdXJyZW50ID0gKG1heCAtIG1pbikgKiBwcm9ncmVzcyArIG1pbjtcbiAgICBzd2lwZXIudHJhbnNsYXRlVG8oY3VycmVudCwgdHlwZW9mIHNwZWVkID09PSAndW5kZWZpbmVkJyA/IDAgOiBzcGVlZCk7XG4gICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgfVxuICBlbWl0Q29udGFpbmVyQ2xhc3NlcygpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5fZW1pdENsYXNzZXMgfHwgIXN3aXBlci5lbCkgcmV0dXJuO1xuICAgIGNvbnN0IGNscyA9IHN3aXBlci5lbC5jbGFzc05hbWUuc3BsaXQoJyAnKS5maWx0ZXIoY2xhc3NOYW1lID0+IHtcbiAgICAgIHJldHVybiBjbGFzc05hbWUuaW5kZXhPZignc3dpcGVyJykgPT09IDAgfHwgY2xhc3NOYW1lLmluZGV4T2Yoc3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzKSA9PT0gMDtcbiAgICB9KTtcbiAgICBzd2lwZXIuZW1pdCgnX2NvbnRhaW5lckNsYXNzZXMnLCBjbHMuam9pbignICcpKTtcbiAgfVxuICBnZXRTbGlkZUNsYXNzZXMoc2xpZGVFbCkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKHN3aXBlci5kZXN0cm95ZWQpIHJldHVybiAnJztcbiAgICByZXR1cm4gc2xpZGVFbC5jbGFzc05hbWUuc3BsaXQoJyAnKS5maWx0ZXIoY2xhc3NOYW1lID0+IHtcbiAgICAgIHJldHVybiBjbGFzc05hbWUuaW5kZXhPZignc3dpcGVyLXNsaWRlJykgPT09IDAgfHwgY2xhc3NOYW1lLmluZGV4T2Yoc3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzKSA9PT0gMDtcbiAgICB9KS5qb2luKCcgJyk7XG4gIH1cbiAgZW1pdFNsaWRlc0NsYXNzZXMoKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoIXN3aXBlci5wYXJhbXMuX2VtaXRDbGFzc2VzIHx8ICFzd2lwZXIuZWwpIHJldHVybjtcbiAgICBjb25zdCB1cGRhdGVzID0gW107XG4gICAgc3dpcGVyLnNsaWRlcy5mb3JFYWNoKHNsaWRlRWwgPT4ge1xuICAgICAgY29uc3QgY2xhc3NOYW1lcyA9IHN3aXBlci5nZXRTbGlkZUNsYXNzZXMoc2xpZGVFbCk7XG4gICAgICB1cGRhdGVzLnB1c2goe1xuICAgICAgICBzbGlkZUVsLFxuICAgICAgICBjbGFzc05hbWVzXG4gICAgICB9KTtcbiAgICAgIHN3aXBlci5lbWl0KCdfc2xpZGVDbGFzcycsIHNsaWRlRWwsIGNsYXNzTmFtZXMpO1xuICAgIH0pO1xuICAgIHN3aXBlci5lbWl0KCdfc2xpZGVDbGFzc2VzJywgdXBkYXRlcyk7XG4gIH1cbiAgc2xpZGVzUGVyVmlld0R5bmFtaWModmlldyA9ICdjdXJyZW50JywgZXhhY3QgPSBmYWxzZSkge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgY29uc3Qge1xuICAgICAgcGFyYW1zLFxuICAgICAgc2xpZGVzLFxuICAgICAgc2xpZGVzR3JpZCxcbiAgICAgIHNsaWRlc1NpemVzR3JpZCxcbiAgICAgIHNpemU6IHN3aXBlclNpemUsXG4gICAgICBhY3RpdmVJbmRleFxuICAgIH0gPSBzd2lwZXI7XG4gICAgbGV0IHNwdiA9IDE7XG4gICAgaWYgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgbGV0IHNsaWRlU2l6ZSA9IHNsaWRlc1thY3RpdmVJbmRleF0uc3dpcGVyU2xpZGVTaXplO1xuICAgICAgbGV0IGJyZWFrTG9vcDtcbiAgICAgIGZvciAobGV0IGkgPSBhY3RpdmVJbmRleCArIDE7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKHNsaWRlc1tpXSAmJiAhYnJlYWtMb29wKSB7XG4gICAgICAgICAgc2xpZGVTaXplICs9IHNsaWRlc1tpXS5zd2lwZXJTbGlkZVNpemU7XG4gICAgICAgICAgc3B2ICs9IDE7XG4gICAgICAgICAgaWYgKHNsaWRlU2l6ZSA+IHN3aXBlclNpemUpIGJyZWFrTG9vcCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSBhY3RpdmVJbmRleCAtIDE7IGkgPj0gMDsgaSAtPSAxKSB7XG4gICAgICAgIGlmIChzbGlkZXNbaV0gJiYgIWJyZWFrTG9vcCkge1xuICAgICAgICAgIHNsaWRlU2l6ZSArPSBzbGlkZXNbaV0uc3dpcGVyU2xpZGVTaXplO1xuICAgICAgICAgIHNwdiArPSAxO1xuICAgICAgICAgIGlmIChzbGlkZVNpemUgPiBzd2lwZXJTaXplKSBicmVha0xvb3AgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgaWYgKHZpZXcgPT09ICdjdXJyZW50Jykge1xuICAgICAgICBmb3IgKGxldCBpID0gYWN0aXZlSW5kZXggKyAxOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgY29uc3Qgc2xpZGVJblZpZXcgPSBleGFjdCA/IHNsaWRlc0dyaWRbaV0gKyBzbGlkZXNTaXplc0dyaWRbaV0gLSBzbGlkZXNHcmlkW2FjdGl2ZUluZGV4XSA8IHN3aXBlclNpemUgOiBzbGlkZXNHcmlkW2ldIC0gc2xpZGVzR3JpZFthY3RpdmVJbmRleF0gPCBzd2lwZXJTaXplO1xuICAgICAgICAgIGlmIChzbGlkZUluVmlldykge1xuICAgICAgICAgICAgc3B2ICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwcmV2aW91c1xuICAgICAgICBmb3IgKGxldCBpID0gYWN0aXZlSW5kZXggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgICAgICAgIGNvbnN0IHNsaWRlSW5WaWV3ID0gc2xpZGVzR3JpZFthY3RpdmVJbmRleF0gLSBzbGlkZXNHcmlkW2ldIDwgc3dpcGVyU2l6ZTtcbiAgICAgICAgICBpZiAoc2xpZGVJblZpZXcpIHtcbiAgICAgICAgICAgIHNwdiArPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3B2O1xuICB9XG4gIHVwZGF0ZSgpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICBjb25zdCB7XG4gICAgICBzbmFwR3JpZCxcbiAgICAgIHBhcmFtc1xuICAgIH0gPSBzd2lwZXI7XG4gICAgLy8gQnJlYWtwb2ludHNcbiAgICBpZiAocGFyYW1zLmJyZWFrcG9pbnRzKSB7XG4gICAgICBzd2lwZXIuc2V0QnJlYWtwb2ludCgpO1xuICAgIH1cbiAgICBbLi4uc3dpcGVyLmVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tsb2FkaW5nPVwibGF6eVwiXScpXS5mb3JFYWNoKGltYWdlRWwgPT4ge1xuICAgICAgaWYgKGltYWdlRWwuY29tcGxldGUpIHtcbiAgICAgICAgcHJvY2Vzc0xhenlQcmVsb2FkZXIoc3dpcGVyLCBpbWFnZUVsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBzd2lwZXIudXBkYXRlU2l6ZSgpO1xuICAgIHN3aXBlci51cGRhdGVTbGlkZXMoKTtcbiAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgIGZ1bmN0aW9uIHNldFRyYW5zbGF0ZSgpIHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0ZVZhbHVlID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IHN3aXBlci50cmFuc2xhdGUgKiAtMSA6IHN3aXBlci50cmFuc2xhdGU7XG4gICAgICBjb25zdCBuZXdUcmFuc2xhdGUgPSBNYXRoLm1pbihNYXRoLm1heCh0cmFuc2xhdGVWYWx1ZSwgc3dpcGVyLm1heFRyYW5zbGF0ZSgpKSwgc3dpcGVyLm1pblRyYW5zbGF0ZSgpKTtcbiAgICAgIHN3aXBlci5zZXRUcmFuc2xhdGUobmV3VHJhbnNsYXRlKTtcbiAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICB9XG4gICAgbGV0IHRyYW5zbGF0ZWQ7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuZnJlZU1vZGUgJiYgc3dpcGVyLnBhcmFtcy5mcmVlTW9kZS5lbmFibGVkKSB7XG4gICAgICBzZXRUcmFuc2xhdGUoKTtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9IZWlnaHQpIHtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZUF1dG9IZWlnaHQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKChzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyB8fCBzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcgPiAxKSAmJiBzd2lwZXIuaXNFbmQgJiYgIXN3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgdHJhbnNsYXRlZCA9IHN3aXBlci5zbGlkZVRvKHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMSwgMCwgZmFsc2UsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNsYXRlZCA9IHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCwgMCwgZmFsc2UsIHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKCF0cmFuc2xhdGVkKSB7XG4gICAgICAgIHNldFRyYW5zbGF0ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc25hcEdyaWQgIT09IHN3aXBlci5zbmFwR3JpZCkge1xuICAgICAgc3dpcGVyLmNoZWNrT3ZlcmZsb3coKTtcbiAgICB9XG4gICAgc3dpcGVyLmVtaXQoJ3VwZGF0ZScpO1xuICB9XG4gIGNoYW5nZURpcmVjdGlvbihuZXdEaXJlY3Rpb24sIG5lZWRVcGRhdGUgPSB0cnVlKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBjb25zdCBjdXJyZW50RGlyZWN0aW9uID0gc3dpcGVyLnBhcmFtcy5kaXJlY3Rpb247XG4gICAgaWYgKCFuZXdEaXJlY3Rpb24pIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgbmV3RGlyZWN0aW9uID0gY3VycmVudERpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJ3ZlcnRpY2FsJyA6ICdob3Jpem9udGFsJztcbiAgICB9XG4gICAgaWYgKG5ld0RpcmVjdGlvbiA9PT0gY3VycmVudERpcmVjdGlvbiB8fCBuZXdEaXJlY3Rpb24gIT09ICdob3Jpem9udGFsJyAmJiBuZXdEaXJlY3Rpb24gIT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgIHJldHVybiBzd2lwZXI7XG4gICAgfVxuICAgIHN3aXBlci5lbC5jbGFzc0xpc3QucmVtb3ZlKGAke3N3aXBlci5wYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzc30ke2N1cnJlbnREaXJlY3Rpb259YCk7XG4gICAgc3dpcGVyLmVsLmNsYXNzTGlzdC5hZGQoYCR7c3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzfSR7bmV3RGlyZWN0aW9ufWApO1xuICAgIHN3aXBlci5lbWl0Q29udGFpbmVyQ2xhc3NlcygpO1xuICAgIHN3aXBlci5wYXJhbXMuZGlyZWN0aW9uID0gbmV3RGlyZWN0aW9uO1xuICAgIHN3aXBlci5zbGlkZXMuZm9yRWFjaChzbGlkZUVsID0+IHtcbiAgICAgIGlmIChuZXdEaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgc2xpZGVFbC5zdHlsZS53aWR0aCA9ICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2xpZGVFbC5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgIH1cbiAgICB9KTtcbiAgICBzd2lwZXIuZW1pdCgnY2hhbmdlRGlyZWN0aW9uJyk7XG4gICAgaWYgKG5lZWRVcGRhdGUpIHN3aXBlci51cGRhdGUoKTtcbiAgICByZXR1cm4gc3dpcGVyO1xuICB9XG4gIGNoYW5nZUxhbmd1YWdlRGlyZWN0aW9uKGRpcmVjdGlvbikge1xuICAgIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gICAgaWYgKHN3aXBlci5ydGwgJiYgZGlyZWN0aW9uID09PSAncnRsJyB8fCAhc3dpcGVyLnJ0bCAmJiBkaXJlY3Rpb24gPT09ICdsdHInKSByZXR1cm47XG4gICAgc3dpcGVyLnJ0bCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gICAgc3dpcGVyLnJ0bFRyYW5zbGF0ZSA9IHN3aXBlci5wYXJhbXMuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgJiYgc3dpcGVyLnJ0bDtcbiAgICBpZiAoc3dpcGVyLnJ0bCkge1xuICAgICAgc3dpcGVyLmVsLmNsYXNzTGlzdC5hZGQoYCR7c3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzfXJ0bGApO1xuICAgICAgc3dpcGVyLmVsLmRpciA9ICdydGwnO1xuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIuZWwuY2xhc3NMaXN0LnJlbW92ZShgJHtzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9cnRsYCk7XG4gICAgICBzd2lwZXIuZWwuZGlyID0gJ2x0cic7XG4gICAgfVxuICAgIHN3aXBlci51cGRhdGUoKTtcbiAgfVxuICBtb3VudChlbGVtZW50KSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoc3dpcGVyLm1vdW50ZWQpIHJldHVybiB0cnVlO1xuXG4gICAgLy8gRmluZCBlbFxuICAgIGxldCBlbCA9IGVsZW1lbnQgfHwgc3dpcGVyLnBhcmFtcy5lbDtcbiAgICBpZiAodHlwZW9mIGVsID09PSAnc3RyaW5nJykge1xuICAgICAgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKTtcbiAgICB9XG4gICAgaWYgKCFlbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbC5zd2lwZXIgPSBzd2lwZXI7XG4gICAgaWYgKGVsLnNoYWRvd0VsKSB7XG4gICAgICBzd2lwZXIuaXNFbGVtZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZ2V0V3JhcHBlclNlbGVjdG9yID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGAuJHsoc3dpcGVyLnBhcmFtcy53cmFwcGVyQ2xhc3MgfHwgJycpLnRyaW0oKS5zcGxpdCgnICcpLmpvaW4oJy4nKX1gO1xuICAgIH07XG4gICAgY29uc3QgZ2V0V3JhcHBlciA9ICgpID0+IHtcbiAgICAgIGlmIChlbCAmJiBlbC5zaGFkb3dSb290ICYmIGVsLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcikge1xuICAgICAgICBjb25zdCByZXMgPSBlbC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoZ2V0V3JhcHBlclNlbGVjdG9yKCkpO1xuICAgICAgICAvLyBDaGlsZHJlbiBuZWVkcyB0byByZXR1cm4gc2xvdCBpdGVtc1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGVsZW1lbnRDaGlsZHJlbihlbCwgZ2V0V3JhcHBlclNlbGVjdG9yKCkpWzBdO1xuICAgIH07XG4gICAgLy8gRmluZCBXcmFwcGVyXG4gICAgbGV0IHdyYXBwZXJFbCA9IGdldFdyYXBwZXIoKTtcbiAgICBpZiAoIXdyYXBwZXJFbCAmJiBzd2lwZXIucGFyYW1zLmNyZWF0ZUVsZW1lbnRzKSB7XG4gICAgICB3cmFwcGVyRWwgPSBjcmVhdGVFbGVtZW50KCdkaXYnLCBzd2lwZXIucGFyYW1zLndyYXBwZXJDbGFzcyk7XG4gICAgICBlbC5hcHBlbmQod3JhcHBlckVsKTtcbiAgICAgIGVsZW1lbnRDaGlsZHJlbihlbCwgYC4ke3N3aXBlci5wYXJhbXMuc2xpZGVDbGFzc31gKS5mb3JFYWNoKHNsaWRlRWwgPT4ge1xuICAgICAgICB3cmFwcGVyRWwuYXBwZW5kKHNsaWRlRWwpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIE9iamVjdC5hc3NpZ24oc3dpcGVyLCB7XG4gICAgICBlbCxcbiAgICAgIHdyYXBwZXJFbCxcbiAgICAgIHNsaWRlc0VsOiBzd2lwZXIuaXNFbGVtZW50ID8gZWwgOiB3cmFwcGVyRWwsXG4gICAgICBtb3VudGVkOiB0cnVlLFxuICAgICAgLy8gUlRMXG4gICAgICBydGw6IGVsLmRpci50b0xvd2VyQ2FzZSgpID09PSAncnRsJyB8fCBlbGVtZW50U3R5bGUoZWwsICdkaXJlY3Rpb24nKSA9PT0gJ3J0bCcsXG4gICAgICBydGxUcmFuc2xhdGU6IHN3aXBlci5wYXJhbXMuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgJiYgKGVsLmRpci50b0xvd2VyQ2FzZSgpID09PSAncnRsJyB8fCBlbGVtZW50U3R5bGUoZWwsICdkaXJlY3Rpb24nKSA9PT0gJ3J0bCcpLFxuICAgICAgd3JvbmdSVEw6IGVsZW1lbnRTdHlsZSh3cmFwcGVyRWwsICdkaXNwbGF5JykgPT09ICctd2Via2l0LWJveCdcbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpbml0KGVsKSB7XG4gICAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgICBpZiAoc3dpcGVyLmluaXRpYWxpemVkKSByZXR1cm4gc3dpcGVyO1xuICAgIGNvbnN0IG1vdW50ZWQgPSBzd2lwZXIubW91bnQoZWwpO1xuICAgIGlmIChtb3VudGVkID09PSBmYWxzZSkgcmV0dXJuIHN3aXBlcjtcbiAgICBzd2lwZXIuZW1pdCgnYmVmb3JlSW5pdCcpO1xuXG4gICAgLy8gU2V0IGJyZWFrcG9pbnRcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5icmVha3BvaW50cykge1xuICAgICAgc3dpcGVyLnNldEJyZWFrcG9pbnQoKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgQ2xhc3Nlc1xuICAgIHN3aXBlci5hZGRDbGFzc2VzKCk7XG5cbiAgICAvLyBVcGRhdGUgc2l6ZVxuICAgIHN3aXBlci51cGRhdGVTaXplKCk7XG5cbiAgICAvLyBVcGRhdGUgc2xpZGVzXG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cpIHtcbiAgICAgIHN3aXBlci5jaGVja092ZXJmbG93KCk7XG4gICAgfVxuXG4gICAgLy8gU2V0IEdyYWIgQ3Vyc29yXG4gICAgaWYgKHN3aXBlci5wYXJhbXMuZ3JhYkN1cnNvciAmJiBzd2lwZXIuZW5hYmxlZCkge1xuICAgICAgc3dpcGVyLnNldEdyYWJDdXJzb3IoKTtcbiAgICB9XG5cbiAgICAvLyBTbGlkZSBUbyBJbml0aWFsIFNsaWRlXG4gICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCAmJiBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCkge1xuICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLnBhcmFtcy5pbml0aWFsU2xpZGUgKyBzd2lwZXIudmlydHVhbC5zbGlkZXNCZWZvcmUsIDAsIHN3aXBlci5wYXJhbXMucnVuQ2FsbGJhY2tzT25Jbml0LCBmYWxzZSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5wYXJhbXMuaW5pdGlhbFNsaWRlLCAwLCBzd2lwZXIucGFyYW1zLnJ1bkNhbGxiYWNrc09uSW5pdCwgZmFsc2UsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBsb29wXG4gICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLmxvb3BDcmVhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBBdHRhY2ggZXZlbnRzXG4gICAgc3dpcGVyLmF0dGFjaEV2ZW50cygpO1xuICAgIFsuLi5zd2lwZXIuZWwucXVlcnlTZWxlY3RvckFsbCgnW2xvYWRpbmc9XCJsYXp5XCJdJyldLmZvckVhY2goaW1hZ2VFbCA9PiB7XG4gICAgICBpZiAoaW1hZ2VFbC5jb21wbGV0ZSkge1xuICAgICAgICBwcm9jZXNzTGF6eVByZWxvYWRlcihzd2lwZXIsIGltYWdlRWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW1hZ2VFbC5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZSA9PiB7XG4gICAgICAgICAgcHJvY2Vzc0xhenlQcmVsb2FkZXIoc3dpcGVyLCBlLnRhcmdldCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gSW5pdCBGbGFnXG4gICAgc3dpcGVyLmluaXRpYWxpemVkID0gdHJ1ZTtcblxuICAgIC8vIEVtaXRcbiAgICBzd2lwZXIuZW1pdCgnaW5pdCcpO1xuICAgIHN3aXBlci5lbWl0KCdhZnRlckluaXQnKTtcbiAgICByZXR1cm4gc3dpcGVyO1xuICB9XG4gIGRlc3Ryb3koZGVsZXRlSW5zdGFuY2UgPSB0cnVlLCBjbGVhblN0eWxlcyA9IHRydWUpIHtcbiAgICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICAgIGNvbnN0IHtcbiAgICAgIHBhcmFtcyxcbiAgICAgIGVsLFxuICAgICAgd3JhcHBlckVsLFxuICAgICAgc2xpZGVzXG4gICAgfSA9IHN3aXBlcjtcbiAgICBpZiAodHlwZW9mIHN3aXBlci5wYXJhbXMgPT09ICd1bmRlZmluZWQnIHx8IHN3aXBlci5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBzd2lwZXIuZW1pdCgnYmVmb3JlRGVzdHJveScpO1xuXG4gICAgLy8gSW5pdCBGbGFnXG4gICAgc3dpcGVyLmluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgICAvLyBEZXRhY2ggZXZlbnRzXG4gICAgc3dpcGVyLmRldGFjaEV2ZW50cygpO1xuXG4gICAgLy8gRGVzdHJveSBsb29wXG4gICAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgICBzd2lwZXIubG9vcERlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvLyBDbGVhbnVwIHN0eWxlc1xuICAgIGlmIChjbGVhblN0eWxlcykge1xuICAgICAgc3dpcGVyLnJlbW92ZUNsYXNzZXMoKTtcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgIHdyYXBwZXJFbC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gICAgICBpZiAoc2xpZGVzICYmIHNsaWRlcy5sZW5ndGgpIHtcbiAgICAgICAgc2xpZGVzLmZvckVhY2goc2xpZGVFbCA9PiB7XG4gICAgICAgICAgc2xpZGVFbC5jbGFzc0xpc3QucmVtb3ZlKHBhcmFtcy5zbGlkZVZpc2libGVDbGFzcywgcGFyYW1zLnNsaWRlQWN0aXZlQ2xhc3MsIHBhcmFtcy5zbGlkZU5leHRDbGFzcywgcGFyYW1zLnNsaWRlUHJldkNsYXNzKTtcbiAgICAgICAgICBzbGlkZUVsLnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgICAgICBzbGlkZUVsLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHN3aXBlci5lbWl0KCdkZXN0cm95Jyk7XG5cbiAgICAvLyBEZXRhY2ggZW1pdHRlciBldmVudHNcbiAgICBPYmplY3Qua2V5cyhzd2lwZXIuZXZlbnRzTGlzdGVuZXJzKS5mb3JFYWNoKGV2ZW50TmFtZSA9PiB7XG4gICAgICBzd2lwZXIub2ZmKGV2ZW50TmFtZSk7XG4gICAgfSk7XG4gICAgaWYgKGRlbGV0ZUluc3RhbmNlICE9PSBmYWxzZSkge1xuICAgICAgc3dpcGVyLmVsLnN3aXBlciA9IG51bGw7XG4gICAgICBkZWxldGVQcm9wcyhzd2lwZXIpO1xuICAgIH1cbiAgICBzd2lwZXIuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBzdGF0aWMgZXh0ZW5kRGVmYXVsdHMobmV3RGVmYXVsdHMpIHtcbiAgICBleHRlbmQoZXh0ZW5kZWREZWZhdWx0cywgbmV3RGVmYXVsdHMpO1xuICB9XG4gIHN0YXRpYyBnZXQgZXh0ZW5kZWREZWZhdWx0cygpIHtcbiAgICByZXR1cm4gZXh0ZW5kZWREZWZhdWx0cztcbiAgfVxuICBzdGF0aWMgZ2V0IGRlZmF1bHRzKCkge1xuICAgIHJldHVybiBkZWZhdWx0cztcbiAgfVxuICBzdGF0aWMgaW5zdGFsbE1vZHVsZShtb2QpIHtcbiAgICBpZiAoIVN3aXBlci5wcm90b3R5cGUuX19tb2R1bGVzX18pIFN3aXBlci5wcm90b3R5cGUuX19tb2R1bGVzX18gPSBbXTtcbiAgICBjb25zdCBtb2R1bGVzID0gU3dpcGVyLnByb3RvdHlwZS5fX21vZHVsZXNfXztcbiAgICBpZiAodHlwZW9mIG1vZCA9PT0gJ2Z1bmN0aW9uJyAmJiBtb2R1bGVzLmluZGV4T2YobW9kKSA8IDApIHtcbiAgICAgIG1vZHVsZXMucHVzaChtb2QpO1xuICAgIH1cbiAgfVxuICBzdGF0aWMgdXNlKG1vZHVsZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG1vZHVsZSkpIHtcbiAgICAgIG1vZHVsZS5mb3JFYWNoKG0gPT4gU3dpcGVyLmluc3RhbGxNb2R1bGUobSkpO1xuICAgICAgcmV0dXJuIFN3aXBlcjtcbiAgICB9XG4gICAgU3dpcGVyLmluc3RhbGxNb2R1bGUobW9kdWxlKTtcbiAgICByZXR1cm4gU3dpcGVyO1xuICB9XG59XG5PYmplY3Qua2V5cyhwcm90b3R5cGVzKS5mb3JFYWNoKHByb3RvdHlwZUdyb3VwID0+IHtcbiAgT2JqZWN0LmtleXMocHJvdG90eXBlc1twcm90b3R5cGVHcm91cF0pLmZvckVhY2gocHJvdG9NZXRob2QgPT4ge1xuICAgIFN3aXBlci5wcm90b3R5cGVbcHJvdG9NZXRob2RdID0gcHJvdG90eXBlc1twcm90b3R5cGVHcm91cF1bcHJvdG9NZXRob2RdO1xuICB9KTtcbn0pO1xuU3dpcGVyLnVzZShbUmVzaXplLCBPYnNlcnZlcl0pO1xuZXhwb3J0IGRlZmF1bHQgU3dpcGVyOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/core.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/defaults.js\":\r\n/*!**********************************************!*\\\r\n  !*** ./node_modules/swiper/core/defaults.js ***!\r\n  \\**********************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\\n  init: true,\\n  direction: 'horizontal',\\n  oneWayMovement: false,\\n  touchEventsTarget: 'wrapper',\\n  initialSlide: 0,\\n  speed: 300,\\n  cssMode: false,\\n  updateOnWindowResize: true,\\n  resizeObserver: true,\\n  nested: false,\\n  createElements: false,\\n  enabled: true,\\n  focusableElements: 'input, select, option, textarea, button, video, label',\\n  // Overrides\\n  width: null,\\n  height: null,\\n  //\\n  preventInteractionOnTransition: false,\\n  // ssr\\n  userAgent: null,\\n  url: null,\\n  // To support iOS's swipe-to-go-back gesture (when being used in-app).\\n  edgeSwipeDetection: false,\\n  edgeSwipeThreshold: 20,\\n  // Autoheight\\n  autoHeight: false,\\n  // Set wrapper width\\n  setWrapperSize: false,\\n  // Virtual Translate\\n  virtualTranslate: false,\\n  // Effects\\n  effect: 'slide',\\n  // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\\n\\n  // Breakpoints\\n  breakpoints: undefined,\\n  breakpointsBase: 'window',\\n  // Slides grid\\n  spaceBetween: 0,\\n  slidesPerView: 1,\\n  slidesPerGroup: 1,\\n  slidesPerGroupSkip: 0,\\n  slidesPerGroupAuto: false,\\n  centeredSlides: false,\\n  centeredSlidesBounds: false,\\n  slidesOffsetBefore: 0,\\n  // in px\\n  slidesOffsetAfter: 0,\\n  // in px\\n  normalizeSlideIndex: true,\\n  centerInsufficientSlides: false,\\n  // Disable swiper and hide navigation when container not overflow\\n  watchOverflow: true,\\n  // Round length\\n  roundLengths: false,\\n  // Touches\\n  touchRatio: 1,\\n  touchAngle: 45,\\n  simulateTouch: true,\\n  shortSwipes: true,\\n  longSwipes: true,\\n  longSwipesRatio: 0.5,\\n  longSwipesMs: 300,\\n  followFinger: true,\\n  allowTouchMove: true,\\n  threshold: 5,\\n  touchMoveStopPropagation: false,\\n  touchStartPreventDefault: true,\\n  touchStartForcePreventDefault: false,\\n  touchReleaseOnEdges: false,\\n  // Unique Navigation Elements\\n  uniqueNavElements: true,\\n  // Resistance\\n  resistance: true,\\n  resistanceRatio: 0.85,\\n  // Progress\\n  watchSlidesProgress: false,\\n  // Cursor\\n  grabCursor: false,\\n  // Clicks\\n  preventClicks: true,\\n  preventClicksPropagation: true,\\n  slideToClickedSlide: false,\\n  // loop\\n  loop: false,\\n  loopedSlides: null,\\n  loopPreventsSliding: true,\\n  // rewind\\n  rewind: false,\\n  // Swiping/no swiping\\n  allowSlidePrev: true,\\n  allowSlideNext: true,\\n  swipeHandler: null,\\n  // '.swipe-handler',\\n  noSwiping: true,\\n  noSwipingClass: 'swiper-no-swiping',\\n  noSwipingSelector: null,\\n  // Passive Listeners\\n  passiveListeners: true,\\n  maxBackfaceHiddenSlides: 10,\\n  // NS\\n  containerModifierClass: 'swiper-',\\n  // NEW\\n  slideClass: 'swiper-slide',\\n  slideActiveClass: 'swiper-slide-active',\\n  slideVisibleClass: 'swiper-slide-visible',\\n  slideNextClass: 'swiper-slide-next',\\n  slidePrevClass: 'swiper-slide-prev',\\n  wrapperClass: 'swiper-wrapper',\\n  lazyPreloaderClass: 'swiper-lazy-preloader',\\n  // Callbacks\\n  runCallbacksOnInit: true,\\n  // Internals\\n  _emitClasses: false\\n});//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZGVmYXVsdHMuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBLGlFQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZGVmYXVsdHMuanM/YWY0NiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IHRydWUsXG4gIGRpcmVjdGlvbjogJ2hvcml6b250YWwnLFxuICBvbmVXYXlNb3ZlbWVudDogZmFsc2UsXG4gIHRvdWNoRXZlbnRzVGFyZ2V0OiAnd3JhcHBlcicsXG4gIGluaXRpYWxTbGlkZTogMCxcbiAgc3BlZWQ6IDMwMCxcbiAgY3NzTW9kZTogZmFsc2UsXG4gIHVwZGF0ZU9uV2luZG93UmVzaXplOiB0cnVlLFxuICByZXNpemVPYnNlcnZlcjogdHJ1ZSxcbiAgbmVzdGVkOiBmYWxzZSxcbiAgY3JlYXRlRWxlbWVudHM6IGZhbHNlLFxuICBlbmFibGVkOiB0cnVlLFxuICBmb2N1c2FibGVFbGVtZW50czogJ2lucHV0LCBzZWxlY3QsIG9wdGlvbiwgdGV4dGFyZWEsIGJ1dHRvbiwgdmlkZW8sIGxhYmVsJyxcbiAgLy8gT3ZlcnJpZGVzXG4gIHdpZHRoOiBudWxsLFxuICBoZWlnaHQ6IG51bGwsXG4gIC8vXG4gIHByZXZlbnRJbnRlcmFjdGlvbk9uVHJhbnNpdGlvbjogZmFsc2UsXG4gIC8vIHNzclxuICB1c2VyQWdlbnQ6IG51bGwsXG4gIHVybDogbnVsbCxcbiAgLy8gVG8gc3VwcG9ydCBpT1MncyBzd2lwZS10by1nby1iYWNrIGdlc3R1cmUgKHdoZW4gYmVpbmcgdXNlZCBpbi1hcHApLlxuICBlZGdlU3dpcGVEZXRlY3Rpb246IGZhbHNlLFxuICBlZGdlU3dpcGVUaHJlc2hvbGQ6IDIwLFxuICAvLyBBdXRvaGVpZ2h0XG4gIGF1dG9IZWlnaHQ6IGZhbHNlLFxuICAvLyBTZXQgd3JhcHBlciB3aWR0aFxuICBzZXRXcmFwcGVyU2l6ZTogZmFsc2UsXG4gIC8vIFZpcnR1YWwgVHJhbnNsYXRlXG4gIHZpcnR1YWxUcmFuc2xhdGU6IGZhbHNlLFxuICAvLyBFZmZlY3RzXG4gIGVmZmVjdDogJ3NsaWRlJyxcbiAgLy8gJ3NsaWRlJyBvciAnZmFkZScgb3IgJ2N1YmUnIG9yICdjb3ZlcmZsb3cnIG9yICdmbGlwJ1xuXG4gIC8vIEJyZWFrcG9pbnRzXG4gIGJyZWFrcG9pbnRzOiB1bmRlZmluZWQsXG4gIGJyZWFrcG9pbnRzQmFzZTogJ3dpbmRvdycsXG4gIC8vIFNsaWRlcyBncmlkXG4gIHNwYWNlQmV0d2VlbjogMCxcbiAgc2xpZGVzUGVyVmlldzogMSxcbiAgc2xpZGVzUGVyR3JvdXA6IDEsXG4gIHNsaWRlc1Blckdyb3VwU2tpcDogMCxcbiAgc2xpZGVzUGVyR3JvdXBBdXRvOiBmYWxzZSxcbiAgY2VudGVyZWRTbGlkZXM6IGZhbHNlLFxuICBjZW50ZXJlZFNsaWRlc0JvdW5kczogZmFsc2UsXG4gIHNsaWRlc09mZnNldEJlZm9yZTogMCxcbiAgLy8gaW4gcHhcbiAgc2xpZGVzT2Zmc2V0QWZ0ZXI6IDAsXG4gIC8vIGluIHB4XG4gIG5vcm1hbGl6ZVNsaWRlSW5kZXg6IHRydWUsXG4gIGNlbnRlckluc3VmZmljaWVudFNsaWRlczogZmFsc2UsXG4gIC8vIERpc2FibGUgc3dpcGVyIGFuZCBoaWRlIG5hdmlnYXRpb24gd2hlbiBjb250YWluZXIgbm90IG92ZXJmbG93XG4gIHdhdGNoT3ZlcmZsb3c6IHRydWUsXG4gIC8vIFJvdW5kIGxlbmd0aFxuICByb3VuZExlbmd0aHM6IGZhbHNlLFxuICAvLyBUb3VjaGVzXG4gIHRvdWNoUmF0aW86IDEsXG4gIHRvdWNoQW5nbGU6IDQ1LFxuICBzaW11bGF0ZVRvdWNoOiB0cnVlLFxuICBzaG9ydFN3aXBlczogdHJ1ZSxcbiAgbG9uZ1N3aXBlczogdHJ1ZSxcbiAgbG9uZ1N3aXBlc1JhdGlvOiAwLjUsXG4gIGxvbmdTd2lwZXNNczogMzAwLFxuICBmb2xsb3dGaW5nZXI6IHRydWUsXG4gIGFsbG93VG91Y2hNb3ZlOiB0cnVlLFxuICB0aHJlc2hvbGQ6IDUsXG4gIHRvdWNoTW92ZVN0b3BQcm9wYWdhdGlvbjogZmFsc2UsXG4gIHRvdWNoU3RhcnRQcmV2ZW50RGVmYXVsdDogdHJ1ZSxcbiAgdG91Y2hTdGFydEZvcmNlUHJldmVudERlZmF1bHQ6IGZhbHNlLFxuICB0b3VjaFJlbGVhc2VPbkVkZ2VzOiBmYWxzZSxcbiAgLy8gVW5pcXVlIE5hdmlnYXRpb24gRWxlbWVudHNcbiAgdW5pcXVlTmF2RWxlbWVudHM6IHRydWUsXG4gIC8vIFJlc2lzdGFuY2VcbiAgcmVzaXN0YW5jZTogdHJ1ZSxcbiAgcmVzaXN0YW5jZVJhdGlvOiAwLjg1LFxuICAvLyBQcm9ncmVzc1xuICB3YXRjaFNsaWRlc1Byb2dyZXNzOiBmYWxzZSxcbiAgLy8gQ3Vyc29yXG4gIGdyYWJDdXJzb3I6IGZhbHNlLFxuICAvLyBDbGlja3NcbiAgcHJldmVudENsaWNrczogdHJ1ZSxcbiAgcHJldmVudENsaWNrc1Byb3BhZ2F0aW9uOiB0cnVlLFxuICBzbGlkZVRvQ2xpY2tlZFNsaWRlOiBmYWxzZSxcbiAgLy8gbG9vcFxuICBsb29wOiBmYWxzZSxcbiAgbG9vcGVkU2xpZGVzOiBudWxsLFxuICBsb29wUHJldmVudHNTbGlkaW5nOiB0cnVlLFxuICAvLyByZXdpbmRcbiAgcmV3aW5kOiBmYWxzZSxcbiAgLy8gU3dpcGluZy9ubyBzd2lwaW5nXG4gIGFsbG93U2xpZGVQcmV2OiB0cnVlLFxuICBhbGxvd1NsaWRlTmV4dDogdHJ1ZSxcbiAgc3dpcGVIYW5kbGVyOiBudWxsLFxuICAvLyAnLnN3aXBlLWhhbmRsZXInLFxuICBub1N3aXBpbmc6IHRydWUsXG4gIG5vU3dpcGluZ0NsYXNzOiAnc3dpcGVyLW5vLXN3aXBpbmcnLFxuICBub1N3aXBpbmdTZWxlY3RvcjogbnVsbCxcbiAgLy8gUGFzc2l2ZSBMaXN0ZW5lcnNcbiAgcGFzc2l2ZUxpc3RlbmVyczogdHJ1ZSxcbiAgbWF4QmFja2ZhY2VIaWRkZW5TbGlkZXM6IDEwLFxuICAvLyBOU1xuICBjb250YWluZXJNb2RpZmllckNsYXNzOiAnc3dpcGVyLScsXG4gIC8vIE5FV1xuICBzbGlkZUNsYXNzOiAnc3dpcGVyLXNsaWRlJyxcbiAgc2xpZGVBY3RpdmVDbGFzczogJ3N3aXBlci1zbGlkZS1hY3RpdmUnLFxuICBzbGlkZVZpc2libGVDbGFzczogJ3N3aXBlci1zbGlkZS12aXNpYmxlJyxcbiAgc2xpZGVOZXh0Q2xhc3M6ICdzd2lwZXItc2xpZGUtbmV4dCcsXG4gIHNsaWRlUHJldkNsYXNzOiAnc3dpcGVyLXNsaWRlLXByZXYnLFxuICB3cmFwcGVyQ2xhc3M6ICdzd2lwZXItd3JhcHBlcicsXG4gIGxhenlQcmVsb2FkZXJDbGFzczogJ3N3aXBlci1sYXp5LXByZWxvYWRlcicsXG4gIC8vIENhbGxiYWNrc1xuICBydW5DYWxsYmFja3NPbkluaXQ6IHRydWUsXG4gIC8vIEludGVybmFsc1xuICBfZW1pdENsYXNzZXM6IGZhbHNlXG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/defaults.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/events-emitter.js\":\r\n/*!****************************************************!*\\\r\n  !*** ./node_modules/swiper/core/events-emitter.js ***!\r\n  \\****************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* eslint-disable no-underscore-dangle */\\n\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\\n  on(events, handler, priority) {\\n    const self = this;\\n    if (!self.eventsListeners || self.destroyed) return self;\\n    if (typeof handler !== 'function') return self;\\n    const method = priority ? 'unshift' : 'push';\\n    events.split(' ').forEach(event => {\\n      if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\\n      self.eventsListeners[event][method](handler);\\n    });\\n    return self;\\n  },\\n  once(events, handler, priority) {\\n    const self = this;\\n    if (!self.eventsListeners || self.destroyed) return self;\\n    if (typeof handler !== 'function') return self;\\n    function onceHandler(...args) {\\n      self.off(events, onceHandler);\\n      if (onceHandler.__emitterProxy) {\\n        delete onceHandler.__emitterProxy;\\n      }\\n      handler.apply(self, args);\\n    }\\n    onceHandler.__emitterProxy = handler;\\n    return self.on(events, onceHandler, priority);\\n  },\\n  onAny(handler, priority) {\\n    const self = this;\\n    if (!self.eventsListeners || self.destroyed) return self;\\n    if (typeof handler !== 'function') return self;\\n    const method = priority ? 'unshift' : 'push';\\n    if (self.eventsAnyListeners.indexOf(handler) < 0) {\\n      self.eventsAnyListeners[method](handler);\\n    }\\n    return self;\\n  },\\n  offAny(handler) {\\n    const self = this;\\n    if (!self.eventsListeners || self.destroyed) return self;\\n    if (!self.eventsAnyListeners) return self;\\n    const index = self.eventsAnyListeners.indexOf(handler);\\n    if (index >= 0) {\\n      self.eventsAnyListeners.splice(index, 1);\\n    }\\n    return self;\\n  },\\n  off(events, handler) {\\n    const self = this;\\n    if (!self.eventsListeners || self.destroyed) return self;\\n    if (!self.eventsListeners) return self;\\n    events.split(' ').forEach(event => {\\n      if (typeof handler === 'undefined') {\\n        self.eventsListeners[event] = [];\\n      } else if (self.eventsListeners[event]) {\\n        self.eventsListeners[event].forEach((eventHandler, index) => {\\n          if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\\n            self.eventsListeners[event].splice(index, 1);\\n          }\\n        });\\n      }\\n    });\\n    return self;\\n  },\\n  emit(...args) {\\n    const self = this;\\n    if (!self.eventsListeners || self.destroyed) return self;\\n    if (!self.eventsListeners) return self;\\n    let events;\\n    let data;\\n    let context;\\n    if (typeof args[0] === 'string' || Array.isArray(args[0])) {\\n      events = args[0];\\n      data = args.slice(1, args.length);\\n      context = self;\\n    } else {\\n      events = args[0].events;\\n      data = args[0].data;\\n      context = args[0].context || self;\\n    }\\n    data.unshift(context);\\n    const eventsArray = Array.isArray(events) ? events : events.split(' ');\\n    eventsArray.forEach(event => {\\n      if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\\n        self.eventsAnyListeners.forEach(eventHandler => {\\n          eventHandler.apply(context, [event, ...data]);\\n        });\\n      }\\n      if (self.eventsListeners && self.eventsListeners[event]) {\\n        self.eventsListeners[event].forEach(eventHandler => {\\n          eventHandler.apply(context, data);\\n        });\\n      }\\n    });\\n    return self;\\n  }\\n});//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZXZlbnRzLWVtaXR0ZXIuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBOztBQUVBLGlFQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9ldmVudHMtZW1pdHRlci5qcz9kYmFkIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgb24oZXZlbnRzLCBoYW5kbGVyLCBwcmlvcml0eSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGlmICghc2VsZi5ldmVudHNMaXN0ZW5lcnMgfHwgc2VsZi5kZXN0cm95ZWQpIHJldHVybiBzZWxmO1xuICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHNlbGY7XG4gICAgY29uc3QgbWV0aG9kID0gcHJpb3JpdHkgPyAndW5zaGlmdCcgOiAncHVzaCc7XG4gICAgZXZlbnRzLnNwbGl0KCcgJykuZm9yRWFjaChldmVudCA9PiB7XG4gICAgICBpZiAoIXNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSkgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdID0gW107XG4gICAgICBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF1bbWV0aG9kXShoYW5kbGVyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc2VsZjtcbiAgfSxcbiAgb25jZShldmVudHMsIGhhbmRsZXIsIHByaW9yaXR5KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVycyB8fCBzZWxmLmRlc3Ryb3llZCkgcmV0dXJuIHNlbGY7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyICE9PSAnZnVuY3Rpb24nKSByZXR1cm4gc2VsZjtcbiAgICBmdW5jdGlvbiBvbmNlSGFuZGxlciguLi5hcmdzKSB7XG4gICAgICBzZWxmLm9mZihldmVudHMsIG9uY2VIYW5kbGVyKTtcbiAgICAgIGlmIChvbmNlSGFuZGxlci5fX2VtaXR0ZXJQcm94eSkge1xuICAgICAgICBkZWxldGUgb25jZUhhbmRsZXIuX19lbWl0dGVyUHJveHk7XG4gICAgICB9XG4gICAgICBoYW5kbGVyLmFwcGx5KHNlbGYsIGFyZ3MpO1xuICAgIH1cbiAgICBvbmNlSGFuZGxlci5fX2VtaXR0ZXJQcm94eSA9IGhhbmRsZXI7XG4gICAgcmV0dXJuIHNlbGYub24oZXZlbnRzLCBvbmNlSGFuZGxlciwgcHJpb3JpdHkpO1xuICB9LFxuICBvbkFueShoYW5kbGVyLCBwcmlvcml0eSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGlmICghc2VsZi5ldmVudHNMaXN0ZW5lcnMgfHwgc2VsZi5kZXN0cm95ZWQpIHJldHVybiBzZWxmO1xuICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHNlbGY7XG4gICAgY29uc3QgbWV0aG9kID0gcHJpb3JpdHkgPyAndW5zaGlmdCcgOiAncHVzaCc7XG4gICAgaWYgKHNlbGYuZXZlbnRzQW55TGlzdGVuZXJzLmluZGV4T2YoaGFuZGxlcikgPCAwKSB7XG4gICAgICBzZWxmLmV2ZW50c0FueUxpc3RlbmVyc1ttZXRob2RdKGhhbmRsZXIpO1xuICAgIH1cbiAgICByZXR1cm4gc2VsZjtcbiAgfSxcbiAgb2ZmQW55KGhhbmRsZXIpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBpZiAoIXNlbGYuZXZlbnRzTGlzdGVuZXJzIHx8IHNlbGYuZGVzdHJveWVkKSByZXR1cm4gc2VsZjtcbiAgICBpZiAoIXNlbGYuZXZlbnRzQW55TGlzdGVuZXJzKSByZXR1cm4gc2VsZjtcbiAgICBjb25zdCBpbmRleCA9IHNlbGYuZXZlbnRzQW55TGlzdGVuZXJzLmluZGV4T2YoaGFuZGxlcik7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgIHNlbGYuZXZlbnRzQW55TGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICAgIHJldHVybiBzZWxmO1xuICB9LFxuICBvZmYoZXZlbnRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVycyB8fCBzZWxmLmRlc3Ryb3llZCkgcmV0dXJuIHNlbGY7XG4gICAgaWYgKCFzZWxmLmV2ZW50c0xpc3RlbmVycykgcmV0dXJuIHNlbGY7XG4gICAgZXZlbnRzLnNwbGl0KCcgJykuZm9yRWFjaChldmVudCA9PiB7XG4gICAgICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSA9IFtdO1xuICAgICAgfSBlbHNlIGlmIChzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0pIHtcbiAgICAgICAgc2VsZi5ldmVudHNMaXN0ZW5lcnNbZXZlbnRdLmZvckVhY2goKGV2ZW50SGFuZGxlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnRIYW5kbGVyID09PSBoYW5kbGVyIHx8IGV2ZW50SGFuZGxlci5fX2VtaXR0ZXJQcm94eSAmJiBldmVudEhhbmRsZXIuX19lbWl0dGVyUHJveHkgPT09IGhhbmRsZXIpIHtcbiAgICAgICAgICAgIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH0sXG4gIGVtaXQoLi4uYXJncykge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGlmICghc2VsZi5ldmVudHNMaXN0ZW5lcnMgfHwgc2VsZi5kZXN0cm95ZWQpIHJldHVybiBzZWxmO1xuICAgIGlmICghc2VsZi5ldmVudHNMaXN0ZW5lcnMpIHJldHVybiBzZWxmO1xuICAgIGxldCBldmVudHM7XG4gICAgbGV0IGRhdGE7XG4gICAgbGV0IGNvbnRleHQ7XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJyB8fCBBcnJheS5pc0FycmF5KGFyZ3NbMF0pKSB7XG4gICAgICBldmVudHMgPSBhcmdzWzBdO1xuICAgICAgZGF0YSA9IGFyZ3Muc2xpY2UoMSwgYXJncy5sZW5ndGgpO1xuICAgICAgY29udGV4dCA9IHNlbGY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2ZW50cyA9IGFyZ3NbMF0uZXZlbnRzO1xuICAgICAgZGF0YSA9IGFyZ3NbMF0uZGF0YTtcbiAgICAgIGNvbnRleHQgPSBhcmdzWzBdLmNvbnRleHQgfHwgc2VsZjtcbiAgICB9XG4gICAgZGF0YS51bnNoaWZ0KGNvbnRleHQpO1xuICAgIGNvbnN0IGV2ZW50c0FycmF5ID0gQXJyYXkuaXNBcnJheShldmVudHMpID8gZXZlbnRzIDogZXZlbnRzLnNwbGl0KCcgJyk7XG4gICAgZXZlbnRzQXJyYXkuZm9yRWFjaChldmVudCA9PiB7XG4gICAgICBpZiAoc2VsZi5ldmVudHNBbnlMaXN0ZW5lcnMgJiYgc2VsZi5ldmVudHNBbnlMaXN0ZW5lcnMubGVuZ3RoKSB7XG4gICAgICAgIHNlbGYuZXZlbnRzQW55TGlzdGVuZXJzLmZvckVhY2goZXZlbnRIYW5kbGVyID0+IHtcbiAgICAgICAgICBldmVudEhhbmRsZXIuYXBwbHkoY29udGV4dCwgW2V2ZW50LCAuLi5kYXRhXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHNlbGYuZXZlbnRzTGlzdGVuZXJzICYmIHNlbGYuZXZlbnRzTGlzdGVuZXJzW2V2ZW50XSkge1xuICAgICAgICBzZWxmLmV2ZW50c0xpc3RlbmVyc1tldmVudF0uZm9yRWFjaChldmVudEhhbmRsZXIgPT4ge1xuICAgICAgICAgIGV2ZW50SGFuZGxlci5hcHBseShjb250ZXh0LCBkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNlbGY7XG4gIH1cbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/events-emitter.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/events/index.js\":\r\n/*!**************************************************!*\\\r\n  !*** ./node_modules/swiper/core/events/index.js ***!\r\n  \\**************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \\\"./node_modules/ssr-window/ssr-window.esm.js\\\");\\n/* harmony import */ var _onTouchStart_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./onTouchStart.js */ \\\"./node_modules/swiper/core/events/onTouchStart.js\\\");\\n/* harmony import */ var _onTouchMove_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./onTouchMove.js */ \\\"./node_modules/swiper/core/events/onTouchMove.js\\\");\\n/* harmony import */ var _onTouchEnd_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./onTouchEnd.js */ \\\"./node_modules/swiper/core/events/onTouchEnd.js\\\");\\n/* harmony import */ var _onResize_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./onResize.js */ \\\"./node_modules/swiper/core/events/onResize.js\\\");\\n/* harmony import */ var _onClick_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./onClick.js */ \\\"./node_modules/swiper/core/events/onClick.js\\\");\\n/* harmony import */ var _onScroll_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./onScroll.js */ \\\"./node_modules/swiper/core/events/onScroll.js\\\");\\n/* harmony import */ var _onLoad_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./onLoad.js */ \\\"./node_modules/swiper/core/events/onLoad.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\nlet dummyEventAttached = false;\\nfunction dummyEventListener() {}\\nconst events = (swiper, method) => {\\n  const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)();\\n  const {\\n    params,\\n    el,\\n    wrapperEl,\\n    device\\n  } = swiper;\\n  const capture = !!params.nested;\\n  const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\\n  const swiperMethod = method;\\n\\n  // Touch Events\\n  el[domMethod]('pointerdown', swiper.onTouchStart, {\\n    passive: false\\n  });\\n  document[domMethod]('pointermove', swiper.onTouchMove, {\\n    passive: false,\\n    capture\\n  });\\n  document[domMethod]('pointerup', swiper.onTouchEnd, {\\n    passive: true\\n  });\\n  document[domMethod]('pointercancel', swiper.onTouchEnd, {\\n    passive: true\\n  });\\n  document[domMethod]('pointerout', swiper.onTouchEnd, {\\n    passive: true\\n  });\\n  document[domMethod]('pointerleave', swiper.onTouchEnd, {\\n    passive: true\\n  });\\n\\n  // Prevent Links Clicks\\n  if (params.preventClicks || params.preventClicksPropagation) {\\n    el[domMethod]('click', swiper.onClick, true);\\n  }\\n  if (params.cssMode) {\\n    wrapperEl[domMethod]('scroll', swiper.onScroll);\\n  }\\n\\n  // Resize handler\\n  if (params.updateOnWindowResize) {\\n    swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', _onResize_js__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"], true);\\n  } else {\\n    swiper[swiperMethod]('observerUpdate', _onResize_js__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"], true);\\n  }\\n\\n  // Images loader\\n  el[domMethod]('load', swiper.onLoad, {\\n    capture: true\\n  });\\n};\\nfunction attachEvents() {\\n  const swiper = this;\\n  const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)();\\n  const {\\n    params\\n  } = swiper;\\n  swiper.onTouchStart = _onTouchStart_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"].bind(swiper);\\n  swiper.onTouchMove = _onTouchMove_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].bind(swiper);\\n  swiper.onTouchEnd = _onTouchEnd_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"].bind(swiper);\\n  if (params.cssMode) {\\n    swiper.onScroll = _onScroll_js__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"].bind(swiper);\\n  }\\n  swiper.onClick = _onClick_js__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"].bind(swiper);\\n  swiper.onLoad = _onLoad_js__WEBPACK_IMPORTED_MODULE_7__[\\\"default\\\"].bind(swiper);\\n  if (!dummyEventAttached) {\\n    document.addEventListener('touchstart', dummyEventListener);\\n    dummyEventAttached = true;\\n  }\\n  events(swiper, 'on');\\n}\\nfunction detachEvents() {\\n  const swiper = this;\\n  events(swiper, 'off');\\n}\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\\n  attachEvents,\\n  detachEvents\\n});//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZXZlbnRzL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUF5QztBQUNJO0FBQ0Y7QUFDRjtBQUNKO0FBQ0Y7QUFDRTtBQUNKO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQix1REFBVztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2SEFBNkgsb0RBQVE7QUFDckksSUFBSTtBQUNKLDJDQUEyQyxvREFBUTtBQUNuRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHVEQUFXO0FBQzlCO0FBQ0E7QUFDQSxJQUFJO0FBQ0osd0JBQXdCLDZEQUFpQjtBQUN6Qyx1QkFBdUIsNERBQWdCO0FBQ3ZDLHNCQUFzQiwyREFBZTtBQUNyQztBQUNBLHNCQUFzQix5REFBYTtBQUNuQztBQUNBLG1CQUFtQix3REFBWTtBQUMvQixrQkFBa0IsdURBQVc7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBZTtBQUNmO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZXZlbnRzL2luZGV4LmpzPzBiYTUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tICdzc3Itd2luZG93JztcbmltcG9ydCBvblRvdWNoU3RhcnQgZnJvbSAnLi9vblRvdWNoU3RhcnQuanMnO1xuaW1wb3J0IG9uVG91Y2hNb3ZlIGZyb20gJy4vb25Ub3VjaE1vdmUuanMnO1xuaW1wb3J0IG9uVG91Y2hFbmQgZnJvbSAnLi9vblRvdWNoRW5kLmpzJztcbmltcG9ydCBvblJlc2l6ZSBmcm9tICcuL29uUmVzaXplLmpzJztcbmltcG9ydCBvbkNsaWNrIGZyb20gJy4vb25DbGljay5qcyc7XG5pbXBvcnQgb25TY3JvbGwgZnJvbSAnLi9vblNjcm9sbC5qcyc7XG5pbXBvcnQgb25Mb2FkIGZyb20gJy4vb25Mb2FkLmpzJztcbmxldCBkdW1teUV2ZW50QXR0YWNoZWQgPSBmYWxzZTtcbmZ1bmN0aW9uIGR1bW15RXZlbnRMaXN0ZW5lcigpIHt9XG5jb25zdCBldmVudHMgPSAoc3dpcGVyLCBtZXRob2QpID0+IHtcbiAgY29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICBjb25zdCB7XG4gICAgcGFyYW1zLFxuICAgIGVsLFxuICAgIHdyYXBwZXJFbCxcbiAgICBkZXZpY2VcbiAgfSA9IHN3aXBlcjtcbiAgY29uc3QgY2FwdHVyZSA9ICEhcGFyYW1zLm5lc3RlZDtcbiAgY29uc3QgZG9tTWV0aG9kID0gbWV0aG9kID09PSAnb24nID8gJ2FkZEV2ZW50TGlzdGVuZXInIDogJ3JlbW92ZUV2ZW50TGlzdGVuZXInO1xuICBjb25zdCBzd2lwZXJNZXRob2QgPSBtZXRob2Q7XG5cbiAgLy8gVG91Y2ggRXZlbnRzXG4gIGVsW2RvbU1ldGhvZF0oJ3BvaW50ZXJkb3duJywgc3dpcGVyLm9uVG91Y2hTdGFydCwge1xuICAgIHBhc3NpdmU6IGZhbHNlXG4gIH0pO1xuICBkb2N1bWVudFtkb21NZXRob2RdKCdwb2ludGVybW92ZScsIHN3aXBlci5vblRvdWNoTW92ZSwge1xuICAgIHBhc3NpdmU6IGZhbHNlLFxuICAgIGNhcHR1cmVcbiAgfSk7XG4gIGRvY3VtZW50W2RvbU1ldGhvZF0oJ3BvaW50ZXJ1cCcsIHN3aXBlci5vblRvdWNoRW5kLCB7XG4gICAgcGFzc2l2ZTogdHJ1ZVxuICB9KTtcbiAgZG9jdW1lbnRbZG9tTWV0aG9kXSgncG9pbnRlcmNhbmNlbCcsIHN3aXBlci5vblRvdWNoRW5kLCB7XG4gICAgcGFzc2l2ZTogdHJ1ZVxuICB9KTtcbiAgZG9jdW1lbnRbZG9tTWV0aG9kXSgncG9pbnRlcm91dCcsIHN3aXBlci5vblRvdWNoRW5kLCB7XG4gICAgcGFzc2l2ZTogdHJ1ZVxuICB9KTtcbiAgZG9jdW1lbnRbZG9tTWV0aG9kXSgncG9pbnRlcmxlYXZlJywgc3dpcGVyLm9uVG91Y2hFbmQsIHtcbiAgICBwYXNzaXZlOiB0cnVlXG4gIH0pO1xuXG4gIC8vIFByZXZlbnQgTGlua3MgQ2xpY2tzXG4gIGlmIChwYXJhbXMucHJldmVudENsaWNrcyB8fCBwYXJhbXMucHJldmVudENsaWNrc1Byb3BhZ2F0aW9uKSB7XG4gICAgZWxbZG9tTWV0aG9kXSgnY2xpY2snLCBzd2lwZXIub25DbGljaywgdHJ1ZSk7XG4gIH1cbiAgaWYgKHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgd3JhcHBlckVsW2RvbU1ldGhvZF0oJ3Njcm9sbCcsIHN3aXBlci5vblNjcm9sbCk7XG4gIH1cblxuICAvLyBSZXNpemUgaGFuZGxlclxuICBpZiAocGFyYW1zLnVwZGF0ZU9uV2luZG93UmVzaXplKSB7XG4gICAgc3dpcGVyW3N3aXBlck1ldGhvZF0oZGV2aWNlLmlvcyB8fCBkZXZpY2UuYW5kcm9pZCA/ICdyZXNpemUgb3JpZW50YXRpb25jaGFuZ2Ugb2JzZXJ2ZXJVcGRhdGUnIDogJ3Jlc2l6ZSBvYnNlcnZlclVwZGF0ZScsIG9uUmVzaXplLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBzd2lwZXJbc3dpcGVyTWV0aG9kXSgnb2JzZXJ2ZXJVcGRhdGUnLCBvblJlc2l6ZSwgdHJ1ZSk7XG4gIH1cblxuICAvLyBJbWFnZXMgbG9hZGVyXG4gIGVsW2RvbU1ldGhvZF0oJ2xvYWQnLCBzd2lwZXIub25Mb2FkLCB7XG4gICAgY2FwdHVyZTogdHJ1ZVxuICB9KTtcbn07XG5mdW5jdGlvbiBhdHRhY2hFdmVudHMoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgY29uc3Qge1xuICAgIHBhcmFtc1xuICB9ID0gc3dpcGVyO1xuICBzd2lwZXIub25Ub3VjaFN0YXJ0ID0gb25Ub3VjaFN0YXJ0LmJpbmQoc3dpcGVyKTtcbiAgc3dpcGVyLm9uVG91Y2hNb3ZlID0gb25Ub3VjaE1vdmUuYmluZChzd2lwZXIpO1xuICBzd2lwZXIub25Ub3VjaEVuZCA9IG9uVG91Y2hFbmQuYmluZChzd2lwZXIpO1xuICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICBzd2lwZXIub25TY3JvbGwgPSBvblNjcm9sbC5iaW5kKHN3aXBlcik7XG4gIH1cbiAgc3dpcGVyLm9uQ2xpY2sgPSBvbkNsaWNrLmJpbmQoc3dpcGVyKTtcbiAgc3dpcGVyLm9uTG9hZCA9IG9uTG9hZC5iaW5kKHN3aXBlcik7XG4gIGlmICghZHVtbXlFdmVudEF0dGFjaGVkKSB7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGR1bW15RXZlbnRMaXN0ZW5lcik7XG4gICAgZHVtbXlFdmVudEF0dGFjaGVkID0gdHJ1ZTtcbiAgfVxuICBldmVudHMoc3dpcGVyLCAnb24nKTtcbn1cbmZ1bmN0aW9uIGRldGFjaEV2ZW50cygpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgZXZlbnRzKHN3aXBlciwgJ29mZicpO1xufVxuZXhwb3J0IGRlZmF1bHQge1xuICBhdHRhY2hFdmVudHMsXG4gIGRldGFjaEV2ZW50c1xufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/events/index.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/events/onClick.js\":\r\n/*!****************************************************!*\\\r\n  !*** ./node_modules/swiper/core/events/onClick.js ***!\r\n  \\****************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ onClick)\\n/* harmony export */ });\\nfunction onClick(e) {\\n  const swiper = this;\\n  if (!swiper.enabled) return;\\n  if (!swiper.allowClick) {\\n    if (swiper.params.preventClicks) e.preventDefault();\\n    if (swiper.params.preventClicksPropagation && swiper.animating) {\\n      e.stopPropagation();\\n      e.stopImmediatePropagation();\\n    }\\n  }\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZXZlbnRzL29uQ2xpY2suanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9ldmVudHMvb25DbGljay5qcz9lYjFhIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBpZiAoIXN3aXBlci5lbmFibGVkKSByZXR1cm47XG4gIGlmICghc3dpcGVyLmFsbG93Q2xpY2spIHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5wcmV2ZW50Q2xpY2tzKSBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMucHJldmVudENsaWNrc1Byb3BhZ2F0aW9uICYmIHN3aXBlci5hbmltYXRpbmcpIHtcbiAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/events/onClick.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/events/onLoad.js\":\r\n/*!***************************************************!*\\\r\n  !*** ./node_modules/swiper/core/events/onLoad.js ***!\r\n  \\***************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ onLoad)\\n/* harmony export */ });\\n/* harmony import */ var _shared_process_lazy_preloader_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/process-lazy-preloader.js */ \\\"./node_modules/swiper/shared/process-lazy-preloader.js\\\");\\n\\nfunction onLoad(e) {\\n  const swiper = this;\\n  (0,_shared_process_lazy_preloader_js__WEBPACK_IMPORTED_MODULE_0__.processLazyPreloader)(swiper, e.target);\\n  swiper.update();\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZXZlbnRzL29uTG9hZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUE4RTtBQUMvRDtBQUNmO0FBQ0EsRUFBRSx1RkFBb0I7QUFDdEI7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2V2ZW50cy9vbkxvYWQuanM/ZGE5ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcm9jZXNzTGF6eVByZWxvYWRlciB9IGZyb20gJy4uLy4uL3NoYXJlZC9wcm9jZXNzLWxhenktcHJlbG9hZGVyLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9uTG9hZChlKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIHByb2Nlc3NMYXp5UHJlbG9hZGVyKHN3aXBlciwgZS50YXJnZXQpO1xuICBzd2lwZXIudXBkYXRlKCk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/events/onLoad.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/events/onResize.js\":\r\n/*!*****************************************************!*\\\r\n  !*** ./node_modules/swiper/core/events/onResize.js ***!\r\n  \\*****************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ onResize)\\n/* harmony export */ });\\nlet timeout;\\nfunction onResize() {\\n  const swiper = this;\\n  const {\\n    params,\\n    el\\n  } = swiper;\\n  if (el && el.offsetWidth === 0) return;\\n\\n  // Breakpoints\\n  if (params.breakpoints) {\\n    swiper.setBreakpoint();\\n  }\\n\\n  // Save locks\\n  const {\\n    allowSlideNext,\\n    allowSlidePrev,\\n    snapGrid\\n  } = swiper;\\n  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\\n\\n  // Disable locks on resize\\n  swiper.allowSlideNext = true;\\n  swiper.allowSlidePrev = true;\\n  swiper.updateSize();\\n  swiper.updateSlides();\\n  swiper.updateSlidesClasses();\\n  const isVirtualLoop = isVirtual && params.loop;\\n  if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\\n    swiper.slideTo(swiper.slides.length - 1, 0, false, true);\\n  } else {\\n    if (swiper.params.loop && !isVirtual) {\\n      swiper.slideToLoop(swiper.realIndex, 0, false, true);\\n    } else {\\n      swiper.slideTo(swiper.activeIndex, 0, false, true);\\n    }\\n  }\\n  if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\\n    clearTimeout(timeout);\\n    timeout = setTimeout(() => {\\n      swiper.autoplay.resume();\\n    }, 500);\\n  }\\n  // Return locks after resize\\n  swiper.allowSlidePrev = allowSlidePrev;\\n  swiper.allowSlideNext = allowSlideNext;\\n  if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\\n    swiper.checkOverflow();\\n  }\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZXZlbnRzL29uUmVzaXplLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZXZlbnRzL29uUmVzaXplLmpzP2ZjNTkiXSwic291cmNlc0NvbnRlbnQiOlsibGV0IHRpbWVvdXQ7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvblJlc2l6ZSgpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3Qge1xuICAgIHBhcmFtcyxcbiAgICBlbFxuICB9ID0gc3dpcGVyO1xuICBpZiAoZWwgJiYgZWwub2Zmc2V0V2lkdGggPT09IDApIHJldHVybjtcblxuICAvLyBCcmVha3BvaW50c1xuICBpZiAocGFyYW1zLmJyZWFrcG9pbnRzKSB7XG4gICAgc3dpcGVyLnNldEJyZWFrcG9pbnQoKTtcbiAgfVxuXG4gIC8vIFNhdmUgbG9ja3NcbiAgY29uc3Qge1xuICAgIGFsbG93U2xpZGVOZXh0LFxuICAgIGFsbG93U2xpZGVQcmV2LFxuICAgIHNuYXBHcmlkXG4gIH0gPSBzd2lwZXI7XG4gIGNvbnN0IGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkO1xuXG4gIC8vIERpc2FibGUgbG9ja3Mgb24gcmVzaXplXG4gIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9IHRydWU7XG4gIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9IHRydWU7XG4gIHN3aXBlci51cGRhdGVTaXplKCk7XG4gIHN3aXBlci51cGRhdGVTbGlkZXMoKTtcbiAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgY29uc3QgaXNWaXJ0dWFsTG9vcCA9IGlzVmlydHVhbCAmJiBwYXJhbXMubG9vcDtcbiAgaWYgKChwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nIHx8IHBhcmFtcy5zbGlkZXNQZXJWaWV3ID4gMSkgJiYgc3dpcGVyLmlzRW5kICYmICFzd2lwZXIuaXNCZWdpbm5pbmcgJiYgIXN3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMgJiYgIWlzVmlydHVhbExvb3ApIHtcbiAgICBzd2lwZXIuc2xpZGVUbyhzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIDEsIDAsIGZhbHNlLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wICYmICFpc1ZpcnR1YWwpIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvTG9vcChzd2lwZXIucmVhbEluZGV4LCAwLCBmYWxzZSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCwgMCwgZmFsc2UsIHRydWUpO1xuICAgIH1cbiAgfVxuICBpZiAoc3dpcGVyLmF1dG9wbGF5ICYmIHN3aXBlci5hdXRvcGxheS5ydW5uaW5nICYmIHN3aXBlci5hdXRvcGxheS5wYXVzZWQpIHtcbiAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgc3dpcGVyLmF1dG9wbGF5LnJlc3VtZSgpO1xuICAgIH0sIDUwMCk7XG4gIH1cbiAgLy8gUmV0dXJuIGxvY2tzIGFmdGVyIHJlc2l6ZVxuICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSBhbGxvd1NsaWRlUHJldjtcbiAgc3dpcGVyLmFsbG93U2xpZGVOZXh0ID0gYWxsb3dTbGlkZU5leHQ7XG4gIGlmIChzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc25hcEdyaWQgIT09IHN3aXBlci5zbmFwR3JpZCkge1xuICAgIHN3aXBlci5jaGVja092ZXJmbG93KCk7XG4gIH1cbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/events/onResize.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/events/onScroll.js\":\r\n/*!*****************************************************!*\\\r\n  !*** ./node_modules/swiper/core/events/onScroll.js ***!\r\n  \\*****************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ onScroll)\\n/* harmony export */ });\\nfunction onScroll() {\\n  const swiper = this;\\n  const {\\n    wrapperEl,\\n    rtlTranslate,\\n    enabled\\n  } = swiper;\\n  if (!enabled) return;\\n  swiper.previousTranslate = swiper.translate;\\n  if (swiper.isHorizontal()) {\\n    swiper.translate = -wrapperEl.scrollLeft;\\n  } else {\\n    swiper.translate = -wrapperEl.scrollTop;\\n  }\\n  // eslint-disable-next-line\\n  if (swiper.translate === 0) swiper.translate = 0;\\n  swiper.updateActiveIndex();\\n  swiper.updateSlidesClasses();\\n  let newProgress;\\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\\n  if (translatesDiff === 0) {\\n    newProgress = 0;\\n  } else {\\n    newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\\n  }\\n  if (newProgress !== swiper.progress) {\\n    swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\\n  }\\n  swiper.emit('setTranslate', swiper.translate, false);\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZXZlbnRzL29uU2Nyb2xsLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9ldmVudHMvb25TY3JvbGwuanM/Yjg4OSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvblNjcm9sbCgpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3Qge1xuICAgIHdyYXBwZXJFbCxcbiAgICBydGxUcmFuc2xhdGUsXG4gICAgZW5hYmxlZFxuICB9ID0gc3dpcGVyO1xuICBpZiAoIWVuYWJsZWQpIHJldHVybjtcbiAgc3dpcGVyLnByZXZpb3VzVHJhbnNsYXRlID0gc3dpcGVyLnRyYW5zbGF0ZTtcbiAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgIHN3aXBlci50cmFuc2xhdGUgPSAtd3JhcHBlckVsLnNjcm9sbExlZnQ7XG4gIH0gZWxzZSB7XG4gICAgc3dpcGVyLnRyYW5zbGF0ZSA9IC13cmFwcGVyRWwuc2Nyb2xsVG9wO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBpZiAoc3dpcGVyLnRyYW5zbGF0ZSA9PT0gMCkgc3dpcGVyLnRyYW5zbGF0ZSA9IDA7XG4gIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICBsZXQgbmV3UHJvZ3Jlc3M7XG4gIGNvbnN0IHRyYW5zbGF0ZXNEaWZmID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICBpZiAodHJhbnNsYXRlc0RpZmYgPT09IDApIHtcbiAgICBuZXdQcm9ncmVzcyA9IDA7XG4gIH0gZWxzZSB7XG4gICAgbmV3UHJvZ3Jlc3MgPSAoc3dpcGVyLnRyYW5zbGF0ZSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKSkgLyB0cmFuc2xhdGVzRGlmZjtcbiAgfVxuICBpZiAobmV3UHJvZ3Jlc3MgIT09IHN3aXBlci5wcm9ncmVzcykge1xuICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcyhydGxUcmFuc2xhdGUgPyAtc3dpcGVyLnRyYW5zbGF0ZSA6IHN3aXBlci50cmFuc2xhdGUpO1xuICB9XG4gIHN3aXBlci5lbWl0KCdzZXRUcmFuc2xhdGUnLCBzd2lwZXIudHJhbnNsYXRlLCBmYWxzZSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/events/onScroll.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/events/onTouchEnd.js\":\r\n/*!*******************************************************!*\\\r\n  !*** ./node_modules/swiper/core/events/onTouchEnd.js ***!\r\n  \\*******************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ onTouchEnd)\\n/* harmony export */ });\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\nfunction onTouchEnd(event) {\\n  const swiper = this;\\n  const data = swiper.touchEventsData;\\n  const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === event.pointerId);\\n  if (pointerIndex >= 0) {\\n    data.evCache.splice(pointerIndex, 1);\\n  }\\n  if (['pointercancel', 'pointerout', 'pointerleave'].includes(event.type)) return;\\n  const {\\n    params,\\n    touches,\\n    rtlTranslate: rtl,\\n    slidesGrid,\\n    enabled\\n  } = swiper;\\n  if (!enabled) return;\\n  if (!params.simulateTouch && event.pointerType === 'mouse') return;\\n  let e = event;\\n  if (e.originalEvent) e = e.originalEvent;\\n  if (data.allowTouchCallbacks) {\\n    swiper.emit('touchEnd', e);\\n  }\\n  data.allowTouchCallbacks = false;\\n  if (!data.isTouched) {\\n    if (data.isMoved && params.grabCursor) {\\n      swiper.setGrabCursor(false);\\n    }\\n    data.isMoved = false;\\n    data.startMoving = false;\\n    return;\\n  }\\n  // Return Grab Cursor\\n  if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\\n    swiper.setGrabCursor(false);\\n  }\\n\\n  // Time diff\\n  const touchEndTime = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.now)();\\n  const timeDiff = touchEndTime - data.touchStartTime;\\n\\n  // Tap, doubleTap, Click\\n  if (swiper.allowClick) {\\n    const pathTree = e.path || e.composedPath && e.composedPath();\\n    swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\\n    swiper.emit('tap click', e);\\n    if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\\n      swiper.emit('doubleTap doubleClick', e);\\n    }\\n  }\\n  data.lastClickTime = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.now)();\\n  (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.nextTick)(() => {\\n    if (!swiper.destroyed) swiper.allowClick = true;\\n  });\\n  if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\\n    data.isTouched = false;\\n    data.isMoved = false;\\n    data.startMoving = false;\\n    return;\\n  }\\n  data.isTouched = false;\\n  data.isMoved = false;\\n  data.startMoving = false;\\n  let currentPos;\\n  if (params.followFinger) {\\n    currentPos = rtl ? swiper.translate : -swiper.translate;\\n  } else {\\n    currentPos = -data.currentTranslate;\\n  }\\n  if (params.cssMode) {\\n    return;\\n  }\\n  if (swiper.params.freeMode && params.freeMode.enabled) {\\n    swiper.freeMode.onTouchEnd({\\n      currentPos\\n    });\\n    return;\\n  }\\n\\n  // Find current slide\\n  let stopIndex = 0;\\n  let groupSize = swiper.slidesSizesGrid[0];\\n  for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\\n    const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\\n    if (typeof slidesGrid[i + increment] !== 'undefined') {\\n      if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\\n        stopIndex = i;\\n        groupSize = slidesGrid[i + increment] - slidesGrid[i];\\n      }\\n    } else if (currentPos >= slidesGrid[i]) {\\n      stopIndex = i;\\n      groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\\n    }\\n  }\\n  let rewindFirstIndex = null;\\n  let rewindLastIndex = null;\\n  if (params.rewind) {\\n    if (swiper.isBeginning) {\\n      rewindLastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\\n    } else if (swiper.isEnd) {\\n      rewindFirstIndex = 0;\\n    }\\n  }\\n  // Find current slide size\\n  const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\\n  const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\\n  if (timeDiff > params.longSwipesMs) {\\n    // Long touches\\n    if (!params.longSwipes) {\\n      swiper.slideTo(swiper.activeIndex);\\n      return;\\n    }\\n    if (swiper.swipeDirection === 'next') {\\n      if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\\n    }\\n    if (swiper.swipeDirection === 'prev') {\\n      if (ratio > 1 - params.longSwipesRatio) {\\n        swiper.slideTo(stopIndex + increment);\\n      } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\\n        swiper.slideTo(rewindLastIndex);\\n      } else {\\n        swiper.slideTo(stopIndex);\\n      }\\n    }\\n  } else {\\n    // Short swipes\\n    if (!params.shortSwipes) {\\n      swiper.slideTo(swiper.activeIndex);\\n      return;\\n    }\\n    const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\\n    if (!isNavButtonTarget) {\\n      if (swiper.swipeDirection === 'next') {\\n        swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\\n      }\\n      if (swiper.swipeDirection === 'prev') {\\n        swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\\n      }\\n    } else if (e.target === swiper.navigation.nextEl) {\\n      swiper.slideTo(stopIndex + increment);\\n    } else {\\n      swiper.slideTo(stopIndex);\\n    }\\n  }\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZXZlbnRzL29uVG91Y2hFbmQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBc0Q7QUFDdkM7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLHFEQUFHO0FBQzFCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixxREFBRztBQUMxQixFQUFFLDBEQUFRO0FBQ1Y7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsdUJBQXVCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvSUFBb0k7QUFDcEk7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZXZlbnRzL29uVG91Y2hFbmQuanM/ZTc3OSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBub3csIG5leHRUaWNrIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9uVG91Y2hFbmQoZXZlbnQpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3QgZGF0YSA9IHN3aXBlci50b3VjaEV2ZW50c0RhdGE7XG4gIGNvbnN0IHBvaW50ZXJJbmRleCA9IGRhdGEuZXZDYWNoZS5maW5kSW5kZXgoY2FjaGVkRXYgPT4gY2FjaGVkRXYucG9pbnRlcklkID09PSBldmVudC5wb2ludGVySWQpO1xuICBpZiAocG9pbnRlckluZGV4ID49IDApIHtcbiAgICBkYXRhLmV2Q2FjaGUuc3BsaWNlKHBvaW50ZXJJbmRleCwgMSk7XG4gIH1cbiAgaWYgKFsncG9pbnRlcmNhbmNlbCcsICdwb2ludGVyb3V0JywgJ3BvaW50ZXJsZWF2ZSddLmluY2x1ZGVzKGV2ZW50LnR5cGUpKSByZXR1cm47XG4gIGNvbnN0IHtcbiAgICBwYXJhbXMsXG4gICAgdG91Y2hlcyxcbiAgICBydGxUcmFuc2xhdGU6IHJ0bCxcbiAgICBzbGlkZXNHcmlkLFxuICAgIGVuYWJsZWRcbiAgfSA9IHN3aXBlcjtcbiAgaWYgKCFlbmFibGVkKSByZXR1cm47XG4gIGlmICghcGFyYW1zLnNpbXVsYXRlVG91Y2ggJiYgZXZlbnQucG9pbnRlclR5cGUgPT09ICdtb3VzZScpIHJldHVybjtcbiAgbGV0IGUgPSBldmVudDtcbiAgaWYgKGUub3JpZ2luYWxFdmVudCkgZSA9IGUub3JpZ2luYWxFdmVudDtcbiAgaWYgKGRhdGEuYWxsb3dUb3VjaENhbGxiYWNrcykge1xuICAgIHN3aXBlci5lbWl0KCd0b3VjaEVuZCcsIGUpO1xuICB9XG4gIGRhdGEuYWxsb3dUb3VjaENhbGxiYWNrcyA9IGZhbHNlO1xuICBpZiAoIWRhdGEuaXNUb3VjaGVkKSB7XG4gICAgaWYgKGRhdGEuaXNNb3ZlZCAmJiBwYXJhbXMuZ3JhYkN1cnNvcikge1xuICAgICAgc3dpcGVyLnNldEdyYWJDdXJzb3IoZmFsc2UpO1xuICAgIH1cbiAgICBkYXRhLmlzTW92ZWQgPSBmYWxzZTtcbiAgICBkYXRhLnN0YXJ0TW92aW5nID0gZmFsc2U7XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIFJldHVybiBHcmFiIEN1cnNvclxuICBpZiAocGFyYW1zLmdyYWJDdXJzb3IgJiYgZGF0YS5pc01vdmVkICYmIGRhdGEuaXNUb3VjaGVkICYmIChzd2lwZXIuYWxsb3dTbGlkZU5leHQgPT09IHRydWUgfHwgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID09PSB0cnVlKSkge1xuICAgIHN3aXBlci5zZXRHcmFiQ3Vyc29yKGZhbHNlKTtcbiAgfVxuXG4gIC8vIFRpbWUgZGlmZlxuICBjb25zdCB0b3VjaEVuZFRpbWUgPSBub3coKTtcbiAgY29uc3QgdGltZURpZmYgPSB0b3VjaEVuZFRpbWUgLSBkYXRhLnRvdWNoU3RhcnRUaW1lO1xuXG4gIC8vIFRhcCwgZG91YmxlVGFwLCBDbGlja1xuICBpZiAoc3dpcGVyLmFsbG93Q2xpY2spIHtcbiAgICBjb25zdCBwYXRoVHJlZSA9IGUucGF0aCB8fCBlLmNvbXBvc2VkUGF0aCAmJiBlLmNvbXBvc2VkUGF0aCgpO1xuICAgIHN3aXBlci51cGRhdGVDbGlja2VkU2xpZGUocGF0aFRyZWUgJiYgcGF0aFRyZWVbMF0gfHwgZS50YXJnZXQpO1xuICAgIHN3aXBlci5lbWl0KCd0YXAgY2xpY2snLCBlKTtcbiAgICBpZiAodGltZURpZmYgPCAzMDAgJiYgdG91Y2hFbmRUaW1lIC0gZGF0YS5sYXN0Q2xpY2tUaW1lIDwgMzAwKSB7XG4gICAgICBzd2lwZXIuZW1pdCgnZG91YmxlVGFwIGRvdWJsZUNsaWNrJywgZSk7XG4gICAgfVxuICB9XG4gIGRhdGEubGFzdENsaWNrVGltZSA9IG5vdygpO1xuICBuZXh0VGljaygoKSA9PiB7XG4gICAgaWYgKCFzd2lwZXIuZGVzdHJveWVkKSBzd2lwZXIuYWxsb3dDbGljayA9IHRydWU7XG4gIH0pO1xuICBpZiAoIWRhdGEuaXNUb3VjaGVkIHx8ICFkYXRhLmlzTW92ZWQgfHwgIXN3aXBlci5zd2lwZURpcmVjdGlvbiB8fCB0b3VjaGVzLmRpZmYgPT09IDAgfHwgZGF0YS5jdXJyZW50VHJhbnNsYXRlID09PSBkYXRhLnN0YXJ0VHJhbnNsYXRlKSB7XG4gICAgZGF0YS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICBkYXRhLmlzTW92ZWQgPSBmYWxzZTtcbiAgICBkYXRhLnN0YXJ0TW92aW5nID0gZmFsc2U7XG4gICAgcmV0dXJuO1xuICB9XG4gIGRhdGEuaXNUb3VjaGVkID0gZmFsc2U7XG4gIGRhdGEuaXNNb3ZlZCA9IGZhbHNlO1xuICBkYXRhLnN0YXJ0TW92aW5nID0gZmFsc2U7XG4gIGxldCBjdXJyZW50UG9zO1xuICBpZiAocGFyYW1zLmZvbGxvd0Zpbmdlcikge1xuICAgIGN1cnJlbnRQb3MgPSBydGwgPyBzd2lwZXIudHJhbnNsYXRlIDogLXN3aXBlci50cmFuc2xhdGU7XG4gIH0gZWxzZSB7XG4gICAgY3VycmVudFBvcyA9IC1kYXRhLmN1cnJlbnRUcmFuc2xhdGU7XG4gIH1cbiAgaWYgKHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChzd2lwZXIucGFyYW1zLmZyZWVNb2RlICYmIHBhcmFtcy5mcmVlTW9kZS5lbmFibGVkKSB7XG4gICAgc3dpcGVyLmZyZWVNb2RlLm9uVG91Y2hFbmQoe1xuICAgICAgY3VycmVudFBvc1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZpbmQgY3VycmVudCBzbGlkZVxuICBsZXQgc3RvcEluZGV4ID0gMDtcbiAgbGV0IGdyb3VwU2l6ZSA9IHN3aXBlci5zbGlkZXNTaXplc0dyaWRbMF07XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpZGVzR3JpZC5sZW5ndGg7IGkgKz0gaSA8IHBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAgPyAxIDogcGFyYW1zLnNsaWRlc1Blckdyb3VwKSB7XG4gICAgY29uc3QgaW5jcmVtZW50ID0gaSA8IHBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAgLSAxID8gMSA6IHBhcmFtcy5zbGlkZXNQZXJHcm91cDtcbiAgICBpZiAodHlwZW9mIHNsaWRlc0dyaWRbaSArIGluY3JlbWVudF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoY3VycmVudFBvcyA+PSBzbGlkZXNHcmlkW2ldICYmIGN1cnJlbnRQb3MgPCBzbGlkZXNHcmlkW2kgKyBpbmNyZW1lbnRdKSB7XG4gICAgICAgIHN0b3BJbmRleCA9IGk7XG4gICAgICAgIGdyb3VwU2l6ZSA9IHNsaWRlc0dyaWRbaSArIGluY3JlbWVudF0gLSBzbGlkZXNHcmlkW2ldO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY3VycmVudFBvcyA+PSBzbGlkZXNHcmlkW2ldKSB7XG4gICAgICBzdG9wSW5kZXggPSBpO1xuICAgICAgZ3JvdXBTaXplID0gc2xpZGVzR3JpZFtzbGlkZXNHcmlkLmxlbmd0aCAtIDFdIC0gc2xpZGVzR3JpZFtzbGlkZXNHcmlkLmxlbmd0aCAtIDJdO1xuICAgIH1cbiAgfVxuICBsZXQgcmV3aW5kRmlyc3RJbmRleCA9IG51bGw7XG4gIGxldCByZXdpbmRMYXN0SW5kZXggPSBudWxsO1xuICBpZiAocGFyYW1zLnJld2luZCkge1xuICAgIGlmIChzd2lwZXIuaXNCZWdpbm5pbmcpIHtcbiAgICAgIHJld2luZExhc3RJbmRleCA9IHN3aXBlci5wYXJhbXMudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCAmJiBzd2lwZXIudmlydHVhbCA/IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggLSAxIDogc3dpcGVyLnNsaWRlcy5sZW5ndGggLSAxO1xuICAgIH0gZWxzZSBpZiAoc3dpcGVyLmlzRW5kKSB7XG4gICAgICByZXdpbmRGaXJzdEluZGV4ID0gMDtcbiAgICB9XG4gIH1cbiAgLy8gRmluZCBjdXJyZW50IHNsaWRlIHNpemVcbiAgY29uc3QgcmF0aW8gPSAoY3VycmVudFBvcyAtIHNsaWRlc0dyaWRbc3RvcEluZGV4XSkgLyBncm91cFNpemU7XG4gIGNvbnN0IGluY3JlbWVudCA9IHN0b3BJbmRleCA8IHBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAgLSAxID8gMSA6IHBhcmFtcy5zbGlkZXNQZXJHcm91cDtcbiAgaWYgKHRpbWVEaWZmID4gcGFyYW1zLmxvbmdTd2lwZXNNcykge1xuICAgIC8vIExvbmcgdG91Y2hlc1xuICAgIGlmICghcGFyYW1zLmxvbmdTd2lwZXMpIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPT09ICduZXh0Jykge1xuICAgICAgaWYgKHJhdGlvID49IHBhcmFtcy5sb25nU3dpcGVzUmF0aW8pIHN3aXBlci5zbGlkZVRvKHBhcmFtcy5yZXdpbmQgJiYgc3dpcGVyLmlzRW5kID8gcmV3aW5kRmlyc3RJbmRleCA6IHN0b3BJbmRleCArIGluY3JlbWVudCk7ZWxzZSBzd2lwZXIuc2xpZGVUbyhzdG9wSW5kZXgpO1xuICAgIH1cbiAgICBpZiAoc3dpcGVyLnN3aXBlRGlyZWN0aW9uID09PSAncHJldicpIHtcbiAgICAgIGlmIChyYXRpbyA+IDEgLSBwYXJhbXMubG9uZ1N3aXBlc1JhdGlvKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN0b3BJbmRleCArIGluY3JlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKHJld2luZExhc3RJbmRleCAhPT0gbnVsbCAmJiByYXRpbyA8IDAgJiYgTWF0aC5hYnMocmF0aW8pID4gcGFyYW1zLmxvbmdTd2lwZXNSYXRpbykge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhyZXdpbmRMYXN0SW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gU2hvcnQgc3dpcGVzXG4gICAgaWYgKCFwYXJhbXMuc2hvcnRTd2lwZXMpIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlzTmF2QnV0dG9uVGFyZ2V0ID0gc3dpcGVyLm5hdmlnYXRpb24gJiYgKGUudGFyZ2V0ID09PSBzd2lwZXIubmF2aWdhdGlvbi5uZXh0RWwgfHwgZS50YXJnZXQgPT09IHN3aXBlci5uYXZpZ2F0aW9uLnByZXZFbCk7XG4gICAgaWYgKCFpc05hdkJ1dHRvblRhcmdldCkge1xuICAgICAgaWYgKHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ25leHQnKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHJld2luZEZpcnN0SW5kZXggIT09IG51bGwgPyByZXdpbmRGaXJzdEluZGV4IDogc3RvcEluZGV4ICsgaW5jcmVtZW50KTtcbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIuc3dpcGVEaXJlY3Rpb24gPT09ICdwcmV2Jykge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhyZXdpbmRMYXN0SW5kZXggIT09IG51bGwgPyByZXdpbmRMYXN0SW5kZXggOiBzdG9wSW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZS50YXJnZXQgPT09IHN3aXBlci5uYXZpZ2F0aW9uLm5leHRFbCkge1xuICAgICAgc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4ICsgaW5jcmVtZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLnNsaWRlVG8oc3RvcEluZGV4KTtcbiAgICB9XG4gIH1cbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/events/onTouchEnd.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/events/onTouchMove.js\":\r\n/*!********************************************************!*\\\r\n  !*** ./node_modules/swiper/core/events/onTouchMove.js ***!\r\n  \\********************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ onTouchMove)\\n/* harmony export */ });\\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \\\"./node_modules/ssr-window/ssr-window.esm.js\\\");\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\n\\nfunction onTouchMove(event) {\\n  const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)();\\n  const swiper = this;\\n  const data = swiper.touchEventsData;\\n  const {\\n    params,\\n    touches,\\n    rtlTranslate: rtl,\\n    enabled\\n  } = swiper;\\n  if (!enabled) return;\\n  if (!params.simulateTouch && event.pointerType === 'mouse') return;\\n  let e = event;\\n  if (e.originalEvent) e = e.originalEvent;\\n  if (!data.isTouched) {\\n    if (data.startMoving && data.isScrolling) {\\n      swiper.emit('touchMoveOpposite', e);\\n    }\\n    return;\\n  }\\n  const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\\n  if (pointerIndex >= 0) data.evCache[pointerIndex] = e;\\n  const targetTouch = data.evCache.length > 1 ? data.evCache[0] : e;\\n  const pageX = targetTouch.pageX;\\n  const pageY = targetTouch.pageY;\\n  if (e.preventedByNestedSwiper) {\\n    touches.startX = pageX;\\n    touches.startY = pageY;\\n    return;\\n  }\\n  if (!swiper.allowTouchMove) {\\n    if (!e.target.matches(data.focusableElements)) {\\n      swiper.allowClick = false;\\n    }\\n    if (data.isTouched) {\\n      Object.assign(touches, {\\n        startX: pageX,\\n        startY: pageY,\\n        prevX: swiper.touches.currentX,\\n        prevY: swiper.touches.currentY,\\n        currentX: pageX,\\n        currentY: pageY\\n      });\\n      data.touchStartTime = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.now)();\\n    }\\n    return;\\n  }\\n  if (params.touchReleaseOnEdges && !params.loop) {\\n    if (swiper.isVertical()) {\\n      // Vertical\\n      if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\\n        data.isTouched = false;\\n        data.isMoved = false;\\n        return;\\n      }\\n    } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\\n      return;\\n    }\\n  }\\n  if (document.activeElement) {\\n    if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\\n      data.isMoved = true;\\n      swiper.allowClick = false;\\n      return;\\n    }\\n  }\\n  if (data.allowTouchCallbacks) {\\n    swiper.emit('touchMove', e);\\n  }\\n  if (e.targetTouches && e.targetTouches.length > 1) return;\\n  touches.currentX = pageX;\\n  touches.currentY = pageY;\\n  const diffX = touches.currentX - touches.startX;\\n  const diffY = touches.currentY - touches.startY;\\n  if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\\n  if (typeof data.isScrolling === 'undefined') {\\n    let touchAngle;\\n    if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\\n      data.isScrolling = false;\\n    } else {\\n      // eslint-disable-next-line\\n      if (diffX * diffX + diffY * diffY >= 25) {\\n        touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\\n        data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\\n      }\\n    }\\n  }\\n  if (data.isScrolling) {\\n    swiper.emit('touchMoveOpposite', e);\\n  }\\n  if (typeof data.startMoving === 'undefined') {\\n    if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\\n      data.startMoving = true;\\n    }\\n  }\\n  if (data.isScrolling || swiper.zoom && swiper.params.zoom && swiper.params.zoom.enabled && data.evCache.length > 1) {\\n    data.isTouched = false;\\n    return;\\n  }\\n  if (!data.startMoving) {\\n    return;\\n  }\\n  swiper.allowClick = false;\\n  if (!params.cssMode && e.cancelable) {\\n    e.preventDefault();\\n  }\\n  if (params.touchMoveStopPropagation && !params.nested) {\\n    e.stopPropagation();\\n  }\\n  let diff = swiper.isHorizontal() ? diffX : diffY;\\n  let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\\n  if (params.oneWayMovement) {\\n    diff = Math.abs(diff) * (rtl ? 1 : -1);\\n    touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\\n  }\\n  touches.diff = diff;\\n  diff *= params.touchRatio;\\n  if (rtl) {\\n    diff = -diff;\\n    touchesDiff = -touchesDiff;\\n  }\\n  const prevTouchesDirection = swiper.touchesDirection;\\n  swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\\n  swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\\n  const isLoop = swiper.params.loop && !params.cssMode;\\n  if (!data.isMoved) {\\n    if (isLoop) {\\n      swiper.loopFix({\\n        direction: swiper.swipeDirection\\n      });\\n    }\\n    data.startTranslate = swiper.getTranslate();\\n    swiper.setTransition(0);\\n    if (swiper.animating) {\\n      const evt = new window.CustomEvent('transitionend', {\\n        bubbles: true,\\n        cancelable: true\\n      });\\n      swiper.wrapperEl.dispatchEvent(evt);\\n    }\\n    data.allowMomentumBounce = false;\\n    // Grab Cursor\\n    if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\\n      swiper.setGrabCursor(true);\\n    }\\n    swiper.emit('sliderFirstMove', e);\\n  }\\n  let loopFixed;\\n  if (data.isMoved && prevTouchesDirection !== swiper.touchesDirection && isLoop && Math.abs(diff) >= 1) {\\n    // need another loop fix\\n    swiper.loopFix({\\n      direction: swiper.swipeDirection,\\n      setTranslate: true\\n    });\\n    loopFixed = true;\\n  }\\n  swiper.emit('sliderMove', e);\\n  data.isMoved = true;\\n  data.currentTranslate = diff + data.startTranslate;\\n  let disableParentSwiper = true;\\n  let resistanceRatio = params.resistanceRatio;\\n  if (params.touchReleaseOnEdges) {\\n    resistanceRatio = 0;\\n  }\\n  if (diff > 0) {\\n    if (isLoop && !loopFixed && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.size / 2 : swiper.minTranslate())) {\\n      swiper.loopFix({\\n        direction: 'prev',\\n        setTranslate: true,\\n        activeSlideIndex: 0\\n      });\\n    }\\n    if (data.currentTranslate > swiper.minTranslate()) {\\n      disableParentSwiper = false;\\n      if (params.resistance) {\\n        data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\\n      }\\n    }\\n  } else if (diff < 0) {\\n    if (isLoop && !loopFixed && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.size / 2 : swiper.maxTranslate())) {\\n      swiper.loopFix({\\n        direction: 'next',\\n        setTranslate: true,\\n        activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\\n      });\\n    }\\n    if (data.currentTranslate < swiper.maxTranslate()) {\\n      disableParentSwiper = false;\\n      if (params.resistance) {\\n        data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\\n      }\\n    }\\n  }\\n  if (disableParentSwiper) {\\n    e.preventedByNestedSwiper = true;\\n  }\\n\\n  // Directions locks\\n  if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\\n    data.currentTranslate = data.startTranslate;\\n  }\\n  if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\\n    data.currentTranslate = data.startTranslate;\\n  }\\n  if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\\n    data.currentTranslate = data.startTranslate;\\n  }\\n\\n  // Threshold\\n  if (params.threshold > 0) {\\n    if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\\n      if (!data.allowThresholdMove) {\\n        data.allowThresholdMove = true;\\n        touches.startX = touches.currentX;\\n        touches.startY = touches.currentY;\\n        data.currentTranslate = data.startTranslate;\\n        touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\\n        return;\\n      }\\n    } else {\\n      data.currentTranslate = data.startTranslate;\\n      return;\\n    }\\n  }\\n  if (!params.followFinger || params.cssMode) return;\\n\\n  // Update active index in free mode\\n  if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\\n    swiper.updateActiveIndex();\\n    swiper.updateSlidesClasses();\\n  }\\n  if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\\n    swiper.freeMode.onTouchMove();\\n  }\\n  // Update progress\\n  swiper.updateProgress(data.currentTranslate);\\n  // Update translate\\n  swiper.setTranslate(data.currentTranslate);\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZXZlbnRzL29uVG91Y2hNb3ZlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF5QztBQUNHO0FBQzdCO0FBQ2YsbUJBQW1CLHVEQUFXO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsNEJBQTRCLHFEQUFHO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2V2ZW50cy9vblRvdWNoTW92ZS5qcz8yZmY0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldERvY3VtZW50IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5pbXBvcnQgeyBub3cgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb25Ub3VjaE1vdmUoZXZlbnQpIHtcbiAgY29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCBkYXRhID0gc3dpcGVyLnRvdWNoRXZlbnRzRGF0YTtcbiAgY29uc3Qge1xuICAgIHBhcmFtcyxcbiAgICB0b3VjaGVzLFxuICAgIHJ0bFRyYW5zbGF0ZTogcnRsLFxuICAgIGVuYWJsZWRcbiAgfSA9IHN3aXBlcjtcbiAgaWYgKCFlbmFibGVkKSByZXR1cm47XG4gIGlmICghcGFyYW1zLnNpbXVsYXRlVG91Y2ggJiYgZXZlbnQucG9pbnRlclR5cGUgPT09ICdtb3VzZScpIHJldHVybjtcbiAgbGV0IGUgPSBldmVudDtcbiAgaWYgKGUub3JpZ2luYWxFdmVudCkgZSA9IGUub3JpZ2luYWxFdmVudDtcbiAgaWYgKCFkYXRhLmlzVG91Y2hlZCkge1xuICAgIGlmIChkYXRhLnN0YXJ0TW92aW5nICYmIGRhdGEuaXNTY3JvbGxpbmcpIHtcbiAgICAgIHN3aXBlci5lbWl0KCd0b3VjaE1vdmVPcHBvc2l0ZScsIGUpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgcG9pbnRlckluZGV4ID0gZGF0YS5ldkNhY2hlLmZpbmRJbmRleChjYWNoZWRFdiA9PiBjYWNoZWRFdi5wb2ludGVySWQgPT09IGUucG9pbnRlcklkKTtcbiAgaWYgKHBvaW50ZXJJbmRleCA+PSAwKSBkYXRhLmV2Q2FjaGVbcG9pbnRlckluZGV4XSA9IGU7XG4gIGNvbnN0IHRhcmdldFRvdWNoID0gZGF0YS5ldkNhY2hlLmxlbmd0aCA+IDEgPyBkYXRhLmV2Q2FjaGVbMF0gOiBlO1xuICBjb25zdCBwYWdlWCA9IHRhcmdldFRvdWNoLnBhZ2VYO1xuICBjb25zdCBwYWdlWSA9IHRhcmdldFRvdWNoLnBhZ2VZO1xuICBpZiAoZS5wcmV2ZW50ZWRCeU5lc3RlZFN3aXBlcikge1xuICAgIHRvdWNoZXMuc3RhcnRYID0gcGFnZVg7XG4gICAgdG91Y2hlcy5zdGFydFkgPSBwYWdlWTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFzd2lwZXIuYWxsb3dUb3VjaE1vdmUpIHtcbiAgICBpZiAoIWUudGFyZ2V0Lm1hdGNoZXMoZGF0YS5mb2N1c2FibGVFbGVtZW50cykpIHtcbiAgICAgIHN3aXBlci5hbGxvd0NsaWNrID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChkYXRhLmlzVG91Y2hlZCkge1xuICAgICAgT2JqZWN0LmFzc2lnbih0b3VjaGVzLCB7XG4gICAgICAgIHN0YXJ0WDogcGFnZVgsXG4gICAgICAgIHN0YXJ0WTogcGFnZVksXG4gICAgICAgIHByZXZYOiBzd2lwZXIudG91Y2hlcy5jdXJyZW50WCxcbiAgICAgICAgcHJldlk6IHN3aXBlci50b3VjaGVzLmN1cnJlbnRZLFxuICAgICAgICBjdXJyZW50WDogcGFnZVgsXG4gICAgICAgIGN1cnJlbnRZOiBwYWdlWVxuICAgICAgfSk7XG4gICAgICBkYXRhLnRvdWNoU3RhcnRUaW1lID0gbm93KCk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuICBpZiAocGFyYW1zLnRvdWNoUmVsZWFzZU9uRWRnZXMgJiYgIXBhcmFtcy5sb29wKSB7XG4gICAgaWYgKHN3aXBlci5pc1ZlcnRpY2FsKCkpIHtcbiAgICAgIC8vIFZlcnRpY2FsXG4gICAgICBpZiAocGFnZVkgPCB0b3VjaGVzLnN0YXJ0WSAmJiBzd2lwZXIudHJhbnNsYXRlIDw9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSB8fCBwYWdlWSA+IHRvdWNoZXMuc3RhcnRZICYmIHN3aXBlci50cmFuc2xhdGUgPj0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSB7XG4gICAgICAgIGRhdGEuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICAgIGRhdGEuaXNNb3ZlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwYWdlWCA8IHRvdWNoZXMuc3RhcnRYICYmIHN3aXBlci50cmFuc2xhdGUgPD0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpIHx8IHBhZ2VYID4gdG91Y2hlcy5zdGFydFggJiYgc3dpcGVyLnRyYW5zbGF0ZSA+PSBzd2lwZXIubWluVHJhbnNsYXRlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICBpZiAoZS50YXJnZXQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgZS50YXJnZXQubWF0Y2hlcyhkYXRhLmZvY3VzYWJsZUVsZW1lbnRzKSkge1xuICAgICAgZGF0YS5pc01vdmVkID0gdHJ1ZTtcbiAgICAgIHN3aXBlci5hbGxvd0NsaWNrID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGlmIChkYXRhLmFsbG93VG91Y2hDYWxsYmFja3MpIHtcbiAgICBzd2lwZXIuZW1pdCgndG91Y2hNb3ZlJywgZSk7XG4gIH1cbiAgaWYgKGUudGFyZ2V0VG91Y2hlcyAmJiBlLnRhcmdldFRvdWNoZXMubGVuZ3RoID4gMSkgcmV0dXJuO1xuICB0b3VjaGVzLmN1cnJlbnRYID0gcGFnZVg7XG4gIHRvdWNoZXMuY3VycmVudFkgPSBwYWdlWTtcbiAgY29uc3QgZGlmZlggPSB0b3VjaGVzLmN1cnJlbnRYIC0gdG91Y2hlcy5zdGFydFg7XG4gIGNvbnN0IGRpZmZZID0gdG91Y2hlcy5jdXJyZW50WSAtIHRvdWNoZXMuc3RhcnRZO1xuICBpZiAoc3dpcGVyLnBhcmFtcy50aHJlc2hvbGQgJiYgTWF0aC5zcXJ0KGRpZmZYICoqIDIgKyBkaWZmWSAqKiAyKSA8IHN3aXBlci5wYXJhbXMudGhyZXNob2xkKSByZXR1cm47XG4gIGlmICh0eXBlb2YgZGF0YS5pc1Njcm9sbGluZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBsZXQgdG91Y2hBbmdsZTtcbiAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpICYmIHRvdWNoZXMuY3VycmVudFkgPT09IHRvdWNoZXMuc3RhcnRZIHx8IHN3aXBlci5pc1ZlcnRpY2FsKCkgJiYgdG91Y2hlcy5jdXJyZW50WCA9PT0gdG91Y2hlcy5zdGFydFgpIHtcbiAgICAgIGRhdGEuaXNTY3JvbGxpbmcgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBpZiAoZGlmZlggKiBkaWZmWCArIGRpZmZZICogZGlmZlkgPj0gMjUpIHtcbiAgICAgICAgdG91Y2hBbmdsZSA9IE1hdGguYXRhbjIoTWF0aC5hYnMoZGlmZlkpLCBNYXRoLmFicyhkaWZmWCkpICogMTgwIC8gTWF0aC5QSTtcbiAgICAgICAgZGF0YS5pc1Njcm9sbGluZyA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHRvdWNoQW5nbGUgPiBwYXJhbXMudG91Y2hBbmdsZSA6IDkwIC0gdG91Y2hBbmdsZSA+IHBhcmFtcy50b3VjaEFuZ2xlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoZGF0YS5pc1Njcm9sbGluZykge1xuICAgIHN3aXBlci5lbWl0KCd0b3VjaE1vdmVPcHBvc2l0ZScsIGUpO1xuICB9XG4gIGlmICh0eXBlb2YgZGF0YS5zdGFydE1vdmluZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAodG91Y2hlcy5jdXJyZW50WCAhPT0gdG91Y2hlcy5zdGFydFggfHwgdG91Y2hlcy5jdXJyZW50WSAhPT0gdG91Y2hlcy5zdGFydFkpIHtcbiAgICAgIGRhdGEuc3RhcnRNb3ZpbmcgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoZGF0YS5pc1Njcm9sbGluZyB8fCBzd2lwZXIuem9vbSAmJiBzd2lwZXIucGFyYW1zLnpvb20gJiYgc3dpcGVyLnBhcmFtcy56b29tLmVuYWJsZWQgJiYgZGF0YS5ldkNhY2hlLmxlbmd0aCA+IDEpIHtcbiAgICBkYXRhLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIWRhdGEuc3RhcnRNb3ZpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgc3dpcGVyLmFsbG93Q2xpY2sgPSBmYWxzZTtcbiAgaWYgKCFwYXJhbXMuY3NzTW9kZSAmJiBlLmNhbmNlbGFibGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbiAgaWYgKHBhcmFtcy50b3VjaE1vdmVTdG9wUHJvcGFnYXRpb24gJiYgIXBhcmFtcy5uZXN0ZWQpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG4gIGxldCBkaWZmID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gZGlmZlggOiBkaWZmWTtcbiAgbGV0IHRvdWNoZXNEaWZmID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gdG91Y2hlcy5jdXJyZW50WCAtIHRvdWNoZXMucHJldmlvdXNYIDogdG91Y2hlcy5jdXJyZW50WSAtIHRvdWNoZXMucHJldmlvdXNZO1xuICBpZiAocGFyYW1zLm9uZVdheU1vdmVtZW50KSB7XG4gICAgZGlmZiA9IE1hdGguYWJzKGRpZmYpICogKHJ0bCA/IDEgOiAtMSk7XG4gICAgdG91Y2hlc0RpZmYgPSBNYXRoLmFicyh0b3VjaGVzRGlmZikgKiAocnRsID8gMSA6IC0xKTtcbiAgfVxuICB0b3VjaGVzLmRpZmYgPSBkaWZmO1xuICBkaWZmICo9IHBhcmFtcy50b3VjaFJhdGlvO1xuICBpZiAocnRsKSB7XG4gICAgZGlmZiA9IC1kaWZmO1xuICAgIHRvdWNoZXNEaWZmID0gLXRvdWNoZXNEaWZmO1xuICB9XG4gIGNvbnN0IHByZXZUb3VjaGVzRGlyZWN0aW9uID0gc3dpcGVyLnRvdWNoZXNEaXJlY3Rpb247XG4gIHN3aXBlci5zd2lwZURpcmVjdGlvbiA9IGRpZmYgPiAwID8gJ3ByZXYnIDogJ25leHQnO1xuICBzd2lwZXIudG91Y2hlc0RpcmVjdGlvbiA9IHRvdWNoZXNEaWZmID4gMCA/ICdwcmV2JyA6ICduZXh0JztcbiAgY29uc3QgaXNMb29wID0gc3dpcGVyLnBhcmFtcy5sb29wICYmICFwYXJhbXMuY3NzTW9kZTtcbiAgaWYgKCFkYXRhLmlzTW92ZWQpIHtcbiAgICBpZiAoaXNMb29wKSB7XG4gICAgICBzd2lwZXIubG9vcEZpeCh7XG4gICAgICAgIGRpcmVjdGlvbjogc3dpcGVyLnN3aXBlRGlyZWN0aW9uXG4gICAgICB9KTtcbiAgICB9XG4gICAgZGF0YS5zdGFydFRyYW5zbGF0ZSA9IHN3aXBlci5nZXRUcmFuc2xhdGUoKTtcbiAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbigwKTtcbiAgICBpZiAoc3dpcGVyLmFuaW1hdGluZykge1xuICAgICAgY29uc3QgZXZ0ID0gbmV3IHdpbmRvdy5DdXN0b21FdmVudCgndHJhbnNpdGlvbmVuZCcsIHtcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBzd2lwZXIud3JhcHBlckVsLmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICB9XG4gICAgZGF0YS5hbGxvd01vbWVudHVtQm91bmNlID0gZmFsc2U7XG4gICAgLy8gR3JhYiBDdXJzb3JcbiAgICBpZiAocGFyYW1zLmdyYWJDdXJzb3IgJiYgKHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9PT0gdHJ1ZSB8fCBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPT09IHRydWUpKSB7XG4gICAgICBzd2lwZXIuc2V0R3JhYkN1cnNvcih0cnVlKTtcbiAgICB9XG4gICAgc3dpcGVyLmVtaXQoJ3NsaWRlckZpcnN0TW92ZScsIGUpO1xuICB9XG4gIGxldCBsb29wRml4ZWQ7XG4gIGlmIChkYXRhLmlzTW92ZWQgJiYgcHJldlRvdWNoZXNEaXJlY3Rpb24gIT09IHN3aXBlci50b3VjaGVzRGlyZWN0aW9uICYmIGlzTG9vcCAmJiBNYXRoLmFicyhkaWZmKSA+PSAxKSB7XG4gICAgLy8gbmVlZCBhbm90aGVyIGxvb3AgZml4XG4gICAgc3dpcGVyLmxvb3BGaXgoe1xuICAgICAgZGlyZWN0aW9uOiBzd2lwZXIuc3dpcGVEaXJlY3Rpb24sXG4gICAgICBzZXRUcmFuc2xhdGU6IHRydWVcbiAgICB9KTtcbiAgICBsb29wRml4ZWQgPSB0cnVlO1xuICB9XG4gIHN3aXBlci5lbWl0KCdzbGlkZXJNb3ZlJywgZSk7XG4gIGRhdGEuaXNNb3ZlZCA9IHRydWU7XG4gIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRpZmYgKyBkYXRhLnN0YXJ0VHJhbnNsYXRlO1xuICBsZXQgZGlzYWJsZVBhcmVudFN3aXBlciA9IHRydWU7XG4gIGxldCByZXNpc3RhbmNlUmF0aW8gPSBwYXJhbXMucmVzaXN0YW5jZVJhdGlvO1xuICBpZiAocGFyYW1zLnRvdWNoUmVsZWFzZU9uRWRnZXMpIHtcbiAgICByZXNpc3RhbmNlUmF0aW8gPSAwO1xuICB9XG4gIGlmIChkaWZmID4gMCkge1xuICAgIGlmIChpc0xvb3AgJiYgIWxvb3BGaXhlZCAmJiBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzID8gc3dpcGVyLm1pblRyYW5zbGF0ZSgpIC0gc3dpcGVyLnNpemUgLyAyIDogc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSkge1xuICAgICAgc3dpcGVyLmxvb3BGaXgoe1xuICAgICAgICBkaXJlY3Rpb246ICdwcmV2JyxcbiAgICAgICAgc2V0VHJhbnNsYXRlOiB0cnVlLFxuICAgICAgICBhY3RpdmVTbGlkZUluZGV4OiAwXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGRhdGEuY3VycmVudFRyYW5zbGF0ZSA+IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgZGlzYWJsZVBhcmVudFN3aXBlciA9IGZhbHNlO1xuICAgICAgaWYgKHBhcmFtcy5yZXNpc3RhbmNlKSB7XG4gICAgICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IHN3aXBlci5taW5UcmFuc2xhdGUoKSAtIDEgKyAoLXN3aXBlci5taW5UcmFuc2xhdGUoKSArIGRhdGEuc3RhcnRUcmFuc2xhdGUgKyBkaWZmKSAqKiByZXNpc3RhbmNlUmF0aW87XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGRpZmYgPCAwKSB7XG4gICAgaWYgKGlzTG9vcCAmJiAhbG9vcEZpeGVkICYmIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA8IChwYXJhbXMuY2VudGVyZWRTbGlkZXMgPyBzd2lwZXIubWF4VHJhbnNsYXRlKCkgKyBzd2lwZXIuc2l6ZSAvIDIgOiBzd2lwZXIubWF4VHJhbnNsYXRlKCkpKSB7XG4gICAgICBzd2lwZXIubG9vcEZpeCh7XG4gICAgICAgIGRpcmVjdGlvbjogJ25leHQnLFxuICAgICAgICBzZXRUcmFuc2xhdGU6IHRydWUsXG4gICAgICAgIGFjdGl2ZVNsaWRlSW5kZXg6IHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gKHBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSAnYXV0bycgPyBzd2lwZXIuc2xpZGVzUGVyVmlld0R5bmFtaWMoKSA6IE1hdGguY2VpbChwYXJzZUZsb2F0KHBhcmFtcy5zbGlkZXNQZXJWaWV3LCAxMCkpKVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPCBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHtcbiAgICAgIGRpc2FibGVQYXJlbnRTd2lwZXIgPSBmYWxzZTtcbiAgICAgIGlmIChwYXJhbXMucmVzaXN0YW5jZSkge1xuICAgICAgICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBzd2lwZXIubWF4VHJhbnNsYXRlKCkgKyAxIC0gKHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIGRhdGEuc3RhcnRUcmFuc2xhdGUgLSBkaWZmKSAqKiByZXNpc3RhbmNlUmF0aW87XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChkaXNhYmxlUGFyZW50U3dpcGVyKSB7XG4gICAgZS5wcmV2ZW50ZWRCeU5lc3RlZFN3aXBlciA9IHRydWU7XG4gIH1cblxuICAvLyBEaXJlY3Rpb25zIGxvY2tzXG4gIGlmICghc3dpcGVyLmFsbG93U2xpZGVOZXh0ICYmIHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ25leHQnICYmIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA8IGRhdGEuc3RhcnRUcmFuc2xhdGUpIHtcbiAgICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBkYXRhLnN0YXJ0VHJhbnNsYXRlO1xuICB9XG4gIGlmICghc3dpcGVyLmFsbG93U2xpZGVQcmV2ICYmIHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ3ByZXYnICYmIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA+IGRhdGEuc3RhcnRUcmFuc2xhdGUpIHtcbiAgICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBkYXRhLnN0YXJ0VHJhbnNsYXRlO1xuICB9XG4gIGlmICghc3dpcGVyLmFsbG93U2xpZGVQcmV2ICYmICFzd2lwZXIuYWxsb3dTbGlkZU5leHQpIHtcbiAgICBkYXRhLmN1cnJlbnRUcmFuc2xhdGUgPSBkYXRhLnN0YXJ0VHJhbnNsYXRlO1xuICB9XG5cbiAgLy8gVGhyZXNob2xkXG4gIGlmIChwYXJhbXMudGhyZXNob2xkID4gMCkge1xuICAgIGlmIChNYXRoLmFicyhkaWZmKSA+IHBhcmFtcy50aHJlc2hvbGQgfHwgZGF0YS5hbGxvd1RocmVzaG9sZE1vdmUpIHtcbiAgICAgIGlmICghZGF0YS5hbGxvd1RocmVzaG9sZE1vdmUpIHtcbiAgICAgICAgZGF0YS5hbGxvd1RocmVzaG9sZE1vdmUgPSB0cnVlO1xuICAgICAgICB0b3VjaGVzLnN0YXJ0WCA9IHRvdWNoZXMuY3VycmVudFg7XG4gICAgICAgIHRvdWNoZXMuc3RhcnRZID0gdG91Y2hlcy5jdXJyZW50WTtcbiAgICAgICAgZGF0YS5jdXJyZW50VHJhbnNsYXRlID0gZGF0YS5zdGFydFRyYW5zbGF0ZTtcbiAgICAgICAgdG91Y2hlcy5kaWZmID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gdG91Y2hlcy5jdXJyZW50WCAtIHRvdWNoZXMuc3RhcnRYIDogdG91Y2hlcy5jdXJyZW50WSAtIHRvdWNoZXMuc3RhcnRZO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGEuY3VycmVudFRyYW5zbGF0ZSA9IGRhdGEuc3RhcnRUcmFuc2xhdGU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGlmICghcGFyYW1zLmZvbGxvd0ZpbmdlciB8fCBwYXJhbXMuY3NzTW9kZSkgcmV0dXJuO1xuXG4gIC8vIFVwZGF0ZSBhY3RpdmUgaW5kZXggaW4gZnJlZSBtb2RlXG4gIGlmIChwYXJhbXMuZnJlZU1vZGUgJiYgcGFyYW1zLmZyZWVNb2RlLmVuYWJsZWQgJiYgc3dpcGVyLmZyZWVNb2RlIHx8IHBhcmFtcy53YXRjaFNsaWRlc1Byb2dyZXNzKSB7XG4gICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgfVxuICBpZiAoc3dpcGVyLnBhcmFtcy5mcmVlTW9kZSAmJiBwYXJhbXMuZnJlZU1vZGUuZW5hYmxlZCAmJiBzd2lwZXIuZnJlZU1vZGUpIHtcbiAgICBzd2lwZXIuZnJlZU1vZGUub25Ub3VjaE1vdmUoKTtcbiAgfVxuICAvLyBVcGRhdGUgcHJvZ3Jlc3NcbiAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKGRhdGEuY3VycmVudFRyYW5zbGF0ZSk7XG4gIC8vIFVwZGF0ZSB0cmFuc2xhdGVcbiAgc3dpcGVyLnNldFRyYW5zbGF0ZShkYXRhLmN1cnJlbnRUcmFuc2xhdGUpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/events/onTouchMove.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/events/onTouchStart.js\":\r\n/*!*********************************************************!*\\\r\n  !*** ./node_modules/swiper/core/events/onTouchStart.js ***!\r\n  \\*********************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ onTouchStart)\\n/* harmony export */ });\\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \\\"./node_modules/ssr-window/ssr-window.esm.js\\\");\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\n\\n\\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\\nfunction closestElement(selector, base = this) {\\n  function __closestFrom(el) {\\n    if (!el || el === (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)() || el === (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)()) return null;\\n    if (el.assignedSlot) el = el.assignedSlot;\\n    const found = el.closest(selector);\\n    if (!found && !el.getRootNode) {\\n      return null;\\n    }\\n    return found || __closestFrom(el.getRootNode().host);\\n  }\\n  return __closestFrom(base);\\n}\\nfunction onTouchStart(event) {\\n  const swiper = this;\\n  const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)();\\n  const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n  const data = swiper.touchEventsData;\\n  data.evCache.push(event);\\n  const {\\n    params,\\n    touches,\\n    enabled\\n  } = swiper;\\n  if (!enabled) return;\\n  if (!params.simulateTouch && event.pointerType === 'mouse') return;\\n  if (swiper.animating && params.preventInteractionOnTransition) {\\n    return;\\n  }\\n  if (!swiper.animating && params.cssMode && params.loop) {\\n    swiper.loopFix();\\n  }\\n  let e = event;\\n  if (e.originalEvent) e = e.originalEvent;\\n  let targetEl = e.target;\\n  if (params.touchEventsTarget === 'wrapper') {\\n    if (!swiper.wrapperEl.contains(targetEl)) return;\\n  }\\n  if ('which' in e && e.which === 3) return;\\n  if ('button' in e && e.button > 0) return;\\n  if (data.isTouched && data.isMoved) return;\\n\\n  // change target el for shadow root component\\n  const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\\n  // eslint-disable-next-line\\n  const eventPath = event.composedPath ? event.composedPath() : event.path;\\n  if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\\n    targetEl = eventPath[0];\\n  }\\n  const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\\n  const isTargetShadow = !!(e.target && e.target.shadowRoot);\\n\\n  // use closestElement for shadow root element to get the actual closest for nested shadow root element\\n  if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\\n    swiper.allowClick = true;\\n    return;\\n  }\\n  if (params.swipeHandler) {\\n    if (!targetEl.closest(params.swipeHandler)) return;\\n  }\\n  touches.currentX = e.pageX;\\n  touches.currentY = e.pageY;\\n  const startX = touches.currentX;\\n  const startY = touches.currentY;\\n\\n  // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\\n\\n  const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\\n  const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\\n  if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\\n    if (edgeSwipeDetection === 'prevent') {\\n      event.preventDefault();\\n    } else {\\n      return;\\n    }\\n  }\\n  Object.assign(data, {\\n    isTouched: true,\\n    isMoved: false,\\n    allowTouchCallbacks: true,\\n    isScrolling: undefined,\\n    startMoving: undefined\\n  });\\n  touches.startX = startX;\\n  touches.startY = startY;\\n  data.touchStartTime = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.now)();\\n  swiper.allowClick = true;\\n  swiper.updateSize();\\n  swiper.swipeDirection = undefined;\\n  if (params.threshold > 0) data.allowThresholdMove = false;\\n  let preventDefault = true;\\n  if (targetEl.matches(data.focusableElements)) {\\n    preventDefault = false;\\n    if (targetEl.nodeName === 'SELECT') {\\n      data.isTouched = false;\\n    }\\n  }\\n  if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) {\\n    document.activeElement.blur();\\n  }\\n  const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\\n  if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\\n    e.preventDefault();\\n  }\\n  if (swiper.params.freeMode && swiper.params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\\n    swiper.freeMode.onTouchStart();\\n  }\\n  swiper.emit('touchStart', e);\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZXZlbnRzL29uVG91Y2hTdGFydC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBb0Q7QUFDUjs7QUFFNUM7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHVEQUFXLGFBQWEscURBQVM7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2U7QUFDZjtBQUNBLG1CQUFtQix1REFBVztBQUM5QixpQkFBaUIscURBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRkFBc0Ysc0JBQXNCO0FBQzVHOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0Esd0JBQXdCLHFEQUFHO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9ldmVudHMvb25Ub3VjaFN0YXJ0LmpzPzg0ODUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0V2luZG93LCBnZXREb2N1bWVudCB9IGZyb20gJ3Nzci13aW5kb3cnO1xuaW1wb3J0IHsgbm93IH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzLmpzJztcblxuLy8gTW9kaWZpZWQgZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NDUyMDU1NC9jdXN0b20tZWxlbWVudC1nZXRyb290bm9kZS1jbG9zZXN0LWZ1bmN0aW9uLWNyb3NzaW5nLW11bHRpcGxlLXBhcmVudC1zaGFkb3dkXG5mdW5jdGlvbiBjbG9zZXN0RWxlbWVudChzZWxlY3RvciwgYmFzZSA9IHRoaXMpIHtcbiAgZnVuY3Rpb24gX19jbG9zZXN0RnJvbShlbCkge1xuICAgIGlmICghZWwgfHwgZWwgPT09IGdldERvY3VtZW50KCkgfHwgZWwgPT09IGdldFdpbmRvdygpKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoZWwuYXNzaWduZWRTbG90KSBlbCA9IGVsLmFzc2lnbmVkU2xvdDtcbiAgICBjb25zdCBmb3VuZCA9IGVsLmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICAgIGlmICghZm91bmQgJiYgIWVsLmdldFJvb3ROb2RlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGZvdW5kIHx8IF9fY2xvc2VzdEZyb20oZWwuZ2V0Um9vdE5vZGUoKS5ob3N0KTtcbiAgfVxuICByZXR1cm4gX19jbG9zZXN0RnJvbShiYXNlKTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9uVG91Y2hTdGFydChldmVudCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICBjb25zdCBkYXRhID0gc3dpcGVyLnRvdWNoRXZlbnRzRGF0YTtcbiAgZGF0YS5ldkNhY2hlLnB1c2goZXZlbnQpO1xuICBjb25zdCB7XG4gICAgcGFyYW1zLFxuICAgIHRvdWNoZXMsXG4gICAgZW5hYmxlZFxuICB9ID0gc3dpcGVyO1xuICBpZiAoIWVuYWJsZWQpIHJldHVybjtcbiAgaWYgKCFwYXJhbXMuc2ltdWxhdGVUb3VjaCAmJiBldmVudC5wb2ludGVyVHlwZSA9PT0gJ21vdXNlJykgcmV0dXJuO1xuICBpZiAoc3dpcGVyLmFuaW1hdGluZyAmJiBwYXJhbXMucHJldmVudEludGVyYWN0aW9uT25UcmFuc2l0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghc3dpcGVyLmFuaW1hdGluZyAmJiBwYXJhbXMuY3NzTW9kZSAmJiBwYXJhbXMubG9vcCkge1xuICAgIHN3aXBlci5sb29wRml4KCk7XG4gIH1cbiAgbGV0IGUgPSBldmVudDtcbiAgaWYgKGUub3JpZ2luYWxFdmVudCkgZSA9IGUub3JpZ2luYWxFdmVudDtcbiAgbGV0IHRhcmdldEVsID0gZS50YXJnZXQ7XG4gIGlmIChwYXJhbXMudG91Y2hFdmVudHNUYXJnZXQgPT09ICd3cmFwcGVyJykge1xuICAgIGlmICghc3dpcGVyLndyYXBwZXJFbC5jb250YWlucyh0YXJnZXRFbCkpIHJldHVybjtcbiAgfVxuICBpZiAoJ3doaWNoJyBpbiBlICYmIGUud2hpY2ggPT09IDMpIHJldHVybjtcbiAgaWYgKCdidXR0b24nIGluIGUgJiYgZS5idXR0b24gPiAwKSByZXR1cm47XG4gIGlmIChkYXRhLmlzVG91Y2hlZCAmJiBkYXRhLmlzTW92ZWQpIHJldHVybjtcblxuICAvLyBjaGFuZ2UgdGFyZ2V0IGVsIGZvciBzaGFkb3cgcm9vdCBjb21wb25lbnRcbiAgY29uc3Qgc3dpcGluZ0NsYXNzSGFzVmFsdWUgPSAhIXBhcmFtcy5ub1N3aXBpbmdDbGFzcyAmJiBwYXJhbXMubm9Td2lwaW5nQ2xhc3MgIT09ICcnO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgY29uc3QgZXZlbnRQYXRoID0gZXZlbnQuY29tcG9zZWRQYXRoID8gZXZlbnQuY29tcG9zZWRQYXRoKCkgOiBldmVudC5wYXRoO1xuICBpZiAoc3dpcGluZ0NsYXNzSGFzVmFsdWUgJiYgZS50YXJnZXQgJiYgZS50YXJnZXQuc2hhZG93Um9vdCAmJiBldmVudFBhdGgpIHtcbiAgICB0YXJnZXRFbCA9IGV2ZW50UGF0aFswXTtcbiAgfVxuICBjb25zdCBub1N3aXBpbmdTZWxlY3RvciA9IHBhcmFtcy5ub1N3aXBpbmdTZWxlY3RvciA/IHBhcmFtcy5ub1N3aXBpbmdTZWxlY3RvciA6IGAuJHtwYXJhbXMubm9Td2lwaW5nQ2xhc3N9YDtcbiAgY29uc3QgaXNUYXJnZXRTaGFkb3cgPSAhIShlLnRhcmdldCAmJiBlLnRhcmdldC5zaGFkb3dSb290KTtcblxuICAvLyB1c2UgY2xvc2VzdEVsZW1lbnQgZm9yIHNoYWRvdyByb290IGVsZW1lbnQgdG8gZ2V0IHRoZSBhY3R1YWwgY2xvc2VzdCBmb3IgbmVzdGVkIHNoYWRvdyByb290IGVsZW1lbnRcbiAgaWYgKHBhcmFtcy5ub1N3aXBpbmcgJiYgKGlzVGFyZ2V0U2hhZG93ID8gY2xvc2VzdEVsZW1lbnQobm9Td2lwaW5nU2VsZWN0b3IsIHRhcmdldEVsKSA6IHRhcmdldEVsLmNsb3Nlc3Qobm9Td2lwaW5nU2VsZWN0b3IpKSkge1xuICAgIHN3aXBlci5hbGxvd0NsaWNrID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHBhcmFtcy5zd2lwZUhhbmRsZXIpIHtcbiAgICBpZiAoIXRhcmdldEVsLmNsb3Nlc3QocGFyYW1zLnN3aXBlSGFuZGxlcikpIHJldHVybjtcbiAgfVxuICB0b3VjaGVzLmN1cnJlbnRYID0gZS5wYWdlWDtcbiAgdG91Y2hlcy5jdXJyZW50WSA9IGUucGFnZVk7XG4gIGNvbnN0IHN0YXJ0WCA9IHRvdWNoZXMuY3VycmVudFg7XG4gIGNvbnN0IHN0YXJ0WSA9IHRvdWNoZXMuY3VycmVudFk7XG5cbiAgLy8gRG8gTk9UIHN0YXJ0IGlmIGlPUyBlZGdlIHN3aXBlIGlzIGRldGVjdGVkLiBPdGhlcndpc2UgaU9TIGFwcCBjYW5ub3Qgc3dpcGUtdG8tZ28tYmFjayBhbnltb3JlXG5cbiAgY29uc3QgZWRnZVN3aXBlRGV0ZWN0aW9uID0gcGFyYW1zLmVkZ2VTd2lwZURldGVjdGlvbiB8fCBwYXJhbXMuaU9TRWRnZVN3aXBlRGV0ZWN0aW9uO1xuICBjb25zdCBlZGdlU3dpcGVUaHJlc2hvbGQgPSBwYXJhbXMuZWRnZVN3aXBlVGhyZXNob2xkIHx8IHBhcmFtcy5pT1NFZGdlU3dpcGVUaHJlc2hvbGQ7XG4gIGlmIChlZGdlU3dpcGVEZXRlY3Rpb24gJiYgKHN0YXJ0WCA8PSBlZGdlU3dpcGVUaHJlc2hvbGQgfHwgc3RhcnRYID49IHdpbmRvdy5pbm5lcldpZHRoIC0gZWRnZVN3aXBlVGhyZXNob2xkKSkge1xuICAgIGlmIChlZGdlU3dpcGVEZXRlY3Rpb24gPT09ICdwcmV2ZW50Jykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuICBPYmplY3QuYXNzaWduKGRhdGEsIHtcbiAgICBpc1RvdWNoZWQ6IHRydWUsXG4gICAgaXNNb3ZlZDogZmFsc2UsXG4gICAgYWxsb3dUb3VjaENhbGxiYWNrczogdHJ1ZSxcbiAgICBpc1Njcm9sbGluZzogdW5kZWZpbmVkLFxuICAgIHN0YXJ0TW92aW5nOiB1bmRlZmluZWRcbiAgfSk7XG4gIHRvdWNoZXMuc3RhcnRYID0gc3RhcnRYO1xuICB0b3VjaGVzLnN0YXJ0WSA9IHN0YXJ0WTtcbiAgZGF0YS50b3VjaFN0YXJ0VGltZSA9IG5vdygpO1xuICBzd2lwZXIuYWxsb3dDbGljayA9IHRydWU7XG4gIHN3aXBlci51cGRhdGVTaXplKCk7XG4gIHN3aXBlci5zd2lwZURpcmVjdGlvbiA9IHVuZGVmaW5lZDtcbiAgaWYgKHBhcmFtcy50aHJlc2hvbGQgPiAwKSBkYXRhLmFsbG93VGhyZXNob2xkTW92ZSA9IGZhbHNlO1xuICBsZXQgcHJldmVudERlZmF1bHQgPSB0cnVlO1xuICBpZiAodGFyZ2V0RWwubWF0Y2hlcyhkYXRhLmZvY3VzYWJsZUVsZW1lbnRzKSkge1xuICAgIHByZXZlbnREZWZhdWx0ID0gZmFsc2U7XG4gICAgaWYgKHRhcmdldEVsLm5vZGVOYW1lID09PSAnU0VMRUNUJykge1xuICAgICAgZGF0YS5pc1RvdWNoZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5tYXRjaGVzKGRhdGEuZm9jdXNhYmxlRWxlbWVudHMpICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IHRhcmdldEVsKSB7XG4gICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7XG4gIH1cbiAgY29uc3Qgc2hvdWxkUHJldmVudERlZmF1bHQgPSBwcmV2ZW50RGVmYXVsdCAmJiBzd2lwZXIuYWxsb3dUb3VjaE1vdmUgJiYgcGFyYW1zLnRvdWNoU3RhcnRQcmV2ZW50RGVmYXVsdDtcbiAgaWYgKChwYXJhbXMudG91Y2hTdGFydEZvcmNlUHJldmVudERlZmF1bHQgfHwgc2hvdWxkUHJldmVudERlZmF1bHQpICYmICF0YXJnZXRFbC5pc0NvbnRlbnRFZGl0YWJsZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBpZiAoc3dpcGVyLnBhcmFtcy5mcmVlTW9kZSAmJiBzd2lwZXIucGFyYW1zLmZyZWVNb2RlLmVuYWJsZWQgJiYgc3dpcGVyLmZyZWVNb2RlICYmIHN3aXBlci5hbmltYXRpbmcgJiYgIXBhcmFtcy5jc3NNb2RlKSB7XG4gICAgc3dpcGVyLmZyZWVNb2RlLm9uVG91Y2hTdGFydCgpO1xuICB9XG4gIHN3aXBlci5lbWl0KCd0b3VjaFN0YXJ0JywgZSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/events/onTouchStart.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/grab-cursor/index.js\":\r\n/*!*******************************************************!*\\\r\n  !*** ./node_modules/swiper/core/grab-cursor/index.js ***!\r\n  \\*******************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* harmony import */ var _setGrabCursor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setGrabCursor.js */ \\\"./node_modules/swiper/core/grab-cursor/setGrabCursor.js\\\");\\n/* harmony import */ var _unsetGrabCursor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./unsetGrabCursor.js */ \\\"./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js\\\");\\n\\n\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\\n  setGrabCursor: _setGrabCursor_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"],\\n  unsetGrabCursor: _unsetGrabCursor_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"]\\n});//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZ3JhYi1jdXJzb3IvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQStDO0FBQ0k7QUFDbkQsaUVBQWU7QUFDZixlQUFlO0FBQ2YsaUJBQWlCO0FBQ2pCLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9ncmFiLWN1cnNvci9pbmRleC5qcz8xZGIxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzZXRHcmFiQ3Vyc29yIGZyb20gJy4vc2V0R3JhYkN1cnNvci5qcyc7XG5pbXBvcnQgdW5zZXRHcmFiQ3Vyc29yIGZyb20gJy4vdW5zZXRHcmFiQ3Vyc29yLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2V0R3JhYkN1cnNvcixcbiAgdW5zZXRHcmFiQ3Vyc29yXG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/grab-cursor/index.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/grab-cursor/setGrabCursor.js\":\r\n/*!***************************************************************!*\\\r\n  !*** ./node_modules/swiper/core/grab-cursor/setGrabCursor.js ***!\r\n  \\***************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ setGrabCursor)\\n/* harmony export */ });\\nfunction setGrabCursor(moving) {\\n  const swiper = this;\\n  if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\\n  const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\\n  el.style.cursor = 'move';\\n  el.style.cursor = moving ? 'grabbing' : 'grab';\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZ3JhYi1jdXJzb3Ivc2V0R3JhYkN1cnNvci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9ncmFiLWN1cnNvci9zZXRHcmFiQ3Vyc29yLmpzPzgzZGUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0R3JhYkN1cnNvcihtb3ZpbmcpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgaWYgKCFzd2lwZXIucGFyYW1zLnNpbXVsYXRlVG91Y2ggfHwgc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5pc0xvY2tlZCB8fCBzd2lwZXIucGFyYW1zLmNzc01vZGUpIHJldHVybjtcbiAgY29uc3QgZWwgPSBzd2lwZXIucGFyYW1zLnRvdWNoRXZlbnRzVGFyZ2V0ID09PSAnY29udGFpbmVyJyA/IHN3aXBlci5lbCA6IHN3aXBlci53cmFwcGVyRWw7XG4gIGVsLnN0eWxlLmN1cnNvciA9ICdtb3ZlJztcbiAgZWwuc3R5bGUuY3Vyc29yID0gbW92aW5nID8gJ2dyYWJiaW5nJyA6ICdncmFiJztcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/grab-cursor/setGrabCursor.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js\":\r\n/*!*****************************************************************!*\\\r\n  !*** ./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js ***!\r\n  \\*****************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ unsetGrabCursor)\\n/* harmony export */ });\\nfunction unsetGrabCursor() {\\n  const swiper = this;\\n  if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\\n    return;\\n  }\\n  swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvZ3JhYi1jdXJzb3IvdW5zZXRHcmFiQ3Vyc29yLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL2dyYWItY3Vyc29yL3Vuc2V0R3JhYkN1cnNvci5qcz8yY2EwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuc2V0R3JhYkN1cnNvcigpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgaWYgKHN3aXBlci5wYXJhbXMud2F0Y2hPdmVyZmxvdyAmJiBzd2lwZXIuaXNMb2NrZWQgfHwgc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHN3aXBlcltzd2lwZXIucGFyYW1zLnRvdWNoRXZlbnRzVGFyZ2V0ID09PSAnY29udGFpbmVyJyA/ICdlbCcgOiAnd3JhcHBlckVsJ10uc3R5bGUuY3Vyc29yID0gJyc7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/loop/index.js\":\r\n/*!************************************************!*\\\r\n  !*** ./node_modules/swiper/core/loop/index.js ***!\r\n  \\************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* harmony import */ var _loopCreate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./loopCreate.js */ \\\"./node_modules/swiper/core/loop/loopCreate.js\\\");\\n/* harmony import */ var _loopFix_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./loopFix.js */ \\\"./node_modules/swiper/core/loop/loopFix.js\\\");\\n/* harmony import */ var _loopDestroy_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./loopDestroy.js */ \\\"./node_modules/swiper/core/loop/loopDestroy.js\\\");\\n\\n\\n\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\\n  loopCreate: _loopCreate_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"],\\n  loopFix: _loopFix_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"],\\n  loopDestroy: _loopDestroy_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"]\\n});//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvbG9vcC9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXlDO0FBQ047QUFDUTtBQUMzQyxpRUFBZTtBQUNmLFlBQVk7QUFDWixTQUFTO0FBQ1QsYUFBYTtBQUNiLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9sb29wL2luZGV4LmpzP2MwYTciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvb3BDcmVhdGUgZnJvbSAnLi9sb29wQ3JlYXRlLmpzJztcbmltcG9ydCBsb29wRml4IGZyb20gJy4vbG9vcEZpeC5qcyc7XG5pbXBvcnQgbG9vcERlc3Ryb3kgZnJvbSAnLi9sb29wRGVzdHJveS5qcyc7XG5leHBvcnQgZGVmYXVsdCB7XG4gIGxvb3BDcmVhdGUsXG4gIGxvb3BGaXgsXG4gIGxvb3BEZXN0cm95XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/loop/index.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/loop/loopCreate.js\":\r\n/*!*****************************************************!*\\\r\n  !*** ./node_modules/swiper/core/loop/loopCreate.js ***!\r\n  \\*****************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ loopCreate)\\n/* harmony export */ });\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\nfunction loopCreate(slideRealIndex) {\\n  const swiper = this;\\n  const {\\n    params,\\n    slidesEl\\n  } = swiper;\\n  if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\\n  const slides = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementChildren)(slidesEl, `.${params.slideClass}, swiper-slide`);\\n  slides.forEach((el, index) => {\\n    el.setAttribute('data-swiper-slide-index', index);\\n  });\\n  swiper.loopFix({\\n    slideRealIndex,\\n    direction: params.centeredSlides ? undefined : 'next'\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvbG9vcC9sb29wQ3JlYXRlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXdEO0FBQ3pDO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxpQkFBaUIsaUVBQWUsZUFBZSxrQkFBa0I7QUFDakU7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9sb29wL2xvb3BDcmVhdGUuanM/MTc5NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlbGVtZW50Q2hpbGRyZW4gfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbG9vcENyZWF0ZShzbGlkZVJlYWxJbmRleCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgcGFyYW1zLFxuICAgIHNsaWRlc0VsXG4gIH0gPSBzd2lwZXI7XG4gIGlmICghcGFyYW1zLmxvb3AgfHwgc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQpIHJldHVybjtcbiAgY29uc3Qgc2xpZGVzID0gZWxlbWVudENoaWxkcmVuKHNsaWRlc0VsLCBgLiR7cGFyYW1zLnNsaWRlQ2xhc3N9LCBzd2lwZXItc2xpZGVgKTtcbiAgc2xpZGVzLmZvckVhY2goKGVsLCBpbmRleCkgPT4ge1xuICAgIGVsLnNldEF0dHJpYnV0ZSgnZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnLCBpbmRleCk7XG4gIH0pO1xuICBzd2lwZXIubG9vcEZpeCh7XG4gICAgc2xpZGVSZWFsSW5kZXgsXG4gICAgZGlyZWN0aW9uOiBwYXJhbXMuY2VudGVyZWRTbGlkZXMgPyB1bmRlZmluZWQgOiAnbmV4dCdcbiAgfSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/loop/loopCreate.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/loop/loopDestroy.js\":\r\n/*!******************************************************!*\\\r\n  !*** ./node_modules/swiper/core/loop/loopDestroy.js ***!\r\n  \\******************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ loopDestroy)\\n/* harmony export */ });\\nfunction loopDestroy() {\\n  const swiper = this;\\n  const {\\n    slides,\\n    params,\\n    slidesEl\\n  } = swiper;\\n  if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\\n  swiper.recalcSlides();\\n  const newSlidesOrder = [];\\n  slides.forEach(slideEl => {\\n    const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\\n    newSlidesOrder[index] = slideEl;\\n  });\\n  slides.forEach(slideEl => {\\n    slideEl.removeAttribute('data-swiper-slide-index');\\n  });\\n  newSlidesOrder.forEach(slideEl => {\\n    slidesEl.append(slideEl);\\n  });\\n  swiper.recalcSlides();\\n  swiper.slideTo(swiper.realIndex, 0);\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvbG9vcC9sb29wRGVzdHJveS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvbG9vcC9sb29wRGVzdHJveS5qcz82NDg3Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvb3BEZXN0cm95KCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgc2xpZGVzLFxuICAgIHBhcmFtcyxcbiAgICBzbGlkZXNFbFxuICB9ID0gc3dpcGVyO1xuICBpZiAoIXBhcmFtcy5sb29wIHx8IHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkKSByZXR1cm47XG4gIHN3aXBlci5yZWNhbGNTbGlkZXMoKTtcbiAgY29uc3QgbmV3U2xpZGVzT3JkZXIgPSBbXTtcbiAgc2xpZGVzLmZvckVhY2goc2xpZGVFbCA9PiB7XG4gICAgY29uc3QgaW5kZXggPSB0eXBlb2Ygc2xpZGVFbC5zd2lwZXJTbGlkZUluZGV4ID09PSAndW5kZWZpbmVkJyA/IHNsaWRlRWwuZ2V0QXR0cmlidXRlKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpICogMSA6IHNsaWRlRWwuc3dpcGVyU2xpZGVJbmRleDtcbiAgICBuZXdTbGlkZXNPcmRlcltpbmRleF0gPSBzbGlkZUVsO1xuICB9KTtcbiAgc2xpZGVzLmZvckVhY2goc2xpZGVFbCA9PiB7XG4gICAgc2xpZGVFbC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4Jyk7XG4gIH0pO1xuICBuZXdTbGlkZXNPcmRlci5mb3JFYWNoKHNsaWRlRWwgPT4ge1xuICAgIHNsaWRlc0VsLmFwcGVuZChzbGlkZUVsKTtcbiAgfSk7XG4gIHN3aXBlci5yZWNhbGNTbGlkZXMoKTtcbiAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLnJlYWxJbmRleCwgMCk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/loop/loopDestroy.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/loop/loopFix.js\":\r\n/*!**************************************************!*\\\r\n  !*** ./node_modules/swiper/core/loop/loopFix.js ***!\r\n  \\**************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ loopFix)\\n/* harmony export */ });\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\nfunction loopFix({\\n  slideRealIndex,\\n  slideTo = true,\\n  direction,\\n  setTranslate,\\n  activeSlideIndex,\\n  byController,\\n  byMousewheel\\n} = {}) {\\n  const swiper = this;\\n  if (!swiper.params.loop) return;\\n  swiper.emit('beforeLoopFix');\\n  const {\\n    slides,\\n    allowSlidePrev,\\n    allowSlideNext,\\n    slidesEl,\\n    params\\n  } = swiper;\\n  swiper.allowSlidePrev = true;\\n  swiper.allowSlideNext = true;\\n  if (swiper.virtual && params.virtual.enabled) {\\n    if (slideTo) {\\n      if (!params.centeredSlides && swiper.snapIndex === 0) {\\n        swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\\n      } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {\\n        swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\\n      } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\\n        swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\\n      }\\n    }\\n    swiper.allowSlidePrev = allowSlidePrev;\\n    swiper.allowSlideNext = allowSlideNext;\\n    swiper.emit('loopFix');\\n    return;\\n  }\\n  const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10));\\n  let loopedSlides = params.loopedSlides || slidesPerView;\\n  if (loopedSlides % params.slidesPerGroup !== 0) {\\n    loopedSlides += params.slidesPerGroup - loopedSlides % params.slidesPerGroup;\\n  }\\n  swiper.loopedSlides = loopedSlides;\\n  const prependSlidesIndexes = [];\\n  const appendSlidesIndexes = [];\\n  let activeIndex = swiper.activeIndex;\\n  if (typeof activeSlideIndex === 'undefined') {\\n    activeSlideIndex = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementIndex)(swiper.slides.filter(el => el.classList.contains('swiper-slide-active'))[0]);\\n  } else {\\n    activeIndex = activeSlideIndex;\\n  }\\n  const isNext = direction === 'next' || !direction;\\n  const isPrev = direction === 'prev' || !direction;\\n  let slidesPrepended = 0;\\n  let slidesAppended = 0;\\n  // prepend last slides before start\\n  if (activeSlideIndex < loopedSlides) {\\n    slidesPrepended = loopedSlides - activeSlideIndex;\\n    for (let i = 0; i < loopedSlides - activeSlideIndex; i += 1) {\\n      const index = i - Math.floor(i / slides.length) * slides.length;\\n      prependSlidesIndexes.push(slides.length - index - 1);\\n    }\\n  } else if (activeSlideIndex /* + slidesPerView */ > swiper.slides.length - loopedSlides * 2) {\\n    slidesAppended = activeSlideIndex - (swiper.slides.length - loopedSlides * 2);\\n    for (let i = 0; i < slidesAppended; i += 1) {\\n      const index = i - Math.floor(i / slides.length) * slides.length;\\n      appendSlidesIndexes.push(index);\\n    }\\n  }\\n  if (isPrev) {\\n    prependSlidesIndexes.forEach(index => {\\n      slidesEl.prepend(swiper.slides[index]);\\n    });\\n  }\\n  if (isNext) {\\n    appendSlidesIndexes.forEach(index => {\\n      slidesEl.append(swiper.slides[index]);\\n    });\\n  }\\n  swiper.recalcSlides();\\n  if (params.watchSlidesProgress) {\\n    swiper.updateSlidesOffset();\\n  }\\n  if (slideTo) {\\n    if (prependSlidesIndexes.length > 0 && isPrev) {\\n      if (typeof slideRealIndex === 'undefined') {\\n        const currentSlideTranslate = swiper.slidesGrid[activeIndex];\\n        const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\\n        const diff = newSlideTranslate - currentSlideTranslate;\\n        if (byMousewheel) {\\n          swiper.setTranslate(swiper.translate - diff);\\n        } else {\\n          swiper.slideTo(activeIndex + slidesPrepended, 0, false, true);\\n          if (setTranslate) {\\n            swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;\\n          }\\n        }\\n      } else {\\n        if (setTranslate) {\\n          swiper.slideToLoop(slideRealIndex, 0, false, true);\\n        }\\n      }\\n    } else if (appendSlidesIndexes.length > 0 && isNext) {\\n      if (typeof slideRealIndex === 'undefined') {\\n        const currentSlideTranslate = swiper.slidesGrid[activeIndex];\\n        const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\\n        const diff = newSlideTranslate - currentSlideTranslate;\\n        if (byMousewheel) {\\n          swiper.setTranslate(swiper.translate - diff);\\n        } else {\\n          swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\\n          if (setTranslate) {\\n            swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;\\n          }\\n        }\\n      } else {\\n        swiper.slideToLoop(slideRealIndex, 0, false, true);\\n      }\\n    }\\n  }\\n  swiper.allowSlidePrev = allowSlidePrev;\\n  swiper.allowSlideNext = allowSlideNext;\\n  if (swiper.controller && swiper.controller.control && !byController) {\\n    const loopParams = {\\n      slideRealIndex,\\n      slideTo: false,\\n      direction,\\n      setTranslate,\\n      activeSlideIndex,\\n      byController: true\\n    };\\n    if (Array.isArray(swiper.controller.control)) {\\n      swiper.controller.control.forEach(c => {\\n        if (c.params.loop) c.loopFix(loopParams);\\n      });\\n    } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\\n      swiper.controller.control.loopFix(loopParams);\\n    }\\n  }\\n  swiper.emit('loopFix');\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvbG9vcC9sb29wRml4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXFEO0FBQ3RDO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLElBQUk7QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1Qiw4REFBWTtBQUNuQyxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLHFDQUFxQztBQUN6RDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxvQkFBb0Isb0JBQW9CO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvbG9vcC9sb29wRml4LmpzPzBjOWIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZWxlbWVudEluZGV4IH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxvb3BGaXgoe1xuICBzbGlkZVJlYWxJbmRleCxcbiAgc2xpZGVUbyA9IHRydWUsXG4gIGRpcmVjdGlvbixcbiAgc2V0VHJhbnNsYXRlLFxuICBhY3RpdmVTbGlkZUluZGV4LFxuICBieUNvbnRyb2xsZXIsXG4gIGJ5TW91c2V3aGVlbFxufSA9IHt9KSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGlmICghc3dpcGVyLnBhcmFtcy5sb29wKSByZXR1cm47XG4gIHN3aXBlci5lbWl0KCdiZWZvcmVMb29wRml4Jyk7XG4gIGNvbnN0IHtcbiAgICBzbGlkZXMsXG4gICAgYWxsb3dTbGlkZVByZXYsXG4gICAgYWxsb3dTbGlkZU5leHQsXG4gICAgc2xpZGVzRWwsXG4gICAgcGFyYW1zXG4gIH0gPSBzd2lwZXI7XG4gIHN3aXBlci5hbGxvd1NsaWRlUHJldiA9IHRydWU7XG4gIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9IHRydWU7XG4gIGlmIChzd2lwZXIudmlydHVhbCAmJiBwYXJhbXMudmlydHVhbC5lbmFibGVkKSB7XG4gICAgaWYgKHNsaWRlVG8pIHtcbiAgICAgIGlmICghcGFyYW1zLmNlbnRlcmVkU2xpZGVzICYmIHN3aXBlci5zbmFwSW5kZXggPT09IDApIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCwgMCwgZmFsc2UsIHRydWUpO1xuICAgICAgfSBlbHNlIGlmIChwYXJhbXMuY2VudGVyZWRTbGlkZXMgJiYgc3dpcGVyLnNuYXBJbmRleCA8IHBhcmFtcy5zbGlkZXNQZXJWaWV3KSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggKyBzd2lwZXIuc25hcEluZGV4LCAwLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHN3aXBlci5zbmFwSW5kZXggPT09IHN3aXBlci5zbmFwR3JpZC5sZW5ndGggLSAxKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci52aXJ0dWFsLnNsaWRlc0JlZm9yZSwgMCwgZmFsc2UsIHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBzd2lwZXIuYWxsb3dTbGlkZVByZXYgPSBhbGxvd1NsaWRlUHJldjtcbiAgICBzd2lwZXIuYWxsb3dTbGlkZU5leHQgPSBhbGxvd1NsaWRlTmV4dDtcbiAgICBzd2lwZXIuZW1pdCgnbG9vcEZpeCcpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBzbGlkZXNQZXJWaWV3ID0gcGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyA/IHN3aXBlci5zbGlkZXNQZXJWaWV3RHluYW1pYygpIDogTWF0aC5jZWlsKHBhcnNlRmxvYXQocGFyYW1zLnNsaWRlc1BlclZpZXcsIDEwKSk7XG4gIGxldCBsb29wZWRTbGlkZXMgPSBwYXJhbXMubG9vcGVkU2xpZGVzIHx8IHNsaWRlc1BlclZpZXc7XG4gIGlmIChsb29wZWRTbGlkZXMgJSBwYXJhbXMuc2xpZGVzUGVyR3JvdXAgIT09IDApIHtcbiAgICBsb29wZWRTbGlkZXMgKz0gcGFyYW1zLnNsaWRlc1Blckdyb3VwIC0gbG9vcGVkU2xpZGVzICUgcGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuICB9XG4gIHN3aXBlci5sb29wZWRTbGlkZXMgPSBsb29wZWRTbGlkZXM7XG4gIGNvbnN0IHByZXBlbmRTbGlkZXNJbmRleGVzID0gW107XG4gIGNvbnN0IGFwcGVuZFNsaWRlc0luZGV4ZXMgPSBbXTtcbiAgbGV0IGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICBpZiAodHlwZW9mIGFjdGl2ZVNsaWRlSW5kZXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgYWN0aXZlU2xpZGVJbmRleCA9IGVsZW1lbnRJbmRleChzd2lwZXIuc2xpZGVzLmZpbHRlcihlbCA9PiBlbC5jbGFzc0xpc3QuY29udGFpbnMoJ3N3aXBlci1zbGlkZS1hY3RpdmUnKSlbMF0pO1xuICB9IGVsc2Uge1xuICAgIGFjdGl2ZUluZGV4ID0gYWN0aXZlU2xpZGVJbmRleDtcbiAgfVxuICBjb25zdCBpc05leHQgPSBkaXJlY3Rpb24gPT09ICduZXh0JyB8fCAhZGlyZWN0aW9uO1xuICBjb25zdCBpc1ByZXYgPSBkaXJlY3Rpb24gPT09ICdwcmV2JyB8fCAhZGlyZWN0aW9uO1xuICBsZXQgc2xpZGVzUHJlcGVuZGVkID0gMDtcbiAgbGV0IHNsaWRlc0FwcGVuZGVkID0gMDtcbiAgLy8gcHJlcGVuZCBsYXN0IHNsaWRlcyBiZWZvcmUgc3RhcnRcbiAgaWYgKGFjdGl2ZVNsaWRlSW5kZXggPCBsb29wZWRTbGlkZXMpIHtcbiAgICBzbGlkZXNQcmVwZW5kZWQgPSBsb29wZWRTbGlkZXMgLSBhY3RpdmVTbGlkZUluZGV4O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9vcGVkU2xpZGVzIC0gYWN0aXZlU2xpZGVJbmRleDsgaSArPSAxKSB7XG4gICAgICBjb25zdCBpbmRleCA9IGkgLSBNYXRoLmZsb29yKGkgLyBzbGlkZXMubGVuZ3RoKSAqIHNsaWRlcy5sZW5ndGg7XG4gICAgICBwcmVwZW5kU2xpZGVzSW5kZXhlcy5wdXNoKHNsaWRlcy5sZW5ndGggLSBpbmRleCAtIDEpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChhY3RpdmVTbGlkZUluZGV4IC8qICsgc2xpZGVzUGVyVmlldyAqLyA+IHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gbG9vcGVkU2xpZGVzICogMikge1xuICAgIHNsaWRlc0FwcGVuZGVkID0gYWN0aXZlU2xpZGVJbmRleCAtIChzd2lwZXIuc2xpZGVzLmxlbmd0aCAtIGxvb3BlZFNsaWRlcyAqIDIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpZGVzQXBwZW5kZWQ7IGkgKz0gMSkge1xuICAgICAgY29uc3QgaW5kZXggPSBpIC0gTWF0aC5mbG9vcihpIC8gc2xpZGVzLmxlbmd0aCkgKiBzbGlkZXMubGVuZ3RoO1xuICAgICAgYXBwZW5kU2xpZGVzSW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzUHJldikge1xuICAgIHByZXBlbmRTbGlkZXNJbmRleGVzLmZvckVhY2goaW5kZXggPT4ge1xuICAgICAgc2xpZGVzRWwucHJlcGVuZChzd2lwZXIuc2xpZGVzW2luZGV4XSk7XG4gICAgfSk7XG4gIH1cbiAgaWYgKGlzTmV4dCkge1xuICAgIGFwcGVuZFNsaWRlc0luZGV4ZXMuZm9yRWFjaChpbmRleCA9PiB7XG4gICAgICBzbGlkZXNFbC5hcHBlbmQoc3dpcGVyLnNsaWRlc1tpbmRleF0pO1xuICAgIH0pO1xuICB9XG4gIHN3aXBlci5yZWNhbGNTbGlkZXMoKTtcbiAgaWYgKHBhcmFtcy53YXRjaFNsaWRlc1Byb2dyZXNzKSB7XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlc09mZnNldCgpO1xuICB9XG4gIGlmIChzbGlkZVRvKSB7XG4gICAgaWYgKHByZXBlbmRTbGlkZXNJbmRleGVzLmxlbmd0aCA+IDAgJiYgaXNQcmV2KSB7XG4gICAgICBpZiAodHlwZW9mIHNsaWRlUmVhbEluZGV4ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb25zdCBjdXJyZW50U2xpZGVUcmFuc2xhdGUgPSBzd2lwZXIuc2xpZGVzR3JpZFthY3RpdmVJbmRleF07XG4gICAgICAgIGNvbnN0IG5ld1NsaWRlVHJhbnNsYXRlID0gc3dpcGVyLnNsaWRlc0dyaWRbYWN0aXZlSW5kZXggKyBzbGlkZXNQcmVwZW5kZWRdO1xuICAgICAgICBjb25zdCBkaWZmID0gbmV3U2xpZGVUcmFuc2xhdGUgLSBjdXJyZW50U2xpZGVUcmFuc2xhdGU7XG4gICAgICAgIGlmIChieU1vdXNld2hlZWwpIHtcbiAgICAgICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKHN3aXBlci50cmFuc2xhdGUgLSBkaWZmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVUbyhhY3RpdmVJbmRleCArIHNsaWRlc1ByZXBlbmRlZCwgMCwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgIGlmIChzZXRUcmFuc2xhdGUpIHtcbiAgICAgICAgICAgIHN3aXBlci50b3VjaGVzW3N3aXBlci5pc0hvcml6b250YWwoKSA/ICdzdGFydFgnIDogJ3N0YXJ0WSddICs9IGRpZmY7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc2V0VHJhbnNsYXRlKSB7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlVG9Mb29wKHNsaWRlUmVhbEluZGV4LCAwLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFwcGVuZFNsaWRlc0luZGV4ZXMubGVuZ3RoID4gMCAmJiBpc05leHQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc2xpZGVSZWFsSW5kZXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTbGlkZVRyYW5zbGF0ZSA9IHN3aXBlci5zbGlkZXNHcmlkW2FjdGl2ZUluZGV4XTtcbiAgICAgICAgY29uc3QgbmV3U2xpZGVUcmFuc2xhdGUgPSBzd2lwZXIuc2xpZGVzR3JpZFthY3RpdmVJbmRleCAtIHNsaWRlc0FwcGVuZGVkXTtcbiAgICAgICAgY29uc3QgZGlmZiA9IG5ld1NsaWRlVHJhbnNsYXRlIC0gY3VycmVudFNsaWRlVHJhbnNsYXRlO1xuICAgICAgICBpZiAoYnlNb3VzZXdoZWVsKSB7XG4gICAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShzd2lwZXIudHJhbnNsYXRlIC0gZGlmZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlVG8oYWN0aXZlSW5kZXggLSBzbGlkZXNBcHBlbmRlZCwgMCwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgIGlmIChzZXRUcmFuc2xhdGUpIHtcbiAgICAgICAgICAgIHN3aXBlci50b3VjaGVzW3N3aXBlci5pc0hvcml6b250YWwoKSA/ICdzdGFydFgnIDogJ3N0YXJ0WSddICs9IGRpZmY7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuc2xpZGVUb0xvb3Aoc2xpZGVSZWFsSW5kZXgsIDAsIGZhbHNlLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgc3dpcGVyLmFsbG93U2xpZGVQcmV2ID0gYWxsb3dTbGlkZVByZXY7XG4gIHN3aXBlci5hbGxvd1NsaWRlTmV4dCA9IGFsbG93U2xpZGVOZXh0O1xuICBpZiAoc3dpcGVyLmNvbnRyb2xsZXIgJiYgc3dpcGVyLmNvbnRyb2xsZXIuY29udHJvbCAmJiAhYnlDb250cm9sbGVyKSB7XG4gICAgY29uc3QgbG9vcFBhcmFtcyA9IHtcbiAgICAgIHNsaWRlUmVhbEluZGV4LFxuICAgICAgc2xpZGVUbzogZmFsc2UsXG4gICAgICBkaXJlY3Rpb24sXG4gICAgICBzZXRUcmFuc2xhdGUsXG4gICAgICBhY3RpdmVTbGlkZUluZGV4LFxuICAgICAgYnlDb250cm9sbGVyOiB0cnVlXG4gICAgfTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzd2lwZXIuY29udHJvbGxlci5jb250cm9sKSkge1xuICAgICAgc3dpcGVyLmNvbnRyb2xsZXIuY29udHJvbC5mb3JFYWNoKGMgPT4ge1xuICAgICAgICBpZiAoYy5wYXJhbXMubG9vcCkgYy5sb29wRml4KGxvb3BQYXJhbXMpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChzd2lwZXIuY29udHJvbGxlci5jb250cm9sIGluc3RhbmNlb2Ygc3dpcGVyLmNvbnN0cnVjdG9yICYmIHN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wucGFyYW1zLmxvb3ApIHtcbiAgICAgIHN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wubG9vcEZpeChsb29wUGFyYW1zKTtcbiAgICB9XG4gIH1cbiAgc3dpcGVyLmVtaXQoJ2xvb3BGaXgnKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/loop/loopFix.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/moduleExtendParams.js\":\r\n/*!********************************************************!*\\\r\n  !*** ./node_modules/swiper/core/moduleExtendParams.js ***!\r\n  \\********************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ moduleExtendParams)\\n/* harmony export */ });\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\nfunction moduleExtendParams(params, allModulesParams) {\\n  return function extendParams(obj = {}) {\\n    const moduleParamName = Object.keys(obj)[0];\\n    const moduleParams = obj[moduleParamName];\\n    if (typeof moduleParams !== 'object' || moduleParams === null) {\\n      (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.extend)(allModulesParams, obj);\\n      return;\\n    }\\n    if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\\n      params[moduleParamName] = {\\n        auto: true\\n      };\\n    }\\n    if (!(moduleParamName in params && 'enabled' in moduleParams)) {\\n      (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.extend)(allModulesParams, obj);\\n      return;\\n    }\\n    if (params[moduleParamName] === true) {\\n      params[moduleParamName] = {\\n        enabled: true\\n      };\\n    }\\n    if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\\n      params[moduleParamName].enabled = true;\\n    }\\n    if (!params[moduleParamName]) params[moduleParamName] = {\\n      enabled: false\\n    };\\n    (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.extend)(allModulesParams, obj);\\n  };\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvbW9kdWxlRXh0ZW5kUGFyYW1zLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTRDO0FBQzdCO0FBQ2YsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLE1BQU0sd0RBQU07QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSx3REFBTTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSx3REFBTTtBQUNWO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9tb2R1bGVFeHRlbmRQYXJhbXMuanM/ODAzNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbW9kdWxlRXh0ZW5kUGFyYW1zKHBhcmFtcywgYWxsTW9kdWxlc1BhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24gZXh0ZW5kUGFyYW1zKG9iaiA9IHt9KSB7XG4gICAgY29uc3QgbW9kdWxlUGFyYW1OYW1lID0gT2JqZWN0LmtleXMob2JqKVswXTtcbiAgICBjb25zdCBtb2R1bGVQYXJhbXMgPSBvYmpbbW9kdWxlUGFyYW1OYW1lXTtcbiAgICBpZiAodHlwZW9mIG1vZHVsZVBhcmFtcyAhPT0gJ29iamVjdCcgfHwgbW9kdWxlUGFyYW1zID09PSBudWxsKSB7XG4gICAgICBleHRlbmQoYWxsTW9kdWxlc1BhcmFtcywgb2JqKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFsnbmF2aWdhdGlvbicsICdwYWdpbmF0aW9uJywgJ3Njcm9sbGJhciddLmluZGV4T2YobW9kdWxlUGFyYW1OYW1lKSA+PSAwICYmIHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdID09PSB0cnVlKSB7XG4gICAgICBwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSA9IHtcbiAgICAgICAgYXV0bzogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKCEobW9kdWxlUGFyYW1OYW1lIGluIHBhcmFtcyAmJiAnZW5hYmxlZCcgaW4gbW9kdWxlUGFyYW1zKSkge1xuICAgICAgZXh0ZW5kKGFsbE1vZHVsZXNQYXJhbXMsIG9iaik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwYXJhbXNbbW9kdWxlUGFyYW1OYW1lXSA9PT0gdHJ1ZSkge1xuICAgICAgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0gPSB7XG4gICAgICAgIGVuYWJsZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0gPT09ICdvYmplY3QnICYmICEoJ2VuYWJsZWQnIGluIHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdKSkge1xuICAgICAgcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0uZW5hYmxlZCA9IHRydWU7XG4gICAgfVxuICAgIGlmICghcGFyYW1zW21vZHVsZVBhcmFtTmFtZV0pIHBhcmFtc1ttb2R1bGVQYXJhbU5hbWVdID0ge1xuICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICB9O1xuICAgIGV4dGVuZChhbGxNb2R1bGVzUGFyYW1zLCBvYmopO1xuICB9O1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/moduleExtendParams.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/modules/observer/observer.js\":\r\n/*!***************************************************************!*\\\r\n  !*** ./node_modules/swiper/core/modules/observer/observer.js ***!\r\n  \\***************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ Observer)\\n/* harmony export */ });\\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \\\"./node_modules/ssr-window/ssr-window.esm.js\\\");\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\n\\nfunction Observer({\\n  swiper,\\n  extendParams,\\n  on,\\n  emit\\n}) {\\n  const observers = [];\\n  const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n  const attach = (target, options = {}) => {\\n    const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\\n    const observer = new ObserverFunc(mutations => {\\n      // The observerUpdate event should only be triggered\\n      // once despite the number of mutations.  Additional\\n      // triggers are redundant and are very costly\\n      if (mutations.length === 1) {\\n        emit('observerUpdate', mutations[0]);\\n        return;\\n      }\\n      const observerUpdate = function observerUpdate() {\\n        emit('observerUpdate', mutations[0]);\\n      };\\n      if (window.requestAnimationFrame) {\\n        window.requestAnimationFrame(observerUpdate);\\n      } else {\\n        window.setTimeout(observerUpdate, 0);\\n      }\\n    });\\n    observer.observe(target, {\\n      attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\\n      childList: typeof options.childList === 'undefined' ? true : options.childList,\\n      characterData: typeof options.characterData === 'undefined' ? true : options.characterData\\n    });\\n    observers.push(observer);\\n  };\\n  const init = () => {\\n    if (!swiper.params.observer) return;\\n    if (swiper.params.observeParents) {\\n      const containerParents = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementParents)(swiper.el);\\n      for (let i = 0; i < containerParents.length; i += 1) {\\n        attach(containerParents[i]);\\n      }\\n    }\\n    // Observe container\\n    attach(swiper.el, {\\n      childList: swiper.params.observeSlideChildren\\n    });\\n\\n    // Observe wrapper\\n    attach(swiper.wrapperEl, {\\n      attributes: false\\n    });\\n  };\\n  const destroy = () => {\\n    observers.forEach(observer => {\\n      observer.disconnect();\\n    });\\n    observers.splice(0, observers.length);\\n  };\\n  extendParams({\\n    observer: false,\\n    observeParents: false,\\n    observeSlideChildren: false\\n  });\\n  on('init', init);\\n  on('destroy', destroy);\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvbW9kdWxlcy9vYnNlcnZlci9vYnNlcnZlci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBdUM7QUFDbUI7QUFDM0M7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLGlCQUFpQixxREFBUztBQUMxQixzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsZ0VBQWM7QUFDN0Msc0JBQXNCLDZCQUE2QjtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvbW9kdWxlcy9vYnNlcnZlci9vYnNlcnZlci5qcz8wOTgwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gJ3Nzci13aW5kb3cnO1xuaW1wb3J0IHsgZWxlbWVudFBhcmVudHMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdXRpbHMuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gT2JzZXJ2ZXIoe1xuICBzd2lwZXIsXG4gIGV4dGVuZFBhcmFtcyxcbiAgb24sXG4gIGVtaXRcbn0pIHtcbiAgY29uc3Qgb2JzZXJ2ZXJzID0gW107XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICBjb25zdCBhdHRhY2ggPSAodGFyZ2V0LCBvcHRpb25zID0ge30pID0+IHtcbiAgICBjb25zdCBPYnNlcnZlckZ1bmMgPSB3aW5kb3cuTXV0YXRpb25PYnNlcnZlciB8fCB3aW5kb3cuV2Via2l0TXV0YXRpb25PYnNlcnZlcjtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBPYnNlcnZlckZ1bmMobXV0YXRpb25zID0+IHtcbiAgICAgIC8vIFRoZSBvYnNlcnZlclVwZGF0ZSBldmVudCBzaG91bGQgb25seSBiZSB0cmlnZ2VyZWRcbiAgICAgIC8vIG9uY2UgZGVzcGl0ZSB0aGUgbnVtYmVyIG9mIG11dGF0aW9ucy4gIEFkZGl0aW9uYWxcbiAgICAgIC8vIHRyaWdnZXJzIGFyZSByZWR1bmRhbnQgYW5kIGFyZSB2ZXJ5IGNvc3RseVxuICAgICAgaWYgKG11dGF0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZW1pdCgnb2JzZXJ2ZXJVcGRhdGUnLCBtdXRhdGlvbnNbMF0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBvYnNlcnZlclVwZGF0ZSA9IGZ1bmN0aW9uIG9ic2VydmVyVXBkYXRlKCkge1xuICAgICAgICBlbWl0KCdvYnNlcnZlclVwZGF0ZScsIG11dGF0aW9uc1swXSk7XG4gICAgICB9O1xuICAgICAgaWYgKHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShvYnNlcnZlclVwZGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cuc2V0VGltZW91dChvYnNlcnZlclVwZGF0ZSwgMCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXQsIHtcbiAgICAgIGF0dHJpYnV0ZXM6IHR5cGVvZiBvcHRpb25zLmF0dHJpYnV0ZXMgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IG9wdGlvbnMuYXR0cmlidXRlcyxcbiAgICAgIGNoaWxkTGlzdDogdHlwZW9mIG9wdGlvbnMuY2hpbGRMaXN0ID09PSAndW5kZWZpbmVkJyA/IHRydWUgOiBvcHRpb25zLmNoaWxkTGlzdCxcbiAgICAgIGNoYXJhY3RlckRhdGE6IHR5cGVvZiBvcHRpb25zLmNoYXJhY3RlckRhdGEgPT09ICd1bmRlZmluZWQnID8gdHJ1ZSA6IG9wdGlvbnMuY2hhcmFjdGVyRGF0YVxuICAgIH0pO1xuICAgIG9ic2VydmVycy5wdXNoKG9ic2VydmVyKTtcbiAgfTtcbiAgY29uc3QgaW5pdCA9ICgpID0+IHtcbiAgICBpZiAoIXN3aXBlci5wYXJhbXMub2JzZXJ2ZXIpIHJldHVybjtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5vYnNlcnZlUGFyZW50cykge1xuICAgICAgY29uc3QgY29udGFpbmVyUGFyZW50cyA9IGVsZW1lbnRQYXJlbnRzKHN3aXBlci5lbCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRhaW5lclBhcmVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgYXR0YWNoKGNvbnRhaW5lclBhcmVudHNbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBPYnNlcnZlIGNvbnRhaW5lclxuICAgIGF0dGFjaChzd2lwZXIuZWwsIHtcbiAgICAgIGNoaWxkTGlzdDogc3dpcGVyLnBhcmFtcy5vYnNlcnZlU2xpZGVDaGlsZHJlblxuICAgIH0pO1xuXG4gICAgLy8gT2JzZXJ2ZSB3cmFwcGVyXG4gICAgYXR0YWNoKHN3aXBlci53cmFwcGVyRWwsIHtcbiAgICAgIGF0dHJpYnV0ZXM6IGZhbHNlXG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgb2JzZXJ2ZXJzLmZvckVhY2gob2JzZXJ2ZXIgPT4ge1xuICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH0pO1xuICAgIG9ic2VydmVycy5zcGxpY2UoMCwgb2JzZXJ2ZXJzLmxlbmd0aCk7XG4gIH07XG4gIGV4dGVuZFBhcmFtcyh7XG4gICAgb2JzZXJ2ZXI6IGZhbHNlLFxuICAgIG9ic2VydmVQYXJlbnRzOiBmYWxzZSxcbiAgICBvYnNlcnZlU2xpZGVDaGlsZHJlbjogZmFsc2VcbiAgfSk7XG4gIG9uKCdpbml0JywgaW5pdCk7XG4gIG9uKCdkZXN0cm95JywgZGVzdHJveSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/modules/observer/observer.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/modules/resize/resize.js\":\r\n/*!***********************************************************!*\\\r\n  !*** ./node_modules/swiper/core/modules/resize/resize.js ***!\r\n  \\***********************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ Resize)\\n/* harmony export */ });\\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \\\"./node_modules/ssr-window/ssr-window.esm.js\\\");\\n\\nfunction Resize({\\n  swiper,\\n  on,\\n  emit\\n}) {\\n  const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n  let observer = null;\\n  let animationFrame = null;\\n  const resizeHandler = () => {\\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\\n    emit('beforeResize');\\n    emit('resize');\\n  };\\n  const createObserver = () => {\\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\\n    observer = new ResizeObserver(entries => {\\n      animationFrame = window.requestAnimationFrame(() => {\\n        const {\\n          width,\\n          height\\n        } = swiper;\\n        let newWidth = width;\\n        let newHeight = height;\\n        entries.forEach(({\\n          contentBoxSize,\\n          contentRect,\\n          target\\n        }) => {\\n          if (target && target !== swiper.el) return;\\n          newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\\n          newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\\n        });\\n        if (newWidth !== width || newHeight !== height) {\\n          resizeHandler();\\n        }\\n      });\\n    });\\n    observer.observe(swiper.el);\\n  };\\n  const removeObserver = () => {\\n    if (animationFrame) {\\n      window.cancelAnimationFrame(animationFrame);\\n    }\\n    if (observer && observer.unobserve && swiper.el) {\\n      observer.unobserve(swiper.el);\\n      observer = null;\\n    }\\n  };\\n  const orientationChangeHandler = () => {\\n    if (!swiper || swiper.destroyed || !swiper.initialized) return;\\n    emit('orientationchange');\\n  };\\n  on('init', () => {\\n    if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\\n      createObserver();\\n      return;\\n    }\\n    window.addEventListener('resize', resizeHandler);\\n    window.addEventListener('orientationchange', orientationChangeHandler);\\n  });\\n  on('destroy', () => {\\n    removeObserver();\\n    window.removeEventListener('resize', resizeHandler);\\n    window.removeEventListener('orientationchange', orientationChangeHandler);\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvbW9kdWxlcy9yZXNpemUvcmVzaXplLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXVDO0FBQ3hCO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELGlCQUFpQixxREFBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL21vZHVsZXMvcmVzaXplL3Jlc2l6ZS5qcz80YmIyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gJ3Nzci13aW5kb3cnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUmVzaXplKHtcbiAgc3dpcGVyLFxuICBvbixcbiAgZW1pdFxufSkge1xuICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgbGV0IG9ic2VydmVyID0gbnVsbDtcbiAgbGV0IGFuaW1hdGlvbkZyYW1lID0gbnVsbDtcbiAgY29uc3QgcmVzaXplSGFuZGxlciA9ICgpID0+IHtcbiAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkIHx8ICFzd2lwZXIuaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgICBlbWl0KCdiZWZvcmVSZXNpemUnKTtcbiAgICBlbWl0KCdyZXNpemUnKTtcbiAgfTtcbiAgY29uc3QgY3JlYXRlT2JzZXJ2ZXIgPSAoKSA9PiB7XG4gICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCB8fCAhc3dpcGVyLmluaXRpYWxpemVkKSByZXR1cm47XG4gICAgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoZW50cmllcyA9PiB7XG4gICAgICBhbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgaGVpZ2h0XG4gICAgICAgIH0gPSBzd2lwZXI7XG4gICAgICAgIGxldCBuZXdXaWR0aCA9IHdpZHRoO1xuICAgICAgICBsZXQgbmV3SGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICBlbnRyaWVzLmZvckVhY2goKHtcbiAgICAgICAgICBjb250ZW50Qm94U2l6ZSxcbiAgICAgICAgICBjb250ZW50UmVjdCxcbiAgICAgICAgICB0YXJnZXRcbiAgICAgICAgfSkgPT4ge1xuICAgICAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0ICE9PSBzd2lwZXIuZWwpIHJldHVybjtcbiAgICAgICAgICBuZXdXaWR0aCA9IGNvbnRlbnRSZWN0ID8gY29udGVudFJlY3Qud2lkdGggOiAoY29udGVudEJveFNpemVbMF0gfHwgY29udGVudEJveFNpemUpLmlubGluZVNpemU7XG4gICAgICAgICAgbmV3SGVpZ2h0ID0gY29udGVudFJlY3QgPyBjb250ZW50UmVjdC5oZWlnaHQgOiAoY29udGVudEJveFNpemVbMF0gfHwgY29udGVudEJveFNpemUpLmJsb2NrU2l6ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChuZXdXaWR0aCAhPT0gd2lkdGggfHwgbmV3SGVpZ2h0ICE9PSBoZWlnaHQpIHtcbiAgICAgICAgICByZXNpemVIYW5kbGVyKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoc3dpcGVyLmVsKTtcbiAgfTtcbiAgY29uc3QgcmVtb3ZlT2JzZXJ2ZXIgPSAoKSA9PiB7XG4gICAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoYW5pbWF0aW9uRnJhbWUpO1xuICAgIH1cbiAgICBpZiAob2JzZXJ2ZXIgJiYgb2JzZXJ2ZXIudW5vYnNlcnZlICYmIHN3aXBlci5lbCkge1xuICAgICAgb2JzZXJ2ZXIudW5vYnNlcnZlKHN3aXBlci5lbCk7XG4gICAgICBvYnNlcnZlciA9IG51bGw7XG4gICAgfVxuICB9O1xuICBjb25zdCBvcmllbnRhdGlvbkNoYW5nZUhhbmRsZXIgPSAoKSA9PiB7XG4gICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCB8fCAhc3dpcGVyLmluaXRpYWxpemVkKSByZXR1cm47XG4gICAgZW1pdCgnb3JpZW50YXRpb25jaGFuZ2UnKTtcbiAgfTtcbiAgb24oJ2luaXQnLCAoKSA9PiB7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMucmVzaXplT2JzZXJ2ZXIgJiYgdHlwZW9mIHdpbmRvdy5SZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNyZWF0ZU9ic2VydmVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCByZXNpemVIYW5kbGVyKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb3JpZW50YXRpb25jaGFuZ2UnLCBvcmllbnRhdGlvbkNoYW5nZUhhbmRsZXIpO1xuICB9KTtcbiAgb24oJ2Rlc3Ryb3knLCAoKSA9PiB7XG4gICAgcmVtb3ZlT2JzZXJ2ZXIoKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgcmVzaXplSGFuZGxlcik7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29yaWVudGF0aW9uY2hhbmdlJywgb3JpZW50YXRpb25DaGFuZ2VIYW5kbGVyKTtcbiAgfSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/modules/resize/resize.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/slide/index.js\":\r\n/*!*************************************************!*\\\r\n  !*** ./node_modules/swiper/core/slide/index.js ***!\r\n  \\*************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* harmony import */ var _slideTo_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./slideTo.js */ \\\"./node_modules/swiper/core/slide/slideTo.js\\\");\\n/* harmony import */ var _slideToLoop_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./slideToLoop.js */ \\\"./node_modules/swiper/core/slide/slideToLoop.js\\\");\\n/* harmony import */ var _slideNext_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./slideNext.js */ \\\"./node_modules/swiper/core/slide/slideNext.js\\\");\\n/* harmony import */ var _slidePrev_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./slidePrev.js */ \\\"./node_modules/swiper/core/slide/slidePrev.js\\\");\\n/* harmony import */ var _slideReset_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./slideReset.js */ \\\"./node_modules/swiper/core/slide/slideReset.js\\\");\\n/* harmony import */ var _slideToClosest_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./slideToClosest.js */ \\\"./node_modules/swiper/core/slide/slideToClosest.js\\\");\\n/* harmony import */ var _slideToClickedSlide_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./slideToClickedSlide.js */ \\\"./node_modules/swiper/core/slide/slideToClickedSlide.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\\n  slideTo: _slideTo_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"],\\n  slideToLoop: _slideToLoop_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"],\\n  slideNext: _slideNext_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"],\\n  slidePrev: _slidePrev_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"],\\n  slideReset: _slideReset_js__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"],\\n  slideToClosest: _slideToClosest_js__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"],\\n  slideToClickedSlide: _slideToClickedSlide_js__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"]\\n});//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvc2xpZGUvaW5kZXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBbUM7QUFDUTtBQUNKO0FBQ0E7QUFDRTtBQUNRO0FBQ1U7QUFDM0QsaUVBQWU7QUFDZixTQUFTO0FBQ1QsYUFBYTtBQUNiLFdBQVc7QUFDWCxXQUFXO0FBQ1gsWUFBWTtBQUNaLGdCQUFnQjtBQUNoQixxQkFBcUI7QUFDckIsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3NsaWRlL2luZGV4LmpzPzM3NjgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNsaWRlVG8gZnJvbSAnLi9zbGlkZVRvLmpzJztcbmltcG9ydCBzbGlkZVRvTG9vcCBmcm9tICcuL3NsaWRlVG9Mb29wLmpzJztcbmltcG9ydCBzbGlkZU5leHQgZnJvbSAnLi9zbGlkZU5leHQuanMnO1xuaW1wb3J0IHNsaWRlUHJldiBmcm9tICcuL3NsaWRlUHJldi5qcyc7XG5pbXBvcnQgc2xpZGVSZXNldCBmcm9tICcuL3NsaWRlUmVzZXQuanMnO1xuaW1wb3J0IHNsaWRlVG9DbG9zZXN0IGZyb20gJy4vc2xpZGVUb0Nsb3Nlc3QuanMnO1xuaW1wb3J0IHNsaWRlVG9DbGlja2VkU2xpZGUgZnJvbSAnLi9zbGlkZVRvQ2xpY2tlZFNsaWRlLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2xpZGVUbyxcbiAgc2xpZGVUb0xvb3AsXG4gIHNsaWRlTmV4dCxcbiAgc2xpZGVQcmV2LFxuICBzbGlkZVJlc2V0LFxuICBzbGlkZVRvQ2xvc2VzdCxcbiAgc2xpZGVUb0NsaWNrZWRTbGlkZVxufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/slide/index.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/slide/slideNext.js\":\r\n/*!*****************************************************!*\\\r\n  !*** ./node_modules/swiper/core/slide/slideNext.js ***!\r\n  \\*****************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ slideNext)\\n/* harmony export */ });\\n/* eslint no-unused-vars: \\\"off\\\" */\\nfunction slideNext(speed = this.params.speed, runCallbacks = true, internal) {\\n  const swiper = this;\\n  const {\\n    enabled,\\n    params,\\n    animating\\n  } = swiper;\\n  if (!enabled) return swiper;\\n  let perGroup = params.slidesPerGroup;\\n  if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\\n    perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\\n  }\\n  const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\\n  const isVirtual = swiper.virtual && params.virtual.enabled;\\n  if (params.loop) {\\n    if (animating && !isVirtual && params.loopPreventsSliding) return false;\\n    swiper.loopFix({\\n      direction: 'next'\\n    });\\n    // eslint-disable-next-line\\n    swiper._clientLeft = swiper.wrapperEl.clientLeft;\\n  }\\n  if (params.rewind && swiper.isEnd) {\\n    return swiper.slideTo(0, speed, runCallbacks, internal);\\n  }\\n  return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvc2xpZGUvc2xpZGVOZXh0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9zbGlkZS9zbGlkZU5leHQuanM/YzRkZCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6IFwib2ZmXCIgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNsaWRlTmV4dChzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkLCBydW5DYWxsYmFja3MgPSB0cnVlLCBpbnRlcm5hbCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgZW5hYmxlZCxcbiAgICBwYXJhbXMsXG4gICAgYW5pbWF0aW5nXG4gIH0gPSBzd2lwZXI7XG4gIGlmICghZW5hYmxlZCkgcmV0dXJuIHN3aXBlcjtcbiAgbGV0IHBlckdyb3VwID0gcGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuICBpZiAocGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyAmJiBwYXJhbXMuc2xpZGVzUGVyR3JvdXAgPT09IDEgJiYgcGFyYW1zLnNsaWRlc1Blckdyb3VwQXV0bykge1xuICAgIHBlckdyb3VwID0gTWF0aC5tYXgoc3dpcGVyLnNsaWRlc1BlclZpZXdEeW5hbWljKCdjdXJyZW50JywgdHJ1ZSksIDEpO1xuICB9XG4gIGNvbnN0IGluY3JlbWVudCA9IHN3aXBlci5hY3RpdmVJbmRleCA8IHBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAgPyAxIDogcGVyR3JvdXA7XG4gIGNvbnN0IGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIGlmIChhbmltYXRpbmcgJiYgIWlzVmlydHVhbCAmJiBwYXJhbXMubG9vcFByZXZlbnRzU2xpZGluZykgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXBlci5sb29wRml4KHtcbiAgICAgIGRpcmVjdGlvbjogJ25leHQnXG4gICAgfSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgc3dpcGVyLl9jbGllbnRMZWZ0ID0gc3dpcGVyLndyYXBwZXJFbC5jbGllbnRMZWZ0O1xuICB9XG4gIGlmIChwYXJhbXMucmV3aW5kICYmIHN3aXBlci5pc0VuZCkge1xuICAgIHJldHVybiBzd2lwZXIuc2xpZGVUbygwLCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG4gIH1cbiAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCArIGluY3JlbWVudCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/slide/slideNext.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/slide/slidePrev.js\":\r\n/*!*****************************************************!*\\\r\n  !*** ./node_modules/swiper/core/slide/slidePrev.js ***!\r\n  \\*****************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ slidePrev)\\n/* harmony export */ });\\n/* eslint no-unused-vars: \\\"off\\\" */\\nfunction slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\\n  const swiper = this;\\n  const {\\n    params,\\n    snapGrid,\\n    slidesGrid,\\n    rtlTranslate,\\n    enabled,\\n    animating\\n  } = swiper;\\n  if (!enabled) return swiper;\\n  const isVirtual = swiper.virtual && params.virtual.enabled;\\n  if (params.loop) {\\n    if (animating && !isVirtual && params.loopPreventsSliding) return false;\\n    swiper.loopFix({\\n      direction: 'prev'\\n    });\\n    // eslint-disable-next-line\\n    swiper._clientLeft = swiper.wrapperEl.clientLeft;\\n  }\\n  const translate = rtlTranslate ? swiper.translate : -swiper.translate;\\n  function normalize(val) {\\n    if (val < 0) return -Math.floor(Math.abs(val));\\n    return Math.floor(val);\\n  }\\n  const normalizedTranslate = normalize(translate);\\n  const normalizedSnapGrid = snapGrid.map(val => normalize(val));\\n  let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\\n  if (typeof prevSnap === 'undefined' && params.cssMode) {\\n    let prevSnapIndex;\\n    snapGrid.forEach((snap, snapIndex) => {\\n      if (normalizedTranslate >= snap) {\\n        // prevSnap = snap;\\n        prevSnapIndex = snapIndex;\\n      }\\n    });\\n    if (typeof prevSnapIndex !== 'undefined') {\\n      prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\\n    }\\n  }\\n  let prevIndex = 0;\\n  if (typeof prevSnap !== 'undefined') {\\n    prevIndex = slidesGrid.indexOf(prevSnap);\\n    if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\\n    if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\\n      prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\\n      prevIndex = Math.max(prevIndex, 0);\\n    }\\n  }\\n  if (params.rewind && swiper.isBeginning) {\\n    const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\\n    return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\\n  }\\n  return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvc2xpZGUvc2xpZGVQcmV2LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvc2xpZGUvc2xpZGVQcmV2LmpzP2RjNGQiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IG5vLXVudXNlZC12YXJzOiBcIm9mZlwiICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzbGlkZVByZXYoc3BlZWQgPSB0aGlzLnBhcmFtcy5zcGVlZCwgcnVuQ2FsbGJhY2tzID0gdHJ1ZSwgaW50ZXJuYWwpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3Qge1xuICAgIHBhcmFtcyxcbiAgICBzbmFwR3JpZCxcbiAgICBzbGlkZXNHcmlkLFxuICAgIHJ0bFRyYW5zbGF0ZSxcbiAgICBlbmFibGVkLFxuICAgIGFuaW1hdGluZ1xuICB9ID0gc3dpcGVyO1xuICBpZiAoIWVuYWJsZWQpIHJldHVybiBzd2lwZXI7XG4gIGNvbnN0IGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIGlmIChhbmltYXRpbmcgJiYgIWlzVmlydHVhbCAmJiBwYXJhbXMubG9vcFByZXZlbnRzU2xpZGluZykgcmV0dXJuIGZhbHNlO1xuICAgIHN3aXBlci5sb29wRml4KHtcbiAgICAgIGRpcmVjdGlvbjogJ3ByZXYnXG4gICAgfSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgc3dpcGVyLl9jbGllbnRMZWZ0ID0gc3dpcGVyLndyYXBwZXJFbC5jbGllbnRMZWZ0O1xuICB9XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHJ0bFRyYW5zbGF0ZSA/IHN3aXBlci50cmFuc2xhdGUgOiAtc3dpcGVyLnRyYW5zbGF0ZTtcbiAgZnVuY3Rpb24gbm9ybWFsaXplKHZhbCkge1xuICAgIGlmICh2YWwgPCAwKSByZXR1cm4gLU1hdGguZmxvb3IoTWF0aC5hYnModmFsKSk7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IodmFsKTtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkVHJhbnNsYXRlID0gbm9ybWFsaXplKHRyYW5zbGF0ZSk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRTbmFwR3JpZCA9IHNuYXBHcmlkLm1hcCh2YWwgPT4gbm9ybWFsaXplKHZhbCkpO1xuICBsZXQgcHJldlNuYXAgPSBzbmFwR3JpZFtub3JtYWxpemVkU25hcEdyaWQuaW5kZXhPZihub3JtYWxpemVkVHJhbnNsYXRlKSAtIDFdO1xuICBpZiAodHlwZW9mIHByZXZTbmFwID09PSAndW5kZWZpbmVkJyAmJiBwYXJhbXMuY3NzTW9kZSkge1xuICAgIGxldCBwcmV2U25hcEluZGV4O1xuICAgIHNuYXBHcmlkLmZvckVhY2goKHNuYXAsIHNuYXBJbmRleCkgPT4ge1xuICAgICAgaWYgKG5vcm1hbGl6ZWRUcmFuc2xhdGUgPj0gc25hcCkge1xuICAgICAgICAvLyBwcmV2U25hcCA9IHNuYXA7XG4gICAgICAgIHByZXZTbmFwSW5kZXggPSBzbmFwSW5kZXg7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHR5cGVvZiBwcmV2U25hcEluZGV4ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcHJldlNuYXAgPSBzbmFwR3JpZFtwcmV2U25hcEluZGV4ID4gMCA/IHByZXZTbmFwSW5kZXggLSAxIDogcHJldlNuYXBJbmRleF07XG4gICAgfVxuICB9XG4gIGxldCBwcmV2SW5kZXggPSAwO1xuICBpZiAodHlwZW9mIHByZXZTbmFwICE9PSAndW5kZWZpbmVkJykge1xuICAgIHByZXZJbmRleCA9IHNsaWRlc0dyaWQuaW5kZXhPZihwcmV2U25hcCk7XG4gICAgaWYgKHByZXZJbmRleCA8IDApIHByZXZJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCAtIDE7XG4gICAgaWYgKHBhcmFtcy5zbGlkZXNQZXJWaWV3ID09PSAnYXV0bycgJiYgcGFyYW1zLnNsaWRlc1Blckdyb3VwID09PSAxICYmIHBhcmFtcy5zbGlkZXNQZXJHcm91cEF1dG8pIHtcbiAgICAgIHByZXZJbmRleCA9IHByZXZJbmRleCAtIHN3aXBlci5zbGlkZXNQZXJWaWV3RHluYW1pYygncHJldmlvdXMnLCB0cnVlKSArIDE7XG4gICAgICBwcmV2SW5kZXggPSBNYXRoLm1heChwcmV2SW5kZXgsIDApO1xuICAgIH1cbiAgfVxuICBpZiAocGFyYW1zLnJld2luZCAmJiBzd2lwZXIuaXNCZWdpbm5pbmcpIHtcbiAgICBjb25zdCBsYXN0SW5kZXggPSBzd2lwZXIucGFyYW1zLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQgJiYgc3dpcGVyLnZpcnR1YWwgPyBzd2lwZXIudmlydHVhbC5zbGlkZXMubGVuZ3RoIC0gMSA6IHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMTtcbiAgICByZXR1cm4gc3dpcGVyLnNsaWRlVG8obGFzdEluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG4gIH1cbiAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKHByZXZJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/slide/slidePrev.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/slide/slideReset.js\":\r\n/*!******************************************************!*\\\r\n  !*** ./node_modules/swiper/core/slide/slideReset.js ***!\r\n  \\******************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ slideReset)\\n/* harmony export */ });\\n/* eslint no-unused-vars: \\\"off\\\" */\\nfunction slideReset(speed = this.params.speed, runCallbacks = true, internal) {\\n  const swiper = this;\\n  return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvc2xpZGUvc2xpZGVSZXNldC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDZTtBQUNmO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3NsaWRlL3NsaWRlUmVzZXQuanM/MmNjNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQgbm8tdW51c2VkLXZhcnM6IFwib2ZmXCIgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNsaWRlUmVzZXQoc3BlZWQgPSB0aGlzLnBhcmFtcy5zcGVlZCwgcnVuQ2FsbGJhY2tzID0gdHJ1ZSwgaW50ZXJuYWwpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCwgc3BlZWQsIHJ1bkNhbGxiYWNrcywgaW50ZXJuYWwpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/slide/slideReset.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/slide/slideTo.js\":\r\n/*!***************************************************!*\\\r\n  !*** ./node_modules/swiper/core/slide/slideTo.js ***!\r\n  \\***************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ slideTo)\\n/* harmony export */ });\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\nfunction slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) {\\n  if (typeof index === 'string') {\\n    index = parseInt(index, 10);\\n  }\\n  const swiper = this;\\n  let slideIndex = index;\\n  if (slideIndex < 0) slideIndex = 0;\\n  const {\\n    params,\\n    snapGrid,\\n    slidesGrid,\\n    previousIndex,\\n    activeIndex,\\n    rtlTranslate: rtl,\\n    wrapperEl,\\n    enabled\\n  } = swiper;\\n  if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\\n    return false;\\n  }\\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\\n  let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\\n  const translate = -snapGrid[snapIndex];\\n  // Normalize slideIndex\\n  if (params.normalizeSlideIndex) {\\n    for (let i = 0; i < slidesGrid.length; i += 1) {\\n      const normalizedTranslate = -Math.floor(translate * 100);\\n      const normalizedGrid = Math.floor(slidesGrid[i] * 100);\\n      const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\\n      if (typeof slidesGrid[i + 1] !== 'undefined') {\\n        if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\\n          slideIndex = i;\\n        } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\\n          slideIndex = i + 1;\\n        }\\n      } else if (normalizedTranslate >= normalizedGrid) {\\n        slideIndex = i;\\n      }\\n    }\\n  }\\n  // Directions locks\\n  if (swiper.initialized && slideIndex !== activeIndex) {\\n    if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\\n      return false;\\n    }\\n    if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\\n      if ((activeIndex || 0) !== slideIndex) {\\n        return false;\\n      }\\n    }\\n  }\\n  if (slideIndex !== (previousIndex || 0) && runCallbacks) {\\n    swiper.emit('beforeSlideChangeStart');\\n  }\\n\\n  // Update progress\\n  swiper.updateProgress(translate);\\n  let direction;\\n  if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\\n\\n  // Update Index\\n  if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\\n    swiper.updateActiveIndex(slideIndex);\\n    // Update Height\\n    if (params.autoHeight) {\\n      swiper.updateAutoHeight();\\n    }\\n    swiper.updateSlidesClasses();\\n    if (params.effect !== 'slide') {\\n      swiper.setTranslate(translate);\\n    }\\n    if (direction !== 'reset') {\\n      swiper.transitionStart(runCallbacks, direction);\\n      swiper.transitionEnd(runCallbacks, direction);\\n    }\\n    return false;\\n  }\\n  if (params.cssMode) {\\n    const isH = swiper.isHorizontal();\\n    const t = rtl ? translate : -translate;\\n    if (speed === 0) {\\n      const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\\n      if (isVirtual) {\\n        swiper.wrapperEl.style.scrollSnapType = 'none';\\n        swiper._immediateVirtual = true;\\n      }\\n      if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\\n        swiper._cssModeVirtualInitialSet = true;\\n        requestAnimationFrame(() => {\\n          wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\\n        });\\n      } else {\\n        wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\\n      }\\n      if (isVirtual) {\\n        requestAnimationFrame(() => {\\n          swiper.wrapperEl.style.scrollSnapType = '';\\n          swiper._immediateVirtual = false;\\n        });\\n      }\\n    } else {\\n      if (!swiper.support.smoothScroll) {\\n        (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.animateCSSModeScroll)({\\n          swiper,\\n          targetPosition: t,\\n          side: isH ? 'left' : 'top'\\n        });\\n        return true;\\n      }\\n      wrapperEl.scrollTo({\\n        [isH ? 'left' : 'top']: t,\\n        behavior: 'smooth'\\n      });\\n    }\\n    return true;\\n  }\\n  swiper.setTransition(speed);\\n  swiper.setTranslate(translate);\\n  swiper.updateActiveIndex(slideIndex);\\n  swiper.updateSlidesClasses();\\n  swiper.emit('beforeTransitionStart', speed, internal);\\n  swiper.transitionStart(runCallbacks, direction);\\n  if (speed === 0) {\\n    swiper.transitionEnd(runCallbacks, direction);\\n  } else if (!swiper.animating) {\\n    swiper.animating = true;\\n    if (!swiper.onSlideToWrapperTransitionEnd) {\\n      swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\\n        if (!swiper || swiper.destroyed) return;\\n        if (e.target !== this) return;\\n        swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\\n        swiper.onSlideToWrapperTransitionEnd = null;\\n        delete swiper.onSlideToWrapperTransitionEnd;\\n        swiper.transitionEnd(runCallbacks, direction);\\n      };\\n    }\\n    swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\\n  }\\n  return true;\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvc2xpZGUvc2xpZGVUby5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUE2RDtBQUM5QztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsdUJBQXVCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsc0RBQXNEOztBQUV6RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLE1BQU07QUFDTjtBQUNBLFFBQVEsc0VBQW9CO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvc2xpZGUvc2xpZGVUby5qcz85MTVmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGVDU1NNb2RlU2Nyb2xsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNsaWRlVG8oaW5kZXggPSAwLCBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkLCBydW5DYWxsYmFja3MgPSB0cnVlLCBpbnRlcm5hbCwgaW5pdGlhbCkge1xuICBpZiAodHlwZW9mIGluZGV4ID09PSAnc3RyaW5nJykge1xuICAgIGluZGV4ID0gcGFyc2VJbnQoaW5kZXgsIDEwKTtcbiAgfVxuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBsZXQgc2xpZGVJbmRleCA9IGluZGV4O1xuICBpZiAoc2xpZGVJbmRleCA8IDApIHNsaWRlSW5kZXggPSAwO1xuICBjb25zdCB7XG4gICAgcGFyYW1zLFxuICAgIHNuYXBHcmlkLFxuICAgIHNsaWRlc0dyaWQsXG4gICAgcHJldmlvdXNJbmRleCxcbiAgICBhY3RpdmVJbmRleCxcbiAgICBydGxUcmFuc2xhdGU6IHJ0bCxcbiAgICB3cmFwcGVyRWwsXG4gICAgZW5hYmxlZFxuICB9ID0gc3dpcGVyO1xuICBpZiAoc3dpcGVyLmFuaW1hdGluZyAmJiBwYXJhbXMucHJldmVudEludGVyYWN0aW9uT25UcmFuc2l0aW9uIHx8ICFlbmFibGVkICYmICFpbnRlcm5hbCAmJiAhaW5pdGlhbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBza2lwID0gTWF0aC5taW4oc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cFNraXAsIHNsaWRlSW5kZXgpO1xuICBsZXQgc25hcEluZGV4ID0gc2tpcCArIE1hdGguZmxvb3IoKHNsaWRlSW5kZXggLSBza2lwKSAvIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXApO1xuICBpZiAoc25hcEluZGV4ID49IHNuYXBHcmlkLmxlbmd0aCkgc25hcEluZGV4ID0gc25hcEdyaWQubGVuZ3RoIC0gMTtcbiAgY29uc3QgdHJhbnNsYXRlID0gLXNuYXBHcmlkW3NuYXBJbmRleF07XG4gIC8vIE5vcm1hbGl6ZSBzbGlkZUluZGV4XG4gIGlmIChwYXJhbXMubm9ybWFsaXplU2xpZGVJbmRleCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpZGVzR3JpZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFRyYW5zbGF0ZSA9IC1NYXRoLmZsb29yKHRyYW5zbGF0ZSAqIDEwMCk7XG4gICAgICBjb25zdCBub3JtYWxpemVkR3JpZCA9IE1hdGguZmxvb3Ioc2xpZGVzR3JpZFtpXSAqIDEwMCk7XG4gICAgICBjb25zdCBub3JtYWxpemVkR3JpZE5leHQgPSBNYXRoLmZsb29yKHNsaWRlc0dyaWRbaSArIDFdICogMTAwKTtcbiAgICAgIGlmICh0eXBlb2Ygc2xpZGVzR3JpZFtpICsgMV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmIChub3JtYWxpemVkVHJhbnNsYXRlID49IG5vcm1hbGl6ZWRHcmlkICYmIG5vcm1hbGl6ZWRUcmFuc2xhdGUgPCBub3JtYWxpemVkR3JpZE5leHQgLSAobm9ybWFsaXplZEdyaWROZXh0IC0gbm9ybWFsaXplZEdyaWQpIC8gMikge1xuICAgICAgICAgIHNsaWRlSW5kZXggPSBpO1xuICAgICAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWRUcmFuc2xhdGUgPj0gbm9ybWFsaXplZEdyaWQgJiYgbm9ybWFsaXplZFRyYW5zbGF0ZSA8IG5vcm1hbGl6ZWRHcmlkTmV4dCkge1xuICAgICAgICAgIHNsaWRlSW5kZXggPSBpICsgMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub3JtYWxpemVkVHJhbnNsYXRlID49IG5vcm1hbGl6ZWRHcmlkKSB7XG4gICAgICAgIHNsaWRlSW5kZXggPSBpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBEaXJlY3Rpb25zIGxvY2tzXG4gIGlmIChzd2lwZXIuaW5pdGlhbGl6ZWQgJiYgc2xpZGVJbmRleCAhPT0gYWN0aXZlSW5kZXgpIHtcbiAgICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlTmV4dCAmJiB0cmFuc2xhdGUgPCBzd2lwZXIudHJhbnNsYXRlICYmIHRyYW5zbGF0ZSA8IHN3aXBlci5taW5UcmFuc2xhdGUoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoIXN3aXBlci5hbGxvd1NsaWRlUHJldiAmJiB0cmFuc2xhdGUgPiBzd2lwZXIudHJhbnNsYXRlICYmIHRyYW5zbGF0ZSA+IHN3aXBlci5tYXhUcmFuc2xhdGUoKSkge1xuICAgICAgaWYgKChhY3RpdmVJbmRleCB8fCAwKSAhPT0gc2xpZGVJbmRleCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzbGlkZUluZGV4ICE9PSAocHJldmlvdXNJbmRleCB8fCAwKSAmJiBydW5DYWxsYmFja3MpIHtcbiAgICBzd2lwZXIuZW1pdCgnYmVmb3JlU2xpZGVDaGFuZ2VTdGFydCcpO1xuICB9XG5cbiAgLy8gVXBkYXRlIHByb2dyZXNzXG4gIHN3aXBlci51cGRhdGVQcm9ncmVzcyh0cmFuc2xhdGUpO1xuICBsZXQgZGlyZWN0aW9uO1xuICBpZiAoc2xpZGVJbmRleCA+IGFjdGl2ZUluZGV4KSBkaXJlY3Rpb24gPSAnbmV4dCc7ZWxzZSBpZiAoc2xpZGVJbmRleCA8IGFjdGl2ZUluZGV4KSBkaXJlY3Rpb24gPSAncHJldic7ZWxzZSBkaXJlY3Rpb24gPSAncmVzZXQnO1xuXG4gIC8vIFVwZGF0ZSBJbmRleFxuICBpZiAocnRsICYmIC10cmFuc2xhdGUgPT09IHN3aXBlci50cmFuc2xhdGUgfHwgIXJ0bCAmJiB0cmFuc2xhdGUgPT09IHN3aXBlci50cmFuc2xhdGUpIHtcbiAgICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoc2xpZGVJbmRleCk7XG4gICAgLy8gVXBkYXRlIEhlaWdodFxuICAgIGlmIChwYXJhbXMuYXV0b0hlaWdodCkge1xuICAgICAgc3dpcGVyLnVwZGF0ZUF1dG9IZWlnaHQoKTtcbiAgICB9XG4gICAgc3dpcGVyLnVwZGF0ZVNsaWRlc0NsYXNzZXMoKTtcbiAgICBpZiAocGFyYW1zLmVmZmVjdCAhPT0gJ3NsaWRlJykge1xuICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZSh0cmFuc2xhdGUpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0aW9uICE9PSAncmVzZXQnKSB7XG4gICAgICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgICAgIHN3aXBlci50cmFuc2l0aW9uRW5kKHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgIGNvbnN0IGlzSCA9IHN3aXBlci5pc0hvcml6b250YWwoKTtcbiAgICBjb25zdCB0ID0gcnRsID8gdHJhbnNsYXRlIDogLXRyYW5zbGF0ZTtcbiAgICBpZiAoc3BlZWQgPT09IDApIHtcbiAgICAgIGNvbnN0IGlzVmlydHVhbCA9IHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkO1xuICAgICAgaWYgKGlzVmlydHVhbCkge1xuICAgICAgICBzd2lwZXIud3JhcHBlckVsLnN0eWxlLnNjcm9sbFNuYXBUeXBlID0gJ25vbmUnO1xuICAgICAgICBzd2lwZXIuX2ltbWVkaWF0ZVZpcnR1YWwgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzVmlydHVhbCAmJiAhc3dpcGVyLl9jc3NNb2RlVmlydHVhbEluaXRpYWxTZXQgJiYgc3dpcGVyLnBhcmFtcy5pbml0aWFsU2xpZGUgPiAwKSB7XG4gICAgICAgIHN3aXBlci5fY3NzTW9kZVZpcnR1YWxJbml0aWFsU2V0ID0gdHJ1ZTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICB3cmFwcGVyRWxbaXNIID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddID0gdDtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3cmFwcGVyRWxbaXNIID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddID0gdDtcbiAgICAgIH1cbiAgICAgIGlmIChpc1ZpcnR1YWwpIHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBzd2lwZXIud3JhcHBlckVsLnN0eWxlLnNjcm9sbFNuYXBUeXBlID0gJyc7XG4gICAgICAgICAgc3dpcGVyLl9pbW1lZGlhdGVWaXJ0dWFsID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXN3aXBlci5zdXBwb3J0LnNtb290aFNjcm9sbCkge1xuICAgICAgICBhbmltYXRlQ1NTTW9kZVNjcm9sbCh7XG4gICAgICAgICAgc3dpcGVyLFxuICAgICAgICAgIHRhcmdldFBvc2l0aW9uOiB0LFxuICAgICAgICAgIHNpZGU6IGlzSCA/ICdsZWZ0JyA6ICd0b3AnXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHdyYXBwZXJFbC5zY3JvbGxUbyh7XG4gICAgICAgIFtpc0ggPyAnbGVmdCcgOiAndG9wJ106IHQsXG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHN3aXBlci5zZXRUcmFuc2l0aW9uKHNwZWVkKTtcbiAgc3dpcGVyLnNldFRyYW5zbGF0ZSh0cmFuc2xhdGUpO1xuICBzd2lwZXIudXBkYXRlQWN0aXZlSW5kZXgoc2xpZGVJbmRleCk7XG4gIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gIHN3aXBlci5lbWl0KCdiZWZvcmVUcmFuc2l0aW9uU3RhcnQnLCBzcGVlZCwgaW50ZXJuYWwpO1xuICBzd2lwZXIudHJhbnNpdGlvblN0YXJ0KHJ1bkNhbGxiYWNrcywgZGlyZWN0aW9uKTtcbiAgaWYgKHNwZWVkID09PSAwKSB7XG4gICAgc3dpcGVyLnRyYW5zaXRpb25FbmQocnVuQ2FsbGJhY2tzLCBkaXJlY3Rpb24pO1xuICB9IGVsc2UgaWYgKCFzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgc3dpcGVyLmFuaW1hdGluZyA9IHRydWU7XG4gICAgaWYgKCFzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpIHtcbiAgICAgIHN3aXBlci5vblNsaWRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25FbmQoZSkge1xuICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkKSByZXR1cm47XG4gICAgICAgIGlmIChlLnRhcmdldCAhPT0gdGhpcykgcmV0dXJuO1xuICAgICAgICBzd2lwZXIud3JhcHBlckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgICAgICBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQgPSBudWxsO1xuICAgICAgICBkZWxldGUgc3dpcGVyLm9uU2xpZGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kO1xuICAgICAgICBzd2lwZXIudHJhbnNpdGlvbkVuZChydW5DYWxsYmFja3MsIGRpcmVjdGlvbik7XG4gICAgICB9O1xuICAgIH1cbiAgICBzd2lwZXIud3JhcHBlckVsLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBzd2lwZXIub25TbGlkZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICB9XG4gIHJldHVybiB0cnVlO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/slide/slideTo.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/slide/slideToClickedSlide.js\":\r\n/*!***************************************************************!*\\\r\n  !*** ./node_modules/swiper/core/slide/slideToClickedSlide.js ***!\r\n  \\***************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ slideToClickedSlide)\\n/* harmony export */ });\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\nfunction slideToClickedSlide() {\\n  const swiper = this;\\n  const {\\n    params,\\n    slidesEl\\n  } = swiper;\\n  const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\\n  let slideToIndex = swiper.clickedIndex;\\n  let realIndex;\\n  const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\\n  if (params.loop) {\\n    if (swiper.animating) return;\\n    realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\\n    if (params.centeredSlides) {\\n      if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\\n        swiper.loopFix();\\n        slideToIndex = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementIndex)((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementChildren)(slidesEl, `${slideSelector}[data-swiper-slide-index=\\\"${realIndex}\\\"]`)[0]);\\n        (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.nextTick)(() => {\\n          swiper.slideTo(slideToIndex);\\n        });\\n      } else {\\n        swiper.slideTo(slideToIndex);\\n      }\\n    } else if (slideToIndex > swiper.slides.length - slidesPerView) {\\n      swiper.loopFix();\\n      slideToIndex = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementIndex)((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementChildren)(slidesEl, `${slideSelector}[data-swiper-slide-index=\\\"${realIndex}\\\"]`)[0]);\\n      (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.nextTick)(() => {\\n        swiper.slideTo(slideToIndex);\\n      });\\n    } else {\\n      swiper.slideTo(slideToIndex);\\n    }\\n  } else {\\n    swiper.slideTo(slideToIndex);\\n  }\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvc2xpZGUvc2xpZGVUb0NsaWNrZWRTbGlkZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFnRjtBQUNqRTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRSxrQkFBa0I7QUFDbEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDhEQUFZLENBQUMsaUVBQWUsY0FBYyxjQUFjLDRCQUE0QixVQUFVO0FBQ3JILFFBQVEsMERBQVE7QUFDaEI7QUFDQSxTQUFTO0FBQ1QsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxxQkFBcUIsOERBQVksQ0FBQyxpRUFBZSxjQUFjLGNBQWMsNEJBQTRCLFVBQVU7QUFDbkgsTUFBTSwwREFBUTtBQUNkO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3NsaWRlL3NsaWRlVG9DbGlja2VkU2xpZGUuanM/MzNkYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlbGVtZW50Q2hpbGRyZW4sIGVsZW1lbnRJbmRleCwgbmV4dFRpY2sgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2xpZGVUb0NsaWNrZWRTbGlkZSgpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3Qge1xuICAgIHBhcmFtcyxcbiAgICBzbGlkZXNFbFxuICB9ID0gc3dpcGVyO1xuICBjb25zdCBzbGlkZXNQZXJWaWV3ID0gcGFyYW1zLnNsaWRlc1BlclZpZXcgPT09ICdhdXRvJyA/IHN3aXBlci5zbGlkZXNQZXJWaWV3RHluYW1pYygpIDogcGFyYW1zLnNsaWRlc1BlclZpZXc7XG4gIGxldCBzbGlkZVRvSW5kZXggPSBzd2lwZXIuY2xpY2tlZEluZGV4O1xuICBsZXQgcmVhbEluZGV4O1xuICBjb25zdCBzbGlkZVNlbGVjdG9yID0gc3dpcGVyLmlzRWxlbWVudCA/IGBzd2lwZXItc2xpZGVgIDogYC4ke3BhcmFtcy5zbGlkZUNsYXNzfWA7XG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIGlmIChzd2lwZXIuYW5pbWF0aW5nKSByZXR1cm47XG4gICAgcmVhbEluZGV4ID0gcGFyc2VJbnQoc3dpcGVyLmNsaWNrZWRTbGlkZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JyksIDEwKTtcbiAgICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICBpZiAoc2xpZGVUb0luZGV4IDwgc3dpcGVyLmxvb3BlZFNsaWRlcyAtIHNsaWRlc1BlclZpZXcgLyAyIHx8IHNsaWRlVG9JbmRleCA+IHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gc3dpcGVyLmxvb3BlZFNsaWRlcyArIHNsaWRlc1BlclZpZXcgLyAyKSB7XG4gICAgICAgIHN3aXBlci5sb29wRml4KCk7XG4gICAgICAgIHNsaWRlVG9JbmRleCA9IGVsZW1lbnRJbmRleChlbGVtZW50Q2hpbGRyZW4oc2xpZGVzRWwsIGAke3NsaWRlU2VsZWN0b3J9W2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVwiJHtyZWFsSW5kZXh9XCJdYClbMF0pO1xuICAgICAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIuc2xpZGVUbyhzbGlkZVRvSW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc2xpZGVUb0luZGV4ID4gc3dpcGVyLnNsaWRlcy5sZW5ndGggLSBzbGlkZXNQZXJWaWV3KSB7XG4gICAgICBzd2lwZXIubG9vcEZpeCgpO1xuICAgICAgc2xpZGVUb0luZGV4ID0gZWxlbWVudEluZGV4KGVsZW1lbnRDaGlsZHJlbihzbGlkZXNFbCwgYCR7c2xpZGVTZWxlY3Rvcn1bZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XCIke3JlYWxJbmRleH1cIl1gKVswXSk7XG4gICAgICBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHNsaWRlVG9JbmRleCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc3dpcGVyLnNsaWRlVG8oc2xpZGVUb0luZGV4KTtcbiAgfVxufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/slide/slideToClickedSlide.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/slide/slideToClosest.js\":\r\n/*!**********************************************************!*\\\r\n  !*** ./node_modules/swiper/core/slide/slideToClosest.js ***!\r\n  \\**********************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ slideToClosest)\\n/* harmony export */ });\\n/* eslint no-unused-vars: \\\"off\\\" */\\nfunction slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\\n  const swiper = this;\\n  let index = swiper.activeIndex;\\n  const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\\n  const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\\n  if (translate >= swiper.snapGrid[snapIndex]) {\\n    // The current translate is on or after the current snap index, so the choice\\n    // is between the current index and the one after it.\\n    const currentSnap = swiper.snapGrid[snapIndex];\\n    const nextSnap = swiper.snapGrid[snapIndex + 1];\\n    if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\\n      index += swiper.params.slidesPerGroup;\\n    }\\n  } else {\\n    // The current translate is before the current snap index, so the choice\\n    // is between the current index and the one before it.\\n    const prevSnap = swiper.snapGrid[snapIndex - 1];\\n    const currentSnap = swiper.snapGrid[snapIndex];\\n    if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\\n      index -= swiper.params.slidesPerGroup;\\n    }\\n  }\\n  index = Math.max(index, 0);\\n  index = Math.min(index, swiper.slidesGrid.length - 1);\\n  return swiper.slideTo(index, speed, runCallbacks, internal);\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvc2xpZGUvc2xpZGVUb0Nsb3Nlc3QuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9zbGlkZS9zbGlkZVRvQ2xvc2VzdC5qcz81NjQ4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBuby11bnVzZWQtdmFyczogXCJvZmZcIiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2xpZGVUb0Nsb3Nlc3Qoc3BlZWQgPSB0aGlzLnBhcmFtcy5zcGVlZCwgcnVuQ2FsbGJhY2tzID0gdHJ1ZSwgaW50ZXJuYWwsIHRocmVzaG9sZCA9IDAuNSkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBsZXQgaW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gIGNvbnN0IHNraXAgPSBNYXRoLm1pbihzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCwgaW5kZXgpO1xuICBjb25zdCBzbmFwSW5kZXggPSBza2lwICsgTWF0aC5mbG9vcigoaW5kZXggLSBza2lwKSAvIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXApO1xuICBjb25zdCB0cmFuc2xhdGUgPSBzd2lwZXIucnRsVHJhbnNsYXRlID8gc3dpcGVyLnRyYW5zbGF0ZSA6IC1zd2lwZXIudHJhbnNsYXRlO1xuICBpZiAodHJhbnNsYXRlID49IHN3aXBlci5zbmFwR3JpZFtzbmFwSW5kZXhdKSB7XG4gICAgLy8gVGhlIGN1cnJlbnQgdHJhbnNsYXRlIGlzIG9uIG9yIGFmdGVyIHRoZSBjdXJyZW50IHNuYXAgaW5kZXgsIHNvIHRoZSBjaG9pY2VcbiAgICAvLyBpcyBiZXR3ZWVuIHRoZSBjdXJyZW50IGluZGV4IGFuZCB0aGUgb25lIGFmdGVyIGl0LlxuICAgIGNvbnN0IGN1cnJlbnRTbmFwID0gc3dpcGVyLnNuYXBHcmlkW3NuYXBJbmRleF07XG4gICAgY29uc3QgbmV4dFNuYXAgPSBzd2lwZXIuc25hcEdyaWRbc25hcEluZGV4ICsgMV07XG4gICAgaWYgKHRyYW5zbGF0ZSAtIGN1cnJlbnRTbmFwID4gKG5leHRTbmFwIC0gY3VycmVudFNuYXApICogdGhyZXNob2xkKSB7XG4gICAgICBpbmRleCArPSBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBUaGUgY3VycmVudCB0cmFuc2xhdGUgaXMgYmVmb3JlIHRoZSBjdXJyZW50IHNuYXAgaW5kZXgsIHNvIHRoZSBjaG9pY2VcbiAgICAvLyBpcyBiZXR3ZWVuIHRoZSBjdXJyZW50IGluZGV4IGFuZCB0aGUgb25lIGJlZm9yZSBpdC5cbiAgICBjb25zdCBwcmV2U25hcCA9IHN3aXBlci5zbmFwR3JpZFtzbmFwSW5kZXggLSAxXTtcbiAgICBjb25zdCBjdXJyZW50U25hcCA9IHN3aXBlci5zbmFwR3JpZFtzbmFwSW5kZXhdO1xuICAgIGlmICh0cmFuc2xhdGUgLSBwcmV2U25hcCA8PSAoY3VycmVudFNuYXAgLSBwcmV2U25hcCkgKiB0aHJlc2hvbGQpIHtcbiAgICAgIGluZGV4IC09IHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG4gICAgfVxuICB9XG4gIGluZGV4ID0gTWF0aC5tYXgoaW5kZXgsIDApO1xuICBpbmRleCA9IE1hdGgubWluKGluZGV4LCBzd2lwZXIuc2xpZGVzR3JpZC5sZW5ndGggLSAxKTtcbiAgcmV0dXJuIHN3aXBlci5zbGlkZVRvKGluZGV4LCBzcGVlZCwgcnVuQ2FsbGJhY2tzLCBpbnRlcm5hbCk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/slide/slideToClosest.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/slide/slideToLoop.js\":\r\n/*!*******************************************************!*\\\r\n  !*** ./node_modules/swiper/core/slide/slideToLoop.js ***!\r\n  \\*******************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ slideToLoop)\\n/* harmony export */ });\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\nfunction slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) {\\n  if (typeof index === 'string') {\\n    const indexAsNumber = parseInt(index, 10);\\n    index = indexAsNumber;\\n  }\\n  const swiper = this;\\n  let newIndex = index;\\n  if (swiper.params.loop) {\\n    if (swiper.virtual && swiper.params.virtual.enabled) {\\n      // eslint-disable-next-line\\n      newIndex = newIndex + swiper.virtual.slidesBefore;\\n    } else {\\n      newIndex = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementIndex)(swiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === newIndex)[0]);\\n    }\\n  }\\n  return swiper.slideTo(newIndex, speed, runCallbacks, internal);\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvc2xpZGUvc2xpZGVUb0xvb3AuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBcUQ7QUFDdEM7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixpQkFBaUIsOERBQVk7QUFDN0I7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS9zbGlkZS9zbGlkZVRvTG9vcC5qcz9kYzU5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVsZW1lbnRJbmRleCB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzbGlkZVRvTG9vcChpbmRleCA9IDAsIHNwZWVkID0gdGhpcy5wYXJhbXMuc3BlZWQsIHJ1bkNhbGxiYWNrcyA9IHRydWUsIGludGVybmFsKSB7XG4gIGlmICh0eXBlb2YgaW5kZXggPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgaW5kZXhBc051bWJlciA9IHBhcnNlSW50KGluZGV4LCAxMCk7XG4gICAgaW5kZXggPSBpbmRleEFzTnVtYmVyO1xuICB9XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGxldCBuZXdJbmRleCA9IGluZGV4O1xuICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgaWYgKHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIG5ld0luZGV4ID0gbmV3SW5kZXggKyBzd2lwZXIudmlydHVhbC5zbGlkZXNCZWZvcmU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0luZGV4ID0gZWxlbWVudEluZGV4KHN3aXBlci5zbGlkZXMuZmlsdGVyKHNsaWRlRWwgPT4gc2xpZGVFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JykgKiAxID09PSBuZXdJbmRleClbMF0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3dpcGVyLnNsaWRlVG8obmV3SW5kZXgsIHNwZWVkLCBydW5DYWxsYmFja3MsIGludGVybmFsKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/slide/slideToLoop.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/transition/index.js\":\r\n/*!******************************************************!*\\\r\n  !*** ./node_modules/swiper/core/transition/index.js ***!\r\n  \\******************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* harmony import */ var _setTransition_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setTransition.js */ \\\"./node_modules/swiper/core/transition/setTransition.js\\\");\\n/* harmony import */ var _transitionStart_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transitionStart.js */ \\\"./node_modules/swiper/core/transition/transitionStart.js\\\");\\n/* harmony import */ var _transitionEnd_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./transitionEnd.js */ \\\"./node_modules/swiper/core/transition/transitionEnd.js\\\");\\n\\n\\n\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\\n  setTransition: _setTransition_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"],\\n  transitionStart: _transitionStart_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"],\\n  transitionEnd: _transitionEnd_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"]\\n});//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNpdGlvbi9pbmRleC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQStDO0FBQ0k7QUFDSjtBQUMvQyxpRUFBZTtBQUNmLGVBQWU7QUFDZixpQkFBaUI7QUFDakIsZUFBZTtBQUNmLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS90cmFuc2l0aW9uL2luZGV4LmpzPzY1NmYiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNldFRyYW5zaXRpb24gZnJvbSAnLi9zZXRUcmFuc2l0aW9uLmpzJztcbmltcG9ydCB0cmFuc2l0aW9uU3RhcnQgZnJvbSAnLi90cmFuc2l0aW9uU3RhcnQuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25FbmQgZnJvbSAnLi90cmFuc2l0aW9uRW5kLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2V0VHJhbnNpdGlvbixcbiAgdHJhbnNpdGlvblN0YXJ0LFxuICB0cmFuc2l0aW9uRW5kXG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/transition/index.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/transition/setTransition.js\":\r\n/*!**************************************************************!*\\\r\n  !*** ./node_modules/swiper/core/transition/setTransition.js ***!\r\n  \\**************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ setTransition)\\n/* harmony export */ });\\nfunction setTransition(duration, byController) {\\n  const swiper = this;\\n  if (!swiper.params.cssMode) {\\n    swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\\n  }\\n  swiper.emit('setTransition', duration, byController);\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNpdGlvbi9zZXRUcmFuc2l0aW9uLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQSxtREFBbUQsU0FBUztBQUM1RDtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS90cmFuc2l0aW9uL3NldFRyYW5zaXRpb24uanM/MGU1MiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uLCBieUNvbnRyb2xsZXIpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgaWYgKCFzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICBzd2lwZXIud3JhcHBlckVsLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IGAke2R1cmF0aW9ufW1zYDtcbiAgfVxuICBzd2lwZXIuZW1pdCgnc2V0VHJhbnNpdGlvbicsIGR1cmF0aW9uLCBieUNvbnRyb2xsZXIpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/transition/setTransition.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/transition/transitionEmit.js\":\r\n/*!***************************************************************!*\\\r\n  !*** ./node_modules/swiper/core/transition/transitionEmit.js ***!\r\n  \\***************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ transitionEmit)\\n/* harmony export */ });\\nfunction transitionEmit({\\n  swiper,\\n  runCallbacks,\\n  direction,\\n  step\\n}) {\\n  const {\\n    activeIndex,\\n    previousIndex\\n  } = swiper;\\n  let dir = direction;\\n  if (!dir) {\\n    if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\\n  }\\n  swiper.emit(`transition${step}`);\\n  if (runCallbacks && activeIndex !== previousIndex) {\\n    if (dir === 'reset') {\\n      swiper.emit(`slideResetTransition${step}`);\\n      return;\\n    }\\n    swiper.emit(`slideChangeTransition${step}`);\\n    if (dir === 'next') {\\n      swiper.emit(`slideNextTransition${step}`);\\n    } else {\\n      swiper.emit(`slidePrevTransition${step}`);\\n    }\\n  }\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNpdGlvbi90cmFuc2l0aW9uRW1pdC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLGtEQUFrRCxtREFBbUQ7QUFDckc7QUFDQSwyQkFBMkIsS0FBSztBQUNoQztBQUNBO0FBQ0EseUNBQXlDLEtBQUs7QUFDOUM7QUFDQTtBQUNBLHdDQUF3QyxLQUFLO0FBQzdDO0FBQ0Esd0NBQXdDLEtBQUs7QUFDN0MsTUFBTTtBQUNOLHdDQUF3QyxLQUFLO0FBQzdDO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3RyYW5zaXRpb24vdHJhbnNpdGlvbkVtaXQuanM/N2E1MCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2l0aW9uRW1pdCh7XG4gIHN3aXBlcixcbiAgcnVuQ2FsbGJhY2tzLFxuICBkaXJlY3Rpb24sXG4gIHN0ZXBcbn0pIHtcbiAgY29uc3Qge1xuICAgIGFjdGl2ZUluZGV4LFxuICAgIHByZXZpb3VzSW5kZXhcbiAgfSA9IHN3aXBlcjtcbiAgbGV0IGRpciA9IGRpcmVjdGlvbjtcbiAgaWYgKCFkaXIpIHtcbiAgICBpZiAoYWN0aXZlSW5kZXggPiBwcmV2aW91c0luZGV4KSBkaXIgPSAnbmV4dCc7ZWxzZSBpZiAoYWN0aXZlSW5kZXggPCBwcmV2aW91c0luZGV4KSBkaXIgPSAncHJldic7ZWxzZSBkaXIgPSAncmVzZXQnO1xuICB9XG4gIHN3aXBlci5lbWl0KGB0cmFuc2l0aW9uJHtzdGVwfWApO1xuICBpZiAocnVuQ2FsbGJhY2tzICYmIGFjdGl2ZUluZGV4ICE9PSBwcmV2aW91c0luZGV4KSB7XG4gICAgaWYgKGRpciA9PT0gJ3Jlc2V0Jykge1xuICAgICAgc3dpcGVyLmVtaXQoYHNsaWRlUmVzZXRUcmFuc2l0aW9uJHtzdGVwfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2lwZXIuZW1pdChgc2xpZGVDaGFuZ2VUcmFuc2l0aW9uJHtzdGVwfWApO1xuICAgIGlmIChkaXIgPT09ICduZXh0Jykge1xuICAgICAgc3dpcGVyLmVtaXQoYHNsaWRlTmV4dFRyYW5zaXRpb24ke3N0ZXB9YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5lbWl0KGBzbGlkZVByZXZUcmFuc2l0aW9uJHtzdGVwfWApO1xuICAgIH1cbiAgfVxufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/transition/transitionEmit.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/transition/transitionEnd.js\":\r\n/*!**************************************************************!*\\\r\n  !*** ./node_modules/swiper/core/transition/transitionEnd.js ***!\r\n  \\**************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ transitionEnd)\\n/* harmony export */ });\\n/* harmony import */ var _transitionEmit_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transitionEmit.js */ \\\"./node_modules/swiper/core/transition/transitionEmit.js\\\");\\n\\nfunction transitionEnd(runCallbacks = true, direction) {\\n  const swiper = this;\\n  const {\\n    params\\n  } = swiper;\\n  swiper.animating = false;\\n  if (params.cssMode) return;\\n  swiper.setTransition(0);\\n  (0,_transitionEmit_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])({\\n    swiper,\\n    runCallbacks,\\n    direction,\\n    step: 'End'\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNpdGlvbi90cmFuc2l0aW9uRW5kLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWlEO0FBQ2xDO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBLEVBQUUsOERBQWM7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS90cmFuc2l0aW9uL3RyYW5zaXRpb25FbmQuanM/ZWU2ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHJhbnNpdGlvbkVtaXQgZnJvbSAnLi90cmFuc2l0aW9uRW1pdC5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kKHJ1bkNhbGxiYWNrcyA9IHRydWUsIGRpcmVjdGlvbikge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgcGFyYW1zXG4gIH0gPSBzd2lwZXI7XG4gIHN3aXBlci5hbmltYXRpbmcgPSBmYWxzZTtcbiAgaWYgKHBhcmFtcy5jc3NNb2RlKSByZXR1cm47XG4gIHN3aXBlci5zZXRUcmFuc2l0aW9uKDApO1xuICB0cmFuc2l0aW9uRW1pdCh7XG4gICAgc3dpcGVyLFxuICAgIHJ1bkNhbGxiYWNrcyxcbiAgICBkaXJlY3Rpb24sXG4gICAgc3RlcDogJ0VuZCdcbiAgfSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/transition/transitionEnd.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/transition/transitionStart.js\":\r\n/*!****************************************************************!*\\\r\n  !*** ./node_modules/swiper/core/transition/transitionStart.js ***!\r\n  \\****************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ transitionStart)\\n/* harmony export */ });\\n/* harmony import */ var _transitionEmit_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transitionEmit.js */ \\\"./node_modules/swiper/core/transition/transitionEmit.js\\\");\\n\\nfunction transitionStart(runCallbacks = true, direction) {\\n  const swiper = this;\\n  const {\\n    params\\n  } = swiper;\\n  if (params.cssMode) return;\\n  if (params.autoHeight) {\\n    swiper.updateAutoHeight();\\n  }\\n  (0,_transitionEmit_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])({\\n    swiper,\\n    runCallbacks,\\n    direction,\\n    step: 'Start'\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNpdGlvbi90cmFuc2l0aW9uU3RhcnQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBaUQ7QUFDbEM7QUFDZjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLDhEQUFjO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNpdGlvbi90cmFuc2l0aW9uU3RhcnQuanM/YzllMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHJhbnNpdGlvbkVtaXQgZnJvbSAnLi90cmFuc2l0aW9uRW1pdC5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2l0aW9uU3RhcnQocnVuQ2FsbGJhY2tzID0gdHJ1ZSwgZGlyZWN0aW9uKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXNcbiAgfSA9IHN3aXBlcjtcbiAgaWYgKHBhcmFtcy5jc3NNb2RlKSByZXR1cm47XG4gIGlmIChwYXJhbXMuYXV0b0hlaWdodCkge1xuICAgIHN3aXBlci51cGRhdGVBdXRvSGVpZ2h0KCk7XG4gIH1cbiAgdHJhbnNpdGlvbkVtaXQoe1xuICAgIHN3aXBlcixcbiAgICBydW5DYWxsYmFja3MsXG4gICAgZGlyZWN0aW9uLFxuICAgIHN0ZXA6ICdTdGFydCdcbiAgfSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/transition/transitionStart.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/translate/getTranslate.js\":\r\n/*!************************************************************!*\\\r\n  !*** ./node_modules/swiper/core/translate/getTranslate.js ***!\r\n  \\************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ getSwiperTranslate)\\n/* harmony export */ });\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\nfunction getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\\n  const swiper = this;\\n  const {\\n    params,\\n    rtlTranslate: rtl,\\n    translate,\\n    wrapperEl\\n  } = swiper;\\n  if (params.virtualTranslate) {\\n    return rtl ? -translate : translate;\\n  }\\n  if (params.cssMode) {\\n    return translate;\\n  }\\n  let currentTranslate = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.getTranslate)(wrapperEl, axis);\\n  if (rtl) currentTranslate = -currentTranslate;\\n  return currentTranslate || 0;\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNsYXRlL2dldFRyYW5zbGF0ZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFxRDtBQUN0QztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsOERBQVk7QUFDckM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNsYXRlL2dldFRyYW5zbGF0ZS5qcz85NmYyIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFRyYW5zbGF0ZSB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRTd2lwZXJUcmFuc2xhdGUoYXhpcyA9IHRoaXMuaXNIb3Jpem9udGFsKCkgPyAneCcgOiAneScpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3Qge1xuICAgIHBhcmFtcyxcbiAgICBydGxUcmFuc2xhdGU6IHJ0bCxcbiAgICB0cmFuc2xhdGUsXG4gICAgd3JhcHBlckVsXG4gIH0gPSBzd2lwZXI7XG4gIGlmIChwYXJhbXMudmlydHVhbFRyYW5zbGF0ZSkge1xuICAgIHJldHVybiBydGwgPyAtdHJhbnNsYXRlIDogdHJhbnNsYXRlO1xuICB9XG4gIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgIHJldHVybiB0cmFuc2xhdGU7XG4gIH1cbiAgbGV0IGN1cnJlbnRUcmFuc2xhdGUgPSBnZXRUcmFuc2xhdGUod3JhcHBlckVsLCBheGlzKTtcbiAgaWYgKHJ0bCkgY3VycmVudFRyYW5zbGF0ZSA9IC1jdXJyZW50VHJhbnNsYXRlO1xuICByZXR1cm4gY3VycmVudFRyYW5zbGF0ZSB8fCAwO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/translate/getTranslate.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/translate/index.js\":\r\n/*!*****************************************************!*\\\r\n  !*** ./node_modules/swiper/core/translate/index.js ***!\r\n  \\*****************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* harmony import */ var _getTranslate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getTranslate.js */ \\\"./node_modules/swiper/core/translate/getTranslate.js\\\");\\n/* harmony import */ var _setTranslate_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./setTranslate.js */ \\\"./node_modules/swiper/core/translate/setTranslate.js\\\");\\n/* harmony import */ var _minTranslate_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./minTranslate.js */ \\\"./node_modules/swiper/core/translate/minTranslate.js\\\");\\n/* harmony import */ var _maxTranslate_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./maxTranslate.js */ \\\"./node_modules/swiper/core/translate/maxTranslate.js\\\");\\n/* harmony import */ var _translateTo_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./translateTo.js */ \\\"./node_modules/swiper/core/translate/translateTo.js\\\");\\n\\n\\n\\n\\n\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\\n  getTranslate: _getTranslate_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"],\\n  setTranslate: _setTranslate_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"],\\n  minTranslate: _minTranslate_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"],\\n  maxTranslate: _maxTranslate_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"],\\n  translateTo: _translateTo_js__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"]\\n});//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNsYXRlL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUE2QztBQUNBO0FBQ0E7QUFDQTtBQUNGO0FBQzNDLGlFQUFlO0FBQ2YsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGFBQWE7QUFDYixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNsYXRlL2luZGV4LmpzP2M3ZjMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldFRyYW5zbGF0ZSBmcm9tICcuL2dldFRyYW5zbGF0ZS5qcyc7XG5pbXBvcnQgc2V0VHJhbnNsYXRlIGZyb20gJy4vc2V0VHJhbnNsYXRlLmpzJztcbmltcG9ydCBtaW5UcmFuc2xhdGUgZnJvbSAnLi9taW5UcmFuc2xhdGUuanMnO1xuaW1wb3J0IG1heFRyYW5zbGF0ZSBmcm9tICcuL21heFRyYW5zbGF0ZS5qcyc7XG5pbXBvcnQgdHJhbnNsYXRlVG8gZnJvbSAnLi90cmFuc2xhdGVUby5qcyc7XG5leHBvcnQgZGVmYXVsdCB7XG4gIGdldFRyYW5zbGF0ZSxcbiAgc2V0VHJhbnNsYXRlLFxuICBtaW5UcmFuc2xhdGUsXG4gIG1heFRyYW5zbGF0ZSxcbiAgdHJhbnNsYXRlVG9cbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/translate/index.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/translate/maxTranslate.js\":\r\n/*!************************************************************!*\\\r\n  !*** ./node_modules/swiper/core/translate/maxTranslate.js ***!\r\n  \\************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ maxTranslate)\\n/* harmony export */ });\\nfunction maxTranslate() {\\n  return -this.snapGrid[this.snapGrid.length - 1];\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNsYXRlL21heFRyYW5zbGF0ZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNsYXRlL21heFRyYW5zbGF0ZS5qcz8yYzdiIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1heFRyYW5zbGF0ZSgpIHtcbiAgcmV0dXJuIC10aGlzLnNuYXBHcmlkW3RoaXMuc25hcEdyaWQubGVuZ3RoIC0gMV07XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/translate/maxTranslate.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/translate/minTranslate.js\":\r\n/*!************************************************************!*\\\r\n  !*** ./node_modules/swiper/core/translate/minTranslate.js ***!\r\n  \\************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ minTranslate)\\n/* harmony export */ });\\nfunction minTranslate() {\\n  return -this.snapGrid[0];\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNsYXRlL21pblRyYW5zbGF0ZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNsYXRlL21pblRyYW5zbGF0ZS5qcz9hYzQ4Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1pblRyYW5zbGF0ZSgpIHtcbiAgcmV0dXJuIC10aGlzLnNuYXBHcmlkWzBdO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/translate/minTranslate.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/translate/setTranslate.js\":\r\n/*!************************************************************!*\\\r\n  !*** ./node_modules/swiper/core/translate/setTranslate.js ***!\r\n  \\************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ setTranslate)\\n/* harmony export */ });\\nfunction setTranslate(translate, byController) {\\n  const swiper = this;\\n  const {\\n    rtlTranslate: rtl,\\n    params,\\n    wrapperEl,\\n    progress\\n  } = swiper;\\n  let x = 0;\\n  let y = 0;\\n  const z = 0;\\n  if (swiper.isHorizontal()) {\\n    x = rtl ? -translate : translate;\\n  } else {\\n    y = translate;\\n  }\\n  if (params.roundLengths) {\\n    x = Math.floor(x);\\n    y = Math.floor(y);\\n  }\\n  if (params.cssMode) {\\n    wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\\n  } else if (!params.virtualTranslate) {\\n    wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\\n  }\\n  swiper.previousTranslate = swiper.translate;\\n  swiper.translate = swiper.isHorizontal() ? x : y;\\n\\n  // Check if we need to update progress\\n  let newProgress;\\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\\n  if (translatesDiff === 0) {\\n    newProgress = 0;\\n  } else {\\n    newProgress = (translate - swiper.minTranslate()) / translatesDiff;\\n  }\\n  if (newProgress !== progress) {\\n    swiper.updateProgress(translate);\\n  }\\n  swiper.emit('setTranslate', swiper.translate, byController);\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNsYXRlL3NldFRyYW5zbGF0ZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLCtDQUErQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7QUFDakU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS90cmFuc2xhdGUvc2V0VHJhbnNsYXRlLmpzPzU2NDMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0VHJhbnNsYXRlKHRyYW5zbGF0ZSwgYnlDb250cm9sbGVyKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHtcbiAgICBydGxUcmFuc2xhdGU6IHJ0bCxcbiAgICBwYXJhbXMsXG4gICAgd3JhcHBlckVsLFxuICAgIHByb2dyZXNzXG4gIH0gPSBzd2lwZXI7XG4gIGxldCB4ID0gMDtcbiAgbGV0IHkgPSAwO1xuICBjb25zdCB6ID0gMDtcbiAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgIHggPSBydGwgPyAtdHJhbnNsYXRlIDogdHJhbnNsYXRlO1xuICB9IGVsc2Uge1xuICAgIHkgPSB0cmFuc2xhdGU7XG4gIH1cbiAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHtcbiAgICB4ID0gTWF0aC5mbG9vcih4KTtcbiAgICB5ID0gTWF0aC5mbG9vcih5KTtcbiAgfVxuICBpZiAocGFyYW1zLmNzc01vZGUpIHtcbiAgICB3cmFwcGVyRWxbc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ3Njcm9sbExlZnQnIDogJ3Njcm9sbFRvcCddID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gLXggOiAteTtcbiAgfSBlbHNlIGlmICghcGFyYW1zLnZpcnR1YWxUcmFuc2xhdGUpIHtcbiAgICB3cmFwcGVyRWwuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKCR7eH1weCwgJHt5fXB4LCAke3p9cHgpYDtcbiAgfVxuICBzd2lwZXIucHJldmlvdXNUcmFuc2xhdGUgPSBzd2lwZXIudHJhbnNsYXRlO1xuICBzd2lwZXIudHJhbnNsYXRlID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8geCA6IHk7XG5cbiAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byB1cGRhdGUgcHJvZ3Jlc3NcbiAgbGV0IG5ld1Byb2dyZXNzO1xuICBjb25zdCB0cmFuc2xhdGVzRGlmZiA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgaWYgKHRyYW5zbGF0ZXNEaWZmID09PSAwKSB7XG4gICAgbmV3UHJvZ3Jlc3MgPSAwO1xuICB9IGVsc2Uge1xuICAgIG5ld1Byb2dyZXNzID0gKHRyYW5zbGF0ZSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKSkgLyB0cmFuc2xhdGVzRGlmZjtcbiAgfVxuICBpZiAobmV3UHJvZ3Jlc3MgIT09IHByb2dyZXNzKSB7XG4gICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKHRyYW5zbGF0ZSk7XG4gIH1cbiAgc3dpcGVyLmVtaXQoJ3NldFRyYW5zbGF0ZScsIHN3aXBlci50cmFuc2xhdGUsIGJ5Q29udHJvbGxlcik7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/translate/setTranslate.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/translate/translateTo.js\":\r\n/*!***********************************************************!*\\\r\n  !*** ./node_modules/swiper/core/translate/translateTo.js ***!\r\n  \\***********************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ translateTo)\\n/* harmony export */ });\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\nfunction translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\\n  const swiper = this;\\n  const {\\n    params,\\n    wrapperEl\\n  } = swiper;\\n  if (swiper.animating && params.preventInteractionOnTransition) {\\n    return false;\\n  }\\n  const minTranslate = swiper.minTranslate();\\n  const maxTranslate = swiper.maxTranslate();\\n  let newTranslate;\\n  if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\\n\\n  // Update progress\\n  swiper.updateProgress(newTranslate);\\n  if (params.cssMode) {\\n    const isH = swiper.isHorizontal();\\n    if (speed === 0) {\\n      wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\\n    } else {\\n      if (!swiper.support.smoothScroll) {\\n        (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.animateCSSModeScroll)({\\n          swiper,\\n          targetPosition: -newTranslate,\\n          side: isH ? 'left' : 'top'\\n        });\\n        return true;\\n      }\\n      wrapperEl.scrollTo({\\n        [isH ? 'left' : 'top']: -newTranslate,\\n        behavior: 'smooth'\\n      });\\n    }\\n    return true;\\n  }\\n  if (speed === 0) {\\n    swiper.setTransition(0);\\n    swiper.setTranslate(newTranslate);\\n    if (runCallbacks) {\\n      swiper.emit('beforeTransitionStart', speed, internal);\\n      swiper.emit('transitionEnd');\\n    }\\n  } else {\\n    swiper.setTransition(speed);\\n    swiper.setTranslate(newTranslate);\\n    if (runCallbacks) {\\n      swiper.emit('beforeTransitionStart', speed, internal);\\n      swiper.emit('transitionStart');\\n    }\\n    if (!swiper.animating) {\\n      swiper.animating = true;\\n      if (!swiper.onTranslateToWrapperTransitionEnd) {\\n        swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\\n          if (!swiper || swiper.destroyed) return;\\n          if (e.target !== this) return;\\n          swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\\n          swiper.onTranslateToWrapperTransitionEnd = null;\\n          delete swiper.onTranslateToWrapperTransitionEnd;\\n          if (runCallbacks) {\\n            swiper.emit('transitionEnd');\\n          }\\n        };\\n      }\\n      swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\\n    }\\n  }\\n  return true;\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdHJhbnNsYXRlL3RyYW5zbGF0ZVRvLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTZEO0FBQzlDO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0VBQStFLGtGQUFrRjs7QUFFaks7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsUUFBUSxzRUFBb0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS90cmFuc2xhdGUvdHJhbnNsYXRlVG8uanM/NjMxZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlQ1NTTW9kZVNjcm9sbCB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2xhdGVUbyh0cmFuc2xhdGUgPSAwLCBzcGVlZCA9IHRoaXMucGFyYW1zLnNwZWVkLCBydW5DYWxsYmFja3MgPSB0cnVlLCB0cmFuc2xhdGVCb3VuZHMgPSB0cnVlLCBpbnRlcm5hbCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgcGFyYW1zLFxuICAgIHdyYXBwZXJFbFxuICB9ID0gc3dpcGVyO1xuICBpZiAoc3dpcGVyLmFuaW1hdGluZyAmJiBwYXJhbXMucHJldmVudEludGVyYWN0aW9uT25UcmFuc2l0aW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IG1pblRyYW5zbGF0ZSA9IHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgY29uc3QgbWF4VHJhbnNsYXRlID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpO1xuICBsZXQgbmV3VHJhbnNsYXRlO1xuICBpZiAodHJhbnNsYXRlQm91bmRzICYmIHRyYW5zbGF0ZSA+IG1pblRyYW5zbGF0ZSkgbmV3VHJhbnNsYXRlID0gbWluVHJhbnNsYXRlO2Vsc2UgaWYgKHRyYW5zbGF0ZUJvdW5kcyAmJiB0cmFuc2xhdGUgPCBtYXhUcmFuc2xhdGUpIG5ld1RyYW5zbGF0ZSA9IG1heFRyYW5zbGF0ZTtlbHNlIG5ld1RyYW5zbGF0ZSA9IHRyYW5zbGF0ZTtcblxuICAvLyBVcGRhdGUgcHJvZ3Jlc3NcbiAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKG5ld1RyYW5zbGF0ZSk7XG4gIGlmIChwYXJhbXMuY3NzTW9kZSkge1xuICAgIGNvbnN0IGlzSCA9IHN3aXBlci5pc0hvcml6b250YWwoKTtcbiAgICBpZiAoc3BlZWQgPT09IDApIHtcbiAgICAgIHdyYXBwZXJFbFtpc0ggPyAnc2Nyb2xsTGVmdCcgOiAnc2Nyb2xsVG9wJ10gPSAtbmV3VHJhbnNsYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXN3aXBlci5zdXBwb3J0LnNtb290aFNjcm9sbCkge1xuICAgICAgICBhbmltYXRlQ1NTTW9kZVNjcm9sbCh7XG4gICAgICAgICAgc3dpcGVyLFxuICAgICAgICAgIHRhcmdldFBvc2l0aW9uOiAtbmV3VHJhbnNsYXRlLFxuICAgICAgICAgIHNpZGU6IGlzSCA/ICdsZWZ0JyA6ICd0b3AnXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHdyYXBwZXJFbC5zY3JvbGxUbyh7XG4gICAgICAgIFtpc0ggPyAnbGVmdCcgOiAndG9wJ106IC1uZXdUcmFuc2xhdGUsXG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChzcGVlZCA9PT0gMCkge1xuICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKDApO1xuICAgIHN3aXBlci5zZXRUcmFuc2xhdGUobmV3VHJhbnNsYXRlKTtcbiAgICBpZiAocnVuQ2FsbGJhY2tzKSB7XG4gICAgICBzd2lwZXIuZW1pdCgnYmVmb3JlVHJhbnNpdGlvblN0YXJ0Jywgc3BlZWQsIGludGVybmFsKTtcbiAgICAgIHN3aXBlci5lbWl0KCd0cmFuc2l0aW9uRW5kJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKHNwZWVkKTtcbiAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKG5ld1RyYW5zbGF0ZSk7XG4gICAgaWYgKHJ1bkNhbGxiYWNrcykge1xuICAgICAgc3dpcGVyLmVtaXQoJ2JlZm9yZVRyYW5zaXRpb25TdGFydCcsIHNwZWVkLCBpbnRlcm5hbCk7XG4gICAgICBzd2lwZXIuZW1pdCgndHJhbnNpdGlvblN0YXJ0Jyk7XG4gICAgfVxuICAgIGlmICghc3dpcGVyLmFuaW1hdGluZykge1xuICAgICAgc3dpcGVyLmFuaW1hdGluZyA9IHRydWU7XG4gICAgICBpZiAoIXN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpIHtcbiAgICAgICAgc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25FbmQoZSkge1xuICAgICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgICAgICBpZiAoZS50YXJnZXQgIT09IHRoaXMpIHJldHVybjtcbiAgICAgICAgICBzd2lwZXIud3JhcHBlckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBzd2lwZXIub25UcmFuc2xhdGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kKTtcbiAgICAgICAgICBzd2lwZXIub25UcmFuc2xhdGVUb1dyYXBwZXJUcmFuc2l0aW9uRW5kID0gbnVsbDtcbiAgICAgICAgICBkZWxldGUgc3dpcGVyLm9uVHJhbnNsYXRlVG9XcmFwcGVyVHJhbnNpdGlvbkVuZDtcbiAgICAgICAgICBpZiAocnVuQ2FsbGJhY2tzKSB7XG4gICAgICAgICAgICBzd2lwZXIuZW1pdCgndHJhbnNpdGlvbkVuZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHN3aXBlci53cmFwcGVyRWwuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIHN3aXBlci5vblRyYW5zbGF0ZVRvV3JhcHBlclRyYW5zaXRpb25FbmQpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/translate/translateTo.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/update/index.js\":\r\n/*!**************************************************!*\\\r\n  !*** ./node_modules/swiper/core/update/index.js ***!\r\n  \\**************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__)\\n/* harmony export */ });\\n/* harmony import */ var _updateSize_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./updateSize.js */ \\\"./node_modules/swiper/core/update/updateSize.js\\\");\\n/* harmony import */ var _updateSlides_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./updateSlides.js */ \\\"./node_modules/swiper/core/update/updateSlides.js\\\");\\n/* harmony import */ var _updateAutoHeight_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./updateAutoHeight.js */ \\\"./node_modules/swiper/core/update/updateAutoHeight.js\\\");\\n/* harmony import */ var _updateSlidesOffset_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./updateSlidesOffset.js */ \\\"./node_modules/swiper/core/update/updateSlidesOffset.js\\\");\\n/* harmony import */ var _updateSlidesProgress_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./updateSlidesProgress.js */ \\\"./node_modules/swiper/core/update/updateSlidesProgress.js\\\");\\n/* harmony import */ var _updateProgress_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./updateProgress.js */ \\\"./node_modules/swiper/core/update/updateProgress.js\\\");\\n/* harmony import */ var _updateSlidesClasses_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./updateSlidesClasses.js */ \\\"./node_modules/swiper/core/update/updateSlidesClasses.js\\\");\\n/* harmony import */ var _updateActiveIndex_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./updateActiveIndex.js */ \\\"./node_modules/swiper/core/update/updateActiveIndex.js\\\");\\n/* harmony import */ var _updateClickedSlide_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./updateClickedSlide.js */ \\\"./node_modules/swiper/core/update/updateClickedSlide.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\\n  updateSize: _updateSize_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"],\\n  updateSlides: _updateSlides_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"],\\n  updateAutoHeight: _updateAutoHeight_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"],\\n  updateSlidesOffset: _updateSlidesOffset_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"],\\n  updateSlidesProgress: _updateSlidesProgress_js__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"],\\n  updateProgress: _updateProgress_js__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"],\\n  updateSlidesClasses: _updateSlidesClasses_js__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"],\\n  updateActiveIndex: _updateActiveIndex_js__WEBPACK_IMPORTED_MODULE_7__[\\\"default\\\"],\\n  updateClickedSlide: _updateClickedSlide_js__WEBPACK_IMPORTED_MODULE_8__[\\\"default\\\"]\\n});//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdXBkYXRlL2luZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBeUM7QUFDSTtBQUNRO0FBQ0k7QUFDSTtBQUNaO0FBQ1U7QUFDSjtBQUNFO0FBQ3pELGlFQUFlO0FBQ2YsWUFBWTtBQUNaLGNBQWM7QUFDZCxrQkFBa0I7QUFDbEIsb0JBQW9CO0FBQ3BCLHNCQUFzQjtBQUN0QixnQkFBZ0I7QUFDaEIscUJBQXFCO0FBQ3JCLG1CQUFtQjtBQUNuQixvQkFBb0I7QUFDcEIsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3VwZGF0ZS9pbmRleC5qcz8yOGZmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB1cGRhdGVTaXplIGZyb20gJy4vdXBkYXRlU2l6ZS5qcyc7XG5pbXBvcnQgdXBkYXRlU2xpZGVzIGZyb20gJy4vdXBkYXRlU2xpZGVzLmpzJztcbmltcG9ydCB1cGRhdGVBdXRvSGVpZ2h0IGZyb20gJy4vdXBkYXRlQXV0b0hlaWdodC5qcyc7XG5pbXBvcnQgdXBkYXRlU2xpZGVzT2Zmc2V0IGZyb20gJy4vdXBkYXRlU2xpZGVzT2Zmc2V0LmpzJztcbmltcG9ydCB1cGRhdGVTbGlkZXNQcm9ncmVzcyBmcm9tICcuL3VwZGF0ZVNsaWRlc1Byb2dyZXNzLmpzJztcbmltcG9ydCB1cGRhdGVQcm9ncmVzcyBmcm9tICcuL3VwZGF0ZVByb2dyZXNzLmpzJztcbmltcG9ydCB1cGRhdGVTbGlkZXNDbGFzc2VzIGZyb20gJy4vdXBkYXRlU2xpZGVzQ2xhc3Nlcy5qcyc7XG5pbXBvcnQgdXBkYXRlQWN0aXZlSW5kZXggZnJvbSAnLi91cGRhdGVBY3RpdmVJbmRleC5qcyc7XG5pbXBvcnQgdXBkYXRlQ2xpY2tlZFNsaWRlIGZyb20gJy4vdXBkYXRlQ2xpY2tlZFNsaWRlLmpzJztcbmV4cG9ydCBkZWZhdWx0IHtcbiAgdXBkYXRlU2l6ZSxcbiAgdXBkYXRlU2xpZGVzLFxuICB1cGRhdGVBdXRvSGVpZ2h0LFxuICB1cGRhdGVTbGlkZXNPZmZzZXQsXG4gIHVwZGF0ZVNsaWRlc1Byb2dyZXNzLFxuICB1cGRhdGVQcm9ncmVzcyxcbiAgdXBkYXRlU2xpZGVzQ2xhc3NlcyxcbiAgdXBkYXRlQWN0aXZlSW5kZXgsXG4gIHVwZGF0ZUNsaWNrZWRTbGlkZVxufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/update/index.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/update/updateActiveIndex.js\":\r\n/*!**************************************************************!*\\\r\n  !*** ./node_modules/swiper/core/update/updateActiveIndex.js ***!\r\n  \\**************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ updateActiveIndex),\\n/* harmony export */   \\\"getActiveIndexByTranslate\\\": () => (/* binding */ getActiveIndexByTranslate)\\n/* harmony export */ });\\nfunction getActiveIndexByTranslate(swiper) {\\n  const {\\n    slidesGrid,\\n    params\\n  } = swiper;\\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\\n  let activeIndex;\\n  for (let i = 0; i < slidesGrid.length; i += 1) {\\n    if (typeof slidesGrid[i + 1] !== 'undefined') {\\n      if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\\n        activeIndex = i;\\n      } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\\n        activeIndex = i + 1;\\n      }\\n    } else if (translate >= slidesGrid[i]) {\\n      activeIndex = i;\\n    }\\n  }\\n  // Normalize slideIndex\\n  if (params.normalizeSlideIndex) {\\n    if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\\n  }\\n  return activeIndex;\\n}\\nfunction updateActiveIndex(newActiveIndex) {\\n  const swiper = this;\\n  const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\\n  const {\\n    snapGrid,\\n    params,\\n    activeIndex: previousIndex,\\n    realIndex: previousRealIndex,\\n    snapIndex: previousSnapIndex\\n  } = swiper;\\n  let activeIndex = newActiveIndex;\\n  let snapIndex;\\n  const getVirtualRealIndex = aIndex => {\\n    let realIndex = aIndex - swiper.virtual.slidesBefore;\\n    if (realIndex < 0) {\\n      realIndex = swiper.virtual.slides.length + realIndex;\\n    }\\n    if (realIndex >= swiper.virtual.slides.length) {\\n      realIndex -= swiper.virtual.slides.length;\\n    }\\n    return realIndex;\\n  };\\n  if (typeof activeIndex === 'undefined') {\\n    activeIndex = getActiveIndexByTranslate(swiper);\\n  }\\n  if (snapGrid.indexOf(translate) >= 0) {\\n    snapIndex = snapGrid.indexOf(translate);\\n  } else {\\n    const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\\n    snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\\n  }\\n  if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\\n  if (activeIndex === previousIndex) {\\n    if (snapIndex !== previousSnapIndex) {\\n      swiper.snapIndex = snapIndex;\\n      swiper.emit('snapIndexChange');\\n    }\\n    if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\\n      swiper.realIndex = getVirtualRealIndex(activeIndex);\\n    }\\n    return;\\n  }\\n  // Get real index\\n  let realIndex;\\n  if (swiper.virtual && params.virtual.enabled && params.loop) {\\n    realIndex = getVirtualRealIndex(activeIndex);\\n  } else if (swiper.slides[activeIndex]) {\\n    realIndex = parseInt(swiper.slides[activeIndex].getAttribute('data-swiper-slide-index') || activeIndex, 10);\\n  } else {\\n    realIndex = activeIndex;\\n  }\\n  Object.assign(swiper, {\\n    snapIndex,\\n    realIndex,\\n    previousIndex,\\n    activeIndex\\n  });\\n  swiper.emit('activeIndexChange');\\n  swiper.emit('snapIndexChange');\\n  if (previousRealIndex !== realIndex) {\\n    swiper.emit('realIndexChange');\\n  }\\n  if (swiper.initialized || swiper.params.runCallbacksOnInit) {\\n    swiper.emit('slideChange');\\n  }\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdXBkYXRlL3VwZGF0ZUFjdGl2ZUluZGV4LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLGtCQUFrQix1QkFBdUI7QUFDekM7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9jb3JlL3VwZGF0ZS91cGRhdGVBY3RpdmVJbmRleC5qcz8wODRjIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBnZXRBY3RpdmVJbmRleEJ5VHJhbnNsYXRlKHN3aXBlcikge1xuICBjb25zdCB7XG4gICAgc2xpZGVzR3JpZCxcbiAgICBwYXJhbXNcbiAgfSA9IHN3aXBlcjtcbiAgY29uc3QgdHJhbnNsYXRlID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IHN3aXBlci50cmFuc2xhdGUgOiAtc3dpcGVyLnRyYW5zbGF0ZTtcbiAgbGV0IGFjdGl2ZUluZGV4O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWRlc0dyaWQubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAodHlwZW9mIHNsaWRlc0dyaWRbaSArIDFdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHRyYW5zbGF0ZSA+PSBzbGlkZXNHcmlkW2ldICYmIHRyYW5zbGF0ZSA8IHNsaWRlc0dyaWRbaSArIDFdIC0gKHNsaWRlc0dyaWRbaSArIDFdIC0gc2xpZGVzR3JpZFtpXSkgLyAyKSB7XG4gICAgICAgIGFjdGl2ZUluZGV4ID0gaTtcbiAgICAgIH0gZWxzZSBpZiAodHJhbnNsYXRlID49IHNsaWRlc0dyaWRbaV0gJiYgdHJhbnNsYXRlIDwgc2xpZGVzR3JpZFtpICsgMV0pIHtcbiAgICAgICAgYWN0aXZlSW5kZXggPSBpICsgMTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRyYW5zbGF0ZSA+PSBzbGlkZXNHcmlkW2ldKSB7XG4gICAgICBhY3RpdmVJbmRleCA9IGk7XG4gICAgfVxuICB9XG4gIC8vIE5vcm1hbGl6ZSBzbGlkZUluZGV4XG4gIGlmIChwYXJhbXMubm9ybWFsaXplU2xpZGVJbmRleCkge1xuICAgIGlmIChhY3RpdmVJbmRleCA8IDAgfHwgdHlwZW9mIGFjdGl2ZUluZGV4ID09PSAndW5kZWZpbmVkJykgYWN0aXZlSW5kZXggPSAwO1xuICB9XG4gIHJldHVybiBhY3RpdmVJbmRleDtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZUFjdGl2ZUluZGV4KG5ld0FjdGl2ZUluZGV4KSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHRyYW5zbGF0ZSA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyBzd2lwZXIudHJhbnNsYXRlIDogLXN3aXBlci50cmFuc2xhdGU7XG4gIGNvbnN0IHtcbiAgICBzbmFwR3JpZCxcbiAgICBwYXJhbXMsXG4gICAgYWN0aXZlSW5kZXg6IHByZXZpb3VzSW5kZXgsXG4gICAgcmVhbEluZGV4OiBwcmV2aW91c1JlYWxJbmRleCxcbiAgICBzbmFwSW5kZXg6IHByZXZpb3VzU25hcEluZGV4XG4gIH0gPSBzd2lwZXI7XG4gIGxldCBhY3RpdmVJbmRleCA9IG5ld0FjdGl2ZUluZGV4O1xuICBsZXQgc25hcEluZGV4O1xuICBjb25zdCBnZXRWaXJ0dWFsUmVhbEluZGV4ID0gYUluZGV4ID0+IHtcbiAgICBsZXQgcmVhbEluZGV4ID0gYUluZGV4IC0gc3dpcGVyLnZpcnR1YWwuc2xpZGVzQmVmb3JlO1xuICAgIGlmIChyZWFsSW5kZXggPCAwKSB7XG4gICAgICByZWFsSW5kZXggPSBzd2lwZXIudmlydHVhbC5zbGlkZXMubGVuZ3RoICsgcmVhbEluZGV4O1xuICAgIH1cbiAgICBpZiAocmVhbEluZGV4ID49IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGgpIHtcbiAgICAgIHJlYWxJbmRleCAtPSBzd2lwZXIudmlydHVhbC5zbGlkZXMubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4gcmVhbEluZGV4O1xuICB9O1xuICBpZiAodHlwZW9mIGFjdGl2ZUluZGV4ID09PSAndW5kZWZpbmVkJykge1xuICAgIGFjdGl2ZUluZGV4ID0gZ2V0QWN0aXZlSW5kZXhCeVRyYW5zbGF0ZShzd2lwZXIpO1xuICB9XG4gIGlmIChzbmFwR3JpZC5pbmRleE9mKHRyYW5zbGF0ZSkgPj0gMCkge1xuICAgIHNuYXBJbmRleCA9IHNuYXBHcmlkLmluZGV4T2YodHJhbnNsYXRlKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBza2lwID0gTWF0aC5taW4ocGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCwgYWN0aXZlSW5kZXgpO1xuICAgIHNuYXBJbmRleCA9IHNraXAgKyBNYXRoLmZsb29yKChhY3RpdmVJbmRleCAtIHNraXApIC8gcGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcbiAgfVxuICBpZiAoc25hcEluZGV4ID49IHNuYXBHcmlkLmxlbmd0aCkgc25hcEluZGV4ID0gc25hcEdyaWQubGVuZ3RoIC0gMTtcbiAgaWYgKGFjdGl2ZUluZGV4ID09PSBwcmV2aW91c0luZGV4KSB7XG4gICAgaWYgKHNuYXBJbmRleCAhPT0gcHJldmlvdXNTbmFwSW5kZXgpIHtcbiAgICAgIHN3aXBlci5zbmFwSW5kZXggPSBzbmFwSW5kZXg7XG4gICAgICBzd2lwZXIuZW1pdCgnc25hcEluZGV4Q2hhbmdlJyk7XG4gICAgfVxuICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3AgJiYgc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQpIHtcbiAgICAgIHN3aXBlci5yZWFsSW5kZXggPSBnZXRWaXJ0dWFsUmVhbEluZGV4KGFjdGl2ZUluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIEdldCByZWFsIGluZGV4XG4gIGxldCByZWFsSW5kZXg7XG4gIGlmIChzd2lwZXIudmlydHVhbCAmJiBwYXJhbXMudmlydHVhbC5lbmFibGVkICYmIHBhcmFtcy5sb29wKSB7XG4gICAgcmVhbEluZGV4ID0gZ2V0VmlydHVhbFJlYWxJbmRleChhY3RpdmVJbmRleCk7XG4gIH0gZWxzZSBpZiAoc3dpcGVyLnNsaWRlc1thY3RpdmVJbmRleF0pIHtcbiAgICByZWFsSW5kZXggPSBwYXJzZUludChzd2lwZXIuc2xpZGVzW2FjdGl2ZUluZGV4XS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JykgfHwgYWN0aXZlSW5kZXgsIDEwKTtcbiAgfSBlbHNlIHtcbiAgICByZWFsSW5kZXggPSBhY3RpdmVJbmRleDtcbiAgfVxuICBPYmplY3QuYXNzaWduKHN3aXBlciwge1xuICAgIHNuYXBJbmRleCxcbiAgICByZWFsSW5kZXgsXG4gICAgcHJldmlvdXNJbmRleCxcbiAgICBhY3RpdmVJbmRleFxuICB9KTtcbiAgc3dpcGVyLmVtaXQoJ2FjdGl2ZUluZGV4Q2hhbmdlJyk7XG4gIHN3aXBlci5lbWl0KCdzbmFwSW5kZXhDaGFuZ2UnKTtcbiAgaWYgKHByZXZpb3VzUmVhbEluZGV4ICE9PSByZWFsSW5kZXgpIHtcbiAgICBzd2lwZXIuZW1pdCgncmVhbEluZGV4Q2hhbmdlJyk7XG4gIH1cbiAgaWYgKHN3aXBlci5pbml0aWFsaXplZCB8fCBzd2lwZXIucGFyYW1zLnJ1bkNhbGxiYWNrc09uSW5pdCkge1xuICAgIHN3aXBlci5lbWl0KCdzbGlkZUNoYW5nZScpO1xuICB9XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/update/updateActiveIndex.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/update/updateAutoHeight.js\":\r\n/*!*************************************************************!*\\\r\n  !*** ./node_modules/swiper/core/update/updateAutoHeight.js ***!\r\n  \\*************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ updateAutoHeight)\\n/* harmony export */ });\\nfunction updateAutoHeight(speed) {\\n  const swiper = this;\\n  const activeSlides = [];\\n  const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\\n  let newHeight = 0;\\n  let i;\\n  if (typeof speed === 'number') {\\n    swiper.setTransition(speed);\\n  } else if (speed === true) {\\n    swiper.setTransition(swiper.params.speed);\\n  }\\n  const getSlideByIndex = index => {\\n    if (isVirtual) {\\n      return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\\n    }\\n    return swiper.slides[index];\\n  };\\n  // Find slides currently in view\\n  if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\\n    if (swiper.params.centeredSlides) {\\n      (swiper.visibleSlides || []).forEach(slide => {\\n        activeSlides.push(slide);\\n      });\\n    } else {\\n      for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\\n        const index = swiper.activeIndex + i;\\n        if (index > swiper.slides.length && !isVirtual) break;\\n        activeSlides.push(getSlideByIndex(index));\\n      }\\n    }\\n  } else {\\n    activeSlides.push(getSlideByIndex(swiper.activeIndex));\\n  }\\n\\n  // Find new height from highest slide in view\\n  for (i = 0; i < activeSlides.length; i += 1) {\\n    if (typeof activeSlides[i] !== 'undefined') {\\n      const height = activeSlides[i].offsetHeight;\\n      newHeight = height > newHeight ? height : newHeight;\\n    }\\n  }\\n\\n  // Update Height\\n  if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdXBkYXRlL3VwZGF0ZUF1dG9IZWlnaHQuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsTUFBTTtBQUNOLGtCQUFrQiw0Q0FBNEM7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0EsY0FBYyx5QkFBeUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVFQUF1RSxVQUFVO0FBQ2pGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdXBkYXRlL3VwZGF0ZUF1dG9IZWlnaHQuanM/N2M3ZiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1cGRhdGVBdXRvSGVpZ2h0KHNwZWVkKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IGFjdGl2ZVNsaWRlcyA9IFtdO1xuICBjb25zdCBpc1ZpcnR1YWwgPSBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZDtcbiAgbGV0IG5ld0hlaWdodCA9IDA7XG4gIGxldCBpO1xuICBpZiAodHlwZW9mIHNwZWVkID09PSAnbnVtYmVyJykge1xuICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKHNwZWVkKTtcbiAgfSBlbHNlIGlmIChzcGVlZCA9PT0gdHJ1ZSkge1xuICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKHN3aXBlci5wYXJhbXMuc3BlZWQpO1xuICB9XG4gIGNvbnN0IGdldFNsaWRlQnlJbmRleCA9IGluZGV4ID0+IHtcbiAgICBpZiAoaXNWaXJ0dWFsKSB7XG4gICAgICByZXR1cm4gc3dpcGVyLnNsaWRlcy5maWx0ZXIoZWwgPT4gcGFyc2VJbnQoZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpLCAxMCkgPT09IGluZGV4KVswXTtcbiAgICB9XG4gICAgcmV0dXJuIHN3aXBlci5zbGlkZXNbaW5kZXhdO1xuICB9O1xuICAvLyBGaW5kIHNsaWRlcyBjdXJyZW50bHkgaW4gdmlld1xuICBpZiAoc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ICE9PSAnYXV0bycgJiYgc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ID4gMSkge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmNlbnRlcmVkU2xpZGVzKSB7XG4gICAgICAoc3dpcGVyLnZpc2libGVTbGlkZXMgfHwgW10pLmZvckVhY2goc2xpZGUgPT4ge1xuICAgICAgICBhY3RpdmVTbGlkZXMucHVzaChzbGlkZSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChpID0gMDsgaSA8IE1hdGguY2VpbChzd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXcpOyBpICs9IDEpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBzd2lwZXIuYWN0aXZlSW5kZXggKyBpO1xuICAgICAgICBpZiAoaW5kZXggPiBzd2lwZXIuc2xpZGVzLmxlbmd0aCAmJiAhaXNWaXJ0dWFsKSBicmVhaztcbiAgICAgICAgYWN0aXZlU2xpZGVzLnB1c2goZ2V0U2xpZGVCeUluZGV4KGluZGV4KSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFjdGl2ZVNsaWRlcy5wdXNoKGdldFNsaWRlQnlJbmRleChzd2lwZXIuYWN0aXZlSW5kZXgpKTtcbiAgfVxuXG4gIC8vIEZpbmQgbmV3IGhlaWdodCBmcm9tIGhpZ2hlc3Qgc2xpZGUgaW4gdmlld1xuICBmb3IgKGkgPSAwOyBpIDwgYWN0aXZlU2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKHR5cGVvZiBhY3RpdmVTbGlkZXNbaV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zdCBoZWlnaHQgPSBhY3RpdmVTbGlkZXNbaV0ub2Zmc2V0SGVpZ2h0O1xuICAgICAgbmV3SGVpZ2h0ID0gaGVpZ2h0ID4gbmV3SGVpZ2h0ID8gaGVpZ2h0IDogbmV3SGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIC8vIFVwZGF0ZSBIZWlnaHRcbiAgaWYgKG5ld0hlaWdodCB8fCBuZXdIZWlnaHQgPT09IDApIHN3aXBlci53cmFwcGVyRWwuc3R5bGUuaGVpZ2h0ID0gYCR7bmV3SGVpZ2h0fXB4YDtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/update/updateAutoHeight.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/update/updateClickedSlide.js\":\r\n/*!***************************************************************!*\\\r\n  !*** ./node_modules/swiper/core/update/updateClickedSlide.js ***!\r\n  \\***************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ updateClickedSlide)\\n/* harmony export */ });\\nfunction updateClickedSlide(e) {\\n  const swiper = this;\\n  const params = swiper.params;\\n  const slide = e.closest(`.${params.slideClass}, swiper-slide`);\\n  let slideFound = false;\\n  let slideIndex;\\n  if (slide) {\\n    for (let i = 0; i < swiper.slides.length; i += 1) {\\n      if (swiper.slides[i] === slide) {\\n        slideFound = true;\\n        slideIndex = i;\\n        break;\\n      }\\n    }\\n  }\\n  if (slide && slideFound) {\\n    swiper.clickedSlide = slide;\\n    if (swiper.virtual && swiper.params.virtual.enabled) {\\n      swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\\n    } else {\\n      swiper.clickedIndex = slideIndex;\\n    }\\n  } else {\\n    swiper.clickedSlide = undefined;\\n    swiper.clickedIndex = undefined;\\n    return;\\n  }\\n  if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\\n    swiper.slideToClickedSlide();\\n  }\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdXBkYXRlL3VwZGF0ZUNsaWNrZWRTbGlkZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0EsOEJBQThCLGtCQUFrQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsMEJBQTBCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdXBkYXRlL3VwZGF0ZUNsaWNrZWRTbGlkZS5qcz80ZjkzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZUNsaWNrZWRTbGlkZShlKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gIGNvbnN0IHNsaWRlID0gZS5jbG9zZXN0KGAuJHtwYXJhbXMuc2xpZGVDbGFzc30sIHN3aXBlci1zbGlkZWApO1xuICBsZXQgc2xpZGVGb3VuZCA9IGZhbHNlO1xuICBsZXQgc2xpZGVJbmRleDtcbiAgaWYgKHNsaWRlKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzd2lwZXIuc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAoc3dpcGVyLnNsaWRlc1tpXSA9PT0gc2xpZGUpIHtcbiAgICAgICAgc2xpZGVGb3VuZCA9IHRydWU7XG4gICAgICAgIHNsaWRlSW5kZXggPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHNsaWRlICYmIHNsaWRlRm91bmQpIHtcbiAgICBzd2lwZXIuY2xpY2tlZFNsaWRlID0gc2xpZGU7XG4gICAgaWYgKHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkKSB7XG4gICAgICBzd2lwZXIuY2xpY2tlZEluZGV4ID0gcGFyc2VJbnQoc2xpZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpLCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5jbGlja2VkSW5kZXggPSBzbGlkZUluZGV4O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzd2lwZXIuY2xpY2tlZFNsaWRlID0gdW5kZWZpbmVkO1xuICAgIHN3aXBlci5jbGlja2VkSW5kZXggPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwYXJhbXMuc2xpZGVUb0NsaWNrZWRTbGlkZSAmJiBzd2lwZXIuY2xpY2tlZEluZGV4ICE9PSB1bmRlZmluZWQgJiYgc3dpcGVyLmNsaWNrZWRJbmRleCAhPT0gc3dpcGVyLmFjdGl2ZUluZGV4KSB7XG4gICAgc3dpcGVyLnNsaWRlVG9DbGlja2VkU2xpZGUoKTtcbiAgfVxufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/update/updateClickedSlide.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/update/updateProgress.js\":\r\n/*!***********************************************************!*\\\r\n  !*** ./node_modules/swiper/core/update/updateProgress.js ***!\r\n  \\***********************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ updateProgress)\\n/* harmony export */ });\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\nfunction updateProgress(translate) {\\n  const swiper = this;\\n  if (typeof translate === 'undefined') {\\n    const multiplier = swiper.rtlTranslate ? -1 : 1;\\n    // eslint-disable-next-line\\n    translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\\n  }\\n  const params = swiper.params;\\n  const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\\n  let {\\n    progress,\\n    isBeginning,\\n    isEnd,\\n    progressLoop\\n  } = swiper;\\n  const wasBeginning = isBeginning;\\n  const wasEnd = isEnd;\\n  if (translatesDiff === 0) {\\n    progress = 0;\\n    isBeginning = true;\\n    isEnd = true;\\n  } else {\\n    progress = (translate - swiper.minTranslate()) / translatesDiff;\\n    const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\\n    const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\\n    isBeginning = isBeginningRounded || progress <= 0;\\n    isEnd = isEndRounded || progress >= 1;\\n    if (isBeginningRounded) progress = 0;\\n    if (isEndRounded) progress = 1;\\n  }\\n  if (params.loop) {\\n    const firstSlideIndex = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementIndex)(swiper.slides.filter(el => el.getAttribute('data-swiper-slide-index') === '0')[0]);\\n    const lastSlideIndex = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementIndex)(swiper.slides.filter(el => el.getAttribute('data-swiper-slide-index') * 1 === swiper.slides.length - 1)[0]);\\n    const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\\n    const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\\n    const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\\n    const translateAbs = Math.abs(translate);\\n    if (translateAbs >= firstSlideTranslate) {\\n      progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\\n    } else {\\n      progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\\n    }\\n    if (progressLoop > 1) progressLoop -= 1;\\n  }\\n  Object.assign(swiper, {\\n    progress,\\n    progressLoop,\\n    isBeginning,\\n    isEnd\\n  });\\n  if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\\n  if (isBeginning && !wasBeginning) {\\n    swiper.emit('reachBeginning toEdge');\\n  }\\n  if (isEnd && !wasEnd) {\\n    swiper.emit('reachEnd toEdge');\\n  }\\n  if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\\n    swiper.emit('fromEdge');\\n  }\\n  swiper.emit('progress', progress);\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdXBkYXRlL3VwZGF0ZVByb2dyZXNzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXFEO0FBQ3RDO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qiw4REFBWTtBQUN4QywyQkFBMkIsOERBQVk7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS91cGRhdGUvdXBkYXRlUHJvZ3Jlc3MuanM/ZDk3NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlbGVtZW50SW5kZXggfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXBkYXRlUHJvZ3Jlc3ModHJhbnNsYXRlKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGlmICh0eXBlb2YgdHJhbnNsYXRlID09PSAndW5kZWZpbmVkJykge1xuICAgIGNvbnN0IG11bHRpcGxpZXIgPSBzd2lwZXIucnRsVHJhbnNsYXRlID8gLTEgOiAxO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIHRyYW5zbGF0ZSA9IHN3aXBlciAmJiBzd2lwZXIudHJhbnNsYXRlICYmIHN3aXBlci50cmFuc2xhdGUgKiBtdWx0aXBsaWVyIHx8IDA7XG4gIH1cbiAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgY29uc3QgdHJhbnNsYXRlc0RpZmYgPSBzd2lwZXIubWF4VHJhbnNsYXRlKCkgLSBzd2lwZXIubWluVHJhbnNsYXRlKCk7XG4gIGxldCB7XG4gICAgcHJvZ3Jlc3MsXG4gICAgaXNCZWdpbm5pbmcsXG4gICAgaXNFbmQsXG4gICAgcHJvZ3Jlc3NMb29wXG4gIH0gPSBzd2lwZXI7XG4gIGNvbnN0IHdhc0JlZ2lubmluZyA9IGlzQmVnaW5uaW5nO1xuICBjb25zdCB3YXNFbmQgPSBpc0VuZDtcbiAgaWYgKHRyYW5zbGF0ZXNEaWZmID09PSAwKSB7XG4gICAgcHJvZ3Jlc3MgPSAwO1xuICAgIGlzQmVnaW5uaW5nID0gdHJ1ZTtcbiAgICBpc0VuZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcHJvZ3Jlc3MgPSAodHJhbnNsYXRlIC0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSAvIHRyYW5zbGF0ZXNEaWZmO1xuICAgIGNvbnN0IGlzQmVnaW5uaW5nUm91bmRlZCA9IE1hdGguYWJzKHRyYW5zbGF0ZSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKSkgPCAxO1xuICAgIGNvbnN0IGlzRW5kUm91bmRlZCA9IE1hdGguYWJzKHRyYW5zbGF0ZSAtIHN3aXBlci5tYXhUcmFuc2xhdGUoKSkgPCAxO1xuICAgIGlzQmVnaW5uaW5nID0gaXNCZWdpbm5pbmdSb3VuZGVkIHx8IHByb2dyZXNzIDw9IDA7XG4gICAgaXNFbmQgPSBpc0VuZFJvdW5kZWQgfHwgcHJvZ3Jlc3MgPj0gMTtcbiAgICBpZiAoaXNCZWdpbm5pbmdSb3VuZGVkKSBwcm9ncmVzcyA9IDA7XG4gICAgaWYgKGlzRW5kUm91bmRlZCkgcHJvZ3Jlc3MgPSAxO1xuICB9XG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIGNvbnN0IGZpcnN0U2xpZGVJbmRleCA9IGVsZW1lbnRJbmRleChzd2lwZXIuc2xpZGVzLmZpbHRlcihlbCA9PiBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JykgPT09ICcwJylbMF0pO1xuICAgIGNvbnN0IGxhc3RTbGlkZUluZGV4ID0gZWxlbWVudEluZGV4KHN3aXBlci5zbGlkZXMuZmlsdGVyKGVsID0+IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKSAqIDEgPT09IHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMSlbMF0pO1xuICAgIGNvbnN0IGZpcnN0U2xpZGVUcmFuc2xhdGUgPSBzd2lwZXIuc2xpZGVzR3JpZFtmaXJzdFNsaWRlSW5kZXhdO1xuICAgIGNvbnN0IGxhc3RTbGlkZVRyYW5zbGF0ZSA9IHN3aXBlci5zbGlkZXNHcmlkW2xhc3RTbGlkZUluZGV4XTtcbiAgICBjb25zdCB0cmFuc2xhdGVNYXggPSBzd2lwZXIuc2xpZGVzR3JpZFtzd2lwZXIuc2xpZGVzR3JpZC5sZW5ndGggLSAxXTtcbiAgICBjb25zdCB0cmFuc2xhdGVBYnMgPSBNYXRoLmFicyh0cmFuc2xhdGUpO1xuICAgIGlmICh0cmFuc2xhdGVBYnMgPj0gZmlyc3RTbGlkZVRyYW5zbGF0ZSkge1xuICAgICAgcHJvZ3Jlc3NMb29wID0gKHRyYW5zbGF0ZUFicyAtIGZpcnN0U2xpZGVUcmFuc2xhdGUpIC8gdHJhbnNsYXRlTWF4O1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmVzc0xvb3AgPSAodHJhbnNsYXRlQWJzICsgdHJhbnNsYXRlTWF4IC0gbGFzdFNsaWRlVHJhbnNsYXRlKSAvIHRyYW5zbGF0ZU1heDtcbiAgICB9XG4gICAgaWYgKHByb2dyZXNzTG9vcCA+IDEpIHByb2dyZXNzTG9vcCAtPSAxO1xuICB9XG4gIE9iamVjdC5hc3NpZ24oc3dpcGVyLCB7XG4gICAgcHJvZ3Jlc3MsXG4gICAgcHJvZ3Jlc3NMb29wLFxuICAgIGlzQmVnaW5uaW5nLFxuICAgIGlzRW5kXG4gIH0pO1xuICBpZiAocGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgfHwgcGFyYW1zLmNlbnRlcmVkU2xpZGVzICYmIHBhcmFtcy5hdXRvSGVpZ2h0KSBzd2lwZXIudXBkYXRlU2xpZGVzUHJvZ3Jlc3ModHJhbnNsYXRlKTtcbiAgaWYgKGlzQmVnaW5uaW5nICYmICF3YXNCZWdpbm5pbmcpIHtcbiAgICBzd2lwZXIuZW1pdCgncmVhY2hCZWdpbm5pbmcgdG9FZGdlJyk7XG4gIH1cbiAgaWYgKGlzRW5kICYmICF3YXNFbmQpIHtcbiAgICBzd2lwZXIuZW1pdCgncmVhY2hFbmQgdG9FZGdlJyk7XG4gIH1cbiAgaWYgKHdhc0JlZ2lubmluZyAmJiAhaXNCZWdpbm5pbmcgfHwgd2FzRW5kICYmICFpc0VuZCkge1xuICAgIHN3aXBlci5lbWl0KCdmcm9tRWRnZScpO1xuICB9XG4gIHN3aXBlci5lbWl0KCdwcm9ncmVzcycsIHByb2dyZXNzKTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/update/updateProgress.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/update/updateSize.js\":\r\n/*!*******************************************************!*\\\r\n  !*** ./node_modules/swiper/core/update/updateSize.js ***!\r\n  \\*******************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ updateSize)\\n/* harmony export */ });\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\nfunction updateSize() {\\n  const swiper = this;\\n  let width;\\n  let height;\\n  const el = swiper.el;\\n  if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\\n    width = swiper.params.width;\\n  } else {\\n    width = el.clientWidth;\\n  }\\n  if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\\n    height = swiper.params.height;\\n  } else {\\n    height = el.clientHeight;\\n  }\\n  if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\\n    return;\\n  }\\n\\n  // Subtract paddings\\n  width = width - parseInt((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementStyle)(el, 'padding-left') || 0, 10) - parseInt((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementStyle)(el, 'padding-right') || 0, 10);\\n  height = height - parseInt((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementStyle)(el, 'padding-top') || 0, 10) - parseInt((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementStyle)(el, 'padding-bottom') || 0, 10);\\n  if (Number.isNaN(width)) width = 0;\\n  if (Number.isNaN(height)) height = 0;\\n  Object.assign(swiper, {\\n    width,\\n    height,\\n    size: swiper.isHorizontal() ? width : height\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdXBkYXRlL3VwZGF0ZVNpemUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBcUQ7QUFDdEM7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQiw4REFBWSwwQ0FBMEMsOERBQVk7QUFDN0YsNkJBQTZCLDhEQUFZLHlDQUF5Qyw4REFBWTtBQUM5RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS91cGRhdGUvdXBkYXRlU2l6ZS5qcz8zODAzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVsZW1lbnRTdHlsZSB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1cGRhdGVTaXplKCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBsZXQgd2lkdGg7XG4gIGxldCBoZWlnaHQ7XG4gIGNvbnN0IGVsID0gc3dpcGVyLmVsO1xuICBpZiAodHlwZW9mIHN3aXBlci5wYXJhbXMud2lkdGggIT09ICd1bmRlZmluZWQnICYmIHN3aXBlci5wYXJhbXMud2lkdGggIT09IG51bGwpIHtcbiAgICB3aWR0aCA9IHN3aXBlci5wYXJhbXMud2lkdGg7XG4gIH0gZWxzZSB7XG4gICAgd2lkdGggPSBlbC5jbGllbnRXaWR0aDtcbiAgfVxuICBpZiAodHlwZW9mIHN3aXBlci5wYXJhbXMuaGVpZ2h0ICE9PSAndW5kZWZpbmVkJyAmJiBzd2lwZXIucGFyYW1zLmhlaWdodCAhPT0gbnVsbCkge1xuICAgIGhlaWdodCA9IHN3aXBlci5wYXJhbXMuaGVpZ2h0O1xuICB9IGVsc2Uge1xuICAgIGhlaWdodCA9IGVsLmNsaWVudEhlaWdodDtcbiAgfVxuICBpZiAod2lkdGggPT09IDAgJiYgc3dpcGVyLmlzSG9yaXpvbnRhbCgpIHx8IGhlaWdodCA9PT0gMCAmJiBzd2lwZXIuaXNWZXJ0aWNhbCgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU3VidHJhY3QgcGFkZGluZ3NcbiAgd2lkdGggPSB3aWR0aCAtIHBhcnNlSW50KGVsZW1lbnRTdHlsZShlbCwgJ3BhZGRpbmctbGVmdCcpIHx8IDAsIDEwKSAtIHBhcnNlSW50KGVsZW1lbnRTdHlsZShlbCwgJ3BhZGRpbmctcmlnaHQnKSB8fCAwLCAxMCk7XG4gIGhlaWdodCA9IGhlaWdodCAtIHBhcnNlSW50KGVsZW1lbnRTdHlsZShlbCwgJ3BhZGRpbmctdG9wJykgfHwgMCwgMTApIC0gcGFyc2VJbnQoZWxlbWVudFN0eWxlKGVsLCAncGFkZGluZy1ib3R0b20nKSB8fCAwLCAxMCk7XG4gIGlmIChOdW1iZXIuaXNOYU4od2lkdGgpKSB3aWR0aCA9IDA7XG4gIGlmIChOdW1iZXIuaXNOYU4oaGVpZ2h0KSkgaGVpZ2h0ID0gMDtcbiAgT2JqZWN0LmFzc2lnbihzd2lwZXIsIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgc2l6ZTogc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gd2lkdGggOiBoZWlnaHRcbiAgfSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/update/updateSize.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/update/updateSlides.js\":\r\n/*!*********************************************************!*\\\r\n  !*** ./node_modules/swiper/core/update/updateSlides.js ***!\r\n  \\*********************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ updateSlides)\\n/* harmony export */ });\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\nfunction updateSlides() {\\n  const swiper = this;\\n  function getDirectionLabel(property) {\\n    if (swiper.isHorizontal()) {\\n      return property;\\n    }\\n    // prettier-ignore\\n    return {\\n      'width': 'height',\\n      'margin-top': 'margin-left',\\n      'margin-bottom ': 'margin-right',\\n      'margin-left': 'margin-top',\\n      'margin-right': 'margin-bottom',\\n      'padding-left': 'padding-top',\\n      'padding-right': 'padding-bottom',\\n      'marginRight': 'marginBottom'\\n    }[property];\\n  }\\n  function getDirectionPropertyValue(node, label) {\\n    return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\\n  }\\n  const params = swiper.params;\\n  const {\\n    wrapperEl,\\n    slidesEl,\\n    size: swiperSize,\\n    rtlTranslate: rtl,\\n    wrongRTL\\n  } = swiper;\\n  const isVirtual = swiper.virtual && params.virtual.enabled;\\n  const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\\n  const slides = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementChildren)(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\\n  const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\\n  let snapGrid = [];\\n  const slidesGrid = [];\\n  const slidesSizesGrid = [];\\n  let offsetBefore = params.slidesOffsetBefore;\\n  if (typeof offsetBefore === 'function') {\\n    offsetBefore = params.slidesOffsetBefore.call(swiper);\\n  }\\n  let offsetAfter = params.slidesOffsetAfter;\\n  if (typeof offsetAfter === 'function') {\\n    offsetAfter = params.slidesOffsetAfter.call(swiper);\\n  }\\n  const previousSnapGridLength = swiper.snapGrid.length;\\n  const previousSlidesGridLength = swiper.slidesGrid.length;\\n  let spaceBetween = params.spaceBetween;\\n  let slidePosition = -offsetBefore;\\n  let prevSlideSize = 0;\\n  let index = 0;\\n  if (typeof swiperSize === 'undefined') {\\n    return;\\n  }\\n  if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\\n    spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\\n  }\\n  swiper.virtualSize = -spaceBetween;\\n\\n  // reset margins\\n  slides.forEach(slideEl => {\\n    if (rtl) {\\n      slideEl.style.marginLeft = '';\\n    } else {\\n      slideEl.style.marginRight = '';\\n    }\\n    slideEl.style.marginBottom = '';\\n    slideEl.style.marginTop = '';\\n  });\\n\\n  // reset cssMode offsets\\n  if (params.centeredSlides && params.cssMode) {\\n    (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.setCSSProperty)(wrapperEl, '--swiper-centered-offset-before', '');\\n    (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.setCSSProperty)(wrapperEl, '--swiper-centered-offset-after', '');\\n  }\\n  const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\\n  if (gridEnabled) {\\n    swiper.grid.initSlides(slidesLength);\\n  }\\n\\n  // Calc slides\\n  let slideSize;\\n  const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\\n    return typeof params.breakpoints[key].slidesPerView !== 'undefined';\\n  }).length > 0;\\n  for (let i = 0; i < slidesLength; i += 1) {\\n    slideSize = 0;\\n    let slide;\\n    if (slides[i]) slide = slides[i];\\n    if (gridEnabled) {\\n      swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\\n    }\\n    if (slides[i] && (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementStyle)(slide, 'display') === 'none') continue; // eslint-disable-line\\n\\n    if (params.slidesPerView === 'auto') {\\n      if (shouldResetSlideSize) {\\n        slides[i].style[getDirectionLabel('width')] = ``;\\n      }\\n      const slideStyles = getComputedStyle(slide);\\n      const currentTransform = slide.style.transform;\\n      const currentWebKitTransform = slide.style.webkitTransform;\\n      if (currentTransform) {\\n        slide.style.transform = 'none';\\n      }\\n      if (currentWebKitTransform) {\\n        slide.style.webkitTransform = 'none';\\n      }\\n      if (params.roundLengths) {\\n        slideSize = swiper.isHorizontal() ? (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementOuterSize)(slide, 'width', true) : (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementOuterSize)(slide, 'height', true);\\n      } else {\\n        // eslint-disable-next-line\\n        const width = getDirectionPropertyValue(slideStyles, 'width');\\n        const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\\n        const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\\n        const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\\n        const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\\n        const boxSizing = slideStyles.getPropertyValue('box-sizing');\\n        if (boxSizing && boxSizing === 'border-box') {\\n          slideSize = width + marginLeft + marginRight;\\n        } else {\\n          const {\\n            clientWidth,\\n            offsetWidth\\n          } = slide;\\n          slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\\n        }\\n      }\\n      if (currentTransform) {\\n        slide.style.transform = currentTransform;\\n      }\\n      if (currentWebKitTransform) {\\n        slide.style.webkitTransform = currentWebKitTransform;\\n      }\\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\\n    } else {\\n      slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\\n      if (params.roundLengths) slideSize = Math.floor(slideSize);\\n      if (slides[i]) {\\n        slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\\n      }\\n    }\\n    if (slides[i]) {\\n      slides[i].swiperSlideSize = slideSize;\\n    }\\n    slidesSizesGrid.push(slideSize);\\n    if (params.centeredSlides) {\\n      slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\\n      if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\\n      if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\\n      if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\\n      if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\\n      slidesGrid.push(slidePosition);\\n    } else {\\n      if (params.roundLengths) slidePosition = Math.floor(slidePosition);\\n      if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\\n      slidesGrid.push(slidePosition);\\n      slidePosition = slidePosition + slideSize + spaceBetween;\\n    }\\n    swiper.virtualSize += slideSize + spaceBetween;\\n    prevSlideSize = slideSize;\\n    index += 1;\\n  }\\n  swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\\n  if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\\n    wrapperEl.style.width = `${swiper.virtualSize + params.spaceBetween}px`;\\n  }\\n  if (params.setWrapperSize) {\\n    wrapperEl.style[getDirectionLabel('width')] = `${swiper.virtualSize + params.spaceBetween}px`;\\n  }\\n  if (gridEnabled) {\\n    swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\\n  }\\n\\n  // Remove last grid elements depending on width\\n  if (!params.centeredSlides) {\\n    const newSlidesGrid = [];\\n    for (let i = 0; i < snapGrid.length; i += 1) {\\n      let slidesGridItem = snapGrid[i];\\n      if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\\n      if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\\n        newSlidesGrid.push(slidesGridItem);\\n      }\\n    }\\n    snapGrid = newSlidesGrid;\\n    if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\\n      snapGrid.push(swiper.virtualSize - swiperSize);\\n    }\\n  }\\n  if (isVirtual && params.loop) {\\n    const size = slidesSizesGrid[0] + spaceBetween;\\n    if (params.slidesPerGroup > 1) {\\n      const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\\n      const groupSize = size * params.slidesPerGroup;\\n      for (let i = 0; i < groups; i += 1) {\\n        snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\\n      }\\n    }\\n    for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\\n      if (params.slidesPerGroup === 1) {\\n        snapGrid.push(snapGrid[snapGrid.length - 1] + size);\\n      }\\n      slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\\n      swiper.virtualSize += size;\\n    }\\n  }\\n  if (snapGrid.length === 0) snapGrid = [0];\\n  if (params.spaceBetween !== 0) {\\n    const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\\n    slides.filter((_, slideIndex) => {\\n      if (!params.cssMode || params.loop) return true;\\n      if (slideIndex === slides.length - 1) {\\n        return false;\\n      }\\n      return true;\\n    }).forEach(slideEl => {\\n      slideEl.style[key] = `${spaceBetween}px`;\\n    });\\n  }\\n  if (params.centeredSlides && params.centeredSlidesBounds) {\\n    let allSlidesSize = 0;\\n    slidesSizesGrid.forEach(slideSizeValue => {\\n      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\\n    });\\n    allSlidesSize -= params.spaceBetween;\\n    const maxSnap = allSlidesSize - swiperSize;\\n    snapGrid = snapGrid.map(snap => {\\n      if (snap < 0) return -offsetBefore;\\n      if (snap > maxSnap) return maxSnap + offsetAfter;\\n      return snap;\\n    });\\n  }\\n  if (params.centerInsufficientSlides) {\\n    let allSlidesSize = 0;\\n    slidesSizesGrid.forEach(slideSizeValue => {\\n      allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\\n    });\\n    allSlidesSize -= params.spaceBetween;\\n    if (allSlidesSize < swiperSize) {\\n      const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\\n      snapGrid.forEach((snap, snapIndex) => {\\n        snapGrid[snapIndex] = snap - allSlidesOffset;\\n      });\\n      slidesGrid.forEach((snap, snapIndex) => {\\n        slidesGrid[snapIndex] = snap + allSlidesOffset;\\n      });\\n    }\\n  }\\n  Object.assign(swiper, {\\n    slides,\\n    snapGrid,\\n    slidesGrid,\\n    slidesSizesGrid\\n  });\\n  if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\\n    (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.setCSSProperty)(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\\n    (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.setCSSProperty)(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\\n    const addToSnapGrid = -swiper.snapGrid[0];\\n    const addToSlidesGrid = -swiper.slidesGrid[0];\\n    swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\\n    swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\\n  }\\n  if (slidesLength !== previousSlidesLength) {\\n    swiper.emit('slidesLengthChange');\\n  }\\n  if (snapGrid.length !== previousSnapGridLength) {\\n    if (swiper.params.watchOverflow) swiper.checkOverflow();\\n    swiper.emit('snapGridLengthChange');\\n  }\\n  if (slidesGrid.length !== previousSlidesGridLength) {\\n    swiper.emit('slidesGridLengthChange');\\n  }\\n  if (params.watchSlidesProgress) {\\n    swiper.updateSlidesOffset();\\n  }\\n  if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\\n    const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\\n    const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\\n    if (slidesLength <= params.maxBackfaceHiddenSlides) {\\n      if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\\n    } else if (hasClassBackfaceClassAdded) {\\n      swiper.el.classList.remove(backFaceHiddenClass);\\n    }\\n  }\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdXBkYXRlL3VwZGF0ZVNsaWRlcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUF3RztBQUN6RjtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxpQkFBaUIsaUVBQWUsZUFBZSx5QkFBeUI7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQSxJQUFJLGdFQUFjO0FBQ2xCLElBQUksZ0VBQWM7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxrQkFBa0Isa0JBQWtCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiw4REFBWSx5Q0FBeUM7O0FBRTFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsa0VBQWdCLHlCQUF5QixrRUFBZ0I7QUFDckcsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EseURBQXlELFVBQVU7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLHlDQUF5QztBQUN4RTtBQUNBO0FBQ0EscURBQXFELHlDQUF5QztBQUM5RjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IscUJBQXFCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLFlBQVk7QUFDbEM7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLDhEQUE4RDtBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCw4QkFBOEIsYUFBYTtBQUMzQyxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxJQUFJLGdFQUFjLGtEQUFrRCxhQUFhO0FBQ2pGLElBQUksZ0VBQWMsaURBQWlELGtFQUFrRTtBQUNySTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyw4QkFBOEI7QUFDakU7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdXBkYXRlL3VwZGF0ZVNsaWRlcy5qcz84NmFjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVsZW1lbnRDaGlsZHJlbiwgZWxlbWVudE91dGVyU2l6ZSwgZWxlbWVudFN0eWxlLCBzZXRDU1NQcm9wZXJ0eSB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1cGRhdGVTbGlkZXMoKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGZ1bmN0aW9uIGdldERpcmVjdGlvbkxhYmVsKHByb3BlcnR5KSB7XG4gICAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgICAgcmV0dXJuIHByb3BlcnR5O1xuICAgIH1cbiAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICByZXR1cm4ge1xuICAgICAgJ3dpZHRoJzogJ2hlaWdodCcsXG4gICAgICAnbWFyZ2luLXRvcCc6ICdtYXJnaW4tbGVmdCcsXG4gICAgICAnbWFyZ2luLWJvdHRvbSAnOiAnbWFyZ2luLXJpZ2h0JyxcbiAgICAgICdtYXJnaW4tbGVmdCc6ICdtYXJnaW4tdG9wJyxcbiAgICAgICdtYXJnaW4tcmlnaHQnOiAnbWFyZ2luLWJvdHRvbScsXG4gICAgICAncGFkZGluZy1sZWZ0JzogJ3BhZGRpbmctdG9wJyxcbiAgICAgICdwYWRkaW5nLXJpZ2h0JzogJ3BhZGRpbmctYm90dG9tJyxcbiAgICAgICdtYXJnaW5SaWdodCc6ICdtYXJnaW5Cb3R0b20nXG4gICAgfVtwcm9wZXJ0eV07XG4gIH1cbiAgZnVuY3Rpb24gZ2V0RGlyZWN0aW9uUHJvcGVydHlWYWx1ZShub2RlLCBsYWJlbCkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KG5vZGUuZ2V0UHJvcGVydHlWYWx1ZShnZXREaXJlY3Rpb25MYWJlbChsYWJlbCkpIHx8IDApO1xuICB9XG4gIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXM7XG4gIGNvbnN0IHtcbiAgICB3cmFwcGVyRWwsXG4gICAgc2xpZGVzRWwsXG4gICAgc2l6ZTogc3dpcGVyU2l6ZSxcbiAgICBydGxUcmFuc2xhdGU6IHJ0bCxcbiAgICB3cm9uZ1JUTFxuICB9ID0gc3dpcGVyO1xuICBjb25zdCBpc1ZpcnR1YWwgPSBzd2lwZXIudmlydHVhbCAmJiBwYXJhbXMudmlydHVhbC5lbmFibGVkO1xuICBjb25zdCBwcmV2aW91c1NsaWRlc0xlbmd0aCA9IGlzVmlydHVhbCA/IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggOiBzd2lwZXIuc2xpZGVzLmxlbmd0aDtcbiAgY29uc3Qgc2xpZGVzID0gZWxlbWVudENoaWxkcmVuKHNsaWRlc0VsLCBgLiR7c3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzfSwgc3dpcGVyLXNsaWRlYCk7XG4gIGNvbnN0IHNsaWRlc0xlbmd0aCA9IGlzVmlydHVhbCA/IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGggOiBzbGlkZXMubGVuZ3RoO1xuICBsZXQgc25hcEdyaWQgPSBbXTtcbiAgY29uc3Qgc2xpZGVzR3JpZCA9IFtdO1xuICBjb25zdCBzbGlkZXNTaXplc0dyaWQgPSBbXTtcbiAgbGV0IG9mZnNldEJlZm9yZSA9IHBhcmFtcy5zbGlkZXNPZmZzZXRCZWZvcmU7XG4gIGlmICh0eXBlb2Ygb2Zmc2V0QmVmb3JlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgb2Zmc2V0QmVmb3JlID0gcGFyYW1zLnNsaWRlc09mZnNldEJlZm9yZS5jYWxsKHN3aXBlcik7XG4gIH1cbiAgbGV0IG9mZnNldEFmdGVyID0gcGFyYW1zLnNsaWRlc09mZnNldEFmdGVyO1xuICBpZiAodHlwZW9mIG9mZnNldEFmdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgb2Zmc2V0QWZ0ZXIgPSBwYXJhbXMuc2xpZGVzT2Zmc2V0QWZ0ZXIuY2FsbChzd2lwZXIpO1xuICB9XG4gIGNvbnN0IHByZXZpb3VzU25hcEdyaWRMZW5ndGggPSBzd2lwZXIuc25hcEdyaWQubGVuZ3RoO1xuICBjb25zdCBwcmV2aW91c1NsaWRlc0dyaWRMZW5ndGggPSBzd2lwZXIuc2xpZGVzR3JpZC5sZW5ndGg7XG4gIGxldCBzcGFjZUJldHdlZW4gPSBwYXJhbXMuc3BhY2VCZXR3ZWVuO1xuICBsZXQgc2xpZGVQb3NpdGlvbiA9IC1vZmZzZXRCZWZvcmU7XG4gIGxldCBwcmV2U2xpZGVTaXplID0gMDtcbiAgbGV0IGluZGV4ID0gMDtcbiAgaWYgKHR5cGVvZiBzd2lwZXJTaXplID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAodHlwZW9mIHNwYWNlQmV0d2VlbiA9PT0gJ3N0cmluZycgJiYgc3BhY2VCZXR3ZWVuLmluZGV4T2YoJyUnKSA+PSAwKSB7XG4gICAgc3BhY2VCZXR3ZWVuID0gcGFyc2VGbG9hdChzcGFjZUJldHdlZW4ucmVwbGFjZSgnJScsICcnKSkgLyAxMDAgKiBzd2lwZXJTaXplO1xuICB9XG4gIHN3aXBlci52aXJ0dWFsU2l6ZSA9IC1zcGFjZUJldHdlZW47XG5cbiAgLy8gcmVzZXQgbWFyZ2luc1xuICBzbGlkZXMuZm9yRWFjaChzbGlkZUVsID0+IHtcbiAgICBpZiAocnRsKSB7XG4gICAgICBzbGlkZUVsLnN0eWxlLm1hcmdpbkxlZnQgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgc2xpZGVFbC5zdHlsZS5tYXJnaW5SaWdodCA9ICcnO1xuICAgIH1cbiAgICBzbGlkZUVsLnN0eWxlLm1hcmdpbkJvdHRvbSA9ICcnO1xuICAgIHNsaWRlRWwuc3R5bGUubWFyZ2luVG9wID0gJyc7XG4gIH0pO1xuXG4gIC8vIHJlc2V0IGNzc01vZGUgb2Zmc2V0c1xuICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzICYmIHBhcmFtcy5jc3NNb2RlKSB7XG4gICAgc2V0Q1NTUHJvcGVydHkod3JhcHBlckVsLCAnLS1zd2lwZXItY2VudGVyZWQtb2Zmc2V0LWJlZm9yZScsICcnKTtcbiAgICBzZXRDU1NQcm9wZXJ0eSh3cmFwcGVyRWwsICctLXN3aXBlci1jZW50ZXJlZC1vZmZzZXQtYWZ0ZXInLCAnJyk7XG4gIH1cbiAgY29uc3QgZ3JpZEVuYWJsZWQgPSBwYXJhbXMuZ3JpZCAmJiBwYXJhbXMuZ3JpZC5yb3dzID4gMSAmJiBzd2lwZXIuZ3JpZDtcbiAgaWYgKGdyaWRFbmFibGVkKSB7XG4gICAgc3dpcGVyLmdyaWQuaW5pdFNsaWRlcyhzbGlkZXNMZW5ndGgpO1xuICB9XG5cbiAgLy8gQ2FsYyBzbGlkZXNcbiAgbGV0IHNsaWRlU2l6ZTtcbiAgY29uc3Qgc2hvdWxkUmVzZXRTbGlkZVNpemUgPSBwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nICYmIHBhcmFtcy5icmVha3BvaW50cyAmJiBPYmplY3Qua2V5cyhwYXJhbXMuYnJlYWtwb2ludHMpLmZpbHRlcihrZXkgPT4ge1xuICAgIHJldHVybiB0eXBlb2YgcGFyYW1zLmJyZWFrcG9pbnRzW2tleV0uc2xpZGVzUGVyVmlldyAhPT0gJ3VuZGVmaW5lZCc7XG4gIH0pLmxlbmd0aCA+IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpZGVzTGVuZ3RoOyBpICs9IDEpIHtcbiAgICBzbGlkZVNpemUgPSAwO1xuICAgIGxldCBzbGlkZTtcbiAgICBpZiAoc2xpZGVzW2ldKSBzbGlkZSA9IHNsaWRlc1tpXTtcbiAgICBpZiAoZ3JpZEVuYWJsZWQpIHtcbiAgICAgIHN3aXBlci5ncmlkLnVwZGF0ZVNsaWRlKGksIHNsaWRlLCBzbGlkZXNMZW5ndGgsIGdldERpcmVjdGlvbkxhYmVsKTtcbiAgICB9XG4gICAgaWYgKHNsaWRlc1tpXSAmJiBlbGVtZW50U3R5bGUoc2xpZGUsICdkaXNwbGF5JykgPT09ICdub25lJykgY29udGludWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nKSB7XG4gICAgICBpZiAoc2hvdWxkUmVzZXRTbGlkZVNpemUpIHtcbiAgICAgICAgc2xpZGVzW2ldLnN0eWxlW2dldERpcmVjdGlvbkxhYmVsKCd3aWR0aCcpXSA9IGBgO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2xpZGVTdHlsZXMgPSBnZXRDb21wdXRlZFN0eWxlKHNsaWRlKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRUcmFuc2Zvcm0gPSBzbGlkZS5zdHlsZS50cmFuc2Zvcm07XG4gICAgICBjb25zdCBjdXJyZW50V2ViS2l0VHJhbnNmb3JtID0gc2xpZGUuc3R5bGUud2Via2l0VHJhbnNmb3JtO1xuICAgICAgaWYgKGN1cnJlbnRUcmFuc2Zvcm0pIHtcbiAgICAgICAgc2xpZGUuc3R5bGUudHJhbnNmb3JtID0gJ25vbmUnO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRXZWJLaXRUcmFuc2Zvcm0pIHtcbiAgICAgICAgc2xpZGUuc3R5bGUud2Via2l0VHJhbnNmb3JtID0gJ25vbmUnO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHtcbiAgICAgICAgc2xpZGVTaXplID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gZWxlbWVudE91dGVyU2l6ZShzbGlkZSwgJ3dpZHRoJywgdHJ1ZSkgOiBlbGVtZW50T3V0ZXJTaXplKHNsaWRlLCAnaGVpZ2h0JywgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgY29uc3Qgd2lkdGggPSBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKHNsaWRlU3R5bGVzLCAnd2lkdGgnKTtcbiAgICAgICAgY29uc3QgcGFkZGluZ0xlZnQgPSBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKHNsaWRlU3R5bGVzLCAncGFkZGluZy1sZWZ0Jyk7XG4gICAgICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IGdldERpcmVjdGlvblByb3BlcnR5VmFsdWUoc2xpZGVTdHlsZXMsICdwYWRkaW5nLXJpZ2h0Jyk7XG4gICAgICAgIGNvbnN0IG1hcmdpbkxlZnQgPSBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKHNsaWRlU3R5bGVzLCAnbWFyZ2luLWxlZnQnKTtcbiAgICAgICAgY29uc3QgbWFyZ2luUmlnaHQgPSBnZXREaXJlY3Rpb25Qcm9wZXJ0eVZhbHVlKHNsaWRlU3R5bGVzLCAnbWFyZ2luLXJpZ2h0Jyk7XG4gICAgICAgIGNvbnN0IGJveFNpemluZyA9IHNsaWRlU3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ2JveC1zaXppbmcnKTtcbiAgICAgICAgaWYgKGJveFNpemluZyAmJiBib3hTaXppbmcgPT09ICdib3JkZXItYm94Jykge1xuICAgICAgICAgIHNsaWRlU2l6ZSA9IHdpZHRoICsgbWFyZ2luTGVmdCArIG1hcmdpblJpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGNsaWVudFdpZHRoLFxuICAgICAgICAgICAgb2Zmc2V0V2lkdGhcbiAgICAgICAgICB9ID0gc2xpZGU7XG4gICAgICAgICAgc2xpZGVTaXplID0gd2lkdGggKyBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodCArIG1hcmdpbkxlZnQgKyBtYXJnaW5SaWdodCArIChvZmZzZXRXaWR0aCAtIGNsaWVudFdpZHRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRUcmFuc2Zvcm0pIHtcbiAgICAgICAgc2xpZGUuc3R5bGUudHJhbnNmb3JtID0gY3VycmVudFRyYW5zZm9ybTtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50V2ViS2l0VHJhbnNmb3JtKSB7XG4gICAgICAgIHNsaWRlLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9IGN1cnJlbnRXZWJLaXRUcmFuc2Zvcm07XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykgc2xpZGVTaXplID0gTWF0aC5mbG9vcihzbGlkZVNpemUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzbGlkZVNpemUgPSAoc3dpcGVyU2l6ZSAtIChwYXJhbXMuc2xpZGVzUGVyVmlldyAtIDEpICogc3BhY2VCZXR3ZWVuKSAvIHBhcmFtcy5zbGlkZXNQZXJWaWV3O1xuICAgICAgaWYgKHBhcmFtcy5yb3VuZExlbmd0aHMpIHNsaWRlU2l6ZSA9IE1hdGguZmxvb3Ioc2xpZGVTaXplKTtcbiAgICAgIGlmIChzbGlkZXNbaV0pIHtcbiAgICAgICAgc2xpZGVzW2ldLnN0eWxlW2dldERpcmVjdGlvbkxhYmVsKCd3aWR0aCcpXSA9IGAke3NsaWRlU2l6ZX1weGA7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzbGlkZXNbaV0pIHtcbiAgICAgIHNsaWRlc1tpXS5zd2lwZXJTbGlkZVNpemUgPSBzbGlkZVNpemU7XG4gICAgfVxuICAgIHNsaWRlc1NpemVzR3JpZC5wdXNoKHNsaWRlU2l6ZSk7XG4gICAgaWYgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgc2xpZGVQb3NpdGlvbiA9IHNsaWRlUG9zaXRpb24gKyBzbGlkZVNpemUgLyAyICsgcHJldlNsaWRlU2l6ZSAvIDIgKyBzcGFjZUJldHdlZW47XG4gICAgICBpZiAocHJldlNsaWRlU2l6ZSA9PT0gMCAmJiBpICE9PSAwKSBzbGlkZVBvc2l0aW9uID0gc2xpZGVQb3NpdGlvbiAtIHN3aXBlclNpemUgLyAyIC0gc3BhY2VCZXR3ZWVuO1xuICAgICAgaWYgKGkgPT09IDApIHNsaWRlUG9zaXRpb24gPSBzbGlkZVBvc2l0aW9uIC0gc3dpcGVyU2l6ZSAvIDIgLSBzcGFjZUJldHdlZW47XG4gICAgICBpZiAoTWF0aC5hYnMoc2xpZGVQb3NpdGlvbikgPCAxIC8gMTAwMCkgc2xpZGVQb3NpdGlvbiA9IDA7XG4gICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykgc2xpZGVQb3NpdGlvbiA9IE1hdGguZmxvb3Ioc2xpZGVQb3NpdGlvbik7XG4gICAgICBpZiAoaW5kZXggJSBwYXJhbXMuc2xpZGVzUGVyR3JvdXAgPT09IDApIHNuYXBHcmlkLnB1c2goc2xpZGVQb3NpdGlvbik7XG4gICAgICBzbGlkZXNHcmlkLnB1c2goc2xpZGVQb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwYXJhbXMucm91bmRMZW5ndGhzKSBzbGlkZVBvc2l0aW9uID0gTWF0aC5mbG9vcihzbGlkZVBvc2l0aW9uKTtcbiAgICAgIGlmICgoaW5kZXggLSBNYXRoLm1pbihzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwU2tpcCwgaW5kZXgpKSAlIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXAgPT09IDApIHNuYXBHcmlkLnB1c2goc2xpZGVQb3NpdGlvbik7XG4gICAgICBzbGlkZXNHcmlkLnB1c2goc2xpZGVQb3NpdGlvbik7XG4gICAgICBzbGlkZVBvc2l0aW9uID0gc2xpZGVQb3NpdGlvbiArIHNsaWRlU2l6ZSArIHNwYWNlQmV0d2VlbjtcbiAgICB9XG4gICAgc3dpcGVyLnZpcnR1YWxTaXplICs9IHNsaWRlU2l6ZSArIHNwYWNlQmV0d2VlbjtcbiAgICBwcmV2U2xpZGVTaXplID0gc2xpZGVTaXplO1xuICAgIGluZGV4ICs9IDE7XG4gIH1cbiAgc3dpcGVyLnZpcnR1YWxTaXplID0gTWF0aC5tYXgoc3dpcGVyLnZpcnR1YWxTaXplLCBzd2lwZXJTaXplKSArIG9mZnNldEFmdGVyO1xuICBpZiAocnRsICYmIHdyb25nUlRMICYmIChwYXJhbXMuZWZmZWN0ID09PSAnc2xpZGUnIHx8IHBhcmFtcy5lZmZlY3QgPT09ICdjb3ZlcmZsb3cnKSkge1xuICAgIHdyYXBwZXJFbC5zdHlsZS53aWR0aCA9IGAke3N3aXBlci52aXJ0dWFsU2l6ZSArIHBhcmFtcy5zcGFjZUJldHdlZW59cHhgO1xuICB9XG4gIGlmIChwYXJhbXMuc2V0V3JhcHBlclNpemUpIHtcbiAgICB3cmFwcGVyRWwuc3R5bGVbZ2V0RGlyZWN0aW9uTGFiZWwoJ3dpZHRoJyldID0gYCR7c3dpcGVyLnZpcnR1YWxTaXplICsgcGFyYW1zLnNwYWNlQmV0d2Vlbn1weGA7XG4gIH1cbiAgaWYgKGdyaWRFbmFibGVkKSB7XG4gICAgc3dpcGVyLmdyaWQudXBkYXRlV3JhcHBlclNpemUoc2xpZGVTaXplLCBzbmFwR3JpZCwgZ2V0RGlyZWN0aW9uTGFiZWwpO1xuICB9XG5cbiAgLy8gUmVtb3ZlIGxhc3QgZ3JpZCBlbGVtZW50cyBkZXBlbmRpbmcgb24gd2lkdGhcbiAgaWYgKCFwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICBjb25zdCBuZXdTbGlkZXNHcmlkID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbmFwR3JpZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgbGV0IHNsaWRlc0dyaWRJdGVtID0gc25hcEdyaWRbaV07XG4gICAgICBpZiAocGFyYW1zLnJvdW5kTGVuZ3Rocykgc2xpZGVzR3JpZEl0ZW0gPSBNYXRoLmZsb29yKHNsaWRlc0dyaWRJdGVtKTtcbiAgICAgIGlmIChzbmFwR3JpZFtpXSA8PSBzd2lwZXIudmlydHVhbFNpemUgLSBzd2lwZXJTaXplKSB7XG4gICAgICAgIG5ld1NsaWRlc0dyaWQucHVzaChzbGlkZXNHcmlkSXRlbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHNuYXBHcmlkID0gbmV3U2xpZGVzR3JpZDtcbiAgICBpZiAoTWF0aC5mbG9vcihzd2lwZXIudmlydHVhbFNpemUgLSBzd2lwZXJTaXplKSAtIE1hdGguZmxvb3Ioc25hcEdyaWRbc25hcEdyaWQubGVuZ3RoIC0gMV0pID4gMSkge1xuICAgICAgc25hcEdyaWQucHVzaChzd2lwZXIudmlydHVhbFNpemUgLSBzd2lwZXJTaXplKTtcbiAgICB9XG4gIH1cbiAgaWYgKGlzVmlydHVhbCAmJiBwYXJhbXMubG9vcCkge1xuICAgIGNvbnN0IHNpemUgPSBzbGlkZXNTaXplc0dyaWRbMF0gKyBzcGFjZUJldHdlZW47XG4gICAgaWYgKHBhcmFtcy5zbGlkZXNQZXJHcm91cCA+IDEpIHtcbiAgICAgIGNvbnN0IGdyb3VwcyA9IE1hdGguY2VpbCgoc3dpcGVyLnZpcnR1YWwuc2xpZGVzQmVmb3JlICsgc3dpcGVyLnZpcnR1YWwuc2xpZGVzQWZ0ZXIpIC8gcGFyYW1zLnNsaWRlc1Blckdyb3VwKTtcbiAgICAgIGNvbnN0IGdyb3VwU2l6ZSA9IHNpemUgKiBwYXJhbXMuc2xpZGVzUGVyR3JvdXA7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdyb3VwczsgaSArPSAxKSB7XG4gICAgICAgIHNuYXBHcmlkLnB1c2goc25hcEdyaWRbc25hcEdyaWQubGVuZ3RoIC0gMV0gKyBncm91cFNpemUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN3aXBlci52aXJ0dWFsLnNsaWRlc0JlZm9yZSArIHN3aXBlci52aXJ0dWFsLnNsaWRlc0FmdGVyOyBpICs9IDEpIHtcbiAgICAgIGlmIChwYXJhbXMuc2xpZGVzUGVyR3JvdXAgPT09IDEpIHtcbiAgICAgICAgc25hcEdyaWQucHVzaChzbmFwR3JpZFtzbmFwR3JpZC5sZW5ndGggLSAxXSArIHNpemUpO1xuICAgICAgfVxuICAgICAgc2xpZGVzR3JpZC5wdXNoKHNsaWRlc0dyaWRbc2xpZGVzR3JpZC5sZW5ndGggLSAxXSArIHNpemUpO1xuICAgICAgc3dpcGVyLnZpcnR1YWxTaXplICs9IHNpemU7XG4gICAgfVxuICB9XG4gIGlmIChzbmFwR3JpZC5sZW5ndGggPT09IDApIHNuYXBHcmlkID0gWzBdO1xuICBpZiAocGFyYW1zLnNwYWNlQmV0d2VlbiAhPT0gMCkge1xuICAgIGNvbnN0IGtleSA9IHN3aXBlci5pc0hvcml6b250YWwoKSAmJiBydGwgPyAnbWFyZ2luTGVmdCcgOiBnZXREaXJlY3Rpb25MYWJlbCgnbWFyZ2luUmlnaHQnKTtcbiAgICBzbGlkZXMuZmlsdGVyKChfLCBzbGlkZUluZGV4KSA9PiB7XG4gICAgICBpZiAoIXBhcmFtcy5jc3NNb2RlIHx8IHBhcmFtcy5sb29wKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChzbGlkZUluZGV4ID09PSBzbGlkZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KS5mb3JFYWNoKHNsaWRlRWwgPT4ge1xuICAgICAgc2xpZGVFbC5zdHlsZVtrZXldID0gYCR7c3BhY2VCZXR3ZWVufXB4YDtcbiAgICB9KTtcbiAgfVxuICBpZiAocGFyYW1zLmNlbnRlcmVkU2xpZGVzICYmIHBhcmFtcy5jZW50ZXJlZFNsaWRlc0JvdW5kcykge1xuICAgIGxldCBhbGxTbGlkZXNTaXplID0gMDtcbiAgICBzbGlkZXNTaXplc0dyaWQuZm9yRWFjaChzbGlkZVNpemVWYWx1ZSA9PiB7XG4gICAgICBhbGxTbGlkZXNTaXplICs9IHNsaWRlU2l6ZVZhbHVlICsgKHBhcmFtcy5zcGFjZUJldHdlZW4gPyBwYXJhbXMuc3BhY2VCZXR3ZWVuIDogMCk7XG4gICAgfSk7XG4gICAgYWxsU2xpZGVzU2l6ZSAtPSBwYXJhbXMuc3BhY2VCZXR3ZWVuO1xuICAgIGNvbnN0IG1heFNuYXAgPSBhbGxTbGlkZXNTaXplIC0gc3dpcGVyU2l6ZTtcbiAgICBzbmFwR3JpZCA9IHNuYXBHcmlkLm1hcChzbmFwID0+IHtcbiAgICAgIGlmIChzbmFwIDwgMCkgcmV0dXJuIC1vZmZzZXRCZWZvcmU7XG4gICAgICBpZiAoc25hcCA+IG1heFNuYXApIHJldHVybiBtYXhTbmFwICsgb2Zmc2V0QWZ0ZXI7XG4gICAgICByZXR1cm4gc25hcDtcbiAgICB9KTtcbiAgfVxuICBpZiAocGFyYW1zLmNlbnRlckluc3VmZmljaWVudFNsaWRlcykge1xuICAgIGxldCBhbGxTbGlkZXNTaXplID0gMDtcbiAgICBzbGlkZXNTaXplc0dyaWQuZm9yRWFjaChzbGlkZVNpemVWYWx1ZSA9PiB7XG4gICAgICBhbGxTbGlkZXNTaXplICs9IHNsaWRlU2l6ZVZhbHVlICsgKHBhcmFtcy5zcGFjZUJldHdlZW4gPyBwYXJhbXMuc3BhY2VCZXR3ZWVuIDogMCk7XG4gICAgfSk7XG4gICAgYWxsU2xpZGVzU2l6ZSAtPSBwYXJhbXMuc3BhY2VCZXR3ZWVuO1xuICAgIGlmIChhbGxTbGlkZXNTaXplIDwgc3dpcGVyU2l6ZSkge1xuICAgICAgY29uc3QgYWxsU2xpZGVzT2Zmc2V0ID0gKHN3aXBlclNpemUgLSBhbGxTbGlkZXNTaXplKSAvIDI7XG4gICAgICBzbmFwR3JpZC5mb3JFYWNoKChzbmFwLCBzbmFwSW5kZXgpID0+IHtcbiAgICAgICAgc25hcEdyaWRbc25hcEluZGV4XSA9IHNuYXAgLSBhbGxTbGlkZXNPZmZzZXQ7XG4gICAgICB9KTtcbiAgICAgIHNsaWRlc0dyaWQuZm9yRWFjaCgoc25hcCwgc25hcEluZGV4KSA9PiB7XG4gICAgICAgIHNsaWRlc0dyaWRbc25hcEluZGV4XSA9IHNuYXAgKyBhbGxTbGlkZXNPZmZzZXQ7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgT2JqZWN0LmFzc2lnbihzd2lwZXIsIHtcbiAgICBzbGlkZXMsXG4gICAgc25hcEdyaWQsXG4gICAgc2xpZGVzR3JpZCxcbiAgICBzbGlkZXNTaXplc0dyaWRcbiAgfSk7XG4gIGlmIChwYXJhbXMuY2VudGVyZWRTbGlkZXMgJiYgcGFyYW1zLmNzc01vZGUgJiYgIXBhcmFtcy5jZW50ZXJlZFNsaWRlc0JvdW5kcykge1xuICAgIHNldENTU1Byb3BlcnR5KHdyYXBwZXJFbCwgJy0tc3dpcGVyLWNlbnRlcmVkLW9mZnNldC1iZWZvcmUnLCBgJHstc25hcEdyaWRbMF19cHhgKTtcbiAgICBzZXRDU1NQcm9wZXJ0eSh3cmFwcGVyRWwsICctLXN3aXBlci1jZW50ZXJlZC1vZmZzZXQtYWZ0ZXInLCBgJHtzd2lwZXIuc2l6ZSAvIDIgLSBzbGlkZXNTaXplc0dyaWRbc2xpZGVzU2l6ZXNHcmlkLmxlbmd0aCAtIDFdIC8gMn1weGApO1xuICAgIGNvbnN0IGFkZFRvU25hcEdyaWQgPSAtc3dpcGVyLnNuYXBHcmlkWzBdO1xuICAgIGNvbnN0IGFkZFRvU2xpZGVzR3JpZCA9IC1zd2lwZXIuc2xpZGVzR3JpZFswXTtcbiAgICBzd2lwZXIuc25hcEdyaWQgPSBzd2lwZXIuc25hcEdyaWQubWFwKHYgPT4gdiArIGFkZFRvU25hcEdyaWQpO1xuICAgIHN3aXBlci5zbGlkZXNHcmlkID0gc3dpcGVyLnNsaWRlc0dyaWQubWFwKHYgPT4gdiArIGFkZFRvU2xpZGVzR3JpZCk7XG4gIH1cbiAgaWYgKHNsaWRlc0xlbmd0aCAhPT0gcHJldmlvdXNTbGlkZXNMZW5ndGgpIHtcbiAgICBzd2lwZXIuZW1pdCgnc2xpZGVzTGVuZ3RoQ2hhbmdlJyk7XG4gIH1cbiAgaWYgKHNuYXBHcmlkLmxlbmd0aCAhPT0gcHJldmlvdXNTbmFwR3JpZExlbmd0aCkge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cpIHN3aXBlci5jaGVja092ZXJmbG93KCk7XG4gICAgc3dpcGVyLmVtaXQoJ3NuYXBHcmlkTGVuZ3RoQ2hhbmdlJyk7XG4gIH1cbiAgaWYgKHNsaWRlc0dyaWQubGVuZ3RoICE9PSBwcmV2aW91c1NsaWRlc0dyaWRMZW5ndGgpIHtcbiAgICBzd2lwZXIuZW1pdCgnc2xpZGVzR3JpZExlbmd0aENoYW5nZScpO1xuICB9XG4gIGlmIChwYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcykge1xuICAgIHN3aXBlci51cGRhdGVTbGlkZXNPZmZzZXQoKTtcbiAgfVxuICBpZiAoIWlzVmlydHVhbCAmJiAhcGFyYW1zLmNzc01vZGUgJiYgKHBhcmFtcy5lZmZlY3QgPT09ICdzbGlkZScgfHwgcGFyYW1zLmVmZmVjdCA9PT0gJ2ZhZGUnKSkge1xuICAgIGNvbnN0IGJhY2tGYWNlSGlkZGVuQ2xhc3MgPSBgJHtwYXJhbXMuY29udGFpbmVyTW9kaWZpZXJDbGFzc31iYWNrZmFjZS1oaWRkZW5gO1xuICAgIGNvbnN0IGhhc0NsYXNzQmFja2ZhY2VDbGFzc0FkZGVkID0gc3dpcGVyLmVsLmNsYXNzTGlzdC5jb250YWlucyhiYWNrRmFjZUhpZGRlbkNsYXNzKTtcbiAgICBpZiAoc2xpZGVzTGVuZ3RoIDw9IHBhcmFtcy5tYXhCYWNrZmFjZUhpZGRlblNsaWRlcykge1xuICAgICAgaWYgKCFoYXNDbGFzc0JhY2tmYWNlQ2xhc3NBZGRlZCkgc3dpcGVyLmVsLmNsYXNzTGlzdC5hZGQoYmFja0ZhY2VIaWRkZW5DbGFzcyk7XG4gICAgfSBlbHNlIGlmIChoYXNDbGFzc0JhY2tmYWNlQ2xhc3NBZGRlZCkge1xuICAgICAgc3dpcGVyLmVsLmNsYXNzTGlzdC5yZW1vdmUoYmFja0ZhY2VIaWRkZW5DbGFzcyk7XG4gICAgfVxuICB9XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/update/updateSlides.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/update/updateSlidesClasses.js\":\r\n/*!****************************************************************!*\\\r\n  !*** ./node_modules/swiper/core/update/updateSlidesClasses.js ***!\r\n  \\****************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ updateSlidesClasses)\\n/* harmony export */ });\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\nfunction updateSlidesClasses() {\\n  const swiper = this;\\n  const {\\n    slides,\\n    params,\\n    slidesEl,\\n    activeIndex\\n  } = swiper;\\n  const isVirtual = swiper.virtual && params.virtual.enabled;\\n  const getFilteredSlide = selector => {\\n    return (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementChildren)(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\\n  };\\n  slides.forEach(slideEl => {\\n    slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\\n  });\\n  let activeSlide;\\n  if (isVirtual) {\\n    if (params.loop) {\\n      let slideIndex = activeIndex - swiper.virtual.slidesBefore;\\n      if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\\n      if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\\n      activeSlide = getFilteredSlide(`[data-swiper-slide-index=\\\"${slideIndex}\\\"]`);\\n    } else {\\n      activeSlide = getFilteredSlide(`[data-swiper-slide-index=\\\"${activeIndex}\\\"]`);\\n    }\\n  } else {\\n    activeSlide = slides[activeIndex];\\n  }\\n  if (activeSlide) {\\n    // Active classes\\n    activeSlide.classList.add(params.slideActiveClass);\\n\\n    // Next Slide\\n    let nextSlide = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementNextAll)(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\\n    if (params.loop && !nextSlide) {\\n      nextSlide = slides[0];\\n    }\\n    if (nextSlide) {\\n      nextSlide.classList.add(params.slideNextClass);\\n    }\\n    // Prev Slide\\n    let prevSlide = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementPrevAll)(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\\n    if (params.loop && !prevSlide === 0) {\\n      prevSlide = slides[slides.length - 1];\\n    }\\n    if (prevSlide) {\\n      prevSlide.classList.add(params.slidePrevClass);\\n    }\\n  }\\n  swiper.emitSlidesClasses();\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdXBkYXRlL3VwZGF0ZVNsaWRlc0NsYXNzZXMuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBd0Y7QUFDekU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLFdBQVcsaUVBQWUsZUFBZSxrQkFBa0IsRUFBRSxTQUFTLGdCQUFnQixTQUFTO0FBQy9GO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrRUFBa0UsV0FBVztBQUM3RSxNQUFNO0FBQ04sa0VBQWtFLFlBQVk7QUFDOUU7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixnRUFBYyxrQkFBa0Isa0JBQWtCO0FBQ3RFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGdFQUFjLGtCQUFrQixrQkFBa0I7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdXBkYXRlL3VwZGF0ZVNsaWRlc0NsYXNzZXMuanM/NmQ4OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlbGVtZW50Q2hpbGRyZW4sIGVsZW1lbnROZXh0QWxsLCBlbGVtZW50UHJldkFsbCB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1cGRhdGVTbGlkZXNDbGFzc2VzKCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgc2xpZGVzLFxuICAgIHBhcmFtcyxcbiAgICBzbGlkZXNFbCxcbiAgICBhY3RpdmVJbmRleFxuICB9ID0gc3dpcGVyO1xuICBjb25zdCBpc1ZpcnR1YWwgPSBzd2lwZXIudmlydHVhbCAmJiBwYXJhbXMudmlydHVhbC5lbmFibGVkO1xuICBjb25zdCBnZXRGaWx0ZXJlZFNsaWRlID0gc2VsZWN0b3IgPT4ge1xuICAgIHJldHVybiBlbGVtZW50Q2hpbGRyZW4oc2xpZGVzRWwsIGAuJHtwYXJhbXMuc2xpZGVDbGFzc30ke3NlbGVjdG9yfSwgc3dpcGVyLXNsaWRlJHtzZWxlY3Rvcn1gKVswXTtcbiAgfTtcbiAgc2xpZGVzLmZvckVhY2goc2xpZGVFbCA9PiB7XG4gICAgc2xpZGVFbC5jbGFzc0xpc3QucmVtb3ZlKHBhcmFtcy5zbGlkZUFjdGl2ZUNsYXNzLCBwYXJhbXMuc2xpZGVOZXh0Q2xhc3MsIHBhcmFtcy5zbGlkZVByZXZDbGFzcyk7XG4gIH0pO1xuICBsZXQgYWN0aXZlU2xpZGU7XG4gIGlmIChpc1ZpcnR1YWwpIHtcbiAgICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICAgIGxldCBzbGlkZUluZGV4ID0gYWN0aXZlSW5kZXggLSBzd2lwZXIudmlydHVhbC5zbGlkZXNCZWZvcmU7XG4gICAgICBpZiAoc2xpZGVJbmRleCA8IDApIHNsaWRlSW5kZXggPSBzd2lwZXIudmlydHVhbC5zbGlkZXMubGVuZ3RoICsgc2xpZGVJbmRleDtcbiAgICAgIGlmIChzbGlkZUluZGV4ID49IHN3aXBlci52aXJ0dWFsLnNsaWRlcy5sZW5ndGgpIHNsaWRlSW5kZXggLT0gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aDtcbiAgICAgIGFjdGl2ZVNsaWRlID0gZ2V0RmlsdGVyZWRTbGlkZShgW2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4PVwiJHtzbGlkZUluZGV4fVwiXWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY3RpdmVTbGlkZSA9IGdldEZpbHRlcmVkU2xpZGUoYFtkYXRhLXN3aXBlci1zbGlkZS1pbmRleD1cIiR7YWN0aXZlSW5kZXh9XCJdYCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFjdGl2ZVNsaWRlID0gc2xpZGVzW2FjdGl2ZUluZGV4XTtcbiAgfVxuICBpZiAoYWN0aXZlU2xpZGUpIHtcbiAgICAvLyBBY3RpdmUgY2xhc3Nlc1xuICAgIGFjdGl2ZVNsaWRlLmNsYXNzTGlzdC5hZGQocGFyYW1zLnNsaWRlQWN0aXZlQ2xhc3MpO1xuXG4gICAgLy8gTmV4dCBTbGlkZVxuICAgIGxldCBuZXh0U2xpZGUgPSBlbGVtZW50TmV4dEFsbChhY3RpdmVTbGlkZSwgYC4ke3BhcmFtcy5zbGlkZUNsYXNzfSwgc3dpcGVyLXNsaWRlYClbMF07XG4gICAgaWYgKHBhcmFtcy5sb29wICYmICFuZXh0U2xpZGUpIHtcbiAgICAgIG5leHRTbGlkZSA9IHNsaWRlc1swXTtcbiAgICB9XG4gICAgaWYgKG5leHRTbGlkZSkge1xuICAgICAgbmV4dFNsaWRlLmNsYXNzTGlzdC5hZGQocGFyYW1zLnNsaWRlTmV4dENsYXNzKTtcbiAgICB9XG4gICAgLy8gUHJldiBTbGlkZVxuICAgIGxldCBwcmV2U2xpZGUgPSBlbGVtZW50UHJldkFsbChhY3RpdmVTbGlkZSwgYC4ke3BhcmFtcy5zbGlkZUNsYXNzfSwgc3dpcGVyLXNsaWRlYClbMF07XG4gICAgaWYgKHBhcmFtcy5sb29wICYmICFwcmV2U2xpZGUgPT09IDApIHtcbiAgICAgIHByZXZTbGlkZSA9IHNsaWRlc1tzbGlkZXMubGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIGlmIChwcmV2U2xpZGUpIHtcbiAgICAgIHByZXZTbGlkZS5jbGFzc0xpc3QuYWRkKHBhcmFtcy5zbGlkZVByZXZDbGFzcyk7XG4gICAgfVxuICB9XG4gIHN3aXBlci5lbWl0U2xpZGVzQ2xhc3NlcygpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/update/updateSlidesClasses.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/update/updateSlidesOffset.js\":\r\n/*!***************************************************************!*\\\r\n  !*** ./node_modules/swiper/core/update/updateSlidesOffset.js ***!\r\n  \\***************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ updateSlidesOffset)\\n/* harmony export */ });\\nfunction updateSlidesOffset() {\\n  const swiper = this;\\n  const slides = swiper.slides;\\n  // eslint-disable-next-line\\n  const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\\n  for (let i = 0; i < slides.length; i += 1) {\\n    slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset;\\n  }\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdXBkYXRlL3VwZGF0ZVNsaWRlc09mZnNldC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixtQkFBbUI7QUFDckM7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdXBkYXRlL3VwZGF0ZVNsaWRlc09mZnNldC5qcz82OWQxIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZVNsaWRlc09mZnNldCgpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3Qgc2xpZGVzID0gc3dpcGVyLnNsaWRlcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIGNvbnN0IG1pbnVzT2Zmc2V0ID0gc3dpcGVyLmlzRWxlbWVudCA/IHN3aXBlci5pc0hvcml6b250YWwoKSA/IHN3aXBlci53cmFwcGVyRWwub2Zmc2V0TGVmdCA6IHN3aXBlci53cmFwcGVyRWwub2Zmc2V0VG9wIDogMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBzbGlkZXNbaV0uc3dpcGVyU2xpZGVPZmZzZXQgPSAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gc2xpZGVzW2ldLm9mZnNldExlZnQgOiBzbGlkZXNbaV0ub2Zmc2V0VG9wKSAtIG1pbnVzT2Zmc2V0O1xuICB9XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/update/updateSlidesOffset.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/core/update/updateSlidesProgress.js\":\r\n/*!*****************************************************************!*\\\r\n  !*** ./node_modules/swiper/core/update/updateSlidesProgress.js ***!\r\n  \\*****************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ updateSlidesProgress)\\n/* harmony export */ });\\nfunction updateSlidesProgress(translate = this && this.translate || 0) {\\n  const swiper = this;\\n  const params = swiper.params;\\n  const {\\n    slides,\\n    rtlTranslate: rtl,\\n    snapGrid\\n  } = swiper;\\n  if (slides.length === 0) return;\\n  if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\\n  let offsetCenter = -translate;\\n  if (rtl) offsetCenter = translate;\\n\\n  // Visible Slides\\n  slides.forEach(slideEl => {\\n    slideEl.classList.remove(params.slideVisibleClass);\\n  });\\n  swiper.visibleSlidesIndexes = [];\\n  swiper.visibleSlides = [];\\n  for (let i = 0; i < slides.length; i += 1) {\\n    const slide = slides[i];\\n    let slideOffset = slide.swiperSlideOffset;\\n    if (params.cssMode && params.centeredSlides) {\\n      slideOffset -= slides[0].swiperSlideOffset;\\n    }\\n    const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\\n    const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\\n    const slideBefore = -(offsetCenter - slideOffset);\\n    const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\\n    const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\\n    if (isVisible) {\\n      swiper.visibleSlides.push(slide);\\n      swiper.visibleSlidesIndexes.push(i);\\n      slides[i].classList.add(params.slideVisibleClass);\\n    }\\n    slide.progress = rtl ? -slideProgress : slideProgress;\\n    slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\\n  }\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL2NvcmUvdXBkYXRlL3VwZGF0ZVNsaWRlc1Byb2dyZXNzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLGtCQUFrQixtQkFBbUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvY29yZS91cGRhdGUvdXBkYXRlU2xpZGVzUHJvZ3Jlc3MuanM/OGU3NCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1cGRhdGVTbGlkZXNQcm9ncmVzcyh0cmFuc2xhdGUgPSB0aGlzICYmIHRoaXMudHJhbnNsYXRlIHx8IDApIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcztcbiAgY29uc3Qge1xuICAgIHNsaWRlcyxcbiAgICBydGxUcmFuc2xhdGU6IHJ0bCxcbiAgICBzbmFwR3JpZFxuICB9ID0gc3dpcGVyO1xuICBpZiAoc2xpZGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICBpZiAodHlwZW9mIHNsaWRlc1swXS5zd2lwZXJTbGlkZU9mZnNldCA9PT0gJ3VuZGVmaW5lZCcpIHN3aXBlci51cGRhdGVTbGlkZXNPZmZzZXQoKTtcbiAgbGV0IG9mZnNldENlbnRlciA9IC10cmFuc2xhdGU7XG4gIGlmIChydGwpIG9mZnNldENlbnRlciA9IHRyYW5zbGF0ZTtcblxuICAvLyBWaXNpYmxlIFNsaWRlc1xuICBzbGlkZXMuZm9yRWFjaChzbGlkZUVsID0+IHtcbiAgICBzbGlkZUVsLmNsYXNzTGlzdC5yZW1vdmUocGFyYW1zLnNsaWRlVmlzaWJsZUNsYXNzKTtcbiAgfSk7XG4gIHN3aXBlci52aXNpYmxlU2xpZGVzSW5kZXhlcyA9IFtdO1xuICBzd2lwZXIudmlzaWJsZVNsaWRlcyA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGNvbnN0IHNsaWRlID0gc2xpZGVzW2ldO1xuICAgIGxldCBzbGlkZU9mZnNldCA9IHNsaWRlLnN3aXBlclNsaWRlT2Zmc2V0O1xuICAgIGlmIChwYXJhbXMuY3NzTW9kZSAmJiBwYXJhbXMuY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgIHNsaWRlT2Zmc2V0IC09IHNsaWRlc1swXS5zd2lwZXJTbGlkZU9mZnNldDtcbiAgICB9XG4gICAgY29uc3Qgc2xpZGVQcm9ncmVzcyA9IChvZmZzZXRDZW50ZXIgKyAocGFyYW1zLmNlbnRlcmVkU2xpZGVzID8gc3dpcGVyLm1pblRyYW5zbGF0ZSgpIDogMCkgLSBzbGlkZU9mZnNldCkgLyAoc2xpZGUuc3dpcGVyU2xpZGVTaXplICsgcGFyYW1zLnNwYWNlQmV0d2Vlbik7XG4gICAgY29uc3Qgb3JpZ2luYWxTbGlkZVByb2dyZXNzID0gKG9mZnNldENlbnRlciAtIHNuYXBHcmlkWzBdICsgKHBhcmFtcy5jZW50ZXJlZFNsaWRlcyA/IHN3aXBlci5taW5UcmFuc2xhdGUoKSA6IDApIC0gc2xpZGVPZmZzZXQpIC8gKHNsaWRlLnN3aXBlclNsaWRlU2l6ZSArIHBhcmFtcy5zcGFjZUJldHdlZW4pO1xuICAgIGNvbnN0IHNsaWRlQmVmb3JlID0gLShvZmZzZXRDZW50ZXIgLSBzbGlkZU9mZnNldCk7XG4gICAgY29uc3Qgc2xpZGVBZnRlciA9IHNsaWRlQmVmb3JlICsgc3dpcGVyLnNsaWRlc1NpemVzR3JpZFtpXTtcbiAgICBjb25zdCBpc1Zpc2libGUgPSBzbGlkZUJlZm9yZSA+PSAwICYmIHNsaWRlQmVmb3JlIDwgc3dpcGVyLnNpemUgLSAxIHx8IHNsaWRlQWZ0ZXIgPiAxICYmIHNsaWRlQWZ0ZXIgPD0gc3dpcGVyLnNpemUgfHwgc2xpZGVCZWZvcmUgPD0gMCAmJiBzbGlkZUFmdGVyID49IHN3aXBlci5zaXplO1xuICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgIHN3aXBlci52aXNpYmxlU2xpZGVzLnB1c2goc2xpZGUpO1xuICAgICAgc3dpcGVyLnZpc2libGVTbGlkZXNJbmRleGVzLnB1c2goaSk7XG4gICAgICBzbGlkZXNbaV0uY2xhc3NMaXN0LmFkZChwYXJhbXMuc2xpZGVWaXNpYmxlQ2xhc3MpO1xuICAgIH1cbiAgICBzbGlkZS5wcm9ncmVzcyA9IHJ0bCA/IC1zbGlkZVByb2dyZXNzIDogc2xpZGVQcm9ncmVzcztcbiAgICBzbGlkZS5vcmlnaW5hbFByb2dyZXNzID0gcnRsID8gLW9yaWdpbmFsU2xpZGVQcm9ncmVzcyA6IG9yaWdpbmFsU2xpZGVQcm9ncmVzcztcbiAgfVxufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/core/update/updateSlidesProgress.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/a11y/a11y.js\":\r\n/*!**************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/a11y/a11y.js ***!\r\n  \\**************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ A11y)\\n/* harmony export */ });\\n/* harmony import */ var _shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/classes-to-selector.js */ \\\"./node_modules/swiper/shared/classes-to-selector.js\\\");\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\n\\nfunction A11y({\\n  swiper,\\n  extendParams,\\n  on\\n}) {\\n  extendParams({\\n    a11y: {\\n      enabled: true,\\n      notificationClass: 'swiper-notification',\\n      prevSlideMessage: 'Previous slide',\\n      nextSlideMessage: 'Next slide',\\n      firstSlideMessage: 'This is the first slide',\\n      lastSlideMessage: 'This is the last slide',\\n      paginationBulletMessage: 'Go to slide {{index}}',\\n      slideLabelMessage: '{{index}} / {{slidesLength}}',\\n      containerMessage: null,\\n      containerRoleDescriptionMessage: null,\\n      itemRoleDescriptionMessage: null,\\n      slideRole: 'group',\\n      id: null\\n    }\\n  });\\n  swiper.a11y = {\\n    clicked: false\\n  };\\n  let liveRegion = null;\\n  function notify(message) {\\n    const notification = liveRegion;\\n    if (notification.length === 0) return;\\n    notification.innerHTML = '';\\n    notification.innerHTML = message;\\n  }\\n  const makeElementsArray = el => {\\n    if (!Array.isArray(el)) el = [el].filter(e => !!e);\\n    return el;\\n  };\\n  function getRandomNumber(size = 16) {\\n    const randomChar = () => Math.round(16 * Math.random()).toString(16);\\n    return 'x'.repeat(size).replace(/x/g, randomChar);\\n  }\\n  function makeElFocusable(el) {\\n    el = makeElementsArray(el);\\n    el.forEach(subEl => {\\n      subEl.setAttribute('tabIndex', '0');\\n    });\\n  }\\n  function makeElNotFocusable(el) {\\n    el = makeElementsArray(el);\\n    el.forEach(subEl => {\\n      subEl.setAttribute('tabIndex', '-1');\\n    });\\n  }\\n  function addElRole(el, role) {\\n    el = makeElementsArray(el);\\n    el.forEach(subEl => {\\n      subEl.setAttribute('role', role);\\n    });\\n  }\\n  function addElRoleDescription(el, description) {\\n    el = makeElementsArray(el);\\n    el.forEach(subEl => {\\n      subEl.setAttribute('aria-roledescription', description);\\n    });\\n  }\\n  function addElControls(el, controls) {\\n    el = makeElementsArray(el);\\n    el.forEach(subEl => {\\n      subEl.setAttribute('aria-controls', controls);\\n    });\\n  }\\n  function addElLabel(el, label) {\\n    el = makeElementsArray(el);\\n    el.forEach(subEl => {\\n      subEl.setAttribute('aria-label', label);\\n    });\\n  }\\n  function addElId(el, id) {\\n    el = makeElementsArray(el);\\n    el.forEach(subEl => {\\n      subEl.setAttribute('id', id);\\n    });\\n  }\\n  function addElLive(el, live) {\\n    el = makeElementsArray(el);\\n    el.forEach(subEl => {\\n      subEl.setAttribute('aria-live', live);\\n    });\\n  }\\n  function disableEl(el) {\\n    el = makeElementsArray(el);\\n    el.forEach(subEl => {\\n      subEl.setAttribute('aria-disabled', true);\\n    });\\n  }\\n  function enableEl(el) {\\n    el = makeElementsArray(el);\\n    el.forEach(subEl => {\\n      subEl.setAttribute('aria-disabled', false);\\n    });\\n  }\\n  function onEnterOrSpaceKey(e) {\\n    if (e.keyCode !== 13 && e.keyCode !== 32) return;\\n    const params = swiper.params.a11y;\\n    const targetEl = e.target;\\n    if (swiper.pagination && swiper.pagination.el && (targetEl === swiper.pagination.el || swiper.pagination.el.contains(e.target))) {\\n      if (!e.target.matches((0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(swiper.params.pagination.bulletClass))) return;\\n    }\\n    if (swiper.navigation && swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl) {\\n      if (!(swiper.isEnd && !swiper.params.loop)) {\\n        swiper.slideNext();\\n      }\\n      if (swiper.isEnd) {\\n        notify(params.lastSlideMessage);\\n      } else {\\n        notify(params.nextSlideMessage);\\n      }\\n    }\\n    if (swiper.navigation && swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl) {\\n      if (!(swiper.isBeginning && !swiper.params.loop)) {\\n        swiper.slidePrev();\\n      }\\n      if (swiper.isBeginning) {\\n        notify(params.firstSlideMessage);\\n      } else {\\n        notify(params.prevSlideMessage);\\n      }\\n    }\\n    if (swiper.pagination && targetEl.matches((0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(swiper.params.pagination.bulletClass))) {\\n      targetEl.click();\\n    }\\n  }\\n  function updateNavigation() {\\n    if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;\\n    const {\\n      nextEl,\\n      prevEl\\n    } = swiper.navigation;\\n    if (prevEl) {\\n      if (swiper.isBeginning) {\\n        disableEl(prevEl);\\n        makeElNotFocusable(prevEl);\\n      } else {\\n        enableEl(prevEl);\\n        makeElFocusable(prevEl);\\n      }\\n    }\\n    if (nextEl) {\\n      if (swiper.isEnd) {\\n        disableEl(nextEl);\\n        makeElNotFocusable(nextEl);\\n      } else {\\n        enableEl(nextEl);\\n        makeElFocusable(nextEl);\\n      }\\n    }\\n  }\\n  function hasPagination() {\\n    return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;\\n  }\\n  function hasClickablePagination() {\\n    return hasPagination() && swiper.params.pagination.clickable;\\n  }\\n  function updatePagination() {\\n    const params = swiper.params.a11y;\\n    if (!hasPagination()) return;\\n    swiper.pagination.bullets.forEach(bulletEl => {\\n      if (swiper.params.pagination.clickable) {\\n        makeElFocusable(bulletEl);\\n        if (!swiper.params.pagination.renderBullet) {\\n          addElRole(bulletEl, 'button');\\n          addElLabel(bulletEl, params.paginationBulletMessage.replace(/\\\\{\\\\{index\\\\}\\\\}/, (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementIndex)(bulletEl) + 1));\\n        }\\n      }\\n      if (bulletEl.matches(`.${swiper.params.pagination.bulletActiveClass}`)) {\\n        bulletEl.setAttribute('aria-current', 'true');\\n      } else {\\n        bulletEl.removeAttribute('aria-current');\\n      }\\n    });\\n  }\\n  const initNavEl = (el, wrapperId, message) => {\\n    makeElFocusable(el);\\n    if (el.tagName !== 'BUTTON') {\\n      addElRole(el, 'button');\\n      el.addEventListener('keydown', onEnterOrSpaceKey);\\n    }\\n    addElLabel(el, message);\\n    addElControls(el, wrapperId);\\n  };\\n  const handlePointerDown = () => {\\n    swiper.a11y.clicked = true;\\n  };\\n  const handlePointerUp = () => {\\n    requestAnimationFrame(() => {\\n      requestAnimationFrame(() => {\\n        if (!swiper.destroyed) {\\n          swiper.a11y.clicked = false;\\n        }\\n      });\\n    });\\n  };\\n  const handleFocus = e => {\\n    if (swiper.a11y.clicked) return;\\n    const slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\\n    if (!slideEl || !swiper.slides.includes(slideEl)) return;\\n    const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;\\n    const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl);\\n    if (isActive || isVisible) return;\\n    if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return;\\n    if (swiper.isHorizontal()) {\\n      swiper.el.scrollLeft = 0;\\n    } else {\\n      swiper.el.scrollTop = 0;\\n    }\\n    swiper.slideTo(swiper.slides.indexOf(slideEl), 0);\\n  };\\n  const initSlides = () => {\\n    const params = swiper.params.a11y;\\n    if (params.itemRoleDescriptionMessage) {\\n      addElRoleDescription(swiper.slides, params.itemRoleDescriptionMessage);\\n    }\\n    if (params.slideRole) {\\n      addElRole(swiper.slides, params.slideRole);\\n    }\\n    const slidesLength = swiper.slides.length;\\n    if (params.slideLabelMessage) {\\n      swiper.slides.forEach((slideEl, index) => {\\n        const slideIndex = swiper.params.loop ? parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10) : index;\\n        const ariaLabelMessage = params.slideLabelMessage.replace(/\\\\{\\\\{index\\\\}\\\\}/, slideIndex + 1).replace(/\\\\{\\\\{slidesLength\\\\}\\\\}/, slidesLength);\\n        addElLabel(slideEl, ariaLabelMessage);\\n      });\\n    }\\n  };\\n  const init = () => {\\n    const params = swiper.params.a11y;\\n    swiper.el.append(liveRegion);\\n\\n    // Container\\n    const containerEl = swiper.el;\\n    if (params.containerRoleDescriptionMessage) {\\n      addElRoleDescription(containerEl, params.containerRoleDescriptionMessage);\\n    }\\n    if (params.containerMessage) {\\n      addElLabel(containerEl, params.containerMessage);\\n    }\\n\\n    // Wrapper\\n    const wrapperEl = swiper.wrapperEl;\\n    const wrapperId = params.id || wrapperEl.getAttribute('id') || `swiper-wrapper-${getRandomNumber(16)}`;\\n    const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\\n    addElId(wrapperEl, wrapperId);\\n    addElLive(wrapperEl, live);\\n\\n    // Slide\\n    initSlides();\\n\\n    // Navigation\\n    let {\\n      nextEl,\\n      prevEl\\n    } = swiper.navigation ? swiper.navigation : {};\\n    nextEl = makeElementsArray(nextEl);\\n    prevEl = makeElementsArray(prevEl);\\n    if (nextEl) {\\n      nextEl.forEach(el => initNavEl(el, wrapperId, params.nextSlideMessage));\\n    }\\n    if (prevEl) {\\n      prevEl.forEach(el => initNavEl(el, wrapperId, params.prevSlideMessage));\\n    }\\n\\n    // Pagination\\n    if (hasClickablePagination()) {\\n      const paginationEl = Array.isArray(swiper.pagination.el) ? swiper.pagination.el : [swiper.pagination.el];\\n      paginationEl.forEach(el => {\\n        el.addEventListener('keydown', onEnterOrSpaceKey);\\n      });\\n    }\\n\\n    // Tab focus\\n    swiper.el.addEventListener('focus', handleFocus, true);\\n    swiper.el.addEventListener('pointerdown', handlePointerDown, true);\\n    swiper.el.addEventListener('pointerup', handlePointerUp, true);\\n  };\\n  function destroy() {\\n    if (liveRegion && liveRegion.length > 0) liveRegion.remove();\\n    let {\\n      nextEl,\\n      prevEl\\n    } = swiper.navigation ? swiper.navigation : {};\\n    nextEl = makeElementsArray(nextEl);\\n    prevEl = makeElementsArray(prevEl);\\n    if (nextEl) {\\n      nextEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));\\n    }\\n    if (prevEl) {\\n      prevEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));\\n    }\\n\\n    // Pagination\\n    if (hasClickablePagination()) {\\n      const paginationEl = Array.isArray(swiper.pagination.el) ? swiper.pagination.el : [swiper.pagination.el];\\n      paginationEl.forEach(el => {\\n        el.removeEventListener('keydown', onEnterOrSpaceKey);\\n      });\\n    }\\n\\n    // Tab focus\\n    swiper.el.removeEventListener('focus', handleFocus, true);\\n    swiper.el.removeEventListener('pointerdown', handlePointerDown, true);\\n    swiper.el.removeEventListener('pointerup', handlePointerUp, true);\\n  }\\n  on('beforeInit', () => {\\n    liveRegion = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.createElement)('span', swiper.params.a11y.notificationClass);\\n    liveRegion.setAttribute('aria-live', 'assertive');\\n    liveRegion.setAttribute('aria-atomic', 'true');\\n    if (swiper.isElement) {\\n      liveRegion.setAttribute('slot', 'container-end');\\n    }\\n  });\\n  on('afterInit', () => {\\n    if (!swiper.params.a11y.enabled) return;\\n    init();\\n  });\\n  on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => {\\n    if (!swiper.params.a11y.enabled) return;\\n    initSlides();\\n  });\\n  on('fromEdge toEdge afterInit lock unlock', () => {\\n    if (!swiper.params.a11y.enabled) return;\\n    updateNavigation();\\n  });\\n  on('paginationUpdate', () => {\\n    if (!swiper.params.a11y.enabled) return;\\n    updatePagination();\\n  });\\n  on('destroy', () => {\\n    if (!swiper.params.a11y.enabled) return;\\n    destroy();\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvYTExeS9hMTF5LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFvRTtBQUNBO0FBQ3JEO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsT0FBTztBQUNyRCw0QkFBNEIsUUFBUSxJQUFJLGNBQWM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QiwwRUFBaUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QywwRUFBaUI7QUFDL0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUVBQXlFLEVBQUUsT0FBTyxFQUFFLEdBQUcsOERBQVk7QUFDbkc7QUFDQTtBQUNBLCtCQUErQiwyQ0FBMkM7QUFDMUU7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLHlCQUF5QjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFFQUFxRSxFQUFFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxjQUFjLEVBQUU7QUFDaEk7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxRkFBcUYsb0JBQW9CO0FBQ3pHO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLCtEQUFhO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9tb2R1bGVzL2ExMXkvYTExeS5qcz80ZDk4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjbGFzc2VzVG9TZWxlY3RvciBmcm9tICcuLi8uLi9zaGFyZWQvY2xhc3Nlcy10by1zZWxlY3Rvci5qcyc7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50LCBlbGVtZW50SW5kZXggfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQTExeSh7XG4gIHN3aXBlcixcbiAgZXh0ZW5kUGFyYW1zLFxuICBvblxufSkge1xuICBleHRlbmRQYXJhbXMoe1xuICAgIGExMXk6IHtcbiAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICBub3RpZmljYXRpb25DbGFzczogJ3N3aXBlci1ub3RpZmljYXRpb24nLFxuICAgICAgcHJldlNsaWRlTWVzc2FnZTogJ1ByZXZpb3VzIHNsaWRlJyxcbiAgICAgIG5leHRTbGlkZU1lc3NhZ2U6ICdOZXh0IHNsaWRlJyxcbiAgICAgIGZpcnN0U2xpZGVNZXNzYWdlOiAnVGhpcyBpcyB0aGUgZmlyc3Qgc2xpZGUnLFxuICAgICAgbGFzdFNsaWRlTWVzc2FnZTogJ1RoaXMgaXMgdGhlIGxhc3Qgc2xpZGUnLFxuICAgICAgcGFnaW5hdGlvbkJ1bGxldE1lc3NhZ2U6ICdHbyB0byBzbGlkZSB7e2luZGV4fX0nLFxuICAgICAgc2xpZGVMYWJlbE1lc3NhZ2U6ICd7e2luZGV4fX0gLyB7e3NsaWRlc0xlbmd0aH19JyxcbiAgICAgIGNvbnRhaW5lck1lc3NhZ2U6IG51bGwsXG4gICAgICBjb250YWluZXJSb2xlRGVzY3JpcHRpb25NZXNzYWdlOiBudWxsLFxuICAgICAgaXRlbVJvbGVEZXNjcmlwdGlvbk1lc3NhZ2U6IG51bGwsXG4gICAgICBzbGlkZVJvbGU6ICdncm91cCcsXG4gICAgICBpZDogbnVsbFxuICAgIH1cbiAgfSk7XG4gIHN3aXBlci5hMTF5ID0ge1xuICAgIGNsaWNrZWQ6IGZhbHNlXG4gIH07XG4gIGxldCBsaXZlUmVnaW9uID0gbnVsbDtcbiAgZnVuY3Rpb24gbm90aWZ5KG1lc3NhZ2UpIHtcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSBsaXZlUmVnaW9uO1xuICAgIGlmIChub3RpZmljYXRpb24ubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgbm90aWZpY2F0aW9uLmlubmVySFRNTCA9ICcnO1xuICAgIG5vdGlmaWNhdGlvbi5pbm5lckhUTUwgPSBtZXNzYWdlO1xuICB9XG4gIGNvbnN0IG1ha2VFbGVtZW50c0FycmF5ID0gZWwgPT4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShlbCkpIGVsID0gW2VsXS5maWx0ZXIoZSA9PiAhIWUpO1xuICAgIHJldHVybiBlbDtcbiAgfTtcbiAgZnVuY3Rpb24gZ2V0UmFuZG9tTnVtYmVyKHNpemUgPSAxNikge1xuICAgIGNvbnN0IHJhbmRvbUNoYXIgPSAoKSA9PiBNYXRoLnJvdW5kKDE2ICogTWF0aC5yYW5kb20oKSkudG9TdHJpbmcoMTYpO1xuICAgIHJldHVybiAneCcucmVwZWF0KHNpemUpLnJlcGxhY2UoL3gvZywgcmFuZG9tQ2hhcik7XG4gIH1cbiAgZnVuY3Rpb24gbWFrZUVsRm9jdXNhYmxlKGVsKSB7XG4gICAgZWwgPSBtYWtlRWxlbWVudHNBcnJheShlbCk7XG4gICAgZWwuZm9yRWFjaChzdWJFbCA9PiB7XG4gICAgICBzdWJFbC5zZXRBdHRyaWJ1dGUoJ3RhYkluZGV4JywgJzAnKTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBtYWtlRWxOb3RGb2N1c2FibGUoZWwpIHtcbiAgICBlbCA9IG1ha2VFbGVtZW50c0FycmF5KGVsKTtcbiAgICBlbC5mb3JFYWNoKHN1YkVsID0+IHtcbiAgICAgIHN1YkVsLnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAnLTEnKTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBhZGRFbFJvbGUoZWwsIHJvbGUpIHtcbiAgICBlbCA9IG1ha2VFbGVtZW50c0FycmF5KGVsKTtcbiAgICBlbC5mb3JFYWNoKHN1YkVsID0+IHtcbiAgICAgIHN1YkVsLnNldEF0dHJpYnV0ZSgncm9sZScsIHJvbGUpO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIGFkZEVsUm9sZURlc2NyaXB0aW9uKGVsLCBkZXNjcmlwdGlvbikge1xuICAgIGVsID0gbWFrZUVsZW1lbnRzQXJyYXkoZWwpO1xuICAgIGVsLmZvckVhY2goc3ViRWwgPT4ge1xuICAgICAgc3ViRWwuc2V0QXR0cmlidXRlKCdhcmlhLXJvbGVkZXNjcmlwdGlvbicsIGRlc2NyaXB0aW9uKTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBhZGRFbENvbnRyb2xzKGVsLCBjb250cm9scykge1xuICAgIGVsID0gbWFrZUVsZW1lbnRzQXJyYXkoZWwpO1xuICAgIGVsLmZvckVhY2goc3ViRWwgPT4ge1xuICAgICAgc3ViRWwuc2V0QXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJywgY29udHJvbHMpO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIGFkZEVsTGFiZWwoZWwsIGxhYmVsKSB7XG4gICAgZWwgPSBtYWtlRWxlbWVudHNBcnJheShlbCk7XG4gICAgZWwuZm9yRWFjaChzdWJFbCA9PiB7XG4gICAgICBzdWJFbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBsYWJlbCk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gYWRkRWxJZChlbCwgaWQpIHtcbiAgICBlbCA9IG1ha2VFbGVtZW50c0FycmF5KGVsKTtcbiAgICBlbC5mb3JFYWNoKHN1YkVsID0+IHtcbiAgICAgIHN1YkVsLnNldEF0dHJpYnV0ZSgnaWQnLCBpZCk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gYWRkRWxMaXZlKGVsLCBsaXZlKSB7XG4gICAgZWwgPSBtYWtlRWxlbWVudHNBcnJheShlbCk7XG4gICAgZWwuZm9yRWFjaChzdWJFbCA9PiB7XG4gICAgICBzdWJFbC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGl2ZScsIGxpdmUpO1xuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIGRpc2FibGVFbChlbCkge1xuICAgIGVsID0gbWFrZUVsZW1lbnRzQXJyYXkoZWwpO1xuICAgIGVsLmZvckVhY2goc3ViRWwgPT4ge1xuICAgICAgc3ViRWwuc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgdHJ1ZSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gZW5hYmxlRWwoZWwpIHtcbiAgICBlbCA9IG1ha2VFbGVtZW50c0FycmF5KGVsKTtcbiAgICBlbC5mb3JFYWNoKHN1YkVsID0+IHtcbiAgICAgIHN1YkVsLnNldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcsIGZhbHNlKTtcbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiBvbkVudGVyT3JTcGFjZUtleShlKSB7XG4gICAgaWYgKGUua2V5Q29kZSAhPT0gMTMgJiYgZS5rZXlDb2RlICE9PSAzMikgcmV0dXJuO1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuYTExeTtcbiAgICBjb25zdCB0YXJnZXRFbCA9IGUudGFyZ2V0O1xuICAgIGlmIChzd2lwZXIucGFnaW5hdGlvbiAmJiBzd2lwZXIucGFnaW5hdGlvbi5lbCAmJiAodGFyZ2V0RWwgPT09IHN3aXBlci5wYWdpbmF0aW9uLmVsIHx8IHN3aXBlci5wYWdpbmF0aW9uLmVsLmNvbnRhaW5zKGUudGFyZ2V0KSkpIHtcbiAgICAgIGlmICghZS50YXJnZXQubWF0Y2hlcyhjbGFzc2VzVG9TZWxlY3Rvcihzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uYnVsbGV0Q2xhc3MpKSkgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24gJiYgc3dpcGVyLm5hdmlnYXRpb24ubmV4dEVsICYmIHRhcmdldEVsID09PSBzd2lwZXIubmF2aWdhdGlvbi5uZXh0RWwpIHtcbiAgICAgIGlmICghKHN3aXBlci5pc0VuZCAmJiAhc3dpcGVyLnBhcmFtcy5sb29wKSkge1xuICAgICAgICBzd2lwZXIuc2xpZGVOZXh0KCk7XG4gICAgICB9XG4gICAgICBpZiAoc3dpcGVyLmlzRW5kKSB7XG4gICAgICAgIG5vdGlmeShwYXJhbXMubGFzdFNsaWRlTWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3RpZnkocGFyYW1zLm5leHRTbGlkZU1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3dpcGVyLm5hdmlnYXRpb24gJiYgc3dpcGVyLm5hdmlnYXRpb24ucHJldkVsICYmIHRhcmdldEVsID09PSBzd2lwZXIubmF2aWdhdGlvbi5wcmV2RWwpIHtcbiAgICAgIGlmICghKHN3aXBlci5pc0JlZ2lubmluZyAmJiAhc3dpcGVyLnBhcmFtcy5sb29wKSkge1xuICAgICAgICBzd2lwZXIuc2xpZGVQcmV2KCk7XG4gICAgICB9XG4gICAgICBpZiAoc3dpcGVyLmlzQmVnaW5uaW5nKSB7XG4gICAgICAgIG5vdGlmeShwYXJhbXMuZmlyc3RTbGlkZU1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm90aWZ5KHBhcmFtcy5wcmV2U2xpZGVNZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uICYmIHRhcmdldEVsLm1hdGNoZXMoY2xhc3Nlc1RvU2VsZWN0b3Ioc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmJ1bGxldENsYXNzKSkpIHtcbiAgICAgIHRhcmdldEVsLmNsaWNrKCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHVwZGF0ZU5hdmlnYXRpb24oKSB7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCB8fCBzd2lwZXIucGFyYW1zLnJld2luZCB8fCAhc3dpcGVyLm5hdmlnYXRpb24pIHJldHVybjtcbiAgICBjb25zdCB7XG4gICAgICBuZXh0RWwsXG4gICAgICBwcmV2RWxcbiAgICB9ID0gc3dpcGVyLm5hdmlnYXRpb247XG4gICAgaWYgKHByZXZFbCkge1xuICAgICAgaWYgKHN3aXBlci5pc0JlZ2lubmluZykge1xuICAgICAgICBkaXNhYmxlRWwocHJldkVsKTtcbiAgICAgICAgbWFrZUVsTm90Rm9jdXNhYmxlKHByZXZFbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbmFibGVFbChwcmV2RWwpO1xuICAgICAgICBtYWtlRWxGb2N1c2FibGUocHJldkVsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5leHRFbCkge1xuICAgICAgaWYgKHN3aXBlci5pc0VuZCkge1xuICAgICAgICBkaXNhYmxlRWwobmV4dEVsKTtcbiAgICAgICAgbWFrZUVsTm90Rm9jdXNhYmxlKG5leHRFbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbmFibGVFbChuZXh0RWwpO1xuICAgICAgICBtYWtlRWxGb2N1c2FibGUobmV4dEVsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gaGFzUGFnaW5hdGlvbigpIHtcbiAgICByZXR1cm4gc3dpcGVyLnBhZ2luYXRpb24gJiYgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cyAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzLmxlbmd0aDtcbiAgfVxuICBmdW5jdGlvbiBoYXNDbGlja2FibGVQYWdpbmF0aW9uKCkge1xuICAgIHJldHVybiBoYXNQYWdpbmF0aW9uKCkgJiYgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmNsaWNrYWJsZTtcbiAgfVxuICBmdW5jdGlvbiB1cGRhdGVQYWdpbmF0aW9uKCkge1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuYTExeTtcbiAgICBpZiAoIWhhc1BhZ2luYXRpb24oKSkgcmV0dXJuO1xuICAgIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMuZm9yRWFjaChidWxsZXRFbCA9PiB7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmNsaWNrYWJsZSkge1xuICAgICAgICBtYWtlRWxGb2N1c2FibGUoYnVsbGV0RWwpO1xuICAgICAgICBpZiAoIXN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5yZW5kZXJCdWxsZXQpIHtcbiAgICAgICAgICBhZGRFbFJvbGUoYnVsbGV0RWwsICdidXR0b24nKTtcbiAgICAgICAgICBhZGRFbExhYmVsKGJ1bGxldEVsLCBwYXJhbXMucGFnaW5hdGlvbkJ1bGxldE1lc3NhZ2UucmVwbGFjZSgvXFx7XFx7aW5kZXhcXH1cXH0vLCBlbGVtZW50SW5kZXgoYnVsbGV0RWwpICsgMSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoYnVsbGV0RWwubWF0Y2hlcyhgLiR7c3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmJ1bGxldEFjdGl2ZUNsYXNzfWApKSB7XG4gICAgICAgIGJ1bGxldEVsLnNldEF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JywgJ3RydWUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ1bGxldEVsLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50Jyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgaW5pdE5hdkVsID0gKGVsLCB3cmFwcGVySWQsIG1lc3NhZ2UpID0+IHtcbiAgICBtYWtlRWxGb2N1c2FibGUoZWwpO1xuICAgIGlmIChlbC50YWdOYW1lICE9PSAnQlVUVE9OJykge1xuICAgICAgYWRkRWxSb2xlKGVsLCAnYnV0dG9uJyk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25FbnRlck9yU3BhY2VLZXkpO1xuICAgIH1cbiAgICBhZGRFbExhYmVsKGVsLCBtZXNzYWdlKTtcbiAgICBhZGRFbENvbnRyb2xzKGVsLCB3cmFwcGVySWQpO1xuICB9O1xuICBjb25zdCBoYW5kbGVQb2ludGVyRG93biA9ICgpID0+IHtcbiAgICBzd2lwZXIuYTExeS5jbGlja2VkID0gdHJ1ZTtcbiAgfTtcbiAgY29uc3QgaGFuZGxlUG9pbnRlclVwID0gKCkgPT4ge1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBpZiAoIXN3aXBlci5kZXN0cm95ZWQpIHtcbiAgICAgICAgICBzd2lwZXIuYTExeS5jbGlja2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuICBjb25zdCBoYW5kbGVGb2N1cyA9IGUgPT4ge1xuICAgIGlmIChzd2lwZXIuYTExeS5jbGlja2VkKSByZXR1cm47XG4gICAgY29uc3Qgc2xpZGVFbCA9IGUudGFyZ2V0LmNsb3Nlc3QoYC4ke3N3aXBlci5wYXJhbXMuc2xpZGVDbGFzc30sIHN3aXBlci1zbGlkZWApO1xuICAgIGlmICghc2xpZGVFbCB8fCAhc3dpcGVyLnNsaWRlcy5pbmNsdWRlcyhzbGlkZUVsKSkgcmV0dXJuO1xuICAgIGNvbnN0IGlzQWN0aXZlID0gc3dpcGVyLnNsaWRlcy5pbmRleE9mKHNsaWRlRWwpID09PSBzd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgY29uc3QgaXNWaXNpYmxlID0gc3dpcGVyLnBhcmFtcy53YXRjaFNsaWRlc1Byb2dyZXNzICYmIHN3aXBlci52aXNpYmxlU2xpZGVzICYmIHN3aXBlci52aXNpYmxlU2xpZGVzLmluY2x1ZGVzKHNsaWRlRWwpO1xuICAgIGlmIChpc0FjdGl2ZSB8fCBpc1Zpc2libGUpIHJldHVybjtcbiAgICBpZiAoZS5zb3VyY2VDYXBhYmlsaXRpZXMgJiYgZS5zb3VyY2VDYXBhYmlsaXRpZXMuZmlyZXNUb3VjaEV2ZW50cykgcmV0dXJuO1xuICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgIHN3aXBlci5lbC5zY3JvbGxMZWZ0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLmVsLnNjcm9sbFRvcCA9IDA7XG4gICAgfVxuICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5zbGlkZXMuaW5kZXhPZihzbGlkZUVsKSwgMCk7XG4gIH07XG4gIGNvbnN0IGluaXRTbGlkZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5hMTF5O1xuICAgIGlmIChwYXJhbXMuaXRlbVJvbGVEZXNjcmlwdGlvbk1lc3NhZ2UpIHtcbiAgICAgIGFkZEVsUm9sZURlc2NyaXB0aW9uKHN3aXBlci5zbGlkZXMsIHBhcmFtcy5pdGVtUm9sZURlc2NyaXB0aW9uTWVzc2FnZSk7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuc2xpZGVSb2xlKSB7XG4gICAgICBhZGRFbFJvbGUoc3dpcGVyLnNsaWRlcywgcGFyYW1zLnNsaWRlUm9sZSk7XG4gICAgfVxuICAgIGNvbnN0IHNsaWRlc0xlbmd0aCA9IHN3aXBlci5zbGlkZXMubGVuZ3RoO1xuICAgIGlmIChwYXJhbXMuc2xpZGVMYWJlbE1lc3NhZ2UpIHtcbiAgICAgIHN3aXBlci5zbGlkZXMuZm9yRWFjaCgoc2xpZGVFbCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc2xpZGVJbmRleCA9IHN3aXBlci5wYXJhbXMubG9vcCA/IHBhcnNlSW50KHNsaWRlRWwuZ2V0QXR0cmlidXRlKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpLCAxMCkgOiBpbmRleDtcbiAgICAgICAgY29uc3QgYXJpYUxhYmVsTWVzc2FnZSA9IHBhcmFtcy5zbGlkZUxhYmVsTWVzc2FnZS5yZXBsYWNlKC9cXHtcXHtpbmRleFxcfVxcfS8sIHNsaWRlSW5kZXggKyAxKS5yZXBsYWNlKC9cXHtcXHtzbGlkZXNMZW5ndGhcXH1cXH0vLCBzbGlkZXNMZW5ndGgpO1xuICAgICAgICBhZGRFbExhYmVsKHNsaWRlRWwsIGFyaWFMYWJlbE1lc3NhZ2UpO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuICBjb25zdCBpbml0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuYTExeTtcbiAgICBzd2lwZXIuZWwuYXBwZW5kKGxpdmVSZWdpb24pO1xuXG4gICAgLy8gQ29udGFpbmVyXG4gICAgY29uc3QgY29udGFpbmVyRWwgPSBzd2lwZXIuZWw7XG4gICAgaWYgKHBhcmFtcy5jb250YWluZXJSb2xlRGVzY3JpcHRpb25NZXNzYWdlKSB7XG4gICAgICBhZGRFbFJvbGVEZXNjcmlwdGlvbihjb250YWluZXJFbCwgcGFyYW1zLmNvbnRhaW5lclJvbGVEZXNjcmlwdGlvbk1lc3NhZ2UpO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmNvbnRhaW5lck1lc3NhZ2UpIHtcbiAgICAgIGFkZEVsTGFiZWwoY29udGFpbmVyRWwsIHBhcmFtcy5jb250YWluZXJNZXNzYWdlKTtcbiAgICB9XG5cbiAgICAvLyBXcmFwcGVyXG4gICAgY29uc3Qgd3JhcHBlckVsID0gc3dpcGVyLndyYXBwZXJFbDtcbiAgICBjb25zdCB3cmFwcGVySWQgPSBwYXJhbXMuaWQgfHwgd3JhcHBlckVsLmdldEF0dHJpYnV0ZSgnaWQnKSB8fCBgc3dpcGVyLXdyYXBwZXItJHtnZXRSYW5kb21OdW1iZXIoMTYpfWA7XG4gICAgY29uc3QgbGl2ZSA9IHN3aXBlci5wYXJhbXMuYXV0b3BsYXkgJiYgc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5lbmFibGVkID8gJ29mZicgOiAncG9saXRlJztcbiAgICBhZGRFbElkKHdyYXBwZXJFbCwgd3JhcHBlcklkKTtcbiAgICBhZGRFbExpdmUod3JhcHBlckVsLCBsaXZlKTtcblxuICAgIC8vIFNsaWRlXG4gICAgaW5pdFNsaWRlcygpO1xuXG4gICAgLy8gTmF2aWdhdGlvblxuICAgIGxldCB7XG4gICAgICBuZXh0RWwsXG4gICAgICBwcmV2RWxcbiAgICB9ID0gc3dpcGVyLm5hdmlnYXRpb24gPyBzd2lwZXIubmF2aWdhdGlvbiA6IHt9O1xuICAgIG5leHRFbCA9IG1ha2VFbGVtZW50c0FycmF5KG5leHRFbCk7XG4gICAgcHJldkVsID0gbWFrZUVsZW1lbnRzQXJyYXkocHJldkVsKTtcbiAgICBpZiAobmV4dEVsKSB7XG4gICAgICBuZXh0RWwuZm9yRWFjaChlbCA9PiBpbml0TmF2RWwoZWwsIHdyYXBwZXJJZCwgcGFyYW1zLm5leHRTbGlkZU1lc3NhZ2UpKTtcbiAgICB9XG4gICAgaWYgKHByZXZFbCkge1xuICAgICAgcHJldkVsLmZvckVhY2goZWwgPT4gaW5pdE5hdkVsKGVsLCB3cmFwcGVySWQsIHBhcmFtcy5wcmV2U2xpZGVNZXNzYWdlKSk7XG4gICAgfVxuXG4gICAgLy8gUGFnaW5hdGlvblxuICAgIGlmIChoYXNDbGlja2FibGVQYWdpbmF0aW9uKCkpIHtcbiAgICAgIGNvbnN0IHBhZ2luYXRpb25FbCA9IEFycmF5LmlzQXJyYXkoc3dpcGVyLnBhZ2luYXRpb24uZWwpID8gc3dpcGVyLnBhZ2luYXRpb24uZWwgOiBbc3dpcGVyLnBhZ2luYXRpb24uZWxdO1xuICAgICAgcGFnaW5hdGlvbkVsLmZvckVhY2goZWwgPT4ge1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25FbnRlck9yU3BhY2VLZXkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVGFiIGZvY3VzXG4gICAgc3dpcGVyLmVsLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgaGFuZGxlRm9jdXMsIHRydWUpO1xuICAgIHN3aXBlci5lbC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIGhhbmRsZVBvaW50ZXJEb3duLCB0cnVlKTtcbiAgICBzd2lwZXIuZWwuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgaGFuZGxlUG9pbnRlclVwLCB0cnVlKTtcbiAgfTtcbiAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICBpZiAobGl2ZVJlZ2lvbiAmJiBsaXZlUmVnaW9uLmxlbmd0aCA+IDApIGxpdmVSZWdpb24ucmVtb3ZlKCk7XG4gICAgbGV0IHtcbiAgICAgIG5leHRFbCxcbiAgICAgIHByZXZFbFxuICAgIH0gPSBzd2lwZXIubmF2aWdhdGlvbiA/IHN3aXBlci5uYXZpZ2F0aW9uIDoge307XG4gICAgbmV4dEVsID0gbWFrZUVsZW1lbnRzQXJyYXkobmV4dEVsKTtcbiAgICBwcmV2RWwgPSBtYWtlRWxlbWVudHNBcnJheShwcmV2RWwpO1xuICAgIGlmIChuZXh0RWwpIHtcbiAgICAgIG5leHRFbC5mb3JFYWNoKGVsID0+IGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbkVudGVyT3JTcGFjZUtleSkpO1xuICAgIH1cbiAgICBpZiAocHJldkVsKSB7XG4gICAgICBwcmV2RWwuZm9yRWFjaChlbCA9PiBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25FbnRlck9yU3BhY2VLZXkpKTtcbiAgICB9XG5cbiAgICAvLyBQYWdpbmF0aW9uXG4gICAgaWYgKGhhc0NsaWNrYWJsZVBhZ2luYXRpb24oKSkge1xuICAgICAgY29uc3QgcGFnaW5hdGlvbkVsID0gQXJyYXkuaXNBcnJheShzd2lwZXIucGFnaW5hdGlvbi5lbCkgPyBzd2lwZXIucGFnaW5hdGlvbi5lbCA6IFtzd2lwZXIucGFnaW5hdGlvbi5lbF07XG4gICAgICBwYWdpbmF0aW9uRWwuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBvbkVudGVyT3JTcGFjZUtleSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBUYWIgZm9jdXNcbiAgICBzd2lwZXIuZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignZm9jdXMnLCBoYW5kbGVGb2N1cywgdHJ1ZSk7XG4gICAgc3dpcGVyLmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgaGFuZGxlUG9pbnRlckRvd24sIHRydWUpO1xuICAgIHN3aXBlci5lbC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCBoYW5kbGVQb2ludGVyVXAsIHRydWUpO1xuICB9XG4gIG9uKCdiZWZvcmVJbml0JywgKCkgPT4ge1xuICAgIGxpdmVSZWdpb24gPSBjcmVhdGVFbGVtZW50KCdzcGFuJywgc3dpcGVyLnBhcmFtcy5hMTF5Lm5vdGlmaWNhdGlvbkNsYXNzKTtcbiAgICBsaXZlUmVnaW9uLnNldEF0dHJpYnV0ZSgnYXJpYS1saXZlJywgJ2Fzc2VydGl2ZScpO1xuICAgIGxpdmVSZWdpb24uc2V0QXR0cmlidXRlKCdhcmlhLWF0b21pYycsICd0cnVlJyk7XG4gICAgaWYgKHN3aXBlci5pc0VsZW1lbnQpIHtcbiAgICAgIGxpdmVSZWdpb24uc2V0QXR0cmlidXRlKCdzbG90JywgJ2NvbnRhaW5lci1lbmQnKTtcbiAgICB9XG4gIH0pO1xuICBvbignYWZ0ZXJJbml0JywgKCkgPT4ge1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5hMTF5LmVuYWJsZWQpIHJldHVybjtcbiAgICBpbml0KCk7XG4gIH0pO1xuICBvbignc2xpZGVzTGVuZ3RoQ2hhbmdlIHNuYXBHcmlkTGVuZ3RoQ2hhbmdlIHNsaWRlc0dyaWRMZW5ndGhDaGFuZ2UnLCAoKSA9PiB7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLmExMXkuZW5hYmxlZCkgcmV0dXJuO1xuICAgIGluaXRTbGlkZXMoKTtcbiAgfSk7XG4gIG9uKCdmcm9tRWRnZSB0b0VkZ2UgYWZ0ZXJJbml0IGxvY2sgdW5sb2NrJywgKCkgPT4ge1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5hMTF5LmVuYWJsZWQpIHJldHVybjtcbiAgICB1cGRhdGVOYXZpZ2F0aW9uKCk7XG4gIH0pO1xuICBvbigncGFnaW5hdGlvblVwZGF0ZScsICgpID0+IHtcbiAgICBpZiAoIXN3aXBlci5wYXJhbXMuYTExeS5lbmFibGVkKSByZXR1cm47XG4gICAgdXBkYXRlUGFnaW5hdGlvbigpO1xuICB9KTtcbiAgb24oJ2Rlc3Ryb3knLCAoKSA9PiB7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLmExMXkuZW5hYmxlZCkgcmV0dXJuO1xuICAgIGRlc3Ryb3koKTtcbiAgfSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/a11y/a11y.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/autoplay/autoplay.js\":\r\n/*!**********************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/autoplay/autoplay.js ***!\r\n  \\**********************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ Autoplay)\\n/* harmony export */ });\\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \\\"./node_modules/ssr-window/ssr-window.esm.js\\\");\\n/* eslint no-underscore-dangle: \\\"off\\\" */\\n/* eslint no-use-before-define: \\\"off\\\" */\\n\\nfunction Autoplay({\\n  swiper,\\n  extendParams,\\n  on,\\n  emit,\\n  params\\n}) {\\n  swiper.autoplay = {\\n    running: false,\\n    paused: false,\\n    timeLeft: 0\\n  };\\n  extendParams({\\n    autoplay: {\\n      enabled: false,\\n      delay: 3000,\\n      waitForTransition: true,\\n      disableOnInteraction: true,\\n      stopOnLastSlide: false,\\n      reverseDirection: false,\\n      pauseOnMouseEnter: false\\n    }\\n  });\\n  let timeout;\\n  let raf;\\n  let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000;\\n  let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000;\\n  let autoplayTimeLeft;\\n  let autoplayStartTime = new Date().getTime;\\n  let wasPaused;\\n  let isTouched;\\n  let pausedByTouch;\\n  let touchStartTimeout;\\n  let slideChanged;\\n  let pausedByInteraction;\\n  function onTransitionEnd(e) {\\n    if (!swiper || swiper.destroyed || !swiper.wrapperEl) return;\\n    if (e.target !== swiper.wrapperEl) return;\\n    swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd);\\n    resume();\\n  }\\n  const calcTimeLeft = () => {\\n    if (swiper.destroyed || !swiper.autoplay.running) return;\\n    if (swiper.autoplay.paused) {\\n      wasPaused = true;\\n    } else if (wasPaused) {\\n      autoplayDelayCurrent = autoplayTimeLeft;\\n      wasPaused = false;\\n    }\\n    const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - new Date().getTime();\\n    swiper.autoplay.timeLeft = timeLeft;\\n    emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal);\\n    raf = requestAnimationFrame(() => {\\n      calcTimeLeft();\\n    });\\n  };\\n  const getSlideDelay = () => {\\n    let activeSlideEl;\\n    if (swiper.virtual && swiper.params.virtual.enabled) {\\n      activeSlideEl = swiper.slides.filter(slideEl => slideEl.classList.contains('swiper-slide-active'))[0];\\n    } else {\\n      activeSlideEl = swiper.slides[swiper.activeIndex];\\n    }\\n    if (!activeSlideEl) return undefined;\\n    const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10);\\n    return currentSlideDelay;\\n  };\\n  const run = delayForce => {\\n    if (swiper.destroyed || !swiper.autoplay.running) return;\\n    cancelAnimationFrame(raf);\\n    calcTimeLeft();\\n    let delay = typeof delayForce === 'undefined' ? swiper.params.autoplay.delay : delayForce;\\n    autoplayDelayTotal = swiper.params.autoplay.delay;\\n    autoplayDelayCurrent = swiper.params.autoplay.delay;\\n    const currentSlideDelay = getSlideDelay();\\n    if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0 && typeof delayForce === 'undefined') {\\n      delay = currentSlideDelay;\\n      autoplayDelayTotal = currentSlideDelay;\\n      autoplayDelayCurrent = currentSlideDelay;\\n    }\\n    autoplayTimeLeft = delay;\\n    const speed = swiper.params.speed;\\n    const proceed = () => {\\n      if (swiper.params.autoplay.reverseDirection) {\\n        if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) {\\n          swiper.slidePrev(speed, true, true);\\n          emit('autoplay');\\n        } else if (!swiper.params.autoplay.stopOnLastSlide) {\\n          swiper.slideTo(swiper.slides.length - 1, speed, true, true);\\n          emit('autoplay');\\n        }\\n      } else {\\n        if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) {\\n          swiper.slideNext(speed, true, true);\\n          emit('autoplay');\\n        } else if (!swiper.params.autoplay.stopOnLastSlide) {\\n          swiper.slideTo(0, speed, true, true);\\n          emit('autoplay');\\n        }\\n      }\\n      if (swiper.params.cssMode) {\\n        autoplayStartTime = new Date().getTime();\\n        requestAnimationFrame(() => {\\n          run();\\n        });\\n      }\\n    };\\n    if (delay > 0) {\\n      clearTimeout(timeout);\\n      timeout = setTimeout(() => {\\n        proceed();\\n      }, delay);\\n    } else {\\n      requestAnimationFrame(() => {\\n        proceed();\\n      });\\n    }\\n\\n    // eslint-disable-next-line\\n    return delay;\\n  };\\n  const start = () => {\\n    swiper.autoplay.running = true;\\n    run();\\n    emit('autoplayStart');\\n  };\\n  const stop = () => {\\n    swiper.autoplay.running = false;\\n    clearTimeout(timeout);\\n    cancelAnimationFrame(raf);\\n    emit('autoplayStop');\\n  };\\n  const pause = (internal, reset) => {\\n    if (swiper.destroyed || !swiper.autoplay.running) return;\\n    clearTimeout(timeout);\\n    if (!internal) {\\n      pausedByInteraction = true;\\n    }\\n    const proceed = () => {\\n      emit('autoplayPause');\\n      if (swiper.params.autoplay.waitForTransition) {\\n        swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd);\\n      } else {\\n        resume();\\n      }\\n    };\\n    swiper.autoplay.paused = true;\\n    if (reset) {\\n      if (slideChanged) {\\n        autoplayTimeLeft = swiper.params.autoplay.delay;\\n      }\\n      slideChanged = false;\\n      proceed();\\n      return;\\n    }\\n    const delay = autoplayTimeLeft || swiper.params.autoplay.delay;\\n    autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime);\\n    if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return;\\n    if (autoplayTimeLeft < 0) autoplayTimeLeft = 0;\\n    proceed();\\n  };\\n  const resume = () => {\\n    if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return;\\n    autoplayStartTime = new Date().getTime();\\n    if (pausedByInteraction) {\\n      pausedByInteraction = false;\\n      run(autoplayTimeLeft);\\n    } else {\\n      run();\\n    }\\n    swiper.autoplay.paused = false;\\n    emit('autoplayResume');\\n  };\\n  const onVisibilityChange = () => {\\n    if (swiper.destroyed || !swiper.autoplay.running) return;\\n    const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)();\\n    if (document.visibilityState === 'hidden') {\\n      pausedByInteraction = true;\\n      pause(true);\\n    }\\n    if (document.visibilityState === 'visible') {\\n      resume();\\n    }\\n  };\\n  const onPointerEnter = e => {\\n    if (e.pointerType !== 'mouse') return;\\n    pausedByInteraction = true;\\n    pause(true);\\n  };\\n  const onPointerLeave = e => {\\n    if (e.pointerType !== 'mouse') return;\\n    if (swiper.autoplay.paused) {\\n      resume();\\n    }\\n  };\\n  const attachMouseEvents = () => {\\n    if (swiper.params.autoplay.pauseOnMouseEnter) {\\n      swiper.el.addEventListener('pointerenter', onPointerEnter);\\n      swiper.el.addEventListener('pointerleave', onPointerLeave);\\n    }\\n  };\\n  const detachMouseEvents = () => {\\n    swiper.el.removeEventListener('pointerenter', onPointerEnter);\\n    swiper.el.removeEventListener('pointerleave', onPointerLeave);\\n  };\\n  const attachDocumentEvents = () => {\\n    const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)();\\n    document.addEventListener('visibilitychange', onVisibilityChange);\\n  };\\n  const detachDocumentEvents = () => {\\n    const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)();\\n    document.removeEventListener('visibilitychange', onVisibilityChange);\\n  };\\n  on('init', () => {\\n    if (swiper.params.autoplay.enabled) {\\n      attachMouseEvents();\\n      attachDocumentEvents();\\n      autoplayStartTime = new Date().getTime();\\n      start();\\n    }\\n  });\\n  on('destroy', () => {\\n    detachMouseEvents();\\n    detachDocumentEvents();\\n    if (swiper.autoplay.running) {\\n      stop();\\n    }\\n  });\\n  on('beforeTransitionStart', (_s, speed, internal) => {\\n    if (swiper.destroyed || !swiper.autoplay.running) return;\\n    if (internal || !swiper.params.autoplay.disableOnInteraction) {\\n      pause(true, true);\\n    } else {\\n      stop();\\n    }\\n  });\\n  on('sliderFirstMove', () => {\\n    if (swiper.destroyed || !swiper.autoplay.running) return;\\n    if (swiper.params.autoplay.disableOnInteraction) {\\n      stop();\\n      return;\\n    }\\n    isTouched = true;\\n    pausedByTouch = false;\\n    pausedByInteraction = false;\\n    touchStartTimeout = setTimeout(() => {\\n      pausedByInteraction = true;\\n      pausedByTouch = true;\\n      pause(true);\\n    }, 200);\\n  });\\n  on('touchEnd', () => {\\n    if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return;\\n    clearTimeout(touchStartTimeout);\\n    clearTimeout(timeout);\\n    if (swiper.params.autoplay.disableOnInteraction) {\\n      pausedByTouch = false;\\n      isTouched = false;\\n      return;\\n    }\\n    if (pausedByTouch && swiper.params.cssMode) resume();\\n    pausedByTouch = false;\\n    isTouched = false;\\n  });\\n  on('slideChange', () => {\\n    if (swiper.destroyed || !swiper.autoplay.running) return;\\n    slideChanged = true;\\n  });\\n  Object.assign(swiper.autoplay, {\\n    start,\\n    stop,\\n    pause,\\n    resume\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvYXV0b3BsYXkvYXV0b3BsYXkuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ3lDO0FBQzFCO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxNQUFNO0FBQ047QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLHVEQUFXO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQix1REFBVztBQUNoQztBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsdURBQVc7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvbW9kdWxlcy9hdXRvcGxheS9hdXRvcGxheS5qcz9iODZiIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBuby11bmRlcnNjb3JlLWRhbmdsZTogXCJvZmZcIiAqL1xuLyogZXNsaW50IG5vLXVzZS1iZWZvcmUtZGVmaW5lOiBcIm9mZlwiICovXG5pbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gJ3Nzci13aW5kb3cnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQXV0b3BsYXkoe1xuICBzd2lwZXIsXG4gIGV4dGVuZFBhcmFtcyxcbiAgb24sXG4gIGVtaXQsXG4gIHBhcmFtc1xufSkge1xuICBzd2lwZXIuYXV0b3BsYXkgPSB7XG4gICAgcnVubmluZzogZmFsc2UsXG4gICAgcGF1c2VkOiBmYWxzZSxcbiAgICB0aW1lTGVmdDogMFxuICB9O1xuICBleHRlbmRQYXJhbXMoe1xuICAgIGF1dG9wbGF5OiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIGRlbGF5OiAzMDAwLFxuICAgICAgd2FpdEZvclRyYW5zaXRpb246IHRydWUsXG4gICAgICBkaXNhYmxlT25JbnRlcmFjdGlvbjogdHJ1ZSxcbiAgICAgIHN0b3BPbkxhc3RTbGlkZTogZmFsc2UsXG4gICAgICByZXZlcnNlRGlyZWN0aW9uOiBmYWxzZSxcbiAgICAgIHBhdXNlT25Nb3VzZUVudGVyOiBmYWxzZVxuICAgIH1cbiAgfSk7XG4gIGxldCB0aW1lb3V0O1xuICBsZXQgcmFmO1xuICBsZXQgYXV0b3BsYXlEZWxheVRvdGFsID0gcGFyYW1zICYmIHBhcmFtcy5hdXRvcGxheSA/IHBhcmFtcy5hdXRvcGxheS5kZWxheSA6IDMwMDA7XG4gIGxldCBhdXRvcGxheURlbGF5Q3VycmVudCA9IHBhcmFtcyAmJiBwYXJhbXMuYXV0b3BsYXkgPyBwYXJhbXMuYXV0b3BsYXkuZGVsYXkgOiAzMDAwO1xuICBsZXQgYXV0b3BsYXlUaW1lTGVmdDtcbiAgbGV0IGF1dG9wbGF5U3RhcnRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lO1xuICBsZXQgd2FzUGF1c2VkO1xuICBsZXQgaXNUb3VjaGVkO1xuICBsZXQgcGF1c2VkQnlUb3VjaDtcbiAgbGV0IHRvdWNoU3RhcnRUaW1lb3V0O1xuICBsZXQgc2xpZGVDaGFuZ2VkO1xuICBsZXQgcGF1c2VkQnlJbnRlcmFjdGlvbjtcbiAgZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKGUpIHtcbiAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkIHx8ICFzd2lwZXIud3JhcHBlckVsKSByZXR1cm47XG4gICAgaWYgKGUudGFyZ2V0ICE9PSBzd2lwZXIud3JhcHBlckVsKSByZXR1cm47XG4gICAgc3dpcGVyLndyYXBwZXJFbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgb25UcmFuc2l0aW9uRW5kKTtcbiAgICByZXN1bWUoKTtcbiAgfVxuICBjb25zdCBjYWxjVGltZUxlZnQgPSAoKSA9PiB7XG4gICAgaWYgKHN3aXBlci5kZXN0cm95ZWQgfHwgIXN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSByZXR1cm47XG4gICAgaWYgKHN3aXBlci5hdXRvcGxheS5wYXVzZWQpIHtcbiAgICAgIHdhc1BhdXNlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh3YXNQYXVzZWQpIHtcbiAgICAgIGF1dG9wbGF5RGVsYXlDdXJyZW50ID0gYXV0b3BsYXlUaW1lTGVmdDtcbiAgICAgIHdhc1BhdXNlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB0aW1lTGVmdCA9IHN3aXBlci5hdXRvcGxheS5wYXVzZWQgPyBhdXRvcGxheVRpbWVMZWZ0IDogYXV0b3BsYXlTdGFydFRpbWUgKyBhdXRvcGxheURlbGF5Q3VycmVudCAtIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIHN3aXBlci5hdXRvcGxheS50aW1lTGVmdCA9IHRpbWVMZWZ0O1xuICAgIGVtaXQoJ2F1dG9wbGF5VGltZUxlZnQnLCB0aW1lTGVmdCwgdGltZUxlZnQgLyBhdXRvcGxheURlbGF5VG90YWwpO1xuICAgIHJhZiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBjYWxjVGltZUxlZnQoKTtcbiAgICB9KTtcbiAgfTtcbiAgY29uc3QgZ2V0U2xpZGVEZWxheSA9ICgpID0+IHtcbiAgICBsZXQgYWN0aXZlU2xpZGVFbDtcbiAgICBpZiAoc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQpIHtcbiAgICAgIGFjdGl2ZVNsaWRlRWwgPSBzd2lwZXIuc2xpZGVzLmZpbHRlcihzbGlkZUVsID0+IHNsaWRlRWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdzd2lwZXItc2xpZGUtYWN0aXZlJykpWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY3RpdmVTbGlkZUVsID0gc3dpcGVyLnNsaWRlc1tzd2lwZXIuYWN0aXZlSW5kZXhdO1xuICAgIH1cbiAgICBpZiAoIWFjdGl2ZVNsaWRlRWwpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgY3VycmVudFNsaWRlRGVsYXkgPSBwYXJzZUludChhY3RpdmVTbGlkZUVsLmdldEF0dHJpYnV0ZSgnZGF0YS1zd2lwZXItYXV0b3BsYXknKSwgMTApO1xuICAgIHJldHVybiBjdXJyZW50U2xpZGVEZWxheTtcbiAgfTtcbiAgY29uc3QgcnVuID0gZGVsYXlGb3JjZSA9PiB7XG4gICAgaWYgKHN3aXBlci5kZXN0cm95ZWQgfHwgIXN3aXBlci5hdXRvcGxheS5ydW5uaW5nKSByZXR1cm47XG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKTtcbiAgICBjYWxjVGltZUxlZnQoKTtcbiAgICBsZXQgZGVsYXkgPSB0eXBlb2YgZGVsYXlGb3JjZSA9PT0gJ3VuZGVmaW5lZCcgPyBzd2lwZXIucGFyYW1zLmF1dG9wbGF5LmRlbGF5IDogZGVsYXlGb3JjZTtcbiAgICBhdXRvcGxheURlbGF5VG90YWwgPSBzd2lwZXIucGFyYW1zLmF1dG9wbGF5LmRlbGF5O1xuICAgIGF1dG9wbGF5RGVsYXlDdXJyZW50ID0gc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5kZWxheTtcbiAgICBjb25zdCBjdXJyZW50U2xpZGVEZWxheSA9IGdldFNsaWRlRGVsYXkoKTtcbiAgICBpZiAoIU51bWJlci5pc05hTihjdXJyZW50U2xpZGVEZWxheSkgJiYgY3VycmVudFNsaWRlRGVsYXkgPiAwICYmIHR5cGVvZiBkZWxheUZvcmNlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZGVsYXkgPSBjdXJyZW50U2xpZGVEZWxheTtcbiAgICAgIGF1dG9wbGF5RGVsYXlUb3RhbCA9IGN1cnJlbnRTbGlkZURlbGF5O1xuICAgICAgYXV0b3BsYXlEZWxheUN1cnJlbnQgPSBjdXJyZW50U2xpZGVEZWxheTtcbiAgICB9XG4gICAgYXV0b3BsYXlUaW1lTGVmdCA9IGRlbGF5O1xuICAgIGNvbnN0IHNwZWVkID0gc3dpcGVyLnBhcmFtcy5zcGVlZDtcbiAgICBjb25zdCBwcm9jZWVkID0gKCkgPT4ge1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuYXV0b3BsYXkucmV2ZXJzZURpcmVjdGlvbikge1xuICAgICAgICBpZiAoIXN3aXBlci5pc0JlZ2lubmluZyB8fCBzd2lwZXIucGFyYW1zLmxvb3AgfHwgc3dpcGVyLnBhcmFtcy5yZXdpbmQpIHtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVQcmV2KHNwZWVkLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICBlbWl0KCdhdXRvcGxheScpO1xuICAgICAgICB9IGVsc2UgaWYgKCFzd2lwZXIucGFyYW1zLmF1dG9wbGF5LnN0b3BPbkxhc3RTbGlkZSkge1xuICAgICAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5zbGlkZXMubGVuZ3RoIC0gMSwgc3BlZWQsIHRydWUsIHRydWUpO1xuICAgICAgICAgIGVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghc3dpcGVyLmlzRW5kIHx8IHN3aXBlci5wYXJhbXMubG9vcCB8fCBzd2lwZXIucGFyYW1zLnJld2luZCkge1xuICAgICAgICAgIHN3aXBlci5zbGlkZU5leHQoc3BlZWQsIHRydWUsIHRydWUpO1xuICAgICAgICAgIGVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXN3aXBlci5wYXJhbXMuYXV0b3BsYXkuc3RvcE9uTGFzdFNsaWRlKSB7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlVG8oMCwgc3BlZWQsIHRydWUsIHRydWUpO1xuICAgICAgICAgIGVtaXQoJ2F1dG9wbGF5Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgICAgYXV0b3BsYXlTdGFydFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBydW4oKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoZGVsYXkgPiAwKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHByb2NlZWQoKTtcbiAgICAgIH0sIGRlbGF5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgcHJvY2VlZCgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgcmV0dXJuIGRlbGF5O1xuICB9O1xuICBjb25zdCBzdGFydCA9ICgpID0+IHtcbiAgICBzd2lwZXIuYXV0b3BsYXkucnVubmluZyA9IHRydWU7XG4gICAgcnVuKCk7XG4gICAgZW1pdCgnYXV0b3BsYXlTdGFydCcpO1xuICB9O1xuICBjb25zdCBzdG9wID0gKCkgPT4ge1xuICAgIHN3aXBlci5hdXRvcGxheS5ydW5uaW5nID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZik7XG4gICAgZW1pdCgnYXV0b3BsYXlTdG9wJyk7XG4gIH07XG4gIGNvbnN0IHBhdXNlID0gKGludGVybmFsLCByZXNldCkgPT4ge1xuICAgIGlmIChzd2lwZXIuZGVzdHJveWVkIHx8ICFzd2lwZXIuYXV0b3BsYXkucnVubmluZykgcmV0dXJuO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICBpZiAoIWludGVybmFsKSB7XG4gICAgICBwYXVzZWRCeUludGVyYWN0aW9uID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgcHJvY2VlZCA9ICgpID0+IHtcbiAgICAgIGVtaXQoJ2F1dG9wbGF5UGF1c2UnKTtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5LndhaXRGb3JUcmFuc2l0aW9uKSB7XG4gICAgICAgIHN3aXBlci53cmFwcGVyRWwuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIG9uVHJhbnNpdGlvbkVuZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bWUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHN3aXBlci5hdXRvcGxheS5wYXVzZWQgPSB0cnVlO1xuICAgIGlmIChyZXNldCkge1xuICAgICAgaWYgKHNsaWRlQ2hhbmdlZCkge1xuICAgICAgICBhdXRvcGxheVRpbWVMZWZ0ID0gc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5kZWxheTtcbiAgICAgIH1cbiAgICAgIHNsaWRlQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgcHJvY2VlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkZWxheSA9IGF1dG9wbGF5VGltZUxlZnQgfHwgc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5kZWxheTtcbiAgICBhdXRvcGxheVRpbWVMZWZ0ID0gZGVsYXkgLSAobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBhdXRvcGxheVN0YXJ0VGltZSk7XG4gICAgaWYgKHN3aXBlci5pc0VuZCAmJiBhdXRvcGxheVRpbWVMZWZ0IDwgMCAmJiAhc3dpcGVyLnBhcmFtcy5sb29wKSByZXR1cm47XG4gICAgaWYgKGF1dG9wbGF5VGltZUxlZnQgPCAwKSBhdXRvcGxheVRpbWVMZWZ0ID0gMDtcbiAgICBwcm9jZWVkKCk7XG4gIH07XG4gIGNvbnN0IHJlc3VtZSA9ICgpID0+IHtcbiAgICBpZiAoc3dpcGVyLmlzRW5kICYmIGF1dG9wbGF5VGltZUxlZnQgPCAwICYmICFzd2lwZXIucGFyYW1zLmxvb3AgfHwgc3dpcGVyLmRlc3Ryb3llZCB8fCAhc3dpcGVyLmF1dG9wbGF5LnJ1bm5pbmcpIHJldHVybjtcbiAgICBhdXRvcGxheVN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIGlmIChwYXVzZWRCeUludGVyYWN0aW9uKSB7XG4gICAgICBwYXVzZWRCeUludGVyYWN0aW9uID0gZmFsc2U7XG4gICAgICBydW4oYXV0b3BsYXlUaW1lTGVmdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJ1bigpO1xuICAgIH1cbiAgICBzd2lwZXIuYXV0b3BsYXkucGF1c2VkID0gZmFsc2U7XG4gICAgZW1pdCgnYXV0b3BsYXlSZXN1bWUnKTtcbiAgfTtcbiAgY29uc3Qgb25WaXNpYmlsaXR5Q2hhbmdlID0gKCkgPT4ge1xuICAgIGlmIChzd2lwZXIuZGVzdHJveWVkIHx8ICFzd2lwZXIuYXV0b3BsYXkucnVubmluZykgcmV0dXJuO1xuICAgIGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAnaGlkZGVuJykge1xuICAgICAgcGF1c2VkQnlJbnRlcmFjdGlvbiA9IHRydWU7XG4gICAgICBwYXVzZSh0cnVlKTtcbiAgICB9XG4gICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ3Zpc2libGUnKSB7XG4gICAgICByZXN1bWUoKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IG9uUG9pbnRlckVudGVyID0gZSA9PiB7XG4gICAgaWYgKGUucG9pbnRlclR5cGUgIT09ICdtb3VzZScpIHJldHVybjtcbiAgICBwYXVzZWRCeUludGVyYWN0aW9uID0gdHJ1ZTtcbiAgICBwYXVzZSh0cnVlKTtcbiAgfTtcbiAgY29uc3Qgb25Qb2ludGVyTGVhdmUgPSBlID0+IHtcbiAgICBpZiAoZS5wb2ludGVyVHlwZSAhPT0gJ21vdXNlJykgcmV0dXJuO1xuICAgIGlmIChzd2lwZXIuYXV0b3BsYXkucGF1c2VkKSB7XG4gICAgICByZXN1bWUoKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGF0dGFjaE1vdXNlRXZlbnRzID0gKCkgPT4ge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5LnBhdXNlT25Nb3VzZUVudGVyKSB7XG4gICAgICBzd2lwZXIuZWwuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmVudGVyJywgb25Qb2ludGVyRW50ZXIpO1xuICAgICAgc3dpcGVyLmVsLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJsZWF2ZScsIG9uUG9pbnRlckxlYXZlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGRldGFjaE1vdXNlRXZlbnRzID0gKCkgPT4ge1xuICAgIHN3aXBlci5lbC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyZW50ZXInLCBvblBvaW50ZXJFbnRlcik7XG4gICAgc3dpcGVyLmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJsZWF2ZScsIG9uUG9pbnRlckxlYXZlKTtcbiAgfTtcbiAgY29uc3QgYXR0YWNoRG9jdW1lbnRFdmVudHMgPSAoKSA9PiB7XG4gICAgY29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvblZpc2liaWxpdHlDaGFuZ2UpO1xuICB9O1xuICBjb25zdCBkZXRhY2hEb2N1bWVudEV2ZW50cyA9ICgpID0+IHtcbiAgICBjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uVmlzaWJpbGl0eUNoYW5nZSk7XG4gIH07XG4gIG9uKCdpbml0JywgKCkgPT4ge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5LmVuYWJsZWQpIHtcbiAgICAgIGF0dGFjaE1vdXNlRXZlbnRzKCk7XG4gICAgICBhdHRhY2hEb2N1bWVudEV2ZW50cygpO1xuICAgICAgYXV0b3BsYXlTdGFydFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgIHN0YXJ0KCk7XG4gICAgfVxuICB9KTtcbiAgb24oJ2Rlc3Ryb3knLCAoKSA9PiB7XG4gICAgZGV0YWNoTW91c2VFdmVudHMoKTtcbiAgICBkZXRhY2hEb2N1bWVudEV2ZW50cygpO1xuICAgIGlmIChzd2lwZXIuYXV0b3BsYXkucnVubmluZykge1xuICAgICAgc3RvcCgpO1xuICAgIH1cbiAgfSk7XG4gIG9uKCdiZWZvcmVUcmFuc2l0aW9uU3RhcnQnLCAoX3MsIHNwZWVkLCBpbnRlcm5hbCkgPT4ge1xuICAgIGlmIChzd2lwZXIuZGVzdHJveWVkIHx8ICFzd2lwZXIuYXV0b3BsYXkucnVubmluZykgcmV0dXJuO1xuICAgIGlmIChpbnRlcm5hbCB8fCAhc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5kaXNhYmxlT25JbnRlcmFjdGlvbikge1xuICAgICAgcGF1c2UodHJ1ZSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0b3AoKTtcbiAgICB9XG4gIH0pO1xuICBvbignc2xpZGVyRmlyc3RNb3ZlJywgKCkgPT4ge1xuICAgIGlmIChzd2lwZXIuZGVzdHJveWVkIHx8ICFzd2lwZXIuYXV0b3BsYXkucnVubmluZykgcmV0dXJuO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmF1dG9wbGF5LmRpc2FibGVPbkludGVyYWN0aW9uKSB7XG4gICAgICBzdG9wKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlzVG91Y2hlZCA9IHRydWU7XG4gICAgcGF1c2VkQnlUb3VjaCA9IGZhbHNlO1xuICAgIHBhdXNlZEJ5SW50ZXJhY3Rpb24gPSBmYWxzZTtcbiAgICB0b3VjaFN0YXJ0VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgcGF1c2VkQnlJbnRlcmFjdGlvbiA9IHRydWU7XG4gICAgICBwYXVzZWRCeVRvdWNoID0gdHJ1ZTtcbiAgICAgIHBhdXNlKHRydWUpO1xuICAgIH0sIDIwMCk7XG4gIH0pO1xuICBvbigndG91Y2hFbmQnLCAoKSA9PiB7XG4gICAgaWYgKHN3aXBlci5kZXN0cm95ZWQgfHwgIXN3aXBlci5hdXRvcGxheS5ydW5uaW5nIHx8ICFpc1RvdWNoZWQpIHJldHVybjtcbiAgICBjbGVhclRpbWVvdXQodG91Y2hTdGFydFRpbWVvdXQpO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5hdXRvcGxheS5kaXNhYmxlT25JbnRlcmFjdGlvbikge1xuICAgICAgcGF1c2VkQnlUb3VjaCA9IGZhbHNlO1xuICAgICAgaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwYXVzZWRCeVRvdWNoICYmIHN3aXBlci5wYXJhbXMuY3NzTW9kZSkgcmVzdW1lKCk7XG4gICAgcGF1c2VkQnlUb3VjaCA9IGZhbHNlO1xuICAgIGlzVG91Y2hlZCA9IGZhbHNlO1xuICB9KTtcbiAgb24oJ3NsaWRlQ2hhbmdlJywgKCkgPT4ge1xuICAgIGlmIChzd2lwZXIuZGVzdHJveWVkIHx8ICFzd2lwZXIuYXV0b3BsYXkucnVubmluZykgcmV0dXJuO1xuICAgIHNsaWRlQ2hhbmdlZCA9IHRydWU7XG4gIH0pO1xuICBPYmplY3QuYXNzaWduKHN3aXBlci5hdXRvcGxheSwge1xuICAgIHN0YXJ0LFxuICAgIHN0b3AsXG4gICAgcGF1c2UsXG4gICAgcmVzdW1lXG4gIH0pO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/autoplay/autoplay.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/controller/controller.js\":\r\n/*!**************************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/controller/controller.js ***!\r\n  \\**************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ Controller)\\n/* harmony export */ });\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n/* eslint no-bitwise: [\\\"error\\\", { \\\"allow\\\": [\\\">>\\\"] }] */\\n\\nfunction Controller({\\n  swiper,\\n  extendParams,\\n  on\\n}) {\\n  extendParams({\\n    controller: {\\n      control: undefined,\\n      inverse: false,\\n      by: 'slide' // or 'container'\\n    }\\n  });\\n\\n  swiper.controller = {\\n    control: undefined\\n  };\\n  function LinearSpline(x, y) {\\n    const binarySearch = function search() {\\n      let maxIndex;\\n      let minIndex;\\n      let guess;\\n      return (array, val) => {\\n        minIndex = -1;\\n        maxIndex = array.length;\\n        while (maxIndex - minIndex > 1) {\\n          guess = maxIndex + minIndex >> 1;\\n          if (array[guess] <= val) {\\n            minIndex = guess;\\n          } else {\\n            maxIndex = guess;\\n          }\\n        }\\n        return maxIndex;\\n      };\\n    }();\\n    this.x = x;\\n    this.y = y;\\n    this.lastIndex = x.length - 1;\\n    // Given an x value (x2), return the expected y2 value:\\n    // (x1,y1) is the known point before given value,\\n    // (x3,y3) is the known point after given value.\\n    let i1;\\n    let i3;\\n    this.interpolate = function interpolate(x2) {\\n      if (!x2) return 0;\\n\\n      // Get the indexes of x1 and x3 (the array indexes before and after given x2):\\n      i3 = binarySearch(this.x, x2);\\n      i1 = i3 - 1;\\n\\n      // We have our indexes i1 & i3, so we can calculate already:\\n      // y2 := ((x2\u2212x1) \u00D7 (y3\u2212y1)) \u00F7 (x3\u2212x1) + y1\\n      return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\\n    };\\n    return this;\\n  }\\n  // xxx: for now i will just save one spline function to to\\n  function getInterpolateFunction(c) {\\n    if (!swiper.controller.spline) {\\n      swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);\\n    }\\n  }\\n  function setTranslate(_t, byController) {\\n    const controlled = swiper.controller.control;\\n    let multiplier;\\n    let controlledTranslate;\\n    const Swiper = swiper.constructor;\\n    function setControlledTranslate(c) {\\n      // this will create an Interpolate function based on the snapGrids\\n      // x is the Grid of the scrolled scroller and y will be the controlled scroller\\n      // it makes sense to create this only once and recall it for the interpolation\\n      // the function does a lot of value caching for performance\\n      const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\\n      if (swiper.params.controller.by === 'slide') {\\n        getInterpolateFunction(c);\\n        // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\\n        // but it did not work out\\n        controlledTranslate = -swiper.controller.spline.interpolate(-translate);\\n      }\\n      if (!controlledTranslate || swiper.params.controller.by === 'container') {\\n        multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\\n        controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\\n      }\\n      if (swiper.params.controller.inverse) {\\n        controlledTranslate = c.maxTranslate() - controlledTranslate;\\n      }\\n      c.updateProgress(controlledTranslate);\\n      c.setTranslate(controlledTranslate, swiper);\\n      c.updateActiveIndex();\\n      c.updateSlidesClasses();\\n    }\\n    if (Array.isArray(controlled)) {\\n      for (let i = 0; i < controlled.length; i += 1) {\\n        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\\n          setControlledTranslate(controlled[i]);\\n        }\\n      }\\n    } else if (controlled instanceof Swiper && byController !== controlled) {\\n      setControlledTranslate(controlled);\\n    }\\n  }\\n  function setTransition(duration, byController) {\\n    const Swiper = swiper.constructor;\\n    const controlled = swiper.controller.control;\\n    let i;\\n    function setControlledTransition(c) {\\n      c.setTransition(duration, swiper);\\n      if (duration !== 0) {\\n        c.transitionStart();\\n        if (c.params.autoHeight) {\\n          (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.nextTick)(() => {\\n            c.updateAutoHeight();\\n          });\\n        }\\n        (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementTransitionEnd)(c.wrapperEl, () => {\\n          if (!controlled) return;\\n          c.transitionEnd();\\n        });\\n      }\\n    }\\n    if (Array.isArray(controlled)) {\\n      for (i = 0; i < controlled.length; i += 1) {\\n        if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\\n          setControlledTransition(controlled[i]);\\n        }\\n      }\\n    } else if (controlled instanceof Swiper && byController !== controlled) {\\n      setControlledTransition(controlled);\\n    }\\n  }\\n  function removeSpline() {\\n    if (!swiper.controller.control) return;\\n    if (swiper.controller.spline) {\\n      swiper.controller.spline = undefined;\\n      delete swiper.controller.spline;\\n    }\\n  }\\n  on('beforeInit', () => {\\n    if (typeof window !== 'undefined' && (\\n    // eslint-disable-line\\n    typeof swiper.params.controller.control === 'string' || swiper.params.controller.control instanceof HTMLElement)) {\\n      const controlElement = document.querySelector(swiper.params.controller.control);\\n      if (controlElement && controlElement.swiper) {\\n        swiper.controller.control = controlElement.swiper;\\n      } else if (controlElement) {\\n        const onControllerSwiper = e => {\\n          swiper.controller.control = e.detail[0];\\n          swiper.update();\\n          controlElement.removeEventListener('init', onControllerSwiper);\\n        };\\n        controlElement.addEventListener('init', onControllerSwiper);\\n      }\\n      return;\\n    }\\n    swiper.controller.control = swiper.params.controller.control;\\n  });\\n  on('update', () => {\\n    removeSpline();\\n  });\\n  on('resize', () => {\\n    removeSpline();\\n  });\\n  on('observerUpdate', () => {\\n    removeSpline();\\n  });\\n  on('setTranslate', (_s, translate, byController) => {\\n    if (!swiper.controller.control) return;\\n    swiper.controller.setTranslate(translate, byController);\\n  });\\n  on('setTransition', (_s, duration, byController) => {\\n    if (!swiper.controller.control) return;\\n    swiper.controller.setTransition(duration, byController);\\n  });\\n  Object.assign(swiper.controller, {\\n    setTranslate,\\n    setTransition\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvY29udHJvbGxlci9jb250cm9sbGVyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0NBQWtDLGlCQUFpQjtBQUNvQjtBQUN4RDtBQUNmO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsdUJBQXVCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsMERBQVE7QUFDbEI7QUFDQSxXQUFXO0FBQ1g7QUFDQSxRQUFRLHNFQUFvQjtBQUM1QjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQix1QkFBdUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9tb2R1bGVzL2NvbnRyb2xsZXIvY29udHJvbGxlci5qcz9iNjllIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludCBuby1iaXR3aXNlOiBbXCJlcnJvclwiLCB7IFwiYWxsb3dcIjogW1wiPj5cIl0gfV0gKi9cbmltcG9ydCB7IGVsZW1lbnRUcmFuc2l0aW9uRW5kLCBuZXh0VGljayB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBDb250cm9sbGVyKHtcbiAgc3dpcGVyLFxuICBleHRlbmRQYXJhbXMsXG4gIG9uXG59KSB7XG4gIGV4dGVuZFBhcmFtcyh7XG4gICAgY29udHJvbGxlcjoge1xuICAgICAgY29udHJvbDogdW5kZWZpbmVkLFxuICAgICAgaW52ZXJzZTogZmFsc2UsXG4gICAgICBieTogJ3NsaWRlJyAvLyBvciAnY29udGFpbmVyJ1xuICAgIH1cbiAgfSk7XG5cbiAgc3dpcGVyLmNvbnRyb2xsZXIgPSB7XG4gICAgY29udHJvbDogdW5kZWZpbmVkXG4gIH07XG4gIGZ1bmN0aW9uIExpbmVhclNwbGluZSh4LCB5KSB7XG4gICAgY29uc3QgYmluYXJ5U2VhcmNoID0gZnVuY3Rpb24gc2VhcmNoKCkge1xuICAgICAgbGV0IG1heEluZGV4O1xuICAgICAgbGV0IG1pbkluZGV4O1xuICAgICAgbGV0IGd1ZXNzO1xuICAgICAgcmV0dXJuIChhcnJheSwgdmFsKSA9PiB7XG4gICAgICAgIG1pbkluZGV4ID0gLTE7XG4gICAgICAgIG1heEluZGV4ID0gYXJyYXkubGVuZ3RoO1xuICAgICAgICB3aGlsZSAobWF4SW5kZXggLSBtaW5JbmRleCA+IDEpIHtcbiAgICAgICAgICBndWVzcyA9IG1heEluZGV4ICsgbWluSW5kZXggPj4gMTtcbiAgICAgICAgICBpZiAoYXJyYXlbZ3Vlc3NdIDw9IHZhbCkge1xuICAgICAgICAgICAgbWluSW5kZXggPSBndWVzcztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWF4SW5kZXggPSBndWVzcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heEluZGV4O1xuICAgICAgfTtcbiAgICB9KCk7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuICAgIHRoaXMubGFzdEluZGV4ID0geC5sZW5ndGggLSAxO1xuICAgIC8vIEdpdmVuIGFuIHggdmFsdWUgKHgyKSwgcmV0dXJuIHRoZSBleHBlY3RlZCB5MiB2YWx1ZTpcbiAgICAvLyAoeDEseTEpIGlzIHRoZSBrbm93biBwb2ludCBiZWZvcmUgZ2l2ZW4gdmFsdWUsXG4gICAgLy8gKHgzLHkzKSBpcyB0aGUga25vd24gcG9pbnQgYWZ0ZXIgZ2l2ZW4gdmFsdWUuXG4gICAgbGV0IGkxO1xuICAgIGxldCBpMztcbiAgICB0aGlzLmludGVycG9sYXRlID0gZnVuY3Rpb24gaW50ZXJwb2xhdGUoeDIpIHtcbiAgICAgIGlmICgheDIpIHJldHVybiAwO1xuXG4gICAgICAvLyBHZXQgdGhlIGluZGV4ZXMgb2YgeDEgYW5kIHgzICh0aGUgYXJyYXkgaW5kZXhlcyBiZWZvcmUgYW5kIGFmdGVyIGdpdmVuIHgyKTpcbiAgICAgIGkzID0gYmluYXJ5U2VhcmNoKHRoaXMueCwgeDIpO1xuICAgICAgaTEgPSBpMyAtIDE7XG5cbiAgICAgIC8vIFdlIGhhdmUgb3VyIGluZGV4ZXMgaTEgJiBpMywgc28gd2UgY2FuIGNhbGN1bGF0ZSBhbHJlYWR5OlxuICAgICAgLy8geTIgOj0gKCh4MuKIkngxKSDDlyAoeTPiiJJ5MSkpIMO3ICh4M+KIkngxKSArIHkxXG4gICAgICByZXR1cm4gKHgyIC0gdGhpcy54W2kxXSkgKiAodGhpcy55W2kzXSAtIHRoaXMueVtpMV0pIC8gKHRoaXMueFtpM10gLSB0aGlzLnhbaTFdKSArIHRoaXMueVtpMV07XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvLyB4eHg6IGZvciBub3cgaSB3aWxsIGp1c3Qgc2F2ZSBvbmUgc3BsaW5lIGZ1bmN0aW9uIHRvIHRvXG4gIGZ1bmN0aW9uIGdldEludGVycG9sYXRlRnVuY3Rpb24oYykge1xuICAgIGlmICghc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lKSB7XG4gICAgICBzd2lwZXIuY29udHJvbGxlci5zcGxpbmUgPSBzd2lwZXIucGFyYW1zLmxvb3AgPyBuZXcgTGluZWFyU3BsaW5lKHN3aXBlci5zbGlkZXNHcmlkLCBjLnNsaWRlc0dyaWQpIDogbmV3IExpbmVhclNwbGluZShzd2lwZXIuc25hcEdyaWQsIGMuc25hcEdyaWQpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoX3QsIGJ5Q29udHJvbGxlcikge1xuICAgIGNvbnN0IGNvbnRyb2xsZWQgPSBzd2lwZXIuY29udHJvbGxlci5jb250cm9sO1xuICAgIGxldCBtdWx0aXBsaWVyO1xuICAgIGxldCBjb250cm9sbGVkVHJhbnNsYXRlO1xuICAgIGNvbnN0IFN3aXBlciA9IHN3aXBlci5jb25zdHJ1Y3RvcjtcbiAgICBmdW5jdGlvbiBzZXRDb250cm9sbGVkVHJhbnNsYXRlKGMpIHtcbiAgICAgIC8vIHRoaXMgd2lsbCBjcmVhdGUgYW4gSW50ZXJwb2xhdGUgZnVuY3Rpb24gYmFzZWQgb24gdGhlIHNuYXBHcmlkc1xuICAgICAgLy8geCBpcyB0aGUgR3JpZCBvZiB0aGUgc2Nyb2xsZWQgc2Nyb2xsZXIgYW5kIHkgd2lsbCBiZSB0aGUgY29udHJvbGxlZCBzY3JvbGxlclxuICAgICAgLy8gaXQgbWFrZXMgc2Vuc2UgdG8gY3JlYXRlIHRoaXMgb25seSBvbmNlIGFuZCByZWNhbGwgaXQgZm9yIHRoZSBpbnRlcnBvbGF0aW9uXG4gICAgICAvLyB0aGUgZnVuY3Rpb24gZG9lcyBhIGxvdCBvZiB2YWx1ZSBjYWNoaW5nIGZvciBwZXJmb3JtYW5jZVxuICAgICAgY29uc3QgdHJhbnNsYXRlID0gc3dpcGVyLnJ0bFRyYW5zbGF0ZSA/IC1zd2lwZXIudHJhbnNsYXRlIDogc3dpcGVyLnRyYW5zbGF0ZTtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmNvbnRyb2xsZXIuYnkgPT09ICdzbGlkZScpIHtcbiAgICAgICAgZ2V0SW50ZXJwb2xhdGVGdW5jdGlvbihjKTtcbiAgICAgICAgLy8gaSBhbSBub3Qgc3VyZSB3aHkgdGhlIHZhbHVlcyBoYXZlIHRvIGJlIG11bHRpcGxpY2F0ZWQgdGhpcyB3YXksIHRyaWVkIHRvIGludmVydCB0aGUgc25hcEdyaWRcbiAgICAgICAgLy8gYnV0IGl0IGRpZCBub3Qgd29yayBvdXRcbiAgICAgICAgY29udHJvbGxlZFRyYW5zbGF0ZSA9IC1zd2lwZXIuY29udHJvbGxlci5zcGxpbmUuaW50ZXJwb2xhdGUoLXRyYW5zbGF0ZSk7XG4gICAgICB9XG4gICAgICBpZiAoIWNvbnRyb2xsZWRUcmFuc2xhdGUgfHwgc3dpcGVyLnBhcmFtcy5jb250cm9sbGVyLmJ5ID09PSAnY29udGFpbmVyJykge1xuICAgICAgICBtdWx0aXBsaWVyID0gKGMubWF4VHJhbnNsYXRlKCkgLSBjLm1pblRyYW5zbGF0ZSgpKSAvIChzd2lwZXIubWF4VHJhbnNsYXRlKCkgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpO1xuICAgICAgICBjb250cm9sbGVkVHJhbnNsYXRlID0gKHRyYW5zbGF0ZSAtIHN3aXBlci5taW5UcmFuc2xhdGUoKSkgKiBtdWx0aXBsaWVyICsgYy5taW5UcmFuc2xhdGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmNvbnRyb2xsZXIuaW52ZXJzZSkge1xuICAgICAgICBjb250cm9sbGVkVHJhbnNsYXRlID0gYy5tYXhUcmFuc2xhdGUoKSAtIGNvbnRyb2xsZWRUcmFuc2xhdGU7XG4gICAgICB9XG4gICAgICBjLnVwZGF0ZVByb2dyZXNzKGNvbnRyb2xsZWRUcmFuc2xhdGUpO1xuICAgICAgYy5zZXRUcmFuc2xhdGUoY29udHJvbGxlZFRyYW5zbGF0ZSwgc3dpcGVyKTtcbiAgICAgIGMudXBkYXRlQWN0aXZlSW5kZXgoKTtcbiAgICAgIGMudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb250cm9sbGVkKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250cm9sbGVkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChjb250cm9sbGVkW2ldICE9PSBieUNvbnRyb2xsZXIgJiYgY29udHJvbGxlZFtpXSBpbnN0YW5jZW9mIFN3aXBlcikge1xuICAgICAgICAgIHNldENvbnRyb2xsZWRUcmFuc2xhdGUoY29udHJvbGxlZFtpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbnRyb2xsZWQgaW5zdGFuY2VvZiBTd2lwZXIgJiYgYnlDb250cm9sbGVyICE9PSBjb250cm9sbGVkKSB7XG4gICAgICBzZXRDb250cm9sbGVkVHJhbnNsYXRlKGNvbnRyb2xsZWQpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uLCBieUNvbnRyb2xsZXIpIHtcbiAgICBjb25zdCBTd2lwZXIgPSBzd2lwZXIuY29uc3RydWN0b3I7XG4gICAgY29uc3QgY29udHJvbGxlZCA9IHN3aXBlci5jb250cm9sbGVyLmNvbnRyb2w7XG4gICAgbGV0IGk7XG4gICAgZnVuY3Rpb24gc2V0Q29udHJvbGxlZFRyYW5zaXRpb24oYykge1xuICAgICAgYy5zZXRUcmFuc2l0aW9uKGR1cmF0aW9uLCBzd2lwZXIpO1xuICAgICAgaWYgKGR1cmF0aW9uICE9PSAwKSB7XG4gICAgICAgIGMudHJhbnNpdGlvblN0YXJ0KCk7XG4gICAgICAgIGlmIChjLnBhcmFtcy5hdXRvSGVpZ2h0KSB7XG4gICAgICAgICAgbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgYy51cGRhdGVBdXRvSGVpZ2h0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxlbWVudFRyYW5zaXRpb25FbmQoYy53cmFwcGVyRWwsICgpID0+IHtcbiAgICAgICAgICBpZiAoIWNvbnRyb2xsZWQpIHJldHVybjtcbiAgICAgICAgICBjLnRyYW5zaXRpb25FbmQoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xsZWQpKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY29udHJvbGxlZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoY29udHJvbGxlZFtpXSAhPT0gYnlDb250cm9sbGVyICYmIGNvbnRyb2xsZWRbaV0gaW5zdGFuY2VvZiBTd2lwZXIpIHtcbiAgICAgICAgICBzZXRDb250cm9sbGVkVHJhbnNpdGlvbihjb250cm9sbGVkW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udHJvbGxlZCBpbnN0YW5jZW9mIFN3aXBlciAmJiBieUNvbnRyb2xsZXIgIT09IGNvbnRyb2xsZWQpIHtcbiAgICAgIHNldENvbnRyb2xsZWRUcmFuc2l0aW9uKGNvbnRyb2xsZWQpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiByZW1vdmVTcGxpbmUoKSB7XG4gICAgaWYgKCFzd2lwZXIuY29udHJvbGxlci5jb250cm9sKSByZXR1cm47XG4gICAgaWYgKHN3aXBlci5jb250cm9sbGVyLnNwbGluZSkge1xuICAgICAgc3dpcGVyLmNvbnRyb2xsZXIuc3BsaW5lID0gdW5kZWZpbmVkO1xuICAgICAgZGVsZXRlIHN3aXBlci5jb250cm9sbGVyLnNwbGluZTtcbiAgICB9XG4gIH1cbiAgb24oJ2JlZm9yZUluaXQnLCAoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIChcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgdHlwZW9mIHN3aXBlci5wYXJhbXMuY29udHJvbGxlci5jb250cm9sID09PSAnc3RyaW5nJyB8fCBzd2lwZXIucGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgICAgY29uc3QgY29udHJvbEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHN3aXBlci5wYXJhbXMuY29udHJvbGxlci5jb250cm9sKTtcbiAgICAgIGlmIChjb250cm9sRWxlbWVudCAmJiBjb250cm9sRWxlbWVudC5zd2lwZXIpIHtcbiAgICAgICAgc3dpcGVyLmNvbnRyb2xsZXIuY29udHJvbCA9IGNvbnRyb2xFbGVtZW50LnN3aXBlcjtcbiAgICAgIH0gZWxzZSBpZiAoY29udHJvbEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3Qgb25Db250cm9sbGVyU3dpcGVyID0gZSA9PiB7XG4gICAgICAgICAgc3dpcGVyLmNvbnRyb2xsZXIuY29udHJvbCA9IGUuZGV0YWlsWzBdO1xuICAgICAgICAgIHN3aXBlci51cGRhdGUoKTtcbiAgICAgICAgICBjb250cm9sRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbml0Jywgb25Db250cm9sbGVyU3dpcGVyKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29udHJvbEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaW5pdCcsIG9uQ29udHJvbGxlclN3aXBlcik7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wgPSBzd2lwZXIucGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbDtcbiAgfSk7XG4gIG9uKCd1cGRhdGUnLCAoKSA9PiB7XG4gICAgcmVtb3ZlU3BsaW5lKCk7XG4gIH0pO1xuICBvbigncmVzaXplJywgKCkgPT4ge1xuICAgIHJlbW92ZVNwbGluZSgpO1xuICB9KTtcbiAgb24oJ29ic2VydmVyVXBkYXRlJywgKCkgPT4ge1xuICAgIHJlbW92ZVNwbGluZSgpO1xuICB9KTtcbiAgb24oJ3NldFRyYW5zbGF0ZScsIChfcywgdHJhbnNsYXRlLCBieUNvbnRyb2xsZXIpID0+IHtcbiAgICBpZiAoIXN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wpIHJldHVybjtcbiAgICBzd2lwZXIuY29udHJvbGxlci5zZXRUcmFuc2xhdGUodHJhbnNsYXRlLCBieUNvbnRyb2xsZXIpO1xuICB9KTtcbiAgb24oJ3NldFRyYW5zaXRpb24nLCAoX3MsIGR1cmF0aW9uLCBieUNvbnRyb2xsZXIpID0+IHtcbiAgICBpZiAoIXN3aXBlci5jb250cm9sbGVyLmNvbnRyb2wpIHJldHVybjtcbiAgICBzd2lwZXIuY29udHJvbGxlci5zZXRUcmFuc2l0aW9uKGR1cmF0aW9uLCBieUNvbnRyb2xsZXIpO1xuICB9KTtcbiAgT2JqZWN0LmFzc2lnbihzd2lwZXIuY29udHJvbGxlciwge1xuICAgIHNldFRyYW5zbGF0ZSxcbiAgICBzZXRUcmFuc2l0aW9uXG4gIH0pO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/controller/controller.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/effect-cards/effect-cards.js\":\r\n/*!******************************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/effect-cards/effect-cards.js ***!\r\n  \\******************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ EffectCards)\\n/* harmony export */ });\\n/* harmony import */ var _shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/create-shadow.js */ \\\"./node_modules/swiper/shared/create-shadow.js\\\");\\n/* harmony import */ var _shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/effect-init.js */ \\\"./node_modules/swiper/shared/effect-init.js\\\");\\n/* harmony import */ var _shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/effect-target.js */ \\\"./node_modules/swiper/shared/effect-target.js\\\");\\n/* harmony import */ var _shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../shared/effect-virtual-transition-end.js */ \\\"./node_modules/swiper/shared/effect-virtual-transition-end.js\\\");\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\n\\n\\n\\n\\nfunction EffectCards({\\n  swiper,\\n  extendParams,\\n  on\\n}) {\\n  extendParams({\\n    cardsEffect: {\\n      slideShadows: true,\\n      rotate: true,\\n      perSlideRotate: 2,\\n      perSlideOffset: 8\\n    }\\n  });\\n  const setTranslate = () => {\\n    const {\\n      slides,\\n      activeIndex\\n    } = swiper;\\n    const params = swiper.params.cardsEffect;\\n    const {\\n      startTranslate,\\n      isTouched\\n    } = swiper.touchEventsData;\\n    const currentTranslate = swiper.translate;\\n    for (let i = 0; i < slides.length; i += 1) {\\n      const slideEl = slides[i];\\n      const slideProgress = slideEl.progress;\\n      const progress = Math.min(Math.max(slideProgress, -4), 4);\\n      let offset = slideEl.swiperSlideOffset;\\n      if (swiper.params.centeredSlides && !swiper.params.cssMode) {\\n        swiper.wrapperEl.style.transform = `translateX(${swiper.minTranslate()}px)`;\\n      }\\n      if (swiper.params.centeredSlides && swiper.params.cssMode) {\\n        offset -= slides[0].swiperSlideOffset;\\n      }\\n      let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;\\n      let tY = 0;\\n      const tZ = -100 * Math.abs(progress);\\n      let scale = 1;\\n      let rotate = -params.perSlideRotate * progress;\\n      let tXAdd = params.perSlideOffset - Math.abs(progress) * 0.75;\\n      const slideIndex = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i;\\n      const isSwipeToNext = (slideIndex === activeIndex || slideIndex === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate;\\n      const isSwipeToPrev = (slideIndex === activeIndex || slideIndex === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate;\\n      if (isSwipeToNext || isSwipeToPrev) {\\n        const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;\\n        rotate += -28 * progress * subProgress;\\n        scale += -0.5 * subProgress;\\n        tXAdd += 96 * subProgress;\\n        tY = `${-25 * subProgress * Math.abs(progress)}%`;\\n      }\\n      if (progress < 0) {\\n        // next\\n        tX = `calc(${tX}px + (${tXAdd * Math.abs(progress)}%))`;\\n      } else if (progress > 0) {\\n        // prev\\n        tX = `calc(${tX}px + (-${tXAdd * Math.abs(progress)}%))`;\\n      } else {\\n        tX = `${tX}px`;\\n      }\\n      if (!swiper.isHorizontal()) {\\n        const prevY = tY;\\n        tY = tX;\\n        tX = prevY;\\n      }\\n      const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;\\n      const transform = `\\n        translate3d(${tX}, ${tY}, ${tZ}px)\\n        rotateZ(${params.rotate ? rotate : 0}deg)\\n        scale(${scaleString})\\n      `;\\n      if (params.slideShadows) {\\n        // Set shadows\\n        let shadowEl = slideEl.querySelector('.swiper-slide-shadow');\\n        if (!shadowEl) {\\n          shadowEl = (0,_shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(params, slideEl);\\n        }\\n        if (shadowEl) shadowEl.style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);\\n      }\\n      slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\\n      const targetEl = (0,_shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])(params, slideEl);\\n      targetEl.style.transform = transform;\\n    }\\n  };\\n  const setTransition = duration => {\\n    const transformElements = swiper.slides.map(slideEl => (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_4__.getSlideTransformEl)(slideEl));\\n    transformElements.forEach(el => {\\n      el.style.transitionDuration = `${duration}ms`;\\n      el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => {\\n        shadowEl.style.transitionDuration = `${duration}ms`;\\n      });\\n    });\\n    (0,_shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])({\\n      swiper,\\n      duration,\\n      transformElements\\n    });\\n  };\\n  (0,_shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])({\\n    effect: 'cards',\\n    swiper,\\n    on,\\n    setTranslate,\\n    setTransition,\\n    perspective: () => true,\\n    overwriteParams: () => ({\\n      watchSlidesProgress: true,\\n      virtualTranslate: !swiper.params.cssMode\\n    })\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvZWZmZWN0LWNhcmRzL2VmZmVjdC1jYXJkcy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBeUQ7QUFDSjtBQUNJO0FBQzhCO0FBQzNCO0FBQzdDO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0Esb0JBQW9CLG1CQUFtQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELHNCQUFzQjtBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsdUNBQXVDO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixHQUFHLFFBQVEsMkJBQTJCO0FBQzNELFFBQVE7QUFDUjtBQUNBLHFCQUFxQixHQUFHLFNBQVMsMkJBQTJCO0FBQzVELFFBQVE7QUFDUixnQkFBZ0IsR0FBRztBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsMkJBQTJCLE9BQU8sMkJBQTJCO0FBQ3pHO0FBQ0Esc0JBQXNCLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRztBQUN2QyxrQkFBa0IsMkJBQTJCO0FBQzdDLGdCQUFnQixZQUFZO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0VBQVk7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsb0VBQVk7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQscUVBQW1CO0FBQzlFO0FBQ0EsdUNBQXVDLFNBQVM7QUFDaEQ7QUFDQSwrQ0FBK0MsU0FBUztBQUN4RCxPQUFPO0FBQ1AsS0FBSztBQUNMLElBQUksb0ZBQTBCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEVBQUUsa0VBQVU7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvZWZmZWN0LWNhcmRzL2VmZmVjdC1jYXJkcy5qcz8zMWIxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVTaGFkb3cgZnJvbSAnLi4vLi4vc2hhcmVkL2NyZWF0ZS1zaGFkb3cuanMnO1xuaW1wb3J0IGVmZmVjdEluaXQgZnJvbSAnLi4vLi4vc2hhcmVkL2VmZmVjdC1pbml0LmpzJztcbmltcG9ydCBlZmZlY3RUYXJnZXQgZnJvbSAnLi4vLi4vc2hhcmVkL2VmZmVjdC10YXJnZXQuanMnO1xuaW1wb3J0IGVmZmVjdFZpcnR1YWxUcmFuc2l0aW9uRW5kIGZyb20gJy4uLy4uL3NoYXJlZC9lZmZlY3QtdmlydHVhbC10cmFuc2l0aW9uLWVuZC5qcyc7XG5pbXBvcnQgeyBnZXRTbGlkZVRyYW5zZm9ybUVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEVmZmVjdENhcmRzKHtcbiAgc3dpcGVyLFxuICBleHRlbmRQYXJhbXMsXG4gIG9uXG59KSB7XG4gIGV4dGVuZFBhcmFtcyh7XG4gICAgY2FyZHNFZmZlY3Q6IHtcbiAgICAgIHNsaWRlU2hhZG93czogdHJ1ZSxcbiAgICAgIHJvdGF0ZTogdHJ1ZSxcbiAgICAgIHBlclNsaWRlUm90YXRlOiAyLFxuICAgICAgcGVyU2xpZGVPZmZzZXQ6IDhcbiAgICB9XG4gIH0pO1xuICBjb25zdCBzZXRUcmFuc2xhdGUgPSAoKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgc2xpZGVzLFxuICAgICAgYWN0aXZlSW5kZXhcbiAgICB9ID0gc3dpcGVyO1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuY2FyZHNFZmZlY3Q7XG4gICAgY29uc3Qge1xuICAgICAgc3RhcnRUcmFuc2xhdGUsXG4gICAgICBpc1RvdWNoZWRcbiAgICB9ID0gc3dpcGVyLnRvdWNoRXZlbnRzRGF0YTtcbiAgICBjb25zdCBjdXJyZW50VHJhbnNsYXRlID0gc3dpcGVyLnRyYW5zbGF0ZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY29uc3Qgc2xpZGVFbCA9IHNsaWRlc1tpXTtcbiAgICAgIGNvbnN0IHNsaWRlUHJvZ3Jlc3MgPSBzbGlkZUVsLnByb2dyZXNzO1xuICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLm1pbihNYXRoLm1heChzbGlkZVByb2dyZXNzLCAtNCksIDQpO1xuICAgICAgbGV0IG9mZnNldCA9IHNsaWRlRWwuc3dpcGVyU2xpZGVPZmZzZXQ7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5jZW50ZXJlZFNsaWRlcyAmJiAhc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICAgIHN3aXBlci53cmFwcGVyRWwuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHtzd2lwZXIubWluVHJhbnNsYXRlKCl9cHgpYDtcbiAgICAgIH1cbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmNlbnRlcmVkU2xpZGVzICYmIHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgICBvZmZzZXQgLT0gc2xpZGVzWzBdLnN3aXBlclNsaWRlT2Zmc2V0O1xuICAgICAgfVxuICAgICAgbGV0IHRYID0gc3dpcGVyLnBhcmFtcy5jc3NNb2RlID8gLW9mZnNldCAtIHN3aXBlci50cmFuc2xhdGUgOiAtb2Zmc2V0O1xuICAgICAgbGV0IHRZID0gMDtcbiAgICAgIGNvbnN0IHRaID0gLTEwMCAqIE1hdGguYWJzKHByb2dyZXNzKTtcbiAgICAgIGxldCBzY2FsZSA9IDE7XG4gICAgICBsZXQgcm90YXRlID0gLXBhcmFtcy5wZXJTbGlkZVJvdGF0ZSAqIHByb2dyZXNzO1xuICAgICAgbGV0IHRYQWRkID0gcGFyYW1zLnBlclNsaWRlT2Zmc2V0IC0gTWF0aC5hYnMocHJvZ3Jlc3MpICogMC43NTtcbiAgICAgIGNvbnN0IHNsaWRlSW5kZXggPSBzd2lwZXIudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCA/IHN3aXBlci52aXJ0dWFsLmZyb20gKyBpIDogaTtcbiAgICAgIGNvbnN0IGlzU3dpcGVUb05leHQgPSAoc2xpZGVJbmRleCA9PT0gYWN0aXZlSW5kZXggfHwgc2xpZGVJbmRleCA9PT0gYWN0aXZlSW5kZXggLSAxKSAmJiBwcm9ncmVzcyA+IDAgJiYgcHJvZ3Jlc3MgPCAxICYmIChpc1RvdWNoZWQgfHwgc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSAmJiBjdXJyZW50VHJhbnNsYXRlIDwgc3RhcnRUcmFuc2xhdGU7XG4gICAgICBjb25zdCBpc1N3aXBlVG9QcmV2ID0gKHNsaWRlSW5kZXggPT09IGFjdGl2ZUluZGV4IHx8IHNsaWRlSW5kZXggPT09IGFjdGl2ZUluZGV4ICsgMSkgJiYgcHJvZ3Jlc3MgPCAwICYmIHByb2dyZXNzID4gLTEgJiYgKGlzVG91Y2hlZCB8fCBzd2lwZXIucGFyYW1zLmNzc01vZGUpICYmIGN1cnJlbnRUcmFuc2xhdGUgPiBzdGFydFRyYW5zbGF0ZTtcbiAgICAgIGlmIChpc1N3aXBlVG9OZXh0IHx8IGlzU3dpcGVUb1ByZXYpIHtcbiAgICAgICAgY29uc3Qgc3ViUHJvZ3Jlc3MgPSAoMSAtIE1hdGguYWJzKChNYXRoLmFicyhwcm9ncmVzcykgLSAwLjUpIC8gMC41KSkgKiogMC41O1xuICAgICAgICByb3RhdGUgKz0gLTI4ICogcHJvZ3Jlc3MgKiBzdWJQcm9ncmVzcztcbiAgICAgICAgc2NhbGUgKz0gLTAuNSAqIHN1YlByb2dyZXNzO1xuICAgICAgICB0WEFkZCArPSA5NiAqIHN1YlByb2dyZXNzO1xuICAgICAgICB0WSA9IGAkey0yNSAqIHN1YlByb2dyZXNzICogTWF0aC5hYnMocHJvZ3Jlc3MpfSVgO1xuICAgICAgfVxuICAgICAgaWYgKHByb2dyZXNzIDwgMCkge1xuICAgICAgICAvLyBuZXh0XG4gICAgICAgIHRYID0gYGNhbGMoJHt0WH1weCArICgke3RYQWRkICogTWF0aC5hYnMocHJvZ3Jlc3MpfSUpKWA7XG4gICAgICB9IGVsc2UgaWYgKHByb2dyZXNzID4gMCkge1xuICAgICAgICAvLyBwcmV2XG4gICAgICAgIHRYID0gYGNhbGMoJHt0WH1weCArICgtJHt0WEFkZCAqIE1hdGguYWJzKHByb2dyZXNzKX0lKSlgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdFggPSBgJHt0WH1weGA7XG4gICAgICB9XG4gICAgICBpZiAoIXN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgICAgICBjb25zdCBwcmV2WSA9IHRZO1xuICAgICAgICB0WSA9IHRYO1xuICAgICAgICB0WCA9IHByZXZZO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2NhbGVTdHJpbmcgPSBwcm9ncmVzcyA8IDAgPyBgJHsxICsgKDEgLSBzY2FsZSkgKiBwcm9ncmVzc31gIDogYCR7MSAtICgxIC0gc2NhbGUpICogcHJvZ3Jlc3N9YDtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IGBcbiAgICAgICAgdHJhbnNsYXRlM2QoJHt0WH0sICR7dFl9LCAke3RafXB4KVxuICAgICAgICByb3RhdGVaKCR7cGFyYW1zLnJvdGF0ZSA/IHJvdGF0ZSA6IDB9ZGVnKVxuICAgICAgICBzY2FsZSgke3NjYWxlU3RyaW5nfSlcbiAgICAgIGA7XG4gICAgICBpZiAocGFyYW1zLnNsaWRlU2hhZG93cykge1xuICAgICAgICAvLyBTZXQgc2hhZG93c1xuICAgICAgICBsZXQgc2hhZG93RWwgPSBzbGlkZUVsLnF1ZXJ5U2VsZWN0b3IoJy5zd2lwZXItc2xpZGUtc2hhZG93Jyk7XG4gICAgICAgIGlmICghc2hhZG93RWwpIHtcbiAgICAgICAgICBzaGFkb3dFbCA9IGNyZWF0ZVNoYWRvdyhwYXJhbXMsIHNsaWRlRWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaGFkb3dFbCkgc2hhZG93RWwuc3R5bGUub3BhY2l0eSA9IE1hdGgubWluKE1hdGgubWF4KChNYXRoLmFicyhwcm9ncmVzcykgLSAwLjUpIC8gMC41LCAwKSwgMSk7XG4gICAgICB9XG4gICAgICBzbGlkZUVsLnN0eWxlLnpJbmRleCA9IC1NYXRoLmFicyhNYXRoLnJvdW5kKHNsaWRlUHJvZ3Jlc3MpKSArIHNsaWRlcy5sZW5ndGg7XG4gICAgICBjb25zdCB0YXJnZXRFbCA9IGVmZmVjdFRhcmdldChwYXJhbXMsIHNsaWRlRWwpO1xuICAgICAgdGFyZ2V0RWwuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIH1cbiAgfTtcbiAgY29uc3Qgc2V0VHJhbnNpdGlvbiA9IGR1cmF0aW9uID0+IHtcbiAgICBjb25zdCB0cmFuc2Zvcm1FbGVtZW50cyA9IHN3aXBlci5zbGlkZXMubWFwKHNsaWRlRWwgPT4gZ2V0U2xpZGVUcmFuc2Zvcm1FbChzbGlkZUVsKSk7XG4gICAgdHJhbnNmb3JtRWxlbWVudHMuZm9yRWFjaChlbCA9PiB7XG4gICAgICBlbC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSBgJHtkdXJhdGlvbn1tc2A7XG4gICAgICBlbC5xdWVyeVNlbGVjdG9yQWxsKCcuc3dpcGVyLXNsaWRlLXNoYWRvdycpLmZvckVhY2goc2hhZG93RWwgPT4ge1xuICAgICAgICBzaGFkb3dFbC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSBgJHtkdXJhdGlvbn1tc2A7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBlZmZlY3RWaXJ0dWFsVHJhbnNpdGlvbkVuZCh7XG4gICAgICBzd2lwZXIsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHRyYW5zZm9ybUVsZW1lbnRzXG4gICAgfSk7XG4gIH07XG4gIGVmZmVjdEluaXQoe1xuICAgIGVmZmVjdDogJ2NhcmRzJyxcbiAgICBzd2lwZXIsXG4gICAgb24sXG4gICAgc2V0VHJhbnNsYXRlLFxuICAgIHNldFRyYW5zaXRpb24sXG4gICAgcGVyc3BlY3RpdmU6ICgpID0+IHRydWUsXG4gICAgb3ZlcndyaXRlUGFyYW1zOiAoKSA9PiAoe1xuICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgIHZpcnR1YWxUcmFuc2xhdGU6ICFzd2lwZXIucGFyYW1zLmNzc01vZGVcbiAgICB9KVxuICB9KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/effect-cards/effect-cards.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/effect-coverflow/effect-coverflow.js\":\r\n/*!**************************************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/effect-coverflow/effect-coverflow.js ***!\r\n  \\**************************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ EffectCoverflow)\\n/* harmony export */ });\\n/* harmony import */ var _shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/create-shadow.js */ \\\"./node_modules/swiper/shared/create-shadow.js\\\");\\n/* harmony import */ var _shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/effect-init.js */ \\\"./node_modules/swiper/shared/effect-init.js\\\");\\n/* harmony import */ var _shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/effect-target.js */ \\\"./node_modules/swiper/shared/effect-target.js\\\");\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\n\\n\\n\\nfunction EffectCoverflow({\\n  swiper,\\n  extendParams,\\n  on\\n}) {\\n  extendParams({\\n    coverflowEffect: {\\n      rotate: 50,\\n      stretch: 0,\\n      depth: 100,\\n      scale: 1,\\n      modifier: 1,\\n      slideShadows: true\\n    }\\n  });\\n  const setTranslate = () => {\\n    const {\\n      width: swiperWidth,\\n      height: swiperHeight,\\n      slides,\\n      slidesSizesGrid\\n    } = swiper;\\n    const params = swiper.params.coverflowEffect;\\n    const isHorizontal = swiper.isHorizontal();\\n    const transform = swiper.translate;\\n    const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\\n    const rotate = isHorizontal ? params.rotate : -params.rotate;\\n    const translate = params.depth;\\n    // Each slide offset from center\\n    for (let i = 0, length = slides.length; i < length; i += 1) {\\n      const slideEl = slides[i];\\n      const slideSize = slidesSizesGrid[i];\\n      const slideOffset = slideEl.swiperSlideOffset;\\n      const centerOffset = (center - slideOffset - slideSize / 2) / slideSize;\\n      const offsetMultiplier = typeof params.modifier === 'function' ? params.modifier(centerOffset) : centerOffset * params.modifier;\\n      let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\\n      let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\\n      // var rotateZ = 0\\n      let translateZ = -translate * Math.abs(offsetMultiplier);\\n      let stretch = params.stretch;\\n      // Allow percentage to make a relative stretch for responsive sliders\\n      if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\\n        stretch = parseFloat(params.stretch) / 100 * slideSize;\\n      }\\n      let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\\n      let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\\n      let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);\\n\\n      // Fix for ultra small values\\n      if (Math.abs(translateX) < 0.001) translateX = 0;\\n      if (Math.abs(translateY) < 0.001) translateY = 0;\\n      if (Math.abs(translateZ) < 0.001) translateZ = 0;\\n      if (Math.abs(rotateY) < 0.001) rotateY = 0;\\n      if (Math.abs(rotateX) < 0.001) rotateX = 0;\\n      if (Math.abs(scale) < 0.001) scale = 0;\\n      const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px)  rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;\\n      const targetEl = (0,_shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])(params, slideEl);\\n      targetEl.style.transform = slideTransform;\\n      slideEl.style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\\n      if (params.slideShadows) {\\n        // Set shadows\\n        let shadowBeforeEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\\n        let shadowAfterEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\\n        if (!shadowBeforeEl) {\\n          shadowBeforeEl = (0,_shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(params, slideEl, isHorizontal ? 'left' : 'top');\\n        }\\n        if (!shadowAfterEl) {\\n          shadowAfterEl = (0,_shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(params, slideEl, isHorizontal ? 'right' : 'bottom');\\n        }\\n        if (shadowBeforeEl) shadowBeforeEl.style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\\n        if (shadowAfterEl) shadowAfterEl.style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\\n      }\\n    }\\n  };\\n  const setTransition = duration => {\\n    const transformElements = swiper.slides.map(slideEl => (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_3__.getSlideTransformEl)(slideEl));\\n    transformElements.forEach(el => {\\n      el.style.transitionDuration = `${duration}ms`;\\n      el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => {\\n        shadowEl.style.transitionDuration = `${duration}ms`;\\n      });\\n    });\\n  };\\n  (0,_shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])({\\n    effect: 'coverflow',\\n    swiper,\\n    on,\\n    setTranslate,\\n    setTransition,\\n    perspective: () => true,\\n    overwriteParams: () => ({\\n      watchSlidesProgress: true\\n    })\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvZWZmZWN0LWNvdmVyZmxvdy9lZmZlY3QtY292ZXJmbG93LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXlEO0FBQ0o7QUFDSTtBQUNHO0FBQzdDO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsWUFBWTtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLFdBQVcsS0FBSyxXQUFXLEtBQUssV0FBVyxlQUFlLFFBQVEsZUFBZSxRQUFRLGFBQWEsTUFBTTtBQUN4Six1QkFBdUIsb0VBQVk7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsb0VBQVk7QUFDdkM7QUFDQTtBQUNBLDBCQUEwQixvRUFBWTtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCxxRUFBbUI7QUFDOUU7QUFDQSx1Q0FBdUMsU0FBUztBQUNoRDtBQUNBLCtDQUErQyxTQUFTO0FBQ3hELE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxFQUFFLGtFQUFVO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvbW9kdWxlcy9lZmZlY3QtY292ZXJmbG93L2VmZmVjdC1jb3ZlcmZsb3cuanM/MzMwNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3JlYXRlU2hhZG93IGZyb20gJy4uLy4uL3NoYXJlZC9jcmVhdGUtc2hhZG93LmpzJztcbmltcG9ydCBlZmZlY3RJbml0IGZyb20gJy4uLy4uL3NoYXJlZC9lZmZlY3QtaW5pdC5qcyc7XG5pbXBvcnQgZWZmZWN0VGFyZ2V0IGZyb20gJy4uLy4uL3NoYXJlZC9lZmZlY3QtdGFyZ2V0LmpzJztcbmltcG9ydCB7IGdldFNsaWRlVHJhbnNmb3JtRWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRWZmZWN0Q292ZXJmbG93KHtcbiAgc3dpcGVyLFxuICBleHRlbmRQYXJhbXMsXG4gIG9uXG59KSB7XG4gIGV4dGVuZFBhcmFtcyh7XG4gICAgY292ZXJmbG93RWZmZWN0OiB7XG4gICAgICByb3RhdGU6IDUwLFxuICAgICAgc3RyZXRjaDogMCxcbiAgICAgIGRlcHRoOiAxMDAsXG4gICAgICBzY2FsZTogMSxcbiAgICAgIG1vZGlmaWVyOiAxLFxuICAgICAgc2xpZGVTaGFkb3dzOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc2V0VHJhbnNsYXRlID0gKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHdpZHRoOiBzd2lwZXJXaWR0aCxcbiAgICAgIGhlaWdodDogc3dpcGVySGVpZ2h0LFxuICAgICAgc2xpZGVzLFxuICAgICAgc2xpZGVzU2l6ZXNHcmlkXG4gICAgfSA9IHN3aXBlcjtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLmNvdmVyZmxvd0VmZmVjdDtcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCk7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gc3dpcGVyLnRyYW5zbGF0ZTtcbiAgICBjb25zdCBjZW50ZXIgPSBpc0hvcml6b250YWwgPyAtdHJhbnNmb3JtICsgc3dpcGVyV2lkdGggLyAyIDogLXRyYW5zZm9ybSArIHN3aXBlckhlaWdodCAvIDI7XG4gICAgY29uc3Qgcm90YXRlID0gaXNIb3Jpem9udGFsID8gcGFyYW1zLnJvdGF0ZSA6IC1wYXJhbXMucm90YXRlO1xuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHBhcmFtcy5kZXB0aDtcbiAgICAvLyBFYWNoIHNsaWRlIG9mZnNldCBmcm9tIGNlbnRlclxuICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBzbGlkZXMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGNvbnN0IHNsaWRlRWwgPSBzbGlkZXNbaV07XG4gICAgICBjb25zdCBzbGlkZVNpemUgPSBzbGlkZXNTaXplc0dyaWRbaV07XG4gICAgICBjb25zdCBzbGlkZU9mZnNldCA9IHNsaWRlRWwuc3dpcGVyU2xpZGVPZmZzZXQ7XG4gICAgICBjb25zdCBjZW50ZXJPZmZzZXQgPSAoY2VudGVyIC0gc2xpZGVPZmZzZXQgLSBzbGlkZVNpemUgLyAyKSAvIHNsaWRlU2l6ZTtcbiAgICAgIGNvbnN0IG9mZnNldE11bHRpcGxpZXIgPSB0eXBlb2YgcGFyYW1zLm1vZGlmaWVyID09PSAnZnVuY3Rpb24nID8gcGFyYW1zLm1vZGlmaWVyKGNlbnRlck9mZnNldCkgOiBjZW50ZXJPZmZzZXQgKiBwYXJhbXMubW9kaWZpZXI7XG4gICAgICBsZXQgcm90YXRlWSA9IGlzSG9yaXpvbnRhbCA/IHJvdGF0ZSAqIG9mZnNldE11bHRpcGxpZXIgOiAwO1xuICAgICAgbGV0IHJvdGF0ZVggPSBpc0hvcml6b250YWwgPyAwIDogcm90YXRlICogb2Zmc2V0TXVsdGlwbGllcjtcbiAgICAgIC8vIHZhciByb3RhdGVaID0gMFxuICAgICAgbGV0IHRyYW5zbGF0ZVogPSAtdHJhbnNsYXRlICogTWF0aC5hYnMob2Zmc2V0TXVsdGlwbGllcik7XG4gICAgICBsZXQgc3RyZXRjaCA9IHBhcmFtcy5zdHJldGNoO1xuICAgICAgLy8gQWxsb3cgcGVyY2VudGFnZSB0byBtYWtlIGEgcmVsYXRpdmUgc3RyZXRjaCBmb3IgcmVzcG9uc2l2ZSBzbGlkZXJzXG4gICAgICBpZiAodHlwZW9mIHN0cmV0Y2ggPT09ICdzdHJpbmcnICYmIHN0cmV0Y2guaW5kZXhPZignJScpICE9PSAtMSkge1xuICAgICAgICBzdHJldGNoID0gcGFyc2VGbG9hdChwYXJhbXMuc3RyZXRjaCkgLyAxMDAgKiBzbGlkZVNpemU7XG4gICAgICB9XG4gICAgICBsZXQgdHJhbnNsYXRlWSA9IGlzSG9yaXpvbnRhbCA/IDAgOiBzdHJldGNoICogb2Zmc2V0TXVsdGlwbGllcjtcbiAgICAgIGxldCB0cmFuc2xhdGVYID0gaXNIb3Jpem9udGFsID8gc3RyZXRjaCAqIG9mZnNldE11bHRpcGxpZXIgOiAwO1xuICAgICAgbGV0IHNjYWxlID0gMSAtICgxIC0gcGFyYW1zLnNjYWxlKSAqIE1hdGguYWJzKG9mZnNldE11bHRpcGxpZXIpO1xuXG4gICAgICAvLyBGaXggZm9yIHVsdHJhIHNtYWxsIHZhbHVlc1xuICAgICAgaWYgKE1hdGguYWJzKHRyYW5zbGF0ZVgpIDwgMC4wMDEpIHRyYW5zbGF0ZVggPSAwO1xuICAgICAgaWYgKE1hdGguYWJzKHRyYW5zbGF0ZVkpIDwgMC4wMDEpIHRyYW5zbGF0ZVkgPSAwO1xuICAgICAgaWYgKE1hdGguYWJzKHRyYW5zbGF0ZVopIDwgMC4wMDEpIHRyYW5zbGF0ZVogPSAwO1xuICAgICAgaWYgKE1hdGguYWJzKHJvdGF0ZVkpIDwgMC4wMDEpIHJvdGF0ZVkgPSAwO1xuICAgICAgaWYgKE1hdGguYWJzKHJvdGF0ZVgpIDwgMC4wMDEpIHJvdGF0ZVggPSAwO1xuICAgICAgaWYgKE1hdGguYWJzKHNjYWxlKSA8IDAuMDAxKSBzY2FsZSA9IDA7XG4gICAgICBjb25zdCBzbGlkZVRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgke3RyYW5zbGF0ZVh9cHgsJHt0cmFuc2xhdGVZfXB4LCR7dHJhbnNsYXRlWn1weCkgIHJvdGF0ZVgoJHtyb3RhdGVYfWRlZykgcm90YXRlWSgke3JvdGF0ZVl9ZGVnKSBzY2FsZSgke3NjYWxlfSlgO1xuICAgICAgY29uc3QgdGFyZ2V0RWwgPSBlZmZlY3RUYXJnZXQocGFyYW1zLCBzbGlkZUVsKTtcbiAgICAgIHRhcmdldEVsLnN0eWxlLnRyYW5zZm9ybSA9IHNsaWRlVHJhbnNmb3JtO1xuICAgICAgc2xpZGVFbC5zdHlsZS56SW5kZXggPSAtTWF0aC5hYnMoTWF0aC5yb3VuZChvZmZzZXRNdWx0aXBsaWVyKSkgKyAxO1xuICAgICAgaWYgKHBhcmFtcy5zbGlkZVNoYWRvd3MpIHtcbiAgICAgICAgLy8gU2V0IHNoYWRvd3NcbiAgICAgICAgbGV0IHNoYWRvd0JlZm9yZUVsID0gaXNIb3Jpem9udGFsID8gc2xpZGVFbC5xdWVyeVNlbGVjdG9yKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0JykgOiBzbGlkZUVsLnF1ZXJ5U2VsZWN0b3IoJy5zd2lwZXItc2xpZGUtc2hhZG93LXRvcCcpO1xuICAgICAgICBsZXQgc2hhZG93QWZ0ZXJFbCA9IGlzSG9yaXpvbnRhbCA/IHNsaWRlRWwucXVlcnlTZWxlY3RvcignLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQnKSA6IHNsaWRlRWwucXVlcnlTZWxlY3RvcignLnN3aXBlci1zbGlkZS1zaGFkb3ctYm90dG9tJyk7XG4gICAgICAgIGlmICghc2hhZG93QmVmb3JlRWwpIHtcbiAgICAgICAgICBzaGFkb3dCZWZvcmVFbCA9IGNyZWF0ZVNoYWRvdyhwYXJhbXMsIHNsaWRlRWwsIGlzSG9yaXpvbnRhbCA/ICdsZWZ0JyA6ICd0b3AnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNoYWRvd0FmdGVyRWwpIHtcbiAgICAgICAgICBzaGFkb3dBZnRlckVsID0gY3JlYXRlU2hhZG93KHBhcmFtcywgc2xpZGVFbCwgaXNIb3Jpem9udGFsID8gJ3JpZ2h0JyA6ICdib3R0b20nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hhZG93QmVmb3JlRWwpIHNoYWRvd0JlZm9yZUVsLnN0eWxlLm9wYWNpdHkgPSBvZmZzZXRNdWx0aXBsaWVyID4gMCA/IG9mZnNldE11bHRpcGxpZXIgOiAwO1xuICAgICAgICBpZiAoc2hhZG93QWZ0ZXJFbCkgc2hhZG93QWZ0ZXJFbC5zdHlsZS5vcGFjaXR5ID0gLW9mZnNldE11bHRpcGxpZXIgPiAwID8gLW9mZnNldE11bHRpcGxpZXIgOiAwO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3Qgc2V0VHJhbnNpdGlvbiA9IGR1cmF0aW9uID0+IHtcbiAgICBjb25zdCB0cmFuc2Zvcm1FbGVtZW50cyA9IHN3aXBlci5zbGlkZXMubWFwKHNsaWRlRWwgPT4gZ2V0U2xpZGVUcmFuc2Zvcm1FbChzbGlkZUVsKSk7XG4gICAgdHJhbnNmb3JtRWxlbWVudHMuZm9yRWFjaChlbCA9PiB7XG4gICAgICBlbC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSBgJHtkdXJhdGlvbn1tc2A7XG4gICAgICBlbC5xdWVyeVNlbGVjdG9yQWxsKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AsIC5zd2lwZXItc2xpZGUtc2hhZG93LXJpZ2h0LCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20sIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQnKS5mb3JFYWNoKHNoYWRvd0VsID0+IHtcbiAgICAgICAgc2hhZG93RWwuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gYCR7ZHVyYXRpb259bXNgO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG4gIGVmZmVjdEluaXQoe1xuICAgIGVmZmVjdDogJ2NvdmVyZmxvdycsXG4gICAgc3dpcGVyLFxuICAgIG9uLFxuICAgIHNldFRyYW5zbGF0ZSxcbiAgICBzZXRUcmFuc2l0aW9uLFxuICAgIHBlcnNwZWN0aXZlOiAoKSA9PiB0cnVlLFxuICAgIG92ZXJ3cml0ZVBhcmFtczogKCkgPT4gKHtcbiAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWVcbiAgICB9KVxuICB9KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/effect-coverflow/effect-coverflow.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/effect-creative/effect-creative.js\":\r\n/*!************************************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/effect-creative/effect-creative.js ***!\r\n  \\************************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ EffectCreative)\\n/* harmony export */ });\\n/* harmony import */ var _shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/create-shadow.js */ \\\"./node_modules/swiper/shared/create-shadow.js\\\");\\n/* harmony import */ var _shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/effect-init.js */ \\\"./node_modules/swiper/shared/effect-init.js\\\");\\n/* harmony import */ var _shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/effect-target.js */ \\\"./node_modules/swiper/shared/effect-target.js\\\");\\n/* harmony import */ var _shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../shared/effect-virtual-transition-end.js */ \\\"./node_modules/swiper/shared/effect-virtual-transition-end.js\\\");\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\n\\n\\n\\n\\nfunction EffectCreative({\\n  swiper,\\n  extendParams,\\n  on\\n}) {\\n  extendParams({\\n    creativeEffect: {\\n      limitProgress: 1,\\n      shadowPerProgress: false,\\n      progressMultiplier: 1,\\n      perspective: true,\\n      prev: {\\n        translate: [0, 0, 0],\\n        rotate: [0, 0, 0],\\n        opacity: 1,\\n        scale: 1\\n      },\\n      next: {\\n        translate: [0, 0, 0],\\n        rotate: [0, 0, 0],\\n        opacity: 1,\\n        scale: 1\\n      }\\n    }\\n  });\\n  const getTranslateValue = value => {\\n    if (typeof value === 'string') return value;\\n    return `${value}px`;\\n  };\\n  const setTranslate = () => {\\n    const {\\n      slides,\\n      wrapperEl,\\n      slidesSizesGrid\\n    } = swiper;\\n    const params = swiper.params.creativeEffect;\\n    const {\\n      progressMultiplier: multiplier\\n    } = params;\\n    const isCenteredSlides = swiper.params.centeredSlides;\\n    if (isCenteredSlides) {\\n      const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0;\\n      wrapperEl.style.transform = `translateX(calc(50% - ${margin}px))`;\\n    }\\n    for (let i = 0; i < slides.length; i += 1) {\\n      const slideEl = slides[i];\\n      const slideProgress = slideEl.progress;\\n      const progress = Math.min(Math.max(slideEl.progress, -params.limitProgress), params.limitProgress);\\n      let originalProgress = progress;\\n      if (!isCenteredSlides) {\\n        originalProgress = Math.min(Math.max(slideEl.originalProgress, -params.limitProgress), params.limitProgress);\\n      }\\n      const offset = slideEl.swiperSlideOffset;\\n      const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];\\n      const r = [0, 0, 0];\\n      let custom = false;\\n      if (!swiper.isHorizontal()) {\\n        t[1] = t[0];\\n        t[0] = 0;\\n      }\\n      let data = {\\n        translate: [0, 0, 0],\\n        rotate: [0, 0, 0],\\n        scale: 1,\\n        opacity: 1\\n      };\\n      if (progress < 0) {\\n        data = params.next;\\n        custom = true;\\n      } else if (progress > 0) {\\n        data = params.prev;\\n        custom = true;\\n      }\\n      // set translate\\n      t.forEach((value, index) => {\\n        t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`;\\n      });\\n      // set rotates\\n      r.forEach((value, index) => {\\n        r[index] = data.rotate[index] * Math.abs(progress * multiplier);\\n      });\\n      slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\\n      const translateString = t.join(', ');\\n      const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`;\\n      const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`;\\n      const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier;\\n      const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`;\\n\\n      // Set shadows\\n      if (custom && data.shadow || !custom) {\\n        let shadowEl = slideEl.querySelector('.swiper-slide-shadow');\\n        if (!shadowEl && data.shadow) {\\n          shadowEl = (0,_shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(params, slideEl);\\n        }\\n        if (shadowEl) {\\n          const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress;\\n          shadowEl.style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);\\n        }\\n      }\\n      const targetEl = (0,_shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])(params, slideEl);\\n      targetEl.style.transform = transform;\\n      targetEl.style.opacity = opacityString;\\n      if (data.origin) {\\n        targetEl.style.transformOrigin = opacityString;\\n      }\\n    }\\n  };\\n  const setTransition = duration => {\\n    const transformElements = swiper.slides.map(slideEl => (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_4__.getSlideTransformEl)(slideEl));\\n    transformElements.forEach(el => {\\n      el.style.transitionDuration = `${duration}ms`;\\n      el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => {\\n        shadowEl.style.transitionDuration = `${duration}ms`;\\n      });\\n    });\\n    (0,_shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])({\\n      swiper,\\n      duration,\\n      transformElements,\\n      allSlides: true\\n    });\\n  };\\n  (0,_shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])({\\n    effect: 'creative',\\n    swiper,\\n    on,\\n    setTranslate,\\n    setTransition,\\n    perspective: () => swiper.params.creativeEffect.perspective,\\n    overwriteParams: () => ({\\n      watchSlidesProgress: true,\\n      virtualTranslate: !swiper.params.cssMode\\n    })\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvZWZmZWN0LWNyZWF0aXZlL2VmZmVjdC1jcmVhdGl2ZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBeUQ7QUFDSjtBQUNJO0FBQzhCO0FBQzNCO0FBQzdDO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLGNBQWMsTUFBTTtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCxPQUFPO0FBQ2xFO0FBQ0Esb0JBQW9CLG1CQUFtQjtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixNQUFNLFFBQVEsMENBQTBDLElBQUksZ0NBQWdDO0FBQ3ZILE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLHNDQUFzQyxLQUFLLGVBQWUsS0FBSyxlQUFlLEtBQUs7QUFDbkYsMERBQTBELHFEQUFxRCxjQUFjLHFEQUFxRDtBQUNsTDtBQUNBLHVDQUF1QyxnQkFBZ0IsSUFBSSxjQUFjLEVBQUUsWUFBWTs7QUFFdkY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0VBQVk7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9FQUFZO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQscUVBQW1CO0FBQzlFO0FBQ0EsdUNBQXVDLFNBQVM7QUFDaEQ7QUFDQSwrQ0FBK0MsU0FBUztBQUN4RCxPQUFPO0FBQ1AsS0FBSztBQUNMLElBQUksb0ZBQTBCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsRUFBRSxrRUFBVTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvbW9kdWxlcy9lZmZlY3QtY3JlYXRpdmUvZWZmZWN0LWNyZWF0aXZlLmpzPzIzMmEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0ZVNoYWRvdyBmcm9tICcuLi8uLi9zaGFyZWQvY3JlYXRlLXNoYWRvdy5qcyc7XG5pbXBvcnQgZWZmZWN0SW5pdCBmcm9tICcuLi8uLi9zaGFyZWQvZWZmZWN0LWluaXQuanMnO1xuaW1wb3J0IGVmZmVjdFRhcmdldCBmcm9tICcuLi8uLi9zaGFyZWQvZWZmZWN0LXRhcmdldC5qcyc7XG5pbXBvcnQgZWZmZWN0VmlydHVhbFRyYW5zaXRpb25FbmQgZnJvbSAnLi4vLi4vc2hhcmVkL2VmZmVjdC12aXJ0dWFsLXRyYW5zaXRpb24tZW5kLmpzJztcbmltcG9ydCB7IGdldFNsaWRlVHJhbnNmb3JtRWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRWZmZWN0Q3JlYXRpdmUoe1xuICBzd2lwZXIsXG4gIGV4dGVuZFBhcmFtcyxcbiAgb25cbn0pIHtcbiAgZXh0ZW5kUGFyYW1zKHtcbiAgICBjcmVhdGl2ZUVmZmVjdDoge1xuICAgICAgbGltaXRQcm9ncmVzczogMSxcbiAgICAgIHNoYWRvd1BlclByb2dyZXNzOiBmYWxzZSxcbiAgICAgIHByb2dyZXNzTXVsdGlwbGllcjogMSxcbiAgICAgIHBlcnNwZWN0aXZlOiB0cnVlLFxuICAgICAgcHJldjoge1xuICAgICAgICB0cmFuc2xhdGU6IFswLCAwLCAwXSxcbiAgICAgICAgcm90YXRlOiBbMCwgMCwgMF0sXG4gICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgIHNjYWxlOiAxXG4gICAgICB9LFxuICAgICAgbmV4dDoge1xuICAgICAgICB0cmFuc2xhdGU6IFswLCAwLCAwXSxcbiAgICAgICAgcm90YXRlOiBbMCwgMCwgMF0sXG4gICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgIHNjYWxlOiAxXG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgY29uc3QgZ2V0VHJhbnNsYXRlVmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiB2YWx1ZTtcbiAgICByZXR1cm4gYCR7dmFsdWV9cHhgO1xuICB9O1xuICBjb25zdCBzZXRUcmFuc2xhdGUgPSAoKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgc2xpZGVzLFxuICAgICAgd3JhcHBlckVsLFxuICAgICAgc2xpZGVzU2l6ZXNHcmlkXG4gICAgfSA9IHN3aXBlcjtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLmNyZWF0aXZlRWZmZWN0O1xuICAgIGNvbnN0IHtcbiAgICAgIHByb2dyZXNzTXVsdGlwbGllcjogbXVsdGlwbGllclxuICAgIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgaXNDZW50ZXJlZFNsaWRlcyA9IHN3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXM7XG4gICAgaWYgKGlzQ2VudGVyZWRTbGlkZXMpIHtcbiAgICAgIGNvbnN0IG1hcmdpbiA9IHNsaWRlc1NpemVzR3JpZFswXSAvIDIgLSBzd2lwZXIucGFyYW1zLnNsaWRlc09mZnNldEJlZm9yZSB8fCAwO1xuICAgICAgd3JhcHBlckVsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKGNhbGMoNTAlIC0gJHttYXJnaW59cHgpKWA7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjb25zdCBzbGlkZUVsID0gc2xpZGVzW2ldO1xuICAgICAgY29uc3Qgc2xpZGVQcm9ncmVzcyA9IHNsaWRlRWwucHJvZ3Jlc3M7XG4gICAgICBjb25zdCBwcm9ncmVzcyA9IE1hdGgubWluKE1hdGgubWF4KHNsaWRlRWwucHJvZ3Jlc3MsIC1wYXJhbXMubGltaXRQcm9ncmVzcyksIHBhcmFtcy5saW1pdFByb2dyZXNzKTtcbiAgICAgIGxldCBvcmlnaW5hbFByb2dyZXNzID0gcHJvZ3Jlc3M7XG4gICAgICBpZiAoIWlzQ2VudGVyZWRTbGlkZXMpIHtcbiAgICAgICAgb3JpZ2luYWxQcm9ncmVzcyA9IE1hdGgubWluKE1hdGgubWF4KHNsaWRlRWwub3JpZ2luYWxQcm9ncmVzcywgLXBhcmFtcy5saW1pdFByb2dyZXNzKSwgcGFyYW1zLmxpbWl0UHJvZ3Jlc3MpO1xuICAgICAgfVxuICAgICAgY29uc3Qgb2Zmc2V0ID0gc2xpZGVFbC5zd2lwZXJTbGlkZU9mZnNldDtcbiAgICAgIGNvbnN0IHQgPSBbc3dpcGVyLnBhcmFtcy5jc3NNb2RlID8gLW9mZnNldCAtIHN3aXBlci50cmFuc2xhdGUgOiAtb2Zmc2V0LCAwLCAwXTtcbiAgICAgIGNvbnN0IHIgPSBbMCwgMCwgMF07XG4gICAgICBsZXQgY3VzdG9tID0gZmFsc2U7XG4gICAgICBpZiAoIXN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgICAgICB0WzFdID0gdFswXTtcbiAgICAgICAgdFswXSA9IDA7XG4gICAgICB9XG4gICAgICBsZXQgZGF0YSA9IHtcbiAgICAgICAgdHJhbnNsYXRlOiBbMCwgMCwgMF0sXG4gICAgICAgIHJvdGF0ZTogWzAsIDAsIDBdLFxuICAgICAgICBzY2FsZTogMSxcbiAgICAgICAgb3BhY2l0eTogMVxuICAgICAgfTtcbiAgICAgIGlmIChwcm9ncmVzcyA8IDApIHtcbiAgICAgICAgZGF0YSA9IHBhcmFtcy5uZXh0O1xuICAgICAgICBjdXN0b20gPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChwcm9ncmVzcyA+IDApIHtcbiAgICAgICAgZGF0YSA9IHBhcmFtcy5wcmV2O1xuICAgICAgICBjdXN0b20gPSB0cnVlO1xuICAgICAgfVxuICAgICAgLy8gc2V0IHRyYW5zbGF0ZVxuICAgICAgdC5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgdFtpbmRleF0gPSBgY2FsYygke3ZhbHVlfXB4ICsgKCR7Z2V0VHJhbnNsYXRlVmFsdWUoZGF0YS50cmFuc2xhdGVbaW5kZXhdKX0gKiAke01hdGguYWJzKHByb2dyZXNzICogbXVsdGlwbGllcil9KSlgO1xuICAgICAgfSk7XG4gICAgICAvLyBzZXQgcm90YXRlc1xuICAgICAgci5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgcltpbmRleF0gPSBkYXRhLnJvdGF0ZVtpbmRleF0gKiBNYXRoLmFicyhwcm9ncmVzcyAqIG11bHRpcGxpZXIpO1xuICAgICAgfSk7XG4gICAgICBzbGlkZUVsLnN0eWxlLnpJbmRleCA9IC1NYXRoLmFicyhNYXRoLnJvdW5kKHNsaWRlUHJvZ3Jlc3MpKSArIHNsaWRlcy5sZW5ndGg7XG4gICAgICBjb25zdCB0cmFuc2xhdGVTdHJpbmcgPSB0LmpvaW4oJywgJyk7XG4gICAgICBjb25zdCByb3RhdGVTdHJpbmcgPSBgcm90YXRlWCgke3JbMF19ZGVnKSByb3RhdGVZKCR7clsxXX1kZWcpIHJvdGF0ZVooJHtyWzJdfWRlZylgO1xuICAgICAgY29uc3Qgc2NhbGVTdHJpbmcgPSBvcmlnaW5hbFByb2dyZXNzIDwgMCA/IGBzY2FsZSgkezEgKyAoMSAtIGRhdGEuc2NhbGUpICogb3JpZ2luYWxQcm9ncmVzcyAqIG11bHRpcGxpZXJ9KWAgOiBgc2NhbGUoJHsxIC0gKDEgLSBkYXRhLnNjYWxlKSAqIG9yaWdpbmFsUHJvZ3Jlc3MgKiBtdWx0aXBsaWVyfSlgO1xuICAgICAgY29uc3Qgb3BhY2l0eVN0cmluZyA9IG9yaWdpbmFsUHJvZ3Jlc3MgPCAwID8gMSArICgxIC0gZGF0YS5vcGFjaXR5KSAqIG9yaWdpbmFsUHJvZ3Jlc3MgKiBtdWx0aXBsaWVyIDogMSAtICgxIC0gZGF0YS5vcGFjaXR5KSAqIG9yaWdpbmFsUHJvZ3Jlc3MgKiBtdWx0aXBsaWVyO1xuICAgICAgY29uc3QgdHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKCR7dHJhbnNsYXRlU3RyaW5nfSkgJHtyb3RhdGVTdHJpbmd9ICR7c2NhbGVTdHJpbmd9YDtcblxuICAgICAgLy8gU2V0IHNoYWRvd3NcbiAgICAgIGlmIChjdXN0b20gJiYgZGF0YS5zaGFkb3cgfHwgIWN1c3RvbSkge1xuICAgICAgICBsZXQgc2hhZG93RWwgPSBzbGlkZUVsLnF1ZXJ5U2VsZWN0b3IoJy5zd2lwZXItc2xpZGUtc2hhZG93Jyk7XG4gICAgICAgIGlmICghc2hhZG93RWwgJiYgZGF0YS5zaGFkb3cpIHtcbiAgICAgICAgICBzaGFkb3dFbCA9IGNyZWF0ZVNoYWRvdyhwYXJhbXMsIHNsaWRlRWwpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaGFkb3dFbCkge1xuICAgICAgICAgIGNvbnN0IHNoYWRvd09wYWNpdHkgPSBwYXJhbXMuc2hhZG93UGVyUHJvZ3Jlc3MgPyBwcm9ncmVzcyAqICgxIC8gcGFyYW1zLmxpbWl0UHJvZ3Jlc3MpIDogcHJvZ3Jlc3M7XG4gICAgICAgICAgc2hhZG93RWwuc3R5bGUub3BhY2l0eSA9IE1hdGgubWluKE1hdGgubWF4KE1hdGguYWJzKHNoYWRvd09wYWNpdHkpLCAwKSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhcmdldEVsID0gZWZmZWN0VGFyZ2V0KHBhcmFtcywgc2xpZGVFbCk7XG4gICAgICB0YXJnZXRFbC5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgICB0YXJnZXRFbC5zdHlsZS5vcGFjaXR5ID0gb3BhY2l0eVN0cmluZztcbiAgICAgIGlmIChkYXRhLm9yaWdpbikge1xuICAgICAgICB0YXJnZXRFbC5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSBvcGFjaXR5U3RyaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3Qgc2V0VHJhbnNpdGlvbiA9IGR1cmF0aW9uID0+IHtcbiAgICBjb25zdCB0cmFuc2Zvcm1FbGVtZW50cyA9IHN3aXBlci5zbGlkZXMubWFwKHNsaWRlRWwgPT4gZ2V0U2xpZGVUcmFuc2Zvcm1FbChzbGlkZUVsKSk7XG4gICAgdHJhbnNmb3JtRWxlbWVudHMuZm9yRWFjaChlbCA9PiB7XG4gICAgICBlbC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSBgJHtkdXJhdGlvbn1tc2A7XG4gICAgICBlbC5xdWVyeVNlbGVjdG9yQWxsKCcuc3dpcGVyLXNsaWRlLXNoYWRvdycpLmZvckVhY2goc2hhZG93RWwgPT4ge1xuICAgICAgICBzaGFkb3dFbC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSBgJHtkdXJhdGlvbn1tc2A7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBlZmZlY3RWaXJ0dWFsVHJhbnNpdGlvbkVuZCh7XG4gICAgICBzd2lwZXIsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHRyYW5zZm9ybUVsZW1lbnRzLFxuICAgICAgYWxsU2xpZGVzOiB0cnVlXG4gICAgfSk7XG4gIH07XG4gIGVmZmVjdEluaXQoe1xuICAgIGVmZmVjdDogJ2NyZWF0aXZlJyxcbiAgICBzd2lwZXIsXG4gICAgb24sXG4gICAgc2V0VHJhbnNsYXRlLFxuICAgIHNldFRyYW5zaXRpb24sXG4gICAgcGVyc3BlY3RpdmU6ICgpID0+IHN3aXBlci5wYXJhbXMuY3JlYXRpdmVFZmZlY3QucGVyc3BlY3RpdmUsXG4gICAgb3ZlcndyaXRlUGFyYW1zOiAoKSA9PiAoe1xuICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgIHZpcnR1YWxUcmFuc2xhdGU6ICFzd2lwZXIucGFyYW1zLmNzc01vZGVcbiAgICB9KVxuICB9KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/effect-creative/effect-creative.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/effect-cube/effect-cube.js\":\r\n/*!****************************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/effect-cube/effect-cube.js ***!\r\n  \\****************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ EffectCube)\\n/* harmony export */ });\\n/* harmony import */ var _shared_effect_init_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/effect-init.js */ \\\"./node_modules/swiper/shared/effect-init.js\\\");\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\n\\nfunction EffectCube({\\n  swiper,\\n  extendParams,\\n  on\\n}) {\\n  extendParams({\\n    cubeEffect: {\\n      slideShadows: true,\\n      shadow: true,\\n      shadowOffset: 20,\\n      shadowScale: 0.94\\n    }\\n  });\\n  const createSlideShadows = (slideEl, progress, isHorizontal) => {\\n    let shadowBefore = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\\n    let shadowAfter = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\\n    if (!shadowBefore) {\\n      shadowBefore = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.createElement)('div', `swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}`);\\n      slideEl.append(shadowBefore);\\n    }\\n    if (!shadowAfter) {\\n      shadowAfter = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.createElement)('div', `swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}`);\\n      slideEl.append(shadowAfter);\\n    }\\n    if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);\\n    if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);\\n  };\\n  const recreateShadows = () => {\\n    // create new ones\\n    const isHorizontal = swiper.isHorizontal();\\n    swiper.slides.forEach(slideEl => {\\n      const progress = Math.max(Math.min(slideEl.progress, 1), -1);\\n      createSlideShadows(slideEl, progress, isHorizontal);\\n    });\\n  };\\n  const setTranslate = () => {\\n    const {\\n      el,\\n      wrapperEl,\\n      slides,\\n      width: swiperWidth,\\n      height: swiperHeight,\\n      rtlTranslate: rtl,\\n      size: swiperSize,\\n      browser\\n    } = swiper;\\n    const params = swiper.params.cubeEffect;\\n    const isHorizontal = swiper.isHorizontal();\\n    const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\\n    let wrapperRotate = 0;\\n    let cubeShadowEl;\\n    if (params.shadow) {\\n      if (isHorizontal) {\\n        cubeShadowEl = swiper.slidesEl.querySelector('.swiper-cube-shadow');\\n        if (!cubeShadowEl) {\\n          cubeShadowEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.createElement)('div', 'swiper-cube-shadow');\\n          swiper.slidesEl.append(cubeShadowEl);\\n        }\\n        cubeShadowEl.style.height = `${swiperWidth}px`;\\n      } else {\\n        cubeShadowEl = el.querySelector('.swiper-cube-shadow');\\n        if (!cubeShadowEl) {\\n          cubeShadowEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.createElement)('div', 'swiper-cube-shadow');\\n          el.append(cubeShadowEl);\\n        }\\n      }\\n    }\\n    for (let i = 0; i < slides.length; i += 1) {\\n      const slideEl = slides[i];\\n      let slideIndex = i;\\n      if (isVirtual) {\\n        slideIndex = parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10);\\n      }\\n      let slideAngle = slideIndex * 90;\\n      let round = Math.floor(slideAngle / 360);\\n      if (rtl) {\\n        slideAngle = -slideAngle;\\n        round = Math.floor(-slideAngle / 360);\\n      }\\n      const progress = Math.max(Math.min(slideEl.progress, 1), -1);\\n      let tx = 0;\\n      let ty = 0;\\n      let tz = 0;\\n      if (slideIndex % 4 === 0) {\\n        tx = -round * 4 * swiperSize;\\n        tz = 0;\\n      } else if ((slideIndex - 1) % 4 === 0) {\\n        tx = 0;\\n        tz = -round * 4 * swiperSize;\\n      } else if ((slideIndex - 2) % 4 === 0) {\\n        tx = swiperSize + round * 4 * swiperSize;\\n        tz = swiperSize;\\n      } else if ((slideIndex - 3) % 4 === 0) {\\n        tx = -swiperSize;\\n        tz = 3 * swiperSize + swiperSize * 4 * round;\\n      }\\n      if (rtl) {\\n        tx = -tx;\\n      }\\n      if (!isHorizontal) {\\n        ty = tx;\\n        tx = 0;\\n      }\\n      const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\\n      if (progress <= 1 && progress > -1) {\\n        wrapperRotate = slideIndex * 90 + progress * 90;\\n        if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\\n      }\\n      slideEl.style.transform = transform;\\n      if (params.slideShadows) {\\n        createSlideShadows(slideEl, progress, isHorizontal);\\n      }\\n    }\\n    wrapperEl.style.transformOrigin = `50% 50% -${swiperSize / 2}px`;\\n    wrapperEl.style['-webkit-transform-origin'] = `50% 50% -${swiperSize / 2}px`;\\n    if (params.shadow) {\\n      if (isHorizontal) {\\n        cubeShadowEl.style.transform = `translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`;\\n      } else {\\n        const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\\n        const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\\n        const scale1 = params.shadowScale;\\n        const scale2 = params.shadowScale / multiplier;\\n        const offset = params.shadowOffset;\\n        cubeShadowEl.style.transform = `scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`;\\n      }\\n    }\\n    const zFactor = (browser.isSafari || browser.isWebView) && browser.needPerspectiveFix ? -swiperSize / 2 : 0;\\n    wrapperEl.style.transform = `translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`;\\n    wrapperEl.style.setProperty('--swiper-cube-translate-z', `${zFactor}px`);\\n  };\\n  const setTransition = duration => {\\n    const {\\n      el,\\n      slides\\n    } = swiper;\\n    slides.forEach(slideEl => {\\n      slideEl.style.transitionDuration = `${duration}ms`;\\n      slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(subEl => {\\n        subEl.style.transitionDuration = `${duration}ms`;\\n      });\\n    });\\n    if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\\n      const shadowEl = el.querySelector('.swiper-cube-shadow');\\n      if (shadowEl) shadowEl.style.transitionDuration = `${duration}ms`;\\n    }\\n  };\\n  (0,_shared_effect_init_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])({\\n    effect: 'cube',\\n    swiper,\\n    on,\\n    setTranslate,\\n    setTransition,\\n    recreateShadows,\\n    getEffectParams: () => swiper.params.cubeEffect,\\n    perspective: () => true,\\n    overwriteParams: () => ({\\n      slidesPerView: 1,\\n      slidesPerGroup: 1,\\n      watchSlidesProgress: true,\\n      resistanceRatio: 0,\\n      spaceBetween: 0,\\n      centeredSlides: false,\\n      virtualTranslate: true\\n    })\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvZWZmZWN0LWN1YmUvZWZmZWN0LWN1YmUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQXFEO0FBQ0M7QUFDdkM7QUFDZjtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsK0RBQWEsK0JBQStCLDhCQUE4QjtBQUMvRjtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsK0RBQWEsK0JBQStCLGtDQUFrQztBQUNsRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLCtEQUFhO0FBQ3RDO0FBQ0E7QUFDQSx1Q0FBdUMsWUFBWTtBQUNuRCxRQUFRO0FBQ1I7QUFDQTtBQUNBLHlCQUF5QiwrREFBYTtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixtQkFBbUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQywrQkFBK0IsZUFBZSw4QkFBOEIsbUJBQW1CLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRztBQUN2SjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0QsZUFBZTtBQUNqRSw4REFBOEQsZUFBZTtBQUM3RTtBQUNBO0FBQ0EsMkRBQTJELHNDQUFzQyxNQUFNLGlCQUFpQix5Q0FBeUMsbUJBQW1CO0FBQ3BMLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELE9BQU8sT0FBTyxPQUFPLHFCQUFxQiwwQkFBMEIsTUFBTSwyQkFBMkI7QUFDdko7QUFDQTtBQUNBO0FBQ0EscURBQXFELFFBQVEsY0FBYywwQ0FBMEMsZUFBZSwyQ0FBMkM7QUFDL0ssZ0VBQWdFLFFBQVE7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLDRDQUE0QyxTQUFTO0FBQ3JEO0FBQ0EsNENBQTRDLFNBQVM7QUFDckQsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsMkRBQTJELFNBQVM7QUFDcEU7QUFDQTtBQUNBLEVBQUUsa0VBQVU7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvbW9kdWxlcy9lZmZlY3QtY3ViZS9lZmZlY3QtY3ViZS5qcz84Nzg4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBlZmZlY3RJbml0IGZyb20gJy4uLy4uL3NoYXJlZC9lZmZlY3QtaW5pdC5qcyc7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEVmZmVjdEN1YmUoe1xuICBzd2lwZXIsXG4gIGV4dGVuZFBhcmFtcyxcbiAgb25cbn0pIHtcbiAgZXh0ZW5kUGFyYW1zKHtcbiAgICBjdWJlRWZmZWN0OiB7XG4gICAgICBzbGlkZVNoYWRvd3M6IHRydWUsXG4gICAgICBzaGFkb3c6IHRydWUsXG4gICAgICBzaGFkb3dPZmZzZXQ6IDIwLFxuICAgICAgc2hhZG93U2NhbGU6IDAuOTRcbiAgICB9XG4gIH0pO1xuICBjb25zdCBjcmVhdGVTbGlkZVNoYWRvd3MgPSAoc2xpZGVFbCwgcHJvZ3Jlc3MsIGlzSG9yaXpvbnRhbCkgPT4ge1xuICAgIGxldCBzaGFkb3dCZWZvcmUgPSBpc0hvcml6b250YWwgPyBzbGlkZUVsLnF1ZXJ5U2VsZWN0b3IoJy5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQnKSA6IHNsaWRlRWwucXVlcnlTZWxlY3RvcignLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wJyk7XG4gICAgbGV0IHNoYWRvd0FmdGVyID0gaXNIb3Jpem9udGFsID8gc2xpZGVFbC5xdWVyeVNlbGVjdG9yKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCcpIDogc2xpZGVFbC5xdWVyeVNlbGVjdG9yKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20nKTtcbiAgICBpZiAoIXNoYWRvd0JlZm9yZSkge1xuICAgICAgc2hhZG93QmVmb3JlID0gY3JlYXRlRWxlbWVudCgnZGl2JywgYHN3aXBlci1zbGlkZS1zaGFkb3ctJHtpc0hvcml6b250YWwgPyAnbGVmdCcgOiAndG9wJ31gKTtcbiAgICAgIHNsaWRlRWwuYXBwZW5kKHNoYWRvd0JlZm9yZSk7XG4gICAgfVxuICAgIGlmICghc2hhZG93QWZ0ZXIpIHtcbiAgICAgIHNoYWRvd0FmdGVyID0gY3JlYXRlRWxlbWVudCgnZGl2JywgYHN3aXBlci1zbGlkZS1zaGFkb3ctJHtpc0hvcml6b250YWwgPyAncmlnaHQnIDogJ2JvdHRvbSd9YCk7XG4gICAgICBzbGlkZUVsLmFwcGVuZChzaGFkb3dBZnRlcik7XG4gICAgfVxuICAgIGlmIChzaGFkb3dCZWZvcmUpIHNoYWRvd0JlZm9yZS5zdHlsZS5vcGFjaXR5ID0gTWF0aC5tYXgoLXByb2dyZXNzLCAwKTtcbiAgICBpZiAoc2hhZG93QWZ0ZXIpIHNoYWRvd0FmdGVyLnN0eWxlLm9wYWNpdHkgPSBNYXRoLm1heChwcm9ncmVzcywgMCk7XG4gIH07XG4gIGNvbnN0IHJlY3JlYXRlU2hhZG93cyA9ICgpID0+IHtcbiAgICAvLyBjcmVhdGUgbmV3IG9uZXNcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCk7XG4gICAgc3dpcGVyLnNsaWRlcy5mb3JFYWNoKHNsaWRlRWwgPT4ge1xuICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLm1heChNYXRoLm1pbihzbGlkZUVsLnByb2dyZXNzLCAxKSwgLTEpO1xuICAgICAgY3JlYXRlU2xpZGVTaGFkb3dzKHNsaWRlRWwsIHByb2dyZXNzLCBpc0hvcml6b250YWwpO1xuICAgIH0pO1xuICB9O1xuICBjb25zdCBzZXRUcmFuc2xhdGUgPSAoKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZWwsXG4gICAgICB3cmFwcGVyRWwsXG4gICAgICBzbGlkZXMsXG4gICAgICB3aWR0aDogc3dpcGVyV2lkdGgsXG4gICAgICBoZWlnaHQ6IHN3aXBlckhlaWdodCxcbiAgICAgIHJ0bFRyYW5zbGF0ZTogcnRsLFxuICAgICAgc2l6ZTogc3dpcGVyU2l6ZSxcbiAgICAgIGJyb3dzZXJcbiAgICB9ID0gc3dpcGVyO1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuY3ViZUVmZmVjdDtcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCk7XG4gICAgY29uc3QgaXNWaXJ0dWFsID0gc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQ7XG4gICAgbGV0IHdyYXBwZXJSb3RhdGUgPSAwO1xuICAgIGxldCBjdWJlU2hhZG93RWw7XG4gICAgaWYgKHBhcmFtcy5zaGFkb3cpIHtcbiAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgY3ViZVNoYWRvd0VsID0gc3dpcGVyLnNsaWRlc0VsLnF1ZXJ5U2VsZWN0b3IoJy5zd2lwZXItY3ViZS1zaGFkb3cnKTtcbiAgICAgICAgaWYgKCFjdWJlU2hhZG93RWwpIHtcbiAgICAgICAgICBjdWJlU2hhZG93RWwgPSBjcmVhdGVFbGVtZW50KCdkaXYnLCAnc3dpcGVyLWN1YmUtc2hhZG93Jyk7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlc0VsLmFwcGVuZChjdWJlU2hhZG93RWwpO1xuICAgICAgICB9XG4gICAgICAgIGN1YmVTaGFkb3dFbC5zdHlsZS5oZWlnaHQgPSBgJHtzd2lwZXJXaWR0aH1weGA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdWJlU2hhZG93RWwgPSBlbC5xdWVyeVNlbGVjdG9yKCcuc3dpcGVyLWN1YmUtc2hhZG93Jyk7XG4gICAgICAgIGlmICghY3ViZVNoYWRvd0VsKSB7XG4gICAgICAgICAgY3ViZVNoYWRvd0VsID0gY3JlYXRlRWxlbWVudCgnZGl2JywgJ3N3aXBlci1jdWJlLXNoYWRvdycpO1xuICAgICAgICAgIGVsLmFwcGVuZChjdWJlU2hhZG93RWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBjb25zdCBzbGlkZUVsID0gc2xpZGVzW2ldO1xuICAgICAgbGV0IHNsaWRlSW5kZXggPSBpO1xuICAgICAgaWYgKGlzVmlydHVhbCkge1xuICAgICAgICBzbGlkZUluZGV4ID0gcGFyc2VJbnQoc2xpZGVFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JyksIDEwKTtcbiAgICAgIH1cbiAgICAgIGxldCBzbGlkZUFuZ2xlID0gc2xpZGVJbmRleCAqIDkwO1xuICAgICAgbGV0IHJvdW5kID0gTWF0aC5mbG9vcihzbGlkZUFuZ2xlIC8gMzYwKTtcbiAgICAgIGlmIChydGwpIHtcbiAgICAgICAgc2xpZGVBbmdsZSA9IC1zbGlkZUFuZ2xlO1xuICAgICAgICByb3VuZCA9IE1hdGguZmxvb3IoLXNsaWRlQW5nbGUgLyAzNjApO1xuICAgICAgfVxuICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLm1heChNYXRoLm1pbihzbGlkZUVsLnByb2dyZXNzLCAxKSwgLTEpO1xuICAgICAgbGV0IHR4ID0gMDtcbiAgICAgIGxldCB0eSA9IDA7XG4gICAgICBsZXQgdHogPSAwO1xuICAgICAgaWYgKHNsaWRlSW5kZXggJSA0ID09PSAwKSB7XG4gICAgICAgIHR4ID0gLXJvdW5kICogNCAqIHN3aXBlclNpemU7XG4gICAgICAgIHR6ID0gMDtcbiAgICAgIH0gZWxzZSBpZiAoKHNsaWRlSW5kZXggLSAxKSAlIDQgPT09IDApIHtcbiAgICAgICAgdHggPSAwO1xuICAgICAgICB0eiA9IC1yb3VuZCAqIDQgKiBzd2lwZXJTaXplO1xuICAgICAgfSBlbHNlIGlmICgoc2xpZGVJbmRleCAtIDIpICUgNCA9PT0gMCkge1xuICAgICAgICB0eCA9IHN3aXBlclNpemUgKyByb3VuZCAqIDQgKiBzd2lwZXJTaXplO1xuICAgICAgICB0eiA9IHN3aXBlclNpemU7XG4gICAgICB9IGVsc2UgaWYgKChzbGlkZUluZGV4IC0gMykgJSA0ID09PSAwKSB7XG4gICAgICAgIHR4ID0gLXN3aXBlclNpemU7XG4gICAgICAgIHR6ID0gMyAqIHN3aXBlclNpemUgKyBzd2lwZXJTaXplICogNCAqIHJvdW5kO1xuICAgICAgfVxuICAgICAgaWYgKHJ0bCkge1xuICAgICAgICB0eCA9IC10eDtcbiAgICAgIH1cbiAgICAgIGlmICghaXNIb3Jpem9udGFsKSB7XG4gICAgICAgIHR5ID0gdHg7XG4gICAgICAgIHR4ID0gMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IGByb3RhdGVYKCR7aXNIb3Jpem9udGFsID8gMCA6IC1zbGlkZUFuZ2xlfWRlZykgcm90YXRlWSgke2lzSG9yaXpvbnRhbCA/IHNsaWRlQW5nbGUgOiAwfWRlZykgdHJhbnNsYXRlM2QoJHt0eH1weCwgJHt0eX1weCwgJHt0en1weClgO1xuICAgICAgaWYgKHByb2dyZXNzIDw9IDEgJiYgcHJvZ3Jlc3MgPiAtMSkge1xuICAgICAgICB3cmFwcGVyUm90YXRlID0gc2xpZGVJbmRleCAqIDkwICsgcHJvZ3Jlc3MgKiA5MDtcbiAgICAgICAgaWYgKHJ0bCkgd3JhcHBlclJvdGF0ZSA9IC1zbGlkZUluZGV4ICogOTAgLSBwcm9ncmVzcyAqIDkwO1xuICAgICAgfVxuICAgICAgc2xpZGVFbC5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgICBpZiAocGFyYW1zLnNsaWRlU2hhZG93cykge1xuICAgICAgICBjcmVhdGVTbGlkZVNoYWRvd3Moc2xpZGVFbCwgcHJvZ3Jlc3MsIGlzSG9yaXpvbnRhbCk7XG4gICAgICB9XG4gICAgfVxuICAgIHdyYXBwZXJFbC5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSBgNTAlIDUwJSAtJHtzd2lwZXJTaXplIC8gMn1weGA7XG4gICAgd3JhcHBlckVsLnN0eWxlWyctd2Via2l0LXRyYW5zZm9ybS1vcmlnaW4nXSA9IGA1MCUgNTAlIC0ke3N3aXBlclNpemUgLyAyfXB4YDtcbiAgICBpZiAocGFyYW1zLnNoYWRvdykge1xuICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICBjdWJlU2hhZG93RWwuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKDBweCwgJHtzd2lwZXJXaWR0aCAvIDIgKyBwYXJhbXMuc2hhZG93T2Zmc2V0fXB4LCAkey1zd2lwZXJXaWR0aCAvIDJ9cHgpIHJvdGF0ZVgoOTBkZWcpIHJvdGF0ZVooMGRlZykgc2NhbGUoJHtwYXJhbXMuc2hhZG93U2NhbGV9KWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzaGFkb3dBbmdsZSA9IE1hdGguYWJzKHdyYXBwZXJSb3RhdGUpIC0gTWF0aC5mbG9vcihNYXRoLmFicyh3cmFwcGVyUm90YXRlKSAvIDkwKSAqIDkwO1xuICAgICAgICBjb25zdCBtdWx0aXBsaWVyID0gMS41IC0gKE1hdGguc2luKHNoYWRvd0FuZ2xlICogMiAqIE1hdGguUEkgLyAzNjApIC8gMiArIE1hdGguY29zKHNoYWRvd0FuZ2xlICogMiAqIE1hdGguUEkgLyAzNjApIC8gMik7XG4gICAgICAgIGNvbnN0IHNjYWxlMSA9IHBhcmFtcy5zaGFkb3dTY2FsZTtcbiAgICAgICAgY29uc3Qgc2NhbGUyID0gcGFyYW1zLnNoYWRvd1NjYWxlIC8gbXVsdGlwbGllcjtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFyYW1zLnNoYWRvd09mZnNldDtcbiAgICAgICAgY3ViZVNoYWRvd0VsLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZTNkKCR7c2NhbGUxfSwgMSwgJHtzY2FsZTJ9KSB0cmFuc2xhdGUzZCgwcHgsICR7c3dpcGVySGVpZ2h0IC8gMiArIG9mZnNldH1weCwgJHstc3dpcGVySGVpZ2h0IC8gMiAvIHNjYWxlMn1weCkgcm90YXRlWCgtOTBkZWcpYDtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgekZhY3RvciA9IChicm93c2VyLmlzU2FmYXJpIHx8IGJyb3dzZXIuaXNXZWJWaWV3KSAmJiBicm93c2VyLm5lZWRQZXJzcGVjdGl2ZUZpeCA/IC1zd2lwZXJTaXplIC8gMiA6IDA7XG4gICAgd3JhcHBlckVsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgwcHgsMCwke3pGYWN0b3J9cHgpIHJvdGF0ZVgoJHtzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAwIDogd3JhcHBlclJvdGF0ZX1kZWcpIHJvdGF0ZVkoJHtzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAtd3JhcHBlclJvdGF0ZSA6IDB9ZGVnKWA7XG4gICAgd3JhcHBlckVsLnN0eWxlLnNldFByb3BlcnR5KCctLXN3aXBlci1jdWJlLXRyYW5zbGF0ZS16JywgYCR7ekZhY3Rvcn1weGApO1xuICB9O1xuICBjb25zdCBzZXRUcmFuc2l0aW9uID0gZHVyYXRpb24gPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGVsLFxuICAgICAgc2xpZGVzXG4gICAgfSA9IHN3aXBlcjtcbiAgICBzbGlkZXMuZm9yRWFjaChzbGlkZUVsID0+IHtcbiAgICAgIHNsaWRlRWwuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gYCR7ZHVyYXRpb259bXNgO1xuICAgICAgc2xpZGVFbC5xdWVyeVNlbGVjdG9yQWxsKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AsIC5zd2lwZXItc2xpZGUtc2hhZG93LXJpZ2h0LCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20sIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQnKS5mb3JFYWNoKHN1YkVsID0+IHtcbiAgICAgICAgc3ViRWwuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gYCR7ZHVyYXRpb259bXNgO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuY3ViZUVmZmVjdC5zaGFkb3cgJiYgIXN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgICAgY29uc3Qgc2hhZG93RWwgPSBlbC5xdWVyeVNlbGVjdG9yKCcuc3dpcGVyLWN1YmUtc2hhZG93Jyk7XG4gICAgICBpZiAoc2hhZG93RWwpIHNoYWRvd0VsLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IGAke2R1cmF0aW9ufW1zYDtcbiAgICB9XG4gIH07XG4gIGVmZmVjdEluaXQoe1xuICAgIGVmZmVjdDogJ2N1YmUnLFxuICAgIHN3aXBlcixcbiAgICBvbixcbiAgICBzZXRUcmFuc2xhdGUsXG4gICAgc2V0VHJhbnNpdGlvbixcbiAgICByZWNyZWF0ZVNoYWRvd3MsXG4gICAgZ2V0RWZmZWN0UGFyYW1zOiAoKSA9PiBzd2lwZXIucGFyYW1zLmN1YmVFZmZlY3QsXG4gICAgcGVyc3BlY3RpdmU6ICgpID0+IHRydWUsXG4gICAgb3ZlcndyaXRlUGFyYW1zOiAoKSA9PiAoe1xuICAgICAgc2xpZGVzUGVyVmlldzogMSxcbiAgICAgIHNsaWRlc1Blckdyb3VwOiAxLFxuICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgIHJlc2lzdGFuY2VSYXRpbzogMCxcbiAgICAgIHNwYWNlQmV0d2VlbjogMCxcbiAgICAgIGNlbnRlcmVkU2xpZGVzOiBmYWxzZSxcbiAgICAgIHZpcnR1YWxUcmFuc2xhdGU6IHRydWVcbiAgICB9KVxuICB9KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/effect-cube/effect-cube.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/effect-fade/effect-fade.js\":\r\n/*!****************************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/effect-fade/effect-fade.js ***!\r\n  \\****************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ EffectFade)\\n/* harmony export */ });\\n/* harmony import */ var _shared_effect_init_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/effect-init.js */ \\\"./node_modules/swiper/shared/effect-init.js\\\");\\n/* harmony import */ var _shared_effect_target_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/effect-target.js */ \\\"./node_modules/swiper/shared/effect-target.js\\\");\\n/* harmony import */ var _shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/effect-virtual-transition-end.js */ \\\"./node_modules/swiper/shared/effect-virtual-transition-end.js\\\");\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\n\\n\\n\\nfunction EffectFade({\\n  swiper,\\n  extendParams,\\n  on\\n}) {\\n  extendParams({\\n    fadeEffect: {\\n      crossFade: false\\n    }\\n  });\\n  const setTranslate = () => {\\n    const {\\n      slides\\n    } = swiper;\\n    const params = swiper.params.fadeEffect;\\n    for (let i = 0; i < slides.length; i += 1) {\\n      const slideEl = swiper.slides[i];\\n      const offset = slideEl.swiperSlideOffset;\\n      let tx = -offset;\\n      if (!swiper.params.virtualTranslate) tx -= swiper.translate;\\n      let ty = 0;\\n      if (!swiper.isHorizontal()) {\\n        ty = tx;\\n        tx = 0;\\n      }\\n      const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(slideEl.progress), 0) : 1 + Math.min(Math.max(slideEl.progress, -1), 0);\\n      const targetEl = (0,_shared_effect_target_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(params, slideEl);\\n      targetEl.style.opacity = slideOpacity;\\n      targetEl.style.transform = `translate3d(${tx}px, ${ty}px, 0px)`;\\n    }\\n  };\\n  const setTransition = duration => {\\n    const transformElements = swiper.slides.map(slideEl => (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_3__.getSlideTransformEl)(slideEl));\\n    transformElements.forEach(el => {\\n      el.style.transitionDuration = `${duration}ms`;\\n    });\\n    (0,_shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])({\\n      swiper,\\n      duration,\\n      transformElements,\\n      allSlides: true\\n    });\\n  };\\n  (0,_shared_effect_init_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])({\\n    effect: 'fade',\\n    swiper,\\n    on,\\n    setTranslate,\\n    setTransition,\\n    overwriteParams: () => ({\\n      slidesPerView: 1,\\n      slidesPerGroup: 1,\\n      watchSlidesProgress: true,\\n      spaceBetween: 0,\\n      virtualTranslate: !swiper.params.cssMode\\n    })\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvZWZmZWN0LWZhZGUvZWZmZWN0LWZhZGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBcUQ7QUFDSTtBQUM4QjtBQUMzQjtBQUM3QztBQUNmO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxvQkFBb0IsbUJBQW1CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLG9FQUFZO0FBQ25DO0FBQ0EsZ0RBQWdELEdBQUcsTUFBTSxHQUFHO0FBQzVEO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCxxRUFBbUI7QUFDOUU7QUFDQSx1Q0FBdUMsU0FBUztBQUNoRCxLQUFLO0FBQ0wsSUFBSSxvRkFBMEI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxFQUFFLGtFQUFVO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvbW9kdWxlcy9lZmZlY3QtZmFkZS9lZmZlY3QtZmFkZS5qcz84N2RmIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBlZmZlY3RJbml0IGZyb20gJy4uLy4uL3NoYXJlZC9lZmZlY3QtaW5pdC5qcyc7XG5pbXBvcnQgZWZmZWN0VGFyZ2V0IGZyb20gJy4uLy4uL3NoYXJlZC9lZmZlY3QtdGFyZ2V0LmpzJztcbmltcG9ydCBlZmZlY3RWaXJ0dWFsVHJhbnNpdGlvbkVuZCBmcm9tICcuLi8uLi9zaGFyZWQvZWZmZWN0LXZpcnR1YWwtdHJhbnNpdGlvbi1lbmQuanMnO1xuaW1wb3J0IHsgZ2V0U2xpZGVUcmFuc2Zvcm1FbCB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBFZmZlY3RGYWRlKHtcbiAgc3dpcGVyLFxuICBleHRlbmRQYXJhbXMsXG4gIG9uXG59KSB7XG4gIGV4dGVuZFBhcmFtcyh7XG4gICAgZmFkZUVmZmVjdDoge1xuICAgICAgY3Jvc3NGYWRlOiBmYWxzZVxuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHNldFRyYW5zbGF0ZSA9ICgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBzbGlkZXNcbiAgICB9ID0gc3dpcGVyO1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuZmFkZUVmZmVjdDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY29uc3Qgc2xpZGVFbCA9IHN3aXBlci5zbGlkZXNbaV07XG4gICAgICBjb25zdCBvZmZzZXQgPSBzbGlkZUVsLnN3aXBlclNsaWRlT2Zmc2V0O1xuICAgICAgbGV0IHR4ID0gLW9mZnNldDtcbiAgICAgIGlmICghc3dpcGVyLnBhcmFtcy52aXJ0dWFsVHJhbnNsYXRlKSB0eCAtPSBzd2lwZXIudHJhbnNsYXRlO1xuICAgICAgbGV0IHR5ID0gMDtcbiAgICAgIGlmICghc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgIHR5ID0gdHg7XG4gICAgICAgIHR4ID0gMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNsaWRlT3BhY2l0eSA9IHN3aXBlci5wYXJhbXMuZmFkZUVmZmVjdC5jcm9zc0ZhZGUgPyBNYXRoLm1heCgxIC0gTWF0aC5hYnMoc2xpZGVFbC5wcm9ncmVzcyksIDApIDogMSArIE1hdGgubWluKE1hdGgubWF4KHNsaWRlRWwucHJvZ3Jlc3MsIC0xKSwgMCk7XG4gICAgICBjb25zdCB0YXJnZXRFbCA9IGVmZmVjdFRhcmdldChwYXJhbXMsIHNsaWRlRWwpO1xuICAgICAgdGFyZ2V0RWwuc3R5bGUub3BhY2l0eSA9IHNsaWRlT3BhY2l0eTtcbiAgICAgIHRhcmdldEVsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgke3R4fXB4LCAke3R5fXB4LCAwcHgpYDtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHNldFRyYW5zaXRpb24gPSBkdXJhdGlvbiA9PiB7XG4gICAgY29uc3QgdHJhbnNmb3JtRWxlbWVudHMgPSBzd2lwZXIuc2xpZGVzLm1hcChzbGlkZUVsID0+IGdldFNsaWRlVHJhbnNmb3JtRWwoc2xpZGVFbCkpO1xuICAgIHRyYW5zZm9ybUVsZW1lbnRzLmZvckVhY2goZWwgPT4ge1xuICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gYCR7ZHVyYXRpb259bXNgO1xuICAgIH0pO1xuICAgIGVmZmVjdFZpcnR1YWxUcmFuc2l0aW9uRW5kKHtcbiAgICAgIHN3aXBlcixcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgdHJhbnNmb3JtRWxlbWVudHMsXG4gICAgICBhbGxTbGlkZXM6IHRydWVcbiAgICB9KTtcbiAgfTtcbiAgZWZmZWN0SW5pdCh7XG4gICAgZWZmZWN0OiAnZmFkZScsXG4gICAgc3dpcGVyLFxuICAgIG9uLFxuICAgIHNldFRyYW5zbGF0ZSxcbiAgICBzZXRUcmFuc2l0aW9uLFxuICAgIG92ZXJ3cml0ZVBhcmFtczogKCkgPT4gKHtcbiAgICAgIHNsaWRlc1BlclZpZXc6IDEsXG4gICAgICBzbGlkZXNQZXJHcm91cDogMSxcbiAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXG4gICAgICBzcGFjZUJldHdlZW46IDAsXG4gICAgICB2aXJ0dWFsVHJhbnNsYXRlOiAhc3dpcGVyLnBhcmFtcy5jc3NNb2RlXG4gICAgfSlcbiAgfSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/effect-fade/effect-fade.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/effect-flip/effect-flip.js\":\r\n/*!****************************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/effect-flip/effect-flip.js ***!\r\n  \\****************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ EffectFlip)\\n/* harmony export */ });\\n/* harmony import */ var _shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/create-shadow.js */ \\\"./node_modules/swiper/shared/create-shadow.js\\\");\\n/* harmony import */ var _shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/effect-init.js */ \\\"./node_modules/swiper/shared/effect-init.js\\\");\\n/* harmony import */ var _shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/effect-target.js */ \\\"./node_modules/swiper/shared/effect-target.js\\\");\\n/* harmony import */ var _shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../shared/effect-virtual-transition-end.js */ \\\"./node_modules/swiper/shared/effect-virtual-transition-end.js\\\");\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\n\\n\\n\\n\\nfunction EffectFlip({\\n  swiper,\\n  extendParams,\\n  on\\n}) {\\n  extendParams({\\n    flipEffect: {\\n      slideShadows: true,\\n      limitRotation: true\\n    }\\n  });\\n  const createSlideShadows = (slideEl, progress, params) => {\\n    let shadowBefore = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\\n    let shadowAfter = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\\n    if (!shadowBefore) {\\n      shadowBefore = (0,_shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(params, slideEl, swiper.isHorizontal() ? 'left' : 'top');\\n    }\\n    if (!shadowAfter) {\\n      shadowAfter = (0,_shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(params, slideEl, swiper.isHorizontal() ? 'right' : 'bottom');\\n    }\\n    if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);\\n    if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);\\n  };\\n  const recreateShadows = () => {\\n    // Set shadows\\n    const params = swiper.params.flipEffect;\\n    swiper.slides.forEach(slideEl => {\\n      let progress = slideEl.progress;\\n      if (swiper.params.flipEffect.limitRotation) {\\n        progress = Math.max(Math.min(slideEl.progress, 1), -1);\\n      }\\n      createSlideShadows(slideEl, progress, params);\\n    });\\n  };\\n  const setTranslate = () => {\\n    const {\\n      slides,\\n      rtlTranslate: rtl\\n    } = swiper;\\n    const params = swiper.params.flipEffect;\\n    for (let i = 0; i < slides.length; i += 1) {\\n      const slideEl = slides[i];\\n      let progress = slideEl.progress;\\n      if (swiper.params.flipEffect.limitRotation) {\\n        progress = Math.max(Math.min(slideEl.progress, 1), -1);\\n      }\\n      const offset = slideEl.swiperSlideOffset;\\n      const rotate = -180 * progress;\\n      let rotateY = rotate;\\n      let rotateX = 0;\\n      let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;\\n      let ty = 0;\\n      if (!swiper.isHorizontal()) {\\n        ty = tx;\\n        tx = 0;\\n        rotateX = -rotateY;\\n        rotateY = 0;\\n      } else if (rtl) {\\n        rotateY = -rotateY;\\n      }\\n      slideEl.style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\\n      if (params.slideShadows) {\\n        createSlideShadows(slideEl, progress, params);\\n      }\\n      const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\\n      const targetEl = (0,_shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])(params, slideEl);\\n      targetEl.style.transform = transform;\\n    }\\n  };\\n  const setTransition = duration => {\\n    const transformElements = swiper.slides.map(slideEl => (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_4__.getSlideTransformEl)(slideEl));\\n    transformElements.forEach(el => {\\n      el.style.transitionDuration = `${duration}ms`;\\n      el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => {\\n        shadowEl.style.transitionDuration = `${duration}ms`;\\n      });\\n    });\\n    (0,_shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"])({\\n      swiper,\\n      duration,\\n      transformElements\\n    });\\n  };\\n  (0,_shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])({\\n    effect: 'flip',\\n    swiper,\\n    on,\\n    setTranslate,\\n    setTransition,\\n    recreateShadows,\\n    getEffectParams: () => swiper.params.flipEffect,\\n    perspective: () => true,\\n    overwriteParams: () => ({\\n      slidesPerView: 1,\\n      slidesPerGroup: 1,\\n      watchSlidesProgress: true,\\n      spaceBetween: 0,\\n      virtualTranslate: !swiper.params.cssMode\\n    })\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvZWZmZWN0LWZsaXAvZWZmZWN0LWZsaXAuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXlEO0FBQ0o7QUFDSTtBQUM4QjtBQUMzQjtBQUM3QztBQUNmO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG9FQUFZO0FBQ2pDO0FBQ0E7QUFDQSxvQkFBb0Isb0VBQVk7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLG9CQUFvQixtQkFBbUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLEdBQUcsTUFBTSxHQUFHLG1CQUFtQixRQUFRLGVBQWUsUUFBUTtBQUNyRyx1QkFBdUIsb0VBQVk7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQscUVBQW1CO0FBQzlFO0FBQ0EsdUNBQXVDLFNBQVM7QUFDaEQ7QUFDQSwrQ0FBK0MsU0FBUztBQUN4RCxPQUFPO0FBQ1AsS0FBSztBQUNMLElBQUksb0ZBQTBCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEVBQUUsa0VBQVU7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9tb2R1bGVzL2VmZmVjdC1mbGlwL2VmZmVjdC1mbGlwLmpzP2M3YzAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0ZVNoYWRvdyBmcm9tICcuLi8uLi9zaGFyZWQvY3JlYXRlLXNoYWRvdy5qcyc7XG5pbXBvcnQgZWZmZWN0SW5pdCBmcm9tICcuLi8uLi9zaGFyZWQvZWZmZWN0LWluaXQuanMnO1xuaW1wb3J0IGVmZmVjdFRhcmdldCBmcm9tICcuLi8uLi9zaGFyZWQvZWZmZWN0LXRhcmdldC5qcyc7XG5pbXBvcnQgZWZmZWN0VmlydHVhbFRyYW5zaXRpb25FbmQgZnJvbSAnLi4vLi4vc2hhcmVkL2VmZmVjdC12aXJ0dWFsLXRyYW5zaXRpb24tZW5kLmpzJztcbmltcG9ydCB7IGdldFNsaWRlVHJhbnNmb3JtRWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRWZmZWN0RmxpcCh7XG4gIHN3aXBlcixcbiAgZXh0ZW5kUGFyYW1zLFxuICBvblxufSkge1xuICBleHRlbmRQYXJhbXMoe1xuICAgIGZsaXBFZmZlY3Q6IHtcbiAgICAgIHNsaWRlU2hhZG93czogdHJ1ZSxcbiAgICAgIGxpbWl0Um90YXRpb246IHRydWVcbiAgICB9XG4gIH0pO1xuICBjb25zdCBjcmVhdGVTbGlkZVNoYWRvd3MgPSAoc2xpZGVFbCwgcHJvZ3Jlc3MsIHBhcmFtcykgPT4ge1xuICAgIGxldCBzaGFkb3dCZWZvcmUgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyBzbGlkZUVsLnF1ZXJ5U2VsZWN0b3IoJy5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQnKSA6IHNsaWRlRWwucXVlcnlTZWxlY3RvcignLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wJyk7XG4gICAgbGV0IHNoYWRvd0FmdGVyID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gc2xpZGVFbC5xdWVyeVNlbGVjdG9yKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCcpIDogc2xpZGVFbC5xdWVyeVNlbGVjdG9yKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20nKTtcbiAgICBpZiAoIXNoYWRvd0JlZm9yZSkge1xuICAgICAgc2hhZG93QmVmb3JlID0gY3JlYXRlU2hhZG93KHBhcmFtcywgc2xpZGVFbCwgc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ2xlZnQnIDogJ3RvcCcpO1xuICAgIH1cbiAgICBpZiAoIXNoYWRvd0FmdGVyKSB7XG4gICAgICBzaGFkb3dBZnRlciA9IGNyZWF0ZVNoYWRvdyhwYXJhbXMsIHNsaWRlRWwsIHN3aXBlci5pc0hvcml6b250YWwoKSA/ICdyaWdodCcgOiAnYm90dG9tJyk7XG4gICAgfVxuICAgIGlmIChzaGFkb3dCZWZvcmUpIHNoYWRvd0JlZm9yZS5zdHlsZS5vcGFjaXR5ID0gTWF0aC5tYXgoLXByb2dyZXNzLCAwKTtcbiAgICBpZiAoc2hhZG93QWZ0ZXIpIHNoYWRvd0FmdGVyLnN0eWxlLm9wYWNpdHkgPSBNYXRoLm1heChwcm9ncmVzcywgMCk7XG4gIH07XG4gIGNvbnN0IHJlY3JlYXRlU2hhZG93cyA9ICgpID0+IHtcbiAgICAvLyBTZXQgc2hhZG93c1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuZmxpcEVmZmVjdDtcbiAgICBzd2lwZXIuc2xpZGVzLmZvckVhY2goc2xpZGVFbCA9PiB7XG4gICAgICBsZXQgcHJvZ3Jlc3MgPSBzbGlkZUVsLnByb2dyZXNzO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZmxpcEVmZmVjdC5saW1pdFJvdGF0aW9uKSB7XG4gICAgICAgIHByb2dyZXNzID0gTWF0aC5tYXgoTWF0aC5taW4oc2xpZGVFbC5wcm9ncmVzcywgMSksIC0xKTtcbiAgICAgIH1cbiAgICAgIGNyZWF0ZVNsaWRlU2hhZG93cyhzbGlkZUVsLCBwcm9ncmVzcywgcGFyYW1zKTtcbiAgICB9KTtcbiAgfTtcbiAgY29uc3Qgc2V0VHJhbnNsYXRlID0gKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHNsaWRlcyxcbiAgICAgIHJ0bFRyYW5zbGF0ZTogcnRsXG4gICAgfSA9IHN3aXBlcjtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLmZsaXBFZmZlY3Q7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGNvbnN0IHNsaWRlRWwgPSBzbGlkZXNbaV07XG4gICAgICBsZXQgcHJvZ3Jlc3MgPSBzbGlkZUVsLnByb2dyZXNzO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMuZmxpcEVmZmVjdC5saW1pdFJvdGF0aW9uKSB7XG4gICAgICAgIHByb2dyZXNzID0gTWF0aC5tYXgoTWF0aC5taW4oc2xpZGVFbC5wcm9ncmVzcywgMSksIC0xKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9mZnNldCA9IHNsaWRlRWwuc3dpcGVyU2xpZGVPZmZzZXQ7XG4gICAgICBjb25zdCByb3RhdGUgPSAtMTgwICogcHJvZ3Jlc3M7XG4gICAgICBsZXQgcm90YXRlWSA9IHJvdGF0ZTtcbiAgICAgIGxldCByb3RhdGVYID0gMDtcbiAgICAgIGxldCB0eCA9IHN3aXBlci5wYXJhbXMuY3NzTW9kZSA/IC1vZmZzZXQgLSBzd2lwZXIudHJhbnNsYXRlIDogLW9mZnNldDtcbiAgICAgIGxldCB0eSA9IDA7XG4gICAgICBpZiAoIXN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgICAgICB0eSA9IHR4O1xuICAgICAgICB0eCA9IDA7XG4gICAgICAgIHJvdGF0ZVggPSAtcm90YXRlWTtcbiAgICAgICAgcm90YXRlWSA9IDA7XG4gICAgICB9IGVsc2UgaWYgKHJ0bCkge1xuICAgICAgICByb3RhdGVZID0gLXJvdGF0ZVk7XG4gICAgICB9XG4gICAgICBzbGlkZUVsLnN0eWxlLnpJbmRleCA9IC1NYXRoLmFicyhNYXRoLnJvdW5kKHByb2dyZXNzKSkgKyBzbGlkZXMubGVuZ3RoO1xuICAgICAgaWYgKHBhcmFtcy5zbGlkZVNoYWRvd3MpIHtcbiAgICAgICAgY3JlYXRlU2xpZGVTaGFkb3dzKHNsaWRlRWwsIHByb2dyZXNzLCBwYXJhbXMpO1xuICAgICAgfVxuICAgICAgY29uc3QgdHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKCR7dHh9cHgsICR7dHl9cHgsIDBweCkgcm90YXRlWCgke3JvdGF0ZVh9ZGVnKSByb3RhdGVZKCR7cm90YXRlWX1kZWcpYDtcbiAgICAgIGNvbnN0IHRhcmdldEVsID0gZWZmZWN0VGFyZ2V0KHBhcmFtcywgc2xpZGVFbCk7XG4gICAgICB0YXJnZXRFbC5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgfVxuICB9O1xuICBjb25zdCBzZXRUcmFuc2l0aW9uID0gZHVyYXRpb24gPT4ge1xuICAgIGNvbnN0IHRyYW5zZm9ybUVsZW1lbnRzID0gc3dpcGVyLnNsaWRlcy5tYXAoc2xpZGVFbCA9PiBnZXRTbGlkZVRyYW5zZm9ybUVsKHNsaWRlRWwpKTtcbiAgICB0cmFuc2Zvcm1FbGVtZW50cy5mb3JFYWNoKGVsID0+IHtcbiAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IGAke2R1cmF0aW9ufW1zYDtcbiAgICAgIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5zd2lwZXItc2xpZGUtc2hhZG93LXRvcCwgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQsIC5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbSwgLnN3aXBlci1zbGlkZS1zaGFkb3ctbGVmdCcpLmZvckVhY2goc2hhZG93RWwgPT4ge1xuICAgICAgICBzaGFkb3dFbC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSBgJHtkdXJhdGlvbn1tc2A7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBlZmZlY3RWaXJ0dWFsVHJhbnNpdGlvbkVuZCh7XG4gICAgICBzd2lwZXIsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHRyYW5zZm9ybUVsZW1lbnRzXG4gICAgfSk7XG4gIH07XG4gIGVmZmVjdEluaXQoe1xuICAgIGVmZmVjdDogJ2ZsaXAnLFxuICAgIHN3aXBlcixcbiAgICBvbixcbiAgICBzZXRUcmFuc2xhdGUsXG4gICAgc2V0VHJhbnNpdGlvbixcbiAgICByZWNyZWF0ZVNoYWRvd3MsXG4gICAgZ2V0RWZmZWN0UGFyYW1zOiAoKSA9PiBzd2lwZXIucGFyYW1zLmZsaXBFZmZlY3QsXG4gICAgcGVyc3BlY3RpdmU6ICgpID0+IHRydWUsXG4gICAgb3ZlcndyaXRlUGFyYW1zOiAoKSA9PiAoe1xuICAgICAgc2xpZGVzUGVyVmlldzogMSxcbiAgICAgIHNsaWRlc1Blckdyb3VwOiAxLFxuICAgICAgd2F0Y2hTbGlkZXNQcm9ncmVzczogdHJ1ZSxcbiAgICAgIHNwYWNlQmV0d2VlbjogMCxcbiAgICAgIHZpcnR1YWxUcmFuc2xhdGU6ICFzd2lwZXIucGFyYW1zLmNzc01vZGVcbiAgICB9KVxuICB9KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/effect-flip/effect-flip.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/free-mode/free-mode.js\":\r\n/*!************************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/free-mode/free-mode.js ***!\r\n  \\************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ freeMode)\\n/* harmony export */ });\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\nfunction freeMode({\\n  swiper,\\n  extendParams,\\n  emit,\\n  once\\n}) {\\n  extendParams({\\n    freeMode: {\\n      enabled: false,\\n      momentum: true,\\n      momentumRatio: 1,\\n      momentumBounce: true,\\n      momentumBounceRatio: 1,\\n      momentumVelocityRatio: 1,\\n      sticky: false,\\n      minimumVelocity: 0.02\\n    }\\n  });\\n  function onTouchStart() {\\n    const translate = swiper.getTranslate();\\n    swiper.setTranslate(translate);\\n    swiper.setTransition(0);\\n    swiper.touchEventsData.velocities.length = 0;\\n    swiper.freeMode.onTouchEnd({\\n      currentPos: swiper.rtl ? swiper.translate : -swiper.translate\\n    });\\n  }\\n  function onTouchMove() {\\n    const {\\n      touchEventsData: data,\\n      touches\\n    } = swiper;\\n    // Velocity\\n    if (data.velocities.length === 0) {\\n      data.velocities.push({\\n        position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\\n        time: data.touchStartTime\\n      });\\n    }\\n    data.velocities.push({\\n      position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\\n      time: (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.now)()\\n    });\\n  }\\n  function onTouchEnd({\\n    currentPos\\n  }) {\\n    const {\\n      params,\\n      wrapperEl,\\n      rtlTranslate: rtl,\\n      snapGrid,\\n      touchEventsData: data\\n    } = swiper;\\n    // Time diff\\n    const touchEndTime = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.now)();\\n    const timeDiff = touchEndTime - data.touchStartTime;\\n    if (currentPos < -swiper.minTranslate()) {\\n      swiper.slideTo(swiper.activeIndex);\\n      return;\\n    }\\n    if (currentPos > -swiper.maxTranslate()) {\\n      if (swiper.slides.length < snapGrid.length) {\\n        swiper.slideTo(snapGrid.length - 1);\\n      } else {\\n        swiper.slideTo(swiper.slides.length - 1);\\n      }\\n      return;\\n    }\\n    if (params.freeMode.momentum) {\\n      if (data.velocities.length > 1) {\\n        const lastMoveEvent = data.velocities.pop();\\n        const velocityEvent = data.velocities.pop();\\n        const distance = lastMoveEvent.position - velocityEvent.position;\\n        const time = lastMoveEvent.time - velocityEvent.time;\\n        swiper.velocity = distance / time;\\n        swiper.velocity /= 2;\\n        if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\\n          swiper.velocity = 0;\\n        }\\n        // this implies that the user stopped moving a finger then released.\\n        // There would be no events with distance zero, so the last event is stale.\\n        if (time > 150 || (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.now)() - lastMoveEvent.time > 300) {\\n          swiper.velocity = 0;\\n        }\\n      } else {\\n        swiper.velocity = 0;\\n      }\\n      swiper.velocity *= params.freeMode.momentumVelocityRatio;\\n      data.velocities.length = 0;\\n      let momentumDuration = 1000 * params.freeMode.momentumRatio;\\n      const momentumDistance = swiper.velocity * momentumDuration;\\n      let newPosition = swiper.translate + momentumDistance;\\n      if (rtl) newPosition = -newPosition;\\n      let doBounce = false;\\n      let afterBouncePosition;\\n      const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\\n      let needsLoopFix;\\n      if (newPosition < swiper.maxTranslate()) {\\n        if (params.freeMode.momentumBounce) {\\n          if (newPosition + swiper.maxTranslate() < -bounceAmount) {\\n            newPosition = swiper.maxTranslate() - bounceAmount;\\n          }\\n          afterBouncePosition = swiper.maxTranslate();\\n          doBounce = true;\\n          data.allowMomentumBounce = true;\\n        } else {\\n          newPosition = swiper.maxTranslate();\\n        }\\n        if (params.loop && params.centeredSlides) needsLoopFix = true;\\n      } else if (newPosition > swiper.minTranslate()) {\\n        if (params.freeMode.momentumBounce) {\\n          if (newPosition - swiper.minTranslate() > bounceAmount) {\\n            newPosition = swiper.minTranslate() + bounceAmount;\\n          }\\n          afterBouncePosition = swiper.minTranslate();\\n          doBounce = true;\\n          data.allowMomentumBounce = true;\\n        } else {\\n          newPosition = swiper.minTranslate();\\n        }\\n        if (params.loop && params.centeredSlides) needsLoopFix = true;\\n      } else if (params.freeMode.sticky) {\\n        let nextSlide;\\n        for (let j = 0; j < snapGrid.length; j += 1) {\\n          if (snapGrid[j] > -newPosition) {\\n            nextSlide = j;\\n            break;\\n          }\\n        }\\n        if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\\n          newPosition = snapGrid[nextSlide];\\n        } else {\\n          newPosition = snapGrid[nextSlide - 1];\\n        }\\n        newPosition = -newPosition;\\n      }\\n      if (needsLoopFix) {\\n        once('transitionEnd', () => {\\n          swiper.loopFix();\\n        });\\n      }\\n      // Fix duration\\n      if (swiper.velocity !== 0) {\\n        if (rtl) {\\n          momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\\n        } else {\\n          momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\\n        }\\n        if (params.freeMode.sticky) {\\n          // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\\n          // event, then durations can be 20+ seconds to slide one (or zero!) slides.\\n          // It's easy to see this when simulating touch with mouse events. To fix this,\\n          // limit single-slide swipes to the default slide duration. This also has the\\n          // nice side effect of matching slide speed if the user stopped moving before\\n          // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\\n          // For faster swipes, also apply limits (albeit higher ones).\\n          const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\\n          const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\\n          if (moveDistance < currentSlideSize) {\\n            momentumDuration = params.speed;\\n          } else if (moveDistance < 2 * currentSlideSize) {\\n            momentumDuration = params.speed * 1.5;\\n          } else {\\n            momentumDuration = params.speed * 2.5;\\n          }\\n        }\\n      } else if (params.freeMode.sticky) {\\n        swiper.slideToClosest();\\n        return;\\n      }\\n      if (params.freeMode.momentumBounce && doBounce) {\\n        swiper.updateProgress(afterBouncePosition);\\n        swiper.setTransition(momentumDuration);\\n        swiper.setTranslate(newPosition);\\n        swiper.transitionStart(true, swiper.swipeDirection);\\n        swiper.animating = true;\\n        (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementTransitionEnd)(wrapperEl, () => {\\n          if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\\n          emit('momentumBounce');\\n          swiper.setTransition(params.speed);\\n          setTimeout(() => {\\n            swiper.setTranslate(afterBouncePosition);\\n            (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementTransitionEnd)(wrapperEl, () => {\\n              if (!swiper || swiper.destroyed) return;\\n              swiper.transitionEnd();\\n            });\\n          }, 0);\\n        });\\n      } else if (swiper.velocity) {\\n        emit('_freeModeNoMomentumRelease');\\n        swiper.updateProgress(newPosition);\\n        swiper.setTransition(momentumDuration);\\n        swiper.setTranslate(newPosition);\\n        swiper.transitionStart(true, swiper.swipeDirection);\\n        if (!swiper.animating) {\\n          swiper.animating = true;\\n          (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementTransitionEnd)(wrapperEl, () => {\\n            if (!swiper || swiper.destroyed) return;\\n            swiper.transitionEnd();\\n          });\\n        }\\n      } else {\\n        swiper.updateProgress(newPosition);\\n      }\\n      swiper.updateActiveIndex();\\n      swiper.updateSlidesClasses();\\n    } else if (params.freeMode.sticky) {\\n      swiper.slideToClosest();\\n      return;\\n    } else if (params.freeMode) {\\n      emit('_freeModeNoMomentumRelease');\\n    }\\n    if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\\n      swiper.updateProgress();\\n      swiper.updateActiveIndex();\\n      swiper.updateSlidesClasses();\\n    }\\n  }\\n  Object.assign(swiper, {\\n    freeMode: {\\n      onTouchStart,\\n      onTouchMove,\\n      onTouchEnd\\n    }\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvZnJlZS1tb2RlL2ZyZWUtbW9kZS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFrRTtBQUNuRDtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFlBQVkscURBQUc7QUFDZixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLHlCQUF5QixxREFBRztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIscURBQUc7QUFDN0I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSx3QkFBd0IscUJBQXFCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxzRUFBb0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksc0VBQW9CO0FBQ2hDO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsV0FBVztBQUNYLFNBQVM7QUFDVCxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLHNFQUFvQjtBQUM5QjtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9tb2R1bGVzL2ZyZWUtbW9kZS9mcmVlLW1vZGUuanM/ODFjNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlbGVtZW50VHJhbnNpdGlvbkVuZCwgbm93IH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZyZWVNb2RlKHtcbiAgc3dpcGVyLFxuICBleHRlbmRQYXJhbXMsXG4gIGVtaXQsXG4gIG9uY2Vcbn0pIHtcbiAgZXh0ZW5kUGFyYW1zKHtcbiAgICBmcmVlTW9kZToge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBtb21lbnR1bTogdHJ1ZSxcbiAgICAgIG1vbWVudHVtUmF0aW86IDEsXG4gICAgICBtb21lbnR1bUJvdW5jZTogdHJ1ZSxcbiAgICAgIG1vbWVudHVtQm91bmNlUmF0aW86IDEsXG4gICAgICBtb21lbnR1bVZlbG9jaXR5UmF0aW86IDEsXG4gICAgICBzdGlja3k6IGZhbHNlLFxuICAgICAgbWluaW11bVZlbG9jaXR5OiAwLjAyXG4gICAgfVxuICB9KTtcbiAgZnVuY3Rpb24gb25Ub3VjaFN0YXJ0KCkge1xuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHN3aXBlci5nZXRUcmFuc2xhdGUoKTtcbiAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKHRyYW5zbGF0ZSk7XG4gICAgc3dpcGVyLnNldFRyYW5zaXRpb24oMCk7XG4gICAgc3dpcGVyLnRvdWNoRXZlbnRzRGF0YS52ZWxvY2l0aWVzLmxlbmd0aCA9IDA7XG4gICAgc3dpcGVyLmZyZWVNb2RlLm9uVG91Y2hFbmQoe1xuICAgICAgY3VycmVudFBvczogc3dpcGVyLnJ0bCA/IHN3aXBlci50cmFuc2xhdGUgOiAtc3dpcGVyLnRyYW5zbGF0ZVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG9uVG91Y2hNb3ZlKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHRvdWNoRXZlbnRzRGF0YTogZGF0YSxcbiAgICAgIHRvdWNoZXNcbiAgICB9ID0gc3dpcGVyO1xuICAgIC8vIFZlbG9jaXR5XG4gICAgaWYgKGRhdGEudmVsb2NpdGllcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGRhdGEudmVsb2NpdGllcy5wdXNoKHtcbiAgICAgICAgcG9zaXRpb246IHRvdWNoZXNbc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gJ3N0YXJ0WCcgOiAnc3RhcnRZJ10sXG4gICAgICAgIHRpbWU6IGRhdGEudG91Y2hTdGFydFRpbWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICBkYXRhLnZlbG9jaXRpZXMucHVzaCh7XG4gICAgICBwb3NpdGlvbjogdG91Y2hlc1tzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnY3VycmVudFgnIDogJ2N1cnJlbnRZJ10sXG4gICAgICB0aW1lOiBub3coKVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG9uVG91Y2hFbmQoe1xuICAgIGN1cnJlbnRQb3NcbiAgfSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHBhcmFtcyxcbiAgICAgIHdyYXBwZXJFbCxcbiAgICAgIHJ0bFRyYW5zbGF0ZTogcnRsLFxuICAgICAgc25hcEdyaWQsXG4gICAgICB0b3VjaEV2ZW50c0RhdGE6IGRhdGFcbiAgICB9ID0gc3dpcGVyO1xuICAgIC8vIFRpbWUgZGlmZlxuICAgIGNvbnN0IHRvdWNoRW5kVGltZSA9IG5vdygpO1xuICAgIGNvbnN0IHRpbWVEaWZmID0gdG91Y2hFbmRUaW1lIC0gZGF0YS50b3VjaFN0YXJ0VGltZTtcbiAgICBpZiAoY3VycmVudFBvcyA8IC1zd2lwZXIubWluVHJhbnNsYXRlKCkpIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjdXJyZW50UG9zID4gLXN3aXBlci5tYXhUcmFuc2xhdGUoKSkge1xuICAgICAgaWYgKHN3aXBlci5zbGlkZXMubGVuZ3RoIDwgc25hcEdyaWQubGVuZ3RoKSB7XG4gICAgICAgIHN3aXBlci5zbGlkZVRvKHNuYXBHcmlkLmxlbmd0aCAtIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnNsaWRlVG8oc3dpcGVyLnNsaWRlcy5sZW5ndGggLSAxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5mcmVlTW9kZS5tb21lbnR1bSkge1xuICAgICAgaWYgKGRhdGEudmVsb2NpdGllcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IGxhc3RNb3ZlRXZlbnQgPSBkYXRhLnZlbG9jaXRpZXMucG9wKCk7XG4gICAgICAgIGNvbnN0IHZlbG9jaXR5RXZlbnQgPSBkYXRhLnZlbG9jaXRpZXMucG9wKCk7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlID0gbGFzdE1vdmVFdmVudC5wb3NpdGlvbiAtIHZlbG9jaXR5RXZlbnQucG9zaXRpb247XG4gICAgICAgIGNvbnN0IHRpbWUgPSBsYXN0TW92ZUV2ZW50LnRpbWUgLSB2ZWxvY2l0eUV2ZW50LnRpbWU7XG4gICAgICAgIHN3aXBlci52ZWxvY2l0eSA9IGRpc3RhbmNlIC8gdGltZTtcbiAgICAgICAgc3dpcGVyLnZlbG9jaXR5IC89IDI7XG4gICAgICAgIGlmIChNYXRoLmFicyhzd2lwZXIudmVsb2NpdHkpIDwgcGFyYW1zLmZyZWVNb2RlLm1pbmltdW1WZWxvY2l0eSkge1xuICAgICAgICAgIHN3aXBlci52ZWxvY2l0eSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcyBpbXBsaWVzIHRoYXQgdGhlIHVzZXIgc3RvcHBlZCBtb3ZpbmcgYSBmaW5nZXIgdGhlbiByZWxlYXNlZC5cbiAgICAgICAgLy8gVGhlcmUgd291bGQgYmUgbm8gZXZlbnRzIHdpdGggZGlzdGFuY2UgemVybywgc28gdGhlIGxhc3QgZXZlbnQgaXMgc3RhbGUuXG4gICAgICAgIGlmICh0aW1lID4gMTUwIHx8IG5vdygpIC0gbGFzdE1vdmVFdmVudC50aW1lID4gMzAwKSB7XG4gICAgICAgICAgc3dpcGVyLnZlbG9jaXR5ID0gMDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3dpcGVyLnZlbG9jaXR5ID0gMDtcbiAgICAgIH1cbiAgICAgIHN3aXBlci52ZWxvY2l0eSAqPSBwYXJhbXMuZnJlZU1vZGUubW9tZW50dW1WZWxvY2l0eVJhdGlvO1xuICAgICAgZGF0YS52ZWxvY2l0aWVzLmxlbmd0aCA9IDA7XG4gICAgICBsZXQgbW9tZW50dW1EdXJhdGlvbiA9IDEwMDAgKiBwYXJhbXMuZnJlZU1vZGUubW9tZW50dW1SYXRpbztcbiAgICAgIGNvbnN0IG1vbWVudHVtRGlzdGFuY2UgPSBzd2lwZXIudmVsb2NpdHkgKiBtb21lbnR1bUR1cmF0aW9uO1xuICAgICAgbGV0IG5ld1Bvc2l0aW9uID0gc3dpcGVyLnRyYW5zbGF0ZSArIG1vbWVudHVtRGlzdGFuY2U7XG4gICAgICBpZiAocnRsKSBuZXdQb3NpdGlvbiA9IC1uZXdQb3NpdGlvbjtcbiAgICAgIGxldCBkb0JvdW5jZSA9IGZhbHNlO1xuICAgICAgbGV0IGFmdGVyQm91bmNlUG9zaXRpb247XG4gICAgICBjb25zdCBib3VuY2VBbW91bnQgPSBNYXRoLmFicyhzd2lwZXIudmVsb2NpdHkpICogMjAgKiBwYXJhbXMuZnJlZU1vZGUubW9tZW50dW1Cb3VuY2VSYXRpbztcbiAgICAgIGxldCBuZWVkc0xvb3BGaXg7XG4gICAgICBpZiAobmV3UG9zaXRpb24gPCBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHtcbiAgICAgICAgaWYgKHBhcmFtcy5mcmVlTW9kZS5tb21lbnR1bUJvdW5jZSkge1xuICAgICAgICAgIGlmIChuZXdQb3NpdGlvbiArIHN3aXBlci5tYXhUcmFuc2xhdGUoKSA8IC1ib3VuY2VBbW91bnQpIHtcbiAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpIC0gYm91bmNlQW1vdW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICBhZnRlckJvdW5jZVBvc2l0aW9uID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpO1xuICAgICAgICAgIGRvQm91bmNlID0gdHJ1ZTtcbiAgICAgICAgICBkYXRhLmFsbG93TW9tZW50dW1Cb3VuY2UgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXMubG9vcCAmJiBwYXJhbXMuY2VudGVyZWRTbGlkZXMpIG5lZWRzTG9vcEZpeCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKG5ld1Bvc2l0aW9uID4gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSB7XG4gICAgICAgIGlmIChwYXJhbXMuZnJlZU1vZGUubW9tZW50dW1Cb3VuY2UpIHtcbiAgICAgICAgICBpZiAobmV3UG9zaXRpb24gLSBzd2lwZXIubWluVHJhbnNsYXRlKCkgPiBib3VuY2VBbW91bnQpIHtcbiAgICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpICsgYm91bmNlQW1vdW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICBhZnRlckJvdW5jZVBvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICAgICAgICAgIGRvQm91bmNlID0gdHJ1ZTtcbiAgICAgICAgICBkYXRhLmFsbG93TW9tZW50dW1Cb3VuY2UgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJhbXMubG9vcCAmJiBwYXJhbXMuY2VudGVyZWRTbGlkZXMpIG5lZWRzTG9vcEZpeCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5mcmVlTW9kZS5zdGlja3kpIHtcbiAgICAgICAgbGV0IG5leHRTbGlkZTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzbmFwR3JpZC5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgIGlmIChzbmFwR3JpZFtqXSA+IC1uZXdQb3NpdGlvbikge1xuICAgICAgICAgICAgbmV4dFNsaWRlID0gajtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoTWF0aC5hYnMoc25hcEdyaWRbbmV4dFNsaWRlXSAtIG5ld1Bvc2l0aW9uKSA8IE1hdGguYWJzKHNuYXBHcmlkW25leHRTbGlkZSAtIDFdIC0gbmV3UG9zaXRpb24pIHx8IHN3aXBlci5zd2lwZURpcmVjdGlvbiA9PT0gJ25leHQnKSB7XG4gICAgICAgICAgbmV3UG9zaXRpb24gPSBzbmFwR3JpZFtuZXh0U2xpZGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1Bvc2l0aW9uID0gc25hcEdyaWRbbmV4dFNsaWRlIC0gMV07XG4gICAgICAgIH1cbiAgICAgICAgbmV3UG9zaXRpb24gPSAtbmV3UG9zaXRpb247XG4gICAgICB9XG4gICAgICBpZiAobmVlZHNMb29wRml4KSB7XG4gICAgICAgIG9uY2UoJ3RyYW5zaXRpb25FbmQnLCAoKSA9PiB7XG4gICAgICAgICAgc3dpcGVyLmxvb3BGaXgoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBGaXggZHVyYXRpb25cbiAgICAgIGlmIChzd2lwZXIudmVsb2NpdHkgIT09IDApIHtcbiAgICAgICAgaWYgKHJ0bCkge1xuICAgICAgICAgIG1vbWVudHVtRHVyYXRpb24gPSBNYXRoLmFicygoLW5ld1Bvc2l0aW9uIC0gc3dpcGVyLnRyYW5zbGF0ZSkgLyBzd2lwZXIudmVsb2NpdHkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1vbWVudHVtRHVyYXRpb24gPSBNYXRoLmFicygobmV3UG9zaXRpb24gLSBzd2lwZXIudHJhbnNsYXRlKSAvIHN3aXBlci52ZWxvY2l0eSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtcy5mcmVlTW9kZS5zdGlja3kpIHtcbiAgICAgICAgICAvLyBJZiBmcmVlTW9kZS5zdGlja3kgaXMgYWN0aXZlIGFuZCB0aGUgdXNlciBlbmRzIGEgc3dpcGUgd2l0aCBhIHNsb3ctdmVsb2NpdHlcbiAgICAgICAgICAvLyBldmVudCwgdGhlbiBkdXJhdGlvbnMgY2FuIGJlIDIwKyBzZWNvbmRzIHRvIHNsaWRlIG9uZSAob3IgemVybyEpIHNsaWRlcy5cbiAgICAgICAgICAvLyBJdCdzIGVhc3kgdG8gc2VlIHRoaXMgd2hlbiBzaW11bGF0aW5nIHRvdWNoIHdpdGggbW91c2UgZXZlbnRzLiBUbyBmaXggdGhpcyxcbiAgICAgICAgICAvLyBsaW1pdCBzaW5nbGUtc2xpZGUgc3dpcGVzIHRvIHRoZSBkZWZhdWx0IHNsaWRlIGR1cmF0aW9uLiBUaGlzIGFsc28gaGFzIHRoZVxuICAgICAgICAgIC8vIG5pY2Ugc2lkZSBlZmZlY3Qgb2YgbWF0Y2hpbmcgc2xpZGUgc3BlZWQgaWYgdGhlIHVzZXIgc3RvcHBlZCBtb3ZpbmcgYmVmb3JlXG4gICAgICAgICAgLy8gbGlmdGluZyBmaW5nZXIgb3IgbW91c2UgdnMuIG1vdmluZyBzbG93bHkgYmVmb3JlIGxpZnRpbmcgdGhlIGZpbmdlci9tb3VzZS5cbiAgICAgICAgICAvLyBGb3IgZmFzdGVyIHN3aXBlcywgYWxzbyBhcHBseSBsaW1pdHMgKGFsYmVpdCBoaWdoZXIgb25lcykuXG4gICAgICAgICAgY29uc3QgbW92ZURpc3RhbmNlID0gTWF0aC5hYnMoKHJ0bCA/IC1uZXdQb3NpdGlvbiA6IG5ld1Bvc2l0aW9uKSAtIHN3aXBlci50cmFuc2xhdGUpO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRTbGlkZVNpemUgPSBzd2lwZXIuc2xpZGVzU2l6ZXNHcmlkW3N3aXBlci5hY3RpdmVJbmRleF07XG4gICAgICAgICAgaWYgKG1vdmVEaXN0YW5jZSA8IGN1cnJlbnRTbGlkZVNpemUpIHtcbiAgICAgICAgICAgIG1vbWVudHVtRHVyYXRpb24gPSBwYXJhbXMuc3BlZWQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChtb3ZlRGlzdGFuY2UgPCAyICogY3VycmVudFNsaWRlU2l6ZSkge1xuICAgICAgICAgICAgbW9tZW50dW1EdXJhdGlvbiA9IHBhcmFtcy5zcGVlZCAqIDEuNTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9tZW50dW1EdXJhdGlvbiA9IHBhcmFtcy5zcGVlZCAqIDIuNTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocGFyYW1zLmZyZWVNb2RlLnN0aWNreSkge1xuICAgICAgICBzd2lwZXIuc2xpZGVUb0Nsb3Nlc3QoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmFtcy5mcmVlTW9kZS5tb21lbnR1bUJvdW5jZSAmJiBkb0JvdW5jZSkge1xuICAgICAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MoYWZ0ZXJCb3VuY2VQb3NpdGlvbik7XG4gICAgICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKG1vbWVudHVtRHVyYXRpb24pO1xuICAgICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKG5ld1Bvc2l0aW9uKTtcbiAgICAgICAgc3dpcGVyLnRyYW5zaXRpb25TdGFydCh0cnVlLCBzd2lwZXIuc3dpcGVEaXJlY3Rpb24pO1xuICAgICAgICBzd2lwZXIuYW5pbWF0aW5nID0gdHJ1ZTtcbiAgICAgICAgZWxlbWVudFRyYW5zaXRpb25FbmQod3JhcHBlckVsLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKCFzd2lwZXIgfHwgc3dpcGVyLmRlc3Ryb3llZCB8fCAhZGF0YS5hbGxvd01vbWVudHVtQm91bmNlKSByZXR1cm47XG4gICAgICAgICAgZW1pdCgnbW9tZW50dW1Cb3VuY2UnKTtcbiAgICAgICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihwYXJhbXMuc3BlZWQpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShhZnRlckJvdW5jZVBvc2l0aW9uKTtcbiAgICAgICAgICAgIGVsZW1lbnRUcmFuc2l0aW9uRW5kKHdyYXBwZXJFbCwgKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkKSByZXR1cm47XG4gICAgICAgICAgICAgIHN3aXBlci50cmFuc2l0aW9uRW5kKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHN3aXBlci52ZWxvY2l0eSkge1xuICAgICAgICBlbWl0KCdfZnJlZU1vZGVOb01vbWVudHVtUmVsZWFzZScpO1xuICAgICAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MobmV3UG9zaXRpb24pO1xuICAgICAgICBzd2lwZXIuc2V0VHJhbnNpdGlvbihtb21lbnR1bUR1cmF0aW9uKTtcbiAgICAgICAgc3dpcGVyLnNldFRyYW5zbGF0ZShuZXdQb3NpdGlvbik7XG4gICAgICAgIHN3aXBlci50cmFuc2l0aW9uU3RhcnQodHJ1ZSwgc3dpcGVyLnN3aXBlRGlyZWN0aW9uKTtcbiAgICAgICAgaWYgKCFzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICAgICAgc3dpcGVyLmFuaW1hdGluZyA9IHRydWU7XG4gICAgICAgICAgZWxlbWVudFRyYW5zaXRpb25FbmQod3JhcHBlckVsLCAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXN3aXBlciB8fCBzd2lwZXIuZGVzdHJveWVkKSByZXR1cm47XG4gICAgICAgICAgICBzd2lwZXIudHJhbnNpdGlvbkVuZCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MobmV3UG9zaXRpb24pO1xuICAgICAgfVxuICAgICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLmZyZWVNb2RlLnN0aWNreSkge1xuICAgICAgc3dpcGVyLnNsaWRlVG9DbG9zZXN0KCk7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChwYXJhbXMuZnJlZU1vZGUpIHtcbiAgICAgIGVtaXQoJ19mcmVlTW9kZU5vTW9tZW50dW1SZWxlYXNlJyk7XG4gICAgfVxuICAgIGlmICghcGFyYW1zLmZyZWVNb2RlLm1vbWVudHVtIHx8IHRpbWVEaWZmID49IHBhcmFtcy5sb25nU3dpcGVzTXMpIHtcbiAgICAgIHN3aXBlci51cGRhdGVQcm9ncmVzcygpO1xuICAgICAgc3dpcGVyLnVwZGF0ZUFjdGl2ZUluZGV4KCk7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgIH1cbiAgfVxuICBPYmplY3QuYXNzaWduKHN3aXBlciwge1xuICAgIGZyZWVNb2RlOiB7XG4gICAgICBvblRvdWNoU3RhcnQsXG4gICAgICBvblRvdWNoTW92ZSxcbiAgICAgIG9uVG91Y2hFbmRcbiAgICB9XG4gIH0pO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/free-mode/free-mode.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/grid/grid.js\":\r\n/*!**************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/grid/grid.js ***!\r\n  \\**************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ Grid)\\n/* harmony export */ });\\nfunction Grid({\\n  swiper,\\n  extendParams\\n}) {\\n  extendParams({\\n    grid: {\\n      rows: 1,\\n      fill: 'column'\\n    }\\n  });\\n  let slidesNumberEvenToRows;\\n  let slidesPerRow;\\n  let numFullColumns;\\n  const initSlides = slidesLength => {\\n    const {\\n      slidesPerView\\n    } = swiper.params;\\n    const {\\n      rows,\\n      fill\\n    } = swiper.params.grid;\\n    slidesPerRow = slidesNumberEvenToRows / rows;\\n    numFullColumns = Math.floor(slidesLength / rows);\\n    if (Math.floor(slidesLength / rows) === slidesLength / rows) {\\n      slidesNumberEvenToRows = slidesLength;\\n    } else {\\n      slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;\\n    }\\n    if (slidesPerView !== 'auto' && fill === 'row') {\\n      slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);\\n    }\\n  };\\n  const updateSlide = (i, slide, slidesLength, getDirectionLabel) => {\\n    const {\\n      slidesPerGroup,\\n      spaceBetween\\n    } = swiper.params;\\n    const {\\n      rows,\\n      fill\\n    } = swiper.params.grid;\\n    // Set slides order\\n    let newSlideOrderIndex;\\n    let column;\\n    let row;\\n    if (fill === 'row' && slidesPerGroup > 1) {\\n      const groupIndex = Math.floor(i / (slidesPerGroup * rows));\\n      const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;\\n      const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup);\\n      row = Math.floor(slideIndexInGroup / columnsInGroup);\\n      column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;\\n      newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows;\\n      slide.style.order = newSlideOrderIndex;\\n    } else if (fill === 'column') {\\n      column = Math.floor(i / rows);\\n      row = i - column * rows;\\n      if (column > numFullColumns || column === numFullColumns && row === rows - 1) {\\n        row += 1;\\n        if (row >= rows) {\\n          row = 0;\\n          column += 1;\\n        }\\n      }\\n    } else {\\n      row = Math.floor(i / slidesPerRow);\\n      column = i - row * slidesPerRow;\\n    }\\n    slide.style[getDirectionLabel('margin-top')] = row !== 0 ? spaceBetween && `${spaceBetween}px` : '';\\n  };\\n  const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => {\\n    const {\\n      spaceBetween,\\n      centeredSlides,\\n      roundLengths\\n    } = swiper.params;\\n    const {\\n      rows\\n    } = swiper.params.grid;\\n    swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;\\n    swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;\\n    swiper.wrapperEl.style[getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\\n    if (centeredSlides) {\\n      const newSlidesGrid = [];\\n      for (let i = 0; i < snapGrid.length; i += 1) {\\n        let slidesGridItem = snapGrid[i];\\n        if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);\\n        if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\\n      }\\n      snapGrid.splice(0, snapGrid.length);\\n      snapGrid.push(...newSlidesGrid);\\n    }\\n  };\\n  swiper.grid = {\\n    initSlides,\\n    updateSlide,\\n    updateWrapperSize\\n  };\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvZ3JpZC9ncmlkLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLGtGQUFrRixhQUFhO0FBQy9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSw0REFBNEQsa0NBQWtDO0FBQzlGO0FBQ0E7QUFDQSxzQkFBc0IscUJBQXFCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvbW9kdWxlcy9ncmlkL2dyaWQuanM/NWJhZiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBHcmlkKHtcbiAgc3dpcGVyLFxuICBleHRlbmRQYXJhbXNcbn0pIHtcbiAgZXh0ZW5kUGFyYW1zKHtcbiAgICBncmlkOiB7XG4gICAgICByb3dzOiAxLFxuICAgICAgZmlsbDogJ2NvbHVtbidcbiAgICB9XG4gIH0pO1xuICBsZXQgc2xpZGVzTnVtYmVyRXZlblRvUm93cztcbiAgbGV0IHNsaWRlc1BlclJvdztcbiAgbGV0IG51bUZ1bGxDb2x1bW5zO1xuICBjb25zdCBpbml0U2xpZGVzID0gc2xpZGVzTGVuZ3RoID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBzbGlkZXNQZXJWaWV3XG4gICAgfSA9IHN3aXBlci5wYXJhbXM7XG4gICAgY29uc3Qge1xuICAgICAgcm93cyxcbiAgICAgIGZpbGxcbiAgICB9ID0gc3dpcGVyLnBhcmFtcy5ncmlkO1xuICAgIHNsaWRlc1BlclJvdyA9IHNsaWRlc051bWJlckV2ZW5Ub1Jvd3MgLyByb3dzO1xuICAgIG51bUZ1bGxDb2x1bW5zID0gTWF0aC5mbG9vcihzbGlkZXNMZW5ndGggLyByb3dzKTtcbiAgICBpZiAoTWF0aC5mbG9vcihzbGlkZXNMZW5ndGggLyByb3dzKSA9PT0gc2xpZGVzTGVuZ3RoIC8gcm93cykge1xuICAgICAgc2xpZGVzTnVtYmVyRXZlblRvUm93cyA9IHNsaWRlc0xlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgc2xpZGVzTnVtYmVyRXZlblRvUm93cyA9IE1hdGguY2VpbChzbGlkZXNMZW5ndGggLyByb3dzKSAqIHJvd3M7XG4gICAgfVxuICAgIGlmIChzbGlkZXNQZXJWaWV3ICE9PSAnYXV0bycgJiYgZmlsbCA9PT0gJ3JvdycpIHtcbiAgICAgIHNsaWRlc051bWJlckV2ZW5Ub1Jvd3MgPSBNYXRoLm1heChzbGlkZXNOdW1iZXJFdmVuVG9Sb3dzLCBzbGlkZXNQZXJWaWV3ICogcm93cyk7XG4gICAgfVxuICB9O1xuICBjb25zdCB1cGRhdGVTbGlkZSA9IChpLCBzbGlkZSwgc2xpZGVzTGVuZ3RoLCBnZXREaXJlY3Rpb25MYWJlbCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHNsaWRlc1Blckdyb3VwLFxuICAgICAgc3BhY2VCZXR3ZWVuXG4gICAgfSA9IHN3aXBlci5wYXJhbXM7XG4gICAgY29uc3Qge1xuICAgICAgcm93cyxcbiAgICAgIGZpbGxcbiAgICB9ID0gc3dpcGVyLnBhcmFtcy5ncmlkO1xuICAgIC8vIFNldCBzbGlkZXMgb3JkZXJcbiAgICBsZXQgbmV3U2xpZGVPcmRlckluZGV4O1xuICAgIGxldCBjb2x1bW47XG4gICAgbGV0IHJvdztcbiAgICBpZiAoZmlsbCA9PT0gJ3JvdycgJiYgc2xpZGVzUGVyR3JvdXAgPiAxKSB7XG4gICAgICBjb25zdCBncm91cEluZGV4ID0gTWF0aC5mbG9vcihpIC8gKHNsaWRlc1Blckdyb3VwICogcm93cykpO1xuICAgICAgY29uc3Qgc2xpZGVJbmRleEluR3JvdXAgPSBpIC0gcm93cyAqIHNsaWRlc1Blckdyb3VwICogZ3JvdXBJbmRleDtcbiAgICAgIGNvbnN0IGNvbHVtbnNJbkdyb3VwID0gZ3JvdXBJbmRleCA9PT0gMCA/IHNsaWRlc1Blckdyb3VwIDogTWF0aC5taW4oTWF0aC5jZWlsKChzbGlkZXNMZW5ndGggLSBncm91cEluZGV4ICogcm93cyAqIHNsaWRlc1Blckdyb3VwKSAvIHJvd3MpLCBzbGlkZXNQZXJHcm91cCk7XG4gICAgICByb3cgPSBNYXRoLmZsb29yKHNsaWRlSW5kZXhJbkdyb3VwIC8gY29sdW1uc0luR3JvdXApO1xuICAgICAgY29sdW1uID0gc2xpZGVJbmRleEluR3JvdXAgLSByb3cgKiBjb2x1bW5zSW5Hcm91cCArIGdyb3VwSW5kZXggKiBzbGlkZXNQZXJHcm91cDtcbiAgICAgIG5ld1NsaWRlT3JkZXJJbmRleCA9IGNvbHVtbiArIHJvdyAqIHNsaWRlc051bWJlckV2ZW5Ub1Jvd3MgLyByb3dzO1xuICAgICAgc2xpZGUuc3R5bGUub3JkZXIgPSBuZXdTbGlkZU9yZGVySW5kZXg7XG4gICAgfSBlbHNlIGlmIChmaWxsID09PSAnY29sdW1uJykge1xuICAgICAgY29sdW1uID0gTWF0aC5mbG9vcihpIC8gcm93cyk7XG4gICAgICByb3cgPSBpIC0gY29sdW1uICogcm93cztcbiAgICAgIGlmIChjb2x1bW4gPiBudW1GdWxsQ29sdW1ucyB8fCBjb2x1bW4gPT09IG51bUZ1bGxDb2x1bW5zICYmIHJvdyA9PT0gcm93cyAtIDEpIHtcbiAgICAgICAgcm93ICs9IDE7XG4gICAgICAgIGlmIChyb3cgPj0gcm93cykge1xuICAgICAgICAgIHJvdyA9IDA7XG4gICAgICAgICAgY29sdW1uICs9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcm93ID0gTWF0aC5mbG9vcihpIC8gc2xpZGVzUGVyUm93KTtcbiAgICAgIGNvbHVtbiA9IGkgLSByb3cgKiBzbGlkZXNQZXJSb3c7XG4gICAgfVxuICAgIHNsaWRlLnN0eWxlW2dldERpcmVjdGlvbkxhYmVsKCdtYXJnaW4tdG9wJyldID0gcm93ICE9PSAwID8gc3BhY2VCZXR3ZWVuICYmIGAke3NwYWNlQmV0d2Vlbn1weGAgOiAnJztcbiAgfTtcbiAgY29uc3QgdXBkYXRlV3JhcHBlclNpemUgPSAoc2xpZGVTaXplLCBzbmFwR3JpZCwgZ2V0RGlyZWN0aW9uTGFiZWwpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBzcGFjZUJldHdlZW4sXG4gICAgICBjZW50ZXJlZFNsaWRlcyxcbiAgICAgIHJvdW5kTGVuZ3Roc1xuICAgIH0gPSBzd2lwZXIucGFyYW1zO1xuICAgIGNvbnN0IHtcbiAgICAgIHJvd3NcbiAgICB9ID0gc3dpcGVyLnBhcmFtcy5ncmlkO1xuICAgIHN3aXBlci52aXJ0dWFsU2l6ZSA9IChzbGlkZVNpemUgKyBzcGFjZUJldHdlZW4pICogc2xpZGVzTnVtYmVyRXZlblRvUm93cztcbiAgICBzd2lwZXIudmlydHVhbFNpemUgPSBNYXRoLmNlaWwoc3dpcGVyLnZpcnR1YWxTaXplIC8gcm93cykgLSBzcGFjZUJldHdlZW47XG4gICAgc3dpcGVyLndyYXBwZXJFbC5zdHlsZVtnZXREaXJlY3Rpb25MYWJlbCgnd2lkdGgnKV0gPSBgJHtzd2lwZXIudmlydHVhbFNpemUgKyBzcGFjZUJldHdlZW59cHhgO1xuICAgIGlmIChjZW50ZXJlZFNsaWRlcykge1xuICAgICAgY29uc3QgbmV3U2xpZGVzR3JpZCA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbmFwR3JpZC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBsZXQgc2xpZGVzR3JpZEl0ZW0gPSBzbmFwR3JpZFtpXTtcbiAgICAgICAgaWYgKHJvdW5kTGVuZ3Rocykgc2xpZGVzR3JpZEl0ZW0gPSBNYXRoLmZsb29yKHNsaWRlc0dyaWRJdGVtKTtcbiAgICAgICAgaWYgKHNuYXBHcmlkW2ldIDwgc3dpcGVyLnZpcnR1YWxTaXplICsgc25hcEdyaWRbMF0pIG5ld1NsaWRlc0dyaWQucHVzaChzbGlkZXNHcmlkSXRlbSk7XG4gICAgICB9XG4gICAgICBzbmFwR3JpZC5zcGxpY2UoMCwgc25hcEdyaWQubGVuZ3RoKTtcbiAgICAgIHNuYXBHcmlkLnB1c2goLi4ubmV3U2xpZGVzR3JpZCk7XG4gICAgfVxuICB9O1xuICBzd2lwZXIuZ3JpZCA9IHtcbiAgICBpbml0U2xpZGVzLFxuICAgIHVwZGF0ZVNsaWRlLFxuICAgIHVwZGF0ZVdyYXBwZXJTaXplXG4gIH07XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/grid/grid.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/hash-navigation/hash-navigation.js\":\r\n/*!************************************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/hash-navigation/hash-navigation.js ***!\r\n  \\************************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ HashNavigation)\\n/* harmony export */ });\\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \\\"./node_modules/ssr-window/ssr-window.esm.js\\\");\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\n\\nfunction HashNavigation({\\n  swiper,\\n  extendParams,\\n  emit,\\n  on\\n}) {\\n  let initialized = false;\\n  const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)();\\n  const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n  extendParams({\\n    hashNavigation: {\\n      enabled: false,\\n      replaceState: false,\\n      watchState: false\\n    }\\n  });\\n  const onHashChange = () => {\\n    emit('hashChange');\\n    const newHash = document.location.hash.replace('#', '');\\n    const activeSlideHash = swiper.slides[swiper.activeIndex].getAttribute('data-hash');\\n    if (newHash !== activeSlideHash) {\\n      const newIndex = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementIndex)((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementChildren)(swiper.slidesEl, `.${swiper.params.slideClass}[data-hash=\\\"${newHash}\\\"], swiper-slide[data-hash=\\\"${newHash}\\\"]`)[0]);\\n      if (typeof newIndex === 'undefined') return;\\n      swiper.slideTo(newIndex);\\n    }\\n  };\\n  const setHash = () => {\\n    if (!initialized || !swiper.params.hashNavigation.enabled) return;\\n    if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\\n      window.history.replaceState(null, null, `#${swiper.slides[swiper.activeIndex].getAttribute('data-hash')}` || '');\\n      emit('hashSet');\\n    } else {\\n      const slide = swiper.slides[swiper.activeIndex];\\n      const hash = slide.getAttribute('data-hash') || slide.getAttribute('data-history');\\n      document.location.hash = hash || '';\\n      emit('hashSet');\\n    }\\n  };\\n  const init = () => {\\n    if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;\\n    initialized = true;\\n    const hash = document.location.hash.replace('#', '');\\n    if (hash) {\\n      const speed = 0;\\n      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\\n        const slide = swiper.slides[i];\\n        const slideHash = slide.getAttribute('data-hash') || slide.getAttribute('data-history');\\n        if (slideHash === hash) {\\n          const index = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementIndex)(slide);\\n          swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\\n        }\\n      }\\n    }\\n    if (swiper.params.hashNavigation.watchState) {\\n      window.addEventListener('hashchange', onHashChange);\\n    }\\n  };\\n  const destroy = () => {\\n    if (swiper.params.hashNavigation.watchState) {\\n      window.removeEventListener('hashchange', onHashChange);\\n    }\\n  };\\n  on('init', () => {\\n    if (swiper.params.hashNavigation.enabled) {\\n      init();\\n    }\\n  });\\n  on('destroy', () => {\\n    if (swiper.params.hashNavigation.enabled) {\\n      destroy();\\n    }\\n  });\\n  on('transitionEnd _freeModeNoMomentumRelease', () => {\\n    if (initialized) {\\n      setHash();\\n    }\\n  });\\n  on('slideChange', () => {\\n    if (initialized && swiper.params.cssMode) {\\n      setHash();\\n    }\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvaGFzaC1uYXZpZ2F0aW9uL2hhc2gtbmF2aWdhdGlvbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBb0Q7QUFDa0I7QUFDdkQ7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLG1CQUFtQix1REFBVztBQUM5QixpQkFBaUIscURBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsOERBQVksQ0FBQyxpRUFBZSxzQkFBc0IseUJBQXlCLGNBQWMsUUFBUSw4QkFBOEIsUUFBUTtBQUM5SjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCw0REFBNEQ7QUFDOUc7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELFlBQVk7QUFDakU7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDhEQUFZO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvbW9kdWxlcy9oYXNoLW5hdmlnYXRpb24vaGFzaC1uYXZpZ2F0aW9uLmpzPzQwMjAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0V2luZG93LCBnZXREb2N1bWVudCB9IGZyb20gJ3Nzci13aW5kb3cnO1xuaW1wb3J0IHsgZWxlbWVudENoaWxkcmVuLCBlbGVtZW50SW5kZXggfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gSGFzaE5hdmlnYXRpb24oe1xuICBzd2lwZXIsXG4gIGV4dGVuZFBhcmFtcyxcbiAgZW1pdCxcbiAgb25cbn0pIHtcbiAgbGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG4gIGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIGV4dGVuZFBhcmFtcyh7XG4gICAgaGFzaE5hdmlnYXRpb246IHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcmVwbGFjZVN0YXRlOiBmYWxzZSxcbiAgICAgIHdhdGNoU3RhdGU6IGZhbHNlXG4gICAgfVxuICB9KTtcbiAgY29uc3Qgb25IYXNoQ2hhbmdlID0gKCkgPT4ge1xuICAgIGVtaXQoJ2hhc2hDaGFuZ2UnKTtcbiAgICBjb25zdCBuZXdIYXNoID0gZG9jdW1lbnQubG9jYXRpb24uaGFzaC5yZXBsYWNlKCcjJywgJycpO1xuICAgIGNvbnN0IGFjdGl2ZVNsaWRlSGFzaCA9IHN3aXBlci5zbGlkZXNbc3dpcGVyLmFjdGl2ZUluZGV4XS5nZXRBdHRyaWJ1dGUoJ2RhdGEtaGFzaCcpO1xuICAgIGlmIChuZXdIYXNoICE9PSBhY3RpdmVTbGlkZUhhc2gpIHtcbiAgICAgIGNvbnN0IG5ld0luZGV4ID0gZWxlbWVudEluZGV4KGVsZW1lbnRDaGlsZHJlbihzd2lwZXIuc2xpZGVzRWwsIGAuJHtzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3N9W2RhdGEtaGFzaD1cIiR7bmV3SGFzaH1cIl0sIHN3aXBlci1zbGlkZVtkYXRhLWhhc2g9XCIke25ld0hhc2h9XCJdYClbMF0pO1xuICAgICAgaWYgKHR5cGVvZiBuZXdJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgICAgIHN3aXBlci5zbGlkZVRvKG5ld0luZGV4KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHNldEhhc2ggPSAoKSA9PiB7XG4gICAgaWYgKCFpbml0aWFsaXplZCB8fCAhc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5lbmFibGVkKSByZXR1cm47XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuaGFzaE5hdmlnYXRpb24ucmVwbGFjZVN0YXRlICYmIHdpbmRvdy5oaXN0b3J5ICYmIHdpbmRvdy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSkge1xuICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIG51bGwsIGAjJHtzd2lwZXIuc2xpZGVzW3N3aXBlci5hY3RpdmVJbmRleF0uZ2V0QXR0cmlidXRlKCdkYXRhLWhhc2gnKX1gIHx8ICcnKTtcbiAgICAgIGVtaXQoJ2hhc2hTZXQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2xpZGUgPSBzd2lwZXIuc2xpZGVzW3N3aXBlci5hY3RpdmVJbmRleF07XG4gICAgICBjb25zdCBoYXNoID0gc2xpZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWhhc2gnKSB8fCBzbGlkZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtaGlzdG9yeScpO1xuICAgICAgZG9jdW1lbnQubG9jYXRpb24uaGFzaCA9IGhhc2ggfHwgJyc7XG4gICAgICBlbWl0KCdoYXNoU2V0Jyk7XG4gICAgfVxuICB9O1xuICBjb25zdCBpbml0ID0gKCkgPT4ge1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5lbmFibGVkIHx8IHN3aXBlci5wYXJhbXMuaGlzdG9yeSAmJiBzd2lwZXIucGFyYW1zLmhpc3RvcnkuZW5hYmxlZCkgcmV0dXJuO1xuICAgIGluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICBjb25zdCBoYXNoID0gZG9jdW1lbnQubG9jYXRpb24uaGFzaC5yZXBsYWNlKCcjJywgJycpO1xuICAgIGlmIChoYXNoKSB7XG4gICAgICBjb25zdCBzcGVlZCA9IDA7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gc3dpcGVyLnNsaWRlcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBjb25zdCBzbGlkZSA9IHN3aXBlci5zbGlkZXNbaV07XG4gICAgICAgIGNvbnN0IHNsaWRlSGFzaCA9IHNsaWRlLmdldEF0dHJpYnV0ZSgnZGF0YS1oYXNoJykgfHwgc2xpZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWhpc3RvcnknKTtcbiAgICAgICAgaWYgKHNsaWRlSGFzaCA9PT0gaGFzaCkge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gZWxlbWVudEluZGV4KHNsaWRlKTtcbiAgICAgICAgICBzd2lwZXIuc2xpZGVUbyhpbmRleCwgc3BlZWQsIHN3aXBlci5wYXJhbXMucnVuQ2FsbGJhY2tzT25Jbml0LCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi53YXRjaFN0YXRlKSB7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignaGFzaGNoYW5nZScsIG9uSGFzaENoYW5nZSk7XG4gICAgfVxuICB9O1xuICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmhhc2hOYXZpZ2F0aW9uLndhdGNoU3RhdGUpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdoYXNoY2hhbmdlJywgb25IYXNoQ2hhbmdlKTtcbiAgICB9XG4gIH07XG4gIG9uKCdpbml0JywgKCkgPT4ge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmhhc2hOYXZpZ2F0aW9uLmVuYWJsZWQpIHtcbiAgICAgIGluaXQoKTtcbiAgICB9XG4gIH0pO1xuICBvbignZGVzdHJveScsICgpID0+IHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5lbmFibGVkKSB7XG4gICAgICBkZXN0cm95KCk7XG4gICAgfVxuICB9KTtcbiAgb24oJ3RyYW5zaXRpb25FbmQgX2ZyZWVNb2RlTm9Nb21lbnR1bVJlbGVhc2UnLCAoKSA9PiB7XG4gICAgaWYgKGluaXRpYWxpemVkKSB7XG4gICAgICBzZXRIYXNoKCk7XG4gICAgfVxuICB9KTtcbiAgb24oJ3NsaWRlQ2hhbmdlJywgKCkgPT4ge1xuICAgIGlmIChpbml0aWFsaXplZCAmJiBzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHNldEhhc2goKTtcbiAgICB9XG4gIH0pO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/hash-navigation/hash-navigation.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/history/history.js\":\r\n/*!********************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/history/history.js ***!\r\n  \\********************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ History)\\n/* harmony export */ });\\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \\\"./node_modules/ssr-window/ssr-window.esm.js\\\");\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\n\\nfunction History({\\n  swiper,\\n  extendParams,\\n  on\\n}) {\\n  extendParams({\\n    history: {\\n      enabled: false,\\n      root: '',\\n      replaceState: false,\\n      key: 'slides',\\n      keepQuery: false\\n    }\\n  });\\n  let initialized = false;\\n  let paths = {};\\n  const slugify = text => {\\n    return text.toString().replace(/\\\\s+/g, '-').replace(/[^\\\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\\n  };\\n  const getPathValues = urlOverride => {\\n    const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n    let location;\\n    if (urlOverride) {\\n      location = new URL(urlOverride);\\n    } else {\\n      location = window.location;\\n    }\\n    const pathArray = location.pathname.slice(1).split('/').filter(part => part !== '');\\n    const total = pathArray.length;\\n    const key = pathArray[total - 2];\\n    const value = pathArray[total - 1];\\n    return {\\n      key,\\n      value\\n    };\\n  };\\n  const setHistory = (key, index) => {\\n    const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n    if (!initialized || !swiper.params.history.enabled) return;\\n    let location;\\n    if (swiper.params.url) {\\n      location = new URL(swiper.params.url);\\n    } else {\\n      location = window.location;\\n    }\\n    const slide = swiper.slides[index];\\n    let value = slugify(slide.getAttribute('data-history'));\\n    if (swiper.params.history.root.length > 0) {\\n      let root = swiper.params.history.root;\\n      if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);\\n      value = `${root}/${key ? `${key}/` : ''}${value}`;\\n    } else if (!location.pathname.includes(key)) {\\n      value = `${key ? `${key}/` : ''}${value}`;\\n    }\\n    if (swiper.params.history.keepQuery) {\\n      value += location.search;\\n    }\\n    const currentState = window.history.state;\\n    if (currentState && currentState.value === value) {\\n      return;\\n    }\\n    if (swiper.params.history.replaceState) {\\n      window.history.replaceState({\\n        value\\n      }, null, value);\\n    } else {\\n      window.history.pushState({\\n        value\\n      }, null, value);\\n    }\\n  };\\n  const scrollToSlide = (speed, value, runCallbacks) => {\\n    if (value) {\\n      for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\\n        const slide = swiper.slides[i];\\n        const slideHistory = slugify(slide.getAttribute('data-history'));\\n        if (slideHistory === value) {\\n          const index = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementIndex)(slide);\\n          swiper.slideTo(index, speed, runCallbacks);\\n        }\\n      }\\n    } else {\\n      swiper.slideTo(0, speed, runCallbacks);\\n    }\\n  };\\n  const setHistoryPopState = () => {\\n    paths = getPathValues(swiper.params.url);\\n    scrollToSlide(swiper.params.speed, paths.value, false);\\n  };\\n  const init = () => {\\n    const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n    if (!swiper.params.history) return;\\n    if (!window.history || !window.history.pushState) {\\n      swiper.params.history.enabled = false;\\n      swiper.params.hashNavigation.enabled = true;\\n      return;\\n    }\\n    initialized = true;\\n    paths = getPathValues(swiper.params.url);\\n    if (!paths.key && !paths.value) {\\n      if (!swiper.params.history.replaceState) {\\n        window.addEventListener('popstate', setHistoryPopState);\\n      }\\n      return;\\n    }\\n    scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);\\n    if (!swiper.params.history.replaceState) {\\n      window.addEventListener('popstate', setHistoryPopState);\\n    }\\n  };\\n  const destroy = () => {\\n    const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n    if (!swiper.params.history.replaceState) {\\n      window.removeEventListener('popstate', setHistoryPopState);\\n    }\\n  };\\n  on('init', () => {\\n    if (swiper.params.history.enabled) {\\n      init();\\n    }\\n  });\\n  on('destroy', () => {\\n    if (swiper.params.history.enabled) {\\n      destroy();\\n    }\\n  });\\n  on('transitionEnd _freeModeNoMomentumRelease', () => {\\n    if (initialized) {\\n      setHistory(swiper.params.history.key, swiper.activeIndex);\\n    }\\n  });\\n  on('slideChange', () => {\\n    if (initialized && swiper.params.cssMode) {\\n      setHistory(swiper.params.history.key, swiper.activeIndex);\\n    }\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvaGlzdG9yeS9oaXN0b3J5LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF1QztBQUNjO0FBQ3RDO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHFEQUFTO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIscURBQVM7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsS0FBSyxHQUFHLFNBQVMsSUFBSSxRQUFRLEVBQUUsTUFBTTtBQUN0RCxNQUFNO0FBQ04saUJBQWlCLFNBQVMsSUFBSSxRQUFRLEVBQUUsTUFBTTtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELFlBQVk7QUFDakU7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDhEQUFZO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLHFEQUFTO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIscURBQVM7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9tb2R1bGVzL2hpc3RvcnkvaGlzdG9yeS5qcz8yZjJlIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gJ3Nzci13aW5kb3cnO1xuaW1wb3J0IHsgZWxlbWVudEluZGV4IH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEhpc3Rvcnkoe1xuICBzd2lwZXIsXG4gIGV4dGVuZFBhcmFtcyxcbiAgb25cbn0pIHtcbiAgZXh0ZW5kUGFyYW1zKHtcbiAgICBoaXN0b3J5OiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIHJvb3Q6ICcnLFxuICAgICAgcmVwbGFjZVN0YXRlOiBmYWxzZSxcbiAgICAgIGtleTogJ3NsaWRlcycsXG4gICAgICBrZWVwUXVlcnk6IGZhbHNlXG4gICAgfVxuICB9KTtcbiAgbGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG4gIGxldCBwYXRocyA9IHt9O1xuICBjb25zdCBzbHVnaWZ5ID0gdGV4dCA9PiB7XG4gICAgcmV0dXJuIHRleHQudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csICctJykucmVwbGFjZSgvW15cXHctXSsvZywgJycpLnJlcGxhY2UoLy0tKy9nLCAnLScpLnJlcGxhY2UoL14tKy8sICcnKS5yZXBsYWNlKC8tKyQvLCAnJyk7XG4gIH07XG4gIGNvbnN0IGdldFBhdGhWYWx1ZXMgPSB1cmxPdmVycmlkZSA9PiB7XG4gICAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgbGV0IGxvY2F0aW9uO1xuICAgIGlmICh1cmxPdmVycmlkZSkge1xuICAgICAgbG9jYXRpb24gPSBuZXcgVVJMKHVybE92ZXJyaWRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG4gICAgfVxuICAgIGNvbnN0IHBhdGhBcnJheSA9IGxvY2F0aW9uLnBhdGhuYW1lLnNsaWNlKDEpLnNwbGl0KCcvJykuZmlsdGVyKHBhcnQgPT4gcGFydCAhPT0gJycpO1xuICAgIGNvbnN0IHRvdGFsID0gcGF0aEFycmF5Lmxlbmd0aDtcbiAgICBjb25zdCBrZXkgPSBwYXRoQXJyYXlbdG90YWwgLSAyXTtcbiAgICBjb25zdCB2YWx1ZSA9IHBhdGhBcnJheVt0b3RhbCAtIDFdO1xuICAgIHJldHVybiB7XG4gICAgICBrZXksXG4gICAgICB2YWx1ZVxuICAgIH07XG4gIH07XG4gIGNvbnN0IHNldEhpc3RvcnkgPSAoa2V5LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICAgIGlmICghaW5pdGlhbGl6ZWQgfHwgIXN3aXBlci5wYXJhbXMuaGlzdG9yeS5lbmFibGVkKSByZXR1cm47XG4gICAgbGV0IGxvY2F0aW9uO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLnVybCkge1xuICAgICAgbG9jYXRpb24gPSBuZXcgVVJMKHN3aXBlci5wYXJhbXMudXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG4gICAgfVxuICAgIGNvbnN0IHNsaWRlID0gc3dpcGVyLnNsaWRlc1tpbmRleF07XG4gICAgbGV0IHZhbHVlID0gc2x1Z2lmeShzbGlkZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtaGlzdG9yeScpKTtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5oaXN0b3J5LnJvb3QubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IHJvb3QgPSBzd2lwZXIucGFyYW1zLmhpc3Rvcnkucm9vdDtcbiAgICAgIGlmIChyb290W3Jvb3QubGVuZ3RoIC0gMV0gPT09ICcvJykgcm9vdCA9IHJvb3Quc2xpY2UoMCwgcm9vdC5sZW5ndGggLSAxKTtcbiAgICAgIHZhbHVlID0gYCR7cm9vdH0vJHtrZXkgPyBgJHtrZXl9L2AgOiAnJ30ke3ZhbHVlfWA7XG4gICAgfSBlbHNlIGlmICghbG9jYXRpb24ucGF0aG5hbWUuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgdmFsdWUgPSBgJHtrZXkgPyBgJHtrZXl9L2AgOiAnJ30ke3ZhbHVlfWA7XG4gICAgfVxuICAgIGlmIChzd2lwZXIucGFyYW1zLmhpc3Rvcnkua2VlcFF1ZXJ5KSB7XG4gICAgICB2YWx1ZSArPSBsb2NhdGlvbi5zZWFyY2g7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHdpbmRvdy5oaXN0b3J5LnN0YXRlO1xuICAgIGlmIChjdXJyZW50U3RhdGUgJiYgY3VycmVudFN0YXRlLnZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSkge1xuICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHtcbiAgICAgICAgdmFsdWVcbiAgICAgIH0sIG51bGwsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHtcbiAgICAgICAgdmFsdWVcbiAgICAgIH0sIG51bGwsIHZhbHVlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHNjcm9sbFRvU2xpZGUgPSAoc3BlZWQsIHZhbHVlLCBydW5DYWxsYmFja3MpID0+IHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBzd2lwZXIuc2xpZGVzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGNvbnN0IHNsaWRlID0gc3dpcGVyLnNsaWRlc1tpXTtcbiAgICAgICAgY29uc3Qgc2xpZGVIaXN0b3J5ID0gc2x1Z2lmeShzbGlkZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtaGlzdG9yeScpKTtcbiAgICAgICAgaWYgKHNsaWRlSGlzdG9yeSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGVsZW1lbnRJbmRleChzbGlkZSk7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlVG8oaW5kZXgsIHNwZWVkLCBydW5DYWxsYmFja3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKDAsIHNwZWVkLCBydW5DYWxsYmFja3MpO1xuICAgIH1cbiAgfTtcbiAgY29uc3Qgc2V0SGlzdG9yeVBvcFN0YXRlID0gKCkgPT4ge1xuICAgIHBhdGhzID0gZ2V0UGF0aFZhbHVlcyhzd2lwZXIucGFyYW1zLnVybCk7XG4gICAgc2Nyb2xsVG9TbGlkZShzd2lwZXIucGFyYW1zLnNwZWVkLCBwYXRocy52YWx1ZSwgZmFsc2UpO1xuICB9O1xuICBjb25zdCBpbml0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5oaXN0b3J5KSByZXR1cm47XG4gICAgaWYgKCF3aW5kb3cuaGlzdG9yeSB8fCAhd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKSB7XG4gICAgICBzd2lwZXIucGFyYW1zLmhpc3RvcnkuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgc3dpcGVyLnBhcmFtcy5oYXNoTmF2aWdhdGlvbi5lbmFibGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIHBhdGhzID0gZ2V0UGF0aFZhbHVlcyhzd2lwZXIucGFyYW1zLnVybCk7XG4gICAgaWYgKCFwYXRocy5rZXkgJiYgIXBhdGhzLnZhbHVlKSB7XG4gICAgICBpZiAoIXN3aXBlci5wYXJhbXMuaGlzdG9yeS5yZXBsYWNlU3RhdGUpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgc2V0SGlzdG9yeVBvcFN0YXRlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2Nyb2xsVG9TbGlkZSgwLCBwYXRocy52YWx1ZSwgc3dpcGVyLnBhcmFtcy5ydW5DYWxsYmFja3NPbkluaXQpO1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5oaXN0b3J5LnJlcGxhY2VTdGF0ZSkge1xuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgc2V0SGlzdG9yeVBvcFN0YXRlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLmhpc3RvcnkucmVwbGFjZVN0YXRlKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLCBzZXRIaXN0b3J5UG9wU3RhdGUpO1xuICAgIH1cbiAgfTtcbiAgb24oJ2luaXQnLCAoKSA9PiB7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuaGlzdG9yeS5lbmFibGVkKSB7XG4gICAgICBpbml0KCk7XG4gICAgfVxuICB9KTtcbiAgb24oJ2Rlc3Ryb3knLCAoKSA9PiB7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuaGlzdG9yeS5lbmFibGVkKSB7XG4gICAgICBkZXN0cm95KCk7XG4gICAgfVxuICB9KTtcbiAgb24oJ3RyYW5zaXRpb25FbmQgX2ZyZWVNb2RlTm9Nb21lbnR1bVJlbGVhc2UnLCAoKSA9PiB7XG4gICAgaWYgKGluaXRpYWxpemVkKSB7XG4gICAgICBzZXRIaXN0b3J5KHN3aXBlci5wYXJhbXMuaGlzdG9yeS5rZXksIHN3aXBlci5hY3RpdmVJbmRleCk7XG4gICAgfVxuICB9KTtcbiAgb24oJ3NsaWRlQ2hhbmdlJywgKCkgPT4ge1xuICAgIGlmIChpbml0aWFsaXplZCAmJiBzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHNldEhpc3Rvcnkoc3dpcGVyLnBhcmFtcy5oaXN0b3J5LmtleSwgc3dpcGVyLmFjdGl2ZUluZGV4KTtcbiAgICB9XG4gIH0pO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/history/history.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/keyboard/keyboard.js\":\r\n/*!**********************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/keyboard/keyboard.js ***!\r\n  \\**********************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ Keyboard)\\n/* harmony export */ });\\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \\\"./node_modules/ssr-window/ssr-window.esm.js\\\");\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n/* eslint-disable consistent-return */\\n\\n\\nfunction Keyboard({\\n  swiper,\\n  extendParams,\\n  on,\\n  emit\\n}) {\\n  const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)();\\n  const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n  swiper.keyboard = {\\n    enabled: false\\n  };\\n  extendParams({\\n    keyboard: {\\n      enabled: false,\\n      onlyInViewport: true,\\n      pageUpDown: true\\n    }\\n  });\\n  function handle(event) {\\n    if (!swiper.enabled) return;\\n    const {\\n      rtlTranslate: rtl\\n    } = swiper;\\n    let e = event;\\n    if (e.originalEvent) e = e.originalEvent; // jquery fix\\n    const kc = e.keyCode || e.charCode;\\n    const pageUpDown = swiper.params.keyboard.pageUpDown;\\n    const isPageUp = pageUpDown && kc === 33;\\n    const isPageDown = pageUpDown && kc === 34;\\n    const isArrowLeft = kc === 37;\\n    const isArrowRight = kc === 39;\\n    const isArrowUp = kc === 38;\\n    const isArrowDown = kc === 40;\\n    // Directions locks\\n    if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\\n      return false;\\n    }\\n    if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\\n      return false;\\n    }\\n    if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\\n      return undefined;\\n    }\\n    if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\\n      return undefined;\\n    }\\n    if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\\n      let inView = false;\\n      // Check that swiper should be inside of visible area of window\\n      if ((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementParents)(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 && (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementParents)(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) {\\n        return undefined;\\n      }\\n      const el = swiper.el;\\n      const swiperWidth = el.clientWidth;\\n      const swiperHeight = el.clientHeight;\\n      const windowWidth = window.innerWidth;\\n      const windowHeight = window.innerHeight;\\n      const swiperOffset = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementOffset)(el);\\n      if (rtl) swiperOffset.left -= el.scrollLeft;\\n      const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\\n      for (let i = 0; i < swiperCoord.length; i += 1) {\\n        const point = swiperCoord[i];\\n        if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\\n          if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\\n          inView = true;\\n        }\\n      }\\n      if (!inView) return undefined;\\n    }\\n    if (swiper.isHorizontal()) {\\n      if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\\n        if (e.preventDefault) e.preventDefault();else e.returnValue = false;\\n      }\\n      if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\\n      if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\\n    } else {\\n      if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\\n        if (e.preventDefault) e.preventDefault();else e.returnValue = false;\\n      }\\n      if (isPageDown || isArrowDown) swiper.slideNext();\\n      if (isPageUp || isArrowUp) swiper.slidePrev();\\n    }\\n    emit('keyPress', kc);\\n    return undefined;\\n  }\\n  function enable() {\\n    if (swiper.keyboard.enabled) return;\\n    document.addEventListener('keydown', handle);\\n    swiper.keyboard.enabled = true;\\n  }\\n  function disable() {\\n    if (!swiper.keyboard.enabled) return;\\n    document.removeEventListener('keydown', handle);\\n    swiper.keyboard.enabled = false;\\n  }\\n  on('init', () => {\\n    if (swiper.params.keyboard.enabled) {\\n      enable();\\n    }\\n  });\\n  on('destroy', () => {\\n    if (swiper.keyboard.enabled) {\\n      disable();\\n    }\\n  });\\n  Object.assign(swiper.keyboard, {\\n    enable,\\n    disable\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMva2V5Ym9hcmQva2V5Ym9hcmQuanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDb0Q7QUFDa0I7QUFDdkQ7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxtQkFBbUIsdURBQVc7QUFDOUIsaUJBQWlCLHFEQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVLGdFQUFjLGdCQUFnQix5QkFBeUIsK0JBQStCLGdFQUFjLGdCQUFnQiwrQkFBK0I7QUFDN0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsK0RBQWE7QUFDeEM7QUFDQTtBQUNBLHNCQUFzQix3QkFBd0I7QUFDOUM7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRDtBQUNqRDtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9tb2R1bGVzL2tleWJvYXJkL2tleWJvYXJkLmpzP2FkNTQiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29uc2lzdGVudC1yZXR1cm4gKi9cbmltcG9ydCB7IGdldFdpbmRvdywgZ2V0RG9jdW1lbnQgfSBmcm9tICdzc3Itd2luZG93JztcbmltcG9ydCB7IGVsZW1lbnRPZmZzZXQsIGVsZW1lbnRQYXJlbnRzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEtleWJvYXJkKHtcbiAgc3dpcGVyLFxuICBleHRlbmRQYXJhbXMsXG4gIG9uLFxuICBlbWl0XG59KSB7XG4gIGNvbnN0IGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIHN3aXBlci5rZXlib2FyZCA9IHtcbiAgICBlbmFibGVkOiBmYWxzZVxuICB9O1xuICBleHRlbmRQYXJhbXMoe1xuICAgIGtleWJvYXJkOiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIG9ubHlJblZpZXdwb3J0OiB0cnVlLFxuICAgICAgcGFnZVVwRG93bjogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGZ1bmN0aW9uIGhhbmRsZShldmVudCkge1xuICAgIGlmICghc3dpcGVyLmVuYWJsZWQpIHJldHVybjtcbiAgICBjb25zdCB7XG4gICAgICBydGxUcmFuc2xhdGU6IHJ0bFxuICAgIH0gPSBzd2lwZXI7XG4gICAgbGV0IGUgPSBldmVudDtcbiAgICBpZiAoZS5vcmlnaW5hbEV2ZW50KSBlID0gZS5vcmlnaW5hbEV2ZW50OyAvLyBqcXVlcnkgZml4XG4gICAgY29uc3Qga2MgPSBlLmtleUNvZGUgfHwgZS5jaGFyQ29kZTtcbiAgICBjb25zdCBwYWdlVXBEb3duID0gc3dpcGVyLnBhcmFtcy5rZXlib2FyZC5wYWdlVXBEb3duO1xuICAgIGNvbnN0IGlzUGFnZVVwID0gcGFnZVVwRG93biAmJiBrYyA9PT0gMzM7XG4gICAgY29uc3QgaXNQYWdlRG93biA9IHBhZ2VVcERvd24gJiYga2MgPT09IDM0O1xuICAgIGNvbnN0IGlzQXJyb3dMZWZ0ID0ga2MgPT09IDM3O1xuICAgIGNvbnN0IGlzQXJyb3dSaWdodCA9IGtjID09PSAzOTtcbiAgICBjb25zdCBpc0Fycm93VXAgPSBrYyA9PT0gMzg7XG4gICAgY29uc3QgaXNBcnJvd0Rvd24gPSBrYyA9PT0gNDA7XG4gICAgLy8gRGlyZWN0aW9ucyBsb2Nrc1xuICAgIGlmICghc3dpcGVyLmFsbG93U2xpZGVOZXh0ICYmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkgJiYgaXNBcnJvd1JpZ2h0IHx8IHN3aXBlci5pc1ZlcnRpY2FsKCkgJiYgaXNBcnJvd0Rvd24gfHwgaXNQYWdlRG93bikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFzd2lwZXIuYWxsb3dTbGlkZVByZXYgJiYgKHN3aXBlci5pc0hvcml6b250YWwoKSAmJiBpc0Fycm93TGVmdCB8fCBzd2lwZXIuaXNWZXJ0aWNhbCgpICYmIGlzQXJyb3dVcCB8fCBpc1BhZ2VVcCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGUuc2hpZnRLZXkgfHwgZS5hbHRLZXkgfHwgZS5jdHJsS2V5IHx8IGUubWV0YUtleSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ub2RlTmFtZSAmJiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3RleHRhcmVhJykpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChzd2lwZXIucGFyYW1zLmtleWJvYXJkLm9ubHlJblZpZXdwb3J0ICYmIChpc1BhZ2VVcCB8fCBpc1BhZ2VEb3duIHx8IGlzQXJyb3dMZWZ0IHx8IGlzQXJyb3dSaWdodCB8fCBpc0Fycm93VXAgfHwgaXNBcnJvd0Rvd24pKSB7XG4gICAgICBsZXQgaW5WaWV3ID0gZmFsc2U7XG4gICAgICAvLyBDaGVjayB0aGF0IHN3aXBlciBzaG91bGQgYmUgaW5zaWRlIG9mIHZpc2libGUgYXJlYSBvZiB3aW5kb3dcbiAgICAgIGlmIChlbGVtZW50UGFyZW50cyhzd2lwZXIuZWwsIGAuJHtzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3N9LCBzd2lwZXItc2xpZGVgKS5sZW5ndGggPiAwICYmIGVsZW1lbnRQYXJlbnRzKHN3aXBlci5lbCwgYC4ke3N3aXBlci5wYXJhbXMuc2xpZGVBY3RpdmVDbGFzc31gKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVsID0gc3dpcGVyLmVsO1xuICAgICAgY29uc3Qgc3dpcGVyV2lkdGggPSBlbC5jbGllbnRXaWR0aDtcbiAgICAgIGNvbnN0IHN3aXBlckhlaWdodCA9IGVsLmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgICBjb25zdCBzd2lwZXJPZmZzZXQgPSBlbGVtZW50T2Zmc2V0KGVsKTtcbiAgICAgIGlmIChydGwpIHN3aXBlck9mZnNldC5sZWZ0IC09IGVsLnNjcm9sbExlZnQ7XG4gICAgICBjb25zdCBzd2lwZXJDb29yZCA9IFtbc3dpcGVyT2Zmc2V0LmxlZnQsIHN3aXBlck9mZnNldC50b3BdLCBbc3dpcGVyT2Zmc2V0LmxlZnQgKyBzd2lwZXJXaWR0aCwgc3dpcGVyT2Zmc2V0LnRvcF0sIFtzd2lwZXJPZmZzZXQubGVmdCwgc3dpcGVyT2Zmc2V0LnRvcCArIHN3aXBlckhlaWdodF0sIFtzd2lwZXJPZmZzZXQubGVmdCArIHN3aXBlcldpZHRoLCBzd2lwZXJPZmZzZXQudG9wICsgc3dpcGVySGVpZ2h0XV07XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN3aXBlckNvb3JkLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGNvbnN0IHBvaW50ID0gc3dpcGVyQ29vcmRbaV07XG4gICAgICAgIGlmIChwb2ludFswXSA+PSAwICYmIHBvaW50WzBdIDw9IHdpbmRvd1dpZHRoICYmIHBvaW50WzFdID49IDAgJiYgcG9pbnRbMV0gPD0gd2luZG93SGVpZ2h0KSB7XG4gICAgICAgICAgaWYgKHBvaW50WzBdID09PSAwICYmIHBvaW50WzFdID09PSAwKSBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgICAgIGluVmlldyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghaW5WaWV3KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICBpZiAoaXNQYWdlVXAgfHwgaXNQYWdlRG93biB8fCBpc0Fycm93TGVmdCB8fCBpc0Fycm93UmlnaHQpIHtcbiAgICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQoKTtlbHNlIGUucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICgoaXNQYWdlRG93biB8fCBpc0Fycm93UmlnaHQpICYmICFydGwgfHwgKGlzUGFnZVVwIHx8IGlzQXJyb3dMZWZ0KSAmJiBydGwpIHN3aXBlci5zbGlkZU5leHQoKTtcbiAgICAgIGlmICgoaXNQYWdlVXAgfHwgaXNBcnJvd0xlZnQpICYmICFydGwgfHwgKGlzUGFnZURvd24gfHwgaXNBcnJvd1JpZ2h0KSAmJiBydGwpIHN3aXBlci5zbGlkZVByZXYoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzUGFnZVVwIHx8IGlzUGFnZURvd24gfHwgaXNBcnJvd1VwIHx8IGlzQXJyb3dEb3duKSB7XG4gICAgICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSBlLnByZXZlbnREZWZhdWx0KCk7ZWxzZSBlLnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoaXNQYWdlRG93biB8fCBpc0Fycm93RG93bikgc3dpcGVyLnNsaWRlTmV4dCgpO1xuICAgICAgaWYgKGlzUGFnZVVwIHx8IGlzQXJyb3dVcCkgc3dpcGVyLnNsaWRlUHJldigpO1xuICAgIH1cbiAgICBlbWl0KCdrZXlQcmVzcycsIGtjKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGZ1bmN0aW9uIGVuYWJsZSgpIHtcbiAgICBpZiAoc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQpIHJldHVybjtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlKTtcbiAgICBzd2lwZXIua2V5Ym9hcmQuZW5hYmxlZCA9IHRydWU7XG4gIH1cbiAgZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICBpZiAoIXN3aXBlci5rZXlib2FyZC5lbmFibGVkKSByZXR1cm47XG4gICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZSk7XG4gICAgc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQgPSBmYWxzZTtcbiAgfVxuICBvbignaW5pdCcsICgpID0+IHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5rZXlib2FyZC5lbmFibGVkKSB7XG4gICAgICBlbmFibGUoKTtcbiAgICB9XG4gIH0pO1xuICBvbignZGVzdHJveScsICgpID0+IHtcbiAgICBpZiAoc3dpcGVyLmtleWJvYXJkLmVuYWJsZWQpIHtcbiAgICAgIGRpc2FibGUoKTtcbiAgICB9XG4gIH0pO1xuICBPYmplY3QuYXNzaWduKHN3aXBlci5rZXlib2FyZCwge1xuICAgIGVuYWJsZSxcbiAgICBkaXNhYmxlXG4gIH0pO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/keyboard/keyboard.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/manipulation/manipulation.js\":\r\n/*!******************************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/manipulation/manipulation.js ***!\r\n  \\******************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ Manipulation)\\n/* harmony export */ });\\n/* harmony import */ var _methods_appendSlide_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./methods/appendSlide.js */ \\\"./node_modules/swiper/modules/manipulation/methods/appendSlide.js\\\");\\n/* harmony import */ var _methods_prependSlide_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./methods/prependSlide.js */ \\\"./node_modules/swiper/modules/manipulation/methods/prependSlide.js\\\");\\n/* harmony import */ var _methods_addSlide_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./methods/addSlide.js */ \\\"./node_modules/swiper/modules/manipulation/methods/addSlide.js\\\");\\n/* harmony import */ var _methods_removeSlide_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./methods/removeSlide.js */ \\\"./node_modules/swiper/modules/manipulation/methods/removeSlide.js\\\");\\n/* harmony import */ var _methods_removeAllSlides_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./methods/removeAllSlides.js */ \\\"./node_modules/swiper/modules/manipulation/methods/removeAllSlides.js\\\");\\n\\n\\n\\n\\n\\nfunction Manipulation({\\n  swiper\\n}) {\\n  Object.assign(swiper, {\\n    appendSlide: _methods_appendSlide_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"].bind(swiper),\\n    prependSlide: _methods_prependSlide_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"].bind(swiper),\\n    addSlide: _methods_addSlide_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].bind(swiper),\\n    removeSlide: _methods_removeSlide_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"].bind(swiper),\\n    removeAllSlides: _methods_removeAllSlides_js__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"].bind(swiper)\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvbWFuaXB1bGF0aW9uL21hbmlwdWxhdGlvbi5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBbUQ7QUFDRTtBQUNSO0FBQ007QUFDUTtBQUM1QztBQUNmO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsaUJBQWlCLG9FQUFnQjtBQUNqQyxrQkFBa0IscUVBQWlCO0FBQ25DLGNBQWMsaUVBQWE7QUFDM0IsaUJBQWlCLG9FQUFnQjtBQUNqQyxxQkFBcUIsd0VBQW9CO0FBQ3pDLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9tb2R1bGVzL21hbmlwdWxhdGlvbi9tYW5pcHVsYXRpb24uanM/YjIxYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXBwZW5kU2xpZGUgZnJvbSAnLi9tZXRob2RzL2FwcGVuZFNsaWRlLmpzJztcbmltcG9ydCBwcmVwZW5kU2xpZGUgZnJvbSAnLi9tZXRob2RzL3ByZXBlbmRTbGlkZS5qcyc7XG5pbXBvcnQgYWRkU2xpZGUgZnJvbSAnLi9tZXRob2RzL2FkZFNsaWRlLmpzJztcbmltcG9ydCByZW1vdmVTbGlkZSBmcm9tICcuL21ldGhvZHMvcmVtb3ZlU2xpZGUuanMnO1xuaW1wb3J0IHJlbW92ZUFsbFNsaWRlcyBmcm9tICcuL21ldGhvZHMvcmVtb3ZlQWxsU2xpZGVzLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1hbmlwdWxhdGlvbih7XG4gIHN3aXBlclxufSkge1xuICBPYmplY3QuYXNzaWduKHN3aXBlciwge1xuICAgIGFwcGVuZFNsaWRlOiBhcHBlbmRTbGlkZS5iaW5kKHN3aXBlciksXG4gICAgcHJlcGVuZFNsaWRlOiBwcmVwZW5kU2xpZGUuYmluZChzd2lwZXIpLFxuICAgIGFkZFNsaWRlOiBhZGRTbGlkZS5iaW5kKHN3aXBlciksXG4gICAgcmVtb3ZlU2xpZGU6IHJlbW92ZVNsaWRlLmJpbmQoc3dpcGVyKSxcbiAgICByZW1vdmVBbGxTbGlkZXM6IHJlbW92ZUFsbFNsaWRlcy5iaW5kKHN3aXBlcilcbiAgfSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/manipulation/manipulation.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/manipulation/methods/addSlide.js\":\r\n/*!**********************************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/manipulation/methods/addSlide.js ***!\r\n  \\**********************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ addSlide)\\n/* harmony export */ });\\nfunction addSlide(index, slides) {\\n  const swiper = this;\\n  const {\\n    params,\\n    activeIndex,\\n    slidesEl\\n  } = swiper;\\n  let activeIndexBuffer = activeIndex;\\n  if (params.loop) {\\n    activeIndexBuffer -= swiper.loopedSlides;\\n    swiper.loopDestroy();\\n    swiper.recalcSlides();\\n  }\\n  const baseLength = swiper.slides.length;\\n  if (index <= 0) {\\n    swiper.prependSlide(slides);\\n    return;\\n  }\\n  if (index >= baseLength) {\\n    swiper.appendSlide(slides);\\n    return;\\n  }\\n  let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\\n  const slidesBuffer = [];\\n  for (let i = baseLength - 1; i >= index; i -= 1) {\\n    const currentSlide = swiper.slides[i];\\n    currentSlide.remove();\\n    slidesBuffer.unshift(currentSlide);\\n  }\\n  if (typeof slides === 'object' && 'length' in slides) {\\n    for (let i = 0; i < slides.length; i += 1) {\\n      if (slides[i]) slidesEl.append(slides[i]);\\n    }\\n    newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\\n  } else {\\n    slidesEl.append(slides);\\n  }\\n  for (let i = 0; i < slidesBuffer.length; i += 1) {\\n    slidesEl.append(slidesBuffer[i]);\\n  }\\n  swiper.recalcSlides();\\n  if (params.loop) {\\n    swiper.loopCreate();\\n  }\\n  if (!params.observer || swiper.isElement) {\\n    swiper.update();\\n  }\\n  if (params.loop) {\\n    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\\n  } else {\\n    swiper.slideTo(newActiveIndex, 0, false);\\n  }\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvbWFuaXB1bGF0aW9uL21ldGhvZHMvYWRkU2xpZGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFlBQVk7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixtQkFBbUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxrQkFBa0IseUJBQXlCO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvbWFuaXB1bGF0aW9uL21ldGhvZHMvYWRkU2xpZGUuanM/NjY4ZCJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRTbGlkZShpbmRleCwgc2xpZGVzKSB7XG4gIGNvbnN0IHN3aXBlciA9IHRoaXM7XG4gIGNvbnN0IHtcbiAgICBwYXJhbXMsXG4gICAgYWN0aXZlSW5kZXgsXG4gICAgc2xpZGVzRWxcbiAgfSA9IHN3aXBlcjtcbiAgbGV0IGFjdGl2ZUluZGV4QnVmZmVyID0gYWN0aXZlSW5kZXg7XG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIGFjdGl2ZUluZGV4QnVmZmVyIC09IHN3aXBlci5sb29wZWRTbGlkZXM7XG4gICAgc3dpcGVyLmxvb3BEZXN0cm95KCk7XG4gICAgc3dpcGVyLnJlY2FsY1NsaWRlcygpO1xuICB9XG4gIGNvbnN0IGJhc2VMZW5ndGggPSBzd2lwZXIuc2xpZGVzLmxlbmd0aDtcbiAgaWYgKGluZGV4IDw9IDApIHtcbiAgICBzd2lwZXIucHJlcGVuZFNsaWRlKHNsaWRlcyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbmRleCA+PSBiYXNlTGVuZ3RoKSB7XG4gICAgc3dpcGVyLmFwcGVuZFNsaWRlKHNsaWRlcyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBuZXdBY3RpdmVJbmRleCA9IGFjdGl2ZUluZGV4QnVmZmVyID4gaW5kZXggPyBhY3RpdmVJbmRleEJ1ZmZlciArIDEgOiBhY3RpdmVJbmRleEJ1ZmZlcjtcbiAgY29uc3Qgc2xpZGVzQnVmZmVyID0gW107XG4gIGZvciAobGV0IGkgPSBiYXNlTGVuZ3RoIC0gMTsgaSA+PSBpbmRleDsgaSAtPSAxKSB7XG4gICAgY29uc3QgY3VycmVudFNsaWRlID0gc3dpcGVyLnNsaWRlc1tpXTtcbiAgICBjdXJyZW50U2xpZGUucmVtb3ZlKCk7XG4gICAgc2xpZGVzQnVmZmVyLnVuc2hpZnQoY3VycmVudFNsaWRlKTtcbiAgfVxuICBpZiAodHlwZW9mIHNsaWRlcyA9PT0gJ29iamVjdCcgJiYgJ2xlbmd0aCcgaW4gc2xpZGVzKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmIChzbGlkZXNbaV0pIHNsaWRlc0VsLmFwcGVuZChzbGlkZXNbaV0pO1xuICAgIH1cbiAgICBuZXdBY3RpdmVJbmRleCA9IGFjdGl2ZUluZGV4QnVmZmVyID4gaW5kZXggPyBhY3RpdmVJbmRleEJ1ZmZlciArIHNsaWRlcy5sZW5ndGggOiBhY3RpdmVJbmRleEJ1ZmZlcjtcbiAgfSBlbHNlIHtcbiAgICBzbGlkZXNFbC5hcHBlbmQoc2xpZGVzKTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWRlc0J1ZmZlci5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHNsaWRlc0VsLmFwcGVuZChzbGlkZXNCdWZmZXJbaV0pO1xuICB9XG4gIHN3aXBlci5yZWNhbGNTbGlkZXMoKTtcbiAgaWYgKHBhcmFtcy5sb29wKSB7XG4gICAgc3dpcGVyLmxvb3BDcmVhdGUoKTtcbiAgfVxuICBpZiAoIXBhcmFtcy5vYnNlcnZlciB8fCBzd2lwZXIuaXNFbGVtZW50KSB7XG4gICAgc3dpcGVyLnVwZGF0ZSgpO1xuICB9XG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIHN3aXBlci5zbGlkZVRvKG5ld0FjdGl2ZUluZGV4ICsgc3dpcGVyLmxvb3BlZFNsaWRlcywgMCwgZmFsc2UpO1xuICB9IGVsc2Uge1xuICAgIHN3aXBlci5zbGlkZVRvKG5ld0FjdGl2ZUluZGV4LCAwLCBmYWxzZSk7XG4gIH1cbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/manipulation/methods/addSlide.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/manipulation/methods/appendSlide.js\":\r\n/*!*************************************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/manipulation/methods/appendSlide.js ***!\r\n  \\*************************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ appendSlide)\\n/* harmony export */ });\\nfunction appendSlide(slides) {\\n  const swiper = this;\\n  const {\\n    params,\\n    slidesEl\\n  } = swiper;\\n  if (params.loop) {\\n    swiper.loopDestroy();\\n  }\\n  const appendElement = slideEl => {\\n    if (typeof slideEl === 'string') {\\n      const tempDOM = document.createElement('div');\\n      tempDOM.innerHTML = slideEl;\\n      slidesEl.append(tempDOM.children[0]);\\n      tempDOM.innerHTML = '';\\n    } else {\\n      slidesEl.append(slideEl);\\n    }\\n  };\\n  if (typeof slides === 'object' && 'length' in slides) {\\n    for (let i = 0; i < slides.length; i += 1) {\\n      if (slides[i]) appendElement(slides[i]);\\n    }\\n  } else {\\n    appendElement(slides);\\n  }\\n  swiper.recalcSlides();\\n  if (params.loop) {\\n    swiper.loopCreate();\\n  }\\n  if (!params.observer || swiper.isElement) {\\n    swiper.update();\\n  }\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvbWFuaXB1bGF0aW9uL21ldGhvZHMvYXBwZW5kU2xpZGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLG1CQUFtQjtBQUN2QztBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvbWFuaXB1bGF0aW9uL21ldGhvZHMvYXBwZW5kU2xpZGUuanM/YjFhMiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhcHBlbmRTbGlkZShzbGlkZXMpIHtcbiAgY29uc3Qgc3dpcGVyID0gdGhpcztcbiAgY29uc3Qge1xuICAgIHBhcmFtcyxcbiAgICBzbGlkZXNFbFxuICB9ID0gc3dpcGVyO1xuICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICBzd2lwZXIubG9vcERlc3Ryb3koKTtcbiAgfVxuICBjb25zdCBhcHBlbmRFbGVtZW50ID0gc2xpZGVFbCA9PiB7XG4gICAgaWYgKHR5cGVvZiBzbGlkZUVsID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdGVtcERPTSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgdGVtcERPTS5pbm5lckhUTUwgPSBzbGlkZUVsO1xuICAgICAgc2xpZGVzRWwuYXBwZW5kKHRlbXBET00uY2hpbGRyZW5bMF0pO1xuICAgICAgdGVtcERPTS5pbm5lckhUTUwgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgc2xpZGVzRWwuYXBwZW5kKHNsaWRlRWwpO1xuICAgIH1cbiAgfTtcbiAgaWYgKHR5cGVvZiBzbGlkZXMgPT09ICdvYmplY3QnICYmICdsZW5ndGgnIGluIHNsaWRlcykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2xpZGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpZiAoc2xpZGVzW2ldKSBhcHBlbmRFbGVtZW50KHNsaWRlc1tpXSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFwcGVuZEVsZW1lbnQoc2xpZGVzKTtcbiAgfVxuICBzd2lwZXIucmVjYWxjU2xpZGVzKCk7XG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gIH1cbiAgaWYgKCFwYXJhbXMub2JzZXJ2ZXIgfHwgc3dpcGVyLmlzRWxlbWVudCkge1xuICAgIHN3aXBlci51cGRhdGUoKTtcbiAgfVxufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/manipulation/methods/appendSlide.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/manipulation/methods/prependSlide.js\":\r\n/*!**************************************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/manipulation/methods/prependSlide.js ***!\r\n  \\**************************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ prependSlide)\\n/* harmony export */ });\\nfunction prependSlide(slides) {\\n  const swiper = this;\\n  const {\\n    params,\\n    activeIndex,\\n    slidesEl\\n  } = swiper;\\n  if (params.loop) {\\n    swiper.loopDestroy();\\n  }\\n  let newActiveIndex = activeIndex + 1;\\n  const prependElement = slideEl => {\\n    if (typeof slideEl === 'string') {\\n      const tempDOM = document.createElement('div');\\n      tempDOM.innerHTML = slideEl;\\n      slidesEl.prepend(tempDOM.children[0]);\\n      tempDOM.innerHTML = '';\\n    } else {\\n      slidesEl.prepend(slideEl);\\n    }\\n  };\\n  if (typeof slides === 'object' && 'length' in slides) {\\n    for (let i = 0; i < slides.length; i += 1) {\\n      if (slides[i]) prependElement(slides[i]);\\n    }\\n    newActiveIndex = activeIndex + slides.length;\\n  } else {\\n    prependElement(slides);\\n  }\\n  swiper.recalcSlides();\\n  if (params.loop) {\\n    swiper.loopCreate();\\n  }\\n  if (!params.observer || swiper.isElement) {\\n    swiper.update();\\n  }\\n  swiper.slideTo(newActiveIndex, 0, false);\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvbWFuaXB1bGF0aW9uL21ldGhvZHMvcHJlcGVuZFNsaWRlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsbUJBQW1CO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvbWFuaXB1bGF0aW9uL21ldGhvZHMvcHJlcGVuZFNsaWRlLmpzPzExZmUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcHJlcGVuZFNsaWRlKHNsaWRlcykge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgcGFyYW1zLFxuICAgIGFjdGl2ZUluZGV4LFxuICAgIHNsaWRlc0VsXG4gIH0gPSBzd2lwZXI7XG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICB9XG4gIGxldCBuZXdBY3RpdmVJbmRleCA9IGFjdGl2ZUluZGV4ICsgMTtcbiAgY29uc3QgcHJlcGVuZEVsZW1lbnQgPSBzbGlkZUVsID0+IHtcbiAgICBpZiAodHlwZW9mIHNsaWRlRWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCB0ZW1wRE9NID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICB0ZW1wRE9NLmlubmVySFRNTCA9IHNsaWRlRWw7XG4gICAgICBzbGlkZXNFbC5wcmVwZW5kKHRlbXBET00uY2hpbGRyZW5bMF0pO1xuICAgICAgdGVtcERPTS5pbm5lckhUTUwgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgc2xpZGVzRWwucHJlcGVuZChzbGlkZUVsKTtcbiAgICB9XG4gIH07XG4gIGlmICh0eXBlb2Ygc2xpZGVzID09PSAnb2JqZWN0JyAmJiAnbGVuZ3RoJyBpbiBzbGlkZXMpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKHNsaWRlc1tpXSkgcHJlcGVuZEVsZW1lbnQoc2xpZGVzW2ldKTtcbiAgICB9XG4gICAgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleCArIHNsaWRlcy5sZW5ndGg7XG4gIH0gZWxzZSB7XG4gICAgcHJlcGVuZEVsZW1lbnQoc2xpZGVzKTtcbiAgfVxuICBzd2lwZXIucmVjYWxjU2xpZGVzKCk7XG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gIH1cbiAgaWYgKCFwYXJhbXMub2JzZXJ2ZXIgfHwgc3dpcGVyLmlzRWxlbWVudCkge1xuICAgIHN3aXBlci51cGRhdGUoKTtcbiAgfVxuICBzd2lwZXIuc2xpZGVUbyhuZXdBY3RpdmVJbmRleCwgMCwgZmFsc2UpO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/manipulation/methods/prependSlide.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/manipulation/methods/removeAllSlides.js\":\r\n/*!*****************************************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/manipulation/methods/removeAllSlides.js ***!\r\n  \\*****************************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ removeAllSlides)\\n/* harmony export */ });\\nfunction removeAllSlides() {\\n  const swiper = this;\\n  const slidesIndexes = [];\\n  for (let i = 0; i < swiper.slides.length; i += 1) {\\n    slidesIndexes.push(i);\\n  }\\n  swiper.removeSlide(slidesIndexes);\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvbWFuaXB1bGF0aW9uL21ldGhvZHMvcmVtb3ZlQWxsU2xpZGVzLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmO0FBQ0E7QUFDQSxrQkFBa0IsMEJBQTBCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvbWFuaXB1bGF0aW9uL21ldGhvZHMvcmVtb3ZlQWxsU2xpZGVzLmpzPzI4OGYiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVtb3ZlQWxsU2xpZGVzKCkge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCBzbGlkZXNJbmRleGVzID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3dpcGVyLnNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHNsaWRlc0luZGV4ZXMucHVzaChpKTtcbiAgfVxuICBzd2lwZXIucmVtb3ZlU2xpZGUoc2xpZGVzSW5kZXhlcyk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/manipulation/methods/removeAllSlides.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/manipulation/methods/removeSlide.js\":\r\n/*!*************************************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/manipulation/methods/removeSlide.js ***!\r\n  \\*************************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ removeSlide)\\n/* harmony export */ });\\nfunction removeSlide(slidesIndexes) {\\n  const swiper = this;\\n  const {\\n    params,\\n    activeIndex\\n  } = swiper;\\n  let activeIndexBuffer = activeIndex;\\n  if (params.loop) {\\n    activeIndexBuffer -= swiper.loopedSlides;\\n    swiper.loopDestroy();\\n  }\\n  let newActiveIndex = activeIndexBuffer;\\n  let indexToRemove;\\n  if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\\n    for (let i = 0; i < slidesIndexes.length; i += 1) {\\n      indexToRemove = slidesIndexes[i];\\n      if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();\\n      if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\\n    }\\n    newActiveIndex = Math.max(newActiveIndex, 0);\\n  } else {\\n    indexToRemove = slidesIndexes;\\n    if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();\\n    if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\\n    newActiveIndex = Math.max(newActiveIndex, 0);\\n  }\\n  swiper.recalcSlides();\\n  if (params.loop) {\\n    swiper.loopCreate();\\n  }\\n  if (!params.observer || swiper.isElement) {\\n    swiper.update();\\n  }\\n  if (params.loop) {\\n    swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\\n  } else {\\n    swiper.slideTo(newActiveIndex, 0, false);\\n  }\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvbWFuaXB1bGF0aW9uL21ldGhvZHMvcmVtb3ZlU2xpZGUuanMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiwwQkFBMEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9tb2R1bGVzL21hbmlwdWxhdGlvbi9tZXRob2RzL3JlbW92ZVNsaWRlLmpzPzI2MDAiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVtb3ZlU2xpZGUoc2xpZGVzSW5kZXhlcykge1xuICBjb25zdCBzd2lwZXIgPSB0aGlzO1xuICBjb25zdCB7XG4gICAgcGFyYW1zLFxuICAgIGFjdGl2ZUluZGV4XG4gIH0gPSBzd2lwZXI7XG4gIGxldCBhY3RpdmVJbmRleEJ1ZmZlciA9IGFjdGl2ZUluZGV4O1xuICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICBhY3RpdmVJbmRleEJ1ZmZlciAtPSBzd2lwZXIubG9vcGVkU2xpZGVzO1xuICAgIHN3aXBlci5sb29wRGVzdHJveSgpO1xuICB9XG4gIGxldCBuZXdBY3RpdmVJbmRleCA9IGFjdGl2ZUluZGV4QnVmZmVyO1xuICBsZXQgaW5kZXhUb1JlbW92ZTtcbiAgaWYgKHR5cGVvZiBzbGlkZXNJbmRleGVzID09PSAnb2JqZWN0JyAmJiAnbGVuZ3RoJyBpbiBzbGlkZXNJbmRleGVzKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGlkZXNJbmRleGVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBpbmRleFRvUmVtb3ZlID0gc2xpZGVzSW5kZXhlc1tpXTtcbiAgICAgIGlmIChzd2lwZXIuc2xpZGVzW2luZGV4VG9SZW1vdmVdKSBzd2lwZXIuc2xpZGVzW2luZGV4VG9SZW1vdmVdLnJlbW92ZSgpO1xuICAgICAgaWYgKGluZGV4VG9SZW1vdmUgPCBuZXdBY3RpdmVJbmRleCkgbmV3QWN0aXZlSW5kZXggLT0gMTtcbiAgICB9XG4gICAgbmV3QWN0aXZlSW5kZXggPSBNYXRoLm1heChuZXdBY3RpdmVJbmRleCwgMCk7XG4gIH0gZWxzZSB7XG4gICAgaW5kZXhUb1JlbW92ZSA9IHNsaWRlc0luZGV4ZXM7XG4gICAgaWYgKHN3aXBlci5zbGlkZXNbaW5kZXhUb1JlbW92ZV0pIHN3aXBlci5zbGlkZXNbaW5kZXhUb1JlbW92ZV0ucmVtb3ZlKCk7XG4gICAgaWYgKGluZGV4VG9SZW1vdmUgPCBuZXdBY3RpdmVJbmRleCkgbmV3QWN0aXZlSW5kZXggLT0gMTtcbiAgICBuZXdBY3RpdmVJbmRleCA9IE1hdGgubWF4KG5ld0FjdGl2ZUluZGV4LCAwKTtcbiAgfVxuICBzd2lwZXIucmVjYWxjU2xpZGVzKCk7XG4gIGlmIChwYXJhbXMubG9vcCkge1xuICAgIHN3aXBlci5sb29wQ3JlYXRlKCk7XG4gIH1cbiAgaWYgKCFwYXJhbXMub2JzZXJ2ZXIgfHwgc3dpcGVyLmlzRWxlbWVudCkge1xuICAgIHN3aXBlci51cGRhdGUoKTtcbiAgfVxuICBpZiAocGFyYW1zLmxvb3ApIHtcbiAgICBzd2lwZXIuc2xpZGVUbyhuZXdBY3RpdmVJbmRleCArIHN3aXBlci5sb29wZWRTbGlkZXMsIDAsIGZhbHNlKTtcbiAgfSBlbHNlIHtcbiAgICBzd2lwZXIuc2xpZGVUbyhuZXdBY3RpdmVJbmRleCwgMCwgZmFsc2UpO1xuICB9XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/manipulation/methods/removeSlide.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/mousewheel/mousewheel.js\":\r\n/*!**************************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/mousewheel/mousewheel.js ***!\r\n  \\**************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ Mousewheel)\\n/* harmony export */ });\\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \\\"./node_modules/ssr-window/ssr-window.esm.js\\\");\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n/* eslint-disable consistent-return */\\n\\n\\nfunction Mousewheel({\\n  swiper,\\n  extendParams,\\n  on,\\n  emit\\n}) {\\n  const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n  extendParams({\\n    mousewheel: {\\n      enabled: false,\\n      releaseOnEdges: false,\\n      invert: false,\\n      forceToAxis: false,\\n      sensitivity: 1,\\n      eventsTarget: 'container',\\n      thresholdDelta: null,\\n      thresholdTime: null\\n    }\\n  });\\n  swiper.mousewheel = {\\n    enabled: false\\n  };\\n  let timeout;\\n  let lastScrollTime = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.now)();\\n  let lastEventBeforeSnap;\\n  const recentWheelEvents = [];\\n  function normalize(e) {\\n    // Reasonable defaults\\n    const PIXEL_STEP = 10;\\n    const LINE_HEIGHT = 40;\\n    const PAGE_HEIGHT = 800;\\n    let sX = 0;\\n    let sY = 0; // spinX, spinY\\n    let pX = 0;\\n    let pY = 0; // pixelX, pixelY\\n\\n    // Legacy\\n    if ('detail' in e) {\\n      sY = e.detail;\\n    }\\n    if ('wheelDelta' in e) {\\n      sY = -e.wheelDelta / 120;\\n    }\\n    if ('wheelDeltaY' in e) {\\n      sY = -e.wheelDeltaY / 120;\\n    }\\n    if ('wheelDeltaX' in e) {\\n      sX = -e.wheelDeltaX / 120;\\n    }\\n\\n    // side scrolling on FF with DOMMouseScroll\\n    if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\\n      sX = sY;\\n      sY = 0;\\n    }\\n    pX = sX * PIXEL_STEP;\\n    pY = sY * PIXEL_STEP;\\n    if ('deltaY' in e) {\\n      pY = e.deltaY;\\n    }\\n    if ('deltaX' in e) {\\n      pX = e.deltaX;\\n    }\\n    if (e.shiftKey && !pX) {\\n      // if user scrolls with shift he wants horizontal scroll\\n      pX = pY;\\n      pY = 0;\\n    }\\n    if ((pX || pY) && e.deltaMode) {\\n      if (e.deltaMode === 1) {\\n        // delta in LINE units\\n        pX *= LINE_HEIGHT;\\n        pY *= LINE_HEIGHT;\\n      } else {\\n        // delta in PAGE units\\n        pX *= PAGE_HEIGHT;\\n        pY *= PAGE_HEIGHT;\\n      }\\n    }\\n\\n    // Fall-back if spin cannot be determined\\n    if (pX && !sX) {\\n      sX = pX < 1 ? -1 : 1;\\n    }\\n    if (pY && !sY) {\\n      sY = pY < 1 ? -1 : 1;\\n    }\\n    return {\\n      spinX: sX,\\n      spinY: sY,\\n      pixelX: pX,\\n      pixelY: pY\\n    };\\n  }\\n  function handleMouseEnter() {\\n    if (!swiper.enabled) return;\\n    swiper.mouseEntered = true;\\n  }\\n  function handleMouseLeave() {\\n    if (!swiper.enabled) return;\\n    swiper.mouseEntered = false;\\n  }\\n  function animateSlider(newEvent) {\\n    if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {\\n      // Prevent if delta of wheel scroll delta is below configured threshold\\n      return false;\\n    }\\n    if (swiper.params.mousewheel.thresholdTime && (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.now)() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {\\n      // Prevent if time between scrolls is below configured threshold\\n      return false;\\n    }\\n\\n    // If the movement is NOT big enough and\\n    // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\\n    //   Don't go any further (avoid insignificant scroll movement).\\n    if (newEvent.delta >= 6 && (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.now)() - lastScrollTime < 60) {\\n      // Return false as a default\\n      return true;\\n    }\\n    // If user is scrolling towards the end:\\n    //   If the slider hasn't hit the latest slide or\\n    //   if the slider is a loop and\\n    //   if the slider isn't moving right now:\\n    //     Go to next slide and\\n    //     emit a scroll event.\\n    // Else (the user is scrolling towards the beginning) and\\n    // if the slider hasn't hit the first slide or\\n    // if the slider is a loop and\\n    // if the slider isn't moving right now:\\n    //   Go to prev slide and\\n    //   emit a scroll event.\\n    if (newEvent.direction < 0) {\\n      if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\\n        swiper.slideNext();\\n        emit('scroll', newEvent.raw);\\n      }\\n    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\\n      swiper.slidePrev();\\n      emit('scroll', newEvent.raw);\\n    }\\n    // If you got here is because an animation has been triggered so store the current time\\n    lastScrollTime = new window.Date().getTime();\\n    // Return false as a default\\n    return false;\\n  }\\n  function releaseScroll(newEvent) {\\n    const params = swiper.params.mousewheel;\\n    if (newEvent.direction < 0) {\\n      if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\\n        // Return true to animate scroll on edges\\n        return true;\\n      }\\n    } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\\n      // Return true to animate scroll on edges\\n      return true;\\n    }\\n    return false;\\n  }\\n  function handle(event) {\\n    let e = event;\\n    let disableParentSwiper = true;\\n    if (!swiper.enabled) return;\\n    const params = swiper.params.mousewheel;\\n    if (swiper.params.cssMode) {\\n      e.preventDefault();\\n    }\\n    let targetEl = swiper.el;\\n    if (swiper.params.mousewheel.eventsTarget !== 'container') {\\n      targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\\n    }\\n    const targetElContainsTarget = targetEl && targetEl.contains(e.target);\\n    if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true;\\n    if (e.originalEvent) e = e.originalEvent; // jquery fix\\n    let delta = 0;\\n    const rtlFactor = swiper.rtlTranslate ? -1 : 1;\\n    const data = normalize(e);\\n    if (params.forceToAxis) {\\n      if (swiper.isHorizontal()) {\\n        if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;\\n      } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\\n    } else {\\n      delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\\n    }\\n    if (delta === 0) return true;\\n    if (params.invert) delta = -delta;\\n\\n    // Get the scroll positions\\n    let positions = swiper.getTranslate() + delta * params.sensitivity;\\n    if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\\n    if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();\\n\\n    // When loop is true:\\n    //     the disableParentSwiper will be true.\\n    // When loop is false:\\n    //     if the scroll positions is not on edge,\\n    //     then the disableParentSwiper will be true.\\n    //     if the scroll on edge positions,\\n    //     then the disableParentSwiper will be false.\\n    disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\\n    if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\\n    if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\\n      // Register the new event in a variable which stores the relevant data\\n      const newEvent = {\\n        time: (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.now)(),\\n        delta: Math.abs(delta),\\n        direction: Math.sign(delta),\\n        raw: event\\n      };\\n\\n      // Keep the most recent events\\n      if (recentWheelEvents.length >= 2) {\\n        recentWheelEvents.shift(); // only store the last N events\\n      }\\n\\n      const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\\n      recentWheelEvents.push(newEvent);\\n\\n      // If there is at least one previous recorded event:\\n      //   If direction has changed or\\n      //   if the scroll is quicker than the previous one:\\n      //     Animate the slider.\\n      // Else (this is the first time the wheel is moved):\\n      //     Animate the slider.\\n      if (prevEvent) {\\n        if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\\n          animateSlider(newEvent);\\n        }\\n      } else {\\n        animateSlider(newEvent);\\n      }\\n\\n      // If it's time to release the scroll:\\n      //   Return now so you don't hit the preventDefault.\\n      if (releaseScroll(newEvent)) {\\n        return true;\\n      }\\n    } else {\\n      // Freemode or scrollContainer:\\n\\n      // If we recently snapped after a momentum scroll, then ignore wheel events\\n      // to give time for the deceleration to finish. Stop ignoring after 500 msecs\\n      // or if it's a new scroll (larger delta or inverse sign as last event before\\n      // an end-of-momentum snap).\\n      const newEvent = {\\n        time: (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.now)(),\\n        delta: Math.abs(delta),\\n        direction: Math.sign(delta)\\n      };\\n      const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;\\n      if (!ignoreWheelEvents) {\\n        lastEventBeforeSnap = undefined;\\n        let position = swiper.getTranslate() + delta * params.sensitivity;\\n        const wasBeginning = swiper.isBeginning;\\n        const wasEnd = swiper.isEnd;\\n        if (position >= swiper.minTranslate()) position = swiper.minTranslate();\\n        if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\\n        swiper.setTransition(0);\\n        swiper.setTranslate(position);\\n        swiper.updateProgress();\\n        swiper.updateActiveIndex();\\n        swiper.updateSlidesClasses();\\n        if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\\n          swiper.updateSlidesClasses();\\n        }\\n        if (swiper.params.loop) {\\n          swiper.loopFix({\\n            direction: newEvent.direction < 0 ? 'next' : 'prev',\\n            byMousewheel: true\\n          });\\n        }\\n        if (swiper.params.freeMode.sticky) {\\n          // When wheel scrolling starts with sticky (aka snap) enabled, then detect\\n          // the end of a momentum scroll by storing recent (N=15?) wheel events.\\n          // 1. do all N events have decreasing or same (absolute value) delta?\\n          // 2. did all N events arrive in the last M (M=500?) msecs?\\n          // 3. does the earliest event have an (absolute value) delta that's\\n          //    at least P (P=1?) larger than the most recent event's delta?\\n          // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\\n          // If 1-4 are \\\"yes\\\" then we're near the end of a momentum scroll deceleration.\\n          // Snap immediately and ignore remaining wheel events in this scroll.\\n          // See comment above for \\\"remaining wheel events in this scroll\\\" determination.\\n          // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\\n          clearTimeout(timeout);\\n          timeout = undefined;\\n          if (recentWheelEvents.length >= 15) {\\n            recentWheelEvents.shift(); // only store the last N events\\n          }\\n\\n          const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\\n          const firstEvent = recentWheelEvents[0];\\n          recentWheelEvents.push(newEvent);\\n          if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\\n            // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\\n            recentWheelEvents.splice(0);\\n          } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {\\n            // We're at the end of the deceleration of a momentum scroll, so there's no need\\n            // to wait for more events. Snap ASAP on the next tick.\\n            // Also, because there's some remaining momentum we'll bias the snap in the\\n            // direction of the ongoing scroll because it's better UX for the scroll to snap\\n            // in the same direction as the scroll instead of reversing to snap.  Therefore,\\n            // if it's already scrolled more than 20% in the current direction, keep going.\\n            const snapToThreshold = delta > 0 ? 0.8 : 0.2;\\n            lastEventBeforeSnap = newEvent;\\n            recentWheelEvents.splice(0);\\n            timeout = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.nextTick)(() => {\\n              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\\n            }, 0); // no delay; move on next tick\\n          }\\n\\n          if (!timeout) {\\n            // if we get here, then we haven't detected the end of a momentum scroll, so\\n            // we'll consider a scroll \\\"complete\\\" when there haven't been any wheel events\\n            // for 500ms.\\n            timeout = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.nextTick)(() => {\\n              const snapToThreshold = 0.5;\\n              lastEventBeforeSnap = newEvent;\\n              recentWheelEvents.splice(0);\\n              swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\\n            }, 500);\\n          }\\n        }\\n\\n        // Emit event\\n        if (!ignoreWheelEvents) emit('scroll', e);\\n\\n        // Stop autoplay\\n        if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();\\n        // Return page scroll on edge positions\\n        if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\\n      }\\n    }\\n    if (e.preventDefault) e.preventDefault();else e.returnValue = false;\\n    return false;\\n  }\\n  function events(method) {\\n    let targetEl = swiper.el;\\n    if (swiper.params.mousewheel.eventsTarget !== 'container') {\\n      targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\\n    }\\n    targetEl[method]('mouseenter', handleMouseEnter);\\n    targetEl[method]('mouseleave', handleMouseLeave);\\n    targetEl[method]('wheel', handle);\\n  }\\n  function enable() {\\n    if (swiper.params.cssMode) {\\n      swiper.wrapperEl.removeEventListener('wheel', handle);\\n      return true;\\n    }\\n    if (swiper.mousewheel.enabled) return false;\\n    events('addEventListener');\\n    swiper.mousewheel.enabled = true;\\n    return true;\\n  }\\n  function disable() {\\n    if (swiper.params.cssMode) {\\n      swiper.wrapperEl.addEventListener(event, handle);\\n      return true;\\n    }\\n    if (!swiper.mousewheel.enabled) return false;\\n    events('removeEventListener');\\n    swiper.mousewheel.enabled = false;\\n    return true;\\n  }\\n  on('init', () => {\\n    if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\\n      disable();\\n    }\\n    if (swiper.params.mousewheel.enabled) enable();\\n  });\\n  on('destroy', () => {\\n    if (swiper.params.cssMode) {\\n      enable();\\n    }\\n    if (swiper.mousewheel.enabled) disable();\\n  });\\n  Object.assign(swiper.mousewheel, {\\n    enable,\\n    disable\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvbW91c2V3aGVlbC9tb3VzZXdoZWVsLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ3VDO0FBQ2U7QUFDdkM7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxpQkFBaUIscURBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixxREFBRztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0EsZ0JBQWdCOztBQUVoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELHFEQUFHO0FBQ3JEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IscURBQUc7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRGQUE0RjtBQUM1RixRQUFRLDZFQUE2RTtBQUNyRixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxxREFBRztBQUNqQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLHFEQUFHO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiwwREFBUTtBQUM5QjtBQUNBLGFBQWEsTUFBTSxhQUFhO0FBQ2hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDBEQUFRO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvbW91c2V3aGVlbC9tb3VzZXdoZWVsLmpzP2Y1MDAiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29uc2lzdGVudC1yZXR1cm4gKi9cbmltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gJ3Nzci13aW5kb3cnO1xuaW1wb3J0IHsgbm93LCBuZXh0VGljayB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb3VzZXdoZWVsKHtcbiAgc3dpcGVyLFxuICBleHRlbmRQYXJhbXMsXG4gIG9uLFxuICBlbWl0XG59KSB7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICBleHRlbmRQYXJhbXMoe1xuICAgIG1vdXNld2hlZWw6IHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcmVsZWFzZU9uRWRnZXM6IGZhbHNlLFxuICAgICAgaW52ZXJ0OiBmYWxzZSxcbiAgICAgIGZvcmNlVG9BeGlzOiBmYWxzZSxcbiAgICAgIHNlbnNpdGl2aXR5OiAxLFxuICAgICAgZXZlbnRzVGFyZ2V0OiAnY29udGFpbmVyJyxcbiAgICAgIHRocmVzaG9sZERlbHRhOiBudWxsLFxuICAgICAgdGhyZXNob2xkVGltZTogbnVsbFxuICAgIH1cbiAgfSk7XG4gIHN3aXBlci5tb3VzZXdoZWVsID0ge1xuICAgIGVuYWJsZWQ6IGZhbHNlXG4gIH07XG4gIGxldCB0aW1lb3V0O1xuICBsZXQgbGFzdFNjcm9sbFRpbWUgPSBub3coKTtcbiAgbGV0IGxhc3RFdmVudEJlZm9yZVNuYXA7XG4gIGNvbnN0IHJlY2VudFdoZWVsRXZlbnRzID0gW107XG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZShlKSB7XG4gICAgLy8gUmVhc29uYWJsZSBkZWZhdWx0c1xuICAgIGNvbnN0IFBJWEVMX1NURVAgPSAxMDtcbiAgICBjb25zdCBMSU5FX0hFSUdIVCA9IDQwO1xuICAgIGNvbnN0IFBBR0VfSEVJR0hUID0gODAwO1xuICAgIGxldCBzWCA9IDA7XG4gICAgbGV0IHNZID0gMDsgLy8gc3BpblgsIHNwaW5ZXG4gICAgbGV0IHBYID0gMDtcbiAgICBsZXQgcFkgPSAwOyAvLyBwaXhlbFgsIHBpeGVsWVxuXG4gICAgLy8gTGVnYWN5XG4gICAgaWYgKCdkZXRhaWwnIGluIGUpIHtcbiAgICAgIHNZID0gZS5kZXRhaWw7XG4gICAgfVxuICAgIGlmICgnd2hlZWxEZWx0YScgaW4gZSkge1xuICAgICAgc1kgPSAtZS53aGVlbERlbHRhIC8gMTIwO1xuICAgIH1cbiAgICBpZiAoJ3doZWVsRGVsdGFZJyBpbiBlKSB7XG4gICAgICBzWSA9IC1lLndoZWVsRGVsdGFZIC8gMTIwO1xuICAgIH1cbiAgICBpZiAoJ3doZWVsRGVsdGFYJyBpbiBlKSB7XG4gICAgICBzWCA9IC1lLndoZWVsRGVsdGFYIC8gMTIwO1xuICAgIH1cblxuICAgIC8vIHNpZGUgc2Nyb2xsaW5nIG9uIEZGIHdpdGggRE9NTW91c2VTY3JvbGxcbiAgICBpZiAoJ2F4aXMnIGluIGUgJiYgZS5heGlzID09PSBlLkhPUklaT05UQUxfQVhJUykge1xuICAgICAgc1ggPSBzWTtcbiAgICAgIHNZID0gMDtcbiAgICB9XG4gICAgcFggPSBzWCAqIFBJWEVMX1NURVA7XG4gICAgcFkgPSBzWSAqIFBJWEVMX1NURVA7XG4gICAgaWYgKCdkZWx0YVknIGluIGUpIHtcbiAgICAgIHBZID0gZS5kZWx0YVk7XG4gICAgfVxuICAgIGlmICgnZGVsdGFYJyBpbiBlKSB7XG4gICAgICBwWCA9IGUuZGVsdGFYO1xuICAgIH1cbiAgICBpZiAoZS5zaGlmdEtleSAmJiAhcFgpIHtcbiAgICAgIC8vIGlmIHVzZXIgc2Nyb2xscyB3aXRoIHNoaWZ0IGhlIHdhbnRzIGhvcml6b250YWwgc2Nyb2xsXG4gICAgICBwWCA9IHBZO1xuICAgICAgcFkgPSAwO1xuICAgIH1cbiAgICBpZiAoKHBYIHx8IHBZKSAmJiBlLmRlbHRhTW9kZSkge1xuICAgICAgaWYgKGUuZGVsdGFNb2RlID09PSAxKSB7XG4gICAgICAgIC8vIGRlbHRhIGluIExJTkUgdW5pdHNcbiAgICAgICAgcFggKj0gTElORV9IRUlHSFQ7XG4gICAgICAgIHBZICo9IExJTkVfSEVJR0hUO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZGVsdGEgaW4gUEFHRSB1bml0c1xuICAgICAgICBwWCAqPSBQQUdFX0hFSUdIVDtcbiAgICAgICAgcFkgKj0gUEFHRV9IRUlHSFQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmFsbC1iYWNrIGlmIHNwaW4gY2Fubm90IGJlIGRldGVybWluZWRcbiAgICBpZiAocFggJiYgIXNYKSB7XG4gICAgICBzWCA9IHBYIDwgMSA/IC0xIDogMTtcbiAgICB9XG4gICAgaWYgKHBZICYmICFzWSkge1xuICAgICAgc1kgPSBwWSA8IDEgPyAtMSA6IDE7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBzcGluWDogc1gsXG4gICAgICBzcGluWTogc1ksXG4gICAgICBwaXhlbFg6IHBYLFxuICAgICAgcGl4ZWxZOiBwWVxuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gaGFuZGxlTW91c2VFbnRlcigpIHtcbiAgICBpZiAoIXN3aXBlci5lbmFibGVkKSByZXR1cm47XG4gICAgc3dpcGVyLm1vdXNlRW50ZXJlZCA9IHRydWU7XG4gIH1cbiAgZnVuY3Rpb24gaGFuZGxlTW91c2VMZWF2ZSgpIHtcbiAgICBpZiAoIXN3aXBlci5lbmFibGVkKSByZXR1cm47XG4gICAgc3dpcGVyLm1vdXNlRW50ZXJlZCA9IGZhbHNlO1xuICB9XG4gIGZ1bmN0aW9uIGFuaW1hdGVTbGlkZXIobmV3RXZlbnQpIHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5tb3VzZXdoZWVsLnRocmVzaG9sZERlbHRhICYmIG5ld0V2ZW50LmRlbHRhIDwgc3dpcGVyLnBhcmFtcy5tb3VzZXdoZWVsLnRocmVzaG9sZERlbHRhKSB7XG4gICAgICAvLyBQcmV2ZW50IGlmIGRlbHRhIG9mIHdoZWVsIHNjcm9sbCBkZWx0YSBpcyBiZWxvdyBjb25maWd1cmVkIHRocmVzaG9sZFxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5tb3VzZXdoZWVsLnRocmVzaG9sZFRpbWUgJiYgbm93KCkgLSBsYXN0U2Nyb2xsVGltZSA8IHN3aXBlci5wYXJhbXMubW91c2V3aGVlbC50aHJlc2hvbGRUaW1lKSB7XG4gICAgICAvLyBQcmV2ZW50IGlmIHRpbWUgYmV0d2VlbiBzY3JvbGxzIGlzIGJlbG93IGNvbmZpZ3VyZWQgdGhyZXNob2xkXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIG1vdmVtZW50IGlzIE5PVCBiaWcgZW5vdWdoIGFuZFxuICAgIC8vIGlmIHRoZSBsYXN0IHRpbWUgdGhlIHVzZXIgc2Nyb2xsZWQgd2FzIHRvbyBjbG9zZSB0byB0aGUgY3VycmVudCBvbmUgKGF2b2lkIGNvbnRpbnVvdXNseSB0cmlnZ2VyaW5nIHRoZSBzbGlkZXIpOlxuICAgIC8vICAgRG9uJ3QgZ28gYW55IGZ1cnRoZXIgKGF2b2lkIGluc2lnbmlmaWNhbnQgc2Nyb2xsIG1vdmVtZW50KS5cbiAgICBpZiAobmV3RXZlbnQuZGVsdGEgPj0gNiAmJiBub3coKSAtIGxhc3RTY3JvbGxUaW1lIDwgNjApIHtcbiAgICAgIC8vIFJldHVybiBmYWxzZSBhcyBhIGRlZmF1bHRcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBJZiB1c2VyIGlzIHNjcm9sbGluZyB0b3dhcmRzIHRoZSBlbmQ6XG4gICAgLy8gICBJZiB0aGUgc2xpZGVyIGhhc24ndCBoaXQgdGhlIGxhdGVzdCBzbGlkZSBvclxuICAgIC8vICAgaWYgdGhlIHNsaWRlciBpcyBhIGxvb3AgYW5kXG4gICAgLy8gICBpZiB0aGUgc2xpZGVyIGlzbid0IG1vdmluZyByaWdodCBub3c6XG4gICAgLy8gICAgIEdvIHRvIG5leHQgc2xpZGUgYW5kXG4gICAgLy8gICAgIGVtaXQgYSBzY3JvbGwgZXZlbnQuXG4gICAgLy8gRWxzZSAodGhlIHVzZXIgaXMgc2Nyb2xsaW5nIHRvd2FyZHMgdGhlIGJlZ2lubmluZykgYW5kXG4gICAgLy8gaWYgdGhlIHNsaWRlciBoYXNuJ3QgaGl0IHRoZSBmaXJzdCBzbGlkZSBvclxuICAgIC8vIGlmIHRoZSBzbGlkZXIgaXMgYSBsb29wIGFuZFxuICAgIC8vIGlmIHRoZSBzbGlkZXIgaXNuJ3QgbW92aW5nIHJpZ2h0IG5vdzpcbiAgICAvLyAgIEdvIHRvIHByZXYgc2xpZGUgYW5kXG4gICAgLy8gICBlbWl0IGEgc2Nyb2xsIGV2ZW50LlxuICAgIGlmIChuZXdFdmVudC5kaXJlY3Rpb24gPCAwKSB7XG4gICAgICBpZiAoKCFzd2lwZXIuaXNFbmQgfHwgc3dpcGVyLnBhcmFtcy5sb29wKSAmJiAhc3dpcGVyLmFuaW1hdGluZykge1xuICAgICAgICBzd2lwZXIuc2xpZGVOZXh0KCk7XG4gICAgICAgIGVtaXQoJ3Njcm9sbCcsIG5ld0V2ZW50LnJhdyk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoIXN3aXBlci5pc0JlZ2lubmluZyB8fCBzd2lwZXIucGFyYW1zLmxvb3ApICYmICFzd2lwZXIuYW5pbWF0aW5nKSB7XG4gICAgICBzd2lwZXIuc2xpZGVQcmV2KCk7XG4gICAgICBlbWl0KCdzY3JvbGwnLCBuZXdFdmVudC5yYXcpO1xuICAgIH1cbiAgICAvLyBJZiB5b3UgZ290IGhlcmUgaXMgYmVjYXVzZSBhbiBhbmltYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkIHNvIHN0b3JlIHRoZSBjdXJyZW50IHRpbWVcbiAgICBsYXN0U2Nyb2xsVGltZSA9IG5ldyB3aW5kb3cuRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAvLyBSZXR1cm4gZmFsc2UgYXMgYSBkZWZhdWx0XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZ1bmN0aW9uIHJlbGVhc2VTY3JvbGwobmV3RXZlbnQpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLm1vdXNld2hlZWw7XG4gICAgaWYgKG5ld0V2ZW50LmRpcmVjdGlvbiA8IDApIHtcbiAgICAgIGlmIChzd2lwZXIuaXNFbmQgJiYgIXN3aXBlci5wYXJhbXMubG9vcCAmJiBwYXJhbXMucmVsZWFzZU9uRWRnZXMpIHtcbiAgICAgICAgLy8gUmV0dXJuIHRydWUgdG8gYW5pbWF0ZSBzY3JvbGwgb24gZWRnZXNcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzd2lwZXIuaXNCZWdpbm5pbmcgJiYgIXN3aXBlci5wYXJhbXMubG9vcCAmJiBwYXJhbXMucmVsZWFzZU9uRWRnZXMpIHtcbiAgICAgIC8vIFJldHVybiB0cnVlIHRvIGFuaW1hdGUgc2Nyb2xsIG9uIGVkZ2VzXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZ1bmN0aW9uIGhhbmRsZShldmVudCkge1xuICAgIGxldCBlID0gZXZlbnQ7XG4gICAgbGV0IGRpc2FibGVQYXJlbnRTd2lwZXIgPSB0cnVlO1xuICAgIGlmICghc3dpcGVyLmVuYWJsZWQpIHJldHVybjtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLm1vdXNld2hlZWw7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBsZXQgdGFyZ2V0RWwgPSBzd2lwZXIuZWw7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMubW91c2V3aGVlbC5ldmVudHNUYXJnZXQgIT09ICdjb250YWluZXInKSB7XG4gICAgICB0YXJnZXRFbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc3dpcGVyLnBhcmFtcy5tb3VzZXdoZWVsLmV2ZW50c1RhcmdldCk7XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldEVsQ29udGFpbnNUYXJnZXQgPSB0YXJnZXRFbCAmJiB0YXJnZXRFbC5jb250YWlucyhlLnRhcmdldCk7XG4gICAgaWYgKCFzd2lwZXIubW91c2VFbnRlcmVkICYmICF0YXJnZXRFbENvbnRhaW5zVGFyZ2V0ICYmICFwYXJhbXMucmVsZWFzZU9uRWRnZXMpIHJldHVybiB0cnVlO1xuICAgIGlmIChlLm9yaWdpbmFsRXZlbnQpIGUgPSBlLm9yaWdpbmFsRXZlbnQ7IC8vIGpxdWVyeSBmaXhcbiAgICBsZXQgZGVsdGEgPSAwO1xuICAgIGNvbnN0IHJ0bEZhY3RvciA9IHN3aXBlci5ydGxUcmFuc2xhdGUgPyAtMSA6IDE7XG4gICAgY29uc3QgZGF0YSA9IG5vcm1hbGl6ZShlKTtcbiAgICBpZiAocGFyYW1zLmZvcmNlVG9BeGlzKSB7XG4gICAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhkYXRhLnBpeGVsWCkgPiBNYXRoLmFicyhkYXRhLnBpeGVsWSkpIGRlbHRhID0gLWRhdGEucGl4ZWxYICogcnRsRmFjdG9yO2Vsc2UgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGRhdGEucGl4ZWxZKSA+IE1hdGguYWJzKGRhdGEucGl4ZWxYKSkgZGVsdGEgPSAtZGF0YS5waXhlbFk7ZWxzZSByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsdGEgPSBNYXRoLmFicyhkYXRhLnBpeGVsWCkgPiBNYXRoLmFicyhkYXRhLnBpeGVsWSkgPyAtZGF0YS5waXhlbFggKiBydGxGYWN0b3IgOiAtZGF0YS5waXhlbFk7XG4gICAgfVxuICAgIGlmIChkZWx0YSA9PT0gMCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHBhcmFtcy5pbnZlcnQpIGRlbHRhID0gLWRlbHRhO1xuXG4gICAgLy8gR2V0IHRoZSBzY3JvbGwgcG9zaXRpb25zXG4gICAgbGV0IHBvc2l0aW9ucyA9IHN3aXBlci5nZXRUcmFuc2xhdGUoKSArIGRlbHRhICogcGFyYW1zLnNlbnNpdGl2aXR5O1xuICAgIGlmIChwb3NpdGlvbnMgPj0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSBwb3NpdGlvbnMgPSBzd2lwZXIubWluVHJhbnNsYXRlKCk7XG4gICAgaWYgKHBvc2l0aW9ucyA8PSBzd2lwZXIubWF4VHJhbnNsYXRlKCkpIHBvc2l0aW9ucyA9IHN3aXBlci5tYXhUcmFuc2xhdGUoKTtcblxuICAgIC8vIFdoZW4gbG9vcCBpcyB0cnVlOlxuICAgIC8vICAgICB0aGUgZGlzYWJsZVBhcmVudFN3aXBlciB3aWxsIGJlIHRydWUuXG4gICAgLy8gV2hlbiBsb29wIGlzIGZhbHNlOlxuICAgIC8vICAgICBpZiB0aGUgc2Nyb2xsIHBvc2l0aW9ucyBpcyBub3Qgb24gZWRnZSxcbiAgICAvLyAgICAgdGhlbiB0aGUgZGlzYWJsZVBhcmVudFN3aXBlciB3aWxsIGJlIHRydWUuXG4gICAgLy8gICAgIGlmIHRoZSBzY3JvbGwgb24gZWRnZSBwb3NpdGlvbnMsXG4gICAgLy8gICAgIHRoZW4gdGhlIGRpc2FibGVQYXJlbnRTd2lwZXIgd2lsbCBiZSBmYWxzZS5cbiAgICBkaXNhYmxlUGFyZW50U3dpcGVyID0gc3dpcGVyLnBhcmFtcy5sb29wID8gdHJ1ZSA6ICEocG9zaXRpb25zID09PSBzd2lwZXIubWluVHJhbnNsYXRlKCkgfHwgcG9zaXRpb25zID09PSBzd2lwZXIubWF4VHJhbnNsYXRlKCkpO1xuICAgIGlmIChkaXNhYmxlUGFyZW50U3dpcGVyICYmIHN3aXBlci5wYXJhbXMubmVzdGVkKSBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5mcmVlTW9kZSB8fCAhc3dpcGVyLnBhcmFtcy5mcmVlTW9kZS5lbmFibGVkKSB7XG4gICAgICAvLyBSZWdpc3RlciB0aGUgbmV3IGV2ZW50IGluIGEgdmFyaWFibGUgd2hpY2ggc3RvcmVzIHRoZSByZWxldmFudCBkYXRhXG4gICAgICBjb25zdCBuZXdFdmVudCA9IHtcbiAgICAgICAgdGltZTogbm93KCksXG4gICAgICAgIGRlbHRhOiBNYXRoLmFicyhkZWx0YSksXG4gICAgICAgIGRpcmVjdGlvbjogTWF0aC5zaWduKGRlbHRhKSxcbiAgICAgICAgcmF3OiBldmVudFxuICAgICAgfTtcblxuICAgICAgLy8gS2VlcCB0aGUgbW9zdCByZWNlbnQgZXZlbnRzXG4gICAgICBpZiAocmVjZW50V2hlZWxFdmVudHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgcmVjZW50V2hlZWxFdmVudHMuc2hpZnQoKTsgLy8gb25seSBzdG9yZSB0aGUgbGFzdCBOIGV2ZW50c1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcmV2RXZlbnQgPSByZWNlbnRXaGVlbEV2ZW50cy5sZW5ndGggPyByZWNlbnRXaGVlbEV2ZW50c1tyZWNlbnRXaGVlbEV2ZW50cy5sZW5ndGggLSAxXSA6IHVuZGVmaW5lZDtcbiAgICAgIHJlY2VudFdoZWVsRXZlbnRzLnB1c2gobmV3RXZlbnQpO1xuXG4gICAgICAvLyBJZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgcHJldmlvdXMgcmVjb3JkZWQgZXZlbnQ6XG4gICAgICAvLyAgIElmIGRpcmVjdGlvbiBoYXMgY2hhbmdlZCBvclxuICAgICAgLy8gICBpZiB0aGUgc2Nyb2xsIGlzIHF1aWNrZXIgdGhhbiB0aGUgcHJldmlvdXMgb25lOlxuICAgICAgLy8gICAgIEFuaW1hdGUgdGhlIHNsaWRlci5cbiAgICAgIC8vIEVsc2UgKHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdGhlIHdoZWVsIGlzIG1vdmVkKTpcbiAgICAgIC8vICAgICBBbmltYXRlIHRoZSBzbGlkZXIuXG4gICAgICBpZiAocHJldkV2ZW50KSB7XG4gICAgICAgIGlmIChuZXdFdmVudC5kaXJlY3Rpb24gIT09IHByZXZFdmVudC5kaXJlY3Rpb24gfHwgbmV3RXZlbnQuZGVsdGEgPiBwcmV2RXZlbnQuZGVsdGEgfHwgbmV3RXZlbnQudGltZSA+IHByZXZFdmVudC50aW1lICsgMTUwKSB7XG4gICAgICAgICAgYW5pbWF0ZVNsaWRlcihuZXdFdmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFuaW1hdGVTbGlkZXIobmV3RXZlbnQpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBpdCdzIHRpbWUgdG8gcmVsZWFzZSB0aGUgc2Nyb2xsOlxuICAgICAgLy8gICBSZXR1cm4gbm93IHNvIHlvdSBkb24ndCBoaXQgdGhlIHByZXZlbnREZWZhdWx0LlxuICAgICAgaWYgKHJlbGVhc2VTY3JvbGwobmV3RXZlbnQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGcmVlbW9kZSBvciBzY3JvbGxDb250YWluZXI6XG5cbiAgICAgIC8vIElmIHdlIHJlY2VudGx5IHNuYXBwZWQgYWZ0ZXIgYSBtb21lbnR1bSBzY3JvbGwsIHRoZW4gaWdub3JlIHdoZWVsIGV2ZW50c1xuICAgICAgLy8gdG8gZ2l2ZSB0aW1lIGZvciB0aGUgZGVjZWxlcmF0aW9uIHRvIGZpbmlzaC4gU3RvcCBpZ25vcmluZyBhZnRlciA1MDAgbXNlY3NcbiAgICAgIC8vIG9yIGlmIGl0J3MgYSBuZXcgc2Nyb2xsIChsYXJnZXIgZGVsdGEgb3IgaW52ZXJzZSBzaWduIGFzIGxhc3QgZXZlbnQgYmVmb3JlXG4gICAgICAvLyBhbiBlbmQtb2YtbW9tZW50dW0gc25hcCkuXG4gICAgICBjb25zdCBuZXdFdmVudCA9IHtcbiAgICAgICAgdGltZTogbm93KCksXG4gICAgICAgIGRlbHRhOiBNYXRoLmFicyhkZWx0YSksXG4gICAgICAgIGRpcmVjdGlvbjogTWF0aC5zaWduKGRlbHRhKVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGlnbm9yZVdoZWVsRXZlbnRzID0gbGFzdEV2ZW50QmVmb3JlU25hcCAmJiBuZXdFdmVudC50aW1lIDwgbGFzdEV2ZW50QmVmb3JlU25hcC50aW1lICsgNTAwICYmIG5ld0V2ZW50LmRlbHRhIDw9IGxhc3RFdmVudEJlZm9yZVNuYXAuZGVsdGEgJiYgbmV3RXZlbnQuZGlyZWN0aW9uID09PSBsYXN0RXZlbnRCZWZvcmVTbmFwLmRpcmVjdGlvbjtcbiAgICAgIGlmICghaWdub3JlV2hlZWxFdmVudHMpIHtcbiAgICAgICAgbGFzdEV2ZW50QmVmb3JlU25hcCA9IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gc3dpcGVyLmdldFRyYW5zbGF0ZSgpICsgZGVsdGEgKiBwYXJhbXMuc2Vuc2l0aXZpdHk7XG4gICAgICAgIGNvbnN0IHdhc0JlZ2lubmluZyA9IHN3aXBlci5pc0JlZ2lubmluZztcbiAgICAgICAgY29uc3Qgd2FzRW5kID0gc3dpcGVyLmlzRW5kO1xuICAgICAgICBpZiAocG9zaXRpb24gPj0gc3dpcGVyLm1pblRyYW5zbGF0ZSgpKSBwb3NpdGlvbiA9IHN3aXBlci5taW5UcmFuc2xhdGUoKTtcbiAgICAgICAgaWYgKHBvc2l0aW9uIDw9IHN3aXBlci5tYXhUcmFuc2xhdGUoKSkgcG9zaXRpb24gPSBzd2lwZXIubWF4VHJhbnNsYXRlKCk7XG4gICAgICAgIHN3aXBlci5zZXRUcmFuc2l0aW9uKDApO1xuICAgICAgICBzd2lwZXIuc2V0VHJhbnNsYXRlKHBvc2l0aW9uKTtcbiAgICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgICAgICBpZiAoIXdhc0JlZ2lubmluZyAmJiBzd2lwZXIuaXNCZWdpbm5pbmcgfHwgIXdhc0VuZCAmJiBzd2lwZXIuaXNFbmQpIHtcbiAgICAgICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgICAgICBzd2lwZXIubG9vcEZpeCh7XG4gICAgICAgICAgICBkaXJlY3Rpb246IG5ld0V2ZW50LmRpcmVjdGlvbiA8IDAgPyAnbmV4dCcgOiAncHJldicsXG4gICAgICAgICAgICBieU1vdXNld2hlZWw6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5mcmVlTW9kZS5zdGlja3kpIHtcbiAgICAgICAgICAvLyBXaGVuIHdoZWVsIHNjcm9sbGluZyBzdGFydHMgd2l0aCBzdGlja3kgKGFrYSBzbmFwKSBlbmFibGVkLCB0aGVuIGRldGVjdFxuICAgICAgICAgIC8vIHRoZSBlbmQgb2YgYSBtb21lbnR1bSBzY3JvbGwgYnkgc3RvcmluZyByZWNlbnQgKE49MTU/KSB3aGVlbCBldmVudHMuXG4gICAgICAgICAgLy8gMS4gZG8gYWxsIE4gZXZlbnRzIGhhdmUgZGVjcmVhc2luZyBvciBzYW1lIChhYnNvbHV0ZSB2YWx1ZSkgZGVsdGE/XG4gICAgICAgICAgLy8gMi4gZGlkIGFsbCBOIGV2ZW50cyBhcnJpdmUgaW4gdGhlIGxhc3QgTSAoTT01MDA/KSBtc2Vjcz9cbiAgICAgICAgICAvLyAzLiBkb2VzIHRoZSBlYXJsaWVzdCBldmVudCBoYXZlIGFuIChhYnNvbHV0ZSB2YWx1ZSkgZGVsdGEgdGhhdCdzXG4gICAgICAgICAgLy8gICAgYXQgbGVhc3QgUCAoUD0xPykgbGFyZ2VyIHRoYW4gdGhlIG1vc3QgcmVjZW50IGV2ZW50J3MgZGVsdGE/XG4gICAgICAgICAgLy8gNC4gZG9lcyB0aGUgbGF0ZXN0IGV2ZW50IGhhdmUgYSBkZWx0YSB0aGF0J3Mgc21hbGxlciB0aGFuIFEgKFE9Nj8pIHBpeGVscz9cbiAgICAgICAgICAvLyBJZiAxLTQgYXJlIFwieWVzXCIgdGhlbiB3ZSdyZSBuZWFyIHRoZSBlbmQgb2YgYSBtb21lbnR1bSBzY3JvbGwgZGVjZWxlcmF0aW9uLlxuICAgICAgICAgIC8vIFNuYXAgaW1tZWRpYXRlbHkgYW5kIGlnbm9yZSByZW1haW5pbmcgd2hlZWwgZXZlbnRzIGluIHRoaXMgc2Nyb2xsLlxuICAgICAgICAgIC8vIFNlZSBjb21tZW50IGFib3ZlIGZvciBcInJlbWFpbmluZyB3aGVlbCBldmVudHMgaW4gdGhpcyBzY3JvbGxcIiBkZXRlcm1pbmF0aW9uLlxuICAgICAgICAgIC8vIElmIDEtNCBhcmVuJ3Qgc2F0aXNmaWVkLCB0aGVuIHdhaXQgdG8gc25hcCB1bnRpbCA1MDBtcyBhZnRlciB0aGUgbGFzdCBldmVudC5cbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgdGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAocmVjZW50V2hlZWxFdmVudHMubGVuZ3RoID49IDE1KSB7XG4gICAgICAgICAgICByZWNlbnRXaGVlbEV2ZW50cy5zaGlmdCgpOyAvLyBvbmx5IHN0b3JlIHRoZSBsYXN0IE4gZXZlbnRzXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcHJldkV2ZW50ID0gcmVjZW50V2hlZWxFdmVudHMubGVuZ3RoID8gcmVjZW50V2hlZWxFdmVudHNbcmVjZW50V2hlZWxFdmVudHMubGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3QgZmlyc3RFdmVudCA9IHJlY2VudFdoZWVsRXZlbnRzWzBdO1xuICAgICAgICAgIHJlY2VudFdoZWVsRXZlbnRzLnB1c2gobmV3RXZlbnQpO1xuICAgICAgICAgIGlmIChwcmV2RXZlbnQgJiYgKG5ld0V2ZW50LmRlbHRhID4gcHJldkV2ZW50LmRlbHRhIHx8IG5ld0V2ZW50LmRpcmVjdGlvbiAhPT0gcHJldkV2ZW50LmRpcmVjdGlvbikpIHtcbiAgICAgICAgICAgIC8vIEluY3JlYXNpbmcgb3IgcmV2ZXJzZS1zaWduIGRlbHRhIG1lYW5zIHRoZSB1c2VyIHN0YXJ0ZWQgc2Nyb2xsaW5nIGFnYWluLiBDbGVhciB0aGUgd2hlZWwgZXZlbnQgbG9nLlxuICAgICAgICAgICAgcmVjZW50V2hlZWxFdmVudHMuc3BsaWNlKDApO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmVjZW50V2hlZWxFdmVudHMubGVuZ3RoID49IDE1ICYmIG5ld0V2ZW50LnRpbWUgLSBmaXJzdEV2ZW50LnRpbWUgPCA1MDAgJiYgZmlyc3RFdmVudC5kZWx0YSAtIG5ld0V2ZW50LmRlbHRhID49IDEgJiYgbmV3RXZlbnQuZGVsdGEgPD0gNikge1xuICAgICAgICAgICAgLy8gV2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgZGVjZWxlcmF0aW9uIG9mIGEgbW9tZW50dW0gc2Nyb2xsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgICAgICAgICAgIC8vIHRvIHdhaXQgZm9yIG1vcmUgZXZlbnRzLiBTbmFwIEFTQVAgb24gdGhlIG5leHQgdGljay5cbiAgICAgICAgICAgIC8vIEFsc28sIGJlY2F1c2UgdGhlcmUncyBzb21lIHJlbWFpbmluZyBtb21lbnR1bSB3ZSdsbCBiaWFzIHRoZSBzbmFwIGluIHRoZVxuICAgICAgICAgICAgLy8gZGlyZWN0aW9uIG9mIHRoZSBvbmdvaW5nIHNjcm9sbCBiZWNhdXNlIGl0J3MgYmV0dGVyIFVYIGZvciB0aGUgc2Nyb2xsIHRvIHNuYXBcbiAgICAgICAgICAgIC8vIGluIHRoZSBzYW1lIGRpcmVjdGlvbiBhcyB0aGUgc2Nyb2xsIGluc3RlYWQgb2YgcmV2ZXJzaW5nIHRvIHNuYXAuICBUaGVyZWZvcmUsXG4gICAgICAgICAgICAvLyBpZiBpdCdzIGFscmVhZHkgc2Nyb2xsZWQgbW9yZSB0aGFuIDIwJSBpbiB0aGUgY3VycmVudCBkaXJlY3Rpb24sIGtlZXAgZ29pbmcuXG4gICAgICAgICAgICBjb25zdCBzbmFwVG9UaHJlc2hvbGQgPSBkZWx0YSA+IDAgPyAwLjggOiAwLjI7XG4gICAgICAgICAgICBsYXN0RXZlbnRCZWZvcmVTbmFwID0gbmV3RXZlbnQ7XG4gICAgICAgICAgICByZWNlbnRXaGVlbEV2ZW50cy5zcGxpY2UoMCk7XG4gICAgICAgICAgICB0aW1lb3V0ID0gbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgICBzd2lwZXIuc2xpZGVUb0Nsb3Nlc3Qoc3dpcGVyLnBhcmFtcy5zcGVlZCwgdHJ1ZSwgdW5kZWZpbmVkLCBzbmFwVG9UaHJlc2hvbGQpO1xuICAgICAgICAgICAgfSwgMCk7IC8vIG5vIGRlbGF5OyBtb3ZlIG9uIG5leHQgdGlja1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGltZW91dCkge1xuICAgICAgICAgICAgLy8gaWYgd2UgZ2V0IGhlcmUsIHRoZW4gd2UgaGF2ZW4ndCBkZXRlY3RlZCB0aGUgZW5kIG9mIGEgbW9tZW50dW0gc2Nyb2xsLCBzb1xuICAgICAgICAgICAgLy8gd2UnbGwgY29uc2lkZXIgYSBzY3JvbGwgXCJjb21wbGV0ZVwiIHdoZW4gdGhlcmUgaGF2ZW4ndCBiZWVuIGFueSB3aGVlbCBldmVudHNcbiAgICAgICAgICAgIC8vIGZvciA1MDBtcy5cbiAgICAgICAgICAgIHRpbWVvdXQgPSBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHNuYXBUb1RocmVzaG9sZCA9IDAuNTtcbiAgICAgICAgICAgICAgbGFzdEV2ZW50QmVmb3JlU25hcCA9IG5ld0V2ZW50O1xuICAgICAgICAgICAgICByZWNlbnRXaGVlbEV2ZW50cy5zcGxpY2UoMCk7XG4gICAgICAgICAgICAgIHN3aXBlci5zbGlkZVRvQ2xvc2VzdChzd2lwZXIucGFyYW1zLnNwZWVkLCB0cnVlLCB1bmRlZmluZWQsIHNuYXBUb1RocmVzaG9sZCk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEVtaXQgZXZlbnRcbiAgICAgICAgaWYgKCFpZ25vcmVXaGVlbEV2ZW50cykgZW1pdCgnc2Nyb2xsJywgZSk7XG5cbiAgICAgICAgLy8gU3RvcCBhdXRvcGxheVxuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy5hdXRvcGxheSAmJiBzd2lwZXIucGFyYW1zLmF1dG9wbGF5RGlzYWJsZU9uSW50ZXJhY3Rpb24pIHN3aXBlci5hdXRvcGxheS5zdG9wKCk7XG4gICAgICAgIC8vIFJldHVybiBwYWdlIHNjcm9sbCBvbiBlZGdlIHBvc2l0aW9uc1xuICAgICAgICBpZiAocG9zaXRpb24gPT09IHN3aXBlci5taW5UcmFuc2xhdGUoKSB8fCBwb3NpdGlvbiA9PT0gc3dpcGVyLm1heFRyYW5zbGF0ZSgpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQoKTtlbHNlIGUucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZnVuY3Rpb24gZXZlbnRzKG1ldGhvZCkge1xuICAgIGxldCB0YXJnZXRFbCA9IHN3aXBlci5lbDtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5tb3VzZXdoZWVsLmV2ZW50c1RhcmdldCAhPT0gJ2NvbnRhaW5lcicpIHtcbiAgICAgIHRhcmdldEVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihzd2lwZXIucGFyYW1zLm1vdXNld2hlZWwuZXZlbnRzVGFyZ2V0KTtcbiAgICB9XG4gICAgdGFyZ2V0RWxbbWV0aG9kXSgnbW91c2VlbnRlcicsIGhhbmRsZU1vdXNlRW50ZXIpO1xuICAgIHRhcmdldEVsW21ldGhvZF0oJ21vdXNlbGVhdmUnLCBoYW5kbGVNb3VzZUxlYXZlKTtcbiAgICB0YXJnZXRFbFttZXRob2RdKCd3aGVlbCcsIGhhbmRsZSk7XG4gIH1cbiAgZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHN3aXBlci53cmFwcGVyRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignd2hlZWwnLCBoYW5kbGUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChzd2lwZXIubW91c2V3aGVlbC5lbmFibGVkKSByZXR1cm4gZmFsc2U7XG4gICAgZXZlbnRzKCdhZGRFdmVudExpc3RlbmVyJyk7XG4gICAgc3dpcGVyLm1vdXNld2hlZWwuZW5hYmxlZCA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICBzd2lwZXIud3JhcHBlckVsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFzd2lwZXIubW91c2V3aGVlbC5lbmFibGVkKSByZXR1cm4gZmFsc2U7XG4gICAgZXZlbnRzKCdyZW1vdmVFdmVudExpc3RlbmVyJyk7XG4gICAgc3dpcGVyLm1vdXNld2hlZWwuZW5hYmxlZCA9IGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIG9uKCdpbml0JywgKCkgPT4ge1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5tb3VzZXdoZWVsLmVuYWJsZWQgJiYgc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICBkaXNhYmxlKCk7XG4gICAgfVxuICAgIGlmIChzd2lwZXIucGFyYW1zLm1vdXNld2hlZWwuZW5hYmxlZCkgZW5hYmxlKCk7XG4gIH0pO1xuICBvbignZGVzdHJveScsICgpID0+IHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICBlbmFibGUoKTtcbiAgICB9XG4gICAgaWYgKHN3aXBlci5tb3VzZXdoZWVsLmVuYWJsZWQpIGRpc2FibGUoKTtcbiAgfSk7XG4gIE9iamVjdC5hc3NpZ24oc3dpcGVyLm1vdXNld2hlZWwsIHtcbiAgICBlbmFibGUsXG4gICAgZGlzYWJsZVxuICB9KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/mousewheel/mousewheel.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/navigation/navigation.js\":\r\n/*!**************************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/navigation/navigation.js ***!\r\n  \\**************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ Navigation)\\n/* harmony export */ });\\n/* harmony import */ var _shared_create_element_if_not_defined_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/create-element-if-not-defined.js */ \\\"./node_modules/swiper/shared/create-element-if-not-defined.js\\\");\\n\\nfunction Navigation({\\n  swiper,\\n  extendParams,\\n  on,\\n  emit\\n}) {\\n  extendParams({\\n    navigation: {\\n      nextEl: null,\\n      prevEl: null,\\n      hideOnClick: false,\\n      disabledClass: 'swiper-button-disabled',\\n      hiddenClass: 'swiper-button-hidden',\\n      lockClass: 'swiper-button-lock',\\n      navigationDisabledClass: 'swiper-navigation-disabled'\\n    }\\n  });\\n  swiper.navigation = {\\n    nextEl: null,\\n    prevEl: null\\n  };\\n  const makeElementsArray = el => {\\n    if (!Array.isArray(el)) el = [el].filter(e => !!e);\\n    return el;\\n  };\\n  function getEl(el) {\\n    let res;\\n    if (el && typeof el === 'string' && swiper.isElement) {\\n      res = swiper.el.shadowRoot.querySelector(el);\\n      if (res) return res;\\n    }\\n    if (el) {\\n      if (typeof el === 'string') res = [...document.querySelectorAll(el)];\\n      if (swiper.params.uniqueNavElements && typeof el === 'string' && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\\n        res = swiper.el.querySelector(el);\\n      }\\n    }\\n    if (el && !res) return el;\\n    // if (Array.isArray(res) && res.length === 1) res = res[0];\\n    return res;\\n  }\\n  function toggleEl(el, disabled) {\\n    const params = swiper.params.navigation;\\n    el = makeElementsArray(el);\\n    el.forEach(subEl => {\\n      if (subEl) {\\n        subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\\n        if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\\n        if (swiper.params.watchOverflow && swiper.enabled) {\\n          subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\\n        }\\n      }\\n    });\\n  }\\n  function update() {\\n    // Update Navigation Buttons\\n    const {\\n      nextEl,\\n      prevEl\\n    } = swiper.navigation;\\n    if (swiper.params.loop) {\\n      toggleEl(prevEl, false);\\n      toggleEl(nextEl, false);\\n      return;\\n    }\\n    toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\\n    toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\\n  }\\n  function onPrevClick(e) {\\n    e.preventDefault();\\n    if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\\n    swiper.slidePrev();\\n    emit('navigationPrev');\\n  }\\n  function onNextClick(e) {\\n    e.preventDefault();\\n    if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\\n    swiper.slideNext();\\n    emit('navigationNext');\\n  }\\n  function init() {\\n    const params = swiper.params.navigation;\\n    swiper.params.navigation = (0,_shared_create_element_if_not_defined_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\\n      nextEl: 'swiper-button-next',\\n      prevEl: 'swiper-button-prev'\\n    });\\n    if (!(params.nextEl || params.prevEl)) return;\\n    let nextEl = getEl(params.nextEl);\\n    let prevEl = getEl(params.prevEl);\\n    Object.assign(swiper.navigation, {\\n      nextEl,\\n      prevEl\\n    });\\n    nextEl = makeElementsArray(nextEl);\\n    prevEl = makeElementsArray(prevEl);\\n    const initButton = (el, dir) => {\\n      if (el) {\\n        el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\\n      }\\n      if (!swiper.enabled && el) {\\n        el.classList.add(...params.lockClass.split(' '));\\n      }\\n    };\\n    nextEl.forEach(el => initButton(el, 'next'));\\n    prevEl.forEach(el => initButton(el, 'prev'));\\n  }\\n  function destroy() {\\n    let {\\n      nextEl,\\n      prevEl\\n    } = swiper.navigation;\\n    nextEl = makeElementsArray(nextEl);\\n    prevEl = makeElementsArray(prevEl);\\n    const destroyButton = (el, dir) => {\\n      el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\\n      el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\\n    };\\n    nextEl.forEach(el => destroyButton(el, 'next'));\\n    prevEl.forEach(el => destroyButton(el, 'prev'));\\n  }\\n  on('init', () => {\\n    if (swiper.params.navigation.enabled === false) {\\n      // eslint-disable-next-line\\n      disable();\\n    } else {\\n      init();\\n      update();\\n    }\\n  });\\n  on('toEdge fromEdge lock unlock', () => {\\n    update();\\n  });\\n  on('destroy', () => {\\n    destroy();\\n  });\\n  on('enable disable', () => {\\n    let {\\n      nextEl,\\n      prevEl\\n    } = swiper.navigation;\\n    nextEl = makeElementsArray(nextEl);\\n    prevEl = makeElementsArray(prevEl);\\n    [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.navigation.lockClass));\\n  });\\n  on('click', (_s, e) => {\\n    let {\\n      nextEl,\\n      prevEl\\n    } = swiper.navigation;\\n    nextEl = makeElementsArray(nextEl);\\n    prevEl = makeElementsArray(prevEl);\\n    const targetEl = e.target;\\n    if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) {\\n      if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\\n      let isHidden;\\n      if (nextEl.length) {\\n        isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\\n      } else if (prevEl.length) {\\n        isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\\n      }\\n      if (isHidden === true) {\\n        emit('navigationShow');\\n      } else {\\n        emit('navigationHide');\\n      }\\n      [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\\n    }\\n  });\\n  const enable = () => {\\n    swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\\n    init();\\n    update();\\n  };\\n  const disable = () => {\\n    swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\\n    destroy();\\n  };\\n  Object.assign(swiper.navigation, {\\n    enable,\\n    disable,\\n    update,\\n    init,\\n    destroy\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQXNGO0FBQ3ZFO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0Isb0ZBQXlCO0FBQ3hEO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvbW9kdWxlcy9uYXZpZ2F0aW9uL25hdmlnYXRpb24uanM/NjY5YiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3JlYXRlRWxlbWVudElmTm90RGVmaW5lZCBmcm9tICcuLi8uLi9zaGFyZWQvY3JlYXRlLWVsZW1lbnQtaWYtbm90LWRlZmluZWQuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTmF2aWdhdGlvbih7XG4gIHN3aXBlcixcbiAgZXh0ZW5kUGFyYW1zLFxuICBvbixcbiAgZW1pdFxufSkge1xuICBleHRlbmRQYXJhbXMoe1xuICAgIG5hdmlnYXRpb246IHtcbiAgICAgIG5leHRFbDogbnVsbCxcbiAgICAgIHByZXZFbDogbnVsbCxcbiAgICAgIGhpZGVPbkNsaWNrOiBmYWxzZSxcbiAgICAgIGRpc2FibGVkQ2xhc3M6ICdzd2lwZXItYnV0dG9uLWRpc2FibGVkJyxcbiAgICAgIGhpZGRlbkNsYXNzOiAnc3dpcGVyLWJ1dHRvbi1oaWRkZW4nLFxuICAgICAgbG9ja0NsYXNzOiAnc3dpcGVyLWJ1dHRvbi1sb2NrJyxcbiAgICAgIG5hdmlnYXRpb25EaXNhYmxlZENsYXNzOiAnc3dpcGVyLW5hdmlnYXRpb24tZGlzYWJsZWQnXG4gICAgfVxuICB9KTtcbiAgc3dpcGVyLm5hdmlnYXRpb24gPSB7XG4gICAgbmV4dEVsOiBudWxsLFxuICAgIHByZXZFbDogbnVsbFxuICB9O1xuICBjb25zdCBtYWtlRWxlbWVudHNBcnJheSA9IGVsID0+IHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZWwpKSBlbCA9IFtlbF0uZmlsdGVyKGUgPT4gISFlKTtcbiAgICByZXR1cm4gZWw7XG4gIH07XG4gIGZ1bmN0aW9uIGdldEVsKGVsKSB7XG4gICAgbGV0IHJlcztcbiAgICBpZiAoZWwgJiYgdHlwZW9mIGVsID09PSAnc3RyaW5nJyAmJiBzd2lwZXIuaXNFbGVtZW50KSB7XG4gICAgICByZXMgPSBzd2lwZXIuZWwuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGVsKTtcbiAgICAgIGlmIChyZXMpIHJldHVybiByZXM7XG4gICAgfVxuICAgIGlmIChlbCkge1xuICAgICAgaWYgKHR5cGVvZiBlbCA9PT0gJ3N0cmluZycpIHJlcyA9IFsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGVsKV07XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy51bmlxdWVOYXZFbGVtZW50cyAmJiB0eXBlb2YgZWwgPT09ICdzdHJpbmcnICYmIHJlcy5sZW5ndGggPiAxICYmIHN3aXBlci5lbC5xdWVyeVNlbGVjdG9yQWxsKGVsKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmVzID0gc3dpcGVyLmVsLnF1ZXJ5U2VsZWN0b3IoZWwpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZWwgJiYgIXJlcykgcmV0dXJuIGVsO1xuICAgIC8vIGlmIChBcnJheS5pc0FycmF5KHJlcykgJiYgcmVzLmxlbmd0aCA9PT0gMSkgcmVzID0gcmVzWzBdO1xuICAgIHJldHVybiByZXM7XG4gIH1cbiAgZnVuY3Rpb24gdG9nZ2xlRWwoZWwsIGRpc2FibGVkKSB7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uO1xuICAgIGVsID0gbWFrZUVsZW1lbnRzQXJyYXkoZWwpO1xuICAgIGVsLmZvckVhY2goc3ViRWwgPT4ge1xuICAgICAgaWYgKHN1YkVsKSB7XG4gICAgICAgIHN1YkVsLmNsYXNzTGlzdFtkaXNhYmxlZCA/ICdhZGQnIDogJ3JlbW92ZSddKC4uLnBhcmFtcy5kaXNhYmxlZENsYXNzLnNwbGl0KCcgJykpO1xuICAgICAgICBpZiAoc3ViRWwudGFnTmFtZSA9PT0gJ0JVVFRPTicpIHN1YkVsLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgICAgIGlmIChzd2lwZXIucGFyYW1zLndhdGNoT3ZlcmZsb3cgJiYgc3dpcGVyLmVuYWJsZWQpIHtcbiAgICAgICAgICBzdWJFbC5jbGFzc0xpc3Rbc3dpcGVyLmlzTG9ja2VkID8gJ2FkZCcgOiAncmVtb3ZlJ10ocGFyYW1zLmxvY2tDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgLy8gVXBkYXRlIE5hdmlnYXRpb24gQnV0dG9uc1xuICAgIGNvbnN0IHtcbiAgICAgIG5leHRFbCxcbiAgICAgIHByZXZFbFxuICAgIH0gPSBzd2lwZXIubmF2aWdhdGlvbjtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5sb29wKSB7XG4gICAgICB0b2dnbGVFbChwcmV2RWwsIGZhbHNlKTtcbiAgICAgIHRvZ2dsZUVsKG5leHRFbCwgZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0b2dnbGVFbChwcmV2RWwsIHN3aXBlci5pc0JlZ2lubmluZyAmJiAhc3dpcGVyLnBhcmFtcy5yZXdpbmQpO1xuICAgIHRvZ2dsZUVsKG5leHRFbCwgc3dpcGVyLmlzRW5kICYmICFzd2lwZXIucGFyYW1zLnJld2luZCk7XG4gIH1cbiAgZnVuY3Rpb24gb25QcmV2Q2xpY2soZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoc3dpcGVyLmlzQmVnaW5uaW5nICYmICFzd2lwZXIucGFyYW1zLmxvb3AgJiYgIXN3aXBlci5wYXJhbXMucmV3aW5kKSByZXR1cm47XG4gICAgc3dpcGVyLnNsaWRlUHJldigpO1xuICAgIGVtaXQoJ25hdmlnYXRpb25QcmV2Jyk7XG4gIH1cbiAgZnVuY3Rpb24gb25OZXh0Q2xpY2soZSkge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoc3dpcGVyLmlzRW5kICYmICFzd2lwZXIucGFyYW1zLmxvb3AgJiYgIXN3aXBlci5wYXJhbXMucmV3aW5kKSByZXR1cm47XG4gICAgc3dpcGVyLnNsaWRlTmV4dCgpO1xuICAgIGVtaXQoJ25hdmlnYXRpb25OZXh0Jyk7XG4gIH1cbiAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLm5hdmlnYXRpb247XG4gICAgc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uID0gY3JlYXRlRWxlbWVudElmTm90RGVmaW5lZChzd2lwZXIsIHN3aXBlci5vcmlnaW5hbFBhcmFtcy5uYXZpZ2F0aW9uLCBzd2lwZXIucGFyYW1zLm5hdmlnYXRpb24sIHtcbiAgICAgIG5leHRFbDogJ3N3aXBlci1idXR0b24tbmV4dCcsXG4gICAgICBwcmV2RWw6ICdzd2lwZXItYnV0dG9uLXByZXYnXG4gICAgfSk7XG4gICAgaWYgKCEocGFyYW1zLm5leHRFbCB8fCBwYXJhbXMucHJldkVsKSkgcmV0dXJuO1xuICAgIGxldCBuZXh0RWwgPSBnZXRFbChwYXJhbXMubmV4dEVsKTtcbiAgICBsZXQgcHJldkVsID0gZ2V0RWwocGFyYW1zLnByZXZFbCk7XG4gICAgT2JqZWN0LmFzc2lnbihzd2lwZXIubmF2aWdhdGlvbiwge1xuICAgICAgbmV4dEVsLFxuICAgICAgcHJldkVsXG4gICAgfSk7XG4gICAgbmV4dEVsID0gbWFrZUVsZW1lbnRzQXJyYXkobmV4dEVsKTtcbiAgICBwcmV2RWwgPSBtYWtlRWxlbWVudHNBcnJheShwcmV2RWwpO1xuICAgIGNvbnN0IGluaXRCdXR0b24gPSAoZWwsIGRpcikgPT4ge1xuICAgICAgaWYgKGVsKSB7XG4gICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZGlyID09PSAnbmV4dCcgPyBvbk5leHRDbGljayA6IG9uUHJldkNsaWNrKTtcbiAgICAgIH1cbiAgICAgIGlmICghc3dpcGVyLmVuYWJsZWQgJiYgZWwpIHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCguLi5wYXJhbXMubG9ja0NsYXNzLnNwbGl0KCcgJykpO1xuICAgICAgfVxuICAgIH07XG4gICAgbmV4dEVsLmZvckVhY2goZWwgPT4gaW5pdEJ1dHRvbihlbCwgJ25leHQnKSk7XG4gICAgcHJldkVsLmZvckVhY2goZWwgPT4gaW5pdEJ1dHRvbihlbCwgJ3ByZXYnKSk7XG4gIH1cbiAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICBsZXQge1xuICAgICAgbmV4dEVsLFxuICAgICAgcHJldkVsXG4gICAgfSA9IHN3aXBlci5uYXZpZ2F0aW9uO1xuICAgIG5leHRFbCA9IG1ha2VFbGVtZW50c0FycmF5KG5leHRFbCk7XG4gICAgcHJldkVsID0gbWFrZUVsZW1lbnRzQXJyYXkocHJldkVsKTtcbiAgICBjb25zdCBkZXN0cm95QnV0dG9uID0gKGVsLCBkaXIpID0+IHtcbiAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZGlyID09PSAnbmV4dCcgPyBvbk5leHRDbGljayA6IG9uUHJldkNsaWNrKTtcbiAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoLi4uc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmRpc2FibGVkQ2xhc3Muc3BsaXQoJyAnKSk7XG4gICAgfTtcbiAgICBuZXh0RWwuZm9yRWFjaChlbCA9PiBkZXN0cm95QnV0dG9uKGVsLCAnbmV4dCcpKTtcbiAgICBwcmV2RWwuZm9yRWFjaChlbCA9PiBkZXN0cm95QnV0dG9uKGVsLCAncHJldicpKTtcbiAgfVxuICBvbignaW5pdCcsICgpID0+IHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmVuYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5pdCgpO1xuICAgICAgdXBkYXRlKCk7XG4gICAgfVxuICB9KTtcbiAgb24oJ3RvRWRnZSBmcm9tRWRnZSBsb2NrIHVubG9jaycsICgpID0+IHtcbiAgICB1cGRhdGUoKTtcbiAgfSk7XG4gIG9uKCdkZXN0cm95JywgKCkgPT4ge1xuICAgIGRlc3Ryb3koKTtcbiAgfSk7XG4gIG9uKCdlbmFibGUgZGlzYWJsZScsICgpID0+IHtcbiAgICBsZXQge1xuICAgICAgbmV4dEVsLFxuICAgICAgcHJldkVsXG4gICAgfSA9IHN3aXBlci5uYXZpZ2F0aW9uO1xuICAgIG5leHRFbCA9IG1ha2VFbGVtZW50c0FycmF5KG5leHRFbCk7XG4gICAgcHJldkVsID0gbWFrZUVsZW1lbnRzQXJyYXkocHJldkVsKTtcbiAgICBbLi4ubmV4dEVsLCAuLi5wcmV2RWxdLmZpbHRlcihlbCA9PiAhIWVsKS5mb3JFYWNoKGVsID0+IGVsLmNsYXNzTGlzdFtzd2lwZXIuZW5hYmxlZCA/ICdyZW1vdmUnIDogJ2FkZCddKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5sb2NrQ2xhc3MpKTtcbiAgfSk7XG4gIG9uKCdjbGljaycsIChfcywgZSkgPT4ge1xuICAgIGxldCB7XG4gICAgICBuZXh0RWwsXG4gICAgICBwcmV2RWxcbiAgICB9ID0gc3dpcGVyLm5hdmlnYXRpb247XG4gICAgbmV4dEVsID0gbWFrZUVsZW1lbnRzQXJyYXkobmV4dEVsKTtcbiAgICBwcmV2RWwgPSBtYWtlRWxlbWVudHNBcnJheShwcmV2RWwpO1xuICAgIGNvbnN0IHRhcmdldEVsID0gZS50YXJnZXQ7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5oaWRlT25DbGljayAmJiAhcHJldkVsLmluY2x1ZGVzKHRhcmdldEVsKSAmJiAhbmV4dEVsLmluY2x1ZGVzKHRhcmdldEVsKSkge1xuICAgICAgaWYgKHN3aXBlci5wYWdpbmF0aW9uICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbiAmJiBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24uY2xpY2thYmxlICYmIChzd2lwZXIucGFnaW5hdGlvbi5lbCA9PT0gdGFyZ2V0RWwgfHwgc3dpcGVyLnBhZ2luYXRpb24uZWwuY29udGFpbnModGFyZ2V0RWwpKSkgcmV0dXJuO1xuICAgICAgbGV0IGlzSGlkZGVuO1xuICAgICAgaWYgKG5leHRFbC5sZW5ndGgpIHtcbiAgICAgICAgaXNIaWRkZW4gPSBuZXh0RWxbMF0uY2xhc3NMaXN0LmNvbnRhaW5zKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICB9IGVsc2UgaWYgKHByZXZFbC5sZW5ndGgpIHtcbiAgICAgICAgaXNIaWRkZW4gPSBwcmV2RWxbMF0uY2xhc3NMaXN0LmNvbnRhaW5zKHN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICB9XG4gICAgICBpZiAoaXNIaWRkZW4gPT09IHRydWUpIHtcbiAgICAgICAgZW1pdCgnbmF2aWdhdGlvblNob3cnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVtaXQoJ25hdmlnYXRpb25IaWRlJyk7XG4gICAgICB9XG4gICAgICBbLi4ubmV4dEVsLCAuLi5wcmV2RWxdLmZpbHRlcihlbCA9PiAhIWVsKS5mb3JFYWNoKGVsID0+IGVsLmNsYXNzTGlzdC50b2dnbGUoc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLmhpZGRlbkNsYXNzKSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgZW5hYmxlID0gKCkgPT4ge1xuICAgIHN3aXBlci5lbC5jbGFzc0xpc3QucmVtb3ZlKC4uLnN3aXBlci5wYXJhbXMubmF2aWdhdGlvbi5uYXZpZ2F0aW9uRGlzYWJsZWRDbGFzcy5zcGxpdCgnICcpKTtcbiAgICBpbml0KCk7XG4gICAgdXBkYXRlKCk7XG4gIH07XG4gIGNvbnN0IGRpc2FibGUgPSAoKSA9PiB7XG4gICAgc3dpcGVyLmVsLmNsYXNzTGlzdC5hZGQoLi4uc3dpcGVyLnBhcmFtcy5uYXZpZ2F0aW9uLm5hdmlnYXRpb25EaXNhYmxlZENsYXNzLnNwbGl0KCcgJykpO1xuICAgIGRlc3Ryb3koKTtcbiAgfTtcbiAgT2JqZWN0LmFzc2lnbihzd2lwZXIubmF2aWdhdGlvbiwge1xuICAgIGVuYWJsZSxcbiAgICBkaXNhYmxlLFxuICAgIHVwZGF0ZSxcbiAgICBpbml0LFxuICAgIGRlc3Ryb3lcbiAgfSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/navigation/navigation.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/pagination/pagination.js\":\r\n/*!**************************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/pagination/pagination.js ***!\r\n  \\**************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ Pagination)\\n/* harmony export */ });\\n/* harmony import */ var _shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/classes-to-selector.js */ \\\"./node_modules/swiper/shared/classes-to-selector.js\\\");\\n/* harmony import */ var _shared_create_element_if_not_defined_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/create-element-if-not-defined.js */ \\\"./node_modules/swiper/shared/create-element-if-not-defined.js\\\");\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\n\\n\\nfunction Pagination({\\n  swiper,\\n  extendParams,\\n  on,\\n  emit\\n}) {\\n  const pfx = 'swiper-pagination';\\n  extendParams({\\n    pagination: {\\n      el: null,\\n      bulletElement: 'span',\\n      clickable: false,\\n      hideOnClick: false,\\n      renderBullet: null,\\n      renderProgressbar: null,\\n      renderFraction: null,\\n      renderCustom: null,\\n      progressbarOpposite: false,\\n      type: 'bullets',\\n      // 'bullets' or 'progressbar' or 'fraction' or 'custom'\\n      dynamicBullets: false,\\n      dynamicMainBullets: 1,\\n      formatFractionCurrent: number => number,\\n      formatFractionTotal: number => number,\\n      bulletClass: `${pfx}-bullet`,\\n      bulletActiveClass: `${pfx}-bullet-active`,\\n      modifierClass: `${pfx}-`,\\n      currentClass: `${pfx}-current`,\\n      totalClass: `${pfx}-total`,\\n      hiddenClass: `${pfx}-hidden`,\\n      progressbarFillClass: `${pfx}-progressbar-fill`,\\n      progressbarOppositeClass: `${pfx}-progressbar-opposite`,\\n      clickableClass: `${pfx}-clickable`,\\n      lockClass: `${pfx}-lock`,\\n      horizontalClass: `${pfx}-horizontal`,\\n      verticalClass: `${pfx}-vertical`,\\n      paginationDisabledClass: `${pfx}-disabled`\\n    }\\n  });\\n  swiper.pagination = {\\n    el: null,\\n    bullets: []\\n  };\\n  let bulletSize;\\n  let dynamicBulletIndex = 0;\\n  const makeElementsArray = el => {\\n    if (!Array.isArray(el)) el = [el].filter(e => !!e);\\n    return el;\\n  };\\n  function isPaginationDisabled() {\\n    return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\\n  }\\n  function setSideBullets(bulletEl, position) {\\n    const {\\n      bulletActiveClass\\n    } = swiper.params.pagination;\\n    if (!bulletEl) return;\\n    bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\\n    if (bulletEl) {\\n      bulletEl.classList.add(`${bulletActiveClass}-${position}`);\\n      bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\\n      if (bulletEl) {\\n        bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\\n      }\\n    }\\n  }\\n  function onBulletClick(e) {\\n    const isBullet = e.target.matches((0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(swiper.params.pagination.bulletClass));\\n    if (!isBullet) return;\\n    e.preventDefault();\\n    const index = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.elementIndex)(e.target) * swiper.params.slidesPerGroup;\\n    if (swiper.params.loop) {\\n      swiper.slideToLoop(index);\\n    } else {\\n      swiper.slideTo(index);\\n    }\\n  }\\n  function update() {\\n    // Render || Update Pagination bullets/items\\n    const rtl = swiper.rtl;\\n    const params = swiper.params.pagination;\\n    if (isPaginationDisabled()) return;\\n    let el = swiper.pagination.el;\\n    el = makeElementsArray(el);\\n    // Current/Total\\n    let current;\\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\\n    const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\\n    if (swiper.params.loop) {\\n      current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\\n    } else if (typeof swiper.snapIndex !== 'undefined') {\\n      current = swiper.snapIndex;\\n    } else {\\n      current = swiper.activeIndex || 0;\\n    }\\n    // Types\\n    if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\\n      const bullets = swiper.pagination.bullets;\\n      let firstIndex;\\n      let lastIndex;\\n      let midIndex;\\n      if (params.dynamicBullets) {\\n        bulletSize = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.elementOuterSize)(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\\n        el.forEach(subEl => {\\n          subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\\n        });\\n        if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\\n          dynamicBulletIndex += current - (swiper.previousIndex || 0);\\n          if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\\n            dynamicBulletIndex = params.dynamicMainBullets - 1;\\n          } else if (dynamicBulletIndex < 0) {\\n            dynamicBulletIndex = 0;\\n          }\\n        }\\n        firstIndex = Math.max(current - dynamicBulletIndex, 0);\\n        lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\\n        midIndex = (lastIndex + firstIndex) / 2;\\n      }\\n      bullets.forEach(bulletEl => {\\n        bulletEl.classList.remove(...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`));\\n      });\\n      if (el.length > 1) {\\n        bullets.forEach(bullet => {\\n          const bulletIndex = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.elementIndex)(bullet);\\n          if (bulletIndex === current) {\\n            bullet.classList.add(params.bulletActiveClass);\\n          }\\n          if (params.dynamicBullets) {\\n            if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\\n              bullet.classList.add(`${params.bulletActiveClass}-main`);\\n            }\\n            if (bulletIndex === firstIndex) {\\n              setSideBullets(bullet, 'prev');\\n            }\\n            if (bulletIndex === lastIndex) {\\n              setSideBullets(bullet, 'next');\\n            }\\n          }\\n        });\\n      } else {\\n        const bullet = bullets[current];\\n        if (bullet) {\\n          bullet.classList.add(params.bulletActiveClass);\\n        }\\n        if (params.dynamicBullets) {\\n          const firstDisplayedBullet = bullets[firstIndex];\\n          const lastDisplayedBullet = bullets[lastIndex];\\n          for (let i = firstIndex; i <= lastIndex; i += 1) {\\n            bullets[i].classList.add(`${params.bulletActiveClass}-main`);\\n          }\\n          setSideBullets(firstDisplayedBullet, 'prev');\\n          setSideBullets(lastDisplayedBullet, 'next');\\n        }\\n      }\\n      if (params.dynamicBullets) {\\n        const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\\n        const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\\n        const offsetProp = rtl ? 'right' : 'left';\\n        bullets.forEach(bullet => {\\n          bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\\n        });\\n      }\\n    }\\n    el.forEach((subEl, subElIndex) => {\\n      if (params.type === 'fraction') {\\n        subEl.querySelectorAll((0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(params.currentClass)).forEach(fractionEl => {\\n          fractionEl.textContent = params.formatFractionCurrent(current + 1);\\n        });\\n        subEl.querySelectorAll((0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(params.totalClass)).forEach(totalEl => {\\n          totalEl.textContent = params.formatFractionTotal(total);\\n        });\\n      }\\n      if (params.type === 'progressbar') {\\n        let progressbarDirection;\\n        if (params.progressbarOpposite) {\\n          progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\\n        } else {\\n          progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\\n        }\\n        const scale = (current + 1) / total;\\n        let scaleX = 1;\\n        let scaleY = 1;\\n        if (progressbarDirection === 'horizontal') {\\n          scaleX = scale;\\n        } else {\\n          scaleY = scale;\\n        }\\n        subEl.querySelectorAll((0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(params.progressbarFillClass)).forEach(progressEl => {\\n          progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\\n          progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\\n        });\\n      }\\n      if (params.type === 'custom' && params.renderCustom) {\\n        subEl.innerHTML = params.renderCustom(swiper, current + 1, total);\\n        if (subElIndex === 0) emit('paginationRender', subEl);\\n      } else {\\n        if (subElIndex === 0) emit('paginationRender', subEl);\\n        emit('paginationUpdate', subEl);\\n      }\\n      if (swiper.params.watchOverflow && swiper.enabled) {\\n        subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\\n      }\\n    });\\n  }\\n  function render() {\\n    // Render Container\\n    const params = swiper.params.pagination;\\n    if (isPaginationDisabled()) return;\\n    const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\\n    let el = swiper.pagination.el;\\n    el = makeElementsArray(el);\\n    let paginationHTML = '';\\n    if (params.type === 'bullets') {\\n      let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\\n      if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\\n        numberOfBullets = slidesLength;\\n      }\\n      for (let i = 0; i < numberOfBullets; i += 1) {\\n        if (params.renderBullet) {\\n          paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\\n        } else {\\n          paginationHTML += `<${params.bulletElement} class=\\\"${params.bulletClass}\\\"></${params.bulletElement}>`;\\n        }\\n      }\\n    }\\n    if (params.type === 'fraction') {\\n      if (params.renderFraction) {\\n        paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\\n      } else {\\n        paginationHTML = `<span class=\\\"${params.currentClass}\\\"></span>` + ' / ' + `<span class=\\\"${params.totalClass}\\\"></span>`;\\n      }\\n    }\\n    if (params.type === 'progressbar') {\\n      if (params.renderProgressbar) {\\n        paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\\n      } else {\\n        paginationHTML = `<span class=\\\"${params.progressbarFillClass}\\\"></span>`;\\n      }\\n    }\\n    el.forEach(subEl => {\\n      if (params.type !== 'custom') {\\n        subEl.innerHTML = paginationHTML || '';\\n      }\\n      if (params.type === 'bullets') {\\n        swiper.pagination.bullets = [...subEl.querySelectorAll((0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(params.bulletClass))];\\n      }\\n    });\\n    if (params.type !== 'custom') {\\n      emit('paginationRender', el[0]);\\n    }\\n  }\\n  function init() {\\n    swiper.params.pagination = (0,_shared_create_element_if_not_defined_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\\n      el: 'swiper-pagination'\\n    });\\n    const params = swiper.params.pagination;\\n    if (!params.el) return;\\n    let el;\\n    if (typeof params.el === 'string' && swiper.isElement) {\\n      el = swiper.el.shadowRoot.querySelector(params.el);\\n    }\\n    if (!el && typeof params.el === 'string') {\\n      el = [...document.querySelectorAll(params.el)];\\n    }\\n    if (!el) {\\n      el = params.el;\\n    }\\n    if (!el || el.length === 0) return;\\n    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\\n      el = [...swiper.el.querySelectorAll(params.el)];\\n      // check if it belongs to another nested Swiper\\n      if (el.length > 1) {\\n        el = el.filter(subEl => {\\n          if ((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.elementParents)(subEl, '.swiper')[0] !== swiper.el) return false;\\n          return true;\\n        })[0];\\n      }\\n    }\\n    if (Array.isArray(el) && el.length === 1) el = el[0];\\n    Object.assign(swiper.pagination, {\\n      el\\n    });\\n    el = makeElementsArray(el);\\n    el.forEach(subEl => {\\n      if (params.type === 'bullets' && params.clickable) {\\n        subEl.classList.add(params.clickableClass);\\n      }\\n      subEl.classList.add(params.modifierClass + params.type);\\n      subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\\n      if (params.type === 'bullets' && params.dynamicBullets) {\\n        subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\\n        dynamicBulletIndex = 0;\\n        if (params.dynamicMainBullets < 1) {\\n          params.dynamicMainBullets = 1;\\n        }\\n      }\\n      if (params.type === 'progressbar' && params.progressbarOpposite) {\\n        subEl.classList.add(params.progressbarOppositeClass);\\n      }\\n      if (params.clickable) {\\n        subEl.addEventListener('click', onBulletClick);\\n      }\\n      if (!swiper.enabled) {\\n        subEl.classList.add(params.lockClass);\\n      }\\n    });\\n  }\\n  function destroy() {\\n    const params = swiper.params.pagination;\\n    if (isPaginationDisabled()) return;\\n    let el = swiper.pagination.el;\\n    if (el) {\\n      el = makeElementsArray(el);\\n      el.forEach(subEl => {\\n        subEl.classList.remove(params.hiddenClass);\\n        subEl.classList.remove(params.modifierClass + params.type);\\n        subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\\n        if (params.clickable) {\\n          subEl.removeEventListener('click', onBulletClick);\\n        }\\n      });\\n    }\\n    if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(params.bulletActiveClass));\\n  }\\n  on('init', () => {\\n    if (swiper.params.pagination.enabled === false) {\\n      // eslint-disable-next-line\\n      disable();\\n    } else {\\n      init();\\n      render();\\n      update();\\n    }\\n  });\\n  on('activeIndexChange', () => {\\n    if (typeof swiper.snapIndex === 'undefined') {\\n      update();\\n    }\\n  });\\n  on('snapIndexChange', () => {\\n    update();\\n  });\\n  on('snapGridLengthChange', () => {\\n    render();\\n    update();\\n  });\\n  on('destroy', () => {\\n    destroy();\\n  });\\n  on('enable disable', () => {\\n    let {\\n      el\\n    } = swiper.pagination;\\n    if (el) {\\n      el = makeElementsArray(el);\\n      el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));\\n    }\\n  });\\n  on('lock unlock', () => {\\n    update();\\n  });\\n  on('click', (_s, e) => {\\n    const targetEl = e.target;\\n    let {\\n      el\\n    } = swiper.pagination;\\n    if (!Array.isArray(el)) el = [el].filter(element => !!element);\\n    if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {\\n      if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\\n      const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);\\n      if (isHidden === true) {\\n        emit('paginationShow');\\n      } else {\\n        emit('paginationHide');\\n      }\\n      el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\\n    }\\n  });\\n  const enable = () => {\\n    swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\\n    let {\\n      el\\n    } = swiper.pagination;\\n    if (el) {\\n      el = makeElementsArray(el);\\n      el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\\n    }\\n    init();\\n    render();\\n    update();\\n  };\\n  const disable = () => {\\n    swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\\n    let {\\n      el\\n    } = swiper.pagination;\\n    if (el) {\\n      el = makeElementsArray(el);\\n      el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\\n    }\\n    destroy();\\n  };\\n  Object.assign(swiper.pagination, {\\n    enable,\\n    disable,\\n    render,\\n    update,\\n    init,\\n    destroy\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBb0U7QUFDa0I7QUFDQztBQUN4RTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixJQUFJO0FBQzFCLDRCQUE0QixJQUFJO0FBQ2hDLHdCQUF3QixJQUFJO0FBQzVCLHVCQUF1QixJQUFJO0FBQzNCLHFCQUFxQixJQUFJO0FBQ3pCLHNCQUFzQixJQUFJO0FBQzFCLCtCQUErQixJQUFJO0FBQ25DLG1DQUFtQyxJQUFJO0FBQ3ZDLHlCQUF5QixJQUFJO0FBQzdCLG9CQUFvQixJQUFJO0FBQ3hCLDBCQUEwQixJQUFJO0FBQzlCLHdCQUF3QixJQUFJO0FBQzVCLGtDQUFrQyxJQUFJO0FBQ3RDO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsMkJBQTJCLDBDQUEwQztBQUNyRTtBQUNBLGdDQUFnQyxrQkFBa0IsR0FBRyxTQUFTO0FBQzlELDZCQUE2QiwwQ0FBMEM7QUFDdkU7QUFDQSxrQ0FBa0Msa0JBQWtCLEdBQUcsU0FBUyxHQUFHLFNBQVM7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsMEVBQWlCO0FBQ3ZEO0FBQ0E7QUFDQSxrQkFBa0IsOERBQVk7QUFDOUI7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLE1BQU07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QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9tb2R1bGVzL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5qcz85OGM2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjbGFzc2VzVG9TZWxlY3RvciBmcm9tICcuLi8uLi9zaGFyZWQvY2xhc3Nlcy10by1zZWxlY3Rvci5qcyc7XG5pbXBvcnQgY3JlYXRlRWxlbWVudElmTm90RGVmaW5lZCBmcm9tICcuLi8uLi9zaGFyZWQvY3JlYXRlLWVsZW1lbnQtaWYtbm90LWRlZmluZWQuanMnO1xuaW1wb3J0IHsgZWxlbWVudEluZGV4LCBlbGVtZW50T3V0ZXJTaXplLCBlbGVtZW50UGFyZW50cyB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQYWdpbmF0aW9uKHtcbiAgc3dpcGVyLFxuICBleHRlbmRQYXJhbXMsXG4gIG9uLFxuICBlbWl0XG59KSB7XG4gIGNvbnN0IHBmeCA9ICdzd2lwZXItcGFnaW5hdGlvbic7XG4gIGV4dGVuZFBhcmFtcyh7XG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgZWw6IG51bGwsXG4gICAgICBidWxsZXRFbGVtZW50OiAnc3BhbicsXG4gICAgICBjbGlja2FibGU6IGZhbHNlLFxuICAgICAgaGlkZU9uQ2xpY2s6IGZhbHNlLFxuICAgICAgcmVuZGVyQnVsbGV0OiBudWxsLFxuICAgICAgcmVuZGVyUHJvZ3Jlc3NiYXI6IG51bGwsXG4gICAgICByZW5kZXJGcmFjdGlvbjogbnVsbCxcbiAgICAgIHJlbmRlckN1c3RvbTogbnVsbCxcbiAgICAgIHByb2dyZXNzYmFyT3Bwb3NpdGU6IGZhbHNlLFxuICAgICAgdHlwZTogJ2J1bGxldHMnLFxuICAgICAgLy8gJ2J1bGxldHMnIG9yICdwcm9ncmVzc2Jhcicgb3IgJ2ZyYWN0aW9uJyBvciAnY3VzdG9tJ1xuICAgICAgZHluYW1pY0J1bGxldHM6IGZhbHNlLFxuICAgICAgZHluYW1pY01haW5CdWxsZXRzOiAxLFxuICAgICAgZm9ybWF0RnJhY3Rpb25DdXJyZW50OiBudW1iZXIgPT4gbnVtYmVyLFxuICAgICAgZm9ybWF0RnJhY3Rpb25Ub3RhbDogbnVtYmVyID0+IG51bWJlcixcbiAgICAgIGJ1bGxldENsYXNzOiBgJHtwZnh9LWJ1bGxldGAsXG4gICAgICBidWxsZXRBY3RpdmVDbGFzczogYCR7cGZ4fS1idWxsZXQtYWN0aXZlYCxcbiAgICAgIG1vZGlmaWVyQ2xhc3M6IGAke3BmeH0tYCxcbiAgICAgIGN1cnJlbnRDbGFzczogYCR7cGZ4fS1jdXJyZW50YCxcbiAgICAgIHRvdGFsQ2xhc3M6IGAke3BmeH0tdG90YWxgLFxuICAgICAgaGlkZGVuQ2xhc3M6IGAke3BmeH0taGlkZGVuYCxcbiAgICAgIHByb2dyZXNzYmFyRmlsbENsYXNzOiBgJHtwZnh9LXByb2dyZXNzYmFyLWZpbGxgLFxuICAgICAgcHJvZ3Jlc3NiYXJPcHBvc2l0ZUNsYXNzOiBgJHtwZnh9LXByb2dyZXNzYmFyLW9wcG9zaXRlYCxcbiAgICAgIGNsaWNrYWJsZUNsYXNzOiBgJHtwZnh9LWNsaWNrYWJsZWAsXG4gICAgICBsb2NrQ2xhc3M6IGAke3BmeH0tbG9ja2AsXG4gICAgICBob3Jpem9udGFsQ2xhc3M6IGAke3BmeH0taG9yaXpvbnRhbGAsXG4gICAgICB2ZXJ0aWNhbENsYXNzOiBgJHtwZnh9LXZlcnRpY2FsYCxcbiAgICAgIHBhZ2luYXRpb25EaXNhYmxlZENsYXNzOiBgJHtwZnh9LWRpc2FibGVkYFxuICAgIH1cbiAgfSk7XG4gIHN3aXBlci5wYWdpbmF0aW9uID0ge1xuICAgIGVsOiBudWxsLFxuICAgIGJ1bGxldHM6IFtdXG4gIH07XG4gIGxldCBidWxsZXRTaXplO1xuICBsZXQgZHluYW1pY0J1bGxldEluZGV4ID0gMDtcbiAgY29uc3QgbWFrZUVsZW1lbnRzQXJyYXkgPSBlbCA9PiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGVsKSkgZWwgPSBbZWxdLmZpbHRlcihlID0+ICEhZSk7XG4gICAgcmV0dXJuIGVsO1xuICB9O1xuICBmdW5jdGlvbiBpc1BhZ2luYXRpb25EaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gIXN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5lbCB8fCAhc3dpcGVyLnBhZ2luYXRpb24uZWwgfHwgQXJyYXkuaXNBcnJheShzd2lwZXIucGFnaW5hdGlvbi5lbCkgJiYgc3dpcGVyLnBhZ2luYXRpb24uZWwubGVuZ3RoID09PSAwO1xuICB9XG4gIGZ1bmN0aW9uIHNldFNpZGVCdWxsZXRzKGJ1bGxldEVsLCBwb3NpdGlvbikge1xuICAgIGNvbnN0IHtcbiAgICAgIGJ1bGxldEFjdGl2ZUNsYXNzXG4gICAgfSA9IHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbjtcbiAgICBpZiAoIWJ1bGxldEVsKSByZXR1cm47XG4gICAgYnVsbGV0RWwgPSBidWxsZXRFbFtgJHtwb3NpdGlvbiA9PT0gJ3ByZXYnID8gJ3ByZXZpb3VzJyA6ICduZXh0J31FbGVtZW50U2libGluZ2BdO1xuICAgIGlmIChidWxsZXRFbCkge1xuICAgICAgYnVsbGV0RWwuY2xhc3NMaXN0LmFkZChgJHtidWxsZXRBY3RpdmVDbGFzc30tJHtwb3NpdGlvbn1gKTtcbiAgICAgIGJ1bGxldEVsID0gYnVsbGV0RWxbYCR7cG9zaXRpb24gPT09ICdwcmV2JyA/ICdwcmV2aW91cycgOiAnbmV4dCd9RWxlbWVudFNpYmxpbmdgXTtcbiAgICAgIGlmIChidWxsZXRFbCkge1xuICAgICAgICBidWxsZXRFbC5jbGFzc0xpc3QuYWRkKGAke2J1bGxldEFjdGl2ZUNsYXNzfS0ke3Bvc2l0aW9ufS0ke3Bvc2l0aW9ufWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBvbkJ1bGxldENsaWNrKGUpIHtcbiAgICBjb25zdCBpc0J1bGxldCA9IGUudGFyZ2V0Lm1hdGNoZXMoY2xhc3Nlc1RvU2VsZWN0b3Ioc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmJ1bGxldENsYXNzKSk7XG4gICAgaWYgKCFpc0J1bGxldCkgcmV0dXJuO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBpbmRleCA9IGVsZW1lbnRJbmRleChlLnRhcmdldCkgKiBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvTG9vcChpbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKGluZGV4KTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIC8vIFJlbmRlciB8fCBVcGRhdGUgUGFnaW5hdGlvbiBidWxsZXRzL2l0ZW1zXG4gICAgY29uc3QgcnRsID0gc3dpcGVyLnJ0bDtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb247XG4gICAgaWYgKGlzUGFnaW5hdGlvbkRpc2FibGVkKCkpIHJldHVybjtcbiAgICBsZXQgZWwgPSBzd2lwZXIucGFnaW5hdGlvbi5lbDtcbiAgICBlbCA9IG1ha2VFbGVtZW50c0FycmF5KGVsKTtcbiAgICAvLyBDdXJyZW50L1RvdGFsXG4gICAgbGV0IGN1cnJlbnQ7XG4gICAgY29uc3Qgc2xpZGVzTGVuZ3RoID0gc3dpcGVyLnZpcnR1YWwgJiYgc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQgPyBzd2lwZXIudmlydHVhbC5zbGlkZXMubGVuZ3RoIDogc3dpcGVyLnNsaWRlcy5sZW5ndGg7XG4gICAgY29uc3QgdG90YWwgPSBzd2lwZXIucGFyYW1zLmxvb3AgPyBNYXRoLmNlaWwoc2xpZGVzTGVuZ3RoIC8gc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCkgOiBzd2lwZXIuc25hcEdyaWQubGVuZ3RoO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgIGN1cnJlbnQgPSBzd2lwZXIucGFyYW1zLnNsaWRlc1Blckdyb3VwID4gMSA/IE1hdGguZmxvb3Ioc3dpcGVyLnJlYWxJbmRleCAvIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXApIDogc3dpcGVyLnJlYWxJbmRleDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzd2lwZXIuc25hcEluZGV4ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY3VycmVudCA9IHN3aXBlci5zbmFwSW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnQgPSBzd2lwZXIuYWN0aXZlSW5kZXggfHwgMDtcbiAgICB9XG4gICAgLy8gVHlwZXNcbiAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdidWxsZXRzJyAmJiBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzICYmIHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYnVsbGV0cyA9IHN3aXBlci5wYWdpbmF0aW9uLmJ1bGxldHM7XG4gICAgICBsZXQgZmlyc3RJbmRleDtcbiAgICAgIGxldCBsYXN0SW5kZXg7XG4gICAgICBsZXQgbWlkSW5kZXg7XG4gICAgICBpZiAocGFyYW1zLmR5bmFtaWNCdWxsZXRzKSB7XG4gICAgICAgIGJ1bGxldFNpemUgPSBlbGVtZW50T3V0ZXJTaXplKGJ1bGxldHNbMF0sIHN3aXBlci5pc0hvcml6b250YWwoKSA/ICd3aWR0aCcgOiAnaGVpZ2h0JywgdHJ1ZSk7XG4gICAgICAgIGVsLmZvckVhY2goc3ViRWwgPT4ge1xuICAgICAgICAgIHN1YkVsLnN0eWxlW3N3aXBlci5pc0hvcml6b250YWwoKSA/ICd3aWR0aCcgOiAnaGVpZ2h0J10gPSBgJHtidWxsZXRTaXplICogKHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMgKyA0KX1weGA7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyA+IDEgJiYgc3dpcGVyLnByZXZpb3VzSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGR5bmFtaWNCdWxsZXRJbmRleCArPSBjdXJyZW50IC0gKHN3aXBlci5wcmV2aW91c0luZGV4IHx8IDApO1xuICAgICAgICAgIGlmIChkeW5hbWljQnVsbGV0SW5kZXggPiBwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzIC0gMSkge1xuICAgICAgICAgICAgZHluYW1pY0J1bGxldEluZGV4ID0gcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyAtIDE7XG4gICAgICAgICAgfSBlbHNlIGlmIChkeW5hbWljQnVsbGV0SW5kZXggPCAwKSB7XG4gICAgICAgICAgICBkeW5hbWljQnVsbGV0SW5kZXggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaXJzdEluZGV4ID0gTWF0aC5tYXgoY3VycmVudCAtIGR5bmFtaWNCdWxsZXRJbmRleCwgMCk7XG4gICAgICAgIGxhc3RJbmRleCA9IGZpcnN0SW5kZXggKyAoTWF0aC5taW4oYnVsbGV0cy5sZW5ndGgsIHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMpIC0gMSk7XG4gICAgICAgIG1pZEluZGV4ID0gKGxhc3RJbmRleCArIGZpcnN0SW5kZXgpIC8gMjtcbiAgICAgIH1cbiAgICAgIGJ1bGxldHMuZm9yRWFjaChidWxsZXRFbCA9PiB7XG4gICAgICAgIGJ1bGxldEVsLmNsYXNzTGlzdC5yZW1vdmUoLi4uWycnLCAnLW5leHQnLCAnLW5leHQtbmV4dCcsICctcHJldicsICctcHJldi1wcmV2JywgJy1tYWluJ10ubWFwKHN1ZmZpeCA9PiBgJHtwYXJhbXMuYnVsbGV0QWN0aXZlQ2xhc3N9JHtzdWZmaXh9YCkpO1xuICAgICAgfSk7XG4gICAgICBpZiAoZWwubGVuZ3RoID4gMSkge1xuICAgICAgICBidWxsZXRzLmZvckVhY2goYnVsbGV0ID0+IHtcbiAgICAgICAgICBjb25zdCBidWxsZXRJbmRleCA9IGVsZW1lbnRJbmRleChidWxsZXQpO1xuICAgICAgICAgIGlmIChidWxsZXRJbmRleCA9PT0gY3VycmVudCkge1xuICAgICAgICAgICAgYnVsbGV0LmNsYXNzTGlzdC5hZGQocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgICAgICAgaWYgKGJ1bGxldEluZGV4ID49IGZpcnN0SW5kZXggJiYgYnVsbGV0SW5kZXggPD0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgIGJ1bGxldC5jbGFzc0xpc3QuYWRkKGAke3BhcmFtcy5idWxsZXRBY3RpdmVDbGFzc30tbWFpbmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJ1bGxldEluZGV4ID09PSBmaXJzdEluZGV4KSB7XG4gICAgICAgICAgICAgIHNldFNpZGVCdWxsZXRzKGJ1bGxldCwgJ3ByZXYnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChidWxsZXRJbmRleCA9PT0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICAgIHNldFNpZGVCdWxsZXRzKGJ1bGxldCwgJ25leHQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYnVsbGV0ID0gYnVsbGV0c1tjdXJyZW50XTtcbiAgICAgICAgaWYgKGJ1bGxldCkge1xuICAgICAgICAgIGJ1bGxldC5jbGFzc0xpc3QuYWRkKHBhcmFtcy5idWxsZXRBY3RpdmVDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhcmFtcy5keW5hbWljQnVsbGV0cykge1xuICAgICAgICAgIGNvbnN0IGZpcnN0RGlzcGxheWVkQnVsbGV0ID0gYnVsbGV0c1tmaXJzdEluZGV4XTtcbiAgICAgICAgICBjb25zdCBsYXN0RGlzcGxheWVkQnVsbGV0ID0gYnVsbGV0c1tsYXN0SW5kZXhdO1xuICAgICAgICAgIGZvciAobGV0IGkgPSBmaXJzdEluZGV4OyBpIDw9IGxhc3RJbmRleDsgaSArPSAxKSB7XG4gICAgICAgICAgICBidWxsZXRzW2ldLmNsYXNzTGlzdC5hZGQoYCR7cGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzfS1tYWluYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldFNpZGVCdWxsZXRzKGZpcnN0RGlzcGxheWVkQnVsbGV0LCAncHJldicpO1xuICAgICAgICAgIHNldFNpZGVCdWxsZXRzKGxhc3REaXNwbGF5ZWRCdWxsZXQsICduZXh0Jyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbXMuZHluYW1pY0J1bGxldHMpIHtcbiAgICAgICAgY29uc3QgZHluYW1pY0J1bGxldHNMZW5ndGggPSBNYXRoLm1pbihidWxsZXRzLmxlbmd0aCwgcGFyYW1zLmR5bmFtaWNNYWluQnVsbGV0cyArIDQpO1xuICAgICAgICBjb25zdCBidWxsZXRzT2Zmc2V0ID0gKGJ1bGxldFNpemUgKiBkeW5hbWljQnVsbGV0c0xlbmd0aCAtIGJ1bGxldFNpemUpIC8gMiAtIG1pZEluZGV4ICogYnVsbGV0U2l6ZTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0UHJvcCA9IHJ0bCA/ICdyaWdodCcgOiAnbGVmdCc7XG4gICAgICAgIGJ1bGxldHMuZm9yRWFjaChidWxsZXQgPT4ge1xuICAgICAgICAgIGJ1bGxldC5zdHlsZVtzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyBvZmZzZXRQcm9wIDogJ3RvcCddID0gYCR7YnVsbGV0c09mZnNldH1weGA7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBlbC5mb3JFYWNoKChzdWJFbCwgc3ViRWxJbmRleCkgPT4ge1xuICAgICAgaWYgKHBhcmFtcy50eXBlID09PSAnZnJhY3Rpb24nKSB7XG4gICAgICAgIHN1YkVsLnF1ZXJ5U2VsZWN0b3JBbGwoY2xhc3Nlc1RvU2VsZWN0b3IocGFyYW1zLmN1cnJlbnRDbGFzcykpLmZvckVhY2goZnJhY3Rpb25FbCA9PiB7XG4gICAgICAgICAgZnJhY3Rpb25FbC50ZXh0Q29udGVudCA9IHBhcmFtcy5mb3JtYXRGcmFjdGlvbkN1cnJlbnQoY3VycmVudCArIDEpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3ViRWwucXVlcnlTZWxlY3RvckFsbChjbGFzc2VzVG9TZWxlY3RvcihwYXJhbXMudG90YWxDbGFzcykpLmZvckVhY2godG90YWxFbCA9PiB7XG4gICAgICAgICAgdG90YWxFbC50ZXh0Q29udGVudCA9IHBhcmFtcy5mb3JtYXRGcmFjdGlvblRvdGFsKHRvdGFsKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdwcm9ncmVzc2JhcicpIHtcbiAgICAgICAgbGV0IHByb2dyZXNzYmFyRGlyZWN0aW9uO1xuICAgICAgICBpZiAocGFyYW1zLnByb2dyZXNzYmFyT3Bwb3NpdGUpIHtcbiAgICAgICAgICBwcm9ncmVzc2JhckRpcmVjdGlvbiA9IHN3aXBlci5pc0hvcml6b250YWwoKSA/ICd2ZXJ0aWNhbCcgOiAnaG9yaXpvbnRhbCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvZ3Jlc3NiYXJEaXJlY3Rpb24gPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnaG9yaXpvbnRhbCcgOiAndmVydGljYWwnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjYWxlID0gKGN1cnJlbnQgKyAxKSAvIHRvdGFsO1xuICAgICAgICBsZXQgc2NhbGVYID0gMTtcbiAgICAgICAgbGV0IHNjYWxlWSA9IDE7XG4gICAgICAgIGlmIChwcm9ncmVzc2JhckRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgc2NhbGVYID0gc2NhbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2NhbGVZID0gc2NhbGU7XG4gICAgICAgIH1cbiAgICAgICAgc3ViRWwucXVlcnlTZWxlY3RvckFsbChjbGFzc2VzVG9TZWxlY3RvcihwYXJhbXMucHJvZ3Jlc3NiYXJGaWxsQ2xhc3MpKS5mb3JFYWNoKHByb2dyZXNzRWwgPT4ge1xuICAgICAgICAgIHByb2dyZXNzRWwuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZVgoJHtzY2FsZVh9KSBzY2FsZVkoJHtzY2FsZVl9KWA7XG4gICAgICAgICAgcHJvZ3Jlc3NFbC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSBgJHtzd2lwZXIucGFyYW1zLnNwZWVkfW1zYDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdjdXN0b20nICYmIHBhcmFtcy5yZW5kZXJDdXN0b20pIHtcbiAgICAgICAgc3ViRWwuaW5uZXJIVE1MID0gcGFyYW1zLnJlbmRlckN1c3RvbShzd2lwZXIsIGN1cnJlbnQgKyAxLCB0b3RhbCk7XG4gICAgICAgIGlmIChzdWJFbEluZGV4ID09PSAwKSBlbWl0KCdwYWdpbmF0aW9uUmVuZGVyJywgc3ViRWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHN1YkVsSW5kZXggPT09IDApIGVtaXQoJ3BhZ2luYXRpb25SZW5kZXInLCBzdWJFbCk7XG4gICAgICAgIGVtaXQoJ3BhZ2luYXRpb25VcGRhdGUnLCBzdWJFbCk7XG4gICAgICB9XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5lbmFibGVkKSB7XG4gICAgICAgIHN1YkVsLmNsYXNzTGlzdFtzd2lwZXIuaXNMb2NrZWQgPyAnYWRkJyA6ICdyZW1vdmUnXShwYXJhbXMubG9ja0NsYXNzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgLy8gUmVuZGVyIENvbnRhaW5lclxuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbjtcbiAgICBpZiAoaXNQYWdpbmF0aW9uRGlzYWJsZWQoKSkgcmV0dXJuO1xuICAgIGNvbnN0IHNsaWRlc0xlbmd0aCA9IHN3aXBlci52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkID8gc3dpcGVyLnZpcnR1YWwuc2xpZGVzLmxlbmd0aCA6IHN3aXBlci5zbGlkZXMubGVuZ3RoO1xuICAgIGxldCBlbCA9IHN3aXBlci5wYWdpbmF0aW9uLmVsO1xuICAgIGVsID0gbWFrZUVsZW1lbnRzQXJyYXkoZWwpO1xuICAgIGxldCBwYWdpbmF0aW9uSFRNTCA9ICcnO1xuICAgIGlmIChwYXJhbXMudHlwZSA9PT0gJ2J1bGxldHMnKSB7XG4gICAgICBsZXQgbnVtYmVyT2ZCdWxsZXRzID0gc3dpcGVyLnBhcmFtcy5sb29wID8gTWF0aC5jZWlsKHNsaWRlc0xlbmd0aCAvIHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyR3JvdXApIDogc3dpcGVyLnNuYXBHcmlkLmxlbmd0aDtcbiAgICAgIGlmIChzd2lwZXIucGFyYW1zLmZyZWVNb2RlICYmIHN3aXBlci5wYXJhbXMuZnJlZU1vZGUuZW5hYmxlZCAmJiBudW1iZXJPZkJ1bGxldHMgPiBzbGlkZXNMZW5ndGgpIHtcbiAgICAgICAgbnVtYmVyT2ZCdWxsZXRzID0gc2xpZGVzTGVuZ3RoO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZkJ1bGxldHM7IGkgKz0gMSkge1xuICAgICAgICBpZiAocGFyYW1zLnJlbmRlckJ1bGxldCkge1xuICAgICAgICAgIHBhZ2luYXRpb25IVE1MICs9IHBhcmFtcy5yZW5kZXJCdWxsZXQuY2FsbChzd2lwZXIsIGksIHBhcmFtcy5idWxsZXRDbGFzcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFnaW5hdGlvbkhUTUwgKz0gYDwke3BhcmFtcy5idWxsZXRFbGVtZW50fSBjbGFzcz1cIiR7cGFyYW1zLmJ1bGxldENsYXNzfVwiPjwvJHtwYXJhbXMuYnVsbGV0RWxlbWVudH0+YDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdmcmFjdGlvbicpIHtcbiAgICAgIGlmIChwYXJhbXMucmVuZGVyRnJhY3Rpb24pIHtcbiAgICAgICAgcGFnaW5hdGlvbkhUTUwgPSBwYXJhbXMucmVuZGVyRnJhY3Rpb24uY2FsbChzd2lwZXIsIHBhcmFtcy5jdXJyZW50Q2xhc3MsIHBhcmFtcy50b3RhbENsYXNzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhZ2luYXRpb25IVE1MID0gYDxzcGFuIGNsYXNzPVwiJHtwYXJhbXMuY3VycmVudENsYXNzfVwiPjwvc3Bhbj5gICsgJyAvICcgKyBgPHNwYW4gY2xhc3M9XCIke3BhcmFtcy50b3RhbENsYXNzfVwiPjwvc3Bhbj5gO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdwcm9ncmVzc2JhcicpIHtcbiAgICAgIGlmIChwYXJhbXMucmVuZGVyUHJvZ3Jlc3NiYXIpIHtcbiAgICAgICAgcGFnaW5hdGlvbkhUTUwgPSBwYXJhbXMucmVuZGVyUHJvZ3Jlc3NiYXIuY2FsbChzd2lwZXIsIHBhcmFtcy5wcm9ncmVzc2JhckZpbGxDbGFzcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYWdpbmF0aW9uSFRNTCA9IGA8c3BhbiBjbGFzcz1cIiR7cGFyYW1zLnByb2dyZXNzYmFyRmlsbENsYXNzfVwiPjwvc3Bhbj5gO1xuICAgICAgfVxuICAgIH1cbiAgICBlbC5mb3JFYWNoKHN1YkVsID0+IHtcbiAgICAgIGlmIChwYXJhbXMudHlwZSAhPT0gJ2N1c3RvbScpIHtcbiAgICAgICAgc3ViRWwuaW5uZXJIVE1MID0gcGFnaW5hdGlvbkhUTUwgfHwgJyc7XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdidWxsZXRzJykge1xuICAgICAgICBzd2lwZXIucGFnaW5hdGlvbi5idWxsZXRzID0gWy4uLnN1YkVsLnF1ZXJ5U2VsZWN0b3JBbGwoY2xhc3Nlc1RvU2VsZWN0b3IocGFyYW1zLmJ1bGxldENsYXNzKSldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChwYXJhbXMudHlwZSAhPT0gJ2N1c3RvbScpIHtcbiAgICAgIGVtaXQoJ3BhZ2luYXRpb25SZW5kZXInLCBlbFswXSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uID0gY3JlYXRlRWxlbWVudElmTm90RGVmaW5lZChzd2lwZXIsIHN3aXBlci5vcmlnaW5hbFBhcmFtcy5wYWdpbmF0aW9uLCBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24sIHtcbiAgICAgIGVsOiAnc3dpcGVyLXBhZ2luYXRpb24nXG4gICAgfSk7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uO1xuICAgIGlmICghcGFyYW1zLmVsKSByZXR1cm47XG4gICAgbGV0IGVsO1xuICAgIGlmICh0eXBlb2YgcGFyYW1zLmVsID09PSAnc3RyaW5nJyAmJiBzd2lwZXIuaXNFbGVtZW50KSB7XG4gICAgICBlbCA9IHN3aXBlci5lbC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IocGFyYW1zLmVsKTtcbiAgICB9XG4gICAgaWYgKCFlbCAmJiB0eXBlb2YgcGFyYW1zLmVsID09PSAnc3RyaW5nJykge1xuICAgICAgZWwgPSBbLi4uZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChwYXJhbXMuZWwpXTtcbiAgICB9XG4gICAgaWYgKCFlbCkge1xuICAgICAgZWwgPSBwYXJhbXMuZWw7XG4gICAgfVxuICAgIGlmICghZWwgfHwgZWwubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgaWYgKHN3aXBlci5wYXJhbXMudW5pcXVlTmF2RWxlbWVudHMgJiYgdHlwZW9mIHBhcmFtcy5lbCA9PT0gJ3N0cmluZycgJiYgQXJyYXkuaXNBcnJheShlbCkgJiYgZWwubGVuZ3RoID4gMSkge1xuICAgICAgZWwgPSBbLi4uc3dpcGVyLmVsLnF1ZXJ5U2VsZWN0b3JBbGwocGFyYW1zLmVsKV07XG4gICAgICAvLyBjaGVjayBpZiBpdCBiZWxvbmdzIHRvIGFub3RoZXIgbmVzdGVkIFN3aXBlclxuICAgICAgaWYgKGVsLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZWwgPSBlbC5maWx0ZXIoc3ViRWwgPT4ge1xuICAgICAgICAgIGlmIChlbGVtZW50UGFyZW50cyhzdWJFbCwgJy5zd2lwZXInKVswXSAhPT0gc3dpcGVyLmVsKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pWzBdO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShlbCkgJiYgZWwubGVuZ3RoID09PSAxKSBlbCA9IGVsWzBdO1xuICAgIE9iamVjdC5hc3NpZ24oc3dpcGVyLnBhZ2luYXRpb24sIHtcbiAgICAgIGVsXG4gICAgfSk7XG4gICAgZWwgPSBtYWtlRWxlbWVudHNBcnJheShlbCk7XG4gICAgZWwuZm9yRWFjaChzdWJFbCA9PiB7XG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdidWxsZXRzJyAmJiBwYXJhbXMuY2xpY2thYmxlKSB7XG4gICAgICAgIHN1YkVsLmNsYXNzTGlzdC5hZGQocGFyYW1zLmNsaWNrYWJsZUNsYXNzKTtcbiAgICAgIH1cbiAgICAgIHN1YkVsLmNsYXNzTGlzdC5hZGQocGFyYW1zLm1vZGlmaWVyQ2xhc3MgKyBwYXJhbXMudHlwZSk7XG4gICAgICBzdWJFbC5jbGFzc0xpc3QuYWRkKHN3aXBlci5pc0hvcml6b250YWwoKSA/IHBhcmFtcy5ob3Jpem9udGFsQ2xhc3MgOiBwYXJhbXMudmVydGljYWxDbGFzcyk7XG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdidWxsZXRzJyAmJiBwYXJhbXMuZHluYW1pY0J1bGxldHMpIHtcbiAgICAgICAgc3ViRWwuY2xhc3NMaXN0LmFkZChgJHtwYXJhbXMubW9kaWZpZXJDbGFzc30ke3BhcmFtcy50eXBlfS1keW5hbWljYCk7XG4gICAgICAgIGR5bmFtaWNCdWxsZXRJbmRleCA9IDA7XG4gICAgICAgIGlmIChwYXJhbXMuZHluYW1pY01haW5CdWxsZXRzIDwgMSkge1xuICAgICAgICAgIHBhcmFtcy5keW5hbWljTWFpbkJ1bGxldHMgPSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocGFyYW1zLnR5cGUgPT09ICdwcm9ncmVzc2JhcicgJiYgcGFyYW1zLnByb2dyZXNzYmFyT3Bwb3NpdGUpIHtcbiAgICAgICAgc3ViRWwuY2xhc3NMaXN0LmFkZChwYXJhbXMucHJvZ3Jlc3NiYXJPcHBvc2l0ZUNsYXNzKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJhbXMuY2xpY2thYmxlKSB7XG4gICAgICAgIHN1YkVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25CdWxsZXRDbGljayk7XG4gICAgICB9XG4gICAgICBpZiAoIXN3aXBlci5lbmFibGVkKSB7XG4gICAgICAgIHN1YkVsLmNsYXNzTGlzdC5hZGQocGFyYW1zLmxvY2tDbGFzcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnBhZ2luYXRpb247XG4gICAgaWYgKGlzUGFnaW5hdGlvbkRpc2FibGVkKCkpIHJldHVybjtcbiAgICBsZXQgZWwgPSBzd2lwZXIucGFnaW5hdGlvbi5lbDtcbiAgICBpZiAoZWwpIHtcbiAgICAgIGVsID0gbWFrZUVsZW1lbnRzQXJyYXkoZWwpO1xuICAgICAgZWwuZm9yRWFjaChzdWJFbCA9PiB7XG4gICAgICAgIHN1YkVsLmNsYXNzTGlzdC5yZW1vdmUocGFyYW1zLmhpZGRlbkNsYXNzKTtcbiAgICAgICAgc3ViRWwuY2xhc3NMaXN0LnJlbW92ZShwYXJhbXMubW9kaWZpZXJDbGFzcyArIHBhcmFtcy50eXBlKTtcbiAgICAgICAgc3ViRWwuY2xhc3NMaXN0LnJlbW92ZShzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyBwYXJhbXMuaG9yaXpvbnRhbENsYXNzIDogcGFyYW1zLnZlcnRpY2FsQ2xhc3MpO1xuICAgICAgICBpZiAocGFyYW1zLmNsaWNrYWJsZSkge1xuICAgICAgICAgIHN1YkVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25CdWxsZXRDbGljayk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cykgc3dpcGVyLnBhZ2luYXRpb24uYnVsbGV0cy5mb3JFYWNoKHN1YkVsID0+IHN1YkVsLmNsYXNzTGlzdC5yZW1vdmUocGFyYW1zLmJ1bGxldEFjdGl2ZUNsYXNzKSk7XG4gIH1cbiAgb24oJ2luaXQnLCAoKSA9PiB7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5lbmFibGVkID09PSBmYWxzZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBkaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluaXQoKTtcbiAgICAgIHJlbmRlcigpO1xuICAgICAgdXBkYXRlKCk7XG4gICAgfVxuICB9KTtcbiAgb24oJ2FjdGl2ZUluZGV4Q2hhbmdlJywgKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygc3dpcGVyLnNuYXBJbmRleCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH1cbiAgfSk7XG4gIG9uKCdzbmFwSW5kZXhDaGFuZ2UnLCAoKSA9PiB7XG4gICAgdXBkYXRlKCk7XG4gIH0pO1xuICBvbignc25hcEdyaWRMZW5ndGhDaGFuZ2UnLCAoKSA9PiB7XG4gICAgcmVuZGVyKCk7XG4gICAgdXBkYXRlKCk7XG4gIH0pO1xuICBvbignZGVzdHJveScsICgpID0+IHtcbiAgICBkZXN0cm95KCk7XG4gIH0pO1xuICBvbignZW5hYmxlIGRpc2FibGUnLCAoKSA9PiB7XG4gICAgbGV0IHtcbiAgICAgIGVsXG4gICAgfSA9IHN3aXBlci5wYWdpbmF0aW9uO1xuICAgIGlmIChlbCkge1xuICAgICAgZWwgPSBtYWtlRWxlbWVudHNBcnJheShlbCk7XG4gICAgICBlbC5mb3JFYWNoKHN1YkVsID0+IHN1YkVsLmNsYXNzTGlzdFtzd2lwZXIuZW5hYmxlZCA/ICdyZW1vdmUnIDogJ2FkZCddKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5sb2NrQ2xhc3MpKTtcbiAgICB9XG4gIH0pO1xuICBvbignbG9jayB1bmxvY2snLCAoKSA9PiB7XG4gICAgdXBkYXRlKCk7XG4gIH0pO1xuICBvbignY2xpY2snLCAoX3MsIGUpID0+IHtcbiAgICBjb25zdCB0YXJnZXRFbCA9IGUudGFyZ2V0O1xuICAgIGxldCB7XG4gICAgICBlbFxuICAgIH0gPSBzd2lwZXIucGFnaW5hdGlvbjtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZWwpKSBlbCA9IFtlbF0uZmlsdGVyKGVsZW1lbnQgPT4gISFlbGVtZW50KTtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmVsICYmIHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5oaWRlT25DbGljayAmJiBlbCAmJiBlbC5sZW5ndGggPiAwICYmICF0YXJnZXRFbC5jbGFzc0xpc3QuY29udGFpbnMoc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmJ1bGxldENsYXNzKSkge1xuICAgICAgaWYgKHN3aXBlci5uYXZpZ2F0aW9uICYmIChzd2lwZXIubmF2aWdhdGlvbi5uZXh0RWwgJiYgdGFyZ2V0RWwgPT09IHN3aXBlci5uYXZpZ2F0aW9uLm5leHRFbCB8fCBzd2lwZXIubmF2aWdhdGlvbi5wcmV2RWwgJiYgdGFyZ2V0RWwgPT09IHN3aXBlci5uYXZpZ2F0aW9uLnByZXZFbCkpIHJldHVybjtcbiAgICAgIGNvbnN0IGlzSGlkZGVuID0gZWxbMF0uY2xhc3NMaXN0LmNvbnRhaW5zKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5oaWRkZW5DbGFzcyk7XG4gICAgICBpZiAoaXNIaWRkZW4gPT09IHRydWUpIHtcbiAgICAgICAgZW1pdCgncGFnaW5hdGlvblNob3cnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVtaXQoJ3BhZ2luYXRpb25IaWRlJyk7XG4gICAgICB9XG4gICAgICBlbC5mb3JFYWNoKHN1YkVsID0+IHN1YkVsLmNsYXNzTGlzdC50b2dnbGUoc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLmhpZGRlbkNsYXNzKSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgZW5hYmxlID0gKCkgPT4ge1xuICAgIHN3aXBlci5lbC5jbGFzc0xpc3QucmVtb3ZlKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5wYWdpbmF0aW9uRGlzYWJsZWRDbGFzcyk7XG4gICAgbGV0IHtcbiAgICAgIGVsXG4gICAgfSA9IHN3aXBlci5wYWdpbmF0aW9uO1xuICAgIGlmIChlbCkge1xuICAgICAgZWwgPSBtYWtlRWxlbWVudHNBcnJheShlbCk7XG4gICAgICBlbC5mb3JFYWNoKHN1YkVsID0+IHN1YkVsLmNsYXNzTGlzdC5yZW1vdmUoc3dpcGVyLnBhcmFtcy5wYWdpbmF0aW9uLnBhZ2luYXRpb25EaXNhYmxlZENsYXNzKSk7XG4gICAgfVxuICAgIGluaXQoKTtcbiAgICByZW5kZXIoKTtcbiAgICB1cGRhdGUoKTtcbiAgfTtcbiAgY29uc3QgZGlzYWJsZSA9ICgpID0+IHtcbiAgICBzd2lwZXIuZWwuY2xhc3NMaXN0LmFkZChzd2lwZXIucGFyYW1zLnBhZ2luYXRpb24ucGFnaW5hdGlvbkRpc2FibGVkQ2xhc3MpO1xuICAgIGxldCB7XG4gICAgICBlbFxuICAgIH0gPSBzd2lwZXIucGFnaW5hdGlvbjtcbiAgICBpZiAoZWwpIHtcbiAgICAgIGVsID0gbWFrZUVsZW1lbnRzQXJyYXkoZWwpO1xuICAgICAgZWwuZm9yRWFjaChzdWJFbCA9PiBzdWJFbC5jbGFzc0xpc3QuYWRkKHN3aXBlci5wYXJhbXMucGFnaW5hdGlvbi5wYWdpbmF0aW9uRGlzYWJsZWRDbGFzcykpO1xuICAgIH1cbiAgICBkZXN0cm95KCk7XG4gIH07XG4gIE9iamVjdC5hc3NpZ24oc3dpcGVyLnBhZ2luYXRpb24sIHtcbiAgICBlbmFibGUsXG4gICAgZGlzYWJsZSxcbiAgICByZW5kZXIsXG4gICAgdXBkYXRlLFxuICAgIGluaXQsXG4gICAgZGVzdHJveVxuICB9KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/pagination/pagination.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/parallax/parallax.js\":\r\n/*!**********************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/parallax/parallax.js ***!\r\n  \\**********************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ Parallax)\\n/* harmony export */ });\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\nfunction Parallax({\\n  swiper,\\n  extendParams,\\n  on\\n}) {\\n  extendParams({\\n    parallax: {\\n      enabled: false\\n    }\\n  });\\n  const setTransform = (el, progress) => {\\n    const {\\n      rtl\\n    } = swiper;\\n    const rtlFactor = rtl ? -1 : 1;\\n    const p = el.getAttribute('data-swiper-parallax') || '0';\\n    let x = el.getAttribute('data-swiper-parallax-x');\\n    let y = el.getAttribute('data-swiper-parallax-y');\\n    const scale = el.getAttribute('data-swiper-parallax-scale');\\n    const opacity = el.getAttribute('data-swiper-parallax-opacity');\\n    const rotate = el.getAttribute('data-swiper-parallax-rotate');\\n    if (x || y) {\\n      x = x || '0';\\n      y = y || '0';\\n    } else if (swiper.isHorizontal()) {\\n      x = p;\\n      y = '0';\\n    } else {\\n      y = p;\\n      x = '0';\\n    }\\n    if (x.indexOf('%') >= 0) {\\n      x = `${parseInt(x, 10) * progress * rtlFactor}%`;\\n    } else {\\n      x = `${x * progress * rtlFactor}px`;\\n    }\\n    if (y.indexOf('%') >= 0) {\\n      y = `${parseInt(y, 10) * progress}%`;\\n    } else {\\n      y = `${y * progress}px`;\\n    }\\n    if (typeof opacity !== 'undefined' && opacity !== null) {\\n      const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\\n      el.style.opacity = currentOpacity;\\n    }\\n    let transform = `translate3d(${x}, ${y}, 0px)`;\\n    if (typeof scale !== 'undefined' && scale !== null) {\\n      const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\\n      transform += ` scale(${currentScale})`;\\n    }\\n    if (rotate && typeof rotate !== 'undefined' && rotate !== null) {\\n      const currentRotate = rotate * progress * -1;\\n      transform += ` rotate(${currentRotate}deg)`;\\n    }\\n    el.style.transform = transform;\\n  };\\n  const setTranslate = () => {\\n    const {\\n      el,\\n      slides,\\n      progress,\\n      snapGrid\\n    } = swiper;\\n    (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementChildren)(el, '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').forEach(subEl => {\\n      setTransform(subEl, progress);\\n    });\\n    slides.forEach((slideEl, slideIndex) => {\\n      let slideProgress = slideEl.progress;\\n      if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\\n        slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\\n      }\\n      slideProgress = Math.min(Math.max(slideProgress, -1), 1);\\n      slideEl.querySelectorAll('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale], [data-swiper-parallax-rotate]').forEach(subEl => {\\n        setTransform(subEl, slideProgress);\\n      });\\n    });\\n  };\\n  const setTransition = (duration = swiper.params.speed) => {\\n    const {\\n      el\\n    } = swiper;\\n    el.querySelectorAll('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').forEach(parallaxEl => {\\n      let parallaxDuration = parseInt(parallaxEl.getAttribute('data-swiper-parallax-duration'), 10) || duration;\\n      if (duration === 0) parallaxDuration = 0;\\n      parallaxEl.style.transitionDuration = `${parallaxDuration}ms`;\\n    });\\n  };\\n  on('beforeInit', () => {\\n    if (!swiper.params.parallax.enabled) return;\\n    swiper.params.watchSlidesProgress = true;\\n    swiper.originalParams.watchSlidesProgress = true;\\n  });\\n  on('init', () => {\\n    if (!swiper.params.parallax.enabled) return;\\n    setTranslate();\\n  });\\n  on('setTranslate', () => {\\n    if (!swiper.params.parallax.enabled) return;\\n    setTranslate();\\n  });\\n  on('setTransition', (_swiper, duration) => {\\n    if (!swiper.params.parallax.enabled) return;\\n    setTransition(duration);\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvcGFyYWxsYXgvcGFyYWxsYXguanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBd0Q7QUFDekM7QUFDZjtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHVDQUF1QztBQUNwRCxNQUFNO0FBQ04sYUFBYSx5QkFBeUI7QUFDdEM7QUFDQTtBQUNBLGFBQWEsMkJBQTJCO0FBQ3hDLE1BQU07QUFDTixhQUFhLGFBQWE7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxFQUFFLElBQUksRUFBRTtBQUMzQztBQUNBO0FBQ0EsNkJBQTZCLGFBQWE7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLGNBQWM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOLElBQUksaUVBQWU7QUFDbkI7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsK0NBQStDLGlCQUFpQjtBQUNoRSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9tb2R1bGVzL3BhcmFsbGF4L3BhcmFsbGF4LmpzPzhhMzciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZWxlbWVudENoaWxkcmVuIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFBhcmFsbGF4KHtcbiAgc3dpcGVyLFxuICBleHRlbmRQYXJhbXMsXG4gIG9uXG59KSB7XG4gIGV4dGVuZFBhcmFtcyh7XG4gICAgcGFyYWxsYXg6IHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc2V0VHJhbnNmb3JtID0gKGVsLCBwcm9ncmVzcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHJ0bFxuICAgIH0gPSBzd2lwZXI7XG4gICAgY29uc3QgcnRsRmFjdG9yID0gcnRsID8gLTEgOiAxO1xuICAgIGNvbnN0IHAgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3dpcGVyLXBhcmFsbGF4JykgfHwgJzAnO1xuICAgIGxldCB4ID0gZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXN3aXBlci1wYXJhbGxheC14Jyk7XG4gICAgbGV0IHkgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3dpcGVyLXBhcmFsbGF4LXknKTtcbiAgICBjb25zdCBzY2FsZSA9IGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1zd2lwZXItcGFyYWxsYXgtc2NhbGUnKTtcbiAgICBjb25zdCBvcGFjaXR5ID0gZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXN3aXBlci1wYXJhbGxheC1vcGFjaXR5Jyk7XG4gICAgY29uc3Qgcm90YXRlID0gZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXN3aXBlci1wYXJhbGxheC1yb3RhdGUnKTtcbiAgICBpZiAoeCB8fCB5KSB7XG4gICAgICB4ID0geCB8fCAnMCc7XG4gICAgICB5ID0geSB8fCAnMCc7XG4gICAgfSBlbHNlIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkpIHtcbiAgICAgIHggPSBwO1xuICAgICAgeSA9ICcwJztcbiAgICB9IGVsc2Uge1xuICAgICAgeSA9IHA7XG4gICAgICB4ID0gJzAnO1xuICAgIH1cbiAgICBpZiAoeC5pbmRleE9mKCclJykgPj0gMCkge1xuICAgICAgeCA9IGAke3BhcnNlSW50KHgsIDEwKSAqIHByb2dyZXNzICogcnRsRmFjdG9yfSVgO1xuICAgIH0gZWxzZSB7XG4gICAgICB4ID0gYCR7eCAqIHByb2dyZXNzICogcnRsRmFjdG9yfXB4YDtcbiAgICB9XG4gICAgaWYgKHkuaW5kZXhPZignJScpID49IDApIHtcbiAgICAgIHkgPSBgJHtwYXJzZUludCh5LCAxMCkgKiBwcm9ncmVzc30lYDtcbiAgICB9IGVsc2Uge1xuICAgICAgeSA9IGAke3kgKiBwcm9ncmVzc31weGA7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3BhY2l0eSAhPT0gJ3VuZGVmaW5lZCcgJiYgb3BhY2l0eSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY3VycmVudE9wYWNpdHkgPSBvcGFjaXR5IC0gKG9wYWNpdHkgLSAxKSAqICgxIC0gTWF0aC5hYnMocHJvZ3Jlc3MpKTtcbiAgICAgIGVsLnN0eWxlLm9wYWNpdHkgPSBjdXJyZW50T3BhY2l0eTtcbiAgICB9XG4gICAgbGV0IHRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgke3h9LCAke3l9LCAwcHgpYDtcbiAgICBpZiAodHlwZW9mIHNjYWxlICE9PSAndW5kZWZpbmVkJyAmJiBzY2FsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY3VycmVudFNjYWxlID0gc2NhbGUgLSAoc2NhbGUgLSAxKSAqICgxIC0gTWF0aC5hYnMocHJvZ3Jlc3MpKTtcbiAgICAgIHRyYW5zZm9ybSArPSBgIHNjYWxlKCR7Y3VycmVudFNjYWxlfSlgO1xuICAgIH1cbiAgICBpZiAocm90YXRlICYmIHR5cGVvZiByb3RhdGUgIT09ICd1bmRlZmluZWQnICYmIHJvdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY3VycmVudFJvdGF0ZSA9IHJvdGF0ZSAqIHByb2dyZXNzICogLTE7XG4gICAgICB0cmFuc2Zvcm0gKz0gYCByb3RhdGUoJHtjdXJyZW50Um90YXRlfWRlZylgO1xuICAgIH1cbiAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gIH07XG4gIGNvbnN0IHNldFRyYW5zbGF0ZSA9ICgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBlbCxcbiAgICAgIHNsaWRlcyxcbiAgICAgIHByb2dyZXNzLFxuICAgICAgc25hcEdyaWRcbiAgICB9ID0gc3dpcGVyO1xuICAgIGVsZW1lbnRDaGlsZHJlbihlbCwgJ1tkYXRhLXN3aXBlci1wYXJhbGxheF0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC14XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXldLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgtb3BhY2l0eV0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC1zY2FsZV0nKS5mb3JFYWNoKHN1YkVsID0+IHtcbiAgICAgIHNldFRyYW5zZm9ybShzdWJFbCwgcHJvZ3Jlc3MpO1xuICAgIH0pO1xuICAgIHNsaWRlcy5mb3JFYWNoKChzbGlkZUVsLCBzbGlkZUluZGV4KSA9PiB7XG4gICAgICBsZXQgc2xpZGVQcm9ncmVzcyA9IHNsaWRlRWwucHJvZ3Jlc3M7XG4gICAgICBpZiAoc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCA+IDEgJiYgc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ICE9PSAnYXV0bycpIHtcbiAgICAgICAgc2xpZGVQcm9ncmVzcyArPSBNYXRoLmNlaWwoc2xpZGVJbmRleCAvIDIpIC0gcHJvZ3Jlc3MgKiAoc25hcEdyaWQubGVuZ3RoIC0gMSk7XG4gICAgICB9XG4gICAgICBzbGlkZVByb2dyZXNzID0gTWF0aC5taW4oTWF0aC5tYXgoc2xpZGVQcm9ncmVzcywgLTEpLCAxKTtcbiAgICAgIHNsaWRlRWwucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtc3dpcGVyLXBhcmFsbGF4XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXhdLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgteV0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC1vcGFjaXR5XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXNjYWxlXSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LXJvdGF0ZV0nKS5mb3JFYWNoKHN1YkVsID0+IHtcbiAgICAgICAgc2V0VHJhbnNmb3JtKHN1YkVsLCBzbGlkZVByb2dyZXNzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuICBjb25zdCBzZXRUcmFuc2l0aW9uID0gKGR1cmF0aW9uID0gc3dpcGVyLnBhcmFtcy5zcGVlZCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGVsXG4gICAgfSA9IHN3aXBlcjtcbiAgICBlbC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1zd2lwZXItcGFyYWxsYXhdLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgteF0sIFtkYXRhLXN3aXBlci1wYXJhbGxheC15XSwgW2RhdGEtc3dpcGVyLXBhcmFsbGF4LW9wYWNpdHldLCBbZGF0YS1zd2lwZXItcGFyYWxsYXgtc2NhbGVdJykuZm9yRWFjaChwYXJhbGxheEVsID0+IHtcbiAgICAgIGxldCBwYXJhbGxheER1cmF0aW9uID0gcGFyc2VJbnQocGFyYWxsYXhFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3dpcGVyLXBhcmFsbGF4LWR1cmF0aW9uJyksIDEwKSB8fCBkdXJhdGlvbjtcbiAgICAgIGlmIChkdXJhdGlvbiA9PT0gMCkgcGFyYWxsYXhEdXJhdGlvbiA9IDA7XG4gICAgICBwYXJhbGxheEVsLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IGAke3BhcmFsbGF4RHVyYXRpb259bXNgO1xuICAgIH0pO1xuICB9O1xuICBvbignYmVmb3JlSW5pdCcsICgpID0+IHtcbiAgICBpZiAoIXN3aXBlci5wYXJhbXMucGFyYWxsYXguZW5hYmxlZCkgcmV0dXJuO1xuICAgIHN3aXBlci5wYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcyA9IHRydWU7XG4gICAgc3dpcGVyLm9yaWdpbmFsUGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgPSB0cnVlO1xuICB9KTtcbiAgb24oJ2luaXQnLCAoKSA9PiB7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLnBhcmFsbGF4LmVuYWJsZWQpIHJldHVybjtcbiAgICBzZXRUcmFuc2xhdGUoKTtcbiAgfSk7XG4gIG9uKCdzZXRUcmFuc2xhdGUnLCAoKSA9PiB7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLnBhcmFsbGF4LmVuYWJsZWQpIHJldHVybjtcbiAgICBzZXRUcmFuc2xhdGUoKTtcbiAgfSk7XG4gIG9uKCdzZXRUcmFuc2l0aW9uJywgKF9zd2lwZXIsIGR1cmF0aW9uKSA9PiB7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLnBhcmFsbGF4LmVuYWJsZWQpIHJldHVybjtcbiAgICBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgfSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/parallax/parallax.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/scrollbar/scrollbar.js\":\r\n/*!************************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/scrollbar/scrollbar.js ***!\r\n  \\************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ Scrollbar)\\n/* harmony export */ });\\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \\\"./node_modules/ssr-window/ssr-window.esm.js\\\");\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n/* harmony import */ var _shared_create_element_if_not_defined_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/create-element-if-not-defined.js */ \\\"./node_modules/swiper/shared/create-element-if-not-defined.js\\\");\\n\\n\\n\\nfunction Scrollbar({\\n  swiper,\\n  extendParams,\\n  on,\\n  emit\\n}) {\\n  const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)();\\n  let isTouched = false;\\n  let timeout = null;\\n  let dragTimeout = null;\\n  let dragStartPos;\\n  let dragSize;\\n  let trackSize;\\n  let divider;\\n  extendParams({\\n    scrollbar: {\\n      el: null,\\n      dragSize: 'auto',\\n      hide: false,\\n      draggable: false,\\n      snapOnRelease: true,\\n      lockClass: 'swiper-scrollbar-lock',\\n      dragClass: 'swiper-scrollbar-drag',\\n      scrollbarDisabledClass: 'swiper-scrollbar-disabled',\\n      horizontalClass: `swiper-scrollbar-horizontal`,\\n      verticalClass: `swiper-scrollbar-vertical`\\n    }\\n  });\\n  swiper.scrollbar = {\\n    el: null,\\n    dragEl: null\\n  };\\n  function setTranslate() {\\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\\n    const {\\n      scrollbar,\\n      rtlTranslate: rtl\\n    } = swiper;\\n    const {\\n      dragEl,\\n      el\\n    } = scrollbar;\\n    const params = swiper.params.scrollbar;\\n    const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress;\\n    let newSize = dragSize;\\n    let newPos = (trackSize - dragSize) * progress;\\n    if (rtl) {\\n      newPos = -newPos;\\n      if (newPos > 0) {\\n        newSize = dragSize - newPos;\\n        newPos = 0;\\n      } else if (-newPos + dragSize > trackSize) {\\n        newSize = trackSize + newPos;\\n      }\\n    } else if (newPos < 0) {\\n      newSize = dragSize + newPos;\\n      newPos = 0;\\n    } else if (newPos + dragSize > trackSize) {\\n      newSize = trackSize - newPos;\\n    }\\n    if (swiper.isHorizontal()) {\\n      dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`;\\n      dragEl.style.width = `${newSize}px`;\\n    } else {\\n      dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`;\\n      dragEl.style.height = `${newSize}px`;\\n    }\\n    if (params.hide) {\\n      clearTimeout(timeout);\\n      el.style.opacity = 1;\\n      timeout = setTimeout(() => {\\n        el.style.opacity = 0;\\n        el.style.transitionDuration = '400ms';\\n      }, 1000);\\n    }\\n  }\\n  function setTransition(duration) {\\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\\n    swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`;\\n  }\\n  function updateSize() {\\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\\n    const {\\n      scrollbar\\n    } = swiper;\\n    const {\\n      dragEl,\\n      el\\n    } = scrollbar;\\n    dragEl.style.width = '';\\n    dragEl.style.height = '';\\n    trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight;\\n    divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\\n    if (swiper.params.scrollbar.dragSize === 'auto') {\\n      dragSize = trackSize * divider;\\n    } else {\\n      dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\\n    }\\n    if (swiper.isHorizontal()) {\\n      dragEl.style.width = `${dragSize}px`;\\n    } else {\\n      dragEl.style.height = `${dragSize}px`;\\n    }\\n    if (divider >= 1) {\\n      el.style.display = 'none';\\n    } else {\\n      el.style.display = '';\\n    }\\n    if (swiper.params.scrollbar.hide) {\\n      el.style.opacity = 0;\\n    }\\n    if (swiper.params.watchOverflow && swiper.enabled) {\\n      scrollbar.el.classList[swiper.isLocked ? 'add' : 'remove'](swiper.params.scrollbar.lockClass);\\n    }\\n  }\\n  function getPointerPosition(e) {\\n    return swiper.isHorizontal() ? e.clientX : e.clientY;\\n  }\\n  function setDragPosition(e) {\\n    const {\\n      scrollbar,\\n      rtlTranslate: rtl\\n    } = swiper;\\n    const {\\n      el\\n    } = scrollbar;\\n    let positionRatio;\\n    positionRatio = (getPointerPosition(e) - (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementOffset)(el)[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\\n    positionRatio = Math.max(Math.min(positionRatio, 1), 0);\\n    if (rtl) {\\n      positionRatio = 1 - positionRatio;\\n    }\\n    const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\\n    swiper.updateProgress(position);\\n    swiper.setTranslate(position);\\n    swiper.updateActiveIndex();\\n    swiper.updateSlidesClasses();\\n  }\\n  function onDragStart(e) {\\n    const params = swiper.params.scrollbar;\\n    const {\\n      scrollbar,\\n      wrapperEl\\n    } = swiper;\\n    const {\\n      el,\\n      dragEl\\n    } = scrollbar;\\n    isTouched = true;\\n    dragStartPos = e.target === dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\\n    e.preventDefault();\\n    e.stopPropagation();\\n    wrapperEl.style.transitionDuration = '100ms';\\n    dragEl.style.transitionDuration = '100ms';\\n    setDragPosition(e);\\n    clearTimeout(dragTimeout);\\n    el.style.transitionDuration = '0ms';\\n    if (params.hide) {\\n      el.style.opacity = 1;\\n    }\\n    if (swiper.params.cssMode) {\\n      swiper.wrapperEl.style['scroll-snap-type'] = 'none';\\n    }\\n    emit('scrollbarDragStart', e);\\n  }\\n  function onDragMove(e) {\\n    const {\\n      scrollbar,\\n      wrapperEl\\n    } = swiper;\\n    const {\\n      el,\\n      dragEl\\n    } = scrollbar;\\n    if (!isTouched) return;\\n    if (e.preventDefault) e.preventDefault();else e.returnValue = false;\\n    setDragPosition(e);\\n    wrapperEl.style.transitionDuration = '0ms';\\n    el.style.transitionDuration = '0ms';\\n    dragEl.style.transitionDuration = '0ms';\\n    emit('scrollbarDragMove', e);\\n  }\\n  function onDragEnd(e) {\\n    const params = swiper.params.scrollbar;\\n    const {\\n      scrollbar,\\n      wrapperEl\\n    } = swiper;\\n    const {\\n      el\\n    } = scrollbar;\\n    if (!isTouched) return;\\n    isTouched = false;\\n    if (swiper.params.cssMode) {\\n      swiper.wrapperEl.style['scroll-snap-type'] = '';\\n      wrapperEl.style.transitionDuration = '';\\n    }\\n    if (params.hide) {\\n      clearTimeout(dragTimeout);\\n      dragTimeout = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.nextTick)(() => {\\n        el.style.opacity = 0;\\n        el.style.transitionDuration = '400ms';\\n      }, 1000);\\n    }\\n    emit('scrollbarDragEnd', e);\\n    if (params.snapOnRelease) {\\n      swiper.slideToClosest();\\n    }\\n  }\\n  function events(method) {\\n    const {\\n      scrollbar,\\n      params\\n    } = swiper;\\n    const el = scrollbar.el;\\n    if (!el) return;\\n    const target = el;\\n    const activeListener = params.passiveListeners ? {\\n      passive: false,\\n      capture: false\\n    } : false;\\n    const passiveListener = params.passiveListeners ? {\\n      passive: true,\\n      capture: false\\n    } : false;\\n    if (!target) return;\\n    const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\\n    target[eventMethod]('pointerdown', onDragStart, activeListener);\\n    document[eventMethod]('pointermove', onDragMove, activeListener);\\n    document[eventMethod]('pointerup', onDragEnd, passiveListener);\\n  }\\n  function enableDraggable() {\\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\\n    events('on');\\n  }\\n  function disableDraggable() {\\n    if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\\n    events('off');\\n  }\\n  function init() {\\n    const {\\n      scrollbar,\\n      el: swiperEl\\n    } = swiper;\\n    swiper.params.scrollbar = (0,_shared_create_element_if_not_defined_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"])(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\\n      el: 'swiper-scrollbar'\\n    });\\n    const params = swiper.params.scrollbar;\\n    if (!params.el) return;\\n    let el;\\n    if (typeof params.el === 'string' && swiper.isElement) {\\n      el = swiper.el.shadowRoot.querySelector(params.el);\\n    }\\n    if (!el && typeof params.el === 'string') {\\n      el = document.querySelectorAll(params.el);\\n    } else if (!el) {\\n      el = params.el;\\n    }\\n    if (swiper.params.uniqueNavElements && typeof params.el === 'string' && el.length > 1 && swiperEl.querySelectorAll(params.el).length === 1) {\\n      el = swiperEl.querySelector(params.el);\\n    }\\n    if (el.length > 0) el = el[0];\\n    el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\\n    let dragEl;\\n    if (el) {\\n      el.querySelector(`.${swiper.params.scrollbar.dragClass}`);\\n      if (!dragEl) {\\n        dragEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.createElement)('div', swiper.params.scrollbar.dragClass);\\n        el.append(dragEl);\\n      }\\n    }\\n    Object.assign(scrollbar, {\\n      el,\\n      dragEl\\n    });\\n    if (params.draggable) {\\n      enableDraggable();\\n    }\\n    if (el) {\\n      el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.scrollbar.lockClass);\\n    }\\n  }\\n  function destroy() {\\n    const params = swiper.params.scrollbar;\\n    const el = swiper.scrollbar.el;\\n    if (el) {\\n      el.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\\n    }\\n    disableDraggable();\\n  }\\n  on('init', () => {\\n    if (swiper.params.scrollbar.enabled === false) {\\n      // eslint-disable-next-line\\n      disable();\\n    } else {\\n      init();\\n      updateSize();\\n      setTranslate();\\n    }\\n  });\\n  on('update resize observerUpdate lock unlock', () => {\\n    updateSize();\\n  });\\n  on('setTranslate', () => {\\n    setTranslate();\\n  });\\n  on('setTransition', (_s, duration) => {\\n    setTransition(duration);\\n  });\\n  on('enable disable', () => {\\n    const {\\n      el\\n    } = swiper.scrollbar;\\n    if (el) {\\n      el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.scrollbar.lockClass);\\n    }\\n  });\\n  on('destroy', () => {\\n    destroy();\\n  });\\n  const enable = () => {\\n    swiper.el.classList.remove(swiper.params.scrollbar.scrollbarDisabledClass);\\n    if (swiper.scrollbar.el) {\\n      swiper.scrollbar.el.classList.remove(swiper.params.scrollbar.scrollbarDisabledClass);\\n    }\\n    init();\\n    updateSize();\\n    setTranslate();\\n  };\\n  const disable = () => {\\n    swiper.el.classList.add(swiper.params.scrollbar.scrollbarDisabledClass);\\n    if (swiper.scrollbar.el) {\\n      swiper.scrollbar.el.classList.add(swiper.params.scrollbar.scrollbarDisabledClass);\\n    }\\n    destroy();\\n  };\\n  Object.assign(swiper.scrollbar, {\\n    enable,\\n    disable,\\n    updateSize,\\n    setTranslate,\\n    init,\\n    destroy\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvc2Nyb2xsYmFyL3Njcm9sbGJhci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXlDO0FBQ3NDO0FBQ087QUFDdkU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxtQkFBbUIsdURBQVc7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsOENBQThDLE9BQU87QUFDckQsOEJBQThCLFFBQVE7QUFDdEMsTUFBTTtBQUNOLG1EQUFtRCxPQUFPO0FBQzFELCtCQUErQixRQUFRO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELFNBQVM7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixTQUFTO0FBQ3ZDLE1BQU07QUFDTiwrQkFBK0IsU0FBUztBQUN4QztBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBLDZDQUE2QywrREFBYTtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsMERBQVE7QUFDNUI7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTiw4QkFBOEIsb0ZBQXlCO0FBQ3ZEO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLGtDQUFrQztBQUM3RDtBQUNBLGlCQUFpQiwrREFBYTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvbW9kdWxlcy9zY3JvbGxiYXIvc2Nyb2xsYmFyLmpzPzA5M2UiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tICdzc3Itd2luZG93JztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIGVsZW1lbnRPZmZzZXQsIG5leHRUaWNrIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzLmpzJztcbmltcG9ydCBjcmVhdGVFbGVtZW50SWZOb3REZWZpbmVkIGZyb20gJy4uLy4uL3NoYXJlZC9jcmVhdGUtZWxlbWVudC1pZi1ub3QtZGVmaW5lZC5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTY3JvbGxiYXIoe1xuICBzd2lwZXIsXG4gIGV4dGVuZFBhcmFtcyxcbiAgb24sXG4gIGVtaXRcbn0pIHtcbiAgY29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICBsZXQgaXNUb3VjaGVkID0gZmFsc2U7XG4gIGxldCB0aW1lb3V0ID0gbnVsbDtcbiAgbGV0IGRyYWdUaW1lb3V0ID0gbnVsbDtcbiAgbGV0IGRyYWdTdGFydFBvcztcbiAgbGV0IGRyYWdTaXplO1xuICBsZXQgdHJhY2tTaXplO1xuICBsZXQgZGl2aWRlcjtcbiAgZXh0ZW5kUGFyYW1zKHtcbiAgICBzY3JvbGxiYXI6IHtcbiAgICAgIGVsOiBudWxsLFxuICAgICAgZHJhZ1NpemU6ICdhdXRvJyxcbiAgICAgIGhpZGU6IGZhbHNlLFxuICAgICAgZHJhZ2dhYmxlOiBmYWxzZSxcbiAgICAgIHNuYXBPblJlbGVhc2U6IHRydWUsXG4gICAgICBsb2NrQ2xhc3M6ICdzd2lwZXItc2Nyb2xsYmFyLWxvY2snLFxuICAgICAgZHJhZ0NsYXNzOiAnc3dpcGVyLXNjcm9sbGJhci1kcmFnJyxcbiAgICAgIHNjcm9sbGJhckRpc2FibGVkQ2xhc3M6ICdzd2lwZXItc2Nyb2xsYmFyLWRpc2FibGVkJyxcbiAgICAgIGhvcml6b250YWxDbGFzczogYHN3aXBlci1zY3JvbGxiYXItaG9yaXpvbnRhbGAsXG4gICAgICB2ZXJ0aWNhbENsYXNzOiBgc3dpcGVyLXNjcm9sbGJhci12ZXJ0aWNhbGBcbiAgICB9XG4gIH0pO1xuICBzd2lwZXIuc2Nyb2xsYmFyID0ge1xuICAgIGVsOiBudWxsLFxuICAgIGRyYWdFbDogbnVsbFxuICB9O1xuICBmdW5jdGlvbiBzZXRUcmFuc2xhdGUoKSB7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5lbCB8fCAhc3dpcGVyLnNjcm9sbGJhci5lbCkgcmV0dXJuO1xuICAgIGNvbnN0IHtcbiAgICAgIHNjcm9sbGJhcixcbiAgICAgIHJ0bFRyYW5zbGF0ZTogcnRsXG4gICAgfSA9IHN3aXBlcjtcbiAgICBjb25zdCB7XG4gICAgICBkcmFnRWwsXG4gICAgICBlbFxuICAgIH0gPSBzY3JvbGxiYXI7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXI7XG4gICAgY29uc3QgcHJvZ3Jlc3MgPSBzd2lwZXIucGFyYW1zLmxvb3AgPyBzd2lwZXIucHJvZ3Jlc3NMb29wIDogc3dpcGVyLnByb2dyZXNzO1xuICAgIGxldCBuZXdTaXplID0gZHJhZ1NpemU7XG4gICAgbGV0IG5ld1BvcyA9ICh0cmFja1NpemUgLSBkcmFnU2l6ZSkgKiBwcm9ncmVzcztcbiAgICBpZiAocnRsKSB7XG4gICAgICBuZXdQb3MgPSAtbmV3UG9zO1xuICAgICAgaWYgKG5ld1BvcyA+IDApIHtcbiAgICAgICAgbmV3U2l6ZSA9IGRyYWdTaXplIC0gbmV3UG9zO1xuICAgICAgICBuZXdQb3MgPSAwO1xuICAgICAgfSBlbHNlIGlmICgtbmV3UG9zICsgZHJhZ1NpemUgPiB0cmFja1NpemUpIHtcbiAgICAgICAgbmV3U2l6ZSA9IHRyYWNrU2l6ZSArIG5ld1BvcztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5ld1BvcyA8IDApIHtcbiAgICAgIG5ld1NpemUgPSBkcmFnU2l6ZSArIG5ld1BvcztcbiAgICAgIG5ld1BvcyA9IDA7XG4gICAgfSBlbHNlIGlmIChuZXdQb3MgKyBkcmFnU2l6ZSA+IHRyYWNrU2l6ZSkge1xuICAgICAgbmV3U2l6ZSA9IHRyYWNrU2l6ZSAtIG5ld1BvcztcbiAgICB9XG4gICAgaWYgKHN3aXBlci5pc0hvcml6b250YWwoKSkge1xuICAgICAgZHJhZ0VsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgke25ld1Bvc31weCwgMCwgMClgO1xuICAgICAgZHJhZ0VsLnN0eWxlLndpZHRoID0gYCR7bmV3U2l6ZX1weGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyYWdFbC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoMHB4LCAke25ld1Bvc31weCwgMClgO1xuICAgICAgZHJhZ0VsLnN0eWxlLmhlaWdodCA9IGAke25ld1NpemV9cHhgO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmhpZGUpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgIGVsLnN0eWxlLm9wYWNpdHkgPSAxO1xuICAgICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbC5zdHlsZS5vcGFjaXR5ID0gMDtcbiAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gJzQwMG1zJztcbiAgICAgIH0sIDEwMDApO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKSB7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5lbCB8fCAhc3dpcGVyLnNjcm9sbGJhci5lbCkgcmV0dXJuO1xuICAgIHN3aXBlci5zY3JvbGxiYXIuZHJhZ0VsLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9IGAke2R1cmF0aW9ufW1zYDtcbiAgfVxuICBmdW5jdGlvbiB1cGRhdGVTaXplKCkge1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZWwgfHwgIXN3aXBlci5zY3JvbGxiYXIuZWwpIHJldHVybjtcbiAgICBjb25zdCB7XG4gICAgICBzY3JvbGxiYXJcbiAgICB9ID0gc3dpcGVyO1xuICAgIGNvbnN0IHtcbiAgICAgIGRyYWdFbCxcbiAgICAgIGVsXG4gICAgfSA9IHNjcm9sbGJhcjtcbiAgICBkcmFnRWwuc3R5bGUud2lkdGggPSAnJztcbiAgICBkcmFnRWwuc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgdHJhY2tTaXplID0gc3dpcGVyLmlzSG9yaXpvbnRhbCgpID8gZWwub2Zmc2V0V2lkdGggOiBlbC5vZmZzZXRIZWlnaHQ7XG4gICAgZGl2aWRlciA9IHN3aXBlci5zaXplIC8gKHN3aXBlci52aXJ0dWFsU2l6ZSArIHN3aXBlci5wYXJhbXMuc2xpZGVzT2Zmc2V0QmVmb3JlIC0gKHN3aXBlci5wYXJhbXMuY2VudGVyZWRTbGlkZXMgPyBzd2lwZXIuc25hcEdyaWRbMF0gOiAwKSk7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmRyYWdTaXplID09PSAnYXV0bycpIHtcbiAgICAgIGRyYWdTaXplID0gdHJhY2tTaXplICogZGl2aWRlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgZHJhZ1NpemUgPSBwYXJzZUludChzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5kcmFnU2l6ZSwgMTApO1xuICAgIH1cbiAgICBpZiAoc3dpcGVyLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICBkcmFnRWwuc3R5bGUud2lkdGggPSBgJHtkcmFnU2l6ZX1weGA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRyYWdFbC5zdHlsZS5oZWlnaHQgPSBgJHtkcmFnU2l6ZX1weGA7XG4gICAgfVxuICAgIGlmIChkaXZpZGVyID49IDEpIHtcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICB9XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmhpZGUpIHtcbiAgICAgIGVsLnN0eWxlLm9wYWNpdHkgPSAwO1xuICAgIH1cbiAgICBpZiAoc3dpcGVyLnBhcmFtcy53YXRjaE92ZXJmbG93ICYmIHN3aXBlci5lbmFibGVkKSB7XG4gICAgICBzY3JvbGxiYXIuZWwuY2xhc3NMaXN0W3N3aXBlci5pc0xvY2tlZCA/ICdhZGQnIDogJ3JlbW92ZSddKHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmxvY2tDbGFzcyk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGdldFBvaW50ZXJQb3NpdGlvbihlKSB7XG4gICAgcmV0dXJuIHN3aXBlci5pc0hvcml6b250YWwoKSA/IGUuY2xpZW50WCA6IGUuY2xpZW50WTtcbiAgfVxuICBmdW5jdGlvbiBzZXREcmFnUG9zaXRpb24oZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNjcm9sbGJhcixcbiAgICAgIHJ0bFRyYW5zbGF0ZTogcnRsXG4gICAgfSA9IHN3aXBlcjtcbiAgICBjb25zdCB7XG4gICAgICBlbFxuICAgIH0gPSBzY3JvbGxiYXI7XG4gICAgbGV0IHBvc2l0aW9uUmF0aW87XG4gICAgcG9zaXRpb25SYXRpbyA9IChnZXRQb2ludGVyUG9zaXRpb24oZSkgLSBlbGVtZW50T2Zmc2V0KGVsKVtzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnbGVmdCcgOiAndG9wJ10gLSAoZHJhZ1N0YXJ0UG9zICE9PSBudWxsID8gZHJhZ1N0YXJ0UG9zIDogZHJhZ1NpemUgLyAyKSkgLyAodHJhY2tTaXplIC0gZHJhZ1NpemUpO1xuICAgIHBvc2l0aW9uUmF0aW8gPSBNYXRoLm1heChNYXRoLm1pbihwb3NpdGlvblJhdGlvLCAxKSwgMCk7XG4gICAgaWYgKHJ0bCkge1xuICAgICAgcG9zaXRpb25SYXRpbyA9IDEgLSBwb3NpdGlvblJhdGlvO1xuICAgIH1cbiAgICBjb25zdCBwb3NpdGlvbiA9IHN3aXBlci5taW5UcmFuc2xhdGUoKSArIChzd2lwZXIubWF4VHJhbnNsYXRlKCkgLSBzd2lwZXIubWluVHJhbnNsYXRlKCkpICogcG9zaXRpb25SYXRpbztcbiAgICBzd2lwZXIudXBkYXRlUHJvZ3Jlc3MocG9zaXRpb24pO1xuICAgIHN3aXBlci5zZXRUcmFuc2xhdGUocG9zaXRpb24pO1xuICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgIHN3aXBlci51cGRhdGVTbGlkZXNDbGFzc2VzKCk7XG4gIH1cbiAgZnVuY3Rpb24gb25EcmFnU3RhcnQoZSkge1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyO1xuICAgIGNvbnN0IHtcbiAgICAgIHNjcm9sbGJhcixcbiAgICAgIHdyYXBwZXJFbFxuICAgIH0gPSBzd2lwZXI7XG4gICAgY29uc3Qge1xuICAgICAgZWwsXG4gICAgICBkcmFnRWxcbiAgICB9ID0gc2Nyb2xsYmFyO1xuICAgIGlzVG91Y2hlZCA9IHRydWU7XG4gICAgZHJhZ1N0YXJ0UG9zID0gZS50YXJnZXQgPT09IGRyYWdFbCA/IGdldFBvaW50ZXJQb3NpdGlvbihlKSAtIGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3N3aXBlci5pc0hvcml6b250YWwoKSA/ICdsZWZ0JyA6ICd0b3AnXSA6IG51bGw7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgd3JhcHBlckVsLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcxMDBtcyc7XG4gICAgZHJhZ0VsLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcxMDBtcyc7XG4gICAgc2V0RHJhZ1Bvc2l0aW9uKGUpO1xuICAgIGNsZWFyVGltZW91dChkcmFnVGltZW91dCk7XG4gICAgZWwuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gJzBtcyc7XG4gICAgaWYgKHBhcmFtcy5oaWRlKSB7XG4gICAgICBlbC5zdHlsZS5vcGFjaXR5ID0gMTtcbiAgICB9XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgc3dpcGVyLndyYXBwZXJFbC5zdHlsZVsnc2Nyb2xsLXNuYXAtdHlwZSddID0gJ25vbmUnO1xuICAgIH1cbiAgICBlbWl0KCdzY3JvbGxiYXJEcmFnU3RhcnQnLCBlKTtcbiAgfVxuICBmdW5jdGlvbiBvbkRyYWdNb3ZlKGUpIHtcbiAgICBjb25zdCB7XG4gICAgICBzY3JvbGxiYXIsXG4gICAgICB3cmFwcGVyRWxcbiAgICB9ID0gc3dpcGVyO1xuICAgIGNvbnN0IHtcbiAgICAgIGVsLFxuICAgICAgZHJhZ0VsXG4gICAgfSA9IHNjcm9sbGJhcjtcbiAgICBpZiAoIWlzVG91Y2hlZCkgcmV0dXJuO1xuICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSBlLnByZXZlbnREZWZhdWx0KCk7ZWxzZSBlLnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgc2V0RHJhZ1Bvc2l0aW9uKGUpO1xuICAgIHdyYXBwZXJFbC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSAnMG1zJztcbiAgICBlbC5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSAnMG1zJztcbiAgICBkcmFnRWwuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gJzBtcyc7XG4gICAgZW1pdCgnc2Nyb2xsYmFyRHJhZ01vdmUnLCBlKTtcbiAgfVxuICBmdW5jdGlvbiBvbkRyYWdFbmQoZSkge1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyO1xuICAgIGNvbnN0IHtcbiAgICAgIHNjcm9sbGJhcixcbiAgICAgIHdyYXBwZXJFbFxuICAgIH0gPSBzd2lwZXI7XG4gICAgY29uc3Qge1xuICAgICAgZWxcbiAgICB9ID0gc2Nyb2xsYmFyO1xuICAgIGlmICghaXNUb3VjaGVkKSByZXR1cm47XG4gICAgaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgc3dpcGVyLndyYXBwZXJFbC5zdHlsZVsnc2Nyb2xsLXNuYXAtdHlwZSddID0gJyc7XG4gICAgICB3cmFwcGVyRWwuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gJyc7XG4gICAgfVxuICAgIGlmIChwYXJhbXMuaGlkZSkge1xuICAgICAgY2xlYXJUaW1lb3V0KGRyYWdUaW1lb3V0KTtcbiAgICAgIGRyYWdUaW1lb3V0ID0gbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBlbC5zdHlsZS5vcGFjaXR5ID0gMDtcbiAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gJzQwMG1zJztcbiAgICAgIH0sIDEwMDApO1xuICAgIH1cbiAgICBlbWl0KCdzY3JvbGxiYXJEcmFnRW5kJywgZSk7XG4gICAgaWYgKHBhcmFtcy5zbmFwT25SZWxlYXNlKSB7XG4gICAgICBzd2lwZXIuc2xpZGVUb0Nsb3Nlc3QoKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZXZlbnRzKG1ldGhvZCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNjcm9sbGJhcixcbiAgICAgIHBhcmFtc1xuICAgIH0gPSBzd2lwZXI7XG4gICAgY29uc3QgZWwgPSBzY3JvbGxiYXIuZWw7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgIGNvbnN0IHRhcmdldCA9IGVsO1xuICAgIGNvbnN0IGFjdGl2ZUxpc3RlbmVyID0gcGFyYW1zLnBhc3NpdmVMaXN0ZW5lcnMgPyB7XG4gICAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICAgIGNhcHR1cmU6IGZhbHNlXG4gICAgfSA6IGZhbHNlO1xuICAgIGNvbnN0IHBhc3NpdmVMaXN0ZW5lciA9IHBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8ge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIGNhcHR1cmU6IGZhbHNlXG4gICAgfSA6IGZhbHNlO1xuICAgIGlmICghdGFyZ2V0KSByZXR1cm47XG4gICAgY29uc3QgZXZlbnRNZXRob2QgPSBtZXRob2QgPT09ICdvbicgPyAnYWRkRXZlbnRMaXN0ZW5lcicgOiAncmVtb3ZlRXZlbnRMaXN0ZW5lcic7XG4gICAgdGFyZ2V0W2V2ZW50TWV0aG9kXSgncG9pbnRlcmRvd24nLCBvbkRyYWdTdGFydCwgYWN0aXZlTGlzdGVuZXIpO1xuICAgIGRvY3VtZW50W2V2ZW50TWV0aG9kXSgncG9pbnRlcm1vdmUnLCBvbkRyYWdNb3ZlLCBhY3RpdmVMaXN0ZW5lcik7XG4gICAgZG9jdW1lbnRbZXZlbnRNZXRob2RdKCdwb2ludGVydXAnLCBvbkRyYWdFbmQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gIH1cbiAgZnVuY3Rpb24gZW5hYmxlRHJhZ2dhYmxlKCkge1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuZWwgfHwgIXN3aXBlci5zY3JvbGxiYXIuZWwpIHJldHVybjtcbiAgICBldmVudHMoJ29uJyk7XG4gIH1cbiAgZnVuY3Rpb24gZGlzYWJsZURyYWdnYWJsZSgpIHtcbiAgICBpZiAoIXN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmVsIHx8ICFzd2lwZXIuc2Nyb2xsYmFyLmVsKSByZXR1cm47XG4gICAgZXZlbnRzKCdvZmYnKTtcbiAgfVxuICBmdW5jdGlvbiBpbml0KCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNjcm9sbGJhcixcbiAgICAgIGVsOiBzd2lwZXJFbFxuICAgIH0gPSBzd2lwZXI7XG4gICAgc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIgPSBjcmVhdGVFbGVtZW50SWZOb3REZWZpbmVkKHN3aXBlciwgc3dpcGVyLm9yaWdpbmFsUGFyYW1zLnNjcm9sbGJhciwgc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIsIHtcbiAgICAgIGVsOiAnc3dpcGVyLXNjcm9sbGJhcidcbiAgICB9KTtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnNjcm9sbGJhcjtcbiAgICBpZiAoIXBhcmFtcy5lbCkgcmV0dXJuO1xuICAgIGxldCBlbDtcbiAgICBpZiAodHlwZW9mIHBhcmFtcy5lbCA9PT0gJ3N0cmluZycgJiYgc3dpcGVyLmlzRWxlbWVudCkge1xuICAgICAgZWwgPSBzd2lwZXIuZWwuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKHBhcmFtcy5lbCk7XG4gICAgfVxuICAgIGlmICghZWwgJiYgdHlwZW9mIHBhcmFtcy5lbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChwYXJhbXMuZWwpO1xuICAgIH0gZWxzZSBpZiAoIWVsKSB7XG4gICAgICBlbCA9IHBhcmFtcy5lbDtcbiAgICB9XG4gICAgaWYgKHN3aXBlci5wYXJhbXMudW5pcXVlTmF2RWxlbWVudHMgJiYgdHlwZW9mIHBhcmFtcy5lbCA9PT0gJ3N0cmluZycgJiYgZWwubGVuZ3RoID4gMSAmJiBzd2lwZXJFbC5xdWVyeVNlbGVjdG9yQWxsKHBhcmFtcy5lbCkubGVuZ3RoID09PSAxKSB7XG4gICAgICBlbCA9IHN3aXBlckVsLnF1ZXJ5U2VsZWN0b3IocGFyYW1zLmVsKTtcbiAgICB9XG4gICAgaWYgKGVsLmxlbmd0aCA+IDApIGVsID0gZWxbMF07XG4gICAgZWwuY2xhc3NMaXN0LmFkZChzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyBwYXJhbXMuaG9yaXpvbnRhbENsYXNzIDogcGFyYW1zLnZlcnRpY2FsQ2xhc3MpO1xuICAgIGxldCBkcmFnRWw7XG4gICAgaWYgKGVsKSB7XG4gICAgICBlbC5xdWVyeVNlbGVjdG9yKGAuJHtzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5kcmFnQ2xhc3N9YCk7XG4gICAgICBpZiAoIWRyYWdFbCkge1xuICAgICAgICBkcmFnRWwgPSBjcmVhdGVFbGVtZW50KCdkaXYnLCBzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5kcmFnQ2xhc3MpO1xuICAgICAgICBlbC5hcHBlbmQoZHJhZ0VsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgT2JqZWN0LmFzc2lnbihzY3JvbGxiYXIsIHtcbiAgICAgIGVsLFxuICAgICAgZHJhZ0VsXG4gICAgfSk7XG4gICAgaWYgKHBhcmFtcy5kcmFnZ2FibGUpIHtcbiAgICAgIGVuYWJsZURyYWdnYWJsZSgpO1xuICAgIH1cbiAgICBpZiAoZWwpIHtcbiAgICAgIGVsLmNsYXNzTGlzdFtzd2lwZXIuZW5hYmxlZCA/ICdyZW1vdmUnIDogJ2FkZCddKHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmxvY2tDbGFzcyk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXI7XG4gICAgY29uc3QgZWwgPSBzd2lwZXIuc2Nyb2xsYmFyLmVsO1xuICAgIGlmIChlbCkge1xuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZShzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyBwYXJhbXMuaG9yaXpvbnRhbENsYXNzIDogcGFyYW1zLnZlcnRpY2FsQ2xhc3MpO1xuICAgIH1cbiAgICBkaXNhYmxlRHJhZ2dhYmxlKCk7XG4gIH1cbiAgb24oJ2luaXQnLCAoKSA9PiB7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLmVuYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5pdCgpO1xuICAgICAgdXBkYXRlU2l6ZSgpO1xuICAgICAgc2V0VHJhbnNsYXRlKCk7XG4gICAgfVxuICB9KTtcbiAgb24oJ3VwZGF0ZSByZXNpemUgb2JzZXJ2ZXJVcGRhdGUgbG9jayB1bmxvY2snLCAoKSA9PiB7XG4gICAgdXBkYXRlU2l6ZSgpO1xuICB9KTtcbiAgb24oJ3NldFRyYW5zbGF0ZScsICgpID0+IHtcbiAgICBzZXRUcmFuc2xhdGUoKTtcbiAgfSk7XG4gIG9uKCdzZXRUcmFuc2l0aW9uJywgKF9zLCBkdXJhdGlvbikgPT4ge1xuICAgIHNldFRyYW5zaXRpb24oZHVyYXRpb24pO1xuICB9KTtcbiAgb24oJ2VuYWJsZSBkaXNhYmxlJywgKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGVsXG4gICAgfSA9IHN3aXBlci5zY3JvbGxiYXI7XG4gICAgaWYgKGVsKSB7XG4gICAgICBlbC5jbGFzc0xpc3Rbc3dpcGVyLmVuYWJsZWQgPyAncmVtb3ZlJyA6ICdhZGQnXShzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5sb2NrQ2xhc3MpO1xuICAgIH1cbiAgfSk7XG4gIG9uKCdkZXN0cm95JywgKCkgPT4ge1xuICAgIGRlc3Ryb3koKTtcbiAgfSk7XG4gIGNvbnN0IGVuYWJsZSA9ICgpID0+IHtcbiAgICBzd2lwZXIuZWwuY2xhc3NMaXN0LnJlbW92ZShzd2lwZXIucGFyYW1zLnNjcm9sbGJhci5zY3JvbGxiYXJEaXNhYmxlZENsYXNzKTtcbiAgICBpZiAoc3dpcGVyLnNjcm9sbGJhci5lbCkge1xuICAgICAgc3dpcGVyLnNjcm9sbGJhci5lbC5jbGFzc0xpc3QucmVtb3ZlKHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLnNjcm9sbGJhckRpc2FibGVkQ2xhc3MpO1xuICAgIH1cbiAgICBpbml0KCk7XG4gICAgdXBkYXRlU2l6ZSgpO1xuICAgIHNldFRyYW5zbGF0ZSgpO1xuICB9O1xuICBjb25zdCBkaXNhYmxlID0gKCkgPT4ge1xuICAgIHN3aXBlci5lbC5jbGFzc0xpc3QuYWRkKHN3aXBlci5wYXJhbXMuc2Nyb2xsYmFyLnNjcm9sbGJhckRpc2FibGVkQ2xhc3MpO1xuICAgIGlmIChzd2lwZXIuc2Nyb2xsYmFyLmVsKSB7XG4gICAgICBzd2lwZXIuc2Nyb2xsYmFyLmVsLmNsYXNzTGlzdC5hZGQoc3dpcGVyLnBhcmFtcy5zY3JvbGxiYXIuc2Nyb2xsYmFyRGlzYWJsZWRDbGFzcyk7XG4gICAgfVxuICAgIGRlc3Ryb3koKTtcbiAgfTtcbiAgT2JqZWN0LmFzc2lnbihzd2lwZXIuc2Nyb2xsYmFyLCB7XG4gICAgZW5hYmxlLFxuICAgIGRpc2FibGUsXG4gICAgdXBkYXRlU2l6ZSxcbiAgICBzZXRUcmFuc2xhdGUsXG4gICAgaW5pdCxcbiAgICBkZXN0cm95XG4gIH0pO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/scrollbar/scrollbar.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/thumbs/thumbs.js\":\r\n/*!******************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/thumbs/thumbs.js ***!\r\n  \\******************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ Thumb)\\n/* harmony export */ });\\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \\\"./node_modules/ssr-window/ssr-window.esm.js\\\");\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\n\\nfunction Thumb({\\n  swiper,\\n  extendParams,\\n  on\\n}) {\\n  extendParams({\\n    thumbs: {\\n      swiper: null,\\n      multipleActiveThumbs: true,\\n      autoScrollOffset: 0,\\n      slideThumbActiveClass: 'swiper-slide-thumb-active',\\n      thumbsContainerClass: 'swiper-thumbs'\\n    }\\n  });\\n  let initialized = false;\\n  let swiperCreated = false;\\n  swiper.thumbs = {\\n    swiper: null\\n  };\\n  function onThumbClick() {\\n    const thumbsSwiper = swiper.thumbs.swiper;\\n    if (!thumbsSwiper || thumbsSwiper.destroyed) return;\\n    const clickedIndex = thumbsSwiper.clickedIndex;\\n    const clickedSlide = thumbsSwiper.clickedSlide;\\n    if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass)) return;\\n    if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\\n    let slideToIndex;\\n    if (thumbsSwiper.params.loop) {\\n      slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\\n    } else {\\n      slideToIndex = clickedIndex;\\n    }\\n    if (swiper.params.loop) {\\n      swiper.slideToLoop(slideToIndex);\\n    } else {\\n      swiper.slideTo(slideToIndex);\\n    }\\n  }\\n  function init() {\\n    const {\\n      thumbs: thumbsParams\\n    } = swiper.params;\\n    if (initialized) return false;\\n    initialized = true;\\n    const SwiperClass = swiper.constructor;\\n    if (thumbsParams.swiper instanceof SwiperClass) {\\n      swiper.thumbs.swiper = thumbsParams.swiper;\\n      Object.assign(swiper.thumbs.swiper.originalParams, {\\n        watchSlidesProgress: true,\\n        slideToClickedSlide: false\\n      });\\n      Object.assign(swiper.thumbs.swiper.params, {\\n        watchSlidesProgress: true,\\n        slideToClickedSlide: false\\n      });\\n      swiper.thumbs.swiper.update();\\n    } else if ((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.isObject)(thumbsParams.swiper)) {\\n      const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\\n      Object.assign(thumbsSwiperParams, {\\n        watchSlidesProgress: true,\\n        slideToClickedSlide: false\\n      });\\n      swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\\n      swiperCreated = true;\\n    }\\n    swiper.thumbs.swiper.el.classList.add(swiper.params.thumbs.thumbsContainerClass);\\n    swiper.thumbs.swiper.on('tap', onThumbClick);\\n    return true;\\n  }\\n  function update(initial) {\\n    const thumbsSwiper = swiper.thumbs.swiper;\\n    if (!thumbsSwiper || thumbsSwiper.destroyed) return;\\n    const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\\n\\n    // Activate thumbs\\n    let thumbsToActivate = 1;\\n    const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\\n    if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\\n      thumbsToActivate = swiper.params.slidesPerView;\\n    }\\n    if (!swiper.params.thumbs.multipleActiveThumbs) {\\n      thumbsToActivate = 1;\\n    }\\n    thumbsToActivate = Math.floor(thumbsToActivate);\\n    thumbsSwiper.slides.forEach(slideEl => slideEl.classList.remove(thumbActiveClass));\\n    if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\\n      for (let i = 0; i < thumbsToActivate; i += 1) {\\n        (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementChildren)(thumbsSwiper.slidesEl, `[data-swiper-slide-index=\\\"${swiper.realIndex + i}\\\"]`).forEach(slideEl => {\\n          slideEl.classList.add(thumbActiveClass);\\n        });\\n      }\\n    } else {\\n      for (let i = 0; i < thumbsToActivate; i += 1) {\\n        if (thumbsSwiper.slides[swiper.realIndex + i]) {\\n          thumbsSwiper.slides[swiper.realIndex + i].classList.add(thumbActiveClass);\\n        }\\n      }\\n    }\\n    const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\\n    const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\\n    if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\\n      const currentThumbsIndex = thumbsSwiper.activeIndex;\\n      let newThumbsIndex;\\n      let direction;\\n      if (thumbsSwiper.params.loop) {\\n        const newThumbsSlide = thumbsSwiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`)[0];\\n        newThumbsIndex = thumbsSwiper.slides.indexOf(newThumbsSlide);\\n        direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\\n      } else {\\n        newThumbsIndex = swiper.realIndex;\\n        direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\\n      }\\n      if (useOffset) {\\n        newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\\n      }\\n      if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\\n        if (thumbsSwiper.params.centeredSlides) {\\n          if (newThumbsIndex > currentThumbsIndex) {\\n            newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\\n          } else {\\n            newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\\n          }\\n        } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) {\\n          // newThumbsIndex = newThumbsIndex - slidesPerView + 1;\\n        }\\n        thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\\n      }\\n    }\\n  }\\n  on('beforeInit', () => {\\n    const {\\n      thumbs\\n    } = swiper.params;\\n    if (!thumbs || !thumbs.swiper) return;\\n    if (typeof thumbs.swiper === 'string' || thumbs.swiper instanceof HTMLElement) {\\n      const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)();\\n      const getThumbsElementAndInit = () => {\\n        const thumbsElement = typeof thumbs.swiper === 'string' ? document.querySelector(thumbs.swiper) : thumbs.swiper;\\n        if (thumbsElement && thumbsElement.swiper) {\\n          thumbs.swiper = thumbsElement.swiper;\\n          init();\\n          update(true);\\n        } else if (thumbsElement) {\\n          const onThumbsSwiper = e => {\\n            thumbs.swiper = e.detail[0];\\n            thumbsElement.removeEventListener('init', onThumbsSwiper);\\n            init();\\n            update(true);\\n            thumbs.swiper.update();\\n            swiper.update();\\n          };\\n          thumbsElement.addEventListener('init', onThumbsSwiper);\\n        }\\n        return thumbsElement;\\n      };\\n      const watchForThumbsToAppear = () => {\\n        if (swiper.destroyed) return;\\n        const thumbsElement = getThumbsElementAndInit();\\n        if (!thumbsElement) {\\n          requestAnimationFrame(watchForThumbsToAppear);\\n        }\\n      };\\n      requestAnimationFrame(watchForThumbsToAppear);\\n    } else {\\n      init();\\n      update(true);\\n    }\\n  });\\n  on('slideChange update resize observerUpdate', () => {\\n    update();\\n  });\\n  on('setTransition', (_s, duration) => {\\n    const thumbsSwiper = swiper.thumbs.swiper;\\n    if (!thumbsSwiper || thumbsSwiper.destroyed) return;\\n    thumbsSwiper.setTransition(duration);\\n  });\\n  on('beforeDestroy', () => {\\n    const thumbsSwiper = swiper.thumbs.swiper;\\n    if (!thumbsSwiper || thumbsSwiper.destroyed) return;\\n    if (swiperCreated) {\\n      thumbsSwiper.destroy();\\n    }\\n  });\\n  Object.assign(swiper.thumbs, {\\n    init,\\n    update\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvdGh1bWJzL3RodW1icy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBeUM7QUFDeUI7QUFDbkQ7QUFDZjtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsTUFBTSxTQUFTLDBEQUFRO0FBQ3ZCLGlEQUFpRDtBQUNqRDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isc0JBQXNCO0FBQzVDLFFBQVEsaUVBQWUscURBQXFELHFCQUFxQjtBQUNqRztBQUNBLFNBQVM7QUFDVDtBQUNBLE1BQU07QUFDTixzQkFBc0Isc0JBQXNCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRIQUE0SCxpQkFBaUI7QUFDN0k7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsdUJBQXVCLHVEQUFXO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvbW9kdWxlcy90aHVtYnMvdGh1bWJzLmpzPzkwN2QiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0RG9jdW1lbnQgfSBmcm9tICdzc3Itd2luZG93JztcbmltcG9ydCB7IGVsZW1lbnRDaGlsZHJlbiwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gVGh1bWIoe1xuICBzd2lwZXIsXG4gIGV4dGVuZFBhcmFtcyxcbiAgb25cbn0pIHtcbiAgZXh0ZW5kUGFyYW1zKHtcbiAgICB0aHVtYnM6IHtcbiAgICAgIHN3aXBlcjogbnVsbCxcbiAgICAgIG11bHRpcGxlQWN0aXZlVGh1bWJzOiB0cnVlLFxuICAgICAgYXV0b1Njcm9sbE9mZnNldDogMCxcbiAgICAgIHNsaWRlVGh1bWJBY3RpdmVDbGFzczogJ3N3aXBlci1zbGlkZS10aHVtYi1hY3RpdmUnLFxuICAgICAgdGh1bWJzQ29udGFpbmVyQ2xhc3M6ICdzd2lwZXItdGh1bWJzJ1xuICAgIH1cbiAgfSk7XG4gIGxldCBpbml0aWFsaXplZCA9IGZhbHNlO1xuICBsZXQgc3dpcGVyQ3JlYXRlZCA9IGZhbHNlO1xuICBzd2lwZXIudGh1bWJzID0ge1xuICAgIHN3aXBlcjogbnVsbFxuICB9O1xuICBmdW5jdGlvbiBvblRodW1iQ2xpY2soKSB7XG4gICAgY29uc3QgdGh1bWJzU3dpcGVyID0gc3dpcGVyLnRodW1icy5zd2lwZXI7XG4gICAgaWYgKCF0aHVtYnNTd2lwZXIgfHwgdGh1bWJzU3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgIGNvbnN0IGNsaWNrZWRJbmRleCA9IHRodW1ic1N3aXBlci5jbGlja2VkSW5kZXg7XG4gICAgY29uc3QgY2xpY2tlZFNsaWRlID0gdGh1bWJzU3dpcGVyLmNsaWNrZWRTbGlkZTtcbiAgICBpZiAoY2xpY2tlZFNsaWRlICYmIGNsaWNrZWRTbGlkZS5jbGFzc0xpc3QuY29udGFpbnMoc3dpcGVyLnBhcmFtcy50aHVtYnMuc2xpZGVUaHVtYkFjdGl2ZUNsYXNzKSkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgY2xpY2tlZEluZGV4ID09PSAndW5kZWZpbmVkJyB8fCBjbGlja2VkSW5kZXggPT09IG51bGwpIHJldHVybjtcbiAgICBsZXQgc2xpZGVUb0luZGV4O1xuICAgIGlmICh0aHVtYnNTd2lwZXIucGFyYW1zLmxvb3ApIHtcbiAgICAgIHNsaWRlVG9JbmRleCA9IHBhcnNlSW50KHRodW1ic1N3aXBlci5jbGlja2VkU2xpZGUuZ2V0QXR0cmlidXRlKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcpLCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNsaWRlVG9JbmRleCA9IGNsaWNrZWRJbmRleDtcbiAgICB9XG4gICAgaWYgKHN3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgc3dpcGVyLnNsaWRlVG9Mb29wKHNsaWRlVG9JbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci5zbGlkZVRvKHNsaWRlVG9JbmRleCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgdGh1bWJzOiB0aHVtYnNQYXJhbXNcbiAgICB9ID0gc3dpcGVyLnBhcmFtcztcbiAgICBpZiAoaW5pdGlhbGl6ZWQpIHJldHVybiBmYWxzZTtcbiAgICBpbml0aWFsaXplZCA9IHRydWU7XG4gICAgY29uc3QgU3dpcGVyQ2xhc3MgPSBzd2lwZXIuY29uc3RydWN0b3I7XG4gICAgaWYgKHRodW1ic1BhcmFtcy5zd2lwZXIgaW5zdGFuY2VvZiBTd2lwZXJDbGFzcykge1xuICAgICAgc3dpcGVyLnRodW1icy5zd2lwZXIgPSB0aHVtYnNQYXJhbXMuc3dpcGVyO1xuICAgICAgT2JqZWN0LmFzc2lnbihzd2lwZXIudGh1bWJzLnN3aXBlci5vcmlnaW5hbFBhcmFtcywge1xuICAgICAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiB0cnVlLFxuICAgICAgICBzbGlkZVRvQ2xpY2tlZFNsaWRlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBPYmplY3QuYXNzaWduKHN3aXBlci50aHVtYnMuc3dpcGVyLnBhcmFtcywge1xuICAgICAgICB3YXRjaFNsaWRlc1Byb2dyZXNzOiB0cnVlLFxuICAgICAgICBzbGlkZVRvQ2xpY2tlZFNsaWRlOiBmYWxzZVxuICAgICAgfSk7XG4gICAgICBzd2lwZXIudGh1bWJzLnN3aXBlci51cGRhdGUoKTtcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHRodW1ic1BhcmFtcy5zd2lwZXIpKSB7XG4gICAgICBjb25zdCB0aHVtYnNTd2lwZXJQYXJhbXMgPSBPYmplY3QuYXNzaWduKHt9LCB0aHVtYnNQYXJhbXMuc3dpcGVyKTtcbiAgICAgIE9iamVjdC5hc3NpZ24odGh1bWJzU3dpcGVyUGFyYW1zLCB7XG4gICAgICAgIHdhdGNoU2xpZGVzUHJvZ3Jlc3M6IHRydWUsXG4gICAgICAgIHNsaWRlVG9DbGlja2VkU2xpZGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIHN3aXBlci50aHVtYnMuc3dpcGVyID0gbmV3IFN3aXBlckNsYXNzKHRodW1ic1N3aXBlclBhcmFtcyk7XG4gICAgICBzd2lwZXJDcmVhdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgc3dpcGVyLnRodW1icy5zd2lwZXIuZWwuY2xhc3NMaXN0LmFkZChzd2lwZXIucGFyYW1zLnRodW1icy50aHVtYnNDb250YWluZXJDbGFzcyk7XG4gICAgc3dpcGVyLnRodW1icy5zd2lwZXIub24oJ3RhcCcsIG9uVGh1bWJDbGljayk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgZnVuY3Rpb24gdXBkYXRlKGluaXRpYWwpIHtcbiAgICBjb25zdCB0aHVtYnNTd2lwZXIgPSBzd2lwZXIudGh1bWJzLnN3aXBlcjtcbiAgICBpZiAoIXRodW1ic1N3aXBlciB8fCB0aHVtYnNTd2lwZXIuZGVzdHJveWVkKSByZXR1cm47XG4gICAgY29uc3Qgc2xpZGVzUGVyVmlldyA9IHRodW1ic1N3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldyA9PT0gJ2F1dG8nID8gdGh1bWJzU3dpcGVyLnNsaWRlc1BlclZpZXdEeW5hbWljKCkgOiB0aHVtYnNTd2lwZXIucGFyYW1zLnNsaWRlc1BlclZpZXc7XG5cbiAgICAvLyBBY3RpdmF0ZSB0aHVtYnNcbiAgICBsZXQgdGh1bWJzVG9BY3RpdmF0ZSA9IDE7XG4gICAgY29uc3QgdGh1bWJBY3RpdmVDbGFzcyA9IHN3aXBlci5wYXJhbXMudGh1bWJzLnNsaWRlVGh1bWJBY3RpdmVDbGFzcztcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJWaWV3ID4gMSAmJiAhc3dpcGVyLnBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgdGh1bWJzVG9BY3RpdmF0ZSA9IHN3aXBlci5wYXJhbXMuc2xpZGVzUGVyVmlldztcbiAgICB9XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLnRodW1icy5tdWx0aXBsZUFjdGl2ZVRodW1icykge1xuICAgICAgdGh1bWJzVG9BY3RpdmF0ZSA9IDE7XG4gICAgfVxuICAgIHRodW1ic1RvQWN0aXZhdGUgPSBNYXRoLmZsb29yKHRodW1ic1RvQWN0aXZhdGUpO1xuICAgIHRodW1ic1N3aXBlci5zbGlkZXMuZm9yRWFjaChzbGlkZUVsID0+IHNsaWRlRWwuY2xhc3NMaXN0LnJlbW92ZSh0aHVtYkFjdGl2ZUNsYXNzKSk7XG4gICAgaWYgKHRodW1ic1N3aXBlci5wYXJhbXMubG9vcCB8fCB0aHVtYnNTd2lwZXIucGFyYW1zLnZpcnR1YWwgJiYgdGh1bWJzU3dpcGVyLnBhcmFtcy52aXJ0dWFsLmVuYWJsZWQpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGh1bWJzVG9BY3RpdmF0ZTsgaSArPSAxKSB7XG4gICAgICAgIGVsZW1lbnRDaGlsZHJlbih0aHVtYnNTd2lwZXIuc2xpZGVzRWwsIGBbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XCIke3N3aXBlci5yZWFsSW5kZXggKyBpfVwiXWApLmZvckVhY2goc2xpZGVFbCA9PiB7XG4gICAgICAgICAgc2xpZGVFbC5jbGFzc0xpc3QuYWRkKHRodW1iQWN0aXZlQ2xhc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHVtYnNUb0FjdGl2YXRlOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKHRodW1ic1N3aXBlci5zbGlkZXNbc3dpcGVyLnJlYWxJbmRleCArIGldKSB7XG4gICAgICAgICAgdGh1bWJzU3dpcGVyLnNsaWRlc1tzd2lwZXIucmVhbEluZGV4ICsgaV0uY2xhc3NMaXN0LmFkZCh0aHVtYkFjdGl2ZUNsYXNzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhdXRvU2Nyb2xsT2Zmc2V0ID0gc3dpcGVyLnBhcmFtcy50aHVtYnMuYXV0b1Njcm9sbE9mZnNldDtcbiAgICBjb25zdCB1c2VPZmZzZXQgPSBhdXRvU2Nyb2xsT2Zmc2V0ICYmICF0aHVtYnNTd2lwZXIucGFyYW1zLmxvb3A7XG4gICAgaWYgKHN3aXBlci5yZWFsSW5kZXggIT09IHRodW1ic1N3aXBlci5yZWFsSW5kZXggfHwgdXNlT2Zmc2V0KSB7XG4gICAgICBjb25zdCBjdXJyZW50VGh1bWJzSW5kZXggPSB0aHVtYnNTd2lwZXIuYWN0aXZlSW5kZXg7XG4gICAgICBsZXQgbmV3VGh1bWJzSW5kZXg7XG4gICAgICBsZXQgZGlyZWN0aW9uO1xuICAgICAgaWYgKHRodW1ic1N3aXBlci5wYXJhbXMubG9vcCkge1xuICAgICAgICBjb25zdCBuZXdUaHVtYnNTbGlkZSA9IHRodW1ic1N3aXBlci5zbGlkZXMuZmlsdGVyKHNsaWRlRWwgPT4gc2xpZGVFbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JykgPT09IGAke3N3aXBlci5yZWFsSW5kZXh9YClbMF07XG4gICAgICAgIG5ld1RodW1ic0luZGV4ID0gdGh1bWJzU3dpcGVyLnNsaWRlcy5pbmRleE9mKG5ld1RodW1ic1NsaWRlKTtcbiAgICAgICAgZGlyZWN0aW9uID0gc3dpcGVyLmFjdGl2ZUluZGV4ID4gc3dpcGVyLnByZXZpb3VzSW5kZXggPyAnbmV4dCcgOiAncHJldic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdUaHVtYnNJbmRleCA9IHN3aXBlci5yZWFsSW5kZXg7XG4gICAgICAgIGRpcmVjdGlvbiA9IG5ld1RodW1ic0luZGV4ID4gc3dpcGVyLnByZXZpb3VzSW5kZXggPyAnbmV4dCcgOiAncHJldic7XG4gICAgICB9XG4gICAgICBpZiAodXNlT2Zmc2V0KSB7XG4gICAgICAgIG5ld1RodW1ic0luZGV4ICs9IGRpcmVjdGlvbiA9PT0gJ25leHQnID8gYXV0b1Njcm9sbE9mZnNldCA6IC0xICogYXV0b1Njcm9sbE9mZnNldDtcbiAgICAgIH1cbiAgICAgIGlmICh0aHVtYnNTd2lwZXIudmlzaWJsZVNsaWRlc0luZGV4ZXMgJiYgdGh1bWJzU3dpcGVyLnZpc2libGVTbGlkZXNJbmRleGVzLmluZGV4T2YobmV3VGh1bWJzSW5kZXgpIDwgMCkge1xuICAgICAgICBpZiAodGh1bWJzU3dpcGVyLnBhcmFtcy5jZW50ZXJlZFNsaWRlcykge1xuICAgICAgICAgIGlmIChuZXdUaHVtYnNJbmRleCA+IGN1cnJlbnRUaHVtYnNJbmRleCkge1xuICAgICAgICAgICAgbmV3VGh1bWJzSW5kZXggPSBuZXdUaHVtYnNJbmRleCAtIE1hdGguZmxvb3Ioc2xpZGVzUGVyVmlldyAvIDIpICsgMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3VGh1bWJzSW5kZXggPSBuZXdUaHVtYnNJbmRleCArIE1hdGguZmxvb3Ioc2xpZGVzUGVyVmlldyAvIDIpIC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV3VGh1bWJzSW5kZXggPiBjdXJyZW50VGh1bWJzSW5kZXggJiYgdGh1bWJzU3dpcGVyLnBhcmFtcy5zbGlkZXNQZXJHcm91cCA9PT0gMSkge1xuICAgICAgICAgIC8vIG5ld1RodW1ic0luZGV4ID0gbmV3VGh1bWJzSW5kZXggLSBzbGlkZXNQZXJWaWV3ICsgMTtcbiAgICAgICAgfVxuICAgICAgICB0aHVtYnNTd2lwZXIuc2xpZGVUbyhuZXdUaHVtYnNJbmRleCwgaW5pdGlhbCA/IDAgOiB1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBvbignYmVmb3JlSW5pdCcsICgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICB0aHVtYnNcbiAgICB9ID0gc3dpcGVyLnBhcmFtcztcbiAgICBpZiAoIXRodW1icyB8fCAhdGh1bWJzLnN3aXBlcikgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgdGh1bWJzLnN3aXBlciA9PT0gJ3N0cmluZycgfHwgdGh1bWJzLnN3aXBlciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICBjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gICAgICBjb25zdCBnZXRUaHVtYnNFbGVtZW50QW5kSW5pdCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdGh1bWJzRWxlbWVudCA9IHR5cGVvZiB0aHVtYnMuc3dpcGVyID09PSAnc3RyaW5nJyA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGh1bWJzLnN3aXBlcikgOiB0aHVtYnMuc3dpcGVyO1xuICAgICAgICBpZiAodGh1bWJzRWxlbWVudCAmJiB0aHVtYnNFbGVtZW50LnN3aXBlcikge1xuICAgICAgICAgIHRodW1icy5zd2lwZXIgPSB0aHVtYnNFbGVtZW50LnN3aXBlcjtcbiAgICAgICAgICBpbml0KCk7XG4gICAgICAgICAgdXBkYXRlKHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHRodW1ic0VsZW1lbnQpIHtcbiAgICAgICAgICBjb25zdCBvblRodW1ic1N3aXBlciA9IGUgPT4ge1xuICAgICAgICAgICAgdGh1bWJzLnN3aXBlciA9IGUuZGV0YWlsWzBdO1xuICAgICAgICAgICAgdGh1bWJzRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbml0Jywgb25UaHVtYnNTd2lwZXIpO1xuICAgICAgICAgICAgaW5pdCgpO1xuICAgICAgICAgICAgdXBkYXRlKHRydWUpO1xuICAgICAgICAgICAgdGh1bWJzLnN3aXBlci51cGRhdGUoKTtcbiAgICAgICAgICAgIHN3aXBlci51cGRhdGUoKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRodW1ic0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignaW5pdCcsIG9uVGh1bWJzU3dpcGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGh1bWJzRWxlbWVudDtcbiAgICAgIH07XG4gICAgICBjb25zdCB3YXRjaEZvclRodW1ic1RvQXBwZWFyID0gKCkgPT4ge1xuICAgICAgICBpZiAoc3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICBjb25zdCB0aHVtYnNFbGVtZW50ID0gZ2V0VGh1bWJzRWxlbWVudEFuZEluaXQoKTtcbiAgICAgICAgaWYgKCF0aHVtYnNFbGVtZW50KSB7XG4gICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHdhdGNoRm9yVGh1bWJzVG9BcHBlYXIpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHdhdGNoRm9yVGh1bWJzVG9BcHBlYXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbml0KCk7XG4gICAgICB1cGRhdGUodHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgb24oJ3NsaWRlQ2hhbmdlIHVwZGF0ZSByZXNpemUgb2JzZXJ2ZXJVcGRhdGUnLCAoKSA9PiB7XG4gICAgdXBkYXRlKCk7XG4gIH0pO1xuICBvbignc2V0VHJhbnNpdGlvbicsIChfcywgZHVyYXRpb24pID0+IHtcbiAgICBjb25zdCB0aHVtYnNTd2lwZXIgPSBzd2lwZXIudGh1bWJzLnN3aXBlcjtcbiAgICBpZiAoIXRodW1ic1N3aXBlciB8fCB0aHVtYnNTd2lwZXIuZGVzdHJveWVkKSByZXR1cm47XG4gICAgdGh1bWJzU3dpcGVyLnNldFRyYW5zaXRpb24oZHVyYXRpb24pO1xuICB9KTtcbiAgb24oJ2JlZm9yZURlc3Ryb3knLCAoKSA9PiB7XG4gICAgY29uc3QgdGh1bWJzU3dpcGVyID0gc3dpcGVyLnRodW1icy5zd2lwZXI7XG4gICAgaWYgKCF0aHVtYnNTd2lwZXIgfHwgdGh1bWJzU3dpcGVyLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgIGlmIChzd2lwZXJDcmVhdGVkKSB7XG4gICAgICB0aHVtYnNTd2lwZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5hc3NpZ24oc3dpcGVyLnRodW1icywge1xuICAgIGluaXQsXG4gICAgdXBkYXRlXG4gIH0pO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/thumbs/thumbs.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/virtual/virtual.js\":\r\n/*!********************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/virtual/virtual.js ***!\r\n  \\********************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ Virtual)\\n/* harmony export */ });\\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \\\"./node_modules/ssr-window/ssr-window.esm.js\\\");\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\n\\nfunction Virtual({\\n  swiper,\\n  extendParams,\\n  on,\\n  emit\\n}) {\\n  extendParams({\\n    virtual: {\\n      enabled: false,\\n      slides: [],\\n      cache: true,\\n      renderSlide: null,\\n      renderExternal: null,\\n      renderExternalUpdate: true,\\n      addSlidesBefore: 0,\\n      addSlidesAfter: 0\\n    }\\n  });\\n  let cssModeTimeout;\\n  const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)();\\n  swiper.virtual = {\\n    cache: {},\\n    from: undefined,\\n    to: undefined,\\n    slides: [],\\n    offset: 0,\\n    slidesGrid: []\\n  };\\n  const tempDOM = document.createElement('div');\\n  function renderSlide(slide, index) {\\n    const params = swiper.params.virtual;\\n    if (params.cache && swiper.virtual.cache[index]) {\\n      return swiper.virtual.cache[index];\\n    }\\n    // eslint-disable-next-line\\n    let slideEl;\\n    if (params.renderSlide) {\\n      slideEl = params.renderSlide.call(swiper, slide, index);\\n      if (typeof slideEl === 'string') {\\n        tempDOM.innerHTML = slideEl;\\n        slideEl = tempDOM.children[0];\\n      }\\n    } else if (swiper.isElement) {\\n      slideEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.createElement)('swiper-slide');\\n    } else {\\n      slideEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.createElement)('div', swiper.params.slideClass);\\n    }\\n    slideEl.setAttribute('data-swiper-slide-index', index);\\n    if (!params.renderSlide) {\\n      slideEl.textContent = slide;\\n    }\\n    if (params.cache) swiper.virtual.cache[index] = slideEl;\\n    return slideEl;\\n  }\\n  function update(force) {\\n    const {\\n      slidesPerView,\\n      slidesPerGroup,\\n      centeredSlides,\\n      loop: isLoop\\n    } = swiper.params;\\n    const {\\n      addSlidesBefore,\\n      addSlidesAfter\\n    } = swiper.params.virtual;\\n    const {\\n      from: previousFrom,\\n      to: previousTo,\\n      slides,\\n      slidesGrid: previousSlidesGrid,\\n      offset: previousOffset\\n    } = swiper.virtual;\\n    if (!swiper.params.cssMode) {\\n      swiper.updateActiveIndex();\\n    }\\n    const activeIndex = swiper.activeIndex || 0;\\n    let offsetProp;\\n    if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\\n    let slidesAfter;\\n    let slidesBefore;\\n    if (centeredSlides) {\\n      slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\\n      slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\\n    } else {\\n      slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;\\n      slidesBefore = (isLoop ? slidesPerView : slidesPerGroup) + addSlidesBefore;\\n    }\\n    let from = activeIndex - slidesBefore;\\n    let to = activeIndex + slidesAfter;\\n    if (!isLoop) {\\n      from = Math.max(from, 0);\\n      to = Math.min(to, slides.length - 1);\\n    }\\n    let offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\\n    if (isLoop && activeIndex >= slidesBefore) {\\n      from -= slidesBefore;\\n      if (!centeredSlides) offset += swiper.slidesGrid[0];\\n    } else if (isLoop && activeIndex < slidesBefore) {\\n      from = -slidesBefore;\\n      if (centeredSlides) offset += swiper.slidesGrid[0];\\n    }\\n    Object.assign(swiper.virtual, {\\n      from,\\n      to,\\n      offset,\\n      slidesGrid: swiper.slidesGrid,\\n      slidesBefore,\\n      slidesAfter\\n    });\\n    function onRendered() {\\n      swiper.updateSlides();\\n      swiper.updateProgress();\\n      swiper.updateSlidesClasses();\\n      emit('virtualUpdate');\\n    }\\n    if (previousFrom === from && previousTo === to && !force) {\\n      if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\\n        swiper.slides.forEach(slideEl => {\\n          slideEl.style[offsetProp] = `${offset}px`;\\n        });\\n      }\\n      swiper.updateProgress();\\n      emit('virtualUpdate');\\n      return;\\n    }\\n    if (swiper.params.virtual.renderExternal) {\\n      swiper.params.virtual.renderExternal.call(swiper, {\\n        offset,\\n        from,\\n        to,\\n        slides: function getSlides() {\\n          const slidesToRender = [];\\n          for (let i = from; i <= to; i += 1) {\\n            slidesToRender.push(slides[i]);\\n          }\\n          return slidesToRender;\\n        }()\\n      });\\n      if (swiper.params.virtual.renderExternalUpdate) {\\n        onRendered();\\n      } else {\\n        emit('virtualUpdate');\\n      }\\n      return;\\n    }\\n    const prependIndexes = [];\\n    const appendIndexes = [];\\n    const getSlideIndex = index => {\\n      let slideIndex = index;\\n      if (index < 0) {\\n        slideIndex = slides.length + index;\\n      } else if (slideIndex >= slides.length) {\\n        // eslint-disable-next-line\\n        slideIndex = slideIndex - slides.length;\\n      }\\n      return slideIndex;\\n    };\\n    if (force) {\\n      swiper.slidesEl.querySelectorAll(`.${swiper.params.slideClass}, swiper-slide`).forEach(slideEl => {\\n        slideEl.remove();\\n      });\\n    } else {\\n      for (let i = previousFrom; i <= previousTo; i += 1) {\\n        if (i < from || i > to) {\\n          const slideIndex = getSlideIndex(i);\\n          swiper.slidesEl.querySelectorAll(`.${swiper.params.slideClass}[data-swiper-slide-index=\\\"${slideIndex}\\\"], swiper-slide[data-swiper-slide-index=\\\"${slideIndex}\\\"]`).forEach(slideEl => {\\n            slideEl.remove();\\n          });\\n        }\\n      }\\n    }\\n    const loopFrom = isLoop ? -slides.length : 0;\\n    const loopTo = isLoop ? slides.length * 2 : slides.length;\\n    for (let i = loopFrom; i < loopTo; i += 1) {\\n      if (i >= from && i <= to) {\\n        const slideIndex = getSlideIndex(i);\\n        if (typeof previousTo === 'undefined' || force) {\\n          appendIndexes.push(slideIndex);\\n        } else {\\n          if (i > previousTo) appendIndexes.push(slideIndex);\\n          if (i < previousFrom) prependIndexes.push(slideIndex);\\n        }\\n      }\\n    }\\n    appendIndexes.forEach(index => {\\n      swiper.slidesEl.append(renderSlide(slides[index], index));\\n    });\\n    if (isLoop) {\\n      for (let i = prependIndexes.length - 1; i >= 0; i -= 1) {\\n        const index = prependIndexes[i];\\n        swiper.slidesEl.prepend(renderSlide(slides[index], index));\\n      }\\n    } else {\\n      prependIndexes.sort((a, b) => b - a);\\n      prependIndexes.forEach(index => {\\n        swiper.slidesEl.prepend(renderSlide(slides[index], index));\\n      });\\n    }\\n    (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementChildren)(swiper.slidesEl, '.swiper-slide, swiper-slide').forEach(slideEl => {\\n      slideEl.style[offsetProp] = `${offset}px`;\\n    });\\n    onRendered();\\n  }\\n  function appendSlide(slides) {\\n    if (typeof slides === 'object' && 'length' in slides) {\\n      for (let i = 0; i < slides.length; i += 1) {\\n        if (slides[i]) swiper.virtual.slides.push(slides[i]);\\n      }\\n    } else {\\n      swiper.virtual.slides.push(slides);\\n    }\\n    update(true);\\n  }\\n  function prependSlide(slides) {\\n    const activeIndex = swiper.activeIndex;\\n    let newActiveIndex = activeIndex + 1;\\n    let numberOfNewSlides = 1;\\n    if (Array.isArray(slides)) {\\n      for (let i = 0; i < slides.length; i += 1) {\\n        if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\\n      }\\n      newActiveIndex = activeIndex + slides.length;\\n      numberOfNewSlides = slides.length;\\n    } else {\\n      swiper.virtual.slides.unshift(slides);\\n    }\\n    if (swiper.params.virtual.cache) {\\n      const cache = swiper.virtual.cache;\\n      const newCache = {};\\n      Object.keys(cache).forEach(cachedIndex => {\\n        const cachedEl = cache[cachedIndex];\\n        const cachedElIndex = cachedEl.getAttribute('data-swiper-slide-index');\\n        if (cachedElIndex) {\\n          cachedEl.setAttribute('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides);\\n        }\\n        newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cachedEl;\\n      });\\n      swiper.virtual.cache = newCache;\\n    }\\n    update(true);\\n    swiper.slideTo(newActiveIndex, 0);\\n  }\\n  function removeSlide(slidesIndexes) {\\n    if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\\n    let activeIndex = swiper.activeIndex;\\n    if (Array.isArray(slidesIndexes)) {\\n      for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\\n        swiper.virtual.slides.splice(slidesIndexes[i], 1);\\n        if (swiper.params.virtual.cache) {\\n          delete swiper.virtual.cache[slidesIndexes[i]];\\n        }\\n        if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\\n        activeIndex = Math.max(activeIndex, 0);\\n      }\\n    } else {\\n      swiper.virtual.slides.splice(slidesIndexes, 1);\\n      if (swiper.params.virtual.cache) {\\n        delete swiper.virtual.cache[slidesIndexes];\\n      }\\n      if (slidesIndexes < activeIndex) activeIndex -= 1;\\n      activeIndex = Math.max(activeIndex, 0);\\n    }\\n    update(true);\\n    swiper.slideTo(activeIndex, 0);\\n  }\\n  function removeAllSlides() {\\n    swiper.virtual.slides = [];\\n    if (swiper.params.virtual.cache) {\\n      swiper.virtual.cache = {};\\n    }\\n    update(true);\\n    swiper.slideTo(0, 0);\\n  }\\n  on('beforeInit', () => {\\n    if (!swiper.params.virtual.enabled) return;\\n    let domSlidesAssigned;\\n    if (typeof swiper.passedParams.virtual.slides === 'undefined') {\\n      const slides = swiper.slidesEl.querySelectorAll(`.${swiper.params.slideClass}, swiper-slide`);\\n      if (slides && slides.length) {\\n        swiper.virtual.slides = [...slides];\\n        domSlidesAssigned = true;\\n        slides.forEach((slideEl, slideIndex) => {\\n          slideEl.setAttribute('data-swiper-slide-index', slideIndex);\\n          swiper.virtual.cache[slideIndex] = slideEl;\\n          slideEl.remove();\\n        });\\n      }\\n    }\\n    if (!domSlidesAssigned) {\\n      swiper.virtual.slides = swiper.params.virtual.slides;\\n    }\\n    swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\\n    swiper.params.watchSlidesProgress = true;\\n    swiper.originalParams.watchSlidesProgress = true;\\n    if (!swiper.params.initialSlide) {\\n      update();\\n    }\\n  });\\n  on('setTranslate', () => {\\n    if (!swiper.params.virtual.enabled) return;\\n    if (swiper.params.cssMode && !swiper._immediateVirtual) {\\n      clearTimeout(cssModeTimeout);\\n      cssModeTimeout = setTimeout(() => {\\n        update();\\n      }, 100);\\n    } else {\\n      update();\\n    }\\n  });\\n  on('init update resize', () => {\\n    if (!swiper.params.virtual.enabled) return;\\n    if (swiper.params.cssMode) {\\n      (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.setCSSProperty)(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);\\n    }\\n  });\\n  Object.assign(swiper.virtual, {\\n    appendSlide,\\n    prependSlide,\\n    removeSlide,\\n    removeAllSlides,\\n    update\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvdmlydHVhbC92aXJ0dWFsLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF5QztBQUM4QztBQUN4RTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUIsdURBQVc7QUFDOUI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTixnQkFBZ0IsK0RBQWE7QUFDN0IsTUFBTTtBQUNOLGdCQUFnQiwrREFBYTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QyxPQUFPO0FBQ2hELFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsU0FBUztBQUN0QztBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLHlCQUF5QjtBQUNwRTtBQUNBLE9BQU87QUFDUCxNQUFNO0FBQ04saUNBQWlDLGlCQUFpQjtBQUNsRDtBQUNBO0FBQ0EsK0NBQStDLHlCQUF5Qiw0QkFBNEIsV0FBVyw0Q0FBNEMsV0FBVztBQUN0SztBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLFlBQVk7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsSUFBSSxpRUFBZTtBQUNuQixxQ0FBcUMsT0FBTztBQUM1QyxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsbUJBQW1CO0FBQ3pDO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLG1CQUFtQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLFFBQVE7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQseUJBQXlCO0FBQ25GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIscUNBQXFDO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLE1BQU0sZ0VBQWMsK0NBQStDLG1CQUFtQjtBQUN0RjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvbW9kdWxlcy92aXJ0dWFsL3ZpcnR1YWwuanM/ZTc4OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXREb2N1bWVudCB9IGZyb20gJ3Nzci13aW5kb3cnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgZWxlbWVudENoaWxkcmVuLCBzZXRDU1NQcm9wZXJ0eSB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscy5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBWaXJ0dWFsKHtcbiAgc3dpcGVyLFxuICBleHRlbmRQYXJhbXMsXG4gIG9uLFxuICBlbWl0XG59KSB7XG4gIGV4dGVuZFBhcmFtcyh7XG4gICAgdmlydHVhbDoge1xuICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICBzbGlkZXM6IFtdLFxuICAgICAgY2FjaGU6IHRydWUsXG4gICAgICByZW5kZXJTbGlkZTogbnVsbCxcbiAgICAgIHJlbmRlckV4dGVybmFsOiBudWxsLFxuICAgICAgcmVuZGVyRXh0ZXJuYWxVcGRhdGU6IHRydWUsXG4gICAgICBhZGRTbGlkZXNCZWZvcmU6IDAsXG4gICAgICBhZGRTbGlkZXNBZnRlcjogMFxuICAgIH1cbiAgfSk7XG4gIGxldCBjc3NNb2RlVGltZW91dDtcbiAgY29uc3QgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICBzd2lwZXIudmlydHVhbCA9IHtcbiAgICBjYWNoZToge30sXG4gICAgZnJvbTogdW5kZWZpbmVkLFxuICAgIHRvOiB1bmRlZmluZWQsXG4gICAgc2xpZGVzOiBbXSxcbiAgICBvZmZzZXQ6IDAsXG4gICAgc2xpZGVzR3JpZDogW11cbiAgfTtcbiAgY29uc3QgdGVtcERPTSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBmdW5jdGlvbiByZW5kZXJTbGlkZShzbGlkZSwgaW5kZXgpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnZpcnR1YWw7XG4gICAgaWYgKHBhcmFtcy5jYWNoZSAmJiBzd2lwZXIudmlydHVhbC5jYWNoZVtpbmRleF0pIHtcbiAgICAgIHJldHVybiBzd2lwZXIudmlydHVhbC5jYWNoZVtpbmRleF07XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIGxldCBzbGlkZUVsO1xuICAgIGlmIChwYXJhbXMucmVuZGVyU2xpZGUpIHtcbiAgICAgIHNsaWRlRWwgPSBwYXJhbXMucmVuZGVyU2xpZGUuY2FsbChzd2lwZXIsIHNsaWRlLCBpbmRleCk7XG4gICAgICBpZiAodHlwZW9mIHNsaWRlRWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRlbXBET00uaW5uZXJIVE1MID0gc2xpZGVFbDtcbiAgICAgICAgc2xpZGVFbCA9IHRlbXBET00uY2hpbGRyZW5bMF07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzd2lwZXIuaXNFbGVtZW50KSB7XG4gICAgICBzbGlkZUVsID0gY3JlYXRlRWxlbWVudCgnc3dpcGVyLXNsaWRlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNsaWRlRWwgPSBjcmVhdGVFbGVtZW50KCdkaXYnLCBzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3MpO1xuICAgIH1cbiAgICBzbGlkZUVsLnNldEF0dHJpYnV0ZSgnZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnLCBpbmRleCk7XG4gICAgaWYgKCFwYXJhbXMucmVuZGVyU2xpZGUpIHtcbiAgICAgIHNsaWRlRWwudGV4dENvbnRlbnQgPSBzbGlkZTtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5jYWNoZSkgc3dpcGVyLnZpcnR1YWwuY2FjaGVbaW5kZXhdID0gc2xpZGVFbDtcbiAgICByZXR1cm4gc2xpZGVFbDtcbiAgfVxuICBmdW5jdGlvbiB1cGRhdGUoZm9yY2UpIHtcbiAgICBjb25zdCB7XG4gICAgICBzbGlkZXNQZXJWaWV3LFxuICAgICAgc2xpZGVzUGVyR3JvdXAsXG4gICAgICBjZW50ZXJlZFNsaWRlcyxcbiAgICAgIGxvb3A6IGlzTG9vcFxuICAgIH0gPSBzd2lwZXIucGFyYW1zO1xuICAgIGNvbnN0IHtcbiAgICAgIGFkZFNsaWRlc0JlZm9yZSxcbiAgICAgIGFkZFNsaWRlc0FmdGVyXG4gICAgfSA9IHN3aXBlci5wYXJhbXMudmlydHVhbDtcbiAgICBjb25zdCB7XG4gICAgICBmcm9tOiBwcmV2aW91c0Zyb20sXG4gICAgICB0bzogcHJldmlvdXNUbyxcbiAgICAgIHNsaWRlcyxcbiAgICAgIHNsaWRlc0dyaWQ6IHByZXZpb3VzU2xpZGVzR3JpZCxcbiAgICAgIG9mZnNldDogcHJldmlvdXNPZmZzZXRcbiAgICB9ID0gc3dpcGVyLnZpcnR1YWw7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHN3aXBlci51cGRhdGVBY3RpdmVJbmRleCgpO1xuICAgIH1cbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleCB8fCAwO1xuICAgIGxldCBvZmZzZXRQcm9wO1xuICAgIGlmIChzd2lwZXIucnRsVHJhbnNsYXRlKSBvZmZzZXRQcm9wID0gJ3JpZ2h0JztlbHNlIG9mZnNldFByb3AgPSBzd2lwZXIuaXNIb3Jpem9udGFsKCkgPyAnbGVmdCcgOiAndG9wJztcbiAgICBsZXQgc2xpZGVzQWZ0ZXI7XG4gICAgbGV0IHNsaWRlc0JlZm9yZTtcbiAgICBpZiAoY2VudGVyZWRTbGlkZXMpIHtcbiAgICAgIHNsaWRlc0FmdGVyID0gTWF0aC5mbG9vcihzbGlkZXNQZXJWaWV3IC8gMikgKyBzbGlkZXNQZXJHcm91cCArIGFkZFNsaWRlc0FmdGVyO1xuICAgICAgc2xpZGVzQmVmb3JlID0gTWF0aC5mbG9vcihzbGlkZXNQZXJWaWV3IC8gMikgKyBzbGlkZXNQZXJHcm91cCArIGFkZFNsaWRlc0JlZm9yZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2xpZGVzQWZ0ZXIgPSBzbGlkZXNQZXJWaWV3ICsgKHNsaWRlc1Blckdyb3VwIC0gMSkgKyBhZGRTbGlkZXNBZnRlcjtcbiAgICAgIHNsaWRlc0JlZm9yZSA9IChpc0xvb3AgPyBzbGlkZXNQZXJWaWV3IDogc2xpZGVzUGVyR3JvdXApICsgYWRkU2xpZGVzQmVmb3JlO1xuICAgIH1cbiAgICBsZXQgZnJvbSA9IGFjdGl2ZUluZGV4IC0gc2xpZGVzQmVmb3JlO1xuICAgIGxldCB0byA9IGFjdGl2ZUluZGV4ICsgc2xpZGVzQWZ0ZXI7XG4gICAgaWYgKCFpc0xvb3ApIHtcbiAgICAgIGZyb20gPSBNYXRoLm1heChmcm9tLCAwKTtcbiAgICAgIHRvID0gTWF0aC5taW4odG8sIHNsaWRlcy5sZW5ndGggLSAxKTtcbiAgICB9XG4gICAgbGV0IG9mZnNldCA9IChzd2lwZXIuc2xpZGVzR3JpZFtmcm9tXSB8fCAwKSAtIChzd2lwZXIuc2xpZGVzR3JpZFswXSB8fCAwKTtcbiAgICBpZiAoaXNMb29wICYmIGFjdGl2ZUluZGV4ID49IHNsaWRlc0JlZm9yZSkge1xuICAgICAgZnJvbSAtPSBzbGlkZXNCZWZvcmU7XG4gICAgICBpZiAoIWNlbnRlcmVkU2xpZGVzKSBvZmZzZXQgKz0gc3dpcGVyLnNsaWRlc0dyaWRbMF07XG4gICAgfSBlbHNlIGlmIChpc0xvb3AgJiYgYWN0aXZlSW5kZXggPCBzbGlkZXNCZWZvcmUpIHtcbiAgICAgIGZyb20gPSAtc2xpZGVzQmVmb3JlO1xuICAgICAgaWYgKGNlbnRlcmVkU2xpZGVzKSBvZmZzZXQgKz0gc3dpcGVyLnNsaWRlc0dyaWRbMF07XG4gICAgfVxuICAgIE9iamVjdC5hc3NpZ24oc3dpcGVyLnZpcnR1YWwsIHtcbiAgICAgIGZyb20sXG4gICAgICB0byxcbiAgICAgIG9mZnNldCxcbiAgICAgIHNsaWRlc0dyaWQ6IHN3aXBlci5zbGlkZXNHcmlkLFxuICAgICAgc2xpZGVzQmVmb3JlLFxuICAgICAgc2xpZGVzQWZ0ZXJcbiAgICB9KTtcbiAgICBmdW5jdGlvbiBvblJlbmRlcmVkKCkge1xuICAgICAgc3dpcGVyLnVwZGF0ZVNsaWRlcygpO1xuICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgICBzd2lwZXIudXBkYXRlU2xpZGVzQ2xhc3NlcygpO1xuICAgICAgZW1pdCgndmlydHVhbFVwZGF0ZScpO1xuICAgIH1cbiAgICBpZiAocHJldmlvdXNGcm9tID09PSBmcm9tICYmIHByZXZpb3VzVG8gPT09IHRvICYmICFmb3JjZSkge1xuICAgICAgaWYgKHN3aXBlci5zbGlkZXNHcmlkICE9PSBwcmV2aW91c1NsaWRlc0dyaWQgJiYgb2Zmc2V0ICE9PSBwcmV2aW91c09mZnNldCkge1xuICAgICAgICBzd2lwZXIuc2xpZGVzLmZvckVhY2goc2xpZGVFbCA9PiB7XG4gICAgICAgICAgc2xpZGVFbC5zdHlsZVtvZmZzZXRQcm9wXSA9IGAke29mZnNldH1weGA7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgc3dpcGVyLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgICBlbWl0KCd2aXJ0dWFsVXBkYXRlJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWwucmVuZGVyRXh0ZXJuYWwpIHtcbiAgICAgIHN3aXBlci5wYXJhbXMudmlydHVhbC5yZW5kZXJFeHRlcm5hbC5jYWxsKHN3aXBlciwge1xuICAgICAgICBvZmZzZXQsXG4gICAgICAgIGZyb20sXG4gICAgICAgIHRvLFxuICAgICAgICBzbGlkZXM6IGZ1bmN0aW9uIGdldFNsaWRlcygpIHtcbiAgICAgICAgICBjb25zdCBzbGlkZXNUb1JlbmRlciA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IGkgPSBmcm9tOyBpIDw9IHRvOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHNsaWRlc1RvUmVuZGVyLnB1c2goc2xpZGVzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHNsaWRlc1RvUmVuZGVyO1xuICAgICAgICB9KClcbiAgICAgIH0pO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbC5yZW5kZXJFeHRlcm5hbFVwZGF0ZSkge1xuICAgICAgICBvblJlbmRlcmVkKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbWl0KCd2aXJ0dWFsVXBkYXRlJyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHByZXBlbmRJbmRleGVzID0gW107XG4gICAgY29uc3QgYXBwZW5kSW5kZXhlcyA9IFtdO1xuICAgIGNvbnN0IGdldFNsaWRlSW5kZXggPSBpbmRleCA9PiB7XG4gICAgICBsZXQgc2xpZGVJbmRleCA9IGluZGV4O1xuICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICBzbGlkZUluZGV4ID0gc2xpZGVzLmxlbmd0aCArIGluZGV4O1xuICAgICAgfSBlbHNlIGlmIChzbGlkZUluZGV4ID49IHNsaWRlcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgIHNsaWRlSW5kZXggPSBzbGlkZUluZGV4IC0gc2xpZGVzLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzbGlkZUluZGV4O1xuICAgIH07XG4gICAgaWYgKGZvcmNlKSB7XG4gICAgICBzd2lwZXIuc2xpZGVzRWwucXVlcnlTZWxlY3RvckFsbChgLiR7c3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzfSwgc3dpcGVyLXNsaWRlYCkuZm9yRWFjaChzbGlkZUVsID0+IHtcbiAgICAgICAgc2xpZGVFbC5yZW1vdmUoKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gcHJldmlvdXNGcm9tOyBpIDw9IHByZXZpb3VzVG87IGkgKz0gMSkge1xuICAgICAgICBpZiAoaSA8IGZyb20gfHwgaSA+IHRvKSB7XG4gICAgICAgICAgY29uc3Qgc2xpZGVJbmRleCA9IGdldFNsaWRlSW5kZXgoaSk7XG4gICAgICAgICAgc3dpcGVyLnNsaWRlc0VsLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke3N3aXBlci5wYXJhbXMuc2xpZGVDbGFzc31bZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XCIke3NsaWRlSW5kZXh9XCJdLCBzd2lwZXItc2xpZGVbZGF0YS1zd2lwZXItc2xpZGUtaW5kZXg9XCIke3NsaWRlSW5kZXh9XCJdYCkuZm9yRWFjaChzbGlkZUVsID0+IHtcbiAgICAgICAgICAgIHNsaWRlRWwucmVtb3ZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbG9vcEZyb20gPSBpc0xvb3AgPyAtc2xpZGVzLmxlbmd0aCA6IDA7XG4gICAgY29uc3QgbG9vcFRvID0gaXNMb29wID8gc2xpZGVzLmxlbmd0aCAqIDIgOiBzbGlkZXMubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSBsb29wRnJvbTsgaSA8IGxvb3BUbzsgaSArPSAxKSB7XG4gICAgICBpZiAoaSA+PSBmcm9tICYmIGkgPD0gdG8pIHtcbiAgICAgICAgY29uc3Qgc2xpZGVJbmRleCA9IGdldFNsaWRlSW5kZXgoaSk7XG4gICAgICAgIGlmICh0eXBlb2YgcHJldmlvdXNUbyA9PT0gJ3VuZGVmaW5lZCcgfHwgZm9yY2UpIHtcbiAgICAgICAgICBhcHBlbmRJbmRleGVzLnB1c2goc2xpZGVJbmRleCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGkgPiBwcmV2aW91c1RvKSBhcHBlbmRJbmRleGVzLnB1c2goc2xpZGVJbmRleCk7XG4gICAgICAgICAgaWYgKGkgPCBwcmV2aW91c0Zyb20pIHByZXBlbmRJbmRleGVzLnB1c2goc2xpZGVJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYXBwZW5kSW5kZXhlcy5mb3JFYWNoKGluZGV4ID0+IHtcbiAgICAgIHN3aXBlci5zbGlkZXNFbC5hcHBlbmQocmVuZGVyU2xpZGUoc2xpZGVzW2luZGV4XSwgaW5kZXgpKTtcbiAgICB9KTtcbiAgICBpZiAoaXNMb29wKSB7XG4gICAgICBmb3IgKGxldCBpID0gcHJlcGVuZEluZGV4ZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBwcmVwZW5kSW5kZXhlc1tpXTtcbiAgICAgICAgc3dpcGVyLnNsaWRlc0VsLnByZXBlbmQocmVuZGVyU2xpZGUoc2xpZGVzW2luZGV4XSwgaW5kZXgpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcHJlcGVuZEluZGV4ZXMuc29ydCgoYSwgYikgPT4gYiAtIGEpO1xuICAgICAgcHJlcGVuZEluZGV4ZXMuZm9yRWFjaChpbmRleCA9PiB7XG4gICAgICAgIHN3aXBlci5zbGlkZXNFbC5wcmVwZW5kKHJlbmRlclNsaWRlKHNsaWRlc1tpbmRleF0sIGluZGV4KSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxlbWVudENoaWxkcmVuKHN3aXBlci5zbGlkZXNFbCwgJy5zd2lwZXItc2xpZGUsIHN3aXBlci1zbGlkZScpLmZvckVhY2goc2xpZGVFbCA9PiB7XG4gICAgICBzbGlkZUVsLnN0eWxlW29mZnNldFByb3BdID0gYCR7b2Zmc2V0fXB4YDtcbiAgICB9KTtcbiAgICBvblJlbmRlcmVkKCk7XG4gIH1cbiAgZnVuY3Rpb24gYXBwZW5kU2xpZGUoc2xpZGVzKSB7XG4gICAgaWYgKHR5cGVvZiBzbGlkZXMgPT09ICdvYmplY3QnICYmICdsZW5ndGgnIGluIHNsaWRlcykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGlkZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKHNsaWRlc1tpXSkgc3dpcGVyLnZpcnR1YWwuc2xpZGVzLnB1c2goc2xpZGVzW2ldKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3dpcGVyLnZpcnR1YWwuc2xpZGVzLnB1c2goc2xpZGVzKTtcbiAgICB9XG4gICAgdXBkYXRlKHRydWUpO1xuICB9XG4gIGZ1bmN0aW9uIHByZXBlbmRTbGlkZShzbGlkZXMpIHtcbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHN3aXBlci5hY3RpdmVJbmRleDtcbiAgICBsZXQgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleCArIDE7XG4gICAgbGV0IG51bWJlck9mTmV3U2xpZGVzID0gMTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzbGlkZXMpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNsaWRlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoc2xpZGVzW2ldKSBzd2lwZXIudmlydHVhbC5zbGlkZXMudW5zaGlmdChzbGlkZXNbaV0pO1xuICAgICAgfVxuICAgICAgbmV3QWN0aXZlSW5kZXggPSBhY3RpdmVJbmRleCArIHNsaWRlcy5sZW5ndGg7XG4gICAgICBudW1iZXJPZk5ld1NsaWRlcyA9IHNsaWRlcy5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXBlci52aXJ0dWFsLnNsaWRlcy51bnNoaWZ0KHNsaWRlcyk7XG4gICAgfVxuICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWwuY2FjaGUpIHtcbiAgICAgIGNvbnN0IGNhY2hlID0gc3dpcGVyLnZpcnR1YWwuY2FjaGU7XG4gICAgICBjb25zdCBuZXdDYWNoZSA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMoY2FjaGUpLmZvckVhY2goY2FjaGVkSW5kZXggPT4ge1xuICAgICAgICBjb25zdCBjYWNoZWRFbCA9IGNhY2hlW2NhY2hlZEluZGV4XTtcbiAgICAgICAgY29uc3QgY2FjaGVkRWxJbmRleCA9IGNhY2hlZEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1zd2lwZXItc2xpZGUtaW5kZXgnKTtcbiAgICAgICAgaWYgKGNhY2hlZEVsSW5kZXgpIHtcbiAgICAgICAgICBjYWNoZWRFbC5zZXRBdHRyaWJ1dGUoJ2RhdGEtc3dpcGVyLXNsaWRlLWluZGV4JywgcGFyc2VJbnQoY2FjaGVkRWxJbmRleCwgMTApICsgbnVtYmVyT2ZOZXdTbGlkZXMpO1xuICAgICAgICB9XG4gICAgICAgIG5ld0NhY2hlW3BhcnNlSW50KGNhY2hlZEluZGV4LCAxMCkgKyBudW1iZXJPZk5ld1NsaWRlc10gPSBjYWNoZWRFbDtcbiAgICAgIH0pO1xuICAgICAgc3dpcGVyLnZpcnR1YWwuY2FjaGUgPSBuZXdDYWNoZTtcbiAgICB9XG4gICAgdXBkYXRlKHRydWUpO1xuICAgIHN3aXBlci5zbGlkZVRvKG5ld0FjdGl2ZUluZGV4LCAwKTtcbiAgfVxuICBmdW5jdGlvbiByZW1vdmVTbGlkZShzbGlkZXNJbmRleGVzKSB7XG4gICAgaWYgKHR5cGVvZiBzbGlkZXNJbmRleGVzID09PSAndW5kZWZpbmVkJyB8fCBzbGlkZXNJbmRleGVzID09PSBudWxsKSByZXR1cm47XG4gICAgbGV0IGFjdGl2ZUluZGV4ID0gc3dpcGVyLmFjdGl2ZUluZGV4O1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNsaWRlc0luZGV4ZXMpKSB7XG4gICAgICBmb3IgKGxldCBpID0gc2xpZGVzSW5kZXhlcy5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgICAgICBzd2lwZXIudmlydHVhbC5zbGlkZXMuc3BsaWNlKHNsaWRlc0luZGV4ZXNbaV0sIDEpO1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy52aXJ0dWFsLmNhY2hlKSB7XG4gICAgICAgICAgZGVsZXRlIHN3aXBlci52aXJ0dWFsLmNhY2hlW3NsaWRlc0luZGV4ZXNbaV1dO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzbGlkZXNJbmRleGVzW2ldIDwgYWN0aXZlSW5kZXgpIGFjdGl2ZUluZGV4IC09IDE7XG4gICAgICAgIGFjdGl2ZUluZGV4ID0gTWF0aC5tYXgoYWN0aXZlSW5kZXgsIDApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzd2lwZXIudmlydHVhbC5zbGlkZXMuc3BsaWNlKHNsaWRlc0luZGV4ZXMsIDEpO1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbC5jYWNoZSkge1xuICAgICAgICBkZWxldGUgc3dpcGVyLnZpcnR1YWwuY2FjaGVbc2xpZGVzSW5kZXhlc107XG4gICAgICB9XG4gICAgICBpZiAoc2xpZGVzSW5kZXhlcyA8IGFjdGl2ZUluZGV4KSBhY3RpdmVJbmRleCAtPSAxO1xuICAgICAgYWN0aXZlSW5kZXggPSBNYXRoLm1heChhY3RpdmVJbmRleCwgMCk7XG4gICAgfVxuICAgIHVwZGF0ZSh0cnVlKTtcbiAgICBzd2lwZXIuc2xpZGVUbyhhY3RpdmVJbmRleCwgMCk7XG4gIH1cbiAgZnVuY3Rpb24gcmVtb3ZlQWxsU2xpZGVzKCkge1xuICAgIHN3aXBlci52aXJ0dWFsLnNsaWRlcyA9IFtdO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWwuY2FjaGUpIHtcbiAgICAgIHN3aXBlci52aXJ0dWFsLmNhY2hlID0ge307XG4gICAgfVxuICAgIHVwZGF0ZSh0cnVlKTtcbiAgICBzd2lwZXIuc2xpZGVUbygwLCAwKTtcbiAgfVxuICBvbignYmVmb3JlSW5pdCcsICgpID0+IHtcbiAgICBpZiAoIXN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkKSByZXR1cm47XG4gICAgbGV0IGRvbVNsaWRlc0Fzc2lnbmVkO1xuICAgIGlmICh0eXBlb2Ygc3dpcGVyLnBhc3NlZFBhcmFtcy52aXJ0dWFsLnNsaWRlcyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnN0IHNsaWRlcyA9IHN3aXBlci5zbGlkZXNFbC5xdWVyeVNlbGVjdG9yQWxsKGAuJHtzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3N9LCBzd2lwZXItc2xpZGVgKTtcbiAgICAgIGlmIChzbGlkZXMgJiYgc2xpZGVzLmxlbmd0aCkge1xuICAgICAgICBzd2lwZXIudmlydHVhbC5zbGlkZXMgPSBbLi4uc2xpZGVzXTtcbiAgICAgICAgZG9tU2xpZGVzQXNzaWduZWQgPSB0cnVlO1xuICAgICAgICBzbGlkZXMuZm9yRWFjaCgoc2xpZGVFbCwgc2xpZGVJbmRleCkgPT4ge1xuICAgICAgICAgIHNsaWRlRWwuc2V0QXR0cmlidXRlKCdkYXRhLXN3aXBlci1zbGlkZS1pbmRleCcsIHNsaWRlSW5kZXgpO1xuICAgICAgICAgIHN3aXBlci52aXJ0dWFsLmNhY2hlW3NsaWRlSW5kZXhdID0gc2xpZGVFbDtcbiAgICAgICAgICBzbGlkZUVsLnJlbW92ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFkb21TbGlkZXNBc3NpZ25lZCkge1xuICAgICAgc3dpcGVyLnZpcnR1YWwuc2xpZGVzID0gc3dpcGVyLnBhcmFtcy52aXJ0dWFsLnNsaWRlcztcbiAgICB9XG4gICAgc3dpcGVyLmNsYXNzTmFtZXMucHVzaChgJHtzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9dmlydHVhbGApO1xuICAgIHN3aXBlci5wYXJhbXMud2F0Y2hTbGlkZXNQcm9ncmVzcyA9IHRydWU7XG4gICAgc3dpcGVyLm9yaWdpbmFsUGFyYW1zLndhdGNoU2xpZGVzUHJvZ3Jlc3MgPSB0cnVlO1xuICAgIGlmICghc3dpcGVyLnBhcmFtcy5pbml0aWFsU2xpZGUpIHtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH1cbiAgfSk7XG4gIG9uKCdzZXRUcmFuc2xhdGUnLCAoKSA9PiB7XG4gICAgaWYgKCFzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCkgcmV0dXJuO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmNzc01vZGUgJiYgIXN3aXBlci5faW1tZWRpYXRlVmlydHVhbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KGNzc01vZGVUaW1lb3V0KTtcbiAgICAgIGNzc01vZGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHVwZGF0ZSgpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlKCk7XG4gICAgfVxuICB9KTtcbiAgb24oJ2luaXQgdXBkYXRlIHJlc2l6ZScsICgpID0+IHtcbiAgICBpZiAoIXN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkKSByZXR1cm47XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuY3NzTW9kZSkge1xuICAgICAgc2V0Q1NTUHJvcGVydHkoc3dpcGVyLndyYXBwZXJFbCwgJy0tc3dpcGVyLXZpcnR1YWwtc2l6ZScsIGAke3N3aXBlci52aXJ0dWFsU2l6ZX1weGApO1xuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5hc3NpZ24oc3dpcGVyLnZpcnR1YWwsIHtcbiAgICBhcHBlbmRTbGlkZSxcbiAgICBwcmVwZW5kU2xpZGUsXG4gICAgcmVtb3ZlU2xpZGUsXG4gICAgcmVtb3ZlQWxsU2xpZGVzLFxuICAgIHVwZGF0ZVxuICB9KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/virtual/virtual.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/modules/zoom/zoom.js\":\r\n/*!**************************************************!*\\\r\n  !*** ./node_modules/swiper/modules/zoom/zoom.js ***!\r\n  \\**************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ Zoom)\\n/* harmony export */ });\\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \\\"./node_modules/ssr-window/ssr-window.esm.js\\\");\\n/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\n\\nfunction Zoom({\\n  swiper,\\n  extendParams,\\n  on,\\n  emit\\n}) {\\n  const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n  extendParams({\\n    zoom: {\\n      enabled: false,\\n      maxRatio: 3,\\n      minRatio: 1,\\n      toggle: true,\\n      containerClass: 'swiper-zoom-container',\\n      zoomedSlideClass: 'swiper-slide-zoomed'\\n    }\\n  });\\n  swiper.zoom = {\\n    enabled: false\\n  };\\n  let currentScale = 1;\\n  let isScaling = false;\\n  let fakeGestureTouched;\\n  let fakeGestureMoved;\\n  const evCache = [];\\n  const gesture = {\\n    slideEl: undefined,\\n    slideWidth: undefined,\\n    slideHeight: undefined,\\n    imageEl: undefined,\\n    imageWrapEl: undefined,\\n    maxRatio: 3\\n  };\\n  const image = {\\n    isTouched: undefined,\\n    isMoved: undefined,\\n    currentX: undefined,\\n    currentY: undefined,\\n    minX: undefined,\\n    minY: undefined,\\n    maxX: undefined,\\n    maxY: undefined,\\n    width: undefined,\\n    height: undefined,\\n    startX: undefined,\\n    startY: undefined,\\n    touchesStart: {},\\n    touchesCurrent: {}\\n  };\\n  const velocity = {\\n    x: undefined,\\n    y: undefined,\\n    prevPositionX: undefined,\\n    prevPositionY: undefined,\\n    prevTime: undefined\\n  };\\n  let scale = 1;\\n  Object.defineProperty(swiper.zoom, 'scale', {\\n    get() {\\n      return scale;\\n    },\\n    set(value) {\\n      if (scale !== value) {\\n        const imageEl = gesture.imageEl;\\n        const slideEl = gesture.slideEl;\\n        emit('zoomChange', value, imageEl, slideEl);\\n      }\\n      scale = value;\\n    }\\n  });\\n  function getDistanceBetweenTouches() {\\n    if (evCache.length < 2) return 1;\\n    const x1 = evCache[0].pageX;\\n    const y1 = evCache[0].pageY;\\n    const x2 = evCache[1].pageX;\\n    const y2 = evCache[1].pageY;\\n    const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\\n    return distance;\\n  }\\n  function getSlideSelector() {\\n    return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\\n  }\\n  function eventWithinSlide(e) {\\n    const slideSelector = getSlideSelector();\\n    if (e.target.matches(slideSelector)) return true;\\n    if (swiper.slides.filter(slideEl => slideEl.contains(e.target)).length > 0) return true;\\n    return false;\\n  }\\n  function eventWithinZoomContainer(e) {\\n    const selector = `.${swiper.params.zoom.containerClass}`;\\n    if (e.target.matches(selector)) return true;\\n    if ([...swiper.el.querySelectorAll(selector)].filter(containerEl => containerEl.contains(e.target)).length > 0) return true;\\n    return false;\\n  }\\n\\n  // Events\\n  function onGestureStart(e) {\\n    if (!eventWithinSlide(e)) return;\\n    const params = swiper.params.zoom;\\n    fakeGestureTouched = false;\\n    fakeGestureMoved = false;\\n    evCache.push(e);\\n    if (evCache.length < 2) {\\n      return;\\n    }\\n    fakeGestureTouched = true;\\n    gesture.scaleStart = getDistanceBetweenTouches();\\n    if (!gesture.slideEl) {\\n      gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\\n      if (!gesture.slideEl) gesture.slideEl = swiper.slides[swiper.activeIndex];\\n      let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\\n      if (imageEl) {\\n        imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\\n      }\\n      gesture.imageEl = imageEl;\\n      if (imageEl) {\\n        gesture.imageWrapEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementParents)(gesture.imageEl, `.${params.containerClass}`)[0];\\n      } else {\\n        gesture.imageWrapEl = undefined;\\n      }\\n      if (!gesture.imageWrapEl) {\\n        gesture.imageEl = undefined;\\n        return;\\n      }\\n      gesture.maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\\n    }\\n    if (gesture.imageEl) {\\n      gesture.imageEl.style.transitionDuration = '0ms';\\n    }\\n    isScaling = true;\\n  }\\n  function onGestureChange(e) {\\n    if (!eventWithinSlide(e)) return;\\n    const params = swiper.params.zoom;\\n    const zoom = swiper.zoom;\\n    const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\\n    if (pointerIndex >= 0) evCache[pointerIndex] = e;\\n    if (evCache.length < 2) {\\n      return;\\n    }\\n    fakeGestureMoved = true;\\n    gesture.scaleMove = getDistanceBetweenTouches();\\n    if (!gesture.imageEl) {\\n      return;\\n    }\\n    zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\\n    if (zoom.scale > gesture.maxRatio) {\\n      zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\\n    }\\n    if (zoom.scale < params.minRatio) {\\n      zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\\n    }\\n    gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\\n  }\\n  function onGestureEnd(e) {\\n    if (!eventWithinSlide(e)) return;\\n    const params = swiper.params.zoom;\\n    const zoom = swiper.zoom;\\n    const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\\n    if (pointerIndex >= 0) evCache.splice(pointerIndex, 1);\\n    if (!fakeGestureTouched || !fakeGestureMoved) {\\n      return;\\n    }\\n    fakeGestureTouched = false;\\n    fakeGestureMoved = false;\\n    if (!gesture.imageE) return;\\n    zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\\n    gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`;\\n    gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\\n    currentScale = zoom.scale;\\n    isScaling = false;\\n    if (zoom.scale === 1) gesture.slideEl = undefined;\\n  }\\n  function onTouchStart(e) {\\n    const device = swiper.device;\\n    if (!gesture.imageEl) return;\\n    if (image.isTouched) return;\\n    if (device.android && e.cancelable) e.preventDefault();\\n    image.isTouched = true;\\n    image.touchesStart.x = e.pageX;\\n    image.touchesStart.y = e.pageY;\\n  }\\n  function onTouchMove(e) {\\n    if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return;\\n    const zoom = swiper.zoom;\\n    if (!gesture.imageEl) return;\\n    swiper.allowClick = false;\\n    if (!image.isTouched || !gesture.slideEl) return;\\n    if (!image.isMoved) {\\n      image.width = gesture.imageEl.offsetWidth;\\n      image.height = gesture.imageEl.offsetHeight;\\n      image.startX = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.getTranslate)(gesture.imageWrapEl, 'x') || 0;\\n      image.startY = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.getTranslate)(gesture.imageWrapEl, 'y') || 0;\\n      gesture.slideWidth = gesture.slideEl.offsetWidth;\\n      gesture.slideHeight = gesture.slideEl.offsetHeight;\\n      gesture.imageWrapEl.style.transitionDuration = '0ms';\\n    }\\n    // Define if we need image drag\\n    const scaledWidth = image.width * zoom.scale;\\n    const scaledHeight = image.height * zoom.scale;\\n    if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\\n    image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\\n    image.maxX = -image.minX;\\n    image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\\n    image.maxY = -image.minY;\\n    image.touchesCurrent.x = evCache.length > 0 ? evCache[0].pageX : e.pageX;\\n    image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY;\\n    if (!image.isMoved && !isScaling) {\\n      if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {\\n        image.isTouched = false;\\n        return;\\n      }\\n      if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {\\n        image.isTouched = false;\\n        return;\\n      }\\n    }\\n    if (e.cancelable) {\\n      e.preventDefault();\\n    }\\n    e.stopPropagation();\\n    image.isMoved = true;\\n    image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;\\n    image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;\\n    if (image.currentX < image.minX) {\\n      image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\\n    }\\n    if (image.currentX > image.maxX) {\\n      image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\\n    }\\n    if (image.currentY < image.minY) {\\n      image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\\n    }\\n    if (image.currentY > image.maxY) {\\n      image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\\n    }\\n\\n    // Velocity\\n    if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\\n    if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\\n    if (!velocity.prevTime) velocity.prevTime = Date.now();\\n    velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\\n    velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\\n    if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\\n    if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\\n    velocity.prevPositionX = image.touchesCurrent.x;\\n    velocity.prevPositionY = image.touchesCurrent.y;\\n    velocity.prevTime = Date.now();\\n    gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\\n  }\\n  function onTouchEnd() {\\n    const zoom = swiper.zoom;\\n    if (!gesture.imageEl) return;\\n    if (!image.isTouched || !image.isMoved) {\\n      image.isTouched = false;\\n      image.isMoved = false;\\n      return;\\n    }\\n    image.isTouched = false;\\n    image.isMoved = false;\\n    let momentumDurationX = 300;\\n    let momentumDurationY = 300;\\n    const momentumDistanceX = velocity.x * momentumDurationX;\\n    const newPositionX = image.currentX + momentumDistanceX;\\n    const momentumDistanceY = velocity.y * momentumDurationY;\\n    const newPositionY = image.currentY + momentumDistanceY;\\n\\n    // Fix duration\\n    if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\\n    if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\\n    const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\\n    image.currentX = newPositionX;\\n    image.currentY = newPositionY;\\n\\n    // Define if we need image drag\\n    const scaledWidth = image.width * zoom.scale;\\n    const scaledHeight = image.height * zoom.scale;\\n    image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\\n    image.maxX = -image.minX;\\n    image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\\n    image.maxY = -image.minY;\\n    image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\\n    image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\\n    gesture.imageWrapEl.style.transitionDuration = `${momentumDuration}ms`;\\n    gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\\n  }\\n  function onTransitionEnd() {\\n    const zoom = swiper.zoom;\\n    if (gesture.slideEl && swiper.previousIndex !== swiper.activeIndex) {\\n      if (gesture.imageEl) {\\n        gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\\n      }\\n      if (gesture.imageWrapEl) {\\n        gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\\n      }\\n      zoom.scale = 1;\\n      currentScale = 1;\\n      gesture.slideEl = undefined;\\n      gesture.imageEl = undefined;\\n      gesture.imageWrapEl = undefined;\\n    }\\n  }\\n  function zoomIn(e) {\\n    const zoom = swiper.zoom;\\n    const params = swiper.params.zoom;\\n    if (!gesture.slideEl) {\\n      if (e && e.target) {\\n        gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\\n      }\\n      if (!gesture.slideEl) {\\n        if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\\n          gesture.slideEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementChildren)(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\\n        } else {\\n          gesture.slideEl = swiper.slides[swiper.activeIndex];\\n        }\\n      }\\n      let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\\n      if (imageEl) {\\n        imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\\n      }\\n      gesture.imageEl = imageEl;\\n      if (imageEl) {\\n        gesture.imageWrapEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementParents)(gesture.imageEl, `.${params.containerClass}`)[0];\\n      } else {\\n        gesture.imageWrapEl = undefined;\\n      }\\n    }\\n    if (!gesture.imageEl || !gesture.imageWrapEl) return;\\n    if (swiper.params.cssMode) {\\n      swiper.wrapperEl.style.overflow = 'hidden';\\n      swiper.wrapperEl.style.touchAction = 'none';\\n    }\\n    gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\\n    let touchX;\\n    let touchY;\\n    let offsetX;\\n    let offsetY;\\n    let diffX;\\n    let diffY;\\n    let translateX;\\n    let translateY;\\n    let imageWidth;\\n    let imageHeight;\\n    let scaledWidth;\\n    let scaledHeight;\\n    let translateMinX;\\n    let translateMinY;\\n    let translateMaxX;\\n    let translateMaxY;\\n    let slideWidth;\\n    let slideHeight;\\n    if (typeof image.touchesStart.x === 'undefined' && e) {\\n      touchX = e.pageX;\\n      touchY = e.pageY;\\n    } else {\\n      touchX = image.touchesStart.x;\\n      touchY = image.touchesStart.y;\\n    }\\n    const forceZoomRatio = typeof e === 'number' ? e : null;\\n    if (currentScale === 1 && forceZoomRatio) {\\n      touchX = undefined;\\n      touchY = undefined;\\n    }\\n    zoom.scale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\\n    currentScale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\\n    if (e && !(currentScale === 1 && forceZoomRatio)) {\\n      slideWidth = gesture.slideEl.offsetWidth;\\n      slideHeight = gesture.slideEl.offsetHeight;\\n      offsetX = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementOffset)(gesture.slideEl).left + window.scrollX;\\n      offsetY = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementOffset)(gesture.slideEl).top + window.scrollY;\\n      diffX = offsetX + slideWidth / 2 - touchX;\\n      diffY = offsetY + slideHeight / 2 - touchY;\\n      imageWidth = gesture.imageEl.offsetWidth;\\n      imageHeight = gesture.imageEl.offsetHeight;\\n      scaledWidth = imageWidth * zoom.scale;\\n      scaledHeight = imageHeight * zoom.scale;\\n      translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\\n      translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\\n      translateMaxX = -translateMinX;\\n      translateMaxY = -translateMinY;\\n      translateX = diffX * zoom.scale;\\n      translateY = diffY * zoom.scale;\\n      if (translateX < translateMinX) {\\n        translateX = translateMinX;\\n      }\\n      if (translateX > translateMaxX) {\\n        translateX = translateMaxX;\\n      }\\n      if (translateY < translateMinY) {\\n        translateY = translateMinY;\\n      }\\n      if (translateY > translateMaxY) {\\n        translateY = translateMaxY;\\n      }\\n    } else {\\n      translateX = 0;\\n      translateY = 0;\\n    }\\n    gesture.imageWrapEl.style.transitionDuration = '300ms';\\n    gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`;\\n    gesture.imageEl.style.transitionDuration = '300ms';\\n    gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\\n  }\\n  function zoomOut() {\\n    const zoom = swiper.zoom;\\n    const params = swiper.params.zoom;\\n    if (!gesture.slideEl) {\\n      if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\\n        gesture.slideEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementChildren)(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\\n      } else {\\n        gesture.slideEl = swiper.slides[swiper.activeIndex];\\n      }\\n      let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\\n      if (imageEl) {\\n        imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\\n      }\\n      gesture.imageEl = imageEl;\\n      if (imageEl) {\\n        gesture.imageWrapEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementParents)(gesture.imageEl, `.${params.containerClass}`)[0];\\n      } else {\\n        gesture.imageWrapEl = undefined;\\n      }\\n    }\\n    if (!gesture.imageEl || !gesture.imageWrapEl) return;\\n    if (swiper.params.cssMode) {\\n      swiper.wrapperEl.style.overflow = '';\\n      swiper.wrapperEl.style.touchAction = '';\\n    }\\n    zoom.scale = 1;\\n    currentScale = 1;\\n    gesture.imageWrapEl.style.transitionDuration = '300ms';\\n    gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\\n    gesture.imageEl.style.transitionDuration = '300ms';\\n    gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\\n    gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\\n    gesture.slideEl = undefined;\\n  }\\n\\n  // Toggle Zoom\\n  function zoomToggle(e) {\\n    const zoom = swiper.zoom;\\n    if (zoom.scale && zoom.scale !== 1) {\\n      // Zoom Out\\n      zoomOut();\\n    } else {\\n      // Zoom In\\n      zoomIn(e);\\n    }\\n  }\\n  function getListeners() {\\n    const passiveListener = swiper.params.passiveListeners ? {\\n      passive: true,\\n      capture: false\\n    } : false;\\n    const activeListenerWithCapture = swiper.params.passiveListeners ? {\\n      passive: false,\\n      capture: true\\n    } : true;\\n    return {\\n      passiveListener,\\n      activeListenerWithCapture\\n    };\\n  }\\n\\n  // Attach/Detach Events\\n  function enable() {\\n    const zoom = swiper.zoom;\\n    if (zoom.enabled) return;\\n    zoom.enabled = true;\\n    const {\\n      passiveListener,\\n      activeListenerWithCapture\\n    } = getListeners();\\n\\n    // Scale image\\n\\n    swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener);\\n    swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture);\\n    ['pointerup', 'pointercancel'].forEach(eventName => {\\n      swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener);\\n    });\\n\\n    // Move image\\n    swiper.wrapperEl.addEventListener('pointermove', onTouchMove, activeListenerWithCapture);\\n  }\\n  function disable() {\\n    const zoom = swiper.zoom;\\n    if (!zoom.enabled) return;\\n    zoom.enabled = false;\\n    const {\\n      passiveListener,\\n      activeListenerWithCapture\\n    } = getListeners();\\n\\n    // Scale image\\n    swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener);\\n    swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture);\\n    ['pointerup', 'pointercancel'].forEach(eventName => {\\n      swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener);\\n    });\\n\\n    // Move image\\n    swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture);\\n  }\\n  on('init', () => {\\n    if (swiper.params.zoom.enabled) {\\n      enable();\\n    }\\n  });\\n  on('destroy', () => {\\n    disable();\\n  });\\n  on('touchStart', (_s, e) => {\\n    if (!swiper.zoom.enabled) return;\\n    onTouchStart(e);\\n  });\\n  on('touchEnd', (_s, e) => {\\n    if (!swiper.zoom.enabled) return;\\n    onTouchEnd(e);\\n  });\\n  on('doubleTap', (_s, e) => {\\n    if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\\n      zoomToggle(e);\\n    }\\n  });\\n  on('transitionEnd', () => {\\n    if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\\n      onTransitionEnd();\\n    }\\n  });\\n  on('slideChange', () => {\\n    if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\\n      onTransitionEnd();\\n    }\\n  });\\n  Object.assign(swiper.zoom, {\\n    enable,\\n    disable,\\n    in: zoomIn,\\n    out: zoomOut,\\n    toggle: zoomToggle\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvem9vbS96b29tLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF1QztBQUM4RDtBQUN0RjtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELGlCQUFpQixxREFBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELHlCQUF5QjtBQUM1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGtDQUFrQztBQUMzRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2Qyx5QkFBeUI7QUFDdEU7QUFDQSxzREFBc0Qsc0JBQXNCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsZ0VBQWMsc0JBQXNCLHNCQUFzQjtBQUN4RixRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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c0I7QUFDeEYsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0Msd0JBQXdCO0FBQ2hFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL21vZHVsZXMvem9vbS96b29tLmpzP2FjMTIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0V2luZG93IH0gZnJvbSAnc3NyLXdpbmRvdyc7XG5pbXBvcnQgeyBlbGVtZW50Q2hpbGRyZW4sIGVsZW1lbnRPZmZzZXQsIGVsZW1lbnRQYXJlbnRzLCBnZXRUcmFuc2xhdGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMuanMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gWm9vbSh7XG4gIHN3aXBlcixcbiAgZXh0ZW5kUGFyYW1zLFxuICBvbixcbiAgZW1pdFxufSkge1xuICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgZXh0ZW5kUGFyYW1zKHtcbiAgICB6b29tOiB7XG4gICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgIG1heFJhdGlvOiAzLFxuICAgICAgbWluUmF0aW86IDEsXG4gICAgICB0b2dnbGU6IHRydWUsXG4gICAgICBjb250YWluZXJDbGFzczogJ3N3aXBlci16b29tLWNvbnRhaW5lcicsXG4gICAgICB6b29tZWRTbGlkZUNsYXNzOiAnc3dpcGVyLXNsaWRlLXpvb21lZCdcbiAgICB9XG4gIH0pO1xuICBzd2lwZXIuem9vbSA9IHtcbiAgICBlbmFibGVkOiBmYWxzZVxuICB9O1xuICBsZXQgY3VycmVudFNjYWxlID0gMTtcbiAgbGV0IGlzU2NhbGluZyA9IGZhbHNlO1xuICBsZXQgZmFrZUdlc3R1cmVUb3VjaGVkO1xuICBsZXQgZmFrZUdlc3R1cmVNb3ZlZDtcbiAgY29uc3QgZXZDYWNoZSA9IFtdO1xuICBjb25zdCBnZXN0dXJlID0ge1xuICAgIHNsaWRlRWw6IHVuZGVmaW5lZCxcbiAgICBzbGlkZVdpZHRoOiB1bmRlZmluZWQsXG4gICAgc2xpZGVIZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICBpbWFnZUVsOiB1bmRlZmluZWQsXG4gICAgaW1hZ2VXcmFwRWw6IHVuZGVmaW5lZCxcbiAgICBtYXhSYXRpbzogM1xuICB9O1xuICBjb25zdCBpbWFnZSA9IHtcbiAgICBpc1RvdWNoZWQ6IHVuZGVmaW5lZCxcbiAgICBpc01vdmVkOiB1bmRlZmluZWQsXG4gICAgY3VycmVudFg6IHVuZGVmaW5lZCxcbiAgICBjdXJyZW50WTogdW5kZWZpbmVkLFxuICAgIG1pblg6IHVuZGVmaW5lZCxcbiAgICBtaW5ZOiB1bmRlZmluZWQsXG4gICAgbWF4WDogdW5kZWZpbmVkLFxuICAgIG1heFk6IHVuZGVmaW5lZCxcbiAgICB3aWR0aDogdW5kZWZpbmVkLFxuICAgIGhlaWdodDogdW5kZWZpbmVkLFxuICAgIHN0YXJ0WDogdW5kZWZpbmVkLFxuICAgIHN0YXJ0WTogdW5kZWZpbmVkLFxuICAgIHRvdWNoZXNTdGFydDoge30sXG4gICAgdG91Y2hlc0N1cnJlbnQ6IHt9XG4gIH07XG4gIGNvbnN0IHZlbG9jaXR5ID0ge1xuICAgIHg6IHVuZGVmaW5lZCxcbiAgICB5OiB1bmRlZmluZWQsXG4gICAgcHJldlBvc2l0aW9uWDogdW5kZWZpbmVkLFxuICAgIHByZXZQb3NpdGlvblk6IHVuZGVmaW5lZCxcbiAgICBwcmV2VGltZTogdW5kZWZpbmVkXG4gIH07XG4gIGxldCBzY2FsZSA9IDE7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzd2lwZXIuem9vbSwgJ3NjYWxlJywge1xuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBzY2FsZTtcbiAgICB9LFxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgaWYgKHNjYWxlICE9PSB2YWx1ZSkge1xuICAgICAgICBjb25zdCBpbWFnZUVsID0gZ2VzdHVyZS5pbWFnZUVsO1xuICAgICAgICBjb25zdCBzbGlkZUVsID0gZ2VzdHVyZS5zbGlkZUVsO1xuICAgICAgICBlbWl0KCd6b29tQ2hhbmdlJywgdmFsdWUsIGltYWdlRWwsIHNsaWRlRWwpO1xuICAgICAgfVxuICAgICAgc2NhbGUgPSB2YWx1ZTtcbiAgICB9XG4gIH0pO1xuICBmdW5jdGlvbiBnZXREaXN0YW5jZUJldHdlZW5Ub3VjaGVzKCkge1xuICAgIGlmIChldkNhY2hlLmxlbmd0aCA8IDIpIHJldHVybiAxO1xuICAgIGNvbnN0IHgxID0gZXZDYWNoZVswXS5wYWdlWDtcbiAgICBjb25zdCB5MSA9IGV2Q2FjaGVbMF0ucGFnZVk7XG4gICAgY29uc3QgeDIgPSBldkNhY2hlWzFdLnBhZ2VYO1xuICAgIGNvbnN0IHkyID0gZXZDYWNoZVsxXS5wYWdlWTtcbiAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguc3FydCgoeDIgLSB4MSkgKiogMiArICh5MiAtIHkxKSAqKiAyKTtcbiAgICByZXR1cm4gZGlzdGFuY2U7XG4gIH1cbiAgZnVuY3Rpb24gZ2V0U2xpZGVTZWxlY3RvcigpIHtcbiAgICByZXR1cm4gc3dpcGVyLmlzRWxlbWVudCA/IGBzd2lwZXItc2xpZGVgIDogYC4ke3N3aXBlci5wYXJhbXMuc2xpZGVDbGFzc31gO1xuICB9XG4gIGZ1bmN0aW9uIGV2ZW50V2l0aGluU2xpZGUoZSkge1xuICAgIGNvbnN0IHNsaWRlU2VsZWN0b3IgPSBnZXRTbGlkZVNlbGVjdG9yKCk7XG4gICAgaWYgKGUudGFyZ2V0Lm1hdGNoZXMoc2xpZGVTZWxlY3RvcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChzd2lwZXIuc2xpZGVzLmZpbHRlcihzbGlkZUVsID0+IHNsaWRlRWwuY29udGFpbnMoZS50YXJnZXQpKS5sZW5ndGggPiAwKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZnVuY3Rpb24gZXZlbnRXaXRoaW5ab29tQ29udGFpbmVyKGUpIHtcbiAgICBjb25zdCBzZWxlY3RvciA9IGAuJHtzd2lwZXIucGFyYW1zLnpvb20uY29udGFpbmVyQ2xhc3N9YDtcbiAgICBpZiAoZS50YXJnZXQubWF0Y2hlcyhzZWxlY3RvcikpIHJldHVybiB0cnVlO1xuICAgIGlmIChbLi4uc3dpcGVyLmVsLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpXS5maWx0ZXIoY29udGFpbmVyRWwgPT4gY29udGFpbmVyRWwuY29udGFpbnMoZS50YXJnZXQpKS5sZW5ndGggPiAwKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBFdmVudHNcbiAgZnVuY3Rpb24gb25HZXN0dXJlU3RhcnQoZSkge1xuICAgIGlmICghZXZlbnRXaXRoaW5TbGlkZShlKSkgcmV0dXJuO1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuem9vbTtcbiAgICBmYWtlR2VzdHVyZVRvdWNoZWQgPSBmYWxzZTtcbiAgICBmYWtlR2VzdHVyZU1vdmVkID0gZmFsc2U7XG4gICAgZXZDYWNoZS5wdXNoKGUpO1xuICAgIGlmIChldkNhY2hlLmxlbmd0aCA8IDIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZmFrZUdlc3R1cmVUb3VjaGVkID0gdHJ1ZTtcbiAgICBnZXN0dXJlLnNjYWxlU3RhcnQgPSBnZXREaXN0YW5jZUJldHdlZW5Ub3VjaGVzKCk7XG4gICAgaWYgKCFnZXN0dXJlLnNsaWRlRWwpIHtcbiAgICAgIGdlc3R1cmUuc2xpZGVFbCA9IGUudGFyZ2V0LmNsb3Nlc3QoYC4ke3N3aXBlci5wYXJhbXMuc2xpZGVDbGFzc30sIHN3aXBlci1zbGlkZWApO1xuICAgICAgaWYgKCFnZXN0dXJlLnNsaWRlRWwpIGdlc3R1cmUuc2xpZGVFbCA9IHN3aXBlci5zbGlkZXNbc3dpcGVyLmFjdGl2ZUluZGV4XTtcbiAgICAgIGxldCBpbWFnZUVsID0gZ2VzdHVyZS5zbGlkZUVsLnF1ZXJ5U2VsZWN0b3IoYC4ke3BhcmFtcy5jb250YWluZXJDbGFzc31gKTtcbiAgICAgIGlmIChpbWFnZUVsKSB7XG4gICAgICAgIGltYWdlRWwgPSBpbWFnZUVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ3BpY3R1cmUsIGltZywgc3ZnLCBjYW52YXMsIC5zd2lwZXItem9vbS10YXJnZXQnKVswXTtcbiAgICAgIH1cbiAgICAgIGdlc3R1cmUuaW1hZ2VFbCA9IGltYWdlRWw7XG4gICAgICBpZiAoaW1hZ2VFbCkge1xuICAgICAgICBnZXN0dXJlLmltYWdlV3JhcEVsID0gZWxlbWVudFBhcmVudHMoZ2VzdHVyZS5pbWFnZUVsLCBgLiR7cGFyYW1zLmNvbnRhaW5lckNsYXNzfWApWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2VzdHVyZS5pbWFnZVdyYXBFbCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICghZ2VzdHVyZS5pbWFnZVdyYXBFbCkge1xuICAgICAgICBnZXN0dXJlLmltYWdlRWwgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGdlc3R1cmUubWF4UmF0aW8gPSBnZXN0dXJlLmltYWdlV3JhcEVsLmdldEF0dHJpYnV0ZSgnZGF0YS1zd2lwZXItem9vbScpIHx8IHBhcmFtcy5tYXhSYXRpbztcbiAgICB9XG4gICAgaWYgKGdlc3R1cmUuaW1hZ2VFbCkge1xuICAgICAgZ2VzdHVyZS5pbWFnZUVsLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcwbXMnO1xuICAgIH1cbiAgICBpc1NjYWxpbmcgPSB0cnVlO1xuICB9XG4gIGZ1bmN0aW9uIG9uR2VzdHVyZUNoYW5nZShlKSB7XG4gICAgaWYgKCFldmVudFdpdGhpblNsaWRlKGUpKSByZXR1cm47XG4gICAgY29uc3QgcGFyYW1zID0gc3dpcGVyLnBhcmFtcy56b29tO1xuICAgIGNvbnN0IHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICBjb25zdCBwb2ludGVySW5kZXggPSBldkNhY2hlLmZpbmRJbmRleChjYWNoZWRFdiA9PiBjYWNoZWRFdi5wb2ludGVySWQgPT09IGUucG9pbnRlcklkKTtcbiAgICBpZiAocG9pbnRlckluZGV4ID49IDApIGV2Q2FjaGVbcG9pbnRlckluZGV4XSA9IGU7XG4gICAgaWYgKGV2Q2FjaGUubGVuZ3RoIDwgMikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmYWtlR2VzdHVyZU1vdmVkID0gdHJ1ZTtcbiAgICBnZXN0dXJlLnNjYWxlTW92ZSA9IGdldERpc3RhbmNlQmV0d2VlblRvdWNoZXMoKTtcbiAgICBpZiAoIWdlc3R1cmUuaW1hZ2VFbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB6b29tLnNjYWxlID0gZ2VzdHVyZS5zY2FsZU1vdmUgLyBnZXN0dXJlLnNjYWxlU3RhcnQgKiBjdXJyZW50U2NhbGU7XG4gICAgaWYgKHpvb20uc2NhbGUgPiBnZXN0dXJlLm1heFJhdGlvKSB7XG4gICAgICB6b29tLnNjYWxlID0gZ2VzdHVyZS5tYXhSYXRpbyAtIDEgKyAoem9vbS5zY2FsZSAtIGdlc3R1cmUubWF4UmF0aW8gKyAxKSAqKiAwLjU7XG4gICAgfVxuICAgIGlmICh6b29tLnNjYWxlIDwgcGFyYW1zLm1pblJhdGlvKSB7XG4gICAgICB6b29tLnNjYWxlID0gcGFyYW1zLm1pblJhdGlvICsgMSAtIChwYXJhbXMubWluUmF0aW8gLSB6b29tLnNjYWxlICsgMSkgKiogMC41O1xuICAgIH1cbiAgICBnZXN0dXJlLmltYWdlRWwuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZSgke3pvb20uc2NhbGV9KWA7XG4gIH1cbiAgZnVuY3Rpb24gb25HZXN0dXJlRW5kKGUpIHtcbiAgICBpZiAoIWV2ZW50V2l0aGluU2xpZGUoZSkpIHJldHVybjtcbiAgICBjb25zdCBwYXJhbXMgPSBzd2lwZXIucGFyYW1zLnpvb207XG4gICAgY29uc3Qgem9vbSA9IHN3aXBlci56b29tO1xuICAgIGNvbnN0IHBvaW50ZXJJbmRleCA9IGV2Q2FjaGUuZmluZEluZGV4KGNhY2hlZEV2ID0+IGNhY2hlZEV2LnBvaW50ZXJJZCA9PT0gZS5wb2ludGVySWQpO1xuICAgIGlmIChwb2ludGVySW5kZXggPj0gMCkgZXZDYWNoZS5zcGxpY2UocG9pbnRlckluZGV4LCAxKTtcbiAgICBpZiAoIWZha2VHZXN0dXJlVG91Y2hlZCB8fCAhZmFrZUdlc3R1cmVNb3ZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmYWtlR2VzdHVyZVRvdWNoZWQgPSBmYWxzZTtcbiAgICBmYWtlR2VzdHVyZU1vdmVkID0gZmFsc2U7XG4gICAgaWYgKCFnZXN0dXJlLmltYWdlRSkgcmV0dXJuO1xuICAgIHpvb20uc2NhbGUgPSBNYXRoLm1heChNYXRoLm1pbih6b29tLnNjYWxlLCBnZXN0dXJlLm1heFJhdGlvKSwgcGFyYW1zLm1pblJhdGlvKTtcbiAgICBnZXN0dXJlLmltYWdlRWwuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gYCR7c3dpcGVyLnBhcmFtcy5zcGVlZH1tc2A7XG4gICAgZ2VzdHVyZS5pbWFnZUVsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoJHt6b29tLnNjYWxlfSlgO1xuICAgIGN1cnJlbnRTY2FsZSA9IHpvb20uc2NhbGU7XG4gICAgaXNTY2FsaW5nID0gZmFsc2U7XG4gICAgaWYgKHpvb20uc2NhbGUgPT09IDEpIGdlc3R1cmUuc2xpZGVFbCA9IHVuZGVmaW5lZDtcbiAgfVxuICBmdW5jdGlvbiBvblRvdWNoU3RhcnQoZSkge1xuICAgIGNvbnN0IGRldmljZSA9IHN3aXBlci5kZXZpY2U7XG4gICAgaWYgKCFnZXN0dXJlLmltYWdlRWwpIHJldHVybjtcbiAgICBpZiAoaW1hZ2UuaXNUb3VjaGVkKSByZXR1cm47XG4gICAgaWYgKGRldmljZS5hbmRyb2lkICYmIGUuY2FuY2VsYWJsZSkgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGltYWdlLmlzVG91Y2hlZCA9IHRydWU7XG4gICAgaW1hZ2UudG91Y2hlc1N0YXJ0LnggPSBlLnBhZ2VYO1xuICAgIGltYWdlLnRvdWNoZXNTdGFydC55ID0gZS5wYWdlWTtcbiAgfVxuICBmdW5jdGlvbiBvblRvdWNoTW92ZShlKSB7XG4gICAgaWYgKCFldmVudFdpdGhpblNsaWRlKGUpIHx8ICFldmVudFdpdGhpblpvb21Db250YWluZXIoZSkpIHJldHVybjtcbiAgICBjb25zdCB6b29tID0gc3dpcGVyLnpvb207XG4gICAgaWYgKCFnZXN0dXJlLmltYWdlRWwpIHJldHVybjtcbiAgICBzd2lwZXIuYWxsb3dDbGljayA9IGZhbHNlO1xuICAgIGlmICghaW1hZ2UuaXNUb3VjaGVkIHx8ICFnZXN0dXJlLnNsaWRlRWwpIHJldHVybjtcbiAgICBpZiAoIWltYWdlLmlzTW92ZWQpIHtcbiAgICAgIGltYWdlLndpZHRoID0gZ2VzdHVyZS5pbWFnZUVsLm9mZnNldFdpZHRoO1xuICAgICAgaW1hZ2UuaGVpZ2h0ID0gZ2VzdHVyZS5pbWFnZUVsLm9mZnNldEhlaWdodDtcbiAgICAgIGltYWdlLnN0YXJ0WCA9IGdldFRyYW5zbGF0ZShnZXN0dXJlLmltYWdlV3JhcEVsLCAneCcpIHx8IDA7XG4gICAgICBpbWFnZS5zdGFydFkgPSBnZXRUcmFuc2xhdGUoZ2VzdHVyZS5pbWFnZVdyYXBFbCwgJ3knKSB8fCAwO1xuICAgICAgZ2VzdHVyZS5zbGlkZVdpZHRoID0gZ2VzdHVyZS5zbGlkZUVsLm9mZnNldFdpZHRoO1xuICAgICAgZ2VzdHVyZS5zbGlkZUhlaWdodCA9IGdlc3R1cmUuc2xpZGVFbC5vZmZzZXRIZWlnaHQ7XG4gICAgICBnZXN0dXJlLmltYWdlV3JhcEVsLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9ICcwbXMnO1xuICAgIH1cbiAgICAvLyBEZWZpbmUgaWYgd2UgbmVlZCBpbWFnZSBkcmFnXG4gICAgY29uc3Qgc2NhbGVkV2lkdGggPSBpbWFnZS53aWR0aCAqIHpvb20uc2NhbGU7XG4gICAgY29uc3Qgc2NhbGVkSGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0ICogem9vbS5zY2FsZTtcbiAgICBpZiAoc2NhbGVkV2lkdGggPCBnZXN0dXJlLnNsaWRlV2lkdGggJiYgc2NhbGVkSGVpZ2h0IDwgZ2VzdHVyZS5zbGlkZUhlaWdodCkgcmV0dXJuO1xuICAgIGltYWdlLm1pblggPSBNYXRoLm1pbihnZXN0dXJlLnNsaWRlV2lkdGggLyAyIC0gc2NhbGVkV2lkdGggLyAyLCAwKTtcbiAgICBpbWFnZS5tYXhYID0gLWltYWdlLm1pblg7XG4gICAgaW1hZ2UubWluWSA9IE1hdGgubWluKGdlc3R1cmUuc2xpZGVIZWlnaHQgLyAyIC0gc2NhbGVkSGVpZ2h0IC8gMiwgMCk7XG4gICAgaW1hZ2UubWF4WSA9IC1pbWFnZS5taW5ZO1xuICAgIGltYWdlLnRvdWNoZXNDdXJyZW50LnggPSBldkNhY2hlLmxlbmd0aCA+IDAgPyBldkNhY2hlWzBdLnBhZ2VYIDogZS5wYWdlWDtcbiAgICBpbWFnZS50b3VjaGVzQ3VycmVudC55ID0gZXZDYWNoZS5sZW5ndGggPiAwID8gZXZDYWNoZVswXS5wYWdlWSA6IGUucGFnZVk7XG4gICAgaWYgKCFpbWFnZS5pc01vdmVkICYmICFpc1NjYWxpbmcpIHtcbiAgICAgIGlmIChzd2lwZXIuaXNIb3Jpem9udGFsKCkgJiYgKE1hdGguZmxvb3IoaW1hZ2UubWluWCkgPT09IE1hdGguZmxvb3IoaW1hZ2Uuc3RhcnRYKSAmJiBpbWFnZS50b3VjaGVzQ3VycmVudC54IDwgaW1hZ2UudG91Y2hlc1N0YXJ0LnggfHwgTWF0aC5mbG9vcihpbWFnZS5tYXhYKSA9PT0gTWF0aC5mbG9vcihpbWFnZS5zdGFydFgpICYmIGltYWdlLnRvdWNoZXNDdXJyZW50LnggPiBpbWFnZS50b3VjaGVzU3RhcnQueCkpIHtcbiAgICAgICAgaW1hZ2UuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghc3dpcGVyLmlzSG9yaXpvbnRhbCgpICYmIChNYXRoLmZsb29yKGltYWdlLm1pblkpID09PSBNYXRoLmZsb29yKGltYWdlLnN0YXJ0WSkgJiYgaW1hZ2UudG91Y2hlc0N1cnJlbnQueSA8IGltYWdlLnRvdWNoZXNTdGFydC55IHx8IE1hdGguZmxvb3IoaW1hZ2UubWF4WSkgPT09IE1hdGguZmxvb3IoaW1hZ2Uuc3RhcnRZKSAmJiBpbWFnZS50b3VjaGVzQ3VycmVudC55ID4gaW1hZ2UudG91Y2hlc1N0YXJ0LnkpKSB7XG4gICAgICAgIGltYWdlLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlLmNhbmNlbGFibGUpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpbWFnZS5pc01vdmVkID0gdHJ1ZTtcbiAgICBpbWFnZS5jdXJyZW50WCA9IGltYWdlLnRvdWNoZXNDdXJyZW50LnggLSBpbWFnZS50b3VjaGVzU3RhcnQueCArIGltYWdlLnN0YXJ0WDtcbiAgICBpbWFnZS5jdXJyZW50WSA9IGltYWdlLnRvdWNoZXNDdXJyZW50LnkgLSBpbWFnZS50b3VjaGVzU3RhcnQueSArIGltYWdlLnN0YXJ0WTtcbiAgICBpZiAoaW1hZ2UuY3VycmVudFggPCBpbWFnZS5taW5YKSB7XG4gICAgICBpbWFnZS5jdXJyZW50WCA9IGltYWdlLm1pblggKyAxIC0gKGltYWdlLm1pblggLSBpbWFnZS5jdXJyZW50WCArIDEpICoqIDAuODtcbiAgICB9XG4gICAgaWYgKGltYWdlLmN1cnJlbnRYID4gaW1hZ2UubWF4WCkge1xuICAgICAgaW1hZ2UuY3VycmVudFggPSBpbWFnZS5tYXhYIC0gMSArIChpbWFnZS5jdXJyZW50WCAtIGltYWdlLm1heFggKyAxKSAqKiAwLjg7XG4gICAgfVxuICAgIGlmIChpbWFnZS5jdXJyZW50WSA8IGltYWdlLm1pblkpIHtcbiAgICAgIGltYWdlLmN1cnJlbnRZID0gaW1hZ2UubWluWSArIDEgLSAoaW1hZ2UubWluWSAtIGltYWdlLmN1cnJlbnRZICsgMSkgKiogMC44O1xuICAgIH1cbiAgICBpZiAoaW1hZ2UuY3VycmVudFkgPiBpbWFnZS5tYXhZKSB7XG4gICAgICBpbWFnZS5jdXJyZW50WSA9IGltYWdlLm1heFkgLSAxICsgKGltYWdlLmN1cnJlbnRZIC0gaW1hZ2UubWF4WSArIDEpICoqIDAuODtcbiAgICB9XG5cbiAgICAvLyBWZWxvY2l0eVxuICAgIGlmICghdmVsb2NpdHkucHJldlBvc2l0aW9uWCkgdmVsb2NpdHkucHJldlBvc2l0aW9uWCA9IGltYWdlLnRvdWNoZXNDdXJyZW50Lng7XG4gICAgaWYgKCF2ZWxvY2l0eS5wcmV2UG9zaXRpb25ZKSB2ZWxvY2l0eS5wcmV2UG9zaXRpb25ZID0gaW1hZ2UudG91Y2hlc0N1cnJlbnQueTtcbiAgICBpZiAoIXZlbG9jaXR5LnByZXZUaW1lKSB2ZWxvY2l0eS5wcmV2VGltZSA9IERhdGUubm93KCk7XG4gICAgdmVsb2NpdHkueCA9IChpbWFnZS50b3VjaGVzQ3VycmVudC54IC0gdmVsb2NpdHkucHJldlBvc2l0aW9uWCkgLyAoRGF0ZS5ub3coKSAtIHZlbG9jaXR5LnByZXZUaW1lKSAvIDI7XG4gICAgdmVsb2NpdHkueSA9IChpbWFnZS50b3VjaGVzQ3VycmVudC55IC0gdmVsb2NpdHkucHJldlBvc2l0aW9uWSkgLyAoRGF0ZS5ub3coKSAtIHZlbG9jaXR5LnByZXZUaW1lKSAvIDI7XG4gICAgaWYgKE1hdGguYWJzKGltYWdlLnRvdWNoZXNDdXJyZW50LnggLSB2ZWxvY2l0eS5wcmV2UG9zaXRpb25YKSA8IDIpIHZlbG9jaXR5LnggPSAwO1xuICAgIGlmIChNYXRoLmFicyhpbWFnZS50b3VjaGVzQ3VycmVudC55IC0gdmVsb2NpdHkucHJldlBvc2l0aW9uWSkgPCAyKSB2ZWxvY2l0eS55ID0gMDtcbiAgICB2ZWxvY2l0eS5wcmV2UG9zaXRpb25YID0gaW1hZ2UudG91Y2hlc0N1cnJlbnQueDtcbiAgICB2ZWxvY2l0eS5wcmV2UG9zaXRpb25ZID0gaW1hZ2UudG91Y2hlc0N1cnJlbnQueTtcbiAgICB2ZWxvY2l0eS5wcmV2VGltZSA9IERhdGUubm93KCk7XG4gICAgZ2VzdHVyZS5pbWFnZVdyYXBFbC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoJHtpbWFnZS5jdXJyZW50WH1weCwgJHtpbWFnZS5jdXJyZW50WX1weCwwKWA7XG4gIH1cbiAgZnVuY3Rpb24gb25Ub3VjaEVuZCgpIHtcbiAgICBjb25zdCB6b29tID0gc3dpcGVyLnpvb207XG4gICAgaWYgKCFnZXN0dXJlLmltYWdlRWwpIHJldHVybjtcbiAgICBpZiAoIWltYWdlLmlzVG91Y2hlZCB8fCAhaW1hZ2UuaXNNb3ZlZCkge1xuICAgICAgaW1hZ2UuaXNUb3VjaGVkID0gZmFsc2U7XG4gICAgICBpbWFnZS5pc01vdmVkID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGltYWdlLmlzVG91Y2hlZCA9IGZhbHNlO1xuICAgIGltYWdlLmlzTW92ZWQgPSBmYWxzZTtcbiAgICBsZXQgbW9tZW50dW1EdXJhdGlvblggPSAzMDA7XG4gICAgbGV0IG1vbWVudHVtRHVyYXRpb25ZID0gMzAwO1xuICAgIGNvbnN0IG1vbWVudHVtRGlzdGFuY2VYID0gdmVsb2NpdHkueCAqIG1vbWVudHVtRHVyYXRpb25YO1xuICAgIGNvbnN0IG5ld1Bvc2l0aW9uWCA9IGltYWdlLmN1cnJlbnRYICsgbW9tZW50dW1EaXN0YW5jZVg7XG4gICAgY29uc3QgbW9tZW50dW1EaXN0YW5jZVkgPSB2ZWxvY2l0eS55ICogbW9tZW50dW1EdXJhdGlvblk7XG4gICAgY29uc3QgbmV3UG9zaXRpb25ZID0gaW1hZ2UuY3VycmVudFkgKyBtb21lbnR1bURpc3RhbmNlWTtcblxuICAgIC8vIEZpeCBkdXJhdGlvblxuICAgIGlmICh2ZWxvY2l0eS54ICE9PSAwKSBtb21lbnR1bUR1cmF0aW9uWCA9IE1hdGguYWJzKChuZXdQb3NpdGlvblggLSBpbWFnZS5jdXJyZW50WCkgLyB2ZWxvY2l0eS54KTtcbiAgICBpZiAodmVsb2NpdHkueSAhPT0gMCkgbW9tZW50dW1EdXJhdGlvblkgPSBNYXRoLmFicygobmV3UG9zaXRpb25ZIC0gaW1hZ2UuY3VycmVudFkpIC8gdmVsb2NpdHkueSk7XG4gICAgY29uc3QgbW9tZW50dW1EdXJhdGlvbiA9IE1hdGgubWF4KG1vbWVudHVtRHVyYXRpb25YLCBtb21lbnR1bUR1cmF0aW9uWSk7XG4gICAgaW1hZ2UuY3VycmVudFggPSBuZXdQb3NpdGlvblg7XG4gICAgaW1hZ2UuY3VycmVudFkgPSBuZXdQb3NpdGlvblk7XG5cbiAgICAvLyBEZWZpbmUgaWYgd2UgbmVlZCBpbWFnZSBkcmFnXG4gICAgY29uc3Qgc2NhbGVkV2lkdGggPSBpbWFnZS53aWR0aCAqIHpvb20uc2NhbGU7XG4gICAgY29uc3Qgc2NhbGVkSGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0ICogem9vbS5zY2FsZTtcbiAgICBpbWFnZS5taW5YID0gTWF0aC5taW4oZ2VzdHVyZS5zbGlkZVdpZHRoIC8gMiAtIHNjYWxlZFdpZHRoIC8gMiwgMCk7XG4gICAgaW1hZ2UubWF4WCA9IC1pbWFnZS5taW5YO1xuICAgIGltYWdlLm1pblkgPSBNYXRoLm1pbihnZXN0dXJlLnNsaWRlSGVpZ2h0IC8gMiAtIHNjYWxlZEhlaWdodCAvIDIsIDApO1xuICAgIGltYWdlLm1heFkgPSAtaW1hZ2UubWluWTtcbiAgICBpbWFnZS5jdXJyZW50WCA9IE1hdGgubWF4KE1hdGgubWluKGltYWdlLmN1cnJlbnRYLCBpbWFnZS5tYXhYKSwgaW1hZ2UubWluWCk7XG4gICAgaW1hZ2UuY3VycmVudFkgPSBNYXRoLm1heChNYXRoLm1pbihpbWFnZS5jdXJyZW50WSwgaW1hZ2UubWF4WSksIGltYWdlLm1pblkpO1xuICAgIGdlc3R1cmUuaW1hZ2VXcmFwRWwuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gYCR7bW9tZW50dW1EdXJhdGlvbn1tc2A7XG4gICAgZ2VzdHVyZS5pbWFnZVdyYXBFbC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoJHtpbWFnZS5jdXJyZW50WH1weCwgJHtpbWFnZS5jdXJyZW50WX1weCwwKWA7XG4gIH1cbiAgZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKCkge1xuICAgIGNvbnN0IHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICBpZiAoZ2VzdHVyZS5zbGlkZUVsICYmIHN3aXBlci5wcmV2aW91c0luZGV4ICE9PSBzd2lwZXIuYWN0aXZlSW5kZXgpIHtcbiAgICAgIGlmIChnZXN0dXJlLmltYWdlRWwpIHtcbiAgICAgICAgZ2VzdHVyZS5pbWFnZUVsLnN0eWxlLnRyYW5zZm9ybSA9ICd0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoMSknO1xuICAgICAgfVxuICAgICAgaWYgKGdlc3R1cmUuaW1hZ2VXcmFwRWwpIHtcbiAgICAgICAgZ2VzdHVyZS5pbWFnZVdyYXBFbC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlM2QoMCwwLDApJztcbiAgICAgIH1cbiAgICAgIHpvb20uc2NhbGUgPSAxO1xuICAgICAgY3VycmVudFNjYWxlID0gMTtcbiAgICAgIGdlc3R1cmUuc2xpZGVFbCA9IHVuZGVmaW5lZDtcbiAgICAgIGdlc3R1cmUuaW1hZ2VFbCA9IHVuZGVmaW5lZDtcbiAgICAgIGdlc3R1cmUuaW1hZ2VXcmFwRWwgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHpvb21JbihlKSB7XG4gICAgY29uc3Qgem9vbSA9IHN3aXBlci56b29tO1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuem9vbTtcbiAgICBpZiAoIWdlc3R1cmUuc2xpZGVFbCkge1xuICAgICAgaWYgKGUgJiYgZS50YXJnZXQpIHtcbiAgICAgICAgZ2VzdHVyZS5zbGlkZUVsID0gZS50YXJnZXQuY2xvc2VzdChgLiR7c3dpcGVyLnBhcmFtcy5zbGlkZUNsYXNzfSwgc3dpcGVyLXNsaWRlYCk7XG4gICAgICB9XG4gICAgICBpZiAoIWdlc3R1cmUuc2xpZGVFbCkge1xuICAgICAgICBpZiAoc3dpcGVyLnBhcmFtcy52aXJ0dWFsICYmIHN3aXBlci5wYXJhbXMudmlydHVhbC5lbmFibGVkICYmIHN3aXBlci52aXJ0dWFsKSB7XG4gICAgICAgICAgZ2VzdHVyZS5zbGlkZUVsID0gZWxlbWVudENoaWxkcmVuKHN3aXBlci5zbGlkZXNFbCwgYC4ke3N3aXBlci5wYXJhbXMuc2xpZGVBY3RpdmVDbGFzc31gKVswXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBnZXN0dXJlLnNsaWRlRWwgPSBzd2lwZXIuc2xpZGVzW3N3aXBlci5hY3RpdmVJbmRleF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCBpbWFnZUVsID0gZ2VzdHVyZS5zbGlkZUVsLnF1ZXJ5U2VsZWN0b3IoYC4ke3BhcmFtcy5jb250YWluZXJDbGFzc31gKTtcbiAgICAgIGlmIChpbWFnZUVsKSB7XG4gICAgICAgIGltYWdlRWwgPSBpbWFnZUVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ3BpY3R1cmUsIGltZywgc3ZnLCBjYW52YXMsIC5zd2lwZXItem9vbS10YXJnZXQnKVswXTtcbiAgICAgIH1cbiAgICAgIGdlc3R1cmUuaW1hZ2VFbCA9IGltYWdlRWw7XG4gICAgICBpZiAoaW1hZ2VFbCkge1xuICAgICAgICBnZXN0dXJlLmltYWdlV3JhcEVsID0gZWxlbWVudFBhcmVudHMoZ2VzdHVyZS5pbWFnZUVsLCBgLiR7cGFyYW1zLmNvbnRhaW5lckNsYXNzfWApWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2VzdHVyZS5pbWFnZVdyYXBFbCA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFnZXN0dXJlLmltYWdlRWwgfHwgIWdlc3R1cmUuaW1hZ2VXcmFwRWwpIHJldHVybjtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5jc3NNb2RlKSB7XG4gICAgICBzd2lwZXIud3JhcHBlckVsLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICBzd2lwZXIud3JhcHBlckVsLnN0eWxlLnRvdWNoQWN0aW9uID0gJ25vbmUnO1xuICAgIH1cbiAgICBnZXN0dXJlLnNsaWRlRWwuY2xhc3NMaXN0LmFkZChgJHtwYXJhbXMuem9vbWVkU2xpZGVDbGFzc31gKTtcbiAgICBsZXQgdG91Y2hYO1xuICAgIGxldCB0b3VjaFk7XG4gICAgbGV0IG9mZnNldFg7XG4gICAgbGV0IG9mZnNldFk7XG4gICAgbGV0IGRpZmZYO1xuICAgIGxldCBkaWZmWTtcbiAgICBsZXQgdHJhbnNsYXRlWDtcbiAgICBsZXQgdHJhbnNsYXRlWTtcbiAgICBsZXQgaW1hZ2VXaWR0aDtcbiAgICBsZXQgaW1hZ2VIZWlnaHQ7XG4gICAgbGV0IHNjYWxlZFdpZHRoO1xuICAgIGxldCBzY2FsZWRIZWlnaHQ7XG4gICAgbGV0IHRyYW5zbGF0ZU1pblg7XG4gICAgbGV0IHRyYW5zbGF0ZU1pblk7XG4gICAgbGV0IHRyYW5zbGF0ZU1heFg7XG4gICAgbGV0IHRyYW5zbGF0ZU1heFk7XG4gICAgbGV0IHNsaWRlV2lkdGg7XG4gICAgbGV0IHNsaWRlSGVpZ2h0O1xuICAgIGlmICh0eXBlb2YgaW1hZ2UudG91Y2hlc1N0YXJ0LnggPT09ICd1bmRlZmluZWQnICYmIGUpIHtcbiAgICAgIHRvdWNoWCA9IGUucGFnZVg7XG4gICAgICB0b3VjaFkgPSBlLnBhZ2VZO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b3VjaFggPSBpbWFnZS50b3VjaGVzU3RhcnQueDtcbiAgICAgIHRvdWNoWSA9IGltYWdlLnRvdWNoZXNTdGFydC55O1xuICAgIH1cbiAgICBjb25zdCBmb3JjZVpvb21SYXRpbyA9IHR5cGVvZiBlID09PSAnbnVtYmVyJyA/IGUgOiBudWxsO1xuICAgIGlmIChjdXJyZW50U2NhbGUgPT09IDEgJiYgZm9yY2Vab29tUmF0aW8pIHtcbiAgICAgIHRvdWNoWCA9IHVuZGVmaW5lZDtcbiAgICAgIHRvdWNoWSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgem9vbS5zY2FsZSA9IGZvcmNlWm9vbVJhdGlvIHx8IGdlc3R1cmUuaW1hZ2VXcmFwRWwuZ2V0QXR0cmlidXRlKCdkYXRhLXN3aXBlci16b29tJykgfHwgcGFyYW1zLm1heFJhdGlvO1xuICAgIGN1cnJlbnRTY2FsZSA9IGZvcmNlWm9vbVJhdGlvIHx8IGdlc3R1cmUuaW1hZ2VXcmFwRWwuZ2V0QXR0cmlidXRlKCdkYXRhLXN3aXBlci16b29tJykgfHwgcGFyYW1zLm1heFJhdGlvO1xuICAgIGlmIChlICYmICEoY3VycmVudFNjYWxlID09PSAxICYmIGZvcmNlWm9vbVJhdGlvKSkge1xuICAgICAgc2xpZGVXaWR0aCA9IGdlc3R1cmUuc2xpZGVFbC5vZmZzZXRXaWR0aDtcbiAgICAgIHNsaWRlSGVpZ2h0ID0gZ2VzdHVyZS5zbGlkZUVsLm9mZnNldEhlaWdodDtcbiAgICAgIG9mZnNldFggPSBlbGVtZW50T2Zmc2V0KGdlc3R1cmUuc2xpZGVFbCkubGVmdCArIHdpbmRvdy5zY3JvbGxYO1xuICAgICAgb2Zmc2V0WSA9IGVsZW1lbnRPZmZzZXQoZ2VzdHVyZS5zbGlkZUVsKS50b3AgKyB3aW5kb3cuc2Nyb2xsWTtcbiAgICAgIGRpZmZYID0gb2Zmc2V0WCArIHNsaWRlV2lkdGggLyAyIC0gdG91Y2hYO1xuICAgICAgZGlmZlkgPSBvZmZzZXRZICsgc2xpZGVIZWlnaHQgLyAyIC0gdG91Y2hZO1xuICAgICAgaW1hZ2VXaWR0aCA9IGdlc3R1cmUuaW1hZ2VFbC5vZmZzZXRXaWR0aDtcbiAgICAgIGltYWdlSGVpZ2h0ID0gZ2VzdHVyZS5pbWFnZUVsLm9mZnNldEhlaWdodDtcbiAgICAgIHNjYWxlZFdpZHRoID0gaW1hZ2VXaWR0aCAqIHpvb20uc2NhbGU7XG4gICAgICBzY2FsZWRIZWlnaHQgPSBpbWFnZUhlaWdodCAqIHpvb20uc2NhbGU7XG4gICAgICB0cmFuc2xhdGVNaW5YID0gTWF0aC5taW4oc2xpZGVXaWR0aCAvIDIgLSBzY2FsZWRXaWR0aCAvIDIsIDApO1xuICAgICAgdHJhbnNsYXRlTWluWSA9IE1hdGgubWluKHNsaWRlSGVpZ2h0IC8gMiAtIHNjYWxlZEhlaWdodCAvIDIsIDApO1xuICAgICAgdHJhbnNsYXRlTWF4WCA9IC10cmFuc2xhdGVNaW5YO1xuICAgICAgdHJhbnNsYXRlTWF4WSA9IC10cmFuc2xhdGVNaW5ZO1xuICAgICAgdHJhbnNsYXRlWCA9IGRpZmZYICogem9vbS5zY2FsZTtcbiAgICAgIHRyYW5zbGF0ZVkgPSBkaWZmWSAqIHpvb20uc2NhbGU7XG4gICAgICBpZiAodHJhbnNsYXRlWCA8IHRyYW5zbGF0ZU1pblgpIHtcbiAgICAgICAgdHJhbnNsYXRlWCA9IHRyYW5zbGF0ZU1pblg7XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNsYXRlWCA+IHRyYW5zbGF0ZU1heFgpIHtcbiAgICAgICAgdHJhbnNsYXRlWCA9IHRyYW5zbGF0ZU1heFg7XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNsYXRlWSA8IHRyYW5zbGF0ZU1pblkpIHtcbiAgICAgICAgdHJhbnNsYXRlWSA9IHRyYW5zbGF0ZU1pblk7XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNsYXRlWSA+IHRyYW5zbGF0ZU1heFkpIHtcbiAgICAgICAgdHJhbnNsYXRlWSA9IHRyYW5zbGF0ZU1heFk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zbGF0ZVggPSAwO1xuICAgICAgdHJhbnNsYXRlWSA9IDA7XG4gICAgfVxuICAgIGdlc3R1cmUuaW1hZ2VXcmFwRWwuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gJzMwMG1zJztcbiAgICBnZXN0dXJlLmltYWdlV3JhcEVsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgke3RyYW5zbGF0ZVh9cHgsICR7dHJhbnNsYXRlWX1weCwwKWA7XG4gICAgZ2VzdHVyZS5pbWFnZUVsLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9ICczMDBtcyc7XG4gICAgZ2VzdHVyZS5pbWFnZUVsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgwLDAsMCkgc2NhbGUoJHt6b29tLnNjYWxlfSlgO1xuICB9XG4gIGZ1bmN0aW9uIHpvb21PdXQoKSB7XG4gICAgY29uc3Qgem9vbSA9IHN3aXBlci56b29tO1xuICAgIGNvbnN0IHBhcmFtcyA9IHN3aXBlci5wYXJhbXMuem9vbTtcbiAgICBpZiAoIWdlc3R1cmUuc2xpZGVFbCkge1xuICAgICAgaWYgKHN3aXBlci5wYXJhbXMudmlydHVhbCAmJiBzd2lwZXIucGFyYW1zLnZpcnR1YWwuZW5hYmxlZCAmJiBzd2lwZXIudmlydHVhbCkge1xuICAgICAgICBnZXN0dXJlLnNsaWRlRWwgPSBlbGVtZW50Q2hpbGRyZW4oc3dpcGVyLnNsaWRlc0VsLCBgLiR7c3dpcGVyLnBhcmFtcy5zbGlkZUFjdGl2ZUNsYXNzfWApWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2VzdHVyZS5zbGlkZUVsID0gc3dpcGVyLnNsaWRlc1tzd2lwZXIuYWN0aXZlSW5kZXhdO1xuICAgICAgfVxuICAgICAgbGV0IGltYWdlRWwgPSBnZXN0dXJlLnNsaWRlRWwucXVlcnlTZWxlY3RvcihgLiR7cGFyYW1zLmNvbnRhaW5lckNsYXNzfWApO1xuICAgICAgaWYgKGltYWdlRWwpIHtcbiAgICAgICAgaW1hZ2VFbCA9IGltYWdlRWwucXVlcnlTZWxlY3RvckFsbCgncGljdHVyZSwgaW1nLCBzdmcsIGNhbnZhcywgLnN3aXBlci16b29tLXRhcmdldCcpWzBdO1xuICAgICAgfVxuICAgICAgZ2VzdHVyZS5pbWFnZUVsID0gaW1hZ2VFbDtcbiAgICAgIGlmIChpbWFnZUVsKSB7XG4gICAgICAgIGdlc3R1cmUuaW1hZ2VXcmFwRWwgPSBlbGVtZW50UGFyZW50cyhnZXN0dXJlLmltYWdlRWwsIGAuJHtwYXJhbXMuY29udGFpbmVyQ2xhc3N9YClbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXN0dXJlLmltYWdlV3JhcEVsID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWdlc3R1cmUuaW1hZ2VFbCB8fCAhZ2VzdHVyZS5pbWFnZVdyYXBFbCkgcmV0dXJuO1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIHN3aXBlci53cmFwcGVyRWwuc3R5bGUub3ZlcmZsb3cgPSAnJztcbiAgICAgIHN3aXBlci53cmFwcGVyRWwuc3R5bGUudG91Y2hBY3Rpb24gPSAnJztcbiAgICB9XG4gICAgem9vbS5zY2FsZSA9IDE7XG4gICAgY3VycmVudFNjYWxlID0gMTtcbiAgICBnZXN0dXJlLmltYWdlV3JhcEVsLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbiA9ICczMDBtcyc7XG4gICAgZ2VzdHVyZS5pbWFnZVdyYXBFbC5zdHlsZS50cmFuc2Zvcm0gPSAndHJhbnNsYXRlM2QoMCwwLDApJztcbiAgICBnZXN0dXJlLmltYWdlRWwuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uID0gJzMwMG1zJztcbiAgICBnZXN0dXJlLmltYWdlRWwuc3R5bGUudHJhbnNmb3JtID0gJ3RyYW5zbGF0ZTNkKDAsMCwwKSBzY2FsZSgxKSc7XG4gICAgZ2VzdHVyZS5zbGlkZUVsLmNsYXNzTGlzdC5yZW1vdmUoYCR7cGFyYW1zLnpvb21lZFNsaWRlQ2xhc3N9YCk7XG4gICAgZ2VzdHVyZS5zbGlkZUVsID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gVG9nZ2xlIFpvb21cbiAgZnVuY3Rpb24gem9vbVRvZ2dsZShlKSB7XG4gICAgY29uc3Qgem9vbSA9IHN3aXBlci56b29tO1xuICAgIGlmICh6b29tLnNjYWxlICYmIHpvb20uc2NhbGUgIT09IDEpIHtcbiAgICAgIC8vIFpvb20gT3V0XG4gICAgICB6b29tT3V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFpvb20gSW5cbiAgICAgIHpvb21JbihlKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gZ2V0TGlzdGVuZXJzKCkge1xuICAgIGNvbnN0IHBhc3NpdmVMaXN0ZW5lciA9IHN3aXBlci5wYXJhbXMucGFzc2l2ZUxpc3RlbmVycyA/IHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBjYXB0dXJlOiBmYWxzZVxuICAgIH0gOiBmYWxzZTtcbiAgICBjb25zdCBhY3RpdmVMaXN0ZW5lcldpdGhDYXB0dXJlID0gc3dpcGVyLnBhcmFtcy5wYXNzaXZlTGlzdGVuZXJzID8ge1xuICAgICAgcGFzc2l2ZTogZmFsc2UsXG4gICAgICBjYXB0dXJlOiB0cnVlXG4gICAgfSA6IHRydWU7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhc3NpdmVMaXN0ZW5lcixcbiAgICAgIGFjdGl2ZUxpc3RlbmVyV2l0aENhcHR1cmVcbiAgICB9O1xuICB9XG5cbiAgLy8gQXR0YWNoL0RldGFjaCBFdmVudHNcbiAgZnVuY3Rpb24gZW5hYmxlKCkge1xuICAgIGNvbnN0IHpvb20gPSBzd2lwZXIuem9vbTtcbiAgICBpZiAoem9vbS5lbmFibGVkKSByZXR1cm47XG4gICAgem9vbS5lbmFibGVkID0gdHJ1ZTtcbiAgICBjb25zdCB7XG4gICAgICBwYXNzaXZlTGlzdGVuZXIsXG4gICAgICBhY3RpdmVMaXN0ZW5lcldpdGhDYXB0dXJlXG4gICAgfSA9IGdldExpc3RlbmVycygpO1xuXG4gICAgLy8gU2NhbGUgaW1hZ2VcblxuICAgIHN3aXBlci53cmFwcGVyRWwuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCBvbkdlc3R1cmVTdGFydCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICBzd2lwZXIud3JhcHBlckVsLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgb25HZXN0dXJlQ2hhbmdlLCBhY3RpdmVMaXN0ZW5lcldpdGhDYXB0dXJlKTtcbiAgICBbJ3BvaW50ZXJ1cCcsICdwb2ludGVyY2FuY2VsJ10uZm9yRWFjaChldmVudE5hbWUgPT4ge1xuICAgICAgc3dpcGVyLndyYXBwZXJFbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgb25HZXN0dXJlRW5kLCBwYXNzaXZlTGlzdGVuZXIpO1xuICAgIH0pO1xuXG4gICAgLy8gTW92ZSBpbWFnZVxuICAgIHN3aXBlci53cmFwcGVyRWwuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBvblRvdWNoTW92ZSwgYWN0aXZlTGlzdGVuZXJXaXRoQ2FwdHVyZSk7XG4gIH1cbiAgZnVuY3Rpb24gZGlzYWJsZSgpIHtcbiAgICBjb25zdCB6b29tID0gc3dpcGVyLnpvb207XG4gICAgaWYgKCF6b29tLmVuYWJsZWQpIHJldHVybjtcbiAgICB6b29tLmVuYWJsZWQgPSBmYWxzZTtcbiAgICBjb25zdCB7XG4gICAgICBwYXNzaXZlTGlzdGVuZXIsXG4gICAgICBhY3RpdmVMaXN0ZW5lcldpdGhDYXB0dXJlXG4gICAgfSA9IGdldExpc3RlbmVycygpO1xuXG4gICAgLy8gU2NhbGUgaW1hZ2VcbiAgICBzd2lwZXIud3JhcHBlckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgb25HZXN0dXJlU3RhcnQsIHBhc3NpdmVMaXN0ZW5lcik7XG4gICAgc3dpcGVyLndyYXBwZXJFbC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIG9uR2VzdHVyZUNoYW5nZSwgYWN0aXZlTGlzdGVuZXJXaXRoQ2FwdHVyZSk7XG4gICAgWydwb2ludGVydXAnLCAncG9pbnRlcmNhbmNlbCddLmZvckVhY2goZXZlbnROYW1lID0+IHtcbiAgICAgIHN3aXBlci53cmFwcGVyRWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIG9uR2VzdHVyZUVuZCwgcGFzc2l2ZUxpc3RlbmVyKTtcbiAgICB9KTtcblxuICAgIC8vIE1vdmUgaW1hZ2VcbiAgICBzd2lwZXIud3JhcHBlckVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgb25Ub3VjaE1vdmUsIGFjdGl2ZUxpc3RlbmVyV2l0aENhcHR1cmUpO1xuICB9XG4gIG9uKCdpbml0JywgKCkgPT4ge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLnpvb20uZW5hYmxlZCkge1xuICAgICAgZW5hYmxlKCk7XG4gICAgfVxuICB9KTtcbiAgb24oJ2Rlc3Ryb3knLCAoKSA9PiB7XG4gICAgZGlzYWJsZSgpO1xuICB9KTtcbiAgb24oJ3RvdWNoU3RhcnQnLCAoX3MsIGUpID0+IHtcbiAgICBpZiAoIXN3aXBlci56b29tLmVuYWJsZWQpIHJldHVybjtcbiAgICBvblRvdWNoU3RhcnQoZSk7XG4gIH0pO1xuICBvbigndG91Y2hFbmQnLCAoX3MsIGUpID0+IHtcbiAgICBpZiAoIXN3aXBlci56b29tLmVuYWJsZWQpIHJldHVybjtcbiAgICBvblRvdWNoRW5kKGUpO1xuICB9KTtcbiAgb24oJ2RvdWJsZVRhcCcsIChfcywgZSkgPT4ge1xuICAgIGlmICghc3dpcGVyLmFuaW1hdGluZyAmJiBzd2lwZXIucGFyYW1zLnpvb20uZW5hYmxlZCAmJiBzd2lwZXIuem9vbS5lbmFibGVkICYmIHN3aXBlci5wYXJhbXMuem9vbS50b2dnbGUpIHtcbiAgICAgIHpvb21Ub2dnbGUoZSk7XG4gICAgfVxuICB9KTtcbiAgb24oJ3RyYW5zaXRpb25FbmQnLCAoKSA9PiB7XG4gICAgaWYgKHN3aXBlci56b29tLmVuYWJsZWQgJiYgc3dpcGVyLnBhcmFtcy56b29tLmVuYWJsZWQpIHtcbiAgICAgIG9uVHJhbnNpdGlvbkVuZCgpO1xuICAgIH1cbiAgfSk7XG4gIG9uKCdzbGlkZUNoYW5nZScsICgpID0+IHtcbiAgICBpZiAoc3dpcGVyLnpvb20uZW5hYmxlZCAmJiBzd2lwZXIucGFyYW1zLnpvb20uZW5hYmxlZCAmJiBzd2lwZXIucGFyYW1zLmNzc01vZGUpIHtcbiAgICAgIG9uVHJhbnNpdGlvbkVuZCgpO1xuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5hc3NpZ24oc3dpcGVyLnpvb20sIHtcbiAgICBlbmFibGUsXG4gICAgZGlzYWJsZSxcbiAgICBpbjogem9vbUluLFxuICAgIG91dDogem9vbU91dCxcbiAgICB0b2dnbGU6IHpvb21Ub2dnbGVcbiAgfSk7XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/modules/zoom/zoom.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/shared/classes-to-selector.js\":\r\n/*!***********************************************************!*\\\r\n  !*** ./node_modules/swiper/shared/classes-to-selector.js ***!\r\n  \\***********************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ classesToSelector)\\n/* harmony export */ });\\nfunction classesToSelector(classes = '') {\\n  return `.${classes.trim().replace(/([\\\\.:!\\\\/])/g, '\\\\\\\\$1') // eslint-disable-line\\n  .replace(/ /g, '.')}`;\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL3NoYXJlZC9jbGFzc2VzLXRvLXNlbGVjdG9yLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBZTtBQUNmLGFBQWE7QUFDYixzQkFBc0I7QUFDdEIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvc2hhcmVkL2NsYXNzZXMtdG8tc2VsZWN0b3IuanM/MjEzMyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjbGFzc2VzVG9TZWxlY3RvcihjbGFzc2VzID0gJycpIHtcbiAgcmV0dXJuIGAuJHtjbGFzc2VzLnRyaW0oKS5yZXBsYWNlKC8oW1xcLjohXFwvXSkvZywgJ1xcXFwkMScpIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgLnJlcGxhY2UoLyAvZywgJy4nKX1gO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/shared/classes-to-selector.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/shared/create-element-if-not-defined.js\":\r\n/*!*********************************************************************!*\\\r\n  !*** ./node_modules/swiper/shared/create-element-if-not-defined.js ***!\r\n  \\*********************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ createElementIfNotDefined)\\n/* harmony export */ });\\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\nfunction createElementIfNotDefined(swiper, originalParams, params, checkProps) {\\n  if (swiper.params.createElements) {\\n    Object.keys(checkProps).forEach(key => {\\n      if (!params[key] && params.auto === true) {\\n        let element = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementChildren)(swiper.el, `.${checkProps[key]}`)[0];\\n        if (!element) {\\n          element = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.createElement)('div', checkProps[key]);\\n          element.className = checkProps[key];\\n          swiper.el.append(element);\\n        }\\n        params[key] = element;\\n        originalParams[key] = element;\\n      }\\n    });\\n  }\\n  return params;\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL3NoYXJlZC9jcmVhdGUtZWxlbWVudC1pZi1ub3QtZGVmaW5lZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUE0RDtBQUM3QztBQUNmO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiwwREFBZSxnQkFBZ0IsZ0JBQWdCO0FBQ3JFO0FBQ0Esb0JBQW9CLHdEQUFhO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvc2hhcmVkL2NyZWF0ZS1lbGVtZW50LWlmLW5vdC1kZWZpbmVkLmpzPzRmOWQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgZWxlbWVudENoaWxkcmVuIH0gZnJvbSAnLi91dGlscy5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVFbGVtZW50SWZOb3REZWZpbmVkKHN3aXBlciwgb3JpZ2luYWxQYXJhbXMsIHBhcmFtcywgY2hlY2tQcm9wcykge1xuICBpZiAoc3dpcGVyLnBhcmFtcy5jcmVhdGVFbGVtZW50cykge1xuICAgIE9iamVjdC5rZXlzKGNoZWNrUHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICghcGFyYW1zW2tleV0gJiYgcGFyYW1zLmF1dG8gPT09IHRydWUpIHtcbiAgICAgICAgbGV0IGVsZW1lbnQgPSBlbGVtZW50Q2hpbGRyZW4oc3dpcGVyLmVsLCBgLiR7Y2hlY2tQcm9wc1trZXldfWApWzBdO1xuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgICBlbGVtZW50ID0gY3JlYXRlRWxlbWVudCgnZGl2JywgY2hlY2tQcm9wc1trZXldKTtcbiAgICAgICAgICBlbGVtZW50LmNsYXNzTmFtZSA9IGNoZWNrUHJvcHNba2V5XTtcbiAgICAgICAgICBzd2lwZXIuZWwuYXBwZW5kKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHBhcmFtc1trZXldID0gZWxlbWVudDtcbiAgICAgICAgb3JpZ2luYWxQYXJhbXNba2V5XSA9IGVsZW1lbnQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHBhcmFtcztcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/shared/create-element-if-not-defined.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/shared/create-shadow.js\":\r\n/*!*****************************************************!*\\\r\n  !*** ./node_modules/swiper/shared/create-shadow.js ***!\r\n  \\*****************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ createShadow)\\n/* harmony export */ });\\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\nfunction createShadow(params, slideEl, side) {\\n  const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}`;\\n  const shadowContainer = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.getSlideTransformEl)(slideEl);\\n  let shadowEl = shadowContainer.querySelector(`.${shadowClass}`);\\n  if (!shadowEl) {\\n    shadowEl = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.createElement)('div', `swiper-slide-shadow${side ? `-${side}` : ''}`);\\n    shadowContainer.append(shadowEl);\\n  }\\n  return shadowEl;\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL3NoYXJlZC9jcmVhdGUtc2hhZG93LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWdFO0FBQ2pEO0FBQ2YsNENBQTRDLFdBQVcsS0FBSyxPQUFPO0FBQ25FLDBCQUEwQiw4REFBbUI7QUFDN0MsbURBQW1ELFlBQVk7QUFDL0Q7QUFDQSxlQUFlLHdEQUFhLDhCQUE4QixXQUFXLEtBQUssT0FBTztBQUNqRjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9zaGFyZWQvY3JlYXRlLXNoYWRvdy5qcz8yMTMxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIGdldFNsaWRlVHJhbnNmb3JtRWwgfSBmcm9tICcuL3V0aWxzLmpzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVNoYWRvdyhwYXJhbXMsIHNsaWRlRWwsIHNpZGUpIHtcbiAgY29uc3Qgc2hhZG93Q2xhc3MgPSBgc3dpcGVyLXNsaWRlLXNoYWRvdyR7c2lkZSA/IGAtJHtzaWRlfWAgOiAnJ31gO1xuICBjb25zdCBzaGFkb3dDb250YWluZXIgPSBnZXRTbGlkZVRyYW5zZm9ybUVsKHNsaWRlRWwpO1xuICBsZXQgc2hhZG93RWwgPSBzaGFkb3dDb250YWluZXIucXVlcnlTZWxlY3RvcihgLiR7c2hhZG93Q2xhc3N9YCk7XG4gIGlmICghc2hhZG93RWwpIHtcbiAgICBzaGFkb3dFbCA9IGNyZWF0ZUVsZW1lbnQoJ2RpdicsIGBzd2lwZXItc2xpZGUtc2hhZG93JHtzaWRlID8gYC0ke3NpZGV9YCA6ICcnfWApO1xuICAgIHNoYWRvd0NvbnRhaW5lci5hcHBlbmQoc2hhZG93RWwpO1xuICB9XG4gIHJldHVybiBzaGFkb3dFbDtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/shared/create-shadow.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/shared/effect-init.js\":\r\n/*!***************************************************!*\\\r\n  !*** ./node_modules/swiper/shared/effect-init.js ***!\r\n  \\***************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ effectInit)\\n/* harmony export */ });\\nfunction effectInit(params) {\\n  const {\\n    effect,\\n    swiper,\\n    on,\\n    setTranslate,\\n    setTransition,\\n    overwriteParams,\\n    perspective,\\n    recreateShadows,\\n    getEffectParams\\n  } = params;\\n  on('beforeInit', () => {\\n    if (swiper.params.effect !== effect) return;\\n    swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\\n    if (perspective && perspective()) {\\n      swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\\n    }\\n    const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\\n    Object.assign(swiper.params, overwriteParamsResult);\\n    Object.assign(swiper.originalParams, overwriteParamsResult);\\n  });\\n  on('setTranslate', () => {\\n    if (swiper.params.effect !== effect) return;\\n    setTranslate();\\n  });\\n  on('setTransition', (_s, duration) => {\\n    if (swiper.params.effect !== effect) return;\\n    setTransition(duration);\\n  });\\n  on('transitionEnd', () => {\\n    if (swiper.params.effect !== effect) return;\\n    if (recreateShadows) {\\n      if (!getEffectParams || !getEffectParams().slideShadows) return;\\n      // remove shadows\\n      swiper.slides.forEach(slideEl => {\\n        slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => shadowEl.remove());\\n      });\\n      // create new one\\n      recreateShadows();\\n    }\\n  });\\n  let requireUpdateOnVirtual;\\n  on('virtualUpdate', () => {\\n    if (swiper.params.effect !== effect) return;\\n    if (!swiper.slides.length) {\\n      requireUpdateOnVirtual = true;\\n    }\\n    requestAnimationFrame(() => {\\n      if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {\\n        setTranslate();\\n        requireUpdateOnVirtual = false;\\n      }\\n    });\\n  });\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL3NoYXJlZC9lZmZlY3QtaW5pdC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsOEJBQThCLHFDQUFxQyxFQUFFLE9BQU87QUFDNUU7QUFDQSxnQ0FBZ0MscUNBQXFDO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL3NoYXJlZC9lZmZlY3QtaW5pdC5qcz84NDRiIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGVmZmVjdEluaXQocGFyYW1zKSB7XG4gIGNvbnN0IHtcbiAgICBlZmZlY3QsXG4gICAgc3dpcGVyLFxuICAgIG9uLFxuICAgIHNldFRyYW5zbGF0ZSxcbiAgICBzZXRUcmFuc2l0aW9uLFxuICAgIG92ZXJ3cml0ZVBhcmFtcyxcbiAgICBwZXJzcGVjdGl2ZSxcbiAgICByZWNyZWF0ZVNoYWRvd3MsXG4gICAgZ2V0RWZmZWN0UGFyYW1zXG4gIH0gPSBwYXJhbXM7XG4gIG9uKCdiZWZvcmVJbml0JywgKCkgPT4ge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gZWZmZWN0KSByZXR1cm47XG4gICAgc3dpcGVyLmNsYXNzTmFtZXMucHVzaChgJHtzd2lwZXIucGFyYW1zLmNvbnRhaW5lck1vZGlmaWVyQ2xhc3N9JHtlZmZlY3R9YCk7XG4gICAgaWYgKHBlcnNwZWN0aXZlICYmIHBlcnNwZWN0aXZlKCkpIHtcbiAgICAgIHN3aXBlci5jbGFzc05hbWVzLnB1c2goYCR7c3dpcGVyLnBhcmFtcy5jb250YWluZXJNb2RpZmllckNsYXNzfTNkYCk7XG4gICAgfVxuICAgIGNvbnN0IG92ZXJ3cml0ZVBhcmFtc1Jlc3VsdCA9IG92ZXJ3cml0ZVBhcmFtcyA/IG92ZXJ3cml0ZVBhcmFtcygpIDoge307XG4gICAgT2JqZWN0LmFzc2lnbihzd2lwZXIucGFyYW1zLCBvdmVyd3JpdGVQYXJhbXNSZXN1bHQpO1xuICAgIE9iamVjdC5hc3NpZ24oc3dpcGVyLm9yaWdpbmFsUGFyYW1zLCBvdmVyd3JpdGVQYXJhbXNSZXN1bHQpO1xuICB9KTtcbiAgb24oJ3NldFRyYW5zbGF0ZScsICgpID0+IHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09IGVmZmVjdCkgcmV0dXJuO1xuICAgIHNldFRyYW5zbGF0ZSgpO1xuICB9KTtcbiAgb24oJ3NldFRyYW5zaXRpb24nLCAoX3MsIGR1cmF0aW9uKSA9PiB7XG4gICAgaWYgKHN3aXBlci5wYXJhbXMuZWZmZWN0ICE9PSBlZmZlY3QpIHJldHVybjtcbiAgICBzZXRUcmFuc2l0aW9uKGR1cmF0aW9uKTtcbiAgfSk7XG4gIG9uKCd0cmFuc2l0aW9uRW5kJywgKCkgPT4ge1xuICAgIGlmIChzd2lwZXIucGFyYW1zLmVmZmVjdCAhPT0gZWZmZWN0KSByZXR1cm47XG4gICAgaWYgKHJlY3JlYXRlU2hhZG93cykge1xuICAgICAgaWYgKCFnZXRFZmZlY3RQYXJhbXMgfHwgIWdldEVmZmVjdFBhcmFtcygpLnNsaWRlU2hhZG93cykgcmV0dXJuO1xuICAgICAgLy8gcmVtb3ZlIHNoYWRvd3NcbiAgICAgIHN3aXBlci5zbGlkZXMuZm9yRWFjaChzbGlkZUVsID0+IHtcbiAgICAgICAgc2xpZGVFbC5xdWVyeVNlbGVjdG9yQWxsKCcuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AsIC5zd2lwZXItc2xpZGUtc2hhZG93LXJpZ2h0LCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20sIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQnKS5mb3JFYWNoKHNoYWRvd0VsID0+IHNoYWRvd0VsLnJlbW92ZSgpKTtcbiAgICAgIH0pO1xuICAgICAgLy8gY3JlYXRlIG5ldyBvbmVcbiAgICAgIHJlY3JlYXRlU2hhZG93cygpO1xuICAgIH1cbiAgfSk7XG4gIGxldCByZXF1aXJlVXBkYXRlT25WaXJ0dWFsO1xuICBvbigndmlydHVhbFVwZGF0ZScsICgpID0+IHtcbiAgICBpZiAoc3dpcGVyLnBhcmFtcy5lZmZlY3QgIT09IGVmZmVjdCkgcmV0dXJuO1xuICAgIGlmICghc3dpcGVyLnNsaWRlcy5sZW5ndGgpIHtcbiAgICAgIHJlcXVpcmVVcGRhdGVPblZpcnR1YWwgPSB0cnVlO1xuICAgIH1cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgaWYgKHJlcXVpcmVVcGRhdGVPblZpcnR1YWwgJiYgc3dpcGVyLnNsaWRlcyAmJiBzd2lwZXIuc2xpZGVzLmxlbmd0aCkge1xuICAgICAgICBzZXRUcmFuc2xhdGUoKTtcbiAgICAgICAgcmVxdWlyZVVwZGF0ZU9uVmlydHVhbCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/shared/effect-init.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/shared/effect-target.js\":\r\n/*!*****************************************************!*\\\r\n  !*** ./node_modules/swiper/shared/effect-target.js ***!\r\n  \\*****************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ effectTarget)\\n/* harmony export */ });\\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\nfunction effectTarget(effectParams, slideEl) {\\n  const transformEl = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.getSlideTransformEl)(slideEl);\\n  if (transformEl !== slideEl) {\\n    transformEl.style.backfaceVisibility = 'hidden';\\n    transformEl.style['-webkit-backface-visibility'] = 'hidden';\\n  }\\n  return transformEl;\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL3NoYXJlZC9lZmZlY3QtdGFyZ2V0LmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQWlEO0FBQ2xDO0FBQ2Ysc0JBQXNCLDhEQUFtQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvc2hhcmVkL2VmZmVjdC10YXJnZXQuanM/ZThiYiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRTbGlkZVRyYW5zZm9ybUVsIH0gZnJvbSAnLi91dGlscy5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlZmZlY3RUYXJnZXQoZWZmZWN0UGFyYW1zLCBzbGlkZUVsKSB7XG4gIGNvbnN0IHRyYW5zZm9ybUVsID0gZ2V0U2xpZGVUcmFuc2Zvcm1FbChzbGlkZUVsKTtcbiAgaWYgKHRyYW5zZm9ybUVsICE9PSBzbGlkZUVsKSB7XG4gICAgdHJhbnNmb3JtRWwuc3R5bGUuYmFja2ZhY2VWaXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgdHJhbnNmb3JtRWwuc3R5bGVbJy13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eSddID0gJ2hpZGRlbic7XG4gIH1cbiAgcmV0dXJuIHRyYW5zZm9ybUVsO1xufSJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/shared/effect-target.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/shared/effect-virtual-transition-end.js\":\r\n/*!*********************************************************************!*\\\r\n  !*** ./node_modules/swiper/shared/effect-virtual-transition-end.js ***!\r\n  \\*********************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"default\\\": () => (/* binding */ effectVirtualTransitionEnd)\\n/* harmony export */ });\\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.js */ \\\"./node_modules/swiper/shared/utils.js\\\");\\n\\nfunction effectVirtualTransitionEnd({\\n  swiper,\\n  duration,\\n  transformElements,\\n  allSlides\\n}) {\\n  const {\\n    activeIndex\\n  } = swiper;\\n  const getSlide = el => {\\n    if (!el.parentElement) {\\n      // assume shadow root\\n      const slide = swiper.slides.filter(slideEl => slideEl.shadowEl && slideEl.shadowEl === el.parentNode)[0];\\n      return slide;\\n    }\\n    return el.parentElement;\\n  };\\n  if (swiper.params.virtualTranslate && duration !== 0) {\\n    let eventTriggered = false;\\n    let transitionEndTarget;\\n    if (allSlides) {\\n      transitionEndTarget = transformElements;\\n    } else {\\n      transitionEndTarget = transformElements.filter(transformEl => {\\n        const el = transformEl.classList.contains('swiper-slide-transform') ? getSlide(transformEl) : transformEl;\\n        return (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementIndex)(el) === activeIndex;\\n      });\\n    }\\n    transitionEndTarget.forEach(el => {\\n      (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementTransitionEnd)(el, () => {\\n        if (eventTriggered) return;\\n        if (!swiper || swiper.destroyed) return;\\n        eventTriggered = true;\\n        swiper.animating = false;\\n        const evt = new window.CustomEvent('transitionend', {\\n          bubbles: true,\\n          cancelable: true\\n        });\\n        swiper.wrapperEl.dispatchEvent(evt);\\n      });\\n    });\\n  }\\n}//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL3NoYXJlZC9lZmZlY3QtdmlydHVhbC10cmFuc2l0aW9uLWVuZC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFnRTtBQUNqRDtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLGVBQWUsdURBQVk7QUFDM0IsT0FBTztBQUNQO0FBQ0E7QUFDQSxNQUFNLCtEQUFvQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9zaGFyZWQvZWZmZWN0LXZpcnR1YWwtdHJhbnNpdGlvbi1lbmQuanM/MDljOSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBlbGVtZW50SW5kZXgsIGVsZW1lbnRUcmFuc2l0aW9uRW5kIH0gZnJvbSAnLi91dGlscy5qcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlZmZlY3RWaXJ0dWFsVHJhbnNpdGlvbkVuZCh7XG4gIHN3aXBlcixcbiAgZHVyYXRpb24sXG4gIHRyYW5zZm9ybUVsZW1lbnRzLFxuICBhbGxTbGlkZXNcbn0pIHtcbiAgY29uc3Qge1xuICAgIGFjdGl2ZUluZGV4XG4gIH0gPSBzd2lwZXI7XG4gIGNvbnN0IGdldFNsaWRlID0gZWwgPT4ge1xuICAgIGlmICghZWwucGFyZW50RWxlbWVudCkge1xuICAgICAgLy8gYXNzdW1lIHNoYWRvdyByb290XG4gICAgICBjb25zdCBzbGlkZSA9IHN3aXBlci5zbGlkZXMuZmlsdGVyKHNsaWRlRWwgPT4gc2xpZGVFbC5zaGFkb3dFbCAmJiBzbGlkZUVsLnNoYWRvd0VsID09PSBlbC5wYXJlbnROb2RlKVswXTtcbiAgICAgIHJldHVybiBzbGlkZTtcbiAgICB9XG4gICAgcmV0dXJuIGVsLnBhcmVudEVsZW1lbnQ7XG4gIH07XG4gIGlmIChzd2lwZXIucGFyYW1zLnZpcnR1YWxUcmFuc2xhdGUgJiYgZHVyYXRpb24gIT09IDApIHtcbiAgICBsZXQgZXZlbnRUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICBsZXQgdHJhbnNpdGlvbkVuZFRhcmdldDtcbiAgICBpZiAoYWxsU2xpZGVzKSB7XG4gICAgICB0cmFuc2l0aW9uRW5kVGFyZ2V0ID0gdHJhbnNmb3JtRWxlbWVudHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW5zaXRpb25FbmRUYXJnZXQgPSB0cmFuc2Zvcm1FbGVtZW50cy5maWx0ZXIodHJhbnNmb3JtRWwgPT4ge1xuICAgICAgICBjb25zdCBlbCA9IHRyYW5zZm9ybUVsLmNsYXNzTGlzdC5jb250YWlucygnc3dpcGVyLXNsaWRlLXRyYW5zZm9ybScpID8gZ2V0U2xpZGUodHJhbnNmb3JtRWwpIDogdHJhbnNmb3JtRWw7XG4gICAgICAgIHJldHVybiBlbGVtZW50SW5kZXgoZWwpID09PSBhY3RpdmVJbmRleDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0cmFuc2l0aW9uRW5kVGFyZ2V0LmZvckVhY2goZWwgPT4ge1xuICAgICAgZWxlbWVudFRyYW5zaXRpb25FbmQoZWwsICgpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50VHJpZ2dlcmVkKSByZXR1cm47XG4gICAgICAgIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQpIHJldHVybjtcbiAgICAgICAgZXZlbnRUcmlnZ2VyZWQgPSB0cnVlO1xuICAgICAgICBzd2lwZXIuYW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGV2dCA9IG5ldyB3aW5kb3cuQ3VzdG9tRXZlbnQoJ3RyYW5zaXRpb25lbmQnLCB7XG4gICAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBzd2lwZXIud3JhcHBlckVsLmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/shared/effect-virtual-transition-end.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/shared/get-browser.js\":\r\n/*!***************************************************!*\\\r\n  !*** ./node_modules/swiper/shared/get-browser.js ***!\r\n  \\***************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"getBrowser\\\": () => (/* binding */ getBrowser)\\n/* harmony export */ });\\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \\\"./node_modules/ssr-window/ssr-window.esm.js\\\");\\n\\nlet browser;\\nfunction calcBrowser() {\\n  const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n  let needPerspectiveFix = false;\\n  function isSafari() {\\n    const ua = window.navigator.userAgent.toLowerCase();\\n    return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\\n  }\\n  if (isSafari()) {\\n    const ua = String(window.navigator.userAgent);\\n    if (ua.includes('Version/')) {\\n      const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\\n      needPerspectiveFix = major < 16 || major === 16 && minor < 2;\\n    }\\n  }\\n  return {\\n    isSafari: needPerspectiveFix || isSafari(),\\n    needPerspectiveFix,\\n    isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\\n  };\\n}\\nfunction getBrowser() {\\n  if (!browser) {\\n    browser = calcBrowser();\\n  }\\n  return browser;\\n}\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL3NoYXJlZC9nZXQtYnJvd3Nlci5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUF1QztBQUN2QztBQUNBO0FBQ0EsaUJBQWlCLHFEQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9zaGFyZWQvZ2V0LWJyb3dzZXIuanM/Y2QwMCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRXaW5kb3cgfSBmcm9tICdzc3Itd2luZG93JztcbmxldCBicm93c2VyO1xuZnVuY3Rpb24gY2FsY0Jyb3dzZXIoKSB7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICBsZXQgbmVlZFBlcnNwZWN0aXZlRml4ID0gZmFsc2U7XG4gIGZ1bmN0aW9uIGlzU2FmYXJpKCkge1xuICAgIGNvbnN0IHVhID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gdWEuaW5kZXhPZignc2FmYXJpJykgPj0gMCAmJiB1YS5pbmRleE9mKCdjaHJvbWUnKSA8IDAgJiYgdWEuaW5kZXhPZignYW5kcm9pZCcpIDwgMDtcbiAgfVxuICBpZiAoaXNTYWZhcmkoKSkge1xuICAgIGNvbnN0IHVhID0gU3RyaW5nKHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICBpZiAodWEuaW5jbHVkZXMoJ1ZlcnNpb24vJykpIHtcbiAgICAgIGNvbnN0IFttYWpvciwgbWlub3JdID0gdWEuc3BsaXQoJ1ZlcnNpb24vJylbMV0uc3BsaXQoJyAnKVswXS5zcGxpdCgnLicpLm1hcChudW0gPT4gTnVtYmVyKG51bSkpO1xuICAgICAgbmVlZFBlcnNwZWN0aXZlRml4ID0gbWFqb3IgPCAxNiB8fCBtYWpvciA9PT0gMTYgJiYgbWlub3IgPCAyO1xuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGlzU2FmYXJpOiBuZWVkUGVyc3BlY3RpdmVGaXggfHwgaXNTYWZhcmkoKSxcbiAgICBuZWVkUGVyc3BlY3RpdmVGaXgsXG4gICAgaXNXZWJWaWV3OiAvKGlQaG9uZXxpUG9kfGlQYWQpLipBcHBsZVdlYktpdCg/IS4qU2FmYXJpKS9pLnRlc3Qod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpXG4gIH07XG59XG5mdW5jdGlvbiBnZXRCcm93c2VyKCkge1xuICBpZiAoIWJyb3dzZXIpIHtcbiAgICBicm93c2VyID0gY2FsY0Jyb3dzZXIoKTtcbiAgfVxuICByZXR1cm4gYnJvd3Nlcjtcbn1cbmV4cG9ydCB7IGdldEJyb3dzZXIgfTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./node_modules/swiper/shared/get-browser.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/shared/get-device.js\":\r\n/*!**************************************************!*\\\r\n  !*** ./node_modules/swiper/shared/get-device.js ***!\r\n  \\**************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"getDevice\\\": () => (/* binding */ getDevice)\\n/* harmony export */ });\\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \\\"./node_modules/ssr-window/ssr-window.esm.js\\\");\\n/* harmony import */ var _get_support_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./get-support.js */ \\\"./node_modules/swiper/shared/get-support.js\\\");\\n\\n\\nlet deviceCached;\\nfunction calcDevice({\\n  userAgent\\n} = {}) {\\n  const support = (0,_get_support_js__WEBPACK_IMPORTED_MODULE_1__.getSupport)();\\n  const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n  const platform = window.navigator.platform;\\n  const ua = userAgent || window.navigator.userAgent;\\n  const device = {\\n    ios: false,\\n    android: false\\n  };\\n  const screenWidth = window.screen.width;\\n  const screenHeight = window.screen.height;\\n  const android = ua.match(/(Android);?[\\\\s\\\\/]+([\\\\d.]+)?/); // eslint-disable-line\\n  let ipad = ua.match(/(iPad).*OS\\\\s([\\\\d_]+)/);\\n  const ipod = ua.match(/(iPod)(.*OS\\\\s([\\\\d_]+))?/);\\n  const iphone = !ipad && ua.match(/(iPhone\\\\sOS|iOS)\\\\s([\\\\d_]+)/);\\n  const windows = platform === 'Win32';\\n  let macos = platform === 'MacIntel';\\n\\n  // iPadOs 13 fix\\n  const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\\n  if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\\n    ipad = ua.match(/(Version)\\\\/([\\\\d.]+)/);\\n    if (!ipad) ipad = [0, 1, '13_0_0'];\\n    macos = false;\\n  }\\n\\n  // Android\\n  if (android && !windows) {\\n    device.os = 'android';\\n    device.android = true;\\n  }\\n  if (ipad || iphone || ipod) {\\n    device.os = 'ios';\\n    device.ios = true;\\n  }\\n\\n  // Export object\\n  return device;\\n}\\nfunction getDevice(overrides = {}) {\\n  if (!deviceCached) {\\n    deviceCached = calcDevice(overrides);\\n  }\\n  return deviceCached;\\n}\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL3NoYXJlZC9nZXQtZGV2aWNlLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUF1QztBQUNPO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSTtBQUNOLGtCQUFrQiwyREFBVTtBQUM1QixpQkFBaUIscURBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxxQkFBcUI7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0VBQWdFLFlBQVksR0FBRyxhQUFhO0FBQzVGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9zaGFyZWQvZ2V0LWRldmljZS5qcz85YWMzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFdpbmRvdyB9IGZyb20gJ3Nzci13aW5kb3cnO1xuaW1wb3J0IHsgZ2V0U3VwcG9ydCB9IGZyb20gJy4vZ2V0LXN1cHBvcnQuanMnO1xubGV0IGRldmljZUNhY2hlZDtcbmZ1bmN0aW9uIGNhbGNEZXZpY2Uoe1xuICB1c2VyQWdlbnRcbn0gPSB7fSkge1xuICBjb25zdCBzdXBwb3J0ID0gZ2V0U3VwcG9ydCgpO1xuICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgY29uc3QgcGxhdGZvcm0gPSB3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtO1xuICBjb25zdCB1YSA9IHVzZXJBZ2VudCB8fCB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgY29uc3QgZGV2aWNlID0ge1xuICAgIGlvczogZmFsc2UsXG4gICAgYW5kcm9pZDogZmFsc2VcbiAgfTtcbiAgY29uc3Qgc2NyZWVuV2lkdGggPSB3aW5kb3cuc2NyZWVuLndpZHRoO1xuICBjb25zdCBzY3JlZW5IZWlnaHQgPSB3aW5kb3cuc2NyZWVuLmhlaWdodDtcbiAgY29uc3QgYW5kcm9pZCA9IHVhLm1hdGNoKC8oQW5kcm9pZCk7P1tcXHNcXC9dKyhbXFxkLl0rKT8vKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICBsZXQgaXBhZCA9IHVhLm1hdGNoKC8oaVBhZCkuKk9TXFxzKFtcXGRfXSspLyk7XG4gIGNvbnN0IGlwb2QgPSB1YS5tYXRjaCgvKGlQb2QpKC4qT1NcXHMoW1xcZF9dKykpPy8pO1xuICBjb25zdCBpcGhvbmUgPSAhaXBhZCAmJiB1YS5tYXRjaCgvKGlQaG9uZVxcc09TfGlPUylcXHMoW1xcZF9dKykvKTtcbiAgY29uc3Qgd2luZG93cyA9IHBsYXRmb3JtID09PSAnV2luMzInO1xuICBsZXQgbWFjb3MgPSBwbGF0Zm9ybSA9PT0gJ01hY0ludGVsJztcblxuICAvLyBpUGFkT3MgMTMgZml4XG4gIGNvbnN0IGlQYWRTY3JlZW5zID0gWycxMDI0eDEzNjYnLCAnMTM2NngxMDI0JywgJzgzNHgxMTk0JywgJzExOTR4ODM0JywgJzgzNHgxMTEyJywgJzExMTJ4ODM0JywgJzc2OHgxMDI0JywgJzEwMjR4NzY4JywgJzgyMHgxMTgwJywgJzExODB4ODIwJywgJzgxMHgxMDgwJywgJzEwODB4ODEwJ107XG4gIGlmICghaXBhZCAmJiBtYWNvcyAmJiBzdXBwb3J0LnRvdWNoICYmIGlQYWRTY3JlZW5zLmluZGV4T2YoYCR7c2NyZWVuV2lkdGh9eCR7c2NyZWVuSGVpZ2h0fWApID49IDApIHtcbiAgICBpcGFkID0gdWEubWF0Y2goLyhWZXJzaW9uKVxcLyhbXFxkLl0rKS8pO1xuICAgIGlmICghaXBhZCkgaXBhZCA9IFswLCAxLCAnMTNfMF8wJ107XG4gICAgbWFjb3MgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIEFuZHJvaWRcbiAgaWYgKGFuZHJvaWQgJiYgIXdpbmRvd3MpIHtcbiAgICBkZXZpY2Uub3MgPSAnYW5kcm9pZCc7XG4gICAgZGV2aWNlLmFuZHJvaWQgPSB0cnVlO1xuICB9XG4gIGlmIChpcGFkIHx8IGlwaG9uZSB8fCBpcG9kKSB7XG4gICAgZGV2aWNlLm9zID0gJ2lvcyc7XG4gICAgZGV2aWNlLmlvcyA9IHRydWU7XG4gIH1cblxuICAvLyBFeHBvcnQgb2JqZWN0XG4gIHJldHVybiBkZXZpY2U7XG59XG5mdW5jdGlvbiBnZXREZXZpY2Uob3ZlcnJpZGVzID0ge30pIHtcbiAgaWYgKCFkZXZpY2VDYWNoZWQpIHtcbiAgICBkZXZpY2VDYWNoZWQgPSBjYWxjRGV2aWNlKG92ZXJyaWRlcyk7XG4gIH1cbiAgcmV0dXJuIGRldmljZUNhY2hlZDtcbn1cbmV4cG9ydCB7IGdldERldmljZSB9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/shared/get-device.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/shared/get-support.js\":\r\n/*!***************************************************!*\\\r\n  !*** ./node_modules/swiper/shared/get-support.js ***!\r\n  \\***************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"getSupport\\\": () => (/* binding */ getSupport)\\n/* harmony export */ });\\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \\\"./node_modules/ssr-window/ssr-window.esm.js\\\");\\n\\nlet support;\\nfunction calcSupport() {\\n  const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n  const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)();\\n  return {\\n    smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\\n    touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\\n  };\\n}\\nfunction getSupport() {\\n  if (!support) {\\n    support = calcSupport();\\n  }\\n  return support;\\n}\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL3NoYXJlZC9nZXQtc3VwcG9ydC5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFvRDtBQUNwRDtBQUNBO0FBQ0EsaUJBQWlCLHFEQUFTO0FBQzFCLG1CQUFtQix1REFBVztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL3NoYXJlZC9nZXQtc3VwcG9ydC5qcz84MDFjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFdpbmRvdywgZ2V0RG9jdW1lbnQgfSBmcm9tICdzc3Itd2luZG93JztcbmxldCBzdXBwb3J0O1xuZnVuY3Rpb24gY2FsY1N1cHBvcnQoKSB7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICBjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gIHJldHVybiB7XG4gICAgc21vb3RoU2Nyb2xsOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgJ3Njcm9sbEJlaGF2aW9yJyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUsXG4gICAgdG91Y2g6ICEhKCdvbnRvdWNoc3RhcnQnIGluIHdpbmRvdyB8fCB3aW5kb3cuRG9jdW1lbnRUb3VjaCAmJiBkb2N1bWVudCBpbnN0YW5jZW9mIHdpbmRvdy5Eb2N1bWVudFRvdWNoKVxuICB9O1xufVxuZnVuY3Rpb24gZ2V0U3VwcG9ydCgpIHtcbiAgaWYgKCFzdXBwb3J0KSB7XG4gICAgc3VwcG9ydCA9IGNhbGNTdXBwb3J0KCk7XG4gIH1cbiAgcmV0dXJuIHN1cHBvcnQ7XG59XG5leHBvcnQgeyBnZXRTdXBwb3J0IH07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/shared/get-support.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/shared/process-lazy-preloader.js\":\r\n/*!**************************************************************!*\\\r\n  !*** ./node_modules/swiper/shared/process-lazy-preloader.js ***!\r\n  \\**************************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"processLazyPreloader\\\": () => (/* binding */ processLazyPreloader)\\n/* harmony export */ });\\nconst processLazyPreloader = (swiper, imageEl) => {\\n  if (!swiper || swiper.destroyed || !swiper.params) return;\\n  const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\\n  const slideEl = imageEl.closest(slideSelector());\\n  if (slideEl) {\\n    const lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\\n    if (lazyEl) lazyEl.remove();\\n  }\\n};//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL3NoYXJlZC9wcm9jZXNzLWxhenktcHJlbG9hZGVyLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTztBQUNQO0FBQ0Esc0VBQXNFLHlCQUF5QjtBQUMvRjtBQUNBO0FBQ0EsNkNBQTZDLGlDQUFpQztBQUM5RTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvc2hhcmVkL3Byb2Nlc3MtbGF6eS1wcmVsb2FkZXIuanM/ZTVlYiJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgcHJvY2Vzc0xhenlQcmVsb2FkZXIgPSAoc3dpcGVyLCBpbWFnZUVsKSA9PiB7XG4gIGlmICghc3dpcGVyIHx8IHN3aXBlci5kZXN0cm95ZWQgfHwgIXN3aXBlci5wYXJhbXMpIHJldHVybjtcbiAgY29uc3Qgc2xpZGVTZWxlY3RvciA9ICgpID0+IHN3aXBlci5pc0VsZW1lbnQgPyBgc3dpcGVyLXNsaWRlYCA6IGAuJHtzd2lwZXIucGFyYW1zLnNsaWRlQ2xhc3N9YDtcbiAgY29uc3Qgc2xpZGVFbCA9IGltYWdlRWwuY2xvc2VzdChzbGlkZVNlbGVjdG9yKCkpO1xuICBpZiAoc2xpZGVFbCkge1xuICAgIGNvbnN0IGxhenlFbCA9IHNsaWRlRWwucXVlcnlTZWxlY3RvcihgLiR7c3dpcGVyLnBhcmFtcy5sYXp5UHJlbG9hZGVyQ2xhc3N9YCk7XG4gICAgaWYgKGxhenlFbCkgbGF6eUVsLnJlbW92ZSgpO1xuICB9XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/shared/process-lazy-preloader.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/shared/utils.js\":\r\n/*!*********************************************!*\\\r\n  !*** ./node_modules/swiper/shared/utils.js ***!\r\n  \\*********************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"animateCSSModeScroll\\\": () => (/* binding */ animateCSSModeScroll),\\n/* harmony export */   \\\"createElement\\\": () => (/* binding */ createElement),\\n/* harmony export */   \\\"deleteProps\\\": () => (/* binding */ deleteProps),\\n/* harmony export */   \\\"elementChildren\\\": () => (/* binding */ elementChildren),\\n/* harmony export */   \\\"elementIndex\\\": () => (/* binding */ elementIndex),\\n/* harmony export */   \\\"elementNextAll\\\": () => (/* binding */ elementNextAll),\\n/* harmony export */   \\\"elementOffset\\\": () => (/* binding */ elementOffset),\\n/* harmony export */   \\\"elementOuterSize\\\": () => (/* binding */ elementOuterSize),\\n/* harmony export */   \\\"elementParents\\\": () => (/* binding */ elementParents),\\n/* harmony export */   \\\"elementPrevAll\\\": () => (/* binding */ elementPrevAll),\\n/* harmony export */   \\\"elementStyle\\\": () => (/* binding */ elementStyle),\\n/* harmony export */   \\\"elementTransitionEnd\\\": () => (/* binding */ elementTransitionEnd),\\n/* harmony export */   \\\"extend\\\": () => (/* binding */ extend),\\n/* harmony export */   \\\"findElementsInElements\\\": () => (/* binding */ findElementsInElements),\\n/* harmony export */   \\\"getComputedStyle\\\": () => (/* binding */ getComputedStyle),\\n/* harmony export */   \\\"getSlideTransformEl\\\": () => (/* binding */ getSlideTransformEl),\\n/* harmony export */   \\\"getTranslate\\\": () => (/* binding */ getTranslate),\\n/* harmony export */   \\\"isObject\\\": () => (/* binding */ isObject),\\n/* harmony export */   \\\"nextTick\\\": () => (/* binding */ nextTick),\\n/* harmony export */   \\\"now\\\": () => (/* binding */ now),\\n/* harmony export */   \\\"setCSSProperty\\\": () => (/* binding */ setCSSProperty)\\n/* harmony export */ });\\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \\\"./node_modules/ssr-window/ssr-window.esm.js\\\");\\n\\nfunction deleteProps(obj) {\\n  const object = obj;\\n  Object.keys(object).forEach(key => {\\n    try {\\n      object[key] = null;\\n    } catch (e) {\\n      // no getter for object\\n    }\\n    try {\\n      delete object[key];\\n    } catch (e) {\\n      // something got wrong\\n    }\\n  });\\n}\\nfunction nextTick(callback, delay = 0) {\\n  return setTimeout(callback, delay);\\n}\\nfunction now() {\\n  return Date.now();\\n}\\nfunction getComputedStyle(el) {\\n  const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n  let style;\\n  if (window.getComputedStyle) {\\n    style = window.getComputedStyle(el, null);\\n  }\\n  if (!style && el.currentStyle) {\\n    style = el.currentStyle;\\n  }\\n  if (!style) {\\n    style = el.style;\\n  }\\n  return style;\\n}\\nfunction getTranslate(el, axis = 'x') {\\n  const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n  let matrix;\\n  let curTransform;\\n  let transformMatrix;\\n  const curStyle = getComputedStyle(el, null);\\n  if (window.WebKitCSSMatrix) {\\n    curTransform = curStyle.transform || curStyle.webkitTransform;\\n    if (curTransform.split(',').length > 6) {\\n      curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\\n    }\\n    // Some old versions of Webkit choke when 'none' is passed; pass\\n    // empty string instead in this case\\n    transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\\n  } else {\\n    transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\\n    matrix = transformMatrix.toString().split(',');\\n  }\\n  if (axis === 'x') {\\n    // Latest Chrome and webkits Fix\\n    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\\n    // Crazy IE10 Matrix\\n    else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\\n    // Normal Browsers\\n    else curTransform = parseFloat(matrix[4]);\\n  }\\n  if (axis === 'y') {\\n    // Latest Chrome and webkits Fix\\n    if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\\n    // Crazy IE10 Matrix\\n    else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\\n    // Normal Browsers\\n    else curTransform = parseFloat(matrix[5]);\\n  }\\n  return curTransform || 0;\\n}\\nfunction isObject(o) {\\n  return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\\n}\\nfunction isNode(node) {\\n  // eslint-disable-next-line\\n  if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\\n    return node instanceof HTMLElement;\\n  }\\n  return node && (node.nodeType === 1 || node.nodeType === 11);\\n}\\nfunction extend(...args) {\\n  const to = Object(args[0]);\\n  const noExtend = ['__proto__', 'constructor', 'prototype'];\\n  for (let i = 1; i < args.length; i += 1) {\\n    const nextSource = args[i];\\n    if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\\n      const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\\n      for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\\n        const nextKey = keysArray[nextIndex];\\n        const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\\n        if (desc !== undefined && desc.enumerable) {\\n          if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\\n            if (nextSource[nextKey].__swiper__) {\\n              to[nextKey] = nextSource[nextKey];\\n            } else {\\n              extend(to[nextKey], nextSource[nextKey]);\\n            }\\n          } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\\n            to[nextKey] = {};\\n            if (nextSource[nextKey].__swiper__) {\\n              to[nextKey] = nextSource[nextKey];\\n            } else {\\n              extend(to[nextKey], nextSource[nextKey]);\\n            }\\n          } else {\\n            to[nextKey] = nextSource[nextKey];\\n          }\\n        }\\n      }\\n    }\\n  }\\n  return to;\\n}\\nfunction setCSSProperty(el, varName, varValue) {\\n  el.style.setProperty(varName, varValue);\\n}\\nfunction animateCSSModeScroll({\\n  swiper,\\n  targetPosition,\\n  side\\n}) {\\n  const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n  const startPosition = -swiper.translate;\\n  let startTime = null;\\n  let time;\\n  const duration = swiper.params.speed;\\n  swiper.wrapperEl.style.scrollSnapType = 'none';\\n  window.cancelAnimationFrame(swiper.cssModeFrameID);\\n  const dir = targetPosition > startPosition ? 'next' : 'prev';\\n  const isOutOfBound = (current, target) => {\\n    return dir === 'next' && current >= target || dir === 'prev' && current <= target;\\n  };\\n  const animate = () => {\\n    time = new Date().getTime();\\n    if (startTime === null) {\\n      startTime = time;\\n    }\\n    const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\\n    const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\\n    let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\\n    if (isOutOfBound(currentPosition, targetPosition)) {\\n      currentPosition = targetPosition;\\n    }\\n    swiper.wrapperEl.scrollTo({\\n      [side]: currentPosition\\n    });\\n    if (isOutOfBound(currentPosition, targetPosition)) {\\n      swiper.wrapperEl.style.overflow = 'hidden';\\n      swiper.wrapperEl.style.scrollSnapType = '';\\n      setTimeout(() => {\\n        swiper.wrapperEl.style.overflow = '';\\n        swiper.wrapperEl.scrollTo({\\n          [side]: currentPosition\\n        });\\n      });\\n      window.cancelAnimationFrame(swiper.cssModeFrameID);\\n      return;\\n    }\\n    swiper.cssModeFrameID = window.requestAnimationFrame(animate);\\n  };\\n  animate();\\n}\\nfunction getSlideTransformEl(slideEl) {\\n  return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowEl && slideEl.shadowEl.querySelector('.swiper-slide-transform') || slideEl;\\n}\\nfunction findElementsInElements(elements = [], selector = '') {\\n  const found = [];\\n  elements.forEach(el => {\\n    found.push(...el.querySelectorAll(selector));\\n  });\\n  return found;\\n}\\nfunction elementChildren(element, selector = '') {\\n  return [...element.children].filter(el => el.matches(selector));\\n}\\nfunction createElement(tag, classes = []) {\\n  const el = document.createElement(tag);\\n  el.classList.add(...(Array.isArray(classes) ? classes : [classes]));\\n  return el;\\n}\\nfunction elementOffset(el) {\\n  const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n  const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)();\\n  const box = el.getBoundingClientRect();\\n  const body = document.body;\\n  const clientTop = el.clientTop || body.clientTop || 0;\\n  const clientLeft = el.clientLeft || body.clientLeft || 0;\\n  const scrollTop = el === window ? window.scrollY : el.scrollTop;\\n  const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\\n  return {\\n    top: box.top + scrollTop - clientTop,\\n    left: box.left + scrollLeft - clientLeft\\n  };\\n}\\nfunction elementPrevAll(el, selector) {\\n  const prevEls = [];\\n  while (el.previousElementSibling) {\\n    const prev = el.previousElementSibling; // eslint-disable-line\\n    if (selector) {\\n      if (prev.matches(selector)) prevEls.push(prev);\\n    } else prevEls.push(prev);\\n    el = prev;\\n  }\\n  return prevEls;\\n}\\nfunction elementNextAll(el, selector) {\\n  const nextEls = [];\\n  while (el.nextElementSibling) {\\n    const next = el.nextElementSibling; // eslint-disable-line\\n    if (selector) {\\n      if (next.matches(selector)) nextEls.push(next);\\n    } else nextEls.push(next);\\n    el = next;\\n  }\\n  return nextEls;\\n}\\nfunction elementStyle(el, prop) {\\n  const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n  return window.getComputedStyle(el, null).getPropertyValue(prop);\\n}\\nfunction elementIndex(el) {\\n  let child = el;\\n  let i;\\n  if (child) {\\n    i = 0;\\n    // eslint-disable-next-line\\n    while ((child = child.previousSibling) !== null) {\\n      if (child.nodeType === 1) i += 1;\\n    }\\n    return i;\\n  }\\n  return undefined;\\n}\\nfunction elementParents(el, selector) {\\n  const parents = []; // eslint-disable-line\\n  let parent = el.parentElement; // eslint-disable-line\\n  while (parent) {\\n    if (selector) {\\n      if (parent.matches(selector)) parents.push(parent);\\n    } else {\\n      parents.push(parent);\\n    }\\n    parent = parent.parentElement;\\n  }\\n  return parents;\\n}\\nfunction elementTransitionEnd(el, callback) {\\n  function fireCallBack(e) {\\n    if (e.target !== el) return;\\n    callback.call(el, e);\\n    el.removeEventListener('transitionend', fireCallBack);\\n  }\\n  if (callback) {\\n    el.addEventListener('transitionend', fireCallBack);\\n  }\\n}\\nfunction elementOuterSize(el, size, includeMargins) {\\n  const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)();\\n  if (includeMargins) {\\n    return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\\n  }\\n  return el.offsetWidth;\\n}\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL3NoYXJlZC91dGlscy5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQW9EO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHFEQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHFEQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRTtBQUNoRTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLGlCQUFpQjtBQUNuQztBQUNBO0FBQ0E7QUFDQSxzREFBc0QsaUJBQWlCO0FBQ3ZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxpQkFBaUIscURBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHFEQUFTO0FBQzFCLG1CQUFtQix1REFBVztBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHFEQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixxREFBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRyaWJlLWRpZ2l0YWwvY2FyYm9uLXNob3BpZnktdGhlbWUvLi9ub2RlX21vZHVsZXMvc3dpcGVyL3NoYXJlZC91dGlscy5qcz9jYjRjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFdpbmRvdywgZ2V0RG9jdW1lbnQgfSBmcm9tICdzc3Itd2luZG93JztcbmZ1bmN0aW9uIGRlbGV0ZVByb3BzKG9iaikge1xuICBjb25zdCBvYmplY3QgPSBvYmo7XG4gIE9iamVjdC5rZXlzKG9iamVjdCkuZm9yRWFjaChrZXkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBvYmplY3Rba2V5XSA9IG51bGw7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gbm8gZ2V0dGVyIGZvciBvYmplY3RcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGRlbGV0ZSBvYmplY3Rba2V5XTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBzb21ldGhpbmcgZ290IHdyb25nXG4gICAgfVxuICB9KTtcbn1cbmZ1bmN0aW9uIG5leHRUaWNrKGNhbGxiYWNrLCBkZWxheSA9IDApIHtcbiAgcmV0dXJuIHNldFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5KTtcbn1cbmZ1bmN0aW9uIG5vdygpIHtcbiAgcmV0dXJuIERhdGUubm93KCk7XG59XG5mdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsKSB7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICBsZXQgc3R5bGU7XG4gIGlmICh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkge1xuICAgIHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwsIG51bGwpO1xuICB9XG4gIGlmICghc3R5bGUgJiYgZWwuY3VycmVudFN0eWxlKSB7XG4gICAgc3R5bGUgPSBlbC5jdXJyZW50U3R5bGU7XG4gIH1cbiAgaWYgKCFzdHlsZSkge1xuICAgIHN0eWxlID0gZWwuc3R5bGU7XG4gIH1cbiAgcmV0dXJuIHN0eWxlO1xufVxuZnVuY3Rpb24gZ2V0VHJhbnNsYXRlKGVsLCBheGlzID0gJ3gnKSB7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICBsZXQgbWF0cml4O1xuICBsZXQgY3VyVHJhbnNmb3JtO1xuICBsZXQgdHJhbnNmb3JtTWF0cml4O1xuICBjb25zdCBjdXJTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWwsIG51bGwpO1xuICBpZiAod2luZG93LldlYktpdENTU01hdHJpeCkge1xuICAgIGN1clRyYW5zZm9ybSA9IGN1clN0eWxlLnRyYW5zZm9ybSB8fCBjdXJTdHlsZS53ZWJraXRUcmFuc2Zvcm07XG4gICAgaWYgKGN1clRyYW5zZm9ybS5zcGxpdCgnLCcpLmxlbmd0aCA+IDYpIHtcbiAgICAgIGN1clRyYW5zZm9ybSA9IGN1clRyYW5zZm9ybS5zcGxpdCgnLCAnKS5tYXAoYSA9PiBhLnJlcGxhY2UoJywnLCAnLicpKS5qb2luKCcsICcpO1xuICAgIH1cbiAgICAvLyBTb21lIG9sZCB2ZXJzaW9ucyBvZiBXZWJraXQgY2hva2Ugd2hlbiAnbm9uZScgaXMgcGFzc2VkOyBwYXNzXG4gICAgLy8gZW1wdHkgc3RyaW5nIGluc3RlYWQgaW4gdGhpcyBjYXNlXG4gICAgdHJhbnNmb3JtTWF0cml4ID0gbmV3IHdpbmRvdy5XZWJLaXRDU1NNYXRyaXgoY3VyVHJhbnNmb3JtID09PSAnbm9uZScgPyAnJyA6IGN1clRyYW5zZm9ybSk7XG4gIH0gZWxzZSB7XG4gICAgdHJhbnNmb3JtTWF0cml4ID0gY3VyU3R5bGUuTW96VHJhbnNmb3JtIHx8IGN1clN0eWxlLk9UcmFuc2Zvcm0gfHwgY3VyU3R5bGUuTXNUcmFuc2Zvcm0gfHwgY3VyU3R5bGUubXNUcmFuc2Zvcm0gfHwgY3VyU3R5bGUudHJhbnNmb3JtIHx8IGN1clN0eWxlLmdldFByb3BlcnR5VmFsdWUoJ3RyYW5zZm9ybScpLnJlcGxhY2UoJ3RyYW5zbGF0ZSgnLCAnbWF0cml4KDEsIDAsIDAsIDEsJyk7XG4gICAgbWF0cml4ID0gdHJhbnNmb3JtTWF0cml4LnRvU3RyaW5nKCkuc3BsaXQoJywnKTtcbiAgfVxuICBpZiAoYXhpcyA9PT0gJ3gnKSB7XG4gICAgLy8gTGF0ZXN0IENocm9tZSBhbmQgd2Via2l0cyBGaXhcbiAgICBpZiAod2luZG93LldlYktpdENTU01hdHJpeCkgY3VyVHJhbnNmb3JtID0gdHJhbnNmb3JtTWF0cml4Lm00MTtcbiAgICAvLyBDcmF6eSBJRTEwIE1hdHJpeFxuICAgIGVsc2UgaWYgKG1hdHJpeC5sZW5ndGggPT09IDE2KSBjdXJUcmFuc2Zvcm0gPSBwYXJzZUZsb2F0KG1hdHJpeFsxMl0pO1xuICAgIC8vIE5vcm1hbCBCcm93c2Vyc1xuICAgIGVsc2UgY3VyVHJhbnNmb3JtID0gcGFyc2VGbG9hdChtYXRyaXhbNF0pO1xuICB9XG4gIGlmIChheGlzID09PSAneScpIHtcbiAgICAvLyBMYXRlc3QgQ2hyb21lIGFuZCB3ZWJraXRzIEZpeFxuICAgIGlmICh3aW5kb3cuV2ViS2l0Q1NTTWF0cml4KSBjdXJUcmFuc2Zvcm0gPSB0cmFuc2Zvcm1NYXRyaXgubTQyO1xuICAgIC8vIENyYXp5IElFMTAgTWF0cml4XG4gICAgZWxzZSBpZiAobWF0cml4Lmxlbmd0aCA9PT0gMTYpIGN1clRyYW5zZm9ybSA9IHBhcnNlRmxvYXQobWF0cml4WzEzXSk7XG4gICAgLy8gTm9ybWFsIEJyb3dzZXJzXG4gICAgZWxzZSBjdXJUcmFuc2Zvcm0gPSBwYXJzZUZsb2F0KG1hdHJpeFs1XSk7XG4gIH1cbiAgcmV0dXJuIGN1clRyYW5zZm9ybSB8fCAwO1xufVxuZnVuY3Rpb24gaXNPYmplY3Qobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIG8gIT09IG51bGwgJiYgby5jb25zdHJ1Y3RvciAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpID09PSAnT2JqZWN0Jztcbn1cbmZ1bmN0aW9uIGlzTm9kZShub2RlKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5IVE1MRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xuICB9XG4gIHJldHVybiBub2RlICYmIChub2RlLm5vZGVUeXBlID09PSAxIHx8IG5vZGUubm9kZVR5cGUgPT09IDExKTtcbn1cbmZ1bmN0aW9uIGV4dGVuZCguLi5hcmdzKSB7XG4gIGNvbnN0IHRvID0gT2JqZWN0KGFyZ3NbMF0pO1xuICBjb25zdCBub0V4dGVuZCA9IFsnX19wcm90b19fJywgJ2NvbnN0cnVjdG9yJywgJ3Byb3RvdHlwZSddO1xuICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBjb25zdCBuZXh0U291cmNlID0gYXJnc1tpXTtcbiAgICBpZiAobmV4dFNvdXJjZSAhPT0gdW5kZWZpbmVkICYmIG5leHRTb3VyY2UgIT09IG51bGwgJiYgIWlzTm9kZShuZXh0U291cmNlKSkge1xuICAgICAgY29uc3Qga2V5c0FycmF5ID0gT2JqZWN0LmtleXMoT2JqZWN0KG5leHRTb3VyY2UpKS5maWx0ZXIoa2V5ID0+IG5vRXh0ZW5kLmluZGV4T2Yoa2V5KSA8IDApO1xuICAgICAgZm9yIChsZXQgbmV4dEluZGV4ID0gMCwgbGVuID0ga2V5c0FycmF5Lmxlbmd0aDsgbmV4dEluZGV4IDwgbGVuOyBuZXh0SW5kZXggKz0gMSkge1xuICAgICAgICBjb25zdCBuZXh0S2V5ID0ga2V5c0FycmF5W25leHRJbmRleF07XG4gICAgICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5leHRTb3VyY2UsIG5leHRLZXkpO1xuICAgICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkICYmIGRlc2MuZW51bWVyYWJsZSkge1xuICAgICAgICAgIGlmIChpc09iamVjdCh0b1tuZXh0S2V5XSkgJiYgaXNPYmplY3QobmV4dFNvdXJjZVtuZXh0S2V5XSkpIHtcbiAgICAgICAgICAgIGlmIChuZXh0U291cmNlW25leHRLZXldLl9fc3dpcGVyX18pIHtcbiAgICAgICAgICAgICAgdG9bbmV4dEtleV0gPSBuZXh0U291cmNlW25leHRLZXldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZXh0ZW5kKHRvW25leHRLZXldLCBuZXh0U291cmNlW25leHRLZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKCFpc09iamVjdCh0b1tuZXh0S2V5XSkgJiYgaXNPYmplY3QobmV4dFNvdXJjZVtuZXh0S2V5XSkpIHtcbiAgICAgICAgICAgIHRvW25leHRLZXldID0ge307XG4gICAgICAgICAgICBpZiAobmV4dFNvdXJjZVtuZXh0S2V5XS5fX3N3aXBlcl9fKSB7XG4gICAgICAgICAgICAgIHRvW25leHRLZXldID0gbmV4dFNvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGV4dGVuZCh0b1tuZXh0S2V5XSwgbmV4dFNvdXJjZVtuZXh0S2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvW25leHRLZXldID0gbmV4dFNvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRvO1xufVxuZnVuY3Rpb24gc2V0Q1NTUHJvcGVydHkoZWwsIHZhck5hbWUsIHZhclZhbHVlKSB7XG4gIGVsLnN0eWxlLnNldFByb3BlcnR5KHZhck5hbWUsIHZhclZhbHVlKTtcbn1cbmZ1bmN0aW9uIGFuaW1hdGVDU1NNb2RlU2Nyb2xsKHtcbiAgc3dpcGVyLFxuICB0YXJnZXRQb3NpdGlvbixcbiAgc2lkZVxufSkge1xuICBjb25zdCB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgY29uc3Qgc3RhcnRQb3NpdGlvbiA9IC1zd2lwZXIudHJhbnNsYXRlO1xuICBsZXQgc3RhcnRUaW1lID0gbnVsbDtcbiAgbGV0IHRpbWU7XG4gIGNvbnN0IGR1cmF0aW9uID0gc3dpcGVyLnBhcmFtcy5zcGVlZDtcbiAgc3dpcGVyLndyYXBwZXJFbC5zdHlsZS5zY3JvbGxTbmFwVHlwZSA9ICdub25lJztcbiAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHN3aXBlci5jc3NNb2RlRnJhbWVJRCk7XG4gIGNvbnN0IGRpciA9IHRhcmdldFBvc2l0aW9uID4gc3RhcnRQb3NpdGlvbiA/ICduZXh0JyA6ICdwcmV2JztcbiAgY29uc3QgaXNPdXRPZkJvdW5kID0gKGN1cnJlbnQsIHRhcmdldCkgPT4ge1xuICAgIHJldHVybiBkaXIgPT09ICduZXh0JyAmJiBjdXJyZW50ID49IHRhcmdldCB8fCBkaXIgPT09ICdwcmV2JyAmJiBjdXJyZW50IDw9IHRhcmdldDtcbiAgfTtcbiAgY29uc3QgYW5pbWF0ZSA9ICgpID0+IHtcbiAgICB0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgaWYgKHN0YXJ0VGltZSA9PT0gbnVsbCkge1xuICAgICAgc3RhcnRUaW1lID0gdGltZTtcbiAgICB9XG4gICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLm1heChNYXRoLm1pbigodGltZSAtIHN0YXJ0VGltZSkgLyBkdXJhdGlvbiwgMSksIDApO1xuICAgIGNvbnN0IGVhc2VQcm9ncmVzcyA9IDAuNSAtIE1hdGguY29zKHByb2dyZXNzICogTWF0aC5QSSkgLyAyO1xuICAgIGxldCBjdXJyZW50UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgZWFzZVByb2dyZXNzICogKHRhcmdldFBvc2l0aW9uIC0gc3RhcnRQb3NpdGlvbik7XG4gICAgaWYgKGlzT3V0T2ZCb3VuZChjdXJyZW50UG9zaXRpb24sIHRhcmdldFBvc2l0aW9uKSkge1xuICAgICAgY3VycmVudFBvc2l0aW9uID0gdGFyZ2V0UG9zaXRpb247XG4gICAgfVxuICAgIHN3aXBlci53cmFwcGVyRWwuc2Nyb2xsVG8oe1xuICAgICAgW3NpZGVdOiBjdXJyZW50UG9zaXRpb25cbiAgICB9KTtcbiAgICBpZiAoaXNPdXRPZkJvdW5kKGN1cnJlbnRQb3NpdGlvbiwgdGFyZ2V0UG9zaXRpb24pKSB7XG4gICAgICBzd2lwZXIud3JhcHBlckVsLnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgICBzd2lwZXIud3JhcHBlckVsLnN0eWxlLnNjcm9sbFNuYXBUeXBlID0gJyc7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgc3dpcGVyLndyYXBwZXJFbC5zdHlsZS5vdmVyZmxvdyA9ICcnO1xuICAgICAgICBzd2lwZXIud3JhcHBlckVsLnNjcm9sbFRvKHtcbiAgICAgICAgICBbc2lkZV06IGN1cnJlbnRQb3NpdGlvblxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHN3aXBlci5jc3NNb2RlRnJhbWVJRCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN3aXBlci5jc3NNb2RlRnJhbWVJRCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gIH07XG4gIGFuaW1hdGUoKTtcbn1cbmZ1bmN0aW9uIGdldFNsaWRlVHJhbnNmb3JtRWwoc2xpZGVFbCkge1xuICByZXR1cm4gc2xpZGVFbC5xdWVyeVNlbGVjdG9yKCcuc3dpcGVyLXNsaWRlLXRyYW5zZm9ybScpIHx8IHNsaWRlRWwuc2hhZG93RWwgJiYgc2xpZGVFbC5zaGFkb3dFbC5xdWVyeVNlbGVjdG9yKCcuc3dpcGVyLXNsaWRlLXRyYW5zZm9ybScpIHx8IHNsaWRlRWw7XG59XG5mdW5jdGlvbiBmaW5kRWxlbWVudHNJbkVsZW1lbnRzKGVsZW1lbnRzID0gW10sIHNlbGVjdG9yID0gJycpIHtcbiAgY29uc3QgZm91bmQgPSBbXTtcbiAgZWxlbWVudHMuZm9yRWFjaChlbCA9PiB7XG4gICAgZm91bmQucHVzaCguLi5lbC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSk7XG4gIH0pO1xuICByZXR1cm4gZm91bmQ7XG59XG5mdW5jdGlvbiBlbGVtZW50Q2hpbGRyZW4oZWxlbWVudCwgc2VsZWN0b3IgPSAnJykge1xuICByZXR1cm4gWy4uLmVsZW1lbnQuY2hpbGRyZW5dLmZpbHRlcihlbCA9PiBlbC5tYXRjaGVzKHNlbGVjdG9yKSk7XG59XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZywgY2xhc3NlcyA9IFtdKSB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuICBlbC5jbGFzc0xpc3QuYWRkKC4uLihBcnJheS5pc0FycmF5KGNsYXNzZXMpID8gY2xhc3NlcyA6IFtjbGFzc2VzXSkpO1xuICByZXR1cm4gZWw7XG59XG5mdW5jdGlvbiBlbGVtZW50T2Zmc2V0KGVsKSB7XG4gIGNvbnN0IHdpbmRvdyA9IGdldFdpbmRvdygpO1xuICBjb25zdCBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gIGNvbnN0IGJveCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgY29uc3QgY2xpZW50VG9wID0gZWwuY2xpZW50VG9wIHx8IGJvZHkuY2xpZW50VG9wIHx8IDA7XG4gIGNvbnN0IGNsaWVudExlZnQgPSBlbC5jbGllbnRMZWZ0IHx8IGJvZHkuY2xpZW50TGVmdCB8fCAwO1xuICBjb25zdCBzY3JvbGxUb3AgPSBlbCA9PT0gd2luZG93ID8gd2luZG93LnNjcm9sbFkgOiBlbC5zY3JvbGxUb3A7XG4gIGNvbnN0IHNjcm9sbExlZnQgPSBlbCA9PT0gd2luZG93ID8gd2luZG93LnNjcm9sbFggOiBlbC5zY3JvbGxMZWZ0O1xuICByZXR1cm4ge1xuICAgIHRvcDogYm94LnRvcCArIHNjcm9sbFRvcCAtIGNsaWVudFRvcCxcbiAgICBsZWZ0OiBib3gubGVmdCArIHNjcm9sbExlZnQgLSBjbGllbnRMZWZ0XG4gIH07XG59XG5mdW5jdGlvbiBlbGVtZW50UHJldkFsbChlbCwgc2VsZWN0b3IpIHtcbiAgY29uc3QgcHJldkVscyA9IFtdO1xuICB3aGlsZSAoZWwucHJldmlvdXNFbGVtZW50U2libGluZykge1xuICAgIGNvbnN0IHByZXYgPSBlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICBpZiAocHJldi5tYXRjaGVzKHNlbGVjdG9yKSkgcHJldkVscy5wdXNoKHByZXYpO1xuICAgIH0gZWxzZSBwcmV2RWxzLnB1c2gocHJldik7XG4gICAgZWwgPSBwcmV2O1xuICB9XG4gIHJldHVybiBwcmV2RWxzO1xufVxuZnVuY3Rpb24gZWxlbWVudE5leHRBbGwoZWwsIHNlbGVjdG9yKSB7XG4gIGNvbnN0IG5leHRFbHMgPSBbXTtcbiAgd2hpbGUgKGVsLm5leHRFbGVtZW50U2libGluZykge1xuICAgIGNvbnN0IG5leHQgPSBlbC5uZXh0RWxlbWVudFNpYmxpbmc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIGlmIChuZXh0Lm1hdGNoZXMoc2VsZWN0b3IpKSBuZXh0RWxzLnB1c2gobmV4dCk7XG4gICAgfSBlbHNlIG5leHRFbHMucHVzaChuZXh0KTtcbiAgICBlbCA9IG5leHQ7XG4gIH1cbiAgcmV0dXJuIG5leHRFbHM7XG59XG5mdW5jdGlvbiBlbGVtZW50U3R5bGUoZWwsIHByb3ApIHtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShwcm9wKTtcbn1cbmZ1bmN0aW9uIGVsZW1lbnRJbmRleChlbCkge1xuICBsZXQgY2hpbGQgPSBlbDtcbiAgbGV0IGk7XG4gIGlmIChjaGlsZCkge1xuICAgIGkgPSAwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIHdoaWxlICgoY2hpbGQgPSBjaGlsZC5wcmV2aW91c1NpYmxpbmcpICE9PSBudWxsKSB7XG4gICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDEpIGkgKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIGk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGVsZW1lbnRQYXJlbnRzKGVsLCBzZWxlY3Rvcikge1xuICBjb25zdCBwYXJlbnRzID0gW107IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgbGV0IHBhcmVudCA9IGVsLnBhcmVudEVsZW1lbnQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgd2hpbGUgKHBhcmVudCkge1xuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgaWYgKHBhcmVudC5tYXRjaGVzKHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKHBhcmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudHMucHVzaChwYXJlbnQpO1xuICAgIH1cbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50RWxlbWVudDtcbiAgfVxuICByZXR1cm4gcGFyZW50cztcbn1cbmZ1bmN0aW9uIGVsZW1lbnRUcmFuc2l0aW9uRW5kKGVsLCBjYWxsYmFjaykge1xuICBmdW5jdGlvbiBmaXJlQ2FsbEJhY2soZSkge1xuICAgIGlmIChlLnRhcmdldCAhPT0gZWwpIHJldHVybjtcbiAgICBjYWxsYmFjay5jYWxsKGVsLCBlKTtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgZmlyZUNhbGxCYWNrKTtcbiAgfVxuICBpZiAoY2FsbGJhY2spIHtcbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgZmlyZUNhbGxCYWNrKTtcbiAgfVxufVxuZnVuY3Rpb24gZWxlbWVudE91dGVyU2l6ZShlbCwgc2l6ZSwgaW5jbHVkZU1hcmdpbnMpIHtcbiAgY29uc3Qgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIGlmIChpbmNsdWRlTWFyZ2lucykge1xuICAgIHJldHVybiBlbFtzaXplID09PSAnd2lkdGgnID8gJ29mZnNldFdpZHRoJyA6ICdvZmZzZXRIZWlnaHQnXSArIHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoc2l6ZSA9PT0gJ3dpZHRoJyA/ICdtYXJnaW4tcmlnaHQnIDogJ21hcmdpbi10b3AnKSkgKyBwYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHNpemUgPT09ICd3aWR0aCcgPyAnbWFyZ2luLWxlZnQnIDogJ21hcmdpbi1ib3R0b20nKSk7XG4gIH1cbiAgcmV0dXJuIGVsLm9mZnNldFdpZHRoO1xufVxuZXhwb3J0IHsgYW5pbWF0ZUNTU01vZGVTY3JvbGwsIGRlbGV0ZVByb3BzLCBuZXh0VGljaywgbm93LCBnZXRUcmFuc2xhdGUsIGlzT2JqZWN0LCBleHRlbmQsIGdldENvbXB1dGVkU3R5bGUsIHNldENTU1Byb3BlcnR5LCBnZXRTbGlkZVRyYW5zZm9ybUVsLFxuLy8gZG9tXG5maW5kRWxlbWVudHNJbkVsZW1lbnRzLCBjcmVhdGVFbGVtZW50LCBlbGVtZW50Q2hpbGRyZW4sIGVsZW1lbnRPZmZzZXQsIGVsZW1lbnRQcmV2QWxsLCBlbGVtZW50TmV4dEFsbCwgZWxlbWVudFN0eWxlLCBlbGVtZW50SW5kZXgsIGVsZW1lbnRQYXJlbnRzLCBlbGVtZW50VHJhbnNpdGlvbkVuZCwgZWxlbWVudE91dGVyU2l6ZSB9OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./node_modules/swiper/shared/utils.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/swiper-bundle.esm.js\":\r\n/*!**************************************************!*\\\r\n  !*** ./node_modules/swiper/swiper-bundle.esm.js ***!\r\n  \\**************************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"Swiper\\\": () => (/* reexport safe */ _core_core_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"]),\\n/* harmony export */   \\\"default\\\": () => (/* reexport safe */ _core_core_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])\\n/* harmony export */ });\\n/* harmony import */ var _core_core_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core/core.js */ \\\"./node_modules/swiper/core/core.js\\\");\\n/* harmony import */ var _modules_virtual_virtual_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/virtual/virtual.js */ \\\"./node_modules/swiper/modules/virtual/virtual.js\\\");\\n/* harmony import */ var _modules_keyboard_keyboard_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/keyboard/keyboard.js */ \\\"./node_modules/swiper/modules/keyboard/keyboard.js\\\");\\n/* harmony import */ var _modules_mousewheel_mousewheel_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modules/mousewheel/mousewheel.js */ \\\"./node_modules/swiper/modules/mousewheel/mousewheel.js\\\");\\n/* harmony import */ var _modules_navigation_navigation_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modules/navigation/navigation.js */ \\\"./node_modules/swiper/modules/navigation/navigation.js\\\");\\n/* harmony import */ var _modules_pagination_pagination_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modules/pagination/pagination.js */ \\\"./node_modules/swiper/modules/pagination/pagination.js\\\");\\n/* harmony import */ var _modules_scrollbar_scrollbar_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modules/scrollbar/scrollbar.js */ \\\"./node_modules/swiper/modules/scrollbar/scrollbar.js\\\");\\n/* harmony import */ var _modules_parallax_parallax_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modules/parallax/parallax.js */ \\\"./node_modules/swiper/modules/parallax/parallax.js\\\");\\n/* harmony import */ var _modules_zoom_zoom_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modules/zoom/zoom.js */ \\\"./node_modules/swiper/modules/zoom/zoom.js\\\");\\n/* harmony import */ var _modules_controller_controller_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./modules/controller/controller.js */ \\\"./node_modules/swiper/modules/controller/controller.js\\\");\\n/* harmony import */ var _modules_a11y_a11y_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./modules/a11y/a11y.js */ \\\"./node_modules/swiper/modules/a11y/a11y.js\\\");\\n/* harmony import */ var _modules_history_history_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./modules/history/history.js */ \\\"./node_modules/swiper/modules/history/history.js\\\");\\n/* harmony import */ var _modules_hash_navigation_hash_navigation_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modules/hash-navigation/hash-navigation.js */ \\\"./node_modules/swiper/modules/hash-navigation/hash-navigation.js\\\");\\n/* harmony import */ var _modules_autoplay_autoplay_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./modules/autoplay/autoplay.js */ \\\"./node_modules/swiper/modules/autoplay/autoplay.js\\\");\\n/* harmony import */ var _modules_thumbs_thumbs_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./modules/thumbs/thumbs.js */ \\\"./node_modules/swiper/modules/thumbs/thumbs.js\\\");\\n/* harmony import */ var _modules_free_mode_free_mode_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./modules/free-mode/free-mode.js */ \\\"./node_modules/swiper/modules/free-mode/free-mode.js\\\");\\n/* harmony import */ var _modules_grid_grid_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./modules/grid/grid.js */ \\\"./node_modules/swiper/modules/grid/grid.js\\\");\\n/* harmony import */ var _modules_manipulation_manipulation_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./modules/manipulation/manipulation.js */ \\\"./node_modules/swiper/modules/manipulation/manipulation.js\\\");\\n/* harmony import */ var _modules_effect_fade_effect_fade_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./modules/effect-fade/effect-fade.js */ \\\"./node_modules/swiper/modules/effect-fade/effect-fade.js\\\");\\n/* harmony import */ var _modules_effect_cube_effect_cube_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./modules/effect-cube/effect-cube.js */ \\\"./node_modules/swiper/modules/effect-cube/effect-cube.js\\\");\\n/* harmony import */ var _modules_effect_flip_effect_flip_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./modules/effect-flip/effect-flip.js */ \\\"./node_modules/swiper/modules/effect-flip/effect-flip.js\\\");\\n/* harmony import */ var _modules_effect_coverflow_effect_coverflow_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./modules/effect-coverflow/effect-coverflow.js */ \\\"./node_modules/swiper/modules/effect-coverflow/effect-coverflow.js\\\");\\n/* harmony import */ var _modules_effect_creative_effect_creative_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./modules/effect-creative/effect-creative.js */ \\\"./node_modules/swiper/modules/effect-creative/effect-creative.js\\\");\\n/* harmony import */ var _modules_effect_cards_effect_cards_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./modules/effect-cards/effect-cards.js */ \\\"./node_modules/swiper/modules/effect-cards/effect-cards.js\\\");\\n/**\\n * Swiper 9.0.3\\n * Most modern mobile touch slider and framework with hardware accelerated transitions\\n * https://swiperjs.com\\n *\\n * Copyright 2014-2023 Vladimir Kharlampidi\\n *\\n * Released under the MIT License\\n *\\n * Released on: February 6, 2023\\n */\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n// Swiper Class\\nconst modules = [_modules_virtual_virtual_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"], _modules_keyboard_keyboard_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"], _modules_mousewheel_mousewheel_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"], _modules_navigation_navigation_js__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"], _modules_pagination_pagination_js__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"], _modules_scrollbar_scrollbar_js__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"], _modules_parallax_parallax_js__WEBPACK_IMPORTED_MODULE_7__[\\\"default\\\"], _modules_zoom_zoom_js__WEBPACK_IMPORTED_MODULE_8__[\\\"default\\\"], _modules_controller_controller_js__WEBPACK_IMPORTED_MODULE_9__[\\\"default\\\"], _modules_a11y_a11y_js__WEBPACK_IMPORTED_MODULE_10__[\\\"default\\\"], _modules_history_history_js__WEBPACK_IMPORTED_MODULE_11__[\\\"default\\\"], _modules_hash_navigation_hash_navigation_js__WEBPACK_IMPORTED_MODULE_12__[\\\"default\\\"], _modules_autoplay_autoplay_js__WEBPACK_IMPORTED_MODULE_13__[\\\"default\\\"], _modules_thumbs_thumbs_js__WEBPACK_IMPORTED_MODULE_14__[\\\"default\\\"], _modules_free_mode_free_mode_js__WEBPACK_IMPORTED_MODULE_15__[\\\"default\\\"], _modules_grid_grid_js__WEBPACK_IMPORTED_MODULE_16__[\\\"default\\\"], _modules_manipulation_manipulation_js__WEBPACK_IMPORTED_MODULE_17__[\\\"default\\\"], _modules_effect_fade_effect_fade_js__WEBPACK_IMPORTED_MODULE_18__[\\\"default\\\"], _modules_effect_cube_effect_cube_js__WEBPACK_IMPORTED_MODULE_19__[\\\"default\\\"], _modules_effect_flip_effect_flip_js__WEBPACK_IMPORTED_MODULE_20__[\\\"default\\\"], _modules_effect_coverflow_effect_coverflow_js__WEBPACK_IMPORTED_MODULE_21__[\\\"default\\\"], _modules_effect_creative_effect_creative_js__WEBPACK_IMPORTED_MODULE_22__[\\\"default\\\"], _modules_effect_cards_effect_cards_js__WEBPACK_IMPORTED_MODULE_23__[\\\"default\\\"]];\\n_core_core_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"].use(modules);\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL3N3aXBlci1idW5kbGUuZXNtLmpzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFb0M7QUFDd0I7QUFDVDtBQUNHO0FBQ007QUFDQTtBQUNBO0FBQ0g7QUFDSDtBQUNaO0FBQ2tCO0FBQ2xCO0FBQ1M7QUFDdUI7QUFDcEI7QUFDTjtBQUNRO0FBQ2Q7QUFDd0I7QUFDSjtBQUNBO0FBQ0E7QUFDZTtBQUNIO0FBQ1Q7O0FBRWpFO0FBQ0EsaUJBQWlCLG1FQUFPLEVBQUUscUVBQVEsRUFBRSx5RUFBVSxFQUFFLHlFQUFVLEVBQUUseUVBQVUsRUFBRSx1RUFBUyxFQUFFLHFFQUFRLEVBQUUsNkRBQUksRUFBRSx5RUFBVSxFQUFFLDhEQUFJLEVBQUUsb0VBQU8sRUFBRSxvRkFBYyxFQUFFLHNFQUFRLEVBQUUsa0VBQU0sRUFBRSx3RUFBUSxFQUFFLDhEQUFJLEVBQUUsOEVBQVksRUFBRSw0RUFBVSxFQUFFLDRFQUFVLEVBQUUsNEVBQVUsRUFBRSxzRkFBZSxFQUFFLG9GQUFjLEVBQUUsOEVBQVc7QUFDOVEseURBQVUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdHJpYmUtZGlnaXRhbC9jYXJib24tc2hvcGlmeS10aGVtZS8uL25vZGVfbW9kdWxlcy9zd2lwZXIvc3dpcGVyLWJ1bmRsZS5lc20uanM/Y2U3MSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN3aXBlciA5LjAuM1xuICogTW9zdCBtb2Rlcm4gbW9iaWxlIHRvdWNoIHNsaWRlciBhbmQgZnJhbWV3b3JrIHdpdGggaGFyZHdhcmUgYWNjZWxlcmF0ZWQgdHJhbnNpdGlvbnNcbiAqIGh0dHBzOi8vc3dpcGVyanMuY29tXG4gKlxuICogQ29weXJpZ2h0IDIwMTQtMjAyMyBWbGFkaW1pciBLaGFybGFtcGlkaVxuICpcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZVxuICpcbiAqIFJlbGVhc2VkIG9uOiBGZWJydWFyeSA2LCAyMDIzXG4gKi9cblxuaW1wb3J0IFN3aXBlciBmcm9tICcuL2NvcmUvY29yZS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFN3aXBlciwgZGVmYXVsdCB9IGZyb20gJy4vY29yZS9jb3JlLmpzJztcbmltcG9ydCBWaXJ0dWFsIGZyb20gJy4vbW9kdWxlcy92aXJ0dWFsL3ZpcnR1YWwuanMnO1xuaW1wb3J0IEtleWJvYXJkIGZyb20gJy4vbW9kdWxlcy9rZXlib2FyZC9rZXlib2FyZC5qcyc7XG5pbXBvcnQgTW91c2V3aGVlbCBmcm9tICcuL21vZHVsZXMvbW91c2V3aGVlbC9tb3VzZXdoZWVsLmpzJztcbmltcG9ydCBOYXZpZ2F0aW9uIGZyb20gJy4vbW9kdWxlcy9uYXZpZ2F0aW9uL25hdmlnYXRpb24uanMnO1xuaW1wb3J0IFBhZ2luYXRpb24gZnJvbSAnLi9tb2R1bGVzL3BhZ2luYXRpb24vcGFnaW5hdGlvbi5qcyc7XG5pbXBvcnQgU2Nyb2xsYmFyIGZyb20gJy4vbW9kdWxlcy9zY3JvbGxiYXIvc2Nyb2xsYmFyLmpzJztcbmltcG9ydCBQYXJhbGxheCBmcm9tICcuL21vZHVsZXMvcGFyYWxsYXgvcGFyYWxsYXguanMnO1xuaW1wb3J0IFpvb20gZnJvbSAnLi9tb2R1bGVzL3pvb20vem9vbS5qcyc7XG5pbXBvcnQgQ29udHJvbGxlciBmcm9tICcuL21vZHVsZXMvY29udHJvbGxlci9jb250cm9sbGVyLmpzJztcbmltcG9ydCBBMTF5IGZyb20gJy4vbW9kdWxlcy9hMTF5L2ExMXkuanMnO1xuaW1wb3J0IEhpc3RvcnkgZnJvbSAnLi9tb2R1bGVzL2hpc3RvcnkvaGlzdG9yeS5qcyc7XG5pbXBvcnQgSGFzaE5hdmlnYXRpb24gZnJvbSAnLi9tb2R1bGVzL2hhc2gtbmF2aWdhdGlvbi9oYXNoLW5hdmlnYXRpb24uanMnO1xuaW1wb3J0IEF1dG9wbGF5IGZyb20gJy4vbW9kdWxlcy9hdXRvcGxheS9hdXRvcGxheS5qcyc7XG5pbXBvcnQgVGh1bWJzIGZyb20gJy4vbW9kdWxlcy90aHVtYnMvdGh1bWJzLmpzJztcbmltcG9ydCBGcmVlTW9kZSBmcm9tICcuL21vZHVsZXMvZnJlZS1tb2RlL2ZyZWUtbW9kZS5qcyc7XG5pbXBvcnQgR3JpZCBmcm9tICcuL21vZHVsZXMvZ3JpZC9ncmlkLmpzJztcbmltcG9ydCBNYW5pcHVsYXRpb24gZnJvbSAnLi9tb2R1bGVzL21hbmlwdWxhdGlvbi9tYW5pcHVsYXRpb24uanMnO1xuaW1wb3J0IEVmZmVjdEZhZGUgZnJvbSAnLi9tb2R1bGVzL2VmZmVjdC1mYWRlL2VmZmVjdC1mYWRlLmpzJztcbmltcG9ydCBFZmZlY3RDdWJlIGZyb20gJy4vbW9kdWxlcy9lZmZlY3QtY3ViZS9lZmZlY3QtY3ViZS5qcyc7XG5pbXBvcnQgRWZmZWN0RmxpcCBmcm9tICcuL21vZHVsZXMvZWZmZWN0LWZsaXAvZWZmZWN0LWZsaXAuanMnO1xuaW1wb3J0IEVmZmVjdENvdmVyZmxvdyBmcm9tICcuL21vZHVsZXMvZWZmZWN0LWNvdmVyZmxvdy9lZmZlY3QtY292ZXJmbG93LmpzJztcbmltcG9ydCBFZmZlY3RDcmVhdGl2ZSBmcm9tICcuL21vZHVsZXMvZWZmZWN0LWNyZWF0aXZlL2VmZmVjdC1jcmVhdGl2ZS5qcyc7XG5pbXBvcnQgRWZmZWN0Q2FyZHMgZnJvbSAnLi9tb2R1bGVzL2VmZmVjdC1jYXJkcy9lZmZlY3QtY2FyZHMuanMnO1xuXG4vLyBTd2lwZXIgQ2xhc3NcbmNvbnN0IG1vZHVsZXMgPSBbVmlydHVhbCwgS2V5Ym9hcmQsIE1vdXNld2hlZWwsIE5hdmlnYXRpb24sIFBhZ2luYXRpb24sIFNjcm9sbGJhciwgUGFyYWxsYXgsIFpvb20sIENvbnRyb2xsZXIsIEExMXksIEhpc3RvcnksIEhhc2hOYXZpZ2F0aW9uLCBBdXRvcGxheSwgVGh1bWJzLCBGcmVlTW9kZSwgR3JpZCwgTWFuaXB1bGF0aW9uLCBFZmZlY3RGYWRlLCBFZmZlY3RDdWJlLCBFZmZlY3RGbGlwLCBFZmZlY3RDb3ZlcmZsb3csIEVmZmVjdENyZWF0aXZlLCBFZmZlY3RDYXJkc107XG5Td2lwZXIudXNlKG1vZHVsZXMpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/swiper-bundle.esm.js\\n\");\r\n\r\n/***/ }),\r\n\r\n/***/ \"./node_modules/swiper/swiper.esm.js\":\r\n/*!*******************************************!*\\\r\n  !*** ./node_modules/swiper/swiper.esm.js ***!\r\n  \\*******************************************/\r\n/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {\r\n\r\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */   \\\"A11y\\\": () => (/* reexport safe */ _modules_a11y_a11y_js__WEBPACK_IMPORTED_MODULE_10__[\\\"default\\\"]),\\n/* harmony export */   \\\"Autoplay\\\": () => (/* reexport safe */ _modules_autoplay_autoplay_js__WEBPACK_IMPORTED_MODULE_13__[\\\"default\\\"]),\\n/* harmony export */   \\\"Controller\\\": () => (/* reexport safe */ _modules_controller_controller_js__WEBPACK_IMPORTED_MODULE_9__[\\\"default\\\"]),\\n/* harmony export */   \\\"EffectCards\\\": () => (/* reexport safe */ _modules_effect_cards_effect_cards_js__WEBPACK_IMPORTED_MODULE_23__[\\\"default\\\"]),\\n/* harmony export */   \\\"EffectCoverflow\\\": () => (/* reexport safe */ _modules_effect_coverflow_effect_coverflow_js__WEBPACK_IMPORTED_MODULE_21__[\\\"default\\\"]),\\n/* harmony export */   \\\"EffectCreative\\\": () => (/* reexport safe */ _modules_effect_creative_effect_creative_js__WEBPACK_IMPORTED_MODULE_22__[\\\"default\\\"]),\\n/* harmony export */   \\\"EffectCube\\\": () => (/* reexport safe */ _modules_effect_cube_effect_cube_js__WEBPACK_IMPORTED_MODULE_19__[\\\"default\\\"]),\\n/* harmony export */   \\\"EffectFade\\\": () => (/* reexport safe */ _modules_effect_fade_effect_fade_js__WEBPACK_IMPORTED_MODULE_18__[\\\"default\\\"]),\\n/* harmony export */   \\\"EffectFlip\\\": () => (/* reexport safe */ _modules_effect_flip_effect_flip_js__WEBPACK_IMPORTED_MODULE_20__[\\\"default\\\"]),\\n/* harmony export */   \\\"FreeMode\\\": () => (/* reexport safe */ _modules_free_mode_free_mode_js__WEBPACK_IMPORTED_MODULE_15__[\\\"default\\\"]),\\n/* harmony export */   \\\"Grid\\\": () => (/* reexport safe */ _modules_grid_grid_js__WEBPACK_IMPORTED_MODULE_16__[\\\"default\\\"]),\\n/* harmony export */   \\\"HashNavigation\\\": () => (/* reexport safe */ _modules_hash_navigation_hash_navigation_js__WEBPACK_IMPORTED_MODULE_12__[\\\"default\\\"]),\\n/* harmony export */   \\\"History\\\": () => (/* reexport safe */ _modules_history_history_js__WEBPACK_IMPORTED_MODULE_11__[\\\"default\\\"]),\\n/* harmony export */   \\\"Keyboard\\\": () => (/* reexport safe */ _modules_keyboard_keyboard_js__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"]),\\n/* harmony export */   \\\"Manipulation\\\": () => (/* reexport safe */ _modules_manipulation_manipulation_js__WEBPACK_IMPORTED_MODULE_17__[\\\"default\\\"]),\\n/* harmony export */   \\\"Mousewheel\\\": () => (/* reexport safe */ _modules_mousewheel_mousewheel_js__WEBPACK_IMPORTED_MODULE_3__[\\\"default\\\"]),\\n/* harmony export */   \\\"Navigation\\\": () => (/* reexport safe */ _modules_navigation_navigation_js__WEBPACK_IMPORTED_MODULE_4__[\\\"default\\\"]),\\n/* harmony export */   \\\"Pagination\\\": () => (/* reexport safe */ _modules_pagination_pagination_js__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"]),\\n/* harmony export */   \\\"Parallax\\\": () => (/* reexport safe */ _modules_parallax_parallax_js__WEBPACK_IMPORTED_MODULE_7__[\\\"default\\\"]),\\n/* harmony export */   \\\"Scrollbar\\\": () => (/* reexport safe */ _modules_scrollbar_scrollbar_js__WEBPACK_IMPORTED_MODULE_6__[\\\"default\\\"]),\\n/* harmony export */   \\\"Swiper\\\": () => (/* reexport safe */ _core_core_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"]),\\n/* harmony export */   \\\"Thumbs\\\": () => (/* reexport safe */ _modules_thumbs_thumbs_js__WEBPACK_IMPORTED_MODULE_14__[\\\"default\\\"]),\\n/* harmony export */   \\\"Virtual\\\": () => (/* reexport safe */ _modules_virtual_virtual_js__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"]),\\n/* harmony export */   \\\"Zoom\\\": () => (/* reexport safe */ _modules_zoom_zoom_js__WEBPACK_IMPORTED_MODULE_8__[\\\"default\\\"]),\\n/* harmony export */   \\\"default\\\": () => (/* reexport safe */ _core_core_js__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])\\n/* harmony export */ });\\n/* harmony import */ var _core_core_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core/core.js */ \\\"./node_modules/swiper/core/core.js\\\");\\n/* harmony import */ var _modules_virtual_virtual_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/virtual/virtual.js */ \\\"./node_modules/swiper/modules/virtual/virtual.js\\\");\\n/* harmony import */ var _modules_keyboard_keyboard_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/keyboard/keyboard.js */ \\\"./node_modules/swiper/modules/keyboard/keyboard.js\\\");\\n/* harmony import */ var _modules_mousewheel_mousewheel_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modules/mousewheel/mousewheel.js */ \\\"./node_modules/swiper/modules/mousewheel/mousewheel.js\\\");\\n/* harmony import */ var _modules_navigation_navigation_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modules/navigation/navigation.js */ \\\"./node_modules/swiper/modules/navigation/navigation.js\\\");\\n/* harmony import */ var _modules_pagination_pagination_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modules/pagination/pagination.js */ \\\"./node_modules/swiper/modules/pagination/pagination.js\\\");\\n/* harmony import */ var _modules_scrollbar_scrollbar_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modules/scrollbar/scrollbar.js */ \\\"./node_modules/swiper/modules/scrollbar/scrollbar.js\\\");\\n/* harmony import */ var _modules_parallax_parallax_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modules/parallax/parallax.js */ \\\"./node_modules/swiper/modules/parallax/parallax.js\\\");\\n/* harmony import */ var _modules_zoom_zoom_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modules/zoom/zoom.js */ \\\"./node_modules/swiper/modules/zoom/zoom.js\\\");\\n/* harmony import */ var _modules_controller_controller_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./modules/controller/controller.js */ \\\"./node_modules/swiper/modules/controller/controller.js\\\");\\n/* harmony import */ var _modules_a11y_a11y_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./modules/a11y/a11y.js */ \\\"./node_modules/swiper/modules/a11y/a11y.js\\\");\\n/* harmony import */ var _modules_history_history_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./modules/history/history.js */ \\\"./node_modules/swiper/modules/history/history.js\\\");\\n/* harmony import */ var _modules_hash_navigation_hash_navigation_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modules/hash-navigation/hash-navigation.js */ \\\"./node_modules/swiper/modules/hash-navigation/hash-navigation.js\\\");\\n/* harmony import */ var _modules_autoplay_autoplay_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./modules/autoplay/autoplay.js */ \\\"./node_modules/swiper/modules/autoplay/autoplay.js\\\");\\n/* harmony import */ var _modules_thumbs_thumbs_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./modules/thumbs/thumbs.js */ \\\"./node_modules/swiper/modules/thumbs/thumbs.js\\\");\\n/* harmony import */ var _modules_free_mode_free_mode_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./modules/free-mode/free-mode.js */ \\\"./node_modules/swiper/modules/free-mode/free-mode.js\\\");\\n/* harmony import */ var _modules_grid_grid_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./modules/grid/grid.js */ \\\"./node_modules/swiper/modules/grid/grid.js\\\");\\n/* harmony import */ var _modules_manipulation_manipulation_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./modules/manipulation/manipulation.js */ \\\"./node_modules/swiper/modules/manipulation/manipulation.js\\\");\\n/* harmony import */ var _modules_effect_fade_effect_fade_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./modules/effect-fade/effect-fade.js */ \\\"./node_modules/swiper/modules/effect-fade/effect-fade.js\\\");\\n/* harmony import */ var _modules_effect_cube_effect_cube_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./modules/effect-cube/effect-cube.js */ \\\"./node_modules/swiper/modules/effect-cube/effect-cube.js\\\");\\n/* harmony import */ var _modules_effect_flip_effect_flip_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./modules/effect-flip/effect-flip.js */ \\\"./node_modules/swiper/modules/effect-flip/effect-flip.js\\\");\\n/* harmony import */ var _modules_effect_coverflow_effect_coverflow_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./modules/effect-coverflow/effect-coverflow.js */ \\\"./node_modules/swiper/modules/effect-coverflow/effect-coverflow.js\\\");\\n/* harmony import */ var _modules_effect_creative_effect_creative_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./modules/effect-creative/effect-creative.js */ \\\"./node_modules/swiper/modules/effect-creative/effect-creative.js\\\");\\n/* harmony import */ var _modules_effect_cards_effect_cards_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./modules/effect-cards/effect-cards.js */ \\\"./node_modules/swiper/modules/effect-cards/effect-cards.js\\\");\\n/**\\n * Swiper 9.0.3\\n * Most modern mobile touch slider and framework with hardware accelerated transitions\\n * https://swiperjs.com\\n *\\n * Copyright 2014-2023 Vladimir Kharlampidi\\n *\\n * Released under the MIT License\\n *\\n * Released on: February 6, 2023\\n */\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvc3dpcGVyL3N3aXBlci5lc20uanMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRTREO0FBQ007QUFDRztBQUNNO0FBQ0E7QUFDQTtBQUNIO0FBQ0g7QUFDWjtBQUNrQjtBQUNsQjtBQUNTO0FBQ3VCO0FBQ3BCO0FBQ047QUFDUTtBQUNkO0FBQ3dCO0FBQ0o7QUFDQTtBQUNBO0FBQ2U7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL0B0cmliZS1kaWdpdGFsL2NhcmJvbi1zaG9waWZ5LXRoZW1lLy4vbm9kZV9tb2R1bGVzL3N3aXBlci9zd2lwZXIuZXNtLmpzPzI5OWUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTd2lwZXIgOS4wLjNcbiAqIE1vc3QgbW9kZXJuIG1vYmlsZSB0b3VjaCBzbGlkZXIgYW5kIGZyYW1ld29yayB3aXRoIGhhcmR3YXJlIGFjY2VsZXJhdGVkIHRyYW5zaXRpb25zXG4gKiBodHRwczovL3N3aXBlcmpzLmNvbVxuICpcbiAqIENvcHlyaWdodCAyMDE0LTIwMjMgVmxhZGltaXIgS2hhcmxhbXBpZGlcbiAqXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcbiAqXG4gKiBSZWxlYXNlZCBvbjogRmVicnVhcnkgNiwgMjAyM1xuICovXG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3dpcGVyLCBkZWZhdWx0IH0gZnJvbSAnLi9jb3JlL2NvcmUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBWaXJ0dWFsIH0gZnJvbSAnLi9tb2R1bGVzL3ZpcnR1YWwvdmlydHVhbC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEtleWJvYXJkIH0gZnJvbSAnLi9tb2R1bGVzL2tleWJvYXJkL2tleWJvYXJkLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTW91c2V3aGVlbCB9IGZyb20gJy4vbW9kdWxlcy9tb3VzZXdoZWVsL21vdXNld2hlZWwuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBOYXZpZ2F0aW9uIH0gZnJvbSAnLi9tb2R1bGVzL25hdmlnYXRpb24vbmF2aWdhdGlvbi5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBhZ2luYXRpb24gfSBmcm9tICcuL21vZHVsZXMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2Nyb2xsYmFyIH0gZnJvbSAnLi9tb2R1bGVzL3Njcm9sbGJhci9zY3JvbGxiYXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXJhbGxheCB9IGZyb20gJy4vbW9kdWxlcy9wYXJhbGxheC9wYXJhbGxheC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFpvb20gfSBmcm9tICcuL21vZHVsZXMvem9vbS96b29tLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29udHJvbGxlciB9IGZyb20gJy4vbW9kdWxlcy9jb250cm9sbGVyL2NvbnRyb2xsZXIuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBMTF5IH0gZnJvbSAnLi9tb2R1bGVzL2ExMXkvYTExeS5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEhpc3RvcnkgfSBmcm9tICcuL21vZHVsZXMvaGlzdG9yeS9oaXN0b3J5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSGFzaE5hdmlnYXRpb24gfSBmcm9tICcuL21vZHVsZXMvaGFzaC1uYXZpZ2F0aW9uL2hhc2gtbmF2aWdhdGlvbi5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEF1dG9wbGF5IH0gZnJvbSAnLi9tb2R1bGVzL2F1dG9wbGF5L2F1dG9wbGF5LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGh1bWJzIH0gZnJvbSAnLi9tb2R1bGVzL3RodW1icy90aHVtYnMuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGcmVlTW9kZSB9IGZyb20gJy4vbW9kdWxlcy9mcmVlLW1vZGUvZnJlZS1tb2RlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR3JpZCB9IGZyb20gJy4vbW9kdWxlcy9ncmlkL2dyaWQuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNYW5pcHVsYXRpb24gfSBmcm9tICcuL21vZHVsZXMvbWFuaXB1bGF0aW9uL21hbmlwdWxhdGlvbi5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVmZmVjdEZhZGUgfSBmcm9tICcuL21vZHVsZXMvZWZmZWN0LWZhZGUvZWZmZWN0LWZhZGUuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFZmZlY3RDdWJlIH0gZnJvbSAnLi9tb2R1bGVzL2VmZmVjdC1jdWJlL2VmZmVjdC1jdWJlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRWZmZWN0RmxpcCB9IGZyb20gJy4vbW9kdWxlcy9lZmZlY3QtZmxpcC9lZmZlY3QtZmxpcC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVmZmVjdENvdmVyZmxvdyB9IGZyb20gJy4vbW9kdWxlcy9lZmZlY3QtY292ZXJmbG93L2VmZmVjdC1jb3ZlcmZsb3cuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFZmZlY3RDcmVhdGl2ZSB9IGZyb20gJy4vbW9kdWxlcy9lZmZlY3QtY3JlYXRpdmUvZWZmZWN0LWNyZWF0aXZlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRWZmZWN0Q2FyZHMgfSBmcm9tICcuL21vZHVsZXMvZWZmZWN0LWNhcmRzL2VmZmVjdC1jYXJkcy5qcyc7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./node_modules/swiper/swiper.esm.js\\n\");\r\n\r\n/***/ })\r\n\r\n/******/ \t});\r\n/************************************************************************/\r\n/******/ \t// The module cache\r\n/******/ \tvar __webpack_module_cache__ = {};\r\n/******/ \t\r\n/******/ \t// The require function\r\n/******/ \tfunction __webpack_require__(moduleId) {\r\n/******/ \t\t// Check if module is in cache\r\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\r\n/******/ \t\tif (cachedModule !== undefined) {\r\n/******/ \t\t\treturn cachedModule.exports;\r\n/******/ \t\t}\r\n/******/ \t\t// Create a new module (and put it into the cache)\r\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\r\n/******/ \t\t\t// no module.id needed\r\n/******/ \t\t\t// no module.loaded needed\r\n/******/ \t\t\texports: {}\r\n/******/ \t\t};\r\n/******/ \t\r\n/******/ \t\t// Execute the module function\r\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\r\n/******/ \t\r\n/******/ \t\t// Return the exports of the module\r\n/******/ \t\treturn module.exports;\r\n/******/ \t}\r\n/******/ \t\r\n/******/ \t// expose the modules object (__webpack_modules__)\r\n/******/ \t__webpack_require__.m = __webpack_modules__;\r\n/******/ \t\r\n/************************************************************************/\r\n/******/ \t/* webpack/runtime/chunk loaded */\r\n/******/ \t(() => {\r\n/******/ \t\tvar deferred = [];\r\n/******/ \t\t__webpack_require__.O = (result, chunkIds, fn, priority) => {\r\n/******/ \t\t\tif(chunkIds) {\r\n/******/ \t\t\t\tpriority = priority || 0;\r\n/******/ \t\t\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\r\n/******/ \t\t\t\tdeferred[i] = [chunkIds, fn, priority];\r\n/******/ \t\t\t\treturn;\r\n/******/ \t\t\t}\r\n/******/ \t\t\tvar notFulfilled = Infinity;\r\n/******/ \t\t\tfor (var i = 0; i < deferred.length; i++) {\r\n/******/ \t\t\t\tvar [chunkIds, fn, priority] = deferred[i];\r\n/******/ \t\t\t\tvar fulfilled = true;\r\n/******/ \t\t\t\tfor (var j = 0; j < chunkIds.length; j++) {\r\n/******/ \t\t\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\r\n/******/ \t\t\t\t\t\tchunkIds.splice(j--, 1);\r\n/******/ \t\t\t\t\t} else {\r\n/******/ \t\t\t\t\t\tfulfilled = false;\r\n/******/ \t\t\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\r\n/******/ \t\t\t\t\t}\r\n/******/ \t\t\t\t}\r\n/******/ \t\t\t\tif(fulfilled) {\r\n/******/ \t\t\t\t\tdeferred.splice(i--, 1)\r\n/******/ \t\t\t\t\tvar r = fn();\r\n/******/ \t\t\t\t\tif (r !== undefined) result = r;\r\n/******/ \t\t\t\t}\r\n/******/ \t\t\t}\r\n/******/ \t\t\treturn result;\r\n/******/ \t\t};\r\n/******/ \t})();\r\n/******/ \t\r\n/******/ \t/* webpack/runtime/define property getters */\r\n/******/ \t(() => {\r\n/******/ \t\t// define getter functions for harmony exports\r\n/******/ \t\t__webpack_require__.d = (exports, definition) => {\r\n/******/ \t\t\tfor(var key in definition) {\r\n/******/ \t\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\r\n/******/ \t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\r\n/******/ \t\t\t\t}\r\n/******/ \t\t\t}\r\n/******/ \t\t};\r\n/******/ \t})();\r\n/******/ \t\r\n/******/ \t/* webpack/runtime/hasOwnProperty shorthand */\r\n/******/ \t(() => {\r\n/******/ \t\t__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))\r\n/******/ \t})();\r\n/******/ \t\r\n/******/ \t/* webpack/runtime/make namespace object */\r\n/******/ \t(() => {\r\n/******/ \t\t// define __esModule on exports\r\n/******/ \t\t__webpack_require__.r = (exports) => {\r\n/******/ \t\t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\r\n/******/ \t\t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\r\n/******/ \t\t\t}\r\n/******/ \t\t\tObject.defineProperty(exports, '__esModule', { value: true });\r\n/******/ \t\t};\r\n/******/ \t})();\r\n/******/ \t\r\n/******/ \t/* webpack/runtime/jsonp chunk loading */\r\n/******/ \t(() => {\r\n/******/ \t\t// no baseURI\r\n/******/ \t\t\r\n/******/ \t\t// object to store loaded and loading chunks\r\n/******/ \t\t// undefined = chunk not loaded, null = chunk preloaded/prefetched\r\n/******/ \t\t// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\r\n/******/ \t\tvar installedChunks = {\r\n/******/ \t\t\t\"/assets/app\": 0,\r\n/******/ \t\t\t\"assets/app\": 0\r\n/******/ \t\t};\r\n/******/ \t\t\r\n/******/ \t\t// no chunk on demand loading\r\n/******/ \t\t\r\n/******/ \t\t// no prefetching\r\n/******/ \t\t\r\n/******/ \t\t// no preloaded\r\n/******/ \t\t\r\n/******/ \t\t// no HMR\r\n/******/ \t\t\r\n/******/ \t\t// no HMR manifest\r\n/******/ \t\t\r\n/******/ \t\t__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\r\n/******/ \t\t\r\n/******/ \t\t// install a JSONP callback for chunk loading\r\n/******/ \t\tvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\r\n/******/ \t\t\tvar [chunkIds, moreModules, runtime] = data;\r\n/******/ \t\t\t// add \"moreModules\" to the modules object,\r\n/******/ \t\t\t// then flag all \"chunkIds\" as loaded and fire callback\r\n/******/ \t\t\tvar moduleId, chunkId, i = 0;\r\n/******/ \t\t\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\r\n/******/ \t\t\t\tfor(moduleId in moreModules) {\r\n/******/ \t\t\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\r\n/******/ \t\t\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\r\n/******/ \t\t\t\t\t}\r\n/******/ \t\t\t\t}\r\n/******/ \t\t\t\tif(runtime) var result = runtime(__webpack_require__);\r\n/******/ \t\t\t}\r\n/******/ \t\t\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\r\n/******/ \t\t\tfor(;i < chunkIds.length; i++) {\r\n/******/ \t\t\t\tchunkId = chunkIds[i];\r\n/******/ \t\t\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\r\n/******/ \t\t\t\t\tinstalledChunks[chunkId][0]();\r\n/******/ \t\t\t\t}\r\n/******/ \t\t\t\tinstalledChunks[chunkId] = 0;\r\n/******/ \t\t\t}\r\n/******/ \t\t\treturn __webpack_require__.O(result);\r\n/******/ \t\t}\r\n/******/ \t\t\r\n/******/ \t\tvar chunkLoadingGlobal = self[\"webpackChunk_tribe_digital_carbon_shopify_theme\"] = self[\"webpackChunk_tribe_digital_carbon_shopify_theme\"] || [];\r\n/******/ \t\tchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\r\n/******/ \t\tchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));\r\n/******/ \t})();\r\n/******/ \t\r\n/************************************************************************/\r\n/******/ \t\r\n/******/ \t// startup\r\n/******/ \t// Load entry module and return exports\r\n/******/ \t// This entry module depends on other loaded chunks and execution need to be delayed\r\n/******/ \t__webpack_require__.O(undefined, [\"assets/app\"], () => (__webpack_require__(\"./resources/scripts/app.js\")))\r\n/******/ \tvar __webpack_exports__ = __webpack_require__.O(undefined, [\"assets/app\"], () => (__webpack_require__(\"./resources/styles/app.scss\")))\r\n/******/ \t__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\r\n/******/ \t\r\n/******/ })()\r\n;"],
  "mappings": "CAQU,IAAM,CACN,aACA,IAAI,oBAAuB,CAE/B,iCAIC,CAAC,wBAAyB,oBAAqB,sBAAwB,CAE9E,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAA+rlJ,CAE9rlJ,GAEA,4BAIC,CAAC,wBAAyB,oBAAqB,sBAAwB,CAE9E,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAA41yiB,CAE31yiB,GAEA,4CAIC,CAAC,wBAAyB,oBAAqB,sBAAwB,CAE9E,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAyupB,CAExupB,GAEA,uCAIC,CAAC,wBAAyB,oBAAqB,sBAAwB,CAE9E,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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C,CAAC,wBAAyB,oBAAqB,sBAAwB,CAE9E,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAuytK,CAEtytK,GAEA,mCAIC,CAAC,wBAAyB,oBAAqB,sBAAwB,CAE9E,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAA6rlE,CAE5rlE,GAEA,wCAIC,CAAC,wBAAyB,oBAAqB,sBAAwB,CAE9E,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAA8p7R,CAE7p7R,GAEA,oCAIC,CAAC,wBAAyB,oBAAqB,sBAAwB,CAE9E,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAgusb,CAE/tsb,GAEA,gCAIC,CAAC,wBAAyB,oBAAqB,sBAAwB,CAE9E,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAA60J,CAE50J,GAEA,uCAIC,CAAC,wBAAyB,oBAAqB,sBAAwB,CAE9E,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAo/zD,CAEn/zD,GAEA,4CAIC,CAAC,wBAAyB,oBAAqB,sBAAwB,CAE9E,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAiwxQ,CAEhwxQ,GAEA,+BAIC,CAAC,wBAAyB,oBAAqB,sBAAwB,CAE9E,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA,CAAqlB,CAEplB,GAEA,+CAIC,CAAC,oCAAqC,oBAAqB,sBAAwB,CAE1F,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAA8gU,CAE7gU,GAEA,+CAIC,CAAC,oCAAqC,oBAAqB,sBAAwB,CAE1F,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAA6xT,CAE5xT,GAEA,2DAIC,CAAC,oCAAqC,oBAAqB,sBAAwB,CAE1F,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAgzH,CAE/yH,GAEA,mDAIC,CAAC,oCAAqC,oBAAqB,sBAAwB,CAE1F,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAA+jD,CAE9jD,GAEA,2DAIC,CAAC,oCAAqC,oBAAqB,sBAAwB,CAE1F,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAuwQ,CAEtwQ,GAEA,sDAIC,CAAC,oCAAqC,oBAAqB,sBAAwB,CAE1F,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAA2mG,CAE1mG,GAEA,oDAIC,CAAC,oCAAqC,oBAAqB,sBAAwB,CAE1F,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAupI,CAEtpI,GAEA,+CAIC,CAAC,oCAAqC,oBAAqB,sBAAwB,CAE1F,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAA4gD,CAE3gD,GAEA,uDAIC,CAAC,oCAAqC,oBAAqB,sBAAwB,CAE1F,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAutC,CAEttC,GAEA,sCAIC,CAAC,oCAAqC,oBAAqB,sBAAwB,CAE1F,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAqj8B,CAEpj8B,GAEA,4DAIC,CAAC,oCAAqC,oBAAqB,sBAAwB,CAE1F,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAuvL,CAEtvL,GAEA,2DAIC,CAAC,oCAAqC,oBAAqB,sBAAwB,CAE1F,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAizD,CAEhzD,GAEA,6DAIC,CAAC,oCAAqC,oBAAqB,sBAAwB,CAE1F,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAymK,CAExmK,GAEA,8CAIC,CAAC,oCAAqC,oBAAqB,sBAAwB,CAE1F,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAA6xrC,CAE5xrC,GAEA,0DAIC,CAAC,oCAAqC,oBAAqB,sBAAwB,CAE1F,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAslgB,CAErlgB,GAEA,0DAIC,CAAC,oCAAqC,oBAAqB,sBAAwB,CAE1F,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAq/4B,CAEp/4B,GAEA,8CAIC,CAAC,oCAAqC,oBAAqB,sBAAwB,CAE1F,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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",
  "names": []
}
