{"version":3,"sources":["../../node_modules/browser-pack/_prelude.js","../../Websites/Website_Subway/SubwayV2/client/js/custom-vendor/bootstrap-carousel/carousel.js","../../Websites/Website_Subway/SubwayV2/client/js/custom-vendor/bootstrap-carousel/util.js","../../Websites/Website_Subway/SubwayV2/client/js/custom-vendor/jquery-touchswipe.js","../../Websites/Website_Subway/SubwayV2/client/js/custom-vendor/slick-carousel/slick/slick.js","../../Websites/Website_Subway/SubwayV2/client/js/helpers/breakpoints.js","../../Websites/Website_Subway/SubwayV2/client/js/helpers/determineMobileOS.js","../../Websites/Website_Subway/SubwayV2/client/js/helpers/forEach.js","../../Websites/Website_Subway/SubwayV2/client/js/index.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/ImageSlider.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/accordion.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/activeNavItem.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/alert.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/anchoredDisclaimer.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/backToTopButton.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/bgVideo.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/dialogManager.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/downloadApp.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/flipper.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/getAppLink.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/getStickyHeaderHeight.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/getTheApp.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/getTheAppBanner.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/homePageModal.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/languageSelector.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/loadPress.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/loggedin.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/mainNav.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/mobileNav.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/moveItems.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/nutritionGrid.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/openModal.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/signup.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/stickyHeader.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/stopPageJumpForHashUrl.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/tabs.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/toggleContrast.js","../../Websites/Website_Subway/SubwayV2/client/js/modules/videoPlayer.js"],"names":[],"mappings":"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","file":"index-generated.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()","import $ from 'jquery'\r\nimport Util from './util'\r\n\r\n/**\r\n * --------------------------------------------------------------------------\r\n * Bootstrap (v4.0.0): carousel.js\r\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n * --------------------------------------------------------------------------\r\n */\r\n\r\nconst Carousel = (($) => {\r\n /**\r\n * ------------------------------------------------------------------------\r\n * Constants\r\n * ------------------------------------------------------------------------\r\n */\r\n\r\n const NAME = 'carousel'\r\n const VERSION = '4.0.0'\r\n const DATA_KEY = 'bs.carousel'\r\n const EVENT_KEY = `.${DATA_KEY}`\r\n const DATA_API_KEY = '.data-api'\r\n const JQUERY_NO_CONFLICT = $.fn[NAME]\r\n const TRANSITION_DURATION = 600\r\n const ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\r\n const ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\r\n const TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\r\n\r\n const Default = {\r\n interval : 5000,\r\n keyboard : true,\r\n slide : false,\r\n pause : 'hover',\r\n wrap : true\r\n }\r\n\r\n const DefaultType = {\r\n interval : '(number|boolean)',\r\n keyboard : 'boolean',\r\n slide : '(boolean|string)',\r\n pause : '(string|boolean)',\r\n wrap : 'boolean'\r\n }\r\n\r\n const Direction = {\r\n NEXT : 'next',\r\n PREV : 'prev',\r\n LEFT : 'left',\r\n RIGHT : 'right'\r\n }\r\n\r\n const Event = {\r\n SLIDE : `slide${EVENT_KEY}`,\r\n SLID : `slid${EVENT_KEY}`,\r\n KEYDOWN : `keydown${EVENT_KEY}`,\r\n MOUSEENTER : `mouseenter${EVENT_KEY}`,\r\n MOUSELEAVE : `mouseleave${EVENT_KEY}`,\r\n TOUCHEND : `touchend${EVENT_KEY}`,\r\n LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`,\r\n CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\r\n }\r\n\r\n const ClassName = {\r\n CAROUSEL : 'carousel',\r\n ACTIVE : 'active',\r\n SLIDE : 'slide',\r\n RIGHT : 'item-right',\r\n LEFT : 'item-left',\r\n NEXT : 'item-next',\r\n PREV : 'item-prev',\r\n ITEM : 'item'\r\n }\r\n\r\n const Selector = {\r\n ACTIVE : '.active',\r\n ACTIVE_ITEM : '.active.item',\r\n ITEM : '.item',\r\n NEXT_PREV : '.item-next, .item-prev',\r\n INDICATORS : '.carousel-indicators',\r\n DATA_SLIDE : '[data-slide], [data-slide-to]',\r\n DATA_RIDE : '[data-ride=\"carousel\"]'\r\n }\r\n\r\n /**\r\n * ------------------------------------------------------------------------\r\n * Class Definition\r\n * ------------------------------------------------------------------------\r\n */\r\n\r\n class Carousel {\r\n constructor(element, config) {\r\n this._items = null\r\n this._interval = null\r\n this._activeElement = null\r\n\r\n this._isPaused = false\r\n this._isSliding = false\r\n\r\n this.touchTimeout = null\r\n\r\n this._config = this._getConfig(config)\r\n this._element = $(element)[0]\r\n this._indicatorsElement = $(this._element).find(Selector.INDICATORS)[0]\r\n\r\n this._addEventListeners()\r\n }\r\n\r\n // Getters\r\n\r\n static get VERSION() {\r\n return VERSION\r\n }\r\n\r\n static get Default() {\r\n return Default\r\n }\r\n\r\n // Public\r\n\r\n next() {\r\n if (!this._isSliding) {\r\n this._slide(Direction.NEXT)\r\n }\r\n }\r\n\r\n nextWhenVisible() {\r\n // Don't call next when the page isn't visible\r\n // or the carousel or its parent isn't visible\r\n if (!document.hidden &&\r\n ($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) {\r\n this.next()\r\n }\r\n }\r\n\r\n prev() {\r\n if (!this._isSliding) {\r\n this._slide(Direction.PREV)\r\n }\r\n }\r\n\r\n pause(event) {\r\n if (!event) {\r\n this._isPaused = true\r\n }\r\n\r\n if ($(this._element).find(Selector.NEXT_PREV)[0] &&\r\n Util.supportsTransitionEnd()) {\r\n Util.triggerTransitionEnd(this._element)\r\n this.cycle(true)\r\n }\r\n\r\n clearInterval(this._interval)\r\n this._interval = null\r\n }\r\n\r\n cycle(event) {\r\n if (!event) {\r\n this._isPaused = false\r\n }\r\n\r\n if (this._interval) {\r\n clearInterval(this._interval)\r\n this._interval = null\r\n }\r\n\r\n if (this._config.interval && !this._isPaused) {\r\n this._interval = setInterval(\r\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\r\n this._config.interval\r\n )\r\n }\r\n }\r\n\r\n to(index) {\r\n this._activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0]\r\n\r\n const activeIndex = this._getItemIndex(this._activeElement)\r\n\r\n if (index > this._items.length - 1 || index < 0) {\r\n return\r\n }\r\n\r\n if (this._isSliding) {\r\n $(this._element).one(Event.SLID, () => this.to(index))\r\n return\r\n }\r\n\r\n if (activeIndex === index) {\r\n this.pause()\r\n this.cycle()\r\n return\r\n }\r\n\r\n const direction = index > activeIndex\r\n ? Direction.NEXT\r\n : Direction.PREV\r\n\r\n this._slide(direction, this._items[index])\r\n }\r\n\r\n dispose() {\r\n $(this._element).off(EVENT_KEY)\r\n $.removeData(this._element, DATA_KEY)\r\n\r\n this._items = null\r\n this._config = null\r\n this._element = null\r\n this._interval = null\r\n this._isPaused = null\r\n this._isSliding = null\r\n this._activeElement = null\r\n this._indicatorsElement = null\r\n }\r\n\r\n // Private\r\n\r\n _getConfig(config) {\r\n config = {\r\n ...Default,\r\n ...config\r\n }\r\n Util.typeCheckConfig(NAME, config, DefaultType)\r\n return config\r\n }\r\n\r\n _addEventListeners() {\r\n if (this._config.keyboard) {\r\n $(this._element)\r\n .on(Event.KEYDOWN, (event) => this._keydown(event))\r\n }\r\n\r\n if (this._config.pause === 'hover') {\r\n $(this._element)\r\n .on(Event.MOUSEENTER, (event) => this.pause(event))\r\n .on(Event.MOUSELEAVE, (event) => this.cycle(event))\r\n if ('ontouchstart' in document.documentElement) {\r\n // If it's a touch-enabled device, mouseenter/leave are fired as\r\n // part of the mouse compatibility events on first tap - the carousel\r\n // would stop cycling until user tapped out of it;\r\n // here, we listen for touchend, explicitly pause the carousel\r\n // (as if it's the second time we tap on it, mouseenter compat event\r\n // is NOT fired) and after a timeout (to allow for mouse compatibility\r\n // events to fire) we explicitly restart cycling\r\n $(this._element).on(Event.TOUCHEND, () => {\r\n this.pause()\r\n if (this.touchTimeout) {\r\n clearTimeout(this.touchTimeout)\r\n }\r\n this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\r\n })\r\n }\r\n }\r\n }\r\n\r\n _keydown(event) {\r\n if (/input|textarea/i.test(event.target.tagName)) {\r\n return\r\n }\r\n\r\n switch (event.which) {\r\n case ARROW_LEFT_KEYCODE:\r\n event.preventDefault()\r\n this.prev()\r\n break\r\n case ARROW_RIGHT_KEYCODE:\r\n event.preventDefault()\r\n this.next()\r\n break\r\n default:\r\n }\r\n }\r\n\r\n _getItemIndex(element) {\r\n this._items = $.makeArray($(element).parent().find(Selector.ITEM))\r\n return this._items.indexOf(element)\r\n }\r\n\r\n _getItemByDirection(direction, activeElement) {\r\n const isNextDirection = direction === Direction.NEXT\r\n const isPrevDirection = direction === Direction.PREV\r\n const activeIndex = this._getItemIndex(activeElement)\r\n const lastItemIndex = this._items.length - 1\r\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\r\n isNextDirection && activeIndex === lastItemIndex\r\n\r\n if (isGoingToWrap && !this._config.wrap) {\r\n return activeElement\r\n }\r\n\r\n const delta = direction === Direction.PREV ? -1 : 1\r\n const itemIndex = (activeIndex + delta) % this._items.length\r\n\r\n return itemIndex === -1\r\n ? this._items[this._items.length - 1] : this._items[itemIndex]\r\n }\r\n\r\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\r\n const targetIndex = this._getItemIndex(relatedTarget)\r\n const fromIndex = this._getItemIndex($(this._element).find(Selector.ACTIVE_ITEM)[0])\r\n const slideEvent = $.Event(Event.SLIDE, {\r\n relatedTarget,\r\n direction: eventDirectionName,\r\n from: fromIndex,\r\n to: targetIndex\r\n })\r\n\r\n $(this._element).trigger(slideEvent)\r\n\r\n return slideEvent\r\n }\r\n\r\n _setActiveIndicatorElement(element) {\r\n if (this._indicatorsElement) {\r\n $(this._indicatorsElement)\r\n .find(Selector.ACTIVE)\r\n .removeClass(ClassName.ACTIVE)\r\n\r\n const nextIndicator = this._indicatorsElement.children[\r\n this._getItemIndex(element)\r\n ]\r\n\r\n if (nextIndicator) {\r\n $(nextIndicator).addClass(ClassName.ACTIVE)\r\n }\r\n }\r\n }\r\n\r\n _slide(direction, element) {\r\n const activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0]\r\n const activeElementIndex = this._getItemIndex(activeElement)\r\n const nextElement = element || activeElement &&\r\n this._getItemByDirection(direction, activeElement)\r\n const nextElementIndex = this._getItemIndex(nextElement)\r\n const isCycling = Boolean(this._interval)\r\n\r\n let directionalClassName\r\n let orderClassName\r\n let eventDirectionName\r\n\r\n if (direction === Direction.NEXT) {\r\n directionalClassName = ClassName.LEFT\r\n orderClassName = ClassName.NEXT\r\n eventDirectionName = Direction.LEFT\r\n } else {\r\n directionalClassName = ClassName.RIGHT\r\n orderClassName = ClassName.PREV\r\n eventDirectionName = Direction.RIGHT\r\n }\r\n\r\n if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) {\r\n this._isSliding = false\r\n return\r\n }\r\n\r\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\r\n if (slideEvent.isDefaultPrevented()) {\r\n return\r\n }\r\n\r\n if (!activeElement || !nextElement) {\r\n // Some weirdness is happening, so we bail\r\n return\r\n }\r\n\r\n this._isSliding = true\r\n\r\n if (isCycling) {\r\n this.pause()\r\n }\r\n\r\n this._setActiveIndicatorElement(nextElement)\r\n\r\n const slidEvent = $.Event(Event.SLID, {\r\n relatedTarget: nextElement,\r\n direction: eventDirectionName,\r\n from: activeElementIndex,\r\n to: nextElementIndex\r\n })\r\n\r\n if (Util.supportsTransitionEnd() &&\r\n $(this._element).hasClass(ClassName.SLIDE)) {\r\n $(nextElement).addClass(orderClassName)\r\n\r\n Util.reflow(nextElement)\r\n\r\n $(activeElement).addClass(directionalClassName)\r\n $(nextElement).addClass(directionalClassName)\r\n\r\n $(activeElement)\r\n .one(Util.TRANSITION_END, () => {\r\n $(nextElement)\r\n .removeClass(`${directionalClassName} ${orderClassName}`)\r\n .addClass(ClassName.ACTIVE)\r\n\r\n $(activeElement).removeClass(`${ClassName.ACTIVE} ${orderClassName} ${directionalClassName}`)\r\n\r\n this._isSliding = false\r\n\r\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\r\n })\r\n .emulateTransitionEnd(TRANSITION_DURATION)\r\n } else {\r\n $(activeElement).removeClass(ClassName.ACTIVE)\r\n $(nextElement).addClass(ClassName.ACTIVE)\r\n\r\n this._isSliding = false\r\n $(this._element).trigger(slidEvent)\r\n }\r\n\r\n if (isCycling) {\r\n this.cycle()\r\n }\r\n }\r\n\r\n // Static\r\n\r\n static _jQueryInterface(config) {\r\n return this.each(function () {\r\n let data = $(this).data(DATA_KEY)\r\n let _config = {\r\n ...Default,\r\n ...$(this).data()\r\n }\r\n\r\n if (typeof config === 'object') {\r\n _config = {\r\n ..._config,\r\n ...config\r\n }\r\n }\r\n\r\n const action = typeof config === 'string' ? config : _config.slide\r\n\r\n if (!data) {\r\n data = new Carousel(this, _config)\r\n $(this).data(DATA_KEY, data)\r\n }\r\n\r\n if (typeof config === 'number') {\r\n data.to(config)\r\n } else if (typeof action === 'string') {\r\n if (typeof data[action] === 'undefined') {\r\n throw new TypeError(`No method named \"${action}\"`)\r\n }\r\n data[action]()\r\n } else if (_config.interval) {\r\n data.pause()\r\n data.cycle()\r\n }\r\n })\r\n }\r\n\r\n static _dataApiClickHandler(event) {\r\n const selector = Util.getSelectorFromElement(this)\r\n\r\n if (!selector) {\r\n return\r\n }\r\n\r\n const target = $(selector)[0]\r\n\r\n if (!target || !$(target).hasClass(ClassName.CAROUSEL)) {\r\n return\r\n }\r\n\r\n const config = {\r\n ...$(target).data(),\r\n ...$(this).data()\r\n }\r\n const slideIndex = this.getAttribute('data-slide-to')\r\n\r\n if (slideIndex) {\r\n config.interval = false\r\n }\r\n\r\n Carousel._jQueryInterface.call($(target), config)\r\n\r\n if (slideIndex) {\r\n $(target).data(DATA_KEY).to(slideIndex)\r\n }\r\n\r\n event.preventDefault()\r\n }\r\n }\r\n\r\n /**\r\n * ------------------------------------------------------------------------\r\n * Data Api implementation\r\n * ------------------------------------------------------------------------\r\n */\r\n\r\n $(document)\r\n .on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler)\r\n\r\n $(window).on(Event.LOAD_DATA_API, () => {\r\n $(Selector.DATA_RIDE).each(function () {\r\n const $carousel = $(this)\r\n Carousel._jQueryInterface.call($carousel, $carousel.data())\r\n })\r\n })\r\n\r\n /**\r\n * ------------------------------------------------------------------------\r\n * jQuery\r\n * ------------------------------------------------------------------------\r\n */\r\n\r\n $.fn[NAME] = Carousel._jQueryInterface\r\n $.fn[NAME].Constructor = Carousel\r\n $.fn[NAME].noConflict = function () {\r\n $.fn[NAME] = JQUERY_NO_CONFLICT\r\n return Carousel._jQueryInterface\r\n }\r\n\r\n return Carousel\r\n})($)\r\n\r\nexport default Carousel\r\n","import $ from 'jquery'\r\n\r\n/**\r\n * --------------------------------------------------------------------------\r\n * Bootstrap (v4.0.0): util.js\r\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\r\n * --------------------------------------------------------------------------\r\n */\r\n\r\nconst Util = (($) => {\r\n /**\r\n * ------------------------------------------------------------------------\r\n * Private TransitionEnd Helpers\r\n * ------------------------------------------------------------------------\r\n */\r\n\r\n let transition = false\r\n\r\n const MAX_UID = 1000000\r\n\r\n // Shoutout AngusCroll (https://goo.gl/pxwQGp)\r\n function toType(obj) {\r\n return {}.toString.call(obj).match(/\\s([a-zA-Z]+)/)[1].toLowerCase()\r\n }\r\n\r\n function getSpecialTransitionEndEvent() {\r\n return {\r\n bindType: transition.end,\r\n delegateType: transition.end,\r\n handle(event) {\r\n if ($(event.target).is(this)) {\r\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\r\n }\r\n return undefined // eslint-disable-line no-undefined\r\n }\r\n }\r\n }\r\n\r\n function transitionEndTest() {\r\n if (typeof window !== 'undefined' && window.QUnit) {\r\n return false\r\n }\r\n\r\n return {\r\n end: 'transitionend'\r\n }\r\n }\r\n\r\n function transitionEndEmulator(duration) {\r\n let called = false\r\n\r\n $(this).one(Util.TRANSITION_END, () => {\r\n called = true\r\n })\r\n\r\n setTimeout(() => {\r\n if (!called) {\r\n Util.triggerTransitionEnd(this)\r\n }\r\n }, duration)\r\n\r\n return this\r\n }\r\n\r\n function setTransitionEndSupport() {\r\n transition = transitionEndTest()\r\n\r\n $.fn.emulateTransitionEnd = transitionEndEmulator\r\n\r\n if (Util.supportsTransitionEnd()) {\r\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\r\n }\r\n }\r\n\r\n function escapeId(selector) {\r\n // We escape IDs in case of special selectors (selector = '#myId:something')\r\n // $.escapeSelector does not exist in jQuery < 3\r\n selector = typeof $.escapeSelector === 'function' ? $.escapeSelector(selector).substr(1)\r\n : selector.replace(/(:|\\.|\\[|\\]|,|=|@)/g, '\\\\$1')\r\n\r\n return selector\r\n }\r\n\r\n /**\r\n * --------------------------------------------------------------------------\r\n * Public Util Api\r\n * --------------------------------------------------------------------------\r\n */\r\n\r\n const Util = {\r\n\r\n TRANSITION_END: 'bsTransitionEnd',\r\n\r\n getUID(prefix) {\r\n do {\r\n // eslint-disable-next-line no-bitwise\r\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\r\n } while (document.getElementById(prefix))\r\n return prefix\r\n },\r\n\r\n getSelectorFromElement(element) {\r\n let selector = element.getAttribute('data-target')\r\n if (!selector || selector === '#') {\r\n selector = element.getAttribute('href') || ''\r\n }\r\n\r\n // If it's an ID\r\n if (selector.charAt(0) === '#') {\r\n selector = escapeId(selector)\r\n }\r\n\r\n try {\r\n const $selector = $(document).find(selector)\r\n return $selector.length > 0 ? selector : null\r\n } catch (err) {\r\n return null\r\n }\r\n },\r\n\r\n reflow(element) {\r\n return element.offsetHeight\r\n },\r\n\r\n triggerTransitionEnd(element) {\r\n $(element).trigger(transition.end)\r\n },\r\n\r\n supportsTransitionEnd() {\r\n return Boolean(transition)\r\n },\r\n\r\n isElement(obj) {\r\n return (obj[0] || obj).nodeType\r\n },\r\n\r\n typeCheckConfig(componentName, config, configTypes) {\r\n for (const property in configTypes) {\r\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\r\n const expectedTypes = configTypes[property]\r\n const value = config[property]\r\n const valueType = value && Util.isElement(value)\r\n ? 'element' : toType(value)\r\n\r\n if (!new RegExp(expectedTypes).test(valueType)) {\r\n throw new Error(\r\n `${componentName.toUpperCase()}: ` +\r\n `Option \"${property}\" provided type \"${valueType}\" ` +\r\n `but expected type \"${expectedTypes}\".`)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n setTransitionEndSupport()\r\n\r\n return Util\r\n})($)\r\n\r\nexport default Util\r\n","\r\n/*!\r\n * @fileOverview TouchSwipe - jQuery Plugin\r\n * @version 1.6.18\r\n *\r\n * @author Matt Bryson http://www.github.com/mattbryson\r\n * @see https://github.com/mattbryson/TouchSwipe-Jquery-Plugin\r\n * @see http://labs.rampinteractive.co.uk/touchSwipe/\r\n * @see http://plugins.jquery.com/project/touchSwipe\r\n * @license\r\n * Copyright (c) 2010-2015 Matt Bryson\r\n * Dual licensed under the MIT or GPL Version 2 licenses.\r\n *\r\n */\r\n!function(factory){\"function\"==typeof define&&define.amd&&define.amd.jQuery?define([\"jquery\"],factory):factory(\"undefined\"!=typeof module&&module.exports?require(\"jquery\"):jQuery)}(function($){\"use strict\";function init(options){return!options||void 0!==options.allowPageScroll||void 0===options.swipe&&void 0===options.swipeStatus||(options.allowPageScroll=NONE),void 0!==options.click&&void 0===options.tap&&(options.tap=options.click),options||(options={}),options=$.extend({},$.fn.swipe.defaults,options),this.each(function(){var $this=$(this),plugin=$this.data(PLUGIN_NS);plugin||(plugin=new TouchSwipe(this,options),$this.data(PLUGIN_NS,plugin))})}function TouchSwipe(element,options){function touchStart(jqEvent){if(!(getTouchInProgress()||$(jqEvent.target).closest(options.excludedElements,$element).length>0)){var event=jqEvent.originalEvent?jqEvent.originalEvent:jqEvent;if(!event.pointerType||\"mouse\"!=event.pointerType||0!=options.fallbackToMouseEvents){var ret,touches=event.touches,evt=touches?touches[0]:event;return phase=PHASE_START,touches?fingerCount=touches.length:options.preventDefaultEvents!==!1&&jqEvent.preventDefault(),distance=0,direction=null,currentDirection=null,pinchDirection=null,duration=0,startTouchesDistance=0,endTouchesDistance=0,pinchZoom=1,pinchDistance=0,maximumsMap=createMaximumsData(),cancelMultiFingerRelease(),createFingerData(0,evt),!touches||fingerCount===options.fingers||options.fingers===ALL_FINGERS||hasPinches()?(startTime=getTimeStamp(),2==fingerCount&&(createFingerData(1,touches[1]),startTouchesDistance=endTouchesDistance=calculateTouchesDistance(fingerData[0].start,fingerData[1].start)),(options.swipeStatus||options.pinchStatus)&&(ret=triggerHandler(event,phase))):ret=!1,ret===!1?(phase=PHASE_CANCEL,triggerHandler(event,phase),ret):(options.hold&&(holdTimeout=setTimeout($.proxy(function(){$element.trigger(\"hold\",[event.target]),options.hold&&(ret=options.hold.call($element,event,event.target))},this),options.longTapThreshold)),setTouchInProgress(!0),null)}}}function touchMove(jqEvent){var event=jqEvent.originalEvent?jqEvent.originalEvent:jqEvent;if(phase!==PHASE_END&&phase!==PHASE_CANCEL&&!inMultiFingerRelease()){var ret,touches=event.touches,evt=touches?touches[0]:event,currentFinger=updateFingerData(evt);if(endTime=getTimeStamp(),touches&&(fingerCount=touches.length),options.hold&&clearTimeout(holdTimeout),phase=PHASE_MOVE,2==fingerCount&&(0==startTouchesDistance?(createFingerData(1,touches[1]),startTouchesDistance=endTouchesDistance=calculateTouchesDistance(fingerData[0].start,fingerData[1].start)):(updateFingerData(touches[1]),endTouchesDistance=calculateTouchesDistance(fingerData[0].end,fingerData[1].end),pinchDirection=calculatePinchDirection(fingerData[0].end,fingerData[1].end)),pinchZoom=calculatePinchZoom(startTouchesDistance,endTouchesDistance),pinchDistance=Math.abs(startTouchesDistance-endTouchesDistance)),fingerCount===options.fingers||options.fingers===ALL_FINGERS||!touches||hasPinches()){if(direction=calculateDirection(currentFinger.start,currentFinger.end),currentDirection=calculateDirection(currentFinger.last,currentFinger.end),validateDefaultEvent(jqEvent,currentDirection),distance=calculateDistance(currentFinger.start,currentFinger.end),duration=calculateDuration(),setMaxDistance(direction,distance),ret=triggerHandler(event,phase),!options.triggerOnTouchEnd||options.triggerOnTouchLeave){var inBounds=!0;if(options.triggerOnTouchLeave){var bounds=getbounds(this);inBounds=isInBounds(currentFinger.end,bounds)}!options.triggerOnTouchEnd&&inBounds?phase=getNextPhase(PHASE_MOVE):options.triggerOnTouchLeave&&!inBounds&&(phase=getNextPhase(PHASE_END)),phase!=PHASE_CANCEL&&phase!=PHASE_END||triggerHandler(event,phase)}}else phase=PHASE_CANCEL,triggerHandler(event,phase);ret===!1&&(phase=PHASE_CANCEL,triggerHandler(event,phase))}}function touchEnd(jqEvent){var event=jqEvent.originalEvent?jqEvent.originalEvent:jqEvent,touches=event.touches;if(touches){if(touches.length&&!inMultiFingerRelease())return startMultiFingerRelease(event),!0;if(touches.length&&inMultiFingerRelease())return!0}return inMultiFingerRelease()&&(fingerCount=fingerCountAtRelease),endTime=getTimeStamp(),duration=calculateDuration(),didSwipeBackToCancel()||!validateSwipeDistance()?(phase=PHASE_CANCEL,triggerHandler(event,phase)):options.triggerOnTouchEnd||options.triggerOnTouchEnd===!1&&phase===PHASE_MOVE?(options.preventDefaultEvents!==!1&&jqEvent.preventDefault(),phase=PHASE_END,triggerHandler(event,phase)):!options.triggerOnTouchEnd&&hasTap()?(phase=PHASE_END,triggerHandlerForGesture(event,phase,TAP)):phase===PHASE_MOVE&&(phase=PHASE_CANCEL,triggerHandler(event,phase)),setTouchInProgress(!1),null}function touchCancel(){fingerCount=0,endTime=0,startTime=0,startTouchesDistance=0,endTouchesDistance=0,pinchZoom=1,cancelMultiFingerRelease(),setTouchInProgress(!1)}function touchLeave(jqEvent){var event=jqEvent.originalEvent?jqEvent.originalEvent:jqEvent;options.triggerOnTouchLeave&&(phase=getNextPhase(PHASE_END),triggerHandler(event,phase))}function removeListeners(){$element.unbind(START_EV,touchStart),$element.unbind(CANCEL_EV,touchCancel),$element.unbind(MOVE_EV,touchMove),$element.unbind(END_EV,touchEnd),LEAVE_EV&&$element.unbind(LEAVE_EV,touchLeave),setTouchInProgress(!1)}function getNextPhase(currentPhase){var nextPhase=currentPhase,validTime=validateSwipeTime(),validDistance=validateSwipeDistance(),didCancel=didSwipeBackToCancel();return!validTime||didCancel?nextPhase=PHASE_CANCEL:!validDistance||currentPhase!=PHASE_MOVE||options.triggerOnTouchEnd&&!options.triggerOnTouchLeave?!validDistance&¤tPhase==PHASE_END&&options.triggerOnTouchLeave&&(nextPhase=PHASE_CANCEL):nextPhase=PHASE_END,nextPhase}function triggerHandler(event,phase){var ret,touches=event.touches;return(didSwipe()||hasSwipes())&&(ret=triggerHandlerForGesture(event,phase,SWIPE)),(didPinch()||hasPinches())&&ret!==!1&&(ret=triggerHandlerForGesture(event,phase,PINCH)),didDoubleTap()&&ret!==!1?ret=triggerHandlerForGesture(event,phase,DOUBLE_TAP):didLongTap()&&ret!==!1?ret=triggerHandlerForGesture(event,phase,LONG_TAP):didTap()&&ret!==!1&&(ret=triggerHandlerForGesture(event,phase,TAP)),phase===PHASE_CANCEL&&touchCancel(event),phase===PHASE_END&&(touches?touches.length||touchCancel(event):touchCancel(event)),ret}function triggerHandlerForGesture(event,phase,gesture){var ret;if(gesture==SWIPE){if($element.trigger(\"swipeStatus\",[phase,direction||null,distance||0,duration||0,fingerCount,fingerData,currentDirection]),options.swipeStatus&&(ret=options.swipeStatus.call($element,event,phase,direction||null,distance||0,duration||0,fingerCount,fingerData,currentDirection),ret===!1))return!1;if(phase==PHASE_END&&validateSwipe()){if(clearTimeout(singleTapTimeout),clearTimeout(holdTimeout),$element.trigger(\"swipe\",[direction,distance,duration,fingerCount,fingerData,currentDirection]),options.swipe&&(ret=options.swipe.call($element,event,direction,distance,duration,fingerCount,fingerData,currentDirection),ret===!1))return!1;switch(direction){case LEFT:$element.trigger(\"swipeLeft\",[direction,distance,duration,fingerCount,fingerData,currentDirection]),options.swipeLeft&&(ret=options.swipeLeft.call($element,event,direction,distance,duration,fingerCount,fingerData,currentDirection));break;case RIGHT:$element.trigger(\"swipeRight\",[direction,distance,duration,fingerCount,fingerData,currentDirection]),options.swipeRight&&(ret=options.swipeRight.call($element,event,direction,distance,duration,fingerCount,fingerData,currentDirection));break;case UP:$element.trigger(\"swipeUp\",[direction,distance,duration,fingerCount,fingerData,currentDirection]),options.swipeUp&&(ret=options.swipeUp.call($element,event,direction,distance,duration,fingerCount,fingerData,currentDirection));break;case DOWN:$element.trigger(\"swipeDown\",[direction,distance,duration,fingerCount,fingerData,currentDirection]),options.swipeDown&&(ret=options.swipeDown.call($element,event,direction,distance,duration,fingerCount,fingerData,currentDirection))}}}if(gesture==PINCH){if($element.trigger(\"pinchStatus\",[phase,pinchDirection||null,pinchDistance||0,duration||0,fingerCount,pinchZoom,fingerData]),options.pinchStatus&&(ret=options.pinchStatus.call($element,event,phase,pinchDirection||null,pinchDistance||0,duration||0,fingerCount,pinchZoom,fingerData),ret===!1))return!1;if(phase==PHASE_END&&validatePinch())switch(pinchDirection){case IN:$element.trigger(\"pinchIn\",[pinchDirection||null,pinchDistance||0,duration||0,fingerCount,pinchZoom,fingerData]),options.pinchIn&&(ret=options.pinchIn.call($element,event,pinchDirection||null,pinchDistance||0,duration||0,fingerCount,pinchZoom,fingerData));break;case OUT:$element.trigger(\"pinchOut\",[pinchDirection||null,pinchDistance||0,duration||0,fingerCount,pinchZoom,fingerData]),options.pinchOut&&(ret=options.pinchOut.call($element,event,pinchDirection||null,pinchDistance||0,duration||0,fingerCount,pinchZoom,fingerData))}}return gesture==TAP?phase!==PHASE_CANCEL&&phase!==PHASE_END||(clearTimeout(singleTapTimeout),clearTimeout(holdTimeout),hasDoubleTap()&&!inDoubleTap()?(doubleTapStartTime=getTimeStamp(),singleTapTimeout=setTimeout($.proxy(function(){doubleTapStartTime=null,$element.trigger(\"tap\",[event.target]),options.tap&&(ret=options.tap.call($element,event,event.target))},this),options.doubleTapThreshold)):(doubleTapStartTime=null,$element.trigger(\"tap\",[event.target]),options.tap&&(ret=options.tap.call($element,event,event.target)))):gesture==DOUBLE_TAP?phase!==PHASE_CANCEL&&phase!==PHASE_END||(clearTimeout(singleTapTimeout),clearTimeout(holdTimeout),doubleTapStartTime=null,$element.trigger(\"doubletap\",[event.target]),options.doubleTap&&(ret=options.doubleTap.call($element,event,event.target))):gesture==LONG_TAP&&(phase!==PHASE_CANCEL&&phase!==PHASE_END||(clearTimeout(singleTapTimeout),doubleTapStartTime=null,$element.trigger(\"longtap\",[event.target]),options.longTap&&(ret=options.longTap.call($element,event,event.target)))),ret}function validateSwipeDistance(){var valid=!0;return null!==options.threshold&&(valid=distance>=options.threshold),valid}function didSwipeBackToCancel(){var cancelled=!1;return null!==options.cancelThreshold&&null!==direction&&(cancelled=getMaxDistance(direction)-distance>=options.cancelThreshold),cancelled}function validatePinchDistance(){return null!==options.pinchThreshold?pinchDistance>=options.pinchThreshold:!0}function validateSwipeTime(){var result;return result=options.maxTimeThreshold?!(duration>=options.maxTimeThreshold):!0}function validateDefaultEvent(jqEvent,direction){if(options.preventDefaultEvents!==!1)if(options.allowPageScroll===NONE)jqEvent.preventDefault();else{var auto=options.allowPageScroll===AUTO;switch(direction){case LEFT:(options.swipeLeft&&auto||!auto&&options.allowPageScroll!=HORIZONTAL)&&jqEvent.preventDefault();break;case RIGHT:(options.swipeRight&&auto||!auto&&options.allowPageScroll!=HORIZONTAL)&&jqEvent.preventDefault();break;case UP:(options.swipeUp&&auto||!auto&&options.allowPageScroll!=VERTICAL)&&jqEvent.preventDefault();break;case DOWN:(options.swipeDown&&auto||!auto&&options.allowPageScroll!=VERTICAL)&&jqEvent.preventDefault();break;case NONE:}}}function validatePinch(){var hasCorrectFingerCount=validateFingers(),hasEndPoint=validateEndPoint(),hasCorrectDistance=validatePinchDistance();return hasCorrectFingerCount&&hasEndPoint&&hasCorrectDistance}function hasPinches(){return!!(options.pinchStatus||options.pinchIn||options.pinchOut)}function didPinch(){return!(!validatePinch()||!hasPinches())}function validateSwipe(){var hasValidTime=validateSwipeTime(),hasValidDistance=validateSwipeDistance(),hasCorrectFingerCount=validateFingers(),hasEndPoint=validateEndPoint(),didCancel=didSwipeBackToCancel(),valid=!didCancel&&hasEndPoint&&hasCorrectFingerCount&&hasValidDistance&&hasValidTime;return valid}function hasSwipes(){return!!(options.swipe||options.swipeStatus||options.swipeLeft||options.swipeRight||options.swipeUp||options.swipeDown)}function didSwipe(){return!(!validateSwipe()||!hasSwipes())}function validateFingers(){return fingerCount===options.fingers||options.fingers===ALL_FINGERS||!SUPPORTS_TOUCH}function validateEndPoint(){return 0!==fingerData[0].end.x}function hasTap(){return!!options.tap}function hasDoubleTap(){return!!options.doubleTap}function hasLongTap(){return!!options.longTap}function validateDoubleTap(){if(null==doubleTapStartTime)return!1;var now=getTimeStamp();return hasDoubleTap()&&now-doubleTapStartTime<=options.doubleTapThreshold}function inDoubleTap(){return validateDoubleTap()}function validateTap(){return(1===fingerCount||!SUPPORTS_TOUCH)&&(isNaN(distance)||distance<options.threshold)}function validateLongTap(){return duration>options.longTapThreshold&&DOUBLE_TAP_THRESHOLD>distance}function didTap(){return!(!validateTap()||!hasTap())}function didDoubleTap(){return!(!validateDoubleTap()||!hasDoubleTap())}function didLongTap(){return!(!validateLongTap()||!hasLongTap())}function startMultiFingerRelease(event){previousTouchEndTime=getTimeStamp(),fingerCountAtRelease=event.touches.length+1}function cancelMultiFingerRelease(){previousTouchEndTime=0,fingerCountAtRelease=0}function inMultiFingerRelease(){var withinThreshold=!1;if(previousTouchEndTime){var diff=getTimeStamp()-previousTouchEndTime;diff<=options.fingerReleaseThreshold&&(withinThreshold=!0)}return withinThreshold}function getTouchInProgress(){return!($element.data(PLUGIN_NS+\"_intouch\")!==!0)}function setTouchInProgress(val){$element&&(val===!0?($element.bind(MOVE_EV,touchMove),$element.bind(END_EV,touchEnd),LEAVE_EV&&$element.bind(LEAVE_EV,touchLeave)):($element.unbind(MOVE_EV,touchMove,!1),$element.unbind(END_EV,touchEnd,!1),LEAVE_EV&&$element.unbind(LEAVE_EV,touchLeave,!1)),$element.data(PLUGIN_NS+\"_intouch\",val===!0))}function createFingerData(id,evt){var f={start:{x:0,y:0},last:{x:0,y:0},end:{x:0,y:0}};return f.start.x=f.last.x=f.end.x=evt.pageX||evt.clientX,f.start.y=f.last.y=f.end.y=evt.pageY||evt.clientY,fingerData[id]=f,f}function updateFingerData(evt){var id=void 0!==evt.identifier?evt.identifier:0,f=getFingerData(id);return null===f &&(f=createFingerData(id,evt)),f.last.x=f.end.x,f.last.y=f.end.y,f.end.x=evt.pageX||evt.clientX,f.end.y=evt.pageY||evt.clientY,f}function getFingerData(id){return fingerData[id]||null}function setMaxDistance(direction,distance){direction!=NONE&&(distance=Math.max(distance,getMaxDistance(direction)),maximumsMap[direction].distance=distance)}function getMaxDistance(direction){return maximumsMap[direction]?maximumsMap[direction].distance:void 0}function createMaximumsData(){var maxData={};return maxData[LEFT]=createMaximumVO(LEFT),maxData[RIGHT]=createMaximumVO(RIGHT),maxData[UP]=createMaximumVO(UP),maxData[DOWN]=createMaximumVO(DOWN),maxData}function createMaximumVO(dir){return{direction:dir,distance:0}}function calculateDuration(){return endTime-startTime}function calculateTouchesDistance(startPoint,endPoint){var diffX=Math.abs(startPoint.x-endPoint.x),diffY=Math.abs(startPoint.y-endPoint.y);return Math.round(Math.sqrt(diffX*diffX+diffY*diffY))}function calculatePinchZoom(startDistance,endDistance){var percent=endDistance/startDistance*1;return percent.toFixed(2)}function calculatePinchDirection(){return 1>pinchZoom?OUT:IN}function calculateDistance(startPoint,endPoint){return Math.round(Math.sqrt(Math.pow(endPoint.x-startPoint.x,2)+Math.pow(endPoint.y-startPoint.y,2)))}function calculateAngle(startPoint,endPoint){var x=startPoint.x-endPoint.x,y=endPoint.y-startPoint.y,r=Math.atan2(y,x),angle=Math.round(180*r/Math.PI);return 0>angle&&(angle=360-Math.abs(angle)),angle}function calculateDirection(startPoint,endPoint){if(comparePoints(startPoint,endPoint))return NONE;var angle=calculateAngle(startPoint,endPoint);return 45>=angle&&angle>=0?LEFT:360>=angle&&angle>=315?LEFT:angle>=135&&225>=angle?RIGHT:angle>45&&135>angle?DOWN:UP}function getTimeStamp(){var now=new Date;return now.getTime()}function getbounds(el){el=$(el);var offset=el.offset(),bounds={left:offset.left,right:offset.left+el.outerWidth(),top:offset.top,bottom:offset.top+el.outerHeight()};return bounds}function isInBounds(point,bounds){return point.x>bounds.left&&point.x<bounds.right&&point.y>bounds.top&&point.y<bounds.bottom}function comparePoints(pointA,pointB){return pointA.x==pointB.x&&pointA.y==pointB.y}var options=$.extend({},options),useTouchEvents=SUPPORTS_TOUCH||SUPPORTS_POINTER||!options.fallbackToMouseEvents,START_EV=useTouchEvents?SUPPORTS_POINTER?SUPPORTS_POINTER_IE10?\"MSPointerDown\":\"pointerdown\":\"touchstart\":\"mousedown\",MOVE_EV=useTouchEvents?SUPPORTS_POINTER?SUPPORTS_POINTER_IE10?\"MSPointerMove\":\"pointermove\":\"touchmove\":\"mousemove\",END_EV=useTouchEvents?SUPPORTS_POINTER?SUPPORTS_POINTER_IE10?\"MSPointerUp\":\"pointerup\":\"touchend\":\"mouseup\",LEAVE_EV=useTouchEvents?SUPPORTS_POINTER?\"mouseleave\":null:\"mouseleave\",CANCEL_EV=SUPPORTS_POINTER?SUPPORTS_POINTER_IE10?\"MSPointerCancel\":\"pointercancel\":\"touchcancel\",distance=0,direction=null,currentDirection=null,duration=0,startTouchesDistance=0,endTouchesDistance=0,pinchZoom=1,pinchDistance=0,pinchDirection=0,maximumsMap=null,$element=$(element),phase=\"start\",fingerCount=0,fingerData={},startTime=0,endTime=0,previousTouchEndTime=0,fingerCountAtRelease=0,doubleTapStartTime=0,singleTapTimeout=null,holdTimeout=null;try{$element.bind(START_EV,touchStart),$element.bind(CANCEL_EV,touchCancel)}catch(e){$.error(\"events not supported \"+START_EV+\",\"+CANCEL_EV+\" on jQuery.swipe\")}this.enable=function(){return this.disable(),$element.bind(START_EV,touchStart),$element.bind(CANCEL_EV,touchCancel),$element},this.disable=function(){return removeListeners(),$element},this.destroy=function(){removeListeners(),$element.data(PLUGIN_NS,null),$element=null},this.option=function(property,value){if(\"object\"==typeof property)options=$.extend(options,property);else if(void 0!==options[property]){if(void 0===value)return options[property];options[property]=value}else{if(!property)return options;$.error(\"Option \"+property+\" does not exist on jQuery.swipe.options\")}return null}}var VERSION=\"1.6.18\",LEFT=\"left\",RIGHT=\"right\",UP=\"up\",DOWN=\"down\",IN=\"in\",OUT=\"out\",NONE=\"none\",AUTO=\"auto\",SWIPE=\"swipe\",PINCH=\"pinch\",TAP=\"tap\",DOUBLE_TAP=\"doubletap\",LONG_TAP=\"longtap\",HORIZONTAL=\"horizontal\",VERTICAL=\"vertical\",ALL_FINGERS=\"all\",DOUBLE_TAP_THRESHOLD=10,PHASE_START=\"start\",PHASE_MOVE=\"move\",PHASE_END=\"end\",PHASE_CANCEL=\"cancel\",SUPPORTS_TOUCH=\"ontouchstart\"in window,SUPPORTS_POINTER_IE10=window.navigator.msPointerEnabled&&!window.navigator.pointerEnabled&&!SUPPORTS_TOUCH,SUPPORTS_POINTER=(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&!SUPPORTS_TOUCH,PLUGIN_NS=\"TouchSwipe\",defaults={fingers:1,threshold:75,cancelThreshold:null,pinchThreshold:20,maxTimeThreshold:null,fingerReleaseThreshold:250,longTapThreshold:500,doubleTapThreshold:200,swipe:null,swipeLeft:null,swipeRight:null,swipeUp:null,swipeDown:null,swipeStatus:null,pinchIn:null,pinchOut:null,pinchStatus:null,click:null,tap:null,doubleTap:null,longTap:null,hold:null,triggerOnTouchEnd:!0,triggerOnTouchLeave:!1,allowPageScroll:\"auto\",fallbackToMouseEvents:!0,excludedElements:\".noSwipe\",preventDefaultEvents:!0};$.fn.swipe=function(method){var $this=$(this),plugin=$this.data(PLUGIN_NS);if(plugin&&\"string\"==typeof method){if(plugin[method])return plugin[method].apply(plugin,Array.prototype.slice.call(arguments,1));$.error(\"Method \"+method+\" does not exist on jQuery.swipe\")}else if(plugin&&\"object\"==typeof method)plugin.option.apply(plugin,arguments);else if(!(plugin||\"object\"!=typeof method&&method))return init.apply(this,arguments);return $this},$.fn.swipe.version=VERSION,$.fn.swipe.defaults=defaults,$.fn.swipe.phases={PHASE_START:PHASE_START,PHASE_MOVE:PHASE_MOVE,PHASE_END:PHASE_END,PHASE_CANCEL:PHASE_CANCEL},$.fn.swipe.directions={LEFT:LEFT,RIGHT:RIGHT,UP:UP,DOWN:DOWN,IN:IN,OUT:OUT},$.fn.swipe.pageScroll={NONE:NONE,HORIZONTAL:HORIZONTAL,VERTICAL:VERTICAL,AUTO:AUTO},$.fn.swipe.fingers={ONE:1,TWO:2,THREE:3,FOUR:4,FIVE:5,ALL:ALL_FINGERS}});","/*\r\n _ _ _ _\r\n ___| (_) ___| | __ (_)___\r\n/ __| | |/ __| |/ / | / __|\r\n\\__ \\ | | (__| < _ | \\__ \\\r\n|___/_|_|\\___|_|\\_(_)/ |___/\r\n |__/\r\n\r\n Version: 1.6.0\r\n Author: Ken Wheeler\r\n Website: http://kenwheeler.github.io\r\n Docs: http://kenwheeler.github.io/slick\r\n Repo: http://github.com/kenwheeler/slick\r\n Issues: http://github.com/kenwheeler/slick/issues\r\n\r\n */\r\n/* global window, document, define, jQuery, setInterval, clearInterval */\r\n(function(factory) {\r\n 'use strict';\r\n if (typeof define === 'function' && define.amd) {\r\n define(['jquery'], factory);\r\n } else if (typeof exports !== 'undefined') {\r\n module.exports = factory(require('jquery'));\r\n } else {\r\n factory(jQuery);\r\n }\r\n\r\n}(function($) {\r\n 'use strict';\r\n var Slick = window.Slick || {};\r\n\r\n Slick = (function() {\r\n\r\n var instanceUid = 0;\r\n\r\n function Slick(element, settings) {\r\n\r\n var _ = this, dataSettings;\r\n\r\n _.defaults = {\r\n accessibility: true,\r\n adaptiveHeight: false,\r\n appendArrows: $(element),\r\n appendDots: $(element),\r\n arrows: true,\r\n asNavFor: null,\r\n prevArrow: '<button type=\"button\" data-role=\"none\" class=\"slick-prev\" aria-label=\"Previous\" tabindex=\"0\" role=\"button\">Previous</button>',\r\n nextArrow: '<button type=\"button\" data-role=\"none\" class=\"slick-next\" aria-label=\"Next\" tabindex=\"0\" role=\"button\">Next</button>',\r\n autoplay: false,\r\n autoplaySpeed: 3000,\r\n centerMode: false,\r\n centerPadding: '50px',\r\n cssEase: 'ease',\r\n customPaging: function(slider, i) {\r\n return $('<button type=\"button\" data-role=\"none\" role=\"button\" tabindex=\"0\" />').text(i + 1);\r\n },\r\n dots: false,\r\n dotsClass: 'slick-dots',\r\n draggable: true,\r\n easing: 'linear',\r\n edgeFriction: 0.35,\r\n fade: false,\r\n focusOnSelect: false,\r\n infinite: true,\r\n initialSlide: 0,\r\n lazyLoad: 'ondemand',\r\n mobileFirst: false,\r\n pauseOnHover: true,\r\n pauseOnFocus: true,\r\n pauseOnDotsHover: false,\r\n respondTo: 'window',\r\n responsive: null,\r\n rows: 1,\r\n rtl: false,\r\n slide: '',\r\n slidesPerRow: 1,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n speed: 500,\r\n swipe: true,\r\n swipeToSlide: false,\r\n touchMove: true,\r\n touchThreshold: 5,\r\n useCSS: true,\r\n useTransform: true,\r\n variableWidth: false,\r\n vertical: false,\r\n verticalSwiping: false,\r\n waitForAnimate: true,\r\n zIndex: 1000\r\n };\r\n\r\n _.initials = {\r\n animating: false,\r\n dragging: false,\r\n autoPlayTimer: null,\r\n currentDirection: 0,\r\n currentLeft: null,\r\n currentSlide: 0,\r\n direction: 1,\r\n $dots: null,\r\n listWidth: null,\r\n listHeight: null,\r\n loadIndex: 0,\r\n $nextArrow: null,\r\n $prevArrow: null,\r\n slideCount: null,\r\n slideWidth: null,\r\n $slideTrack: null,\r\n $slides: null,\r\n sliding: false,\r\n slideOffset: 0,\r\n swipeLeft: null,\r\n $list: null,\r\n touchObject: {},\r\n transformsEnabled: false,\r\n unslicked: false\r\n };\r\n\r\n $.extend(_, _.initials);\r\n\r\n _.activeBreakpoint = null;\r\n _.animType = null;\r\n _.animProp = null;\r\n _.breakpoints = [];\r\n _.breakpointSettings = [];\r\n _.cssTransitions = false;\r\n _.focussed = false;\r\n _.interrupted = false;\r\n _.hidden = 'hidden';\r\n _.paused = true;\r\n _.positionProp = null;\r\n _.respondTo = null;\r\n _.rowCount = 1;\r\n _.shouldClick = true;\r\n _.$slider = $(element);\r\n _.$slidesCache = null;\r\n _.transformType = null;\r\n _.transitionType = null;\r\n _.visibilityChange = 'visibilitychange';\r\n _.windowWidth = 0;\r\n _.windowTimer = null;\r\n\r\n dataSettings = $(element).data('slick') || {};\r\n\r\n _.options = $.extend({}, _.defaults, settings, dataSettings);\r\n\r\n _.currentSlide = _.options.initialSlide;\r\n\r\n _.originalSettings = _.options;\r\n\r\n if (typeof document.mozHidden !== 'undefined') {\r\n _.hidden = 'mozHidden';\r\n _.visibilityChange = 'mozvisibilitychange';\r\n } else if (typeof document.webkitHidden !== 'undefined') {\r\n _.hidden = 'webkitHidden';\r\n _.visibilityChange = 'webkitvisibilitychange';\r\n }\r\n\r\n _.autoPlay = $.proxy(_.autoPlay, _);\r\n _.autoPlayClear = $.proxy(_.autoPlayClear, _);\r\n _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);\r\n _.changeSlide = $.proxy(_.changeSlide, _);\r\n _.clickHandler = $.proxy(_.clickHandler, _);\r\n _.selectHandler = $.proxy(_.selectHandler, _);\r\n _.setPosition = $.proxy(_.setPosition, _);\r\n _.swipeHandler = $.proxy(_.swipeHandler, _);\r\n _.dragHandler = $.proxy(_.dragHandler, _);\r\n _.keyHandler = $.proxy(_.keyHandler, _);\r\n\r\n _.instanceUid = instanceUid++;\r\n\r\n // A simple way to check for HTML strings\r\n // Strict HTML recognition (must start with <)\r\n // Extracted from jQuery v1.11 source\r\n _.htmlExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*)$/;\r\n\r\n\r\n _.registerBreakpoints();\r\n _.init(true);\r\n\r\n }\r\n\r\n return Slick;\r\n\r\n }());\r\n\r\n Slick.prototype.activateADA = function() {\r\n var _ = this;\r\n\r\n _.$slideTrack.find('.slick-active').attr({\r\n 'aria-hidden': 'false'\r\n }).find('a, input, button, select').attr({\r\n 'tabindex': '0'\r\n });\r\n\r\n };\r\n\r\n Slick.prototype.addSlide = Slick.prototype.slickAdd = function(markup, index, addBefore) {\r\n\r\n var _ = this;\r\n\r\n if (typeof(index) === 'boolean') {\r\n addBefore = index;\r\n index = null;\r\n } else if (index < 0 || (index >= _.slideCount)) {\r\n return false;\r\n }\r\n\r\n _.unload();\r\n\r\n if (typeof(index) === 'number') {\r\n if (index === 0 && _.$slides.length === 0) {\r\n $(markup).appendTo(_.$slideTrack);\r\n } else if (addBefore) {\r\n $(markup).insertBefore(_.$slides.eq(index));\r\n } else {\r\n $(markup).insertAfter(_.$slides.eq(index));\r\n }\r\n } else {\r\n if (addBefore === true) {\r\n $(markup).prependTo(_.$slideTrack);\r\n } else {\r\n $(markup).appendTo(_.$slideTrack);\r\n }\r\n }\r\n\r\n _.$slides = _.$slideTrack.children(this.options.slide);\r\n\r\n _.$slideTrack.children(this.options.slide).detach();\r\n\r\n _.$slideTrack.append(_.$slides);\r\n\r\n _.$slides.each(function(index, element) {\r\n $(element).attr('data-slick-index', index);\r\n });\r\n\r\n _.$slidesCache = _.$slides;\r\n\r\n _.reinit();\r\n\r\n };\r\n\r\n Slick.prototype.animateHeight = function() {\r\n var _ = this;\r\n if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\r\n var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\r\n _.$list.animate({\r\n height: targetHeight\r\n }, _.options.speed);\r\n }\r\n };\r\n\r\n Slick.prototype.animateSlide = function(targetLeft, callback) {\r\n\r\n var animProps = {},\r\n _ = this;\r\n\r\n _.animateHeight();\r\n\r\n if (_.options.rtl === true && _.options.vertical === false) {\r\n targetLeft = -targetLeft;\r\n }\r\n if (_.transformsEnabled === false) {\r\n if (_.options.vertical === false) {\r\n _.$slideTrack.animate({\r\n left: targetLeft\r\n }, _.options.speed, _.options.easing, callback);\r\n } else {\r\n _.$slideTrack.animate({\r\n top: targetLeft\r\n }, _.options.speed, _.options.easing, callback);\r\n }\r\n\r\n } else {\r\n\r\n if (_.cssTransitions === false) {\r\n if (_.options.rtl === true) {\r\n _.currentLeft = -(_.currentLeft);\r\n }\r\n $({\r\n animStart: _.currentLeft\r\n }).animate({\r\n animStart: targetLeft\r\n }, {\r\n duration: _.options.speed,\r\n easing: _.options.easing,\r\n step: function(now) {\r\n now = Math.ceil(now);\r\n if (_.options.vertical === false) {\r\n animProps[_.animType] = 'translate(' +\r\n now + 'px, 0px)';\r\n _.$slideTrack.css(animProps);\r\n } else {\r\n animProps[_.animType] = 'translate(0px,' +\r\n now + 'px)';\r\n _.$slideTrack.css(animProps);\r\n }\r\n },\r\n complete: function() {\r\n if (callback) {\r\n callback.call();\r\n }\r\n }\r\n });\r\n\r\n } else {\r\n\r\n _.applyTransition();\r\n targetLeft = Math.ceil(targetLeft);\r\n\r\n if (_.options.vertical === false) {\r\n animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';\r\n } else {\r\n animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';\r\n }\r\n _.$slideTrack.css(animProps);\r\n\r\n if (callback) {\r\n setTimeout(function() {\r\n\r\n _.disableTransition();\r\n\r\n callback.call();\r\n }, _.options.speed);\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.getNavTarget = function() {\r\n\r\n var _ = this,\r\n asNavFor = _.options.asNavFor;\r\n\r\n if ( asNavFor && asNavFor !== null ) {\r\n asNavFor = $(asNavFor).not(_.$slider);\r\n }\r\n\r\n return asNavFor;\r\n\r\n };\r\n\r\n Slick.prototype.asNavFor = function(index) {\r\n\r\n var _ = this,\r\n asNavFor = _.getNavTarget();\r\n\r\n if ( asNavFor !== null && typeof asNavFor === 'object' ) {\r\n asNavFor.each(function() {\r\n var target = $(this).slick('getSlick');\r\n if(!target.unslicked) {\r\n target.slideHandler(index, true);\r\n }\r\n });\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.applyTransition = function(slide) {\r\n\r\n var _ = this,\r\n transition = {};\r\n\r\n if (_.options.fade === false) {\r\n transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;\r\n } else {\r\n transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;\r\n }\r\n\r\n if (_.options.fade === false) {\r\n _.$slideTrack.css(transition);\r\n } else {\r\n _.$slides.eq(slide).css(transition);\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.autoPlay = function() {\r\n\r\n var _ = this;\r\n\r\n _.autoPlayClear();\r\n\r\n if ( _.slideCount > _.options.slidesToShow ) {\r\n _.autoPlayTimer = setInterval( _.autoPlayIterator, _.options.autoplaySpeed );\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.autoPlayClear = function() {\r\n\r\n var _ = this;\r\n\r\n if (_.autoPlayTimer) {\r\n clearInterval(_.autoPlayTimer);\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.autoPlayIterator = function() {\r\n\r\n var _ = this,\r\n slideTo = _.currentSlide + _.options.slidesToScroll;\r\n\r\n if ( !_.paused && !_.interrupted && !_.focussed ) {\r\n\r\n if ( _.options.infinite === false ) {\r\n\r\n if ( _.direction === 1 && ( _.currentSlide + 1 ) === ( _.slideCount - 1 )) {\r\n _.direction = 0;\r\n }\r\n\r\n else if ( _.direction === 0 ) {\r\n\r\n slideTo = _.currentSlide - _.options.slidesToScroll;\r\n\r\n if ( _.currentSlide - 1 === 0 ) {\r\n _.direction = 1;\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n _.slideHandler( slideTo );\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.buildArrows = function() {\r\n\r\n var _ = this;\r\n\r\n if (_.options.arrows === true ) {\r\n\r\n _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');\r\n _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');\r\n\r\n if( _.slideCount > _.options.slidesToShow ) {\r\n\r\n _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\r\n _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\r\n\r\n if (_.htmlExpr.test(_.options.prevArrow)) {\r\n _.$prevArrow.prependTo(_.options.appendArrows);\r\n }\r\n\r\n if (_.htmlExpr.test(_.options.nextArrow)) {\r\n _.$nextArrow.appendTo(_.options.appendArrows);\r\n }\r\n\r\n if (_.options.infinite !== true) {\r\n _.$prevArrow\r\n .addClass('slick-disabled')\r\n .attr('aria-disabled', 'true');\r\n }\r\n\r\n } else {\r\n\r\n _.$prevArrow.add( _.$nextArrow )\r\n\r\n .addClass('slick-hidden')\r\n .attr({\r\n 'aria-disabled': 'true',\r\n 'tabindex': '-1'\r\n });\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.buildDots = function() {\r\n\r\n var _ = this,\r\n i, dot;\r\n\r\n if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\r\n\r\n _.$slider.addClass('slick-dotted');\r\n\r\n dot = $('<ul />').addClass(_.options.dotsClass);\r\n\r\n for (i = 0; i <= _.getDotCount(); i += 1) {\r\n dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));\r\n }\r\n\r\n _.$dots = dot.appendTo(_.options.appendDots);\r\n\r\n _.$dots.find('li').first().addClass('slick-active').attr('aria-hidden', 'false');\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.buildOut = function() {\r\n\r\n var _ = this;\r\n\r\n _.$slides =\r\n _.$slider\r\n .children( _.options.slide + ':not(.slick-cloned)')\r\n .addClass('slick-slide');\r\n\r\n _.slideCount = _.$slides.length;\r\n\r\n _.$slides.each(function(index, element) {\r\n $(element)\r\n .attr('data-slick-index', index)\r\n .data('originalStyling', $(element).attr('style') || '');\r\n });\r\n\r\n _.$slider.addClass('slick-slider');\r\n\r\n _.$slideTrack = (_.slideCount === 0) ?\r\n $('<div class=\"slick-track\"/>').appendTo(_.$slider) :\r\n _.$slides.wrapAll('<div class=\"slick-track\"/>').parent();\r\n\r\n _.$list = _.$slideTrack.wrap(\r\n '<div aria-live=\"polite\" class=\"slick-list\"/>').parent();\r\n _.$slideTrack.css('opacity', 0);\r\n\r\n if (_.options.centerMode === true || _.options.swipeToSlide === true) {\r\n _.options.slidesToScroll = 1;\r\n }\r\n\r\n $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');\r\n\r\n _.setupInfinite();\r\n\r\n _.buildArrows();\r\n\r\n _.buildDots();\r\n\r\n _.updateDots();\r\n\r\n\r\n _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\r\n\r\n if (_.options.draggable === true) {\r\n _.$list.addClass('draggable');\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.buildRows = function() {\r\n\r\n var _ = this, a, b, c, newSlides, numOfSlides, originalSlides,slidesPerSection;\r\n\r\n newSlides = document.createDocumentFragment();\r\n originalSlides = _.$slider.children();\r\n\r\n if(_.options.rows > 1) {\r\n\r\n slidesPerSection = _.options.slidesPerRow * _.options.rows;\r\n numOfSlides = Math.ceil(\r\n originalSlides.length / slidesPerSection\r\n );\r\n\r\n for(a = 0; a < numOfSlides; a++){\r\n var slide = document.createElement('div');\r\n for(b = 0; b < _.options.rows; b++) {\r\n var row = document.createElement('div');\r\n for(c = 0; c < _.options.slidesPerRow; c++) {\r\n var target = (a * slidesPerSection + ((b * _.options.slidesPerRow) + c));\r\n if (originalSlides.get(target)) {\r\n row.appendChild(originalSlides.get(target));\r\n }\r\n }\r\n slide.appendChild(row);\r\n }\r\n newSlides.appendChild(slide);\r\n }\r\n\r\n _.$slider.empty().append(newSlides);\r\n _.$slider.children().children().children()\r\n .css({\r\n 'width':(100 / _.options.slidesPerRow) + '%',\r\n 'display': 'inline-block'\r\n });\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.checkResponsive = function(initial, forceUpdate) {\r\n\r\n var _ = this,\r\n breakpoint, targetBreakpoint, respondToWidth, triggerBreakpoint = false;\r\n var sliderWidth = _.$slider.width();\r\n var windowWidth = window.innerWidth || $(window).width();\r\n\r\n if (_.respondTo === 'window') {\r\n respondToWidth = windowWidth;\r\n } else if (_.respondTo === 'slider') {\r\n respondToWidth = sliderWidth;\r\n } else if (_.respondTo === 'min') {\r\n respondToWidth = Math.min(windowWidth, sliderWidth);\r\n }\r\n\r\n if ( _.options.responsive &&\r\n _.options.responsive.length &&\r\n _.options.responsive !== null) {\r\n\r\n targetBreakpoint = null;\r\n\r\n for (breakpoint in _.breakpoints) {\r\n if (_.breakpoints.hasOwnProperty(breakpoint)) {\r\n if (_.originalSettings.mobileFirst === false) {\r\n if (respondToWidth < _.breakpoints[breakpoint]) {\r\n targetBreakpoint = _.breakpoints[breakpoint];\r\n }\r\n } else {\r\n if (respondToWidth > _.breakpoints[breakpoint]) {\r\n targetBreakpoint = _.breakpoints[breakpoint];\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (targetBreakpoint !== null) {\r\n if (_.activeBreakpoint !== null) {\r\n if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {\r\n _.activeBreakpoint =\r\n targetBreakpoint;\r\n if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\r\n _.unslick(targetBreakpoint);\r\n } else {\r\n _.options = $.extend({}, _.originalSettings,\r\n _.breakpointSettings[\r\n targetBreakpoint]);\r\n if (initial === true) {\r\n _.currentSlide = _.options.initialSlide;\r\n }\r\n _.refresh(initial);\r\n }\r\n triggerBreakpoint = targetBreakpoint;\r\n }\r\n } else {\r\n _.activeBreakpoint = targetBreakpoint;\r\n if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\r\n _.unslick(targetBreakpoint);\r\n } else {\r\n _.options = $.extend({}, _.originalSettings,\r\n _.breakpointSettings[\r\n targetBreakpoint]);\r\n if (initial === true) {\r\n _.currentSlide = _.options.initialSlide;\r\n }\r\n _.refresh(initial);\r\n }\r\n triggerBreakpoint = targetBreakpoint;\r\n }\r\n } else {\r\n if (_.activeBreakpoint !== null) {\r\n _.activeBreakpoint = null;\r\n _.options = _.originalSettings;\r\n if (initial === true) {\r\n _.currentSlide = _.options.initialSlide;\r\n }\r\n _.refresh(initial);\r\n triggerBreakpoint = targetBreakpoint;\r\n }\r\n }\r\n\r\n // only trigger breakpoints during an actual break. not on initialize.\r\n if( !initial && triggerBreakpoint !== false ) {\r\n _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);\r\n }\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.changeSlide = function(event, dontAnimate) {\r\n\r\n var _ = this,\r\n $target = $(event.currentTarget),\r\n indexOffset, slideOffset, unevenOffset;\r\n\r\n // If target is a link, prevent default action.\r\n if($target.is('a')) {\r\n event.preventDefault();\r\n }\r\n\r\n // If target is not the <li> element (ie: a child), find the <li>.\r\n if(!$target.is('li')) {\r\n $target = $target.closest('li');\r\n }\r\n\r\n unevenOffset = (_.slideCount % _.options.slidesToScroll !== 0);\r\n indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;\r\n\r\n switch (event.data.message) {\r\n\r\n case 'previous':\r\n slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;\r\n if (_.slideCount > _.options.slidesToShow) {\r\n _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);\r\n }\r\n break;\r\n\r\n case 'next':\r\n slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;\r\n if (_.slideCount > _.options.slidesToShow) {\r\n _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);\r\n }\r\n break;\r\n\r\n case 'index':\r\n var index = event.data.index === 0 ? 0 :\r\n event.data.index || $target.index() * _.options.slidesToScroll;\r\n\r\n _.slideHandler(_.checkNavigable(index), false, dontAnimate);\r\n $target.children().trigger('focus');\r\n break;\r\n\r\n default:\r\n return;\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.checkNavigable = function(index) {\r\n\r\n var _ = this,\r\n navigables, prevNavigable;\r\n\r\n navigables = _.getNavigableIndexes();\r\n prevNavigable = 0;\r\n if (index > navigables[navigables.length - 1]) {\r\n index = navigables[navigables.length - 1];\r\n } else {\r\n for (var n in navigables) {\r\n if (index < navigables[n]) {\r\n index = prevNavigable;\r\n break;\r\n }\r\n prevNavigable = navigables[n];\r\n }\r\n }\r\n\r\n return index;\r\n };\r\n\r\n Slick.prototype.cleanUpEvents = function() {\r\n\r\n var _ = this;\r\n\r\n if (_.options.dots && _.$dots !== null) {\r\n\r\n $('li', _.$dots)\r\n .off('click.slick', _.changeSlide)\r\n .off('mouseenter.slick', $.proxy(_.interrupt, _, true))\r\n .off('mouseleave.slick', $.proxy(_.interrupt, _, false));\r\n\r\n }\r\n\r\n _.$slider.off('focus.slick blur.slick');\r\n\r\n if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\r\n _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);\r\n _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);\r\n }\r\n\r\n _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);\r\n _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);\r\n _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);\r\n _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);\r\n\r\n _.$list.off('click.slick', _.clickHandler);\r\n\r\n $(document).off(_.visibilityChange, _.visibility);\r\n\r\n _.cleanUpSlideEvents();\r\n\r\n if (_.options.accessibility === true) {\r\n _.$list.off('keydown.slick', _.keyHandler);\r\n }\r\n\r\n if (_.options.focusOnSelect === true) {\r\n $(_.$slideTrack).children().off('click.slick', _.selectHandler);\r\n }\r\n\r\n $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);\r\n\r\n $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);\r\n\r\n $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);\r\n\r\n $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);\r\n $(document).off('ready.slick.slick-' + _.instanceUid, _.setPosition);\r\n\r\n };\r\n\r\n Slick.prototype.cleanUpSlideEvents = function() {\r\n\r\n var _ = this;\r\n\r\n _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));\r\n _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));\r\n\r\n };\r\n\r\n Slick.prototype.cleanUpRows = function() {\r\n\r\n var _ = this, originalSlides;\r\n\r\n if(_.options.rows > 1) {\r\n originalSlides = _.$slides.children().children();\r\n originalSlides.removeAttr('style');\r\n _.$slider.empty().append(originalSlides);\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.clickHandler = function(event) {\r\n\r\n var _ = this;\r\n\r\n if (_.shouldClick === false) {\r\n event.stopImmediatePropagation();\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.destroy = function(refresh) {\r\n\r\n var _ = this;\r\n\r\n _.autoPlayClear();\r\n\r\n _.touchObject = {};\r\n\r\n _.cleanUpEvents();\r\n\r\n $('.slick-cloned', _.$slider).detach();\r\n\r\n if (_.$dots) {\r\n _.$dots.remove();\r\n }\r\n\r\n\r\n if ( _.$prevArrow && _.$prevArrow.length ) {\r\n\r\n _.$prevArrow\r\n .removeClass('slick-disabled slick-arrow slick-hidden')\r\n .removeAttr('aria-hidden aria-disabled tabindex')\r\n .css('display','');\r\n\r\n if ( _.htmlExpr.test( _.options.prevArrow )) {\r\n _.$prevArrow.remove();\r\n }\r\n }\r\n\r\n if ( _.$nextArrow && _.$nextArrow.length ) {\r\n\r\n _.$nextArrow\r\n .removeClass('slick-disabled slick-arrow slick-hidden')\r\n .removeAttr('aria-hidden aria-disabled tabindex')\r\n .css('display','');\r\n\r\n if ( _.htmlExpr.test( _.options.nextArrow )) {\r\n _.$nextArrow.remove();\r\n }\r\n\r\n }\r\n\r\n\r\n if (_.$slides) {\r\n\r\n _.$slides\r\n .removeClass('slick-slide slick-active slick-center slick-visible slick-current')\r\n .removeAttr('aria-hidden')\r\n .removeAttr('data-slick-index')\r\n .each(function(){\r\n $(this).attr('style', $(this).data('originalStyling'));\r\n });\r\n\r\n _.$slideTrack.children(this.options.slide).detach();\r\n\r\n _.$slideTrack.detach();\r\n\r\n _.$list.detach();\r\n\r\n _.$slider.append(_.$slides);\r\n }\r\n\r\n _.cleanUpRows();\r\n\r\n _.$slider.removeClass('slick-slider');\r\n _.$slider.removeClass('slick-initialized');\r\n _.$slider.removeClass('slick-dotted');\r\n\r\n _.unslicked = true;\r\n\r\n if(!refresh) {\r\n _.$slider.trigger('destroy', [_]);\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.disableTransition = function(slide) {\r\n\r\n var _ = this,\r\n transition = {};\r\n\r\n transition[_.transitionType] = '';\r\n\r\n if (_.options.fade === false) {\r\n _.$slideTrack.css(transition);\r\n } else {\r\n _.$slides.eq(slide).css(transition);\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.fadeSlide = function(slideIndex, callback) {\r\n\r\n var _ = this;\r\n\r\n if (_.cssTransitions === false) {\r\n\r\n _.$slides.eq(slideIndex).css({\r\n zIndex: _.options.zIndex\r\n });\r\n\r\n _.$slides.eq(slideIndex).animate({\r\n opacity: 1\r\n }, _.options.speed, _.options.easing, callback);\r\n\r\n } else {\r\n\r\n _.applyTransition(slideIndex);\r\n\r\n _.$slides.eq(slideIndex).css({\r\n opacity: 1,\r\n zIndex: _.options.zIndex\r\n });\r\n\r\n if (callback) {\r\n setTimeout(function() {\r\n\r\n _.disableTransition(slideIndex);\r\n\r\n callback.call();\r\n }, _.options.speed);\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.fadeSlideOut = function(slideIndex) {\r\n\r\n var _ = this;\r\n\r\n if (_.cssTransitions === false) {\r\n\r\n _.$slides.eq(slideIndex).animate({\r\n opacity: 0,\r\n zIndex: _.options.zIndex - 2\r\n }, _.options.speed, _.options.easing);\r\n\r\n } else {\r\n\r\n _.applyTransition(slideIndex);\r\n\r\n _.$slides.eq(slideIndex).css({\r\n opacity: 0,\r\n zIndex: _.options.zIndex - 2\r\n });\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.filterSlides = Slick.prototype.slickFilter = function(filter) {\r\n\r\n var _ = this;\r\n\r\n if (filter !== null) {\r\n\r\n _.$slidesCache = _.$slides;\r\n\r\n _.unload();\r\n\r\n _.$slideTrack.children(this.options.slide).detach();\r\n\r\n _.$slidesCache.filter(filter).appendTo(_.$slideTrack);\r\n\r\n _.reinit();\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.focusHandler = function() {\r\n\r\n var _ = this;\r\n\r\n _.$slider\r\n .off('focus.slick blur.slick')\r\n .on('focus.slick blur.slick',\r\n '*:not(.slick-arrow)', function(event) {\r\n\r\n event.stopImmediatePropagation();\r\n var $sf = $(this);\r\n\r\n setTimeout(function() {\r\n\r\n if( _.options.pauseOnFocus ) {\r\n _.focussed = $sf.is(':focus');\r\n _.autoPlay();\r\n }\r\n\r\n }, 0);\r\n\r\n });\r\n };\r\n\r\n Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function() {\r\n\r\n var _ = this;\r\n return _.currentSlide;\r\n\r\n };\r\n\r\n Slick.prototype.getDotCount = function() {\r\n\r\n var _ = this;\r\n\r\n var breakPoint = 0;\r\n var counter = 0;\r\n var pagerQty = 0;\r\n\r\n if (_.options.infinite === true) {\r\n while (breakPoint < _.slideCount) {\r\n ++pagerQty;\r\n breakPoint = counter + _.options.slidesToScroll;\r\n counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\r\n }\r\n } else if (_.options.centerMode === true) {\r\n pagerQty = _.slideCount;\r\n } else if(!_.options.asNavFor) {\r\n pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);\r\n }else {\r\n while (breakPoint < _.slideCount) {\r\n ++pagerQty;\r\n breakPoint = counter + _.options.slidesToScroll;\r\n counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\r\n }\r\n }\r\n\r\n return pagerQty - 1;\r\n\r\n };\r\n\r\n Slick.prototype.getLeft = function(slideIndex) {\r\n\r\n var _ = this,\r\n targetLeft,\r\n verticalHeight,\r\n verticalOffset = 0,\r\n targetSlide;\r\n\r\n _.slideOffset = 0;\r\n verticalHeight = _.$slides.first().outerHeight(true);\r\n\r\n if (_.options.infinite === true) {\r\n if (_.slideCount > _.options.slidesToShow) {\r\n _.slideOffset = (_.slideWidth * _.options.slidesToShow) * -1;\r\n verticalOffset = (verticalHeight * _.options.slidesToShow) * -1;\r\n }\r\n if (_.slideCount % _.options.slidesToScroll !== 0) {\r\n if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {\r\n if (slideIndex > _.slideCount) {\r\n _.slideOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth) * -1;\r\n verticalOffset = ((_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight) * -1;\r\n } else {\r\n _.slideOffset = ((_.slideCount % _.options.slidesToScroll) * _.slideWidth) * -1;\r\n verticalOffset = ((_.slideCount % _.options.slidesToScroll) * verticalHeight) * -1;\r\n }\r\n }\r\n }\r\n } else {\r\n if (slideIndex + _.options.slidesToShow > _.slideCount) {\r\n _.slideOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * _.slideWidth;\r\n verticalOffset = ((slideIndex + _.options.slidesToShow) - _.slideCount) * verticalHeight;\r\n }\r\n }\r\n\r\n if (_.slideCount <= _.options.slidesToShow) {\r\n _.slideOffset = 0;\r\n verticalOffset = 0;\r\n }\r\n\r\n if (_.options.centerMode === true && _.options.infinite === true) {\r\n _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;\r\n } else if (_.options.centerMode === true) {\r\n _.slideOffset = 0;\r\n _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);\r\n }\r\n\r\n if (_.options.vertical === false) {\r\n targetLeft = ((slideIndex * _.slideWidth) * -1) + _.slideOffset;\r\n } else {\r\n targetLeft = ((slideIndex * verticalHeight) * -1) + verticalOffset;\r\n }\r\n\r\n if (_.options.variableWidth === true) {\r\n\r\n if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\r\n targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\r\n } else {\r\n targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);\r\n }\r\n\r\n if (_.options.rtl === true) {\r\n if (targetSlide[0]) {\r\n targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\r\n } else {\r\n targetLeft = 0;\r\n }\r\n } else {\r\n targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\r\n }\r\n\r\n if (_.options.centerMode === true) {\r\n if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\r\n targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\r\n } else {\r\n targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);\r\n }\r\n\r\n if (_.options.rtl === true) {\r\n if (targetSlide[0]) {\r\n targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\r\n } else {\r\n targetLeft = 0;\r\n }\r\n } else {\r\n targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\r\n }\r\n\r\n targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;\r\n }\r\n }\r\n\r\n return targetLeft;\r\n\r\n };\r\n\r\n Slick.prototype.getOption = Slick.prototype.slickGetOption = function(option) {\r\n\r\n var _ = this;\r\n\r\n return _.options[option];\r\n\r\n };\r\n\r\n Slick.prototype.getNavigableIndexes = function() {\r\n\r\n var _ = this,\r\n breakPoint = 0,\r\n counter = 0,\r\n indexes = [],\r\n max;\r\n\r\n if (_.options.infinite === false) {\r\n max = _.slideCount;\r\n } else {\r\n breakPoint = _.options.slidesToScroll * -1;\r\n counter = _.options.slidesToScroll * -1;\r\n max = _.slideCount * 2;\r\n }\r\n\r\n while (breakPoint < max) {\r\n indexes.push(breakPoint);\r\n breakPoint = counter + _.options.slidesToScroll;\r\n counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\r\n }\r\n\r\n return indexes;\r\n\r\n };\r\n\r\n Slick.prototype.getSlick = function() {\r\n\r\n return this;\r\n\r\n };\r\n\r\n Slick.prototype.getSlideCount = function() {\r\n\r\n var _ = this,\r\n slidesTraversed, swipedSlide, centerOffset;\r\n\r\n centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;\r\n\r\n if (_.options.swipeToSlide === true) {\r\n _.$slideTrack.find('.slick-slide').each(function(index, slide) {\r\n if (slide.offsetLeft - centerOffset + ($(slide).outerWidth() / 2) > (_.swipeLeft * -1)) {\r\n swipedSlide = slide;\r\n return false;\r\n }\r\n });\r\n\r\n slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;\r\n\r\n return slidesTraversed;\r\n\r\n } else {\r\n return _.options.slidesToScroll;\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.goTo = Slick.prototype.slickGoTo = function(slide, dontAnimate) {\r\n\r\n var _ = this;\r\n\r\n _.changeSlide({\r\n data: {\r\n message: 'index',\r\n index: parseInt(slide)\r\n }\r\n }, dontAnimate);\r\n\r\n };\r\n\r\n Slick.prototype.init = function(creation) {\r\n\r\n var _ = this;\r\n\r\n if (!$(_.$slider).hasClass('slick-initialized')) {\r\n\r\n $(_.$slider).addClass('slick-initialized');\r\n\r\n _.buildRows();\r\n _.buildOut();\r\n _.setProps();\r\n _.startLoad();\r\n _.loadSlider();\r\n _.initializeEvents();\r\n _.updateArrows();\r\n _.updateDots();\r\n _.checkResponsive(true);\r\n _.focusHandler();\r\n\r\n }\r\n\r\n if (creation) {\r\n _.$slider.trigger('init', [_]);\r\n }\r\n\r\n if (_.options.accessibility === true) {\r\n _.initADA();\r\n }\r\n\r\n if ( _.options.autoplay ) {\r\n\r\n _.paused = false;\r\n _.autoPlay();\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.initADA = function() {\r\n var _ = this;\r\n // VELIR - remove tabindex: -1\r\n _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({\r\n 'aria-hidden': 'true',\r\n }).find('a, input, button, select').attr({\r\n 'tabindex': '-1'\r\n });\r\n\r\n _.$slideTrack.attr('role', 'listbox');\r\n\r\n _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function(i) {\r\n $(this).attr({\r\n 'role': 'option',\r\n 'aria-describedby': 'slick-slide' + _.instanceUid + i + ''\r\n });\r\n });\r\n\r\n /* VELIR\r\n - removed adding tablish role to dots\r\n - removed adding role tab to li\r\n - removed adding aria-selected to li\r\n - removed adding aria-controls to li\r\n */\r\n\r\n if (_.$dots !== null) {\r\n _.$dots.find('li').each(function(i) {\r\n $(this).attr({\r\n 'id': 'slick-slide' + _.instanceUid + i + ''\r\n });\r\n })\r\n .find('button').attr('role', 'button').end()\r\n .closest('div').attr('role', 'toolbar');\r\n }\r\n _.activateADA();\r\n\r\n };\r\n\r\n Slick.prototype.initArrowEvents = function() {\r\n\r\n var _ = this;\r\n\r\n if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\r\n _.$prevArrow\r\n .off('click.slick')\r\n .on('click.slick', {\r\n message: 'previous'\r\n }, _.changeSlide);\r\n _.$nextArrow\r\n .off('click.slick')\r\n .on('click.slick', {\r\n message: 'next'\r\n }, _.changeSlide);\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.initDotEvents = function() {\r\n\r\n var _ = this;\r\n\r\n if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\r\n $('li', _.$dots).on('click.slick', {\r\n message: 'index'\r\n }, _.changeSlide);\r\n }\r\n\r\n if ( _.options.dots === true && _.options.pauseOnDotsHover === true ) {\r\n\r\n $('li', _.$dots)\r\n .on('mouseenter.slick', $.proxy(_.interrupt, _, true))\r\n .on('mouseleave.slick', $.proxy(_.interrupt, _, false));\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.initSlideEvents = function() {\r\n\r\n var _ = this;\r\n\r\n if ( _.options.pauseOnHover ) {\r\n\r\n _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));\r\n _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.initializeEvents = function() {\r\n\r\n var _ = this;\r\n\r\n _.initArrowEvents();\r\n\r\n _.initDotEvents();\r\n _.initSlideEvents();\r\n\r\n _.$list.on('touchstart.slick mousedown.slick', {\r\n action: 'start'\r\n }, _.swipeHandler);\r\n _.$list.on('touchmove.slick mousemove.slick', {\r\n action: 'move'\r\n }, _.swipeHandler);\r\n _.$list.on('touchend.slick mouseup.slick', {\r\n action: 'end'\r\n }, _.swipeHandler);\r\n _.$list.on('touchcancel.slick mouseleave.slick', {\r\n action: 'end'\r\n }, _.swipeHandler);\r\n\r\n _.$list.on('click.slick', _.clickHandler);\r\n\r\n $(document).on(_.visibilityChange, $.proxy(_.visibility, _));\r\n\r\n if (_.options.accessibility === true) {\r\n _.$list.on('keydown.slick', _.keyHandler);\r\n }\r\n\r\n if (_.options.focusOnSelect === true) {\r\n $(_.$slideTrack).children().on('click.slick', _.selectHandler);\r\n }\r\n\r\n $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));\r\n\r\n $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));\r\n\r\n $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);\r\n\r\n $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);\r\n $(document).on('ready.slick.slick-' + _.instanceUid, _.setPosition);\r\n\r\n };\r\n\r\n Slick.prototype.initUI = function() {\r\n\r\n var _ = this;\r\n\r\n if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\r\n\r\n _.$prevArrow.show();\r\n _.$nextArrow.show();\r\n\r\n }\r\n\r\n if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\r\n\r\n _.$dots.show();\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.keyHandler = function(event) {\r\n\r\n var _ = this;\r\n //Dont slide if the cursor is inside the form fields and arrow keys are pressed\r\n if(!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {\r\n if (event.keyCode === 37 && _.options.accessibility === true) {\r\n _.changeSlide({\r\n data: {\r\n message: _.options.rtl === true ? 'next' : 'previous'\r\n }\r\n });\r\n } else if (event.keyCode === 39 && _.options.accessibility === true) {\r\n _.changeSlide({\r\n data: {\r\n message: _.options.rtl === true ? 'previous' : 'next'\r\n }\r\n });\r\n }\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.lazyLoad = function() {\r\n\r\n var _ = this,\r\n loadRange, cloneRange, rangeStart, rangeEnd;\r\n\r\n function loadImages(imagesScope) {\r\n\r\n $('img[data-lazy]', imagesScope).each(function() {\r\n\r\n var image = $(this),\r\n imageSource = $(this).attr('data-lazy'),\r\n imageToLoad = document.createElement('img');\r\n\r\n imageToLoad.onload = function() {\r\n\r\n image\r\n .animate({ opacity: 0 }, 100, function() {\r\n image\r\n .attr('src', imageSource)\r\n .animate({ opacity: 1 }, 200, function() {\r\n image\r\n .removeAttr('data-lazy')\r\n .removeClass('slick-loading');\r\n });\r\n _.$slider.trigger('lazyLoaded', [_, image, imageSource]);\r\n });\r\n\r\n };\r\n\r\n imageToLoad.onerror = function() {\r\n\r\n image\r\n .removeAttr( 'data-lazy' )\r\n .removeClass( 'slick-loading' )\r\n .addClass( 'slick-lazyload-error' );\r\n\r\n _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);\r\n\r\n };\r\n\r\n imageToLoad.src = imageSource;\r\n\r\n });\r\n\r\n }\r\n\r\n if (_.options.centerMode === true) {\r\n if (_.options.infinite === true) {\r\n rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);\r\n rangeEnd = rangeStart + _.options.slidesToShow + 2;\r\n } else {\r\n rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));\r\n rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;\r\n }\r\n } else {\r\n rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;\r\n rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);\r\n if (_.options.fade === true) {\r\n if (rangeStart > 0) rangeStart--;\r\n if (rangeEnd <= _.slideCount) rangeEnd++;\r\n }\r\n }\r\n\r\n loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);\r\n loadImages(loadRange);\r\n\r\n if (_.slideCount <= _.options.slidesToShow) {\r\n cloneRange = _.$slider.find('.slick-slide');\r\n loadImages(cloneRange);\r\n } else\r\n if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {\r\n cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);\r\n loadImages(cloneRange);\r\n } else if (_.currentSlide === 0) {\r\n cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);\r\n loadImages(cloneRange);\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.loadSlider = function() {\r\n\r\n var _ = this;\r\n\r\n _.setPosition();\r\n\r\n _.$slideTrack.css({\r\n opacity: 1\r\n });\r\n\r\n _.$slider.removeClass('slick-loading');\r\n\r\n _.initUI();\r\n\r\n if (_.options.lazyLoad === 'progressive') {\r\n _.progressiveLazyLoad();\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.next = Slick.prototype.slickNext = function() {\r\n\r\n var _ = this;\r\n\r\n _.changeSlide({\r\n data: {\r\n message: 'next'\r\n }\r\n });\r\n\r\n };\r\n\r\n Slick.prototype.orientationChange = function() {\r\n\r\n var _ = this;\r\n\r\n _.checkResponsive();\r\n _.setPosition();\r\n\r\n };\r\n\r\n Slick.prototype.pause = Slick.prototype.slickPause = function() {\r\n\r\n var _ = this;\r\n\r\n _.autoPlayClear();\r\n _.paused = true;\r\n\r\n };\r\n\r\n Slick.prototype.play = Slick.prototype.slickPlay = function() {\r\n\r\n var _ = this;\r\n\r\n _.autoPlay();\r\n _.options.autoplay = true;\r\n _.paused = false;\r\n _.focussed = false;\r\n _.interrupted = false;\r\n\r\n };\r\n\r\n Slick.prototype.postSlide = function(index) {\r\n\r\n var _ = this;\r\n\r\n if( !_.unslicked ) {\r\n\r\n _.$slider.trigger('afterChange', [_, index]);\r\n\r\n _.animating = false;\r\n\r\n _.setPosition();\r\n\r\n _.swipeLeft = null;\r\n\r\n if ( _.options.autoplay ) {\r\n _.autoPlay();\r\n }\r\n\r\n if (_.options.accessibility === true) {\r\n _.initADA();\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.prev = Slick.prototype.slickPrev = function() {\r\n\r\n var _ = this;\r\n\r\n _.changeSlide({\r\n data: {\r\n message: 'previous'\r\n }\r\n });\r\n\r\n };\r\n\r\n Slick.prototype.preventDefault = function(event) {\r\n\r\n event.preventDefault();\r\n\r\n };\r\n\r\n Slick.prototype.progressiveLazyLoad = function( tryCount ) {\r\n\r\n tryCount = tryCount || 1;\r\n\r\n var _ = this,\r\n $imgsToLoad = $( 'img[data-lazy]', _.$slider ),\r\n image,\r\n imageSource,\r\n imageToLoad;\r\n\r\n if ( $imgsToLoad.length ) {\r\n\r\n image = $imgsToLoad.first();\r\n imageSource = image.attr('data-lazy');\r\n imageToLoad = document.createElement('img');\r\n\r\n imageToLoad.onload = function() {\r\n\r\n image\r\n .attr( 'src', imageSource )\r\n .removeAttr('data-lazy')\r\n .removeClass('slick-loading');\r\n\r\n if ( _.options.adaptiveHeight === true ) {\r\n _.setPosition();\r\n }\r\n\r\n _.$slider.trigger('lazyLoaded', [ _, image, imageSource ]);\r\n _.progressiveLazyLoad();\r\n\r\n };\r\n\r\n imageToLoad.onerror = function() {\r\n\r\n if ( tryCount < 3 ) {\r\n\r\n /**\r\n * try to load the image 3 times,\r\n * leave a slight delay so we don't get\r\n * servers blocking the request.\r\n */\r\n setTimeout( function() {\r\n _.progressiveLazyLoad( tryCount + 1 );\r\n }, 500 );\r\n\r\n } else {\r\n\r\n image\r\n .removeAttr( 'data-lazy' )\r\n .removeClass( 'slick-loading' )\r\n .addClass( 'slick-lazyload-error' );\r\n\r\n _.$slider.trigger('lazyLoadError', [ _, image, imageSource ]);\r\n\r\n _.progressiveLazyLoad();\r\n\r\n }\r\n\r\n };\r\n\r\n imageToLoad.src = imageSource;\r\n\r\n } else {\r\n\r\n _.$slider.trigger('allImagesLoaded', [ _ ]);\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.refresh = function( initializing ) {\r\n\r\n var _ = this, currentSlide, lastVisibleIndex;\r\n\r\n lastVisibleIndex = _.slideCount - _.options.slidesToShow;\r\n\r\n // in non-infinite sliders, we don't want to go past the\r\n // last visible index.\r\n if( !_.options.infinite && ( _.currentSlide > lastVisibleIndex )) {\r\n _.currentSlide = lastVisibleIndex;\r\n }\r\n\r\n // if less slides than to show, go to start.\r\n if ( _.slideCount <= _.options.slidesToShow ) {\r\n _.currentSlide = 0;\r\n\r\n }\r\n\r\n currentSlide = _.currentSlide;\r\n\r\n _.destroy(true);\r\n\r\n $.extend(_, _.initials, { currentSlide: currentSlide });\r\n\r\n _.init();\r\n\r\n if( !initializing ) {\r\n\r\n _.changeSlide({\r\n data: {\r\n message: 'index',\r\n index: currentSlide\r\n }\r\n }, false);\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.registerBreakpoints = function() {\r\n\r\n var _ = this, breakpoint, currentBreakpoint, l,\r\n responsiveSettings = _.options.responsive || null;\r\n\r\n if ( $.type(responsiveSettings) === 'array' && responsiveSettings.length ) {\r\n\r\n _.respondTo = _.options.respondTo || 'window';\r\n\r\n for ( breakpoint in responsiveSettings ) {\r\n\r\n l = _.breakpoints.length-1;\r\n currentBreakpoint = responsiveSettings[breakpoint].breakpoint;\r\n\r\n if (responsiveSettings.hasOwnProperty(breakpoint)) {\r\n\r\n // loop through the breakpoints and cut out any existing\r\n // ones with the same breakpoint number, we don't want dupes.\r\n while( l >= 0 ) {\r\n if( _.breakpoints[l] && _.breakpoints[l] === currentBreakpoint ) {\r\n _.breakpoints.splice(l,1);\r\n }\r\n l--;\r\n }\r\n\r\n _.breakpoints.push(currentBreakpoint);\r\n _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;\r\n\r\n }\r\n\r\n }\r\n\r\n _.breakpoints.sort(function(a, b) {\r\n return ( _.options.mobileFirst ) ? a-b : b-a;\r\n });\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.reinit = function() {\r\n\r\n var _ = this;\r\n\r\n _.$slides =\r\n _.$slideTrack\r\n .children(_.options.slide)\r\n .addClass('slick-slide');\r\n\r\n _.slideCount = _.$slides.length;\r\n\r\n if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {\r\n _.currentSlide = _.currentSlide - _.options.slidesToScroll;\r\n }\r\n\r\n if (_.slideCount <= _.options.slidesToShow) {\r\n _.currentSlide = 0;\r\n }\r\n\r\n _.registerBreakpoints();\r\n\r\n _.setProps();\r\n _.setupInfinite();\r\n _.buildArrows();\r\n _.updateArrows();\r\n _.initArrowEvents();\r\n _.buildDots();\r\n _.updateDots();\r\n _.initDotEvents();\r\n _.cleanUpSlideEvents();\r\n _.initSlideEvents();\r\n\r\n _.checkResponsive(false, true);\r\n\r\n if (_.options.focusOnSelect === true) {\r\n $(_.$slideTrack).children().on('click.slick', _.selectHandler);\r\n }\r\n\r\n _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\r\n\r\n _.setPosition();\r\n _.focusHandler();\r\n\r\n _.paused = !_.options.autoplay;\r\n _.autoPlay();\r\n\r\n _.$slider.trigger('reInit', [_]);\r\n\r\n };\r\n\r\n Slick.prototype.resize = function() {\r\n\r\n var _ = this;\r\n\r\n if ($(window).width() !== _.windowWidth) {\r\n clearTimeout(_.windowDelay);\r\n _.windowDelay = window.setTimeout(function() {\r\n _.windowWidth = $(window).width();\r\n _.checkResponsive();\r\n if( !_.unslicked ) { _.setPosition(); }\r\n }, 50);\r\n }\r\n };\r\n\r\n Slick.prototype.removeSlide = Slick.prototype.slickRemove = function(index, removeBefore, removeAll) {\r\n\r\n var _ = this;\r\n\r\n if (typeof(index) === 'boolean') {\r\n removeBefore = index;\r\n index = removeBefore === true ? 0 : _.slideCount - 1;\r\n } else {\r\n index = removeBefore === true ? --index : index;\r\n }\r\n\r\n if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {\r\n return false;\r\n }\r\n\r\n _.unload();\r\n\r\n if (removeAll === true) {\r\n _.$slideTrack.children().remove();\r\n } else {\r\n _.$slideTrack.children(this.options.slide).eq(index).remove();\r\n }\r\n\r\n _.$slides = _.$slideTrack.children(this.options.slide);\r\n\r\n _.$slideTrack.children(this.options.slide).detach();\r\n\r\n _.$slideTrack.append(_.$slides);\r\n\r\n _.$slidesCache = _.$slides;\r\n\r\n _.reinit();\r\n\r\n };\r\n\r\n Slick.prototype.setCSS = function(position) {\r\n\r\n var _ = this,\r\n positionProps = {},\r\n x, y;\r\n\r\n if (_.options.rtl === true) {\r\n position = -position;\r\n }\r\n x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';\r\n y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';\r\n\r\n positionProps[_.positionProp] = position;\r\n\r\n if (_.transformsEnabled === false) {\r\n _.$slideTrack.css(positionProps);\r\n } else {\r\n positionProps = {};\r\n if (_.cssTransitions === false) {\r\n positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';\r\n _.$slideTrack.css(positionProps);\r\n } else {\r\n positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';\r\n _.$slideTrack.css(positionProps);\r\n }\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.setDimensions = function() {\r\n\r\n var _ = this;\r\n\r\n if (_.options.vertical === false) {\r\n if (_.options.centerMode === true) {\r\n _.$list.css({\r\n padding: ('0px ' + _.options.centerPadding)\r\n });\r\n }\r\n } else {\r\n _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);\r\n if (_.options.centerMode === true) {\r\n _.$list.css({\r\n padding: (_.options.centerPadding + ' 0px')\r\n });\r\n }\r\n }\r\n\r\n _.listWidth = _.$list.width();\r\n _.listHeight = _.$list.height();\r\n\r\n\r\n if (_.options.vertical === false && _.options.variableWidth === false) {\r\n _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);\r\n _.$slideTrack.width(Math.ceil((_.slideWidth * _.$slideTrack.children('.slick-slide').length)));\r\n\r\n } else if (_.options.variableWidth === true) {\r\n _.$slideTrack.width(5000 * _.slideCount);\r\n } else {\r\n _.slideWidth = Math.ceil(_.listWidth);\r\n _.$slideTrack.height(Math.ceil((_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length)));\r\n }\r\n\r\n var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();\r\n if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);\r\n\r\n };\r\n\r\n Slick.prototype.setFade = function() {\r\n\r\n var _ = this,\r\n targetLeft;\r\n\r\n _.$slides.each(function(index, element) {\r\n targetLeft = (_.slideWidth * index) * -1;\r\n if (_.options.rtl === true) {\r\n $(element).css({\r\n position: 'relative',\r\n right: targetLeft,\r\n top: 0,\r\n zIndex: _.options.zIndex - 2,\r\n opacity: 0\r\n });\r\n } else {\r\n $(element).css({\r\n position: 'relative',\r\n left: targetLeft,\r\n top: 0,\r\n zIndex: _.options.zIndex - 2,\r\n opacity: 0\r\n });\r\n }\r\n });\r\n\r\n _.$slides.eq(_.currentSlide).css({\r\n zIndex: _.options.zIndex - 1,\r\n opacity: 1\r\n });\r\n\r\n };\r\n\r\n Slick.prototype.setHeight = function() {\r\n\r\n var _ = this;\r\n\r\n if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\r\n var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\r\n _.$list.css('height', targetHeight);\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.setOption =\r\n Slick.prototype.slickSetOption = function() {\r\n\r\n /**\r\n * accepts arguments in format of:\r\n *\r\n * - for changing a single option's value:\r\n * .slick(\"setOption\", option, value, refresh )\r\n *\r\n * - for changing a set of responsive options:\r\n * .slick(\"setOption\", 'responsive', [{}, ...], refresh )\r\n *\r\n * - for updating multiple values at once (not responsive)\r\n * .slick(\"setOption\", { 'option': value, ... }, refresh )\r\n */\r\n\r\n var _ = this, l, item, option, value, refresh = false, type;\r\n\r\n if( $.type( arguments[0] ) === 'object' ) {\r\n\r\n option = arguments[0];\r\n refresh = arguments[1];\r\n type = 'multiple';\r\n\r\n } else if ( $.type( arguments[0] ) === 'string' ) {\r\n\r\n option = arguments[0];\r\n value = arguments[1];\r\n refresh = arguments[2];\r\n\r\n if ( arguments[0] === 'responsive' && $.type( arguments[1] ) === 'array' ) {\r\n\r\n type = 'responsive';\r\n\r\n } else if ( typeof arguments[1] !== 'undefined' ) {\r\n\r\n type = 'single';\r\n\r\n }\r\n\r\n }\r\n\r\n if ( type === 'single' ) {\r\n\r\n _.options[option] = value;\r\n\r\n\r\n } else if ( type === 'multiple' ) {\r\n\r\n $.each( option , function( opt, val ) {\r\n\r\n _.options[opt] = val;\r\n\r\n });\r\n\r\n\r\n } else if ( type === 'responsive' ) {\r\n\r\n for ( item in value ) {\r\n\r\n if( $.type( _.options.responsive ) !== 'array' ) {\r\n\r\n _.options.responsive = [ value[item] ];\r\n\r\n } else {\r\n\r\n l = _.options.responsive.length-1;\r\n\r\n // loop through the responsive object and splice out duplicates.\r\n while( l >= 0 ) {\r\n\r\n if( _.options.responsive[l].breakpoint === value[item].breakpoint ) {\r\n\r\n _.options.responsive.splice(l,1);\r\n\r\n }\r\n\r\n l--;\r\n\r\n }\r\n\r\n _.options.responsive.push( value[item] );\r\n\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n if ( refresh ) {\r\n\r\n _.unload();\r\n _.reinit();\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.setPosition = function() {\r\n\r\n var _ = this;\r\n\r\n _.setDimensions();\r\n\r\n _.setHeight();\r\n\r\n if (_.options.fade === false) {\r\n _.setCSS(_.getLeft(_.currentSlide));\r\n } else {\r\n _.setFade();\r\n }\r\n\r\n _.$slider.trigger('setPosition', [_]);\r\n\r\n };\r\n\r\n Slick.prototype.setProps = function() {\r\n\r\n var _ = this,\r\n bodyStyle = document.body.style;\r\n\r\n _.positionProp = _.options.vertical === true ? 'top' : 'left';\r\n\r\n if (_.positionProp === 'top') {\r\n _.$slider.addClass('slick-vertical');\r\n } else {\r\n _.$slider.removeClass('slick-vertical');\r\n }\r\n\r\n if (bodyStyle.WebkitTransition !== undefined ||\r\n bodyStyle.MozTransition !== undefined ||\r\n bodyStyle.msTransition !== undefined) {\r\n if (_.options.useCSS === true) {\r\n _.cssTransitions = true;\r\n }\r\n }\r\n\r\n if ( _.options.fade ) {\r\n if ( typeof _.options.zIndex === 'number' ) {\r\n if( _.options.zIndex < 3 ) {\r\n _.options.zIndex = 3;\r\n }\r\n } else {\r\n _.options.zIndex = _.defaults.zIndex;\r\n }\r\n }\r\n\r\n if (bodyStyle.OTransform !== undefined) {\r\n _.animType = 'OTransform';\r\n _.transformType = '-o-transform';\r\n _.transitionType = 'OTransition';\r\n if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\r\n }\r\n if (bodyStyle.MozTransform !== undefined) {\r\n _.animType = 'MozTransform';\r\n _.transformType = '-moz-transform';\r\n _.transitionType = 'MozTransition';\r\n if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;\r\n }\r\n if (bodyStyle.webkitTransform !== undefined) {\r\n _.animType = 'webkitTransform';\r\n _.transformType = '-webkit-transform';\r\n _.transitionType = 'webkitTransition';\r\n if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\r\n }\r\n if (bodyStyle.msTransform !== undefined) {\r\n _.animType = 'msTransform';\r\n _.transformType = '-ms-transform';\r\n _.transitionType = 'msTransition';\r\n if (bodyStyle.msTransform === undefined) _.animType = false;\r\n }\r\n if (bodyStyle.transform !== undefined && _.animType !== false) {\r\n _.animType = 'transform';\r\n _.transformType = 'transform';\r\n _.transitionType = 'transition';\r\n }\r\n _.transformsEnabled = _.options.useTransform && (_.animType !== null && _.animType !== false);\r\n };\r\n\r\n\r\n Slick.prototype.setSlideClasses = function(index) {\r\n\r\n var _ = this,\r\n centerOffset, allSlides, indexOffset, remainder;\r\n\r\n // VELIR - adding tabindex: -1\r\n allSlides = _.$slider\r\n .find('.slick-slide')\r\n .removeClass('slick-active slick-center slick-current')\r\n .attr('aria-hidden', 'true')\r\n .attr('tabindex', -1);\r\n\r\n // VELIR - adding tabindex: 0\r\n _.$slides\r\n .eq(index)\r\n .addClass('slick-current')\r\n .attr('tabindex', 0);\r\n\r\n if (_.options.centerMode === true) {\r\n\r\n centerOffset = Math.floor(_.options.slidesToShow / 2);\r\n\r\n if (_.options.infinite === true) {\r\n\r\n if (index >= centerOffset && index <= (_.slideCount - 1) - centerOffset) {\r\n\r\n _.$slides\r\n .slice(index - centerOffset, index + centerOffset + 1)\r\n .addClass('slick-active')\r\n .attr('aria-hidden', 'false');\r\n\r\n } else {\r\n\r\n indexOffset = _.options.slidesToShow + index;\r\n allSlides\r\n .slice(indexOffset - centerOffset + 1, indexOffset + centerOffset + 2)\r\n .addClass('slick-active')\r\n .attr('aria-hidden', 'false');\r\n\r\n }\r\n\r\n if (index === 0) {\r\n\r\n allSlides\r\n .eq(allSlides.length - 1 - _.options.slidesToShow)\r\n .addClass('slick-center');\r\n\r\n } else if (index === _.slideCount - 1) {\r\n\r\n allSlides\r\n .eq(_.options.slidesToShow)\r\n .addClass('slick-center');\r\n\r\n }\r\n\r\n }\r\n\r\n _.$slides\r\n .eq(index)\r\n .addClass('slick-center');\r\n\r\n } else {\r\n\r\n if (index >= 0 && index <= (_.slideCount - _.options.slidesToShow)) {\r\n\r\n _.$slides\r\n .slice(index, index + _.options.slidesToShow)\r\n .addClass('slick-active')\r\n .attr('aria-hidden', 'false');\r\n\r\n } else if (allSlides.length <= _.options.slidesToShow) {\r\n\r\n allSlides\r\n .addClass('slick-active')\r\n .attr('aria-hidden', 'false');\r\n\r\n } else {\r\n\r\n remainder = _.slideCount % _.options.slidesToShow;\r\n indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;\r\n\r\n if (_.options.slidesToShow == _.options.slidesToScroll && (_.slideCount - index) < _.options.slidesToShow) {\r\n\r\n allSlides\r\n .slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder)\r\n .addClass('slick-active')\r\n .attr('aria-hidden', 'false');\r\n\r\n } else {\r\n\r\n allSlides\r\n .slice(indexOffset, indexOffset + _.options.slidesToShow)\r\n .addClass('slick-active')\r\n .attr('aria-hidden', 'false');\r\n\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n if (_.options.lazyLoad === 'ondemand') {\r\n _.lazyLoad();\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.setupInfinite = function() {\r\n\r\n var _ = this,\r\n i, slideIndex, infiniteCount;\r\n\r\n if (_.options.fade === true) {\r\n _.options.centerMode = false;\r\n }\r\n\r\n if (_.options.infinite === true && _.options.fade === false) {\r\n\r\n slideIndex = null;\r\n\r\n if (_.slideCount > _.options.slidesToShow) {\r\n\r\n if (_.options.centerMode === true) {\r\n infiniteCount = _.options.slidesToShow + 1;\r\n } else {\r\n infiniteCount = _.options.slidesToShow;\r\n }\r\n\r\n for (i = _.slideCount; i > (_.slideCount -\r\n infiniteCount); i -= 1) {\r\n slideIndex = i - 1;\r\n $(_.$slides[slideIndex]).clone(true).attr('id', '')\r\n .attr('data-slick-index', slideIndex - _.slideCount)\r\n .prependTo(_.$slideTrack).addClass('slick-cloned');\r\n }\r\n for (i = 0; i < infiniteCount; i += 1) {\r\n slideIndex = i;\r\n $(_.$slides[slideIndex]).clone(true).attr('id', '')\r\n .attr('data-slick-index', slideIndex + _.slideCount)\r\n .appendTo(_.$slideTrack).addClass('slick-cloned');\r\n }\r\n _.$slideTrack.find('.slick-cloned').find('[id]').each(function() {\r\n $(this).attr('id', '');\r\n });\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.interrupt = function( toggle ) {\r\n\r\n var _ = this;\r\n\r\n if( !toggle ) {\r\n _.autoPlay();\r\n }\r\n _.interrupted = toggle;\r\n\r\n };\r\n\r\n Slick.prototype.selectHandler = function(event) {\r\n\r\n var _ = this;\r\n\r\n var targetElement =\r\n $(event.target).is('.slick-slide') ?\r\n $(event.target) :\r\n $(event.target).parents('.slick-slide');\r\n\r\n var index = parseInt(targetElement.attr('data-slick-index'));\r\n\r\n if (!index) index = 0;\r\n\r\n if (_.slideCount <= _.options.slidesToShow) {\r\n\r\n _.setSlideClasses(index);\r\n _.asNavFor(index);\r\n return;\r\n\r\n }\r\n\r\n _.slideHandler(index);\r\n\r\n };\r\n\r\n Slick.prototype.slideHandler = function(index, sync, dontAnimate) {\r\n\r\n var targetSlide, animSlide, oldSlide, slideLeft, targetLeft = null,\r\n _ = this, navTarget;\r\n\r\n sync = sync || false;\r\n\r\n if (_.animating === true && _.options.waitForAnimate === true) {\r\n return;\r\n }\r\n\r\n if (_.options.fade === true && _.currentSlide === index) {\r\n return;\r\n }\r\n\r\n if (_.slideCount <= _.options.slidesToShow) {\r\n return;\r\n }\r\n\r\n if (sync === false) {\r\n _.asNavFor(index);\r\n }\r\n\r\n targetSlide = index;\r\n targetLeft = _.getLeft(targetSlide);\r\n slideLeft = _.getLeft(_.currentSlide);\r\n\r\n _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;\r\n\r\n if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {\r\n if (_.options.fade === false) {\r\n targetSlide = _.currentSlide;\r\n if (dontAnimate !== true) {\r\n _.animateSlide(slideLeft, function() {\r\n _.postSlide(targetSlide);\r\n });\r\n } else {\r\n _.postSlide(targetSlide);\r\n }\r\n }\r\n return;\r\n } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > (_.slideCount - _.options.slidesToScroll))) {\r\n if (_.options.fade === false) {\r\n targetSlide = _.currentSlide;\r\n if (dontAnimate !== true) {\r\n _.animateSlide(slideLeft, function() {\r\n _.postSlide(targetSlide);\r\n });\r\n } else {\r\n _.postSlide(targetSlide);\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if ( _.options.autoplay ) {\r\n clearInterval(_.autoPlayTimer);\r\n }\r\n\r\n if (targetSlide < 0) {\r\n if (_.slideCount % _.options.slidesToScroll !== 0) {\r\n animSlide = _.slideCount - (_.slideCount % _.options.slidesToScroll);\r\n } else {\r\n animSlide = _.slideCount + targetSlide;\r\n }\r\n } else if (targetSlide >= _.slideCount) {\r\n if (_.slideCount % _.options.slidesToScroll !== 0) {\r\n animSlide = 0;\r\n } else {\r\n animSlide = targetSlide - _.slideCount;\r\n }\r\n } else {\r\n animSlide = targetSlide;\r\n }\r\n\r\n _.animating = true;\r\n\r\n _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);\r\n\r\n oldSlide = _.currentSlide;\r\n _.currentSlide = animSlide;\r\n\r\n _.setSlideClasses(_.currentSlide);\r\n\r\n if ( _.options.asNavFor ) {\r\n\r\n navTarget = _.getNavTarget();\r\n navTarget = navTarget.slick('getSlick');\r\n\r\n if ( navTarget.slideCount <= navTarget.options.slidesToShow ) {\r\n navTarget.setSlideClasses(_.currentSlide);\r\n }\r\n\r\n }\r\n\r\n _.updateDots();\r\n _.updateArrows();\r\n\r\n if (_.options.fade === true) {\r\n if (dontAnimate !== true) {\r\n\r\n _.fadeSlideOut(oldSlide);\r\n\r\n _.fadeSlide(animSlide, function() {\r\n _.postSlide(animSlide);\r\n });\r\n\r\n } else {\r\n _.postSlide(animSlide);\r\n }\r\n _.animateHeight();\r\n return;\r\n }\r\n\r\n if (dontAnimate !== true) {\r\n _.animateSlide(targetLeft, function() {\r\n _.postSlide(animSlide);\r\n });\r\n } else {\r\n _.postSlide(animSlide);\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.startLoad = function() {\r\n\r\n var _ = this;\r\n\r\n if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\r\n\r\n _.$prevArrow.hide();\r\n _.$nextArrow.hide();\r\n\r\n }\r\n\r\n if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\r\n\r\n _.$dots.hide();\r\n\r\n }\r\n\r\n _.$slider.addClass('slick-loading');\r\n\r\n };\r\n\r\n Slick.prototype.swipeDirection = function() {\r\n\r\n var xDist, yDist, r, swipeAngle, _ = this;\r\n\r\n xDist = _.touchObject.startX - _.touchObject.curX;\r\n yDist = _.touchObject.startY - _.touchObject.curY;\r\n r = Math.atan2(yDist, xDist);\r\n\r\n swipeAngle = Math.round(r * 180 / Math.PI);\r\n if (swipeAngle < 0) {\r\n swipeAngle = 360 - Math.abs(swipeAngle);\r\n }\r\n\r\n if ((swipeAngle <= 45) && (swipeAngle >= 0)) {\r\n return (_.options.rtl === false ? 'left' : 'right');\r\n }\r\n if ((swipeAngle <= 360) && (swipeAngle >= 315)) {\r\n return (_.options.rtl === false ? 'left' : 'right');\r\n }\r\n if ((swipeAngle >= 135) && (swipeAngle <= 225)) {\r\n return (_.options.rtl === false ? 'right' : 'left');\r\n }\r\n if (_.options.verticalSwiping === true) {\r\n if ((swipeAngle >= 35) && (swipeAngle <= 135)) {\r\n return 'down';\r\n } else {\r\n return 'up';\r\n }\r\n }\r\n\r\n return 'vertical';\r\n\r\n };\r\n\r\n Slick.prototype.swipeEnd = function(event) {\r\n\r\n var _ = this,\r\n slideCount,\r\n direction;\r\n\r\n _.dragging = false;\r\n _.interrupted = false;\r\n _.shouldClick = ( _.touchObject.swipeLength > 10 ) ? false : true;\r\n\r\n if ( _.touchObject.curX === undefined ) {\r\n return false;\r\n }\r\n\r\n if ( _.touchObject.edgeHit === true ) {\r\n _.$slider.trigger('edge', [_, _.swipeDirection() ]);\r\n }\r\n\r\n if ( _.touchObject.swipeLength >= _.touchObject.minSwipe ) {\r\n\r\n direction = _.swipeDirection();\r\n\r\n switch ( direction ) {\r\n\r\n case 'left':\r\n case 'down':\r\n\r\n slideCount =\r\n _.options.swipeToSlide ?\r\n _.checkNavigable( _.currentSlide + _.getSlideCount() ) :\r\n _.currentSlide + _.getSlideCount();\r\n\r\n _.currentDirection = 0;\r\n\r\n break;\r\n\r\n case 'right':\r\n case 'up':\r\n\r\n slideCount =\r\n _.options.swipeToSlide ?\r\n _.checkNavigable( _.currentSlide - _.getSlideCount() ) :\r\n _.currentSlide - _.getSlideCount();\r\n\r\n _.currentDirection = 1;\r\n\r\n break;\r\n\r\n default:\r\n\r\n\r\n }\r\n\r\n if( direction != 'vertical' ) {\r\n\r\n _.slideHandler( slideCount );\r\n _.touchObject = {};\r\n _.$slider.trigger('swipe', [_, direction ]);\r\n\r\n }\r\n\r\n } else {\r\n\r\n if ( _.touchObject.startX !== _.touchObject.curX ) {\r\n\r\n _.slideHandler( _.currentSlide );\r\n _.touchObject = {};\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.swipeHandler = function(event) {\r\n\r\n var _ = this;\r\n\r\n if ((_.options.swipe === false) || ('ontouchend' in document && _.options.swipe === false)) {\r\n return;\r\n } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {\r\n return;\r\n }\r\n\r\n _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ?\r\n event.originalEvent.touches.length : 1;\r\n\r\n _.touchObject.minSwipe = _.listWidth / _.options\r\n .touchThreshold;\r\n\r\n if (_.options.verticalSwiping === true) {\r\n _.touchObject.minSwipe = _.listHeight / _.options\r\n .touchThreshold;\r\n }\r\n\r\n switch (event.data.action) {\r\n\r\n case 'start':\r\n _.swipeStart(event);\r\n break;\r\n\r\n case 'move':\r\n _.swipeMove(event);\r\n break;\r\n\r\n case 'end':\r\n _.swipeEnd(event);\r\n break;\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.swipeMove = function(event) {\r\n\r\n var _ = this,\r\n edgeWasHit = false,\r\n curLeft, swipeDirection, swipeLength, positionOffset, touches;\r\n\r\n touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;\r\n\r\n if (!_.dragging || touches && touches.length !== 1) {\r\n return false;\r\n }\r\n\r\n curLeft = _.getLeft(_.currentSlide);\r\n\r\n _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;\r\n _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;\r\n\r\n _.touchObject.swipeLength = Math.round(Math.sqrt(\r\n Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));\r\n\r\n if (_.options.verticalSwiping === true) {\r\n _.touchObject.swipeLength = Math.round(Math.sqrt(\r\n Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));\r\n }\r\n\r\n swipeDirection = _.swipeDirection();\r\n\r\n if (swipeDirection === 'vertical') {\r\n return;\r\n }\r\n\r\n if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {\r\n event.preventDefault();\r\n }\r\n\r\n positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);\r\n if (_.options.verticalSwiping === true) {\r\n positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;\r\n }\r\n\r\n\r\n swipeLength = _.touchObject.swipeLength;\r\n\r\n _.touchObject.edgeHit = false;\r\n\r\n if (_.options.infinite === false) {\r\n if ((_.currentSlide === 0 && swipeDirection === 'right') || (_.currentSlide >= _.getDotCount() && swipeDirection === 'left')) {\r\n swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;\r\n _.touchObject.edgeHit = true;\r\n }\r\n }\r\n\r\n if (_.options.vertical === false) {\r\n _.swipeLeft = curLeft + swipeLength * positionOffset;\r\n } else {\r\n _.swipeLeft = curLeft + (swipeLength * (_.$list.height() / _.listWidth)) * positionOffset;\r\n }\r\n if (_.options.verticalSwiping === true) {\r\n _.swipeLeft = curLeft + swipeLength * positionOffset;\r\n }\r\n\r\n if (_.options.fade === true || _.options.touchMove === false) {\r\n return false;\r\n }\r\n\r\n if (_.animating === true) {\r\n _.swipeLeft = null;\r\n return false;\r\n }\r\n\r\n _.setCSS(_.swipeLeft);\r\n\r\n };\r\n\r\n Slick.prototype.swipeStart = function(event) {\r\n\r\n var _ = this,\r\n touches;\r\n\r\n _.interrupted = true;\r\n\r\n if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {\r\n _.touchObject = {};\r\n return false;\r\n }\r\n\r\n if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {\r\n touches = event.originalEvent.touches[0];\r\n }\r\n\r\n _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;\r\n _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;\r\n\r\n _.dragging = true;\r\n\r\n };\r\n\r\n Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function() {\r\n\r\n var _ = this;\r\n\r\n if (_.$slidesCache !== null) {\r\n\r\n _.unload();\r\n\r\n _.$slideTrack.children(this.options.slide).detach();\r\n\r\n _.$slidesCache.appendTo(_.$slideTrack);\r\n\r\n _.reinit();\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.unload = function() {\r\n\r\n var _ = this;\r\n\r\n $('.slick-cloned', _.$slider).remove();\r\n\r\n if (_.$dots) {\r\n _.$dots.remove();\r\n }\r\n\r\n if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {\r\n _.$prevArrow.remove();\r\n }\r\n\r\n if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {\r\n _.$nextArrow.remove();\r\n }\r\n\r\n _.$slides\r\n .removeClass('slick-slide slick-active slick-visible slick-current')\r\n .attr('aria-hidden', 'true')\r\n .css('width', '');\r\n\r\n };\r\n\r\n Slick.prototype.unslick = function(fromBreakpoint) {\r\n\r\n var _ = this;\r\n _.$slider.trigger('unslick', [_, fromBreakpoint]);\r\n _.destroy();\r\n\r\n };\r\n\r\n Slick.prototype.updateArrows = function() {\r\n\r\n var _ = this,\r\n centerOffset;\r\n\r\n centerOffset = Math.floor(_.options.slidesToShow / 2);\r\n\r\n if ( _.options.arrows === true &&\r\n _.slideCount > _.options.slidesToShow &&\r\n !_.options.infinite ) {\r\n\r\n _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\r\n _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\r\n\r\n if (_.currentSlide === 0) {\r\n\r\n _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\r\n _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\r\n\r\n } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {\r\n\r\n _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\r\n _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\r\n\r\n } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {\r\n\r\n _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\r\n _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.updateDots = function() {\r\n\r\n var _ = this;\r\n\r\n if (_.$dots !== null) {\r\n\r\n _.$dots\r\n .find('li')\r\n .removeClass('slick-active')\r\n .attr('aria-hidden', 'true');\r\n\r\n _.$dots\r\n .find('li')\r\n .eq(Math.floor(_.currentSlide / _.options.slidesToScroll))\r\n .addClass('slick-active')\r\n .attr('aria-hidden', 'false');\r\n\r\n }\r\n\r\n };\r\n\r\n Slick.prototype.visibility = function() {\r\n\r\n var _ = this;\r\n\r\n if ( _.options.autoplay ) {\r\n\r\n if ( document[_.hidden] ) {\r\n\r\n _.interrupted = true;\r\n\r\n } else {\r\n\r\n _.interrupted = false;\r\n\r\n }\r\n\r\n }\r\n\r\n };\r\n\r\n $.fn.slick = function() {\r\n var _ = this,\r\n opt = arguments[0],\r\n args = Array.prototype.slice.call(arguments, 1),\r\n l = _.length,\r\n i,\r\n ret;\r\n for (i = 0; i < l; i++) {\r\n if (typeof opt == 'object' || typeof opt == 'undefined')\r\n _[i].slick = new Slick(_[i], opt);\r\n else\r\n ret = _[i].slick[opt].apply(_[i].slick, args);\r\n if (typeof ret != 'undefined') return ret;\r\n }\r\n return _;\r\n };\r\n\r\n}));\r\n","// Extract current breakpoint name as string from DOM\r\n// More details: https://www.lullabot.com/articles/importing-css-breakpoints-into-javascript\r\nexport const breakpoint = () => {\r\n return window.getComputedStyle(document.querySelector(\"body\"), \"::before\")\r\n .getPropertyValue(\"content\")\r\n .replace(/\\\"/g, \"\");\r\n};","/**\r\n * https://stackoverflow.com/questions/21741841/detecting-ios-android-operating-system\r\n * Determine the mobile operating system.\r\n * This function returns one of 'iOS', 'Android', 'Windows Phone', or 'unknown'.\r\n *\r\n * @returns {String}\r\n */\r\nexport default function getMobileOperatingSystem() {\r\n var userAgent = navigator.userAgent || navigator.vendor || window.opera;\r\n \r\n // Windows Phone must come first because its UA also contains \"Android\"\r\n if (/windows phone/i.test(userAgent)) {\r\n return \"Windows Phone\";\r\n }\r\n \r\n if (/android/i.test(userAgent)) {\r\n return \"Android\";\r\n }\r\n \r\n // iOS detection from: http://stackoverflow.com/a/9039885/177710\r\n if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {\r\n return \"iOS\";\r\n }\r\n \r\n return \"unknown\";\r\n }","/** https://toddmotto.com/ditch-the-array-foreach-call-nodelist-hack/#recommendations **/\r\n\r\n// forEach method, could be shipped as part of an Object Literal/Module\r\nexport default function forEach(array, callback, scope) {\r\n for (var i = 0; i < array.length; i++) {\r\n callback.call(scope, i, array[i]); // passes back stuff we need\r\n }\r\n};","/* NPM modules imports */\r\nimport $ from \"jquery\";\r\nimport svg4everybody from 'svg4everybody';\r\nimport debounce from 'lodash.debounce';\r\nimport 'objectFitPolyfill';\r\nimport smoothscroll from 'smoothscroll-polyfill';\r\n/* Site Helpers imports */\r\nimport breakpoint from \"./helpers/breakpoints.js\";\r\nimport downloadAppSwipe from \"./modules/downloadApp.js\";\r\n/* Site Module imports */\r\nimport languageSelector from \"./modules/languageSelector.js\";\r\nimport toggleContrast from \"./modules/toggleContrast.js\";\r\nimport mainNav from \"./modules/mainNav.js\";\r\nimport mobileNav from \"./modules/mobileNav.js\";\r\nimport dialogManager from \"./modules/dialogManager.js\";\r\nimport homePageModal from \"./modules/homePageModal.js\";\r\nimport moveItems from \"./modules/moveItems.js\";\r\nimport forLoggedInUser from \"./modules/loggedin.js\"\r\nimport {toggleLoginSection} from \"./modules/loggedin.js\";\r\nimport {populateLoggedInUserInfo} from \"./modules/loggedin.js\";\r\nimport { ImageSlider } from \"./modules/ImageSlider\";\r\nimport getTheApp from \"./modules/getTheApp.js\";\r\nimport getTheAppBanner from \"./modules/getTheAppBanner.js\";\r\nimport getAppLink from \"./modules/getAppLink.js\";\r\nimport signup from \"./modules/signup.js\";\r\nimport alert from \"./modules/alert.js\";\r\nimport tabs from \"./modules/tabs.js\";\r\nimport accordion from \"./modules/accordion.js\";\r\nimport stopPageJumpForHashUrl from \"./modules/stopPageJumpForHashUrl.js\";\r\nimport flipper from \"./modules/flipper.js\";\r\nimport backToTopButton from \"./modules/backToTopButton.js\";\r\nimport stickyHeader from \"./modules/stickyHeader.js\";\r\nimport anchoredDisclaimer from \"./modules/anchoredDisclaimer.js\";\r\nimport activeNavItem from \"./modules/activeNavItem.js\";\r\nimport {bgVideo} from \"./modules/bgVideo.js\";\r\nimport {loadPress} from \"./modules/loadPress.js\";\r\nimport {VideoPlayer} from \"./modules/videoPlayer.js\";\r\nimport {OpenModal} from \"./modules/openModal.js\";\r\nimport nutritionGrid from \"./modules/nutritionGrid.js\";\r\nimport touchSwipe from \"./custom-vendor/jquery-touchswipe.js\";\r\n\r\nwindow.toggleLoginSection = toggleLoginSection;\r\nwindow.populateLoggedInUserInfo = populateLoggedInUserInfo;\r\nwindow.sliders = [];\r\n\r\nif (typeof LazyLoad != 'undefined') {\r\nmyLazyload1 = new LazyLoad({\r\n callback_set: function (el) {\r\n picturefill({ reevaluate: true });\r\n objectFitPolyfill();\r\n homePageModal();\r\n }\r\n});\r\n\r\n}\r\n\r\n\r\n//Trigger breakpoint on resize and page load\r\n$(window).resize(function () {\r\n //breakpoint.refreshValue();\r\n}).resize();\r\n\r\n/* Function Calls */\r\nsvg4everybody();\r\n\r\n// kick off the polyfill!\r\nsmoothscroll.polyfill();\r\n\r\nif($('.js-sw-eyebrow__language').length) {\r\n languageSelector('.js-sw-eyebrow__language');\r\n}\r\n\r\nif($('.js-sw-contrast').length) { \r\n toggleContrast('.js-sw-contrast');\r\n}\r\n\r\nif($('.js-sw-mainnav__item').length) {\r\n mainNav('.js-sw-mainnav__item');\r\n}\r\n\r\nif($('.js-sw-hamburger').length) {\r\n mobileNav('.js-sw-hamburger');\r\n}\r\n\r\nif($('.js-sw-signup').length) {\r\n $('.js-sw-signup').each(function(){\r\n signup($(this));\r\n });\r\n}\r\n\r\n\r\n\r\n\r\nactiveNavItem();\r\nmoveItems();\r\nforLoggedInUser();\r\ngetTheApp();\r\ngetTheAppBanner();\r\ngetAppLink();\r\nalert();\r\nstopPageJumpForHashUrl();\r\nflipper();\r\nbackToTopButton();\r\ndownloadAppSwipe();\r\n//dialogManager();\r\n\r\n\r\nif($('.js-sw-tabs').length) {\r\n tabs();\r\n}\r\n\r\nif($('.js-sw-accordion').length) {\r\n accordion(); \r\n}\r\n\r\nif($('.js-nutrition-grid--v2').length) {\r\n nutritionGrid();\r\n}\r\n\r\nstickyHeader('.sw-headerpane');\r\nanchoredDisclaimer();\r\n\r\n// Slideshows\r\n// do not intialize slideshows inside\r\n// page editor\r\n\r\nconst slideshows = $.makeArray($(\".js-sw-hero__slider\")).map( el => {\r\n let autoPlay,\r\n rtlCase;\r\n if ($(\"body\").hasClass(\"is-page-editor\")) {\r\n autoPlay = false;\r\n } else {\r\n autoPlay = true;\r\n }\r\n if($('html').attr('dir') === \"rtl\") {\r\n rtlCase = true;\r\n } else {\r\n rtlCase = false;\r\n }\r\n if($(el).find('.sw-hero__slide').length > 1) {\r\n var imageSlider = new ImageSlider($(el), '.sw-hero__slide', { autoplay: autoPlay, rtl: rtlCase });\r\n window.sliders.push(imageSlider);\r\n } else if ($(el).find('.sw-hero__slide').length === 1){\r\n // still need to initialize the focus outline if it exists \r\n let currentOutlineStyle = $(el).find('.sw-hero__slide').first().data(\"outline\");\r\n\r\n if (typeof currentOutlineStyle !== \"undefined\") {\r\n $(el).addClass(currentOutlineStyle);\r\n }\r\n }\r\n});\r\nconst bgvideo = $.makeArray($(\".js-sw-video--bg\")).map( el => {\r\n return new bgVideo($(el));\r\n})\r\nconst LoadPress = $.makeArray($(\".js-sw-press__load-more\")).map( el => {\r\n return new loadPress($(el));\r\n})\r\n/** HACK: objectFitPolyfill\r\n * 1. using debounce from lodash\r\n * 2. to address image getting weird size and \r\n * 3. positioned differently on IE when the source set changed\r\n * 4. objectFitPolyfill() is being called twice on resize\r\n * 5. One with deboucne (here below) and the other without in the src polyfill file\r\n *--------------------------------------*/\r\nwindow.addEventListener(\"resize\", debounce(function() {\r\n objectFitPolyfill();\r\n}, 1000));\r\nif($(\".js-sw-modal-btn\").length){\r\n let counter = 0;\r\n const openModal = $.makeArray($(\".js-sw-modal-btn\")).map(el => {\r\n counter++;\r\n var $el = $(el);\r\n $el.attr('id', 'js-sw-modal-btn__' + counter);\r\n return new OpenModal($el);\r\n })\r\n}\r\nif($(\".js-sw-video__player\").length){\r\n const videoPlayer = $.makeArray($(\".js-sw-video__player\")).map(el => {\r\n return new VideoPlayer($(el));\r\n })\r\n}\r\n\r\n\r\n//launch-locator-catering\r\n$(document).ready(function () {\r\n\tif ($(\".launch-locator-catering\") != null) {\r\n\t\t\t$(\".launch-locator-catering\").on(\"click\", function () {launchLocator('HasCatering');});\r\n\t}\r\n});\r\n\r\n// $(document).ready(function () {\r\n// \tconsole.log('docready homepagemodal');\r\n// if($('.homePageModal').length) { \r\n// homePageModal();\r\n// }\r\n// });\r\n\r\n\r\nwindow.stopAllSliders = function (){\r\n $.each(window.sliders, function(i, slider){\r\n slider.stopSlider();\r\n })\r\n }\r\n\r\n window.startAllSliders = function (){\r\n $.each(window.sliders, function(i, slider){\r\n slider.stopSlider();\r\n slider.toggleSlider();\r\n })\r\n }\r\n ","import $ from \"jquery\";\r\nimport \"../custom-vendor/slick-carousel/slick/slick\";\r\n\r\nexport class ImageSlider {\r\n constructor($el, slideSelector, conf) {\r\n this.$el = $el;\r\n this.$hero = $el.parents(\".js-sw-hero\");\r\n this.$pauseBtn = this.$hero.find(\".js-sw-hero__pause\");\r\n this.pauseClass = \"paused\";\r\n this.isCrossfade = this.$hero.hasClass(\"sw-hero--crossfade\");\r\n this.slickParams = this.isCrossfade\r\n ? this.slickStaticCta()\r\n : this.slickDefaults();\r\n let slickConf = Object.assign(this.slickParams, conf);\r\n //get initial slide interval, or use the default if none found\r\n let firstSlide = $el.find(slideSelector).first();\r\n\r\n var initialSlideInterval = firstSlide.data(\"interval\");\r\n if (\r\n typeof initialSlideInterval !== \"undefined\" &&\r\n parseInt(initialSlideInterval) !== NaN\r\n ) {\r\n slickConf.autoplaySpeed = initialSlideInterval;\r\n } \r\n\r\n this.setOutline(firstSlide.data(\"outline\"));\r\n\r\n // bind event prior to slick init\r\n this.bindEvents(); \r\n\r\n // initialize slick \r\n this.$el.slick(slickConf); \r\n \r\n }\r\n\r\n bindEvents() {\r\n // save the content \r\n let thisClass =this;\r\n \r\n //on init, display pause button\r\n this.$el.on(\"init\", function(slick) {\r\n let $slickDots = $(this).parents(\".js-sw-hero\").find(\".slick-dots\");\r\n let $pauseButton = $(this).siblings(\".sw-hero__controls\").find(\".js-sw-hero__pause\");\r\n \r\n \r\n if ($slickDots.length) {\r\n $pauseButton.appendTo($slickDots)\r\n }\r\n $pauseButton.attr(\"aria-hidden\", \"false\");\r\n \r\n // Execure right after the init is completed\r\n setTimeout(function () {\r\n if (window.innerWidth <= 768) { //mobile view\r\n if (document.body.classList.contains('is-homepage')) {\r\n thisClass.stopSlider();\r\n thisClass.mobileStop = true;\r\n }\r\n }\r\n }, 0);\r\n });\r\n\r\n this.$el.on(\"afterChange\", (event, slick, currentSlide, nextSlide) => {\r\n if (currentSlide === 0) { // we got back to the first slide regardless of how we got here\r\n this.stopSlider();\r\n }\r\n\r\n if (thisClass.isCrossfade) {\r\n // in slideshow mode there is nothing to tab to\r\n var slides = $(slick.$slides.get(currentSlide));\r\n if (slides.length > 0) {\r\n slides[0].tabIndex = -1;\r\n }\r\n }\r\n\r\n this.setOutline($(slick.$slides.get(currentSlide)).data(\"outline\"));\r\n \r\n\r\n //if the current slide has a duration defined in its markup, set the autoplayspeed to that duration value\r\n let currentSlideInterval = $(slick.$slides.get(currentSlide)).data(\r\n \"interval\");\r\n\r\n if (\r\n typeof currentSlideInterval !== \"undefined\" &&\r\n parseInt(currentSlideInterval) !== NaN\r\n ) {\r\n thisClass.$el.slick(\r\n \"slickSetOption\",\r\n \"autoplaySpeed\",\r\n currentSlideInterval,\r\n false\r\n );\r\n }\r\n\r\n\r\n }); \r\n\r\n // bind an event on the arrows to de-focus them when\r\n // you mouse out, so the focus state doesn't get stuck \r\n this.$el.on(\"mouseleave\", \".slick-next, .slick-prev\", event => {\r\n event.currentTarget.blur();\r\n });\r\n this.$el.on(\"swipe\", () => this.stopSlider());\r\n\r\n this.$el.on(\"click\", \".slick-dots\", () => this.stopSlider());\r\n this.$el.on(\"click\", \".slick-arrow\", () => this.stopSlider());\r\n\r\n this.$pauseBtn.click(event => this.toggleSlider(event));\r\n\r\n window.addEventListener('scroll', function () {\r\n if (window.pageYOffset >= 0 && thisClass.mobileStop) {\r\n thisClass.mobileStop = false; \r\n thisClass.toggleSlider();\r\n }\r\n });\r\n }\r\n\r\n slickDefaults() {\r\n return {\r\n dots: true,\r\n adaptiveHeight: true,\r\n speed: 300,\r\n slidesToShow: 1,\r\n slidesToScroll: 1,\r\n pauseOnDotsHover: true\r\n };\r\n }\r\n slickStaticCta() {\r\n return {\r\n draggable: true,\r\n autoplay: true,\r\n autoplaySpeed: 2000,\r\n arrows: false,\r\n dots: false,\r\n adaptiveHeight: true,\r\n fade: true,\r\n speed: 600,\r\n infinite: true,\r\n cssEase: \"ease-in-out\",\r\n slidesToShow: 1,\r\n slidesToScroll: 1\r\n };\r\n }\r\n \r\n toggleSlider() {\r\n //play\r\n if (this.$hero.hasClass(this.pauseClass)) {\r\n this.$el.slick(\"slickPlay\");\r\n this.$hero.removeClass(this.pauseClass);\r\n this.toggleButtonAccessibility(\"play\");\r\n } else {\r\n //pause\r\n this.$hero.addClass(this.pauseClass);\r\n this.$el.slick(\"slickPause\");\r\n this.toggleButtonAccessibility(\"pause\");\r\n }\r\n return false;\r\n }\r\n\r\n stopSlider() {\r\n if (!this.$hero.hasClass(this.pauseClass)) {\r\n this.$hero.addClass(this.pauseClass);\r\n this.$el.slick(\"slickPause\");\r\n this.toggleButtonAccessibility(\"pause\");\r\n }\r\n return false;\r\n }\r\n\r\n setOutline(currentOutlineStyle) { \r\n let control = this.$el\r\n\r\n // remove all outline classes\r\n control.attr('class', function (i, c) {\r\n return c && c.replace(/(^|\\s)outline-\\S+/g, '');\r\n });\r\n\r\n if (typeof currentOutlineStyle !== \"undefined\") {\r\n control.addClass(currentOutlineStyle);\r\n }\r\n }\r\n toggleButtonAccessibility(buttonState) {\r\n var $playText = this.$pauseBtn.find('.js-sw-hero__pause__play-text');\r\n var $pauseText = this.$pauseBtn.find('.js-sw-hero__pause__pause-text');\r\n switch (buttonState) {\r\n case \"play\":\r\n this.$pauseBtn.attr('aria-pressed', \"false\"); //toggle the pressed nature of the button. false = pause is showing (after click)\r\n $playText.attr(\"aria-hidden\", \"true\"); //hide play text to screen readers\r\n $pauseText.attr(\"aria-hidden\", \"false\"); //show pause text to screen readers\r\n break;\r\n case \"pause\":\r\n default:\r\n this.$pauseBtn.attr('aria-pressed', \"true\"); //toggle the pressed nature of the button. true = play is showing (after click)\r\n $playText.attr(\"aria-hidden\", \"false\"); //show play text to screen readers\r\n $pauseText.attr(\"aria-hidden\", \"true\"); //hide pause text to screen readers\r\n break;\r\n }\r\n }\r\n}\r\n","/*\r\n* This content is licensed according to the W3C Software License at\r\n* https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\r\n*\r\n* Simple accordion pattern example\r\n*/\r\nimport getStickyHeaderHeight from './getStickyHeaderHeight.js';\r\n\r\nexport default function accordion() {\r\n\r\n Array.prototype.slice.call(document.querySelectorAll('.js-sw-accordion')).forEach(function (accordion) {\r\n\r\n // Allow for multiple accordion sections to be expanded at the same time\r\n var allowMultiple = accordion.hasAttribute('data-allow-multiple');\r\n // Allow for each toggle to both open and close individually\r\n var allowToggle = (allowMultiple) ? allowMultiple : accordion.hasAttribute('data-allow-toggle');\r\n\r\n // Create the array of toggle elements for the accordion group\r\n var triggers = Array.prototype.slice.call(accordion.querySelectorAll('.sw-accordion__trigger'));\r\n var panels = Array.prototype.slice.call(accordion.querySelectorAll('.sw-accordion__panel'));\r\n\r\n accordion.addEventListener('click', function (event) {\r\n var target = event.target;\r\n\r\n if (target.classList.contains('sw-accordion__trigger')) {\r\n // Check if the current toggle is expanded.\r\n var isExpanded = target.getAttribute('aria-expanded') == 'true';\r\n var active = accordion.querySelector('[aria-expanded=\"true\"]');\r\n\r\n // without allowMultiple, close the open accordion\r\n if (!allowMultiple && active && active !== target) {\r\n // Set the expanded state on the triggering element\r\n active.setAttribute('aria-expanded', 'false');\r\n // Hide the accordion sections, using aria-controls to specify the desired section\r\n document.getElementById(active.getAttribute('aria-controls')).setAttribute('hidden', '');\r\n\r\n // When toggling is not allowed, clean up disabled state\r\n if (!allowToggle) {\r\n active.removeAttribute('aria-disabled');\r\n }\r\n }\r\n\r\n if (!isExpanded) {\r\n // Set the expanded state on the triggering element\r\n target.setAttribute('aria-expanded', 'true');\r\n // Hide the accordion sections, using aria-controls to specify the desired section\r\n document.getElementById(target.getAttribute('aria-controls')).removeAttribute('hidden');\r\n\r\n // If toggling is not allowed, set disabled state on trigger\r\n if (!allowToggle) {\r\n target.setAttribute('aria-disabled', 'true');\r\n }\r\n\r\n // scroll page to the active/target accordion\r\n var targetRect = target.getBoundingClientRect(),\r\n scrollTop = window.pageYOffset || document.documentElement.scrollTop,\r\n isPreview = [].slice.call(document.getElementsByClassName(\"is-page-preview\")).length;\r\n var sitecoreRibbonTotal = 0;\r\n if(isPreview){\r\n sitecoreRibbonTotal = 150; // extra space to account for sitecore ribbon in preview mode.\r\n }\r\n window.scrollTo({left: 0, top: (targetRect.top - sitecoreRibbonTotal + scrollTop - getStickyHeaderHeight()), behavior: 'smooth'});\r\n }\r\n else if (allowToggle && isExpanded) {\r\n // Set the expanded state on the triggering element\r\n target.setAttribute('aria-expanded', 'false');\r\n // Hide the accordion sections, using aria-controls to specify the desired section\r\n document.getElementById(target.getAttribute('aria-controls')).setAttribute('hidden', '');\r\n }\r\n\r\n event.preventDefault();\r\n }\r\n });\r\n\r\n // Bind keyboard behaviors on the main accordion container\r\n accordion.addEventListener('keydown', function (event) {\r\n var target = event.target;\r\n var key = event.which.toString();\r\n // 33 = Page Up, 34 = Page Down\r\n var ctrlModifier = (event.ctrlKey && key.match(/33|34/));\r\n\r\n // Is this coming from an accordion header?\r\n if (target.classList.contains('sw-accordion__trigger')) {\r\n // Up/ Down arrow and Control + Page Up/ Page Down keyboard operations\r\n // 38 = Up, 40 = Down\r\n if (key.match(/38|40/) || ctrlModifier) {\r\n var index = triggers.indexOf(target);\r\n var direction = (key.match(/34|40/)) ? 1 : -1;\r\n var length = triggers.length;\r\n var newIndex = (index + length + direction) % length;\r\n\r\n triggers[newIndex].focus();\r\n\r\n event.preventDefault();\r\n }\r\n else if (key.match(/35|36/)) {\r\n // 35 = End, 36 = Home keyboard operations\r\n switch (key) {\r\n // Go to first accordion\r\n case '36':\r\n triggers[0].focus();\r\n break;\r\n // Go to last accordion\r\n case '35':\r\n triggers[triggers.length - 1].focus();\r\n break;\r\n }\r\n\r\n event.preventDefault();\r\n }\r\n }\r\n else if (ctrlModifier) {\r\n // Control + Page Up/ Page Down keyboard operations\r\n // Catches events that happen inside of panels\r\n panels.forEach(function (panel, index) {\r\n if (panel.contains(target)) {\r\n triggers[index].focus();\r\n\r\n event.preventDefault();\r\n }\r\n });\r\n }\r\n });\r\n\r\n // Minor setup: will set disabled state, via aria-disabled, to an\r\n // expanded/ active accordion which is not allowed to be toggled close\r\n if (!allowToggle) {\r\n // Get the first expanded/ active accordion\r\n var expanded = accordion.querySelector('[aria-expanded=\"true\"]');\r\n\r\n // If an expanded/ active accordion is found, disable\r\n if (expanded) {\r\n expanded.setAttribute('aria-disabled', 'true');\r\n }\r\n }\r\n\r\n });\r\n\r\n \r\n}","import $ from 'jquery';\r\n\r\nexport default function activeNavItem() {\r\n\r\n try {\r\n const currentNavItem = subway_site_config.currentNavItem,\r\n currentUrlPathname = window.location.pathname,\r\n $mainNavItem = $('.js-sw-mainnav__item'),\r\n activeClassName = 'is-current'\r\n ;\r\n\r\n //This should add the active menu class for submenu items and the parent menus\r\n //ALSO, make sure that we don't just highlight some section with a busted link when we are at the homepage. don't do any highlighting if we just have domain and culture code.\r\n let rex = /^\\/[a-zA-Z]{2}\\-[a-zA-Z]{2}(\\/|)$/;\r\n if(!rex.test(currentUrlPathname)) {\r\n let $currentUrlLink = $('.js-sw-mainnav .sw-mainnav__list').find('a[href|=\"' + currentUrlPathname + '\"]');\r\n \r\n // If more than one match, compare currentNavItem to the panel's title (hidden element), and highlight the one that matches\r\n // if we do not find a match...just pick your favorite one, because I am out of ideas.\r\n let $realMatch = null;\r\n if($currentUrlLink.length === 1) {\r\n $realMatch = $currentUrlLink;\r\n }\r\n else if($currentUrlLink.length > 1) {\r\n const $filtered = $currentUrlLink.filter(function(index) {\r\n const $matched = $(this).closest('.sw-mainnav__dropdown').find('.sw-mainnav__dropdown-title a[class=\"js-sw-mainnav__allowactive\"]');\r\n return $matched.attr('href') === currentNavItem;\r\n });\r\n\r\n if($filtered.length === 1) {\r\n $realMatch = $filtered;\r\n }\r\n else {\r\n $realMatch = $currentUrlLink.filter(function(index) {\r\n //highlight the first link that is NOT a child of a (hidden) menu panel title element. We used to show the panel headings, but haven't for a long time.\r\n return $(this).parent('.sw-mainnav__dropdown-title').length === 0;\r\n });\r\n $realMatch = $realMatch.length > 1 ? $realMatch.first() : $realMatch;\r\n }\r\n }\r\n\r\n if($realMatch !== null && $realMatch.length > 0) {\r\n $realMatch.addClass(activeClassName);\r\n $realMatch.closest($mainNavItem).addClass(activeClassName);\r\n }\r\n }\r\n } catch(err) {\r\n console.log(err);\r\n }\r\n}","import $ from 'jquery';\r\n\r\nexport default function alert() {\r\n let $alertContainer = $('.js-sw-alert'),\r\n $alertContent = $alertContainer.find('.sw-alert__content');\r\n setInterval(function(){\r\n $alertContent.toggleClass(\"bounce\");\r\n }, 3000);\r\n}","import $ from \"jquery\";\r\nimport getStickyHeaderHeight from \"./getStickyHeaderHeight.js\";\r\n\r\nexport default function anchoredDisclaimer() {\r\n let anchorElements = Array.from(\r\n document.querySelectorAll(\".js-sw-disclaimer--anchor\")\r\n ),\r\n keycodes = { SPACE: 32, ENTER: 13 },\r\n headerHeight = 0,\r\n $hasLink = $(\".has-link\"),\r\n $isEE = $(\".is-page-editor\");\r\n\r\n window.onscroll = function() {\r\n headerHeight = getStickyHeaderHeight();\r\n };\r\n\r\n if (anchorElements.length) {\r\n anchorElements.forEach(function(el, index) {\r\n let anchorId = el.getAttribute(\"data-href\");\r\n\r\n el.onkeydown = function(event) {\r\n navigateAnchorLink(event, anchorId);\r\n };\r\n\r\n el.onclick = function(event) {\r\n navigateAnchorLink(event, anchorId);\r\n };\r\n });\r\n }\r\n if ($isEE.length == 0) {\r\n $hasLink.on(\"click keydown\", function(e) {\r\n if (e.type === \"click\" || e.keyCode === keycodes.ENTER) {\r\n var $mainLink = $(this).find(\".js-sw-imgblock__mainlink\");\r\n if ($mainLink.length > 0) {\r\n if (!$(e.target).hasClass(\"sw-disclaimer--anchor\")) {\r\n var url = $mainLink.attr(\"href\");\r\n var location = $mainLink.attr(\"target\") ? $mainLink.attr(\"target\") : \"_self\";\r\n window.open(url, location);\r\n return false;\r\n } else {\r\n navigateAnchorLink(event, $(e.target).attr(\"data-href\"));\r\n }\r\n } else {\r\n return;\r\n }\r\n }\r\n });\r\n }\r\n\r\n //for cta panels, need to add focus styles to the parent of the link if there is no button\r\n var $hiddenCTAPanelLinks = $hasLink.find('.js-sw-imgblock__mainlink.accessibility--hidden');\r\n if($hiddenCTAPanelLinks.length > 0) {\r\n $hiddenCTAPanelLinks.each(function(index) {\r\n var $this = $(this);\r\n var $containingCTAPanel = $this.closest('.sw-up__col--content-block');\r\n if($containingCTAPanel.length > 0) {\r\n $this\r\n .focus(function() {\r\n $containingCTAPanel.addClass('cta-parent-focus');\r\n })\r\n .blur(function() {\r\n $containingCTAPanel.removeClass('cta-parent-focus');\r\n });\r\n }\r\n });\r\n }\r\n \r\n //handles clicks and keydowns on anchor span tag\r\n function navigateAnchorLink(evt, anchorId) {\r\n if (\r\n evt.type === \"click\" ||\r\n evt.keyCode === keycodes.SPACE ||\r\n evt.keyCode === keycodes.ENTER\r\n ) {\r\n evt.preventDefault();\r\n\r\n window.scrollTo({\r\n left: 0,\r\n top: calculateScrollTop(anchorId),\r\n behavior: \"smooth\"\r\n });\r\n }\r\n }\r\n\r\n function calculateScrollTop(anchorId) {\r\n let scrollToEl = document.getElementById(anchorId),\r\n scrollToRect = scrollToEl.getBoundingClientRect(),\r\n scrollTop = window.pageYOffset || document.documentElement.scrollTop;\r\n\r\n return scrollToRect.top + scrollTop - headerHeight - ~~(window.innerHeight/2); \r\n }\r\n\r\n window.calculateScrollTop = calculateScrollTop;\r\n}\r\n","export default function backToTopButton() {\r\n let $button = document.querySelectorAll(\".js-sw-goto-top\");\r\n\r\n for (let i = 0; i < $button.length; i++) {\r\n $button[i].onclick = function(e) {\r\n e.preventDefault();\r\n window.scrollTo({ left: 0, top: 0, behavior: \"smooth\" });\r\n\r\n var skipToContent = document.getElementsByClassName(\"sw-skip-to-content\")[0];\r\n\r\n if( $('.js-sw-hamburger').is(':visible')){\r\n $('.js-sw-hamburger').focus();\r\n } \r\n\r\n if(typeof skipToContent !== \"undefined\") {\r\n \r\n skipToContent.focus();\r\n skipToContent.blur();\r\n }\r\n \r\n };\r\n }\r\n}\r\n","export class bgVideo {\r\n constructor($el) {\r\n this.$el = $el;\r\n this.$video = this.$el.find(\"video\");\r\n this.$videoButton = this.$el.find(\".js-sw-video__btn\");\r\n this.$play = this.$videoButton.find(\".sw-video__play\");\r\n this.$pause = this.$videoButton.find(\".sw-video__pause\");\r\n this.$video.removeAttr(\"controls\");\r\n this.$videoButton.on(\"click\", () => this.playPauseMedia());\r\n }\r\n playPauseMedia() {\r\n if (this.$video.get(0).paused) {\r\n this.$play.css(\"display\", \"none\");\r\n this.$pause.css(\"display\", \"block\");\r\n this.$video.get(0).play();\r\n this.toggleButtonAccessibility(\"play\");\r\n return false;\r\n } else {\r\n this.$play.css(\"display\", \"block\");\r\n this.$pause.css(\"display\", \"none\");\r\n this.$video.get(0).pause();\r\n this.toggleButtonAccessibility(\"pause\");\r\n return false;\r\n }\r\n }\r\n\r\n toggleButtonAccessibility(buttonState) {\r\n var $playText = this.$videoButton.find('.js-sw-video__play-text');\r\n var $pauseText = this.$videoButton.find('.js-sw-video__pause-text');\r\n switch (buttonState) {\r\n case \"play\":\r\n this.$videoButton.attr('aria-pressed', \"false\"); //toggle the pressed nature of the button. false = pause is showing (after click)\r\n $playText.attr(\"aria-hidden\", \"true\"); //hide play text to screen readers\r\n $pauseText.attr(\"aria-hidden\", \"false\"); //show pause text to screen readers\r\n break;\r\n case \"pause\":\r\n default:\r\n this.$videoButton.attr('aria-pressed', \"true\"); //toggle the pressed nature of the button. true = play is showing (after click)\r\n $playText.attr(\"aria-hidden\", \"false\"); //show play text to screen readers\r\n $pauseText.attr(\"aria-hidden\", \"true\"); //hide pause text to screen readers\r\n break;\r\n }\r\n }\r\n}\r\n","import $ from 'jquery';\r\nexport default function dialogManager() {\r\n\r\n // Variable for storing the last focused element\r\n var _lastFocusedElement;\r\n var _container = null;\r\n var _focusableElements=[];\r\n var _docFocusableElements=[];\r\n var _firstTabStop = null;\r\n var _lastTabStop = null;\r\n var _currentElementIndex = 0;\r\n var _lastGoodStop = null;\r\n var _afterRemoveCallback = null;\r\n\r\n this.removeModal = function(){\r\n removeModalInternal();\r\n }\r\n\r\n\r\nfunction removeModalInternal(){\r\n if (_container === null) return;\r\n\r\n document.removeEventListener('keydown', listenToTab);\r\n _lastFocusedElement.focus();\r\n if(_afterRemoveCallback!==null){\r\n try{\r\n _afterRemoveCallback();\r\n }\r\n catch(e){\r\n //empty suppress\r\n }\r\n }\r\n}\r\n\r\n function listenToTab(e){\r\n // Listen for the Tab key\r\n if (e.keyCode === 9) {\r\n // If Shift + Tab\r\n if (e.shiftKey) {\r\n // If the current element in focus is the first focusable element within the modal window...\r\n do{\r\n _currentElementIndex--;\r\n if(_currentElementIndex < 0){\r\n _currentElementIndex=_focusableElements.length-1;\r\n }\r\n } \r\n while(!$(_focusableElements[_currentElementIndex]).is(\":visible\") || $(_focusableElements[_currentElementIndex]).css(\"visibility\")===\"hidden\");\r\n _focusableElements[_currentElementIndex].focus();\r\n // if Tab\r\n } else {\r\n e.preventDefault();\r\n //there should be at least one tabbable element in the list or infinite loop will happen\r\n do{\r\n _currentElementIndex++;\r\n if(_currentElementIndex>=_focusableElements.length){\r\n _currentElementIndex=0;\r\n }\r\n } \r\n while(!$(_focusableElements[_currentElementIndex]).is(\":visible\") || $(_focusableElements[_currentElementIndex]).css(\"visibility\")===\"hidden\");\r\n\r\n _focusableElements[_currentElementIndex].focus();\r\n }\r\n }\r\n\r\n // Close the window by pressing the Esc-key\r\n if (e.keyCode === 27) {\r\n removeModalInternal();\r\n }\r\n }\r\n\r\n \r\n\r\n\r\n this.createDialog=function(container) {\r\n // Close all open modal windows\r\n this.removeModal();\r\n _focusableElements = [];\r\n _docFocusableElements = [];\r\n // Store the last focused element\r\n _lastFocusedElement = document.activeElement;\r\n //keep a reference to this modal\r\n _container = container;\r\n // Select the modal window\r\n var modal = container; \r\n\r\n if(typeof modal === \"undefined\" || modal === null){\r\n return;\r\n }\r\n\r\n // Find all focusable children\r\n var focusableElementsSelector = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex=\"0\"], [contenteditable]';\r\n _focusableElements = modal.querySelectorAll(focusableElementsSelector); \r\n\r\n _focusableElements = Array.prototype.slice.call(_focusableElements);\r\n // Focus the window\r\n _focusableElements[0].focus(); \r\n\r\n _currentElementIndex = 0;\r\n\r\n // Add keydown event\r\n // document.addEventListener('keydown', function (e) {\r\n \r\n // });\r\n document.addEventListener('keydown', listenToTab);\r\n try{\r\n $(document).swipe( {\r\n \r\n //Generic swipe handler for all directions\r\n swipe:function(event, direction, distance, duration, fingerCount, fingerData) {\r\n if(direction !==\"right\" && direction !==\"left\") return;\r\n \r\n if (direction === \"right\") {\r\n do{\r\n _currentElementIndex++;\r\n if(_currentElementIndex>=_focusableElements.length){\r\n _currentElementIndex=0;\r\n }\r\n } \r\n while(!$(_focusableElements[_currentElementIndex]).is(\":visible\") || $(_focusableElements[_currentElementIndex]).css(\"visibility\")===\"hidden\");\r\n _focusableElements[_currentElementIndex].focus();\r\n }\r\n else if (direction === \"left\") {\r\n do{\r\n _currentElementIndex--;\r\n if(_currentElementIndex < 0){\r\n _currentElementIndex=_focusableElements.length-1;\r\n }\r\n } \r\n while(!$(_focusableElements[_currentElementIndex]).is(\":visible\") || $(_focusableElements[_currentElementIndex]).css(\"visibility\")===\"hidden\");\r\n _focusableElements[_currentElementIndex].focus();\r\n }\r\n } \r\n \r\n \r\n });\r\n \r\n //Set options\r\n $(document).swipe( {fingers:1} );\r\n }\r\n catch(err)\r\n {\r\n //alert(err.message);\r\n }\r\n\r\n \r\n addListenerToDocument();\r\n \r\n }\r\n\r\n this.afterRemove=function(callback){\r\n _afterRemoveCallback = callback;\r\n }\r\n\r\n this.addSingleItem = function(item){\r\n _focusableElements.push(item);\r\n }\r\n // Remove the modal window if it's visible\r\n \r\n\r\n this.setInitialFocus = function(elem){\r\n var i;\r\n for(i=0;i<_focusableElements.length;i++){\r\n if(_focusableElements[i] == elem && elem !== undefined){\r\n _currentElementIndex = i;\r\n elem.focus();\r\n break;\r\n }\r\n }\r\n\r\n }\r\n\r\n \r\n\r\n function addListenerToDocument(){\r\n \r\n var docFocusableElementsSelector = 'a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, [tabindex=\"0\"], [contenteditable]';\r\n _docFocusableElements = document.querySelectorAll(docFocusableElementsSelector);\r\n\r\n $.each(_docFocusableElements, function(index, value){ \r\n _docFocusableElements[index].addEventListener('focus', focusCallBack);\r\n });\r\n }\r\n\r\n function focusCallBack(event){\r\n\r\n try{ \r\n var found = false;\r\n $.each(_focusableElements, function(index, elem){\r\n if(document.activeElement == elem){\r\n found = true;\r\n _lastGoodStop = elem;\r\n return;\r\n }\r\n\r\n }) ;\r\n \r\n if(!found)\r\n {\r\n if(_lastGoodStop != null){\r\n\r\n if(_lastGoodStop == _focusableElements[0]) {\r\n _focusableElements[_focusableElements.length-1].focus();\r\n \r\n } else{\r\n _focusableElements[0].focus();} \r\n }\r\n }\r\n }\r\n catch(ex){\r\n //alert(ex.message);\r\n }\r\n }\r\n \r\n};\r\n\r\n//export {dialogManager}\r\n \r\n\r\n","import $ from \"jquery\";\r\nimport \"../custom-vendor/jquery-touchswipe\";\r\nimport \"../custom-vendor/bootstrap-carousel/carousel\";\r\n\r\nexport default function downloadAppSwipe() {\r\n function getMobileOperatingSystem() {\r\n var userAgent = navigator.userAgent || navigator.vendor || window.opera;\r\n // Windows Phone must come first because its UA also contains 'Android'\r\n if (/windows phone/i.test(userAgent)) {\r\n $(\"#appStore\").css(\"display\", \"none\");\r\n $(\"#appleTC\").css(\"display\", \"none\");\r\n }\r\n if (/android/i.test(userAgent)) {\r\n $(\"#appStore\").css(\"display\", \"none\");\r\n $(\"#appleTC\").css(\"display\", \"none\");\r\n }\r\n // iOS detection from: http://stackoverflow.com/a/9039885/177710\r\n if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {\r\n $(\"#googlePlay\").css(\"display\", \"none\");\r\n $(\"#googleTC\").css(\"display\", \"none\");\r\n }\r\n return false;\r\n }\r\n\r\n $(function() {\r\n getMobileOperatingSystem();\r\n });\r\n\r\n function activateFeatureBlock() {\r\n $(\".more-features-left-div > div, .more-features-right-div > div\").on(\r\n \"click\",\r\n e => changeSlideClick(e)\r\n );\r\n $(\r\n \".more-features-left-div > div > button, .more-features-right-div > div > button\"\r\n ).on(\"click keydown\", e => changeSlideClick(e));\r\n }\r\n\r\n function enableCarouselSwipe() {\r\n /* dependency: https://cdnjs.cloudflare.com/ajax/libs/jquery.touchswipe/1.6.18/jquery.touchSwipe.min.js\r\n reference: http://labs.rampinteractive.co.uk/touchSwipe/docs/index.html */\r\n // if($(\"#see-more-great-features\").length > 0){\r\n $(\".carousel\").swipe({\r\n swipe: function(\r\n event,\r\n direction,\r\n distance,\r\n duration,\r\n fingerCount,\r\n fingerData\r\n ) {\r\n if (direction == \"left\") {\r\n $(this).carousel(\"next\");\r\n }\r\n if (direction == \"right\") {\r\n $(this).carousel(\"prev\");\r\n }\r\n },\r\n allowPageScroll: \"vertical\"\r\n });\r\n // }\r\n }\r\n\r\n $(function(e) {\r\n activateFeatureBlock();\r\n enableCarouselSwipe();\r\n });\r\n}\r\nfunction changeSlideClick(e) {\r\n if (e.type == \"click\" || e.keyCode == \"32\") {\r\n let phoneImage = $(\".more-features-center-div > .phone-frame > img\");\r\n let $previousActiveElement, $previousActiveElementButton, previousActiveIconClass, iconClass, blockClass, $activeElement, $activeElementButton;\r\n\r\n \r\n if ($(e.currentTarget).is(\"button\")) {\r\n //account for tabs\r\n e.preventDefault();\r\n // call custom function here\r\n $activeElement = $(e.currentTarget).parent();\r\n $activeElementButton = $(e.currentTarget);\r\n } else {\r\n $activeElement = $(e.currentTarget);\r\n $activeElementButton = $(e.currentTarget).find(\"button\");\r\n }\r\n\r\n // when a feature block is clicked,\r\n // reset previous active block to its default state...\r\n $previousActiveElement = $(\"#app-landing-more-features\").find(\r\n \".more-features-active\"\r\n ); // order-ahead-block is initial active element\r\n $previousActiveElementButton = $previousActiveElement.find(\"button\");\r\n previousActiveIconClass = $previousActiveElement\r\n .find(\"div.app-landing-sprites\")\r\n .attr(\"class\")\r\n .split(\" \")[1];\r\n\r\n $previousActiveElement.removeClass(\"more-features-active\");\r\n $previousActiveElement\r\n .find(\"div.app-landing-sprites\")\r\n .addClass(previousActiveIconClass.substr(7)) // add non-active icon class\r\n .removeClass(previousActiveIconClass); // remove icon active class\r\n\r\n // Ada remove the selected and the title \r\n $previousActiveElementButton.removeAttr(\"title\").attr(\"aria-selected\", \"false\");\r\n\r\n // ...and add active classes to current active block\r\n iconClass = $activeElement\r\n .find(\"div.app-landing-sprites\")\r\n .attr(\"class\")\r\n .split(\" \")[1];\r\n blockClass = $activeElement.attr(\"class\").split(\" \")[0];\r\n\r\n $activeElement\r\n .find(\"div.app-landing-sprites\")\r\n .addClass(\"active-\" + iconClass)\r\n .removeClass(iconClass);\r\n phoneImage.attr({\r\n src:\r\n \"~/media/_SubwayV2/DownloadTheApp/\" +\r\n iconClass.slice(0, -5).toUpperCase() +\r\n \".png\",\r\n alt: \"\"\r\n }); // set image corresponding to active block\r\n\r\n $activeElement\r\n .toggleClass(blockClass) // more-features-active class must be before blockClass\r\n .addClass(\"more-features-active\")\r\n .toggleClass(blockClass);\r\n\r\n $activeElementButton.attr(\"title\", \"selected\").attr(\"aria-selected\", \"true\");\r\n return false;\r\n }\r\n}\r\n","import $ from 'jquery';\r\n\r\nexport default function flipper() {\r\n let $flipper = $('.js-sw-cards__item');\r\n\r\n if($flipper.length) {\r\n $flipper.focusin(function(){\r\n $(this).addClass('is-focused');\r\n }).focusout(function(){\r\n $(this).removeClass('is-focused');\r\n });\r\n }\r\n}","import $ from 'jquery';\r\nimport getMobileOperatingSystem from '../helpers/determineMobileOS.js';\r\n\r\nexport default function getTheApp() {\r\n let $appStoreContainer = $('.sw-getapp-link--appstore'),\r\n $googlePlayContainer = $('.sw-getapp-link--googleplay');\r\n\r\n if(getMobileOperatingSystem() === 'iOS' || getMobileOperatingSystem() === 'Android') {\r\n\r\n if(getMobileOperatingSystem() === 'iOS' && !$appStoreContainer.hasClass('should-show')) {\r\n $appStoreContainer.addClass('should-show');\r\n } else {\r\n $appStoreContainer.removeClass('should-show');\r\n }\r\n\r\n if(getMobileOperatingSystem() === 'Android' && !$googlePlayContainer.hasClass('should-show')) {\r\n $googlePlayContainer.addClass('should-show');\r\n } else {\r\n $googlePlayContainer.removeClass('should-show');\r\n }\r\n\r\n }\r\n}","import debounce from 'lodash.debounce';\r\nimport forEach from '../helpers/forEach.js';\r\nimport $ from \"jquery\";\r\n\r\nexport default function getStickyHeaderHeight() {\r\n let stickyHeaderHeight = 0;\r\n\r\n function calculateStickyHeaderHeight() {\r\n let stickyHeader = document.querySelectorAll('.sw-headerpane')[0],\r\n euCookie = document.querySelectorAll('.sw-container--eucookie')[0],\r\n quickNav = document.querySelectorAll('.sw-quicknav')[0],\r\n navSection = document.querySelectorAll('.sw-container--header')[0];\r\n\r\n if (typeof stickyHeader === \"undefined\") {\r\n return stickyHeaderHeight;\r\n }\r\n\r\n let headerChildrenContainers = stickyHeader.querySelectorAll('.sw-container');\r\n\r\n if (document.body.classList.contains('has-hero')) {\r\n if (window.outerWidth < 1024) {\r\n stickyHeaderHeight = stickyHeader.offsetHeight; //47 being mobile quicknav's height\r\n } else {\r\n stickyHeaderHeight = stickyHeader.offsetHeight + navSection.offsetHeight;\r\n }\r\n } else {\r\n if (window.outerWidth < 1024) {\r\n stickyHeaderHeight = stickyHeader.offsetHeight; // sstickyHeader.offsetHeight + 47;\r\n } else {\r\n stickyHeaderHeight = stickyHeader.offsetHeight// + navSection.offsetHeight;\r\n }\r\n }\r\n console.log('Xstickyheight: ' + stickyHeaderHeight); \r\n }\r\n\r\n calculateStickyHeaderHeight();\r\n window.addEventListener(\"resize\", debounce(function () {\r\n calculateStickyHeaderHeight();\r\n }, 1000));\r\n\r\n\r\n window.addEventListener(\"scroll\", debounce(function () {\r\n calculateStickyHeaderHeight();\r\n }, 1000));\r\n\r\n window.addEventListener(\"load\", function () {\r\n calculateStickyHeaderHeight();\r\n });\r\n\r\n return stickyHeaderHeight;\r\n}","import $ from 'jquery';\r\nimport getMobileOperatingSystem from '../helpers/determineMobileOS.js';\r\n\r\nexport default function getTheApp() {\r\n let $getAppContainer = $('.js-sw-footer__getapp'),\r\n $appStoreContainer = $getAppContainer.find('.sw-footer__getapp-item--appstore'),\r\n $googlePlayContainer = $getAppContainer.find('.sw-footer__getapp-item--googleplay');\r\n\r\n if(getMobileOperatingSystem() === 'iOS' || getMobileOperatingSystem() === 'Android') {\r\n if(!$getAppContainer.hasClass('is-mobile-device')) {\r\n $getAppContainer.addClass('is-mobile-device');\r\n }\r\n\r\n if(getMobileOperatingSystem() === 'iOS' && !$appStoreContainer.hasClass('should-show')) {\r\n $appStoreContainer.addClass('should-show');\r\n } else {\r\n $appStoreContainer.removeClass('should-show');\r\n }\r\n\r\n if(getMobileOperatingSystem() === 'Android' && !$googlePlayContainer.hasClass('should-show')) {\r\n $googlePlayContainer.addClass('should-show');\r\n } else {\r\n $googlePlayContainer.removeClass('should-show');\r\n }\r\n\r\n } else {\r\n if($getAppContainer.hasClass('is-mobile-device')) {\r\n $getAppContainer.removeClass('is-mobile-device');\r\n }\r\n }\r\n}","import $ from 'jquery';\r\nimport getMobileOperatingSystem from '../helpers/determineMobileOS.js';\r\n\r\nexport default function getTheAppBanner() {\r\n \r\n let $getAppContainerTop = $('.sw-hero__copy div.sw-mobile-app');\r\n \r\n var iosLinkTop = $getAppContainerTop.find(\"span.sw-mobile-app__link:nth-child(2)\"); \r\n var androidLinkTop = $getAppContainerTop.find(\"span.sw-mobile-app__link:nth-child(3)\");\r\n\r\n let $getAppContainerBottom = $('div.sw-1up div.sw-mobile-app');\r\n var iosLinkBottom = $getAppContainerBottom.find(\"span.sw-mobile-app__link:nth-child(1)\"); \r\n var androidLinkBottom = $getAppContainerBottom.find(\"span.sw-mobile-app__link:nth-child(2)\");\r\n\r\n if(getMobileOperatingSystem() === 'iOS'){\r\n $(androidLinkTop).hide();\r\n $(androidLinkBottom).hide();\r\n }\r\n if(getMobileOperatingSystem() === 'Android'){\r\n $(iosLinkTop).hide();\r\n $(iosLinkBottom).hide();\r\n }\r\n\r\n \r\n}","import $ from 'jquery';\r\nimport dialogManager from \"./dialogManager.js\";\r\nimport ally from 'ally.js/ally';\r\n\r\n\r\nexport default function openHomePageModal(){\r\n\r\n var modalCookie = getCookie(\"modalCookie\");\r\n\r\n if(modalCookie == \"\")\r\n {\r\n var dialog = new dialogManager();\r\n var modalDiv = $('.homePageModal');\r\n \r\n if(modalDiv.length == 0){\r\n \r\n window.setTimeout(function(){\r\n openHomePageModal(), 100;\r\n });\r\n \r\n return;\r\n }\r\n\r\n $(\".homePageModal\").addClass(\"visible\");\r\n\r\n $(\".homePageModal\").attr(\"role\",\"dialog\");\r\n\r\n\r\n\r\n dialog.createDialog(modalDiv[0]);\r\n $(\"body\").addClass(\"lockModal\");\r\n\r\n dialog.afterRemove(function(){\r\n $(\".homePageModal\").removeClass(\"visible\");\r\n $(\"body\").removeClass(\"lockModal\");\r\n }\r\n );\r\n \r\n $(\"div.homePageModal div.closeButtonDiv input.modalCloseButton\").click(function(){\r\n dialog.removeModal(); \r\n })\r\n \r\n setCookie(\"modalCookie\",\"interstitial\", 1); \r\n\r\n \r\n }\r\n else{\r\n \r\n }\r\n\r\n}\r\n\r\nfunction setCookie(cname, cvalue, exdays) {\r\n var d = new Date();\r\n d.setTime(d.getTime() + (exdays*24*60*60*1000));\r\n var expires = \"expires=\"+ d.toUTCString();\r\n document.cookie = cname + \"=\" + cvalue + \";\" + expires + \";path=/\";\r\n }\r\n\r\n function getCookie(cname) {\r\n var name = cname + \"=\";\r\n var ca = document.cookie.split(';');\r\n for(var i = 0; i < ca.length; i++) {\r\n var c = ca[i];\r\n while (c.charAt(0) == ' ') {\r\n c = c.substring(1);\r\n }\r\n if (c.indexOf(name) == 0) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n return \"\";\r\n }","import $ from 'jquery';\r\n\r\nexport default function languageSelector(container) {\r\n const $toggleButton = $(container).find('.sw-eyebrow__language-selector'),\r\n $languageOption = $(container).find('.sw-eyebrow__language-option'),\r\n $languageDropdown = $(container).find('.sw-eyebrow__language-dropdown'),\r\n $languageCurrent = $(container).find('.sw-eyebrow__language-current');\r\n\r\n // initializer\r\n $languageDropdown.attr('aria-hidden', (!$(container).hasClass('is-open')).toString());\r\n\r\n $toggleButton.on('click', function(e) {\r\n e.preventDefault();\r\n\r\n if($(container).hasClass('is-open')) {\r\n $(container).removeClass('is-open');\r\n $toggleButton.attr(\"aria-expanded\", \"false\");\r\n $languageDropdown.attr('aria-hidden', 'true');\r\n } else {\r\n if (typeof(_satellite) !== \"undefined\") {\r\n _satellite.track('Nav Click Event Language Selection');\r\n }\r\n $(container).addClass('is-open');\r\n $toggleButton.attr(\"aria-expanded\", \"true\");\r\n $languageDropdown.attr('aria-hidden', 'false');\r\n\r\n }\r\n\r\n if($('body').hasClass('language-dd-on')) {\r\n $('body').removeClass('language-dd-on');\r\n } else {\r\n $('body').addClass('language-dd-on');\r\n }\r\n });\r\n\r\n $(document).on('click', function(e) {\r\n if($(container) !== e.target && !$(container).has(e.target).length){\r\n if($(container).hasClass('is-open')) {\r\n $toggleButton.attr(\"aria-expanded\", \"false\");\r\n $(container).removeClass('is-open');\r\n }\r\n\r\n if($('body').hasClass('language-dd-on')) {\r\n $('body').removeClass('language-dd-on');\r\n }\r\n }\r\n });\r\n}","export class loadPress {\r\n constructor($el) { \r\n this.$el = $el;\r\n this.pressItems = $(\".js-sw-press__item\");\r\n this.$el.on(\"click\", () => this.getNextPage());\r\n }\r\n getNextPage() {\r\n let that = this.$el;\r\n var hiddenDivs = this.pressItems.filter(function() {\r\n return $(this).css(\"display\") == \"none\";\r\n });\r\n\r\n if (hiddenDivs.length > 0) {\r\n hiddenDivs.slice(0, 6).each(function(i) {\r\n $(this).css(\"display\", \"block\");\r\n if (i == 0) {\r\n $(this)\r\n .find(\"a\")\r\n .focus();\r\n }\r\n });\r\n\r\n if (hiddenDivs.length <= 6) {\r\n setTimeout(()=> {\r\n that.css(\"display\", \"none\")\r\n return false;\r\n },0); \r\n }\r\n }\r\n \r\n return false;\r\n }\r\n}\r\n","import $ from 'jquery';\r\nwindow.favoriteStoreID = null;\r\nwindow.recentStoreID = null;\r\nwindow.guestId = null;\r\nwindow.guestCountry = null;\r\nwindow.loyaltyId = null;\r\nwindow.isLoggedin = false;\r\nwindow.encryptedToken = null;\r\nwindow.useLusrFlag = null;\r\n\r\n\r\nexport default function forLoggedInUser() {\r\n let _loggedInEndpoint = $('body').data('logged-in-end-point');\r\n let useLusr = $('body').data('variable');\r\n window.useLusrFlag = (useLusr == 'True')\r\n //alert(\"useLusrFlag1=\" + window.useLusrFlag);\r\n //let isLoggedin = false;\r\n isLoggedin = false;\r\n\r\n // toggle for the loggedin user menu\r\n $('.js-sw-eyebrow__navlink--user').on('click', function (e) {\r\n e.preventDefault();\r\n toggleUserMenu($(this), $('.js-sw-eyebrow__usermenu'));\r\n });\r\n\r\n // toggle for the mobile sign in/sign up menu\r\n $('.js-sw-eyebrow__navlink--userloginsignup').on('click', function (e) {\r\n e.preventDefault();\r\n toggleUserMenu($(this), $('.js-sw-eyebrow__userloginsignup-menu'));\r\n });\r\n\r\n // do not do the call if the information is in a cookie \r\n let cookieValue = getCookieValue('UserProfileCacheKey');\r\n\r\n if (cookieValue !== '') {\r\n let data = JSON.parse(cookieValue);\r\n //alert(\"flag=\" + useLusrFlag);\r\n if (window.useLusrFlag) {\r\n performLoginCheck_new(data);\r\n }\r\n else {\r\n performLoginCheck(data);\r\n }\r\n\r\n toggleLoginSection(data.isLoggedIn);\r\n return;\r\n }\r\n\r\n //dump out of this before the AJAX call if there is not logged in endpoint (ex: for Navigation-only eyebrow menu)\r\n if (typeof _loggedInEndpoint !== \"undefined\") {\r\n $.ajax({\r\n url: _loggedInEndpoint,\r\n type: 'GET',\r\n dataType: 'json',\r\n })\r\n .done(function (data) {\r\n isLoggedin = data.isLoggedIn;\r\n //alert(\"flag=\" + useLusrFlag);\r\n if (useLusrFlag) {\r\n performLoginCheck_new(data);\r\n }\r\n else {\r\n performLoginCheck(data);\r\n }\r\n\r\n })\r\n .fail(function (jqXHR, textStatus, errorThrown) {\r\n isLoggedin = false;\r\n console.log('A problem occured: ', errorThrown);\r\n })\r\n .always(function () {\r\n toggleLoginSection(isLoggedin);\r\n });\r\n }\r\n\r\n function toggleUserMenu($actor, $menu) {\r\n let $parent = $actor.closest('.js-sw-eyebrow__navitem--authentication');\r\n\r\n if ($parent.hasClass('usermenu-open')) {\r\n closeUserMenu($parent, $actor, $menu);\r\n } else {\r\n openUserMenu($parent, $actor, $menu);\r\n }\r\n }\r\n\r\n function openUserMenu($parent, $actor, $menu) {\r\n $parent.addClass('usermenu-open');\r\n $actor.attr('aria-expanded', 'true');\r\n $menu.attr('aria-hidden', 'false');\r\n }\r\n\r\n function closeUserMenu($parent, $actor = null, $menu = null) {\r\n $parent.removeClass('usermenu-open');\r\n\r\n // If no actor or menu were passed in, assume that the caller wants to close all open user menus, and close them all\r\n if ($actor !== null && $menu !== null) {\r\n $actor.attr('aria-expanded', 'false');\r\n $menu.attr('aria-hidden', 'true');\r\n }\r\n else {\r\n $parent.find('[aria-expanded=true]').attr('aria-expanded', 'false');\r\n $parent.find('[aria-hidden=false]').attr('aria-hidden', 'true');\r\n }\r\n }\r\n\r\n function getCookieValue(cookieName) {\r\n let cookieString = '; ' + document.cookie;\r\n let cookieArray = cookieString.split('; ' + cookieName + '=');\r\n return !!(cookieArray.length - 1) ? cookieArray.pop().split(';').shift() : '';\r\n }\r\n\r\n function trackLoginStatus(data) {\r\n try {\r\n if (fwhtrk != null) {\r\n if (data.isLoggedIn == true)\r\n fwhtrk.user.loginStatus = \"logged-in\";\r\n else\r\n fwhtrk.user.loginStatus = \"logged-out\";\r\n\r\n fwhtrk.loginStatus = fwhtrk.user.loginStatus;\r\n }\r\n } catch (e) {\r\n fwhtrk.errorMessage = \"Error getting logged-on status: \" + e.errorMessage;\r\n }\r\n }\r\n\r\n function trackGuestLoyaltyId(data) {\r\n try {\r\n if (fwhtrk != null) {\r\n fwhtrk.user.loyaltyID = loyaltyId;\r\n fwhtrk.user.guestID = guestId;\r\n fwhtrk.user.guestCountry = guestCountry;\r\n fwhtrk.guestCountry = guestCountry;\r\n }\r\n } catch (e) {\r\n fwhtrk.errorMessage = e.errorMessage;\r\n }\r\n }\r\n\r\n /*\r\n TW 121820 - commented out the following code. Thats not how we should be getting guest country\r\n */\r\n /* track GuestCountry \r\n function trackGuestCountry(data) {\r\n try {\r\n if (fwhtrk != null) {\r\n\t\t\t\t $(document).ready(function () {\r\n\t\t\t\tvar pageURL = $(location).attr(\"href\");\r\n\t\t\t\tvar urlArr = pageURL.split('/');\r\n\t\t\t\tconsole.log(urlArr[3].toString());\r\n\t\t\t\tlet guestLang= urlArr[3].toString();\r\n\t\t\t\tvar guestCntry = (urlArr.length > 0 ) ? guestLang.split('-') : null;\r\n\t\t\t\t//check _claim token return guestCountry if not get country from loggedin user's browser\r\n fwhtrk.guestCountry = (guestCountry == null) ? guestCntry[1].toString().toLowerCase() : guestCountry.toLowerCase();\r\n });\r\n \r\n }\r\n } catch (e) {\r\n fwhtrk.errorMessage = e.errorMessage;\r\n }\r\n }\r\n */\r\n\r\n function performLoginCheck_new(data) {\r\n isLoggedin = data.isLoggedIn;\r\n if (data.isLoggedIn == true) {\r\n guestId = data.guestId;\r\n guestCountry = data.guestCountry;\r\n loyaltyId = data.loyaltyId;\r\n encryptedToken = data.encryptedToken;\r\n //alert(\"encryptedToken =\"+encryptedToken);\r\n if (typeof locator !== \"undefined\" && (encryptedToken != null) && encryptedToken != '') {\r\n locator.setClientToken(encryptedToken);\r\n }\r\n populateLoggedInUserInfo(data);\r\n trackLoginStatus(data);\r\n trackGuestLoyaltyId(data);\r\n //trackGuestCountry(data); //TW commented out 121820\r\n\r\n }\r\n }\r\n\r\n function performLoginCheck(data) {\r\n isLoggedin = data.isLoggedIn;\r\n if (data.isLoggedIn == true) {\r\n guestId = data.guestId;\r\n guestCountry = data.guestCountry;\r\n loyaltyId = data.loyaltyId;\r\n window.favoriteStoreID = data.favoriteStoreId;\r\n window.recentStoreID = data.recentStoreId;\r\n //alert(\"favoriteStoreID=\" + favoriteStoreID);\r\n //alert(\"recentStoreID=\" + recentStoreID);\r\n if (typeof locator !== \"undefined\" && (window.favoriteStoreID !== null && window.favoriteStoreID != '')) {\r\n //alert(\"add favorite store\");\r\n locator.addFavoriteStore(window.favoriteStoreID, 0);\r\n\r\n }\r\n\r\n if (typeof locator !== \"undefined\" && (window.recentStoreID !== null && window.recentStoreID != '')) {\r\n //alert(\"add favorite store\");\r\n locator.addRecentStore(window.recentStoreID, 0);\r\n }\r\n populateLoggedInUserInfo(data);\r\n trackLoginStatus(data);\r\n trackGuestLoyaltyId(data);\r\n //trackGuestCountry(data); //TW commented out 121820\r\n\r\n }\r\n }\r\n\r\n $(document).on('click', function (e) {\r\n var targetEle = $('.js-sw-eyebrow__navitem--authentication');\r\n if (targetEle !== e.target && !targetEle.has(e.target).length) {\r\n if (targetEle.hasClass('usermenu-open')) {\r\n closeUserMenu(targetEle);\r\n }\r\n }\r\n });\r\n\r\n //call external log in process if one is defined\r\n $('.lnkLogin').on('click', function (event) {\r\n if (typeof initiateLogin === \"function\") {\r\n event.preventDefault(); //This prevents the control's Click event from firing\r\n initiateLogin(event, $(this));\r\n }\r\n });\r\n\r\n //call external log out process if one is defined\r\n $('.lnkLogout').on('click', function (event) {\r\n if (typeof initiateLogout === \"function\") {\r\n event.preventDefault(); //This prevents the control's Click event from firing\r\n initiateLogout(event, $(this));\r\n }\r\n });\r\n};\r\n\r\nexport function toggleLoginSection(isLoggedIn) {\r\n let $loginSection = $('.js-sw-eyebrow__navlink--userlogin'),\r\n $logoutSection = $('.js-sw-eyebrow__navlink--user'),\r\n $loginMobileMenuSection = $('.js-sw-eyebrow__userloginsignup-menu'),\r\n $logoutMenuSection = $('.js-sw-eyebrow__usermenu'),\r\n $loggedInOnlySections = $('.js-sw-section--loggedinonly'),\r\n $loggedOutOnlySections = $('.js-sw-section--loggedoutonly')\r\n ;\r\n\r\n if (isLoggedIn === true) {\r\n $('body').addClass('user-logged-in');\r\n\r\n $logoutSection.show();\r\n if ($loginSection.length) {\r\n $loginSection.hide();\r\n }\r\n if ($loginMobileMenuSection.length) {\r\n $loginMobileMenuSection.hide();\r\n }\r\n $logoutMenuSection.show();\r\n $loggedInOnlySections.show();\r\n }\r\n else {\r\n if ($('body').hasClass('user-logged-in')) {\r\n $('body').removeClass('user-logged-in');\r\n }\r\n\r\n $logoutSection.hide();\r\n if ($loginSection.length) {\r\n $loginSection.show();\r\n }\r\n if ($loginMobileMenuSection.length) {\r\n $loginMobileMenuSection.show();\r\n }\r\n $logoutMenuSection.hide();\r\n $loggedOutOnlySections.show();\r\n }\r\n\r\n try {\r\n // retrigger image lazy load - new sections may be visible\r\n window.myLazyload1.update();\r\n window.myLazyload2.update();\r\n } catch (err) {\r\n console.log(\"lazyload refresh/update failed\");\r\n }\r\n};\r\n\r\nexport function populateLoggedInUserInfo(userData) {\r\n /*\r\n userData is expected to be an object, with at least the following properties:\r\n - displayName: user's name\r\n - tokens: user's token count\r\n - rewards: user's rewards in dollars\r\n */\r\n if (typeof userData !== \"object\" ||\r\n typeof userData.displayName === \"undefined\" ||\r\n typeof userData.tokens === \"undefined\" ||\r\n typeof userData.rewards === \"undefined\") {\r\n\r\n console.log('missing or invalid user data');\r\n return;\r\n }\r\n\r\n let $tokenPane = $('.js-sw-eyebrow__navitem--authentication').find('.sw-eyebrow__tokenpane'),\r\n $tokens = $tokenPane.find('.sw-eyebrow__token'),\r\n $tokenRewards = $('.js-sw-rewards__token'),\r\n $greeting = $('.js-sw-eyebrow__greeting')\r\n ;\r\n\r\n // allow for multiple token texts, but only display the correct one for the token count\r\n $tokens.each(function (index) {\r\n var $this = $(this);\r\n $this.text($this.text().replace(\"{tokens}\", userData.tokens));\r\n\r\n if (userData.tokens > 1) {\r\n if ($this.hasClass('token-multiple')) {\r\n $this.show();\r\n }\r\n } else {\r\n if ($this.hasClass('token-single')) {\r\n $this.show();\r\n }\r\n }\r\n });\r\n\r\n $tokenRewards.text('$' + userData.rewards);\r\n\r\n var currentGreetingText = $greeting.text();\r\n $greeting.text(currentGreetingText.replace(\"{name}\", userData.displayName));\r\n};","import $ from 'jquery';\r\nimport dialogManager from \"./dialogManager.js\";\r\n\r\nexport default function mainNav(el) {\r\n $(el).each(function() {\r\n const $self = $(this),\r\n $link = $self.find('.sw-mainnav__link'),\r\n $dropdown = $self.find('.sw-mainnav__dropdown'),\r\n $closeButton = $self.find('.sw-mainnav__dropdown-close');\r\n\r\n if($self.hasClass('has-dropdown')) {\r\n $link.on('click', function(e) {\r\n e.preventDefault();\r\n toggleDropdown($self);\r\n return false;\r\n });\r\n\r\n $closeButton.on('click', function(e) {\r\n closeDropdown($self);\r\n });\r\n }\r\n });\r\n\r\n function toggleDropdown(element) {\r\n \r\n if(element.hasClass('dropdown-open')) { \r\n closeDropdown(element);\r\n } else {\r\n trackMenuClick(element);\r\n openDropdown(element);\r\n }\r\n\r\n if(element.siblings().hasClass('dropdown-open')) {\r\n closeDropdownSiblings(element);\r\n }\r\n }\r\n \r\n function openDropdown(element) {\r\n\r\n element.addClass('dropdown-open');\r\n element.find('[aria-expanded=false]').attr('aria-expanded', 'true');\r\n element.find('[aria-hidden=true]').attr('aria-hidden', 'false');\r\n\r\n $('body').addClass('dropdown-active');\r\n\t\t\r\n\t\tif($('body').hasClass('user-logged-in')) {\r\n\t\t\telement.find('.js-sw-section--loggedinonly').show();\r\n\t\t\telement.find('.js-sw-section--loggedoutonly').hide();\r\n\t\t}else{\r\n\t\t\telement.find('.js-sw-section--loggedinonly').hide();\r\n\t\t\telement.find('.js-sw-section--loggedoutonly').show();\r\n }\r\n \r\n\r\n \r\n var items = $(\"ul.sw-mainnav__list li.sw-mainnav__item\");\r\n $(items).each(function(i,elem){\r\n if($(elem).hasClass(\"dropdown-open\")===false){\r\n $(elem).addClass(\"sibling-open\");\r\n }\r\n\r\n });\r\n\r\n\r\n \r\n //set focus on back button for mobile\r\n if($(document).find('.dropdown-open .backBtnMobile:visible').length>0)\r\n { \r\n var dialog = new dialogManager();\r\n\r\n var modal=$('nav.sw-mainnav.js-sw-mainnav');\r\n var backBtn = $('li.has-dropdown.js-sw-mainnav__item.dropdown-open button.sw-mainnav__dropdown-close');\r\n var findAStore = $('a.sw-shopnav__trigger');\r\n dialog.createDialog(modal[0]);\r\n dialog.addSingleItem($(\"button.sw-hamburger\")[0]);\r\n dialog.addSingleItem($('a.sw-logo')[0]);\r\n\r\n var login = $('button.js-sw-eyebrow__navlink--userloginsignup')[0];\r\n var loggedIn = $('button.js-sw-eyebrow__navlink--user')[0];\r\n \r\n if(login != null){ dialog.addSingleItem(login);} \r\n if(loggedIn != null){ dialog.addSingleItem(loggedIn);} \r\n \r\n window.setTimeout(function(){dialog.setInitialFocus(backBtn[0]);},300); \r\n\r\n // $(document).find('.dropdown-open button.sw-mainnav__dropdown-close:visible').each(function(i,elem){ \r\n // window.setTimeout(function(){$(elem).focus();},300);\r\n // });\r\n \r\n }\r\n \r\n }\r\n\r\n function closeDropdown(element) {\r\n\r\n var items = $(\"ul.sw-mainnav__list li.sw-mainnav__item\");\r\n $(items).each(function(i,elem){\r\n $(elem).removeClass(\"sibling-open\");\r\n });\r\n\r\n\r\n element.find('[aria-expanded=true]').focus();\r\n\r\n element.removeClass('dropdown-open');\r\n element.find('[aria-expanded=true]').attr('aria-expanded', 'false');\r\n element.find('[aria-hidden=false]').attr('aria-hidden', 'true');\r\n\r\n $('body').removeClass('dropdown-active');\r\n \r\n\t\telement.find('.js-sw-section--loggedinonly').hide();\r\n\t\telement.find('.js-sw-section--loggedoutonly').hide();\r\n }\r\n\r\n function closeDropdownSiblings(element) {\r\n element.siblings().removeClass('dropdown-open');\r\n element.siblings().find('[aria-expanded=true]').attr('aria-expanded', 'false');\r\n element.siblings().find('[aria-hidden=false]').attr('aria-hidden', 'true');\r\n }\r\n\r\n function accessibility(button) {\r\n button.on('keydown', function(e) {\r\n if(e.which === 32) {\r\n //space bar\r\n e.preventDefault();\r\n toggleDropdown(button.parent());\r\n button.next().focus();\r\n }\r\n\r\n });\r\n }\r\n\r\n function trackMenuClick(element) {\r\n\r\n let $link = element.find('.sw-mainnav__link[data-adobe-link-name]');\r\n \r\n if ($link.length === 1) {\r\n let adobeLinkName = $link.attr(\"data-adobe-link-name\");\r\n if (typeof(_satellite) !== \"undefined\") {\r\n _satellite.track('Nav Click Event ' + adobeLinkName);\r\n }\r\n }\r\n }\r\n\r\n // global close all if clicked outside the super nav\r\n $(document).on('click', function(e) {\r\n if($(el) !== e.target && !$(el).has(e.target).length){\r\n if($(el).hasClass('dropdown-open')) {\r\n closeDropdown($(el));\r\n }\r\n }\r\n });\r\n\r\n //escape\r\n $(document).on('keydown', function(e) {\r\n if($(el).hasClass('dropdown-open') && e.keyCode === 27) {\r\n closeDropdown($(el));\r\n }\r\n });\r\n}\r\n","import $ from 'jquery';\r\nimport dialogManager from \"./dialogManager.js\";\r\n\r\n\r\nexport default function mobileNav(el) {\r\n let $headerPane = $('.sw-headerpane');\r\n\r\n $(document).keydown(function (e) {\r\n if (e.keyCode === 27) {\r\n hideMobileNav();\r\n $(el).attr(\"aria-expanded\", \"false\");\r\n }\r\n });\r\n\r\n //window.addEventListener('keydown', function (e) {\r\n // if (window.origin != 'https://' + defaultOrigin) {\r\n // return;\r\n // }\r\n // else {\r\n // //escape\r\n // if (e.keyCode === 27) {\r\n // hideMobileNav();\r\n // $(el).attr(\"aria-expanded\", \"false\");\r\n // }\r\n // }\r\n //});\r\n\r\n $(el).on('click', function (e) {\r\n e.preventDefault();\r\n toggleMobileNav();\r\n });\r\n\r\n function mobileNavScreenTop() {\r\n let topPos = $headerPane.outerHeight();\r\n if (topPos > 0) {\r\n $('.js-sw-mainnav').css('top', topPos);\r\n }\r\n }\r\n var dialog;\r\n function toggleMobileNav() {\r\n if ($('body').hasClass('mobile-nav-open')) {\r\n hideMobileNav();\r\n if (typeof dialog !== 'undefined') dialog.removeModal();\r\n $(el).attr(\"aria-expanded\", \"false\");\r\n\r\n } else {\r\n showMobileNav();\r\n $(el).attr(\"aria-expanded\", \"true\");\r\n\r\n dialog = new dialogManager();\r\n var modal = $('nav.sw-mainnav.js-sw-mainnav');\r\n\r\n dialog.createDialog(modal[0]);\r\n dialog.addSingleItem($(\"button.sw-hamburger\")[0]);\r\n dialog.addSingleItem($('a.sw-logo')[0]);\r\n\r\n var login = $('button.js-sw-eyebrow__navlink--userloginsignup')[0];\r\n var loggedIn = $('button.js-sw-eyebrow__navlink--user')[0];\r\n\r\n if (login != null) { dialog.addSingleItem(login); }\r\n if (loggedIn != null) { dialog.addSingleItem(loggedIn); }\r\n\r\n stopAllSliders();\r\n }\r\n }\r\n\r\n function showMobileNav() {\r\n $('body').addClass('mobile-nav-open');\r\n mobileNavScreenTop();\r\n }\r\n\r\n function hideMobileNav() {\r\n $('body').removeClass('mobile-nav-open');\r\n }\r\n\r\n window.onresize = function () {\r\n if (window.offsetWidth < '1024px') {\r\n mobileNavScreenTop();\r\n } else {\r\n $('.js-sw-mainnav').attr('style', '');\r\n if ($('body').hasClass('mobile-nav-open')) {\r\n hideMobileNav();\r\n }\r\n }\r\n }\r\n};","import $ from 'jquery';\r\n\r\nexport default function moveItems() {\r\n var mediaQueryList = window.matchMedia(\"(min-width: 1024px)\");\r\n function handleScrenResize(mql) {\r\n let $nav = $('.js-sw-mainnav');\r\n let $hamburger = $('.js-sw-hamburger');\r\n let $header = $('.sw-header');\r\n\r\n if (mql.matches) {\r\n // Desktop\r\n if($('.js-sw-eyebrow__language-contrast').length) {\r\n $('.js-sw-eyebrow__language-contrast').prependTo('.js-sw-eyebrow');\r\n }\r\n\r\n if($('.js-sw-eyebrow__navitem--authentication').length) {\r\n $('.js-sw-eyebrow__navitem--authentication').appendTo('.sw-eyebrow__nav');\r\n }\r\n\r\n if ($nav.length) {\r\n $nav.appendTo($header);\r\n }\r\n \r\n } else {\r\n // Tablet / Mobile\r\n if($('.js-sw-eyebrow__language-contrast').length) {\r\n $('.js-sw-eyebrow__language-contrast').prependTo('.js-sw-mainnav');\r\n }\r\n\r\n if($('.js-sw-eyebrow__navitem--authentication').length) {\r\n $('.js-sw-eyebrow__navitem--authentication').appendTo('.js-sw-userpane-mobile');\r\n }\r\n\r\n if ($nav.length) {\r\n $nav.insertAfter($hamburger);\r\n }\r\n }\r\n }\r\n mediaQueryList.addListener(handleScrenResize);\r\n handleScrenResize(mediaQueryList);\r\n};","import $ from \"jquery\";\r\n\r\nexport default function nutritionGrid() {\r\n let _nutGridDataEndpoint = \"/SubwayV2/Data/RenderNutritionGrid.aspx\";\r\n let $nutGrid = $('#sw-main .js-nutrition-grid--v2');\r\n let _cultureCode = $nutGrid.find('.js-sw-tabs').data('culture-code');\r\n let $tabs = $nutGrid.find('.js-sw-nutrition-grid-tab');\r\n\r\n //initial load - load all 3 tabs with table data\r\n $tabs.each(function(index, value) {\r\n var event = new jQuery.Event($(value));\r\n event.isInitialLoad = true;\r\n event.currentTarget = value;\r\n refreshNutGrid(event);\r\n });\r\n\r\n function refreshNutGrid(event) {\r\n let wasInitialLoad = false;\r\n if(event.isInitialLoad !== \"undefined\") {\r\n wasInitialLoad = event.isInitialLoad;\r\n }\r\n\r\n //if current target is a nut. grid tab, use it as selectedTab. Else, attempt to drill up to find the selected tab\r\n var $selectedTab = $(event.currentTarget);\r\n if(!$selectedTab.hasClass('js-sw-nutrition-grid-tab')) {\r\n $selectedTab = $tabs.filter('[aria-selected=\"true\"]');\r\n }\r\n\r\n $('.nutritionClass').animate({ scrollTop: 0 }, 'normal');//probably good to keep this, to scroll to the top of the grid container? necessary??\r\n\r\n let $tabPanel = getSelectedGridContainer($selectedTab);\r\n let selCategory = $tabPanel.find('.js-sw-nutrition-grid__category').val();\r\n let _fullEndpoint = _nutGridDataEndpoint + \"?Page=\" + $selectedTab.data('navigate-page-id') + \"&cultureCode=\" + _cultureCode + \"&selectedCategoryId=\" + selCategory;\r\n\r\n let $amountTypeSelected = $tabPanel.find('input[name^=Amount-]:checked');\r\n if($amountTypeSelected.length) {\r\n _fullEndpoint += \"&amountType=\" + $amountTypeSelected.val();\r\n }\r\n\r\n if(wasInitialLoad) {\r\n _fullEndpoint += \"&initialize\";\r\n }\r\n\r\n $.ajax({\r\n url: _fullEndpoint,\r\n type: 'GET',\r\n contentType: \"application/json\",\r\n dataType: 'html',\r\n cache: false,\r\n })\r\n .done(function (data) {\r\n let $tabPanel = getSelectedGridContainer($selectedTab);\r\n $tabPanel.html(data);\r\n attachHandlers($tabPanel);\r\n })\r\n .fail(function (jqXHR, textStatus, errorThrown) {\r\n console.log(\"JSON Error: \" + textStatus);\r\n let $tabPanel = getSelectedGridContainer($selectedTab);\r\n $tabPanel.html('<div class=\"error\">Error retrieving data</div>');\r\n })\r\n ;\r\n }\r\n\r\n function getSelectedGridContainer($selectedTab) {\r\n return $('#' + $selectedTab.data('navigate-page-id') + '-nutritionDiv');\r\n }\r\n\r\n function attachHandlers($tabPanel) {\r\n //category picker\r\n $tabPanel.find('.js-sw-nutrition-grid__category').on('change', event => refreshNutGrid(event));\r\n //serving size, if enabled\r\n if($tabPanel.find('input[name^=Amount-]').length) {\r\n $tabPanel.find('input[name^=Amount-]').on('change', event => refreshNutGrid(event));\r\n }\r\n // data cell mouseovers\r\n $tabPanel.find('td.info, th.name').hover(function() {\r\n var $this = $(this);\r\n var $closestRow = $this.closest('tr');\r\n //don't do focus and rollover styles for the ingredient heading rows\r\n var isCategoryRow = $closestRow.hasClass('category-row');\r\n\r\n if(!isCategoryRow) {\r\n $closestRow.addClass('infoRowOver');\r\n }\r\n\r\n if($this.hasClass('info')) {\r\n var t = parseInt($(this).index()) + 1;\r\n\r\n if(!isCategoryRow) {\r\n $this.addClass('infoFocus');\r\n }\r\n $('td:nth-child(' + t + '):not(.infoFocus)', $this.closest('table')).addClass('infoRowOver');\r\n //header stuff\r\n var $theHeader = $('#' + $this.attr('headers').split(' ')[0]);\r\n $theHeader.addClass('headOver');\r\n var $headerImage = $theHeader.find('img');\r\n $headerImage.attr('src', $headerImage.attr('src').replace('.png', '-roll.png'))\r\n }\r\n else {\r\n if(!isCategoryRow) {\r\n $closestRow.removeClass('name').addClass('nameFocus');\r\n }\r\n }\r\n },\r\n function() {\r\n var $this = $(this);\r\n var $closestRow = $this.closest('tr');\r\n var isCategoryRow = $closestRow.hasClass('category-row');\r\n\r\n if(!isCategoryRow) {\r\n $closestRow.removeClass('infoRowOver');\r\n }\r\n\r\n if($this.hasClass('info')) {\r\n var t = parseInt($(this).index()) + 1;\r\n\r\n if(!isCategoryRow) {\r\n $this.removeClass('infoFocus');\r\n }\r\n $('td:nth-child(' + t + ')', $this.closest('table')).removeClass('infoRowOver');\r\n //header stuff\r\n var $theHeader = $('#' + $this.attr('headers').split(' ')[0]);\r\n $theHeader.removeClass('headOver');\r\n var $headerImage = $theHeader.find('img');\r\n $headerImage.attr('src', $headerImage.attr('src').replace('-roll.png', '.png'))\r\n ;\r\n }\r\n else {\r\n if(!isCategoryRow) {\r\n $closestRow.removeClass('nameFocus').addClass('name');\r\n }\r\n }\r\n });\r\n }\r\n\r\n}","import $ from \"jquery\";\r\nimport ally from 'ally.js/ally';\r\nexport class OpenModal {\r\n constructor($el) {\r\n $(`<div class=\"sw-modal__overlay\"></div>`).appendTo(\"body\");\r\n this.$el = $el;\r\n\r\n const modalId = \"sw-modal__\" + this.$el.attr('id');\r\n \r\n this.$modal = this.$el.parents(\".js-sw-video__overlay\").find(\".js-sw-modal\");\r\n this.$modal.clone().appendTo(\"body\").attr(\"id\",modalId) //we're cloning it to be towards the bottom to account for z-index issues\r\n this.$modal.remove();\r\n this.$body = $(\"body\");\r\n this.$newModal = $(\"#\" + modalId);\r\n\r\n this.dialog = this.$newModal[0];\r\n this.hiddenHandle;\r\n this.disabledHandle;\r\n \r\n this.$close = this.$newModal.find(\".js-sw-modal__close__btn\");\r\n this.tabs = this.$newModal.find(\"select, input, textarea, button, a\");\r\n this.firstTab = this.tabs.first();\r\n this.bindEvents();\r\n }\r\n bindEvents() {\r\n this.$el.click(e => this.toggleModal(e));\r\n this.$close.click(e => this.toggleModal(e));\r\n }\r\n checkCloseDialog(e) {\r\n if (e.keyCode == 27 && this.$body.hasClass(\"modal-open-sw-v2\")) {\r\n //The video player, and possibly other classes, add events to the close button. We need to make sure that the keypress close also fires these events.\r\n $('.sw-modal-open-sesame').find('.js-sw-modal__close__btn').trigger('click');\r\n }\r\n }\r\n\r\n toggleModal(e) {\r\n if (this.$body.hasClass(\"modal-open-sw-v2\")) {\r\n //close the dialog\r\n // undo hiding elements outside of the dialog\r\n this.hiddenHandle.disengage();\r\n // undo disabling elements outside of the dialog\r\n this.disabledHandle.disengage();\r\n\r\n this.$body.removeClass(\"modal-open-sw-v2\");\r\n this.$el.focus();\r\n\r\n $(e.currentTarget).closest('.sw-modal').removeClass('sw-modal-open-sesame');\r\n document.removeEventListener(\"keydown\", e => this.checkCloseDialog(e));\r\n }\r\n else {\r\n //open the dialog\r\n // Make sure that no element outside of the dialog\r\n // can be interacted with while the dialog is visible.\r\n // This means we don't have to handle Tab and Shift+Tab,\r\n // but can defer that to the browser's internal handling.\r\n this.disabledHandle = ally.maintain.disabled({\r\n filter: this.dialog,\r\n });\r\n\r\n // Make sure that no element outside of the dialog\r\n // is exposed via the Accessibility Tree, to prevent\r\n // screen readers from navigating to content it shouldn't\r\n // be seeing while the dialog is open. See example:\r\n // https://marcysutton.com/slides/mobile-a11y-seattlejs/#/36\r\n this.hiddenHandle = ally.maintain.hidden({\r\n filter: this.dialog,\r\n });\r\n\r\n //get the modal window thinger, and mark it\r\n\r\n\r\n $('#sw-modal__' + e.currentTarget.id).addClass('sw-modal-open-sesame');\r\n this.$el.blur();\r\n this.$body.addClass(\"modal-open-sw-v2\");\r\n\r\n window.setTimeout(() => this.firstTab.focus(), 505); //we add a timer to account for the css animation that delays this element being focusable\r\n document.addEventListener(\"keydown\", e => this.checkCloseDialog(e));\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n","import $ from 'jquery';\r\n\r\nexport default function signup(selector) {\r\n let $signupContainer = selector,\r\n $signupInput = $signupContainer.find('.sw-signup__field'),\r\n $signupLabel = $signupContainer.find('.sw-signup__label'),\r\n $signupButton = $signupContainer.find('.sw-signup__button'),\r\n $signupDisclaimer = $signupContainer.find('.sw-signup__disclaimer'),\r\n $signupError = $signupContainer.find('.sw-signup__error'),\r\n $signupErrorEmail = $signupContainer.find('.sw-signup__error-email'),\r\n $signupErrorPhone = $signupContainer.find('.sw-signup__error-phone'),\r\n $signupMessageHolder = $signupContainer.find('.sw-signup__message'),\r\n messageSuccess = $signupContainer.data('msg-success'),\r\n hasInputBeenFocused = false,\r\n keycodes = {ENTER:13 };\r\n\r\n var emailReg = /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i;\r\n var phoneReg = /^((\\+[1-9]{1,4}[ \\-]*)|(\\([0-9]{2,3}\\)[ \\-]*)|([0-9]{2,4})[ \\-]*)*?[0-9]{3,4}?[ \\-]*[0-9]{3,4}?$/;\r\n\r\n $signupInput.on('focus', function(e){\r\n $(this).attr('placeholder','');\r\n $signupLabel.removeClass('visuallyhidden');\r\n $signupDisclaimer.addClass('is-shown');\r\n hasInputBeenFocused = true;\r\n }).on('focusout', function(){\r\n validateInputField(); \r\n }).on('keydown', function(e) {\r\n if(e.keyCode === keycodes.ENTER){\r\n $signupButton.trigger('click');\r\n }\r\n });\r\n\r\n $signupButton.on('click', function(e) {\r\n $signupInput.attr('placeholder', $signupInput.attr('aria-label'));\r\n $signupLabel.addClass('visuallyhidden');\r\n $signupErrorEmail.removeClass('error-shown');\r\n $signupErrorPhone.removeClass('error-shown');\r\n $signupInput.attr('aria-describedby', \"sw-signup__disclaimer\");\r\n hasInputBeenFocused = false;\r\n \r\n if(validateInputField() === true) {\r\n submitUserInput();\r\n $signupDisclaimer.removeClass('is-shown');\r\n }\r\n });\r\n\t\r\n\tfunction submitUserInput() {\r\n\t\tvar userText = $signupInput.val();\r\n var jsonData = {};\r\n jsonData[\"subscribeValue\"] = userText;\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: $('body').data('signup-end-point'),\r\n data: JSON.stringify(jsonData),\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function(response) {\r\n if(response.success === true) {\r\n $signupContainer.addClass('has-succeeded');\r\n $signupMessageHolder.html(messageSuccess);\r\n } else {\r\n $signupContainer.removeClass('has-succeeded').addClass('has-failed')\r\n $signupMessageHolder.html(response.errorMessage);\r\n }\r\n },\r\n error: function (e) {\r\n console.log('fail: ' + e);\r\n }\r\n });\r\n\t}\r\n\r\n function validateInputField() {\r\n //https://stackoverflow.com/questions/30213220/validate-phone-number-email-address-in-same-input-field\r\n if(emailReg.test($signupInput.val()))\r\n {\r\n $signupError.removeClass('error-shown');\r\n return true;\r\n }\r\n\r\n if(phoneReg.test($signupInput.val()))\r\n {\r\n $signupError.removeClass('error-shown');\r\n return true;\r\n }\r\n\r\n $signupError.addClass('error-shown');\r\n $signupInput.attr('aria-describedby', \"sw-signup__error\");\r\n return false;\r\n }\r\n\r\n}","import getStickyHeaderHeight from \"./getStickyHeaderHeight.js\";\r\nimport $ from \"jquery\";\r\n\r\nexport default function stickyHeader(stickyElement) {\r\n let stickyEl = document.querySelectorAll(stickyElement)[0],\r\n scrollTop = window.pageYOffset || document.documentElement.scrollTop,\r\n headerHeight = 0;\r\n\r\n if(typeof stickyEl === \"undefined\") {\r\n return;\r\n } \r\n\r\n let stickyTop = stickyEl.offsetTop + stickyEl.offsetHeight;\r\n\r\n headerHeight = getStickyHeaderHeight();\r\n if (!document.body.classList.contains('mobile-nav-open') && !document.body.classList.contains('blank-layout')) {\r\n document.body.style.marginTop = headerHeight + 'px';\r\n //document.body.style.marginTop = '81px';\r\n console.log('document.body.style.marginTop=' + headerHeight);\r\n stickyEl.classList.add(\"sw-headerpane--sticky\");\r\n }\r\n\r\n window.addEventListener('scroll', function() {\r\n if (window.pageYOffset >= headerHeight && !document.body.classList.contains('mobile-nav-open') && document.body.classList.contains('is-homepage')) { \r\n // if a mobile user starts to scroll remove hover menu \r\n document.body.classList.remove('is-homepage');\r\n }\r\n });\r\n\r\n // document.Ready is too early, need to wait for sitecore to inject all its stuff\r\n window.onload= function () {\r\n // Shift the header down past the height of the Experience Editor Panel \r\n if (document.body.classList.contains('is-page-editor') ||\r\n document.body.classList.contains('is-page-preview')) {\r\n\r\n var target = document.getElementById('scCrossPiece');\r\n if(target != null){\r\n // first time initialize\r\n $('.sw-headerpane').css('top', target.style.height);\r\n \r\n // constant observer for open close of the experience editor\r\n var observer = new MutationObserver(function(mutations) {\r\n mutations.forEach(function(mutationRecord) {\r\n $('.sw-headerpane').css('top', target.style.height);\r\n });\r\n }); \r\n observer.observe(target, { attributes : true, attributeFilter : ['style'] });\r\n }\r\n else{\r\n waitForScCrossPiece();\r\n }\r\n } \r\n };\r\n \r\n\r\n function waitForScCrossPiece(){\r\n var target = document.getElementById('scCrossPiece');\r\n if(target != null){\r\n // first time initialize\r\n $('.sw-headerpane').css('top', target.style.height);\r\n \r\n // constant observer for open close of the experience editor\r\n var observer = new MutationObserver(function(mutations) {\r\n mutations.forEach(function(mutationRecord) {\r\n $('.sw-headerpane').css('top', target.style.height);\r\n });\r\n }); \r\n observer.observe(target, { attributes : true, attributeFilter : ['style'] });\r\n }\r\n else{\r\n window.setTimeout(function(){\r\n waitForScCrossPiece();}, 500);\r\n }\r\n }\r\n // function handleStickyHeader() {\r\n // if (window.pageYOffset >= headerHeight && !document.body.classList.contains('mobile-nav-open')) { \r\n\r\n // document.body.style.marginTop = headerHeight + 'px';\r\n // stickyEl.classList.add(\"sw-headerpane--sticky\");\r\n // document.body.classList.remove('is-homepage');\r\n // } else {\r\n // document.body.removeAttribute('style');\r\n // stickyEl.classList.remove(\"sw-headerpane--sticky\");\r\n // }\r\n // }\r\n\r\n}","import $ from \"jquery\";\r\nexport default function stopPageJumpForHashUrl() {\r\n var scrollTopPos;\r\n window.onload = function() {\r\n scrollTopPos = window.scrollY;\r\n }\r\n\r\n window.onscroll = function() {\r\n scrollTopPos = window.scrollY;\r\n }\r\n $('[role=tab]').on('click', function(e) {\r\n window.location.hash = $(this).attr('href');\r\n window.scrollTo({left: 0, top: scrollTopPos, behavior: 'smooth'});\r\n return false;\r\n });\r\n}\r\n","/*\r\n* This content is licensed according to the W3C Software License at\r\n* https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\r\n*/\r\nimport getStickyHeaderHeight from \"./getStickyHeaderHeight.js\";\r\n\r\nexport default function tabs() {\r\n var tablist = document.querySelectorAll('[role=\"tablist\"]')[0];\r\n var tabs;\r\n var panels;\r\n var delay = determineDelay();\r\n var windowWidth = window.innerWidth;\r\n\r\n generateArrays();\r\n\r\n function generateArrays() {\r\n tabs = document.querySelectorAll('[role=\"tab\"]');\r\n panels = document.querySelectorAll('[role=\"tabpanel\"]');\r\n\r\n // velir addition\r\n // if more than 3 tabs, make smaller\r\n if (tabs.length >= 3) {\r\n [].forEach.call(tabs, function(tab) {\r\n tab.classList.add(\"sw-tabs__item--small\");\r\n });\r\n }\r\n }\r\n\r\n // For easy reference\r\n var keys = {\r\n end: 35,\r\n home: 36,\r\n left: 37,\r\n up: 38,\r\n right: 39,\r\n down: 40,\r\n delete: 46\r\n };\r\n\r\n // Add or substract depenign on key pressed\r\n var direction = {\r\n 37: -1,\r\n 38: -1,\r\n 39: 1,\r\n 40: 1\r\n };\r\n\r\n // Bind listeners\r\n for (let i = 0; i < tabs.length; ++i) {\r\n addListeners(i);\r\n }\r\n\r\n activateTabBasedOnUrlHash();\r\n\r\n function activateTabBasedOnUrlHash() {\r\n var hash = location.hash;\r\n if (!hash) {\r\n var activeTabCollection = document.querySelectorAll(\r\n \"[aria-selected=true][role=tab]\"\r\n );\r\n if (activeTabCollection.length > 0) {\r\n var tabToActiviate = activeTabCollection[0];\r\n activateTab(tabToActiviate, false, true);\r\n }\r\n\r\n return;\r\n }\r\n var lnks = document.querySelectorAll('a[href=\"' + hash + '\"]');\r\n if (!lnks || lnks.length === 0) {\r\n return;\r\n }\r\n var activeTab = lnks[0];\r\n if (activeTab.classList.contains(\"sw-tabs__item\")) {\r\n activeTab.click();\r\n }\r\n }\r\n\r\n function addListeners(index) {\r\n tabs[index].addEventListener(\"click\", clickEventListener);\r\n tabs[index].addEventListener(\"keydown\", keydownEventListener);\r\n tabs[index].addEventListener(\"keyup\", keyupEventListener);\r\n\r\n // Build an array with all tabs (<button>s) in it\r\n tabs[index].index = index;\r\n }\r\n\r\n // When a tab is clicked, activateTab is fired to activate it\r\n function clickEventListener(event) {\r\n //velir addition have to check for span class with addition of svg\r\n var tab = event.target.classList.contains(\"sw-tabs__item\")\r\n ? event.target\r\n : event.target.closest(\".sw-tabs__item\");\r\n\r\n activateTab(tab, false);\r\n }\r\n\r\n // Handle keydown on tabs\r\n function keydownEventListener(event) {\r\n var key = event.keyCode;\r\n\r\n switch (key) {\r\n //taking out for SR-512\r\n // case keys.end:\r\n // event.preventDefault();\r\n // // Activate last tab\r\n // activateTab(tabs[tabs.length - 1]);\r\n // break;\r\n // case keys.home:\r\n // event.preventDefault();\r\n // // Activate first tab\r\n // activateTab(tabs[0]);\r\n // break;\r\n\r\n // Up and down are in keydown\r\n // because we need to prevent page scroll >:)\r\n case keys.up:\r\n case keys.down:\r\n determineOrientation(event);\r\n break;\r\n }\r\n }\r\n\r\n // Handle keyup on tabs\r\n function keyupEventListener(event) {\r\n var key = event.keyCode;\r\n\r\n switch (key) {\r\n case keys.left:\r\n case keys.right:\r\n determineOrientation(event);\r\n break;\r\n case keys.delete:\r\n determineDeletable(event);\r\n break;\r\n }\r\n }\r\n\r\n // When a tablist’s aria-orientation is set to vertical,\r\n // only up and down arrow should function.\r\n // In all other cases only left and right arrow function.\r\n function determineOrientation(event) {\r\n var key = event.keyCode;\r\n var vertical = tablist.getAttribute(\"aria-orientation\") == \"vertical\";\r\n var proceed = false;\r\n\r\n if (vertical) {\r\n if (key === keys.up || key === keys.down) {\r\n event.preventDefault();\r\n proceed = true;\r\n }\r\n } else {\r\n if (key === keys.left || key === keys.right) {\r\n proceed = true;\r\n }\r\n }\r\n\r\n if (proceed) {\r\n switchTabOnArrowPress(event);\r\n }\r\n }\r\n\r\n // Either focus the next, previous, first, or last tab\r\n // depening on key pressed\r\n function switchTabOnArrowPress(event) {\r\n var pressed = event.keyCode;\r\n\r\n for (let x = 0; x < tabs.length; x++) {\r\n tabs[x].addEventListener(\"focus\", focusEventHandler);\r\n }\r\n\r\n if (direction[pressed]) {\r\n var target = event.target;\r\n if (target.index !== undefined) {\r\n if (tabs[target.index + direction[pressed]]) {\r\n tabs[target.index + direction[pressed]].focus();\r\n } else if (pressed === keys.left || pressed === keys.up) {\r\n focusLastTab();\r\n } else if (pressed === keys.right || pressed == keys.down) {\r\n focusFirstTab();\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Activates any given tab panel\r\n function activateTab(tab, setFocus, preventScroll) {\r\n if (tab.classList.contains(\"sw-tabs__item--nojs\")) {\r\n document.location = tab.getAttribute(\"href\");\r\n return;\r\n }\r\n\r\n setFocus = setFocus || true;\r\n preventScroll = preventScroll || false;\r\n // Deactivate all other tabs\r\n deactivateTabs();\r\n\r\n // Remove tabindex attribute\r\n tab.removeAttribute(\"tabindex\");\r\n\r\n // Set the tab as selected\r\n tab.setAttribute(\"aria-selected\", \"true\");\r\n\r\n //velir addition -- set tablist scroll position so that current tab is centered on mobile\r\n handleTabScroll(tab);\r\n // Get the value of aria-controls (which is an ID)\r\n var controls = tab.getAttribute(\"aria-controls\");\r\n\r\n if (controls) {\r\n // Remove hidden attribute from tab panel to make it visible\r\n var tabContent = document.getElementById(controls);\r\n if (tabContent != null) {\r\n tabContent.removeAttribute(\"hidden\");\r\n }\r\n }\r\n\r\n //Velir custom\r\n tabChangeTabAwareContent(tab);\r\n\r\n // Set focus when required\r\n if (setFocus) {\r\n tab.focus();\r\n }\r\n\r\n if (!preventScroll) {\r\n // scroll page to the active/target accordion\r\n var targetRect = tab.getBoundingClientRect(),\r\n scrollTop = window.pageYOffset || document.documentElement.scrollTop;\r\n\r\n window.scrollTo({\r\n left: 0,\r\n top: targetRect.top + scrollTop - getStickyHeaderHeight(),\r\n behavior: \"smooth\"\r\n });\r\n }\r\n }\r\n\r\n // Deactivate all tabs and tab panels\r\n function deactivateTabs() {\r\n for (let t = 0; t < tabs.length; t++) {\r\n tabs[t].setAttribute(\"tabindex\", \"-1\");\r\n tabs[t].setAttribute(\"aria-selected\", \"false\");\r\n tabs[t].removeEventListener(\"focus\", focusEventHandler);\r\n }\r\n\r\n for (let p = 0; p < panels.length; p++) {\r\n panels[p].setAttribute(\"hidden\", \"hidden\");\r\n }\r\n }\r\n\r\n // Make a guess\r\n function focusFirstTab() {\r\n tabs[0].focus();\r\n }\r\n\r\n // Make a guess\r\n function focusLastTab() {\r\n tabs[tabs.length - 1].focus();\r\n }\r\n\r\n // Detect if a tab is deletable\r\n function determineDeletable(event) {\r\n target = event.target;\r\n\r\n if (target.getAttribute(\"data-deletable\") !== null) {\r\n // Delete target tab\r\n deleteTab(event, target);\r\n\r\n // Update arrays related to tabs widget\r\n generateArrays();\r\n\r\n // Activate the closest tab to the one that was just deleted\r\n if (target.index - 1 < 0) {\r\n activateTab(tabs[0]);\r\n } else {\r\n activateTab(tabs[target.index - 1]);\r\n }\r\n }\r\n }\r\n\r\n // Deletes a tab and its panel\r\n function deleteTab(event) {\r\n var target = event.target;\r\n var panel = document.getElementById(target.getAttribute(\"aria-controls\"));\r\n\r\n target.parentElement.removeChild(target);\r\n panel.parentElement.removeChild(panel);\r\n }\r\n\r\n // Determine whether there should be a delay\r\n // when user navigates with the arrow keys\r\n function determineDelay() {\r\n var hasDelay = tablist.getAttribute(\"data-delay\");\r\n var delay = 0;\r\n\r\n if (hasDelay) {\r\n var delayValue = tablist.getAttribute(\"data-delay\");\r\n if (delayValue) {\r\n delay = delayValue;\r\n } else {\r\n // If no value is specified, default to 300ms\r\n delay = 300;\r\n }\r\n }\r\n\r\n return delay;\r\n }\r\n\r\n //\r\n function focusEventHandler(event) {\r\n var target = event.target;\r\n\r\n setTimeout(checkTabFocus, delay, target);\r\n }\r\n\r\n // Only activate tab on focus if it still has focus after the delay\r\n function checkTabFocus(target) {\r\n let focused = document.activeElement;\r\n\r\n if (target === focused) {\r\n activateTab(target, false);\r\n }\r\n }\r\n\r\n //Velir addition -- tab aware content\r\n function tabChangeTabAwareContent(tab) {\r\n try {\r\n if (!tab) {\r\n return;\r\n }\r\n\r\n var tabawareContent = document.querySelectorAll('.js-sw-tabs-tabaware-container');\r\n var currentTabAware = document.querySelectorAll('.js-' + tab.id + '_tabaware');\r\n\r\n if (tabawareContent != null) {\r\n for (let x = 0; x < tabawareContent.length; x++) {\r\n tabawareContent[x].classList.add('hidden');\r\n }\r\n }\r\n\r\n if (currentTabAware != null) {\r\n for (let x = 0; x < tabawareContent.length; x++) {\r\n if(typeof currentTabAware[x] !== \"undefined\") {\r\n currentTabAware[x].classList.remove('hidden');\r\n }\r\n }\r\n return; \r\n }\r\n } catch (e) {\r\n console.log('tabChangeTabAwareContent: ' + e)\r\n }\r\n }\r\n\r\n //Velir addition -- scroll horizontally on window resize so it matches mobile\r\n // window.addEventListener(\"resize\", handleTabScroll(document.querySelector('.sw-tabs__item, [aria-selected=\"true\"]')), false);\r\n function handleTabScroll(tab) {\r\n if (windowWidth < 1024) {\r\n // breakpoint based on CSS medium-max brackpoint.\r\n tablist.scrollLeft = tab.offsetLeft;\r\n }\r\n }\r\n}\r\n//Polyfill for closest in IE11 https://developer.mozilla.org/en-US/docs/Web/API/Element/closest\r\nif (!Element.prototype.matches)\r\n Element.prototype.matches =\r\n Element.prototype.msMatchesSelector ||\r\n Element.prototype.webkitMatchesSelector;\r\n\r\nif (!Element.prototype.closest) {\r\n Element.prototype.closest = function(s) {\r\n var el = this;\r\n if (!document.documentElement.contains(el)) return null;\r\n do {\r\n if (el.matches(s)) return el;\r\n el = el.parentElement || el.parentNode;\r\n } while (el !== null && el.nodeType === 1);\r\n return null;\r\n };\r\n}\r\n/* \r\nThis work is being provided by the copyright holders under the following license.\r\n\r\nLicense\r\nBy obtaining and/or copying this work, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions.\r\n\r\nPermission to copy, modify, and distribute this work, with or without modification, for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the work or portions thereof, including modifications:\r\n\r\nThe full text of this NOTICE in a location viewable to users of the redistributed or derivative work.\r\nAny pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C Software and Document Short Notice should be included.\r\nNotice of any changes or modifications, through a copyright statement on the new code or document such as \"This software or document includes material copied from or derived from Example of Tabs with Automatic Activation | WAI-ARIA Authoring Practices 1.1 https://www.w3.org/TR/2017/NOTE-wai-aria-practices-1.1-20171214/examples/tabs/tabs-1/tabs.html. Copyright © 2018 W3C® (MIT, ERCIM, Keio, Beihang).\"\r\nDisclaimers\r\nTHIS WORK IS PROVIDED \"AS IS,\" AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENT WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.\r\n\r\nCOPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR DOCUMENT.\r\n\r\nThe name and trademarks of copyright holders may NOT be used in advertising or publicity pertaining to the work without specific, written prior permission. Title to copyright in this work will at all times remain with copyright holders.\r\n*/\r\n","import $ from 'jquery';\r\nimport Cookies from 'js-cookie';\r\n\r\nexport default function toggleContrast(toggleButton) {\r\n if(Cookies.get('high-contrast') === 'on') {\r\n if(!$('body').hasClass('contrast-on')) {\r\n $('body').addClass('contrast-on');\r\n $(toggleButton).attr(\"aria-pressed\", \"true\");\r\n }\r\n }\r\n\r\n $(toggleButton).on('click', function(e) {\r\n e.preventDefault();\r\n if($('body').hasClass('contrast-on')) {\r\n $('body').removeClass('contrast-on');\r\n Cookies.remove('high-contrast');\r\n $(toggleButton).attr(\"aria-pressed\", \"false\");\r\n } else {\r\n if (typeof(_satellite) !== \"undefined\") {\r\n _satellite.track('Nav Click Event High Contrast');\r\n }\r\n $('body').addClass('contrast-on');\r\n Cookies.set('high-contrast', 'on');\r\n $(toggleButton).attr(\"aria-pressed\", \"true\");\r\n }\r\n });\r\n}","import $ from \"jquery\";\r\nimport \"core-js/fn/object\";\r\nimport Youtube from \"youtube-player\";\r\nexport class VideoPlayer {\r\n constructor($el) {\r\n this.$el = $el;\r\n //this is the play button for the \"inline\"/ overlay video player. It is not used for the modal player.\r\n // only grab the button for this player. There may be other players on the page, and we do not want this button to open them!\r\n this.$playButton = this.$el.siblings('.sw-video__content').find(\".js-sw-video__play__button\");\r\n this.player = {};\r\n this.videoMountPoint = $el.attr(\"data-videoid\");\r\n this.$inline = this.$el.parents(\".js-sw-video--inline\")\r\n ? this.$el.parents(\".js-sw-video--inline\")\r\n : null;\r\n //this is super hacky, but since we had to clone the modal, we can no longer rely on dom structure. We now check and see if the modal exists and check to make sure the current video isn't an inline video so as to not add any additional css.\r\n this.$modal = this.$inline.length <= 0 && $(\".js-sw-video--modal\").length > 0\r\n ? $(\".js-sw-video--modal\")\r\n : null;\r\n this.initialize();\r\n this.bindEvents();\r\n }\r\n bindEvents() {\r\n this.$playButton.click(e => this.playVideo(e));\r\n //modal close should stop the video from playing\r\n if (this.$modal && this.$modal.length) {\r\n $(\"#sw-modal\") \r\n .find(\".js-sw-modal__close__btn\")\r\n .click(e => this.stopVideo(e));\r\n } \r\n //inline/overlay video close should also stop the video from playing\r\n if (this.$inline && this.$inline.length) {\r\n this.$inline\r\n .find(\".js-sw-video__close__btn\")\r\n .click(e => this.stopVideo(e));\r\n }\r\n }\r\n initialize() {\r\n this.player = Youtube(this.videoMountPoint, {\r\n videoId: this.videoMountPoint,\r\n playerVars: {\r\n rel: 0\r\n }\r\n });\r\n this.player.on(\"stateChange\", event => this.handleYoutubeState(event));\r\n }\r\n //play and stop CSS class changes, for inline/overlay player only\r\n playCSS() {\r\n this.$inline.find(\".sw-video__overlay\").css(\"visibility\", \"hidden\");\r\n this.$inline.find(\".sw-video__photo\").css(\"visibility\", \"hidden\");\r\n this.$inline.css(\"z-index\", \"5\");\r\n this.$el.css(\"visibility\", \"visible\");\r\n }\r\n stopCSS() {\r\n this.$inline.find(\".sw-video__overlay\").css(\"visibility\", \"visible\");\r\n this.$inline.find(\".sw-video__photo\").css(\"visibility\", \"visible\");\r\n this.$el.css(\"visibility\", \"hidden\");\r\n this.$inline.css(\"z-index\", \"1\");\r\n }\r\n handleYoutubeState(event) {\r\n /*\r\n State codes are:\r\n -1 (unstarted)\r\n 0 (ended)\r\n 1 (playing)\r\n 2 (paused)\r\n 3 (buffering)\r\n 5 (video cued).\r\n */\r\n if (event.data === 0) {\r\n if (this.$inline.length) {\r\n this.stopCSS();\r\n }\r\n }\r\n }\r\n\r\n playVideo() {\r\n this.player.playVideo();\r\n if (this.$inline.length) {\r\n window.setTimeout(() => this.playCSS(), 395);\r\n }\r\n return false;\r\n }\r\n stopVideo() {\r\n this.player.stopVideo();\r\n if (this.$inline.length) {\r\n this.stopCSS()\r\n }\r\n return false;\r\n }\r\n}\r\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIuLi8uLi9XZWJzaXRlcy9XZWJzaXRlX1N1YndheS9TdWJ3YXlWMi9jbGllbnQvanMvY3VzdG9tLXZlbmRvci9ib290c3RyYXAtY2Fyb3VzZWwvY2Fyb3VzZWwuanMiLCIuLi8uLi9XZWJzaXRlcy9XZWJzaXRlX1N1YndheS9TdWJ3YXlWMi9jbGllbnQvanMvY3VzdG9tLXZlbmRvci9ib290c3RyYXAtY2Fyb3VzZWwvdXRpbC5qcyIsIi4uLy4uL1dlYnNpdGVzL1dlYnNpdGVfU3Vid2F5L1N1YndheVYyL2NsaWVudC9qcy9jdXN0b20tdmVuZG9yL2pxdWVyeS10b3VjaHN3aXBlLmpzIiwiLi4vLi4vV2Vic2l0ZXMvV2Vic2l0ZV9TdWJ3YXkvU3Vid2F5VjIvY2xpZW50L2pzL2N1c3RvbS12ZW5kb3Ivc2xpY2stY2Fyb3VzZWwvc2xpY2svc2xpY2suanMiLCIuLi8uLi9XZWJzaXRlcy9XZWJzaXRlX1N1YndheS9TdWJ3YXlWMi9jbGllbnQvanMvaGVscGVycy9icmVha3BvaW50cy5qcyIsIi4uLy4uL1dlYnNpdGVzL1dlYnNpdGVfU3Vid2F5L1N1YndheVYyL2NsaWVudC9qcy9oZWxwZXJzL2RldGVybWluZU1vYmlsZU9TLmpzIiwiLi4vLi4vV2Vic2l0ZXMvV2Vic2l0ZV9TdWJ3YXkvU3Vid2F5VjIvY2xpZW50L2pzL2hlbHBlcnMvZm9yRWFjaC5qcyIsIi4uLy4uL1dlYnNpdGVzL1dlYnNpdGVfU3Vid2F5L1N1YndheVYyL2NsaWVudC9qcy9pbmRleC5qcyIsIi4uLy4uL1dlYnNpdGVzL1dlYnNpdGVfU3Vid2F5L1N1YndheVYyL2NsaWVudC9qcy9tb2R1bGVzL0ltYWdlU2xpZGVyLmpzIiwiLi4vLi4vV2Vic2l0ZXMvV2Vic2l0ZV9TdWJ3YXkvU3Vid2F5VjIvY2xpZW50L2pzL21vZHVsZXMvYWNjb3JkaW9uLmpzIiwiLi4vLi4vV2Vic2l0ZXMvV2Vic2l0ZV9TdWJ3YXkvU3Vid2F5VjIvY2xpZW50L2pzL21vZHVsZXMvYWN0aXZlTmF2SXRlbS5qcyIsIi4uLy4uL1dlYnNpdGVzL1dlYnNpdGVfU3Vid2F5L1N1YndheVYyL2NsaWVudC9qcy9tb2R1bGVzL2FsZXJ0LmpzIiwiLi4vLi4vV2Vic2l0ZXMvV2Vic2l0ZV9TdWJ3YXkvU3Vid2F5VjIvY2xpZW50L2pzL21vZHVsZXMvYW5jaG9yZWREaXNjbGFpbWVyLmpzIiwiLi4vLi4vV2Vic2l0ZXMvV2Vic2l0ZV9TdWJ3YXkvU3Vid2F5VjIvY2xpZW50L2pzL21vZHVsZXMvYmFja1RvVG9wQnV0dG9uLmpzIiwiLi4vLi4vV2Vic2l0ZXMvV2Vic2l0ZV9TdWJ3YXkvU3Vid2F5VjIvY2xpZW50L2pzL21vZHVsZXMvYmdWaWRlby5qcyIsIi4uLy4uL1dlYnNpdGVzL1dlYnNpdGVfU3Vid2F5L1N1YndheVYyL2NsaWVudC9qcy9tb2R1bGVzL2RpYWxvZ01hbmFnZXIuanMiLCIuLi8uLi9XZWJzaXRlcy9XZWJzaXRlX1N1YndheS9TdWJ3YXlWMi9jbGllbnQvanMvbW9kdWxlcy9kb3dubG9hZEFwcC5qcyIsIi4uLy4uL1dlYnNpdGVzL1dlYnNpdGVfU3Vid2F5L1N1YndheVYyL2NsaWVudC9qcy9tb2R1bGVzL2ZsaXBwZXIuanMiLCIuLi8uLi9XZWJzaXRlcy9XZWJzaXRlX1N1YndheS9TdWJ3YXlWMi9jbGllbnQvanMvbW9kdWxlcy9nZXRBcHBMaW5rLmpzIiwiLi4vLi4vV2Vic2l0ZXMvV2Vic2l0ZV9TdWJ3YXkvU3Vid2F5VjIvY2xpZW50L2pzL21vZHVsZXMvZ2V0U3RpY2t5SGVhZGVySGVpZ2h0LmpzIiwiLi4vLi4vV2Vic2l0ZXMvV2Vic2l0ZV9TdWJ3YXkvU3Vid2F5VjIvY2xpZW50L2pzL21vZHVsZXMvZ2V0VGhlQXBwLmpzIiwiLi4vLi4vV2Vic2l0ZXMvV2Vic2l0ZV9TdWJ3YXkvU3Vid2F5VjIvY2xpZW50L2pzL21vZHVsZXMvZ2V0VGhlQXBwQmFubmVyLmpzIiwiLi4vLi4vV2Vic2l0ZXMvV2Vic2l0ZV9TdWJ3YXkvU3Vid2F5VjIvY2xpZW50L2pzL21vZHVsZXMvaG9tZVBhZ2VNb2RhbC5qcyIsIi4uLy4uL1dlYnNpdGVzL1dlYnNpdGVfU3Vid2F5L1N1YndheVYyL2NsaWVudC9qcy9tb2R1bGVzL2xhbmd1YWdlU2VsZWN0b3IuanMiLCIuLi8uLi9XZWJzaXRlcy9XZWJzaXRlX1N1YndheS9TdWJ3YXlWMi9jbGllbnQvanMvbW9kdWxlcy9sb2FkUHJlc3MuanMiLCIuLi8uLi9XZWJzaXRlcy9XZWJzaXRlX1N1YndheS9TdWJ3YXlWMi9jbGllbnQvanMvbW9kdWxlcy9sb2dnZWRpbi5qcyIsIi4uLy4uL1dlYnNpdGVzL1dlYnNpdGVfU3Vid2F5L1N1YndheVYyL2NsaWVudC9qcy9tb2R1bGVzL21haW5OYXYuanMiLCIuLi8uLi9XZWJzaXRlcy9XZWJzaXRlX1N1YndheS9TdWJ3YXlWMi9jbGllbnQvanMvbW9kdWxlcy9tb2JpbGVOYXYuanMiLCIuLi8uLi9XZWJzaXRlcy9XZWJzaXRlX1N1YndheS9TdWJ3YXlWMi9jbGllbnQvanMvbW9kdWxlcy9tb3ZlSXRlbXMuanMiLCIuLi8uLi9XZWJzaXRlcy9XZWJzaXRlX1N1YndheS9TdWJ3YXlWMi9jbGllbnQvanMvbW9kdWxlcy9udXRyaXRpb25HcmlkLmpzIiwiLi4vLi4vV2Vic2l0ZXMvV2Vic2l0ZV9TdWJ3YXkvU3Vid2F5VjIvY2xpZW50L2pzL21vZHVsZXMvb3Blbk1vZGFsLmpzIiwiLi4vLi4vV2Vic2l0ZXMvV2Vic2l0ZV9TdWJ3YXkvU3Vid2F5VjIvY2xpZW50L2pzL21vZHVsZXMvc2lnbnVwLmpzIiwiLi4vLi4vV2Vic2l0ZXMvV2Vic2l0ZV9TdWJ3YXkvU3Vid2F5VjIvY2xpZW50L2pzL21vZHVsZXMvc3RpY2t5SGVhZGVyLmpzIiwiLi4vLi4vV2Vic2l0ZXMvV2Vic2l0ZV9TdWJ3YXkvU3Vid2F5VjIvY2xpZW50L2pzL21vZHVsZXMvc3RvcFBhZ2VKdW1wRm9ySGFzaFVybC5qcyIsIi4uLy4uL1dlYnNpdGVzL1dlYnNpdGVfU3Vid2F5L1N1YndheVYyL2NsaWVudC9qcy9tb2R1bGVzL3RhYnMuanMiLCIuLi8uLi9XZWJzaXRlcy9XZWJzaXRlX1N1YndheS9TdWJ3YXlWMi9jbGllbnQvanMvbW9kdWxlcy90b2dnbGVDb250cmFzdC5qcyIsIi4uLy4uL1dlYnNpdGVzL1dlYnNpdGVfU3Vid2F5L1N1YndheVYyL2NsaWVudC9qcy9tb2R1bGVzL3ZpZGVvUGxheWVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7O0FDQUE7Ozs7QUFDQTs7Ozs7Ozs7QUFFQTs7Ozs7OztBQU9BLElBQU0sV0FBWSxVQUFDLENBQUQsRUFBTztBQUN2Qjs7Ozs7O0FBTUEsTUFBTSxPQUF5QixVQUEvQjtBQUNBLE1BQU0sVUFBeUIsT0FBL0I7QUFDQSxNQUFNLFdBQXlCLGFBQS9CO0FBQ0EsTUFBTSxrQkFBNkIsUUFBbkM7QUFDQSxNQUFNLGVBQXlCLFdBQS9CO0FBQ0EsTUFBTSxxQkFBeUIsRUFBRSxFQUFGLENBQUssSUFBTCxDQUEvQjtBQUNBLE1BQU0sc0JBQXlCLEdBQS9CO0FBQ0EsTUFBTSxxQkFBeUIsRUFBL0IsQ0FkdUIsQ0FjVztBQUNsQyxNQUFNLHNCQUF5QixFQUEvQixDQWZ1QixDQWVXO0FBQ2xDLE1BQU0seUJBQXlCLEdBQS9CLENBaEJ1QixDQWdCWTs7QUFFbkMsTUFBTSxVQUFVO0FBQ2QsY0FBVyxJQURHO0FBRWQsY0FBVyxJQUZHO0FBR2QsV0FBVyxLQUhHO0FBSWQsV0FBVyxPQUpHO0FBS2QsVUFBVztBQUxHLEdBQWhCOztBQVFBLE1BQU0sY0FBYztBQUNsQixjQUFXLGtCQURPO0FBRWxCLGNBQVcsU0FGTztBQUdsQixXQUFXLGtCQUhPO0FBSWxCLFdBQVcsa0JBSk87QUFLbEIsVUFBVztBQUxPLEdBQXBCOztBQVFBLE1BQU0sWUFBWTtBQUNoQixVQUFXLE1BREs7QUFFaEIsVUFBVyxNQUZLO0FBR2hCLFVBQVcsTUFISztBQUloQixXQUFXO0FBSkssR0FBbEI7O0FBT0EsTUFBTSxRQUFRO0FBQ1oscUJBQXlCLFNBRGI7QUFFWixt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Ozs7Ozs7OztBQVNBLFVBQUksTUFBTSxJQUFOLEtBQWUsQ0FBbkIsRUFBc0I7QUFDcEIsWUFBSSxLQUFLLE9BQUwsQ0FBYSxNQUFqQixFQUF5QjtBQUN2QixlQUFLLE9BQUw7QUFDRDtBQUNGO0FBQ0Y7OztnQ0FFVztBQUFBOztBQUNWLFdBQUssTUFBTCxDQUFZLFNBQVo7QUFDQSxVQUFJLEtBQUssT0FBTCxDQUFhLE1BQWpCLEVBQXlCO0FBQ3ZCLGVBQU8sVUFBUCxDQUFrQjtBQUFBLGlCQUFNLE9BQUssT0FBTCxFQUFOO0FBQUEsU0FBbEIsRUFBd0MsR0FBeEM7QUFDRDtBQUNELGFBQU8sS0FBUDtBQUNEOzs7Z0NBQ1c7QUFDVixXQUFLLE1BQUwsQ0FBWSxTQUFaO0FBQ0EsVUFBSSxLQUFLLE9BQUwsQ0FBYSxNQUFqQixFQUF5QjtBQUN2QixhQUFLLE9BQUw7QUFDRDtBQUNELGFBQU8sS0FBUDtBQUNEIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5J1xyXG5pbXBvcnQgVXRpbCBmcm9tICcuL3V0aWwnXHJcblxyXG4vKipcclxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICogQm9vdHN0cmFwICh2NC4wLjApOiBjYXJvdXNlbC5qc1xyXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21hc3Rlci9MSUNFTlNFKVxyXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gKi9cclxuXHJcbmNvbnN0IENhcm91c2VsID0gKCgkKSA9PiB7XHJcbiAgLyoqXHJcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICogQ29uc3RhbnRzXHJcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICovXHJcblxyXG4gIGNvbnN0IE5BTUUgICAgICAgICAgICAgICAgICAgPSAnY2Fyb3VzZWwnXHJcbiAgY29uc3QgVkVSU0lPTiAgICAgICAgICAgICAgICA9ICc0LjAuMCdcclxuICBjb25zdCBEQVRBX0tFWSAgICAgICAgICAgICAgID0gJ2JzLmNhcm91c2VsJ1xyXG4gIGNvbnN0IEVWRU5UX0tFWSAgICAgICAgICAgICAgPSBgLiR7REFUQV9LRVl9YFxyXG4gIGNvbnN0IERBVEFfQVBJX0tFWSAgICAgICAgICAgPSAnLmRhdGEtYXBpJ1xyXG4gIGNvbnN0IEpRVUVSWV9OT19DT05GTElDVCAgICAgPSAkLmZuW05BTUVdXHJcbiAgY29uc3QgVFJBTlNJVElPTl9EVVJBVElPTiAgICA9IDYwMFxyXG4gIGNvbnN0IEFSUk9XX0xFRlRfS0VZQ09ERSAgICAgPSAzNyAvLyBLZXlib2FyZEV2ZW50LndoaWNoIHZhbHVlIGZvciBsZWZ0IGFycm93IGtleVxyXG4gIGNvbnN0IEFSUk9XX1JJR0hUX0tFWUNPREUgICAgPSAzOSAvLyBLZXlib2FyZEV2ZW50LndoaWNoIHZhbHVlIGZvciByaWdodCBhcnJvdyBrZXlcclxuICBjb25zdCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUID0gNTAwIC8vIFRpbWUgZm9yIG1vdXNlIGNvbXBhdCBldmVudHMgdG8gZmlyZSBhZnRlciB0b3VjaFxyXG5cclxuICBjb25zdCBEZWZhdWx0ID0ge1xyXG4gICAgaW50ZXJ2YWwgOiA1MDAwLFxyXG4gICAga2V5Ym9hcmQgOiB0cnVlLFxyXG4gICAgc2xpZGUgICAgOiBmYWxzZSxcclxuICAgIHBhdXNlICAgIDogJ2hvdmVyJyxcclxuICAgIHdyYXAgICAgIDogdHJ1ZVxyXG4gIH1cclxuXHJcbiAgY29uc3QgRGVmYXVsdFR5cGUgPSB7XHJcbiAgICBpbnRlcnZhbCA6ICcobnVtYmVyfGJvb2xlYW4pJyxcclxuICAgIGtleWJvYXJkIDogJ2Jvb2xlYW4nLFxyXG4gICAgc2xpZGUgICAgOiAnKGJvb2xlYW58c3RyaW5nKScsXHJcbiAgICBwYXVzZSAgICA6ICcoc3RyaW5nfGJvb2xlYW4pJyxcclxuICAgIHdyYXAgICAgIDogJ2Jvb2xlYW4nXHJcbiAgfVxyXG5cclxuICBjb25zdCBEaXJlY3Rpb24gPSB7XHJcbiAgICBORVhUICAgICA6ICduZXh0JyxcclxuICAgIFBSRVYgICAgIDogJ3ByZXYnLFxyXG4gICAgTEVGVCAgICAgOiAnbGVmdCcsXHJcbiAgICBSSUdIVCAgICA6ICdyaWdodCdcclxuICB9XHJcblxyXG4gIGNvbnN0IEV2ZW50ID0ge1xyXG4gICAgU0xJREUgICAgICAgICAgOiBgc2xpZGUke0VWRU5UX0tFWX1gLFxyXG4gICAgU0xJRCAgICAgICAgICAgOiBgc2xpZCR7RVZFTlRfS0VZfWAsXHJcbiAgICBLRVlET1dOICAgICAgICA6IGBrZXlkb3duJHtFVkVOVF9LRVl9YCxcclxuICAgIE1PVVNFRU5URVIgICAgIDogYG1vdXNlZW50ZXIke0VWRU5UX0tFWX1gLFxyXG4gICAgTU9VU0VMRUFWRSAgICAgOiBgbW91c2VsZWF2ZSR7RVZFTlRfS0VZfWAsXHJcbiAgICBUT1VDSEVORCAgICAgICA6IGB0b3VjaGVuZCR7RVZFTlRfS0VZfWAsXHJcbiAgICBMT0FEX0RBVEFfQVBJICA6IGBsb2FkJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YCxcclxuICAgIENMSUNLX0RBVEFfQVBJIDogYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxyXG4gIH1cclxuXHJcbiAgY29uc3QgQ2xhc3NOYW1lID0ge1xyXG4gICAgQ0FST1VTRUwgOiAnY2Fyb3VzZWwnLFxyXG4gICAgQUNUSVZFICAgOiAnYWN0aXZlJyxcclxuICAgIFNMSURFICAgIDogJ3NsaWRlJyxcclxuICAgIFJJR0hUICAgIDogJ2l0ZW0tcmlnaHQnLFxyXG4gICAgTEVGVCAgICAgOiAnaXRlbS1sZWZ0JyxcclxuICAgIE5FWFQgICAgIDogJ2l0ZW0tbmV4dCcsXHJcbiAgICBQUkVWICAgICA6ICdpdGVtLXByZXYnLFxyXG4gICAgSVRFTSAgICAgOiAnaXRlbSdcclxuICB9XHJcblxyXG4gIGNvbnN0IFNlbGVjdG9yID0ge1xyXG4gICAgQUNUSVZFICAgICAgOiAnLmFjdGl2ZScsXHJcbiAgICBBQ1RJVkVfSVRFTSA6ICcuYWN0aXZlLml0ZW0nLFxyXG4gICAgSVRFTSAgICAgICAgOiAnLml0ZW0nLFxyXG4gICAgTkVYVF9QUkVWICAgOiAnLml0ZW0tbmV4dCwgLml0ZW0tcHJldicsXHJcbiAgICBJTkRJQ0FUT1JTICA6ICcuY2Fyb3VzZWwtaW5kaWNhdG9ycycsXHJcbiAgICBEQVRBX1NMSURFICA6ICdbZGF0YS1zbGlkZV0sIFtkYXRhLXNsaWRlLXRvXScsXHJcbiAgICBEQVRBX1JJREUgICA6ICdbZGF0YS1yaWRlPVwiY2Fyb3VzZWxcIl0nXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgKiBDbGFzcyBEZWZpbml0aW9uXHJcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICovXHJcblxyXG4gIGNsYXNzIENhcm91c2VsIHtcclxuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xyXG4gICAgICB0aGlzLl9pdGVtcyAgICAgICAgICAgICA9IG51bGxcclxuICAgICAgdGhpcy5faW50ZXJ2YWwgICAgICAgICAgPSBudWxsXHJcbiAgICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgICAgID0gbnVsbFxyXG5cclxuICAgICAgdGhpcy5faXNQYXVzZWQgICAgICAgICAgPSBmYWxzZVxyXG4gICAgICB0aGlzLl9pc1NsaWRpbmcgICAgICAgICA9IGZhbHNlXHJcblxyXG4gICAgICB0aGlzLnRvdWNoVGltZW91dCAgICAgICA9IG51bGxcclxuXHJcbiAgICAgIHRoaXMuX2NvbmZpZyAgICAgICAgICAgID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcclxuICAgICAgdGhpcy5fZWxlbWVudCAgICAgICAgICAgPSAkKGVsZW1lbnQpWzBdXHJcbiAgICAgIHRoaXMuX2luZGljYXRvcnNFbGVtZW50ID0gJCh0aGlzLl9lbGVtZW50KS5maW5kKFNlbGVjdG9yLklORElDQVRPUlMpWzBdXHJcblxyXG4gICAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpXHJcbiAgICB9XHJcblxyXG4gICAgLy8gR2V0dGVyc1xyXG5cclxuICAgIHN0YXRpYyBnZXQgVkVSU0lPTigpIHtcclxuICAgICAgcmV0dXJuIFZFUlNJT05cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XHJcbiAgICAgIHJldHVybiBEZWZhdWx0XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUHVibGljXHJcblxyXG4gICAgbmV4dCgpIHtcclxuICAgICAgaWYgKCF0aGlzLl9pc1NsaWRpbmcpIHtcclxuICAgICAgICB0aGlzLl9zbGlkZShEaXJlY3Rpb24uTkVYVClcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5leHRXaGVuVmlzaWJsZSgpIHtcclxuICAgICAgLy8gRG9uJ3QgY2FsbCBuZXh0IHdoZW4gdGhlIHBhZ2UgaXNuJ3QgdmlzaWJsZVxyXG4gICAgICAvLyBvciB0aGUgY2Fyb3VzZWwgb3IgaXRzIHBhcmVudCBpc24ndCB2aXNpYmxlXHJcbiAgICAgIGlmICghZG9jdW1lbnQuaGlkZGVuICYmXHJcbiAgICAgICAgKCQodGhpcy5fZWxlbWVudCkuaXMoJzp2aXNpYmxlJykgJiYgJCh0aGlzLl9lbGVtZW50KS5jc3MoJ3Zpc2liaWxpdHknKSAhPT0gJ2hpZGRlbicpKSB7XHJcbiAgICAgICAgdGhpcy5uZXh0KClcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByZXYoKSB7XHJcbiAgICAgIGlmICghdGhpcy5faXNTbGlkaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fc2xpZGUoRGlyZWN0aW9uLlBSRVYpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwYXVzZShldmVudCkge1xyXG4gICAgICBpZiAoIWV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5faXNQYXVzZWQgPSB0cnVlXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICgkKHRoaXMuX2VsZW1lbnQpLmZpbmQoU2VsZWN0b3IuTkVYVF9QUkVWKVswXSAmJlxyXG4gICAgICAgIFV0aWwuc3VwcG9ydHNUcmFuc2l0aW9uRW5kKCkpIHtcclxuICAgICAgICBVdGlsLnRyaWdnZXJUcmFuc2l0aW9uRW5kKHRoaXMuX2VsZW1lbnQpXHJcbiAgICAgICAgdGhpcy5jeWNsZSh0cnVlKVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKVxyXG4gICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGxcclxuICAgIH1cclxuXHJcbiAgICBjeWNsZShldmVudCkge1xyXG4gICAgICBpZiAoIWV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5faXNQYXVzZWQgPSBmYWxzZVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5faW50ZXJ2YWwpIHtcclxuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKVxyXG4gICAgICAgIHRoaXMuX2ludGVydmFsID0gbnVsbFxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmludGVydmFsICYmICF0aGlzLl9pc1BhdXNlZCkge1xyXG4gICAgICAgIHRoaXMuX2ludGVydmFsID0gc2V0SW50ZXJ2YWwoXHJcbiAgICAgICAgICAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID8gdGhpcy5uZXh0V2hlblZpc2libGUgOiB0aGlzLm5leHQpLmJpbmQodGhpcyksXHJcbiAgICAgICAgICB0aGlzLl9jb25maWcuaW50ZXJ2YWxcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0byhpbmRleCkge1xyXG4gICAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gJCh0aGlzLl9lbGVtZW50KS5maW5kKFNlbGVjdG9yLkFDVElWRV9JVEVNKVswXVxyXG5cclxuICAgICAgY29uc3QgYWN0aXZlSW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgodGhpcy5fYWN0aXZlRWxlbWVudClcclxuXHJcbiAgICAgIGlmIChpbmRleCA+IHRoaXMuX2l0ZW1zLmxlbmd0aCAtIDEgfHwgaW5kZXggPCAwKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcclxuICAgICAgICAkKHRoaXMuX2VsZW1lbnQpLm9uZShFdmVudC5TTElELCAoKSA9PiB0aGlzLnRvKGluZGV4KSlcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGFjdGl2ZUluZGV4ID09PSBpbmRleCkge1xyXG4gICAgICAgIHRoaXMucGF1c2UoKVxyXG4gICAgICAgIHRoaXMuY3ljbGUoKVxyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBkaXJlY3Rpb24gPSBpbmRleCA+IGFjdGl2ZUluZGV4XHJcbiAgICAgICAgPyBEaXJlY3Rpb24uTkVYVFxyXG4gICAgICAgIDogRGlyZWN0aW9uLlBSRVZcclxuXHJcbiAgICAgIHRoaXMuX3NsaWRlKGRpcmVjdGlvbiwgdGhpcy5faXRlbXNbaW5kZXhdKVxyXG4gICAgfVxyXG5cclxuICAgIGRpc3Bvc2UoKSB7XHJcbiAgICAgICQodGhpcy5fZWxlbWVudCkub2ZmKEVWRU5UX0tFWSlcclxuICAgICAgJC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsIERBVEFfS0VZKVxyXG5cclxuICAgICAgdGhpcy5faXRlbXMgICAgICAgICAgICAgPSBudWxsXHJcbiAgICAgIHRoaXMuX2NvbmZpZyAgICAgICAgICAgID0gbnVsbFxyXG4gICAgICB0aGlzLl9lbGVtZW50ICAgICAgICAgICA9IG51bGxcclxuICAgICAgdGhpcy5faW50ZXJ2YWwgICAgICAgICAgPSBudWxsXHJcbiAgICAgIHRoaXMuX2lzUGF1c2VkICAgICAgICAgID0gbnVsbFxyXG4gICAgICB0aGlzLl9pc1NsaWRpbmcgICAgICAgICA9IG51bGxcclxuICAgICAgdGhpcy5fYWN0aXZlRWxlbWVudCAgICAgPSBudWxsXHJcbiAgICAgIHRoaXMuX2luZGljYXRvcnNFbGVtZW50ID0gbnVsbFxyXG4gICAgfVxyXG5cclxuICAgIC8vIFByaXZhdGVcclxuXHJcbiAgICBfZ2V0Q29uZmlnKGNvbmZpZykge1xyXG4gICAgICBjb25maWcgPSB7XHJcbiAgICAgICAgLi4uRGVmYXVsdCxcclxuICAgICAgICAuLi5jb25maWdcclxuICAgICAgfVxyXG4gICAgICBVdGlsLnR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIERlZmF1bHRUeXBlKVxyXG4gICAgICByZXR1cm4gY29uZmlnXHJcbiAgICB9XHJcblxyXG4gICAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xyXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XHJcbiAgICAgICAgJCh0aGlzLl9lbGVtZW50KVxyXG4gICAgICAgICAgLm9uKEV2ZW50LktFWURPV04sIChldmVudCkgPT4gdGhpcy5fa2V5ZG93bihldmVudCkpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgPT09ICdob3ZlcicpIHtcclxuICAgICAgICAkKHRoaXMuX2VsZW1lbnQpXHJcbiAgICAgICAgICAub24oRXZlbnQuTU9VU0VFTlRFUiwgKGV2ZW50KSA9PiB0aGlzLnBhdXNlKGV2ZW50KSlcclxuICAgICAgICAgIC5vbihFdmVudC5NT1VTRUxFQVZFLCAoZXZlbnQpID0+IHRoaXMuY3ljbGUoZXZlbnQpKVxyXG4gICAgICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcclxuICAgICAgICAgIC8vIElmIGl0J3MgYSB0b3VjaC1lbmFibGVkIGRldmljZSwgbW91c2VlbnRlci9sZWF2ZSBhcmUgZmlyZWQgYXNcclxuICAgICAgICAgIC8vIHBhcnQgb2YgdGhlIG1vdXNlIGNvbXBhdGliaWxpdHkgZXZlbnRzIG9uIGZpcnN0IHRhcCAtIHRoZSBjYXJvdXNlbFxyXG4gICAgICAgICAgLy8gd291bGQgc3RvcCBjeWNsaW5nIHVudGlsIHVzZXIgdGFwcGVkIG91dCBvZiBpdDtcclxuICAgICAgICAgIC8vIGhlcmUsIHdlIGxpc3RlbiBmb3IgdG91Y2hlbmQsIGV4cGxpY2l0bHkgcGF1c2UgdGhlIGNhcm91c2VsXHJcbiAgICAgICAgICAvLyAoYXMgaWYgaXQncyB0aGUgc2Vjb25kIHRpbWUgd2UgdGFwIG9uIGl0LCBtb3VzZWVudGVyIGNvbXBhdCBldmVudFxyXG4gICAgICAgICAgLy8gaXMgTk9UIGZpcmVkKSBhbmQgYWZ0ZXIgYSB0aW1lb3V0ICh0byBhbGxvdyBmb3IgbW91c2UgY29tcGF0aWJpbGl0eVxyXG4gICAgICAgICAgLy8gZXZlbnRzIHRvIGZpcmUpIHdlIGV4cGxpY2l0bHkgcmVzdGFydCBjeWNsaW5nXHJcbiAgICAgICAgICAkKHRoaXMuX2VsZW1lbnQpLm9uKEV2ZW50LlRPVUNIRU5ELCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGF1c2UoKVxyXG4gICAgICAgICAgICBpZiAodGhpcy50b3VjaFRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50b3VjaFRpbWVvdXQpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy50b3VjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KChldmVudCkgPT4gdGhpcy5jeWNsZShldmVudCksIFRPVUNIRVZFTlRfQ09NUEFUX1dBSVQgKyB0aGlzLl9jb25maWcuaW50ZXJ2YWwpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9rZXlkb3duKGV2ZW50KSB7XHJcbiAgICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcblxyXG4gICAgICBzd2l0Y2ggKGV2ZW50LndoaWNoKSB7XHJcbiAgICAgICAgY2FzZSBBUlJPV19MRUZUX0tFWUNPREU6XHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgICAgICB0aGlzLnByZXYoKVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBjYXNlIEFSUk9XX1JJR0hUX0tFWUNPREU6XHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICAgICAgICB0aGlzLm5leHQoKVxyXG4gICAgICAgICAgYnJlYWtcclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2dldEl0ZW1JbmRleChlbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuX2l0ZW1zID0gJC5tYWtlQXJyYXkoJChlbGVtZW50KS5wYXJlbnQoKS5maW5kKFNlbGVjdG9yLklURU0pKVxyXG4gICAgICByZXR1cm4gdGhpcy5faXRlbXMuaW5kZXhPZihlbGVtZW50KVxyXG4gICAgfVxyXG5cclxuICAgIF9nZXRJdGVtQnlEaXJlY3Rpb24oZGlyZWN0aW9uLCBhY3RpdmVFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IGlzTmV4dERpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PT0gRGlyZWN0aW9uLk5FWFRcclxuICAgICAgY29uc3QgaXNQcmV2RGlyZWN0aW9uID0gZGlyZWN0aW9uID09PSBEaXJlY3Rpb24uUFJFVlxyXG4gICAgICBjb25zdCBhY3RpdmVJbmRleCAgICAgPSB0aGlzLl9nZXRJdGVtSW5kZXgoYWN0aXZlRWxlbWVudClcclxuICAgICAgY29uc3QgbGFzdEl0ZW1JbmRleCAgID0gdGhpcy5faXRlbXMubGVuZ3RoIC0gMVxyXG4gICAgICBjb25zdCBpc0dvaW5nVG9XcmFwICAgPSBpc1ByZXZEaXJlY3Rpb24gJiYgYWN0aXZlSW5kZXggPT09IDAgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNOZXh0RGlyZWN0aW9uICYmIGFjdGl2ZUluZGV4ID09PSBsYXN0SXRlbUluZGV4XHJcblxyXG4gICAgICBpZiAoaXNHb2luZ1RvV3JhcCAmJiAhdGhpcy5fY29uZmlnLndyYXApIHtcclxuICAgICAgICByZXR1cm4gYWN0aXZlRWxlbWVudFxyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBkZWx0YSAgICAgPSBkaXJlY3Rpb24gPT09IERpcmVjdGlvbi5QUkVWID8gLTEgOiAxXHJcbiAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IChhY3RpdmVJbmRleCArIGRlbHRhKSAlIHRoaXMuX2l0ZW1zLmxlbmd0aFxyXG5cclxuICAgICAgcmV0dXJuIGl0ZW1JbmRleCA9PT0gLTFcclxuICAgICAgICA/IHRoaXMuX2l0ZW1zW3RoaXMuX2l0ZW1zLmxlbmd0aCAtIDFdIDogdGhpcy5faXRlbXNbaXRlbUluZGV4XVxyXG4gICAgfVxyXG5cclxuICAgIF90cmlnZ2VyU2xpZGVFdmVudChyZWxhdGVkVGFyZ2V0LCBldmVudERpcmVjdGlvbk5hbWUpIHtcclxuICAgICAgY29uc3QgdGFyZ2V0SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgocmVsYXRlZFRhcmdldClcclxuICAgICAgY29uc3QgZnJvbUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KCQodGhpcy5fZWxlbWVudCkuZmluZChTZWxlY3Rvci5BQ1RJVkVfSVRFTSlbMF0pXHJcbiAgICAgIGNvbnN0IHNsaWRlRXZlbnQgPSAkLkV2ZW50KEV2ZW50LlNMSURFLCB7XHJcbiAgICAgICAgcmVsYXRlZFRhcmdldCxcclxuICAgICAgICBkaXJlY3Rpb246IGV2ZW50RGlyZWN0aW9uTmFtZSxcclxuICAgICAgICBmcm9tOiBmcm9tSW5kZXgsXHJcbiAgICAgICAgdG86IHRhcmdldEluZGV4XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc2xpZGVFdmVudClcclxuXHJcbiAgICAgIHJldHVybiBzbGlkZUV2ZW50XHJcbiAgICB9XHJcblxyXG4gICAgX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQoZWxlbWVudCkge1xyXG4gICAgICBpZiAodGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpIHtcclxuICAgICAgICAkKHRoaXMuX2luZGljYXRvcnNFbGVtZW50KVxyXG4gICAgICAgICAgLmZpbmQoU2VsZWN0b3IuQUNUSVZFKVxyXG4gICAgICAgICAgLnJlbW92ZUNsYXNzKENsYXNzTmFtZS5BQ1RJVkUpXHJcblxyXG4gICAgICAgIGNvbnN0IG5leHRJbmRpY2F0b3IgPSB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudC5jaGlsZHJlbltcclxuICAgICAgICAgIHRoaXMuX2dldEl0ZW1JbmRleChlbGVtZW50KVxyXG4gICAgICAgIF1cclxuXHJcbiAgICAgICAgaWYgKG5leHRJbmRpY2F0b3IpIHtcclxuICAgICAgICAgICQobmV4dEluZGljYXRvcikuYWRkQ2xhc3MoQ2xhc3NOYW1lLkFDVElWRSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfc2xpZGUoZGlyZWN0aW9uLCBlbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSAkKHRoaXMuX2VsZW1lbnQpLmZpbmQoU2VsZWN0b3IuQUNUSVZFX0lURU0pWzBdXHJcbiAgICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnRJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleChhY3RpdmVFbGVtZW50KVxyXG4gICAgICBjb25zdCBuZXh0RWxlbWVudCAgID0gZWxlbWVudCB8fCBhY3RpdmVFbGVtZW50ICYmXHJcbiAgICAgICAgdGhpcy5fZ2V0SXRlbUJ5RGlyZWN0aW9uKGRpcmVjdGlvbiwgYWN0aXZlRWxlbWVudClcclxuICAgICAgY29uc3QgbmV4dEVsZW1lbnRJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleChuZXh0RWxlbWVudClcclxuICAgICAgY29uc3QgaXNDeWNsaW5nID0gQm9vbGVhbih0aGlzLl9pbnRlcnZhbClcclxuXHJcbiAgICAgIGxldCBkaXJlY3Rpb25hbENsYXNzTmFtZVxyXG4gICAgICBsZXQgb3JkZXJDbGFzc05hbWVcclxuICAgICAgbGV0IGV2ZW50RGlyZWN0aW9uTmFtZVxyXG5cclxuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gRGlyZWN0aW9uLk5FWFQpIHtcclxuICAgICAgICBkaXJlY3Rpb25hbENsYXNzTmFtZSA9IENsYXNzTmFtZS5MRUZUXHJcbiAgICAgICAgb3JkZXJDbGFzc05hbWUgPSBDbGFzc05hbWUuTkVYVFxyXG4gICAgICAgIGV2ZW50RGlyZWN0aW9uTmFtZSA9IERpcmVjdGlvbi5MRUZUXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGlyZWN0aW9uYWxDbGFzc05hbWUgPSBDbGFzc05hbWUuUklHSFRcclxuICAgICAgICBvcmRlckNsYXNzTmFtZSA9IENsYXNzTmFtZS5QUkVWXHJcbiAgICAgICAgZXZlbnREaXJlY3Rpb25OYW1lID0gRGlyZWN0aW9uLlJJR0hUXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChuZXh0RWxlbWVudCAmJiAkKG5leHRFbGVtZW50KS5oYXNDbGFzcyhDbGFzc05hbWUuQUNUSVZFKSkge1xyXG4gICAgICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHNsaWRlRXZlbnQgPSB0aGlzLl90cmlnZ2VyU2xpZGVFdmVudChuZXh0RWxlbWVudCwgZXZlbnREaXJlY3Rpb25OYW1lKVxyXG4gICAgICBpZiAoc2xpZGVFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgIW5leHRFbGVtZW50KSB7XHJcbiAgICAgICAgLy8gU29tZSB3ZWlyZG5lc3MgaXMgaGFwcGVuaW5nLCBzbyB3ZSBiYWlsXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX2lzU2xpZGluZyA9IHRydWVcclxuXHJcbiAgICAgIGlmIChpc0N5Y2xpbmcpIHtcclxuICAgICAgICB0aGlzLnBhdXNlKClcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudChuZXh0RWxlbWVudClcclxuXHJcbiAgICAgIGNvbnN0IHNsaWRFdmVudCA9ICQuRXZlbnQoRXZlbnQuU0xJRCwge1xyXG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IG5leHRFbGVtZW50LFxyXG4gICAgICAgIGRpcmVjdGlvbjogZXZlbnREaXJlY3Rpb25OYW1lLFxyXG4gICAgICAgIGZyb206IGFjdGl2ZUVsZW1lbnRJbmRleCxcclxuICAgICAgICB0bzogbmV4dEVsZW1lbnRJbmRleFxyXG4gICAgICB9KVxyXG5cclxuICAgICAgaWYgKFV0aWwuc3VwcG9ydHNUcmFuc2l0aW9uRW5kKCkgJiZcclxuICAgICAgICAkKHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKENsYXNzTmFtZS5TTElERSkpIHtcclxuICAgICAgICAkKG5leHRFbGVtZW50KS5hZGRDbGFzcyhvcmRlckNsYXNzTmFtZSlcclxuXHJcbiAgICAgICAgVXRpbC5yZWZsb3cobmV4dEVsZW1lbnQpXHJcblxyXG4gICAgICAgICQoYWN0aXZlRWxlbWVudCkuYWRkQ2xhc3MoZGlyZWN0aW9uYWxDbGFzc05hbWUpXHJcbiAgICAgICAgJChuZXh0RWxlbWVudCkuYWRkQ2xhc3MoZGlyZWN0aW9uYWxDbGFzc05hbWUpXHJcblxyXG4gICAgICAgICQoYWN0aXZlRWxlbWVudClcclxuICAgICAgICAgIC5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgKCkgPT4ge1xyXG4gICAgICAgICAgICAkKG5leHRFbGVtZW50KVxyXG4gICAgICAgICAgICAgIC5yZW1vdmVDbGFzcyhgJHtkaXJlY3Rpb25hbENsYXNzTmFtZX0gJHtvcmRlckNsYXNzTmFtZX1gKVxyXG4gICAgICAgICAgICAgIC5hZGRDbGFzcyhDbGFzc05hbWUuQUNUSVZFKVxyXG5cclxuICAgICAgICAgICAgJChhY3RpdmVFbGVtZW50KS5yZW1vdmVDbGFzcyhgJHtDbGFzc05hbWUuQUNUSVZFfSAke29yZGVyQ2xhc3NOYW1lfSAke2RpcmVjdGlvbmFsQ2xhc3NOYW1lfWApXHJcblxyXG4gICAgICAgICAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZVxyXG5cclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc2xpZEV2ZW50KSwgMClcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZW11bGF0ZVRyYW5zaXRpb25FbmQoVFJBTlNJVElPTl9EVVJBVElPTilcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAkKGFjdGl2ZUVsZW1lbnQpLnJlbW92ZUNsYXNzKENsYXNzTmFtZS5BQ1RJVkUpXHJcbiAgICAgICAgJChuZXh0RWxlbWVudCkuYWRkQ2xhc3MoQ2xhc3NOYW1lLkFDVElWRSlcclxuXHJcbiAgICAgICAgdGhpcy5faXNTbGlkaW5nID0gZmFsc2VcclxuICAgICAgICAkKHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoc2xpZEV2ZW50KVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNDeWNsaW5nKSB7XHJcbiAgICAgICAgdGhpcy5jeWNsZSgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBTdGF0aWNcclxuXHJcbiAgICBzdGF0aWMgX2pRdWVyeUludGVyZmFjZShjb25maWcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSAkKHRoaXMpLmRhdGEoREFUQV9LRVkpXHJcbiAgICAgICAgbGV0IF9jb25maWcgPSB7XHJcbiAgICAgICAgICAuLi5EZWZhdWx0LFxyXG4gICAgICAgICAgLi4uJCh0aGlzKS5kYXRhKClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgX2NvbmZpZyA9IHtcclxuICAgICAgICAgICAgLi4uX2NvbmZpZyxcclxuICAgICAgICAgICAgLi4uY29uZmlnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhY3Rpb24gPSB0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJyA/IGNvbmZpZyA6IF9jb25maWcuc2xpZGVcclxuXHJcbiAgICAgICAgaWYgKCFkYXRhKSB7XHJcbiAgICAgICAgICBkYXRhID0gbmV3IENhcm91c2VsKHRoaXMsIF9jb25maWcpXHJcbiAgICAgICAgICAkKHRoaXMpLmRhdGEoREFUQV9LRVksIGRhdGEpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgIGRhdGEudG8oY29uZmlnKVxyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgZGF0YVthY3Rpb25dID09PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2FjdGlvbn1cImApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkYXRhW2FjdGlvbl0oKVxyXG4gICAgICAgIH0gZWxzZSBpZiAoX2NvbmZpZy5pbnRlcnZhbCkge1xyXG4gICAgICAgICAgZGF0YS5wYXVzZSgpXHJcbiAgICAgICAgICBkYXRhLmN5Y2xlKClcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIF9kYXRhQXBpQ2xpY2tIYW5kbGVyKGV2ZW50KSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gVXRpbC5nZXRTZWxlY3RvckZyb21FbGVtZW50KHRoaXMpXHJcblxyXG4gICAgICBpZiAoIXNlbGVjdG9yKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHRhcmdldCA9ICQoc2VsZWN0b3IpWzBdXHJcblxyXG4gICAgICBpZiAoIXRhcmdldCB8fCAhJCh0YXJnZXQpLmhhc0NsYXNzKENsYXNzTmFtZS5DQVJPVVNFTCkpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY29uZmlnID0ge1xyXG4gICAgICAgIC4uLiQodGFyZ2V0KS5kYXRhKCksXHJcbiAgICAgICAgLi4uJCh0aGlzKS5kYXRhKClcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzbGlkZUluZGV4ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtc2xpZGUtdG8nKVxyXG5cclxuICAgICAgaWYgKHNsaWRlSW5kZXgpIHtcclxuICAgICAgICBjb25maWcuaW50ZXJ2YWwgPSBmYWxzZVxyXG4gICAgICB9XHJcblxyXG4gICAgICBDYXJvdXNlbC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJCh0YXJnZXQpLCBjb25maWcpXHJcblxyXG4gICAgICBpZiAoc2xpZGVJbmRleCkge1xyXG4gICAgICAgICQodGFyZ2V0KS5kYXRhKERBVEFfS0VZKS50byhzbGlkZUluZGV4KVxyXG4gICAgICB9XHJcblxyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgKiBEYXRhIEFwaSBpbXBsZW1lbnRhdGlvblxyXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAqL1xyXG5cclxuICAkKGRvY3VtZW50KVxyXG4gICAgLm9uKEV2ZW50LkNMSUNLX0RBVEFfQVBJLCBTZWxlY3Rvci5EQVRBX1NMSURFLCBDYXJvdXNlbC5fZGF0YUFwaUNsaWNrSGFuZGxlcilcclxuXHJcbiAgJCh3aW5kb3cpLm9uKEV2ZW50LkxPQURfREFUQV9BUEksICgpID0+IHtcclxuICAgICQoU2VsZWN0b3IuREFUQV9SSURFKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgY29uc3QgJGNhcm91c2VsID0gJCh0aGlzKVxyXG4gICAgICBDYXJvdXNlbC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoJGNhcm91c2VsLCAkY2Fyb3VzZWwuZGF0YSgpKVxyXG4gICAgfSlcclxuICB9KVxyXG5cclxuICAvKipcclxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgKiBqUXVlcnlcclxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgKi9cclxuXHJcbiAgJC5mbltOQU1FXSA9IENhcm91c2VsLl9qUXVlcnlJbnRlcmZhY2VcclxuICAkLmZuW05BTUVdLkNvbnN0cnVjdG9yID0gQ2Fyb3VzZWxcclxuICAkLmZuW05BTUVdLm5vQ29uZmxpY3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAkLmZuW05BTUVdID0gSlFVRVJZX05PX0NPTkZMSUNUXHJcbiAgICByZXR1cm4gQ2Fyb3VzZWwuX2pRdWVyeUludGVyZmFjZVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIENhcm91c2VsXHJcbn0pKCQpXHJcblxyXG5leHBvcnQgZGVmYXVsdCBDYXJvdXNlbFxyXG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknXHJcblxyXG4vKipcclxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICogQm9vdHN0cmFwICh2NC4wLjApOiB1dGlsLmpzXHJcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXHJcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAqL1xyXG5cclxuY29uc3QgVXRpbCA9ICgoJCkgPT4ge1xyXG4gIC8qKlxyXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAqIFByaXZhdGUgVHJhbnNpdGlvbkVuZCBIZWxwZXJzXHJcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICovXHJcblxyXG4gIGxldCB0cmFuc2l0aW9uID0gZmFsc2VcclxuXHJcbiAgY29uc3QgTUFYX1VJRCA9IDEwMDAwMDBcclxuXHJcbiAgLy8gU2hvdXRvdXQgQW5ndXNDcm9sbCAoaHR0cHM6Ly9nb28uZ2wvcHh3UUdwKVxyXG4gIGZ1bmN0aW9uIHRvVHlwZShvYmopIHtcclxuICAgIHJldHVybiB7fS50b1N0cmluZy5jYWxsKG9iaikubWF0Y2goL1xccyhbYS16QS1aXSspLylbMV0udG9Mb3dlckNhc2UoKVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0U3BlY2lhbFRyYW5zaXRpb25FbmRFdmVudCgpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGJpbmRUeXBlOiB0cmFuc2l0aW9uLmVuZCxcclxuICAgICAgZGVsZWdhdGVUeXBlOiB0cmFuc2l0aW9uLmVuZCxcclxuICAgICAgaGFuZGxlKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCQoZXZlbnQudGFyZ2V0KS5pcyh0aGlzKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGV2ZW50LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgLy8gZXNsaW50LWRpc2FibGUtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmaW5lZFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiB0cmFuc2l0aW9uRW5kVGVzdCgpIHtcclxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuUVVuaXQpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZW5kOiAndHJhbnNpdGlvbmVuZCdcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHRyYW5zaXRpb25FbmRFbXVsYXRvcihkdXJhdGlvbikge1xyXG4gICAgbGV0IGNhbGxlZCA9IGZhbHNlXHJcblxyXG4gICAgJCh0aGlzKS5vbmUoVXRpbC5UUkFOU0lUSU9OX0VORCwgKCkgPT4ge1xyXG4gICAgICBjYWxsZWQgPSB0cnVlXHJcbiAgICB9KVxyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAoIWNhbGxlZCkge1xyXG4gICAgICAgIFV0aWwudHJpZ2dlclRyYW5zaXRpb25FbmQodGhpcylcclxuICAgICAgfVxyXG4gICAgfSwgZHVyYXRpb24pXHJcblxyXG4gICAgcmV0dXJuIHRoaXNcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIHNldFRyYW5zaXRpb25FbmRTdXBwb3J0KCkge1xyXG4gICAgdHJhbnNpdGlvbiA9IHRyYW5zaXRpb25FbmRUZXN0KClcclxuXHJcbiAgICAkLmZuLmVtdWxhdGVUcmFuc2l0aW9uRW5kID0gdHJhbnNpdGlvbkVuZEVtdWxhdG9yXHJcblxyXG4gICAgaWYgKFV0aWwuc3VwcG9ydHNUcmFuc2l0aW9uRW5kKCkpIHtcclxuICAgICAgJC5ldmVudC5zcGVjaWFsW1V0aWwuVFJBTlNJVElPTl9FTkRdID0gZ2V0U3BlY2lhbFRyYW5zaXRpb25FbmRFdmVudCgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBlc2NhcGVJZChzZWxlY3Rvcikge1xyXG4gICAgLy8gV2UgZXNjYXBlIElEcyBpbiBjYXNlIG9mIHNwZWNpYWwgc2VsZWN0b3JzIChzZWxlY3RvciA9ICcjbXlJZDpzb21ldGhpbmcnKVxyXG4gICAgLy8gJC5lc2NhcGVTZWxlY3RvciBkb2VzIG5vdCBleGlzdCBpbiBqUXVlcnkgPCAzXHJcbiAgICBzZWxlY3RvciA9IHR5cGVvZiAkLmVzY2FwZVNlbGVjdG9yID09PSAnZnVuY3Rpb24nID8gJC5lc2NhcGVTZWxlY3RvcihzZWxlY3Rvcikuc3Vic3RyKDEpXHJcbiAgICAgIDogc2VsZWN0b3IucmVwbGFjZSgvKDp8XFwufFxcW3xcXF18LHw9fEApL2csICdcXFxcJDEnKVxyXG5cclxuICAgIHJldHVybiBzZWxlY3RvclxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgKiBQdWJsaWMgVXRpbCBBcGlcclxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAqL1xyXG5cclxuICBjb25zdCBVdGlsID0ge1xyXG5cclxuICAgIFRSQU5TSVRJT05fRU5EOiAnYnNUcmFuc2l0aW9uRW5kJyxcclxuXHJcbiAgICBnZXRVSUQocHJlZml4KSB7XHJcbiAgICAgIGRvIHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxyXG4gICAgICAgIHByZWZpeCArPSB+fihNYXRoLnJhbmRvbSgpICogTUFYX1VJRCkgLy8gXCJ+flwiIGFjdHMgbGlrZSBhIGZhc3RlciBNYXRoLmZsb29yKCkgaGVyZVxyXG4gICAgICB9IHdoaWxlIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcmVmaXgpKVxyXG4gICAgICByZXR1cm4gcHJlZml4XHJcbiAgICB9LFxyXG5cclxuICAgIGdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbWVudCkge1xyXG4gICAgICBsZXQgc2VsZWN0b3IgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS10YXJnZXQnKVxyXG4gICAgICBpZiAoIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSAnIycpIHtcclxuICAgICAgICBzZWxlY3RvciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJykgfHwgJydcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSWYgaXQncyBhbiBJRFxyXG4gICAgICBpZiAoc2VsZWN0b3IuY2hhckF0KDApID09PSAnIycpIHtcclxuICAgICAgICBzZWxlY3RvciA9IGVzY2FwZUlkKHNlbGVjdG9yKVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0ICRzZWxlY3RvciA9ICQoZG9jdW1lbnQpLmZpbmQoc2VsZWN0b3IpXHJcbiAgICAgICAgcmV0dXJuICRzZWxlY3Rvci5sZW5ndGggPiAwID8gc2VsZWN0b3IgOiBudWxsXHJcbiAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgIHJldHVybiBudWxsXHJcbiAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgcmVmbG93KGVsZW1lbnQpIHtcclxuICAgICAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0SGVpZ2h0XHJcbiAgICB9LFxyXG5cclxuICAgIHRyaWdnZXJUcmFuc2l0aW9uRW5kKGVsZW1lbnQpIHtcclxuICAgICAgJChlbGVtZW50KS50cmlnZ2VyKHRyYW5zaXRpb24uZW5kKVxyXG4gICAgfSxcclxuXHJcbiAgICBzdXBwb3J0c1RyYW5zaXRpb25FbmQoKSB7XHJcbiAgICAgIHJldHVybiBCb29sZWFuKHRyYW5zaXRpb24pXHJcbiAgICB9LFxyXG5cclxuICAgIGlzRWxlbWVudChvYmopIHtcclxuICAgICAgcmV0dXJuIChvYmpbMF0gfHwgb2JqKS5ub2RlVHlwZVxyXG4gICAgfSxcclxuXHJcbiAgICB0eXBlQ2hlY2tDb25maWcoY29tcG9uZW50TmFtZSwgY29uZmlnLCBjb25maWdUeXBlcykge1xyXG4gICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGNvbmZpZ1R5cGVzKSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb25maWdUeXBlcywgcHJvcGVydHkpKSB7XHJcbiAgICAgICAgICBjb25zdCBleHBlY3RlZFR5cGVzID0gY29uZmlnVHlwZXNbcHJvcGVydHldXHJcbiAgICAgICAgICBjb25zdCB2YWx1ZSAgICAgICAgID0gY29uZmlnW3Byb3BlcnR5XVxyXG4gICAgICAgICAgY29uc3QgdmFsdWVUeXBlICAgICA9IHZhbHVlICYmIFV0aWwuaXNFbGVtZW50KHZhbHVlKVxyXG4gICAgICAgICAgICA/ICdlbGVtZW50JyA6IHRvVHlwZSh2YWx1ZSlcclxuXHJcbiAgICAgICAgICBpZiAoIW5ldyBSZWdFeHAoZXhwZWN0ZWRUeXBlcykudGVzdCh2YWx1ZVR5cGUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICBgJHtjb21wb25lbnROYW1lLnRvVXBwZXJDYXNlKCl9OiBgICtcclxuICAgICAgICAgICAgICBgT3B0aW9uIFwiJHtwcm9wZXJ0eX1cIiBwcm92aWRlZCB0eXBlIFwiJHt2YWx1ZVR5cGV9XCIgYCArXHJcbiAgICAgICAgICAgICAgYGJ1dCBleHBlY3RlZCB0eXBlIFwiJHtleHBlY3RlZFR5cGVzfVwiLmApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRUcmFuc2l0aW9uRW5kU3VwcG9ydCgpXHJcblxyXG4gIHJldHVybiBVdGlsXHJcbn0pKCQpXHJcblxyXG5leHBvcnQgZGVmYXVsdCBVdGlsXHJcbiIsIlxyXG4vKiFcclxuICogQGZpbGVPdmVydmlldyBUb3VjaFN3aXBlIC0galF1ZXJ5IFBsdWdpblxyXG4gKiBAdmVyc2lvbiAxLjYuMThcclxuICpcclxuICogQGF1dGhvciBNYXR0IEJyeXNvbiBodHRwOi8vd3d3LmdpdGh1Yi5jb20vbWF0dGJyeXNvblxyXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXR0YnJ5c29uL1RvdWNoU3dpcGUtSnF1ZXJ5LVBsdWdpblxyXG4gKiBAc2VlIGh0dHA6Ly9sYWJzLnJhbXBpbnRlcmFjdGl2ZS5jby51ay90b3VjaFN3aXBlL1xyXG4gKiBAc2VlIGh0dHA6Ly9wbHVnaW5zLmpxdWVyeS5jb20vcHJvamVjdC90b3VjaFN3aXBlXHJcbiAqIEBsaWNlbnNlXHJcbiAqIENvcHlyaWdodCAoYykgMjAxMC0yMDE1IE1hdHQgQnJ5c29uXHJcbiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLlxyXG4gKlxyXG4gKi9cclxuIWZ1bmN0aW9uKGZhY3Rvcnkpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lLmFtZC5qUXVlcnk/ZGVmaW5lKFtcImpxdWVyeVwiXSxmYWN0b3J5KTpmYWN0b3J5KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzP3JlcXVpcmUoXCJqcXVlcnlcIik6alF1ZXJ5KX0oZnVuY3Rpb24oJCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gaW5pdChvcHRpb25zKXtyZXR1cm4hb3B0aW9uc3x8dm9pZCAwIT09b3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGx8fHZvaWQgMD09PW9wdGlvbnMuc3dpcGUmJnZvaWQgMD09PW9wdGlvbnMuc3dpcGVTdGF0dXN8fChvcHRpb25zLmFsbG93UGFnZVNjcm9sbD1OT05FKSx2b2lkIDAhPT1vcHRpb25zLmNsaWNrJiZ2b2lkIDA9PT1vcHRpb25zLnRhcCYmKG9wdGlvbnMudGFwPW9wdGlvbnMuY2xpY2spLG9wdGlvbnN8fChvcHRpb25zPXt9KSxvcHRpb25zPSQuZXh0ZW5kKHt9LCQuZm4uc3dpcGUuZGVmYXVsdHMsb3B0aW9ucyksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyICR0aGlzPSQodGhpcykscGx1Z2luPSR0aGlzLmRhdGEoUExVR0lOX05TKTtwbHVnaW58fChwbHVnaW49bmV3IFRvdWNoU3dpcGUodGhpcyxvcHRpb25zKSwkdGhpcy5kYXRhKFBMVUdJTl9OUyxwbHVnaW4pKX0pfWZ1bmN0aW9uIFRvdWNoU3dpcGUoZWxlbWVudCxvcHRpb25zKXtmdW5jdGlvbiB0b3VjaFN0YXJ0KGpxRXZlbnQpe2lmKCEoZ2V0VG91Y2hJblByb2dyZXNzKCl8fCQoanFFdmVudC50YXJnZXQpLmNsb3Nlc3Qob3B0aW9ucy5leGNsdWRlZEVsZW1lbnRzLCRlbGVtZW50KS5sZW5ndGg+MCkpe3ZhciBldmVudD1qcUV2ZW50Lm9yaWdpbmFsRXZlbnQ/anFFdmVudC5vcmlnaW5hbEV2ZW50OmpxRXZlbnQ7aWYoIWV2ZW50LnBvaW50ZXJUeXBlfHxcIm1vdXNlXCIhPWV2ZW50LnBvaW50ZXJUeXBlfHwwIT1vcHRpb25zLmZhbGxiYWNrVG9Nb3VzZUV2ZW50cyl7dmFyIHJldCx0b3VjaGVzPWV2ZW50LnRvdWNoZXMsZXZ0PXRvdWNoZXM/dG91Y2hlc1swXTpldmVudDtyZXR1cm4gcGhhc2U9UEhBU0VfU1RBUlQsdG91Y2hlcz9maW5nZXJDb3VudD10b3VjaGVzLmxlbmd0aDpvcHRpb25zLnByZXZlbnREZWZhdWx0RXZlbnRzIT09ITEmJmpxRXZlbnQucHJldmVudERlZmF1bHQoKSxkaXN0YW5jZT0wLGRpcmVjdGlvbj1udWxsLGN1cnJlbnREaXJlY3Rpb249bnVsbCxwaW5jaERpcmVjdGlvbj1udWxsLGR1cmF0aW9uPTAsc3RhcnRUb3VjaGVzRGlzdGFuY2U9MCxlbmRUb3VjaGVzRGlzdGFuY2U9MCxwaW5jaFpvb209MSxwaW5jaERpc3RhbmNlPTAsbWF4aW11bXNNYXA9Y3JlYXRlTWF4aW11bXNEYXRhKCksY2FuY2VsTXVsdGlGaW5nZXJSZWxlYXNlKCksY3JlYXRlRmluZ2VyRGF0YSgwLGV2dCksIXRvdWNoZXN8fGZpbmdlckNvdW50PT09b3B0aW9ucy5maW5nZXJzfHxvcHRpb25zLmZpbmdlcnM9PT1BTExfRklOR0VSU3x8aGFzUGluY2hlcygpPyhzdGFydFRpbWU9Z2V0VGltZVN0YW1wKCksMj09ZmluZ2VyQ291bnQmJihjcmVhdGVGaW5nZXJEYXRhKDEsdG91Y2hlc1sxXSksc3RhcnRUb3VjaGVzRGlzdGFuY2U9ZW5kVG91Y2hlc0Rpc3RhbmNlPWNhbGN1bGF0ZVRvdWNoZXNEaXN0YW5jZShmaW5nZXJEYXRhWzBdLnN0YXJ0LGZpbmdlckRhdGFbMV0uc3RhcnQpKSwob3B0aW9ucy5zd2lwZVN0YXR1c3x8b3B0aW9ucy5waW5jaFN0YXR1cykmJihyZXQ9dHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2UpKSk6cmV0PSExLHJldD09PSExPyhwaGFzZT1QSEFTRV9DQU5DRUwsdHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2UpLHJldCk6KG9wdGlvbnMuaG9sZCYmKGhvbGRUaW1lb3V0PXNldFRpbWVvdXQoJC5wcm94eShmdW5jdGlvbigpeyRlbGVtZW50LnRyaWdnZXIoXCJob2xkXCIsW2V2ZW50LnRhcmdldF0pLG9wdGlvbnMuaG9sZCYmKHJldD1vcHRpb25zLmhvbGQuY2FsbCgkZWxlbWVudCxldmVudCxldmVudC50YXJnZXQpKX0sdGhpcyksb3B0aW9ucy5sb25nVGFwVGhyZXNob2xkKSksc2V0VG91Y2hJblByb2dyZXNzKCEwKSxudWxsKX19fWZ1bmN0aW9uIHRvdWNoTW92ZShqcUV2ZW50KXt2YXIgZXZlbnQ9anFFdmVudC5vcmlnaW5hbEV2ZW50P2pxRXZlbnQub3JpZ2luYWxFdmVudDpqcUV2ZW50O2lmKHBoYXNlIT09UEhBU0VfRU5EJiZwaGFzZSE9PVBIQVNFX0NBTkNFTCYmIWluTXVsdGlGaW5nZXJSZWxlYXNlKCkpe3ZhciByZXQsdG91Y2hlcz1ldmVudC50b3VjaGVzLGV2dD10b3VjaGVzP3RvdWNoZXNbMF06ZXZlbnQsY3VycmVudEZpbmdlcj11cGRhdGVGaW5nZXJEYXRhKGV2dCk7aWYoZW5kVGltZT1nZXRUaW1lU3RhbXAoKSx0b3VjaGVzJiYoZmluZ2VyQ291bnQ9dG91Y2hlcy5sZW5ndGgpLG9wdGlvbnMuaG9sZCYmY2xlYXJUaW1lb3V0KGhvbGRUaW1lb3V0KSxwaGFzZT1QSEFTRV9NT1ZFLDI9PWZpbmdlckNvdW50JiYoMD09c3RhcnRUb3VjaGVzRGlzdGFuY2U/KGNyZWF0ZUZpbmdlckRhdGEoMSx0b3VjaGVzWzFdKSxzdGFydFRvdWNoZXNEaXN0YW5jZT1lbmRUb3VjaGVzRGlzdGFuY2U9Y2FsY3VsYXRlVG91Y2hlc0Rpc3RhbmNlKGZpbmdlckRhdGFbMF0uc3RhcnQsZmluZ2VyRGF0YVsxXS5zdGFydCkpOih1cGRhdGVGaW5nZXJEYXRhKHRvdWNoZXNbMV0pLGVuZFRvdWNoZXNEaXN0YW5jZT1jYWxjdWxhdGVUb3VjaGVzRGlzdGFuY2UoZmluZ2VyRGF0YVswXS5lbmQsZmluZ2VyRGF0YVsxXS5lbmQpLHBpbmNoRGlyZWN0aW9uPWNhbGN1bGF0ZVBpbmNoRGlyZWN0aW9uKGZpbmdlckRhdGFbMF0uZW5kLGZpbmdlckRhdGFbMV0uZW5kKSkscGluY2hab29tPWNhbGN1bGF0ZVBpbmNoWm9vbShzdGFydFRvdWNoZXNEaXN0YW5jZSxlbmRUb3VjaGVzRGlzdGFuY2UpLHBpbmNoRGlzdGFuY2U9TWF0aC5hYnMoc3RhcnRUb3VjaGVzRGlzdGFuY2UtZW5kVG91Y2hlc0Rpc3RhbmNlKSksZmluZ2VyQ291bnQ9PT1vcHRpb25zLmZpbmdlcnN8fG9wdGlvbnMuZmluZ2Vycz09PUFMTF9GSU5HRVJTfHwhdG91Y2hlc3x8aGFzUGluY2hlcygpKXtpZihkaXJlY3Rpb249Y2FsY3VsYXRlRGlyZWN0aW9uKGN1cnJlbnRGaW5nZXIuc3RhcnQsY3VycmVudEZpbmdlci5lbmQpLGN1cnJlbnREaXJlY3Rpb249Y2FsY3VsYXRlRGlyZWN0aW9uKGN1cnJlbnRGaW5nZXIubGFzdCxjdXJyZW50RmluZ2VyLmVuZCksdmFsaWRhdGVEZWZhdWx0RXZlbnQoanFFdmVudCxjdXJyZW50RGlyZWN0aW9uKSxkaXN0YW5jZT1jYWxjdWxhdGVEaXN0YW5jZShjdXJyZW50RmluZ2VyLnN0YXJ0LGN1cnJlbnRGaW5nZXIuZW5kKSxkdXJhdGlvbj1jYWxjdWxhdGVEdXJhdGlvbigpLHNldE1heERpc3RhbmNlKGRpcmVjdGlvbixkaXN0YW5jZSkscmV0PXRyaWdnZXJIYW5kbGVyKGV2ZW50LHBoYXNlKSwhb3B0aW9ucy50cmlnZ2VyT25Ub3VjaEVuZHx8b3B0aW9ucy50cmlnZ2VyT25Ub3VjaExlYXZlKXt2YXIgaW5Cb3VuZHM9ITA7aWYob3B0aW9ucy50cmlnZ2VyT25Ub3VjaExlYXZlKXt2YXIgYm91bmRzPWdldGJvdW5kcyh0aGlzKTtpbkJvdW5kcz1pc0luQm91bmRzKGN1cnJlbnRGaW5nZXIuZW5kLGJvdW5kcyl9IW9wdGlvbnMudHJpZ2dlck9uVG91Y2hFbmQmJmluQm91bmRzP3BoYXNlPWdldE5leHRQaGFzZShQSEFTRV9NT1ZFKTpvcHRpb25zLnRyaWdnZXJPblRvdWNoTGVhdmUmJiFpbkJvdW5kcyYmKHBoYXNlPWdldE5leHRQaGFzZShQSEFTRV9FTkQpKSxwaGFzZSE9UEhBU0VfQ0FOQ0VMJiZwaGFzZSE9UEhBU0VfRU5EfHx0cmlnZ2VySGFuZGxlcihldmVudCxwaGFzZSl9fWVsc2UgcGhhc2U9UEhBU0VfQ0FOQ0VMLHRyaWdnZXJIYW5kbGVyKGV2ZW50LHBoYXNlKTtyZXQ9PT0hMSYmKHBoYXNlPVBIQVNFX0NBTkNFTCx0cmlnZ2VySGFuZGxlcihldmVudCxwaGFzZSkpfX1mdW5jdGlvbiB0b3VjaEVuZChqcUV2ZW50KXt2YXIgZXZlbnQ9anFFdmVudC5vcmlnaW5hbEV2ZW50P2pxRXZlbnQub3JpZ2luYWxFdmVudDpqcUV2ZW50LHRvdWNoZXM9ZXZlbnQudG91Y2hlcztpZih0b3VjaGVzKXtpZih0b3VjaGVzLmxlbmd0aCYmIWluTXVsdGlGaW5nZXJSZWxlYXNlKCkpcmV0dXJuIHN0YXJ0TXVsdGlGaW5nZXJSZWxlYXNlKGV2ZW50KSwhMDtpZih0b3VjaGVzLmxlbmd0aCYmaW5NdWx0aUZpbmdlclJlbGVhc2UoKSlyZXR1cm4hMH1yZXR1cm4gaW5NdWx0aUZpbmdlclJlbGVhc2UoKSYmKGZpbmdlckNvdW50PWZpbmdlckNvdW50QXRSZWxlYXNlKSxlbmRUaW1lPWdldFRpbWVTdGFtcCgpLGR1cmF0aW9uPWNhbGN1bGF0ZUR1cmF0aW9uKCksZGlkU3dpcGVCYWNrVG9DYW5jZWwoKXx8IXZhbGlkYXRlU3dpcGVEaXN0YW5jZSgpPyhwaGFzZT1QSEFTRV9DQU5DRUwsdHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2UpKTpvcHRpb25zLnRyaWdnZXJPblRvdWNoRW5kfHxvcHRpb25zLnRyaWdnZXJPblRvdWNoRW5kPT09ITEmJnBoYXNlPT09UEhBU0VfTU9WRT8ob3B0aW9ucy5wcmV2ZW50RGVmYXVsdEV2ZW50cyE9PSExJiZqcUV2ZW50LnByZXZlbnREZWZhdWx0KCkscGhhc2U9UEhBU0VfRU5ELHRyaWdnZXJIYW5kbGVyKGV2ZW50LHBoYXNlKSk6IW9wdGlvbnMudHJpZ2dlck9uVG91Y2hFbmQmJmhhc1RhcCgpPyhwaGFzZT1QSEFTRV9FTkQsdHJpZ2dlckhhbmRsZXJGb3JHZXN0dXJlKGV2ZW50LHBoYXNlLFRBUCkpOnBoYXNlPT09UEhBU0VfTU9WRSYmKHBoYXNlPVBIQVNFX0NBTkNFTCx0cmlnZ2VySGFuZGxlcihldmVudCxwaGFzZSkpLHNldFRvdWNoSW5Qcm9ncmVzcyghMSksbnVsbH1mdW5jdGlvbiB0b3VjaENhbmNlbCgpe2ZpbmdlckNvdW50PTAsZW5kVGltZT0wLHN0YXJ0VGltZT0wLHN0YXJ0VG91Y2hlc0Rpc3RhbmNlPTAsZW5kVG91Y2hlc0Rpc3RhbmNlPTAscGluY2hab29tPTEsY2FuY2VsTXVsdGlGaW5nZXJSZWxlYXNlKCksc2V0VG91Y2hJblByb2dyZXNzKCExKX1mdW5jdGlvbiB0b3VjaExlYXZlKGpxRXZlbnQpe3ZhciBldmVudD1qcUV2ZW50Lm9yaWdpbmFsRXZlbnQ/anFFdmVudC5vcmlnaW5hbEV2ZW50OmpxRXZlbnQ7b3B0aW9ucy50cmlnZ2VyT25Ub3VjaExlYXZlJiYocGhhc2U9Z2V0TmV4dFBoYXNlKFBIQVNFX0VORCksdHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2UpKX1mdW5jdGlvbiByZW1vdmVMaXN0ZW5lcnMoKXskZWxlbWVudC51bmJpbmQoU1RBUlRfRVYsdG91Y2hTdGFydCksJGVsZW1lbnQudW5iaW5kKENBTkNFTF9FVix0b3VjaENhbmNlbCksJGVsZW1lbnQudW5iaW5kKE1PVkVfRVYsdG91Y2hNb3ZlKSwkZWxlbWVudC51bmJpbmQoRU5EX0VWLHRvdWNoRW5kKSxMRUFWRV9FViYmJGVsZW1lbnQudW5iaW5kKExFQVZFX0VWLHRvdWNoTGVhdmUpLHNldFRvdWNoSW5Qcm9ncmVzcyghMSl9ZnVuY3Rpb24gZ2V0TmV4dFBoYXNlKGN1cnJlbnRQaGFzZSl7dmFyIG5leHRQaGFzZT1jdXJyZW50UGhhc2UsdmFsaWRUaW1lPXZhbGlkYXRlU3dpcGVUaW1lKCksdmFsaWREaXN0YW5jZT12YWxpZGF0ZVN3aXBlRGlzdGFuY2UoKSxkaWRDYW5jZWw9ZGlkU3dpcGVCYWNrVG9DYW5jZWwoKTtyZXR1cm4hdmFsaWRUaW1lfHxkaWRDYW5jZWw/bmV4dFBoYXNlPVBIQVNFX0NBTkNFTDohdmFsaWREaXN0YW5jZXx8Y3VycmVudFBoYXNlIT1QSEFTRV9NT1ZFfHxvcHRpb25zLnRyaWdnZXJPblRvdWNoRW5kJiYhb3B0aW9ucy50cmlnZ2VyT25Ub3VjaExlYXZlPyF2YWxpZERpc3RhbmNlJiZjdXJyZW50UGhhc2U9PVBIQVNFX0VORCYmb3B0aW9ucy50cmlnZ2VyT25Ub3VjaExlYXZlJiYobmV4dFBoYXNlPVBIQVNFX0NBTkNFTCk6bmV4dFBoYXNlPVBIQVNFX0VORCxuZXh0UGhhc2V9ZnVuY3Rpb24gdHJpZ2dlckhhbmRsZXIoZXZlbnQscGhhc2Upe3ZhciByZXQsdG91Y2hlcz1ldmVudC50b3VjaGVzO3JldHVybihkaWRTd2lwZSgpfHxoYXNTd2lwZXMoKSkmJihyZXQ9dHJpZ2dlckhhbmRsZXJGb3JHZXN0dXJlKGV2ZW50LHBoYXNlLFNXSVBFKSksKGRpZFBpbmNoKCl8fGhhc1BpbmNoZXMoKSkmJnJldCE9PSExJiYocmV0PXRyaWdnZXJIYW5kbGVyRm9yR2VzdHVyZShldmVudCxwaGFzZSxQSU5DSCkpLGRpZERvdWJsZVRhcCgpJiZyZXQhPT0hMT9yZXQ9dHJpZ2dlckhhbmRsZXJGb3JHZXN0dXJlKGV2ZW50LHBoYXNlLERPVUJMRV9UQVApOmRpZExvbmdUYXAoKSYmcmV0IT09ITE/cmV0PXRyaWdnZXJIYW5kbGVyRm9yR2VzdHVyZShldmVudCxwaGFzZSxMT05HX1RBUCk6ZGlkVGFwKCkmJnJldCE9PSExJiYocmV0PXRyaWdnZXJIYW5kbGVyRm9yR2VzdHVyZShldmVudCxwaGFzZSxUQVApKSxwaGFzZT09PVBIQVNFX0NBTkNFTCYmdG91Y2hDYW5jZWwoZXZlbnQpLHBoYXNlPT09UEhBU0VfRU5EJiYodG91Y2hlcz90b3VjaGVzLmxlbmd0aHx8dG91Y2hDYW5jZWwoZXZlbnQpOnRvdWNoQ2FuY2VsKGV2ZW50KSkscmV0fWZ1bmN0aW9uIHRyaWdnZXJIYW5kbGVyRm9yR2VzdHVyZShldmVudCxwaGFzZSxnZXN0dXJlKXt2YXIgcmV0O2lmKGdlc3R1cmU9PVNXSVBFKXtpZigkZWxlbWVudC50cmlnZ2VyKFwic3dpcGVTdGF0dXNcIixbcGhhc2UsZGlyZWN0aW9ufHxudWxsLGRpc3RhbmNlfHwwLGR1cmF0aW9ufHwwLGZpbmdlckNvdW50LGZpbmdlckRhdGEsY3VycmVudERpcmVjdGlvbl0pLG9wdGlvbnMuc3dpcGVTdGF0dXMmJihyZXQ9b3B0aW9ucy5zd2lwZVN0YXR1cy5jYWxsKCRlbGVtZW50LGV2ZW50LHBoYXNlLGRpcmVjdGlvbnx8bnVsbCxkaXN0YW5jZXx8MCxkdXJhdGlvbnx8MCxmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb24pLHJldD09PSExKSlyZXR1cm4hMTtpZihwaGFzZT09UEhBU0VfRU5EJiZ2YWxpZGF0ZVN3aXBlKCkpe2lmKGNsZWFyVGltZW91dChzaW5nbGVUYXBUaW1lb3V0KSxjbGVhclRpbWVvdXQoaG9sZFRpbWVvdXQpLCRlbGVtZW50LnRyaWdnZXIoXCJzd2lwZVwiLFtkaXJlY3Rpb24sZGlzdGFuY2UsZHVyYXRpb24sZmluZ2VyQ291bnQsZmluZ2VyRGF0YSxjdXJyZW50RGlyZWN0aW9uXSksb3B0aW9ucy5zd2lwZSYmKHJldD1vcHRpb25zLnN3aXBlLmNhbGwoJGVsZW1lbnQsZXZlbnQsZGlyZWN0aW9uLGRpc3RhbmNlLGR1cmF0aW9uLGZpbmdlckNvdW50LGZpbmdlckRhdGEsY3VycmVudERpcmVjdGlvbikscmV0PT09ITEpKXJldHVybiExO3N3aXRjaChkaXJlY3Rpb24pe2Nhc2UgTEVGVDokZWxlbWVudC50cmlnZ2VyKFwic3dpcGVMZWZ0XCIsW2RpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb25dKSxvcHRpb25zLnN3aXBlTGVmdCYmKHJldD1vcHRpb25zLnN3aXBlTGVmdC5jYWxsKCRlbGVtZW50LGV2ZW50LGRpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb24pKTticmVhaztjYXNlIFJJR0hUOiRlbGVtZW50LnRyaWdnZXIoXCJzd2lwZVJpZ2h0XCIsW2RpcmVjdGlvbixkaXN0YW5jZSxkdXJhdGlvbixmaW5nZXJDb3VudCxmaW5nZXJEYXRhLGN1cnJlbnREaXJlY3Rpb25dKSxvcHRpb25zLnN3aXBlUmlnaHQmJihyZXQ9b3B0aW9ucy5zd2lwZVJpZ2h0LmNhbGwoJGVsZW1lbnQsZXZlbnQsZGlyZWN0aW9uLGRpc3RhbmNlLGR1cmF0aW9uLGZpbmdlckNvdW50LGZpbmdlckRhdGEsY3VycmVudERpcmVjdGlvbikpO2JyZWFrO2Nhc2UgVVA6JGVsZW1lbnQudHJpZ2dlcihcInN3aXBlVXBcIixbZGlyZWN0aW9uLGRpc3RhbmNlLGR1cmF0aW9uLGZpbmdlckNvdW50LGZpbmdlckRhdGEsY3VycmVudERpcmVjdGlvbl0pLG9wdGlvbnMuc3dpcGVVcCYmKHJldD1vcHRpb25zLnN3aXBlVXAuY2FsbCgkZWxlbWVudCxldmVudCxkaXJlY3Rpb24sZGlzdGFuY2UsZHVyYXRpb24sZmluZ2VyQ291bnQsZmluZ2VyRGF0YSxjdXJyZW50RGlyZWN0aW9uKSk7YnJlYWs7Y2FzZSBET1dOOiRlbGVtZW50LnRyaWdnZXIoXCJzd2lwZURvd25cIixbZGlyZWN0aW9uLGRpc3RhbmNlLGR1cmF0aW9uLGZpbmdlckNvdW50LGZpbmdlckRhdGEsY3VycmVudERpcmVjdGlvbl0pLG9wdGlvbnMuc3dpcGVEb3duJiYocmV0PW9wdGlvbnMuc3dpcGVEb3duLmNhbGwoJGVsZW1lbnQsZXZlbnQsZGlyZWN0aW9uLGRpc3RhbmNlLGR1cmF0aW9uLGZpbmdlckNvdW50LGZpbmdlckRhdGEsY3VycmVudERpcmVjdGlvbikpfX19aWYoZ2VzdHVyZT09UElOQ0gpe2lmKCRlbGVtZW50LnRyaWdnZXIoXCJwaW5jaFN0YXR1c1wiLFtwaGFzZSxwaW5jaERpcmVjdGlvbnx8bnVsbCxwaW5jaERpc3RhbmNlfHwwLGR1cmF0aW9ufHwwLGZpbmdlckNvdW50LHBpbmNoWm9vbSxmaW5nZXJEYXRhXSksb3B0aW9ucy5waW5jaFN0YXR1cyYmKHJldD1vcHRpb25zLnBpbmNoU3RhdHVzLmNhbGwoJGVsZW1lbnQsZXZlbnQscGhhc2UscGluY2hEaXJlY3Rpb258fG51bGwscGluY2hEaXN0YW5jZXx8MCxkdXJhdGlvbnx8MCxmaW5nZXJDb3VudCxwaW5jaFpvb20sZmluZ2VyRGF0YSkscmV0PT09ITEpKXJldHVybiExO2lmKHBoYXNlPT1QSEFTRV9FTkQmJnZhbGlkYXRlUGluY2goKSlzd2l0Y2gocGluY2hEaXJlY3Rpb24pe2Nhc2UgSU46JGVsZW1lbnQudHJpZ2dlcihcInBpbmNoSW5cIixbcGluY2hEaXJlY3Rpb258fG51bGwscGluY2hEaXN0YW5jZXx8MCxkdXJhdGlvbnx8MCxmaW5nZXJDb3VudCxwaW5jaFpvb20sZmluZ2VyRGF0YV0pLG9wdGlvbnMucGluY2hJbiYmKHJldD1vcHRpb25zLnBpbmNoSW4uY2FsbCgkZWxlbWVudCxldmVudCxwaW5jaERpcmVjdGlvbnx8bnVsbCxwaW5jaERpc3RhbmNlfHwwLGR1cmF0aW9ufHwwLGZpbmdlckNvdW50LHBpbmNoWm9vbSxmaW5nZXJEYXRhKSk7YnJlYWs7Y2FzZSBPVVQ6JGVsZW1lbnQudHJpZ2dlcihcInBpbmNoT3V0XCIsW3BpbmNoRGlyZWN0aW9ufHxudWxsLHBpbmNoRGlzdGFuY2V8fDAsZHVyYXRpb258fDAsZmluZ2VyQ291bnQscGluY2hab29tLGZpbmdlckRhdGFdKSxvcHRpb25zLnBpbmNoT3V0JiYocmV0PW9wdGlvbnMucGluY2hPdXQuY2FsbCgkZWxlbWVudCxldmVudCxwaW5jaERpcmVjdGlvbnx8bnVsbCxwaW5jaERpc3RhbmNlfHwwLGR1cmF0aW9ufHwwLGZpbmdlckNvdW50LHBpbmNoWm9vbSxmaW5nZXJEYXRhKSl9fXJldHVybiBnZXN0dXJlPT1UQVA/cGhhc2UhPT1QSEFTRV9DQU5DRUwmJnBoYXNlIT09UEhBU0VfRU5EfHwoY2xlYXJUaW1lb3V0KHNpbmdsZVRhcFRpbWVvdXQpLGNsZWFyVGltZW91dChob2xkVGltZW91dCksaGFzRG91YmxlVGFwKCkmJiFpbkRvdWJsZVRhcCgpPyhkb3VibGVUYXBTdGFydFRpbWU9Z2V0VGltZVN0YW1wKCksc2luZ2xlVGFwVGltZW91dD1zZXRUaW1lb3V0KCQucHJveHkoZnVuY3Rpb24oKXtkb3VibGVUYXBTdGFydFRpbWU9bnVsbCwkZWxlbWVudC50cmlnZ2VyKFwidGFwXCIsW2V2ZW50LnRhcmdldF0pLG9wdGlvbnMudGFwJiYocmV0PW9wdGlvbnMudGFwLmNhbGwoJGVsZW1lbnQsZXZlbnQsZXZlbnQudGFyZ2V0KSl9LHRoaXMpLG9wdGlvbnMuZG91YmxlVGFwVGhyZXNob2xkKSk6KGRvdWJsZVRhcFN0YXJ0VGltZT1udWxsLCRlbGVtZW50LnRyaWdnZXIoXCJ0YXBcIixbZXZlbnQudGFyZ2V0XSksb3B0aW9ucy50YXAmJihyZXQ9b3B0aW9ucy50YXAuY2FsbCgkZWxlbWVudCxldmVudCxldmVudC50YXJnZXQpKSkpOmdlc3R1cmU9PURPVUJMRV9UQVA/cGhhc2UhPT1QSEFTRV9DQU5DRUwmJnBoYXNlIT09UEhBU0VfRU5EfHwoY2xlYXJUaW1lb3V0KHNpbmdsZVRhcFRpbWVvdXQpLGNsZWFyVGltZW91dChob2xkVGltZW91dCksZG91YmxlVGFwU3RhcnRUaW1lPW51bGwsJGVsZW1lbnQudHJpZ2dlcihcImRvdWJsZXRhcFwiLFtldmVudC50YXJnZXRdKSxvcHRpb25zLmRvdWJsZVRhcCYmKHJldD1vcHRpb25zLmRvdWJsZVRhcC5jYWxsKCRlbGVtZW50LGV2ZW50LGV2ZW50LnRhcmdldCkpKTpnZXN0dXJlPT1MT05HX1RBUCYmKHBoYXNlIT09UEhBU0VfQ0FOQ0VMJiZwaGFzZSE9PVBIQVNFX0VORHx8KGNsZWFyVGltZW91dChzaW5nbGVUYXBUaW1lb3V0KSxkb3VibGVUYXBTdGFydFRpbWU9bnVsbCwkZWxlbWVudC50cmlnZ2VyKFwibG9uZ3RhcFwiLFtldmVudC50YXJnZXRdKSxvcHRpb25zLmxvbmdUYXAmJihyZXQ9b3B0aW9ucy5sb25nVGFwLmNhbGwoJGVsZW1lbnQsZXZlbnQsZXZlbnQudGFyZ2V0KSkpKSxyZXR9ZnVuY3Rpb24gdmFsaWRhdGVTd2lwZURpc3RhbmNlKCl7dmFyIHZhbGlkPSEwO3JldHVybiBudWxsIT09b3B0aW9ucy50aHJlc2hvbGQmJih2YWxpZD1kaXN0YW5jZT49b3B0aW9ucy50aHJlc2hvbGQpLHZhbGlkfWZ1bmN0aW9uIGRpZFN3aXBlQmFja1RvQ2FuY2VsKCl7dmFyIGNhbmNlbGxlZD0hMTtyZXR1cm4gbnVsbCE9PW9wdGlvbnMuY2FuY2VsVGhyZXNob2xkJiZudWxsIT09ZGlyZWN0aW9uJiYoY2FuY2VsbGVkPWdldE1heERpc3RhbmNlKGRpcmVjdGlvbiktZGlzdGFuY2U+PW9wdGlvbnMuY2FuY2VsVGhyZXNob2xkKSxjYW5jZWxsZWR9ZnVuY3Rpb24gdmFsaWRhdGVQaW5jaERpc3RhbmNlKCl7cmV0dXJuIG51bGwhPT1vcHRpb25zLnBpbmNoVGhyZXNob2xkP3BpbmNoRGlzdGFuY2U+PW9wdGlvbnMucGluY2hUaHJlc2hvbGQ6ITB9ZnVuY3Rpb24gdmFsaWRhdGVTd2lwZVRpbWUoKXt2YXIgcmVzdWx0O3JldHVybiByZXN1bHQ9b3B0aW9ucy5tYXhUaW1lVGhyZXNob2xkPyEoZHVyYXRpb24+PW9wdGlvbnMubWF4VGltZVRocmVzaG9sZCk6ITB9ZnVuY3Rpb24gdmFsaWRhdGVEZWZhdWx0RXZlbnQoanFFdmVudCxkaXJlY3Rpb24pe2lmKG9wdGlvbnMucHJldmVudERlZmF1bHRFdmVudHMhPT0hMSlpZihvcHRpb25zLmFsbG93UGFnZVNjcm9sbD09PU5PTkUpanFFdmVudC5wcmV2ZW50RGVmYXVsdCgpO2Vsc2V7dmFyIGF1dG89b3B0aW9ucy5hbGxvd1BhZ2VTY3JvbGw9PT1BVVRPO3N3aXRjaChkaXJlY3Rpb24pe2Nhc2UgTEVGVDoob3B0aW9ucy5zd2lwZUxlZnQmJmF1dG98fCFhdXRvJiZvcHRpb25zLmFsbG93UGFnZVNjcm9sbCE9SE9SSVpPTlRBTCkmJmpxRXZlbnQucHJldmVudERlZmF1bHQoKTticmVhaztjYXNlIFJJR0hUOihvcHRpb25zLnN3aXBlUmlnaHQmJmF1dG98fCFhdXRvJiZvcHRpb25zLmFsbG93UGFnZVNjcm9sbCE9SE9SSVpPTlRBTCkmJmpxRXZlbnQucHJldmVudERlZmF1bHQoKTticmVhaztjYXNlIFVQOihvcHRpb25zLnN3aXBlVXAmJmF1dG98fCFhdXRvJiZvcHRpb25zLmFsbG93UGFnZVNjcm9sbCE9VkVSVElDQUwpJiZqcUV2ZW50LnByZXZlbnREZWZhdWx0KCk7YnJlYWs7Y2FzZSBET1dOOihvcHRpb25zLnN3aXBlRG93biYmYXV0b3x8IWF1dG8mJm9wdGlvbnMuYWxsb3dQYWdlU2Nyb2xsIT1WRVJUSUNBTCkmJmpxRXZlbnQucHJldmVudERlZmF1bHQoKTticmVhaztjYXNlIE5PTkU6fX19ZnVuY3Rpb24gdmFsaWRhdGVQaW5jaCgpe3ZhciBoYXNDb3JyZWN0RmluZ2VyQ291bnQ9dmFsaWRhdGVGaW5nZXJzKCksaGFzRW5kUG9pbnQ9dmFsaWRhdGVFbmRQb2ludCgpLGhhc0NvcnJlY3REaXN0YW5jZT12YWxpZGF0ZVBpbmNoRGlzdGFuY2UoKTtyZXR1cm4gaGFzQ29ycmVjdEZpbmdlckNvdW50JiZoYXNFbmRQb2ludCYmaGFzQ29ycmVjdERpc3RhbmNlfWZ1bmN0aW9uIGhhc1BpbmNoZXMoKXtyZXR1cm4hIShvcHRpb25zLnBpbmNoU3RhdHVzfHxvcHRpb25zLnBpbmNoSW58fG9wdGlvbnMucGluY2hPdXQpfWZ1bmN0aW9uIGRpZFBpbmNoKCl7cmV0dXJuISghdmFsaWRhdGVQaW5jaCgpfHwhaGFzUGluY2hlcygpKX1mdW5jdGlvbiB2YWxpZGF0ZVN3aXBlKCl7dmFyIGhhc1ZhbGlkVGltZT12YWxpZGF0ZVN3aXBlVGltZSgpLGhhc1ZhbGlkRGlzdGFuY2U9dmFsaWRhdGVTd2lwZURpc3RhbmNlKCksaGFzQ29ycmVjdEZpbmdlckNvdW50PXZhbGlkYXRlRmluZ2VycygpLGhhc0VuZFBvaW50PXZhbGlkYXRlRW5kUG9pbnQoKSxkaWRDYW5jZWw9ZGlkU3dpcGVCYWNrVG9DYW5jZWwoKSx2YWxpZD0hZGlkQ2FuY2VsJiZoYXNFbmRQb2ludCYmaGFzQ29ycmVjdEZpbmdlckNvdW50JiZoYXNWYWxpZERpc3RhbmNlJiZoYXNWYWxpZFRpbWU7cmV0dXJuIHZhbGlkfWZ1bmN0aW9uIGhhc1N3aXBlcygpe3JldHVybiEhKG9wdGlvbnMuc3dpcGV8fG9wdGlvbnMuc3dpcGVTdGF0dXN8fG9wdGlvbnMuc3dpcGVMZWZ0fHxvcHRpb25zLnN3aXBlUmlnaHR8fG9wdGlvbnMuc3dpcGVVcHx8b3B0aW9ucy5zd2lwZURvd24pfWZ1bmN0aW9uIGRpZFN3aXBlKCl7cmV0dXJuISghdmFsaWRhdGVTd2lwZSgpfHwhaGFzU3dpcGVzKCkpfWZ1bmN0aW9uIHZhbGlkYXRlRmluZ2Vycygpe3JldHVybiBmaW5nZXJDb3VudD09PW9wdGlvbnMuZmluZ2Vyc3x8b3B0aW9ucy5maW5nZXJzPT09QUxMX0ZJTkdFUlN8fCFTVVBQT1JUU19UT1VDSH1mdW5jdGlvbiB2YWxpZGF0ZUVuZFBvaW50KCl7cmV0dXJuIDAhPT1maW5nZXJEYXRhWzBdLmVuZC54fWZ1bmN0aW9uIGhhc1RhcCgpe3JldHVybiEhb3B0aW9ucy50YXB9ZnVuY3Rpb24gaGFzRG91YmxlVGFwKCl7cmV0dXJuISFvcHRpb25zLmRvdWJsZVRhcH1mdW5jdGlvbiBoYXNMb25nVGFwKCl7cmV0dXJuISFvcHRpb25zLmxvbmdUYXB9ZnVuY3Rpb24gdmFsaWRhdGVEb3VibGVUYXAoKXtpZihudWxsPT1kb3VibGVUYXBTdGFydFRpbWUpcmV0dXJuITE7dmFyIG5vdz1nZXRUaW1lU3RhbXAoKTtyZXR1cm4gaGFzRG91YmxlVGFwKCkmJm5vdy1kb3VibGVUYXBTdGFydFRpbWU8PW9wdGlvbnMuZG91YmxlVGFwVGhyZXNob2xkfWZ1bmN0aW9uIGluRG91YmxlVGFwKCl7cmV0dXJuIHZhbGlkYXRlRG91YmxlVGFwKCl9ZnVuY3Rpb24gdmFsaWRhdGVUYXAoKXtyZXR1cm4oMT09PWZpbmdlckNvdW50fHwhU1VQUE9SVFNfVE9VQ0gpJiYoaXNOYU4oZGlzdGFuY2UpfHxkaXN0YW5jZTxvcHRpb25zLnRocmVzaG9sZCl9ZnVuY3Rpb24gdmFsaWRhdGVMb25nVGFwKCl7cmV0dXJuIGR1cmF0aW9uPm9wdGlvbnMubG9uZ1RhcFRocmVzaG9sZCYmRE9VQkxFX1RBUF9USFJFU0hPTEQ+ZGlzdGFuY2V9ZnVuY3Rpb24gZGlkVGFwKCl7cmV0dXJuISghdmFsaWRhdGVUYXAoKXx8IWhhc1RhcCgpKX1mdW5jdGlvbiBkaWREb3VibGVUYXAoKXtyZXR1cm4hKCF2YWxpZGF0ZURvdWJsZVRhcCgpfHwhaGFzRG91YmxlVGFwKCkpfWZ1bmN0aW9uIGRpZExvbmdUYXAoKXtyZXR1cm4hKCF2YWxpZGF0ZUxvbmdUYXAoKXx8IWhhc0xvbmdUYXAoKSl9ZnVuY3Rpb24gc3RhcnRNdWx0aUZpbmdlclJlbGVhc2UoZXZlbnQpe3ByZXZpb3VzVG91Y2hFbmRUaW1lPWdldFRpbWVTdGFtcCgpLGZpbmdlckNvdW50QXRSZWxlYXNlPWV2ZW50LnRvdWNoZXMubGVuZ3RoKzF9ZnVuY3Rpb24gY2FuY2VsTXVsdGlGaW5nZXJSZWxlYXNlKCl7cHJldmlvdXNUb3VjaEVuZFRpbWU9MCxmaW5nZXJDb3VudEF0UmVsZWFzZT0wfWZ1bmN0aW9uIGluTXVsdGlGaW5nZXJSZWxlYXNlKCl7dmFyIHdpdGhpblRocmVzaG9sZD0hMTtpZihwcmV2aW91c1RvdWNoRW5kVGltZSl7dmFyIGRpZmY9Z2V0VGltZVN0YW1wKCktcHJldmlvdXNUb3VjaEVuZFRpbWU7ZGlmZjw9b3B0aW9ucy5maW5nZXJSZWxlYXNlVGhyZXNob2xkJiYod2l0aGluVGhyZXNob2xkPSEwKX1yZXR1cm4gd2l0aGluVGhyZXNob2xkfWZ1bmN0aW9uIGdldFRvdWNoSW5Qcm9ncmVzcygpe3JldHVybiEoJGVsZW1lbnQuZGF0YShQTFVHSU5fTlMrXCJfaW50b3VjaFwiKSE9PSEwKX1mdW5jdGlvbiBzZXRUb3VjaEluUHJvZ3Jlc3ModmFsKXskZWxlbWVudCYmKHZhbD09PSEwPygkZWxlbWVudC5iaW5kKE1PVkVfRVYsdG91Y2hNb3ZlKSwkZWxlbWVudC5iaW5kKEVORF9FVix0b3VjaEVuZCksTEVBVkVfRVYmJiRlbGVtZW50LmJpbmQoTEVBVkVfRVYsdG91Y2hMZWF2ZSkpOigkZWxlbWVudC51bmJpbmQoTU9WRV9FVix0b3VjaE1vdmUsITEpLCRlbGVtZW50LnVuYmluZChFTkRfRVYsdG91Y2hFbmQsITEpLExFQVZFX0VWJiYkZWxlbWVudC51bmJpbmQoTEVBVkVfRVYsdG91Y2hMZWF2ZSwhMSkpLCRlbGVtZW50LmRhdGEoUExVR0lOX05TK1wiX2ludG91Y2hcIix2YWw9PT0hMCkpfWZ1bmN0aW9uIGNyZWF0ZUZpbmdlckRhdGEoaWQsZXZ0KXt2YXIgZj17c3RhcnQ6e3g6MCx5OjB9LGxhc3Q6e3g6MCx5OjB9LGVuZDp7eDowLHk6MH19O3JldHVybiBmLnN0YXJ0Lng9Zi5sYXN0Lng9Zi5lbmQueD1ldnQucGFnZVh8fGV2dC5jbGllbnRYLGYuc3RhcnQueT1mLmxhc3QueT1mLmVuZC55PWV2dC5wYWdlWXx8ZXZ0LmNsaWVudFksZmluZ2VyRGF0YVtpZF09ZixmfWZ1bmN0aW9uIHVwZGF0ZUZpbmdlckRhdGEoZXZ0KXt2YXIgaWQ9dm9pZCAwIT09ZXZ0LmlkZW50aWZpZXI/ZXZ0LmlkZW50aWZpZXI6MCxmPWdldEZpbmdlckRhdGEoaWQpO3JldHVybiBudWxsPT09ZiAgICAgICAgICAgICAgICAgICAgICYmKGY9Y3JlYXRlRmluZ2VyRGF0YShpZCxldnQpKSxmLmxhc3QueD1mLmVuZC54LGYubGFzdC55PWYuZW5kLnksZi5lbmQueD1ldnQucGFnZVh8fGV2dC5jbGllbnRYLGYuZW5kLnk9ZXZ0LnBhZ2VZfHxldnQuY2xpZW50WSxmfWZ1bmN0aW9uIGdldEZpbmdlckRhdGEoaWQpe3JldHVybiBmaW5nZXJEYXRhW2lkXXx8bnVsbH1mdW5jdGlvbiBzZXRNYXhEaXN0YW5jZShkaXJlY3Rpb24sZGlzdGFuY2Upe2RpcmVjdGlvbiE9Tk9ORSYmKGRpc3RhbmNlPU1hdGgubWF4KGRpc3RhbmNlLGdldE1heERpc3RhbmNlKGRpcmVjdGlvbikpLG1heGltdW1zTWFwW2RpcmVjdGlvbl0uZGlzdGFuY2U9ZGlzdGFuY2UpfWZ1bmN0aW9uIGdldE1heERpc3RhbmNlKGRpcmVjdGlvbil7cmV0dXJuIG1heGltdW1zTWFwW2RpcmVjdGlvbl0/bWF4aW11bXNNYXBbZGlyZWN0aW9uXS5kaXN0YW5jZTp2b2lkIDB9ZnVuY3Rpb24gY3JlYXRlTWF4aW11bXNEYXRhKCl7dmFyIG1heERhdGE9e307cmV0dXJuIG1heERhdGFbTEVGVF09Y3JlYXRlTWF4aW11bVZPKExFRlQpLG1heERhdGFbUklHSFRdPWNyZWF0ZU1heGltdW1WTyhSSUdIVCksbWF4RGF0YVtVUF09Y3JlYXRlTWF4aW11bVZPKFVQKSxtYXhEYXRhW0RPV05dPWNyZWF0ZU1heGltdW1WTyhET1dOKSxtYXhEYXRhfWZ1bmN0aW9uIGNyZWF0ZU1heGltdW1WTyhkaXIpe3JldHVybntkaXJlY3Rpb246ZGlyLGRpc3RhbmNlOjB9fWZ1bmN0aW9uIGNhbGN1bGF0ZUR1cmF0aW9uKCl7cmV0dXJuIGVuZFRpbWUtc3RhcnRUaW1lfWZ1bmN0aW9uIGNhbGN1bGF0ZVRvdWNoZXNEaXN0YW5jZShzdGFydFBvaW50LGVuZFBvaW50KXt2YXIgZGlmZlg9TWF0aC5hYnMoc3RhcnRQb2ludC54LWVuZFBvaW50LngpLGRpZmZZPU1hdGguYWJzKHN0YXJ0UG9pbnQueS1lbmRQb2ludC55KTtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLnNxcnQoZGlmZlgqZGlmZlgrZGlmZlkqZGlmZlkpKX1mdW5jdGlvbiBjYWxjdWxhdGVQaW5jaFpvb20oc3RhcnREaXN0YW5jZSxlbmREaXN0YW5jZSl7dmFyIHBlcmNlbnQ9ZW5kRGlzdGFuY2Uvc3RhcnREaXN0YW5jZSoxO3JldHVybiBwZXJjZW50LnRvRml4ZWQoMil9ZnVuY3Rpb24gY2FsY3VsYXRlUGluY2hEaXJlY3Rpb24oKXtyZXR1cm4gMT5waW5jaFpvb20/T1VUOklOfWZ1bmN0aW9uIGNhbGN1bGF0ZURpc3RhbmNlKHN0YXJ0UG9pbnQsZW5kUG9pbnQpe3JldHVybiBNYXRoLnJvdW5kKE1hdGguc3FydChNYXRoLnBvdyhlbmRQb2ludC54LXN0YXJ0UG9pbnQueCwyKStNYXRoLnBvdyhlbmRQb2ludC55LXN0YXJ0UG9pbnQueSwyKSkpfWZ1bmN0aW9uIGNhbGN1bGF0ZUFuZ2xlKHN0YXJ0UG9pbnQsZW5kUG9pbnQpe3ZhciB4PXN0YXJ0UG9pbnQueC1lbmRQb2ludC54LHk9ZW5kUG9pbnQueS1zdGFydFBvaW50Lnkscj1NYXRoLmF0YW4yKHkseCksYW5nbGU9TWF0aC5yb3VuZCgxODAqci9NYXRoLlBJKTtyZXR1cm4gMD5hbmdsZSYmKGFuZ2xlPTM2MC1NYXRoLmFicyhhbmdsZSkpLGFuZ2xlfWZ1bmN0aW9uIGNhbGN1bGF0ZURpcmVjdGlvbihzdGFydFBvaW50LGVuZFBvaW50KXtpZihjb21wYXJlUG9pbnRzKHN0YXJ0UG9pbnQsZW5kUG9pbnQpKXJldHVybiBOT05FO3ZhciBhbmdsZT1jYWxjdWxhdGVBbmdsZShzdGFydFBvaW50LGVuZFBvaW50KTtyZXR1cm4gNDU+PWFuZ2xlJiZhbmdsZT49MD9MRUZUOjM2MD49YW5nbGUmJmFuZ2xlPj0zMTU/TEVGVDphbmdsZT49MTM1JiYyMjU+PWFuZ2xlP1JJR0hUOmFuZ2xlPjQ1JiYxMzU+YW5nbGU/RE9XTjpVUH1mdW5jdGlvbiBnZXRUaW1lU3RhbXAoKXt2YXIgbm93PW5ldyBEYXRlO3JldHVybiBub3cuZ2V0VGltZSgpfWZ1bmN0aW9uIGdldGJvdW5kcyhlbCl7ZWw9JChlbCk7dmFyIG9mZnNldD1lbC5vZmZzZXQoKSxib3VuZHM9e2xlZnQ6b2Zmc2V0LmxlZnQscmlnaHQ6b2Zmc2V0LmxlZnQrZWwub3V0ZXJXaWR0aCgpLHRvcDpvZmZzZXQudG9wLGJvdHRvbTpvZmZzZXQudG9wK2VsLm91dGVySGVpZ2h0KCl9O3JldHVybiBib3VuZHN9ZnVuY3Rpb24gaXNJbkJvdW5kcyhwb2ludCxib3VuZHMpe3JldHVybiBwb2ludC54PmJvdW5kcy5sZWZ0JiZwb2ludC54PGJvdW5kcy5yaWdodCYmcG9pbnQueT5ib3VuZHMudG9wJiZwb2ludC55PGJvdW5kcy5ib3R0b219ZnVuY3Rpb24gY29tcGFyZVBvaW50cyhwb2ludEEscG9pbnRCKXtyZXR1cm4gcG9pbnRBLng9PXBvaW50Qi54JiZwb2ludEEueT09cG9pbnRCLnl9dmFyIG9wdGlvbnM9JC5leHRlbmQoe30sb3B0aW9ucyksdXNlVG91Y2hFdmVudHM9U1VQUE9SVFNfVE9VQ0h8fFNVUFBPUlRTX1BPSU5URVJ8fCFvcHRpb25zLmZhbGxiYWNrVG9Nb3VzZUV2ZW50cyxTVEFSVF9FVj11c2VUb3VjaEV2ZW50cz9TVVBQT1JUU19QT0lOVEVSP1NVUFBPUlRTX1BPSU5URVJfSUUxMD9cIk1TUG9pbnRlckRvd25cIjpcInBvaW50ZXJkb3duXCI6XCJ0b3VjaHN0YXJ0XCI6XCJtb3VzZWRvd25cIixNT1ZFX0VWPXVzZVRvdWNoRXZlbnRzP1NVUFBPUlRTX1BPSU5URVI/U1VQUE9SVFNfUE9JTlRFUl9JRTEwP1wiTVNQb2ludGVyTW92ZVwiOlwicG9pbnRlcm1vdmVcIjpcInRvdWNobW92ZVwiOlwibW91c2Vtb3ZlXCIsRU5EX0VWPXVzZVRvdWNoRXZlbnRzP1NVUFBPUlRTX1BPSU5URVI/U1VQUE9SVFNfUE9JTlRFUl9JRTEwP1wiTVNQb2ludGVyVXBcIjpcInBvaW50ZXJ1cFwiOlwidG91Y2hlbmRcIjpcIm1vdXNldXBcIixMRUFWRV9FVj11c2VUb3VjaEV2ZW50cz9TVVBQT1JUU19QT0lOVEVSP1wibW91c2VsZWF2ZVwiOm51bGw6XCJtb3VzZWxlYXZlXCIsQ0FOQ0VMX0VWPVNVUFBPUlRTX1BPSU5URVI/U1VQUE9SVFNfUE9JTlRFUl9JRTEwP1wiTVNQb2ludGVyQ2FuY2VsXCI6XCJwb2ludGVyY2FuY2VsXCI6XCJ0b3VjaGNhbmNlbFwiLGRpc3RhbmNlPTAsZGlyZWN0aW9uPW51bGwsY3VycmVudERpcmVjdGlvbj1udWxsLGR1cmF0aW9uPTAsc3RhcnRUb3VjaGVzRGlzdGFuY2U9MCxlbmRUb3VjaGVzRGlzdGFuY2U9MCxwaW5jaFpvb209MSxwaW5jaERpc3RhbmNlPTAscGluY2hEaXJlY3Rpb249MCxtYXhpbXVtc01hcD1udWxsLCRlbGVtZW50PSQoZWxlbWVudCkscGhhc2U9XCJzdGFydFwiLGZpbmdlckNvdW50PTAsZmluZ2VyRGF0YT17fSxzdGFydFRpbWU9MCxlbmRUaW1lPTAscHJldmlvdXNUb3VjaEVuZFRpbWU9MCxmaW5nZXJDb3VudEF0UmVsZWFzZT0wLGRvdWJsZVRhcFN0YXJ0VGltZT0wLHNpbmdsZVRhcFRpbWVvdXQ9bnVsbCxob2xkVGltZW91dD1udWxsO3RyeXskZWxlbWVudC5iaW5kKFNUQVJUX0VWLHRvdWNoU3RhcnQpLCRlbGVtZW50LmJpbmQoQ0FOQ0VMX0VWLHRvdWNoQ2FuY2VsKX1jYXRjaChlKXskLmVycm9yKFwiZXZlbnRzIG5vdCBzdXBwb3J0ZWQgXCIrU1RBUlRfRVYrXCIsXCIrQ0FOQ0VMX0VWK1wiIG9uIGpRdWVyeS5zd2lwZVwiKX10aGlzLmVuYWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRpc2FibGUoKSwkZWxlbWVudC5iaW5kKFNUQVJUX0VWLHRvdWNoU3RhcnQpLCRlbGVtZW50LmJpbmQoQ0FOQ0VMX0VWLHRvdWNoQ2FuY2VsKSwkZWxlbWVudH0sdGhpcy5kaXNhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHJlbW92ZUxpc3RlbmVycygpLCRlbGVtZW50fSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXtyZW1vdmVMaXN0ZW5lcnMoKSwkZWxlbWVudC5kYXRhKFBMVUdJTl9OUyxudWxsKSwkZWxlbWVudD1udWxsfSx0aGlzLm9wdGlvbj1mdW5jdGlvbihwcm9wZXJ0eSx2YWx1ZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHByb3BlcnR5KW9wdGlvbnM9JC5leHRlbmQob3B0aW9ucyxwcm9wZXJ0eSk7ZWxzZSBpZih2b2lkIDAhPT1vcHRpb25zW3Byb3BlcnR5XSl7aWYodm9pZCAwPT09dmFsdWUpcmV0dXJuIG9wdGlvbnNbcHJvcGVydHldO29wdGlvbnNbcHJvcGVydHldPXZhbHVlfWVsc2V7aWYoIXByb3BlcnR5KXJldHVybiBvcHRpb25zOyQuZXJyb3IoXCJPcHRpb24gXCIrcHJvcGVydHkrXCIgZG9lcyBub3QgZXhpc3Qgb24galF1ZXJ5LnN3aXBlLm9wdGlvbnNcIil9cmV0dXJuIG51bGx9fXZhciBWRVJTSU9OPVwiMS42LjE4XCIsTEVGVD1cImxlZnRcIixSSUdIVD1cInJpZ2h0XCIsVVA9XCJ1cFwiLERPV049XCJkb3duXCIsSU49XCJpblwiLE9VVD1cIm91dFwiLE5PTkU9XCJub25lXCIsQVVUTz1cImF1dG9cIixTV0lQRT1cInN3aXBlXCIsUElOQ0g9XCJwaW5jaFwiLFRBUD1cInRhcFwiLERPVUJMRV9UQVA9XCJkb3VibGV0YXBcIixMT05HX1RBUD1cImxvbmd0YXBcIixIT1JJWk9OVEFMPVwiaG9yaXpvbnRhbFwiLFZFUlRJQ0FMPVwidmVydGljYWxcIixBTExfRklOR0VSUz1cImFsbFwiLERPVUJMRV9UQVBfVEhSRVNIT0xEPTEwLFBIQVNFX1NUQVJUPVwic3RhcnRcIixQSEFTRV9NT1ZFPVwibW92ZVwiLFBIQVNFX0VORD1cImVuZFwiLFBIQVNFX0NBTkNFTD1cImNhbmNlbFwiLFNVUFBPUlRTX1RPVUNIPVwib250b3VjaHN0YXJ0XCJpbiB3aW5kb3csU1VQUE9SVFNfUE9JTlRFUl9JRTEwPXdpbmRvdy5uYXZpZ2F0b3IubXNQb2ludGVyRW5hYmxlZCYmIXdpbmRvdy5uYXZpZ2F0b3IucG9pbnRlckVuYWJsZWQmJiFTVVBQT1JUU19UT1VDSCxTVVBQT1JUU19QT0lOVEVSPSh3aW5kb3cubmF2aWdhdG9yLnBvaW50ZXJFbmFibGVkfHx3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQpJiYhU1VQUE9SVFNfVE9VQ0gsUExVR0lOX05TPVwiVG91Y2hTd2lwZVwiLGRlZmF1bHRzPXtmaW5nZXJzOjEsdGhyZXNob2xkOjc1LGNhbmNlbFRocmVzaG9sZDpudWxsLHBpbmNoVGhyZXNob2xkOjIwLG1heFRpbWVUaHJlc2hvbGQ6bnVsbCxmaW5nZXJSZWxlYXNlVGhyZXNob2xkOjI1MCxsb25nVGFwVGhyZXNob2xkOjUwMCxkb3VibGVUYXBUaHJlc2hvbGQ6MjAwLHN3aXBlOm51bGwsc3dpcGVMZWZ0Om51bGwsc3dpcGVSaWdodDpudWxsLHN3aXBlVXA6bnVsbCxzd2lwZURvd246bnVsbCxzd2lwZVN0YXR1czpudWxsLHBpbmNoSW46bnVsbCxwaW5jaE91dDpudWxsLHBpbmNoU3RhdHVzOm51bGwsY2xpY2s6bnVsbCx0YXA6bnVsbCxkb3VibGVUYXA6bnVsbCxsb25nVGFwOm51bGwsaG9sZDpudWxsLHRyaWdnZXJPblRvdWNoRW5kOiEwLHRyaWdnZXJPblRvdWNoTGVhdmU6ITEsYWxsb3dQYWdlU2Nyb2xsOlwiYXV0b1wiLGZhbGxiYWNrVG9Nb3VzZUV2ZW50czohMCxleGNsdWRlZEVsZW1lbnRzOlwiLm5vU3dpcGVcIixwcmV2ZW50RGVmYXVsdEV2ZW50czohMH07JC5mbi5zd2lwZT1mdW5jdGlvbihtZXRob2Qpe3ZhciAkdGhpcz0kKHRoaXMpLHBsdWdpbj0kdGhpcy5kYXRhKFBMVUdJTl9OUyk7aWYocGx1Z2luJiZcInN0cmluZ1wiPT10eXBlb2YgbWV0aG9kKXtpZihwbHVnaW5bbWV0aG9kXSlyZXR1cm4gcGx1Z2luW21ldGhvZF0uYXBwbHkocGx1Z2luLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSk7JC5lcnJvcihcIk1ldGhvZCBcIittZXRob2QrXCIgZG9lcyBub3QgZXhpc3Qgb24galF1ZXJ5LnN3aXBlXCIpfWVsc2UgaWYocGx1Z2luJiZcIm9iamVjdFwiPT10eXBlb2YgbWV0aG9kKXBsdWdpbi5vcHRpb24uYXBwbHkocGx1Z2luLGFyZ3VtZW50cyk7ZWxzZSBpZighKHBsdWdpbnx8XCJvYmplY3RcIiE9dHlwZW9mIG1ldGhvZCYmbWV0aG9kKSlyZXR1cm4gaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuICR0aGlzfSwkLmZuLnN3aXBlLnZlcnNpb249VkVSU0lPTiwkLmZuLnN3aXBlLmRlZmF1bHRzPWRlZmF1bHRzLCQuZm4uc3dpcGUucGhhc2VzPXtQSEFTRV9TVEFSVDpQSEFTRV9TVEFSVCxQSEFTRV9NT1ZFOlBIQVNFX01PVkUsUEhBU0VfRU5EOlBIQVNFX0VORCxQSEFTRV9DQU5DRUw6UEhBU0VfQ0FOQ0VMfSwkLmZuLnN3aXBlLmRpcmVjdGlvbnM9e0xFRlQ6TEVGVCxSSUdIVDpSSUdIVCxVUDpVUCxET1dOOkRPV04sSU46SU4sT1VUOk9VVH0sJC5mbi5zd2lwZS5wYWdlU2Nyb2xsPXtOT05FOk5PTkUsSE9SSVpPTlRBTDpIT1JJWk9OVEFMLFZFUlRJQ0FMOlZFUlRJQ0FMLEFVVE86QVVUT30sJC5mbi5zd2lwZS5maW5nZXJzPXtPTkU6MSxUV086MixUSFJFRTozLEZPVVI6NCxGSVZFOjUsQUxMOkFMTF9GSU5HRVJTfX0pOyIsIi8qXHJcbiAgICAgXyBfICAgICAgXyAgICAgICBfXHJcbiBfX198IChfKSBfX198IHwgX18gIChfKV9fX1xyXG4vIF9ffCB8IHwvIF9ffCB8LyAvICB8IC8gX198XHJcblxcX18gXFwgfCB8IChfX3wgICA8IF8gfCBcXF9fIFxcXHJcbnxfX18vX3xffFxcX19ffF98XFxfKF8pLyB8X19fL1xyXG4gICAgICAgICAgICAgICAgICAgfF9fL1xyXG5cclxuIFZlcnNpb246IDEuNi4wXHJcbiAgQXV0aG9yOiBLZW4gV2hlZWxlclxyXG4gV2Vic2l0ZTogaHR0cDovL2tlbndoZWVsZXIuZ2l0aHViLmlvXHJcbiAgICBEb2NzOiBodHRwOi8va2Vud2hlZWxlci5naXRodWIuaW8vc2xpY2tcclxuICAgIFJlcG86IGh0dHA6Ly9naXRodWIuY29tL2tlbndoZWVsZXIvc2xpY2tcclxuICBJc3N1ZXM6IGh0dHA6Ly9naXRodWIuY29tL2tlbndoZWVsZXIvc2xpY2svaXNzdWVzXHJcblxyXG4gKi9cclxuLyogZ2xvYmFsIHdpbmRvdywgZG9jdW1lbnQsIGRlZmluZSwgalF1ZXJ5LCBzZXRJbnRlcnZhbCwgY2xlYXJJbnRlcnZhbCAqL1xyXG4oZnVuY3Rpb24oZmFjdG9yeSkge1xyXG4gICAgJ3VzZSBzdHJpY3QnO1xyXG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgICAgIGRlZmluZShbJ2pxdWVyeSddLCBmYWN0b3J5KTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ2pxdWVyeScpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmFjdG9yeShqUXVlcnkpO1xyXG4gICAgfVxyXG5cclxufShmdW5jdGlvbigkKSB7XHJcbiAgICAndXNlIHN0cmljdCc7XHJcbiAgICB2YXIgU2xpY2sgPSB3aW5kb3cuU2xpY2sgfHwge307XHJcblxyXG4gICAgU2xpY2sgPSAoZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBpbnN0YW5jZVVpZCA9IDA7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIFNsaWNrKGVsZW1lbnQsIHNldHRpbmdzKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgXyA9IHRoaXMsIGRhdGFTZXR0aW5ncztcclxuXHJcbiAgICAgICAgICAgIF8uZGVmYXVsdHMgPSB7XHJcbiAgICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgYWRhcHRpdmVIZWlnaHQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYXBwZW5kQXJyb3dzOiAkKGVsZW1lbnQpLFxyXG4gICAgICAgICAgICAgICAgYXBwZW5kRG90czogJChlbGVtZW50KSxcclxuICAgICAgICAgICAgICAgIGFycm93czogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGFzTmF2Rm9yOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgcHJldkFycm93OiAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1yb2xlPVwibm9uZVwiIGNsYXNzPVwic2xpY2stcHJldlwiIGFyaWEtbGFiZWw9XCJQcmV2aW91c1wiIHRhYmluZGV4PVwiMFwiIHJvbGU9XCJidXR0b25cIj5QcmV2aW91czwvYnV0dG9uPicsXHJcbiAgICAgICAgICAgICAgICBuZXh0QXJyb3c6ICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLXJvbGU9XCJub25lXCIgY2xhc3M9XCJzbGljay1uZXh0XCIgYXJpYS1sYWJlbD1cIk5leHRcIiB0YWJpbmRleD1cIjBcIiByb2xlPVwiYnV0dG9uXCI+TmV4dDwvYnV0dG9uPicsXHJcbiAgICAgICAgICAgICAgICBhdXRvcGxheTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBhdXRvcGxheVNwZWVkOiAzMDAwLFxyXG4gICAgICAgICAgICAgICAgY2VudGVyTW9kZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBjZW50ZXJQYWRkaW5nOiAnNTBweCcsXHJcbiAgICAgICAgICAgICAgICBjc3NFYXNlOiAnZWFzZScsXHJcbiAgICAgICAgICAgICAgICBjdXN0b21QYWdpbmc6IGZ1bmN0aW9uKHNsaWRlciwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBkYXRhLXJvbGU9XCJub25lXCIgcm9sZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiMFwiIC8+JykudGV4dChpICsgMSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZG90czogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBkb3RzQ2xhc3M6ICdzbGljay1kb3RzJyxcclxuICAgICAgICAgICAgICAgIGRyYWdnYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGVhc2luZzogJ2xpbmVhcicsXHJcbiAgICAgICAgICAgICAgICBlZGdlRnJpY3Rpb246IDAuMzUsXHJcbiAgICAgICAgICAgICAgICBmYWRlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGZvY3VzT25TZWxlY3Q6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgaW5maW5pdGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBpbml0aWFsU2xpZGU6IDAsXHJcbiAgICAgICAgICAgICAgICBsYXp5TG9hZDogJ29uZGVtYW5kJyxcclxuICAgICAgICAgICAgICAgIG1vYmlsZUZpcnN0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHBhdXNlT25Ib3ZlcjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHBhdXNlT25Gb2N1czogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHBhdXNlT25Eb3RzSG92ZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVzcG9uZFRvOiAnd2luZG93JyxcclxuICAgICAgICAgICAgICAgIHJlc3BvbnNpdmU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICByb3dzOiAxLFxyXG4gICAgICAgICAgICAgICAgcnRsOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHNsaWRlOiAnJyxcclxuICAgICAgICAgICAgICAgIHNsaWRlc1BlclJvdzogMSxcclxuICAgICAgICAgICAgICAgIHNsaWRlc1RvU2hvdzogMSxcclxuICAgICAgICAgICAgICAgIHNsaWRlc1RvU2Nyb2xsOiAxLFxyXG4gICAgICAgICAgICAgICAgc3BlZWQ6IDUwMCxcclxuICAgICAgICAgICAgICAgIHN3aXBlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgc3dpcGVUb1NsaWRlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHRvdWNoTW92ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHRvdWNoVGhyZXNob2xkOiA1LFxyXG4gICAgICAgICAgICAgICAgdXNlQ1NTOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgdXNlVHJhbnNmb3JtOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgdmFyaWFibGVXaWR0aDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbFN3aXBpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgd2FpdEZvckFuaW1hdGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB6SW5kZXg6IDEwMDBcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIF8uaW5pdGlhbHMgPSB7XHJcbiAgICAgICAgICAgICAgICBhbmltYXRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgZHJhZ2dpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYXV0b1BsYXlUaW1lcjogbnVsbCxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnREaXJlY3Rpb246IDAsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50TGVmdDogbnVsbCxcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRTbGlkZTogMCxcclxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogMSxcclxuICAgICAgICAgICAgICAgICRkb3RzOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgbGlzdFdpZHRoOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgbGlzdEhlaWdodDogbnVsbCxcclxuICAgICAgICAgICAgICAgIGxvYWRJbmRleDogMCxcclxuICAgICAgICAgICAgICAgICRuZXh0QXJyb3c6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAkcHJldkFycm93OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc2xpZGVDb3VudDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHNsaWRlV2lkdGg6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAkc2xpZGVUcmFjazogbnVsbCxcclxuICAgICAgICAgICAgICAgICRzbGlkZXM6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzbGlkaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHNsaWRlT2Zmc2V0OiAwLFxyXG4gICAgICAgICAgICAgICAgc3dpcGVMZWZ0OiBudWxsLFxyXG4gICAgICAgICAgICAgICAgJGxpc3Q6IG51bGwsXHJcbiAgICAgICAgICAgICAgICB0b3VjaE9iamVjdDoge30sXHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1zRW5hYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB1bnNsaWNrZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAkLmV4dGVuZChfLCBfLmluaXRpYWxzKTtcclxuXHJcbiAgICAgICAgICAgIF8uYWN0aXZlQnJlYWtwb2ludCA9IG51bGw7XHJcbiAgICAgICAgICAgIF8uYW5pbVR5cGUgPSBudWxsO1xyXG4gICAgICAgICAgICBfLmFuaW1Qcm9wID0gbnVsbDtcclxuICAgICAgICAgICAgXy5icmVha3BvaW50cyA9IFtdO1xyXG4gICAgICAgICAgICBfLmJyZWFrcG9pbnRTZXR0aW5ncyA9IFtdO1xyXG4gICAgICAgICAgICBfLmNzc1RyYW5zaXRpb25zID0gZmFsc2U7XHJcbiAgICAgICAgICAgIF8uZm9jdXNzZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgXy5pbnRlcnJ1cHRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBfLmhpZGRlbiA9ICdoaWRkZW4nO1xyXG4gICAgICAgICAgICBfLnBhdXNlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIF8ucG9zaXRpb25Qcm9wID0gbnVsbDtcclxuICAgICAgICAgICAgXy5yZXNwb25kVG8gPSBudWxsO1xyXG4gICAgICAgICAgICBfLnJvd0NvdW50ID0gMTtcclxuICAgICAgICAgICAgXy5zaG91bGRDbGljayA9IHRydWU7XHJcbiAgICAgICAgICAgIF8uJHNsaWRlciA9ICQoZWxlbWVudCk7XHJcbiAgICAgICAgICAgIF8uJHNsaWRlc0NhY2hlID0gbnVsbDtcclxuICAgICAgICAgICAgXy50cmFuc2Zvcm1UeXBlID0gbnVsbDtcclxuICAgICAgICAgICAgXy50cmFuc2l0aW9uVHlwZSA9IG51bGw7XHJcbiAgICAgICAgICAgIF8udmlzaWJpbGl0eUNoYW5nZSA9ICd2aXNpYmlsaXR5Y2hhbmdlJztcclxuICAgICAgICAgICAgXy53aW5kb3dXaWR0aCA9IDA7XHJcbiAgICAgICAgICAgIF8ud2luZG93VGltZXIgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgZGF0YVNldHRpbmdzID0gJChlbGVtZW50KS5kYXRhKCdzbGljaycpIHx8IHt9O1xyXG5cclxuICAgICAgICAgICAgXy5vcHRpb25zID0gJC5leHRlbmQoe30sIF8uZGVmYXVsdHMsIHNldHRpbmdzLCBkYXRhU2V0dGluZ3MpO1xyXG5cclxuICAgICAgICAgICAgXy5jdXJyZW50U2xpZGUgPSBfLm9wdGlvbnMuaW5pdGlhbFNsaWRlO1xyXG5cclxuICAgICAgICAgICAgXy5vcmlnaW5hbFNldHRpbmdzID0gXy5vcHRpb25zO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudC5tb3pIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICBfLmhpZGRlbiA9ICdtb3pIaWRkZW4nO1xyXG4gICAgICAgICAgICAgICAgXy52aXNpYmlsaXR5Q2hhbmdlID0gJ21venZpc2liaWxpdHljaGFuZ2UnO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC53ZWJraXRIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICBfLmhpZGRlbiA9ICd3ZWJraXRIaWRkZW4nO1xyXG4gICAgICAgICAgICAgICAgXy52aXNpYmlsaXR5Q2hhbmdlID0gJ3dlYmtpdHZpc2liaWxpdHljaGFuZ2UnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBfLmF1dG9QbGF5ID0gJC5wcm94eShfLmF1dG9QbGF5LCBfKTtcclxuICAgICAgICAgICAgXy5hdXRvUGxheUNsZWFyID0gJC5wcm94eShfLmF1dG9QbGF5Q2xlYXIsIF8pO1xyXG4gICAgICAgICAgICBfLmF1dG9QbGF5SXRlcmF0b3IgPSAkLnByb3h5KF8uYXV0b1BsYXlJdGVyYXRvciwgXyk7XHJcbiAgICAgICAgICAgIF8uY2hhbmdlU2xpZGUgPSAkLnByb3h5KF8uY2hhbmdlU2xpZGUsIF8pO1xyXG4gICAgICAgICAgICBfLmNsaWNrSGFuZGxlciA9ICQucHJveHkoXy5jbGlja0hhbmRsZXIsIF8pO1xyXG4gICAgICAgICAgICBfLnNlbGVjdEhhbmRsZXIgPSAkLnByb3h5KF8uc2VsZWN0SGFuZGxlciwgXyk7XHJcbiAgICAgICAgICAgIF8uc2V0UG9zaXRpb24gPSAkLnByb3h5KF8uc2V0UG9zaXRpb24sIF8pO1xyXG4gICAgICAgICAgICBfLnN3aXBlSGFuZGxlciA9ICQucHJveHkoXy5zd2lwZUhhbmRsZXIsIF8pO1xyXG4gICAgICAgICAgICBfLmRyYWdIYW5kbGVyID0gJC5wcm94eShfLmRyYWdIYW5kbGVyLCBfKTtcclxuICAgICAgICAgICAgXy5rZXlIYW5kbGVyID0gJC5wcm94eShfLmtleUhhbmRsZXIsIF8pO1xyXG5cclxuICAgICAgICAgICAgXy5pbnN0YW5jZVVpZCA9IGluc3RhbmNlVWlkKys7XHJcblxyXG4gICAgICAgICAgICAvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5nc1xyXG4gICAgICAgICAgICAvLyBTdHJpY3QgSFRNTCByZWNvZ25pdGlvbiAobXVzdCBzdGFydCB3aXRoIDwpXHJcbiAgICAgICAgICAgIC8vIEV4dHJhY3RlZCBmcm9tIGpRdWVyeSB2MS4xMSBzb3VyY2VcclxuICAgICAgICAgICAgXy5odG1sRXhwciA9IC9eKD86XFxzKig8W1xcd1xcV10rPilbXj5dKikkLztcclxuXHJcblxyXG4gICAgICAgICAgICBfLnJlZ2lzdGVyQnJlYWtwb2ludHMoKTtcclxuICAgICAgICAgICAgXy5pbml0KHRydWUpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBTbGljaztcclxuXHJcbiAgICB9KCkpO1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5hY3RpdmF0ZUFEQSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgXy4kc2xpZGVUcmFjay5maW5kKCcuc2xpY2stYWN0aXZlJykuYXR0cih7XHJcbiAgICAgICAgICAgICdhcmlhLWhpZGRlbic6ICdmYWxzZSdcclxuICAgICAgICB9KS5maW5kKCdhLCBpbnB1dCwgYnV0dG9uLCBzZWxlY3QnKS5hdHRyKHtcclxuICAgICAgICAgICAgJ3RhYmluZGV4JzogJzAnXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuYWRkU2xpZGUgPSBTbGljay5wcm90b3R5cGUuc2xpY2tBZGQgPSBmdW5jdGlvbihtYXJrdXAsIGluZGV4LCBhZGRCZWZvcmUpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mKGluZGV4KSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICAgIGFkZEJlZm9yZSA9IGluZGV4O1xyXG4gICAgICAgICAgICBpbmRleCA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpbmRleCA8IDAgfHwgKGluZGV4ID49IF8uc2xpZGVDb3VudCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXy51bmxvYWQoKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZihpbmRleCkgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCAmJiBfLiRzbGlkZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAkKG1hcmt1cCkuYXBwZW5kVG8oXy4kc2xpZGVUcmFjayk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWRkQmVmb3JlKSB7XHJcbiAgICAgICAgICAgICAgICAkKG1hcmt1cCkuaW5zZXJ0QmVmb3JlKF8uJHNsaWRlcy5lcShpbmRleCkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgJChtYXJrdXApLmluc2VydEFmdGVyKF8uJHNsaWRlcy5lcShpbmRleCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGFkZEJlZm9yZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgJChtYXJrdXApLnByZXBlbmRUbyhfLiRzbGlkZVRyYWNrKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICQobWFya3VwKS5hcHBlbmRUbyhfLiRzbGlkZVRyYWNrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXy4kc2xpZGVzID0gXy4kc2xpZGVUcmFjay5jaGlsZHJlbih0aGlzLm9wdGlvbnMuc2xpZGUpO1xyXG5cclxuICAgICAgICBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKHRoaXMub3B0aW9ucy5zbGlkZSkuZGV0YWNoKCk7XHJcblxyXG4gICAgICAgIF8uJHNsaWRlVHJhY2suYXBwZW5kKF8uJHNsaWRlcyk7XHJcblxyXG4gICAgICAgIF8uJHNsaWRlcy5lYWNoKGZ1bmN0aW9uKGluZGV4LCBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICQoZWxlbWVudCkuYXR0cignZGF0YS1zbGljay1pbmRleCcsIGluZGV4KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgXy4kc2xpZGVzQ2FjaGUgPSBfLiRzbGlkZXM7XHJcblxyXG4gICAgICAgIF8ucmVpbml0KCk7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuYW5pbWF0ZUhlaWdodCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuICAgICAgICBpZiAoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyA9PT0gMSAmJiBfLm9wdGlvbnMuYWRhcHRpdmVIZWlnaHQgPT09IHRydWUgJiYgXy5vcHRpb25zLnZlcnRpY2FsID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0SGVpZ2h0ID0gXy4kc2xpZGVzLmVxKF8uY3VycmVudFNsaWRlKS5vdXRlckhlaWdodCh0cnVlKTtcclxuICAgICAgICAgICAgXy4kbGlzdC5hbmltYXRlKHtcclxuICAgICAgICAgICAgICAgIGhlaWdodDogdGFyZ2V0SGVpZ2h0XHJcbiAgICAgICAgICAgIH0sIF8ub3B0aW9ucy5zcGVlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuYW5pbWF0ZVNsaWRlID0gZnVuY3Rpb24odGFyZ2V0TGVmdCwgY2FsbGJhY2spIHtcclxuXHJcbiAgICAgICAgdmFyIGFuaW1Qcm9wcyA9IHt9LFxyXG4gICAgICAgICAgICBfID0gdGhpcztcclxuXHJcbiAgICAgICAgXy5hbmltYXRlSGVpZ2h0KCk7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMucnRsID09PSB0cnVlICYmIF8ub3B0aW9ucy52ZXJ0aWNhbCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGFyZ2V0TGVmdCA9IC10YXJnZXRMZWZ0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXy50cmFuc2Zvcm1zRW5hYmxlZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy52ZXJ0aWNhbCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogdGFyZ2V0TGVmdFxyXG4gICAgICAgICAgICAgICAgfSwgXy5vcHRpb25zLnNwZWVkLCBfLm9wdGlvbnMuZWFzaW5nLCBjYWxsYmFjayk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBfLiRzbGlkZVRyYWNrLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogdGFyZ2V0TGVmdFxyXG4gICAgICAgICAgICAgICAgfSwgXy5vcHRpb25zLnNwZWVkLCBfLm9wdGlvbnMuZWFzaW5nLCBjYWxsYmFjayk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIGlmIChfLmNzc1RyYW5zaXRpb25zID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5ydGwgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBfLmN1cnJlbnRMZWZ0ID0gLShfLmN1cnJlbnRMZWZ0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGFuaW1TdGFydDogXy5jdXJyZW50TGVmdFxyXG4gICAgICAgICAgICAgICAgfSkuYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgYW5pbVN0YXJ0OiB0YXJnZXRMZWZ0XHJcbiAgICAgICAgICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IF8ub3B0aW9ucy5zcGVlZCxcclxuICAgICAgICAgICAgICAgICAgICBlYXNpbmc6IF8ub3B0aW9ucy5lYXNpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RlcDogZnVuY3Rpb24obm93KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdyA9IE1hdGguY2VpbChub3cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXy5vcHRpb25zLnZlcnRpY2FsID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbVByb3BzW18uYW5pbVR5cGVdID0gJ3RyYW5zbGF0ZSgnICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3cgKyAncHgsIDBweCknO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5jc3MoYW5pbVByb3BzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1Qcm9wc1tfLmFuaW1UeXBlXSA9ICd0cmFuc2xhdGUoMHB4LCcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdyArICdweCknO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5jc3MoYW5pbVByb3BzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICBfLmFwcGx5VHJhbnNpdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0TGVmdCA9IE1hdGguY2VpbCh0YXJnZXRMZWZ0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoXy5vcHRpb25zLnZlcnRpY2FsID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFuaW1Qcm9wc1tfLmFuaW1UeXBlXSA9ICd0cmFuc2xhdGUzZCgnICsgdGFyZ2V0TGVmdCArICdweCwgMHB4LCAwcHgpJztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYW5pbVByb3BzW18uYW5pbVR5cGVdID0gJ3RyYW5zbGF0ZTNkKDBweCwnICsgdGFyZ2V0TGVmdCArICdweCwgMHB4KSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBfLiRzbGlkZVRyYWNrLmNzcyhhbmltUHJvcHMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfLmRpc2FibGVUcmFuc2l0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgXy5vcHRpb25zLnNwZWVkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmdldE5hdlRhcmdldCA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsXHJcbiAgICAgICAgICAgIGFzTmF2Rm9yID0gXy5vcHRpb25zLmFzTmF2Rm9yO1xyXG5cclxuICAgICAgICBpZiAoIGFzTmF2Rm9yICYmIGFzTmF2Rm9yICE9PSBudWxsICkge1xyXG4gICAgICAgICAgICBhc05hdkZvciA9ICQoYXNOYXZGb3IpLm5vdChfLiRzbGlkZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFzTmF2Rm9yO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmFzTmF2Rm9yID0gZnVuY3Rpb24oaW5kZXgpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzLFxyXG4gICAgICAgICAgICBhc05hdkZvciA9IF8uZ2V0TmF2VGFyZ2V0KCk7XHJcblxyXG4gICAgICAgIGlmICggYXNOYXZGb3IgIT09IG51bGwgJiYgdHlwZW9mIGFzTmF2Rm9yID09PSAnb2JqZWN0JyApIHtcclxuICAgICAgICAgICAgYXNOYXZGb3IuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSAkKHRoaXMpLnNsaWNrKCdnZXRTbGljaycpO1xyXG4gICAgICAgICAgICAgICAgaWYoIXRhcmdldC51bnNsaWNrZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc2xpZGVIYW5kbGVyKGluZGV4LCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmFwcGx5VHJhbnNpdGlvbiA9IGZ1bmN0aW9uKHNsaWRlKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcyxcclxuICAgICAgICAgICAgdHJhbnNpdGlvbiA9IHt9O1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmZhZGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHRyYW5zaXRpb25bXy50cmFuc2l0aW9uVHlwZV0gPSBfLnRyYW5zZm9ybVR5cGUgKyAnICcgKyBfLm9wdGlvbnMuc3BlZWQgKyAnbXMgJyArIF8ub3B0aW9ucy5jc3NFYXNlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRyYW5zaXRpb25bXy50cmFuc2l0aW9uVHlwZV0gPSAnb3BhY2l0eSAnICsgXy5vcHRpb25zLnNwZWVkICsgJ21zICcgKyBfLm9wdGlvbnMuY3NzRWFzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZmFkZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5jc3ModHJhbnNpdGlvbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgXy4kc2xpZGVzLmVxKHNsaWRlKS5jc3ModHJhbnNpdGlvbik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmF1dG9QbGF5ID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgXy5hdXRvUGxheUNsZWFyKCk7XHJcblxyXG4gICAgICAgIGlmICggXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdyApIHtcclxuICAgICAgICAgICAgXy5hdXRvUGxheVRpbWVyID0gc2V0SW50ZXJ2YWwoIF8uYXV0b1BsYXlJdGVyYXRvciwgXy5vcHRpb25zLmF1dG9wbGF5U3BlZWQgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuYXV0b1BsYXlDbGVhciA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmIChfLmF1dG9QbGF5VGltZXIpIHtcclxuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChfLmF1dG9QbGF5VGltZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5hdXRvUGxheUl0ZXJhdG9yID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcyxcclxuICAgICAgICAgICAgc2xpZGVUbyA9IF8uY3VycmVudFNsaWRlICsgXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsO1xyXG5cclxuICAgICAgICBpZiAoICFfLnBhdXNlZCAmJiAhXy5pbnRlcnJ1cHRlZCAmJiAhXy5mb2N1c3NlZCApIHtcclxuXHJcbiAgICAgICAgICAgIGlmICggXy5vcHRpb25zLmluZmluaXRlID09PSBmYWxzZSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIF8uZGlyZWN0aW9uID09PSAxICYmICggXy5jdXJyZW50U2xpZGUgKyAxICkgPT09ICggXy5zbGlkZUNvdW50IC0gMSApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXy5kaXJlY3Rpb24gPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCBfLmRpcmVjdGlvbiA9PT0gMCApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVUbyA9IF8uY3VycmVudFNsaWRlIC0gXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIF8uY3VycmVudFNsaWRlIC0gMSA9PT0gMCApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXy5kaXJlY3Rpb24gPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBfLnNsaWRlSGFuZGxlciggc2xpZGVUbyApO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuYnVpbGRBcnJvd3MgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmFycm93cyA9PT0gdHJ1ZSApIHtcclxuXHJcbiAgICAgICAgICAgIF8uJHByZXZBcnJvdyA9ICQoXy5vcHRpb25zLnByZXZBcnJvdykuYWRkQ2xhc3MoJ3NsaWNrLWFycm93Jyk7XHJcbiAgICAgICAgICAgIF8uJG5leHRBcnJvdyA9ICQoXy5vcHRpb25zLm5leHRBcnJvdykuYWRkQ2xhc3MoJ3NsaWNrLWFycm93Jyk7XHJcblxyXG4gICAgICAgICAgICBpZiggXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBfLiRwcmV2QXJyb3cucmVtb3ZlQ2xhc3MoJ3NsaWNrLWhpZGRlbicpLnJlbW92ZUF0dHIoJ2FyaWEtaGlkZGVuIHRhYmluZGV4Jyk7XHJcbiAgICAgICAgICAgICAgICBfLiRuZXh0QXJyb3cucmVtb3ZlQ2xhc3MoJ3NsaWNrLWhpZGRlbicpLnJlbW92ZUF0dHIoJ2FyaWEtaGlkZGVuIHRhYmluZGV4Jyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF8uaHRtbEV4cHIudGVzdChfLm9wdGlvbnMucHJldkFycm93KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF8uJHByZXZBcnJvdy5wcmVwZW5kVG8oXy5vcHRpb25zLmFwcGVuZEFycm93cyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF8uaHRtbEV4cHIudGVzdChfLm9wdGlvbnMubmV4dEFycm93KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF8uJG5leHRBcnJvdy5hcHBlbmRUbyhfLm9wdGlvbnMuYXBwZW5kQXJyb3dzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoXy5vcHRpb25zLmluZmluaXRlICE9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXy4kcHJldkFycm93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2xpY2stZGlzYWJsZWQnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignYXJpYS1kaXNhYmxlZCcsICd0cnVlJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIF8uJHByZXZBcnJvdy5hZGQoIF8uJG5leHRBcnJvdyApXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2xpY2staGlkZGVuJylcclxuICAgICAgICAgICAgICAgICAgICAuYXR0cih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdhcmlhLWRpc2FibGVkJzogJ3RydWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAndGFiaW5kZXgnOiAnLTEnXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5idWlsZERvdHMgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzLFxyXG4gICAgICAgICAgICBpLCBkb3Q7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZG90cyA9PT0gdHJ1ZSAmJiBfLnNsaWRlQ291bnQgPiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XHJcblxyXG4gICAgICAgICAgICBfLiRzbGlkZXIuYWRkQ2xhc3MoJ3NsaWNrLWRvdHRlZCcpO1xyXG5cclxuICAgICAgICAgICAgZG90ID0gJCgnPHVsIC8+JykuYWRkQ2xhc3MoXy5vcHRpb25zLmRvdHNDbGFzcyk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IF8uZ2V0RG90Q291bnQoKTsgaSArPSAxKSB7XHJcbiAgICAgICAgICAgICAgICBkb3QuYXBwZW5kKCQoJzxsaSAvPicpLmFwcGVuZChfLm9wdGlvbnMuY3VzdG9tUGFnaW5nLmNhbGwodGhpcywgXywgaSkpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgXy4kZG90cyA9IGRvdC5hcHBlbmRUbyhfLm9wdGlvbnMuYXBwZW5kRG90cyk7XHJcblxyXG4gICAgICAgICAgICBfLiRkb3RzLmZpbmQoJ2xpJykuZmlyc3QoKS5hZGRDbGFzcygnc2xpY2stYWN0aXZlJykuYXR0cignYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmJ1aWxkT3V0ID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgXy4kc2xpZGVzID1cclxuICAgICAgICAgICAgXy4kc2xpZGVyXHJcbiAgICAgICAgICAgICAgICAuY2hpbGRyZW4oIF8ub3B0aW9ucy5zbGlkZSArICc6bm90KC5zbGljay1jbG9uZWQpJylcclxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2xpY2stc2xpZGUnKTtcclxuXHJcbiAgICAgICAgXy5zbGlkZUNvdW50ID0gXy4kc2xpZGVzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgXy4kc2xpZGVzLmVhY2goZnVuY3Rpb24oaW5kZXgsIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgJChlbGVtZW50KVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoJ2RhdGEtc2xpY2staW5kZXgnLCBpbmRleClcclxuICAgICAgICAgICAgICAgIC5kYXRhKCdvcmlnaW5hbFN0eWxpbmcnLCAkKGVsZW1lbnQpLmF0dHIoJ3N0eWxlJykgfHwgJycpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBfLiRzbGlkZXIuYWRkQ2xhc3MoJ3NsaWNrLXNsaWRlcicpO1xyXG5cclxuICAgICAgICBfLiRzbGlkZVRyYWNrID0gKF8uc2xpZGVDb3VudCA9PT0gMCkgP1xyXG4gICAgICAgICAgICAkKCc8ZGl2IGNsYXNzPVwic2xpY2stdHJhY2tcIi8+JykuYXBwZW5kVG8oXy4kc2xpZGVyKSA6XHJcbiAgICAgICAgICAgIF8uJHNsaWRlcy53cmFwQWxsKCc8ZGl2IGNsYXNzPVwic2xpY2stdHJhY2tcIi8+JykucGFyZW50KCk7XHJcblxyXG4gICAgICAgIF8uJGxpc3QgPSBfLiRzbGlkZVRyYWNrLndyYXAoXHJcbiAgICAgICAgICAgICc8ZGl2IGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGNsYXNzPVwic2xpY2stbGlzdFwiLz4nKS5wYXJlbnQoKTtcclxuICAgICAgICBfLiRzbGlkZVRyYWNrLmNzcygnb3BhY2l0eScsIDApO1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUgfHwgXy5vcHRpb25zLnN3aXBlVG9TbGlkZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwgPSAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJCgnaW1nW2RhdGEtbGF6eV0nLCBfLiRzbGlkZXIpLm5vdCgnW3NyY10nKS5hZGRDbGFzcygnc2xpY2stbG9hZGluZycpO1xyXG5cclxuICAgICAgICBfLnNldHVwSW5maW5pdGUoKTtcclxuXHJcbiAgICAgICAgXy5idWlsZEFycm93cygpO1xyXG5cclxuICAgICAgICBfLmJ1aWxkRG90cygpO1xyXG5cclxuICAgICAgICBfLnVwZGF0ZURvdHMoKTtcclxuXHJcblxyXG4gICAgICAgIF8uc2V0U2xpZGVDbGFzc2VzKHR5cGVvZiBfLmN1cnJlbnRTbGlkZSA9PT0gJ251bWJlcicgPyBfLmN1cnJlbnRTbGlkZSA6IDApO1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmRyYWdnYWJsZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBfLiRsaXN0LmFkZENsYXNzKCdkcmFnZ2FibGUnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuYnVpbGRSb3dzID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcywgYSwgYiwgYywgbmV3U2xpZGVzLCBudW1PZlNsaWRlcywgb3JpZ2luYWxTbGlkZXMsc2xpZGVzUGVyU2VjdGlvbjtcclxuXHJcbiAgICAgICAgbmV3U2xpZGVzID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xyXG4gICAgICAgIG9yaWdpbmFsU2xpZGVzID0gXy4kc2xpZGVyLmNoaWxkcmVuKCk7XHJcblxyXG4gICAgICAgIGlmKF8ub3B0aW9ucy5yb3dzID4gMSkge1xyXG5cclxuICAgICAgICAgICAgc2xpZGVzUGVyU2VjdGlvbiA9IF8ub3B0aW9ucy5zbGlkZXNQZXJSb3cgKiBfLm9wdGlvbnMucm93cztcclxuICAgICAgICAgICAgbnVtT2ZTbGlkZXMgPSBNYXRoLmNlaWwoXHJcbiAgICAgICAgICAgICAgICBvcmlnaW5hbFNsaWRlcy5sZW5ndGggLyBzbGlkZXNQZXJTZWN0aW9uXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBmb3IoYSA9IDA7IGEgPCBudW1PZlNsaWRlczsgYSsrKXtcclxuICAgICAgICAgICAgICAgIHZhciBzbGlkZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgICAgICAgICAgZm9yKGIgPSAwOyBiIDwgXy5vcHRpb25zLnJvd3M7IGIrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IoYyA9IDA7IGMgPCBfLm9wdGlvbnMuc2xpZGVzUGVyUm93OyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IChhICogc2xpZGVzUGVyU2VjdGlvbiArICgoYiAqIF8ub3B0aW9ucy5zbGlkZXNQZXJSb3cpICsgYykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JpZ2luYWxTbGlkZXMuZ2V0KHRhcmdldCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5hcHBlbmRDaGlsZChvcmlnaW5hbFNsaWRlcy5nZXQodGFyZ2V0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGUuYXBwZW5kQ2hpbGQocm93KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG5ld1NsaWRlcy5hcHBlbmRDaGlsZChzbGlkZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIF8uJHNsaWRlci5lbXB0eSgpLmFwcGVuZChuZXdTbGlkZXMpO1xyXG4gICAgICAgICAgICBfLiRzbGlkZXIuY2hpbGRyZW4oKS5jaGlsZHJlbigpLmNoaWxkcmVuKClcclxuICAgICAgICAgICAgICAgIC5jc3Moe1xyXG4gICAgICAgICAgICAgICAgICAgICd3aWR0aCc6KDEwMCAvIF8ub3B0aW9ucy5zbGlkZXNQZXJSb3cpICsgJyUnLFxyXG4gICAgICAgICAgICAgICAgICAgICdkaXNwbGF5JzogJ2lubGluZS1ibG9jaydcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuY2hlY2tSZXNwb25zaXZlID0gZnVuY3Rpb24oaW5pdGlhbCwgZm9yY2VVcGRhdGUpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzLFxyXG4gICAgICAgICAgICBicmVha3BvaW50LCB0YXJnZXRCcmVha3BvaW50LCByZXNwb25kVG9XaWR0aCwgdHJpZ2dlckJyZWFrcG9pbnQgPSBmYWxzZTtcclxuICAgICAgICB2YXIgc2xpZGVyV2lkdGggPSBfLiRzbGlkZXIud2lkdGgoKTtcclxuICAgICAgICB2YXIgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aCB8fCAkKHdpbmRvdykud2lkdGgoKTtcclxuXHJcbiAgICAgICAgaWYgKF8ucmVzcG9uZFRvID09PSAnd2luZG93Jykge1xyXG4gICAgICAgICAgICByZXNwb25kVG9XaWR0aCA9IHdpbmRvd1dpZHRoO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXy5yZXNwb25kVG8gPT09ICdzbGlkZXInKSB7XHJcbiAgICAgICAgICAgIHJlc3BvbmRUb1dpZHRoID0gc2xpZGVyV2lkdGg7XHJcbiAgICAgICAgfSBlbHNlIGlmIChfLnJlc3BvbmRUbyA9PT0gJ21pbicpIHtcclxuICAgICAgICAgICAgcmVzcG9uZFRvV2lkdGggPSBNYXRoLm1pbih3aW5kb3dXaWR0aCwgc2xpZGVyV2lkdGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCBfLm9wdGlvbnMucmVzcG9uc2l2ZSAmJlxyXG4gICAgICAgICAgICBfLm9wdGlvbnMucmVzcG9uc2l2ZS5sZW5ndGggJiZcclxuICAgICAgICAgICAgXy5vcHRpb25zLnJlc3BvbnNpdmUgIT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHRhcmdldEJyZWFrcG9pbnQgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgZm9yIChicmVha3BvaW50IGluIF8uYnJlYWtwb2ludHMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfLmJyZWFrcG9pbnRzLmhhc093blByb3BlcnR5KGJyZWFrcG9pbnQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF8ub3JpZ2luYWxTZXR0aW5ncy5tb2JpbGVGaXJzdCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbmRUb1dpZHRoIDwgXy5icmVha3BvaW50c1ticmVha3BvaW50XSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QnJlYWtwb2ludCA9IF8uYnJlYWtwb2ludHNbYnJlYWtwb2ludF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uZFRvV2lkdGggPiBfLmJyZWFrcG9pbnRzW2JyZWFrcG9pbnRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCcmVha3BvaW50ID0gXy5icmVha3BvaW50c1ticmVha3BvaW50XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhcmdldEJyZWFrcG9pbnQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChfLmFjdGl2ZUJyZWFrcG9pbnQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0QnJlYWtwb2ludCAhPT0gXy5hY3RpdmVCcmVha3BvaW50IHx8IGZvcmNlVXBkYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF8uYWN0aXZlQnJlYWtwb2ludCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCcmVha3BvaW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXy5icmVha3BvaW50U2V0dGluZ3NbdGFyZ2V0QnJlYWtwb2ludF0gPT09ICd1bnNsaWNrJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy51bnNsaWNrKHRhcmdldEJyZWFrcG9pbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5vcHRpb25zID0gJC5leHRlbmQoe30sIF8ub3JpZ2luYWxTZXR0aW5ncyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmJyZWFrcG9pbnRTZXR0aW5nc1tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QnJlYWtwb2ludF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluaXRpYWwgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmN1cnJlbnRTbGlkZSA9IF8ub3B0aW9ucy5pbml0aWFsU2xpZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLnJlZnJlc2goaW5pdGlhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckJyZWFrcG9pbnQgPSB0YXJnZXRCcmVha3BvaW50O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXy5hY3RpdmVCcmVha3BvaW50ID0gdGFyZ2V0QnJlYWtwb2ludDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXy5icmVha3BvaW50U2V0dGluZ3NbdGFyZ2V0QnJlYWtwb2ludF0gPT09ICd1bnNsaWNrJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfLnVuc2xpY2sodGFyZ2V0QnJlYWtwb2ludCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXy5vcHRpb25zID0gJC5leHRlbmQoe30sIF8ub3JpZ2luYWxTZXR0aW5ncyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uYnJlYWtwb2ludFNldHRpbmdzW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEJyZWFrcG9pbnRdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluaXRpYWwgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uY3VycmVudFNsaWRlID0gXy5vcHRpb25zLmluaXRpYWxTbGlkZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfLnJlZnJlc2goaW5pdGlhbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJCcmVha3BvaW50ID0gdGFyZ2V0QnJlYWtwb2ludDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChfLmFjdGl2ZUJyZWFrcG9pbnQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBfLmFjdGl2ZUJyZWFrcG9pbnQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIF8ub3B0aW9ucyA9IF8ub3JpZ2luYWxTZXR0aW5ncztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5pdGlhbCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfLmN1cnJlbnRTbGlkZSA9IF8ub3B0aW9ucy5pbml0aWFsU2xpZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIF8ucmVmcmVzaChpbml0aWFsKTtcclxuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyQnJlYWtwb2ludCA9IHRhcmdldEJyZWFrcG9pbnQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIG9ubHkgdHJpZ2dlciBicmVha3BvaW50cyBkdXJpbmcgYW4gYWN0dWFsIGJyZWFrLiBub3Qgb24gaW5pdGlhbGl6ZS5cclxuICAgICAgICAgICAgaWYoICFpbml0aWFsICYmIHRyaWdnZXJCcmVha3BvaW50ICE9PSBmYWxzZSApIHtcclxuICAgICAgICAgICAgICAgIF8uJHNsaWRlci50cmlnZ2VyKCdicmVha3BvaW50JywgW18sIHRyaWdnZXJCcmVha3BvaW50XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuY2hhbmdlU2xpZGUgPSBmdW5jdGlvbihldmVudCwgZG9udEFuaW1hdGUpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzLFxyXG4gICAgICAgICAgICAkdGFyZ2V0ID0gJChldmVudC5jdXJyZW50VGFyZ2V0KSxcclxuICAgICAgICAgICAgaW5kZXhPZmZzZXQsIHNsaWRlT2Zmc2V0LCB1bmV2ZW5PZmZzZXQ7XHJcblxyXG4gICAgICAgIC8vIElmIHRhcmdldCBpcyBhIGxpbmssIHByZXZlbnQgZGVmYXVsdCBhY3Rpb24uXHJcbiAgICAgICAgaWYoJHRhcmdldC5pcygnYScpKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJZiB0YXJnZXQgaXMgbm90IHRoZSA8bGk+IGVsZW1lbnQgKGllOiBhIGNoaWxkKSwgZmluZCB0aGUgPGxpPi5cclxuICAgICAgICBpZighJHRhcmdldC5pcygnbGknKSkge1xyXG4gICAgICAgICAgICAkdGFyZ2V0ID0gJHRhcmdldC5jbG9zZXN0KCdsaScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdW5ldmVuT2Zmc2V0ID0gKF8uc2xpZGVDb3VudCAlIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCAhPT0gMCk7XHJcbiAgICAgICAgaW5kZXhPZmZzZXQgPSB1bmV2ZW5PZmZzZXQgPyAwIDogKF8uc2xpZGVDb3VudCAtIF8uY3VycmVudFNsaWRlKSAlIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbDtcclxuXHJcbiAgICAgICAgc3dpdGNoIChldmVudC5kYXRhLm1lc3NhZ2UpIHtcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ3ByZXZpb3VzJzpcclxuICAgICAgICAgICAgICAgIHNsaWRlT2Zmc2V0ID0gaW5kZXhPZmZzZXQgPT09IDAgPyBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwgOiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93IC0gaW5kZXhPZmZzZXQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG4gICAgICAgICAgICAgICAgICAgIF8uc2xpZGVIYW5kbGVyKF8uY3VycmVudFNsaWRlIC0gc2xpZGVPZmZzZXQsIGZhbHNlLCBkb250QW5pbWF0ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ25leHQnOlxyXG4gICAgICAgICAgICAgICAgc2xpZGVPZmZzZXQgPSBpbmRleE9mZnNldCA9PT0gMCA/IF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCA6IGluZGV4T2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgaWYgKF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBfLnNsaWRlSGFuZGxlcihfLmN1cnJlbnRTbGlkZSArIHNsaWRlT2Zmc2V0LCBmYWxzZSwgZG9udEFuaW1hdGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdpbmRleCc6XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBldmVudC5kYXRhLmluZGV4ID09PSAwID8gMCA6XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5pbmRleCB8fCAkdGFyZ2V0LmluZGV4KCkgKiBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGw7XHJcblxyXG4gICAgICAgICAgICAgICAgXy5zbGlkZUhhbmRsZXIoXy5jaGVja05hdmlnYWJsZShpbmRleCksIGZhbHNlLCBkb250QW5pbWF0ZSk7XHJcbiAgICAgICAgICAgICAgICAkdGFyZ2V0LmNoaWxkcmVuKCkudHJpZ2dlcignZm9jdXMnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuY2hlY2tOYXZpZ2FibGUgPSBmdW5jdGlvbihpbmRleCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsXHJcbiAgICAgICAgICAgIG5hdmlnYWJsZXMsIHByZXZOYXZpZ2FibGU7XHJcblxyXG4gICAgICAgIG5hdmlnYWJsZXMgPSBfLmdldE5hdmlnYWJsZUluZGV4ZXMoKTtcclxuICAgICAgICBwcmV2TmF2aWdhYmxlID0gMDtcclxuICAgICAgICBpZiAoaW5kZXggPiBuYXZpZ2FibGVzW25hdmlnYWJsZXMubGVuZ3RoIC0gMV0pIHtcclxuICAgICAgICAgICAgaW5kZXggPSBuYXZpZ2FibGVzW25hdmlnYWJsZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgbiBpbiBuYXZpZ2FibGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBuYXZpZ2FibGVzW25dKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBwcmV2TmF2aWdhYmxlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcHJldk5hdmlnYWJsZSA9IG5hdmlnYWJsZXNbbl07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpbmRleDtcclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmNsZWFuVXBFdmVudHMgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmRvdHMgJiYgXy4kZG90cyAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgJCgnbGknLCBfLiRkb3RzKVxyXG4gICAgICAgICAgICAgICAgLm9mZignY2xpY2suc2xpY2snLCBfLmNoYW5nZVNsaWRlKVxyXG4gICAgICAgICAgICAgICAgLm9mZignbW91c2VlbnRlci5zbGljaycsICQucHJveHkoXy5pbnRlcnJ1cHQsIF8sIHRydWUpKVxyXG4gICAgICAgICAgICAgICAgLm9mZignbW91c2VsZWF2ZS5zbGljaycsICQucHJveHkoXy5pbnRlcnJ1cHQsIF8sIGZhbHNlKSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXy4kc2xpZGVyLm9mZignZm9jdXMuc2xpY2sgYmx1ci5zbGljaycpO1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmFycm93cyA9PT0gdHJ1ZSAmJiBfLnNsaWRlQ291bnQgPiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XHJcbiAgICAgICAgICAgIF8uJHByZXZBcnJvdyAmJiBfLiRwcmV2QXJyb3cub2ZmKCdjbGljay5zbGljaycsIF8uY2hhbmdlU2xpZGUpO1xyXG4gICAgICAgICAgICBfLiRuZXh0QXJyb3cgJiYgXy4kbmV4dEFycm93Lm9mZignY2xpY2suc2xpY2snLCBfLmNoYW5nZVNsaWRlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF8uJGxpc3Qub2ZmKCd0b3VjaHN0YXJ0LnNsaWNrIG1vdXNlZG93bi5zbGljaycsIF8uc3dpcGVIYW5kbGVyKTtcclxuICAgICAgICBfLiRsaXN0Lm9mZigndG91Y2htb3ZlLnNsaWNrIG1vdXNlbW92ZS5zbGljaycsIF8uc3dpcGVIYW5kbGVyKTtcclxuICAgICAgICBfLiRsaXN0Lm9mZigndG91Y2hlbmQuc2xpY2sgbW91c2V1cC5zbGljaycsIF8uc3dpcGVIYW5kbGVyKTtcclxuICAgICAgICBfLiRsaXN0Lm9mZigndG91Y2hjYW5jZWwuc2xpY2sgbW91c2VsZWF2ZS5zbGljaycsIF8uc3dpcGVIYW5kbGVyKTtcclxuXHJcbiAgICAgICAgXy4kbGlzdC5vZmYoJ2NsaWNrLnNsaWNrJywgXy5jbGlja0hhbmRsZXIpO1xyXG5cclxuICAgICAgICAkKGRvY3VtZW50KS5vZmYoXy52aXNpYmlsaXR5Q2hhbmdlLCBfLnZpc2liaWxpdHkpO1xyXG5cclxuICAgICAgICBfLmNsZWFuVXBTbGlkZUV2ZW50cygpO1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmFjY2Vzc2liaWxpdHkgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgXy4kbGlzdC5vZmYoJ2tleWRvd24uc2xpY2snLCBfLmtleUhhbmRsZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5mb2N1c09uU2VsZWN0ID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICQoXy4kc2xpZGVUcmFjaykuY2hpbGRyZW4oKS5vZmYoJ2NsaWNrLnNsaWNrJywgXy5zZWxlY3RIYW5kbGVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICQod2luZG93KS5vZmYoJ29yaWVudGF0aW9uY2hhbmdlLnNsaWNrLnNsaWNrLScgKyBfLmluc3RhbmNlVWlkLCBfLm9yaWVudGF0aW9uQ2hhbmdlKTtcclxuXHJcbiAgICAgICAgJCh3aW5kb3cpLm9mZigncmVzaXplLnNsaWNrLnNsaWNrLScgKyBfLmluc3RhbmNlVWlkLCBfLnJlc2l6ZSk7XHJcblxyXG4gICAgICAgICQoJ1tkcmFnZ2FibGUhPXRydWVdJywgXy4kc2xpZGVUcmFjaykub2ZmKCdkcmFnc3RhcnQnLCBfLnByZXZlbnREZWZhdWx0KTtcclxuXHJcbiAgICAgICAgJCh3aW5kb3cpLm9mZignbG9hZC5zbGljay5zbGljay0nICsgXy5pbnN0YW5jZVVpZCwgXy5zZXRQb3NpdGlvbik7XHJcbiAgICAgICAgJChkb2N1bWVudCkub2ZmKCdyZWFkeS5zbGljay5zbGljay0nICsgXy5pbnN0YW5jZVVpZCwgXy5zZXRQb3NpdGlvbik7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuY2xlYW5VcFNsaWRlRXZlbnRzID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgXy4kbGlzdC5vZmYoJ21vdXNlZW50ZXIuc2xpY2snLCAkLnByb3h5KF8uaW50ZXJydXB0LCBfLCB0cnVlKSk7XHJcbiAgICAgICAgXy4kbGlzdC5vZmYoJ21vdXNlbGVhdmUuc2xpY2snLCAkLnByb3h5KF8uaW50ZXJydXB0LCBfLCBmYWxzZSkpO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmNsZWFuVXBSb3dzID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcywgb3JpZ2luYWxTbGlkZXM7XHJcblxyXG4gICAgICAgIGlmKF8ub3B0aW9ucy5yb3dzID4gMSkge1xyXG4gICAgICAgICAgICBvcmlnaW5hbFNsaWRlcyA9IF8uJHNsaWRlcy5jaGlsZHJlbigpLmNoaWxkcmVuKCk7XHJcbiAgICAgICAgICAgIG9yaWdpbmFsU2xpZGVzLnJlbW92ZUF0dHIoJ3N0eWxlJyk7XHJcbiAgICAgICAgICAgIF8uJHNsaWRlci5lbXB0eSgpLmFwcGVuZChvcmlnaW5hbFNsaWRlcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmNsaWNrSGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKF8uc2hvdWxkQ2xpY2sgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKHJlZnJlc2gpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBfLmF1dG9QbGF5Q2xlYXIoKTtcclxuXHJcbiAgICAgICAgXy50b3VjaE9iamVjdCA9IHt9O1xyXG5cclxuICAgICAgICBfLmNsZWFuVXBFdmVudHMoKTtcclxuXHJcbiAgICAgICAgJCgnLnNsaWNrLWNsb25lZCcsIF8uJHNsaWRlcikuZGV0YWNoKCk7XHJcblxyXG4gICAgICAgIGlmIChfLiRkb3RzKSB7XHJcbiAgICAgICAgICAgIF8uJGRvdHMucmVtb3ZlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgaWYgKCBfLiRwcmV2QXJyb3cgJiYgXy4kcHJldkFycm93Lmxlbmd0aCApIHtcclxuXHJcbiAgICAgICAgICAgIF8uJHByZXZBcnJvd1xyXG4gICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdzbGljay1kaXNhYmxlZCBzbGljay1hcnJvdyBzbGljay1oaWRkZW4nKVxyXG4gICAgICAgICAgICAgICAgLnJlbW92ZUF0dHIoJ2FyaWEtaGlkZGVuIGFyaWEtZGlzYWJsZWQgdGFiaW5kZXgnKVxyXG4gICAgICAgICAgICAgICAgLmNzcygnZGlzcGxheScsJycpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCBfLmh0bWxFeHByLnRlc3QoIF8ub3B0aW9ucy5wcmV2QXJyb3cgKSkge1xyXG4gICAgICAgICAgICAgICAgXy4kcHJldkFycm93LnJlbW92ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIF8uJG5leHRBcnJvdyAmJiBfLiRuZXh0QXJyb3cubGVuZ3RoICkge1xyXG5cclxuICAgICAgICAgICAgXy4kbmV4dEFycm93XHJcbiAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NsaWNrLWRpc2FibGVkIHNsaWNrLWFycm93IHNsaWNrLWhpZGRlbicpXHJcbiAgICAgICAgICAgICAgICAucmVtb3ZlQXR0cignYXJpYS1oaWRkZW4gYXJpYS1kaXNhYmxlZCB0YWJpbmRleCcpXHJcbiAgICAgICAgICAgICAgICAuY3NzKCdkaXNwbGF5JywnJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIF8uaHRtbEV4cHIudGVzdCggXy5vcHRpb25zLm5leHRBcnJvdyApKSB7XHJcbiAgICAgICAgICAgICAgICBfLiRuZXh0QXJyb3cucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgaWYgKF8uJHNsaWRlcykge1xyXG5cclxuICAgICAgICAgICAgXy4kc2xpZGVzXHJcbiAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NsaWNrLXNsaWRlIHNsaWNrLWFjdGl2ZSBzbGljay1jZW50ZXIgc2xpY2stdmlzaWJsZSBzbGljay1jdXJyZW50JylcclxuICAgICAgICAgICAgICAgIC5yZW1vdmVBdHRyKCdhcmlhLWhpZGRlbicpXHJcbiAgICAgICAgICAgICAgICAucmVtb3ZlQXR0cignZGF0YS1zbGljay1pbmRleCcpXHJcbiAgICAgICAgICAgICAgICAuZWFjaChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignc3R5bGUnLCAkKHRoaXMpLmRhdGEoJ29yaWdpbmFsU3R5bGluZycpKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5jaGlsZHJlbih0aGlzLm9wdGlvbnMuc2xpZGUpLmRldGFjaCgpO1xyXG5cclxuICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5kZXRhY2goKTtcclxuXHJcbiAgICAgICAgICAgIF8uJGxpc3QuZGV0YWNoKCk7XHJcblxyXG4gICAgICAgICAgICBfLiRzbGlkZXIuYXBwZW5kKF8uJHNsaWRlcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfLmNsZWFuVXBSb3dzKCk7XHJcblxyXG4gICAgICAgIF8uJHNsaWRlci5yZW1vdmVDbGFzcygnc2xpY2stc2xpZGVyJyk7XHJcbiAgICAgICAgXy4kc2xpZGVyLnJlbW92ZUNsYXNzKCdzbGljay1pbml0aWFsaXplZCcpO1xyXG4gICAgICAgIF8uJHNsaWRlci5yZW1vdmVDbGFzcygnc2xpY2stZG90dGVkJyk7XHJcblxyXG4gICAgICAgIF8udW5zbGlja2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYoIXJlZnJlc2gpIHtcclxuICAgICAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ2Rlc3Ryb3knLCBbX10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5kaXNhYmxlVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKHNsaWRlKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcyxcclxuICAgICAgICAgICAgdHJhbnNpdGlvbiA9IHt9O1xyXG5cclxuICAgICAgICB0cmFuc2l0aW9uW18udHJhbnNpdGlvblR5cGVdID0gJyc7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZmFkZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5jc3ModHJhbnNpdGlvbik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgXy4kc2xpZGVzLmVxKHNsaWRlKS5jc3ModHJhbnNpdGlvbik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmZhZGVTbGlkZSA9IGZ1bmN0aW9uKHNsaWRlSW5kZXgsIGNhbGxiYWNrKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKF8uY3NzVHJhbnNpdGlvbnMgPT09IGZhbHNlKSB7XHJcblxyXG4gICAgICAgICAgICBfLiRzbGlkZXMuZXEoc2xpZGVJbmRleCkuY3NzKHtcclxuICAgICAgICAgICAgICAgIHpJbmRleDogXy5vcHRpb25zLnpJbmRleFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIF8uJHNsaWRlcy5lcShzbGlkZUluZGV4KS5hbmltYXRlKHtcclxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDFcclxuICAgICAgICAgICAgfSwgXy5vcHRpb25zLnNwZWVkLCBfLm9wdGlvbnMuZWFzaW5nLCBjYWxsYmFjayk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBfLmFwcGx5VHJhbnNpdGlvbihzbGlkZUluZGV4KTtcclxuXHJcbiAgICAgICAgICAgIF8uJHNsaWRlcy5lcShzbGlkZUluZGV4KS5jc3Moe1xyXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMSxcclxuICAgICAgICAgICAgICAgIHpJbmRleDogXy5vcHRpb25zLnpJbmRleFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgXy5kaXNhYmxlVHJhbnNpdGlvbihzbGlkZUluZGV4KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCgpO1xyXG4gICAgICAgICAgICAgICAgfSwgXy5vcHRpb25zLnNwZWVkKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuZmFkZVNsaWRlT3V0ID0gZnVuY3Rpb24oc2xpZGVJbmRleCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmIChfLmNzc1RyYW5zaXRpb25zID09PSBmYWxzZSkge1xyXG5cclxuICAgICAgICAgICAgXy4kc2xpZGVzLmVxKHNsaWRlSW5kZXgpLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMCxcclxuICAgICAgICAgICAgICAgIHpJbmRleDogXy5vcHRpb25zLnpJbmRleCAtIDJcclxuICAgICAgICAgICAgfSwgXy5vcHRpb25zLnNwZWVkLCBfLm9wdGlvbnMuZWFzaW5nKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIF8uYXBwbHlUcmFuc2l0aW9uKHNsaWRlSW5kZXgpO1xyXG5cclxuICAgICAgICAgICAgXy4kc2xpZGVzLmVxKHNsaWRlSW5kZXgpLmNzcyh7XHJcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLFxyXG4gICAgICAgICAgICAgICAgekluZGV4OiBfLm9wdGlvbnMuekluZGV4IC0gMlxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmZpbHRlclNsaWRlcyA9IFNsaWNrLnByb3RvdHlwZS5zbGlja0ZpbHRlciA9IGZ1bmN0aW9uKGZpbHRlcikge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmIChmaWx0ZXIgIT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIF8uJHNsaWRlc0NhY2hlID0gXy4kc2xpZGVzO1xyXG5cclxuICAgICAgICAgICAgXy51bmxvYWQoKTtcclxuXHJcbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY2hpbGRyZW4odGhpcy5vcHRpb25zLnNsaWRlKS5kZXRhY2goKTtcclxuXHJcbiAgICAgICAgICAgIF8uJHNsaWRlc0NhY2hlLmZpbHRlcihmaWx0ZXIpLmFwcGVuZFRvKF8uJHNsaWRlVHJhY2spO1xyXG5cclxuICAgICAgICAgICAgXy5yZWluaXQoKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmZvY3VzSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIF8uJHNsaWRlclxyXG4gICAgICAgICAgICAub2ZmKCdmb2N1cy5zbGljayBibHVyLnNsaWNrJylcclxuICAgICAgICAgICAgLm9uKCdmb2N1cy5zbGljayBibHVyLnNsaWNrJyxcclxuICAgICAgICAgICAgICAgICcqOm5vdCguc2xpY2stYXJyb3cpJywgZnVuY3Rpb24oZXZlbnQpIHtcclxuXHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICB2YXIgJHNmID0gJCh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIF8ub3B0aW9ucy5wYXVzZU9uRm9jdXMgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXy5mb2N1c3NlZCA9ICRzZi5pcygnOmZvY3VzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy5hdXRvUGxheSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSwgMCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuZ2V0Q3VycmVudCA9IFNsaWNrLnByb3RvdHlwZS5zbGlja0N1cnJlbnRTbGlkZSA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcbiAgICAgICAgcmV0dXJuIF8uY3VycmVudFNsaWRlO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmdldERvdENvdW50ID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgdmFyIGJyZWFrUG9pbnQgPSAwO1xyXG4gICAgICAgIHZhciBjb3VudGVyID0gMDtcclxuICAgICAgICB2YXIgcGFnZXJRdHkgPSAwO1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmluZmluaXRlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHdoaWxlIChicmVha1BvaW50IDwgXy5zbGlkZUNvdW50KSB7XHJcbiAgICAgICAgICAgICAgICArK3BhZ2VyUXR5O1xyXG4gICAgICAgICAgICAgICAgYnJlYWtQb2ludCA9IGNvdW50ZXIgKyBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGw7XHJcbiAgICAgICAgICAgICAgICBjb3VudGVyICs9IF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCA8PSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93ID8gXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsIDogXy5vcHRpb25zLnNsaWRlc1RvU2hvdztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgcGFnZXJRdHkgPSBfLnNsaWRlQ291bnQ7XHJcbiAgICAgICAgfSBlbHNlIGlmKCFfLm9wdGlvbnMuYXNOYXZGb3IpIHtcclxuICAgICAgICAgICAgcGFnZXJRdHkgPSAxICsgTWF0aC5jZWlsKChfLnNsaWRlQ291bnQgLSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSAvIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCk7XHJcbiAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICB3aGlsZSAoYnJlYWtQb2ludCA8IF8uc2xpZGVDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgKytwYWdlclF0eTtcclxuICAgICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBjb3VudGVyICsgXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsO1xyXG4gICAgICAgICAgICAgICAgY291bnRlciArPSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwgPD0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdyA/IF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCA6IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3c7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBwYWdlclF0eSAtIDE7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuZ2V0TGVmdCA9IGZ1bmN0aW9uKHNsaWRlSW5kZXgpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzLFxyXG4gICAgICAgICAgICB0YXJnZXRMZWZ0LFxyXG4gICAgICAgICAgICB2ZXJ0aWNhbEhlaWdodCxcclxuICAgICAgICAgICAgdmVydGljYWxPZmZzZXQgPSAwLFxyXG4gICAgICAgICAgICB0YXJnZXRTbGlkZTtcclxuXHJcbiAgICAgICAgXy5zbGlkZU9mZnNldCA9IDA7XHJcbiAgICAgICAgdmVydGljYWxIZWlnaHQgPSBfLiRzbGlkZXMuZmlyc3QoKS5vdXRlckhlaWdodCh0cnVlKTtcclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBpZiAoXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG4gICAgICAgICAgICAgICAgXy5zbGlkZU9mZnNldCA9IChfLnNsaWRlV2lkdGggKiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSAqIC0xO1xyXG4gICAgICAgICAgICAgICAgdmVydGljYWxPZmZzZXQgPSAodmVydGljYWxIZWlnaHQgKiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSAqIC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChfLnNsaWRlQ291bnQgJSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChzbGlkZUluZGV4ICsgXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsID4gXy5zbGlkZUNvdW50ICYmIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2xpZGVJbmRleCA+IF8uc2xpZGVDb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfLnNsaWRlT2Zmc2V0ID0gKChfLm9wdGlvbnMuc2xpZGVzVG9TaG93IC0gKHNsaWRlSW5kZXggLSBfLnNsaWRlQ291bnQpKSAqIF8uc2xpZGVXaWR0aCkgKiAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWxPZmZzZXQgPSAoKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgLSAoc2xpZGVJbmRleCAtIF8uc2xpZGVDb3VudCkpICogdmVydGljYWxIZWlnaHQpICogLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXy5zbGlkZU9mZnNldCA9ICgoXy5zbGlkZUNvdW50ICUgXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsKSAqIF8uc2xpZGVXaWR0aCkgKiAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWxPZmZzZXQgPSAoKF8uc2xpZGVDb3VudCAlIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCkgKiB2ZXJ0aWNhbEhlaWdodCkgKiAtMTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoc2xpZGVJbmRleCArIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgPiBfLnNsaWRlQ291bnQpIHtcclxuICAgICAgICAgICAgICAgIF8uc2xpZGVPZmZzZXQgPSAoKHNsaWRlSW5kZXggKyBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSAtIF8uc2xpZGVDb3VudCkgKiBfLnNsaWRlV2lkdGg7XHJcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbE9mZnNldCA9ICgoc2xpZGVJbmRleCArIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIC0gXy5zbGlkZUNvdW50KSAqIHZlcnRpY2FsSGVpZ2h0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXy5zbGlkZUNvdW50IDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcclxuICAgICAgICAgICAgXy5zbGlkZU9mZnNldCA9IDA7XHJcbiAgICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0ID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gdHJ1ZSAmJiBfLm9wdGlvbnMuaW5maW5pdGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgXy5zbGlkZU9mZnNldCArPSBfLnNsaWRlV2lkdGggKiBNYXRoLmZsb29yKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgLyAyKSAtIF8uc2xpZGVXaWR0aDtcclxuICAgICAgICB9IGVsc2UgaWYgKF8ub3B0aW9ucy5jZW50ZXJNb2RlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIF8uc2xpZGVPZmZzZXQgPSAwO1xyXG4gICAgICAgICAgICBfLnNsaWRlT2Zmc2V0ICs9IF8uc2xpZGVXaWR0aCAqIE1hdGguZmxvb3IoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAvIDIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy52ZXJ0aWNhbCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGFyZ2V0TGVmdCA9ICgoc2xpZGVJbmRleCAqIF8uc2xpZGVXaWR0aCkgKiAtMSkgKyBfLnNsaWRlT2Zmc2V0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRhcmdldExlZnQgPSAoKHNsaWRlSW5kZXggKiB2ZXJ0aWNhbEhlaWdodCkgKiAtMSkgKyB2ZXJ0aWNhbE9mZnNldDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMudmFyaWFibGVXaWR0aCA9PT0gdHJ1ZSkge1xyXG5cclxuICAgICAgICAgICAgaWYgKF8uc2xpZGVDb3VudCA8PSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93IHx8IF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldFNsaWRlID0gXy4kc2xpZGVUcmFjay5jaGlsZHJlbignLnNsaWNrLXNsaWRlJykuZXEoc2xpZGVJbmRleCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRTbGlkZSA9IF8uJHNsaWRlVHJhY2suY2hpbGRyZW4oJy5zbGljay1zbGlkZScpLmVxKHNsaWRlSW5kZXggKyBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5ydGwgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXRTbGlkZVswXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldExlZnQgPSAoXy4kc2xpZGVUcmFjay53aWR0aCgpIC0gdGFyZ2V0U2xpZGVbMF0ub2Zmc2V0TGVmdCAtIHRhcmdldFNsaWRlLndpZHRoKCkpICogLTE7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldExlZnQgPSAgMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldExlZnQgPSB0YXJnZXRTbGlkZVswXSA/IHRhcmdldFNsaWRlWzBdLm9mZnNldExlZnQgKiAtMSA6IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKF8uc2xpZGVDb3VudCA8PSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93IHx8IF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRTbGlkZSA9IF8uJHNsaWRlVHJhY2suY2hpbGRyZW4oJy5zbGljay1zbGlkZScpLmVxKHNsaWRlSW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRTbGlkZSA9IF8uJHNsaWRlVHJhY2suY2hpbGRyZW4oJy5zbGljay1zbGlkZScpLmVxKHNsaWRlSW5kZXggKyBfLm9wdGlvbnMuc2xpZGVzVG9TaG93ICsgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5ydGwgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0U2xpZGVbMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TGVmdCA9IChfLiRzbGlkZVRyYWNrLndpZHRoKCkgLSB0YXJnZXRTbGlkZVswXS5vZmZzZXRMZWZ0IC0gdGFyZ2V0U2xpZGUud2lkdGgoKSkgKiAtMTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRMZWZ0ID0gIDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRMZWZ0ID0gdGFyZ2V0U2xpZGVbMF0gPyB0YXJnZXRTbGlkZVswXS5vZmZzZXRMZWZ0ICogLTEgOiAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRhcmdldExlZnQgKz0gKF8uJGxpc3Qud2lkdGgoKSAtIHRhcmdldFNsaWRlLm91dGVyV2lkdGgoKSkgLyAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGFyZ2V0TGVmdDtcclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5nZXRPcHRpb24gPSBTbGljay5wcm90b3R5cGUuc2xpY2tHZXRPcHRpb24gPSBmdW5jdGlvbihvcHRpb24pIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICByZXR1cm4gXy5vcHRpb25zW29wdGlvbl07XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuZ2V0TmF2aWdhYmxlSW5kZXhlcyA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsXHJcbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSAwLFxyXG4gICAgICAgICAgICBjb3VudGVyID0gMCxcclxuICAgICAgICAgICAgaW5kZXhlcyA9IFtdLFxyXG4gICAgICAgICAgICBtYXg7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuaW5maW5pdGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIG1heCA9IF8uc2xpZGVDb3VudDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBicmVha1BvaW50ID0gXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsICogLTE7XHJcbiAgICAgICAgICAgIGNvdW50ZXIgPSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwgKiAtMTtcclxuICAgICAgICAgICAgbWF4ID0gXy5zbGlkZUNvdW50ICogMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHdoaWxlIChicmVha1BvaW50IDwgbWF4KSB7XHJcbiAgICAgICAgICAgIGluZGV4ZXMucHVzaChicmVha1BvaW50KTtcclxuICAgICAgICAgICAgYnJlYWtQb2ludCA9IGNvdW50ZXIgKyBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGw7XHJcbiAgICAgICAgICAgIGNvdW50ZXIgKz0gXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsIDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgPyBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwgOiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGluZGV4ZXM7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuZ2V0U2xpY2sgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuZ2V0U2xpZGVDb3VudCA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsXHJcbiAgICAgICAgICAgIHNsaWRlc1RyYXZlcnNlZCwgc3dpcGVkU2xpZGUsIGNlbnRlck9mZnNldDtcclxuXHJcbiAgICAgICAgY2VudGVyT2Zmc2V0ID0gXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUgPyBfLnNsaWRlV2lkdGggKiBNYXRoLmZsb29yKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgLyAyKSA6IDA7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuc3dpcGVUb1NsaWRlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suZmluZCgnLnNsaWNrLXNsaWRlJykuZWFjaChmdW5jdGlvbihpbmRleCwgc2xpZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzbGlkZS5vZmZzZXRMZWZ0IC0gY2VudGVyT2Zmc2V0ICsgKCQoc2xpZGUpLm91dGVyV2lkdGgoKSAvIDIpID4gKF8uc3dpcGVMZWZ0ICogLTEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3dpcGVkU2xpZGUgPSBzbGlkZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2xpZGVzVHJhdmVyc2VkID0gTWF0aC5hYnMoJChzd2lwZWRTbGlkZSkuYXR0cignZGF0YS1zbGljay1pbmRleCcpIC0gXy5jdXJyZW50U2xpZGUpIHx8IDE7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc2xpZGVzVHJhdmVyc2VkO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gXy5vcHRpb25zLnNsaWRlc1RvU2Nyb2xsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5nb1RvID0gU2xpY2sucHJvdG90eXBlLnNsaWNrR29UbyA9IGZ1bmN0aW9uKHNsaWRlLCBkb250QW5pbWF0ZSkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIF8uY2hhbmdlU2xpZGUoe1xyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW5kZXgnLFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IHBhcnNlSW50KHNsaWRlKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgZG9udEFuaW1hdGUpO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihjcmVhdGlvbikge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmICghJChfLiRzbGlkZXIpLmhhc0NsYXNzKCdzbGljay1pbml0aWFsaXplZCcpKSB7XHJcblxyXG4gICAgICAgICAgICAkKF8uJHNsaWRlcikuYWRkQ2xhc3MoJ3NsaWNrLWluaXRpYWxpemVkJyk7XHJcblxyXG4gICAgICAgICAgICBfLmJ1aWxkUm93cygpO1xyXG4gICAgICAgICAgICBfLmJ1aWxkT3V0KCk7XHJcbiAgICAgICAgICAgIF8uc2V0UHJvcHMoKTtcclxuICAgICAgICAgICAgXy5zdGFydExvYWQoKTtcclxuICAgICAgICAgICAgXy5sb2FkU2xpZGVyKCk7XHJcbiAgICAgICAgICAgIF8uaW5pdGlhbGl6ZUV2ZW50cygpO1xyXG4gICAgICAgICAgICBfLnVwZGF0ZUFycm93cygpO1xyXG4gICAgICAgICAgICBfLnVwZGF0ZURvdHMoKTtcclxuICAgICAgICAgICAgXy5jaGVja1Jlc3BvbnNpdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIF8uZm9jdXNIYW5kbGVyKCk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNyZWF0aW9uKSB7XHJcbiAgICAgICAgICAgIF8uJHNsaWRlci50cmlnZ2VyKCdpbml0JywgW19dKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuYWNjZXNzaWJpbGl0eSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBfLmluaXRBREEoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICggXy5vcHRpb25zLmF1dG9wbGF5ICkge1xyXG5cclxuICAgICAgICAgICAgXy5wYXVzZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgXy5hdXRvUGxheSgpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuaW5pdEFEQSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuICAgICAgICAvLyBWRUxJUiAtIHJlbW92ZSB0YWJpbmRleDogLTFcclxuICAgICAgICBfLiRzbGlkZXMuYWRkKF8uJHNsaWRlVHJhY2suZmluZCgnLnNsaWNrLWNsb25lZCcpKS5hdHRyKHtcclxuICAgICAgICAgICAgJ2FyaWEtaGlkZGVuJzogJ3RydWUnLFxyXG4gICAgICAgIH0pLmZpbmQoJ2EsIGlucHV0LCBidXR0b24sIHNlbGVjdCcpLmF0dHIoe1xyXG4gICAgICAgICAgICAndGFiaW5kZXgnOiAnLTEnXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIF8uJHNsaWRlVHJhY2suYXR0cigncm9sZScsICdsaXN0Ym94Jyk7XHJcblxyXG4gICAgICAgIF8uJHNsaWRlcy5ub3QoXy4kc2xpZGVUcmFjay5maW5kKCcuc2xpY2stY2xvbmVkJykpLmVhY2goZnVuY3Rpb24oaSkge1xyXG4gICAgICAgICAgICAkKHRoaXMpLmF0dHIoe1xyXG4gICAgICAgICAgICAgICAgJ3JvbGUnOiAnb3B0aW9uJyxcclxuICAgICAgICAgICAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogJ3NsaWNrLXNsaWRlJyArIF8uaW5zdGFuY2VVaWQgKyBpICsgJydcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8qIFZFTElSXHJcbiAgICAgICAgICAgIC0gcmVtb3ZlZCBhZGRpbmcgdGFibGlzaCByb2xlIHRvIGRvdHNcclxuICAgICAgICAgICAgLSByZW1vdmVkIGFkZGluZyByb2xlIHRhYiB0byBsaVxyXG4gICAgICAgICAgICAtIHJlbW92ZWQgYWRkaW5nIGFyaWEtc2VsZWN0ZWQgdG8gbGlcclxuICAgICAgICAgICAgLSByZW1vdmVkIGFkZGluZyBhcmlhLWNvbnRyb2xzIHRvIGxpXHJcbiAgICAgICAgICovXHJcblxyXG4gICAgICAgIGlmIChfLiRkb3RzICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIF8uJGRvdHMuZmluZCgnbGknKS5lYWNoKGZ1bmN0aW9uKGkpIHtcclxuICAgICAgICAgICAgICAgICQodGhpcykuYXR0cih7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2lkJzogJ3NsaWNrLXNsaWRlJyArIF8uaW5zdGFuY2VVaWQgKyBpICsgJydcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmZpbmQoJ2J1dHRvbicpLmF0dHIoJ3JvbGUnLCAnYnV0dG9uJykuZW5kKClcclxuICAgICAgICAgICAgICAgIC5jbG9zZXN0KCdkaXYnKS5hdHRyKCdyb2xlJywgJ3Rvb2xiYXInKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXy5hY3RpdmF0ZUFEQSgpO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmluaXRBcnJvd0V2ZW50cyA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuYXJyb3dzID09PSB0cnVlICYmIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcclxuICAgICAgICAgICAgXy4kcHJldkFycm93XHJcbiAgICAgICAgICAgICAgIC5vZmYoJ2NsaWNrLnNsaWNrJylcclxuICAgICAgICAgICAgICAgLm9uKCdjbGljay5zbGljaycsIHtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAncHJldmlvdXMnXHJcbiAgICAgICAgICAgICAgIH0sIF8uY2hhbmdlU2xpZGUpO1xyXG4gICAgICAgICAgICBfLiRuZXh0QXJyb3dcclxuICAgICAgICAgICAgICAgLm9mZignY2xpY2suc2xpY2snKVxyXG4gICAgICAgICAgICAgICAub24oJ2NsaWNrLnNsaWNrJywge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICduZXh0J1xyXG4gICAgICAgICAgICAgICB9LCBfLmNoYW5nZVNsaWRlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuaW5pdERvdEV2ZW50cyA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZG90cyA9PT0gdHJ1ZSAmJiBfLnNsaWRlQ291bnQgPiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XHJcbiAgICAgICAgICAgICQoJ2xpJywgXy4kZG90cykub24oJ2NsaWNrLnNsaWNrJywge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ2luZGV4J1xyXG4gICAgICAgICAgICB9LCBfLmNoYW5nZVNsaWRlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICggXy5vcHRpb25zLmRvdHMgPT09IHRydWUgJiYgXy5vcHRpb25zLnBhdXNlT25Eb3RzSG92ZXIgPT09IHRydWUgKSB7XHJcblxyXG4gICAgICAgICAgICAkKCdsaScsIF8uJGRvdHMpXHJcbiAgICAgICAgICAgICAgICAub24oJ21vdXNlZW50ZXIuc2xpY2snLCAkLnByb3h5KF8uaW50ZXJydXB0LCBfLCB0cnVlKSlcclxuICAgICAgICAgICAgICAgIC5vbignbW91c2VsZWF2ZS5zbGljaycsICQucHJveHkoXy5pbnRlcnJ1cHQsIF8sIGZhbHNlKSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5pbml0U2xpZGVFdmVudHMgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoIF8ub3B0aW9ucy5wYXVzZU9uSG92ZXIgKSB7XHJcblxyXG4gICAgICAgICAgICBfLiRsaXN0Lm9uKCdtb3VzZWVudGVyLnNsaWNrJywgJC5wcm94eShfLmludGVycnVwdCwgXywgdHJ1ZSkpO1xyXG4gICAgICAgICAgICBfLiRsaXN0Lm9uKCdtb3VzZWxlYXZlLnNsaWNrJywgJC5wcm94eShfLmludGVycnVwdCwgXywgZmFsc2UpKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmluaXRpYWxpemVFdmVudHMgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBfLmluaXRBcnJvd0V2ZW50cygpO1xyXG5cclxuICAgICAgICBfLmluaXREb3RFdmVudHMoKTtcclxuICAgICAgICBfLmluaXRTbGlkZUV2ZW50cygpO1xyXG5cclxuICAgICAgICBfLiRsaXN0Lm9uKCd0b3VjaHN0YXJ0LnNsaWNrIG1vdXNlZG93bi5zbGljaycsIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnc3RhcnQnXHJcbiAgICAgICAgfSwgXy5zd2lwZUhhbmRsZXIpO1xyXG4gICAgICAgIF8uJGxpc3Qub24oJ3RvdWNobW92ZS5zbGljayBtb3VzZW1vdmUuc2xpY2snLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ21vdmUnXHJcbiAgICAgICAgfSwgXy5zd2lwZUhhbmRsZXIpO1xyXG4gICAgICAgIF8uJGxpc3Qub24oJ3RvdWNoZW5kLnNsaWNrIG1vdXNldXAuc2xpY2snLCB7XHJcbiAgICAgICAgICAgIGFjdGlvbjogJ2VuZCdcclxuICAgICAgICB9LCBfLnN3aXBlSGFuZGxlcik7XHJcbiAgICAgICAgXy4kbGlzdC5vbigndG91Y2hjYW5jZWwuc2xpY2sgbW91c2VsZWF2ZS5zbGljaycsIHtcclxuICAgICAgICAgICAgYWN0aW9uOiAnZW5kJ1xyXG4gICAgICAgIH0sIF8uc3dpcGVIYW5kbGVyKTtcclxuXHJcbiAgICAgICAgXy4kbGlzdC5vbignY2xpY2suc2xpY2snLCBfLmNsaWNrSGFuZGxlcik7XHJcblxyXG4gICAgICAgICQoZG9jdW1lbnQpLm9uKF8udmlzaWJpbGl0eUNoYW5nZSwgJC5wcm94eShfLnZpc2liaWxpdHksIF8pKTtcclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5hY2Nlc3NpYmlsaXR5ID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIF8uJGxpc3Qub24oJ2tleWRvd24uc2xpY2snLCBfLmtleUhhbmRsZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5mb2N1c09uU2VsZWN0ID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICQoXy4kc2xpZGVUcmFjaykuY2hpbGRyZW4oKS5vbignY2xpY2suc2xpY2snLCBfLnNlbGVjdEhhbmRsZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJCh3aW5kb3cpLm9uKCdvcmllbnRhdGlvbmNoYW5nZS5zbGljay5zbGljay0nICsgXy5pbnN0YW5jZVVpZCwgJC5wcm94eShfLm9yaWVudGF0aW9uQ2hhbmdlLCBfKSk7XHJcblxyXG4gICAgICAgICQod2luZG93KS5vbigncmVzaXplLnNsaWNrLnNsaWNrLScgKyBfLmluc3RhbmNlVWlkLCAkLnByb3h5KF8ucmVzaXplLCBfKSk7XHJcblxyXG4gICAgICAgICQoJ1tkcmFnZ2FibGUhPXRydWVdJywgXy4kc2xpZGVUcmFjaykub24oJ2RyYWdzdGFydCcsIF8ucHJldmVudERlZmF1bHQpO1xyXG5cclxuICAgICAgICAkKHdpbmRvdykub24oJ2xvYWQuc2xpY2suc2xpY2stJyArIF8uaW5zdGFuY2VVaWQsIF8uc2V0UG9zaXRpb24pO1xyXG4gICAgICAgICQoZG9jdW1lbnQpLm9uKCdyZWFkeS5zbGljay5zbGljay0nICsgXy5pbnN0YW5jZVVpZCwgXy5zZXRQb3NpdGlvbik7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuaW5pdFVJID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5hcnJvd3MgPT09IHRydWUgJiYgXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG5cclxuICAgICAgICAgICAgXy4kcHJldkFycm93LnNob3coKTtcclxuICAgICAgICAgICAgXy4kbmV4dEFycm93LnNob3coKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmRvdHMgPT09IHRydWUgJiYgXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG5cclxuICAgICAgICAgICAgXy4kZG90cy5zaG93KCk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5rZXlIYW5kbGVyID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG4gICAgICAgICAvL0RvbnQgc2xpZGUgaWYgdGhlIGN1cnNvciBpcyBpbnNpZGUgdGhlIGZvcm0gZmllbGRzIGFuZCBhcnJvdyBrZXlzIGFyZSBwcmVzc2VkXHJcbiAgICAgICAgaWYoIWV2ZW50LnRhcmdldC50YWdOYW1lLm1hdGNoKCdURVhUQVJFQXxJTlBVVHxTRUxFQ1QnKSkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMzcgJiYgXy5vcHRpb25zLmFjY2Vzc2liaWxpdHkgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIF8uY2hhbmdlU2xpZGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXy5vcHRpb25zLnJ0bCA9PT0gdHJ1ZSA/ICduZXh0JyA6ICAncHJldmlvdXMnXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMzkgJiYgXy5vcHRpb25zLmFjY2Vzc2liaWxpdHkgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIF8uY2hhbmdlU2xpZGUoe1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogXy5vcHRpb25zLnJ0bCA9PT0gdHJ1ZSA/ICdwcmV2aW91cycgOiAnbmV4dCdcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5sYXp5TG9hZCA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsXHJcbiAgICAgICAgICAgIGxvYWRSYW5nZSwgY2xvbmVSYW5nZSwgcmFuZ2VTdGFydCwgcmFuZ2VFbmQ7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGxvYWRJbWFnZXMoaW1hZ2VzU2NvcGUpIHtcclxuXHJcbiAgICAgICAgICAgICQoJ2ltZ1tkYXRhLWxhenldJywgaW1hZ2VzU2NvcGUpLmVhY2goZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGltYWdlID0gJCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICAgICBpbWFnZVNvdXJjZSA9ICQodGhpcykuYXR0cignZGF0YS1sYXp5JyksXHJcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VUb0xvYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpbWFnZVRvTG9hZC5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFuaW1hdGUoeyBvcGFjaXR5OiAwIH0sIDEwMCwgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdzcmMnLCBpbWFnZVNvdXJjZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYW5pbWF0ZSh7IG9wYWNpdHk6IDEgfSwgMjAwLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmVBdHRyKCdkYXRhLWxhenknKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdzbGljay1sb2FkaW5nJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLiRzbGlkZXIudHJpZ2dlcignbGF6eUxvYWRlZCcsIFtfLCBpbWFnZSwgaW1hZ2VTb3VyY2VdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBpbWFnZVRvTG9hZC5vbmVycm9yID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmVBdHRyKCAnZGF0YS1sYXp5JyApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcyggJ3NsaWNrLWxvYWRpbmcnIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCAnc2xpY2stbGF6eWxvYWQtZXJyb3InICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF8uJHNsaWRlci50cmlnZ2VyKCdsYXp5TG9hZEVycm9yJywgWyBfLCBpbWFnZSwgaW1hZ2VTb3VyY2UgXSk7XHJcblxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBpbWFnZVRvTG9hZC5zcmMgPSBpbWFnZVNvdXJjZTtcclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBpZiAoXy5vcHRpb25zLmluZmluaXRlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICByYW5nZVN0YXJ0ID0gXy5jdXJyZW50U2xpZGUgKyAoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAvIDIgKyAxKTtcclxuICAgICAgICAgICAgICAgIHJhbmdlRW5kID0gcmFuZ2VTdGFydCArIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgKyAyO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmFuZ2VTdGFydCA9IE1hdGgubWF4KDAsIF8uY3VycmVudFNsaWRlIC0gKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgLyAyICsgMSkpO1xyXG4gICAgICAgICAgICAgICAgcmFuZ2VFbmQgPSAyICsgKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgLyAyICsgMSkgKyBfLmN1cnJlbnRTbGlkZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJhbmdlU3RhcnQgPSBfLm9wdGlvbnMuaW5maW5pdGUgPyBfLm9wdGlvbnMuc2xpZGVzVG9TaG93ICsgXy5jdXJyZW50U2xpZGUgOiBfLmN1cnJlbnRTbGlkZTtcclxuICAgICAgICAgICAgcmFuZ2VFbmQgPSBNYXRoLmNlaWwocmFuZ2VTdGFydCArIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpO1xyXG4gICAgICAgICAgICBpZiAoXy5vcHRpb25zLmZhZGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyYW5nZVN0YXJ0ID4gMCkgcmFuZ2VTdGFydC0tO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJhbmdlRW5kIDw9IF8uc2xpZGVDb3VudCkgcmFuZ2VFbmQrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbG9hZFJhbmdlID0gXy4kc2xpZGVyLmZpbmQoJy5zbGljay1zbGlkZScpLnNsaWNlKHJhbmdlU3RhcnQsIHJhbmdlRW5kKTtcclxuICAgICAgICBsb2FkSW1hZ2VzKGxvYWRSYW5nZSk7XHJcblxyXG4gICAgICAgIGlmIChfLnNsaWRlQ291bnQgPD0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG4gICAgICAgICAgICBjbG9uZVJhbmdlID0gXy4kc2xpZGVyLmZpbmQoJy5zbGljay1zbGlkZScpO1xyXG4gICAgICAgICAgICBsb2FkSW1hZ2VzKGNsb25lUmFuZ2UpO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgIGlmIChfLmN1cnJlbnRTbGlkZSA+PSBfLnNsaWRlQ291bnQgLSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93KSB7XHJcbiAgICAgICAgICAgIGNsb25lUmFuZ2UgPSBfLiRzbGlkZXIuZmluZCgnLnNsaWNrLWNsb25lZCcpLnNsaWNlKDAsIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpO1xyXG4gICAgICAgICAgICBsb2FkSW1hZ2VzKGNsb25lUmFuZ2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXy5jdXJyZW50U2xpZGUgPT09IDApIHtcclxuICAgICAgICAgICAgY2xvbmVSYW5nZSA9IF8uJHNsaWRlci5maW5kKCcuc2xpY2stY2xvbmVkJykuc2xpY2UoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAqIC0xKTtcclxuICAgICAgICAgICAgbG9hZEltYWdlcyhjbG9uZVJhbmdlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUubG9hZFNsaWRlciA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIF8uc2V0UG9zaXRpb24oKTtcclxuXHJcbiAgICAgICAgXy4kc2xpZGVUcmFjay5jc3Moe1xyXG4gICAgICAgICAgICBvcGFjaXR5OiAxXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIF8uJHNsaWRlci5yZW1vdmVDbGFzcygnc2xpY2stbG9hZGluZycpO1xyXG5cclxuICAgICAgICBfLmluaXRVSSgpO1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmxhenlMb2FkID09PSAncHJvZ3Jlc3NpdmUnKSB7XHJcbiAgICAgICAgICAgIF8ucHJvZ3Jlc3NpdmVMYXp5TG9hZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5uZXh0ID0gU2xpY2sucHJvdG90eXBlLnNsaWNrTmV4dCA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIF8uY2hhbmdlU2xpZGUoe1xyXG4gICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnbmV4dCdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLm9yaWVudGF0aW9uQ2hhbmdlID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgXy5jaGVja1Jlc3BvbnNpdmUoKTtcclxuICAgICAgICBfLnNldFBvc2l0aW9uKCk7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUucGF1c2UgPSBTbGljay5wcm90b3R5cGUuc2xpY2tQYXVzZSA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIF8uYXV0b1BsYXlDbGVhcigpO1xyXG4gICAgICAgIF8ucGF1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5wbGF5ID0gU2xpY2sucHJvdG90eXBlLnNsaWNrUGxheSA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIF8uYXV0b1BsYXkoKTtcclxuICAgICAgICBfLm9wdGlvbnMuYXV0b3BsYXkgPSB0cnVlO1xyXG4gICAgICAgIF8ucGF1c2VkID0gZmFsc2U7XHJcbiAgICAgICAgXy5mb2N1c3NlZCA9IGZhbHNlO1xyXG4gICAgICAgIF8uaW50ZXJydXB0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5wb3N0U2xpZGUgPSBmdW5jdGlvbihpbmRleCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmKCAhXy51bnNsaWNrZWQgKSB7XHJcblxyXG4gICAgICAgICAgICBfLiRzbGlkZXIudHJpZ2dlcignYWZ0ZXJDaGFuZ2UnLCBbXywgaW5kZXhdKTtcclxuXHJcbiAgICAgICAgICAgIF8uYW5pbWF0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBfLnNldFBvc2l0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICBfLnN3aXBlTGVmdCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAoIF8ub3B0aW9ucy5hdXRvcGxheSApIHtcclxuICAgICAgICAgICAgICAgIF8uYXV0b1BsYXkoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5hY2Nlc3NpYmlsaXR5ID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICBfLmluaXRBREEoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUucHJldiA9IFNsaWNrLnByb3RvdHlwZS5zbGlja1ByZXYgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBfLmNoYW5nZVNsaWRlKHtcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ3ByZXZpb3VzJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbihldmVudCkge1xyXG5cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnByb2dyZXNzaXZlTGF6eUxvYWQgPSBmdW5jdGlvbiggdHJ5Q291bnQgKSB7XHJcblxyXG4gICAgICAgIHRyeUNvdW50ID0gdHJ5Q291bnQgfHwgMTtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzLFxyXG4gICAgICAgICAgICAkaW1nc1RvTG9hZCA9ICQoICdpbWdbZGF0YS1sYXp5XScsIF8uJHNsaWRlciApLFxyXG4gICAgICAgICAgICBpbWFnZSxcclxuICAgICAgICAgICAgaW1hZ2VTb3VyY2UsXHJcbiAgICAgICAgICAgIGltYWdlVG9Mb2FkO1xyXG5cclxuICAgICAgICBpZiAoICRpbWdzVG9Mb2FkLmxlbmd0aCApIHtcclxuXHJcbiAgICAgICAgICAgIGltYWdlID0gJGltZ3NUb0xvYWQuZmlyc3QoKTtcclxuICAgICAgICAgICAgaW1hZ2VTb3VyY2UgPSBpbWFnZS5hdHRyKCdkYXRhLWxhenknKTtcclxuICAgICAgICAgICAgaW1hZ2VUb0xvYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuXHJcbiAgICAgICAgICAgIGltYWdlVG9Mb2FkLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGltYWdlXHJcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoICdzcmMnLCBpbWFnZVNvdXJjZSApXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUF0dHIoJ2RhdGEtbGF6eScpXHJcbiAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdzbGljay1sb2FkaW5nJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCBfLm9wdGlvbnMuYWRhcHRpdmVIZWlnaHQgPT09IHRydWUgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXy5zZXRQb3NpdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIF8uJHNsaWRlci50cmlnZ2VyKCdsYXp5TG9hZGVkJywgWyBfLCBpbWFnZSwgaW1hZ2VTb3VyY2UgXSk7XHJcbiAgICAgICAgICAgICAgICBfLnByb2dyZXNzaXZlTGF6eUxvYWQoKTtcclxuXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBpbWFnZVRvTG9hZC5vbmVycm9yID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCB0cnlDb3VudCA8IDMgKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICAgICAqIHRyeSB0byBsb2FkIHRoZSBpbWFnZSAzIHRpbWVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAqIGxlYXZlIGEgc2xpZ2h0IGRlbGF5IHNvIHdlIGRvbid0IGdldFxyXG4gICAgICAgICAgICAgICAgICAgICAqIHNlcnZlcnMgYmxvY2tpbmcgdGhlIHJlcXVlc3QuXHJcbiAgICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF8ucHJvZ3Jlc3NpdmVMYXp5TG9hZCggdHJ5Q291bnQgKyAxICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgNTAwICk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUF0dHIoICdkYXRhLWxhenknIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCAnc2xpY2stbG9hZGluZycgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoICdzbGljay1sYXp5bG9hZC1lcnJvcicgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ2xhenlMb2FkRXJyb3InLCBbIF8sIGltYWdlLCBpbWFnZVNvdXJjZSBdKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgXy5wcm9ncmVzc2l2ZUxhenlMb2FkKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGltYWdlVG9Mb2FkLnNyYyA9IGltYWdlU291cmNlO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ2FsbEltYWdlc0xvYWRlZCcsIFsgXyBdKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiggaW5pdGlhbGl6aW5nICkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsIGN1cnJlbnRTbGlkZSwgbGFzdFZpc2libGVJbmRleDtcclxuXHJcbiAgICAgICAgbGFzdFZpc2libGVJbmRleCA9IF8uc2xpZGVDb3VudCAtIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3c7XHJcblxyXG4gICAgICAgIC8vIGluIG5vbi1pbmZpbml0ZSBzbGlkZXJzLCB3ZSBkb24ndCB3YW50IHRvIGdvIHBhc3QgdGhlXHJcbiAgICAgICAgLy8gbGFzdCB2aXNpYmxlIGluZGV4LlxyXG4gICAgICAgIGlmKCAhXy5vcHRpb25zLmluZmluaXRlICYmICggXy5jdXJyZW50U2xpZGUgPiBsYXN0VmlzaWJsZUluZGV4ICkpIHtcclxuICAgICAgICAgICAgXy5jdXJyZW50U2xpZGUgPSBsYXN0VmlzaWJsZUluZGV4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaWYgbGVzcyBzbGlkZXMgdGhhbiB0byBzaG93LCBnbyB0byBzdGFydC5cclxuICAgICAgICBpZiAoIF8uc2xpZGVDb3VudCA8PSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93ICkge1xyXG4gICAgICAgICAgICBfLmN1cnJlbnRTbGlkZSA9IDA7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY3VycmVudFNsaWRlID0gXy5jdXJyZW50U2xpZGU7XHJcblxyXG4gICAgICAgIF8uZGVzdHJveSh0cnVlKTtcclxuXHJcbiAgICAgICAgJC5leHRlbmQoXywgXy5pbml0aWFscywgeyBjdXJyZW50U2xpZGU6IGN1cnJlbnRTbGlkZSB9KTtcclxuXHJcbiAgICAgICAgXy5pbml0KCk7XHJcblxyXG4gICAgICAgIGlmKCAhaW5pdGlhbGl6aW5nICkge1xyXG5cclxuICAgICAgICAgICAgXy5jaGFuZ2VTbGlkZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ2luZGV4JyxcclxuICAgICAgICAgICAgICAgICAgICBpbmRleDogY3VycmVudFNsaWRlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIGZhbHNlKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnJlZ2lzdGVyQnJlYWtwb2ludHMgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzLCBicmVha3BvaW50LCBjdXJyZW50QnJlYWtwb2ludCwgbCxcclxuICAgICAgICAgICAgcmVzcG9uc2l2ZVNldHRpbmdzID0gXy5vcHRpb25zLnJlc3BvbnNpdmUgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKCAkLnR5cGUocmVzcG9uc2l2ZVNldHRpbmdzKSA9PT0gJ2FycmF5JyAmJiByZXNwb25zaXZlU2V0dGluZ3MubGVuZ3RoICkge1xyXG5cclxuICAgICAgICAgICAgXy5yZXNwb25kVG8gPSBfLm9wdGlvbnMucmVzcG9uZFRvIHx8ICd3aW5kb3cnO1xyXG5cclxuICAgICAgICAgICAgZm9yICggYnJlYWtwb2ludCBpbiByZXNwb25zaXZlU2V0dGluZ3MgKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgbCA9IF8uYnJlYWtwb2ludHMubGVuZ3RoLTE7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50QnJlYWtwb2ludCA9IHJlc3BvbnNpdmVTZXR0aW5nc1ticmVha3BvaW50XS5icmVha3BvaW50O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zaXZlU2V0dGluZ3MuaGFzT3duUHJvcGVydHkoYnJlYWtwb2ludCkpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIHRoZSBicmVha3BvaW50cyBhbmQgY3V0IG91dCBhbnkgZXhpc3RpbmdcclxuICAgICAgICAgICAgICAgICAgICAvLyBvbmVzIHdpdGggdGhlIHNhbWUgYnJlYWtwb2ludCBudW1iZXIsIHdlIGRvbid0IHdhbnQgZHVwZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUoIGwgPj0gMCApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIF8uYnJlYWtwb2ludHNbbF0gJiYgXy5icmVha3BvaW50c1tsXSA9PT0gY3VycmVudEJyZWFrcG9pbnQgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmJyZWFrcG9pbnRzLnNwbGljZShsLDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGwtLTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF8uYnJlYWtwb2ludHMucHVzaChjdXJyZW50QnJlYWtwb2ludCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy5icmVha3BvaW50U2V0dGluZ3NbY3VycmVudEJyZWFrcG9pbnRdID0gcmVzcG9uc2l2ZVNldHRpbmdzW2JyZWFrcG9pbnRdLnNldHRpbmdzO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIF8uYnJlYWtwb2ludHMuc29ydChmdW5jdGlvbihhLCBiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKCBfLm9wdGlvbnMubW9iaWxlRmlyc3QgKSA/IGEtYiA6IGItYTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5yZWluaXQgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBfLiRzbGlkZXMgPVxyXG4gICAgICAgICAgICBfLiRzbGlkZVRyYWNrXHJcbiAgICAgICAgICAgICAgICAuY2hpbGRyZW4oXy5vcHRpb25zLnNsaWRlKVxyXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKCdzbGljay1zbGlkZScpO1xyXG5cclxuICAgICAgICBfLnNsaWRlQ291bnQgPSBfLiRzbGlkZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAoXy5jdXJyZW50U2xpZGUgPj0gXy5zbGlkZUNvdW50ICYmIF8uY3VycmVudFNsaWRlICE9PSAwKSB7XHJcbiAgICAgICAgICAgIF8uY3VycmVudFNsaWRlID0gXy5jdXJyZW50U2xpZGUgLSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXy5zbGlkZUNvdW50IDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcclxuICAgICAgICAgICAgXy5jdXJyZW50U2xpZGUgPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXy5yZWdpc3RlckJyZWFrcG9pbnRzKCk7XHJcblxyXG4gICAgICAgIF8uc2V0UHJvcHMoKTtcclxuICAgICAgICBfLnNldHVwSW5maW5pdGUoKTtcclxuICAgICAgICBfLmJ1aWxkQXJyb3dzKCk7XHJcbiAgICAgICAgXy51cGRhdGVBcnJvd3MoKTtcclxuICAgICAgICBfLmluaXRBcnJvd0V2ZW50cygpO1xyXG4gICAgICAgIF8uYnVpbGREb3RzKCk7XHJcbiAgICAgICAgXy51cGRhdGVEb3RzKCk7XHJcbiAgICAgICAgXy5pbml0RG90RXZlbnRzKCk7XHJcbiAgICAgICAgXy5jbGVhblVwU2xpZGVFdmVudHMoKTtcclxuICAgICAgICBfLmluaXRTbGlkZUV2ZW50cygpO1xyXG5cclxuICAgICAgICBfLmNoZWNrUmVzcG9uc2l2ZShmYWxzZSwgdHJ1ZSk7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZm9jdXNPblNlbGVjdCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAkKF8uJHNsaWRlVHJhY2spLmNoaWxkcmVuKCkub24oJ2NsaWNrLnNsaWNrJywgXy5zZWxlY3RIYW5kbGVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF8uc2V0U2xpZGVDbGFzc2VzKHR5cGVvZiBfLmN1cnJlbnRTbGlkZSA9PT0gJ251bWJlcicgPyBfLmN1cnJlbnRTbGlkZSA6IDApO1xyXG5cclxuICAgICAgICBfLnNldFBvc2l0aW9uKCk7XHJcbiAgICAgICAgXy5mb2N1c0hhbmRsZXIoKTtcclxuXHJcbiAgICAgICAgXy5wYXVzZWQgPSAhXy5vcHRpb25zLmF1dG9wbGF5O1xyXG4gICAgICAgIF8uYXV0b1BsYXkoKTtcclxuXHJcbiAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ3JlSW5pdCcsIFtfXSk7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKCQod2luZG93KS53aWR0aCgpICE9PSBfLndpbmRvd1dpZHRoKSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChfLndpbmRvd0RlbGF5KTtcclxuICAgICAgICAgICAgXy53aW5kb3dEZWxheSA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgXy53aW5kb3dXaWR0aCA9ICQod2luZG93KS53aWR0aCgpO1xyXG4gICAgICAgICAgICAgICAgXy5jaGVja1Jlc3BvbnNpdmUoKTtcclxuICAgICAgICAgICAgICAgIGlmKCAhXy51bnNsaWNrZWQgKSB7IF8uc2V0UG9zaXRpb24oKTsgfVxyXG4gICAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUucmVtb3ZlU2xpZGUgPSBTbGljay5wcm90b3R5cGUuc2xpY2tSZW1vdmUgPSBmdW5jdGlvbihpbmRleCwgcmVtb3ZlQmVmb3JlLCByZW1vdmVBbGwpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mKGluZGV4KSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZUJlZm9yZSA9IGluZGV4O1xyXG4gICAgICAgICAgICBpbmRleCA9IHJlbW92ZUJlZm9yZSA9PT0gdHJ1ZSA/IDAgOiBfLnNsaWRlQ291bnQgLSAxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGluZGV4ID0gcmVtb3ZlQmVmb3JlID09PSB0cnVlID8gLS1pbmRleCA6IGluZGV4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF8uc2xpZGVDb3VudCA8IDEgfHwgaW5kZXggPCAwIHx8IGluZGV4ID4gXy5zbGlkZUNvdW50IC0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfLnVubG9hZCgpO1xyXG5cclxuICAgICAgICBpZiAocmVtb3ZlQWxsID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY2hpbGRyZW4oKS5yZW1vdmUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKHRoaXMub3B0aW9ucy5zbGlkZSkuZXEoaW5kZXgpLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXy4kc2xpZGVzID0gXy4kc2xpZGVUcmFjay5jaGlsZHJlbih0aGlzLm9wdGlvbnMuc2xpZGUpO1xyXG5cclxuICAgICAgICBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKHRoaXMub3B0aW9ucy5zbGlkZSkuZGV0YWNoKCk7XHJcblxyXG4gICAgICAgIF8uJHNsaWRlVHJhY2suYXBwZW5kKF8uJHNsaWRlcyk7XHJcblxyXG4gICAgICAgIF8uJHNsaWRlc0NhY2hlID0gXy4kc2xpZGVzO1xyXG5cclxuICAgICAgICBfLnJlaW5pdCgpO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnNldENTUyA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcyxcclxuICAgICAgICAgICAgcG9zaXRpb25Qcm9wcyA9IHt9LFxyXG4gICAgICAgICAgICB4LCB5O1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLnJ0bCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBwb3NpdGlvbiA9IC1wb3NpdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgeCA9IF8ucG9zaXRpb25Qcm9wID09ICdsZWZ0JyA/IE1hdGguY2VpbChwb3NpdGlvbikgKyAncHgnIDogJzBweCc7XHJcbiAgICAgICAgeSA9IF8ucG9zaXRpb25Qcm9wID09ICd0b3AnID8gTWF0aC5jZWlsKHBvc2l0aW9uKSArICdweCcgOiAnMHB4JztcclxuXHJcbiAgICAgICAgcG9zaXRpb25Qcm9wc1tfLnBvc2l0aW9uUHJvcF0gPSBwb3NpdGlvbjtcclxuXHJcbiAgICAgICAgaWYgKF8udHJhbnNmb3Jtc0VuYWJsZWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY3NzKHBvc2l0aW9uUHJvcHMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uUHJvcHMgPSB7fTtcclxuICAgICAgICAgICAgaWYgKF8uY3NzVHJhbnNpdGlvbnMgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvblByb3BzW18uYW5pbVR5cGVdID0gJ3RyYW5zbGF0ZSgnICsgeCArICcsICcgKyB5ICsgJyknO1xyXG4gICAgICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5jc3MocG9zaXRpb25Qcm9wcyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvblByb3BzW18uYW5pbVR5cGVdID0gJ3RyYW5zbGF0ZTNkKCcgKyB4ICsgJywgJyArIHkgKyAnLCAwcHgpJztcclxuICAgICAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY3NzKHBvc2l0aW9uUHJvcHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnNldERpbWVuc2lvbnMgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLnZlcnRpY2FsID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBpZiAoXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIF8uJGxpc3QuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAoJzBweCAnICsgXy5vcHRpb25zLmNlbnRlclBhZGRpbmcpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIF8uJGxpc3QuaGVpZ2h0KF8uJHNsaWRlcy5maXJzdCgpLm91dGVySGVpZ2h0KHRydWUpICogXy5vcHRpb25zLnNsaWRlc1RvU2hvdyk7XHJcbiAgICAgICAgICAgIGlmIChfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgXy4kbGlzdC5jc3Moe1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IChfLm9wdGlvbnMuY2VudGVyUGFkZGluZyArICcgMHB4JylcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfLmxpc3RXaWR0aCA9IF8uJGxpc3Qud2lkdGgoKTtcclxuICAgICAgICBfLmxpc3RIZWlnaHQgPSBfLiRsaXN0LmhlaWdodCgpO1xyXG5cclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy52ZXJ0aWNhbCA9PT0gZmFsc2UgJiYgXy5vcHRpb25zLnZhcmlhYmxlV2lkdGggPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIF8uc2xpZGVXaWR0aCA9IE1hdGguY2VpbChfLmxpc3RXaWR0aCAvIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpO1xyXG4gICAgICAgICAgICBfLiRzbGlkZVRyYWNrLndpZHRoKE1hdGguY2VpbCgoXy5zbGlkZVdpZHRoICogXy4kc2xpZGVUcmFjay5jaGlsZHJlbignLnNsaWNrLXNsaWRlJykubGVuZ3RoKSkpO1xyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKF8ub3B0aW9ucy52YXJpYWJsZVdpZHRoID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2sud2lkdGgoNTAwMCAqIF8uc2xpZGVDb3VudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgXy5zbGlkZVdpZHRoID0gTWF0aC5jZWlsKF8ubGlzdFdpZHRoKTtcclxuICAgICAgICAgICAgXy4kc2xpZGVUcmFjay5oZWlnaHQoTWF0aC5jZWlsKChfLiRzbGlkZXMuZmlyc3QoKS5vdXRlckhlaWdodCh0cnVlKSAqIF8uJHNsaWRlVHJhY2suY2hpbGRyZW4oJy5zbGljay1zbGlkZScpLmxlbmd0aCkpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBvZmZzZXQgPSBfLiRzbGlkZXMuZmlyc3QoKS5vdXRlcldpZHRoKHRydWUpIC0gXy4kc2xpZGVzLmZpcnN0KCkud2lkdGgoKTtcclxuICAgICAgICBpZiAoXy5vcHRpb25zLnZhcmlhYmxlV2lkdGggPT09IGZhbHNlKSBfLiRzbGlkZVRyYWNrLmNoaWxkcmVuKCcuc2xpY2stc2xpZGUnKS53aWR0aChfLnNsaWRlV2lkdGggLSBvZmZzZXQpO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnNldEZhZGUgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzLFxyXG4gICAgICAgICAgICB0YXJnZXRMZWZ0O1xyXG5cclxuICAgICAgICBfLiRzbGlkZXMuZWFjaChmdW5jdGlvbihpbmRleCwgZWxlbWVudCkge1xyXG4gICAgICAgICAgICB0YXJnZXRMZWZ0ID0gKF8uc2xpZGVXaWR0aCAqIGluZGV4KSAqIC0xO1xyXG4gICAgICAgICAgICBpZiAoXy5vcHRpb25zLnJ0bCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgJChlbGVtZW50KS5jc3Moe1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxyXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0OiB0YXJnZXRMZWZ0LFxyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogMCxcclxuICAgICAgICAgICAgICAgICAgICB6SW5kZXg6IF8ub3B0aW9ucy56SW5kZXggLSAyLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDBcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgJChlbGVtZW50KS5jc3Moe1xyXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IHRhcmdldExlZnQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9wOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIHpJbmRleDogXy5vcHRpb25zLnpJbmRleCAtIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgXy4kc2xpZGVzLmVxKF8uY3VycmVudFNsaWRlKS5jc3Moe1xyXG4gICAgICAgICAgICB6SW5kZXg6IF8ub3B0aW9ucy56SW5kZXggLSAxLFxyXG4gICAgICAgICAgICBvcGFjaXR5OiAxXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuc2V0SGVpZ2h0ID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgPT09IDEgJiYgXy5vcHRpb25zLmFkYXB0aXZlSGVpZ2h0ID09PSB0cnVlICYmIF8ub3B0aW9ucy52ZXJ0aWNhbCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdmFyIHRhcmdldEhlaWdodCA9IF8uJHNsaWRlcy5lcShfLmN1cnJlbnRTbGlkZSkub3V0ZXJIZWlnaHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIF8uJGxpc3QuY3NzKCdoZWlnaHQnLCB0YXJnZXRIZWlnaHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5zZXRPcHRpb24gPVxyXG4gICAgU2xpY2sucHJvdG90eXBlLnNsaWNrU2V0T3B0aW9uID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIGFjY2VwdHMgYXJndW1lbnRzIGluIGZvcm1hdCBvZjpcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqICAtIGZvciBjaGFuZ2luZyBhIHNpbmdsZSBvcHRpb24ncyB2YWx1ZTpcclxuICAgICAgICAgKiAgICAgLnNsaWNrKFwic2V0T3B0aW9uXCIsIG9wdGlvbiwgdmFsdWUsIHJlZnJlc2ggKVxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICogIC0gZm9yIGNoYW5naW5nIGEgc2V0IG9mIHJlc3BvbnNpdmUgb3B0aW9uczpcclxuICAgICAgICAgKiAgICAgLnNsaWNrKFwic2V0T3B0aW9uXCIsICdyZXNwb25zaXZlJywgW3t9LCAuLi5dLCByZWZyZXNoIClcclxuICAgICAgICAgKlxyXG4gICAgICAgICAqICAtIGZvciB1cGRhdGluZyBtdWx0aXBsZSB2YWx1ZXMgYXQgb25jZSAobm90IHJlc3BvbnNpdmUpXHJcbiAgICAgICAgICogICAgIC5zbGljayhcInNldE9wdGlvblwiLCB7ICdvcHRpb24nOiB2YWx1ZSwgLi4uIH0sIHJlZnJlc2ggKVxyXG4gICAgICAgICAqL1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsIGwsIGl0ZW0sIG9wdGlvbiwgdmFsdWUsIHJlZnJlc2ggPSBmYWxzZSwgdHlwZTtcclxuXHJcbiAgICAgICAgaWYoICQudHlwZSggYXJndW1lbnRzWzBdICkgPT09ICdvYmplY3QnICkge1xyXG5cclxuICAgICAgICAgICAgb3B0aW9uID0gIGFyZ3VtZW50c1swXTtcclxuICAgICAgICAgICAgcmVmcmVzaCA9IGFyZ3VtZW50c1sxXTtcclxuICAgICAgICAgICAgdHlwZSA9ICdtdWx0aXBsZSc7XHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoICQudHlwZSggYXJndW1lbnRzWzBdICkgPT09ICdzdHJpbmcnICkge1xyXG5cclxuICAgICAgICAgICAgb3B0aW9uID0gIGFyZ3VtZW50c1swXTtcclxuICAgICAgICAgICAgdmFsdWUgPSBhcmd1bWVudHNbMV07XHJcbiAgICAgICAgICAgIHJlZnJlc2ggPSBhcmd1bWVudHNbMl07XHJcblxyXG4gICAgICAgICAgICBpZiAoIGFyZ3VtZW50c1swXSA9PT0gJ3Jlc3BvbnNpdmUnICYmICQudHlwZSggYXJndW1lbnRzWzFdICkgPT09ICdhcnJheScgKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdHlwZSA9ICdyZXNwb25zaXZlJztcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBhcmd1bWVudHNbMV0gIT09ICd1bmRlZmluZWQnICkge1xyXG5cclxuICAgICAgICAgICAgICAgIHR5cGUgPSAnc2luZ2xlJztcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIHR5cGUgPT09ICdzaW5nbGUnICkge1xyXG5cclxuICAgICAgICAgICAgXy5vcHRpb25zW29wdGlvbl0gPSB2YWx1ZTtcclxuXHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAoIHR5cGUgPT09ICdtdWx0aXBsZScgKSB7XHJcblxyXG4gICAgICAgICAgICAkLmVhY2goIG9wdGlvbiAsIGZ1bmN0aW9uKCBvcHQsIHZhbCApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBfLm9wdGlvbnNbb3B0XSA9IHZhbDtcclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgICAgfSBlbHNlIGlmICggdHlwZSA9PT0gJ3Jlc3BvbnNpdmUnICkge1xyXG5cclxuICAgICAgICAgICAgZm9yICggaXRlbSBpbiB2YWx1ZSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiggJC50eXBlKCBfLm9wdGlvbnMucmVzcG9uc2l2ZSApICE9PSAnYXJyYXknICkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBfLm9wdGlvbnMucmVzcG9uc2l2ZSA9IFsgdmFsdWVbaXRlbV0gXTtcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBsID0gXy5vcHRpb25zLnJlc3BvbnNpdmUubGVuZ3RoLTE7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGxvb3AgdGhyb3VnaCB0aGUgcmVzcG9uc2l2ZSBvYmplY3QgYW5kIHNwbGljZSBvdXQgZHVwbGljYXRlcy5cclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSggbCA+PSAwICkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIF8ub3B0aW9ucy5yZXNwb25zaXZlW2xdLmJyZWFrcG9pbnQgPT09IHZhbHVlW2l0ZW1dLmJyZWFrcG9pbnQgKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXy5vcHRpb25zLnJlc3BvbnNpdmUuc3BsaWNlKGwsMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsLS07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgXy5vcHRpb25zLnJlc3BvbnNpdmUucHVzaCggdmFsdWVbaXRlbV0gKTtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCByZWZyZXNoICkge1xyXG5cclxuICAgICAgICAgICAgXy51bmxvYWQoKTtcclxuICAgICAgICAgICAgXy5yZWluaXQoKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnNldFBvc2l0aW9uID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgXy5zZXREaW1lbnNpb25zKCk7XHJcblxyXG4gICAgICAgIF8uc2V0SGVpZ2h0KCk7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuZmFkZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgXy5zZXRDU1MoXy5nZXRMZWZ0KF8uY3VycmVudFNsaWRlKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgXy5zZXRGYWRlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfLiRzbGlkZXIudHJpZ2dlcignc2V0UG9zaXRpb24nLCBbX10pO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnNldFByb3BzID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcyxcclxuICAgICAgICAgICAgYm9keVN0eWxlID0gZG9jdW1lbnQuYm9keS5zdHlsZTtcclxuXHJcbiAgICAgICAgXy5wb3NpdGlvblByb3AgPSBfLm9wdGlvbnMudmVydGljYWwgPT09IHRydWUgPyAndG9wJyA6ICdsZWZ0JztcclxuXHJcbiAgICAgICAgaWYgKF8ucG9zaXRpb25Qcm9wID09PSAndG9wJykge1xyXG4gICAgICAgICAgICBfLiRzbGlkZXIuYWRkQ2xhc3MoJ3NsaWNrLXZlcnRpY2FsJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgXy4kc2xpZGVyLnJlbW92ZUNsYXNzKCdzbGljay12ZXJ0aWNhbCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJvZHlTdHlsZS5XZWJraXRUcmFuc2l0aW9uICE9PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgICAgYm9keVN0eWxlLk1velRyYW5zaXRpb24gIT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICAgICBib2R5U3R5bGUubXNUcmFuc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy51c2VDU1MgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIF8uY3NzVHJhbnNpdGlvbnMgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIF8ub3B0aW9ucy5mYWRlICkge1xyXG4gICAgICAgICAgICBpZiAoIHR5cGVvZiBfLm9wdGlvbnMuekluZGV4ID09PSAnbnVtYmVyJyApIHtcclxuICAgICAgICAgICAgICAgIGlmKCBfLm9wdGlvbnMuekluZGV4IDwgMyApIHtcclxuICAgICAgICAgICAgICAgICAgICBfLm9wdGlvbnMuekluZGV4ID0gMztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF8ub3B0aW9ucy56SW5kZXggPSBfLmRlZmF1bHRzLnpJbmRleDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJvZHlTdHlsZS5PVHJhbnNmb3JtICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgXy5hbmltVHlwZSA9ICdPVHJhbnNmb3JtJztcclxuICAgICAgICAgICAgXy50cmFuc2Zvcm1UeXBlID0gJy1vLXRyYW5zZm9ybSc7XHJcbiAgICAgICAgICAgIF8udHJhbnNpdGlvblR5cGUgPSAnT1RyYW5zaXRpb24nO1xyXG4gICAgICAgICAgICBpZiAoYm9keVN0eWxlLnBlcnNwZWN0aXZlUHJvcGVydHkgPT09IHVuZGVmaW5lZCAmJiBib2R5U3R5bGUud2Via2l0UGVyc3BlY3RpdmUgPT09IHVuZGVmaW5lZCkgXy5hbmltVHlwZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYm9keVN0eWxlLk1velRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIF8uYW5pbVR5cGUgPSAnTW96VHJhbnNmb3JtJztcclxuICAgICAgICAgICAgXy50cmFuc2Zvcm1UeXBlID0gJy1tb3otdHJhbnNmb3JtJztcclxuICAgICAgICAgICAgXy50cmFuc2l0aW9uVHlwZSA9ICdNb3pUcmFuc2l0aW9uJztcclxuICAgICAgICAgICAgaWYgKGJvZHlTdHlsZS5wZXJzcGVjdGl2ZVByb3BlcnR5ID09PSB1bmRlZmluZWQgJiYgYm9keVN0eWxlLk1velBlcnNwZWN0aXZlID09PSB1bmRlZmluZWQpIF8uYW5pbVR5cGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGJvZHlTdHlsZS53ZWJraXRUcmFuc2Zvcm0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBfLmFuaW1UeXBlID0gJ3dlYmtpdFRyYW5zZm9ybSc7XHJcbiAgICAgICAgICAgIF8udHJhbnNmb3JtVHlwZSA9ICctd2Via2l0LXRyYW5zZm9ybSc7XHJcbiAgICAgICAgICAgIF8udHJhbnNpdGlvblR5cGUgPSAnd2Via2l0VHJhbnNpdGlvbic7XHJcbiAgICAgICAgICAgIGlmIChib2R5U3R5bGUucGVyc3BlY3RpdmVQcm9wZXJ0eSA9PT0gdW5kZWZpbmVkICYmIGJvZHlTdHlsZS53ZWJraXRQZXJzcGVjdGl2ZSA9PT0gdW5kZWZpbmVkKSBfLmFuaW1UeXBlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChib2R5U3R5bGUubXNUcmFuc2Zvcm0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBfLmFuaW1UeXBlID0gJ21zVHJhbnNmb3JtJztcclxuICAgICAgICAgICAgXy50cmFuc2Zvcm1UeXBlID0gJy1tcy10cmFuc2Zvcm0nO1xyXG4gICAgICAgICAgICBfLnRyYW5zaXRpb25UeXBlID0gJ21zVHJhbnNpdGlvbic7XHJcbiAgICAgICAgICAgIGlmIChib2R5U3R5bGUubXNUcmFuc2Zvcm0gPT09IHVuZGVmaW5lZCkgXy5hbmltVHlwZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYm9keVN0eWxlLnRyYW5zZm9ybSAhPT0gdW5kZWZpbmVkICYmIF8uYW5pbVR5cGUgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIF8uYW5pbVR5cGUgPSAndHJhbnNmb3JtJztcclxuICAgICAgICAgICAgXy50cmFuc2Zvcm1UeXBlID0gJ3RyYW5zZm9ybSc7XHJcbiAgICAgICAgICAgIF8udHJhbnNpdGlvblR5cGUgPSAndHJhbnNpdGlvbic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIF8udHJhbnNmb3Jtc0VuYWJsZWQgPSBfLm9wdGlvbnMudXNlVHJhbnNmb3JtICYmIChfLmFuaW1UeXBlICE9PSBudWxsICYmIF8uYW5pbVR5cGUgIT09IGZhbHNlKTtcclxuICAgIH07XHJcblxyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5zZXRTbGlkZUNsYXNzZXMgPSBmdW5jdGlvbihpbmRleCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsXHJcbiAgICAgICAgICAgIGNlbnRlck9mZnNldCwgYWxsU2xpZGVzLCBpbmRleE9mZnNldCwgcmVtYWluZGVyO1xyXG5cclxuICAgICAgICAvLyBWRUxJUiAtIGFkZGluZyAgdGFiaW5kZXg6IC0xXHJcbiAgICAgICAgYWxsU2xpZGVzID0gXy4kc2xpZGVyXHJcbiAgICAgICAgICAgIC5maW5kKCcuc2xpY2stc2xpZGUnKVxyXG4gICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NsaWNrLWFjdGl2ZSBzbGljay1jZW50ZXIgc2xpY2stY3VycmVudCcpXHJcbiAgICAgICAgICAgIC5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJylcclxuICAgICAgICAgICAgLmF0dHIoJ3RhYmluZGV4JywgLTEpO1xyXG5cclxuICAgICAgICAvLyBWRUxJUiAtIGFkZGluZyB0YWJpbmRleDogMFxyXG4gICAgICAgIF8uJHNsaWRlc1xyXG4gICAgICAgICAgICAuZXEoaW5kZXgpXHJcbiAgICAgICAgICAgIC5hZGRDbGFzcygnc2xpY2stY3VycmVudCcpXHJcbiAgICAgICAgICAgIC5hdHRyKCd0YWJpbmRleCcsIDApO1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUpIHtcclxuXHJcbiAgICAgICAgICAgIGNlbnRlck9mZnNldCA9IE1hdGguZmxvb3IoXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAvIDIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gdHJ1ZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBjZW50ZXJPZmZzZXQgJiYgaW5kZXggPD0gKF8uc2xpZGVDb3VudCAtIDEpIC0gY2VudGVyT2Zmc2V0KSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF8uJHNsaWRlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoaW5kZXggLSBjZW50ZXJPZmZzZXQsIGluZGV4ICsgY2VudGVyT2Zmc2V0ICsgMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdzbGljay1hY3RpdmUnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpbmRleE9mZnNldCA9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgKyBpbmRleDtcclxuICAgICAgICAgICAgICAgICAgICBhbGxTbGlkZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKGluZGV4T2Zmc2V0IC0gY2VudGVyT2Zmc2V0ICsgMSwgaW5kZXhPZmZzZXQgKyBjZW50ZXJPZmZzZXQgKyAyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ3NsaWNrLWFjdGl2ZScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdhcmlhLWhpZGRlbicsICdmYWxzZScpO1xyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsU2xpZGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5lcShhbGxTbGlkZXMubGVuZ3RoIC0gMSAtIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2xpY2stY2VudGVyJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA9PT0gXy5zbGlkZUNvdW50IC0gMSkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBhbGxTbGlkZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmVxKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2xpY2stY2VudGVyJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgXy4kc2xpZGVzXHJcbiAgICAgICAgICAgICAgICAuZXEoaW5kZXgpXHJcbiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ3NsaWNrLWNlbnRlcicpO1xyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDAgJiYgaW5kZXggPD0gKF8uc2xpZGVDb3VudCAtIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgXy4kc2xpZGVzXHJcbiAgICAgICAgICAgICAgICAgICAgLnNsaWNlKGluZGV4LCBpbmRleCArIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpXHJcbiAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdzbGljay1hY3RpdmUnKVxyXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdhcmlhLWhpZGRlbicsICdmYWxzZScpO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChhbGxTbGlkZXMubGVuZ3RoIDw9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBhbGxTbGlkZXNcclxuICAgICAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoJ3NsaWNrLWFjdGl2ZScpXHJcbiAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7XHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIHJlbWFpbmRlciA9IF8uc2xpZGVDb3VudCAlIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3c7XHJcbiAgICAgICAgICAgICAgICBpbmRleE9mZnNldCA9IF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gdHJ1ZSA/IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgKyBpbmRleCA6IGluZGV4O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfLm9wdGlvbnMuc2xpZGVzVG9TaG93ID09IF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCAmJiAoXy5zbGlkZUNvdW50IC0gaW5kZXgpIDwgXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBhbGxTbGlkZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKGluZGV4T2Zmc2V0IC0gKF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cgLSByZW1haW5kZXIpLCBpbmRleE9mZnNldCArIHJlbWFpbmRlcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZENsYXNzKCdzbGljay1hY3RpdmUnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cignYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcclxuXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBhbGxTbGlkZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKGluZGV4T2Zmc2V0LCBpbmRleE9mZnNldCArIF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcygnc2xpY2stYWN0aXZlJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMubGF6eUxvYWQgPT09ICdvbmRlbWFuZCcpIHtcclxuICAgICAgICAgICAgXy5sYXp5TG9hZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5zZXR1cEluZmluaXRlID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcyxcclxuICAgICAgICAgICAgaSwgc2xpZGVJbmRleCwgaW5maW5pdGVDb3VudDtcclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5mYWRlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIF8ub3B0aW9ucy5jZW50ZXJNb2RlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmluZmluaXRlID09PSB0cnVlICYmIF8ub3B0aW9ucy5mYWRlID09PSBmYWxzZSkge1xyXG5cclxuICAgICAgICAgICAgc2xpZGVJbmRleCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAoXy5zbGlkZUNvdW50ID4gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGluZmluaXRlQ291bnQgPSBfLm9wdGlvbnMuc2xpZGVzVG9TaG93ICsgMTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5maW5pdGVDb3VudCA9IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3c7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChpID0gXy5zbGlkZUNvdW50OyBpID4gKF8uc2xpZGVDb3VudCAtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZmluaXRlQ291bnQpOyBpIC09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzbGlkZUluZGV4ID0gaSAtIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgJChfLiRzbGlkZXNbc2xpZGVJbmRleF0pLmNsb25lKHRydWUpLmF0dHIoJ2lkJywgJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdkYXRhLXNsaWNrLWluZGV4Jywgc2xpZGVJbmRleCAtIF8uc2xpZGVDb3VudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnByZXBlbmRUbyhfLiRzbGlkZVRyYWNrKS5hZGRDbGFzcygnc2xpY2stY2xvbmVkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5maW5pdGVDb3VudDsgaSArPSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVJbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgJChfLiRzbGlkZXNbc2xpZGVJbmRleF0pLmNsb25lKHRydWUpLmF0dHIoJ2lkJywgJycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdkYXRhLXNsaWNrLWluZGV4Jywgc2xpZGVJbmRleCArIF8uc2xpZGVDb3VudClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmFwcGVuZFRvKF8uJHNsaWRlVHJhY2spLmFkZENsYXNzKCdzbGljay1jbG9uZWQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suZmluZCgnLnNsaWNrLWNsb25lZCcpLmZpbmQoJ1tpZF0nKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignaWQnLCAnJyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLmludGVycnVwdCA9IGZ1bmN0aW9uKCB0b2dnbGUgKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYoICF0b2dnbGUgKSB7XHJcbiAgICAgICAgICAgIF8uYXV0b1BsYXkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgXy5pbnRlcnJ1cHRlZCA9IHRvZ2dsZTtcclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5zZWxlY3RIYW5kbGVyID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICB2YXIgdGFyZ2V0RWxlbWVudCA9XHJcbiAgICAgICAgICAgICQoZXZlbnQudGFyZ2V0KS5pcygnLnNsaWNrLXNsaWRlJykgP1xyXG4gICAgICAgICAgICAgICAgJChldmVudC50YXJnZXQpIDpcclxuICAgICAgICAgICAgICAgICQoZXZlbnQudGFyZ2V0KS5wYXJlbnRzKCcuc2xpY2stc2xpZGUnKTtcclxuXHJcbiAgICAgICAgdmFyIGluZGV4ID0gcGFyc2VJbnQodGFyZ2V0RWxlbWVudC5hdHRyKCdkYXRhLXNsaWNrLWluZGV4JykpO1xyXG5cclxuICAgICAgICBpZiAoIWluZGV4KSBpbmRleCA9IDA7XHJcblxyXG4gICAgICAgIGlmIChfLnNsaWRlQ291bnQgPD0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG5cclxuICAgICAgICAgICAgXy5zZXRTbGlkZUNsYXNzZXMoaW5kZXgpO1xyXG4gICAgICAgICAgICBfLmFzTmF2Rm9yKGluZGV4KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF8uc2xpZGVIYW5kbGVyKGluZGV4KTtcclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS5zbGlkZUhhbmRsZXIgPSBmdW5jdGlvbihpbmRleCwgc3luYywgZG9udEFuaW1hdGUpIHtcclxuXHJcbiAgICAgICAgdmFyIHRhcmdldFNsaWRlLCBhbmltU2xpZGUsIG9sZFNsaWRlLCBzbGlkZUxlZnQsIHRhcmdldExlZnQgPSBudWxsLFxyXG4gICAgICAgICAgICBfID0gdGhpcywgbmF2VGFyZ2V0O1xyXG5cclxuICAgICAgICBzeW5jID0gc3luYyB8fCBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKF8uYW5pbWF0aW5nID09PSB0cnVlICYmIF8ub3B0aW9ucy53YWl0Rm9yQW5pbWF0ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmZhZGUgPT09IHRydWUgJiYgXy5jdXJyZW50U2xpZGUgPT09IGluZGV4KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfLnNsaWRlQ291bnQgPD0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3luYyA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgXy5hc05hdkZvcihpbmRleCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0YXJnZXRTbGlkZSA9IGluZGV4O1xyXG4gICAgICAgIHRhcmdldExlZnQgPSBfLmdldExlZnQodGFyZ2V0U2xpZGUpO1xyXG4gICAgICAgIHNsaWRlTGVmdCA9IF8uZ2V0TGVmdChfLmN1cnJlbnRTbGlkZSk7XHJcblxyXG4gICAgICAgIF8uY3VycmVudExlZnQgPSBfLnN3aXBlTGVmdCA9PT0gbnVsbCA/IHNsaWRlTGVmdCA6IF8uc3dpcGVMZWZ0O1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmluZmluaXRlID09PSBmYWxzZSAmJiBfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gZmFsc2UgJiYgKGluZGV4IDwgMCB8fCBpbmRleCA+IF8uZ2V0RG90Q291bnQoKSAqIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCkpIHtcclxuICAgICAgICAgICAgaWYgKF8ub3B0aW9ucy5mYWRlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0U2xpZGUgPSBfLmN1cnJlbnRTbGlkZTtcclxuICAgICAgICAgICAgICAgIGlmIChkb250QW5pbWF0ZSAhPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF8uYW5pbWF0ZVNsaWRlKHNsaWRlTGVmdCwgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF8ucG9zdFNsaWRlKHRhcmdldFNsaWRlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXy5wb3N0U2xpZGUodGFyZ2V0U2xpZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2UgaWYgKF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gZmFsc2UgJiYgXy5vcHRpb25zLmNlbnRlck1vZGUgPT09IHRydWUgJiYgKGluZGV4IDwgMCB8fCBpbmRleCA+IChfLnNsaWRlQ291bnQgLSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwpKSkge1xyXG4gICAgICAgICAgICBpZiAoXy5vcHRpb25zLmZhZGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXRTbGlkZSA9IF8uY3VycmVudFNsaWRlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRvbnRBbmltYXRlICE9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXy5hbmltYXRlU2xpZGUoc2xpZGVMZWZ0LCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXy5wb3N0U2xpZGUodGFyZ2V0U2xpZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfLnBvc3RTbGlkZSh0YXJnZXRTbGlkZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCBfLm9wdGlvbnMuYXV0b3BsYXkgKSB7XHJcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoXy5hdXRvUGxheVRpbWVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0YXJnZXRTbGlkZSA8IDApIHtcclxuICAgICAgICAgICAgaWYgKF8uc2xpZGVDb3VudCAlIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgYW5pbVNsaWRlID0gXy5zbGlkZUNvdW50IC0gKF8uc2xpZGVDb3VudCAlIF8ub3B0aW9ucy5zbGlkZXNUb1Njcm9sbCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhbmltU2xpZGUgPSBfLnNsaWRlQ291bnQgKyB0YXJnZXRTbGlkZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0U2xpZGUgPj0gXy5zbGlkZUNvdW50KSB7XHJcbiAgICAgICAgICAgIGlmIChfLnNsaWRlQ291bnQgJSBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwgIT09IDApIHtcclxuICAgICAgICAgICAgICAgIGFuaW1TbGlkZSA9IDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhbmltU2xpZGUgPSB0YXJnZXRTbGlkZSAtIF8uc2xpZGVDb3VudDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGFuaW1TbGlkZSA9IHRhcmdldFNsaWRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXy5hbmltYXRpbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICBfLiRzbGlkZXIudHJpZ2dlcignYmVmb3JlQ2hhbmdlJywgW18sIF8uY3VycmVudFNsaWRlLCBhbmltU2xpZGVdKTtcclxuXHJcbiAgICAgICAgb2xkU2xpZGUgPSBfLmN1cnJlbnRTbGlkZTtcclxuICAgICAgICBfLmN1cnJlbnRTbGlkZSA9IGFuaW1TbGlkZTtcclxuXHJcbiAgICAgICAgXy5zZXRTbGlkZUNsYXNzZXMoXy5jdXJyZW50U2xpZGUpO1xyXG5cclxuICAgICAgICBpZiAoIF8ub3B0aW9ucy5hc05hdkZvciApIHtcclxuXHJcbiAgICAgICAgICAgIG5hdlRhcmdldCA9IF8uZ2V0TmF2VGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIG5hdlRhcmdldCA9IG5hdlRhcmdldC5zbGljaygnZ2V0U2xpY2snKTtcclxuXHJcbiAgICAgICAgICAgIGlmICggbmF2VGFyZ2V0LnNsaWRlQ291bnQgPD0gbmF2VGFyZ2V0Lm9wdGlvbnMuc2xpZGVzVG9TaG93ICkge1xyXG4gICAgICAgICAgICAgICAgbmF2VGFyZ2V0LnNldFNsaWRlQ2xhc3NlcyhfLmN1cnJlbnRTbGlkZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBfLnVwZGF0ZURvdHMoKTtcclxuICAgICAgICBfLnVwZGF0ZUFycm93cygpO1xyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmZhZGUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgaWYgKGRvbnRBbmltYXRlICE9PSB0cnVlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgXy5mYWRlU2xpZGVPdXQob2xkU2xpZGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIF8uZmFkZVNsaWRlKGFuaW1TbGlkZSwgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXy5wb3N0U2xpZGUoYW5pbVNsaWRlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIF8ucG9zdFNsaWRlKGFuaW1TbGlkZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXy5hbmltYXRlSGVpZ2h0KCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkb250QW5pbWF0ZSAhPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBfLmFuaW1hdGVTbGlkZSh0YXJnZXRMZWZ0LCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIF8ucG9zdFNsaWRlKGFuaW1TbGlkZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIF8ucG9zdFNsaWRlKGFuaW1TbGlkZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnN0YXJ0TG9hZCA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMuYXJyb3dzID09PSB0cnVlICYmIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcclxuXHJcbiAgICAgICAgICAgIF8uJHByZXZBcnJvdy5oaWRlKCk7XHJcbiAgICAgICAgICAgIF8uJG5leHRBcnJvdy5oaWRlKCk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5kb3RzID09PSB0cnVlICYmIF8uc2xpZGVDb3VudCA+IF8ub3B0aW9ucy5zbGlkZXNUb1Nob3cpIHtcclxuXHJcbiAgICAgICAgICAgIF8uJGRvdHMuaGlkZSgpO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF8uJHNsaWRlci5hZGRDbGFzcygnc2xpY2stbG9hZGluZycpO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnN3aXBlRGlyZWN0aW9uID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciB4RGlzdCwgeURpc3QsIHIsIHN3aXBlQW5nbGUsIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICB4RGlzdCA9IF8udG91Y2hPYmplY3Quc3RhcnRYIC0gXy50b3VjaE9iamVjdC5jdXJYO1xyXG4gICAgICAgIHlEaXN0ID0gXy50b3VjaE9iamVjdC5zdGFydFkgLSBfLnRvdWNoT2JqZWN0LmN1clk7XHJcbiAgICAgICAgciA9IE1hdGguYXRhbjIoeURpc3QsIHhEaXN0KTtcclxuXHJcbiAgICAgICAgc3dpcGVBbmdsZSA9IE1hdGgucm91bmQociAqIDE4MCAvIE1hdGguUEkpO1xyXG4gICAgICAgIGlmIChzd2lwZUFuZ2xlIDwgMCkge1xyXG4gICAgICAgICAgICBzd2lwZUFuZ2xlID0gMzYwIC0gTWF0aC5hYnMoc3dpcGVBbmdsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoKHN3aXBlQW5nbGUgPD0gNDUpICYmIChzd2lwZUFuZ2xlID49IDApKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoXy5vcHRpb25zLnJ0bCA9PT0gZmFsc2UgPyAnbGVmdCcgOiAncmlnaHQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKChzd2lwZUFuZ2xlIDw9IDM2MCkgJiYgKHN3aXBlQW5nbGUgPj0gMzE1KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gKF8ub3B0aW9ucy5ydGwgPT09IGZhbHNlID8gJ2xlZnQnIDogJ3JpZ2h0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgoc3dpcGVBbmdsZSA+PSAxMzUpICYmIChzd2lwZUFuZ2xlIDw9IDIyNSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIChfLm9wdGlvbnMucnRsID09PSBmYWxzZSA/ICdyaWdodCcgOiAnbGVmdCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXy5vcHRpb25zLnZlcnRpY2FsU3dpcGluZyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBpZiAoKHN3aXBlQW5nbGUgPj0gMzUpICYmIChzd2lwZUFuZ2xlIDw9IDEzNSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZG93bic7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3VwJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICd2ZXJ0aWNhbCc7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuc3dpcGVFbmQgPSBmdW5jdGlvbihldmVudCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsXHJcbiAgICAgICAgICAgIHNsaWRlQ291bnQsXHJcbiAgICAgICAgICAgIGRpcmVjdGlvbjtcclxuXHJcbiAgICAgICAgXy5kcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgIF8uaW50ZXJydXB0ZWQgPSBmYWxzZTtcclxuICAgICAgICBfLnNob3VsZENsaWNrID0gKCBfLnRvdWNoT2JqZWN0LnN3aXBlTGVuZ3RoID4gMTAgKSA/IGZhbHNlIDogdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKCBfLnRvdWNoT2JqZWN0LmN1clggPT09IHVuZGVmaW5lZCApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCBfLnRvdWNoT2JqZWN0LmVkZ2VIaXQgPT09IHRydWUgKSB7XHJcbiAgICAgICAgICAgIF8uJHNsaWRlci50cmlnZ2VyKCdlZGdlJywgW18sIF8uc3dpcGVEaXJlY3Rpb24oKSBdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICggXy50b3VjaE9iamVjdC5zd2lwZUxlbmd0aCA+PSBfLnRvdWNoT2JqZWN0Lm1pblN3aXBlICkge1xyXG5cclxuICAgICAgICAgICAgZGlyZWN0aW9uID0gXy5zd2lwZURpcmVjdGlvbigpO1xyXG5cclxuICAgICAgICAgICAgc3dpdGNoICggZGlyZWN0aW9uICkge1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgJ2xlZnQnOlxyXG4gICAgICAgICAgICAgICAgY2FzZSAnZG93bic6XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlQ291bnQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfLm9wdGlvbnMuc3dpcGVUb1NsaWRlID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uY2hlY2tOYXZpZ2FibGUoIF8uY3VycmVudFNsaWRlICsgXy5nZXRTbGlkZUNvdW50KCkgKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmN1cnJlbnRTbGlkZSArIF8uZ2V0U2xpZGVDb3VudCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBfLmN1cnJlbnREaXJlY3Rpb24gPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBjYXNlICdyaWdodCc6XHJcbiAgICAgICAgICAgICAgICBjYXNlICd1cCc6XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlQ291bnQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfLm9wdGlvbnMuc3dpcGVUb1NsaWRlID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8uY2hlY2tOYXZpZ2FibGUoIF8uY3VycmVudFNsaWRlIC0gXy5nZXRTbGlkZUNvdW50KCkgKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLmN1cnJlbnRTbGlkZSAtIF8uZ2V0U2xpZGVDb3VudCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBfLmN1cnJlbnREaXJlY3Rpb24gPSAxO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG5cclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCBkaXJlY3Rpb24gIT0gJ3ZlcnRpY2FsJyApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBfLnNsaWRlSGFuZGxlciggc2xpZGVDb3VudCApO1xyXG4gICAgICAgICAgICAgICAgXy50b3VjaE9iamVjdCA9IHt9O1xyXG4gICAgICAgICAgICAgICAgXy4kc2xpZGVyLnRyaWdnZXIoJ3N3aXBlJywgW18sIGRpcmVjdGlvbiBdKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIGlmICggXy50b3VjaE9iamVjdC5zdGFydFggIT09IF8udG91Y2hPYmplY3QuY3VyWCApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBfLnNsaWRlSGFuZGxlciggXy5jdXJyZW50U2xpZGUgKTtcclxuICAgICAgICAgICAgICAgIF8udG91Y2hPYmplY3QgPSB7fTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnN3aXBlSGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50KSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKChfLm9wdGlvbnMuc3dpcGUgPT09IGZhbHNlKSB8fCAoJ29udG91Y2hlbmQnIGluIGRvY3VtZW50ICYmIF8ub3B0aW9ucy5zd2lwZSA9PT0gZmFsc2UpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2UgaWYgKF8ub3B0aW9ucy5kcmFnZ2FibGUgPT09IGZhbHNlICYmIGV2ZW50LnR5cGUuaW5kZXhPZignbW91c2UnKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXy50b3VjaE9iamVjdC5maW5nZXJDb3VudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQgJiYgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzICE9PSB1bmRlZmluZWQgP1xyXG4gICAgICAgICAgICBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXMubGVuZ3RoIDogMTtcclxuXHJcbiAgICAgICAgXy50b3VjaE9iamVjdC5taW5Td2lwZSA9IF8ubGlzdFdpZHRoIC8gXy5vcHRpb25zXHJcbiAgICAgICAgICAgIC50b3VjaFRocmVzaG9sZDtcclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy52ZXJ0aWNhbFN3aXBpbmcgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgXy50b3VjaE9iamVjdC5taW5Td2lwZSA9IF8ubGlzdEhlaWdodCAvIF8ub3B0aW9uc1xyXG4gICAgICAgICAgICAgICAgLnRvdWNoVGhyZXNob2xkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoIChldmVudC5kYXRhLmFjdGlvbikge1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnc3RhcnQnOlxyXG4gICAgICAgICAgICAgICAgXy5zd2lwZVN0YXJ0KGV2ZW50KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnbW92ZSc6XHJcbiAgICAgICAgICAgICAgICBfLnN3aXBlTW92ZShldmVudCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgJ2VuZCc6XHJcbiAgICAgICAgICAgICAgICBfLnN3aXBlRW5kKGV2ZW50KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUuc3dpcGVNb3ZlID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzLFxyXG4gICAgICAgICAgICBlZGdlV2FzSGl0ID0gZmFsc2UsXHJcbiAgICAgICAgICAgIGN1ckxlZnQsIHN3aXBlRGlyZWN0aW9uLCBzd2lwZUxlbmd0aCwgcG9zaXRpb25PZmZzZXQsIHRvdWNoZXM7XHJcblxyXG4gICAgICAgIHRvdWNoZXMgPSBldmVudC5vcmlnaW5hbEV2ZW50ICE9PSB1bmRlZmluZWQgPyBldmVudC5vcmlnaW5hbEV2ZW50LnRvdWNoZXMgOiBudWxsO1xyXG5cclxuICAgICAgICBpZiAoIV8uZHJhZ2dpbmcgfHwgdG91Y2hlcyAmJiB0b3VjaGVzLmxlbmd0aCAhPT0gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjdXJMZWZ0ID0gXy5nZXRMZWZ0KF8uY3VycmVudFNsaWRlKTtcclxuXHJcbiAgICAgICAgXy50b3VjaE9iamVjdC5jdXJYID0gdG91Y2hlcyAhPT0gdW5kZWZpbmVkID8gdG91Y2hlc1swXS5wYWdlWCA6IGV2ZW50LmNsaWVudFg7XHJcbiAgICAgICAgXy50b3VjaE9iamVjdC5jdXJZID0gdG91Y2hlcyAhPT0gdW5kZWZpbmVkID8gdG91Y2hlc1swXS5wYWdlWSA6IGV2ZW50LmNsaWVudFk7XHJcblxyXG4gICAgICAgIF8udG91Y2hPYmplY3Quc3dpcGVMZW5ndGggPSBNYXRoLnJvdW5kKE1hdGguc3FydChcclxuICAgICAgICAgICAgTWF0aC5wb3coXy50b3VjaE9iamVjdC5jdXJYIC0gXy50b3VjaE9iamVjdC5zdGFydFgsIDIpKSk7XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMudmVydGljYWxTd2lwaW5nID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIF8udG91Y2hPYmplY3Quc3dpcGVMZW5ndGggPSBNYXRoLnJvdW5kKE1hdGguc3FydChcclxuICAgICAgICAgICAgICAgIE1hdGgucG93KF8udG91Y2hPYmplY3QuY3VyWSAtIF8udG91Y2hPYmplY3Quc3RhcnRZLCAyKSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpcGVEaXJlY3Rpb24gPSBfLnN3aXBlRGlyZWN0aW9uKCk7XHJcblxyXG4gICAgICAgIGlmIChzd2lwZURpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudCAhPT0gdW5kZWZpbmVkICYmIF8udG91Y2hPYmplY3Quc3dpcGVMZW5ndGggPiA0KSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwb3NpdGlvbk9mZnNldCA9IChfLm9wdGlvbnMucnRsID09PSBmYWxzZSA/IDEgOiAtMSkgKiAoXy50b3VjaE9iamVjdC5jdXJYID4gXy50b3VjaE9iamVjdC5zdGFydFggPyAxIDogLTEpO1xyXG4gICAgICAgIGlmIChfLm9wdGlvbnMudmVydGljYWxTd2lwaW5nID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uT2Zmc2V0ID0gXy50b3VjaE9iamVjdC5jdXJZID4gXy50b3VjaE9iamVjdC5zdGFydFkgPyAxIDogLTE7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgc3dpcGVMZW5ndGggPSBfLnRvdWNoT2JqZWN0LnN3aXBlTGVuZ3RoO1xyXG5cclxuICAgICAgICBfLnRvdWNoT2JqZWN0LmVkZ2VIaXQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKF8ub3B0aW9ucy5pbmZpbml0ZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgaWYgKChfLmN1cnJlbnRTbGlkZSA9PT0gMCAmJiBzd2lwZURpcmVjdGlvbiA9PT0gJ3JpZ2h0JykgfHwgKF8uY3VycmVudFNsaWRlID49IF8uZ2V0RG90Q291bnQoKSAmJiBzd2lwZURpcmVjdGlvbiA9PT0gJ2xlZnQnKSkge1xyXG4gICAgICAgICAgICAgICAgc3dpcGVMZW5ndGggPSBfLnRvdWNoT2JqZWN0LnN3aXBlTGVuZ3RoICogXy5vcHRpb25zLmVkZ2VGcmljdGlvbjtcclxuICAgICAgICAgICAgICAgIF8udG91Y2hPYmplY3QuZWRnZUhpdCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMudmVydGljYWwgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIF8uc3dpcGVMZWZ0ID0gY3VyTGVmdCArIHN3aXBlTGVuZ3RoICogcG9zaXRpb25PZmZzZXQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgXy5zd2lwZUxlZnQgPSBjdXJMZWZ0ICsgKHN3aXBlTGVuZ3RoICogKF8uJGxpc3QuaGVpZ2h0KCkgLyBfLmxpc3RXaWR0aCkpICogcG9zaXRpb25PZmZzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChfLm9wdGlvbnMudmVydGljYWxTd2lwaW5nID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIF8uc3dpcGVMZWZ0ID0gY3VyTGVmdCArIHN3aXBlTGVuZ3RoICogcG9zaXRpb25PZmZzZXQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoXy5vcHRpb25zLmZhZGUgPT09IHRydWUgfHwgXy5vcHRpb25zLnRvdWNoTW92ZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF8uYW5pbWF0aW5nID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIF8uc3dpcGVMZWZ0ID0gbnVsbDtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXy5zZXRDU1MoXy5zd2lwZUxlZnQpO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnN3aXBlU3RhcnQgPSBmdW5jdGlvbihldmVudCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsXHJcbiAgICAgICAgICAgIHRvdWNoZXM7XHJcblxyXG4gICAgICAgIF8uaW50ZXJydXB0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoXy50b3VjaE9iamVjdC5maW5nZXJDb3VudCAhPT0gMSB8fCBfLnNsaWRlQ291bnQgPD0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdykge1xyXG4gICAgICAgICAgICBfLnRvdWNoT2JqZWN0ID0ge307XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudC50b3VjaGVzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdG91Y2hlcyA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF8udG91Y2hPYmplY3Quc3RhcnRYID0gXy50b3VjaE9iamVjdC5jdXJYID0gdG91Y2hlcyAhPT0gdW5kZWZpbmVkID8gdG91Y2hlcy5wYWdlWCA6IGV2ZW50LmNsaWVudFg7XHJcbiAgICAgICAgXy50b3VjaE9iamVjdC5zdGFydFkgPSBfLnRvdWNoT2JqZWN0LmN1clkgPSB0b3VjaGVzICE9PSB1bmRlZmluZWQgPyB0b3VjaGVzLnBhZ2VZIDogZXZlbnQuY2xpZW50WTtcclxuXHJcbiAgICAgICAgXy5kcmFnZ2luZyA9IHRydWU7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUudW5maWx0ZXJTbGlkZXMgPSBTbGljay5wcm90b3R5cGUuc2xpY2tVbmZpbHRlciA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgIGlmIChfLiRzbGlkZXNDYWNoZSAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgXy51bmxvYWQoKTtcclxuXHJcbiAgICAgICAgICAgIF8uJHNsaWRlVHJhY2suY2hpbGRyZW4odGhpcy5vcHRpb25zLnNsaWRlKS5kZXRhY2goKTtcclxuXHJcbiAgICAgICAgICAgIF8uJHNsaWRlc0NhY2hlLmFwcGVuZFRvKF8uJHNsaWRlVHJhY2spO1xyXG5cclxuICAgICAgICAgICAgXy5yZWluaXQoKTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnVubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXM7XHJcblxyXG4gICAgICAgICQoJy5zbGljay1jbG9uZWQnLCBfLiRzbGlkZXIpLnJlbW92ZSgpO1xyXG5cclxuICAgICAgICBpZiAoXy4kZG90cykge1xyXG4gICAgICAgICAgICBfLiRkb3RzLnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF8uJHByZXZBcnJvdyAmJiBfLmh0bWxFeHByLnRlc3QoXy5vcHRpb25zLnByZXZBcnJvdykpIHtcclxuICAgICAgICAgICAgXy4kcHJldkFycm93LnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKF8uJG5leHRBcnJvdyAmJiBfLmh0bWxFeHByLnRlc3QoXy5vcHRpb25zLm5leHRBcnJvdykpIHtcclxuICAgICAgICAgICAgXy4kbmV4dEFycm93LnJlbW92ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgXy4kc2xpZGVzXHJcbiAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnc2xpY2stc2xpZGUgc2xpY2stYWN0aXZlIHNsaWNrLXZpc2libGUgc2xpY2stY3VycmVudCcpXHJcbiAgICAgICAgICAgIC5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJylcclxuICAgICAgICAgICAgLmNzcygnd2lkdGgnLCAnJyk7XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICBTbGljay5wcm90b3R5cGUudW5zbGljayA9IGZ1bmN0aW9uKGZyb21CcmVha3BvaW50KSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuICAgICAgICBfLiRzbGlkZXIudHJpZ2dlcigndW5zbGljaycsIFtfLCBmcm9tQnJlYWtwb2ludF0pO1xyXG4gICAgICAgIF8uZGVzdHJveSgpO1xyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnVwZGF0ZUFycm93cyA9IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICB2YXIgXyA9IHRoaXMsXHJcbiAgICAgICAgICAgIGNlbnRlck9mZnNldDtcclxuXHJcbiAgICAgICAgY2VudGVyT2Zmc2V0ID0gTWF0aC5mbG9vcihfLm9wdGlvbnMuc2xpZGVzVG9TaG93IC8gMik7XHJcblxyXG4gICAgICAgIGlmICggXy5vcHRpb25zLmFycm93cyA9PT0gdHJ1ZSAmJlxyXG4gICAgICAgICAgICBfLnNsaWRlQ291bnQgPiBfLm9wdGlvbnMuc2xpZGVzVG9TaG93ICYmXHJcbiAgICAgICAgICAgICFfLm9wdGlvbnMuaW5maW5pdGUgKSB7XHJcblxyXG4gICAgICAgICAgICBfLiRwcmV2QXJyb3cucmVtb3ZlQ2xhc3MoJ3NsaWNrLWRpc2FibGVkJykuYXR0cignYXJpYS1kaXNhYmxlZCcsICdmYWxzZScpO1xyXG4gICAgICAgICAgICBfLiRuZXh0QXJyb3cucmVtb3ZlQ2xhc3MoJ3NsaWNrLWRpc2FibGVkJykuYXR0cignYXJpYS1kaXNhYmxlZCcsICdmYWxzZScpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF8uY3VycmVudFNsaWRlID09PSAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgXy4kcHJldkFycm93LmFkZENsYXNzKCdzbGljay1kaXNhYmxlZCcpLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xyXG4gICAgICAgICAgICAgICAgXy4kbmV4dEFycm93LnJlbW92ZUNsYXNzKCdzbGljay1kaXNhYmxlZCcpLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCAnZmFsc2UnKTtcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXy5jdXJyZW50U2xpZGUgPj0gXy5zbGlkZUNvdW50IC0gXy5vcHRpb25zLnNsaWRlc1RvU2hvdyAmJiBfLm9wdGlvbnMuY2VudGVyTW9kZSA9PT0gZmFsc2UpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBfLiRuZXh0QXJyb3cuYWRkQ2xhc3MoJ3NsaWNrLWRpc2FibGVkJykuYXR0cignYXJpYS1kaXNhYmxlZCcsICd0cnVlJyk7XHJcbiAgICAgICAgICAgICAgICBfLiRwcmV2QXJyb3cucmVtb3ZlQ2xhc3MoJ3NsaWNrLWRpc2FibGVkJykuYXR0cignYXJpYS1kaXNhYmxlZCcsICdmYWxzZScpO1xyXG5cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChfLmN1cnJlbnRTbGlkZSA+PSBfLnNsaWRlQ291bnQgLSAxICYmIF8ub3B0aW9ucy5jZW50ZXJNb2RlID09PSB0cnVlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgXy4kbmV4dEFycm93LmFkZENsYXNzKCdzbGljay1kaXNhYmxlZCcpLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xyXG4gICAgICAgICAgICAgICAgXy4kcHJldkFycm93LnJlbW92ZUNsYXNzKCdzbGljay1kaXNhYmxlZCcpLmF0dHIoJ2FyaWEtZGlzYWJsZWQnLCAnZmFsc2UnKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcblxyXG4gICAgU2xpY2sucHJvdG90eXBlLnVwZGF0ZURvdHMgPSBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgdmFyIF8gPSB0aGlzO1xyXG5cclxuICAgICAgICBpZiAoXy4kZG90cyAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgXy4kZG90c1xyXG4gICAgICAgICAgICAgICAgLmZpbmQoJ2xpJylcclxuICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnc2xpY2stYWN0aXZlJylcclxuICAgICAgICAgICAgICAgIC5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XHJcblxyXG4gICAgICAgICAgICBfLiRkb3RzXHJcbiAgICAgICAgICAgICAgICAuZmluZCgnbGknKVxyXG4gICAgICAgICAgICAgICAgLmVxKE1hdGguZmxvb3IoXy5jdXJyZW50U2xpZGUgLyBfLm9wdGlvbnMuc2xpZGVzVG9TY3JvbGwpKVxyXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKCdzbGljay1hY3RpdmUnKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9O1xyXG5cclxuICAgIFNsaWNrLnByb3RvdHlwZS52aXNpYmlsaXR5ID0gZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIHZhciBfID0gdGhpcztcclxuXHJcbiAgICAgICAgaWYgKCBfLm9wdGlvbnMuYXV0b3BsYXkgKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoIGRvY3VtZW50W18uaGlkZGVuXSApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBfLmludGVycnVwdGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgXy5pbnRlcnJ1cHRlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICAkLmZuLnNsaWNrID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIF8gPSB0aGlzLFxyXG4gICAgICAgICAgICBvcHQgPSBhcmd1bWVudHNbMF0sXHJcbiAgICAgICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxyXG4gICAgICAgICAgICBsID0gXy5sZW5ndGgsXHJcbiAgICAgICAgICAgIGksXHJcbiAgICAgICAgICAgIHJldDtcclxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0ID09ICdvYmplY3QnIHx8IHR5cGVvZiBvcHQgPT0gJ3VuZGVmaW5lZCcpXHJcbiAgICAgICAgICAgICAgICBfW2ldLnNsaWNrID0gbmV3IFNsaWNrKF9baV0sIG9wdCk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHJldCA9IF9baV0uc2xpY2tbb3B0XS5hcHBseShfW2ldLnNsaWNrLCBhcmdzKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXQgIT0gJ3VuZGVmaW5lZCcpIHJldHVybiByZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBfO1xyXG4gICAgfTtcclxuXHJcbn0pKTtcclxuIiwiLy8gRXh0cmFjdCBjdXJyZW50IGJyZWFrcG9pbnQgbmFtZSBhcyBzdHJpbmcgZnJvbSBET01cclxuLy8gTW9yZSBkZXRhaWxzOiBodHRwczovL3d3dy5sdWxsYWJvdC5jb20vYXJ0aWNsZXMvaW1wb3J0aW5nLWNzcy1icmVha3BvaW50cy1pbnRvLWphdmFzY3JpcHRcclxuZXhwb3J0IGNvbnN0IGJyZWFrcG9pbnQgPSAoKSA9PiB7XHJcbiAgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpLCBcIjo6YmVmb3JlXCIpXHJcbiAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKFwiY29udGVudFwiKVxyXG4gICAgICAucmVwbGFjZSgvXFxcIi9nLCBcIlwiKTtcclxufTsiLCIvKipcclxuICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjE3NDE4NDEvZGV0ZWN0aW5nLWlvcy1hbmRyb2lkLW9wZXJhdGluZy1zeXN0ZW1cclxuICogRGV0ZXJtaW5lIHRoZSBtb2JpbGUgb3BlcmF0aW5nIHN5c3RlbS5cclxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIG9uZSBvZiAnaU9TJywgJ0FuZHJvaWQnLCAnV2luZG93cyBQaG9uZScsIG9yICd1bmtub3duJy5cclxuICpcclxuICogQHJldHVybnMge1N0cmluZ31cclxuICovXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE1vYmlsZU9wZXJhdGluZ1N5c3RlbSgpIHtcclxuICAgIHZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50IHx8IG5hdmlnYXRvci52ZW5kb3IgfHwgd2luZG93Lm9wZXJhO1xyXG4gIFxyXG4gICAgICAgIC8vIFdpbmRvd3MgUGhvbmUgbXVzdCBjb21lIGZpcnN0IGJlY2F1c2UgaXRzIFVBIGFsc28gY29udGFpbnMgXCJBbmRyb2lkXCJcclxuICAgICAgaWYgKC93aW5kb3dzIHBob25lL2kudGVzdCh1c2VyQWdlbnQpKSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJXaW5kb3dzIFBob25lXCI7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgaWYgKC9hbmRyb2lkL2kudGVzdCh1c2VyQWdlbnQpKSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJBbmRyb2lkXCI7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgLy8gaU9TIGRldGVjdGlvbiBmcm9tOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS85MDM5ODg1LzE3NzcxMFxyXG4gICAgICBpZiAoL2lQYWR8aVBob25lfGlQb2QvLnRlc3QodXNlckFnZW50KSAmJiAhd2luZG93Lk1TU3RyZWFtKSB7XHJcbiAgICAgICAgICByZXR1cm4gXCJpT1NcIjtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgICByZXR1cm4gXCJ1bmtub3duXCI7XHJcbiAgfSIsIi8qKiBodHRwczovL3RvZGRtb3R0by5jb20vZGl0Y2gtdGhlLWFycmF5LWZvcmVhY2gtY2FsbC1ub2RlbGlzdC1oYWNrLyNyZWNvbW1lbmRhdGlvbnMgKiovXHJcblxyXG4vLyBmb3JFYWNoIG1ldGhvZCwgY291bGQgYmUgc2hpcHBlZCBhcyBwYXJ0IG9mIGFuIE9iamVjdCBMaXRlcmFsL01vZHVsZVxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgc2NvcGUpIHtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjYWxsYmFjay5jYWxsKHNjb3BlLCBpLCBhcnJheVtpXSk7IC8vIHBhc3NlcyBiYWNrIHN0dWZmIHdlIG5lZWRcclxuICAgIH1cclxufTsiLCIvKiBOUE0gbW9kdWxlcyBpbXBvcnRzICovXHJcbmltcG9ydCAkIGZyb20gXCJqcXVlcnlcIjtcclxuaW1wb3J0IHN2ZzRldmVyeWJvZHkgZnJvbSAnc3ZnNGV2ZXJ5Ym9keSc7XHJcbmltcG9ydCBkZWJvdW5jZSBmcm9tICdsb2Rhc2guZGVib3VuY2UnO1xyXG5pbXBvcnQgJ29iamVjdEZpdFBvbHlmaWxsJztcclxuaW1wb3J0IHNtb290aHNjcm9sbCBmcm9tICdzbW9vdGhzY3JvbGwtcG9seWZpbGwnO1xyXG4vKiBTaXRlIEhlbHBlcnMgaW1wb3J0cyAqL1xyXG5pbXBvcnQgYnJlYWtwb2ludCBmcm9tIFwiLi9oZWxwZXJzL2JyZWFrcG9pbnRzLmpzXCI7XHJcbmltcG9ydCBkb3dubG9hZEFwcFN3aXBlIGZyb20gXCIuL21vZHVsZXMvZG93bmxvYWRBcHAuanNcIjtcclxuLyogU2l0ZSBNb2R1bGUgaW1wb3J0cyAqL1xyXG5pbXBvcnQgbGFuZ3VhZ2VTZWxlY3RvciBmcm9tIFwiLi9tb2R1bGVzL2xhbmd1YWdlU2VsZWN0b3IuanNcIjtcclxuaW1wb3J0IHRvZ2dsZUNvbnRyYXN0IGZyb20gXCIuL21vZHVsZXMvdG9nZ2xlQ29udHJhc3QuanNcIjtcclxuaW1wb3J0IG1haW5OYXYgZnJvbSBcIi4vbW9kdWxlcy9tYWluTmF2LmpzXCI7XHJcbmltcG9ydCBtb2JpbGVOYXYgZnJvbSBcIi4vbW9kdWxlcy9tb2JpbGVOYXYuanNcIjtcclxuaW1wb3J0IGRpYWxvZ01hbmFnZXIgZnJvbSBcIi4vbW9kdWxlcy9kaWFsb2dNYW5hZ2VyLmpzXCI7XHJcbmltcG9ydCBob21lUGFnZU1vZGFsIGZyb20gXCIuL21vZHVsZXMvaG9tZVBhZ2VNb2RhbC5qc1wiO1xyXG5pbXBvcnQgbW92ZUl0ZW1zIGZyb20gXCIuL21vZHVsZXMvbW92ZUl0ZW1zLmpzXCI7XHJcbmltcG9ydCBmb3JMb2dnZWRJblVzZXIgZnJvbSBcIi4vbW9kdWxlcy9sb2dnZWRpbi5qc1wiXHJcbmltcG9ydCB7dG9nZ2xlTG9naW5TZWN0aW9ufSBmcm9tIFwiLi9tb2R1bGVzL2xvZ2dlZGluLmpzXCI7XHJcbmltcG9ydCB7cG9wdWxhdGVMb2dnZWRJblVzZXJJbmZvfSBmcm9tIFwiLi9tb2R1bGVzL2xvZ2dlZGluLmpzXCI7XHJcbmltcG9ydCB7IEltYWdlU2xpZGVyIH0gZnJvbSBcIi4vbW9kdWxlcy9JbWFnZVNsaWRlclwiO1xyXG5pbXBvcnQgZ2V0VGhlQXBwIGZyb20gXCIuL21vZHVsZXMvZ2V0VGhlQXBwLmpzXCI7XHJcbmltcG9ydCBnZXRUaGVBcHBCYW5uZXIgZnJvbSBcIi4vbW9kdWxlcy9nZXRUaGVBcHBCYW5uZXIuanNcIjtcclxuaW1wb3J0IGdldEFwcExpbmsgZnJvbSBcIi4vbW9kdWxlcy9nZXRBcHBMaW5rLmpzXCI7XHJcbmltcG9ydCBzaWdudXAgZnJvbSBcIi4vbW9kdWxlcy9zaWdudXAuanNcIjtcclxuaW1wb3J0IGFsZXJ0IGZyb20gXCIuL21vZHVsZXMvYWxlcnQuanNcIjtcclxuaW1wb3J0IHRhYnMgZnJvbSBcIi4vbW9kdWxlcy90YWJzLmpzXCI7XHJcbmltcG9ydCBhY2NvcmRpb24gZnJvbSBcIi4vbW9kdWxlcy9hY2NvcmRpb24uanNcIjtcclxuaW1wb3J0IHN0b3BQYWdlSnVtcEZvckhhc2hVcmwgZnJvbSBcIi4vbW9kdWxlcy9zdG9wUGFnZUp1bXBGb3JIYXNoVXJsLmpzXCI7XHJcbmltcG9ydCBmbGlwcGVyIGZyb20gXCIuL21vZHVsZXMvZmxpcHBlci5qc1wiO1xyXG5pbXBvcnQgYmFja1RvVG9wQnV0dG9uIGZyb20gXCIuL21vZHVsZXMvYmFja1RvVG9wQnV0dG9uLmpzXCI7XHJcbmltcG9ydCBzdGlja3lIZWFkZXIgZnJvbSBcIi4vbW9kdWxlcy9zdGlja3lIZWFkZXIuanNcIjtcclxuaW1wb3J0IGFuY2hvcmVkRGlzY2xhaW1lciBmcm9tIFwiLi9tb2R1bGVzL2FuY2hvcmVkRGlzY2xhaW1lci5qc1wiO1xyXG5pbXBvcnQgYWN0aXZlTmF2SXRlbSBmcm9tIFwiLi9tb2R1bGVzL2FjdGl2ZU5hdkl0ZW0uanNcIjtcclxuaW1wb3J0IHtiZ1ZpZGVvfSBmcm9tIFwiLi9tb2R1bGVzL2JnVmlkZW8uanNcIjtcclxuaW1wb3J0IHtsb2FkUHJlc3N9IGZyb20gXCIuL21vZHVsZXMvbG9hZFByZXNzLmpzXCI7XHJcbmltcG9ydCB7VmlkZW9QbGF5ZXJ9IGZyb20gXCIuL21vZHVsZXMvdmlkZW9QbGF5ZXIuanNcIjtcclxuaW1wb3J0IHtPcGVuTW9kYWx9IGZyb20gXCIuL21vZHVsZXMvb3Blbk1vZGFsLmpzXCI7XHJcbmltcG9ydCBudXRyaXRpb25HcmlkIGZyb20gXCIuL21vZHVsZXMvbnV0cml0aW9uR3JpZC5qc1wiO1xyXG5pbXBvcnQgdG91Y2hTd2lwZSBmcm9tIFwiLi9jdXN0b20tdmVuZG9yL2pxdWVyeS10b3VjaHN3aXBlLmpzXCI7XHJcblxyXG53aW5kb3cudG9nZ2xlTG9naW5TZWN0aW9uID0gdG9nZ2xlTG9naW5TZWN0aW9uO1xyXG53aW5kb3cucG9wdWxhdGVMb2dnZWRJblVzZXJJbmZvID0gcG9wdWxhdGVMb2dnZWRJblVzZXJJbmZvO1xyXG53aW5kb3cuc2xpZGVycyA9IFtdO1xyXG5cclxuaWYgKHR5cGVvZiBMYXp5TG9hZCAhPSAndW5kZWZpbmVkJykge1xyXG5teUxhenlsb2FkMSA9IG5ldyBMYXp5TG9hZCh7XHJcbiAgICBjYWxsYmFja19zZXQ6IGZ1bmN0aW9uIChlbCkge1xyXG4gICAgICAgIHBpY3R1cmVmaWxsKHsgcmVldmFsdWF0ZTogdHJ1ZSB9KTtcclxuICAgICAgICBvYmplY3RGaXRQb2x5ZmlsbCgpO1xyXG4gICAgICAgIGhvbWVQYWdlTW9kYWwoKTtcclxuICAgIH1cclxufSk7XHJcblxyXG59XHJcblxyXG5cclxuLy9UcmlnZ2VyIGJyZWFrcG9pbnQgb24gcmVzaXplIGFuZCBwYWdlIGxvYWRcclxuJCh3aW5kb3cpLnJlc2l6ZShmdW5jdGlvbiAoKSB7XHJcbiAgICAvL2JyZWFrcG9pbnQucmVmcmVzaFZhbHVlKCk7XHJcbn0pLnJlc2l6ZSgpO1xyXG5cclxuLyogRnVuY3Rpb24gQ2FsbHMgKi9cclxuc3ZnNGV2ZXJ5Ym9keSgpO1xyXG5cclxuLy8ga2ljayBvZmYgdGhlIHBvbHlmaWxsIVxyXG5zbW9vdGhzY3JvbGwucG9seWZpbGwoKTtcclxuXHJcbmlmKCQoJy5qcy1zdy1leWVicm93X19sYW5ndWFnZScpLmxlbmd0aCkge1xyXG4gICAgbGFuZ3VhZ2VTZWxlY3RvcignLmpzLXN3LWV5ZWJyb3dfX2xhbmd1YWdlJyk7XHJcbn1cclxuXHJcbmlmKCQoJy5qcy1zdy1jb250cmFzdCcpLmxlbmd0aCkgeyAgICAgXHJcbiAgICB0b2dnbGVDb250cmFzdCgnLmpzLXN3LWNvbnRyYXN0Jyk7XHJcbn1cclxuXHJcbmlmKCQoJy5qcy1zdy1tYWlubmF2X19pdGVtJykubGVuZ3RoKSB7XHJcbiAgICBtYWluTmF2KCcuanMtc3ctbWFpbm5hdl9faXRlbScpO1xyXG59XHJcblxyXG5pZigkKCcuanMtc3ctaGFtYnVyZ2VyJykubGVuZ3RoKSB7XHJcbiAgICBtb2JpbGVOYXYoJy5qcy1zdy1oYW1idXJnZXInKTtcclxufVxyXG5cclxuaWYoJCgnLmpzLXN3LXNpZ251cCcpLmxlbmd0aCkge1xyXG4gICAgJCgnLmpzLXN3LXNpZ251cCcpLmVhY2goZnVuY3Rpb24oKXtcclxuICAgICAgICBzaWdudXAoJCh0aGlzKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuXHJcblxyXG5cclxuYWN0aXZlTmF2SXRlbSgpO1xyXG5tb3ZlSXRlbXMoKTtcclxuZm9yTG9nZ2VkSW5Vc2VyKCk7XHJcbmdldFRoZUFwcCgpO1xyXG5nZXRUaGVBcHBCYW5uZXIoKTtcclxuZ2V0QXBwTGluaygpO1xyXG5hbGVydCgpO1xyXG5zdG9wUGFnZUp1bXBGb3JIYXNoVXJsKCk7XHJcbmZsaXBwZXIoKTtcclxuYmFja1RvVG9wQnV0dG9uKCk7XHJcbmRvd25sb2FkQXBwU3dpcGUoKTtcclxuLy9kaWFsb2dNYW5hZ2VyKCk7XHJcblxyXG5cclxuaWYoJCgnLmpzLXN3LXRhYnMnKS5sZW5ndGgpIHtcclxuICAgIHRhYnMoKTtcclxufVxyXG5cclxuaWYoJCgnLmpzLXN3LWFjY29yZGlvbicpLmxlbmd0aCkge1xyXG4gICAgYWNjb3JkaW9uKCk7ICAgXHJcbn1cclxuXHJcbmlmKCQoJy5qcy1udXRyaXRpb24tZ3JpZC0tdjInKS5sZW5ndGgpIHtcclxuICAgIG51dHJpdGlvbkdyaWQoKTtcclxufVxyXG5cclxuc3RpY2t5SGVhZGVyKCcuc3ctaGVhZGVycGFuZScpO1xyXG5hbmNob3JlZERpc2NsYWltZXIoKTtcclxuXHJcbi8vIFNsaWRlc2hvd3NcclxuLy8gZG8gbm90IGludGlhbGl6ZSBzbGlkZXNob3dzIGluc2lkZVxyXG4vLyBwYWdlIGVkaXRvclxyXG5cclxuY29uc3Qgc2xpZGVzaG93cyA9ICQubWFrZUFycmF5KCQoXCIuanMtc3ctaGVyb19fc2xpZGVyXCIpKS5tYXAoIGVsID0+IHtcclxuICAgIGxldCBhdXRvUGxheSxcclxuICAgICAgICBydGxDYXNlO1xyXG4gICAgaWYgKCQoXCJib2R5XCIpLmhhc0NsYXNzKFwiaXMtcGFnZS1lZGl0b3JcIikpIHtcclxuICAgICAgICBhdXRvUGxheSA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBhdXRvUGxheSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZigkKCdodG1sJykuYXR0cignZGlyJykgPT09IFwicnRsXCIpIHtcclxuICAgICAgICBydGxDYXNlID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcnRsQ2FzZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYoJChlbCkuZmluZCgnLnN3LWhlcm9fX3NsaWRlJykubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIHZhciBpbWFnZVNsaWRlciA9IG5ldyBJbWFnZVNsaWRlcigkKGVsKSwgJy5zdy1oZXJvX19zbGlkZScsIHsgYXV0b3BsYXk6IGF1dG9QbGF5LCBydGw6IHJ0bENhc2UgfSk7XHJcbiAgICAgICAgd2luZG93LnNsaWRlcnMucHVzaChpbWFnZVNsaWRlcik7XHJcbiAgICB9IGVsc2UgaWYgKCQoZWwpLmZpbmQoJy5zdy1oZXJvX19zbGlkZScpLmxlbmd0aCA9PT0gMSl7XHJcbiAgICAgICAgLy8gc3RpbGwgbmVlZCB0byBpbml0aWFsaXplIHRoZSBmb2N1cyBvdXRsaW5lIGlmIGl0IGV4aXN0cyBcclxuICAgICAgICBsZXQgY3VycmVudE91dGxpbmVTdHlsZSA9ICQoZWwpLmZpbmQoJy5zdy1oZXJvX19zbGlkZScpLmZpcnN0KCkuZGF0YShcIm91dGxpbmVcIik7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgY3VycmVudE91dGxpbmVTdHlsZSAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICAkKGVsKS5hZGRDbGFzcyhjdXJyZW50T3V0bGluZVN0eWxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG5jb25zdCBiZ3ZpZGVvID0gJC5tYWtlQXJyYXkoJChcIi5qcy1zdy12aWRlby0tYmdcIikpLm1hcCggZWwgPT4ge1xyXG4gICAgcmV0dXJuIG5ldyBiZ1ZpZGVvKCQoZWwpKTtcclxufSlcclxuY29uc3QgTG9hZFByZXNzID0gJC5tYWtlQXJyYXkoJChcIi5qcy1zdy1wcmVzc19fbG9hZC1tb3JlXCIpKS5tYXAoIGVsID0+IHtcclxuICAgIHJldHVybiBuZXcgbG9hZFByZXNzKCQoZWwpKTtcclxufSlcclxuLyoqIEhBQ0s6IG9iamVjdEZpdFBvbHlmaWxsXHJcbiAqICAxLiB1c2luZyBkZWJvdW5jZSBmcm9tIGxvZGFzaFxyXG4gKiAgMi4gdG8gYWRkcmVzcyBpbWFnZSBnZXR0aW5nIHdlaXJkIHNpemUgYW5kIFxyXG4gKiAgMy4gcG9zaXRpb25lZCBkaWZmZXJlbnRseSBvbiBJRSB3aGVuIHRoZSBzb3VyY2Ugc2V0IGNoYW5nZWRcclxuICogIDQuIG9iamVjdEZpdFBvbHlmaWxsKCkgaXMgYmVpbmcgY2FsbGVkIHR3aWNlIG9uIHJlc2l6ZVxyXG4gKiAgNS4gT25lIHdpdGggZGVib3VjbmUgKGhlcmUgYmVsb3cpIGFuZCB0aGUgb3RoZXIgd2l0aG91dCBpbiB0aGUgc3JjIHBvbHlmaWxsIGZpbGVcclxuICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGRlYm91bmNlKGZ1bmN0aW9uKCkge1xyXG4gICAgb2JqZWN0Rml0UG9seWZpbGwoKTtcclxufSwgMTAwMCkpO1xyXG5pZigkKFwiLmpzLXN3LW1vZGFsLWJ0blwiKS5sZW5ndGgpe1xyXG4gICAgbGV0IGNvdW50ZXIgPSAwO1xyXG4gICAgY29uc3Qgb3Blbk1vZGFsID0gJC5tYWtlQXJyYXkoJChcIi5qcy1zdy1tb2RhbC1idG5cIikpLm1hcChlbCA9PiB7XHJcbiAgICAgICAgY291bnRlcisrO1xyXG4gICAgICAgIHZhciAkZWwgPSAkKGVsKTtcclxuICAgICAgICAkZWwuYXR0cignaWQnLCAnanMtc3ctbW9kYWwtYnRuX18nICsgY291bnRlcik7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBPcGVuTW9kYWwoJGVsKTtcclxuICAgIH0pXHJcbn1cclxuaWYoJChcIi5qcy1zdy12aWRlb19fcGxheWVyXCIpLmxlbmd0aCl7XHJcbiAgICBjb25zdCB2aWRlb1BsYXllciA9ICQubWFrZUFycmF5KCQoXCIuanMtc3ctdmlkZW9fX3BsYXllclwiKSkubWFwKGVsID0+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFZpZGVvUGxheWVyKCQoZWwpKTtcclxuICAgIH0pXHJcbn1cclxuXHJcblxyXG4vL2xhdW5jaC1sb2NhdG9yLWNhdGVyaW5nXHJcbiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcclxuXHRpZiAoJChcIi5sYXVuY2gtbG9jYXRvci1jYXRlcmluZ1wiKSAhPSBudWxsKSB7XHJcblx0XHRcdCQoXCIubGF1bmNoLWxvY2F0b3ItY2F0ZXJpbmdcIikub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7bGF1bmNoTG9jYXRvcignSGFzQ2F0ZXJpbmcnKTt9KTtcclxuXHR9XHJcbn0pO1xyXG5cclxuLy8gJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkge1xyXG4vLyBcdGNvbnNvbGUubG9nKCdkb2NyZWFkeSBob21lcGFnZW1vZGFsJyk7XHJcbi8vICAgICBpZigkKCcuaG9tZVBhZ2VNb2RhbCcpLmxlbmd0aCkgeyAgIFxyXG4vLyAgICAgICAgIGhvbWVQYWdlTW9kYWwoKTtcclxuLy8gICAgIH1cclxuLy8gfSk7XHJcblxyXG5cclxud2luZG93LnN0b3BBbGxTbGlkZXJzID0gZnVuY3Rpb24gKCl7XHJcbiAgICAkLmVhY2god2luZG93LnNsaWRlcnMsIGZ1bmN0aW9uKGksIHNsaWRlcil7XHJcbiAgICAgICAgc2xpZGVyLnN0b3BTbGlkZXIoKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICB3aW5kb3cuc3RhcnRBbGxTbGlkZXJzID0gZnVuY3Rpb24gKCl7XHJcbiAgICAkLmVhY2god2luZG93LnNsaWRlcnMsIGZ1bmN0aW9uKGksIHNsaWRlcil7XHJcbiAgICAgICAgc2xpZGVyLnN0b3BTbGlkZXIoKTtcclxuICAgICAgICBzbGlkZXIudG9nZ2xlU2xpZGVyKCk7XHJcbiAgICB9KVxyXG4gIH1cclxuICAiLCJpbXBvcnQgJCBmcm9tIFwianF1ZXJ5XCI7XHJcbmltcG9ydCBcIi4uL2N1c3RvbS12ZW5kb3Ivc2xpY2stY2Fyb3VzZWwvc2xpY2svc2xpY2tcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBJbWFnZVNsaWRlciB7XHJcbiAgY29uc3RydWN0b3IoJGVsLCBzbGlkZVNlbGVjdG9yLCBjb25mKSB7XHJcbiAgICB0aGlzLiRlbCA9ICRlbDtcclxuICAgIHRoaXMuJGhlcm8gPSAkZWwucGFyZW50cyhcIi5qcy1zdy1oZXJvXCIpO1xyXG4gICAgdGhpcy4kcGF1c2VCdG4gPSB0aGlzLiRoZXJvLmZpbmQoXCIuanMtc3ctaGVyb19fcGF1c2VcIik7XHJcbiAgICB0aGlzLnBhdXNlQ2xhc3MgPSBcInBhdXNlZFwiO1xyXG4gICAgdGhpcy5pc0Nyb3NzZmFkZSA9IHRoaXMuJGhlcm8uaGFzQ2xhc3MoXCJzdy1oZXJvLS1jcm9zc2ZhZGVcIik7XHJcbiAgICB0aGlzLnNsaWNrUGFyYW1zID0gdGhpcy5pc0Nyb3NzZmFkZVxyXG4gICAgICA/IHRoaXMuc2xpY2tTdGF0aWNDdGEoKVxyXG4gICAgICA6IHRoaXMuc2xpY2tEZWZhdWx0cygpO1xyXG4gICAgbGV0IHNsaWNrQ29uZiA9IE9iamVjdC5hc3NpZ24odGhpcy5zbGlja1BhcmFtcywgY29uZik7XHJcbiAgICAvL2dldCBpbml0aWFsIHNsaWRlIGludGVydmFsLCBvciB1c2UgdGhlIGRlZmF1bHQgaWYgbm9uZSBmb3VuZFxyXG4gICAgbGV0IGZpcnN0U2xpZGUgPSAkZWwuZmluZChzbGlkZVNlbGVjdG9yKS5maXJzdCgpO1xyXG5cclxuICAgIHZhciBpbml0aWFsU2xpZGVJbnRlcnZhbCA9IGZpcnN0U2xpZGUuZGF0YShcImludGVydmFsXCIpO1xyXG4gICAgaWYgKFxyXG4gICAgICB0eXBlb2YgaW5pdGlhbFNsaWRlSW50ZXJ2YWwgIT09IFwidW5kZWZpbmVkXCIgJiZcclxuICAgICAgcGFyc2VJbnQoaW5pdGlhbFNsaWRlSW50ZXJ2YWwpICE9PSBOYU5cclxuICAgICkge1xyXG4gICAgICBzbGlja0NvbmYuYXV0b3BsYXlTcGVlZCA9IGluaXRpYWxTbGlkZUludGVydmFsO1xyXG4gICAgfSAgICAgICAgXHJcblxyXG4gICAgdGhpcy5zZXRPdXRsaW5lKGZpcnN0U2xpZGUuZGF0YShcIm91dGxpbmVcIikpO1xyXG5cclxuICAgIC8vIGJpbmQgZXZlbnQgcHJpb3IgdG8gc2xpY2sgaW5pdFxyXG4gICAgdGhpcy5iaW5kRXZlbnRzKCk7ICAgXHJcblxyXG4gICAgLy8gaW5pdGlhbGl6ZSBzbGljayBcclxuICAgIHRoaXMuJGVsLnNsaWNrKHNsaWNrQ29uZik7ICAgIFxyXG4gICAgXHJcbiAgfVxyXG5cclxuICBiaW5kRXZlbnRzKCkge1xyXG4gICAgLy8gc2F2ZSB0aGUgY29udGVudCBcclxuICAgIGxldCB0aGlzQ2xhc3MgPXRoaXM7XHJcbiAgICBcclxuICAgIC8vb24gaW5pdCwgZGlzcGxheSBwYXVzZSBidXR0b25cclxuICAgIHRoaXMuJGVsLm9uKFwiaW5pdFwiLCBmdW5jdGlvbihzbGljaykge1xyXG4gICAgICBsZXQgJHNsaWNrRG90cyA9ICQodGhpcykucGFyZW50cyhcIi5qcy1zdy1oZXJvXCIpLmZpbmQoXCIuc2xpY2stZG90c1wiKTtcclxuICAgICAgbGV0ICRwYXVzZUJ1dHRvbiA9ICQodGhpcykuc2libGluZ3MoXCIuc3ctaGVyb19fY29udHJvbHNcIikuZmluZChcIi5qcy1zdy1oZXJvX19wYXVzZVwiKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgIGlmICgkc2xpY2tEb3RzLmxlbmd0aCkge1xyXG4gICAgICAgICRwYXVzZUJ1dHRvbi5hcHBlbmRUbygkc2xpY2tEb3RzKVxyXG4gICAgICB9XHJcbiAgICAgICRwYXVzZUJ1dHRvbi5hdHRyKFwiYXJpYS1oaWRkZW5cIiwgXCJmYWxzZVwiKTtcclxuICAgICAgXHJcbiAgICAgIC8vIEV4ZWN1cmUgcmlnaHQgYWZ0ZXIgdGhlIGluaXQgaXMgY29tcGxldGVkXHJcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8PSA3NjgpIHsgLy9tb2JpbGUgdmlld1xyXG4gICAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdpcy1ob21lcGFnZScpKSB7XHJcbiAgICAgICAgICAgIHRoaXNDbGFzcy5zdG9wU2xpZGVyKCk7XHJcbiAgICAgICAgICAgIHRoaXNDbGFzcy5tb2JpbGVTdG9wID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICB9LCAwKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuJGVsLm9uKFwiYWZ0ZXJDaGFuZ2VcIiwgKGV2ZW50LCBzbGljaywgY3VycmVudFNsaWRlLCBuZXh0U2xpZGUpID0+IHtcclxuICAgICAgaWYgKGN1cnJlbnRTbGlkZSA9PT0gMCkgeyAvLyB3ZSBnb3QgYmFjayB0byB0aGUgZmlyc3Qgc2xpZGUgcmVnYXJkbGVzcyBvZiBob3cgd2UgZ290IGhlcmVcclxuICAgICAgICB0aGlzLnN0b3BTbGlkZXIoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXNDbGFzcy5pc0Nyb3NzZmFkZSkge1xyXG4gICAgICAgIC8vIGluIHNsaWRlc2hvdyBtb2RlIHRoZXJlIGlzIG5vdGhpbmcgdG8gdGFiIHRvXHJcbiAgICAgICAgdmFyIHNsaWRlcyA9ICQoc2xpY2suJHNsaWRlcy5nZXQoY3VycmVudFNsaWRlKSk7XHJcbiAgICAgICAgaWYgKHNsaWRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBzbGlkZXNbMF0udGFiSW5kZXggPSAtMTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2V0T3V0bGluZSgkKHNsaWNrLiRzbGlkZXMuZ2V0KGN1cnJlbnRTbGlkZSkpLmRhdGEoXCJvdXRsaW5lXCIpKTtcclxuICAgICAgXHJcblxyXG4gICAgICAvL2lmIHRoZSBjdXJyZW50IHNsaWRlIGhhcyBhIGR1cmF0aW9uIGRlZmluZWQgaW4gaXRzIG1hcmt1cCwgc2V0IHRoZSBhdXRvcGxheXNwZWVkIHRvIHRoYXQgZHVyYXRpb24gdmFsdWVcclxuICAgICAgbGV0IGN1cnJlbnRTbGlkZUludGVydmFsID0gJChzbGljay4kc2xpZGVzLmdldChjdXJyZW50U2xpZGUpKS5kYXRhKFxyXG4gICAgICAgICAgXCJpbnRlcnZhbFwiKTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0eXBlb2YgY3VycmVudFNsaWRlSW50ZXJ2YWwgIT09IFwidW5kZWZpbmVkXCIgJiZcclxuICAgICAgICBwYXJzZUludChjdXJyZW50U2xpZGVJbnRlcnZhbCkgIT09IE5hTlxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzQ2xhc3MuJGVsLnNsaWNrKFxyXG4gICAgICAgICAgXCJzbGlja1NldE9wdGlvblwiLFxyXG4gICAgICAgICAgXCJhdXRvcGxheVNwZWVkXCIsXHJcbiAgICAgICAgICBjdXJyZW50U2xpZGVJbnRlcnZhbCxcclxuICAgICAgICAgIGZhbHNlXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICB9KTsgXHJcblxyXG4gICAgLy8gYmluZCBhbiBldmVudCBvbiB0aGUgYXJyb3dzIHRvIGRlLWZvY3VzIHRoZW0gd2hlblxyXG4gICAgLy8geW91IG1vdXNlIG91dCwgc28gdGhlIGZvY3VzIHN0YXRlIGRvZXNuJ3QgZ2V0IHN0dWNrICAgICAgICAgIFxyXG4gICAgdGhpcy4kZWwub24oXCJtb3VzZWxlYXZlXCIsIFwiLnNsaWNrLW5leHQsIC5zbGljay1wcmV2XCIsIGV2ZW50ID0+IHtcclxuICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5ibHVyKCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuJGVsLm9uKFwic3dpcGVcIiwgKCkgPT4gdGhpcy5zdG9wU2xpZGVyKCkpO1xyXG5cclxuICAgIHRoaXMuJGVsLm9uKFwiY2xpY2tcIiwgXCIuc2xpY2stZG90c1wiLCAoKSA9PiB0aGlzLnN0b3BTbGlkZXIoKSk7XHJcbiAgICB0aGlzLiRlbC5vbihcImNsaWNrXCIsIFwiLnNsaWNrLWFycm93XCIsICgpID0+IHRoaXMuc3RvcFNsaWRlcigpKTtcclxuXHJcbiAgICB0aGlzLiRwYXVzZUJ0bi5jbGljayhldmVudCA9PiB0aGlzLnRvZ2dsZVNsaWRlcihldmVudCkpO1xyXG5cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGlmICh3aW5kb3cucGFnZVlPZmZzZXQgPj0gMCAmJiB0aGlzQ2xhc3MubW9iaWxlU3RvcCkge1xyXG4gICAgICAgIHRoaXNDbGFzcy5tb2JpbGVTdG9wID0gZmFsc2U7ICAgICAgICAgICAgXHJcbiAgICAgICAgdGhpc0NsYXNzLnRvZ2dsZVNsaWRlcigpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNsaWNrRGVmYXVsdHMoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBkb3RzOiB0cnVlLFxyXG4gICAgICBhZGFwdGl2ZUhlaWdodDogdHJ1ZSxcclxuICAgICAgc3BlZWQ6IDMwMCxcclxuICAgICAgc2xpZGVzVG9TaG93OiAxLFxyXG4gICAgICBzbGlkZXNUb1Njcm9sbDogMSxcclxuICAgICAgcGF1c2VPbkRvdHNIb3ZlcjogdHJ1ZVxyXG4gICAgfTtcclxuICB9XHJcbiAgc2xpY2tTdGF0aWNDdGEoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBkcmFnZ2FibGU6IHRydWUsXHJcbiAgICAgIGF1dG9wbGF5OiB0cnVlLFxyXG4gICAgICBhdXRvcGxheVNwZWVkOiAyMDAwLFxyXG4gICAgICBhcnJvd3M6IGZhbHNlLFxyXG4gICAgICBkb3RzOiBmYWxzZSxcclxuICAgICAgYWRhcHRpdmVIZWlnaHQ6IHRydWUsXHJcbiAgICAgIGZhZGU6IHRydWUsXHJcbiAgICAgIHNwZWVkOiA2MDAsXHJcbiAgICAgIGluZmluaXRlOiB0cnVlLFxyXG4gICAgICBjc3NFYXNlOiBcImVhc2UtaW4tb3V0XCIsXHJcbiAgICAgIHNsaWRlc1RvU2hvdzogMSxcclxuICAgICAgc2xpZGVzVG9TY3JvbGw6IDFcclxuICAgIH07XHJcbiAgfVxyXG4gIFxyXG4gIHRvZ2dsZVNsaWRlcigpIHtcclxuICAgIC8vcGxheVxyXG4gICAgaWYgKHRoaXMuJGhlcm8uaGFzQ2xhc3ModGhpcy5wYXVzZUNsYXNzKSkge1xyXG4gICAgICB0aGlzLiRlbC5zbGljayhcInNsaWNrUGxheVwiKTtcclxuICAgICAgdGhpcy4kaGVyby5yZW1vdmVDbGFzcyh0aGlzLnBhdXNlQ2xhc3MpO1xyXG4gICAgICB0aGlzLnRvZ2dsZUJ1dHRvbkFjY2Vzc2liaWxpdHkoXCJwbGF5XCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy9wYXVzZVxyXG4gICAgICB0aGlzLiRoZXJvLmFkZENsYXNzKHRoaXMucGF1c2VDbGFzcyk7XHJcbiAgICAgIHRoaXMuJGVsLnNsaWNrKFwic2xpY2tQYXVzZVwiKTtcclxuICAgICAgdGhpcy50b2dnbGVCdXR0b25BY2Nlc3NpYmlsaXR5KFwicGF1c2VcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzdG9wU2xpZGVyKCkge1xyXG4gICAgaWYgKCF0aGlzLiRoZXJvLmhhc0NsYXNzKHRoaXMucGF1c2VDbGFzcykpIHtcclxuICAgICAgdGhpcy4kaGVyby5hZGRDbGFzcyh0aGlzLnBhdXNlQ2xhc3MpO1xyXG4gICAgICB0aGlzLiRlbC5zbGljayhcInNsaWNrUGF1c2VcIik7XHJcbiAgICAgIHRoaXMudG9nZ2xlQnV0dG9uQWNjZXNzaWJpbGl0eShcInBhdXNlXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2V0T3V0bGluZShjdXJyZW50T3V0bGluZVN0eWxlKSB7ICAgIFxyXG4gICAgICBsZXQgY29udHJvbCA9IHRoaXMuJGVsXHJcblxyXG4gICAgICAvLyByZW1vdmUgYWxsIG91dGxpbmUgY2xhc3Nlc1xyXG4gICAgICBjb250cm9sLmF0dHIoJ2NsYXNzJywgZnVuY3Rpb24gKGksIGMpIHtcclxuICAgICAgICAgIHJldHVybiBjICYmIGMucmVwbGFjZSgvKF58XFxzKW91dGxpbmUtXFxTKy9nLCAnJyk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBjdXJyZW50T3V0bGluZVN0eWxlICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICBjb250cm9sLmFkZENsYXNzKGN1cnJlbnRPdXRsaW5lU3R5bGUpO1xyXG4gICAgICB9XHJcbiAgfVxyXG4gIHRvZ2dsZUJ1dHRvbkFjY2Vzc2liaWxpdHkoYnV0dG9uU3RhdGUpIHtcclxuICAgIHZhciAkcGxheVRleHQgPSB0aGlzLiRwYXVzZUJ0bi5maW5kKCcuanMtc3ctaGVyb19fcGF1c2VfX3BsYXktdGV4dCcpO1xyXG4gICAgdmFyICRwYXVzZVRleHQgPSB0aGlzLiRwYXVzZUJ0bi5maW5kKCcuanMtc3ctaGVyb19fcGF1c2VfX3BhdXNlLXRleHQnKTtcclxuICAgIHN3aXRjaCAoYnV0dG9uU3RhdGUpIHtcclxuICAgICAgY2FzZSBcInBsYXlcIjpcclxuICAgICAgICB0aGlzLiRwYXVzZUJ0bi5hdHRyKCdhcmlhLXByZXNzZWQnLCBcImZhbHNlXCIpOyAvL3RvZ2dsZSB0aGUgcHJlc3NlZCBuYXR1cmUgb2YgdGhlIGJ1dHRvbi4gIGZhbHNlID0gcGF1c2UgaXMgc2hvd2luZyAoYWZ0ZXIgY2xpY2spXHJcbiAgICAgICAgJHBsYXlUZXh0LmF0dHIoXCJhcmlhLWhpZGRlblwiLCBcInRydWVcIik7ICAgICAgICAvL2hpZGUgcGxheSB0ZXh0IHRvIHNjcmVlbiByZWFkZXJzXHJcbiAgICAgICAgJHBhdXNlVGV4dC5hdHRyKFwiYXJpYS1oaWRkZW5cIiwgXCJmYWxzZVwiKTsgICAgICAvL3Nob3cgcGF1c2UgdGV4dCB0byBzY3JlZW4gcmVhZGVyc1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwicGF1c2VcIjpcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLiRwYXVzZUJ0bi5hdHRyKCdhcmlhLXByZXNzZWQnLCBcInRydWVcIik7ICAvL3RvZ2dsZSB0aGUgcHJlc3NlZCBuYXR1cmUgb2YgdGhlIGJ1dHRvbi4gIHRydWUgPSBwbGF5IGlzIHNob3dpbmcgKGFmdGVyIGNsaWNrKVxyXG4gICAgICAgICRwbGF5VGV4dC5hdHRyKFwiYXJpYS1oaWRkZW5cIiwgXCJmYWxzZVwiKTsgICAgICAgLy9zaG93IHBsYXkgdGV4dCB0byBzY3JlZW4gcmVhZGVyc1xyXG4gICAgICAgICRwYXVzZVRleHQuYXR0cihcImFyaWEtaGlkZGVuXCIsIFwidHJ1ZVwiKTsgICAgICAgLy9oaWRlIHBhdXNlIHRleHQgdG8gc2NyZWVuIHJlYWRlcnNcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiLypcclxuKiAgIFRoaXMgY29udGVudCBpcyBsaWNlbnNlZCBhY2NvcmRpbmcgdG8gdGhlIFczQyBTb2Z0d2FyZSBMaWNlbnNlIGF0XHJcbiogICBodHRwczovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDE1L2NvcHlyaWdodC1zb2Z0d2FyZS1hbmQtZG9jdW1lbnRcclxuKlxyXG4qICAgU2ltcGxlIGFjY29yZGlvbiBwYXR0ZXJuIGV4YW1wbGVcclxuKi9cclxuaW1wb3J0IGdldFN0aWNreUhlYWRlckhlaWdodCBmcm9tICcuL2dldFN0aWNreUhlYWRlckhlaWdodC5qcyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhY2NvcmRpb24oKSB7XHJcblxyXG4gICAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmpzLXN3LWFjY29yZGlvbicpKS5mb3JFYWNoKGZ1bmN0aW9uIChhY2NvcmRpb24pIHtcclxuXHJcbiAgICAgICAgLy8gQWxsb3cgZm9yIG11bHRpcGxlIGFjY29yZGlvbiBzZWN0aW9ucyB0byBiZSBleHBhbmRlZCBhdCB0aGUgc2FtZSB0aW1lXHJcbiAgICAgICAgdmFyIGFsbG93TXVsdGlwbGUgPSBhY2NvcmRpb24uaGFzQXR0cmlidXRlKCdkYXRhLWFsbG93LW11bHRpcGxlJyk7XHJcbiAgICAgICAgLy8gQWxsb3cgZm9yIGVhY2ggdG9nZ2xlIHRvIGJvdGggb3BlbiBhbmQgY2xvc2UgaW5kaXZpZHVhbGx5XHJcbiAgICAgICAgdmFyIGFsbG93VG9nZ2xlID0gKGFsbG93TXVsdGlwbGUpID8gYWxsb3dNdWx0aXBsZSA6IGFjY29yZGlvbi5oYXNBdHRyaWJ1dGUoJ2RhdGEtYWxsb3ctdG9nZ2xlJyk7XHJcblxyXG4gICAgICAgIC8vIENyZWF0ZSB0aGUgYXJyYXkgb2YgdG9nZ2xlIGVsZW1lbnRzIGZvciB0aGUgYWNjb3JkaW9uIGdyb3VwXHJcbiAgICAgICAgdmFyIHRyaWdnZXJzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYWNjb3JkaW9uLnF1ZXJ5U2VsZWN0b3JBbGwoJy5zdy1hY2NvcmRpb25fX3RyaWdnZXInKSk7XHJcbiAgICAgICAgdmFyIHBhbmVscyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFjY29yZGlvbi5xdWVyeVNlbGVjdG9yQWxsKCcuc3ctYWNjb3JkaW9uX19wYW5lbCcpKTtcclxuXHJcbiAgICAgICAgYWNjb3JkaW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnc3ctYWNjb3JkaW9uX190cmlnZ2VyJykpIHtcclxuICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IHRvZ2dsZSBpcyBleHBhbmRlZC5cclxuICAgICAgICAgICAgICAgIHZhciBpc0V4cGFuZGVkID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcpID09ICd0cnVlJztcclxuICAgICAgICAgICAgICAgIHZhciBhY3RpdmUgPSBhY2NvcmRpb24ucXVlcnlTZWxlY3RvcignW2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gd2l0aG91dCBhbGxvd011bHRpcGxlLCBjbG9zZSB0aGUgb3BlbiBhY2NvcmRpb25cclxuICAgICAgICAgICAgICAgIGlmICghYWxsb3dNdWx0aXBsZSAmJiBhY3RpdmUgJiYgYWN0aXZlICE9PSB0YXJnZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGV4cGFuZGVkIHN0YXRlIG9uIHRoZSB0cmlnZ2VyaW5nIGVsZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICBhY3RpdmUuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSGlkZSB0aGUgYWNjb3JkaW9uIHNlY3Rpb25zLCB1c2luZyBhcmlhLWNvbnRyb2xzIHRvIHNwZWNpZnkgdGhlIGRlc2lyZWQgc2VjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFjdGl2ZS5nZXRBdHRyaWJ1dGUoJ2FyaWEtY29udHJvbHMnKSkuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCAnJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gdG9nZ2xpbmcgaXMgbm90IGFsbG93ZWQsIGNsZWFuIHVwIGRpc2FibGVkIHN0YXRlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhbGxvd1RvZ2dsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmUucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghaXNFeHBhbmRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgZXhwYW5kZWQgc3RhdGUgb24gdGhlIHRyaWdnZXJpbmcgZWxlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEhpZGUgdGhlIGFjY29yZGlvbiBzZWN0aW9ucywgdXNpbmcgYXJpYS1jb250cm9scyB0byBzcGVjaWZ5IHRoZSBkZXNpcmVkIHNlY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXQuZ2V0QXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJykpLnJlbW92ZUF0dHJpYnV0ZSgnaGlkZGVuJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHRvZ2dsaW5nIGlzIG5vdCBhbGxvd2VkLCBzZXQgZGlzYWJsZWQgc3RhdGUgb24gdHJpZ2dlclxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYWxsb3dUb2dnbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnNldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBzY3JvbGwgcGFnZSB0byB0aGUgYWN0aXZlL3RhcmdldCBhY2NvcmRpb25cclxuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0UmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUHJldmlldyA9IFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImlzLXBhZ2UtcHJldmlld1wiKSkubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICB2YXIgc2l0ZWNvcmVSaWJib25Ub3RhbCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaXNQcmV2aWV3KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l0ZWNvcmVSaWJib25Ub3RhbCA9IDE1MDsgLy8gZXh0cmEgc3BhY2UgdG8gYWNjb3VudCBmb3Igc2l0ZWNvcmUgcmliYm9uIGluIHByZXZpZXcgbW9kZS5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKHtsZWZ0OiAwLCB0b3A6ICh0YXJnZXRSZWN0LnRvcCAtIHNpdGVjb3JlUmliYm9uVG90YWwgKyBzY3JvbGxUb3AgLSBnZXRTdGlja3lIZWFkZXJIZWlnaHQoKSksIGJlaGF2aW9yOiAnc21vb3RoJ30pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFsbG93VG9nZ2xlICYmIGlzRXhwYW5kZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGV4cGFuZGVkIHN0YXRlIG9uIHRoZSB0cmlnZ2VyaW5nIGVsZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gSGlkZSB0aGUgYWNjb3JkaW9uIHNlY3Rpb25zLCB1c2luZyBhcmlhLWNvbnRyb2xzIHRvIHNwZWNpZnkgdGhlIGRlc2lyZWQgc2VjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldC5nZXRBdHRyaWJ1dGUoJ2FyaWEtY29udHJvbHMnKSkuc2V0QXR0cmlidXRlKCdoaWRkZW4nLCAnJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBCaW5kIGtleWJvYXJkIGJlaGF2aW9ycyBvbiB0aGUgbWFpbiBhY2NvcmRpb24gY29udGFpbmVyXHJcbiAgICAgICAgYWNjb3JkaW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgICAgICAgdmFyIGtleSA9IGV2ZW50LndoaWNoLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIC8vIDMzID0gUGFnZSBVcCwgMzQgPSBQYWdlIERvd25cclxuICAgICAgICAgICAgdmFyIGN0cmxNb2RpZmllciA9IChldmVudC5jdHJsS2V5ICYmIGtleS5tYXRjaCgvMzN8MzQvKSk7XHJcblxyXG4gICAgICAgICAgICAvLyBJcyB0aGlzIGNvbWluZyBmcm9tIGFuIGFjY29yZGlvbiBoZWFkZXI/XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdzdy1hY2NvcmRpb25fX3RyaWdnZXInKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gVXAvIERvd24gYXJyb3cgYW5kIENvbnRyb2wgKyBQYWdlIFVwLyBQYWdlIERvd24ga2V5Ym9hcmQgb3BlcmF0aW9uc1xyXG4gICAgICAgICAgICAgICAgLy8gMzggPSBVcCwgNDAgPSBEb3duXHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5Lm1hdGNoKC8zOHw0MC8pIHx8IGN0cmxNb2RpZmllcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRyaWdnZXJzLmluZGV4T2YodGFyZ2V0KTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gKGtleS5tYXRjaCgvMzR8NDAvKSkgPyAxIDogLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHRyaWdnZXJzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmV3SW5kZXggPSAoaW5kZXggKyBsZW5ndGggKyBkaXJlY3Rpb24pICUgbGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0cmlnZ2Vyc1tuZXdJbmRleF0uZm9jdXMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGtleS5tYXRjaCgvMzV8MzYvKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIDM1ID0gRW5kLCAzNiA9IEhvbWUga2V5Ym9hcmQgb3BlcmF0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gR28gdG8gZmlyc3QgYWNjb3JkaW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzM2JzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzWzBdLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvIHRvIGxhc3QgYWNjb3JkaW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzM1JzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzW3RyaWdnZXJzLmxlbmd0aCAtIDFdLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY3RybE1vZGlmaWVyKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBDb250cm9sICsgUGFnZSBVcC8gUGFnZSBEb3duIGtleWJvYXJkIG9wZXJhdGlvbnNcclxuICAgICAgICAgICAgICAgIC8vIENhdGNoZXMgZXZlbnRzIHRoYXQgaGFwcGVuIGluc2lkZSBvZiBwYW5lbHNcclxuICAgICAgICAgICAgICAgIHBhbmVscy5mb3JFYWNoKGZ1bmN0aW9uIChwYW5lbCwgaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFuZWwuY29udGFpbnModGFyZ2V0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2Vyc1tpbmRleF0uZm9jdXMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gTWlub3Igc2V0dXA6IHdpbGwgc2V0IGRpc2FibGVkIHN0YXRlLCB2aWEgYXJpYS1kaXNhYmxlZCwgdG8gYW5cclxuICAgICAgICAvLyBleHBhbmRlZC8gYWN0aXZlIGFjY29yZGlvbiB3aGljaCBpcyBub3QgYWxsb3dlZCB0byBiZSB0b2dnbGVkIGNsb3NlXHJcbiAgICAgICAgaWYgKCFhbGxvd1RvZ2dsZSkge1xyXG4gICAgICAgICAgICAvLyBHZXQgdGhlIGZpcnN0IGV4cGFuZGVkLyBhY3RpdmUgYWNjb3JkaW9uXHJcbiAgICAgICAgICAgIHZhciBleHBhbmRlZCA9IGFjY29yZGlvbi5xdWVyeVNlbGVjdG9yKCdbYXJpYS1leHBhbmRlZD1cInRydWVcIl0nKTtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIGFuIGV4cGFuZGVkLyBhY3RpdmUgYWNjb3JkaW9uIGlzIGZvdW5kLCBkaXNhYmxlXHJcbiAgICAgICAgICAgIGlmIChleHBhbmRlZCkge1xyXG4gICAgICAgICAgICAgICAgZXhwYW5kZWQuc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgJ3RydWUnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuXHJcbiAgICBcclxufSIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhY3RpdmVOYXZJdGVtKCkge1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudE5hdkl0ZW0gPSBzdWJ3YXlfc2l0ZV9jb25maWcuY3VycmVudE5hdkl0ZW0sXHJcbiAgICAgICAgICAgIGN1cnJlbnRVcmxQYXRobmFtZSA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcclxuICAgICAgICAgICAgJG1haW5OYXZJdGVtID0gJCgnLmpzLXN3LW1haW5uYXZfX2l0ZW0nKSxcclxuICAgICAgICAgICAgYWN0aXZlQ2xhc3NOYW1lID0gJ2lzLWN1cnJlbnQnXHJcbiAgICAgICAgO1xyXG5cclxuICAgICAgICAvL1RoaXMgc2hvdWxkIGFkZCB0aGUgYWN0aXZlIG1lbnUgY2xhc3MgZm9yIHN1Ym1lbnUgaXRlbXMgYW5kIHRoZSBwYXJlbnQgbWVudXNcclxuICAgICAgICAvL0FMU08sIG1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0IGp1c3QgaGlnaGxpZ2h0IHNvbWUgc2VjdGlvbiB3aXRoIGEgYnVzdGVkIGxpbmsgd2hlbiB3ZSBhcmUgYXQgdGhlIGhvbWVwYWdlLiAgZG9uJ3QgZG8gYW55IGhpZ2hsaWdodGluZyBpZiB3ZSBqdXN0IGhhdmUgZG9tYWluIGFuZCBjdWx0dXJlIGNvZGUuXHJcbiAgICAgICAgbGV0IHJleCA9IC9eXFwvW2EtekEtWl17Mn1cXC1bYS16QS1aXXsyfShcXC98KSQvO1xyXG4gICAgICAgIGlmKCFyZXgudGVzdChjdXJyZW50VXJsUGF0aG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGxldCAkY3VycmVudFVybExpbmsgPSAkKCcuanMtc3ctbWFpbm5hdiAuc3ctbWFpbm5hdl9fbGlzdCcpLmZpbmQoJ2FbaHJlZnw9XCInICsgY3VycmVudFVybFBhdGhuYW1lICsgJ1wiXScpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gSWYgbW9yZSB0aGFuIG9uZSBtYXRjaCwgY29tcGFyZSBjdXJyZW50TmF2SXRlbSB0byB0aGUgcGFuZWwncyB0aXRsZSAoaGlkZGVuIGVsZW1lbnQpLCBhbmQgaGlnaGxpZ2h0IHRoZSBvbmUgdGhhdCBtYXRjaGVzXHJcbiAgICAgICAgICAgIC8vIGlmIHdlIGRvIG5vdCBmaW5kIGEgbWF0Y2guLi5qdXN0IHBpY2sgeW91ciBmYXZvcml0ZSBvbmUsIGJlY2F1c2UgSSBhbSBvdXQgb2YgaWRlYXMuXHJcbiAgICAgICAgICAgIGxldCAkcmVhbE1hdGNoID0gbnVsbDtcclxuICAgICAgICAgICAgaWYoJGN1cnJlbnRVcmxMaW5rLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgJHJlYWxNYXRjaCA9ICRjdXJyZW50VXJsTGluaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKCRjdXJyZW50VXJsTGluay5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCAkZmlsdGVyZWQgPSAkY3VycmVudFVybExpbmsuZmlsdGVyKGZ1bmN0aW9uKGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgJG1hdGNoZWQgPSAkKHRoaXMpLmNsb3Nlc3QoJy5zdy1tYWlubmF2X19kcm9wZG93bicpLmZpbmQoJy5zdy1tYWlubmF2X19kcm9wZG93bi10aXRsZSBhW2NsYXNzPVwianMtc3ctbWFpbm5hdl9fYWxsb3dhY3RpdmVcIl0nKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJG1hdGNoZWQuYXR0cignaHJlZicpID09PSBjdXJyZW50TmF2SXRlbTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKCRmaWx0ZXJlZC5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAkcmVhbE1hdGNoID0gJGZpbHRlcmVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHJlYWxNYXRjaCA9ICRjdXJyZW50VXJsTGluay5maWx0ZXIoZnVuY3Rpb24oaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9oaWdobGlnaHQgdGhlIGZpcnN0IGxpbmsgdGhhdCBpcyBOT1QgYSBjaGlsZCBvZiBhIChoaWRkZW4pIG1lbnUgcGFuZWwgdGl0bGUgZWxlbWVudC4gIFdlIHVzZWQgdG8gc2hvdyB0aGUgcGFuZWwgaGVhZGluZ3MsIGJ1dCBoYXZlbid0IGZvciBhIGxvbmcgdGltZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQodGhpcykucGFyZW50KCcuc3ctbWFpbm5hdl9fZHJvcGRvd24tdGl0bGUnKS5sZW5ndGggPT09IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgJHJlYWxNYXRjaCA9ICRyZWFsTWF0Y2gubGVuZ3RoID4gMSA/ICRyZWFsTWF0Y2guZmlyc3QoKSAgOiAkcmVhbE1hdGNoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZigkcmVhbE1hdGNoICE9PSBudWxsICYmICRyZWFsTWF0Y2gubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgJHJlYWxNYXRjaC5hZGRDbGFzcyhhY3RpdmVDbGFzc05hbWUpO1xyXG4gICAgICAgICAgICAgICAgJHJlYWxNYXRjaC5jbG9zZXN0KCRtYWluTmF2SXRlbSkuYWRkQ2xhc3MoYWN0aXZlQ2xhc3NOYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0gY2F0Y2goZXJyKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgIH1cclxufSIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhbGVydCgpIHtcclxuICAgIGxldCAkYWxlcnRDb250YWluZXIgPSAkKCcuanMtc3ctYWxlcnQnKSxcclxuICAgICAgICAkYWxlcnRDb250ZW50ID0gJGFsZXJ0Q29udGFpbmVyLmZpbmQoJy5zdy1hbGVydF9fY29udGVudCcpO1xyXG4gICAgc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtcclxuICAgICAgICAkYWxlcnRDb250ZW50LnRvZ2dsZUNsYXNzKFwiYm91bmNlXCIpO1xyXG4gICAgfSwgMzAwMCk7XHJcbn0iLCJpbXBvcnQgJCBmcm9tIFwianF1ZXJ5XCI7XHJcbmltcG9ydCBnZXRTdGlja3lIZWFkZXJIZWlnaHQgZnJvbSBcIi4vZ2V0U3RpY2t5SGVhZGVySGVpZ2h0LmpzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhbmNob3JlZERpc2NsYWltZXIoKSB7XHJcbiAgbGV0IGFuY2hvckVsZW1lbnRzID0gQXJyYXkuZnJvbShcclxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5qcy1zdy1kaXNjbGFpbWVyLS1hbmNob3JcIilcclxuICAgICksXHJcbiAgICBrZXljb2RlcyA9IHsgU1BBQ0U6IDMyLCBFTlRFUjogMTMgfSxcclxuICAgIGhlYWRlckhlaWdodCA9IDAsXHJcbiAgICAkaGFzTGluayA9ICQoXCIuaGFzLWxpbmtcIiksXHJcbiAgICAkaXNFRSA9ICQoXCIuaXMtcGFnZS1lZGl0b3JcIik7XHJcblxyXG4gIHdpbmRvdy5vbnNjcm9sbCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgaGVhZGVySGVpZ2h0ID0gZ2V0U3RpY2t5SGVhZGVySGVpZ2h0KCk7XHJcbiAgfTtcclxuXHJcbiAgaWYgKGFuY2hvckVsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgYW5jaG9yRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihlbCwgaW5kZXgpIHtcclxuICAgICAgbGV0IGFuY2hvcklkID0gZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1ocmVmXCIpO1xyXG5cclxuICAgICAgZWwub25rZXlkb3duID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICBuYXZpZ2F0ZUFuY2hvckxpbmsoZXZlbnQsIGFuY2hvcklkKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGVsLm9uY2xpY2sgPSBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgIG5hdmlnYXRlQW5jaG9yTGluayhldmVudCwgYW5jaG9ySWQpO1xyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGlmICgkaXNFRS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAkaGFzTGluay5vbihcImNsaWNrIGtleWRvd25cIiwgZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgaWYgKGUudHlwZSA9PT0gXCJjbGlja1wiIHx8IGUua2V5Q29kZSA9PT0ga2V5Y29kZXMuRU5URVIpIHtcclxuICAgICAgICAgICAgICB2YXIgJG1haW5MaW5rID0gJCh0aGlzKS5maW5kKFwiLmpzLXN3LWltZ2Jsb2NrX19tYWlubGlua1wiKTtcclxuICAgICAgICAgICAgICBpZiAoJG1haW5MaW5rLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKCEkKGUudGFyZ2V0KS5oYXNDbGFzcyhcInN3LWRpc2NsYWltZXItLWFuY2hvclwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9ICRtYWluTGluay5hdHRyKFwiaHJlZlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9ICRtYWluTGluay5hdHRyKFwidGFyZ2V0XCIpID8gJG1haW5MaW5rLmF0dHIoXCJ0YXJnZXRcIikgOiBcIl9zZWxmXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3Blbih1cmwsIGxvY2F0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRlQW5jaG9yTGluayhldmVudCwgJChlLnRhcmdldCkuYXR0cihcImRhdGEtaHJlZlwiKSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vZm9yIGN0YSBwYW5lbHMsIG5lZWQgdG8gYWRkIGZvY3VzIHN0eWxlcyB0byB0aGUgcGFyZW50IG9mIHRoZSBsaW5rIGlmIHRoZXJlIGlzIG5vIGJ1dHRvblxyXG4gIHZhciAkaGlkZGVuQ1RBUGFuZWxMaW5rcyA9ICRoYXNMaW5rLmZpbmQoJy5qcy1zdy1pbWdibG9ja19fbWFpbmxpbmsuYWNjZXNzaWJpbGl0eS0taGlkZGVuJyk7XHJcbiAgaWYoJGhpZGRlbkNUQVBhbmVsTGlua3MubGVuZ3RoID4gMCkge1xyXG4gICAgJGhpZGRlbkNUQVBhbmVsTGlua3MuZWFjaChmdW5jdGlvbihpbmRleCkge1xyXG4gICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xyXG4gICAgICB2YXIgJGNvbnRhaW5pbmdDVEFQYW5lbCA9ICR0aGlzLmNsb3Nlc3QoJy5zdy11cF9fY29sLS1jb250ZW50LWJsb2NrJyk7XHJcbiAgICAgIGlmKCRjb250YWluaW5nQ1RBUGFuZWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICR0aGlzXHJcbiAgICAgICAgICAuZm9jdXMoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICRjb250YWluaW5nQ1RBUGFuZWwuYWRkQ2xhc3MoJ2N0YS1wYXJlbnQtZm9jdXMnKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYmx1cihmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgJGNvbnRhaW5pbmdDVEFQYW5lbC5yZW1vdmVDbGFzcygnY3RhLXBhcmVudC1mb2N1cycpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBcclxuICAvL2hhbmRsZXMgY2xpY2tzIGFuZCBrZXlkb3ducyBvbiBhbmNob3Igc3BhbiB0YWdcclxuICBmdW5jdGlvbiBuYXZpZ2F0ZUFuY2hvckxpbmsoZXZ0LCBhbmNob3JJZCkge1xyXG4gICAgaWYgKFxyXG4gICAgICBldnQudHlwZSA9PT0gXCJjbGlja1wiIHx8XHJcbiAgICAgIGV2dC5rZXlDb2RlID09PSBrZXljb2Rlcy5TUEFDRSB8fFxyXG4gICAgICBldnQua2V5Q29kZSA9PT0ga2V5Y29kZXMuRU5URVJcclxuICAgICkge1xyXG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgIHdpbmRvdy5zY3JvbGxUbyh7XHJcbiAgICAgICAgbGVmdDogMCxcclxuICAgICAgICB0b3A6IGNhbGN1bGF0ZVNjcm9sbFRvcChhbmNob3JJZCksXHJcbiAgICAgICAgYmVoYXZpb3I6IFwic21vb3RoXCJcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZVNjcm9sbFRvcChhbmNob3JJZCkge1xyXG4gICAgICAgIGxldCBzY3JvbGxUb0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYW5jaG9ySWQpLFxyXG4gICAgICAgICAgICBzY3JvbGxUb1JlY3QgPSBzY3JvbGxUb0VsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFxyXG4gICAgICAgICAgICBzY3JvbGxUb3AgPSB3aW5kb3cucGFnZVlPZmZzZXQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHNjcm9sbFRvUmVjdC50b3AgKyBzY3JvbGxUb3AgLSBoZWFkZXJIZWlnaHQgLSB+fih3aW5kb3cuaW5uZXJIZWlnaHQvMik7IFxyXG4gICAgfVxyXG5cclxuICAgIHdpbmRvdy5jYWxjdWxhdGVTY3JvbGxUb3AgPSBjYWxjdWxhdGVTY3JvbGxUb3A7XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmFja1RvVG9wQnV0dG9uKCkge1xyXG4gIGxldCAkYnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5qcy1zdy1nb3RvLXRvcFwiKTtcclxuXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCAkYnV0dG9uLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAkYnV0dG9uW2ldLm9uY2xpY2sgPSBmdW5jdGlvbihlKSB7XHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgd2luZG93LnNjcm9sbFRvKHsgbGVmdDogMCwgdG9wOiAwLCBiZWhhdmlvcjogXCJzbW9vdGhcIiB9KTtcclxuXHJcbiAgICAgIHZhciBza2lwVG9Db250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInN3LXNraXAtdG8tY29udGVudFwiKVswXTtcclxuXHJcbiAgICAgICBpZiggJCgnLmpzLXN3LWhhbWJ1cmdlcicpLmlzKCc6dmlzaWJsZScpKXtcclxuICAgICAgICAgICAgJCgnLmpzLXN3LWhhbWJ1cmdlcicpLmZvY3VzKCk7XHJcbiAgICAgICAgfSAgICAgICBcclxuXHJcbiAgICAgIGlmKHR5cGVvZiBza2lwVG9Db250ZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiBcclxuICAgICAgICBza2lwVG9Db250ZW50LmZvY3VzKCk7XHJcbiAgICAgICAgc2tpcFRvQ29udGVudC5ibHVyKCk7XHJcbiAgICAgIH1cclxuICAgICAgXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgYmdWaWRlbyB7XHJcbiAgY29uc3RydWN0b3IoJGVsKSB7XHJcbiAgICB0aGlzLiRlbCA9ICRlbDtcclxuICAgIHRoaXMuJHZpZGVvID0gdGhpcy4kZWwuZmluZChcInZpZGVvXCIpO1xyXG4gICAgdGhpcy4kdmlkZW9CdXR0b24gPSB0aGlzLiRlbC5maW5kKFwiLmpzLXN3LXZpZGVvX19idG5cIik7XHJcbiAgICB0aGlzLiRwbGF5ID0gdGhpcy4kdmlkZW9CdXR0b24uZmluZChcIi5zdy12aWRlb19fcGxheVwiKTtcclxuICAgIHRoaXMuJHBhdXNlID0gdGhpcy4kdmlkZW9CdXR0b24uZmluZChcIi5zdy12aWRlb19fcGF1c2VcIik7XHJcbiAgICB0aGlzLiR2aWRlby5yZW1vdmVBdHRyKFwiY29udHJvbHNcIik7XHJcbiAgICB0aGlzLiR2aWRlb0J1dHRvbi5vbihcImNsaWNrXCIsICgpID0+IHRoaXMucGxheVBhdXNlTWVkaWEoKSk7XHJcbiAgfVxyXG4gIHBsYXlQYXVzZU1lZGlhKCkge1xyXG4gICAgaWYgKHRoaXMuJHZpZGVvLmdldCgwKS5wYXVzZWQpIHtcclxuICAgICAgdGhpcy4kcGxheS5jc3MoXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcclxuICAgICAgdGhpcy4kcGF1c2UuY3NzKFwiZGlzcGxheVwiLCBcImJsb2NrXCIpO1xyXG4gICAgICB0aGlzLiR2aWRlby5nZXQoMCkucGxheSgpO1xyXG4gICAgICB0aGlzLnRvZ2dsZUJ1dHRvbkFjY2Vzc2liaWxpdHkoXCJwbGF5XCIpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLiRwbGF5LmNzcyhcImRpc3BsYXlcIiwgXCJibG9ja1wiKTtcclxuICAgICAgdGhpcy4kcGF1c2UuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XHJcbiAgICAgIHRoaXMuJHZpZGVvLmdldCgwKS5wYXVzZSgpO1xyXG4gICAgICB0aGlzLnRvZ2dsZUJ1dHRvbkFjY2Vzc2liaWxpdHkoXCJwYXVzZVwiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlQnV0dG9uQWNjZXNzaWJpbGl0eShidXR0b25TdGF0ZSkge1xyXG4gICAgdmFyICRwbGF5VGV4dCA9IHRoaXMuJHZpZGVvQnV0dG9uLmZpbmQoJy5qcy1zdy12aWRlb19fcGxheS10ZXh0Jyk7XHJcbiAgICB2YXIgJHBhdXNlVGV4dCA9IHRoaXMuJHZpZGVvQnV0dG9uLmZpbmQoJy5qcy1zdy12aWRlb19fcGF1c2UtdGV4dCcpO1xyXG4gICAgc3dpdGNoIChidXR0b25TdGF0ZSkge1xyXG4gICAgICBjYXNlIFwicGxheVwiOlxyXG4gICAgICAgIHRoaXMuJHZpZGVvQnV0dG9uLmF0dHIoJ2FyaWEtcHJlc3NlZCcsIFwiZmFsc2VcIik7IC8vdG9nZ2xlIHRoZSBwcmVzc2VkIG5hdHVyZSBvZiB0aGUgYnV0dG9uLiAgZmFsc2UgPSBwYXVzZSBpcyBzaG93aW5nIChhZnRlciBjbGljaylcclxuICAgICAgICAkcGxheVRleHQuYXR0cihcImFyaWEtaGlkZGVuXCIsIFwidHJ1ZVwiKTsgICAgICAgIC8vaGlkZSBwbGF5IHRleHQgdG8gc2NyZWVuIHJlYWRlcnNcclxuICAgICAgICAkcGF1c2VUZXh0LmF0dHIoXCJhcmlhLWhpZGRlblwiLCBcImZhbHNlXCIpOyAgICAgIC8vc2hvdyBwYXVzZSB0ZXh0IHRvIHNjcmVlbiByZWFkZXJzXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJwYXVzZVwiOlxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMuJHZpZGVvQnV0dG9uLmF0dHIoJ2FyaWEtcHJlc3NlZCcsIFwidHJ1ZVwiKTsgIC8vdG9nZ2xlIHRoZSBwcmVzc2VkIG5hdHVyZSBvZiB0aGUgYnV0dG9uLiAgdHJ1ZSA9IHBsYXkgaXMgc2hvd2luZyAoYWZ0ZXIgY2xpY2spXHJcbiAgICAgICAgJHBsYXlUZXh0LmF0dHIoXCJhcmlhLWhpZGRlblwiLCBcImZhbHNlXCIpOyAgICAgICAvL3Nob3cgcGxheSB0ZXh0IHRvIHNjcmVlbiByZWFkZXJzXHJcbiAgICAgICAgJHBhdXNlVGV4dC5hdHRyKFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpOyAgICAgICAvL2hpZGUgcGF1c2UgdGV4dCB0byBzY3JlZW4gcmVhZGVyc1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCLvu79pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkaWFsb2dNYW5hZ2VyKCkge1xyXG5cclxuICAgIC8vIFZhcmlhYmxlIGZvciBzdG9yaW5nIHRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudFxyXG4gICAgdmFyIF9sYXN0Rm9jdXNlZEVsZW1lbnQ7XHJcbiAgICB2YXIgX2NvbnRhaW5lciA9IG51bGw7XHJcbiAgICB2YXIgX2ZvY3VzYWJsZUVsZW1lbnRzPVtdO1xyXG4gICAgdmFyIF9kb2NGb2N1c2FibGVFbGVtZW50cz1bXTtcclxuICAgIHZhciBfZmlyc3RUYWJTdG9wID0gbnVsbDtcclxuICAgIHZhciBfbGFzdFRhYlN0b3AgPSBudWxsO1xyXG4gICAgdmFyIF9jdXJyZW50RWxlbWVudEluZGV4ID0gMDtcclxuICAgIHZhciBfbGFzdEdvb2RTdG9wID0gbnVsbDtcclxuICAgIHZhciBfYWZ0ZXJSZW1vdmVDYWxsYmFjayA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5yZW1vdmVNb2RhbCA9IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgcmVtb3ZlTW9kYWxJbnRlcm5hbCgpO1xyXG4gICAgfVxyXG5cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZU1vZGFsSW50ZXJuYWwoKXtcclxuICAgIGlmIChfY29udGFpbmVyID09PSBudWxsKSByZXR1cm47XHJcblxyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBsaXN0ZW5Ub1RhYik7XHJcbiAgICAgICAgX2xhc3RGb2N1c2VkRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIGlmKF9hZnRlclJlbW92ZUNhbGxiYWNrIT09bnVsbCl7XHJcbiAgICAgICAgICAgIHRyeXtcclxuICAgICAgICAgICAgICAgIF9hZnRlclJlbW92ZUNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2goZSl7XHJcbiAgICAgICAgICAgICAgICAvL2VtcHR5IHN1cHByZXNzXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbn1cclxuXHJcbiAgICBmdW5jdGlvbiBsaXN0ZW5Ub1RhYihlKXtcclxuICAgICAgICAvLyBMaXN0ZW4gZm9yIHRoZSBUYWIga2V5XHJcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gOSkge1xyXG4gICAgICAgICAgICAvLyBJZiBTaGlmdCArIFRhYlxyXG4gICAgICAgICAgICBpZiAoZS5zaGlmdEtleSkge1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgZWxlbWVudCBpbiBmb2N1cyBpcyB0aGUgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgd2l0aGluIHRoZSBtb2RhbCB3aW5kb3cuLi5cclxuICAgICAgICAgICAgICAgIGRve1xyXG4gICAgICAgICAgICAgICAgICAgIF9jdXJyZW50RWxlbWVudEluZGV4LS07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoX2N1cnJlbnRFbGVtZW50SW5kZXggPCAwKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2N1cnJlbnRFbGVtZW50SW5kZXg9X2ZvY3VzYWJsZUVsZW1lbnRzLmxlbmd0aC0xO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICB3aGlsZSghJChfZm9jdXNhYmxlRWxlbWVudHNbX2N1cnJlbnRFbGVtZW50SW5kZXhdKS5pcyhcIjp2aXNpYmxlXCIpIHx8ICQoX2ZvY3VzYWJsZUVsZW1lbnRzW19jdXJyZW50RWxlbWVudEluZGV4XSkuY3NzKFwidmlzaWJpbGl0eVwiKT09PVwiaGlkZGVuXCIpO1xyXG4gICAgICAgICAgICAgICAgX2ZvY3VzYWJsZUVsZW1lbnRzW19jdXJyZW50RWxlbWVudEluZGV4XS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgVGFiXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAvL3RoZXJlIHNob3VsZCBiZSBhdCBsZWFzdCBvbmUgdGFiYmFibGUgZWxlbWVudCBpbiB0aGUgbGlzdCBvciBpbmZpbml0ZSBsb29wIHdpbGwgaGFwcGVuXHJcbiAgICAgICAgICAgICAgICBkb3tcclxuICAgICAgICAgICAgICAgICAgICBfY3VycmVudEVsZW1lbnRJbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKF9jdXJyZW50RWxlbWVudEluZGV4Pj1fZm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2N1cnJlbnRFbGVtZW50SW5kZXg9MDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgICAgd2hpbGUoISQoX2ZvY3VzYWJsZUVsZW1lbnRzW19jdXJyZW50RWxlbWVudEluZGV4XSkuaXMoXCI6dmlzaWJsZVwiKSB8fCAkKF9mb2N1c2FibGVFbGVtZW50c1tfY3VycmVudEVsZW1lbnRJbmRleF0pLmNzcyhcInZpc2liaWxpdHlcIik9PT1cImhpZGRlblwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBfZm9jdXNhYmxlRWxlbWVudHNbX2N1cnJlbnRFbGVtZW50SW5kZXhdLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENsb3NlIHRoZSB3aW5kb3cgYnkgcHJlc3NpbmcgdGhlIEVzYy1rZXlcclxuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAyNykge1xyXG4gICAgICAgICAgICByZW1vdmVNb2RhbEludGVybmFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIFxyXG5cclxuXHJcbiAgICB0aGlzLmNyZWF0ZURpYWxvZz1mdW5jdGlvbihjb250YWluZXIpIHtcclxuICAgICAgICAvLyBDbG9zZSBhbGwgb3BlbiBtb2RhbCB3aW5kb3dzXHJcbiAgICAgICAgdGhpcy5yZW1vdmVNb2RhbCgpO1xyXG4gICAgICAgIF9mb2N1c2FibGVFbGVtZW50cyA9IFtdO1xyXG4gICAgICAgIF9kb2NGb2N1c2FibGVFbGVtZW50cyA9IFtdO1xyXG4gICAgICAgIC8vIFN0b3JlIHRoZSBsYXN0IGZvY3VzZWQgZWxlbWVudFxyXG4gICAgICAgIF9sYXN0Rm9jdXNlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xyXG4gICAgICAgIC8va2VlcCBhIHJlZmVyZW5jZSB0byB0aGlzIG1vZGFsXHJcbiAgICAgICAgX2NvbnRhaW5lciA9IGNvbnRhaW5lcjtcclxuICAgICAgICAvLyBTZWxlY3QgdGhlIG1vZGFsIHdpbmRvd1xyXG4gICAgICAgIHZhciBtb2RhbCA9IGNvbnRhaW5lcjsgICAgICAgIFxyXG5cclxuICAgICAgICBpZih0eXBlb2YgbW9kYWwgPT09IFwidW5kZWZpbmVkXCIgfHwgbW9kYWwgPT09IG51bGwpe1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGaW5kIGFsbCBmb2N1c2FibGUgY2hpbGRyZW5cclxuICAgICAgICB2YXIgZm9jdXNhYmxlRWxlbWVudHNTZWxlY3RvciA9ICdhW2hyZWZdLCBhcmVhW2hyZWZdLCBpbnB1dDpub3QoW2Rpc2FibGVkXSksIHNlbGVjdDpub3QoW2Rpc2FibGVkXSksIHRleHRhcmVhOm5vdChbZGlzYWJsZWRdKSwgYnV0dG9uOm5vdChbZGlzYWJsZWRdKSwgaWZyYW1lLCBvYmplY3QsIGVtYmVkLCBbdGFiaW5kZXg9XCIwXCJdLCBbY29udGVudGVkaXRhYmxlXSc7XHJcbiAgICAgICAgX2ZvY3VzYWJsZUVsZW1lbnRzID0gbW9kYWwucXVlcnlTZWxlY3RvckFsbChmb2N1c2FibGVFbGVtZW50c1NlbGVjdG9yKTsgXHJcblxyXG4gICAgICAgIF9mb2N1c2FibGVFbGVtZW50cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKF9mb2N1c2FibGVFbGVtZW50cyk7XHJcbiAgICAgICAgLy8gRm9jdXMgdGhlIHdpbmRvd1xyXG4gICAgICAgIF9mb2N1c2FibGVFbGVtZW50c1swXS5mb2N1cygpOyAgICAgICAgXHJcblxyXG4gICAgICAgIF9jdXJyZW50RWxlbWVudEluZGV4ID0gMDtcclxuXHJcbiAgICAgICAgIC8vIEFkZCBrZXlkb3duIGV2ZW50XHJcbiAgICAgICAgLy8gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGxpc3RlblRvVGFiKTtcclxuICAgICAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAgICAgJChkb2N1bWVudCkuc3dpcGUoIHtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vR2VuZXJpYyBzd2lwZSBoYW5kbGVyIGZvciBhbGwgZGlyZWN0aW9uc1xyXG4gICAgICAgICAgICAgICAgc3dpcGU6ZnVuY3Rpb24oZXZlbnQsIGRpcmVjdGlvbiwgZGlzdGFuY2UsIGR1cmF0aW9uLCBmaW5nZXJDb3VudCwgZmluZ2VyRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGRpcmVjdGlvbiAhPT1cInJpZ2h0XCIgJiYgZGlyZWN0aW9uICE9PVwibGVmdFwiKSByZXR1cm47XHJcbiBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBcInJpZ2h0XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG97XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3VycmVudEVsZW1lbnRJbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoX2N1cnJlbnRFbGVtZW50SW5kZXg+PV9mb2N1c2FibGVFbGVtZW50cy5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdXJyZW50RWxlbWVudEluZGV4PTA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlKCEkKF9mb2N1c2FibGVFbGVtZW50c1tfY3VycmVudEVsZW1lbnRJbmRleF0pLmlzKFwiOnZpc2libGVcIikgfHwgJChfZm9jdXNhYmxlRWxlbWVudHNbX2N1cnJlbnRFbGVtZW50SW5kZXhdKS5jc3MoXCJ2aXNpYmlsaXR5XCIpPT09XCJoaWRkZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9mb2N1c2FibGVFbGVtZW50c1tfY3VycmVudEVsZW1lbnRJbmRleF0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZGlyZWN0aW9uID09PSBcImxlZnRcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdXJyZW50RWxlbWVudEluZGV4LS07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihfY3VycmVudEVsZW1lbnRJbmRleCA8IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jdXJyZW50RWxlbWVudEluZGV4PV9mb2N1c2FibGVFbGVtZW50cy5sZW5ndGgtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoISQoX2ZvY3VzYWJsZUVsZW1lbnRzW19jdXJyZW50RWxlbWVudEluZGV4XSkuaXMoXCI6dmlzaWJsZVwiKSB8fCAkKF9mb2N1c2FibGVFbGVtZW50c1tfY3VycmVudEVsZW1lbnRJbmRleF0pLmNzcyhcInZpc2liaWxpdHlcIik9PT1cImhpZGRlblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2ZvY3VzYWJsZUVsZW1lbnRzW19jdXJyZW50RWxlbWVudEluZGV4XS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vU2V0IG9wdGlvbnNcclxuICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLnN3aXBlKCB7ZmluZ2VyczoxfSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoKGVycilcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgLy9hbGVydChlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBcclxuICAgIGFkZExpc3RlbmVyVG9Eb2N1bWVudCgpO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYWZ0ZXJSZW1vdmU9ZnVuY3Rpb24oY2FsbGJhY2spe1xyXG4gICAgICAgIF9hZnRlclJlbW92ZUNhbGxiYWNrID0gY2FsbGJhY2s7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hZGRTaW5nbGVJdGVtID0gZnVuY3Rpb24oaXRlbSl7XHJcbiAgICAgICAgX2ZvY3VzYWJsZUVsZW1lbnRzLnB1c2goaXRlbSk7XHJcbiAgICB9XHJcbiAgICAvLyBSZW1vdmUgdGhlIG1vZGFsIHdpbmRvdyBpZiBpdCdzIHZpc2libGVcclxuICAgIFxyXG5cclxuICAgIHRoaXMuc2V0SW5pdGlhbEZvY3VzID0gZnVuY3Rpb24oZWxlbSl7XHJcbiAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgZm9yKGk9MDtpPF9mb2N1c2FibGVFbGVtZW50cy5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgaWYoX2ZvY3VzYWJsZUVsZW1lbnRzW2ldID09IGVsZW0gJiYgZWxlbSAhPT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgICAgIF9jdXJyZW50RWxlbWVudEluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBcclxuXHJcbiAgICBmdW5jdGlvbiBhZGRMaXN0ZW5lclRvRG9jdW1lbnQoKXtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIHZhciBkb2NGb2N1c2FibGVFbGVtZW50c1NlbGVjdG9yID0gJ2FbaHJlZl0sIGFyZWFbaHJlZl0sIGlucHV0Om5vdChbZGlzYWJsZWRdKSwgc2VsZWN0Om5vdChbZGlzYWJsZWRdKSwgdGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pLCBidXR0b246bm90KFtkaXNhYmxlZF0pLCBpZnJhbWUsIG9iamVjdCwgZW1iZWQsIFt0YWJpbmRleD1cIjBcIl0sIFtjb250ZW50ZWRpdGFibGVdJztcclxuICAgICAgICBfZG9jRm9jdXNhYmxlRWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGRvY0ZvY3VzYWJsZUVsZW1lbnRzU2VsZWN0b3IpO1xyXG5cclxuICAgICAgICAkLmVhY2goX2RvY0ZvY3VzYWJsZUVsZW1lbnRzLCBmdW5jdGlvbihpbmRleCwgdmFsdWUpeyAgICAgICAgXHJcbiAgICAgICAgICAgX2RvY0ZvY3VzYWJsZUVsZW1lbnRzW2luZGV4XS5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIGZvY3VzQ2FsbEJhY2spO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGZvY3VzQ2FsbEJhY2soZXZlbnQpe1xyXG5cclxuICAgICAgICB0cnl7ICAgICAgICBcclxuICAgICAgICAgICAgdmFyIGZvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgICAgICQuZWFjaChfZm9jdXNhYmxlRWxlbWVudHMsIGZ1bmN0aW9uKGluZGV4LCBlbGVtKXtcclxuICAgICAgICAgICAgICAgIGlmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gZWxlbSl7XHJcbiAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIF9sYXN0R29vZFN0b3AgPSBlbGVtO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH0pIDtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKCFmb3VuZClcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWYoX2xhc3RHb29kU3RvcCAhPSBudWxsKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoX2xhc3RHb29kU3RvcCA9PSBfZm9jdXNhYmxlRWxlbWVudHNbMF0pICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9mb2N1c2FibGVFbGVtZW50c1tfZm9jdXNhYmxlRWxlbWVudHMubGVuZ3RoLTFdLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfZm9jdXNhYmxlRWxlbWVudHNbMF0uZm9jdXMoKTt9ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaChleCl7XHJcbiAgICAgICAgLy9hbGVydChleC5tZXNzYWdlKTtcclxuICAgIH1cclxuICAgIH1cclxuICAgIFxyXG59O1xyXG5cclxuLy9leHBvcnQge2RpYWxvZ01hbmFnZXJ9XHJcbiBcclxuXHJcbiIsImltcG9ydCAkIGZyb20gXCJqcXVlcnlcIjtcclxuaW1wb3J0IFwiLi4vY3VzdG9tLXZlbmRvci9qcXVlcnktdG91Y2hzd2lwZVwiO1xyXG5pbXBvcnQgXCIuLi9jdXN0b20tdmVuZG9yL2Jvb3RzdHJhcC1jYXJvdXNlbC9jYXJvdXNlbFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZG93bmxvYWRBcHBTd2lwZSgpIHtcclxuICBmdW5jdGlvbiBnZXRNb2JpbGVPcGVyYXRpbmdTeXN0ZW0oKSB7XHJcbiAgICB2YXIgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCBuYXZpZ2F0b3IudmVuZG9yIHx8IHdpbmRvdy5vcGVyYTtcclxuICAgIC8vIFdpbmRvd3MgUGhvbmUgbXVzdCBjb21lIGZpcnN0IGJlY2F1c2UgaXRzIFVBIGFsc28gY29udGFpbnMgJ0FuZHJvaWQnXHJcbiAgICBpZiAoL3dpbmRvd3MgcGhvbmUvaS50ZXN0KHVzZXJBZ2VudCkpIHtcclxuICAgICAgJChcIiNhcHBTdG9yZVwiKS5jc3MoXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcclxuICAgICAgJChcIiNhcHBsZVRDXCIpLmNzcyhcImRpc3BsYXlcIiwgXCJub25lXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKC9hbmRyb2lkL2kudGVzdCh1c2VyQWdlbnQpKSB7XHJcbiAgICAgICQoXCIjYXBwU3RvcmVcIikuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XHJcbiAgICAgICQoXCIjYXBwbGVUQ1wiKS5jc3MoXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcclxuICAgIH1cclxuICAgIC8vIGlPUyBkZXRlY3Rpb24gZnJvbTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvOTAzOTg4NS8xNzc3MTBcclxuICAgIGlmICgvaVBhZHxpUGhvbmV8aVBvZC8udGVzdCh1c2VyQWdlbnQpICYmICF3aW5kb3cuTVNTdHJlYW0pIHtcclxuICAgICAgJChcIiNnb29nbGVQbGF5XCIpLmNzcyhcImRpc3BsYXlcIiwgXCJub25lXCIpO1xyXG4gICAgICAkKFwiI2dvb2dsZVRDXCIpLmNzcyhcImRpc3BsYXlcIiwgXCJub25lXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgJChmdW5jdGlvbigpIHtcclxuICAgIGdldE1vYmlsZU9wZXJhdGluZ1N5c3RlbSgpO1xyXG4gIH0pO1xyXG5cclxuICBmdW5jdGlvbiBhY3RpdmF0ZUZlYXR1cmVCbG9jaygpIHtcclxuICAgICQoXCIubW9yZS1mZWF0dXJlcy1sZWZ0LWRpdiA+IGRpdiwgLm1vcmUtZmVhdHVyZXMtcmlnaHQtZGl2ID4gZGl2XCIpLm9uKFxyXG4gICAgICBcImNsaWNrXCIsXHJcbiAgICAgIGUgPT4gY2hhbmdlU2xpZGVDbGljayhlKVxyXG4gICAgKTtcclxuICAgICQoXHJcbiAgICAgIFwiLm1vcmUtZmVhdHVyZXMtbGVmdC1kaXYgPiBkaXYgPiBidXR0b24sIC5tb3JlLWZlYXR1cmVzLXJpZ2h0LWRpdiA+IGRpdiA+IGJ1dHRvblwiXHJcbiAgICApLm9uKFwiY2xpY2sga2V5ZG93blwiLCBlID0+IGNoYW5nZVNsaWRlQ2xpY2soZSkpO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZW5hYmxlQ2Fyb3VzZWxTd2lwZSgpIHtcclxuICAgIC8qIGRlcGVuZGVuY3k6IGh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2pxdWVyeS50b3VjaHN3aXBlLzEuNi4xOC9qcXVlcnkudG91Y2hTd2lwZS5taW4uanNcclxuICAgICAgIHJlZmVyZW5jZTogaHR0cDovL2xhYnMucmFtcGludGVyYWN0aXZlLmNvLnVrL3RvdWNoU3dpcGUvZG9jcy9pbmRleC5odG1sICovXHJcbiAgICAvLyAgaWYoJChcIiNzZWUtbW9yZS1ncmVhdC1mZWF0dXJlc1wiKS5sZW5ndGggPiAwKXtcclxuICAgICQoXCIuY2Fyb3VzZWxcIikuc3dpcGUoe1xyXG4gICAgICBzd2lwZTogZnVuY3Rpb24oXHJcbiAgICAgICAgZXZlbnQsXHJcbiAgICAgICAgZGlyZWN0aW9uLFxyXG4gICAgICAgIGRpc3RhbmNlLFxyXG4gICAgICAgIGR1cmF0aW9uLFxyXG4gICAgICAgIGZpbmdlckNvdW50LFxyXG4gICAgICAgIGZpbmdlckRhdGFcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBcImxlZnRcIikge1xyXG4gICAgICAgICAgJCh0aGlzKS5jYXJvdXNlbChcIm5leHRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gXCJyaWdodFwiKSB7XHJcbiAgICAgICAgICAkKHRoaXMpLmNhcm91c2VsKFwicHJldlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGFsbG93UGFnZVNjcm9sbDogXCJ2ZXJ0aWNhbFwiXHJcbiAgICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gICQoZnVuY3Rpb24oZSkge1xyXG4gICAgYWN0aXZhdGVGZWF0dXJlQmxvY2soKTtcclxuICAgIGVuYWJsZUNhcm91c2VsU3dpcGUoKTtcclxuICB9KTtcclxufVxyXG5mdW5jdGlvbiBjaGFuZ2VTbGlkZUNsaWNrKGUpIHtcclxuICBpZiAoZS50eXBlID09IFwiY2xpY2tcIiB8fCBlLmtleUNvZGUgPT0gXCIzMlwiKSB7XHJcbiAgICBsZXQgcGhvbmVJbWFnZSA9ICQoXCIubW9yZS1mZWF0dXJlcy1jZW50ZXItZGl2ID4gLnBob25lLWZyYW1lID4gaW1nXCIpO1xyXG4gICAgbGV0ICRwcmV2aW91c0FjdGl2ZUVsZW1lbnQsICRwcmV2aW91c0FjdGl2ZUVsZW1lbnRCdXR0b24sIHByZXZpb3VzQWN0aXZlSWNvbkNsYXNzLCBpY29uQ2xhc3MsIGJsb2NrQ2xhc3MsICRhY3RpdmVFbGVtZW50LCAkYWN0aXZlRWxlbWVudEJ1dHRvbjtcclxuXHJcbiAgICBcclxuICAgIGlmICgkKGUuY3VycmVudFRhcmdldCkuaXMoXCJidXR0b25cIikpIHtcclxuICAgICAgLy9hY2NvdW50IGZvciB0YWJzXHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgLy8gY2FsbCBjdXN0b20gZnVuY3Rpb24gaGVyZVxyXG4gICAgICAkYWN0aXZlRWxlbWVudCA9ICQoZS5jdXJyZW50VGFyZ2V0KS5wYXJlbnQoKTtcclxuICAgICAgJGFjdGl2ZUVsZW1lbnRCdXR0b24gPSAkKGUuY3VycmVudFRhcmdldCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAkYWN0aXZlRWxlbWVudCA9ICQoZS5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgJGFjdGl2ZUVsZW1lbnRCdXR0b24gPSAkKGUuY3VycmVudFRhcmdldCkuZmluZChcImJ1dHRvblwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB3aGVuIGEgZmVhdHVyZSBibG9jayBpcyBjbGlja2VkLFxyXG4gICAgLy8gcmVzZXQgcHJldmlvdXMgYWN0aXZlIGJsb2NrIHRvIGl0cyBkZWZhdWx0IHN0YXRlLi4uXHJcbiAgICAkcHJldmlvdXNBY3RpdmVFbGVtZW50ID0gJChcIiNhcHAtbGFuZGluZy1tb3JlLWZlYXR1cmVzXCIpLmZpbmQoXHJcbiAgICAgIFwiLm1vcmUtZmVhdHVyZXMtYWN0aXZlXCJcclxuICAgICk7IC8vIG9yZGVyLWFoZWFkLWJsb2NrIGlzIGluaXRpYWwgYWN0aXZlIGVsZW1lbnRcclxuICAgICRwcmV2aW91c0FjdGl2ZUVsZW1lbnRCdXR0b24gPSAkcHJldmlvdXNBY3RpdmVFbGVtZW50LmZpbmQoXCJidXR0b25cIik7XHJcbiAgICBwcmV2aW91c0FjdGl2ZUljb25DbGFzcyA9ICRwcmV2aW91c0FjdGl2ZUVsZW1lbnRcclxuICAgICAgLmZpbmQoXCJkaXYuYXBwLWxhbmRpbmctc3ByaXRlc1wiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIpXHJcbiAgICAgIC5zcGxpdChcIiBcIilbMV07XHJcblxyXG4gICAgJHByZXZpb3VzQWN0aXZlRWxlbWVudC5yZW1vdmVDbGFzcyhcIm1vcmUtZmVhdHVyZXMtYWN0aXZlXCIpO1xyXG4gICAgJHByZXZpb3VzQWN0aXZlRWxlbWVudFxyXG4gICAgICAuZmluZChcImRpdi5hcHAtbGFuZGluZy1zcHJpdGVzXCIpXHJcbiAgICAgIC5hZGRDbGFzcyhwcmV2aW91c0FjdGl2ZUljb25DbGFzcy5zdWJzdHIoNykpIC8vIGFkZCBub24tYWN0aXZlIGljb24gY2xhc3NcclxuICAgICAgLnJlbW92ZUNsYXNzKHByZXZpb3VzQWN0aXZlSWNvbkNsYXNzKTsgLy8gcmVtb3ZlIGljb24gYWN0aXZlIGNsYXNzXHJcblxyXG4gICAgLy8gQWRhIHJlbW92ZSB0aGUgc2VsZWN0ZWQgYW5kIHRoZSB0aXRsZSBcclxuICAgICRwcmV2aW91c0FjdGl2ZUVsZW1lbnRCdXR0b24ucmVtb3ZlQXR0cihcInRpdGxlXCIpLmF0dHIoXCJhcmlhLXNlbGVjdGVkXCIsIFwiZmFsc2VcIik7XHJcblxyXG4gICAgLy8gLi4uYW5kIGFkZCBhY3RpdmUgY2xhc3NlcyB0byBjdXJyZW50IGFjdGl2ZSBibG9ja1xyXG4gICAgaWNvbkNsYXNzID0gJGFjdGl2ZUVsZW1lbnRcclxuICAgICAgLmZpbmQoXCJkaXYuYXBwLWxhbmRpbmctc3ByaXRlc1wiKVxyXG4gICAgICAuYXR0cihcImNsYXNzXCIpXHJcbiAgICAgIC5zcGxpdChcIiBcIilbMV07XHJcbiAgICBibG9ja0NsYXNzID0gJGFjdGl2ZUVsZW1lbnQuYXR0cihcImNsYXNzXCIpLnNwbGl0KFwiIFwiKVswXTtcclxuXHJcbiAgICAkYWN0aXZlRWxlbWVudFxyXG4gICAgICAuZmluZChcImRpdi5hcHAtbGFuZGluZy1zcHJpdGVzXCIpXHJcbiAgICAgIC5hZGRDbGFzcyhcImFjdGl2ZS1cIiArIGljb25DbGFzcylcclxuICAgICAgLnJlbW92ZUNsYXNzKGljb25DbGFzcyk7XHJcbiAgICBwaG9uZUltYWdlLmF0dHIoe1xyXG4gICAgICBzcmM6XHJcbiAgICAgICAgXCJ+L21lZGlhL19TdWJ3YXlWMi9Eb3dubG9hZFRoZUFwcC9cIiArXHJcbiAgICAgICAgaWNvbkNsYXNzLnNsaWNlKDAsIC01KS50b1VwcGVyQ2FzZSgpICtcclxuICAgICAgICBcIi5wbmdcIixcclxuICAgICAgYWx0OiBcIlwiXHJcbiAgICB9KTsgLy8gc2V0IGltYWdlIGNvcnJlc3BvbmRpbmcgdG8gYWN0aXZlIGJsb2NrXHJcblxyXG4gICAgJGFjdGl2ZUVsZW1lbnRcclxuICAgICAgLnRvZ2dsZUNsYXNzKGJsb2NrQ2xhc3MpIC8vIG1vcmUtZmVhdHVyZXMtYWN0aXZlIGNsYXNzIG11c3QgYmUgYmVmb3JlIGJsb2NrQ2xhc3NcclxuICAgICAgLmFkZENsYXNzKFwibW9yZS1mZWF0dXJlcy1hY3RpdmVcIilcclxuICAgICAgLnRvZ2dsZUNsYXNzKGJsb2NrQ2xhc3MpO1xyXG5cclxuICAgICRhY3RpdmVFbGVtZW50QnV0dG9uLmF0dHIoXCJ0aXRsZVwiLCBcInNlbGVjdGVkXCIpLmF0dHIoXCJhcmlhLXNlbGVjdGVkXCIsIFwidHJ1ZVwiKTtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZsaXBwZXIoKSB7XHJcbiAgICBsZXQgJGZsaXBwZXIgPSAkKCcuanMtc3ctY2FyZHNfX2l0ZW0nKTtcclxuXHJcbiAgICBpZigkZmxpcHBlci5sZW5ndGgpIHtcclxuICAgICAgICAkZmxpcHBlci5mb2N1c2luKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ2lzLWZvY3VzZWQnKTtcclxuICAgICAgICB9KS5mb2N1c291dChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdpcy1mb2N1c2VkJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xyXG5pbXBvcnQgZ2V0TW9iaWxlT3BlcmF0aW5nU3lzdGVtIGZyb20gJy4uL2hlbHBlcnMvZGV0ZXJtaW5lTW9iaWxlT1MuanMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VGhlQXBwKCkge1xyXG4gICAgbGV0ICRhcHBTdG9yZUNvbnRhaW5lciA9ICQoJy5zdy1nZXRhcHAtbGluay0tYXBwc3RvcmUnKSxcclxuICAgICAgICAkZ29vZ2xlUGxheUNvbnRhaW5lciA9ICQoJy5zdy1nZXRhcHAtbGluay0tZ29vZ2xlcGxheScpO1xyXG5cclxuICAgIGlmKGdldE1vYmlsZU9wZXJhdGluZ1N5c3RlbSgpID09PSAnaU9TJyB8fCBnZXRNb2JpbGVPcGVyYXRpbmdTeXN0ZW0oKSA9PT0gJ0FuZHJvaWQnKSB7XHJcblxyXG4gICAgICAgIGlmKGdldE1vYmlsZU9wZXJhdGluZ1N5c3RlbSgpID09PSAnaU9TJyAmJiAhJGFwcFN0b3JlQ29udGFpbmVyLmhhc0NsYXNzKCdzaG91bGQtc2hvdycpKSB7XHJcbiAgICAgICAgICAgICRhcHBTdG9yZUNvbnRhaW5lci5hZGRDbGFzcygnc2hvdWxkLXNob3cnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkYXBwU3RvcmVDb250YWluZXIucmVtb3ZlQ2xhc3MoJ3Nob3VsZC1zaG93Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihnZXRNb2JpbGVPcGVyYXRpbmdTeXN0ZW0oKSA9PT0gJ0FuZHJvaWQnICYmICEkZ29vZ2xlUGxheUNvbnRhaW5lci5oYXNDbGFzcygnc2hvdWxkLXNob3cnKSkge1xyXG4gICAgICAgICAgICAkZ29vZ2xlUGxheUNvbnRhaW5lci5hZGRDbGFzcygnc2hvdWxkLXNob3cnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkZ29vZ2xlUGxheUNvbnRhaW5lci5yZW1vdmVDbGFzcygnc2hvdWxkLXNob3cnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG59IiwiaW1wb3J0IGRlYm91bmNlIGZyb20gJ2xvZGFzaC5kZWJvdW5jZSc7XHJcbmltcG9ydCBmb3JFYWNoIGZyb20gJy4uL2hlbHBlcnMvZm9yRWFjaC5qcyc7XHJcbmltcG9ydCAkIGZyb20gXCJqcXVlcnlcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFN0aWNreUhlYWRlckhlaWdodCgpIHtcclxuICAgIGxldCBzdGlja3lIZWFkZXJIZWlnaHQgPSAwO1xyXG5cclxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZVN0aWNreUhlYWRlckhlaWdodCgpIHtcclxuICAgICAgICBsZXQgc3RpY2t5SGVhZGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnN3LWhlYWRlcnBhbmUnKVswXSxcclxuICAgICAgICAgICAgZXVDb29raWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc3ctY29udGFpbmVyLS1ldWNvb2tpZScpWzBdLFxyXG4gICAgICAgICAgICBxdWlja05hdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5zdy1xdWlja25hdicpWzBdLFxyXG4gICAgICAgICAgICBuYXZTZWN0aW9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnN3LWNvbnRhaW5lci0taGVhZGVyJylbMF07XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygc3RpY2t5SGVhZGVyID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdGlja3lIZWFkZXJIZWlnaHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaGVhZGVyQ2hpbGRyZW5Db250YWluZXJzID0gc3RpY2t5SGVhZGVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5zdy1jb250YWluZXInKTtcclxuXHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdoYXMtaGVybycpKSB7XHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cub3V0ZXJXaWR0aCA8IDEwMjQpIHtcclxuICAgICAgICAgICAgICAgIHN0aWNreUhlYWRlckhlaWdodCA9IHN0aWNreUhlYWRlci5vZmZzZXRIZWlnaHQ7IC8vNDcgYmVpbmcgbW9iaWxlIHF1aWNrbmF2J3MgaGVpZ2h0XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzdGlja3lIZWFkZXJIZWlnaHQgPSBzdGlja3lIZWFkZXIub2Zmc2V0SGVpZ2h0ICsgbmF2U2VjdGlvbi5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAod2luZG93Lm91dGVyV2lkdGggPCAxMDI0KSB7XHJcbiAgICAgICAgICAgICAgICBzdGlja3lIZWFkZXJIZWlnaHQgPSBzdGlja3lIZWFkZXIub2Zmc2V0SGVpZ2h0OyAvLyBzc3RpY2t5SGVhZGVyLm9mZnNldEhlaWdodCArIDQ3O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3RpY2t5SGVhZGVySGVpZ2h0ID0gc3RpY2t5SGVhZGVyLm9mZnNldEhlaWdodC8vICsgbmF2U2VjdGlvbi5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1hzdGlja3loZWlnaHQ6ICcgKyBzdGlja3lIZWFkZXJIZWlnaHQpOyBcclxuICAgIH1cclxuXHJcbiAgICBjYWxjdWxhdGVTdGlja3lIZWFkZXJIZWlnaHQoKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjYWxjdWxhdGVTdGlja3lIZWFkZXJIZWlnaHQoKTtcclxuICAgIH0sIDEwMDApKTtcclxuXHJcblxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgZGVib3VuY2UoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNhbGN1bGF0ZVN0aWNreUhlYWRlckhlaWdodCgpO1xyXG4gICAgfSwgMTAwMCkpO1xyXG5cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY2FsY3VsYXRlU3RpY2t5SGVhZGVySGVpZ2h0KCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gc3RpY2t5SGVhZGVySGVpZ2h0O1xyXG59IiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcclxuaW1wb3J0IGdldE1vYmlsZU9wZXJhdGluZ1N5c3RlbSBmcm9tICcuLi9oZWxwZXJzL2RldGVybWluZU1vYmlsZU9TLmpzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFRoZUFwcCgpIHtcclxuICAgIGxldCAkZ2V0QXBwQ29udGFpbmVyID0gJCgnLmpzLXN3LWZvb3Rlcl9fZ2V0YXBwJyksXHJcbiAgICAgICAgJGFwcFN0b3JlQ29udGFpbmVyID0gJGdldEFwcENvbnRhaW5lci5maW5kKCcuc3ctZm9vdGVyX19nZXRhcHAtaXRlbS0tYXBwc3RvcmUnKSxcclxuICAgICAgICAkZ29vZ2xlUGxheUNvbnRhaW5lciA9ICRnZXRBcHBDb250YWluZXIuZmluZCgnLnN3LWZvb3Rlcl9fZ2V0YXBwLWl0ZW0tLWdvb2dsZXBsYXknKTtcclxuXHJcbiAgICBpZihnZXRNb2JpbGVPcGVyYXRpbmdTeXN0ZW0oKSA9PT0gJ2lPUycgfHwgZ2V0TW9iaWxlT3BlcmF0aW5nU3lzdGVtKCkgPT09ICdBbmRyb2lkJykge1xyXG4gICAgICAgIGlmKCEkZ2V0QXBwQ29udGFpbmVyLmhhc0NsYXNzKCdpcy1tb2JpbGUtZGV2aWNlJykpIHtcclxuICAgICAgICAgICAgJGdldEFwcENvbnRhaW5lci5hZGRDbGFzcygnaXMtbW9iaWxlLWRldmljZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoZ2V0TW9iaWxlT3BlcmF0aW5nU3lzdGVtKCkgPT09ICdpT1MnICYmICEkYXBwU3RvcmVDb250YWluZXIuaGFzQ2xhc3MoJ3Nob3VsZC1zaG93JykpIHtcclxuICAgICAgICAgICAgJGFwcFN0b3JlQ29udGFpbmVyLmFkZENsYXNzKCdzaG91bGQtc2hvdycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICRhcHBTdG9yZUNvbnRhaW5lci5yZW1vdmVDbGFzcygnc2hvdWxkLXNob3cnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGdldE1vYmlsZU9wZXJhdGluZ1N5c3RlbSgpID09PSAnQW5kcm9pZCcgJiYgISRnb29nbGVQbGF5Q29udGFpbmVyLmhhc0NsYXNzKCdzaG91bGQtc2hvdycpKSB7XHJcbiAgICAgICAgICAgICRnb29nbGVQbGF5Q29udGFpbmVyLmFkZENsYXNzKCdzaG91bGQtc2hvdycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICRnb29nbGVQbGF5Q29udGFpbmVyLnJlbW92ZUNsYXNzKCdzaG91bGQtc2hvdycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmKCRnZXRBcHBDb250YWluZXIuaGFzQ2xhc3MoJ2lzLW1vYmlsZS1kZXZpY2UnKSkge1xyXG4gICAgICAgICAgICAkZ2V0QXBwQ29udGFpbmVyLnJlbW92ZUNsYXNzKCdpcy1tb2JpbGUtZGV2aWNlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Iiwi77u/aW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcclxuaW1wb3J0IGdldE1vYmlsZU9wZXJhdGluZ1N5c3RlbSBmcm9tICcuLi9oZWxwZXJzL2RldGVybWluZU1vYmlsZU9TLmpzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFRoZUFwcEJhbm5lcigpIHtcclxuICAgIFxyXG4gICAgbGV0ICRnZXRBcHBDb250YWluZXJUb3AgPSAkKCcuc3ctaGVyb19fY29weSBkaXYuc3ctbW9iaWxlLWFwcCcpO1xyXG4gICAgXHJcbiAgICB2YXIgaW9zTGlua1RvcCA9ICRnZXRBcHBDb250YWluZXJUb3AuZmluZChcInNwYW4uc3ctbW9iaWxlLWFwcF9fbGluazpudGgtY2hpbGQoMilcIik7ICAgIFxyXG4gICAgdmFyIGFuZHJvaWRMaW5rVG9wID0gJGdldEFwcENvbnRhaW5lclRvcC5maW5kKFwic3Bhbi5zdy1tb2JpbGUtYXBwX19saW5rOm50aC1jaGlsZCgzKVwiKTtcclxuXHJcbiAgICBsZXQgJGdldEFwcENvbnRhaW5lckJvdHRvbSA9ICQoJ2Rpdi5zdy0xdXAgZGl2LnN3LW1vYmlsZS1hcHAnKTtcclxuICAgIHZhciBpb3NMaW5rQm90dG9tID0gJGdldEFwcENvbnRhaW5lckJvdHRvbS5maW5kKFwic3Bhbi5zdy1tb2JpbGUtYXBwX19saW5rOm50aC1jaGlsZCgxKVwiKTsgICAgXHJcbiAgICB2YXIgYW5kcm9pZExpbmtCb3R0b20gPSAkZ2V0QXBwQ29udGFpbmVyQm90dG9tLmZpbmQoXCJzcGFuLnN3LW1vYmlsZS1hcHBfX2xpbms6bnRoLWNoaWxkKDIpXCIpO1xyXG5cclxuICAgIGlmKGdldE1vYmlsZU9wZXJhdGluZ1N5c3RlbSgpID09PSAnaU9TJyl7XHJcbiAgICAgICAgJChhbmRyb2lkTGlua1RvcCkuaGlkZSgpO1xyXG4gICAgICAgICQoYW5kcm9pZExpbmtCb3R0b20pLmhpZGUoKTtcclxuICAgIH1cclxuICAgIGlmKGdldE1vYmlsZU9wZXJhdGluZ1N5c3RlbSgpID09PSAnQW5kcm9pZCcpe1xyXG4gICAgICAgICQoaW9zTGlua1RvcCkuaGlkZSgpO1xyXG4gICAgICAgICQoaW9zTGlua0JvdHRvbSkuaGlkZSgpO1xyXG4gICAgfVxyXG5cclxuIFxyXG59IiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcclxuaW1wb3J0IGRpYWxvZ01hbmFnZXIgZnJvbSBcIi4vZGlhbG9nTWFuYWdlci5qc1wiO1xyXG5pbXBvcnQgYWxseSBmcm9tICdhbGx5LmpzL2FsbHknO1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9wZW5Ib21lUGFnZU1vZGFsKCl7XHJcblxyXG4gICAgdmFyIG1vZGFsQ29va2llID0gZ2V0Q29va2llKFwibW9kYWxDb29raWVcIik7XHJcblxyXG4gICAgaWYobW9kYWxDb29raWUgPT0gXCJcIilcclxuICAgIHtcclxuICAgICAgICB2YXIgZGlhbG9nID0gbmV3IGRpYWxvZ01hbmFnZXIoKTtcclxuICAgICAgICB2YXIgbW9kYWxEaXYgPSAkKCcuaG9tZVBhZ2VNb2RhbCcpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKG1vZGFsRGl2Lmxlbmd0aCA9PSAwKXtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgb3BlbkhvbWVQYWdlTW9kYWwoKSwgMTAwO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICBcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICQoXCIuaG9tZVBhZ2VNb2RhbFwiKS5hZGRDbGFzcyhcInZpc2libGVcIik7XHJcblxyXG4gICAgICAgICQoXCIuaG9tZVBhZ2VNb2RhbFwiKS5hdHRyKFwicm9sZVwiLFwiZGlhbG9nXCIpO1xyXG5cclxuXHJcblxyXG4gICAgICAgIGRpYWxvZy5jcmVhdGVEaWFsb2cobW9kYWxEaXZbMF0pO1xyXG4gICAgICAgICQoXCJib2R5XCIpLmFkZENsYXNzKFwibG9ja01vZGFsXCIpO1xyXG5cclxuICAgICAgICBkaWFsb2cuYWZ0ZXJSZW1vdmUoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgJChcIi5ob21lUGFnZU1vZGFsXCIpLnJlbW92ZUNsYXNzKFwidmlzaWJsZVwiKTtcclxuICAgICAgICAgICAgJChcImJvZHlcIikucmVtb3ZlQ2xhc3MoXCJsb2NrTW9kYWxcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgJChcImRpdi5ob21lUGFnZU1vZGFsIGRpdi5jbG9zZUJ1dHRvbkRpdiBpbnB1dC5tb2RhbENsb3NlQnV0dG9uXCIpLmNsaWNrKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICBkaWFsb2cucmVtb3ZlTW9kYWwoKTsgIFxyXG4gICAgICAgIH0pXHJcbiAgICAgICBcclxuICAgICAgICBzZXRDb29raWUoXCJtb2RhbENvb2tpZVwiLFwiaW50ZXJzdGl0aWFsXCIsIDEpOyBcclxuXHJcbiAgICAgXHJcbiAgICB9XHJcbiAgICBlbHNle1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxufVxyXG5cclxuZnVuY3Rpb24gc2V0Q29va2llKGNuYW1lLCBjdmFsdWUsIGV4ZGF5cykge1xyXG4gICAgdmFyIGQgPSBuZXcgRGF0ZSgpO1xyXG4gICAgZC5zZXRUaW1lKGQuZ2V0VGltZSgpICsgKGV4ZGF5cyoyNCo2MCo2MCoxMDAwKSk7XHJcbiAgICB2YXIgZXhwaXJlcyA9IFwiZXhwaXJlcz1cIisgZC50b1VUQ1N0cmluZygpO1xyXG4gICAgZG9jdW1lbnQuY29va2llID0gY25hbWUgKyBcIj1cIiArIGN2YWx1ZSArIFwiO1wiICsgZXhwaXJlcyArIFwiO3BhdGg9L1wiO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gZ2V0Q29va2llKGNuYW1lKSB7XHJcbiAgICB2YXIgbmFtZSA9IGNuYW1lICsgXCI9XCI7XHJcbiAgICB2YXIgY2EgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTtcclxuICAgIGZvcih2YXIgaSA9IDA7IGkgPCBjYS5sZW5ndGg7IGkrKykge1xyXG4gICAgICB2YXIgYyA9IGNhW2ldO1xyXG4gICAgICB3aGlsZSAoYy5jaGFyQXQoMCkgPT0gJyAnKSB7XHJcbiAgICAgICAgYyA9IGMuc3Vic3RyaW5nKDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjLmluZGV4T2YobmFtZSkgPT0gMCkge1xyXG4gICAgICAgIHJldHVybiBjLnN1YnN0cmluZyhuYW1lLmxlbmd0aCwgYy5sZW5ndGgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJcIjtcclxuICB9IiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxhbmd1YWdlU2VsZWN0b3IoY29udGFpbmVyKSB7XHJcbiAgICBjb25zdCAkdG9nZ2xlQnV0dG9uID0gJChjb250YWluZXIpLmZpbmQoJy5zdy1leWVicm93X19sYW5ndWFnZS1zZWxlY3RvcicpLFxyXG4gICAgICAgICAgJGxhbmd1YWdlT3B0aW9uID0gJChjb250YWluZXIpLmZpbmQoJy5zdy1leWVicm93X19sYW5ndWFnZS1vcHRpb24nKSxcclxuICAgICAgICAgICRsYW5ndWFnZURyb3Bkb3duID0gJChjb250YWluZXIpLmZpbmQoJy5zdy1leWVicm93X19sYW5ndWFnZS1kcm9wZG93bicpLFxyXG4gICAgICAgICAgJGxhbmd1YWdlQ3VycmVudCA9ICQoY29udGFpbmVyKS5maW5kKCcuc3ctZXllYnJvd19fbGFuZ3VhZ2UtY3VycmVudCcpO1xyXG5cclxuICAgICAgICAgIC8vIGluaXRpYWxpemVyXHJcbiAgICAgICAgICAkbGFuZ3VhZ2VEcm9wZG93bi5hdHRyKCdhcmlhLWhpZGRlbicsICghJChjb250YWluZXIpLmhhc0NsYXNzKCdpcy1vcGVuJykpLnRvU3RyaW5nKCkpO1xyXG5cclxuICAgICR0b2dnbGVCdXR0b24ub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgaWYoJChjb250YWluZXIpLmhhc0NsYXNzKCdpcy1vcGVuJykpIHtcclxuICAgICAgICAgICAgJChjb250YWluZXIpLnJlbW92ZUNsYXNzKCdpcy1vcGVuJyk7XHJcbiAgICAgICAgICAgICR0b2dnbGVCdXR0b24uYXR0cihcImFyaWEtZXhwYW5kZWRcIiwgXCJmYWxzZVwiKTtcclxuICAgICAgICAgICAgJGxhbmd1YWdlRHJvcGRvd24uYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YoX3NhdGVsbGl0ZSkgIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAgICAgICAgIF9zYXRlbGxpdGUudHJhY2soJ05hdiBDbGljayBFdmVudCBMYW5ndWFnZSBTZWxlY3Rpb24nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkKGNvbnRhaW5lcikuYWRkQ2xhc3MoJ2lzLW9wZW4nKTtcclxuICAgICAgICAgICAgJHRvZ2dsZUJ1dHRvbi5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCBcInRydWVcIik7XHJcbiAgICAgICAgICAgICRsYW5ndWFnZURyb3Bkb3duLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYoJCgnYm9keScpLmhhc0NsYXNzKCdsYW5ndWFnZS1kZC1vbicpKSB7XHJcbiAgICAgICAgICAgICQoJ2JvZHknKS5yZW1vdmVDbGFzcygnbGFuZ3VhZ2UtZGQtb24nKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkKCdib2R5JykuYWRkQ2xhc3MoJ2xhbmd1YWdlLWRkLW9uJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIGlmKCQoY29udGFpbmVyKSAhPT0gZS50YXJnZXQgJiYgISQoY29udGFpbmVyKS5oYXMoZS50YXJnZXQpLmxlbmd0aCl7XHJcbiAgICAgICAgICAgIGlmKCQoY29udGFpbmVyKS5oYXNDbGFzcygnaXMtb3BlbicpKSB7XHJcbiAgICAgICAgICAgICR0b2dnbGVCdXR0b24uYXR0cihcImFyaWEtZXhwYW5kZWRcIiwgXCJmYWxzZVwiKTtcclxuICAgICAgICAgICAgJChjb250YWluZXIpLnJlbW92ZUNsYXNzKCdpcy1vcGVuJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCQoJ2JvZHknKS5oYXNDbGFzcygnbGFuZ3VhZ2UtZGQtb24nKSkge1xyXG4gICAgICAgICAgICAgICAgJCgnYm9keScpLnJlbW92ZUNsYXNzKCdsYW5ndWFnZS1kZC1vbicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbn0iLCJleHBvcnQgY2xhc3MgbG9hZFByZXNzIHtcclxuICBjb25zdHJ1Y3RvcigkZWwpIHsgICAgXHJcbiAgICB0aGlzLiRlbCA9ICRlbDtcclxuICAgIHRoaXMucHJlc3NJdGVtcyA9ICQoXCIuanMtc3ctcHJlc3NfX2l0ZW1cIik7XHJcbiAgICB0aGlzLiRlbC5vbihcImNsaWNrXCIsICgpID0+IHRoaXMuZ2V0TmV4dFBhZ2UoKSk7XHJcbiAgfVxyXG4gIGdldE5leHRQYWdlKCkge1xyXG4gICAgbGV0IHRoYXQgPSB0aGlzLiRlbDtcclxuICAgIHZhciBoaWRkZW5EaXZzID0gdGhpcy5wcmVzc0l0ZW1zLmZpbHRlcihmdW5jdGlvbigpIHtcclxuICAgICAgcmV0dXJuICQodGhpcykuY3NzKFwiZGlzcGxheVwiKSA9PSBcIm5vbmVcIjtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChoaWRkZW5EaXZzLmxlbmd0aCA+IDApIHtcclxuICAgICAgaGlkZGVuRGl2cy5zbGljZSgwLCA2KS5lYWNoKGZ1bmN0aW9uKGkpIHtcclxuICAgICAgICAkKHRoaXMpLmNzcyhcImRpc3BsYXlcIiwgXCJibG9ja1wiKTtcclxuICAgICAgICBpZiAoaSA9PSAwKSB7XHJcbiAgICAgICAgICAkKHRoaXMpXHJcbiAgICAgICAgICAgIC5maW5kKFwiYVwiKVxyXG4gICAgICAgICAgICAuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKGhpZGRlbkRpdnMubGVuZ3RoIDw9IDYpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpPT4ge1xyXG4gICAgICAgICAgdGhhdC5jc3MoXCJkaXNwbGF5XCIsIFwibm9uZVwiKVxyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0sMCk7ICAgICAgXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XHJcbndpbmRvdy5mYXZvcml0ZVN0b3JlSUQgPSBudWxsO1xyXG53aW5kb3cucmVjZW50U3RvcmVJRCA9IG51bGw7XHJcbndpbmRvdy5ndWVzdElkID0gbnVsbDtcclxud2luZG93Lmd1ZXN0Q291bnRyeSA9IG51bGw7XHJcbndpbmRvdy5sb3lhbHR5SWQgPSBudWxsO1xyXG53aW5kb3cuaXNMb2dnZWRpbiA9IGZhbHNlO1xyXG53aW5kb3cuZW5jcnlwdGVkVG9rZW4gPSBudWxsO1xyXG53aW5kb3cudXNlTHVzckZsYWcgPSBudWxsO1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvckxvZ2dlZEluVXNlcigpIHtcclxuICAgIGxldCBfbG9nZ2VkSW5FbmRwb2ludCA9ICQoJ2JvZHknKS5kYXRhKCdsb2dnZWQtaW4tZW5kLXBvaW50Jyk7XHJcbiAgICBsZXQgdXNlTHVzciA9ICQoJ2JvZHknKS5kYXRhKCd2YXJpYWJsZScpO1xyXG4gICAgd2luZG93LnVzZUx1c3JGbGFnID0gKHVzZUx1c3IgPT0gJ1RydWUnKVxyXG4gICAgLy9hbGVydChcInVzZUx1c3JGbGFnMT1cIiArIHdpbmRvdy51c2VMdXNyRmxhZyk7XHJcbiAgICAvL2xldCBpc0xvZ2dlZGluID0gZmFsc2U7XHJcbiAgICBpc0xvZ2dlZGluID0gZmFsc2U7XHJcblxyXG4gICAgLy8gdG9nZ2xlIGZvciB0aGUgbG9nZ2VkaW4gdXNlciBtZW51XHJcbiAgICAkKCcuanMtc3ctZXllYnJvd19fbmF2bGluay0tdXNlcicpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRvZ2dsZVVzZXJNZW51KCQodGhpcyksICQoJy5qcy1zdy1leWVicm93X191c2VybWVudScpKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIHRvZ2dsZSBmb3IgdGhlIG1vYmlsZSBzaWduIGluL3NpZ24gdXAgbWVudVxyXG4gICAgJCgnLmpzLXN3LWV5ZWJyb3dfX25hdmxpbmstLXVzZXJsb2dpbnNpZ251cCcpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRvZ2dsZVVzZXJNZW51KCQodGhpcyksICQoJy5qcy1zdy1leWVicm93X191c2VybG9naW5zaWdudXAtbWVudScpKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIGRvIG5vdCBkbyB0aGUgY2FsbCBpZiB0aGUgaW5mb3JtYXRpb24gaXMgaW4gYSBjb29raWUgXHJcbiAgICBsZXQgY29va2llVmFsdWUgPSBnZXRDb29raWVWYWx1ZSgnVXNlclByb2ZpbGVDYWNoZUtleScpO1xyXG5cclxuICAgIGlmIChjb29raWVWYWx1ZSAhPT0gJycpIHtcclxuICAgICAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UoY29va2llVmFsdWUpO1xyXG4gICAgICAgIC8vYWxlcnQoXCJmbGFnPVwiICsgdXNlTHVzckZsYWcpO1xyXG4gICAgICAgIGlmICh3aW5kb3cudXNlTHVzckZsYWcpIHtcclxuICAgICAgICAgICAgcGVyZm9ybUxvZ2luQ2hlY2tfbmV3KGRhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcGVyZm9ybUxvZ2luQ2hlY2soZGF0YSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0b2dnbGVMb2dpblNlY3Rpb24oZGF0YS5pc0xvZ2dlZEluKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy9kdW1wIG91dCBvZiB0aGlzIGJlZm9yZSB0aGUgQUpBWCBjYWxsIGlmIHRoZXJlIGlzIG5vdCBsb2dnZWQgaW4gZW5kcG9pbnQgKGV4OiBmb3IgTmF2aWdhdGlvbi1vbmx5IGV5ZWJyb3cgbWVudSlcclxuICAgIGlmICh0eXBlb2YgX2xvZ2dlZEluRW5kcG9pbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6IF9sb2dnZWRJbkVuZHBvaW50LFxyXG4gICAgICAgICAgICB0eXBlOiAnR0VUJyxcclxuICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29uJyxcclxuICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZG9uZShmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgaXNMb2dnZWRpbiA9IGRhdGEuaXNMb2dnZWRJbjtcclxuICAgICAgICAgICAgICAgIC8vYWxlcnQoXCJmbGFnPVwiICsgdXNlTHVzckZsYWcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZUx1c3JGbGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGVyZm9ybUxvZ2luQ2hlY2tfbmV3KGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGVyZm9ybUxvZ2luQ2hlY2soZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmFpbChmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XHJcbiAgICAgICAgICAgICAgICBpc0xvZ2dlZGluID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQSBwcm9ibGVtIG9jY3VyZWQ6ICcsIGVycm9yVGhyb3duKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmFsd2F5cyhmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB0b2dnbGVMb2dpblNlY3Rpb24oaXNMb2dnZWRpbik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHRvZ2dsZVVzZXJNZW51KCRhY3RvciwgJG1lbnUpIHtcclxuICAgICAgICBsZXQgJHBhcmVudCA9ICRhY3Rvci5jbG9zZXN0KCcuanMtc3ctZXllYnJvd19fbmF2aXRlbS0tYXV0aGVudGljYXRpb24nKTtcclxuXHJcbiAgICAgICAgaWYgKCRwYXJlbnQuaGFzQ2xhc3MoJ3VzZXJtZW51LW9wZW4nKSkge1xyXG4gICAgICAgICAgICBjbG9zZVVzZXJNZW51KCRwYXJlbnQsICRhY3RvciwgJG1lbnUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9wZW5Vc2VyTWVudSgkcGFyZW50LCAkYWN0b3IsICRtZW51KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gb3BlblVzZXJNZW51KCRwYXJlbnQsICRhY3RvciwgJG1lbnUpIHtcclxuICAgICAgICAkcGFyZW50LmFkZENsYXNzKCd1c2VybWVudS1vcGVuJyk7XHJcbiAgICAgICAgJGFjdG9yLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xyXG4gICAgICAgICRtZW51LmF0dHIoJ2FyaWEtaGlkZGVuJywgJ2ZhbHNlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY2xvc2VVc2VyTWVudSgkcGFyZW50LCAkYWN0b3IgPSBudWxsLCAkbWVudSA9IG51bGwpIHtcclxuICAgICAgICAkcGFyZW50LnJlbW92ZUNsYXNzKCd1c2VybWVudS1vcGVuJyk7XHJcblxyXG4gICAgICAgIC8vIElmIG5vIGFjdG9yIG9yIG1lbnUgd2VyZSBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IHRoZSBjYWxsZXIgd2FudHMgdG8gY2xvc2UgYWxsIG9wZW4gdXNlciBtZW51cywgYW5kIGNsb3NlIHRoZW0gYWxsXHJcbiAgICAgICAgaWYgKCRhY3RvciAhPT0gbnVsbCAmJiAkbWVudSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAkYWN0b3IuYXR0cignYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xyXG4gICAgICAgICAgICAkbWVudS5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAkcGFyZW50LmZpbmQoJ1thcmlhLWV4cGFuZGVkPXRydWVdJykuYXR0cignYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xyXG4gICAgICAgICAgICAkcGFyZW50LmZpbmQoJ1thcmlhLWhpZGRlbj1mYWxzZV0nKS5hdHRyKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGdldENvb2tpZVZhbHVlKGNvb2tpZU5hbWUpIHtcclxuICAgICAgICBsZXQgY29va2llU3RyaW5nID0gJzsgJyArIGRvY3VtZW50LmNvb2tpZTtcclxuICAgICAgICBsZXQgY29va2llQXJyYXkgPSBjb29raWVTdHJpbmcuc3BsaXQoJzsgJyArIGNvb2tpZU5hbWUgKyAnPScpO1xyXG4gICAgICAgIHJldHVybiAhIShjb29raWVBcnJheS5sZW5ndGggLSAxKSA/IGNvb2tpZUFycmF5LnBvcCgpLnNwbGl0KCc7Jykuc2hpZnQoKSA6ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHRyYWNrTG9naW5TdGF0dXMoZGF0YSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmd2h0cmsgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuaXNMb2dnZWRJbiA9PSB0cnVlKVxyXG4gICAgICAgICAgICAgICAgICAgIGZ3aHRyay51c2VyLmxvZ2luU3RhdHVzID0gXCJsb2dnZWQtaW5cIjtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICBmd2h0cmsudXNlci5sb2dpblN0YXR1cyA9IFwibG9nZ2VkLW91dFwiO1xyXG5cclxuICAgICAgICAgICAgICAgIGZ3aHRyay5sb2dpblN0YXR1cyA9IGZ3aHRyay51c2VyLmxvZ2luU3RhdHVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBmd2h0cmsuZXJyb3JNZXNzYWdlID0gXCJFcnJvciBnZXR0aW5nIGxvZ2dlZC1vbiBzdGF0dXM6IFwiICsgZS5lcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHRyYWNrR3Vlc3RMb3lhbHR5SWQoZGF0YSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmd2h0cmsgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgZndodHJrLnVzZXIubG95YWx0eUlEID0gbG95YWx0eUlkO1xyXG4gICAgICAgICAgICAgICAgZndodHJrLnVzZXIuZ3Vlc3RJRCA9IGd1ZXN0SWQ7XHJcbiAgICAgICAgICAgICAgICBmd2h0cmsudXNlci5ndWVzdENvdW50cnkgPSBndWVzdENvdW50cnk7XHJcbiAgICAgICAgICAgICAgICBmd2h0cmsuZ3Vlc3RDb3VudHJ5ID0gZ3Vlc3RDb3VudHJ5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBmd2h0cmsuZXJyb3JNZXNzYWdlID0gZS5lcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgICAgVFcgMTIxODIwIC0gY29tbWVudGVkIG91dCB0aGUgZm9sbG93aW5nIGNvZGUuICBUaGF0cyBub3QgaG93IHdlIHNob3VsZCBiZSBnZXR0aW5nIGd1ZXN0IGNvdW50cnlcclxuICAgICovXHJcbiAgICAvKiB0cmFjayBHdWVzdENvdW50cnkgXHJcbiAgICBmdW5jdGlvbiB0cmFja0d1ZXN0Q291bnRyeShkYXRhKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGZ3aHRyayAhPSBudWxsKSB7XHJcblx0XHRcdFx0ICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcclxuXHRcdFx0XHR2YXIgcGFnZVVSTCA9ICQobG9jYXRpb24pLmF0dHIoXCJocmVmXCIpO1xyXG5cdFx0XHRcdHZhciB1cmxBcnIgPSBwYWdlVVJMLnNwbGl0KCcvJyk7XHJcblx0XHRcdFx0Y29uc29sZS5sb2codXJsQXJyWzNdLnRvU3RyaW5nKCkpO1xyXG5cdFx0XHRcdGxldCBndWVzdExhbmc9IHVybEFyclszXS50b1N0cmluZygpO1xyXG5cdFx0XHRcdHZhciBndWVzdENudHJ5ID0gKHVybEFyci5sZW5ndGggPiAwICkgPyBndWVzdExhbmcuc3BsaXQoJy0nKSA6IG51bGw7XHJcblx0XHRcdFx0Ly9jaGVjayBfY2xhaW0gdG9rZW4gcmV0dXJuIGd1ZXN0Q291bnRyeSBpZiBub3QgZ2V0IGNvdW50cnkgZnJvbSBsb2dnZWRpbiB1c2VyJ3MgYnJvd3NlclxyXG4gICAgICAgICAgICAgICAgICAgICBmd2h0cmsuZ3Vlc3RDb3VudHJ5ID0gKGd1ZXN0Q291bnRyeSA9PSBudWxsKSA/IGd1ZXN0Q250cnlbMV0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpIDogZ3Vlc3RDb3VudHJ5LnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBmd2h0cmsuZXJyb3JNZXNzYWdlID0gZS5lcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgKi9cclxuXHJcbiAgICBmdW5jdGlvbiBwZXJmb3JtTG9naW5DaGVja19uZXcoZGF0YSkge1xyXG4gICAgICAgIGlzTG9nZ2VkaW4gPSBkYXRhLmlzTG9nZ2VkSW47XHJcbiAgICAgICAgaWYgKGRhdGEuaXNMb2dnZWRJbiA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGd1ZXN0SWQgPSBkYXRhLmd1ZXN0SWQ7XHJcbiAgICAgICAgICAgIGd1ZXN0Q291bnRyeSA9IGRhdGEuZ3Vlc3RDb3VudHJ5O1xyXG4gICAgICAgICAgICBsb3lhbHR5SWQgPSBkYXRhLmxveWFsdHlJZDtcclxuICAgICAgICAgICAgZW5jcnlwdGVkVG9rZW4gPSBkYXRhLmVuY3J5cHRlZFRva2VuO1xyXG4gICAgICAgICAgICAvL2FsZXJ0KFwiZW5jcnlwdGVkVG9rZW4gPVwiK2VuY3J5cHRlZFRva2VuKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBsb2NhdG9yICE9PSBcInVuZGVmaW5lZFwiICYmIChlbmNyeXB0ZWRUb2tlbiAhPSBudWxsKSAmJiBlbmNyeXB0ZWRUb2tlbiAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRvci5zZXRDbGllbnRUb2tlbihlbmNyeXB0ZWRUb2tlbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcG9wdWxhdGVMb2dnZWRJblVzZXJJbmZvKGRhdGEpO1xyXG4gICAgICAgICAgICB0cmFja0xvZ2luU3RhdHVzKGRhdGEpO1xyXG4gICAgICAgICAgICB0cmFja0d1ZXN0TG95YWx0eUlkKGRhdGEpO1xyXG4gICAgICAgICAgICAvL3RyYWNrR3Vlc3RDb3VudHJ5KGRhdGEpOyAgLy9UVyBjb21tZW50ZWQgb3V0IDEyMTgyMFxyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcGVyZm9ybUxvZ2luQ2hlY2soZGF0YSkge1xyXG4gICAgICAgIGlzTG9nZ2VkaW4gPSBkYXRhLmlzTG9nZ2VkSW47XHJcbiAgICAgICAgaWYgKGRhdGEuaXNMb2dnZWRJbiA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGd1ZXN0SWQgPSBkYXRhLmd1ZXN0SWQ7XHJcbiAgICAgICAgICAgIGd1ZXN0Q291bnRyeSA9IGRhdGEuZ3Vlc3RDb3VudHJ5O1xyXG4gICAgICAgICAgICBsb3lhbHR5SWQgPSBkYXRhLmxveWFsdHlJZDtcclxuICAgICAgICAgICAgd2luZG93LmZhdm9yaXRlU3RvcmVJRCA9IGRhdGEuZmF2b3JpdGVTdG9yZUlkO1xyXG4gICAgICAgICAgICB3aW5kb3cucmVjZW50U3RvcmVJRCA9IGRhdGEucmVjZW50U3RvcmVJZDtcclxuICAgICAgICAgICAgLy9hbGVydChcImZhdm9yaXRlU3RvcmVJRD1cIiArIGZhdm9yaXRlU3RvcmVJRCk7XHJcbiAgICAgICAgICAgIC8vYWxlcnQoXCJyZWNlbnRTdG9yZUlEPVwiICsgcmVjZW50U3RvcmVJRCk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbG9jYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiAod2luZG93LmZhdm9yaXRlU3RvcmVJRCAhPT0gbnVsbCAmJiB3aW5kb3cuZmF2b3JpdGVTdG9yZUlEICE9ICcnKSkge1xyXG4gICAgICAgICAgICAgICAgLy9hbGVydChcImFkZCBmYXZvcml0ZSBzdG9yZVwiKTtcclxuICAgICAgICAgICAgICAgIGxvY2F0b3IuYWRkRmF2b3JpdGVTdG9yZSh3aW5kb3cuZmF2b3JpdGVTdG9yZUlELCAwKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbG9jYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiAod2luZG93LnJlY2VudFN0b3JlSUQgIT09IG51bGwgJiYgd2luZG93LnJlY2VudFN0b3JlSUQgIT0gJycpKSB7XHJcbiAgICAgICAgICAgICAgICAvL2FsZXJ0KFwiYWRkIGZhdm9yaXRlIHN0b3JlXCIpO1xyXG4gICAgICAgICAgICAgICAgbG9jYXRvci5hZGRSZWNlbnRTdG9yZSh3aW5kb3cucmVjZW50U3RvcmVJRCwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcG9wdWxhdGVMb2dnZWRJblVzZXJJbmZvKGRhdGEpO1xyXG4gICAgICAgICAgICB0cmFja0xvZ2luU3RhdHVzKGRhdGEpO1xyXG4gICAgICAgICAgICB0cmFja0d1ZXN0TG95YWx0eUlkKGRhdGEpO1xyXG4gICAgICAgICAgICAvL3RyYWNrR3Vlc3RDb3VudHJ5KGRhdGEpOyAvL1RXIGNvbW1lbnRlZCBvdXQgMTIxODIwXHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgIHZhciB0YXJnZXRFbGUgPSAkKCcuanMtc3ctZXllYnJvd19fbmF2aXRlbS0tYXV0aGVudGljYXRpb24nKTtcclxuICAgICAgICBpZiAodGFyZ2V0RWxlICE9PSBlLnRhcmdldCAmJiAhdGFyZ2V0RWxlLmhhcyhlLnRhcmdldCkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXRFbGUuaGFzQ2xhc3MoJ3VzZXJtZW51LW9wZW4nKSkge1xyXG4gICAgICAgICAgICAgICAgY2xvc2VVc2VyTWVudSh0YXJnZXRFbGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy9jYWxsIGV4dGVybmFsIGxvZyBpbiBwcm9jZXNzIGlmIG9uZSBpcyBkZWZpbmVkXHJcbiAgICAkKCcubG5rTG9naW4nKS5vbignY2xpY2snLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICBpZiAodHlwZW9mIGluaXRpYXRlTG9naW4gPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvL1RoaXMgcHJldmVudHMgdGhlIGNvbnRyb2wncyBDbGljayBldmVudCBmcm9tIGZpcmluZ1xyXG4gICAgICAgICAgICBpbml0aWF0ZUxvZ2luKGV2ZW50LCAkKHRoaXMpKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvL2NhbGwgZXh0ZXJuYWwgbG9nIG91dCBwcm9jZXNzIGlmIG9uZSBpcyBkZWZpbmVkXHJcbiAgICAkKCcubG5rTG9nb3V0Jykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWF0ZUxvZ291dCA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vVGhpcyBwcmV2ZW50cyB0aGUgY29udHJvbCdzIENsaWNrIGV2ZW50IGZyb20gZmlyaW5nXHJcbiAgICAgICAgICAgIGluaXRpYXRlTG9nb3V0KGV2ZW50LCAkKHRoaXMpKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVMb2dpblNlY3Rpb24oaXNMb2dnZWRJbikge1xyXG4gICAgbGV0ICRsb2dpblNlY3Rpb24gPSAkKCcuanMtc3ctZXllYnJvd19fbmF2bGluay0tdXNlcmxvZ2luJyksXHJcbiAgICAgICAgJGxvZ291dFNlY3Rpb24gPSAkKCcuanMtc3ctZXllYnJvd19fbmF2bGluay0tdXNlcicpLFxyXG4gICAgICAgICRsb2dpbk1vYmlsZU1lbnVTZWN0aW9uID0gJCgnLmpzLXN3LWV5ZWJyb3dfX3VzZXJsb2dpbnNpZ251cC1tZW51JyksXHJcbiAgICAgICAgJGxvZ291dE1lbnVTZWN0aW9uID0gJCgnLmpzLXN3LWV5ZWJyb3dfX3VzZXJtZW51JyksXHJcbiAgICAgICAgJGxvZ2dlZEluT25seVNlY3Rpb25zID0gJCgnLmpzLXN3LXNlY3Rpb24tLWxvZ2dlZGlub25seScpLFxyXG4gICAgICAgICRsb2dnZWRPdXRPbmx5U2VjdGlvbnMgPSAkKCcuanMtc3ctc2VjdGlvbi0tbG9nZ2Vkb3V0b25seScpXHJcbiAgICAgICAgO1xyXG5cclxuICAgIGlmIChpc0xvZ2dlZEluID09PSB0cnVlKSB7XHJcbiAgICAgICAgJCgnYm9keScpLmFkZENsYXNzKCd1c2VyLWxvZ2dlZC1pbicpO1xyXG5cclxuICAgICAgICAkbG9nb3V0U2VjdGlvbi5zaG93KCk7XHJcbiAgICAgICAgaWYgKCRsb2dpblNlY3Rpb24ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICRsb2dpblNlY3Rpb24uaGlkZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoJGxvZ2luTW9iaWxlTWVudVNlY3Rpb24ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICRsb2dpbk1vYmlsZU1lbnVTZWN0aW9uLmhpZGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJGxvZ291dE1lbnVTZWN0aW9uLnNob3coKTtcclxuICAgICAgICAkbG9nZ2VkSW5Pbmx5U2VjdGlvbnMuc2hvdygpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgaWYgKCQoJ2JvZHknKS5oYXNDbGFzcygndXNlci1sb2dnZWQtaW4nKSkge1xyXG4gICAgICAgICAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ3VzZXItbG9nZ2VkLWluJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkbG9nb3V0U2VjdGlvbi5oaWRlKCk7XHJcbiAgICAgICAgaWYgKCRsb2dpblNlY3Rpb24ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICRsb2dpblNlY3Rpb24uc2hvdygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoJGxvZ2luTW9iaWxlTWVudVNlY3Rpb24ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICRsb2dpbk1vYmlsZU1lbnVTZWN0aW9uLnNob3coKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJGxvZ291dE1lbnVTZWN0aW9uLmhpZGUoKTtcclxuICAgICAgICAkbG9nZ2VkT3V0T25seVNlY3Rpb25zLnNob3coKTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICAgIC8vIHJldHJpZ2dlciBpbWFnZSBsYXp5IGxvYWQgLSBuZXcgc2VjdGlvbnMgbWF5IGJlIHZpc2libGVcclxuICAgICAgICB3aW5kb3cubXlMYXp5bG9hZDEudXBkYXRlKCk7XHJcbiAgICAgICAgd2luZG93Lm15TGF6eWxvYWQyLnVwZGF0ZSgpO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJsYXp5bG9hZCByZWZyZXNoL3VwZGF0ZSBmYWlsZWRcIik7XHJcbiAgICB9XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcG9wdWxhdGVMb2dnZWRJblVzZXJJbmZvKHVzZXJEYXRhKSB7XHJcbiAgICAvKlxyXG4gICAgICAgIHVzZXJEYXRhIGlzIGV4cGVjdGVkIHRvIGJlIGFuIG9iamVjdCwgd2l0aCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XHJcbiAgICAgICAgLSBkaXNwbGF5TmFtZTogIHVzZXIncyBuYW1lXHJcbiAgICAgICAgLSB0b2tlbnM6ICAgICAgIHVzZXIncyB0b2tlbiBjb3VudFxyXG4gICAgICAgIC0gcmV3YXJkczogICAgICAgIHVzZXIncyByZXdhcmRzIGluIGRvbGxhcnNcclxuICAgICovXHJcbiAgICBpZiAodHlwZW9mIHVzZXJEYXRhICE9PSBcIm9iamVjdFwiIHx8XHJcbiAgICAgICAgdHlwZW9mIHVzZXJEYXRhLmRpc3BsYXlOYW1lID09PSBcInVuZGVmaW5lZFwiIHx8XHJcbiAgICAgICAgdHlwZW9mIHVzZXJEYXRhLnRva2VucyA9PT0gXCJ1bmRlZmluZWRcIiB8fFxyXG4gICAgICAgIHR5cGVvZiB1c2VyRGF0YS5yZXdhcmRzID09PSBcInVuZGVmaW5lZFwiKSB7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdtaXNzaW5nIG9yIGludmFsaWQgdXNlciBkYXRhJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCAkdG9rZW5QYW5lID0gJCgnLmpzLXN3LWV5ZWJyb3dfX25hdml0ZW0tLWF1dGhlbnRpY2F0aW9uJykuZmluZCgnLnN3LWV5ZWJyb3dfX3Rva2VucGFuZScpLFxyXG4gICAgICAgICR0b2tlbnMgPSAkdG9rZW5QYW5lLmZpbmQoJy5zdy1leWVicm93X190b2tlbicpLFxyXG4gICAgICAgICR0b2tlblJld2FyZHMgPSAkKCcuanMtc3ctcmV3YXJkc19fdG9rZW4nKSxcclxuICAgICAgICAkZ3JlZXRpbmcgPSAkKCcuanMtc3ctZXllYnJvd19fZ3JlZXRpbmcnKVxyXG4gICAgICAgIDtcclxuXHJcbiAgICAvLyBhbGxvdyBmb3IgbXVsdGlwbGUgdG9rZW4gdGV4dHMsIGJ1dCBvbmx5IGRpc3BsYXkgdGhlIGNvcnJlY3Qgb25lIGZvciB0aGUgdG9rZW4gY291bnRcclxuICAgICR0b2tlbnMuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcclxuICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xyXG4gICAgICAgICR0aGlzLnRleHQoJHRoaXMudGV4dCgpLnJlcGxhY2UoXCJ7dG9rZW5zfVwiLCB1c2VyRGF0YS50b2tlbnMpKTtcclxuXHJcbiAgICAgICAgaWYgKHVzZXJEYXRhLnRva2VucyA+IDEpIHtcclxuICAgICAgICAgICAgaWYgKCR0aGlzLmhhc0NsYXNzKCd0b2tlbi1tdWx0aXBsZScpKSB7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5zaG93KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoJHRoaXMuaGFzQ2xhc3MoJ3Rva2VuLXNpbmdsZScpKSB7XHJcbiAgICAgICAgICAgICAgICAkdGhpcy5zaG93KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAkdG9rZW5SZXdhcmRzLnRleHQoJyQnICsgdXNlckRhdGEucmV3YXJkcyk7XHJcblxyXG4gICAgdmFyIGN1cnJlbnRHcmVldGluZ1RleHQgPSAkZ3JlZXRpbmcudGV4dCgpO1xyXG4gICAgJGdyZWV0aW5nLnRleHQoY3VycmVudEdyZWV0aW5nVGV4dC5yZXBsYWNlKFwie25hbWV9XCIsIHVzZXJEYXRhLmRpc3BsYXlOYW1lKSk7XHJcbn07IiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcclxuaW1wb3J0IGRpYWxvZ01hbmFnZXIgZnJvbSBcIi4vZGlhbG9nTWFuYWdlci5qc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFpbk5hdihlbCkge1xyXG4gICAgJChlbCkuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICBjb25zdCAkc2VsZiA9ICQodGhpcyksXHJcbiAgICAgICAgICAgICAgJGxpbmsgPSAkc2VsZi5maW5kKCcuc3ctbWFpbm5hdl9fbGluaycpLFxyXG4gICAgICAgICAgICAgICRkcm9wZG93biA9ICRzZWxmLmZpbmQoJy5zdy1tYWlubmF2X19kcm9wZG93bicpLFxyXG4gICAgICAgICAgICAgICRjbG9zZUJ1dHRvbiA9ICRzZWxmLmZpbmQoJy5zdy1tYWlubmF2X19kcm9wZG93bi1jbG9zZScpO1xyXG5cclxuICAgICAgICBpZigkc2VsZi5oYXNDbGFzcygnaGFzLWRyb3Bkb3duJykpIHtcclxuICAgICAgICAgICAgJGxpbmsub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgdG9nZ2xlRHJvcGRvd24oJHNlbGYpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICRjbG9zZUJ1dHRvbi5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgICAgICBjbG9zZURyb3Bkb3duKCRzZWxmKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgZnVuY3Rpb24gdG9nZ2xlRHJvcGRvd24oZWxlbWVudCkge1xyXG4gXHJcbiAgICAgICAgaWYoZWxlbWVudC5oYXNDbGFzcygnZHJvcGRvd24tb3BlbicpKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNsb3NlRHJvcGRvd24oZWxlbWVudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdHJhY2tNZW51Q2xpY2soZWxlbWVudCk7XHJcbiAgICAgICAgICAgIG9wZW5Ecm9wZG93bihlbGVtZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGVsZW1lbnQuc2libGluZ3MoKS5oYXNDbGFzcygnZHJvcGRvd24tb3BlbicpKSB7XHJcbiAgICAgICAgICAgIGNsb3NlRHJvcGRvd25TaWJsaW5ncyhlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiBcclxuICAgIGZ1bmN0aW9uIG9wZW5Ecm9wZG93bihlbGVtZW50KSB7XHJcblxyXG4gICAgICAgIGVsZW1lbnQuYWRkQ2xhc3MoJ2Ryb3Bkb3duLW9wZW4nKTtcclxuICAgICAgICBlbGVtZW50LmZpbmQoJ1thcmlhLWV4cGFuZGVkPWZhbHNlXScpLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xyXG4gICAgICAgIGVsZW1lbnQuZmluZCgnW2FyaWEtaGlkZGVuPXRydWVdJykuYXR0cignYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcclxuXHJcbiAgICAgICAgJCgnYm9keScpLmFkZENsYXNzKCdkcm9wZG93bi1hY3RpdmUnKTtcclxuXHRcdFxyXG5cdFx0aWYoJCgnYm9keScpLmhhc0NsYXNzKCd1c2VyLWxvZ2dlZC1pbicpKSB7XHJcblx0XHRcdGVsZW1lbnQuZmluZCgnLmpzLXN3LXNlY3Rpb24tLWxvZ2dlZGlub25seScpLnNob3coKTtcclxuXHRcdFx0ZWxlbWVudC5maW5kKCcuanMtc3ctc2VjdGlvbi0tbG9nZ2Vkb3V0b25seScpLmhpZGUoKTtcclxuXHRcdH1lbHNle1xyXG5cdFx0XHRlbGVtZW50LmZpbmQoJy5qcy1zdy1zZWN0aW9uLS1sb2dnZWRpbm9ubHknKS5oaWRlKCk7XHJcblx0XHRcdGVsZW1lbnQuZmluZCgnLmpzLXN3LXNlY3Rpb24tLWxvZ2dlZG91dG9ubHknKS5zaG93KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBcclxuICAgICAgICB2YXIgaXRlbXMgPSAkKFwidWwuc3ctbWFpbm5hdl9fbGlzdCBsaS5zdy1tYWlubmF2X19pdGVtXCIpO1xyXG4gICAgICAgICQoaXRlbXMpLmVhY2goZnVuY3Rpb24oaSxlbGVtKXtcclxuICAgICAgICAgICAgaWYoJChlbGVtKS5oYXNDbGFzcyhcImRyb3Bkb3duLW9wZW5cIik9PT1mYWxzZSl7XHJcbiAgICAgICAgICAgICAgICAkKGVsZW0pLmFkZENsYXNzKFwic2libGluZy1vcGVuXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgICAgXHJcbiAgICAgICAgLy9zZXQgZm9jdXMgb24gYmFjayBidXR0b24gZm9yIG1vYmlsZVxyXG4gICAgICAgaWYoJChkb2N1bWVudCkuZmluZCgnLmRyb3Bkb3duLW9wZW4gLmJhY2tCdG5Nb2JpbGU6dmlzaWJsZScpLmxlbmd0aD4wKVxyXG4gICAgICAgIHsgIFxyXG4gICAgICAgICAgICB2YXIgZGlhbG9nID0gbmV3IGRpYWxvZ01hbmFnZXIoKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBtb2RhbD0kKCduYXYuc3ctbWFpbm5hdi5qcy1zdy1tYWlubmF2Jyk7XHJcbiAgICAgICAgICAgIHZhciBiYWNrQnRuID0gJCgnbGkuaGFzLWRyb3Bkb3duLmpzLXN3LW1haW5uYXZfX2l0ZW0uZHJvcGRvd24tb3BlbiBidXR0b24uc3ctbWFpbm5hdl9fZHJvcGRvd24tY2xvc2UnKTtcclxuICAgICAgICAgICAgdmFyIGZpbmRBU3RvcmUgPSAkKCdhLnN3LXNob3BuYXZfX3RyaWdnZXInKTtcclxuICAgICAgICAgICAgZGlhbG9nLmNyZWF0ZURpYWxvZyhtb2RhbFswXSk7XHJcbiAgICAgICAgICAgIGRpYWxvZy5hZGRTaW5nbGVJdGVtKCQoXCJidXR0b24uc3ctaGFtYnVyZ2VyXCIpWzBdKTtcclxuICAgICAgICAgICAgZGlhbG9nLmFkZFNpbmdsZUl0ZW0oJCgnYS5zdy1sb2dvJylbMF0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIGxvZ2luID0gJCgnYnV0dG9uLmpzLXN3LWV5ZWJyb3dfX25hdmxpbmstLXVzZXJsb2dpbnNpZ251cCcpWzBdO1xyXG4gICAgICAgICAgICB2YXIgbG9nZ2VkSW4gPSAkKCdidXR0b24uanMtc3ctZXllYnJvd19fbmF2bGluay0tdXNlcicpWzBdO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYobG9naW4gIT0gbnVsbCl7IGRpYWxvZy5hZGRTaW5nbGVJdGVtKGxvZ2luKTt9ICBcclxuICAgICAgICAgICAgaWYobG9nZ2VkSW4gIT0gbnVsbCl7IGRpYWxvZy5hZGRTaW5nbGVJdGVtKGxvZ2dlZEluKTt9IFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZGlhbG9nLnNldEluaXRpYWxGb2N1cyhiYWNrQnRuWzBdKTt9LDMwMCk7IFxyXG5cclxuICAgICAgICAgICAgLy8gJChkb2N1bWVudCkuZmluZCgnLmRyb3Bkb3duLW9wZW4gYnV0dG9uLnN3LW1haW5uYXZfX2Ryb3Bkb3duLWNsb3NlOnZpc2libGUnKS5lYWNoKGZ1bmN0aW9uKGksZWxlbSl7ICAgICAgIFxyXG4gICAgICAgICAgICAvLyAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXskKGVsZW0pLmZvY3VzKCk7fSwzMDApO1xyXG4gICAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjbG9zZURyb3Bkb3duKGVsZW1lbnQpIHtcclxuXHJcbiAgICAgICAgdmFyIGl0ZW1zID0gJChcInVsLnN3LW1haW5uYXZfX2xpc3QgbGkuc3ctbWFpbm5hdl9faXRlbVwiKTtcclxuICAgICAgICAkKGl0ZW1zKS5lYWNoKGZ1bmN0aW9uKGksZWxlbSl7XHJcbiAgICAgICAgICAgICQoZWxlbSkucmVtb3ZlQ2xhc3MoXCJzaWJsaW5nLW9wZW5cIik7XHJcbiAgICAgICAgfSk7XHJcblxyXG5cclxuICAgICAgICBlbGVtZW50LmZpbmQoJ1thcmlhLWV4cGFuZGVkPXRydWVdJykuZm9jdXMoKTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5yZW1vdmVDbGFzcygnZHJvcGRvd24tb3BlbicpO1xyXG4gICAgICAgIGVsZW1lbnQuZmluZCgnW2FyaWEtZXhwYW5kZWQ9dHJ1ZV0nKS5hdHRyKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XHJcbiAgICAgICAgZWxlbWVudC5maW5kKCdbYXJpYS1oaWRkZW49ZmFsc2VdJykuYXR0cignYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xyXG5cclxuICAgICAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ2Ryb3Bkb3duLWFjdGl2ZScpO1xyXG4gICAgICAgIFxyXG5cdFx0ZWxlbWVudC5maW5kKCcuanMtc3ctc2VjdGlvbi0tbG9nZ2VkaW5vbmx5JykuaGlkZSgpO1xyXG5cdFx0ZWxlbWVudC5maW5kKCcuanMtc3ctc2VjdGlvbi0tbG9nZ2Vkb3V0b25seScpLmhpZGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjbG9zZURyb3Bkb3duU2libGluZ3MoZWxlbWVudCkge1xyXG4gICAgICAgIGVsZW1lbnQuc2libGluZ3MoKS5yZW1vdmVDbGFzcygnZHJvcGRvd24tb3BlbicpO1xyXG4gICAgICAgIGVsZW1lbnQuc2libGluZ3MoKS5maW5kKCdbYXJpYS1leHBhbmRlZD10cnVlXScpLmF0dHIoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcclxuICAgICAgICBlbGVtZW50LnNpYmxpbmdzKCkuZmluZCgnW2FyaWEtaGlkZGVuPWZhbHNlXScpLmF0dHIoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBhY2Nlc3NpYmlsaXR5KGJ1dHRvbikge1xyXG4gICAgICAgIGJ1dHRvbi5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgaWYoZS53aGljaCA9PT0gMzIpIHtcclxuICAgICAgICAgICAgICAgIC8vc3BhY2UgYmFyXHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB0b2dnbGVEcm9wZG93bihidXR0b24ucGFyZW50KCkpO1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uLm5leHQoKS5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHRyYWNrTWVudUNsaWNrKGVsZW1lbnQpIHtcclxuXHJcbiAgICAgICAgbGV0ICRsaW5rID0gZWxlbWVudC5maW5kKCcuc3ctbWFpbm5hdl9fbGlua1tkYXRhLWFkb2JlLWxpbmstbmFtZV0nKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoJGxpbmsubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIGxldCBhZG9iZUxpbmtOYW1lID0gJGxpbmsuYXR0cihcImRhdGEtYWRvYmUtbGluay1uYW1lXCIpO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKF9zYXRlbGxpdGUpICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBfc2F0ZWxsaXRlLnRyYWNrKCdOYXYgQ2xpY2sgRXZlbnQgJyArIGFkb2JlTGlua05hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGdsb2JhbCBjbG9zZSBhbGwgaWYgY2xpY2tlZCBvdXRzaWRlIHRoZSBzdXBlciBuYXZcclxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICBpZigkKGVsKSAhPT0gZS50YXJnZXQgJiYgISQoZWwpLmhhcyhlLnRhcmdldCkubGVuZ3RoKXtcclxuICAgICAgICAgICAgaWYoJChlbCkuaGFzQ2xhc3MoJ2Ryb3Bkb3duLW9wZW4nKSkge1xyXG4gICAgICAgICAgICAgICAgY2xvc2VEcm9wZG93bigkKGVsKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvL2VzY2FwZVxyXG4gICAgJChkb2N1bWVudCkub24oJ2tleWRvd24nLCBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgaWYoJChlbCkuaGFzQ2xhc3MoJ2Ryb3Bkb3duLW9wZW4nKSAmJiBlLmtleUNvZGUgPT09IDI3KSB7XHJcbiAgICAgICAgICAgIGNsb3NlRHJvcGRvd24oJChlbCkpO1xyXG4gICAgICAgIH1cclxuICAgICB9KTtcclxufVxyXG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xyXG5pbXBvcnQgZGlhbG9nTWFuYWdlciBmcm9tIFwiLi9kaWFsb2dNYW5hZ2VyLmpzXCI7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbW9iaWxlTmF2KGVsKSB7XHJcbiAgICBsZXQgJGhlYWRlclBhbmUgPSAkKCcuc3ctaGVhZGVycGFuZScpO1xyXG5cclxuICAgICQoZG9jdW1lbnQpLmtleWRvd24oZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAyNykge1xyXG4gICAgICAgICAgICBoaWRlTW9iaWxlTmF2KCk7XHJcbiAgICAgICAgICAgICQoZWwpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsIFwiZmFsc2VcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAvLyAgICBpZiAod2luZG93Lm9yaWdpbiAhPSAnaHR0cHM6Ly8nICsgZGVmYXVsdE9yaWdpbikge1xyXG4gICAgLy8gICAgICAgIHJldHVybjtcclxuICAgIC8vICAgIH1cclxuICAgIC8vICAgIGVsc2Uge1xyXG4gICAgLy8gICAgICAgIC8vZXNjYXBlXHJcbiAgICAvLyAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcclxuICAgIC8vICAgICAgICAgICAgaGlkZU1vYmlsZU5hdigpO1xyXG4gICAgLy8gICAgICAgICAgICAkKGVsKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCBcImZhbHNlXCIpO1xyXG4gICAgLy8gICAgICAgIH1cclxuICAgIC8vICAgIH1cclxuICAgIC8vfSk7XHJcblxyXG4gICAgJChlbCkub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdG9nZ2xlTW9iaWxlTmF2KCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmdW5jdGlvbiBtb2JpbGVOYXZTY3JlZW5Ub3AoKSB7XHJcbiAgICAgICAgbGV0IHRvcFBvcyA9ICRoZWFkZXJQYW5lLm91dGVySGVpZ2h0KCk7XHJcbiAgICAgICAgaWYgKHRvcFBvcyA+IDApIHtcclxuICAgICAgICAgICAgJCgnLmpzLXN3LW1haW5uYXYnKS5jc3MoJ3RvcCcsIHRvcFBvcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdmFyIGRpYWxvZztcclxuICAgIGZ1bmN0aW9uIHRvZ2dsZU1vYmlsZU5hdigpIHtcclxuICAgICAgICBpZiAoJCgnYm9keScpLmhhc0NsYXNzKCdtb2JpbGUtbmF2LW9wZW4nKSkge1xyXG4gICAgICAgICAgICBoaWRlTW9iaWxlTmF2KCk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGlhbG9nICE9PSAndW5kZWZpbmVkJykgZGlhbG9nLnJlbW92ZU1vZGFsKCk7XHJcbiAgICAgICAgICAgICQoZWwpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsIFwiZmFsc2VcIik7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNob3dNb2JpbGVOYXYoKTtcclxuICAgICAgICAgICAgJChlbCkuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwgXCJ0cnVlXCIpO1xyXG5cclxuICAgICAgICAgICAgZGlhbG9nID0gbmV3IGRpYWxvZ01hbmFnZXIoKTtcclxuICAgICAgICAgICAgdmFyIG1vZGFsID0gJCgnbmF2LnN3LW1haW5uYXYuanMtc3ctbWFpbm5hdicpO1xyXG5cclxuICAgICAgICAgICAgZGlhbG9nLmNyZWF0ZURpYWxvZyhtb2RhbFswXSk7XHJcbiAgICAgICAgICAgIGRpYWxvZy5hZGRTaW5nbGVJdGVtKCQoXCJidXR0b24uc3ctaGFtYnVyZ2VyXCIpWzBdKTtcclxuICAgICAgICAgICAgZGlhbG9nLmFkZFNpbmdsZUl0ZW0oJCgnYS5zdy1sb2dvJylbMF0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIGxvZ2luID0gJCgnYnV0dG9uLmpzLXN3LWV5ZWJyb3dfX25hdmxpbmstLXVzZXJsb2dpbnNpZ251cCcpWzBdO1xyXG4gICAgICAgICAgICB2YXIgbG9nZ2VkSW4gPSAkKCdidXR0b24uanMtc3ctZXllYnJvd19fbmF2bGluay0tdXNlcicpWzBdO1xyXG5cclxuICAgICAgICAgICAgaWYgKGxvZ2luICE9IG51bGwpIHsgZGlhbG9nLmFkZFNpbmdsZUl0ZW0obG9naW4pOyB9XHJcbiAgICAgICAgICAgIGlmIChsb2dnZWRJbiAhPSBudWxsKSB7IGRpYWxvZy5hZGRTaW5nbGVJdGVtKGxvZ2dlZEluKTsgfVxyXG5cclxuICAgICAgICAgICAgc3RvcEFsbFNsaWRlcnMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2hvd01vYmlsZU5hdigpIHtcclxuICAgICAgICAkKCdib2R5JykuYWRkQ2xhc3MoJ21vYmlsZS1uYXYtb3BlbicpO1xyXG4gICAgICAgIG1vYmlsZU5hdlNjcmVlblRvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGhpZGVNb2JpbGVOYXYoKSB7XHJcbiAgICAgICAgJCgnYm9keScpLnJlbW92ZUNsYXNzKCdtb2JpbGUtbmF2LW9wZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICB3aW5kb3cub25yZXNpemUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5vZmZzZXRXaWR0aCA8ICcxMDI0cHgnKSB7XHJcbiAgICAgICAgICAgIG1vYmlsZU5hdlNjcmVlblRvcCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICQoJy5qcy1zdy1tYWlubmF2JykuYXR0cignc3R5bGUnLCAnJyk7XHJcbiAgICAgICAgICAgIGlmICgkKCdib2R5JykuaGFzQ2xhc3MoJ21vYmlsZS1uYXYtb3BlbicpKSB7XHJcbiAgICAgICAgICAgICAgICBoaWRlTW9iaWxlTmF2KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07IiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1vdmVJdGVtcygpIHtcclxuICAgIHZhciBtZWRpYVF1ZXJ5TGlzdCA9IHdpbmRvdy5tYXRjaE1lZGlhKFwiKG1pbi13aWR0aDogMTAyNHB4KVwiKTtcclxuICAgIGZ1bmN0aW9uIGhhbmRsZVNjcmVuUmVzaXplKG1xbCkge1xyXG4gICAgICAgIGxldCAkbmF2ID0gJCgnLmpzLXN3LW1haW5uYXYnKTtcclxuICAgICAgICBsZXQgJGhhbWJ1cmdlciA9ICQoJy5qcy1zdy1oYW1idXJnZXInKTtcclxuICAgICAgICBsZXQgJGhlYWRlciA9ICQoJy5zdy1oZWFkZXInKTtcclxuXHJcbiAgICAgICAgaWYgKG1xbC5tYXRjaGVzKSB7XHJcbiAgICAgICAgICAgIC8vIERlc2t0b3BcclxuICAgICAgICAgICAgaWYoJCgnLmpzLXN3LWV5ZWJyb3dfX2xhbmd1YWdlLWNvbnRyYXN0JykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAkKCcuanMtc3ctZXllYnJvd19fbGFuZ3VhZ2UtY29udHJhc3QnKS5wcmVwZW5kVG8oJy5qcy1zdy1leWVicm93Jyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCQoJy5qcy1zdy1leWVicm93X19uYXZpdGVtLS1hdXRoZW50aWNhdGlvbicpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgJCgnLmpzLXN3LWV5ZWJyb3dfX25hdml0ZW0tLWF1dGhlbnRpY2F0aW9uJykuYXBwZW5kVG8oJy5zdy1leWVicm93X19uYXYnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCRuYXYubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAkbmF2LmFwcGVuZFRvKCRoZWFkZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFRhYmxldCAvIE1vYmlsZVxyXG4gICAgICAgICAgICBpZigkKCcuanMtc3ctZXllYnJvd19fbGFuZ3VhZ2UtY29udHJhc3QnKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICQoJy5qcy1zdy1leWVicm93X19sYW5ndWFnZS1jb250cmFzdCcpLnByZXBlbmRUbygnLmpzLXN3LW1haW5uYXYnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoJCgnLmpzLXN3LWV5ZWJyb3dfX25hdml0ZW0tLWF1dGhlbnRpY2F0aW9uJykubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAkKCcuanMtc3ctZXllYnJvd19fbmF2aXRlbS0tYXV0aGVudGljYXRpb24nKS5hcHBlbmRUbygnLmpzLXN3LXVzZXJwYW5lLW1vYmlsZScpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoJG5hdi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICRuYXYuaW5zZXJ0QWZ0ZXIoJGhhbWJ1cmdlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBtZWRpYVF1ZXJ5TGlzdC5hZGRMaXN0ZW5lcihoYW5kbGVTY3JlblJlc2l6ZSk7XHJcbiAgICBoYW5kbGVTY3JlblJlc2l6ZShtZWRpYVF1ZXJ5TGlzdCk7XHJcbn07IiwiaW1wb3J0ICQgZnJvbSBcImpxdWVyeVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbnV0cml0aW9uR3JpZCgpIHtcclxuICAgIGxldCBfbnV0R3JpZERhdGFFbmRwb2ludCA9IFwiL1N1YndheVYyL0RhdGEvUmVuZGVyTnV0cml0aW9uR3JpZC5hc3B4XCI7XHJcbiAgICBsZXQgJG51dEdyaWQgPSAkKCcjc3ctbWFpbiAuanMtbnV0cml0aW9uLWdyaWQtLXYyJyk7XHJcbiAgICBsZXQgX2N1bHR1cmVDb2RlID0gJG51dEdyaWQuZmluZCgnLmpzLXN3LXRhYnMnKS5kYXRhKCdjdWx0dXJlLWNvZGUnKTtcclxuICAgIGxldCAkdGFicyA9ICRudXRHcmlkLmZpbmQoJy5qcy1zdy1udXRyaXRpb24tZ3JpZC10YWInKTtcclxuXHJcbiAgICAvL2luaXRpYWwgbG9hZCAtIGxvYWQgYWxsIDMgdGFicyB3aXRoIHRhYmxlIGRhdGFcclxuICAgICR0YWJzLmVhY2goZnVuY3Rpb24oaW5kZXgsIHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIGV2ZW50ID0gbmV3IGpRdWVyeS5FdmVudCgkKHZhbHVlKSk7XHJcbiAgICAgICAgZXZlbnQuaXNJbml0aWFsTG9hZCA9IHRydWU7XHJcbiAgICAgICAgZXZlbnQuY3VycmVudFRhcmdldCA9IHZhbHVlO1xyXG4gICAgICAgIHJlZnJlc2hOdXRHcmlkKGV2ZW50KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZ1bmN0aW9uIHJlZnJlc2hOdXRHcmlkKGV2ZW50KSB7XHJcbiAgICAgICAgbGV0IHdhc0luaXRpYWxMb2FkID0gZmFsc2U7XHJcbiAgICAgICAgaWYoZXZlbnQuaXNJbml0aWFsTG9hZCAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICB3YXNJbml0aWFsTG9hZCA9IGV2ZW50LmlzSW5pdGlhbExvYWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvL2lmIGN1cnJlbnQgdGFyZ2V0IGlzIGEgbnV0LiBncmlkIHRhYiwgdXNlIGl0IGFzIHNlbGVjdGVkVGFiLiBFbHNlLCBhdHRlbXB0IHRvIGRyaWxsIHVwIHRvIGZpbmQgdGhlIHNlbGVjdGVkIHRhYlxyXG4gICAgICAgIHZhciAkc2VsZWN0ZWRUYWIgPSAkKGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xyXG4gICAgICAgIGlmKCEkc2VsZWN0ZWRUYWIuaGFzQ2xhc3MoJ2pzLXN3LW51dHJpdGlvbi1ncmlkLXRhYicpKSB7XHJcbiAgICAgICAgICAgICRzZWxlY3RlZFRhYiA9ICR0YWJzLmZpbHRlcignW2FyaWEtc2VsZWN0ZWQ9XCJ0cnVlXCJdJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkKCcubnV0cml0aW9uQ2xhc3MnKS5hbmltYXRlKHsgc2Nyb2xsVG9wOiAwIH0sICdub3JtYWwnKTsvL3Byb2JhYmx5IGdvb2QgdG8ga2VlcCB0aGlzLCB0byBzY3JvbGwgdG8gdGhlIHRvcCBvZiB0aGUgZ3JpZCBjb250YWluZXI/ICBuZWNlc3Nhcnk/P1xyXG5cclxuICAgICAgICBsZXQgJHRhYlBhbmVsID0gIGdldFNlbGVjdGVkR3JpZENvbnRhaW5lcigkc2VsZWN0ZWRUYWIpO1xyXG4gICAgICAgIGxldCBzZWxDYXRlZ29yeSA9ICR0YWJQYW5lbC5maW5kKCcuanMtc3ctbnV0cml0aW9uLWdyaWRfX2NhdGVnb3J5JykudmFsKCk7XHJcbiAgICAgICAgbGV0IF9mdWxsRW5kcG9pbnQgPSBfbnV0R3JpZERhdGFFbmRwb2ludCArIFwiP1BhZ2U9XCIgKyAkc2VsZWN0ZWRUYWIuZGF0YSgnbmF2aWdhdGUtcGFnZS1pZCcpICsgXCImY3VsdHVyZUNvZGU9XCIgKyBfY3VsdHVyZUNvZGUgKyBcIiZzZWxlY3RlZENhdGVnb3J5SWQ9XCIgKyBzZWxDYXRlZ29yeTtcclxuXHJcbiAgICAgICAgbGV0ICRhbW91bnRUeXBlU2VsZWN0ZWQgPSAkdGFiUGFuZWwuZmluZCgnaW5wdXRbbmFtZV49QW1vdW50LV06Y2hlY2tlZCcpO1xyXG4gICAgICAgIGlmKCRhbW91bnRUeXBlU2VsZWN0ZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIF9mdWxsRW5kcG9pbnQgKz0gXCImYW1vdW50VHlwZT1cIiArICRhbW91bnRUeXBlU2VsZWN0ZWQudmFsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih3YXNJbml0aWFsTG9hZCkge1xyXG4gICAgICAgICAgICBfZnVsbEVuZHBvaW50ICs9IFwiJmluaXRpYWxpemVcIjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDogX2Z1bGxFbmRwb2ludCxcclxuICAgICAgICAgICAgdHlwZTogJ0dFVCcsXHJcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb25cIixcclxuICAgICAgICAgICAgZGF0YVR5cGU6ICdodG1sJyxcclxuICAgICAgICAgICAgY2FjaGU6IGZhbHNlLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgJHRhYlBhbmVsID0gZ2V0U2VsZWN0ZWRHcmlkQ29udGFpbmVyKCRzZWxlY3RlZFRhYik7XHJcbiAgICAgICAgICAgICAgICAkdGFiUGFuZWwuaHRtbChkYXRhKTtcclxuICAgICAgICAgICAgICAgIGF0dGFjaEhhbmRsZXJzKCR0YWJQYW5lbCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5mYWlsKGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiSlNPTiBFcnJvcjogXCIgKyB0ZXh0U3RhdHVzKTtcclxuICAgICAgICAgICAgICAgIGxldCAkdGFiUGFuZWwgPSBnZXRTZWxlY3RlZEdyaWRDb250YWluZXIoJHNlbGVjdGVkVGFiKTtcclxuICAgICAgICAgICAgICAgICR0YWJQYW5lbC5odG1sKCc8ZGl2IGNsYXNzPVwiZXJyb3JcIj5FcnJvciByZXRyaWV2aW5nIGRhdGE8L2Rpdj4nKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICA7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZ2V0U2VsZWN0ZWRHcmlkQ29udGFpbmVyKCRzZWxlY3RlZFRhYikge1xyXG4gICAgICAgIHJldHVybiAkKCcjJyArICRzZWxlY3RlZFRhYi5kYXRhKCduYXZpZ2F0ZS1wYWdlLWlkJykgKyAnLW51dHJpdGlvbkRpdicpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGF0dGFjaEhhbmRsZXJzKCR0YWJQYW5lbCkge1xyXG4gICAgICAgIC8vY2F0ZWdvcnkgcGlja2VyXHJcbiAgICAgICAgJHRhYlBhbmVsLmZpbmQoJy5qcy1zdy1udXRyaXRpb24tZ3JpZF9fY2F0ZWdvcnknKS5vbignY2hhbmdlJywgZXZlbnQgPT4gcmVmcmVzaE51dEdyaWQoZXZlbnQpKTtcclxuICAgICAgICAvL3NlcnZpbmcgc2l6ZSwgaWYgZW5hYmxlZFxyXG4gICAgICAgIGlmKCR0YWJQYW5lbC5maW5kKCdpbnB1dFtuYW1lXj1BbW91bnQtXScpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAkdGFiUGFuZWwuZmluZCgnaW5wdXRbbmFtZV49QW1vdW50LV0nKS5vbignY2hhbmdlJywgZXZlbnQgPT4gcmVmcmVzaE51dEdyaWQoZXZlbnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZGF0YSBjZWxsIG1vdXNlb3ZlcnNcclxuICAgICAgICAkdGFiUGFuZWwuZmluZCgndGQuaW5mbywgdGgubmFtZScpLmhvdmVyKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICB2YXIgJGNsb3Nlc3RSb3cgPSAkdGhpcy5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgICAgICAvL2Rvbid0IGRvIGZvY3VzIGFuZCByb2xsb3ZlciBzdHlsZXMgZm9yIHRoZSBpbmdyZWRpZW50IGhlYWRpbmcgcm93c1xyXG4gICAgICAgICAgICB2YXIgaXNDYXRlZ29yeVJvdyA9ICRjbG9zZXN0Um93Lmhhc0NsYXNzKCdjYXRlZ29yeS1yb3cnKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCFpc0NhdGVnb3J5Um93KSB7XHJcbiAgICAgICAgICAgICAgICAkY2xvc2VzdFJvdy5hZGRDbGFzcygnaW5mb1Jvd092ZXInKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYoJHRoaXMuaGFzQ2xhc3MoJ2luZm8nKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHQgPSBwYXJzZUludCgkKHRoaXMpLmluZGV4KCkpICsgMTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZighaXNDYXRlZ29yeVJvdykge1xyXG4gICAgICAgICAgICAgICAgICAgICR0aGlzLmFkZENsYXNzKCdpbmZvRm9jdXMnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICQoJ3RkOm50aC1jaGlsZCgnICsgdCArICcpOm5vdCguaW5mb0ZvY3VzKScsICR0aGlzLmNsb3Nlc3QoJ3RhYmxlJykpLmFkZENsYXNzKCdpbmZvUm93T3ZlcicpO1xyXG4gICAgICAgICAgICAgICAgLy9oZWFkZXIgc3R1ZmZcclxuICAgICAgICAgICAgICAgIHZhciAkdGhlSGVhZGVyID0gJCgnIycgKyAkdGhpcy5hdHRyKCdoZWFkZXJzJykuc3BsaXQoJyAnKVswXSk7XHJcbiAgICAgICAgICAgICAgICAkdGhlSGVhZGVyLmFkZENsYXNzKCdoZWFkT3ZlcicpO1xyXG4gICAgICAgICAgICAgICAgdmFyICRoZWFkZXJJbWFnZSA9ICR0aGVIZWFkZXIuZmluZCgnaW1nJyk7XHJcbiAgICAgICAgICAgICAgICAkaGVhZGVySW1hZ2UuYXR0cignc3JjJywgJGhlYWRlckltYWdlLmF0dHIoJ3NyYycpLnJlcGxhY2UoJy5wbmcnLCAnLXJvbGwucG5nJykpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZighaXNDYXRlZ29yeVJvdykge1xyXG4gICAgICAgICAgICAgICAgICAgICRjbG9zZXN0Um93LnJlbW92ZUNsYXNzKCduYW1lJykuYWRkQ2xhc3MoJ25hbWVGb2N1cycpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcclxuICAgICAgICAgICAgdmFyICRjbG9zZXN0Um93ID0gJHRoaXMuY2xvc2VzdCgndHInKTtcclxuICAgICAgICAgICAgdmFyIGlzQ2F0ZWdvcnlSb3cgPSAkY2xvc2VzdFJvdy5oYXNDbGFzcygnY2F0ZWdvcnktcm93Jyk7XHJcblxyXG4gICAgICAgICAgICBpZighaXNDYXRlZ29yeVJvdykge1xyXG4gICAgICAgICAgICAgICAgJGNsb3Nlc3RSb3cucmVtb3ZlQ2xhc3MoJ2luZm9Sb3dPdmVyJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmKCR0aGlzLmhhc0NsYXNzKCdpbmZvJykpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0ID0gcGFyc2VJbnQoJCh0aGlzKS5pbmRleCgpKSArIDE7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoIWlzQ2F0ZWdvcnlSb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICAkdGhpcy5yZW1vdmVDbGFzcygnaW5mb0ZvY3VzJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkKCd0ZDpudGgtY2hpbGQoJyArIHQgKyAnKScsICR0aGlzLmNsb3Nlc3QoJ3RhYmxlJykpLnJlbW92ZUNsYXNzKCdpbmZvUm93T3ZlcicpO1xyXG4gICAgICAgICAgICAgICAgLy9oZWFkZXIgc3R1ZmZcclxuICAgICAgICAgICAgICAgIHZhciAkdGhlSGVhZGVyID0gJCgnIycgKyAkdGhpcy5hdHRyKCdoZWFkZXJzJykuc3BsaXQoJyAnKVswXSk7XHJcbiAgICAgICAgICAgICAgICAkdGhlSGVhZGVyLnJlbW92ZUNsYXNzKCdoZWFkT3ZlcicpO1xyXG4gICAgICAgICAgICAgICAgdmFyICRoZWFkZXJJbWFnZSA9ICR0aGVIZWFkZXIuZmluZCgnaW1nJyk7XHJcbiAgICAgICAgICAgICAgICAkaGVhZGVySW1hZ2UuYXR0cignc3JjJywgJGhlYWRlckltYWdlLmF0dHIoJ3NyYycpLnJlcGxhY2UoJy1yb2xsLnBuZycsICcucG5nJykpXHJcbiAgICAgICAgICAgICAgICA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZighaXNDYXRlZ29yeVJvdykge1xyXG4gICAgICAgICAgICAgICAgICAgICRjbG9zZXN0Um93LnJlbW92ZUNsYXNzKCduYW1lRm9jdXMnKS5hZGRDbGFzcygnbmFtZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG59IiwiaW1wb3J0ICQgZnJvbSBcImpxdWVyeVwiO1xyXG5pbXBvcnQgYWxseSBmcm9tICdhbGx5LmpzL2FsbHknO1xyXG5leHBvcnQgY2xhc3MgT3Blbk1vZGFsIHtcclxuICBjb25zdHJ1Y3RvcigkZWwpIHtcclxuICAgICQoYDxkaXYgY2xhc3M9XCJzdy1tb2RhbF9fb3ZlcmxheVwiPjwvZGl2PmApLmFwcGVuZFRvKFwiYm9keVwiKTtcclxuICAgIHRoaXMuJGVsID0gJGVsO1xyXG5cclxuICAgIGNvbnN0IG1vZGFsSWQgPSBcInN3LW1vZGFsX19cIiArIHRoaXMuJGVsLmF0dHIoJ2lkJyk7XHJcbiAgICBcclxuICAgIHRoaXMuJG1vZGFsID0gdGhpcy4kZWwucGFyZW50cyhcIi5qcy1zdy12aWRlb19fb3ZlcmxheVwiKS5maW5kKFwiLmpzLXN3LW1vZGFsXCIpO1xyXG4gICAgdGhpcy4kbW9kYWwuY2xvbmUoKS5hcHBlbmRUbyhcImJvZHlcIikuYXR0cihcImlkXCIsbW9kYWxJZCkgIC8vd2UncmUgY2xvbmluZyBpdCB0byBiZSB0b3dhcmRzIHRoZSBib3R0b20gdG8gYWNjb3VudCBmb3Igei1pbmRleCBpc3N1ZXNcclxuICAgIHRoaXMuJG1vZGFsLnJlbW92ZSgpO1xyXG4gICAgdGhpcy4kYm9keSA9ICQoXCJib2R5XCIpO1xyXG4gICAgdGhpcy4kbmV3TW9kYWwgPSAkKFwiI1wiICsgbW9kYWxJZCk7XHJcblxyXG4gICAgdGhpcy5kaWFsb2cgPSAgdGhpcy4kbmV3TW9kYWxbMF07XHJcbiAgICB0aGlzLmhpZGRlbkhhbmRsZTtcclxuICAgIHRoaXMuZGlzYWJsZWRIYW5kbGU7XHJcbiAgICBcclxuICAgIHRoaXMuJGNsb3NlID0gdGhpcy4kbmV3TW9kYWwuZmluZChcIi5qcy1zdy1tb2RhbF9fY2xvc2VfX2J0blwiKTtcclxuICAgIHRoaXMudGFicyA9ICB0aGlzLiRuZXdNb2RhbC5maW5kKFwic2VsZWN0LCBpbnB1dCwgdGV4dGFyZWEsIGJ1dHRvbiwgYVwiKTtcclxuICAgIHRoaXMuZmlyc3RUYWIgPSB0aGlzLnRhYnMuZmlyc3QoKTtcclxuICAgIHRoaXMuYmluZEV2ZW50cygpO1xyXG4gIH1cclxuICBiaW5kRXZlbnRzKCkge1xyXG4gICAgdGhpcy4kZWwuY2xpY2soZSA9PiB0aGlzLnRvZ2dsZU1vZGFsKGUpKTtcclxuICAgIHRoaXMuJGNsb3NlLmNsaWNrKGUgPT4gdGhpcy50b2dnbGVNb2RhbChlKSk7XHJcbiAgfVxyXG4gIGNoZWNrQ2xvc2VEaWFsb2coZSkge1xyXG4gICAgaWYgKGUua2V5Q29kZSA9PSAyNyAmJiB0aGlzLiRib2R5Lmhhc0NsYXNzKFwibW9kYWwtb3Blbi1zdy12MlwiKSkge1xyXG4gICAgICAvL1RoZSB2aWRlbyBwbGF5ZXIsIGFuZCBwb3NzaWJseSBvdGhlciBjbGFzc2VzLCBhZGQgZXZlbnRzIHRvIHRoZSBjbG9zZSBidXR0b24uICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBrZXlwcmVzcyBjbG9zZSBhbHNvIGZpcmVzIHRoZXNlIGV2ZW50cy5cclxuICAgICAgJCgnLnN3LW1vZGFsLW9wZW4tc2VzYW1lJykuZmluZCgnLmpzLXN3LW1vZGFsX19jbG9zZV9fYnRuJykudHJpZ2dlcignY2xpY2snKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZU1vZGFsKGUpIHtcclxuICAgIGlmICh0aGlzLiRib2R5Lmhhc0NsYXNzKFwibW9kYWwtb3Blbi1zdy12MlwiKSkge1xyXG4gICAgICAvL2Nsb3NlIHRoZSBkaWFsb2dcclxuICAgICAgLy8gdW5kbyBoaWRpbmcgZWxlbWVudHMgb3V0c2lkZSBvZiB0aGUgZGlhbG9nXHJcbiAgICAgIHRoaXMuaGlkZGVuSGFuZGxlLmRpc2VuZ2FnZSgpO1xyXG4gICAgICAvLyB1bmRvIGRpc2FibGluZyBlbGVtZW50cyBvdXRzaWRlIG9mIHRoZSBkaWFsb2dcclxuICAgICAgdGhpcy5kaXNhYmxlZEhhbmRsZS5kaXNlbmdhZ2UoKTtcclxuXHJcbiAgICAgIHRoaXMuJGJvZHkucmVtb3ZlQ2xhc3MoXCJtb2RhbC1vcGVuLXN3LXYyXCIpO1xyXG4gICAgICB0aGlzLiRlbC5mb2N1cygpO1xyXG5cclxuICAgICAgJChlLmN1cnJlbnRUYXJnZXQpLmNsb3Nlc3QoJy5zdy1tb2RhbCcpLnJlbW92ZUNsYXNzKCdzdy1tb2RhbC1vcGVuLXNlc2FtZScpO1xyXG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBlID0+IHRoaXMuY2hlY2tDbG9zZURpYWxvZyhlKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy9vcGVuIHRoZSBkaWFsb2dcclxuICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgbm8gZWxlbWVudCBvdXRzaWRlIG9mIHRoZSBkaWFsb2dcclxuICAgICAgLy8gY2FuIGJlIGludGVyYWN0ZWQgd2l0aCB3aGlsZSB0aGUgZGlhbG9nIGlzIHZpc2libGUuXHJcbiAgICAgIC8vIFRoaXMgbWVhbnMgd2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgVGFiIGFuZCBTaGlmdCtUYWIsXHJcbiAgICAgIC8vIGJ1dCBjYW4gZGVmZXIgdGhhdCB0byB0aGUgYnJvd3NlcidzIGludGVybmFsIGhhbmRsaW5nLlxyXG4gICAgICB0aGlzLmRpc2FibGVkSGFuZGxlID0gYWxseS5tYWludGFpbi5kaXNhYmxlZCh7XHJcbiAgICAgICAgZmlsdGVyOiB0aGlzLmRpYWxvZyxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyBNYWtlIHN1cmUgdGhhdCBubyBlbGVtZW50IG91dHNpZGUgb2YgdGhlIGRpYWxvZ1xyXG4gICAgICAvLyBpcyBleHBvc2VkIHZpYSB0aGUgQWNjZXNzaWJpbGl0eSBUcmVlLCB0byBwcmV2ZW50XHJcbiAgICAgIC8vIHNjcmVlbiByZWFkZXJzIGZyb20gbmF2aWdhdGluZyB0byBjb250ZW50IGl0IHNob3VsZG4ndFxyXG4gICAgICAvLyBiZSBzZWVpbmcgd2hpbGUgdGhlIGRpYWxvZyBpcyBvcGVuLiBTZWUgZXhhbXBsZTpcclxuICAgICAgLy8gaHR0cHM6Ly9tYXJjeXN1dHRvbi5jb20vc2xpZGVzL21vYmlsZS1hMTF5LXNlYXR0bGVqcy8jLzM2XHJcbiAgICAgIHRoaXMuaGlkZGVuSGFuZGxlID0gYWxseS5tYWludGFpbi5oaWRkZW4oe1xyXG4gICAgICAgIGZpbHRlcjogdGhpcy5kaWFsb2csXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy9nZXQgdGhlIG1vZGFsIHdpbmRvdyB0aGluZ2VyLCBhbmQgbWFyayBpdFxyXG5cclxuXHJcbiAgICAgICQoJyNzdy1tb2RhbF9fJyArIGUuY3VycmVudFRhcmdldC5pZCkuYWRkQ2xhc3MoJ3N3LW1vZGFsLW9wZW4tc2VzYW1lJyk7XHJcbiAgICAgIHRoaXMuJGVsLmJsdXIoKTtcclxuICAgICAgdGhpcy4kYm9keS5hZGRDbGFzcyhcIm1vZGFsLW9wZW4tc3ctdjJcIik7XHJcblxyXG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLmZpcnN0VGFiLmZvY3VzKCksIDUwNSk7IC8vd2UgYWRkIGEgdGltZXIgdG8gYWNjb3VudCBmb3IgdGhlIGNzcyBhbmltYXRpb24gdGhhdCBkZWxheXMgdGhpcyBlbGVtZW50IGJlaW5nIGZvY3VzYWJsZVxyXG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBlID0+IHRoaXMuY2hlY2tDbG9zZURpYWxvZyhlKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgJCBmcm9tICdqcXVlcnknO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2lnbnVwKHNlbGVjdG9yKSB7XHJcbiAgICBsZXQgJHNpZ251cENvbnRhaW5lciA9IHNlbGVjdG9yLFxyXG4gICAgICAgICRzaWdudXBJbnB1dCA9ICRzaWdudXBDb250YWluZXIuZmluZCgnLnN3LXNpZ251cF9fZmllbGQnKSxcclxuICAgICAgICAkc2lnbnVwTGFiZWwgPSAkc2lnbnVwQ29udGFpbmVyLmZpbmQoJy5zdy1zaWdudXBfX2xhYmVsJyksXHJcbiAgICAgICAgJHNpZ251cEJ1dHRvbiA9ICRzaWdudXBDb250YWluZXIuZmluZCgnLnN3LXNpZ251cF9fYnV0dG9uJyksXHJcbiAgICAgICAgJHNpZ251cERpc2NsYWltZXIgPSAkc2lnbnVwQ29udGFpbmVyLmZpbmQoJy5zdy1zaWdudXBfX2Rpc2NsYWltZXInKSxcclxuICAgICAgICAkc2lnbnVwRXJyb3IgPSAkc2lnbnVwQ29udGFpbmVyLmZpbmQoJy5zdy1zaWdudXBfX2Vycm9yJyksXHJcbiAgICAgICAgJHNpZ251cEVycm9yRW1haWwgPSAkc2lnbnVwQ29udGFpbmVyLmZpbmQoJy5zdy1zaWdudXBfX2Vycm9yLWVtYWlsJyksXHJcbiAgICAgICAgJHNpZ251cEVycm9yUGhvbmUgPSAkc2lnbnVwQ29udGFpbmVyLmZpbmQoJy5zdy1zaWdudXBfX2Vycm9yLXBob25lJyksXHJcbiAgICAgICAgJHNpZ251cE1lc3NhZ2VIb2xkZXIgPSAkc2lnbnVwQ29udGFpbmVyLmZpbmQoJy5zdy1zaWdudXBfX21lc3NhZ2UnKSxcclxuICAgICAgICBtZXNzYWdlU3VjY2VzcyA9ICRzaWdudXBDb250YWluZXIuZGF0YSgnbXNnLXN1Y2Nlc3MnKSxcclxuICAgICAgICBoYXNJbnB1dEJlZW5Gb2N1c2VkID0gZmFsc2UsXHJcbiAgICAgICAga2V5Y29kZXMgPSB7RU5URVI6MTMgfTtcclxuXHJcbiAgICAgICAgdmFyIGVtYWlsUmVnID0gL14oW1xcdy1dKyg/OlxcLltcXHctXSspKilAKCg/OltcXHctXStcXC4pKlxcd1tcXHctXXswLDY2fSlcXC4oW2Etel17Miw2fSg/OlxcLlthLXpdezJ9KT8pJC9pO1xyXG4gICAgICAgIHZhciBwaG9uZVJlZyA9IC9eKChcXCtbMS05XXsxLDR9WyBcXC1dKil8KFxcKFswLTldezIsM31cXClbIFxcLV0qKXwoWzAtOV17Miw0fSlbIFxcLV0qKSo/WzAtOV17Myw0fT9bIFxcLV0qWzAtOV17Myw0fT8kLztcclxuXHJcbiAgICAkc2lnbnVwSW5wdXQub24oJ2ZvY3VzJywgZnVuY3Rpb24oZSl7XHJcbiAgICAgICAgJCh0aGlzKS5hdHRyKCdwbGFjZWhvbGRlcicsJycpO1xyXG4gICAgICAgICRzaWdudXBMYWJlbC5yZW1vdmVDbGFzcygndmlzdWFsbHloaWRkZW4nKTtcclxuICAgICAgICAkc2lnbnVwRGlzY2xhaW1lci5hZGRDbGFzcygnaXMtc2hvd24nKTtcclxuICAgICAgICBoYXNJbnB1dEJlZW5Gb2N1c2VkID0gdHJ1ZTtcclxuICAgIH0pLm9uKCdmb2N1c291dCcsIGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgdmFsaWRhdGVJbnB1dEZpZWxkKCk7ICAgICAgICBcclxuICAgIH0pLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIGlmKGUua2V5Q29kZSA9PT0ga2V5Y29kZXMuRU5URVIpe1xyXG4gICAgICAgICAgICAkc2lnbnVwQnV0dG9uLnRyaWdnZXIoJ2NsaWNrJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgJHNpZ251cEJ1dHRvbi5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgJHNpZ251cElucHV0LmF0dHIoJ3BsYWNlaG9sZGVyJywgJHNpZ251cElucHV0LmF0dHIoJ2FyaWEtbGFiZWwnKSk7XHJcbiAgICAgICAgJHNpZ251cExhYmVsLmFkZENsYXNzKCd2aXN1YWxseWhpZGRlbicpO1xyXG4gICAgICAgICRzaWdudXBFcnJvckVtYWlsLnJlbW92ZUNsYXNzKCdlcnJvci1zaG93bicpO1xyXG4gICAgICAgICRzaWdudXBFcnJvclBob25lLnJlbW92ZUNsYXNzKCdlcnJvci1zaG93bicpO1xyXG4gICAgICAgICRzaWdudXBJbnB1dC5hdHRyKCdhcmlhLWRlc2NyaWJlZGJ5JywgXCJzdy1zaWdudXBfX2Rpc2NsYWltZXJcIik7XHJcbiAgICAgICAgaGFzSW5wdXRCZWVuRm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKHZhbGlkYXRlSW5wdXRGaWVsZCgpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHN1Ym1pdFVzZXJJbnB1dCgpO1xyXG4gICAgICAgICAgICAkc2lnbnVwRGlzY2xhaW1lci5yZW1vdmVDbGFzcygnaXMtc2hvd24nKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHRcclxuXHRmdW5jdGlvbiBzdWJtaXRVc2VySW5wdXQoKSB7XHJcblx0XHR2YXIgdXNlclRleHQgPSAkc2lnbnVwSW5wdXQudmFsKCk7XHJcbiAgICAgICAgdmFyIGpzb25EYXRhID0ge307XHJcbiAgICAgICAganNvbkRhdGFbXCJzdWJzY3JpYmVWYWx1ZVwiXSA9IHVzZXJUZXh0O1xyXG5cclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB0eXBlOiBcIlBPU1RcIixcclxuICAgICAgICAgICAgdXJsOiAkKCdib2R5JykuZGF0YSgnc2lnbnVwLWVuZC1wb2ludCcpLFxyXG4gICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShqc29uRGF0YSksXHJcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcIixcclxuICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvblwiLFxyXG4gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3VjY2VzcyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICRzaWdudXBDb250YWluZXIuYWRkQ2xhc3MoJ2hhcy1zdWNjZWVkZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICAkc2lnbnVwTWVzc2FnZUhvbGRlci5odG1sKG1lc3NhZ2VTdWNjZXNzKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJHNpZ251cENvbnRhaW5lci5yZW1vdmVDbGFzcygnaGFzLXN1Y2NlZWRlZCcpLmFkZENsYXNzKCdoYXMtZmFpbGVkJylcclxuICAgICAgICAgICAgICAgICAgICAkc2lnbnVwTWVzc2FnZUhvbGRlci5odG1sKHJlc3BvbnNlLmVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2ZhaWw6ICcgKyBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cdH1cclxuXHJcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUlucHV0RmllbGQoKSB7XHJcbiAgICAgICAgLy9odHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zMDIxMzIyMC92YWxpZGF0ZS1waG9uZS1udW1iZXItZW1haWwtYWRkcmVzcy1pbi1zYW1lLWlucHV0LWZpZWxkXHJcbiAgICAgICAgaWYoZW1haWxSZWcudGVzdCgkc2lnbnVwSW5wdXQudmFsKCkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgJHNpZ251cEVycm9yLnJlbW92ZUNsYXNzKCdlcnJvci1zaG93bicpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHBob25lUmVnLnRlc3QoJHNpZ251cElucHV0LnZhbCgpKSlcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgICRzaWdudXBFcnJvci5yZW1vdmVDbGFzcygnZXJyb3Itc2hvd24nKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAkc2lnbnVwRXJyb3IuYWRkQ2xhc3MoJ2Vycm9yLXNob3duJyk7XHJcbiAgICAgICAgJHNpZ251cElucHV0LmF0dHIoJ2FyaWEtZGVzY3JpYmVkYnknLCBcInN3LXNpZ251cF9fZXJyb3JcIik7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxufSIsImltcG9ydCBnZXRTdGlja3lIZWFkZXJIZWlnaHQgZnJvbSBcIi4vZ2V0U3RpY2t5SGVhZGVySGVpZ2h0LmpzXCI7XHJcbmltcG9ydCAkIGZyb20gXCJqcXVlcnlcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0aWNreUhlYWRlcihzdGlja3lFbGVtZW50KSB7XHJcbiAgICBsZXQgc3RpY2t5RWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHN0aWNreUVsZW1lbnQpWzBdLFxyXG4gICAgICAgIHNjcm9sbFRvcCA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wLFxyXG4gICAgICAgIGhlYWRlckhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgIGlmKHR5cGVvZiBzdGlja3lFbCA9PT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBcclxuXHJcbiAgICAgICAgbGV0IHN0aWNreVRvcCA9IHN0aWNreUVsLm9mZnNldFRvcCArIHN0aWNreUVsLm9mZnNldEhlaWdodDtcclxuXHJcbiAgICAgICAgaGVhZGVySGVpZ2h0ID0gZ2V0U3RpY2t5SGVhZGVySGVpZ2h0KCk7XHJcbiAgICAgICAgaWYgKCFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnbW9iaWxlLW5hdi1vcGVuJykgJiYgIWRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCdibGFuay1sYXlvdXQnKSkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLm1hcmdpblRvcCA9IGhlYWRlckhlaWdodCArICdweCc7XHJcbiAgICAgICAgICAgIC8vZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW5Ub3AgPSAnODFweCc7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdkb2N1bWVudC5ib2R5LnN0eWxlLm1hcmdpblRvcD0nICsgaGVhZGVySGVpZ2h0KTtcclxuICAgICAgICAgICAgc3RpY2t5RWwuY2xhc3NMaXN0LmFkZChcInN3LWhlYWRlcnBhbmUtLXN0aWNreVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGlmICh3aW5kb3cucGFnZVlPZmZzZXQgPj0gaGVhZGVySGVpZ2h0ICYmICFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnbW9iaWxlLW5hdi1vcGVuJykgJiYgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ2lzLWhvbWVwYWdlJykpIHsgIFxyXG4gICAgICAgICAgICAvLyBpZiBhIG1vYmlsZSB1c2VyIHN0YXJ0cyB0byBzY3JvbGwgcmVtb3ZlIGhvdmVyIG1lbnUgXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnaXMtaG9tZXBhZ2UnKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBkb2N1bWVudC5SZWFkeSBpcyB0b28gZWFybHksIG5lZWQgdG8gd2FpdCBmb3Igc2l0ZWNvcmUgdG8gaW5qZWN0IGFsbCBpdHMgc3R1ZmZcclxuICAgIHdpbmRvdy5vbmxvYWQ9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAvLyBTaGlmdCB0aGUgaGVhZGVyIGRvd24gcGFzdCB0aGUgaGVpZ2h0IG9mIHRoZSBFeHBlcmllbmNlIEVkaXRvciBQYW5lbCAgICBcclxuICAgICAgICBpZiAoZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ2lzLXBhZ2UtZWRpdG9yJykgfHxcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoJ2lzLXBhZ2UtcHJldmlldycpKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NjQ3Jvc3NQaWVjZScpO1xyXG4gICAgICAgICAgICBpZih0YXJnZXQgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAvLyBmaXJzdCB0aW1lIGluaXRpYWxpemVcclxuICAgICAgICAgICAgICAgICQoJy5zdy1oZWFkZXJwYW5lJykuY3NzKCd0b3AnLCB0YXJnZXQuc3R5bGUuaGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8gY29uc3RhbnQgb2JzZXJ2ZXIgZm9yIG9wZW4gY2xvc2Ugb2YgdGhlIGV4cGVyaWVuY2UgZWRpdG9yXHJcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihtdXRhdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBtdXRhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihtdXRhdGlvblJlY29yZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQoJy5zdy1oZWFkZXJwYW5lJykuY3NzKCd0b3AnLCB0YXJnZXQuc3R5bGUuaGVpZ2h0KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pOyAgICBcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLm9ic2VydmUodGFyZ2V0LCB7IGF0dHJpYnV0ZXMgOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXIgOiBbJ3N0eWxlJ10gfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIHdhaXRGb3JTY0Nyb3NzUGllY2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gICAgXHJcbiAgICB9O1xyXG4gXHJcblxyXG4gICAgICBmdW5jdGlvbiB3YWl0Rm9yU2NDcm9zc1BpZWNlKCl7XHJcbiAgICAgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzY0Nyb3NzUGllY2UnKTtcclxuICAgICAgICBpZih0YXJnZXQgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgIC8vIGZpcnN0IHRpbWUgaW5pdGlhbGl6ZVxyXG4gICAgICAgICAgICAkKCcuc3ctaGVhZGVycGFuZScpLmNzcygndG9wJywgdGFyZ2V0LnN0eWxlLmhlaWdodCk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBjb25zdGFudCBvYnNlcnZlciBmb3Igb3BlbiBjbG9zZSBvZiB0aGUgZXhwZXJpZW5jZSBlZGl0b3JcclxuICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24obXV0YXRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBtdXRhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihtdXRhdGlvblJlY29yZCkge1xyXG4gICAgICAgICAgICAgICAgJCgnLnN3LWhlYWRlcnBhbmUnKS5jc3MoJ3RvcCcsIHRhcmdldC5zdHlsZS5oZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pOyAgICBcclxuICAgICAgICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXQsIHsgYXR0cmlidXRlcyA6IHRydWUsIGF0dHJpYnV0ZUZpbHRlciA6IFsnc3R5bGUnXSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIHdhaXRGb3JTY0Nyb3NzUGllY2UoKTt9LCA1MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgLy8gZnVuY3Rpb24gaGFuZGxlU3RpY2t5SGVhZGVyKCkge1xyXG4gICAgLy8gICAgIGlmICh3aW5kb3cucGFnZVlPZmZzZXQgPj0gaGVhZGVySGVpZ2h0ICYmICFkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygnbW9iaWxlLW5hdi1vcGVuJykpIHsgICAgIFxyXG5cclxuICAgIC8vICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5tYXJnaW5Ub3AgPSBoZWFkZXJIZWlnaHQgKyAncHgnO1xyXG4gICAgLy8gICAgICAgICBzdGlja3lFbC5jbGFzc0xpc3QuYWRkKFwic3ctaGVhZGVycGFuZS0tc3RpY2t5XCIpO1xyXG4gICAgLy8gICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLWhvbWVwYWdlJyk7XHJcbiAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgIC8vICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XHJcbiAgICAvLyAgICAgICAgIHN0aWNreUVsLmNsYXNzTGlzdC5yZW1vdmUoXCJzdy1oZWFkZXJwYW5lLS1zdGlja3lcIik7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG5cclxufSIsImltcG9ydCAkIGZyb20gXCJqcXVlcnlcIjtcclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RvcFBhZ2VKdW1wRm9ySGFzaFVybCgpIHtcclxuICAgIHZhciBzY3JvbGxUb3BQb3M7XHJcbiAgICB3aW5kb3cub25sb2FkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgc2Nyb2xsVG9wUG9zID0gd2luZG93LnNjcm9sbFk7XHJcbiAgICB9XHJcblxyXG4gICAgd2luZG93Lm9uc2Nyb2xsID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgc2Nyb2xsVG9wUG9zID0gd2luZG93LnNjcm9sbFk7XHJcbiAgICB9XHJcbiAgICAkKCdbcm9sZT10YWJdJykub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gJCh0aGlzKS5hdHRyKCdocmVmJyk7XHJcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKHtsZWZ0OiAwLCB0b3A6IHNjcm9sbFRvcFBvcywgYmVoYXZpb3I6ICdzbW9vdGgnfSk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSk7XHJcbn1cclxuIiwiLypcclxuKiAgIFRoaXMgY29udGVudCBpcyBsaWNlbnNlZCBhY2NvcmRpbmcgdG8gdGhlIFczQyBTb2Z0d2FyZSBMaWNlbnNlIGF0XHJcbiogICBodHRwczovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDE1L2NvcHlyaWdodC1zb2Z0d2FyZS1hbmQtZG9jdW1lbnRcclxuKi9cclxuaW1wb3J0IGdldFN0aWNreUhlYWRlckhlaWdodCBmcm9tIFwiLi9nZXRTdGlja3lIZWFkZXJIZWlnaHQuanNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRhYnMoKSB7XHJcbiAgdmFyIHRhYmxpc3QgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT1cInRhYmxpc3RcIl0nKVswXTtcclxuICB2YXIgdGFicztcclxuICB2YXIgcGFuZWxzO1xyXG4gIHZhciBkZWxheSA9IGRldGVybWluZURlbGF5KCk7XHJcbiAgdmFyIHdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XHJcblxyXG4gIGdlbmVyYXRlQXJyYXlzKCk7XHJcblxyXG4gIGZ1bmN0aW9uIGdlbmVyYXRlQXJyYXlzKCkge1xyXG4gICAgdGFicyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tyb2xlPVwidGFiXCJdJyk7XHJcbiAgICBwYW5lbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbcm9sZT1cInRhYnBhbmVsXCJdJyk7XHJcblxyXG4gICAgLy8gdmVsaXIgYWRkaXRpb25cclxuICAgIC8vIGlmIG1vcmUgdGhhbiAzIHRhYnMsIG1ha2Ugc21hbGxlclxyXG4gICAgaWYgKHRhYnMubGVuZ3RoID49IDMpIHtcclxuICAgICAgW10uZm9yRWFjaC5jYWxsKHRhYnMsIGZ1bmN0aW9uKHRhYikge1xyXG4gICAgICAgIHRhYi5jbGFzc0xpc3QuYWRkKFwic3ctdGFic19faXRlbS0tc21hbGxcIik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gRm9yIGVhc3kgcmVmZXJlbmNlXHJcbiAgdmFyIGtleXMgPSB7XHJcbiAgICBlbmQ6IDM1LFxyXG4gICAgaG9tZTogMzYsXHJcbiAgICBsZWZ0OiAzNyxcclxuICAgIHVwOiAzOCxcclxuICAgIHJpZ2h0OiAzOSxcclxuICAgIGRvd246IDQwLFxyXG4gICAgZGVsZXRlOiA0NlxyXG4gIH07XHJcblxyXG4gIC8vIEFkZCBvciBzdWJzdHJhY3QgZGVwZW5pZ24gb24ga2V5IHByZXNzZWRcclxuICB2YXIgZGlyZWN0aW9uID0ge1xyXG4gICAgMzc6IC0xLFxyXG4gICAgMzg6IC0xLFxyXG4gICAgMzk6IDEsXHJcbiAgICA0MDogMVxyXG4gIH07XHJcblxyXG4gIC8vIEJpbmQgbGlzdGVuZXJzXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJzLmxlbmd0aDsgKytpKSB7XHJcbiAgICBhZGRMaXN0ZW5lcnMoaSk7XHJcbiAgfVxyXG5cclxuICBhY3RpdmF0ZVRhYkJhc2VkT25VcmxIYXNoKCk7XHJcblxyXG4gIGZ1bmN0aW9uIGFjdGl2YXRlVGFiQmFzZWRPblVybEhhc2goKSB7XHJcbiAgICB2YXIgaGFzaCA9IGxvY2F0aW9uLmhhc2g7XHJcbiAgICBpZiAoIWhhc2gpIHtcclxuICAgICAgdmFyIGFjdGl2ZVRhYkNvbGxlY3Rpb24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG4gICAgICAgIFwiW2FyaWEtc2VsZWN0ZWQ9dHJ1ZV1bcm9sZT10YWJdXCJcclxuICAgICAgKTtcclxuICAgICAgaWYgKGFjdGl2ZVRhYkNvbGxlY3Rpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHZhciB0YWJUb0FjdGl2aWF0ZSA9IGFjdGl2ZVRhYkNvbGxlY3Rpb25bMF07XHJcbiAgICAgICAgYWN0aXZhdGVUYWIodGFiVG9BY3RpdmlhdGUsIGZhbHNlLCB0cnVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIGxua3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhW2hyZWY9XCInICsgaGFzaCArICdcIl0nKTtcclxuICAgIGlmICghbG5rcyB8fCBsbmtzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB2YXIgYWN0aXZlVGFiID0gbG5rc1swXTtcclxuICAgIGlmIChhY3RpdmVUYWIuY2xhc3NMaXN0LmNvbnRhaW5zKFwic3ctdGFic19faXRlbVwiKSkge1xyXG4gICAgICBhY3RpdmVUYWIuY2xpY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGFkZExpc3RlbmVycyhpbmRleCkge1xyXG4gICAgdGFic1tpbmRleF0uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNsaWNrRXZlbnRMaXN0ZW5lcik7XHJcbiAgICB0YWJzW2luZGV4XS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCBrZXlkb3duRXZlbnRMaXN0ZW5lcik7XHJcbiAgICB0YWJzW2luZGV4XS5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwga2V5dXBFdmVudExpc3RlbmVyKTtcclxuXHJcbiAgICAvLyBCdWlsZCBhbiBhcnJheSB3aXRoIGFsbCB0YWJzICg8YnV0dG9uPnMpIGluIGl0XHJcbiAgICB0YWJzW2luZGV4XS5pbmRleCA9IGluZGV4O1xyXG4gIH1cclxuXHJcbiAgLy8gV2hlbiBhIHRhYiBpcyBjbGlja2VkLCBhY3RpdmF0ZVRhYiBpcyBmaXJlZCB0byBhY3RpdmF0ZSBpdFxyXG4gIGZ1bmN0aW9uIGNsaWNrRXZlbnRMaXN0ZW5lcihldmVudCkge1xyXG4gICAgLy92ZWxpciBhZGRpdGlvbiBoYXZlIHRvIGNoZWNrIGZvciBzcGFuIGNsYXNzIHdpdGggYWRkaXRpb24gb2Ygc3ZnXHJcbiAgICB2YXIgdGFiID0gZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcInN3LXRhYnNfX2l0ZW1cIilcclxuICAgICAgPyBldmVudC50YXJnZXRcclxuICAgICAgOiBldmVudC50YXJnZXQuY2xvc2VzdChcIi5zdy10YWJzX19pdGVtXCIpO1xyXG5cclxuICAgIGFjdGl2YXRlVGFiKHRhYiwgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgLy8gSGFuZGxlIGtleWRvd24gb24gdGFic1xyXG4gIGZ1bmN0aW9uIGtleWRvd25FdmVudExpc3RlbmVyKGV2ZW50KSB7XHJcbiAgICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZTtcclxuXHJcbiAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICAvL3Rha2luZyBvdXQgZm9yIFNSLTUxMlxyXG4gICAgICAvLyBjYXNlIGtleXMuZW5kOlxyXG4gICAgICAvLyAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIC8vICAgLy8gQWN0aXZhdGUgbGFzdCB0YWJcclxuICAgICAgLy8gICBhY3RpdmF0ZVRhYih0YWJzW3RhYnMubGVuZ3RoIC0gMV0pO1xyXG4gICAgICAvLyAgIGJyZWFrO1xyXG4gICAgICAvLyBjYXNlIGtleXMuaG9tZTpcclxuICAgICAgLy8gICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAvLyAgIC8vIEFjdGl2YXRlIGZpcnN0IHRhYlxyXG4gICAgICAvLyAgIGFjdGl2YXRlVGFiKHRhYnNbMF0pO1xyXG4gICAgICAvLyAgIGJyZWFrO1xyXG5cclxuICAgICAgLy8gVXAgYW5kIGRvd24gYXJlIGluIGtleWRvd25cclxuICAgICAgLy8gYmVjYXVzZSB3ZSBuZWVkIHRvIHByZXZlbnQgcGFnZSBzY3JvbGwgPjopXHJcbiAgICAgIGNhc2Uga2V5cy51cDpcclxuICAgICAgY2FzZSBrZXlzLmRvd246XHJcbiAgICAgICAgZGV0ZXJtaW5lT3JpZW50YXRpb24oZXZlbnQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gSGFuZGxlIGtleXVwIG9uIHRhYnNcclxuICBmdW5jdGlvbiBrZXl1cEV2ZW50TGlzdGVuZXIoZXZlbnQpIHtcclxuICAgIHZhciBrZXkgPSBldmVudC5rZXlDb2RlO1xyXG5cclxuICAgIHN3aXRjaCAoa2V5KSB7XHJcbiAgICAgIGNhc2Uga2V5cy5sZWZ0OlxyXG4gICAgICBjYXNlIGtleXMucmlnaHQ6XHJcbiAgICAgICAgZGV0ZXJtaW5lT3JpZW50YXRpb24oZXZlbnQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIGtleXMuZGVsZXRlOlxyXG4gICAgICAgIGRldGVybWluZURlbGV0YWJsZShldmVudCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBXaGVuIGEgdGFibGlzdMOi4oKs4oSicyBhcmlhLW9yaWVudGF0aW9uIGlzIHNldCB0byB2ZXJ0aWNhbCxcclxuICAvLyBvbmx5IHVwIGFuZCBkb3duIGFycm93IHNob3VsZCBmdW5jdGlvbi5cclxuICAvLyBJbiBhbGwgb3RoZXIgY2FzZXMgb25seSBsZWZ0IGFuZCByaWdodCBhcnJvdyBmdW5jdGlvbi5cclxuICBmdW5jdGlvbiBkZXRlcm1pbmVPcmllbnRhdGlvbihldmVudCkge1xyXG4gICAgdmFyIGtleSA9IGV2ZW50LmtleUNvZGU7XHJcbiAgICB2YXIgdmVydGljYWwgPSB0YWJsaXN0LmdldEF0dHJpYnV0ZShcImFyaWEtb3JpZW50YXRpb25cIikgPT0gXCJ2ZXJ0aWNhbFwiO1xyXG4gICAgdmFyIHByb2NlZWQgPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodmVydGljYWwpIHtcclxuICAgICAgaWYgKGtleSA9PT0ga2V5cy51cCB8fCBrZXkgPT09IGtleXMuZG93bikge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgcHJvY2VlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChrZXkgPT09IGtleXMubGVmdCB8fCBrZXkgPT09IGtleXMucmlnaHQpIHtcclxuICAgICAgICBwcm9jZWVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChwcm9jZWVkKSB7XHJcbiAgICAgIHN3aXRjaFRhYk9uQXJyb3dQcmVzcyhldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBFaXRoZXIgZm9jdXMgdGhlIG5leHQsIHByZXZpb3VzLCBmaXJzdCwgb3IgbGFzdCB0YWJcclxuICAvLyBkZXBlbmluZyBvbiBrZXkgcHJlc3NlZFxyXG4gIGZ1bmN0aW9uIHN3aXRjaFRhYk9uQXJyb3dQcmVzcyhldmVudCkge1xyXG4gICAgdmFyIHByZXNzZWQgPSBldmVudC5rZXlDb2RlO1xyXG5cclxuICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGFicy5sZW5ndGg7IHgrKykge1xyXG4gICAgICB0YWJzW3hdLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBmb2N1c0V2ZW50SGFuZGxlcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRpcmVjdGlvbltwcmVzc2VkXSkge1xyXG4gICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgICBpZiAodGFyZ2V0LmluZGV4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAodGFic1t0YXJnZXQuaW5kZXggKyBkaXJlY3Rpb25bcHJlc3NlZF1dKSB7XHJcbiAgICAgICAgICB0YWJzW3RhcmdldC5pbmRleCArIGRpcmVjdGlvbltwcmVzc2VkXV0uZm9jdXMoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHByZXNzZWQgPT09IGtleXMubGVmdCB8fCBwcmVzc2VkID09PSBrZXlzLnVwKSB7XHJcbiAgICAgICAgICBmb2N1c0xhc3RUYWIoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHByZXNzZWQgPT09IGtleXMucmlnaHQgfHwgcHJlc3NlZCA9PSBrZXlzLmRvd24pIHtcclxuICAgICAgICAgIGZvY3VzRmlyc3RUYWIoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEFjdGl2YXRlcyBhbnkgZ2l2ZW4gdGFiIHBhbmVsXHJcbiAgZnVuY3Rpb24gYWN0aXZhdGVUYWIodGFiLCBzZXRGb2N1cywgcHJldmVudFNjcm9sbCkge1xyXG4gICAgaWYgKHRhYi5jbGFzc0xpc3QuY29udGFpbnMoXCJzdy10YWJzX19pdGVtLS1ub2pzXCIpKSB7XHJcbiAgICAgIGRvY3VtZW50LmxvY2F0aW9uID0gdGFiLmdldEF0dHJpYnV0ZShcImhyZWZcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBzZXRGb2N1cyA9IHNldEZvY3VzIHx8IHRydWU7XHJcbiAgICBwcmV2ZW50U2Nyb2xsID0gcHJldmVudFNjcm9sbCB8fCBmYWxzZTtcclxuICAgIC8vIERlYWN0aXZhdGUgYWxsIG90aGVyIHRhYnNcclxuICAgIGRlYWN0aXZhdGVUYWJzKCk7XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRhYmluZGV4IGF0dHJpYnV0ZVxyXG4gICAgdGFiLnJlbW92ZUF0dHJpYnV0ZShcInRhYmluZGV4XCIpO1xyXG5cclxuICAgIC8vIFNldCB0aGUgdGFiIGFzIHNlbGVjdGVkXHJcbiAgICB0YWIuc2V0QXR0cmlidXRlKFwiYXJpYS1zZWxlY3RlZFwiLCBcInRydWVcIik7XHJcblxyXG4gICAgLy92ZWxpciBhZGRpdGlvbiAtLSBzZXQgdGFibGlzdCBzY3JvbGwgcG9zaXRpb24gc28gdGhhdCBjdXJyZW50IHRhYiBpcyBjZW50ZXJlZCBvbiBtb2JpbGVcclxuICAgIGhhbmRsZVRhYlNjcm9sbCh0YWIpO1xyXG4gICAgLy8gR2V0IHRoZSB2YWx1ZSBvZiBhcmlhLWNvbnRyb2xzICh3aGljaCBpcyBhbiBJRClcclxuICAgIHZhciBjb250cm9scyA9IHRhYi5nZXRBdHRyaWJ1dGUoXCJhcmlhLWNvbnRyb2xzXCIpO1xyXG5cclxuICAgIGlmIChjb250cm9scykge1xyXG4gICAgICAgIC8vIFJlbW92ZSBoaWRkZW4gYXR0cmlidXRlIGZyb20gdGFiIHBhbmVsIHRvIG1ha2UgaXQgdmlzaWJsZVxyXG4gICAgICAgIHZhciB0YWJDb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29udHJvbHMpO1xyXG4gICAgICAgIGlmICh0YWJDb250ZW50ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGFiQ29udGVudC5yZW1vdmVBdHRyaWJ1dGUoXCJoaWRkZW5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vVmVsaXIgY3VzdG9tXHJcbiAgICB0YWJDaGFuZ2VUYWJBd2FyZUNvbnRlbnQodGFiKTtcclxuXHJcbiAgICAvLyBTZXQgZm9jdXMgd2hlbiByZXF1aXJlZFxyXG4gICAgaWYgKHNldEZvY3VzKSB7XHJcbiAgICAgIHRhYi5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcHJldmVudFNjcm9sbCkge1xyXG4gICAgICAvLyBzY3JvbGwgcGFnZSB0byB0aGUgYWN0aXZlL3RhcmdldCBhY2NvcmRpb25cclxuICAgICAgdmFyIHRhcmdldFJlY3QgPSB0YWIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXHJcbiAgICAgICAgc2Nyb2xsVG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XHJcblxyXG4gICAgICB3aW5kb3cuc2Nyb2xsVG8oe1xyXG4gICAgICAgIGxlZnQ6IDAsXHJcbiAgICAgICAgdG9wOiB0YXJnZXRSZWN0LnRvcCArIHNjcm9sbFRvcCAtIGdldFN0aWNreUhlYWRlckhlaWdodCgpLFxyXG4gICAgICAgIGJlaGF2aW9yOiBcInNtb290aFwiXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gRGVhY3RpdmF0ZSBhbGwgdGFicyBhbmQgdGFiIHBhbmVsc1xyXG4gIGZ1bmN0aW9uIGRlYWN0aXZhdGVUYWJzKCkge1xyXG4gICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0YWJzLmxlbmd0aDsgdCsrKSB7XHJcbiAgICAgIHRhYnNbdF0uc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIiwgXCItMVwiKTtcclxuICAgICAgdGFic1t0XS5zZXRBdHRyaWJ1dGUoXCJhcmlhLXNlbGVjdGVkXCIsIFwiZmFsc2VcIik7XHJcbiAgICAgIHRhYnNbdF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIGZvY3VzRXZlbnRIYW5kbGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBwID0gMDsgcCA8IHBhbmVscy5sZW5ndGg7IHArKykge1xyXG4gICAgICBwYW5lbHNbcF0uc2V0QXR0cmlidXRlKFwiaGlkZGVuXCIsIFwiaGlkZGVuXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gTWFrZSBhIGd1ZXNzXHJcbiAgZnVuY3Rpb24gZm9jdXNGaXJzdFRhYigpIHtcclxuICAgIHRhYnNbMF0uZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIC8vIE1ha2UgYSBndWVzc1xyXG4gIGZ1bmN0aW9uIGZvY3VzTGFzdFRhYigpIHtcclxuICAgIHRhYnNbdGFicy5sZW5ndGggLSAxXS5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgLy8gRGV0ZWN0IGlmIGEgdGFiIGlzIGRlbGV0YWJsZVxyXG4gIGZ1bmN0aW9uIGRldGVybWluZURlbGV0YWJsZShldmVudCkge1xyXG4gICAgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xyXG5cclxuICAgIGlmICh0YXJnZXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1kZWxldGFibGVcIikgIT09IG51bGwpIHtcclxuICAgICAgLy8gRGVsZXRlIHRhcmdldCB0YWJcclxuICAgICAgZGVsZXRlVGFiKGV2ZW50LCB0YXJnZXQpO1xyXG5cclxuICAgICAgLy8gVXBkYXRlIGFycmF5cyByZWxhdGVkIHRvIHRhYnMgd2lkZ2V0XHJcbiAgICAgIGdlbmVyYXRlQXJyYXlzKCk7XHJcblxyXG4gICAgICAvLyBBY3RpdmF0ZSB0aGUgY2xvc2VzdCB0YWIgdG8gdGhlIG9uZSB0aGF0IHdhcyBqdXN0IGRlbGV0ZWRcclxuICAgICAgaWYgKHRhcmdldC5pbmRleCAtIDEgPCAwKSB7XHJcbiAgICAgICAgYWN0aXZhdGVUYWIodGFic1swXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYWN0aXZhdGVUYWIodGFic1t0YXJnZXQuaW5kZXggLSAxXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIERlbGV0ZXMgYSB0YWIgYW5kIGl0cyBwYW5lbFxyXG4gIGZ1bmN0aW9uIGRlbGV0ZVRhYihldmVudCkge1xyXG4gICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgIHZhciBwYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhcmdldC5nZXRBdHRyaWJ1dGUoXCJhcmlhLWNvbnRyb2xzXCIpKTtcclxuXHJcbiAgICB0YXJnZXQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0YXJnZXQpO1xyXG4gICAgcGFuZWwucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChwYW5lbCk7XHJcbiAgfVxyXG5cclxuICAvLyBEZXRlcm1pbmUgd2hldGhlciB0aGVyZSBzaG91bGQgYmUgYSBkZWxheVxyXG4gIC8vIHdoZW4gdXNlciBuYXZpZ2F0ZXMgd2l0aCB0aGUgYXJyb3cga2V5c1xyXG4gIGZ1bmN0aW9uIGRldGVybWluZURlbGF5KCkge1xyXG4gICAgdmFyIGhhc0RlbGF5ID0gdGFibGlzdC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWRlbGF5XCIpO1xyXG4gICAgdmFyIGRlbGF5ID0gMDtcclxuXHJcbiAgICBpZiAoaGFzRGVsYXkpIHtcclxuICAgICAgdmFyIGRlbGF5VmFsdWUgPSB0YWJsaXN0LmdldEF0dHJpYnV0ZShcImRhdGEtZGVsYXlcIik7XHJcbiAgICAgIGlmIChkZWxheVZhbHVlKSB7XHJcbiAgICAgICAgZGVsYXkgPSBkZWxheVZhbHVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIElmIG5vIHZhbHVlIGlzIHNwZWNpZmllZCwgZGVmYXVsdCB0byAzMDBtc1xyXG4gICAgICAgIGRlbGF5ID0gMzAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRlbGF5O1xyXG4gIH1cclxuXHJcbiAgLy9cclxuICBmdW5jdGlvbiBmb2N1c0V2ZW50SGFuZGxlcihldmVudCkge1xyXG4gICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuXHJcbiAgICBzZXRUaW1lb3V0KGNoZWNrVGFiRm9jdXMsIGRlbGF5LCB0YXJnZXQpO1xyXG4gIH1cclxuXHJcbiAgLy8gT25seSBhY3RpdmF0ZSB0YWIgb24gZm9jdXMgaWYgaXQgc3RpbGwgaGFzIGZvY3VzIGFmdGVyIHRoZSBkZWxheVxyXG4gIGZ1bmN0aW9uIGNoZWNrVGFiRm9jdXModGFyZ2V0KSB7XHJcbiAgICBsZXQgZm9jdXNlZCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgaWYgKHRhcmdldCA9PT0gZm9jdXNlZCkge1xyXG4gICAgICBhY3RpdmF0ZVRhYih0YXJnZXQsIGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICAgLy9WZWxpciBhZGRpdGlvbiAtLSB0YWIgYXdhcmUgY29udGVudFxyXG4gIGZ1bmN0aW9uIHRhYkNoYW5nZVRhYkF3YXJlQ29udGVudCh0YWIpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICAgIGlmICghdGFiKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHZhciB0YWJhd2FyZUNvbnRlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuanMtc3ctdGFicy10YWJhd2FyZS1jb250YWluZXInKTtcclxuICAgICAgICAgIHZhciBjdXJyZW50VGFiQXdhcmUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuanMtJyArIHRhYi5pZCArICdfdGFiYXdhcmUnKTtcclxuXHJcbiAgICAgICAgICBpZiAodGFiYXdhcmVDb250ZW50ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHRhYmF3YXJlQ29udGVudC5sZW5ndGg7IHgrKykge1xyXG4gICAgICAgICAgICAgICAgICB0YWJhd2FyZUNvbnRlbnRbeF0uY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChjdXJyZW50VGFiQXdhcmUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGFiYXdhcmVDb250ZW50Lmxlbmd0aDsgeCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgY3VycmVudFRhYkF3YXJlW3hdICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRUYWJBd2FyZVt4XS5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgcmV0dXJuOyBcclxuICAgICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ3RhYkNoYW5nZVRhYkF3YXJlQ29udGVudDogJyArIGUpXHJcbiAgICAgIH1cclxuICB9XHJcblxyXG4gIC8vVmVsaXIgYWRkaXRpb24gLS0gc2Nyb2xsIGhvcml6b250YWxseSBvbiB3aW5kb3cgcmVzaXplIHNvIGl0IG1hdGNoZXMgbW9iaWxlXHJcbiAgLy8gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgaGFuZGxlVGFiU2Nyb2xsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zdy10YWJzX19pdGVtLCBbYXJpYS1zZWxlY3RlZD1cInRydWVcIl0nKSksIGZhbHNlKTtcclxuICBmdW5jdGlvbiBoYW5kbGVUYWJTY3JvbGwodGFiKSB7XHJcbiAgICBpZiAod2luZG93V2lkdGggPCAxMDI0KSB7XHJcbiAgICAgIC8vIGJyZWFrcG9pbnQgYmFzZWQgb24gQ1NTIG1lZGl1bS1tYXggYnJhY2twb2ludC5cclxuICAgICAgdGFibGlzdC5zY3JvbGxMZWZ0ID0gdGFiLm9mZnNldExlZnQ7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbi8vUG9seWZpbGwgZm9yIGNsb3Nlc3QgaW4gSUUxMSAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvY2xvc2VzdFxyXG5pZiAoIUVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMpXHJcbiAgRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyA9XHJcbiAgICBFbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3RvciB8fFxyXG4gICAgRWxlbWVudC5wcm90b3R5cGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yO1xyXG5cclxuaWYgKCFFbGVtZW50LnByb3RvdHlwZS5jbG9zZXN0KSB7XHJcbiAgRWxlbWVudC5wcm90b3R5cGUuY2xvc2VzdCA9IGZ1bmN0aW9uKHMpIHtcclxuICAgIHZhciBlbCA9IHRoaXM7XHJcbiAgICBpZiAoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb250YWlucyhlbCkpIHJldHVybiBudWxsO1xyXG4gICAgZG8ge1xyXG4gICAgICBpZiAoZWwubWF0Y2hlcyhzKSkgcmV0dXJuIGVsO1xyXG4gICAgICBlbCA9IGVsLnBhcmVudEVsZW1lbnQgfHwgZWwucGFyZW50Tm9kZTtcclxuICAgIH0gd2hpbGUgKGVsICE9PSBudWxsICYmIGVsLm5vZGVUeXBlID09PSAxKTtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH07XHJcbn1cclxuLyogXHJcblRoaXMgd29yayBpcyBiZWluZyBwcm92aWRlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlLlxyXG5cclxuTGljZW5zZVxyXG5CeSBvYnRhaW5pbmcgYW5kL29yIGNvcHlpbmcgdGhpcyB3b3JrLCB5b3UgKHRoZSBsaWNlbnNlZSkgYWdyZWUgdGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLCBhbmQgd2lsbCBjb21wbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLlxyXG5cclxuUGVybWlzc2lvbiB0byBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgd29yaywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBvciByb3lhbHR5IGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgb24gQUxMIGNvcGllcyBvZiB0aGUgd29yayBvciBwb3J0aW9ucyB0aGVyZW9mLCBpbmNsdWRpbmcgbW9kaWZpY2F0aW9uczpcclxuXHJcblRoZSBmdWxsIHRleHQgb2YgdGhpcyBOT1RJQ0UgaW4gYSBsb2NhdGlvbiB2aWV3YWJsZSB0byB1c2VycyBvZiB0aGUgcmVkaXN0cmlidXRlZCBvciBkZXJpdmF0aXZlIHdvcmsuXHJcbkFueSBwcmUtZXhpc3RpbmcgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGRpc2NsYWltZXJzLCBub3RpY2VzLCBvciB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gSWYgbm9uZSBleGlzdCwgdGhlIFczQyBTb2Z0d2FyZSBhbmQgRG9jdW1lbnQgU2hvcnQgTm90aWNlIHNob3VsZCBiZSBpbmNsdWRlZC5cclxuTm90aWNlIG9mIGFueSBjaGFuZ2VzIG9yIG1vZGlmaWNhdGlvbnMsIHRocm91Z2ggYSBjb3B5cmlnaHQgc3RhdGVtZW50IG9uIHRoZSBuZXcgY29kZSBvciBkb2N1bWVudCBzdWNoIGFzIFwiVGhpcyBzb2Z0d2FyZSBvciBkb2N1bWVudCBpbmNsdWRlcyBtYXRlcmlhbCBjb3BpZWQgZnJvbSBvciBkZXJpdmVkIGZyb20gRXhhbXBsZSBvZiBUYWJzIHdpdGggQXV0b21hdGljIEFjdGl2YXRpb24gfCBXQUktQVJJQSBBdXRob3JpbmcgUHJhY3RpY2VzIDEuMSBodHRwczovL3d3dy53My5vcmcvVFIvMjAxNy9OT1RFLXdhaS1hcmlhLXByYWN0aWNlcy0xLjEtMjAxNzEyMTQvZXhhbXBsZXMvdGFicy90YWJzLTEvdGFicy5odG1sLiBDb3B5cmlnaHQgwqkgMjAxOCBXM0PCriAoTUlULCBFUkNJTSwgS2VpbywgQmVpaGFuZykuXCJcclxuRGlzY2xhaW1lcnNcclxuVEhJUyBXT1JLIElTIFBST1ZJREVEIFwiQVMgSVMsXCIgQU5EIENPUFlSSUdIVCBIT0xERVJTIE1BS0UgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTywgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5UIFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBQQVRFTlRTLCBDT1BZUklHSFRTLCBUUkFERU1BUktTIE9SIE9USEVSIFJJR0hUUy5cclxuXHJcbkNPUFlSSUdIVCBIT0xERVJTIFdJTEwgTk9UIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIEFOWSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIERPQ1VNRU5ULlxyXG5cclxuVGhlIG5hbWUgYW5kIHRyYWRlbWFya3Mgb2YgY29weXJpZ2h0IGhvbGRlcnMgbWF5IE5PVCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIHRoZSB3b3JrIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gVGl0bGUgdG8gY29weXJpZ2h0IGluIHRoaXMgd29yayB3aWxsIGF0IGFsbCB0aW1lcyByZW1haW4gd2l0aCBjb3B5cmlnaHQgaG9sZGVycy5cclxuKi9cclxuIiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcclxuaW1wb3J0IENvb2tpZXMgZnJvbSAnanMtY29va2llJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvZ2dsZUNvbnRyYXN0KHRvZ2dsZUJ1dHRvbikge1xyXG4gICAgaWYoQ29va2llcy5nZXQoJ2hpZ2gtY29udHJhc3QnKSA9PT0gJ29uJykge1xyXG4gICAgICAgIGlmKCEkKCdib2R5JykuaGFzQ2xhc3MoJ2NvbnRyYXN0LW9uJykpIHtcclxuICAgICAgICAgICAgJCgnYm9keScpLmFkZENsYXNzKCdjb250cmFzdC1vbicpO1xyXG4gICAgICAgICAgICAkKHRvZ2dsZUJ1dHRvbikuYXR0cihcImFyaWEtcHJlc3NlZFwiLCBcInRydWVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICQodG9nZ2xlQnV0dG9uKS5vbignY2xpY2snLCBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGlmKCQoJ2JvZHknKS5oYXNDbGFzcygnY29udHJhc3Qtb24nKSkge1xyXG4gICAgICAgICAgICAkKCdib2R5JykucmVtb3ZlQ2xhc3MoJ2NvbnRyYXN0LW9uJyk7XHJcbiAgICAgICAgICAgIENvb2tpZXMucmVtb3ZlKCdoaWdoLWNvbnRyYXN0Jyk7XHJcbiAgICAgICAgICAgICQodG9nZ2xlQnV0dG9uKS5hdHRyKFwiYXJpYS1wcmVzc2VkXCIsIFwiZmFsc2VcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihfc2F0ZWxsaXRlKSAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICAgICAgX3NhdGVsbGl0ZS50cmFjaygnTmF2IENsaWNrIEV2ZW50IEhpZ2ggQ29udHJhc3QnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkKCdib2R5JykuYWRkQ2xhc3MoJ2NvbnRyYXN0LW9uJyk7XHJcbiAgICAgICAgICAgIENvb2tpZXMuc2V0KCdoaWdoLWNvbnRyYXN0JywgJ29uJyk7XHJcbiAgICAgICAgICAgICQodG9nZ2xlQnV0dG9uKS5hdHRyKFwiYXJpYS1wcmVzc2VkXCIsIFwidHJ1ZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufSIsImltcG9ydCAkIGZyb20gXCJqcXVlcnlcIjtcclxuaW1wb3J0IFwiY29yZS1qcy9mbi9vYmplY3RcIjtcclxuaW1wb3J0IFlvdXR1YmUgZnJvbSBcInlvdXR1YmUtcGxheWVyXCI7XHJcbmV4cG9ydCBjbGFzcyBWaWRlb1BsYXllciB7XHJcbiAgY29uc3RydWN0b3IoJGVsKSB7XHJcbiAgICB0aGlzLiRlbCA9ICRlbDtcclxuICAgIC8vdGhpcyBpcyB0aGUgcGxheSBidXR0b24gZm9yIHRoZSBcImlubGluZVwiLyBvdmVybGF5IHZpZGVvIHBsYXllci4gIEl0IGlzIG5vdCB1c2VkIGZvciB0aGUgbW9kYWwgcGxheWVyLlxyXG4gICAgLy8gb25seSBncmFiIHRoZSBidXR0b24gZm9yIHRoaXMgcGxheWVyLiAgVGhlcmUgbWF5IGJlIG90aGVyIHBsYXllcnMgb24gdGhlIHBhZ2UsIGFuZCB3ZSBkbyBub3Qgd2FudCB0aGlzIGJ1dHRvbiB0byBvcGVuIHRoZW0hXHJcbiAgICB0aGlzLiRwbGF5QnV0dG9uID0gdGhpcy4kZWwuc2libGluZ3MoJy5zdy12aWRlb19fY29udGVudCcpLmZpbmQoXCIuanMtc3ctdmlkZW9fX3BsYXlfX2J1dHRvblwiKTtcclxuICAgIHRoaXMucGxheWVyID0ge307XHJcbiAgICB0aGlzLnZpZGVvTW91bnRQb2ludCA9ICRlbC5hdHRyKFwiZGF0YS12aWRlb2lkXCIpO1xyXG4gICAgdGhpcy4kaW5saW5lID0gdGhpcy4kZWwucGFyZW50cyhcIi5qcy1zdy12aWRlby0taW5saW5lXCIpXHJcbiAgICAgID8gdGhpcy4kZWwucGFyZW50cyhcIi5qcy1zdy12aWRlby0taW5saW5lXCIpXHJcbiAgICAgIDogbnVsbDtcclxuICAgIC8vdGhpcyBpcyBzdXBlciBoYWNreSwgYnV0IHNpbmNlIHdlIGhhZCB0byBjbG9uZSB0aGUgbW9kYWwsIHdlIGNhbiBubyBsb25nZXIgcmVseSBvbiBkb20gc3RydWN0dXJlLiBXZSBub3cgY2hlY2sgYW5kIHNlZSBpZiB0aGUgbW9kYWwgZXhpc3RzIGFuZCBjaGVjayB0byBtYWtlIHN1cmUgdGhlIGN1cnJlbnQgdmlkZW8gaXNuJ3QgYW4gaW5saW5lIHZpZGVvIHNvIGFzIHRvIG5vdCBhZGQgYW55IGFkZGl0aW9uYWwgY3NzLlxyXG4gICAgdGhpcy4kbW9kYWwgPSB0aGlzLiRpbmxpbmUubGVuZ3RoIDw9IDAgJiYgICQoXCIuanMtc3ctdmlkZW8tLW1vZGFsXCIpLmxlbmd0aCA+IDBcclxuICAgICAgPyAkKFwiLmpzLXN3LXZpZGVvLS1tb2RhbFwiKVxyXG4gICAgICA6IG51bGw7XHJcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcclxuICAgIHRoaXMuYmluZEV2ZW50cygpO1xyXG4gIH1cclxuICBiaW5kRXZlbnRzKCkge1xyXG4gICAgdGhpcy4kcGxheUJ1dHRvbi5jbGljayhlID0+IHRoaXMucGxheVZpZGVvKGUpKTtcclxuICAgIC8vbW9kYWwgY2xvc2Ugc2hvdWxkIHN0b3AgdGhlIHZpZGVvIGZyb20gcGxheWluZ1xyXG4gICAgaWYgKHRoaXMuJG1vZGFsICYmIHRoaXMuJG1vZGFsLmxlbmd0aCkge1xyXG4gICAgICAkKFwiI3N3LW1vZGFsXCIpIFxyXG4gICAgICAgIC5maW5kKFwiLmpzLXN3LW1vZGFsX19jbG9zZV9fYnRuXCIpXHJcbiAgICAgICAgLmNsaWNrKGUgPT4gdGhpcy5zdG9wVmlkZW8oZSkpO1xyXG4gICAgfSBcclxuICAgIC8vaW5saW5lL292ZXJsYXkgdmlkZW8gY2xvc2Ugc2hvdWxkIGFsc28gc3RvcCB0aGUgdmlkZW8gZnJvbSBwbGF5aW5nXHJcbiAgICBpZiAodGhpcy4kaW5saW5lICYmIHRoaXMuJGlubGluZS5sZW5ndGgpIHtcclxuICAgICAgdGhpcy4kaW5saW5lXHJcbiAgICAgICAgLmZpbmQoXCIuanMtc3ctdmlkZW9fX2Nsb3NlX19idG5cIilcclxuICAgICAgICAuY2xpY2soZSA9PiB0aGlzLnN0b3BWaWRlbyhlKSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGluaXRpYWxpemUoKSB7XHJcbiAgICB0aGlzLnBsYXllciA9IFlvdXR1YmUodGhpcy52aWRlb01vdW50UG9pbnQsIHtcclxuICAgICAgdmlkZW9JZDogdGhpcy52aWRlb01vdW50UG9pbnQsXHJcbiAgICAgIHBsYXllclZhcnM6IHtcclxuICAgICAgICByZWw6IDBcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnBsYXllci5vbihcInN0YXRlQ2hhbmdlXCIsIGV2ZW50ID0+IHRoaXMuaGFuZGxlWW91dHViZVN0YXRlKGV2ZW50KSk7XHJcbiAgfVxyXG4gIC8vcGxheSBhbmQgc3RvcCBDU1MgY2xhc3MgY2hhbmdlcywgZm9yIGlubGluZS9vdmVybGF5IHBsYXllciBvbmx5XHJcbiAgcGxheUNTUygpIHtcclxuICAgIHRoaXMuJGlubGluZS5maW5kKFwiLnN3LXZpZGVvX19vdmVybGF5XCIpLmNzcyhcInZpc2liaWxpdHlcIiwgXCJoaWRkZW5cIik7XHJcbiAgICB0aGlzLiRpbmxpbmUuZmluZChcIi5zdy12aWRlb19fcGhvdG9cIikuY3NzKFwidmlzaWJpbGl0eVwiLCBcImhpZGRlblwiKTtcclxuICAgIHRoaXMuJGlubGluZS5jc3MoXCJ6LWluZGV4XCIsIFwiNVwiKTtcclxuICAgIHRoaXMuJGVsLmNzcyhcInZpc2liaWxpdHlcIiwgXCJ2aXNpYmxlXCIpO1xyXG4gIH1cclxuICBzdG9wQ1NTKCkge1xyXG4gICAgdGhpcy4kaW5saW5lLmZpbmQoXCIuc3ctdmlkZW9fX292ZXJsYXlcIikuY3NzKFwidmlzaWJpbGl0eVwiLCBcInZpc2libGVcIik7XHJcbiAgICB0aGlzLiRpbmxpbmUuZmluZChcIi5zdy12aWRlb19fcGhvdG9cIikuY3NzKFwidmlzaWJpbGl0eVwiLCBcInZpc2libGVcIik7XHJcbiAgICB0aGlzLiRlbC5jc3MoXCJ2aXNpYmlsaXR5XCIsIFwiaGlkZGVuXCIpO1xyXG4gICAgdGhpcy4kaW5saW5lLmNzcyhcInotaW5kZXhcIiwgXCIxXCIpO1xyXG4gIH1cclxuICBoYW5kbGVZb3V0dWJlU3RhdGUoZXZlbnQpIHtcclxuICAgIC8qXHJcbiAgICAgIFN0YXRlIGNvZGVzIGFyZTpcclxuICAgICAgLTEgKHVuc3RhcnRlZClcclxuICAgICAgMCAoZW5kZWQpXHJcbiAgICAgIDEgKHBsYXlpbmcpXHJcbiAgICAgIDIgKHBhdXNlZClcclxuICAgICAgMyAoYnVmZmVyaW5nKVxyXG4gICAgICA1ICh2aWRlbyBjdWVkKS5cclxuICAgICovXHJcbiAgICBpZiAoZXZlbnQuZGF0YSA9PT0gMCkge1xyXG4gICAgICBpZiAodGhpcy4kaW5saW5lLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuc3RvcENTUygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwbGF5VmlkZW8oKSB7XHJcbiAgICB0aGlzLnBsYXllci5wbGF5VmlkZW8oKTtcclxuICAgIGlmICh0aGlzLiRpbmxpbmUubGVuZ3RoKSB7XHJcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMucGxheUNTUygpLCAzOTUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICBzdG9wVmlkZW8oKSB7XHJcbiAgICB0aGlzLnBsYXllci5zdG9wVmlkZW8oKTtcclxuICAgIGlmICh0aGlzLiRpbmxpbmUubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuc3RvcENTUygpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG59XHJcbiJdfQ=="}