1(()=>{var __webpack_modules__={312:(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__)=>{"use strict";eval("{\n;// ./js/lib/dom-component.js\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nclass DomComponent {\n constructor($domElement) {\n _defineProperty(this, \"$domElement\", void 0);\n if (!$domElement) {\n return;\n }\n this.$domElement = $domElement;\n this.$domElement.classList.add('js');\n [this.baseCSSClass] = this.$domElement.classList;\n }\n loaded() {\n this.$domElement.classList.add('js-loaded');\n }\n find(selector, keepAsArray = false) {\n const found = this.findAll(selector);\n if (!found) {\n return false;\n }\n if (keepAsArray === false) {\n return found.length > 1 ? found : found[0];\n }\n return found;\n }\n findAll(selector) {\n const found = this.$domElement.querySelectorAll(selector);\n if (found && found.length) {\n return Array.from(found);\n }\n return found;\n }\n}\n;// ./js/lib/each.js\nfunction each(nodeList, cb) {\n if (!nodeList || !nodeList.length) {\n return;\n }\n for (let i = 0; i < nodeList.length; i++) {\n cb(nodeList[i], i);\n }\n}\n;// ./js/lib/const.js\nconst mqMap = {\n xs: 480,\n sm: 768,\n md: 1094,\n lg: 1280,\n xl: 1690,\n navDesktop: 1690\n};\nconst duration = 400;\nconst durationLong = 700;\nconst $ = window.jQuery;\n;// ./blocks/image-gallery/image-gallery.block.js\nfunction image_gallery_block_defineProperty(e, r, t) { return (r = image_gallery_block_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction image_gallery_block_toPropertyKey(t) { var i = image_gallery_block_toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction image_gallery_block_toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nlet activeLightboxLink = null;\nclass ImageGallery extends DomComponent {\n constructor($domElement) {\n super($domElement);\n image_gallery_block_defineProperty(this, \"_index\", null);\n image_gallery_block_defineProperty(this, \"_visibleThumbnails\", 4);\n image_gallery_block_defineProperty(this, \"_gridGap\", 16);\n setTimeout(() => {\n this.init();\n this.loaded();\n }, 100);\n }\n get index() {\n return this._index;\n }\n set index(newIndex) {\n if (newIndex >= this.$slides.length) {\n newIndex = 0;\n }\n if (newIndex < 0) {\n newIndex = this.$slides.length - 1;\n }\n const transformValueX = newIndex * -100;\n\n // we add one to the new index so we don't show the currently displayed image in the list of thumbnails. But rather the next imagae in the sequence\n\n this.$slideshowTrack.style.transform = `translateX(${transformValueX}%)`;\n if (this.$slides.length > this._visibleThumbnails) {\n if (newIndex + 1 + this._visibleThumbnails <= this.$slides.length) {\n const transformValueY = (newIndex + 1) * -(this.$thumbnail[0].offsetHeight + this._gridGap);\n this.$thumbnailTrack.style.transform = `translateY(${transformValueY}px)`;\n } else {\n const maxTransform = (this.$slides.length - this._visibleThumbnails) * -(this.$thumbnail[0].offsetHeight + this._gridGap);\n this.$thumbnailTrack.style.transform = `translateY(${maxTransform}px)`;\n }\n }\n if (this.index != null) {\n this.$pages[this.index].classList.remove('active');\n }\n this.$pages[newIndex].classList.add('active');\n this.showDescription(newIndex);\n this._index = newIndex;\n }\n init() {\n this.resize = null;
1\n this.$slides = this.find('[js-slide]');\n this.$thumbnailsContainer = this.find('[js-thumbnails-container]');\n this.$thumbnailTrack = this.find('[js-thumbnail-track]');\n this.$slideshowTrack = this.find('[js-slideshow-track]');\n this.$thumbnail = this.find('[js-thumbnail]');\n this.$nextSlide = this.find('[js-next]');\n this.$previousSlide = this.find('[js-prev]');\n this.$descriptions = this.find('[js-description]');\n this.$descriptonContainer = this.find('[js-description-container]');\n this.$pages = this.find('[js-page]');\n this.translateY = 0;\n this.setupListeners();\n this.initializeGallery();\n }\n setupListeners() {\n this.$nextSlide.addEventListener('click', () => {\n this.index++;\n });\n this.$previousSlide.addEventListener('click', () => {\n this.index--;\n });\n each(this.$slides, slide => {\n if (slide.querySelector('a')) {\n let link = slide.querySelector('a');\n link.addEventListener('click', this.openLightbox.bind(this));\n }\n });\n window.addEventListener('keydown', this.escLightbox.bind(this));\n each(this.$thumbnail, thumbnail => {\n thumbnail.addEventListener('click', this.thumbnailClick.bind(this));\n });\n window.addEventListener('resize', () => {\n this.$thumbnailsContainer.height = 'auto';\n this.$domElement.classList.remove('ready');\n clearTimeout(this.resize);\n this.resize = setTimeout(() => {\n this.initializeGallery();\n }, 50);\n });\n }\n initializeGallery() {\n let count = this.$thumbnailTrack.children.length;\n while (count < 4) {\n const placeholder = document.createElement('div');\n placeholder.className = 'image-gallery__slideshow__thumbnail';\n this.$thumbnailTrack.append(placeholder);\n count++;\n }\n this.$thumbnailsContainer.style.height = `${this.$slideshowTrack.offsetHeight}px`;\n this.$domElement.classList.add('ready');\n this.createLightbox();\n if (this.index === null) {\n this.index = 0;\n }\n }\n thumbnailClick(e) {\n this.index = this.getIndex(e.currentTarget);\n }\n getIndex(elem) {\n let i = 0;\n while ((elem = elem.previousElementSibling) != null) ++i;\n return i;\n }\n showDescription(newIndex) {\n if (this.$descriptions[this.index] != null) {\n this.$descriptions[this.index].classList.remove('active');\n }\n const height = this.$descriptions[newIndex].offsetHeight;\n this.$descriptonContainer.style.height = `${height}px`;\n this.$descriptions[newIndex].classList.add('active');\n }\n\n /**\r\n * All code below implements various lightbox features\r\n */\n\n createLightbox() {\n if (document.querySelectorAll('.lightbox-container').length >= 1) {\n return false;\n }\n const lbcontainer = document.createElement('div');\n lbcontainer.classList.add('lightbox-container');\n lbcontainer.setAttribute('role', 'dialog');\n lbcontainer.setAttribute('aria-labelledby', 'lightbox-title');\n lbcontainer.setAttribute('aria-describedby', 'lightbox-content');\n lbcontainer.setAttribute('aria-hidden', 'true');\n const lb = document.createElement('div');\n lb.classList.add('lightbox');\n const lbFig = document.createElement('figure');\n lbFig.classList.add('lightbox-figure');\n const lbCaption = document.createElement('figcaption');\n lbCaption.classList.add('lightbox-description');\n const lbTitle = document.createElement('h3');\n lbTitle.id = 'lightbox-title';\n const lbContent = document.createElement('div');\n lbContent.id = 'lightbox-content';\n const lbImage = document.createElement('div');\n lbImage.classList.add('lightbox-image');\n const lbClose = document.createElement('button');\n lbClose.classList.add('close-lightbox');\n lbClose.setAttribute('aria-label', 'Close Lightbox');\n lbClose.addEventListener('click', this.closeLightbox.bind(this));\n const lbCloseText = document.createElement('i');\n lbCloseText.classList.add('iconoir-cancel');\n const lbCloseSRText = document.createElement('span');\n lbCloseSRText.classList.add('screen-reader-text');\n lbCloseSRText.innerText = 'Close this lightbox';\n lbClose.appendChild(lbCloseText);\n lbClose.appendChild(lbCloseSRText);\n lbCaption.appendChild(lbTitle);\n lbCaption.appendChild(lbContent);\n lbFig.appendChild(lbImage);\n lbFig.appendChild(lbCaption);\n lb.appendChild(lbFig);\n lb.appendChild(lbClose);\n lbcontainer.appendChild(lb);\n document.body.appendChild(lbcontainer);\n }\n advanceLightbox() {\n this.index++;\n this.shiftLightbox();\n }\n previousLightbox() {\n this.index--;\n this.shiftLightbox();\n }\n shiftLightbox() {\n const thumb = this.$thumbnail[this.index];\n const thumbImg = thumb.querySelector('img');\n let thumbSrc = thumbImg.src;\n thumbSrc = thumbSrc.replace('http:', '');\n thumbSrc = thumbSrc.replace('https:', '');\n const activeSlide = this.$slides[this.index];\n const link = activeSlide.querySelector('a');\n this.openLightbox(link);\n }\n createLightboxNav(thumbs) {\n if (document.querySelectorAll('[js-lightbox-prev]') >= 1) {\n return;\n }\n const lb = document.querySelector('.lightbox-container .lightbox');\n const lbNav = document.createElement('div');\n lbNav.classList.add('lightbox-nav');\n const lbPrev = document.querySelector('button[js-prev]').cloneNode(true);\n const lbNext = document.querySelector('button[js-next]').cloneNode(true);\n lbPrev.removeAttribute('js-prev');\n lbPrev.setAttribute('js-lightbox-prev', '');\n lbPrev.addEventListener('click', this.previousLightbox.bind(this));\n lbNext.removeAttribute('js-next');\n lbNext.setAttribute('js-lightbox-next', '');\n lbNext.addEventListener('click', this.advanceLightbox.bind(this));\n lbNav.appendChild(lbPrev);\n lbNav.appendChild(lbNext);\n lb.appendChild(lbNav);\n }\n openLightbox(e) {\n let el = e;\n if (e.preventDefault) {\n e.preventDefault();\n el = e.target;\n }\n if (document.querySelectorAll('.lightbox-container').length <= 0) {\n this.createLightbox();\n }
1\n let clickedLink = null;\n if ('a' === el.tagName) {\n clickedLink = el;\n } else {\n clickedLink = el.closest('a');\n }\n activeLightboxLink = clickedLink;\n const lightbox = document.querySelector('.lightbox-container');\n const lbTitle = lightbox.querySelector('#lightbox-title');\n const lbContent = lightbox.querySelector('#lightbox-content');\n const lbImage = lightbox.querySelector('.lightbox-image');\n const lbClose = lightbox.querySelector('.close-lightbox');\n const gallery = el.closest('.image-gallery__slideshow');\n const thumbs = gallery.querySelectorAll('.image-gallery__slideshow__thumbnails__track button.image-gallery__slideshow__thumbnail');\n if (thumbs.length >= 1) {\n this.createLightboxNav(thumbs);\n }\n const description = this.$descriptions[this.index];\n const title = description.querySelector('.image-gallery__description__header');\n const caption = description.querySelector('.image-gallery__description__summary');\n const image = clickedLink.querySelector('img');\n if (typeof title !== 'undefined' || typeof caption !== 'undefined') {\n if (typeof title !== 'undefined') {\n lbTitle.innerHTML = title.innerHTML;\n } else {\n lbTitle.innerHTML = '';\n }\n if (typeof caption !== 'undefined') {\n lbContent.innerHTML = caption.innerHTML;\n } else {\n lbContent.innerHTML = '';\n }\n lightbox.querySelector('.lightbox-description').classList.add('active');\n }\n let imgSrc = '';\n if (clickedLink.href.indexOf('uploads') >= 0) {\n imgSrc = clickedLink.href;\n } else {\n imgSrc = image.getAttribute('src');\n }\n lbImage.style.backgroundImage = 'url(' + imgSrc + ')';\n lightbox.setAttribute('aria-hidden', 'false');\n lightbox.classList.add('open');\n lbClose.focus();\n this.trapFocus(lightbox);\n return false;\n }\n escLightbox(e) {\n if (document.querySelectorAll('.lightbox-container.open').length <= 0) {\n return;\n }\n switch (e.key) {\n case 'Esc':\n case 'Escape':\n document.querySelector('.close-lightbox').click();\n break;\n default:\n return;\n }\n }\n closeLightbox(e) {\n const lightbox = e.target.closest('.lightbox-container');\n lightbox.setAttribute('aria-hidden', 'true');\n lightbox.classList.remove('open');\n activeLightboxLink.focus();\n return false;\n }\n trapFocus(element) {\n var focusableEls = element.querySelectorAll('a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type=\"text\"]:not([disabled]), input[type=\"radio\"]:not([disabled]), input[type=\"checkbox\"]:not([disabled]), select:not([disabled])');\n var firstFocusableEl = focusableEls[0];\n var lastFocusableEl = focusableEls[focusableEls.length - 1];\n var KEYCODE_TAB = 9;\n element.addEventListener('keydown', function (e) {\n var isTabPressed = e.key === 'Tab' || e.keyCode === KEYCODE_TAB;\n if (!isTabPressed) {\n return;\n }\n if (e.shiftKey) /* shift + tab */{\n if (document.activeElement === firstFocusableEl) {\n lastFocusableEl.focu
1s();\n e.preventDefault();\n }\n } else /* tab */{\n if (document.activeElement === lastFocusableEl) {\n firstFocusableEl.focus();\n e.preventDefault();\n }\n }\n });\n }\n}\n;// ./js/lib/delay.js\nfunction delay(duration) {\n return new Promise(resolve => {\n setTimeout(() => resolve(), duration);\n });\n}\n;// ./blocks/pull-quotes/pull-quotes.block.js\nfunction pull_quotes_block_defineProperty(e, r, t) { return (r = pull_quotes_block_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction pull_quotes_block_toPropertyKey(t) { var i = pull_quotes_block_toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction pull_quotes_block_toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n\n\n\n\nclass Carousel extends DomComponent {\n constructor($domElement) {\n super($domElement);\n pull_quotes_block_defineProperty(this, \"_index\", 0);\n pull_quotes_block_defineProperty(this, \"_activeSlide\", null);\n this.isAnimating = false;\n setTimeout(() => {\n this.init();\n this.loaded();\n });\n }\n get index() {\n return this._index;\n }\n set index(newIndex) {\n if (newIndex === this.$slides.length) {\n newIndex = 0;\n }\n this.$activeSlide = this.$slides[newIndex];\n this._index = newIndex;\n }\n get $activeSlide() {\n return this._activeSlide;\n }\n set $activeSlide(newSlide) {\n if (this.$activeSlide) {\n this.animateSlide(newSlide, () => {\n this.isAnimating = false;\n this._activeSlide = newSlide;\n });\n // this.$activeSlide.classList.remove('active');\n } else {\n newSlide.classList.add('active');\n this._activeSlide = newSlide;\n }\n }\n init() {\n this.$slides = this.findAll('[js-slide]');\n if (!this.$slides.length) {\n return;\n }\n this.$carousel = this.find('[js-carousel]');\n this.$nextButton = this.findAll('[js-next-button]');\n this.attachEvents();\n this.initCarousel();\n }\n attachEvents() {\n each(this.$nextButton, button => {\n button.addEventListener('click', this.goToNextStory.bind(this));\n });\n window.addEventListener('resize', this.reset.bind(this));\n }\n goToNextStory() {\n if (this.isAnimating) return;\n this.isAnimating = true;\n this.index++;\n }\n initCarousel() {\n if (!this.$activeSlide) {\n this.$activeSlide = this.$slides[0];\n }\n this.$carousel.style.height = `${this.$activeSlide.children[0].offsetHeight}px`;\n this.$activeSlide.classList.remove('preload');\n }\n animateSlide(newSlide, cb) {\n Promise.resolve().then(() => this.$activeSlide.classList.add('transition-out'))\n // .then(() => this._activeSlide = newSlide)\n .then(() => delay(durationLong)).then(() => {\n this.$activeSlide.classList.remove('active');\n newSlide.classList.add('active');\n this.$carousel.style.height = `${newSlide.children[0].offsetHeight}px`;\n }).then(() => delay(durationLong)).then(() => newSlide.classList.remove('transition-out')).then(() => delay(durationLong)).then(() => cb());\n }\n reset() {\n setTimeout(() => {\n this.initCarousel();\n }, durationLong);\n }\n}\n;// ./js/lib/mq.js\n\nfunction mq(breakpoint, direction = 'min-width') {\n if (mqMap.hasOwnProperty(breakpoint)) {\n breakpoint = mqMap[breakpoint] + 'px';\n }\n if (mqMap.hasOwnProperty(direction)) {\n breakpoint = [breakpoint];\n breakpoint.push(mqMap[direction] + 'px');\n }\n let query;\n if (typeof breakpoint === 'string') {\n query = `(${direction}: ${breakpoint})`;\n } else {\n query = `(min-width: ${breakpoint[0]}) and (max-width: ${breakpoint[1]})`;\n }\n return window.matchMedia(query).matches;\n}\n;// ./js/components/sidebar-accordion.js\n\nclass SidebarAccordion {\n constructor(trigger, useMaxHeight = false) {\n this.trigger = trigger;\n this.propertyToUse = useMaxHeight ? 'maxHeight' : 'height';\n this.expandableSection = this.trigger.nextElementSibling;\n this.height = this.expandableSection.offsetHeight;\n this.expanded = false;\n if (!mq('md')) {\n if (!this.trigger.classList.contains('default')) {\n this.expandableSection.style[this.propertyToUse] = 0;\n } else {\n this.trigger.classList.add('open');\n this.expanded = true;\n this.expandableSection.style[this.propertyToUse] = `${this.height}px`;\n }\n }\n this.trigger.addEventListener('click', this.triggerClick.bind(this));\n window.addEventListener('resize', this.resize.bind(this));\n }
1\n triggerClick() {\n if (mq('md')) {\n return;\n }\n if (this.expanded) {\n this.expandableSection.style[this.propertyToUse] = 0;\n this.expandableSection.style.pointerEvents = 'none';\n this.trigger.classList.remove('open');\n } else {\n this.expandableSection.style[this.propertyToUse] = `${this.height}px`;\n this.expandableSection.style.pointerEvents = 'all';\n this.trigger.classList.add('open');\n }\n this.expanded = !this.expanded;\n }\n resize() {\n if (!mq('md')) {\n this.expanded = false;\n this.expandableSection.style[this.propertyToUse] = 0;\n this.trigger.classList.remove('open');\n } else {\n this.expandableSection.style[this.propertyToUse] = `auto`;\n }\n }\n}\n;// ./sidebar/sidebar.js\n\n\nclass Sidebar extends DomComponent {\n constructor($domElement) {\n super($domElement);\n setTimeout(() => {\n this.init();\n this.loaded();\n });\n }\n init() {\n this.$accordionTrigger = this.find('[js-accordion-trigger]');\n this.accordion = new SidebarAccordion(this.$accordionTrigger);\n }\n}\n;// ./js/lib/on-load.js\nfunction onLoad(cb, onDOMContentLoad = true) {\n if (onDOMContentLoad === true) {\n if (document.readyState === 'complete' || document.readyState === 'loaded') {\n cb();\n } else {\n window.addEventListener('DOMContentLoaded', cb);\n }\n } else {\n if (document.readyState === 'complete') {\n cb();\n } else {\n window.addEventListener('load', cb);\n }\n }\n}\n;// ./js/lib/register-module.js\n\n\nconst registerModule = (selector, ComponentClass, onDOMContentLoad = false) => {\n onLoad(() => {\n const domNodes = document.querySelectorAll(`[data-module=\"${selector}\"]`);\n if (domNodes.length === 0) {\n return;\n }\n each(domNodes, domElement => new ComponentClass(domElement));\n }, onDOMContentLoad);\n};\n/* harmony default export */ const register_module = (registerModule);\n;// ./blocks/featured-content/featured-news.js\nconst setOffsets = els =>
1 {\n els.forEach(el => {\n let offset = [];\n if (el.querySelectorAll('.umw-featured-news-card__main__content').length > 0) {\n const text = el.querySelector('.umw-featured-news-card__main__content');\n const image = el.querySelector('.umw-featured-news-card__main__image');\n offset = [text.getBoundingClientRect().height, image.getBoundingClientRect().height / 2, parseInt(window.getComputedStyle(image).getPropertyValue('margin-bottom'))];\n } else if (el.querySelectorAll('news-card').length > 0) {\n const text = el.querySelector('news-card').shadowRoot.querySelector('.umw-news-card__content');\n const image = el.querySelector('news-card').shadowRoot.querySelector('.umw-news-card__article-image');\n offset = [text.getBoundingClientRect().height, image.getBoundingClientRect().height / 2, parseInt(window.getComputedStyle(text).getPropertyValue('padding-top'))];\n }\n offset = offset.reduce((prev, cur) => prev + cur, 0);\n el.style.setProperty('--bg-offset', `${offset}px`);\n });\n};\nconst mobileMQ = window.matchMedia('(max-width: 1093px)');\nlet timeout = 0;\n/* harmony default export */ const featured_news = (() => {\n let featuredNewsCards = Array.from(document.querySelectorAll('.umw-featured-news-card'));\n\n // Only need cards that have a Heading and See More inside.\n featuredNewsCards = featuredNewsCards.filter(item => item.querySelector('.umw-heading-and-see-more'));\n const setAllOffsets = setOffsets.bind(null, featuredNewsCards);\n setAllOffsets();\n window.addEventListener('load', setAllOffsets);\n window.addEventListener('resize', () => {\n window.clearTimeout(timeout);\n if (mobileMQ.matches) {\n window.setTimeout(setAllOffsets, 200);\n }\n });\n});\n;// ./js/components/expandable.js\nfunction expandable_defineProperty(e, r, t) { return (r = expandable_toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction expandable_toPropertyKey(t) { var i = expandable_toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : i + \"\"; }\nfunction expandable_toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nclass Expandable {\n constructor(el, amount = 20) {\n expandable_defineProperty(this, \"_width\", void 0);\n this.el = el;\n this.amount = amount;\n window.addEventListener('resize', this.initializeWidth.bind(this));\n this.initializeWidth();\n this.el.addEventListener('mouseover', this.mouseover.bind(this));\n this.el.addEventListener('mouseout', this.mouseout.bind(this));\n window.addEventListener('resize', () => {\n this.el.style.width = `auto`;\n setTimeout(() => {\n this.initializeWidth();\n this.el.style.width = `${this.width}px`;\n }, 10);\n });\n }\n get width() {\n return this._width;\n }\n set width(newWidth) {\n this.el.style.width = `${newWidth}px`;\n this._width = newWidth;\n }\n mouseover() {\n this.el.style.width = `${this.width + 20}px`;\n this.el.classList.add('hover');\n }\n mouseout() {\n this.el.style.width = `${this.width}px`;\n this.el.classList.remove('hover');\n }\n initializeWidth() {\n const rect = this.el.getBoundingClientRect();\n this.width = Math.ceil(rect.width);\n }\n static init() {\n setTimeout(() => {\n const items = document.querySelectorAll('[js-expandable], .umw-with-blocks .button:not(.gform_button)');\n Array.from(items).map(el => new Expandable(el));\n }, 250);\n }\n}\n;// ../../blocks/src/hero/view.js\nfunction handleHeroMedia() {\n // Adjust header and logo for hero.\n const startingHero = document.querySelector('.umw-hero');\n console.group('UMW Hero');\n let pictureIndex = 0;\n let videoIndex = 0;\n\n // Randomize media.\n startingHero.querySelectorAll('video').forEach(el => {\n console.log('Processing video %d', videoIndex);\n videoIndex++;\n let options = el.querySelectorAll('source[data-layout=\"desktop\"]');\n let optionsMobile = el.querySelectorAll('source[data-layout=\"mobile\"]');\n if (!optionsMobile?.length) {\n optionsMobile = options;\n }\n const index = Math.floor(Math.random() * options.length);\n const indexMobile = optionsMobile?.[index] ? index : Math.floor(Math.random() * optionsMobile.length);\n console.group('Hero Video');\n console.log('Preparing to set the desktop source to %s', options[index].dataset.src);\n options[index].src = options[index].dataset.src;\n console.log('Preparing to set the mobile source to %s', optionsMobile[indexMobile].dataset.src);\n console.groupEnd();\n optionsMobile[indexMobile].src = optionsMobile[indexMobile].dataset.src;\n\n /*options.forEach((opt) => {\r\n if ( opt.hasAttribute('src') ) {\r\n return;\r\n }\r\n opt.remove();\r\n })\r\n optionsMobile.forEach((opt) => {\r\n if ( opt.hasAttribute('src') ) {\r\n return;\r\n }\r\n opt.remove();\r\n })*/\n\n el.load();\n });\n startingHero.querySelectorAll('picture').forEach(el => {\n let options = el.querySelectorAll('source[data-layout=\"desktop\"]');\n let optionsMobile = el.querySelectorAll('source[data-layout=\"mobile\"]');\n\n // If there are no mobile options, set them to be the same as the desktop options\n if (!optionsMobile?.length) {\n optionsMobile = options;\n }\n pictureIndex++;\n const imgEl = el.querySelector('img');\n const index = Math.floor(Math.random() * options.length);\n const indexMobile = optionsMobile?.[index] ? index : Math.floor(Math.random() * optionsMobile.length);\n options[index].setAttribute('srcset', options[index].dataset.src);\n optionsMobile[indexMobile].setAttribute('srcset', optionsMobile[indexMobile].dataset.src);\n imgEl.setAttribute('src', optionsMobile[indexMobile].dataset.src);\n imgEl.setAttribute('alt', optionsMobile[indexMobile].dataset.alt ? optionsMobile[indexMobile].dataset.alt : options[index].dataset.alt);\n options.forEach(opt => {\n if (opt.hasAttribute('srcset')) {\n return;\n }\n opt.remove();\n });\n optionsMobile.forEach(opt => {\n if (opt.hasAttribute('srcset')) {\n return;\n }\n opt.remove();\n });\n });\n console.groupEnd();\n}\nwindow.addEventListener('DOMContentLoaded', () => {\n handleHeroMedia();\n});\n;// ./blocks/hero-intro/hero-intro.block.js\n\n\n\n\n\nclass HeroIntro extends DomComponent {\n constructor($domElement) {\n super($domElement);\n setTimeout(() =>
1 {\n this.init();\n this.loaded();\n });\n }\n init() {\n this.$links = this.findAll('[js-link]');\n Array.from(this.$links).map(link => new Expandable(link));\n }\n}\nregister_module('hero-intro', HeroIntro);\nconst removeExtraHeader = () => {\n if (document.querySelectorAll('h1.umw-hero__title__header').length <= 0) {\n return;\n }\n if (document.querySelectorAll('h1.front-page-title').length <= 1) {\n return;\n }\n const pageTitle = document.querySelector('h1.front-page-title');\n pageTitle.remove();\n};\nconst handlePlayPause = e => {\n console.group('Play Pause Handler');\n const video = e.target.closest('div').querySelector('video');\n const oldButton = e.target.closest('div').querySelector('button[data-identifier=\"playpause\"]');\n const button = getPlayPauseButton(video);\n const play = button.play;\n const playButton = button.playButton;\n const pauseButton = button.pauseButton;\n let span = play.querySelector('span.play-pause-span');\n let icon = play.querySelector('i.play-pause-icon');\n if (video.paused) {\n console.log('The video appears to be paused currently');\n play.setAttribute('aria-label', 'Pause hero video');\n play.classList.remove('play');\n play.classList.add('pause');\n play.setAttribute('data-icon', 'u');\n play.innerHTML = '';\n console.log(pauseButton);\n play.appendChild(pauseButton.span);\n play.appendChild(pauseButton.icon);\n console.log(play);\n console.log('Playing the video now');\n video.play();\n } else {\n console.log('It appears the video is currently playing');\n play.setAttribute('aria-label', 'Resume hero video');\n play.classList.remove('pause');\n play.classList.add('play');\n play.setAttribute('data-icon', 'P');\n play.innerHTML = '';\n console.log(playButton);\n play.appendChild(playButton.span);\n play.appendChild(playButton.icon);\n console.log(play);\n console.log('We are pausing the video');\n video.pause();\n }\n oldButton.parentNode.replaceChild(play, oldButton);\n console.groupEnd();\n};\nconst getPlayPauseButton = video => {\n let isPaused = false;\n let play = null;\n if (video.closest('.umw-hero').querySelectorAll('button[data-identifier=\"playpause\"]').length > 0) {\n play = video.closest('.umw-hero').querySelector('button[data-identifier=\"playpause\"]');\n if (play.classList.contains('pause')) {\n isPaused = true;\n }\n } else {\n play = document.createElement('button');\n play.setAttribute('data-identifier', 'playpause');\n play.setAttribute('aria-label', 'Pause Hero Video');\n play.classList.add('play');\n play.setAttribute('data-icon', 'P');\n }\n play.innerHTML = '';\n const playButton = {\n text: document.createTextNode('Play'),\n span: document.createElement('span'),\n icon: document.createElement('i')\n };\n playButton.span.classList.add('sr-only', 'play-pause-span', 'play-hero');\n playButton.span.appendChild(playButton.text);\n playButton.icon.classList.add('iconoir-play', 'play-pause-icon');\n const pauseButton = {\n text: document.createTextNode('Pause'),\n span: document.createElement('span'),\n icon: document.createElement('i')\n };\n pauseButton.span.classList.add('sr-only', 'play-pause-span', 'pause-hero');\n pauseButton.span.appendChild(pauseButton.text);\n pauseButton.icon.classList.add('iconoir-pause', 'play-pause-icon');\n if (isPaused) {\n play.appendChild(playButton.span);\n play.appendChild(playButton.icon);\n } else {\n play.appendChild(pauseButton.span);\n play.appendChild(pauseButton.icon);\n }\n play.addEventListener('click', handlePlayPause);\n return {\n 'play': play,\n 'playButton': playButton,\n 'pauseButton': pauseButton\n };\n};\n\n// Add controls to hero videos - CAG\nconst addHeroVideoControls = () => {\n const videos = document.querySelectorAll('.umw-hero__media video');\n if (videos.length <= 0) {\n return;\n }\n videos.forEach(video => {\n const parentContainer = video.closest('.umw-hero__media');\n const play = getPlayPauseButton(video);\n parentContainer.appendChild(play.play);\n });\n};\nconst layoutChangedCallback = matches => {\n if (matches === initialMatch) {\n console.group('Hero Layout Change Listener');\n console.log('No breaking change');\n console.groupEnd();\n return;\n }\n if (document.querySelectorAll('.umw-hero__media__video').length <= 0) {\n return;\n }\n console.group('Hero Layout Change Listener');\n const video = document.querySelector('.umw-hero__media__video');\n video.load();\n console.log(video);\n if (video.closest('.umw-hero').querySelectorAll('button[data-identifier=\"playpause\"]').length > 0) {\n let b = video.closest('.umw-hero').querySelector('button[data-identifier=\"playpause\"]');\n console.log('Found a button: %o', b);\n if (b.querySelectorAll('.play-hero').length > 0) {\n console.log('The video should be paused');\n video.pause();\n b.addEventListener('click', handlePlayPause);\n }\n }\n initialMatch = matches;\n console.groupEnd();\n};\n\n// set media query\nconst mql = window.matchMedia('(min-width: 600px)');\nlet initialMatch = mql.matches;\n\n// set listener to run callback\nmql.addEventListener('change', e => layoutChangedCallback(e.matches));\nonLoad(() =>
1 {\n addHeroVideoControls();\n removeExtraHeader();\n\n // the callback doesn't run immediately, so we run it manually once\n layoutChangedCallback(mql.matches);\n});\nwindow.addEventListener('DOMContentLoaded', () => {\n handleHeroMedia();\n});\n;// ./blocks/featured-content/featured-content.block.js\n\n\n\nclass FeaturedContent extends DomComponent {\n constructor($domElement) {\n super($domElement);\n setTimeout(() => {\n this.init();\n this.loaded();\n });\n }\n init() {\n // this.$expanable = this.findAll('[js-expandable]');\n // Array.from(this.$expanable).map(link => new Expandable(link));\n }\n}\nregister_module('featured-content', FeaturedContent);\n;// ./blocks/video/video.block.js\n\n\nclass Video extends DomComponent {\n constructor($domElement) {\n super($domElement);\n setTimeout(() => {\n this.init();\n this.loaded();\n });\n }\n init() {\n this.$video = this.find('[js-video]');\n this.$playButton = this.find('[js-play]');\n this.bindEvents();\n }\n bindEvents() {\n if (this.$playButton) {\n this.$playButton.addEventListener('click', this.playVideo.bind(this));\n }\n }\n playVideo() {\n this.$domElement.classList.add('video-playing');\n this.$video.play();\n this.$video.setAttribute('controls', true);\n }\n}\nregister_module('video', Video);\n;// ./blocks/accordion/accordion.block.js\n\n\nclass Accordion extends DomComponent {\n constructor($domElement) {\n super($domElement);\n this.questionCounter = 0;\n this.setAccordionID();\n this.possibleHash = window.location.hash.substring(1);\n this.openItem = null;\n setTimeout(() => {\n this.init();\n this.loaded();\n }, 100);\n }\n setAccordionID() {\n let nodes = document.querySelectorAll('.umw-accordion-container');\n this.accordionID = Array.prototype.indexOf.call(nodes, this.$domElement) + 1;\n }\n getAccordionID() {\n return this.accordionID;\n }\n getAnswerID(el) {\n const nodes = this.$domElement.querySelectorAll('[data-js-question]');\n let id = Array.prototype.indexOf.call(nodes, el.closest('[data-js-question]')) + 1;\n return 'accordion-' + this.getAccordionID() + '-answer-' + id;\n }\n getTriggerID(el) {\n const nodes = this.$domElement.querySelectorAll('[data-js-question]');\n let id = Array.prototype.indexOf.call(nodes, el.closest('[data-js-question]')) + 1;\n return 'accordion-' + this.getAccordionID() + '-question-' + id;\n }\n init() {\n window.addEventListener('hashchange', this.hashChanged.bind(this));\n this.$domElement.classList.add('accordion-js');\n this.isOnlyOneOpenAtATime = this.$domElement.dataset.onlyOne == 'true';\n this.$triggers = this.find('[data-js-trigger]', true);\n this.$questions = this.find('[data-js-question]', true);\n each(this.$questions, question => {\n const trigger = question.querySelector('[data-js-trigger]');\n const answer = question.querySelector('.accordion__question__answer');\n if (this.possibleHash && answer.querySelectorAll('#' + this.possibleHash).length >= 1) {\n this.openItem = trigger;\n }\n trigger.setAttribute('aria-expanded', 'false');\n trigger.setAttribute('aria-controls', this.getAnswerID(trigger));\n trigger.setAttribute('id', this.getTriggerID(trigger));\n question.setAttribute('aria-labelledby', this.getTriggerID(trigger));\n question.setAttribute('role', 'region');\n answer.setAttribute('id', this.getAnswerID(answer));\n answer.setAttribute('aria-hidden', 'true');\n trigger.addEventListener('click', this.toggleOpen.bind(this));\n });\n if (this.openItem === null && this.possibleHash) {\n if (this.$domElement.querySelectorAll('#' + this.possibleHash + '.accordion__question__trigger, #' + this.possibleHash + '.accordion__question__answer').length >= 1) {\n let i = this.$domElement.querySelector('.accordion__question#' + this.possibleHash + ', .accordion__question > #' + this.possibleHash);\n this.openItem = i.closest('.umw-collapsible-section.umw-custom-block').querySelector('[data-js-trigger]');\n }\n }\n if (this.openItem) {\n this.closeAll();\n this.openItem.click();\n this.openItem.scrollIntoView();\n }\n }\n hashChanged(e) {\n this.possibleHash = window.location.hash.substring(1);\n this.openItem = null;\n if (this.possibleHash) {\n if (this.$domElement.querySelectorAll('.accordion__question #' + this.possibleHash).length >= 1) {\n let i = this.$domElement.querySelector('#' + this.possibleHash);\n this.openItem = i.closest('.umw-collapsible-section.umw-custom-block').querySelector('[data-js-trigger]');\n }\n }\n if (this.openItem) {\n this.closeAll();\n this.openItem.click();\n this.openItem.scrollIntoView();\n }\n }\n toggleOpen(e) {\n const containerClasses = e.currentTarget.parentElement.classList;\n const previouslyOpen = containerClasses.contains('open') === true;\n const button = e.currentTarget;\n const accordion = button.closest('.umw-collapsible-section');\n if (this.isOnlyOneOpenAtATime) {\n this.closeAll();\n }\n if (previouslyOpen) {\n containerClasses.remove('open');\n button.setAttribute('aria-expanded', 'false');\n button.closest('[data-js-question]').querySelector('.accordion__question__answer').setAttribute('aria-hidden', 'true');\n } else {\n containerClasses.add('open');\n button.setAttribute('aria-expanded', 'true');\n button.closest('[data-js-question]').querySelector('.accordion__question__answer').setAttribute('aria-hidden', 'false');\n }\n }\n closeAll() {\n each(this.$questions, $question => {\n $question.querySelector('.accordion__question__answer').setAttribute('aria-hidden', 'true');\n $question.querySelector('[data-js-trigger]').setAttribute('aria-expanded', 'false');\n $question.classList.remove('open');\n });\n }\n}\n;// ./blocks/horizontal-scroller/horizontal-scroller.block.js\n\n\n\n\n\nclass HorizontalScroller extends DomComponent {\n constructor($domElement) {\n super($domElement);\n this.hasScroll = false;\n this.$wrapper = this.$domElement.querySelector('.umw-horizontal-scroller__wrapper');\n this.$domElement.classList.add('scroll');\n this.checkForScroll();\n window.addEventListener('resize', this.checkForScroll.bind(this));\n }\n checkForScroll() {\n if (this.isScrollable() && !this.hasScroll) {\n this.createThumb();\n } else if (!this.isScrollable() && this.hasScroll) {\n this.removeScroller();\n }\n }\n removeScroller() {\n this.hasScroll = false;\n if (this.$track) {\n this.$track.remove();\n }\n }\n isScrollable() {\n const children = this.$domElement.querySelectorAll('.umw-horizontal-scroller__c
1olumn');\n let width = 0;\n each(children, child => {\n width += child.offsetWidth;\n });\n return document.documentElement.clientWidth < width;\n }\n createThumb() {\n this.hasScroll = true;\n const html = `\n\t\t\t<div class=\"scroll__track\" js-track>\n\t\t\t\t<div class=\"scroll__thumb\" js-thumb />\n\t\t\t</div>\n\t\t`;\n this.$domElement.insertAdjacentHTML('afterend', html);\n setTimeout(() => {\n this.setUpBindings();\n }, 50);\n }\n setUpBindings() {\n this.$track = this.$domElement.nextElementSibling;\n this.$thumb = this.$domElement.nextElementSibling.querySelector('[js-thumb]');\n this.lengthOfScroll = this.$track.offsetWidth - this.$thumb.offsetWidth;\n this.$wrapper.addEventListener('scroll', this.onScroll.bind(this));\n this.initializeScrollBar();\n }\n initializeScrollBar() {\n // const padding = 48 - 8; // this is the 24px padding on each side. We subtract 8 as this is the placeholder to give us a flush alignment\n this.totalWidth = this.$wrapper.scrollWidth - document.documentElement.clientWidth;\n this.scrollRatio = this.lengthOfScroll / this.totalWidth;\n }\n onScroll() {\n // const amountScrolled = (this.$domElement.scrollLeft / this.totalWidth) * 100;\n const amountScrolled = this.$wrapper.scrollLeft * this.scrollRatio;\n this.$thumb.style.transform = `translateX(${amountScrolled}px)`;\n }\n static init() {\n if (!mq('md')) {\n onLoad(() => {\n const scroll = document.querySelectorAll('[js-horizontal-scroll]');\n Array.from(scroll).map(el => new HorizontalScroll(el));\n });\n }\n }\n}\nregister_module('horizontal-scroller', HorizontalScroller);\n;// ./js/services/horizontal-scroll.js\n\n\n\nclass horizontal_scroll_HorizontalScroll {\n constructor($el) {\n this.$el = $el;\n this.$inner = this.$el.firstElementChild;\n this.$el.classList.add('scroll');\n if (this.isScrollable()) {\n this.createThumb();\n }\n }\n isScrollable() {\n const children = this.$inner.children;\n let width = 0;\n each(children, child => {\n width += child.offsetWidth;\n });\n return document.documentElement.clientWidth < width;\n }\n createThumb() {\n const html = `\n\t\t\t<div class=\"scroll__track\" js-track>\n\t\t\t\t<div class=\"scroll__thumb\" js-thumb />\n\t\t\t</div>\n\t\t`;\n this.$el.insertAdjacentHTML('afterend', html);\n setTimeout(() => {\n this.setUpBindings();\n }, 50);\n }\n setUpBindings() {\n this.$track = this.$el.nextElementSibling;\n this.$thumb = this.$el.nextElementSibling.querySelector('[js-thumb]');\n this.lengthOfScroll = this.$track.offsetWidth - this.$thumb.offsetWidth;\n this.$el.addEventListener('scroll', this.onScroll.bind(this));\n this.initializeScrollBar();\n }\n initializeScrollBar() {\n // const padding = 48 - 8; // this is the 24px padding on each side. We subtract 8 as this is the placeholder to give us a flush alignment\n this.totalWidth = this.$el.scrollWidth - document.documentElement.clientWidth;\n this.scrollRatio = this.lengthOfScroll / this.totalWidth;\n }\n onScroll() {\n // const amountScrolled = (this.$el.scrollLeft / this.totalWidth) * 100;\n const amountScrolled = this.$el.scrollLeft * this.scrollRatio;\n this.$thumb.style.transform = `translateX(${amountScrolled}px)`;\n }\n static init() {\n if (!mq('md')) {\n onLoad(() => {\n const scroll = document.querySelectorAll('[js-horizontal-scroll]');\n Array.from(scroll).map(el => new horizontal_scroll_HorizontalScroll(el));\n });\n }\n }\n}\n/* harmony default export */ const horizontal_scroll = (horizontal_scroll_HorizontalScroll);\n// EXTERNAL MODULE: ./js/components/select.js\nvar components_select = __webpack_require__(827);\n;// ./components/forms/forms.js\n\n\n\nclass GravityForm {\n constructor($form) {\n this.$form = $form;\n this.$inputs = this.$form.querySelectorAll('input[type=\"text\"],input[type=\"email\"], input[type=\"tel\"], textarea, select');\n this.bindEvents();\n $('select', this.$form).niceSelect();\n }\n bindEvents() {\n each(this.$inputs, input => {\n input.addEventListener('blur', this.onBlur.bind(this));\n });\n }\n onBlur(e) {\n if (e.currentTarget.value.length > 0) {\n e.currentTarget.classList.add('has-input');\n } else {\n e.currentTarget.classList.remove('has-input');\n }\n }\n static init() {\n Array.from(document.querySelectorAll('.gform_wrapper form')).map(form => new GravityForm(form));\n }\n}\n;// ./index.js\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\r\n * If there is a sidebar on the page, move the Intro Text and Button blocks out\r\n * of the Hero and into the main content.\r\n *\r\n * @param {HTMLElement} hero The Hero block.\r\n */\nconst manipulateHeroForSidebar = hero => {\n const mainContent = document.querySelector('.umw-block-content > .entry-content');\n const heroIntroTextContainer = hero.querySelector('.wp-block-umw-hero-intro-text');\n const heroIntroText = hero.querySelector('.umw-intro-text');\n const heroButtonsContainer = hero.querySelector('.wp-block-umw-hero-ctas');\n const heroButtons = hero.querySelectorAll('.umw-hero__links__wrapper > *');\n\n // Move buttons back into the main content first, so moved intro text will go above them.\n if (heroButtons.length) {\n Array.from(heroButtons).reverse().forEac
1h(el => {\n mainContent.insertBefore(el, mainContent.firstChild);\n });\n heroButtonsContainer.parentElement.removeChild(heroButtonsContainer);\n } else if (heroIntroTextContainer.length >= 1) {\n // Remove the hero buttons completely if there aren't any\n heroButtonsContainer.parentElement.removeChild(heroButtonsContainer);\n }\n\n // Move the intro text back into the main content.\n if (heroIntroText) {\n mainContent.insertBefore(heroIntroText, mainContent.firstChild);\n heroIntroTextContainer.parentElement.removeChild(heroIntroTextContainer);\n }\n};\n\n/**\r\n * If there is Intro Text inside a Hero, the breadcrumb should be above\r\n * that Intro Text.\r\n *\r\n * @param {HTMLElement} breadcrumb The breadcrumb container.\r\n */\nconst manipulateBreadcrumb = breadcrumb => {\n // Find an Intro Text block in a Hero.\n const validIntroText = document.querySelector('.layout > .umw-hero .umw-intro-text__inner');\n if (validIntroText) {\n // Move the breadcrumb into the hero above the Intro Text block.\n validIntroText.insertBefore(breadcrumb, validIntroText.firstChild);\n }\n};\n\n/**\r\n * Do all hero and breadcrumb manipulation in the right order and only when necessary.\r\n */\nconst manipulateHeroAndBreadcrumb = () => {\n const sidebar = document.querySelector('.umw-sidebar');\n const startingHero = document.querySelector('.layout > .umw-hero');\n const breadcrumb = document.querySelector('.breadcrumb');\n if (sidebar && startingHero) {\n manipulateHeroForSidebar(startingHero);\n }\n if (!sidebar && startingHero && breadcrumb) {\n manipulateBreadcrumb(breadcrumb);\n }\n\n // Bail out if no breadcrumb.\n if (!breadcrumb) {\n return;\n }\n\n // Move the mobile breadcrumb back arrow into the link element, which is not\n // as easy to do in PHP.\n const previous = breadcrumb.querySelector('.breadcrumb__previous');\n const svg = previous.querySelector('svg');\n const previousLink = previous.querySelector('a');\n if (svg && previousLink) {\n previousLink.insertBefore(svg, previousLink.firstChild);\n }\n};\n\n// Add landmark roles to elements that need them\nconst addLandmarkRoles = () => {\n const skipLinks = document.querySelectorAll('.genesis-skip-link');\n skipLinks.forEach(skiplink => {\n const wrap = document.createElement('nav');\n wrap.setAttribute('role', 'navigation');\n wrap.setAttribute('aria-label', 'Skip Links');\n skiplink.parentNode.insertBefore(wrap, skiplink);\n wrap.appendChild(skiplink);\n });\n};\n\n// Tasks to do on the window's `load` event; see below.\nconst onFullLoad = () => {\n window.imageGalleries = [];\n document.querySelectorAll('.image-gallery').forEach(el => {\n window.imageGalleries.push(new ImageGallery(el));\n });\n document.querySelectorAll('.umw-sidebar').forEach(el => {\n new Sidebar(el);\n });\n};\n\n// The `false` in the second parameter here makes the callback run on the\n// window's `load` event, later than the usual DOMContentLoaded. This is\n// needed to get image gallery initialization right, since it depends on\n// image dimensions.\nonLoad(() => {\n horizontal_scroll.init();\n Expandable.init();\n GravityForm.init();\n if (document.querySelector('#genesis-content')) {\n onFullLoad();\n } else {\n register_module('image-gallery', ImageGallery);\n register_module('carousel', Carousel);\n register_module('sidebar', Sidebar);\n register_module('header', Header);\n }\n}, false);\n\n// Immediately upon DOMContentLoaded.\nonLoad(() => {\n manipulateHeroAndBreadcrumb();\n featured_news();\n addLandmarkRoles();\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMzEyLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7Ozs7QUNYQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFPQTtBQUNBO0FBQUE7QUFQQTtBQUVBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0F
1BRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9YQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQ0pBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUNBO0FBQUE7QUFKQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0FDcEJBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTs7QUNkQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUNsREE7QUFHQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkRBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQUE7QUFBQTs7QUMxRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0F
1BRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7O0FDak9BO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQUVBO0FBRUE7O0FDcEJBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUNuQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQ3ZGQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBOztBQ2hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2pzL2xpYi9kb20tY29tcG9uZW50LmpzPzFjYmMiLCJ3ZWJwYWNrOi8vLy4vanMvbGliL2VhY2guanM/ZmU5ZiIsIndlYnBhY2s6Ly8vLi9qcy9saWIvY29uc3QuanM/Y2UzMSIsIndlYnBhY2s6Ly8vLi9ibG9ja3MvaW1hZ2UtZ2FsbGVyeS9pbWFnZS1nYWxsZXJ5LmJsb2NrLmpzP2FkNWQiLCJ3ZWJwYWNrOi8vLy4vanMvbGliL2RlbGF5LmpzP2IyMWMiLCJ3ZWJwYWNrOi8vLy4vYmxvY2tzL3B1bGwtcXVvdGVzL3B1bGwtcXVvdGVzLmJsb2NrLmpzPzhkYjMiLCJ3ZWJwYWNrOi8vLy4vanMvbGliL21xLmpzP2IyNTQiLCJ3ZWJwYWNrOi8vLy4vanMvY29tcG9uZW50cy9zaWRlYmFyLWFjY29yZGlvbi5qcz80ZGZlIiwid2VicGFjazovLy8uL3NpZGViYXIvc2lkZWJhci5qcz82MjA3Iiwid2VicGFjazovLy8uL2pzL2xpYi9vbi1sb2FkLmpzP2RkYmQiLCJ3ZWJwYWNrOi8vLy4vanMvbGliL3JlZ2lzdGVyLW1vZHVsZS5qcz9lY2ZjIiwid2VicGFjazovLy8uL2Jsb2Nrcy9mZWF0dXJlZC1jb250ZW50L2ZlYXR1cmVkLW5ld3MuanM/Y2YwYiIsIndlYnBhY2s6Ly8vLi9qcy9jb21wb25lbnRzL2V4cGFuZGFibGUuanM/OWU4NCIsIndlYnBhY2s6Ly8vLi4vLi4vYmxvY2tzL3NyYy9oZXJvL3ZpZXcuanM/M2NjMyIsIndlYnBhY2s6Ly8vLi9ibG9ja3MvaGVyby1pbnRyby9oZXJvLWludHJvLmJsb2NrLmpzPzFiNjIiLCJ3ZWJwYWNrOi8vLy4vYmxvY2tzL2ZlYXR1cmVkLWNvbnRlbnQvZmVhdHVyZWQtY29udGVudC5ibG9jay5qcz8wZjMwIiwid2VicGFjazovLy8uL2Jsb2Nrcy92aWRlby92aWRlby5ibG9jay5qcz8xZDM4Iiwid2VicGFjazovLy8uL2Jsb2Nrcy9hY2NvcmRpb24vYWNjb3JkaW9uLmJsb2NrLmpzP2MxMjQiLCJ3ZWJwYWNrOi8vLy4vYmxvY2tzL2hvcml6b250YWwtc2Nyb2xsZXIvaG9yaXpvbn
1RhbC1zY3JvbGxlci5ibG9jay5qcz8wOTRmIiwid2VicGFjazovLy8uL2pzL3NlcnZpY2VzL2hvcml6b250YWwtc2Nyb2xsLmpzPzFjMGMiLCJ3ZWJwYWNrOi8vLy4vY29tcG9uZW50cy9mb3Jtcy9mb3Jtcy5qcz8xMGVlIiwid2VicGFjazovLy8uL2luZGV4LmpzPzQxZjUiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tQ29tcG9uZW50IHtcclxuXHQkZG9tRWxlbWVudDtcclxuXHJcblx0Y29uc3RydWN0b3IoJGRvbUVsZW1lbnQpIHtcclxuXHRcdGlmICghJGRvbUVsZW1lbnQpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuJGRvbUVsZW1lbnQgPSAkZG9tRWxlbWVudDtcclxuXHRcdHRoaXMuJGRvbUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnanMnKTtcclxuXHRcdFt0aGlzLmJhc2VDU1NDbGFzc10gPSB0aGlzLiRkb21FbGVtZW50LmNsYXNzTGlzdDtcclxuXHR9XHJcblxyXG5cdGxvYWRlZCgpIHtcclxuXHRcdHRoaXMuJGRvbUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnanMtbG9hZGVkJyk7XHJcblx0fVxyXG5cclxuXHRmaW5kKHNlbGVjdG9yLCBrZWVwQXNBcnJheSA9IGZhbHNlKSB7XHJcblx0XHRjb25zdCBmb3VuZCA9IHRoaXMuZmluZEFsbChzZWxlY3Rvcik7XHJcblx0XHRpZiAoIWZvdW5kKSB7XHJcblx0XHRcdHJldHVybiBmYWxzZTtcclxuXHRcdH1cclxuXHRcdGlmIChrZWVwQXNBcnJheSA9PT0gZmFsc2UpIHtcclxuXHRcdFx0cmV0dXJuIGZvdW5kLmxlbmd0aCA+IDEgPyBmb3VuZCA6IGZvdW5kWzBdO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZvdW5kO1xyXG5cdH1cclxuXHJcblx0ZmluZEFsbChzZWxlY3Rvcikge1xyXG5cdFx0Y29uc3QgZm91bmQgPSB0aGlzLiRkb21FbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpO1xyXG5cdFx0aWYgKGZvdW5kICYmIGZvdW5kLmxlbmd0aCkge1xyXG5cdFx0XHRyZXR1cm4gQXJyYXkuZnJvbShmb3VuZCk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZm91bmQ7XHJcblx0fVxyXG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZWFjaChub2RlTGlzdCwgY2IpIHtcclxuXHRpZiAoIW5vZGVMaXN0IHx8ICFub2RlTGlzdC5sZW5ndGgpIHtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBub2RlTGlzdC5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y2Iobm9kZUxpc3RbaV0sIGkpO1xyXG5cdH1cclxufSIsImV4cG9ydCBjb25zdCBtcU1hcCA9IHtcclxuXHR4czogNDgwLFxyXG5cdHNtOiA3NjgsXHJcblx0bWQ6IDEwOTQsXHJcblx0bGc6IDEyODAsXHJcblx0eGw6IDE2OTAsXHJcblx0bmF2RGVza3RvcDogMTY5MCxcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBkdXJhdGlvbiA9IDQwMDtcclxuZXhwb3J0IGNvbnN0IGR1cmF0aW9uTG9uZyA9IDcwMDtcclxuZXhwb3J0IGNvbnN0ICQgPSB3aW5kb3cualF1ZXJ5OyIsImltcG9ydCBEb21Db21wb25lbnQgZnJvbSBcIi4uLy4uL2pzL2xpYi9kb20tY29tcG9uZW50XCI7XHJcblxyXG5pbXBvcnQgZWFjaCBmcm9tICcuLi8uLi9qcy9saWIvZWFjaCc7XHJcbmltcG9ydCBkZWxheSBmcm9tICcuLi8uLi9qcy9saWIvZGVsYXknO1xyXG5pbXBvcnQge2R1cmF0aW9ufSBmcm9tICcuLi8uLi9qcy9saWIvY29uc3QnO1xyXG5cclxubGV0IGFjdGl2ZUxpZ2h0Ym94TGluayA9IG51bGw7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbWFnZUdhbGxlcnkgZXh0ZW5kcyBEb21Db21wb25lbnQge1xyXG4gICAgX2luZGV4ID0gbnVsbDtcclxuXHJcbiAgICBfdmlzaWJsZVRodW1ibmFpbHMgPSA0O1xyXG5cclxuICAgIF9ncmlkR2FwID0gMTY7XHJcblxyXG4gICAgY29uc3RydWN0b3IoJGRvbUVsZW1lbnQpIHtcclxuICAgICAgICBzdXBlcigkZG9tRWxlbWVudCk7XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZWQoKTtcclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpbmRleCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGluZGV4KG5ld0luZGV4KSB7XHJcbiAgICAgICAgaWYgKG5ld0luZGV4ID49IHRoaXMuJHNsaWRlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbmV3SW5kZXggPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG5ld0luZGV4IDwgMCkge1xyXG4gICAgICAgICAgICBuZXdJbmRleCA9IHRoaXMuJHNsaWRlcy5sZW5ndGggLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0cmFuc2Zvcm1WYWx1ZVggPSBuZXdJbmRleCAqIC0xMDA7XHJcblxyXG4gICAgICAgIC8vIHdlIGFkZCBvbmUgdG8gdGhlIG5ldyBpbmRleCBzbyB3ZSBkb24ndCBzaG93IHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIGltYWdlIGluIHRoZSBsaXN0IG9mIHRodW1ibmFpbHMuIEJ1dCByYXRoZXIgdGhlIG5leHQgaW1hZ2FlIGluIHRoZSBzZXF1ZW5jZVxyXG5cclxuICAgICAgICB0aGlzLiRzbGlkZXNob3dUcmFjay5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgke3RyYW5zZm9ybVZhbHVlWH0lKWA7XHJcbiAgICAgICAgaWYgKHRoaXMuJHNsaWRlcy5sZW5ndGggPiB0aGlzLl92aXNpYmxlVGh1bWJuYWlscykge1xyXG4gICAgICAgICAgICBpZiAoKG5ld0luZGV4ICsgMSkgKyB0aGlzLl92aXNpYmxlVGh1bWJuYWlscyA8PSB0aGlzLiRzbGlkZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1WYWx1ZVkgPSAobmV3SW5kZXggKyAxKSAqIC0odGhpcy4kdGh1bWJuYWlsWzBdLm9mZnNldEhlaWdodCArIHRoaXMuX2dyaWRHYXApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy4kdGh1bWJuYWlsV
1HJhY2suc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHt0cmFuc2Zvcm1WYWx1ZVl9cHgpYDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1heFRyYW5zZm9ybSA9ICh0aGlzLiRzbGlkZXMubGVuZ3RoIC0gdGhpcy5fdmlzaWJsZVRodW1ibmFpbHMpICogLSh0aGlzLiR0aHVtYm5haWxbMF0ub2Zmc2V0SGVpZ2h0ICsgdGhpcy5fZ3JpZEdhcCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLiR0aHVtYm5haWxUcmFjay5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWSgke21heFRyYW5zZm9ybX1weClgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5pbmRleCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHBhZ2VzW3RoaXMuaW5kZXhdLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLiRwYWdlc1tuZXdJbmRleF0uY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XHJcbiAgICAgICAgdGhpcy5zaG93RGVzY3JpcHRpb24obmV3SW5kZXgpO1xyXG4gICAgICAgIHRoaXMuX2luZGV4ID0gbmV3SW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy4kc2xpZGVzID0gdGhpcy5maW5kKCdbanMtc2xpZGVdJyk7XHJcbiAgICAgICAgdGhpcy4kdGh1bWJuYWlsc0NvbnRhaW5lciA9IHRoaXMuZmluZCgnW2pzLXRodW1ibmFpbHMtY29udGFpbmVyXScpO1xyXG4gICAgICAgIHRoaXMuJHRodW1ibmFpbFRyYWNrID0gdGhpcy5maW5kKCdbanMtdGh1bWJuYWlsLXRyYWNrXScpO1xyXG4gICAgICAgIHRoaXMuJHNsaWRlc2hvd1RyYWNrID0gdGhpcy5maW5kKCdbanMtc2xpZGVzaG93LXRyYWNrXScpO1xyXG4gICAgICAgIHRoaXMuJHRodW1ibmFpbCA9IHRoaXMuZmluZCgnW2pzLXRodW1ibmFpbF0nKTtcclxuICAgICAgICB0aGlzLiRuZXh0U2xpZGUgPSB0aGlzLmZpbmQoJ1tqcy1uZXh0XScpO1xyXG4gICAgICAgIHRoaXMuJHByZXZpb3VzU2xpZGUgPSB0aGlzLmZpbmQoJ1tqcy1wcmV2XScpO1xyXG4gICAgICAgIHRoaXMuJGRlc2NyaXB0aW9ucyA9IHRoaXMuZmluZCgnW2pzLWRlc2NyaXB0aW9uXScpXHJcbiAgICAgICAgdGhpcy4kZGVzY3JpcHRvbkNvbnRhaW5lciA9IHRoaXMuZmluZCgnW2pzLWRlc2NyaXB0aW9uLWNvbnRhaW5lcl0nKTtcclxuICAgICAgICB0aGlzLiRwYWdlcyA9IHRoaXMuZmluZCgnW2pzLXBhZ2VdJyk7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVZID0gMDtcclxuICAgICAgICB0aGlzLnNldHVwTGlzdGVuZXJzKCk7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplR2FsbGVyeSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldHVwTGlzdGVuZXJzKCkge1xyXG4gICAgICAgIHRoaXMuJG5leHRTbGlkZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pbmRleCsrO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuJHByZXZpb3VzU2xpZGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5kZXgtLTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZWFjaCh0aGlzLiRzbGlkZXMsIChzbGlkZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2xpZGUucXVlcnlTZWxlY3RvcignYScpKSB7X
1HJcbiAgICAgICAgICAgICAgICBsZXQgbGluayA9IHNsaWRlLnF1ZXJ5U2VsZWN0b3IoJ2EnKTtcclxuICAgICAgICAgICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9wZW5MaWdodGJveC5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5lc2NMaWdodGJveC5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAgICAgZWFjaCh0aGlzLiR0aHVtYm5haWwsICh0aHVtYm5haWwpID0+IHtcclxuICAgICAgICAgICAgdGh1bWJuYWlsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy50aHVtYm5haWxDbGljay5iaW5kKHRoaXMpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLiR0aHVtYm5haWxzQ29udGFpbmVyLmhlaWdodCA9ICdhdXRvJztcclxuICAgICAgICAgICAgdGhpcy4kZG9tRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdyZWFkeScpO1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXNpemUpO1xyXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplR2FsbGVyeSgpO1xyXG4gICAgICAgICAgICB9LCA1MCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZUdhbGxlcnkoKSB7XHJcbiAgICAgICAgbGV0IGNvdW50ID0gdGhpcy4kdGh1bWJuYWlsV
1HJhY2suY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgIHdoaWxlIChjb3VudCA8IDQpIHtcclxuICAgICAgICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXIuY2xhc3NOYW1lID0gJ2ltYWdlLWdhbGxlcnlfX3NsaWRlc2hvd19fdGh1bWJuYWlsJztcclxuICAgICAgICAgICAgdGhpcy4kdGh1bWJuYWlsVHJhY2suYXBwZW5kKHBsYWNlaG9sZGVyKTtcclxuICAgICAgICAgICAgY291bnQrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy4kdGh1bWJuYWlsc0NvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBgJHt0aGlzLiRzbGlkZXNob3dUcmFjay5vZmZzZXRIZWlnaHR9cHhgO1xyXG5cclxuICAgICAgICB0aGlzLiRkb21FbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3JlYWR5Jyk7XHJcblxyXG4gICAgICAgIHRoaXMuY3JlYXRlTGlnaHRib3goKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaW5kZXggPT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5pbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRodW1ibmFpbENsaWNrKGUpIHtcclxuICAgICAgICB0aGlzLmluZGV4ID0gdGhpcy5nZXRJbmRleChlLmN1cnJlbnRUYXJnZXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEluZGV4KGVsZW0pIHtcclxuICAgICAgICBsZXQgaSA9IDA7XHJcbiAgICAgICAgd2hpbGUgKChlbGVtID0gZWxlbS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKSAhPSBudWxsKSArK2k7XHJcbiAgICAgICAgcmV0dXJuIGk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0Rlc2NyaXB0aW9uKG5ld0luZGV4KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuJGRlc2NyaXB0aW9uc1t0aGlzLmluZGV4XSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJGRlc2NyaXB0aW9uc1t0aGlzLmluZGV4XS5jbGFzc0xpc3QucmVtb3ZlKCdhY3RpdmUnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuJGRlc2NyaXB0aW9uc1tuZXdJbmRleF0ub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgIHRoaXMuJGRlc2NyaXB0b25Db250YWluZXIuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcclxuICAgICAgICB0aGlzLiRkZXNjcmlwdGlvbnNbbmV3SW5kZXhdLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxsIGNvZGUgYmVsb3cgaW1wbGVtZW50cyB2YXJpb3VzIGxpZ2h0Ym94IGZlYXR1cmVzXHJcbiAgICAgKi9cclxuXHJcbiAgICBjcmVhdGVMaWdodGJveCgpIHtcclxuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmxpZ2h0Ym94LWNvbnRhaW5lcicpLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGxiY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgbGJjb250YWluZXIuY2xhc3NMaXN0LmFkZCgnbGlnaHRib3gtY29udGFpbmVyJyk7XHJcbiAgICAgICAgbGJjb250YWluZXIuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2RpYWxvZycpO1xyXG4gICAgICAgIGxiY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbGxlZGJ5JywgJ2xpZ2h0Ym94LXRpdGxlJyk7XHJcbiAgICAgICAgbGJjb250YWluZXIuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgJ2xpZ2h0Ym94LWNvbnRlbnQnKTtcclxuICAgICAgICBsYmNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcclxuXHJcbiAgICAgICAgY29uc3QgbGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBsYi5jbGFzc0xpc3QuYWRkKCdsaWdodGJveCcpO1xyXG5cclxuICAgICAgICBjb25zdCBsYkZpZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ZpZ3VyZScpO1xyXG4gICAgICAgIGxiRmlnLmNsYXNzTGlzdC5hZGQoJ2xpZ2h0Ym94LWZpZ3VyZScpO1xyXG5cclxuICAgICAgICBjb25zdCBsYkNhcHRpb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmaWdjYXB0aW9uJyk7XHJcbiAgICAgICAgbGJDYXB0aW9uLmNsYXNzTGlzdC5hZGQoJ2xpZ2h0Ym94LWRlc2NyaXB0aW9uJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxiVGl0bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoMycpO1xyXG4gICAgICAgIGxiVGl0bGUuaWQgPSAnbGlnaHRib3gtdGl0bGUnO1xyXG5cclxuICAgICAgICBjb25zdCBsYkNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBsYkNvbnRlbnQuaWQgPSAnbGlnaHRib3gtY29udGVudCc7XHJcblxyXG4gICAgICAgIGNvbnN0IGxiSW1hZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICBsYkltYWdlLmNsYXNzTGlzdC5hZGQoJ2xpZ2h0Ym94LWltYWdlJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxiQ2xvc2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcclxuICAgICAgICBsYkNsb3NlLmNsYXNzTGlzdC5hZGQoJ2Nsb3NlLWxpZ2h0Ym94Jyk7XHJcbiAgICAgICAgbGJDbG9zZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnQ2xvc2UgTGlnaHRib3gnKTtcclxuICAgICAgICBsYkNsb3NlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5jbG9zZUxpZ2h0Ym94LmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICBjb25zdCBsYkNsb3NlVGV4dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2knKTtcclxuICAgICAgICBsYkNsb3NlVGV4dC5jbGFzc0xpc3QuYWRkKCdpY29ub2lyLWNhbmNlbCcpO1xyXG5cclxuICAgICAgICBjb25zdCBsYkNsb3NlU1JUZXh0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICAgIGxiQ2xvc2VTUlRleHQuY2xhc3NMaXN0LmFkZCgnc2NyZWVuLXJlYWRlci10ZXh0Jyk7XHJcbiAgICAgICAgbGJDbG9zZVNSVGV4dC5pbm5lclRleHQgPSAnQ2xvc2UgdGhpcyBsaWdodGJveCc7XHJcblxyXG4gICAgICAgIGxiQ2xvc2UuYXBwZW5kQ2hpbGQobGJDbG9zZVRleHQpO1xyXG4gICAgICAgIGxiQ2xvc2UuYXBwZW5kQ2hpbGQobGJDbG9zZVNSVGV4dCk7XHJcblxyXG4gICAgICAgIGxiQ2FwdGlvbi5hcHBlbmRDaGlsZChsYlRpdGxlKTtcclxuICAgICAgICBsYkNhcHRpb24uYXBwZW5kQ2hpbGQobGJDb250ZW50KTtcclxuXHJcbiAgICAgICAgbGJGaWcuYXBwZW5kQ2hpbGQobGJJbWFnZSk7XHJcbiAgICAgICAgbGJGaWcuYXBwZW5kQ2hpbGQobGJDYXB0aW9uKTtcclxuXHJcbiAgICAgICAgbGIuYXBwZW5kQ2hpbGQobGJGaWcpO1xyXG4gICAgICAgIGxiLmFwcGVuZENoaWxkKGxiQ2xvc2UpO1xyXG5cclxuICAgICAgICBsYmNvbnRhaW5lci5hcHBlbmRDaGlsZChsYik7XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGJjb250YWluZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkdmFuY2VMaWdodGJveCgpIHtcclxuICAgICAgICB0aGlzLmluZGV4Kys7XHJcbiAgICAgICAgdGhpcy5zaGlmdExpZ2h0Ym94KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJldmlvdXNMaWdodGJveCgpIHtcclxuICAgICAgICB0aGlzLmluZGV4LS07XHJcbiAgICAgICAgdGhpcy5zaGlmdExpZ2h0Ym94KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hpZnRMaWdodGJveCgpIHtcclxuICAgICAgICBjb25zdCB0aHVtYiA9IHRoaXMuJHRodW1ibmFpbFt0aGlzLmluZGV4XTtcclxuICAgICAgICBjb25zdCB0aHVtYkltZyA9IHRodW1iLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xyXG4gICAgICAgIGxldCB0aHVtYlNyYyA9IHRodW1iSW1nLnNyYztcclxuICAgICAgICB0aHVtYlNyYyA9IHRodW1iU3JjLnJlcGxhY2UoJ2h0dHA6JywgJycpO1xyXG4gICAgICAgI
1HRodW1iU3JjID0gdGh1bWJTcmMucmVwbGFjZSgnaHR0cHM6JywgJycpO1xyXG4gICAgICAgIGNvbnN0IGFjdGl2ZVNsaWRlID0gdGhpcy4kc2xpZGVzW3RoaXMuaW5kZXhdO1xyXG4gICAgICAgIGNvbnN0IGxpbmsgPSBhY3RpdmVTbGlkZS5xdWVyeVNlbGVjdG9yKCdhJyk7XHJcbiAgICAgICAgdGhpcy5vcGVuTGlnaHRib3gobGluayk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlTGlnaHRib3hOYXYodGh1bWJzKSB7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tqcy1saWdodGJveC1wcmV2XScpID49IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbGIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGlnaHRib3gtY29udGFpbmVyIC5saWdodGJveCcpO1xyXG4gICAgICAgIGNvbnN0IGxiTmF2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgbGJOYXYuY2xhc3NMaXN0LmFkZCgnbGlnaHRib3gtbmF2Jyk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxiUHJldiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbltqcy1wcmV2XScpLmNsb25lTm9kZSh0cnVlKTtcclxuICAgICAgICBjb25zdCBsYk5leHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdidXR0b25banMtbmV4dF0nKS5jbG9uZU5vZGUodHJ1ZSk7XHJcblxyXG4gICAgICAgIGxiUHJldi5yZW1vdmVBdHRyaWJ1dGUoJ2pzLXByZXYnKTtcclxuICAgICAgICBsYlByZXYuc2V0QXR0cmlidXRlKCdqcy1saWdodGJveC1wcmV2JywgJycpO1xyXG4gICAgICAgIGxiUHJldi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMucHJldmlvdXNMaWdodGJveC5iaW5kKHRoaXMpKTtcclxuXHJcblxyXG4gICAgICAgIGxiTmV4dC5yZW1vdmVBdHRyaWJ1dGUoJ2pzLW5leHQnKTtcclxuICAgICAgICBsYk5leHQuc2V0QXR0cmlidXRlKCdqcy1saWdodGJveC1uZXh0JywgJycpO1xyXG4gICAgICAgIGxiTmV4dC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuYWR2YW5jZUxpZ2h0Ym94LmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICBsYk5hdi5hcHBlbmRDaGlsZChsYlByZXYpO1xyXG4gICAgICAgIGxiTmF2LmFwcGVuZENoaWxkKGxiTmV4dCk7XHJcblxyXG4gICAgICAgIGxiLmFwcGVuZENoaWxkKGxiTmF2KTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuTGlnaHRib3goZSkge1xyXG4gICAgICAgIGxldCBlbCA9IGU7XHJcbiAgICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlbCA9IGUudGFyZ2V0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5saWdodGJveC1jb250YWluZXInKS5sZW5ndGggPD0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUxpZ2h0Ym94KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY2xpY2tlZExpbmsgPSBudWxsO1xyXG4gICAgICAgIGlmICgnYScgPT09IGVsLnRhZ05hbWUpIHtcclxuICAgICAgICAgICAgY2xpY2tlZExpbmsgPSBlbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjbGlja2VkTGluayA9IGVsLmNsb3Nlc3QoJ2EnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFjdGl2ZUxpZ2h0Ym94TGluayA9IGNsaWNrZWRMaW5rO1xyXG5cclxuICAgICAgICBjb25zdCBsaWdodGJveCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5saWdodGJveC1jb250YWluZXInKTtcclxuICAgICAgICBjb25zdCBsYlRpdGxlID0gbGlnaHRib3gucXVlcnlTZWxlY3RvcignI2xpZ2h0Ym94LXRpdGxlJyk7XHJcbiAgICAgICAgY29uc3QgbGJDb250ZW50ID0gbGlnaHRib3gucXVlcnlTZWxlY3RvcignI2xpZ2h0Ym94LWNvbnRlbnQnKTtcclxuICAgICAgICBjb25zdCBsYkltYWdlID0gbGlnaHRib3gucXVlcnlTZWxlY3RvcignLmxpZ2h0Ym94LWltYWdlJyk7XHJcbiAgICAgICAgY29uc3QgbGJDbG9zZSA9IGxpZ2h0Ym94LnF1ZXJ5U2VsZWN0b3IoJy5jbG9zZS1saWdodGJveCcpO1xyXG5cclxuICAgICAgICBjb25zdCBnYWxsZXJ5ID0gZWwuY2xvc2VzdCgnLmltYWdlLWdhbGxlcnlfX3NsaWRlc2hvdycpO1xyXG5cclxuICAgICAgICBjb25zdCB0aHVtYnMgPSBnYWxsZXJ5LnF1ZXJ5U2VsZWN0b3JBbGwoJy5pbWFnZS1nYWxsZXJ5X19zbGlkZXNob3dfX3RodW1ibmFpbHNfX3RyYWNrIGJ1dHRvbi5pbWFnZS1nYWxsZXJ5X19zbGlkZXNob3dfX3RodW1ibmFpbCcpO1xyXG5cclxuICAgICAgICBpZiAodGh1bWJzLmxlbmd0aCA+PSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlTGlnaHRib3hOYXYodGh1bWJzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy4kZGVzY3JpcHRpb25zW3RoaXMuaW5kZXhdO1xyXG5cclxuICAgICAgICBjb25zdCB0aXRsZSA9IGRlc2NyaXB0aW9uLnF1ZXJ5U2VsZWN0b3IoJy5pbWFnZS1nYWxsZXJ5X19kZXNjcmlwdGlvbl9faGVhZGVyJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IGNhcHRpb24gPSBkZXNjcmlwdGlvbi5xdWVyeVNlbGVjdG9yKCcuaW1hZ2UtZ2FsbGVyeV9fZGVzY3JpcHRpb25fX3N1bW1hcnknKTtcclxuXHJcbiAgICAgICAgY29uc3QgaW1hZ2UgPSBjbGlja2VkTGluay5xdWVyeVNlbGVjdG9yKCdpbWcnKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aXRsZSAhPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGNhcHRpb24gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGl0bGUgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICBsYlRpdGxlLmlubmVySFRNTCA9IHRpdGxlLmlubmVySFRNTDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxiVGl0bGUuaW5uZXJIVE1MID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2FwdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgIGxiQ29udGVudC5pbm5lckhUTUwgPSBjYXB0aW9uLmlubmVySFRNTDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxiQ29udGVudC5pbm5lckhUTUwgPSAnJztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGlnaHRib3gucXVlcnlTZWxlY3RvcignLmxpZ2h0Ym94LWRlc2NyaXB0aW9uJykuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgaW1nU3JjID0gJyc7XHJcbiAgICAgICAgaWYgKGNsaWNrZWRMaW5rLmhyZWYuaW5kZXhPZigndXBsb2FkcycpID49IDApIHtcclxuICAgICAgICAgICAgaW1nU3JjID0gY2xpY2tlZExpbmsuaHJlZjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbWdTcmMgPSBpbWFnZS5nZXRBdHRyaWJ1dGUoJ3NyYycpO1xyXG4gICAgICAgI
1H1cclxuXHJcbiAgICAgICAgbGJJbWFnZS5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSAndXJsKCcgKyBpbWdTcmMgKyAnKSc7XHJcblxyXG4gICAgICAgIGxpZ2h0Ym94LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcclxuICAgICAgICBsaWdodGJveC5jbGFzc0xpc3QuYWRkKCdvcGVuJyk7XHJcblxyXG4gICAgICAgIGxiQ2xvc2UuZm9jdXMoKTtcclxuICAgICAgICB0aGlzLnRyYXBGb2N1cyhsaWdodGJveCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBlc2NMaWdodGJveChlKSB7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5saWdodGJveC1jb250YWluZXIub3BlbicpLmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN3aXRjaCAoZS5rZXkpIHtcclxuICAgICAgICAgICAgY2FzZSAnRXNjJzpcclxuICAgICAgICAgICAgY2FzZSAnRXNjYXBlJyA6XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuY2xvc2UtbGlnaHRib3gnKS5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQgOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjbG9zZUxpZ2h0Ym94KGUpIHtcclxuICAgICAgICBjb25zdCBsaWdodGJveCA9IGUudGFyZ2V0LmNsb3Nlc3QoJy5saWdodGJveC1jb250YWluZXInKTtcclxuXHJcbiAgICAgICAgbGlnaHRib3guc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XHJcbiAgICAgICAgbGlnaHRib3guY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpO1xyXG5cclxuICAgICAgICBhY3RpdmVMaWdodGJveExpbmsuZm9jdXMoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYXBGb2N1cyhlbGVtZW50KSB7XHJcbiAgICAgICAgdmFyIGZvY3VzYWJsZUVscyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYVtocmVmXTpub3QoW2Rpc2FibGVkXSksIGJ1dHRvbjpub3QoW2Rpc2FibGVkXSksIHRleHRhcmVhOm5vdChbZGlzYWJsZWRdKSwgaW5wdXRbdHlwZT1cInRleHRcIl06bm90KFtkaXNhYmxlZF0pLCBpbnB1dFt0eXBlPVwicmFkaW9cIl06bm90KFtkaXNhYmxlZF0pLCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06bm90KFtkaXNhYmxlZF0pLCBzZWxlY3Q6bm90KFtkaXNhYmxlZF0pJyk7XHJcbiAgICAgICAgdmFyIGZpcnN0Rm9jdXNhYmxlRWwgPSBmb2N1c2FibGVFbHNbMF07XHJcbiAgICAgICAgdmFyIGxhc3RGb2N1c2FibGVFbCA9IGZvY3VzYWJsZUVsc1tmb2N1c2FibGVFbHMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgdmFyIEtFWUNPREVfVEFCID0gOTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgdmFyIGlzVGFiUHJlc3NlZCA9IChlLmtleSA9PT0gJ1RhYicgfHwgZS5rZXlDb2RlID09PSBLRVlDT0RFX1RBQik7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWlzVGFiUHJlc3NlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZS5zaGlmdEtleSkgLyogc2hpZnQgKyB0YWIgKi8ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGZpcnN0Rm9jdXNhYmxlRWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBsYXN0Rm9jdXNhYmxlRWwuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSAvKiB0YWIgKi8ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGxhc3RGb2N1c2FibGVFbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0Rm9jdXNhYmxlRWwuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWxheShkdXJhdGlvbikge1xyXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG5cdFx0c2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIGR1cmF0aW9uKTtcclxuXHR9KTtcclxufSIsImltcG9ydCBEb21Db21wb25lbnQgZnJvbSBcIi4uLy4uL2pzL2xpYi9kb20tY29tcG9uZW50XCI7XHJcbmltcG9ydCBlYWNoIGZyb20gJy4uLy4uL2pzL2xpYi9lYWNoJztcclxuaW1wb3J0IGRlbGF5IGZyb20gJy4uLy4uL2pzL2xpYi9kZWxheSc7XHJcbmltcG9ydCB7IGR1cmF0aW9uTG9uZyB9IGZyb20gJy4uLy4uL2pzL2xpYi9jb25zdCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDYXJvdXNlbCBleHRlbmRzIERvbUNvbXBvbmVudCB7XHJcblx0X2luZGV4ID0gMFxyXG5cdF9hY3RpdmVTbGlkZSA9IG51bGw7XHJcblxyXG5cdGNvbnN0cnVjdG9yKCRkb21FbGVtZW50KSB7XHJcblx0XHRzdXBlcigkZG9tRWxlbWVudCk7XHJcblx0XHR0aGlzLmlzQW5pbWF0aW5nID0gZmFsc2U7XHJcblxyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdHRoaXMuaW5pdCgpO1xyXG5cdFx0XHR0aGlzLmxvYWRlZCgpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRnZXQgaW5kZXgoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5faW5kZXg7XHJcblx0fVxyXG5cclxuXHRzZXQgaW5kZXgobmV3SW5kZXgpIHtcclxuXHRcdGlmIChuZXdJbmRleCA9PT0gdGhpcy4kc2xpZGVzLmxlbmd0aCkge1xyXG5cdFx0XHRuZXdJbmRleCA9IDA7XHJcblx0XHR9XHJcblx0XHR0aGlzLiRhY3RpdmVTbGlkZSA9IHRoaXMuJHNsaWRlc1tuZXdJbmRleF07XHJcblx0XHR0aGlzLl9pbmRleCA9IG5ld0luZGV4O1xyXG5cdH1cclxuXHJcblx0Z2V0ICRhY3RpdmVTbGlkZSgpIHtcclxuXHRcdHJldHVybi
1B0aGlzLl9hY3RpdmVTbGlkZTtcclxuXHR9XHJcblxyXG5cdHNldCAkYWN0aXZlU2xpZGUobmV3U2xpZGUpIHtcclxuXHRcdGlmICh0aGlzLiRhY3RpdmVTbGlkZSkge1xyXG5cdFx0XHR0aGlzLmFuaW1hdGVTbGlkZShuZXdTbGlkZSwgKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuaXNBbmltYXRpbmcgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLl9hY3RpdmVTbGlkZSA9IG5ld1NsaWRlO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0Ly8gdGhpcy4kYWN0aXZlU2xpZGUuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlJyk7XHJcblx0XHR9XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0bmV3U2xpZGUuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XHJcblx0XHRcdHRoaXMuX2FjdGl2ZVNsaWRlID0gbmV3U2xpZGU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpbml0KCkge1xyXG5cdFx0dGhpcy4kc2xpZGVzID0gdGhpcy5maW5kQWxsKCdbanMtc2xpZGVdJyk7XHJcblx0XHRpZiAoIXRoaXMuJHNsaWRlcy5sZW5ndGgpIHsgcmV0dXJuO31cclxuXHRcdHRoaXMuJGNhcm91c2VsID0gdGhpcy5maW5kKCdbanMtY2Fyb3VzZWxdJyk7XHJcblx0XHR0aGlzLiRuZXh0QnV0dG9uID0gdGhpcy5maW5kQWxsKCdbanMtbmV4dC1idXR0b25dJyk7XHJcblx0XHR0aGlzLmF0dGFjaEV2ZW50cygpO1xyXG5cdFx0dGhpcy5pbml0Q2Fyb3VzZWwoKTtcclxuXHR9XHJcblxyXG5cdGF0dGFjaEV2ZW50cygpIHtcclxuXHRcdGVhY2godGhpcy4kbmV4dEJ1dHRvbiwgKGJ1dHRvbikgPT4ge1xyXG5cdFx0XHRidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmdvVG9OZXh0U3RvcnkuYmluZCh0aGlzKSk7XHJcblx0XHR9KTtcclxuXHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlc2V0LmJpbmQodGhpcykpO1xyXG5cdH1cclxuXHJcblx0Z29Ub05leHRTdG9yeSgpIHtcclxuXHRcdGlmICh0aGlzLmlzQW5pbWF0aW5nKSByZXR1cm47XHJcblx0XHR0aGlzLmlzQW5pbWF0aW5nID0gdHJ1ZTtcclxuXHRcdHRoaXMuaW5kZXgrKztcclxuXHR9XHJcblxyXG5cdGluaXRDYXJvdXNlbCgpIHtcclxuXHRcdGlmICghdGhpcy4kYWN0aXZlU2xpZGUpIHtcclxuXHRcdFx0dGhpcy4kYWN0aXZlU2xpZGUgPSB0aGlzLiRzbGlkZXNbMF07XHJcblx0XHR9XHJcblx0XHR0aGlzLiRjYXJvdXNlbC5zdHlsZS5oZWlnaHQgPSBgJHt0aGlzLiRhY3RpdmVTbGlkZS5jaGlsZHJlblswXS5vZmZzZXRIZWlnaHR9cHhgO1xyXG5cdFx0dGhpcy4kYWN0aXZlU2xpZGUuY2xhc3NMaXN0LnJlbW92ZSgncHJlbG9hZCcpO1xyXG5cdH1cclxuXHJcblx0YW5pbWF0ZVNsaWRlKG5ld1NsaWRlLCBjYikge1xyXG5cdFx0UHJvbWlzZS5yZXNvbHZlKClcclxuXHRcdFx0LnRoZW4oKCkgPT4gdGhpcy4kYWN0aXZlU2xpZGUuY2xhc3NMaXN0LmFkZCgndHJhbnNpdGlvbi1vdXQnKSlcclxuXHRcdFx0Ly8gLnRoZW4oKCkgPT4gdGhpcy5fYWN0aXZlU2xpZGUgPSBuZXdTbGlkZSlcclxuXHRcdFx0LnRoZW4oKCkgPT4gZGVsYXkoZHVyYXRpb25Mb25nKSlcclxuXHRcdFx0LnRoZW4oKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuJGFjdGl2ZVNsaWRlLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xyXG5cdFx0XHRcdG5ld1NsaWRlLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO1xyXG5cdFx0XHRcdHRoaXMuJGNhcm91c2VsLnN0eWxlLmhlaWdodCA9IGAke25ld1NsaWRlLmNoaWxkcmVuWzBdLm9mZnNldEhlaWdodH1weGA7XHJcblx0XHRcdH0pXHJcblx0XHRcdC50aGVuKCgpID0+IGRlbGF5KGR1cmF0aW9uTG9uZykpXHJcblx0XHRcdC50aGVuKCgpID0+IG5ld1NsaWRlLmNsYXNzTGlzdC5yZW1vdmUoJ3RyYW5zaXRpb24tb3V0JykpXHJcblx0XHRcdC50aGVuKCgpID0+IGRlbGF5KGR1cmF0aW9uTG9uZykpXHJcblx0XHRcdC50aGVuKCgpID0+IGNiKCkpO1xyXG5cdH1cclxuXHJcblx0cmVzZXQoKSB7XHJcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0dGhpcy5pbml0Q2Fyb3VzZWwoKTtcclxuXHRcdH0sIGR1cmF0aW9uTG9uZyk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7bXFNYXB9IGZyb20gJy4vY29uc3QnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1xKGJyZWFrcG9pbnQsIGRpcmVjdGlvbiA9ICdtaW4td2lkdGgnKSB7XHJcblx0aWYobXFNYXAuaGFzT3duUHJvcGVydHkoYnJlYWtwb2ludCkpIHtcclxuXHRcdGJyZWFrcG9pbnQgPSBtcU1hcFticmVha3BvaW50XSArICdweCc7XHJcblx0fVxyXG5cclxuXHRpZihtcU1hcC5oYXNPd25Qcm9wZXJ0eShkaXJlY3Rpb24pKSB7XHJcblx0XHRicmVha3BvaW50ID0gW2JyZWFrcG9pbnRdO1xyXG5cclxuXHRcdGJyZWFrcG9pbnQucHVzaChtcU1hcFtkaXJlY3Rpb25dICsgJ3B4Jyk7XHJcblx0fVxyXG5cdGxldCBxdWVyeTtcclxuXHRpZih0eXBlb2YgYnJlYWtwb2ludCA9PT0gJ3N0cmluZycpIHtcclxuXHRcdHF1ZXJ5ID0gYCgke2RpcmVjdGlvbn06ICR7YnJlYWtwb2ludH0pYDtcclxuXHR9ZWxzZXtcclxuXHRcdHF1ZXJ5ID0gYChtaW4td2lkdGg6ICR7YnJlYWtwb2ludFswXX0pIGFuZCAobWF4LXdpZHRoOiAke2JyZWFrcG9pbnRbMV19KWA7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEocXVlcnkpLm1hdGNoZXM7XHJcbn0iLCJpbXBvcnQgeyBtcSB9IGZyb20gJy4uL2xpYi9tcSc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaWRlYmFyQWNjb3JkaW9uIHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih0cmlnZ2VyLCB1c2VNYXhIZWlnaHQgPSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMudHJpZ2dlciA9IHRyaWdnZXI7XHJcbiAgICAgICAgdGhpcy5wcm9wZXJ0eVRvVXNlID0gdXNlTWF4SGVpZ2h0ID8gJ21heEhlaWdodCcgOiAnaGVpZ2h0JztcclxuICAgICAgICB0aGlzLmV4cGFuZGFibGVTZWN0aW9uID0gdGhpcy50cmlnZ2VyLm5leHRFbGVtZW50U2libGluZztcclxuICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuZXhwYW5kYWJsZVNlY3Rpb24ub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIW1xKCdtZCcpKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy50cmlnZ2VyLmNsYXNzTGlzdC5jb250YWlucygnZGVmYXVsdCcpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZGFibGVTZWN0aW9uLnN0eWxlW3RoaXMucHJvcGVydHlUb1VzZV0gPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyLmNsYXNzTGlzdC5hZGQoJ29wZW4nKTtcclxuICAgICAgICAgICAgICAgI
1HRoaXMuZXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRhYmxlU2VjdGlvbi5zdHlsZVt0aGlzLnByb3BlcnR5VG9Vc2VdID0gYCR7dGhpcy5oZWlnaHR9cHhgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnRyaWdnZXJDbGljay5iaW5kKHRoaXMpKTtcclxuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZXNpemUuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJpZ2dlckNsaWNrKCkge1xyXG4gICAgICAgIGlmIChtcSgnbWQnKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5leHBhbmRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmV4cGFuZGFibGVTZWN0aW9uLnN0eWxlW3RoaXMucHJvcGVydHlUb1VzZV0gPSAwO1xyXG4gICAgICAgICAgICB0aGlzLmV4cGFuZGFibGVTZWN0aW9uLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlci5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmV4cGFuZGFibGVTZWN0aW9uLnN0eWxlW3RoaXMucHJvcGVydHlUb1VzZV0gPSBgJHt0aGlzLmhlaWdodH1weGA7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kYWJsZVNlY3Rpb24uc3R5bGUucG9pbnRlckV2ZW50cyA9ICdhbGwnO1xyXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXIuY2xhc3NMaXN0LmFkZCgnb3BlbicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5leHBhbmRlZCA9ICF0aGlzLmV4cGFuZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2l6ZSgpIHtcclxuICAgICAgICBpZiAoIW1xKCdtZCcpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5leHBhbmRhYmxlU2VjdGlvbi5zdHlsZVt0aGlzLnByb3BlcnR5VG9Vc2VdID0gMDtcclxuICAgICAgICAgICAgdGhpcy50cmlnZ2VyLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kYWJsZVNlY3Rpb24uc3R5bGVbdGhpcy5wcm9wZXJ0eVRvVXNlXSA9IGBhdXRvYDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IERvbUNvbXBvbmVudCBmcm9tIFwiLi4vanMvbGliL2RvbS1jb21wb25lbnRcIjtcclxuaW1wb3J0IFNpZGViYXJBY2NvcmRpb24gZnJvbSBcIi4uL2pzL2NvbXBvbmVudHMvc2lkZWJhci1hY2NvcmRpb25cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNpZGViYXIgZXh0ZW5kcyBEb21Db21wb25lbnQge1xyXG5cdGNvbnN0cnVjdG9yKCRkb21FbGVtZW50KSB7XHJcblx0XHRzdXBlcigkZG9tRWxlbWVudCk7XHJcblxyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdHRoaXMuaW5pdCgpO1xyXG5cdFx0XHR0aGlzLmxvYWRlZCgpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRpbml0KCkge1xyXG5cdFx0dGhpcy4kYWNjb3JkaW9uVHJpZ2dlciA9IHRoaXMuZmluZCgnW2pzLWFjY29yZGlvbi10cmlnZ2VyXScpO1xyXG5cdFx0dGhpcy5hY2NvcmRpb24gPSBuZXcgU2lkZWJhckFjY29yZGlvbih0aGlzLiRhY2NvcmRpb25UcmlnZ2VyKTtcclxuXHR9XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb25Mb2FkKGNiLCBvbkRPTUNvbnRlbnRMb2FkID0gdHJ1ZSkge1xyXG5cdGlmIChvbkRPTUNvbnRlbnRMb2FkID09PSB0cnVlKSB7XHJcblx0XHRpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJyB8fCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGVkJykge1xyXG5cdFx0XHRjYigpO1xyXG5cdFx0fVxyXG5cdFx0ZWxzZSB7XHJcblx0XHRcdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgY2IpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRlbHNlIHtcclxuXHRcdGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnY29tcGxldGUnKSB7XHJcblx0XHRcdGNiKCk7XHJcblx0XHR9XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBjYik7XHJcblx0XHR9XHJcblx0fVxyXG59IiwiaW1wb3J0IG9uTG9hZCBmcm9tICcuL29uLWxvYWQnO1xyXG5pbXBvcnQgZWFjaCBmcm9tICcuL2VhY2gnO1xyXG5cclxuY29uc3QgcmVnaXN0ZXJNb2R1bGUgPSAoc2VsZWN0b3IsIENvbXBvbmVudENsYXNzLCBvbkRPTUNvbnRlbnRMb2FkID0gZmFsc2UpID0+IHtcclxuXHRvbkxvYWQoKCkgPT4ge1xyXG5cdFx0Y29uc3QgZG9tTm9kZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZGF0YS1tb2R1bGU9XCIke3NlbGVjdG9yfVwiXWApO1xyXG5cdFx0aWYgKGRvbU5vZGVzLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0ZWFjaChkb21Ob2RlcywgKGRvbUVsZW1lbnQpID0+IG5ldyBDb21wb25lbnRDbGFzcyhkb21FbGVtZW50KSk7XHJcblx0fSwgb25ET01Db250ZW50TG9hZCk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCByZWdpc3Rlck1vZHVsZTtcclxuIiwiY29uc3Qgc2V0T2Zmc2V0cyA9IGVscyA9PiB7XHJcbiAgICBlbHMuZm9yRWFjaChlbCA9PiB7XHJcbiAgICAgICAgbGV0IG9mZnNldCA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoZWwucXVlcnlTZWxlY3RvckFsbCgnLnVtdy1mZWF0dXJlZC1uZXdzLWNhcmRfX21haW5fX2NvbnRlbnQnKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSBlbC5xdWVyeVNlbGVjdG9yKCcudW13LWZlYXR1cmVkLW5ld3MtY2FyZF9fbWFpbl9fY29udGVudCcpO1xyXG4gICAgICAgICAgICBjb25zdCBpbWFnZSA9IGVsLnF1ZXJ5U2VsZWN0b3IoJy51bXctZmVhdHVyZWQtbmV3cy1jYXJkX19tYWluX19pbWFnZScpO1xyXG4gICAgICAgICAgICBvZmZzZXQgPSBbXHJcbiAgICAgICAgICAgICAgICB0ZXh0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCxcclxuICAgICAgICAgICAgICAgIGltYWdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCAvID
1IsXHJcbiAgICAgICAgICAgICAgICBwYXJzZUludCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShpbWFnZSkuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLWJvdHRvbScpKVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZWwucXVlcnlTZWxlY3RvckFsbCgnbmV3cy1jYXJkJykubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gZWwucXVlcnlTZWxlY3RvcignbmV3cy1jYXJkJykuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcudW13LW5ld3MtY2FyZF9fY29udGVudCcpO1xyXG4gICAgICAgICAgICBjb25zdCBpbWFnZSA9IGVsLnF1ZXJ5U2VsZWN0b3IoJ25ld3MtY2FyZCcpLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignLnVtdy1uZXdzLWNhcmRfX2FydGljbGUtaW1hZ2UnKTtcclxuICAgICAgICAgICAgb2Zmc2V0ID0gW1xyXG4gICAgICAgICAgICAgICAgdGV4dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBpbWFnZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUodGV4dCkuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy10b3AnKSlcclxuICAgICAgICAgICAgXVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0LnJlZHVjZSgocHJldiwgY3VyKSA9PiBwcmV2ICsgY3VyLCAwKTtcclxuXHJcbiAgICAgICAgZWwuc3R5bGUuc2V0UHJvcGVydHkoJy0tYmctb2Zmc2V0JywgYCR7b2Zmc2V0fXB4YCk7XHJcbiAgICB9KTtcclxufTtcclxuXHJcbmNvbnN0IG1vYmlsZU1RID0gd2luZG93Lm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6IDEwOTNweCknKTtcclxuXHJcbmxldCB0aW1lb3V0ID0gMDtcclxuXHJcbmV4cG9ydCBkZWZhdWx0ICgpID0+IHtcclxuICAgIGxldCBmZWF0dXJlZE5ld3NDYXJkcyA9IEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnVtdy1mZWF0dXJlZC1uZXdzLWNhcmQnKSk7XHJcblxyXG4gICAgLy8gT25seSBuZWVkIGNhcmRzIHRoYXQgaGF2ZSBhIEhlYWRpbmcgYW5kIFNlZSBNb3JlIGluc2lkZS5cclxuICAgIGZlYXR1cmVkTmV3c0NhcmRzID0gZmVhdHVyZWROZXdzQ2FyZHMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5xdWVyeVNlbGVjdG9yKCcudW13LWhlYWRpbmctYW5kLXNlZS1tb3JlJykpO1xyXG5cclxuICAgIGNvbnN0IHNldEFsbE9mZnNldHMgPSBzZXRPZmZzZXRzLmJpbmQobnVsbCwgZmVhdHVyZWROZXdzQ2FyZHMpO1xyXG5cclxuICAgIHNldEFsbE9mZnNldHMoKTtcclxuXHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHNldEFsbE9mZnNldHMpO1xyXG5cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCAoKSA9PiB7XHJcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lb3V0KTtcclxuICAgICAgICBpZiAobW9iaWxlTVEubWF0Y2hlcykge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChzZXRBbGxPZmZzZXRzLCAyMDApO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59O1xyXG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBFeHBhbmRhYmxlIHtcclxuXHRfd2lkdGg7XHJcblxyXG5cdGNvbnN0cnVjdG9yKGVsLCBhbW91bnQgPSAyMCkge1xyXG5cdFx0dGhpcy5lbCA9IGVsO1xyXG5cdFx0dGhpcy5hbW91bnQgPSBhbW91bnQ7XHJcblxyXG5cdFx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuaW5pdGlhbGl6ZVdpZHRoLmJpbmQodGhpcykpO1xyXG5cdFx0dGhpcy5pbml0aWFsaXplV2lkdGgoKTtcclxuXHJcblx0XHR0aGlzLmVsLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIHRoaXMubW91c2VvdmVyLmJpbmQodGhpcykpO1xyXG5cdFx0dGhpcy5lbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW91dCcsIHRoaXMubW91c2VvdXQuYmluZCh0aGlzKSk7XHJcblx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4ge1xyXG5cdFx0XHR0aGlzLmVsLnN0eWxlLndpZHRoID0gYGF1dG9gO1xyXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLmluaXRpYWxpemVXaWR0aCgpO1xyXG5cdFx0XHRcdHRoaXMuZWwuc3R5bGUud2lkdGggPSBgJHt0aGlzLndpZHRofXB4YDtcclxuXHRcdFx0fSwxMCk7XHJcblx0XHR9KVxyXG5cdH1cclxuXHJcblx0Z2V0IHdpZHRoKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX3dpZHRoO1xyXG5cdH1cclxuXHJcblx0c2V0IHdpZHRoKG5ld1dpZHRoKSB7XHJcblx0XHR0aGlzLmVsLnN0eWxlLndpZHRoID0gYCR7bmV3V2lkdGh9cHhgO1xyXG5cdFx0dGhpcy5fd2lkdGggPSBuZXdXaWR0aDtcclxuXHR9XHJcblxyXG5cdG1vdXNlb3ZlcigpIHtcclxuXHRcdHRoaXMuZWwuc3R5bGUud2lkdGggPSBgJHt0aGlzLndpZHRoICsgMjB9cHhgO1xyXG5cdFx0dGhpcy5lbC5jbGFzc0xpc3QuYWRkKCdob3ZlcicpO1xyXG5cdH1cclxuXHJcblx0bW91c2VvdXQoKSB7XHJcblx0XHR0aGlzLmVsLnN0eWxlLndpZHRoID0gYCR7dGhpcy53aWR0aH1weGA7XHJcblx0XHR0aGlzLmVsLmNsYXNzTGlzdC5yZW1vdmUoJ2hvdmVyJyk7XHJcblx0fVxyXG5cclxuXHRpbml0aWFsaXplV2lkdGgoKSB7XHJcblx0XHRjb25zdCByZWN0ID0gdGhpcy5lbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHRcdHRoaXMud2lkdGggPSBNYXRoLmNlaWwocmVjdC53aWR0aCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgaW5pdCgpIHtcclxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRjb25zdCBpdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tqcy1leHBhbmRhYmxlXSwgLnVtdy13aXRoLWJsb2NrcyAuYnV0dG9uOm5vdCguZ2Zvcm1fYnV0dG9uKScpO1xyXG5cdFx0XHRBcnJheS5mcm9tKGl0ZW1zKS5tYXAoZWwgPT4gbmV3IEV4cGFuZGFibGUoZWwpKTtcclxuXHRcdH0sIDI1MCk7XHJcblx0fVxyXG59IiwiZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZUhlcm9NZWRpYSgpIHtcclxuICAgIC8vIEFkanVzdCBoZWFkZXIgYW5kIGxvZ28gZm9yIGhlcm8uXHJcbiAgICBjb25zdCBzdGFydGluZ0hlcm8gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudW13LWhlcm8nKTtcclxuXHJcbiAgICBjb25zb2xlLmdyb3VwKCdVTVcgSGVybycpO1xyXG5cclxuICAgIGxldCBwaWN0dXJlSW5kZXggPSAwO1xyXG4gICAgbGV0IHZpZGVvSW5kZXggPSAwO1xyXG5cclxuICAgIC8vIFJhbmRvbWl6ZSBtZWRpYS5cclxuICAgIHN0YXJ0aW5nSGVyby5xdWVyeVNlbGVjdG9yQWxsKCd2aWRlbycpLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCAnUHJvY2Vzc2luZyB2aWRlbyAlZCcsIHZpZGVvSW5kZXgpO1xyXG4gICAgICAgI
1HZpZGVvSW5kZXgrKztcclxuXHJcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKCdzb3VyY2VbZGF0YS1sYXlvdXQ9XCJkZXNrdG9wXCJdJyk7XHJcbiAgICAgICAgbGV0IG9wdGlvbnNNb2JpbGUgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKCdzb3VyY2VbZGF0YS1sYXlvdXQ9XCJtb2JpbGVcIl0nKTtcclxuXHJcbiAgICAgICAgaWYgKCFvcHRpb25zTW9iaWxlPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgb3B0aW9uc01vYmlsZSA9IG9wdGlvbnM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG9wdGlvbnMubGVuZ3RoKTtcclxuICAgICAgICBjb25zdCBpbmRleE1vYmlsZSA9IG9wdGlvbnNNb2JpbGU/LltpbmRleF0gPyBpbmRleCA6IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG9wdGlvbnNNb2JpbGUubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgY29uc29sZS5ncm91cCggJ0hlcm8gVmlkZW8nICk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1ByZXBhcmluZyB0byBzZXQgdGhlIGRlc2t0b3Agc291cmNlIHRvICVzJywgb3B0aW9uc1tpbmRleF0uZGF0YXNldC5zcmMpO1xyXG4gICAgICAgIG9wdGlvbnNbaW5kZXhdLnNyYyA9IG9wdGlvbnNbaW5kZXhdLmRhdGFzZXQuc3JjO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdQcmVwYXJpbmcgdG8gc2V0IHRoZSBtb2JpbGUgc291cmNlIHRvICVzJywgb3B0aW9uc01vYmlsZVtpbmRleE1vYmlsZV0uZGF0YXNldC5zcmMpO1xyXG4gICAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgICAgICBvcHRpb25zTW9iaWxlW2luZGV4TW9iaWxlXS5zcmMgPSBvcHRpb25zTW9iaWxlW2luZGV4TW9iaWxlXS5kYXRhc2V0LnNyYztcclxuXHJcbiAgICAgICAgLypvcHRpb25zLmZvckVhY2goKG9wdCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIG9wdC5oYXNBdHRyaWJ1dGUoJ3NyYycpICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBvcHQucmVtb3ZlKCk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgb3B0aW9uc01vYmlsZS5mb3JFYWNoKChvcHQpID0+IHtcclxuICAgICAgICAgICAgaWYgKCBvcHQuaGFzQXR0cmlidXRlKCdzcmMnKSApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgb3B0LnJlbW92ZSgpO1xyXG4gICAgICAgIH0pKi9cclxuXHJcbiAgICAgICAgZWwubG9hZCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgc3RhcnRpbmdIZXJvLnF1ZXJ5U2VsZWN0b3JBbGwoJ3BpY3R1cmUnKS5mb3JFYWNoKGVsID0+IHtcclxuICAgICAgICBsZXQgb3B0aW9ucyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ3NvdXJjZVtkYXRhLWxheW91dD1cImRlc2t0b3BcIl0nKTtcclxuICAgICAgICBsZXQgb3B0aW9uc01vYmlsZSA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ3NvdXJjZVtkYXRhLWxheW91dD1cIm1vYmlsZVwiXScpO1xyXG5cclxuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbW9iaWxlIG9wdGlvbnMsIHNldCB0aGVtIHRvIGJlIHRoZSBzYW1lIGFzIHRoZSBkZXNrdG9wIG9wdGlvbnNcclxuICAgICAgICBpZiAoIW9wdGlvbnNNb2JpbGU/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBvcHRpb25zTW9iaWxlID0gb3B0aW9ucztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBpY3R1cmVJbmRleCsrO1xyXG5cclxuICAgICAgICBjb25zdCBpbWdFbCA9IGVsLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogb3B0aW9ucy5sZW5ndGgpO1xyXG4gICAgICAgIGNvbnN0IGluZGV4TW9iaWxlID0gb3B0aW9uc01vYmlsZT8uW2luZGV4XSA/IGluZGV4IDogTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogb3B0aW9uc01vYmlsZS5sZW5ndGgpO1xyXG5cclxuICAgICAgICBvcHRpb25zW2luZGV4XS5zZXRBdHRyaWJ1dGUoJ3NyY3NldCcsb3B0aW9uc1tpbmRleF0uZGF0YXNldC5zcmMpO1xyXG4gICAgICAgIG9wdGlvbnNNb2JpbGVbaW5kZXhNb2JpbGVdLnNldEF0dHJpYnV0ZSgnc3Jjc2V0JyxvcHRpb25zTW9iaWxlW2luZGV4TW9iaWxlXS5kYXRhc2V0LnNyYyk7XHJcbiAgICAgICAgaW1nRWwuc2V0QXR0cmlidXRlKCdzcmMnLG9wdGlvbnNNb2JpbGVbaW5kZXhNb2JpbGVdLmRhdGFzZXQuc3JjKTtcclxuICAgICAgICBpbWdFbC5zZXRBdHRyaWJ1dGUoJ2FsdCcsb3B0aW9uc01vYmlsZVtpbmRleE1vYmlsZV0uZGF0YXNldC5hbHQgPyBvcHRpb25zTW9iaWxlW2luZGV4TW9iaWxlXS5kYXRhc2V0LmFsdCA6IG9wdGlvbnNbaW5kZXhdLmRhdGFzZXQuYWx0KTtcclxuXHJcbiAgICAgICAgb3B0aW9ucy5mb3JFYWNoKChvcHQpID0+IHtcclxuICAgICAgICAgICAgaWYgKG9wdC5oYXNBdHRyaWJ1dGUoJ3NyY3NldCcpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG9wdC5yZW1vdmUoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgb3B0aW9uc01vYmlsZS5mb3JFYWNoKChvcHQpID0+IHtcclxuICAgICAgICAgICAgaWYgKG9wdC5oYXNBdHRyaWJ1dGUoJ3NyY3NldCcpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG9wdC5yZW1vdmUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxufVxyXG5cclxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7IGhhbmRsZUhlcm9NZWRpYSgpIH0pO1xyXG4iLCJpbXBvcnQgRG9tQ29tcG9uZW50IGZyb20gXCIuLi8uLi9qcy9saWIvZG9tLWNvbXBvbmVudFwiO1xyXG5pbXBvcnQgcmVnaXN0ZXJNb2R1bGUgZnJvbSBcIi4uLy4uL2pzL2xpYi9yZWdpc3Rlci1tb2R1bGVcIjtcclxuaW1wb3J0IEV4cGFuZGFibGUgZnJvbSAnLi4vLi4vanMvY29tcG9uZW50cy9leHBhbmRhYmxlJztcclxuaW1wb3J0IG9uTG9hZCBmcm9tIFwiLi4vLi4vanMvbGliL29uLWxvYWRcIjtcclxuaW1wb3J0IHtoYW5kbGVIZXJvTWVkaWF9IGZyb20gXCIuLi8uLi8uLi8uLi9ibG9ja3Mvc3JjL2hlcm8vdmlld1wiO1xyXG5cclxuY2xhc3MgSGVyb0ludHJvIGV4dGVuZHMgRG9tQ29tcG9uZW50IHtcclxuXHJcblx0Y29uc3RydWN0b3IoJGRvbUVsZW1lbnQpIHtcclxuXHRcdHN1cGVyKCRkb21FbGVtZW50KTtcclxuXHJcblx0XHRzZXRUaW
11lb3V0KCgpID0+IHtcclxuXHRcdFx0dGhpcy5pbml0KCk7XHJcblx0XHRcdHRoaXMubG9hZGVkKCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGluaXQoKSB7XHJcblx0XHR0aGlzLiRsaW5rcyA9IHRoaXMuZmluZEFsbCgnW2pzLWxpbmtdJyk7XHJcblx0XHRBcnJheS5mcm9tKHRoaXMuJGxpbmtzKS5tYXAobGluayA9PiBuZXcgRXhwYW5kYWJsZShsaW5rKSk7XHJcblx0fVxyXG59XHJcblxyXG5yZWdpc3Rlck1vZHVsZSgnaGVyby1pbnRybycsIEhlcm9JbnRybyk7XHJcblxyXG5jb25zdCByZW1vdmVFeHRyYUhlYWRlciA9ICgpID0+IHtcclxuXHRpZiAoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2gxLnVtdy1oZXJvX190aXRsZV9faGVhZGVyJykubGVuZ3RoIDw9IDApIHtcclxuXHRcdHJldHVybjtcclxuXHR9XHJcblxyXG5cdGlmICggZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaDEuZnJvbnQtcGFnZS10aXRsZScpLmxlbmd0aCA8PSAxICkge1xyXG5cdFx0cmV0dXJuO1xyXG5cdH1cclxuXHJcblx0Y29uc3QgcGFnZVRpdGxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaDEuZnJvbnQtcGFnZS10aXRsZScpO1xyXG5cdHBhZ2VUaXRsZS5yZW1vdmUoKTtcclxufTtcclxuXHJcblxyXG5jb25zdCBoYW5kbGVQbGF5UGF1c2UgPSAoZSkgPT4ge1xyXG4gICAgY29uc29sZS5ncm91cCggJ1BsYXkgUGF1c2UgSGFuZGxlcicgKTtcclxuXHJcbiAgICBjb25zdCB2aWRlbyA9IGUudGFyZ2V0LmNsb3Nlc3QoJ2RpdicpLnF1ZXJ5U2VsZWN0b3IoJ3ZpZGVvJyk7XHJcbiAgICBjb25zdCBvbGRCdXR0b24gPSBlLnRhcmdldC5jbG9zZXN0KCdkaXYnKS5xdWVyeVNlbGVjdG9yKCdidXR0b25bZGF0YS1pZGVudGlmaWVyPVwicGxheXBhdXNlXCJdJyk7XHJcblxyXG4gICAgY29uc3QgYnV0dG9uID0gZ2V0UGxheVBhdXNlQnV0dG9uKHZpZGVvKTtcclxuXHJcbiAgICBjb25zdCBwbGF5ID0gYnV0dG9uLnBsYXk7XHJcbiAgICBjb25zdCBwbGF5QnV0dG9uID0gYnV0dG9uLnBsYXlCdXR0b247XHJcbiAgICBjb25zdCBwYXVzZUJ1dHRvbiA9IGJ1dHRvbi5wYXVzZUJ1dHRvbjtcclxuXHJcbiAgICBsZXQgc3BhbiA9IHBsYXkucXVlcnlTZWxlY3Rvcignc3Bhbi5wbGF5LXBhdXNlLXNwYW4nKTtcclxuICAgIGxldCBpY29uID0gcGxheS5xdWVyeVNlbGVjdG9yKCdpLnBsYXktcGF1c2UtaWNvbicpO1xyXG5cclxuICAgIGlmICh2aWRlby5wYXVzZWQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyggJ1RoZSB2aWRlbyBhcHBlYXJzIHRvIGJlIHBhdXNlZCBjdXJyZW50bHknICk7XHJcblxyXG4gICAgICAgIHBsYXkuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywnUGF1c2UgaGVybyB2aWRlbycpO1xyXG4gICAgICAgIHBsYXkuY2xhc3NMaXN0LnJlbW92ZSgncGxheScpO1xyXG4gICAgICAgIHBsYXkuY2xhc3NMaXN0LmFkZCgncGF1c2UnKTtcclxuICAgICAgICBwbGF5LnNldEF0dHJpYnV0ZSgnZGF0YS1pY29uJywgJ3UnKTtcclxuICAgICAgICBwbGF5LmlubmVySFRNTCA9ICcnO1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyggcGF1c2VCdXR0b24gKTtcclxuXHJcbiAgICAgICAgcGxheS5hcHBlbmRDaGlsZChwYXVzZUJ1dHRvbi5zcGFuKTtcclxuICAgICAgICBwbGF5LmFwcGVuZENoaWxkKHBhdXNlQnV0dG9uLmljb24pO1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhwbGF5KTtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coICdQbGF5aW5nIHRoZSB2aWRlbyBub3cnICk7XHJcblxyXG4gICAgICAgIHZpZGVvLnBsYXkoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coICdJdCBhcHBlYXJzIHRoZSB2aWRlbyBpcyBjdXJyZW50bHkgcGxheWluZycgKTtcclxuXHJcbiAgICAgICAgcGxheS5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCdSZXN1bWUgaGVybyB2aWRlbycpO1xyXG4gICAgICAgIHBsYXkuY2xhc3NMaXN0LnJlbW92ZSgncGF1c2UnKTtcclxuICAgICAgICBwbGF5LmNsYXNzTGlzdC5hZGQoJ3BsYXknKTtcclxuICAgICAgICBwbGF5LnNldEF0dHJpYnV0ZSgnZGF0YS1pY29uJywgJ1AnKTtcclxuICAgICAgICBwbGF5LmlubmVySFRNTCA9ICcnO1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhwbGF5QnV0dG9uKTtcclxuXHJcbiAgICAgICAgcGxheS5hcHBlbmRDaGlsZChwbGF5QnV0dG9uLnNwYW4pO1xyXG4gICAgICAgIHBsYXkuYXBwZW5kQ2hpbGQocGxheUJ1dHRvbi5pY29uKTtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2cocGxheSk7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCAnV2UgYXJlIHBhdXNpbmcgdGhlIHZpZGVvJyApO1xyXG5cclxuICAgICAgICB2aWRlby5wYXVzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9sZEJ1dHRvbi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChwbGF5LCBvbGRCdXR0b24pO1xyXG5cclxuICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxufVxyXG5cclxuY29uc3QgZ2V0UGxheVBhdXNlQnV0dG9uID0gKCh2aWRlbykgPT4ge1xyXG4gICAgbGV0IGlzUGF1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IHBsYXkgPSBudWxsO1xyXG4gICAgaWYgKHZpZGVvLmNsb3Nlc3QoJy51bXctaGVybycpLnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbltkYXRhLWlkZW50aWZpZXI9XCJwbGF5cGF1c2VcIl0nKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcGxheSA9IHZpZGVvLmNsb3Nlc3QoJy51bXctaGVybycpLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbltkYXRhLWlkZW50aWZpZXI9XCJwbGF5cGF1c2VcIl0nKTtcclxuICAgICAgICBpZiAoIHBsYXkuY2xhc3NMaXN0LmNvbnRhaW5zKCdwYXVzZScpKSB7XHJcbiAgICAgICAgICAgIGlzUGF1c2VkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcclxuICAgICAgICBwbGF5LnNldEF0dHJpYnV0ZSgnZGF0YS1pZGVudGlmaWVyJywgJ3BsYXlwYXVzZScpO1xyXG4gICAgICAgIHBsYXkuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ1BhdXNlIEhlcm8gVmlkZW8nKTtcclxuICAgICAgICBwbGF5LmNsYXNzTGlzdC5hZGQoJ3BsYXknKTtcclxuICAgICAgICBwbGF5LnNldEF0dHJpYnV0ZSgnZGF0YS1pY29uJywgJ1AnKTtcclxuICAgIH1cclxuXHJcbiAgICBwbGF5LmlubmVySFRNTCA9ICcnO1xyXG5cclxuICAgIGNvbnN0IHBsYXlCdXR0b24gPSB7XHJcbiAgICAgICAgdGV4dDogZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1BsYXknKSxcclxuICAgICAgICBzcGFuOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyksXHJcbiAgICAgICAgaWNvbjogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaScpLFxyXG4gICAgfTtcclxuXHJcbiAgICBwbGF5QnV0dG9uLnNwYW4uY2xhc3NMaXN0LmFkZCgnc3Itb25seScsICdwbGF5LXBhdXNlLXNwYW4nLCAncGxheS1oZXJvJyk7XHJcbiAgICBwbGF5QnV0dG9uLnNwYW4uYXBwZW5kQ2hpbGQocGxheUJ1dHRvbi50ZXh0KTtcclxuXHJcbiAgICBwbGF5QnV0dG9uLmljb24uY2xhc3NMaXN0LmFkZCgnaWNvbm9pci1wbGF5JywgJ3BsYXktcGF1c2UtaWNvbicpO1xyXG5cclxuICAgIGNvbnN0IHBhdXNlQnV0dG9uID0ge1xyXG4gICAgICAgI
1HRleHQ6IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdQYXVzZScpLFxyXG4gICAgICAgIHNwYW46IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKSxcclxuICAgICAgICBpY29uOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpJyksXHJcbiAgICB9O1xyXG5cclxuICAgIHBhdXNlQnV0dG9uLnNwYW4uY2xhc3NMaXN0LmFkZCgnc3Itb25seScsICdwbGF5LXBhdXNlLXNwYW4nLCAncGF1c2UtaGVybycpO1xyXG4gICAgcGF1c2VCdXR0b24uc3Bhbi5hcHBlbmRDaGlsZChwYXVzZUJ1dHRvbi50ZXh0KTtcclxuXHJcbiAgICBwYXVzZUJ1dHRvbi5pY29uLmNsYXNzTGlzdC5hZGQoJ2ljb25vaXItcGF1c2UnLCAncGxheS1wYXVzZS1pY29uJyk7XHJcblxyXG4gICAgaWYgKCBpc1BhdXNlZCApIHtcclxuICAgICAgICBwbGF5LmFwcGVuZENoaWxkKHBsYXlCdXR0b24uc3Bhbik7XHJcbiAgICAgICAgcGxheS5hcHBlbmRDaGlsZChwbGF5QnV0dG9uLmljb24pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBwbGF5LmFwcGVuZENoaWxkKHBhdXNlQnV0dG9uLnNwYW4pO1xyXG4gICAgICAgIHBsYXkuYXBwZW5kQ2hpbGQocGF1c2VCdXR0b24uaWNvbik7XHJcbiAgICB9XHJcblxyXG4gICAgcGxheS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZVBsYXlQYXVzZSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAncGxheSc6IHBsYXksXHJcbiAgICAgICAgJ3BsYXlCdXR0b24nOiBwbGF5QnV0dG9uLFxyXG4gICAgICAgICdwYXVzZUJ1dHRvbic6IHBhdXNlQnV0dG9uXHJcbiAgICB9O1xyXG59KVxyXG5cclxuLy8gQWRkIGNvbnRyb2xzIHRvIGhlcm8gdmlkZW9zIC0gQ0FHXHJcbmNvbnN0IGFkZEhlcm9WaWRlb0NvbnRyb2xzID0gKCkgPT4ge1xyXG4gICAgY29uc3QgdmlkZW9zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnVtdy1oZXJvX19tZWRpYSB2aWRlbycpO1xyXG4gICAgaWYgKHZpZGVvcy5sZW5ndGggPD0gMCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB2aWRlb3MuZm9yRWFjaCgodmlkZW8pID0+IHtcclxuICAgICAgICBjb25zdCBwYXJlbnRDb250YWluZXIgPSB2aWRlby5jbG9zZXN0KCcudW13LWhlcm9fX21lZGlhJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBsYXkgPSBnZXRQbGF5UGF1c2VCdXR0b24odmlkZW8pO1xyXG5cclxuICAgICAgICBwYXJlbnRDb250YWluZXIuYXBwZW5kQ2hpbGQocGxheS5wbGF5KTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuY29uc3QgbGF5b3V0Q2hhbmdlZENhbGxiYWNrID0gKG1hdGNoZXMpID0+IHtcclxuXHJcbiAgICBpZiAoIG1hdGNoZXMgPT09IGluaXRpYWxNYXRjaCApIHtcclxuICAgICAgICBjb25zb2xlLmdyb3VwKCdIZXJvIExheW91dCBDaGFuZ2UgTGlzdGVuZXInKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnTm8gYnJlYWtpbmcgY2hhbmdlJyk7XHJcbiAgICAgICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy51bXctaGVyb19fbWVkaWFfX3ZpZGVvJykubGVuZ3RoIDw9IDAgKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUuZ3JvdXAoJ0hlcm8gTGF5b3V0IENoYW5nZSBMaXN0ZW5lcicpO1xyXG5cclxuICAgIGNvbnN0IHZpZGVvID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnVtdy1oZXJvX19tZWRpYV9fdmlkZW8nKTtcclxuICAgIHZpZGVvLmxvYWQoKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyh2aWRlbyk7XHJcblxyXG4gICAgaWYgKCB2aWRlby5jbG9zZXN0KCcudW13LWhlcm8nKS5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b25bZGF0YS1pZGVudGlmaWVyPVwicGxheXBhdXNlXCJdJykubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGxldCBiID0gdmlkZW8uY2xvc2VzdCgnLnVtdy1oZXJvJykucXVlcnlTZWxlY3RvcignYnV0dG9uW2RhdGEtaWRlbnRpZmllcj1cInBsYXlwYXVzZVwiXScpO1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZygnRm91bmQgYSBidXR0b246ICVvJywgYik7XHJcblxyXG4gICAgICAgIGlmICggYi5xdWVyeVNlbGVjdG9yQWxsKCcucGxheS1oZXJvJykubGVuZ3RoID4gMCApIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1RoZSB2aWRlbyBzaG91bGQgYmUgcGF1c2VkJyk7XHJcblxyXG4gICAgICAgICAgICB2aWRlby5wYXVzZSgpO1xyXG4gICAgICAgICAgICBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxoYW5kbGVQbGF5UGF1c2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGluaXRpYWxNYXRjaCA9IG1hdGNoZXM7XHJcblxyXG4gICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG59XHJcblxyXG4vLyBzZXQgbWVkaWEgcXVlcnlcclxuY29uc3QgbXFsID0gd2luZG93Lm1hdGNoTWVkaWEoJyhtaW4td2lkdGg6IDYwMHB4KScpO1xyXG5sZXQgaW5pdGlhbE1hdGNoID0gbXFsLm1hdGNoZXM7XHJcblxyXG4vLyBzZXQgbGlzdGVuZXIgdG8gcnVuIGNhbGxiYWNrXHJcbm1xbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4gbGF5b3V0Q2hhbmdlZENhbGxiYWNrKGUubWF0Y2hlcykpO1xyXG5cclxub25Mb2FkKCgpID0+IHtcclxuXHRhZGRIZXJvVmlkZW9Db250cm9scygpO1xyXG5cdHJlbW92ZUV4dHJhSGVhZGVyKCk7XHJcblxyXG4gICAgLy8gdGhlIGNhbGxiYWNrIGRvZXNuJ3QgcnVuIGltbWVkaWF0ZWx5LCBzbyB3ZSBydW4gaXQgbWFudWFsbHkgb25jZVxyXG4gICAgbGF5b3V0Q2hhbmdlZENhbGxiYWNrKG1xbC5tYXRjaGVzKTtcclxufSk7XHJcblxyXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsKCkgPT4geyBoYW5kbGVIZXJvTWVkaWEoKSB9KSIsImltcG9ydCBEb21Db21wb25lbnQgZnJvbSBcIi4uLy4uL2pzL2xpYi9kb20tY29tcG9uZW50XCI7XHJcbmltcG9ydCByZWdpc3Rlck1vZHVsZSBmcm9tIFwiLi4vLi4vanMvbGliL3JlZ2lzdGVyLW1vZHVsZVwiO1xyXG5pbXBvcnQgRXhwYW5kYWJsZSBmcm9tICcuLi8uLi9qcy9jb21wb25lbnRzL2V4cGFuZGFibGUnO1xyXG5cclxuY2xhc3MgRmVhdHVyZWRDb250ZW50IGV4dGVuZHMgRG9tQ29tcG9uZW50IHtcclxuXHRjb25zdHJ1Y3RvcigkZG9tRWxlbWVudCkge1xyXG5cdFx0c3VwZXIoJGRvbUVsZW1lbnQpO1xyXG5cclxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHR0aGlzLmluaXQoKTtcclxuXHRcdFx0dGhpcy5sb2FkZWQoKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0aW5pdCgpIHtcclxuXHRcdC8vIHRoaXMuJGV4cGFuYWJsZSA9IHRoaXMuZmluZEFsbCgnW2pzLWV4cGFuZGFibGVdJyk7XHJcblx0XHQvLyBBcnJheS5mcm9tKHRoaXMuJGV4cGFuYWJsZSkubWFwKGxpbmsgPT4gbmV3IEV4cGFuZGFibGUobGluaykpO1xyXG5cdH1cclxufVxyXG5cclxucmVnaXN0ZXJNb2R1bGUoJ2ZlYXR1cmVkLWNvbnRlbnQnLCBGZWF0dXJlZENvbnRlbnQpOyIsImltcG9ydCBEb21Db21wb25lbnQgZnJvbSBcIi4uLy4uL2pzL2xpYi9kb20tY29tcG9uZW50XCI7XHJcbmltcG9ydCByZWdpc3Rlck1vZHVsZSBmcm9tIFwiLi4vLi4vanMvbGliL3JlZ2lzdGVyLW1vZHVsZVwiO1xyXG5cclxuXHJcbmNsYXNzIFZpZGVvIGV4dGVuZHMgRG9tQ29tcG9uZW50IHtcclxuXHJcblx0Y29uc3RydWN0b3IoJGRvbUVsZW1lbnQpIHtcclxuXHRcdHN1cGVyKCRkb21FbGVtZW50KTtcclxuXHJcblx0XHRzZXRUaW
11lb3V0KCgpID0+IHtcclxuXHRcdFx0dGhpcy5pbml0KCk7XHJcblx0XHRcdHRoaXMubG9hZGVkKCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGluaXQoKSB7XHJcblx0XHR0aGlzLiR2aWRlbyA9IHRoaXMuZmluZCgnW2pzLXZpZGVvXScpO1xyXG5cdFx0dGhpcy4kcGxheUJ1dHRvbiA9IHRoaXMuZmluZCgnW2pzLXBsYXldJyk7XHJcblx0XHRcclxuXHRcdHRoaXMuYmluZEV2ZW50cygpO1xyXG5cdH1cclxuXHJcblx0YmluZEV2ZW50cygpIHtcclxuXHRcdGlmICh0aGlzLiRwbGF5QnV0dG9uKSB7XHJcblx0XHRcdHRoaXMuJHBsYXlCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnBsYXlWaWRlby5iaW5kKHRoaXMpKTtcclxuXHRcdH1cclxuXHR9XHJcblx0XHJcblx0cGxheVZpZGVvKCkge1xyXG5cdFx0dGhpcy4kZG9tRWxlbWVudC5jbGFzc0xpc3QuYWRkKCd2aWRlby1wbGF5aW5nJyk7XHJcblx0XHR0aGlzLiR2aWRlby5wbGF5KCk7XHJcblx0XHR0aGlzLiR2aWRlby5zZXRBdHRyaWJ1dGUoJ2NvbnRyb2xzJywgdHJ1ZSk7XHJcblx0fVxyXG59XHJcblxyXG5yZWdpc3Rlck1vZHVsZSgndmlkZW8nLCBWaWRlbyk7IiwiaW1wb3J0IERvbUNvbXBvbmVudCBmcm9tIFwiLi4vLi4vanMvbGliL2RvbS1jb21wb25lbnRcIjtcclxuaW1wb3J0IGVhY2ggZnJvbSAnLi4vLi4vanMvbGliL2VhY2gnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWNjb3JkaW9uIGV4dGVuZHMgRG9tQ29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigkZG9tRWxlbWVudCkge1xyXG4gICAgICAgIHN1cGVyKCRkb21FbGVtZW50KTtcclxuXHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbkNvdW50ZXIgPSAwO1xyXG4gICAgICAgIHRoaXMuc2V0QWNjb3JkaW9uSUQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3NzaWJsZUhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSk7XHJcbiAgICAgICAgdGhpcy5vcGVuSXRlbSA9IG51bGw7XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkZWQoKTtcclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEFjY29yZGlvbklEKCkge1xyXG4gICAgICAgIGxldCBub2RlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy51bXctYWNjb3JkaW9uLWNvbnRhaW5lcicpO1xyXG4gICAgICAgIHRoaXMuYWNjb3JkaW9uSUQgPSAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChub2RlcywgdGhpcy4kZG9tRWxlbWVudCkgKyAxKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBY2NvcmRpb25JRCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hY2NvcmRpb25JRDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbnN3ZXJJRChlbCkge1xyXG4gICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy4kZG9tRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1qcy1xdWVzdGlvbl0nKTtcclxuICAgICAgICBsZXQgaWQgPSAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChub2RlcywgZWwuY2xvc2VzdCgnW2RhdGEtanMtcXVlc3Rpb25dJykpICsgMSk7XHJcbiAgICAgICAgcmV0dXJuICdhY2NvcmRpb24tJyArIHRoaXMuZ2V0QWNjb3JkaW9uSUQoKSArICctYW5zd2VyLScgKyBpZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmlnZ2VySUQoZWwpIHtcclxuICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuJGRvbUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtanMtcXVlc3Rpb25dJyk7XHJcbiAgICAgICAgbGV0IGlkID0gKEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwobm9kZXMsIGVsLmNsb3Nlc3QoJ1tkYXRhLWpzLXF1ZXN0aW9uXScpKSArIDEpO1xyXG4gICAgICAgIHJldHVybiAnYWNjb3JkaW9uLScgKyB0aGlzLmdldEFjY29yZGlvbklEKCkgKyAnLXF1ZXN0aW9uLScgKyBpZDtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCAnaGFzaGNoYW5nZScsIHRoaXMuaGFzaENoYW5nZWQuYmluZCh0aGlzKSApO1xyXG4gICAgICAgIHRoaXMuJGRvbUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnYWNjb3JkaW9uLWpzJyk7XHJcbiAgICAgICAgdGhpcy5pc09ubHlPbmVPcGVuQXRBVGltZSA9IHRoaXMuJGRvbUVsZW1lbnQuZGF0YXNldC5vbmx5T25lID09ICd0cnVlJztcclxuICAgICAgICB0aGlzLiR0cmlnZ2VycyA9IHRoaXMuZmluZCgnW2RhdGEtanMtdHJpZ2dlcl0nLCB0cnVlKTtcclxuICAgICAgICB0aGlzLiRxdWVzdGlvbnMgPSB0aGlzLmZpbmQoJ1tkYXRhLWpzLXF1ZXN0aW9uXScsIHRydWUpO1xyXG5cclxuICAgICAgICBlYWNoKHRoaXMuJHF1ZXN0aW9ucywgKHF1ZXN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyaWdnZXIgPSBxdWVzdGlvbi5xdWVyeVNlbGVjdG9yKCdbZGF0YS1qcy10cmlnZ2VyXScpO1xyXG4gICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBxdWVzdGlvbi5xdWVyeVNlbGVjdG9yKCcuYWNjb3JkaW9uX19xdWVzdGlvbl9fYW5zd2VyJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIHRoaXMucG9zc2libGVIYXNoICYmIGFuc3dlci5xdWVyeVNlbGVjdG9yQWxsKCcjJyArIHRoaXMucG9zc2libGVIYXNoKS5sZW5ndGggPj0gMSApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub3Blbkl0ZW0gPSB0cmlnZ2VyO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0cmlnZ2VyLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xyXG4gICAgICAgICAgICB0cmlnZ2VyLnNldEF0dHJpYnV0ZSgnYXJpYS1jb250cm9scycsIHRoaXMuZ2V0QW5zd2VySUQodHJpZ2dlcikpO1xyXG4gICAgICAgICAgICB0cmlnZ2VyLnNldEF0dHJpYnV0ZSgnaWQnLCB0aGlzLmdldFRyaWdnZXJJRCh0cmlnZ2VyKSk7XHJcblxyXG4gICAgICAgICAgICBxdWVzdGlvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScsIHRoaXMuZ2V0VHJpZ2dlcklEKHRyaWdnZXIpKTtcclxuICAgICAgICAgICAgcXVlc3Rpb24uc2V0QXR0cmlidXRlKCdyb2xlJywgJ3JlZ2lvbicpO1xyXG5cclxuICAgICAgICAgICAgYW5zd2VyLnNldEF0dHJpYnV0ZSgnaWQnLCB0aGlzLmdldEFuc3dlcklEKGFuc3dlcikpO1xyXG4gICAgICAgICAgICBhbnN3ZXIuc2V0QXR0cmlidXRlKCdhcmlhLWh
1pZGRlbicsICd0cnVlJyk7XHJcblxyXG4gICAgICAgICAgICB0cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy50b2dnbGVPcGVuLmJpbmQodGhpcykpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoIHRoaXMub3Blbkl0ZW0gPT09IG51bGwgJiYgdGhpcy5wb3NzaWJsZUhhc2ggKSB7XHJcbiAgICAgICAgICAgIGlmICggdGhpcy4kZG9tRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCAnIycgKyB0aGlzLnBvc3NpYmxlSGFzaCArICcuYWNjb3JkaW9uX19xdWVzdGlvbl9fdHJpZ2dlciwgIycgKyB0aGlzLnBvc3NpYmxlSGFzaCArICcuYWNjb3JkaW9uX19xdWVzdGlvbl9fYW5zd2VyJyApLmxlbmd0aCA+PSAxICkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGkgPSB0aGlzLiRkb21FbGVtZW50LnF1ZXJ5U2VsZWN0b3IoICcuYWNjb3JkaW9uX19xdWVzdGlvbiMnICsgdGhpcy5wb3NzaWJsZUhhc2ggKyAnLCAuYWNjb3JkaW9uX19xdWVzdGlvbiA+ICMnICsgdGhpcy5wb3NzaWJsZUhhc2ggKTtcclxuICAgICAgICAgICAgICAgIHRoaXMub3Blbkl0ZW0gPSBpLmNsb3Nlc3QoJy51bXctY29sbGFwc2libGUtc2VjdGlvbi51bXctY3VzdG9tLWJsb2NrJykucXVlcnlTZWxlY3RvcignW2RhdGEtanMtdHJpZ2dlcl0nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCB0aGlzLm9wZW5JdGVtICkge1xyXG4gICAgICAgICAgICB0aGlzLmNsb3NlQWxsKCk7XHJcbiAgICAgICAgICAgIHRoaXMub3Blbkl0ZW0uY2xpY2soKTtcclxuICAgICAgICAgICAgdGhpcy5vcGVuSXRlbS5zY3JvbGxJbnRvVmlldygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYXNoQ2hhbmdlZChlKSB7XHJcbiAgICAgICAgdGhpcy5wb3NzaWJsZUhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSk7XHJcbiAgICAgICAgdGhpcy5vcGVuSXRlbSA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5wb3NzaWJsZUhhc2ggKSB7XHJcbiAgICAgICAgICAgIGlmICggdGhpcy4kZG9tRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCAnLmFjY29yZGlvbl9fcXVlc3Rpb24gIycgKyB0aGlzLnBvc3NpYmxlSGFzaCApLmxlbmd0aCA+PSAxICkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGkgPSB0aGlzLiRkb21FbGVtZW50LnF1ZXJ5U2VsZWN0b3IoICcjJyArIHRoaXMucG9zc2libGVIYXNoICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5JdGVtID0gaS5jbG9zZXN0KCcudW13LWNvbGxhcHNpYmxlLXNlY3Rpb24udW13LWN1c3RvbS1ibG9jaycpLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWpzLXRyaWdnZXJdJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICggdGhpcy5vcGVuSXRlbSApIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZUFsbCgpO1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5JdGVtLmNsaWNrKCk7XHJcbiAgICAgICAgICAgIHRoaXMub3Blbkl0ZW0uc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlT3BlbihlKSB7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyQ2xhc3NlcyA9IGUuY3VycmVudFRhcmdldC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdDtcclxuICAgICAgICBjb25zdCBwcmV2aW91c2x5T3BlbiA9IGNvbnRhaW5lckNsYXNzZXMuY29udGFpbnMoJ29wZW4nKSA9PT0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgYnV0dG9uID0gZS5jdXJyZW50VGFyZ2V0O1xyXG4gICAgICAgIGNvbnN0IGFjY29yZGlvbiA9IGJ1dHRvbi5jbG9zZXN0KCcudW13LWNvbGxhcHNpYmxlLXNlY3Rpb24nKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNPbmx5T25lT3BlbkF0QVRpbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZUFsbCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJldmlvdXNseU9wZW4pIHtcclxuICAgICAgICAgICAgY29udGFpbmVyQ2xhc3Nlcy5yZW1vdmUoJ29wZW4nKTtcclxuICAgICAgICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xyXG4gICAgICAgICAgICBidXR0b24uY2xvc2VzdCgnW2RhdGEtanMtcXVlc3Rpb25dJykucXVlcnlTZWxlY3RvcignLmFjY29yZGlvbl9fcXVlc3Rpb25fX2Fuc3dlcicpLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lckNsYXNzZXMuYWRkKCdvcGVuJyk7XHJcbiAgICAgICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpO1xyXG4gICAgICAgICAgICBidXR0b24uY2xvc2VzdCgnW2RhdGEtanMtcXVlc3Rpb25dJykucXVlcnlTZWxlY3RvcignLmFjY29yZGlvbl9fcXVlc3Rpb25fX2Fuc3dlcicpLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAnZmFsc2UnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VBbGwoKSB7XHJcbiAgICAgICAgZWFjaCh0aGlzLiRxdWVzdGlvbnMsICgkcXVlc3Rpb24pID0+IHtcclxuICAgICAgICAgICAgJHF1ZXN0aW9uLnF1ZXJ5U2VsZWN0b3IoJy5hY2NvcmRpb25fX3F1ZXN0aW9uX19hbnN3ZXInKS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcclxuICAgICAgICAgICAgJHF1ZXN0aW9uLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWpzLXRyaWdnZXJdJykuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XHJcbiAgICAgICAgICAgICRxdWVzdGlvbi5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IG9uTG9hZCBmcm9tICcuLi8uLi9qcy9saWIvb24tbG9hZCc7XHJcbmltcG9ydCBlYWNoIGZyb20gJy4uLy4uL2pzL2xpYi9lYWNoJztcclxuaW1wb3J0IHsgbXEgfSBmcm9tICcuLi8uLi9qcy9saWIvbXEnXHJcbmltcG9ydCByZWdpc3Rlck1vZHVsZSBmcm9tIFwiLi4vLi4vanMvbGliL3JlZ2lzdGVyLW1vZHVsZVwiO1xyXG5pbXBvcnQgRG9tQ29tcG9uZW50IGZyb20gXCIuLi8uLi9qcy9saWIvZG9tLWNvbXBvbmVudFwiO1xyXG5cclxuY2xhc3MgSG9yaXpvbn
1RhbFNjcm9sbGVyIGV4dGVuZHMgRG9tQ29tcG9uZW50IHtcclxuXHRjb25zdHJ1Y3RvcigkZG9tRWxlbWVudCkge1xyXG5cdFx0c3VwZXIoJGRvbUVsZW1lbnQpO1xyXG5cdFx0dGhpcy5oYXNTY3JvbGwgPSBmYWxzZTtcclxuXHRcdHRoaXMuJHdyYXBwZXIgPSB0aGlzLiRkb21FbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy51bXctaG9yaXpvbnRhbC1zY3JvbGxlcl9fd3JhcHBlcicpO1xyXG5cdFx0dGhpcy4kZG9tRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdzY3JvbGwnKTtcclxuXHRcdHRoaXMuY2hlY2tGb3JTY3JvbGwoKTtcclxuXHJcblx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5jaGVja0ZvclNjcm9sbC5iaW5kKHRoaXMpKTtcclxuXHR9XHJcblxyXG5cdGNoZWNrRm9yU2Nyb2xsKCkge1xyXG5cdFx0aWYgKHRoaXMuaXNTY3JvbGxhYmxlKCkgJiYgIXRoaXMuaGFzU2Nyb2xsKSB7XHJcblx0XHRcdHRoaXMuY3JlYXRlVGh1bWIoKTtcclxuXHRcdH1cclxuXHRcdGVsc2UgaWYgKCF0aGlzLmlzU2Nyb2xsYWJsZSgpICYmIHRoaXMuaGFzU2Nyb2xsKSB7XHJcblx0XHRcdHRoaXMucmVtb3ZlU2Nyb2xsZXIoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJlbW92ZVNjcm9sbGVyKCkge1xyXG5cdFx0dGhpcy5oYXNTY3JvbGwgPSBmYWxzZTtcclxuXHRcdGlmICh0aGlzLiR0cmFjaykge1xyXG5cdFx0XHR0aGlzLiR0cmFjay5yZW1vdmUoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzU2Nyb2xsYWJsZSgpIHtcclxuXHRcdGNvbnN0IGNoaWxkcmVuID0gdGhpcy4kZG9tRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudW13LWhvcml6b250YWwtc2Nyb2xsZXJfX2NvbHVtbicpO1xyXG5cdFx0bGV0IHdpZHRoID0gMDtcclxuXHRcdGVhY2goY2hpbGRyZW4sIChjaGlsZCkgPT4ge1xyXG5cdFx0XHR3aWR0aCArPSBjaGlsZC5vZmZzZXRXaWR0aDtcclxuXHRcdH0pO1xyXG5cclxuXHRcdHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggPCB3aWR0aDtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZVRodW1iKCkge1xyXG5cdFx0dGhpcy5oYXNTY3JvbGwgPSB0cnVlO1xyXG5cdFx0Y29uc3QgaHRtbCA9IGBcclxuXHRcdFx0PGRpdiBjbGFzcz1cInNjcm9sbF9fdHJhY2tcIiBqcy10cmFjaz5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwic2Nyb2xsX190aHVtYlwiIGpzLXRodW1iIC8+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0YDtcclxuXHRcdHRoaXMuJGRvbUVsZW1lbnQuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlcmVuZCcsIGh0bWwpO1xyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdHRoaXMuc2V0VXBCaW5kaW5ncygpO1xyXG5cdFx0fSwgNTApO1xyXG5cdH1cclxuXHJcblx0c2V0VXBCaW5kaW5ncygpIHtcclxuXHRcdHRoaXMuJHRyYWNrID0gdGhpcy4kZG9tRWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7XHJcblx0XHR0aGlzLiR0aHVtYiA9IHRoaXMuJGRvbUVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nLnF1ZXJ5U2VsZWN0b3IoJ1tqcy10aHVtYl0nKTtcclxuXHRcdFxyXG5cdFx0dGhpcy5sZW5ndGhPZlNjcm9sbCA9IHRoaXMuJHRyYWNrLm9mZnNldFdpZHRoIC0gdGhpcy4kdGh1bWIub2Zmc2V0V2lkdGg7XHJcblx0XHR0aGlzLiR3cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwuYmluZCh0aGlzKSk7XHJcblx0XHR0aGlzLmluaXRpYWxpemVTY3JvbGxCYXIoKTtcclxuXHR9XHJcblx0XHJcblx0aW5pdGlhbGl6ZVNjcm9sbEJhcigpIHtcclxuXHRcdC8vIGNvbnN0IHBhZGRpbmcgPSA0OCAtIDg7IC8vIHRoaXMgaXMgdGhlIDI0cHggcGFkZGluZyBvbiBlYWNoIHNpZGUuIFdlIHN1YnRyYWN0IDggYXMgdGhpcyBpcyB0aGUgcGxhY2Vob2xkZXIgdG8gZ2l2ZSB1cyBhIGZsdXNoIGFsaWdubWVudFxyXG5cdFx0dGhpcy50b3RhbFdpZHRoID0gdGhpcy4kd3JhcHBlci5zY3JvbGxXaWR0aCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcclxuXHRcdHRoaXMuc2Nyb2xsUmF0aW8gPSB0aGlzLmxlbmd0aE9mU2Nyb2xsIC8gdGhpcy50b3RhbFdpZHRoO1xyXG5cdH1cclxuXHJcblx0b25TY3JvbGwoKSB7XHJcblx0XHQvLyBjb25zdCBhbW91bnRTY3JvbGxlZCA9ICh0aGlzLiRkb21FbGVtZW50LnNjcm9sbExlZnQgLyB0aGlzLnRvdGFsV2lkdGgpICogMTAwO1xyXG5cdFx0Y29uc3QgYW1vdW50U2Nyb2xsZWQgPSB0aGlzLiR3cmFwcGVyLnNjcm9sbExlZnQgKiB0aGlzLnNjcm9sbFJhdGlvO1xyXG5cdFx0dGhpcy4kdGh1bWIuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHthbW91bnRTY3JvbGxlZH1weClgO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGluaXQoKSB7XHJcblx0XHRpZiAoIW1xKCdtZCcpKSB7XHJcblx0XHRcdG9uTG9hZCgoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2Nyb2xsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2pzLWhvcml6b250YWwtc2Nyb2xsXScpO1xyXG5cdFx0XHRcdEFycmF5LmZyb20oc2Nyb2xsKS5tYXAoZWwgPT4gbmV3IEhvcml6b250YWxTY3JvbGwoZWwpKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcblxyXG5yZWdpc3Rlck1vZHVsZSgnaG9yaXpvbnRhbC1zY3JvbGxlcicsIEhvcml6b250YWxTY3JvbGxlcik7IiwiaW1wb3J0IG9uTG9hZCBmcm9tICcuLi9saWIvb24tbG9hZCc7XHJcbmltcG9ydCBlYWNoIGZyb20gJy4uL2xpYi9lYWNoJztcclxuaW1wb3J0IHsgbXEgfSBmcm9tICcuLi9saWIvbXEnO1xyXG5cclxuY2xhc3MgSG9yaXpvbnRhbFNjcm9sbCB7XHJcblx0Y29uc3RydWN0b3IoJGVsKSB7XHJcblx0XHR0aGlzLiRlbCA9ICRlbDtcclxuXHRcdHRoaXMuJGlubmVyID0gdGhpcy4kZWwuZmlyc3RFbGVtZW50Q2hpbGQ7XHJcblx0XHR0aGlzLiRlbC5jbGFzc0xpc3QuYWRkKCdzY3JvbGwnKTtcclxuXHRcdGlmICh0aGlzLmlzU2Nyb2xsYWJsZSgpKSB7XHJcblx0XHRcdHRoaXMuY3JlYXRlVGh1bWIoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGlzU2Nyb2xsYWJsZSgpIHtcclxuXHRcdGNvbnN0IGNoaWxkcmVuID0gdGhpcy4kaW5uZXIuY2hpbGRyZW47XHJcblx0XHRsZXQgd2lkdGggPSAwO1xyXG5cdFx0ZWFjaChjaGlsZHJlbiwgKGNoaWxkKSA9PiB7XHJcblx0XHRcdHdpZHRoICs9IGNoaWxkLm9mZnNldFdpZHRoO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0cmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCA8IHdpZHRoO1xyXG5cdH1cclxuXHJcblx0Y3JlYXRlVGh1bWIoKSB7XHJcblx0XHRjb25zdCBodG1sID0gYFxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwic2Nyb2xsX190cmFja1wiIGpzLXRyYWNrPlxyXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzY3JvbGxfX3RodW1iXCIganMtdGh1bWIgLz5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHRgO1xyXG5cdFx0dGhpcy4kZWwuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlcmVuZCcsIGh0bWwpO1xyXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdHRoaXMuc2V0VXBCaW5kaW5ncygpO1xyXG5cdFx0fSwgNTApO1xyXG5cdH1cclxuXHJcblx0c2V0VXBCaW5kaW5ncygpIHtcclxuXHRcdHRoaXMuJHRyYWNrID0gdGhpcy4kZWwubmV4dEVsZW1lbnRTaWJsaW5nO1xyXG5cdFx0dGhpcy4kdGh1bWIgPSB0aGlzLiRlbC5uZXh0RWxlbWVudFNpYmxpbmcucXVlcnlTZWxlY3RvcignW2pzLXRodW1iXScpO1xyXG5cdFx0XHJcblx0XHR0aGlzLmxlbmd0aE9mU2Nyb2xsID0gdGhpcy4kdHJhY2sub2Zmc2V0V2lkdGggLSB0aGlzLiR0aHVtYi5vZmZzZXRXaWR0aDtcclxuXHRcdHRoaXMuJGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwuYmluZCh0aGlzKSk7XHJcblx0XHR0aGlzLmluaXRpYWxpemVTY3JvbGxCYXIoKTtcclxuXHR9XHJcblx0XHJcblx0aW5pdGlhbGl6ZVNjcm9sbEJhcigpIHtcclxuXHRcdC8vIGNvbnN0IHBhZGRpbmcgPSA0OCAtIDg7IC8vIHRoaXMgaXMgdGhlIDI0cHggcGFkZGluZyBvbiBlYWNoIHNpZGUuIFdlIHN1YnRyYWN0IDggYXMgdGhpcyBpcyB0aGUgcGxhY2Vob2xkZXIgdG8gZ2l2ZSB1cyBhIGZsdXNoIGFsaWdubWVudFxyXG5cdFx0dGhpcy50b3RhbFdpZHR
1oID0gdGhpcy4kZWwuc2Nyb2xsV2lkdGggLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XHJcblx0XHR0aGlzLnNjcm9sbFJhdGlvID0gdGhpcy5sZW5ndGhPZlNjcm9sbCAvIHRoaXMudG90YWxXaWR0aDtcclxuXHR9XHJcblxyXG5cdG9uU2Nyb2xsKCkge1xyXG5cdFx0Ly8gY29uc3QgYW1vdW50U2Nyb2xsZWQgPSAodGhpcy4kZWwuc2Nyb2xsTGVmdCAvIHRoaXMudG90YWxXaWR0aCkgKiAxMDA7XHJcblx0XHRjb25zdCBhbW91bnRTY3JvbGxlZCA9IHRoaXMuJGVsLnNjcm9sbExlZnQgKiB0aGlzLnNjcm9sbFJhdGlvO1xyXG5cdFx0dGhpcy4kdGh1bWIuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVgoJHthbW91bnRTY3JvbGxlZH1weClgO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGluaXQoKSB7XHJcblx0XHRpZiAoIW1xKCdtZCcpKSB7XHJcblx0XHRcdG9uTG9hZCgoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2Nyb2xsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2pzLWhvcml6b250YWwtc2Nyb2xsXScpO1xyXG5cdFx0XHRcdEFycmF5LmZyb20oc2Nyb2xsKS5tYXAoZWwgPT4gbmV3IEhvcml6b250YWxTY3JvbGwoZWwpKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBIb3Jpem9udGFsU2Nyb2xsOyIsImltcG9ydCBlYWNoIGZyb20gXCIuLi8uLi9qcy9saWIvZWFjaFwiO1xyXG5pbXBvcnQgeyAkIH0gZnJvbSBcIi4uLy4uL2pzL2xpYi9jb25zdFwiO1xyXG5pbXBvcnQgJy4uLy4uL2pzL2NvbXBvbmVudHMvc2VsZWN0JztcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR3Jhdml0eUZvcm0ge1xyXG5cclxuXHRjb25zdHJ1Y3RvcigkZm9ybSkge1xyXG5cdFx0dGhpcy4kZm9ybSA9ICRmb3JtO1xyXG5cdFx0dGhpcy4kaW5wdXRzID0gdGhpcy4kZm9ybS5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFt0eXBlPVwidGV4dFwiXSxpbnB1dFt0eXBlPVwiZW1haWxcIl0sIGlucHV0W3R5cGU9XCJ0ZWxcIl0sIHRleHRhcmVhLCBzZWxlY3QnKTtcclxuXHJcblx0XHR0aGlzLmJpbmRFdmVudHMoKTtcclxuXHRcdCQoJ3NlbGVjdCcsIHRoaXMuJGZvcm0pLm5pY2VTZWxlY3QoKTtcclxuXHR9XHJcblxyXG5cdGJpbmRFdmVudHMoKSB7XHJcblx0XHRlYWNoKHRoaXMuJGlucHV0cywgKGlucHV0KSA9PiB7XHJcblx0XHRcdGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLm9uQmx1ci5iaW5kKHRoaXMpKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0b25CbHVyKGUpIHtcclxuXHRcdGlmIChlLmN1cnJlbnRUYXJnZXQudmFsdWUubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRlLmN1cnJlbnRUYXJnZXQuY2xhc3NMaXN0LmFkZCgnaGFzLWlucHV0Jyk7XHJcblx0XHR9XHJcblx0XHRlbHNlIHtcclxuXHRcdFx0ZS5jdXJyZW50VGFyZ2V0LmNsYXNzTGlzdC5yZW1vdmUoJ2hhcy1pbnB1dCcpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0c3RhdGljIGluaXQoKSB7XHJcblx0XHRBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5nZm9ybV93cmFwcGVyIGZvcm0nKSlcclxuXHRcdC5tYXAoZm9ybSA9PiBuZXcgR3Jhdml0eUZvcm0oZm9ybSkpO1xyXG5cdH1cclxufSIsImltcG9ydCBJbWFnZUdhbGxlcnkgZnJvbSAnLi9ibG9ja3MvaW1hZ2UtZ2FsbGVyeS9pbWFnZS1nYWxsZXJ5LmJsb2NrJztcclxuaW1wb3J0IENhcm91c2VsIGZyb20gJy4vYmxvY2tzL3B1bGwtcXVvdGVzL3B1bGwtcXVvdGVzLmJsb2NrJztcclxuaW1wb3J0IFNpZGViYXIgZnJvbSAnLi9zaWRlYmFyL3NpZGViYXInO1xyXG5pbXBvcnQgcmVnaXN0ZXJNb2R1bGUgZnJvbSBcIi4vanMvbGliL3JlZ2lzdGVyLW1vZHVsZVwiO1xyXG5pbXBvcnQgZmVhdHVyZWROZXdzIGZyb20gJy4uL3NyYy9ibG9ja3MvZmVhdHVyZWQtY29udGVudC9mZWF0dXJlZC1uZXdzJztcclxuXHJcbmltcG9ydCAnLi9zdHlsZXMvc3R5bGVzLnNjc3MnO1xyXG5pbXBvcnQgJy4vYmxvY2tzL2hlcm8taW50cm8vaGVyby1pbnRyby5ibG9jayc7XHJcbmltcG9ydCAnLi9ibG9ja3MvcHVsbC1xdW90ZXMvcHVsbC1xdW90ZXMuYmxvY2snO1xyXG5pbXBvcnQgJy4vYmxvY2tzL2ZlYXR1cmVkLWNvbnRlbnQvZmVhdHVyZWQtY29udGVudC5ibG9jayc7XHJcbmltcG9ydCAnLi9ibG9ja3MvdmlkZW8vdmlkZW8uYmxvY2snO1xyXG5pbXBvcnQgJy4vc2lkZWJhci9zaWRlYmFyJztcclxuaW1wb3J0ICcuL2Jsb2Nrcy9hY2NvcmRpb24vYWNjb3JkaW9uLmJsb2NrJztcclxuaW1wb3J0ICcuL2Jsb2Nrcy9ob3Jpem9udGFsLXNjcm9sbGVyL2hvcml6b250YWwtc2Nyb2xsZXIuYmxvY2snO1xyXG5cclxuaW1wb3J0IEV4cGFuZGFibGUgZnJvbSAnLi9qcy9jb21wb25lbnRzL2V4cGFuZGFibGUnO1xyXG5pbXBvcnQgSG9yaXpvbnRhbFNjcm9sbCBmcm9tICcuL2pzL3NlcnZpY2VzL2hvcml6b250YWwtc2Nyb2xsJztcclxuaW1wb3J0IG9uTG9hZCBmcm9tICcuL2pzL2xpYi9vbi1sb2FkJztcclxuaW1wb3J0IEdyYXZpdHlGb3JtIGZyb20gJy4vY29tcG9uZW50cy9mb3Jtcy9mb3Jtcyc7XHJcblxyXG4vKipcclxuICogSWYgdGhlcmUgaXMgYSBzaWRlYmFyIG9uIHRoZSBwYWdlLCBtb3ZlIHRoZSBJbnRybyBUZXh0IGFuZCBCdXR0b24gYmxvY2tzIG91dFxyXG4gKiBvZiB0aGUgSGVybyBhbmQgaW50byB0aGUgbWFpbiBjb250ZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBoZXJvIFRoZSBIZXJvIGJsb2NrLlxyXG4gKi9cclxuY29uc3QgbWFuaXB1bGF0ZUhlcm9Gb3JTaWRlYmFyID0gaGVybyA9PiB7XHJcbiAgICBjb25zdCBtYWluQ29udGVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy51bXctYmxvY2stY29udGVudCA+IC5lbnRyeS1jb250ZW50Jyk7XHJcbiAgICBjb25zdCBoZXJvSW50cm9UZXh0Q29udGFpbmVyID0gaGVyby5xdWVyeVNlbGVjdG9yKCcud3AtYmxvY2stdW13LWhlcm8taW50cm8tdGV4dCcpO1xyXG4gICAgY29uc3QgaGVyb0ludHJvVGV4dCA9IGhlcm8ucXVlcnlTZWxlY3RvcignLnVtdy1pbnRyby10ZXh0Jyk7XHJcbiAgICBjb25zdCBoZXJvQnV0dG9uc0NvbnRhaW5lciA9IGhlcm8ucXVlcnlTZWxlY3RvcignLndwLWJsb2NrLXVtdy1oZXJvLWN0YXMnKTtcclxuICAgIGNvbnN0IGhlcm9CdXR0b25zID0gaGVyby5xdWVyeVNlbGVjdG9yQWxsKCcudW13LWhlcm9fX2xpbmtzX193
1cmFwcGVyID4gKicpO1xyXG5cclxuICAgIC8vIE1vdmUgYnV0dG9ucyBiYWNrIGludG8gdGhlIG1haW4gY29udGVudCBmaXJzdCwgc28gbW92ZWQgaW50cm8gdGV4dCB3aWxsIGdvIGFib3ZlIHRoZW0uXHJcbiAgICBpZiAoaGVyb0J1dHRvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgQXJyYXkuZnJvbShoZXJvQnV0dG9ucykucmV2ZXJzZSgpLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgICAgICBtYWluQ29udGVudC5pbnNlcnRCZWZvcmUoZWwsIG1haW5Db250ZW50LmZpcnN0Q2hpbGQpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBoZXJvQnV0dG9uc0NvbnRhaW5lci5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGhlcm9CdXR0b25zQ29udGFpbmVyKTtcclxuICAgIH0gZWxzZSBpZiAoaGVyb0ludHJvVGV4dENvbnRhaW5lci5sZW5ndGggPj0gMSkge1xyXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgaGVybyBidXR0b25zIGNvbXBsZXRlbHkgaWYgdGhlcmUgYXJlbid0IGFueVxyXG4gICAgICAgIGhlcm9CdXR0b25zQ29udGFpbmVyLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoaGVyb0J1dHRvbnNDb250YWluZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1vdmUgdGhlIGludHJvIHRleHQgYmFjayBpbnRvIHRoZSBtYWluIGNvbnRlbnQuXHJcbiAgICBpZiAoaGVyb0ludHJvVGV4dCkge1xyXG4gICAgICAgIG1haW5Db250ZW50Lmluc2VydEJlZm9yZShoZXJvSW50cm9UZXh0LCBtYWluQ29udGVudC5maXJzdENoaWxkKTtcclxuICAgICAgICBoZXJvSW50cm9UZXh0Q29udGFpbmVyLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoaGVyb0ludHJvVGV4dENvbnRhaW5lcik7XHJcbiAgICB9XHJcbn07XHJcblxyXG4vKipcclxuICogSWYgdGhlcmUgaXMgSW50cm8gVGV4dCBpbnNpZGUgYSBIZXJvLCB0aGUgYnJlYWRjcnVtYiBzaG91bGQgYmUgYWJvdmVcclxuICogdGhhdCBJbnRybyBUZXh0LlxyXG4gKlxyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBicmVhZGNydW1iIFRoZSBicmVhZGNydW1iIGNvbnRhaW5lci5cclxuICovXHJcbmNvbnN0IG1hbmlwdWxhdGVCcmVhZGNydW1iID0gYnJlYWRjcnVtYiA9PiB7XHJcbiAgICAvLyBGaW5kIGFuIEludHJvIFRleHQgYmxvY2sgaW4gYSBIZXJvLlxyXG4gICAgY29uc3QgdmFsaWRJbnRyb1RleHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGF5b3V0ID4gLnVtdy1oZXJvIC51bXctaW50cm8tdGV4dF9faW5uZXInKTtcclxuXHJcbiAgICBpZiAodmFsaWRJbnRyb1RleHQpIHtcclxuICAgICAgICAvLyBNb3ZlIHRoZSBicmVhZGNydW1iIGludG8gdGhlIGhlcm8gYWJvdmUgdGhlIEludHJvIFRleHQgYmxvY2suXHJcbiAgICAgICAgdmFsaWRJbnRyb1RleHQuaW5zZXJ0QmVmb3JlKGJyZWFkY3J1bWIsIHZhbGlkSW50cm9UZXh0LmZpcnN0Q2hpbGQpO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIERvIGFsbCBoZXJvIGFuZCBicmVhZGNydW1iIG1hbmlwdWxhdGlvbiBpbiB0aGUgcmlnaHQgb3JkZXIgYW5kIG9ubHkgd2hlbiBuZWNlc3NhcnkuXHJcbiAqL1xyXG5jb25zdCBtYW5pcHVsYXRlSGVyb0FuZEJyZWFkY3J1bWIgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBzaWRlYmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnVtdy1zaWRlYmFyJyk7XHJcbiAgICBjb25zdCBzdGFydGluZ0hlcm8gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubGF5b3V0ID4gLnVtdy1oZXJvJyk7XHJcbiAgICBjb25zdCBicmVhZGNydW1iID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmJyZWFkY3J1bWInKVxyXG5cclxuICAgIGlmIChzaWRlYmFyICYmIHN0YXJ0aW5nSGVybykge1xyXG4gICAgICAgIG1hbmlwdWxhdGVIZXJvRm9yU2lkZWJhcihzdGFydGluZ0hlcm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghc2lkZWJhciAmJiBzdGFydGluZ0hlcm8gJiYgYnJlYWRjcnVtYikge1xyXG4gICAgICAgIG1hbmlwdWxhdGVCcmVhZGNydW1iKGJyZWFkY3J1bWIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEJhaWwgb3V0IGlmIG5vIGJyZWFkY3J1bWIuXHJcbiAgICBpZiAoIWJyZWFkY3J1bWIpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTW92ZSB0aGUgbW9iaWxlIGJyZWFkY3J1bWIgYmFjayBhcnJvdyBpbnRvIHRoZSBsaW5rIGVsZW1lbnQsIHdoaWNoIGlzIG5vdFxyXG4gICAgLy8gYXMgZWFzeSB0byBkbyBpbiBQSFAuXHJcbiAgICBjb25zdCBwcmV2aW91cyA9IGJyZWFkY3J1bWIucXVlcnlTZWxlY3RvcignLmJyZWFkY3J1bWJfX3ByZXZpb3VzJyk7XHJcbiAgICBjb25zdCBzdmcgPSBwcmV2aW91cy5xdWVyeVNlbGVjdG9yKCdzdmcnKTtcclxuICAgIGNvbnN0IHByZXZpb3VzTGluayA9IHByZXZpb3VzLnF1ZXJ5U2VsZWN0b3IoJ2EnKTtcclxuXHJcbiAgICBpZiAoc3ZnICYmIHByZXZpb3VzTGluaykge1xyXG4gICAgICAgIHByZXZpb3VzTGluay5pbnNlcnRCZWZvcmUoc3ZnLCBwcmV2aW91c0xpbmsuZmlyc3RDaGlsZCk7XHJcbiAgICB9XHJcblxyXG5cclxufTtcclxuXHJcbi8vIEFkZCBsYW5kbWFyayByb2xlcyB0byBlbGVtZW50cyB0aGF0IG5lZWQgdGhlbVxyXG5jb25zdCBhZGRMYW5kbWFya1JvbGVzID0gKCkgPT4ge1xyXG4gICAgY29uc3Qgc2tpcExpbmtzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmdlbmVzaXMtc2tpcC1saW5rJyk7XHJcbiAgICBza2lwTGlua3MuZm9yRWFjaCgoc2tpcGxpbmspID0+IHtcclxuICAgICAgICBjb25zdCB3cmFwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbmF2Jyk7XHJcbiAgICAgICAgd3JhcC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnbmF2aWdhdGlvbicpO1xyXG4gICAgICAgIHdyYXAuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ1NraXAgTGlua3MnKTtcclxuICAgICAgICBza2lwbGluay5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwLHNraXBsaW5rKTtcclxuICAgICAgICB3cmFwLmFwcGVuZENoaWxkKHNraXBsaW5rKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG4vLyBUYXNrcyB0byBkbyBvbiB0aGUgd2luZG93J3MgYGxvYWRgIGV2ZW50OyBzZWUgYmVsb3cuXHJcbmNvbnN0IG9uRnVsbExvYWQgPSAoKSA9PiB7XHJcbiAgICB3aW5kb3cuaW1hZ2VHYWxsZXJpZXMgPSBbXTtcclxuXHJcbiAgICBkb2
1N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaW1hZ2UtZ2FsbGVyeScpLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5pbWFnZUdhbGxlcmllcy5wdXNoKG5ldyBJbWFnZUdhbGxlcnkoZWwpKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy51bXctc2lkZWJhcicpLmZvckVhY2goZWwgPT4ge1xyXG4gICAgICAgIG5ldyBTaWRlYmFyKGVsKTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuXHJcbi8vIFRoZSBgZmFsc2VgIGluIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGhlcmUgbWFrZXMgdGhlIGNhbGxiYWNrIHJ1biBvbiB0aGVcclxuLy8gd2luZG93J3MgYGxvYWRgIGV2ZW50LCBsYXRlciB0aGFuIHRoZSB1c3VhbCBET01Db250ZW50TG9hZGVkLiBUaGlzIGlzXHJcbi8vIG5lZWRlZCB0byBnZXQgaW1hZ2UgZ2FsbGVyeSBpbml0aWFsaXphdGlvbiByaWdodCwgc2luY2UgaXQgZGVwZW5kcyBvblxyXG4vLyBpbWFnZSBkaW1lbnNpb25zLlxyXG5vbkxvYWQoXHJcbiAgICAoKSA9PiB7XHJcbiAgICAgICAgSG9yaXpvbnRhbFNjcm9sbC5pbml0KCk7XHJcbiAgICAgICAgRXhwYW5kYWJsZS5pbml0KCk7XHJcbiAgICAgICAgR3Jhdml0eUZvcm0uaW5pdCgpO1xyXG5cclxuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2dlbmVzaXMtY29udGVudCcpKSB7XHJcbiAgICAgICAgICAgIG9uRnVsbExvYWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZWdpc3Rlck1vZHVsZSgnaW1hZ2UtZ2FsbGVyeScsIEltYWdlR2FsbGVyeSk7XHJcbiAgICAgICAgICAgIHJlZ2lzdGVyTW9kdWxlKCdjYXJvdXNlbCcsIENhcm91c2VsKTtcclxuICAgICAgICAgICAgcmVnaXN0ZXJNb2R1bGUoJ3NpZGViYXInLCBTaWRlYmFyKTtcclxuICAgICAgICAgICAgcmVnaXN0ZXJNb2R1bGUoJ2hlYWRlcicsIEhlYWRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGZhbHNlXHJcbik7XHJcblxyXG4vLyBJbW1lZGlhdGVseSB1cG9uIERPTUNvbnRlbnRMb2FkZWQuXHJcbm9uTG9hZCgoKSA9PiB7XHJcbiAgICBtYW5pcHVsYXRlSGVyb0FuZEJyZWFkY3J1bWIoKTtcclxuICAgIGZlYXR1cmVkTmV3cygpO1xyXG4gICAgYWRkTGFuZG1hcmtSb2xlcygpO1xyXG59KTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///312\n\n}")},827:()=>{eval("{/* jQuery Nice Select - v1.1.0\r\n https://github.com/hernansartorio/jquery-nice-select\r\n Made by Hernán Sartorio */\n\n(function ($) {\n $.fn.niceSelect = function (method) {\n // Methods\n if (typeof method == 'string') {\n if (method == 'update') {\n this.each(function () {\n var $select = $(this);\n var $dropdown = $(this).next('.nice-select');\n var open = $dropdown.hasClass('open');\n if ($dropdown.length) {\n $dropdown.remove();\n create_nice_select($select);\n if (open) {\n $select.next().trigger('click');\n }\n }\n });\n } else if (method == 'destroy') {\n this.each(function () {\n var $select = $(this);\n var $dropdown = $(this).next('.nice-select');\n if ($dropdown.length) {\n $dropdown.remove();\n $select.css('display', '');\n }\n });\n if ($('.nice-select').length == 0) {\n $(document).off('.nice_select');\n }\n } else {\n console.log('Method \"' + method + '\" does not exist.');\n }\n return this;\n }\n\n // Hide native select\n this.hide();\n\n // Create custom markup\n this.each(function () {\n var $select = $(this);\n if (!$select.next().hasClass('nice-select')) {\n create_nice_select($select);\n }\n });\n function copyLabel($select) {\n const id = $select.attr(\"id\");\n const correspondingLabel = $('label[for=\"' + id + '\"]');\n const clone = correspondingLabel.clone();\n correspondingLabel.remove();\n return clone;\n }\n function create_nice_select($select) {\n /*var label = copyLabel($select);*/\n $select.after($('<div></div>').addClass('nice-select').addClass($select.attr('class') || '').addClass($select.attr('disabled') ? 'disabled' : '').attr('tabindex', $select.attr('disabled') ? null : '0').html('<span class=\"current\"></span><ul class=\"list\"></ul>' /* + label[0].outerHTML*/));\n var $dropdown = $select.next();\n var $options = $select.find('option');\n var $selected = $select.find('option:selected');\n $dropdown.find('.current').html($selected.data('display') || $selected.text());\n $options.each(function (i) {\n var $option = $(this);\n var display = $option.data('display');\n if ($option.val() != null && $option.val() != '') {\n $dropdown.find('ul').append($('<li></li>').attr('data-value', $option.val()).attr('data-display', display || null).addClass('option' + ($option.is(':selected') ? ' selected' : '') + ($option.is(':disabled') ? ' disabled' : '')).html($option.text()));\n }\n });\n }\n\n /* Event listeners */\n\n // Unbind existing events in case that the plugin has been initialized before\n $(document).off('.nice_select');\n\n // Open/close\n $(document).on('click.nice_select', '.nice-select', function (event) {\n var $dropdown = $(this);\n $('.nice-select').not($dropdown).removeClass('open');\n $dropdown.toggleClass('open');
1\n if ($dropdown.hasClass('open')) {\n $dropdown.find('.option');\n $dropdown.find('.focus').removeClass('focus');\n $dropdown.find('.selected').addClass('focus');\n } else {\n $dropdown.focus();\n }\n });\n\n // Close when clicking outside\n $(document).on('click.nice_select', function (event) {\n if ($(event.target).closest('.nice-select').length === 0) {\n $('.nice-select').removeClass('open').find('.option');\n }\n });\n\n // Option click\n $(document).on('click.nice_select', '.nice-select .option:not(.disabled)', function (event) {\n var $option = $(this);\n var $dropdown = $option.closest('.nice-select');\n $dropdown.addClass('has-input');\n $dropdown.find('.selected').removeClass('selected');\n $option.addClass('selected');\n var text = $option.data('display') || $option.text();\n $dropdown.find('.current').text(text);\n $dropdown.prev('select').val($option.data('value')).trigger('change');\n });\n\n // Keyboard events\n $(document).on('keydown.nice_select', '.nice-select', function (event) {\n var $dropdown = $(this);\n var $focused_option = $($dropdown.find('.focus') || $dropdown.find('.list .option.selected'));\n\n // Space or Enter\n if (event.keyCode == 32 || event.keyCode == 13) {\n if ($dropdown.hasClass('open')) {\n $focused_option.trigger('click');\n } else {\n $dropdown.trigger('click');\n }\n return false;\n // Down\n } else if (event.keyCode == 40) {\n if (!$dropdown.hasClass('open')) {\n $dropdown.trigger('click');\n } else {\n var $next = $focused_option.nextAll('.option:not(.disabled)').first();\n if ($next.length > 0) {\n $dropdown.find('.focus').removeClass('focus');\n $next.addClass('focus');\n }\n }\n return false;\n // Up\n } else if (event.keyCode == 38) {\n if (!$dropdown.hasClass('open')) {\n $dropdown.trigger('click');\n } else {\n var $prev = $focused_option.prevAll('.option:not(.disabled)').first();\n if ($prev.length > 0) {\n $dropdown.find('.focus').removeClass('focus');\n $prev.addClass('focus');\n }\n }\n return false;\n // Esc\n } else if (event.keyCode == 27) {\n if ($dropdown.hasClass('open')) {\n $dropdown.trigger('click');\n }\n // Tab\n } else if (event.keyCode == 9) {\n if ($dropdown.hasClass('open')) {\n return false;\n }\n }\n });\n\n // Detect CSS pointer-events support, for IE <= 10. From Modernizr.\n var style = document.createElement('a').style;\n style.cssText = 'pointer-events:auto';\n if (style.pointerEvents !== 'auto') {\n $('html').addClass('no-csspointerevents');\n }\n\n /*var label = $dropdown.querySelector('label');\r\n var container = $dropdown.closest('.gfield');\r\n container.prepend(label);*/\n\n return this;\n };\n})(jQuery);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODI3LmpzIiwibmFtZXMiOlsiJCIsImZuIiwibmljZVNlbGVjdCIsIm1ldGhvZCIsImVhY2giLCIkc2VsZWN0IiwiJGRyb3Bkb3duIiwibmV4dCIsIm9wZW4iLCJoYXNDbGFzcyIsImxlbmd0aCIsInJlbW92ZSIsImNyZWF0ZV9uaWNlX3NlbGVjdCIsInRyaWdnZXIiLCJjc3MiLCJkb2N1bWVudCIsIm9mZiIsImNvbnNvbGUiLCJsb2ciLCJoaWRlIiwiY29weUxhYmVsIiwiaWQiLCJhdHRyIiwiY29ycmVzcG9uZGluZ0xhYmVsIiwiY2xvbmUiLCJhZnRlciIsImFkZENsYXNzIiwiaHRtbCIsIiRvcHRpb25zIiwiZmluZCIsIiRzZWxlY3RlZCIsImRhdGEiLCJ0ZXh0IiwiaSIsIiRvcHRpb24iLCJkaXNwbGF5IiwidmFsIiwiYXBwZW5kIiwiaXMiLCJvbiIsImV2ZW50Iiwibm90IiwicmVtb3ZlQ2xhc3MiLCJ0b2dnbGVDbGFzcyIsImZvY3VzIiwidGFyZ2V0IiwiY2xvc2VzdCIsInByZXYiLCIkZm9jdXNlZF9vcHRpb24iLCJrZXlDb2RlIiwiJG5leHQiLCJuZXh0QWxsIiwiZmlyc3QiLCIkcHJldiIsInByZXZBbGwiLCJzdHlsZSIsImNyZWF0ZUVsZW1lbnQiLCJjc3NUZXh0IiwicG9pbnRlckV2ZW50cyIsImpRdWVyeSJdLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vanMvY29tcG9uZW50cy9zZWxlY3QuanM/MmFkOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiAgalF1ZXJ5IE5pY2UgU2VsZWN0IC0gdjEuMS4wXHJcbiAgICBodHRwczovL2dpdGh1Yi5jb20vaGVybmFuc2FydG9yaW8vanF1ZXJ5LW5pY2Utc2VsZWN0XHJcbiAgICBNYWRlIGJ5IEhlcm7DoW4gU2FydG9yaW8gICovXHJcbiBcclxuXHQoZnVuY3Rpb24oJCkge1xyXG5cclxuXHRcdCQuZm4ubmljZVNlbGVjdCA9IGZ1bmN0aW9uKG1ldGhvZCkge1xyXG5cdFx0ICBcclxuXHRcdCAgLy8gTWV0aG9kc1xyXG5cdFx0ICBpZiAodHlwZW9mIG1ldGhvZCA9PSAnc3RyaW5nJykgeyAgICAgIFxyXG5cdFx0XHRpZiAobWV0aG9kID09ICd1cGRhdGUnKSB7XHJcblx0XHRcdCAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHZhciAkc2VsZWN0ID0gJCh0aGlzKTtcclxuXHRcdFx0XHR2YXIgJGRyb3Bkb3duID0gJCh0aGlzKS5uZXh0KCcubmljZS1zZWxlY3QnKTtcclxuXHRcdFx0XHR2YXIgb3BlbiA9ICRkcm9wZG93bi5oYXNDbGFzcygnb3BlbicpO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdGlmICgkZHJvcGRvd24ubGVuZ3RoKSB7XHJcblx0XHRcdFx0ICAkZHJvcGRvd24ucmVtb3ZlKCk7XHJcblx0XHRcdFx0ICBjcmVhdGVfbmljZV9zZWxlY3QoJHNlbGVjdCk7XHJcblxyXG5cdFx0XHRcdCAgaWYgKG9wZW4pIHtcclxuXHRcdFx0XHRcdCRzZWxlY3QubmV4dCgpLnRyaWdnZXIoJ2NsaWNrJyk7XHJcblx0XHRcdFx0ICB9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQgIH0pO1xyXG5cdFx0XHR9IGVsc2UgaWYgKG1ldGhvZCA9PSAnZGVzdHJveScpIHtcclxuXHRcdFx0ICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0dmFyICRzZWxlY3QgPSAkKHRoaXMpO1xyXG5cdFx0XHRcdHZhciAkZHJvcGRvd24gPSAkKHRoaXMpLm5leHQoJy5uaWNlLXNlbGVjdCcpO1xyXG5cdFx0XHRcdFxyXG5cdFx0XHRcdGlmICgkZHJvcGRvd24ubGVuZ3RoKSB7XHJcblx0XHRcdFx0ICAkZHJvcGRvd24ucmVtb3ZlKCk7XHJcblx0XHRcdFx0ICAkc2VsZWN0LmNzcygnZGlzcGxheScsICcnKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdCAgfSk7XHJcblx0XHRcdCAgaWYgKCQoJy5uaWNlLXNlbGVjdCcpLmxlbmd0aCA9PSAwKSB7XHJcblx0XHRcdFx0JChkb2N1bWVudCkub2ZmKCcubmljZV9zZWxlY3QnKTtcclxuXHRcdFx0ICB9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdCAgY29uc29sZS5sb2coJ01ldGhvZCBcIicgKyBtZXRob2QgKyAnXCIgZG9lcyBub3QgZXhpc3QuJylcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHRcdCAgfVxyXG5cdFx0XHRcclxuXHRcdCAgLy8gSGlkZSBuYXRpdmUgc2VsZWN0XHJcblx0XHQgIHRoaXMuaGlkZSgpO1xyXG5cdFx0ICBcclxuXHRcdCAgLy8gQ3JlYXRlIGN1c3RvbSBtYXJrdXBcclxuXHRcdCAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG5cdFx0XHR2YXIgJHNlbGVjdCA9ICQodGhpcyk7XHJcblx0XHRcdFxyXG5cdFx0XHRpZiAoISRzZWxlY3QubmV4dCgpLmhhc0NsYXNzKCduaWNlLXNlbGVjdCcpKSB7XHJcblx0XHRcdCAgY3JlYXRlX25pY2Vfc2VsZWN0KCRzZWxlY3QpO1xyXG5cdFx0XHR9XHJcblx0XHQgIH0pO1xyXG5cclxuXHRcdCAgZnVuY3Rpb24gY29weUxhYmVsKCRzZWxlY3QpIHtcclxuXHRcdFx0Y29uc3QgaWQgPSAkc2VsZWN0LmF0dHIoXCJpZFwiKTtcclxuXHRcdFx0Y29uc3QgY29ycmVzcG9uZGluZ0xhYmVsID0gJCgnbGFiZWxbZm9yPVwiJytpZCsnXCJdJyk7XHJcblx0XHRcdGNvbnN0IGNsb25lID0gY29ycmVzcG9uZGluZ0xhYmVsLmNsb25lKCk7XHJcblx0XHRcdGNvcnJlc3BvbmRpbmdMYWJlbC5yZW1vdmUoKTtcclxuXHRcdFx0cmV0dXJuIGNsb25lO1xyXG5cdFx0ICB9XHJcblx0XHQgIFxyXG5cdFx0ICBmdW5jdGlvbiBjcmVhdGVfbmljZV9zZWxlY3QoJHNlbGVjdCkge1xyXG5cdFx0XHQvKnZhciBsYWJlbCA9IGNvcHlMYWJlbCgkc2VsZWN0KTsqL1xyXG5cdFx0XHQkc2VsZWN0LmFmdGVyKCQoJzxkaXY+PC9kaXY+JylcclxuXHRcdFx0ICAuYWRkQ2xhc3MoJ25pY2Utc2VsZWN0JylcclxuXHRcdFx0ICAuYWRkQ2xhc3MoJHNlbGVjdC5hdHRyKCdjbGFzcycpIHx8ICcnKVxyXG5cdFx0XHQgIC5hZGRDbGFzcygkc2VsZWN0LmF0dHIoJ2Rpc2FibGVkJykgPyAnZGlzYWJsZWQnIDogJycpXHJcblx0XHRcdCAgLmF0dHIoJ3RhYmluZGV4JywgJHNlbGVjdC5hdHRyKCdkaXNhYmxlZCcpID8gbnVsbCA6ICcwJylcclxuXHRcdFx0ICAuaHRtbCgnPHNwYW4gY2xhc3M9XCJjdXJyZW50XCI+PC9zcGFuPjx1bCBjbGFzcz1cImxpc3RcIj48L3VsPicvKiArIGxhYmVsWzBdLm91dGVySFRNTCovKVxyXG5cdFx0XHQpO1xyXG5cdFx0XHR2YXIgJGRyb3Bkb3duID0gJHNlbGVjdC5uZXh0KCk7XHJcblx0XHRcdHZhciAkb3B0aW9ucyA9ICRzZWxlY3QuZmluZCgnb3B0aW9uJyk7XHJcblx0XHRcdHZhciAkc2VsZWN0ZWQgPSAkc2VsZWN0LmZpbmQoJ29wdGlvbjpzZWxlY3RlZCcpO1xyXG5cdFx0XHRcclxuXHRcdFx0JGRyb3Bkb3duLmZpbmQoJy5jdXJyZW50JykuaHRtbCgkc2VsZWN0ZWQuZGF0YSgnZGlzcGxheScpIHx8ICRzZWxlY3RlZC50ZXh0KCkpO1xyXG5cdFx0XHRcclxuXHRcdFx0JG9wdGlvbnMuZWFjaChmdW5jdGlvbihpKSB7XHJcblx0XHRcdCAgdmFyICRvcHRpb24gPSAkKHRoaXMpO1xyXG5cdFx0XHQgIHZhciBkaXNwbGF5ID0gJG9wdGlvbi5kYXRhKCdkaXNwbGF5J
1yk7XHJcblx0ICBcclxuXHRcdFx0ICBpZiAoJG9wdGlvbi52YWwoKSAhPSBudWxsICYmICRvcHRpb24udmFsKCkgIT0gJycpIHtcclxuXHRcdFx0XHQgICRkcm9wZG93bi5maW5kKCd1bCcpLmFwcGVuZCgkKCc8bGk+PC9saT4nKVxyXG5cdFx0XHRcdFx0LmF0dHIoJ2RhdGEtdmFsdWUnLCAkb3B0aW9uLnZhbCgpKVxyXG5cdFx0XHRcdFx0LmF0dHIoJ2RhdGEtZGlzcGxheScsIChkaXNwbGF5IHx8IG51bGwpKVxyXG5cdFx0XHRcdFx0LmFkZENsYXNzKCdvcHRpb24nICtcclxuXHRcdFx0XHRcdCAgKCRvcHRpb24uaXMoJzpzZWxlY3RlZCcpID8gJyBzZWxlY3RlZCcgOiAnJykgK1xyXG5cdFx0XHRcdFx0ICAoJG9wdGlvbi5pcygnOmRpc2FibGVkJykgPyAnIGRpc2FibGVkJyA6ICcnKSlcclxuXHRcdFx0XHRcdC5odG1sKCRvcHRpb24udGV4dCgpKVxyXG5cdFx0XHRcdCAgKTtcclxuXHRcdFx0ICB9XHJcblx0XHRcdH0pO1xyXG5cdFx0ICB9XHJcblx0XHQgIFxyXG5cdFx0ICAvKiBFdmVudCBsaXN0ZW5lcnMgKi9cclxuXHRcdCAgXHJcblx0XHQgIC8vIFVuYmluZCBleGlzdGluZyBldmVudHMgaW4gY2FzZSB0aGF0IHRoZSBwbHVnaW4gaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYmVmb3JlXHJcblx0XHQgICQoZG9jdW1lbnQpLm9mZignLm5pY2Vfc2VsZWN0Jyk7XHJcblx0XHQgIFxyXG5cdFx0ICAvLyBPcGVuL2Nsb3NlXHJcblx0XHQgICQoZG9jdW1lbnQpLm9uKCdjbGljay5uaWNlX3NlbGVjdCcsICcubmljZS1zZWxlY3QnLCBmdW5jdGlvbihldmVudCkge1xyXG5cdFx0XHR2YXIgJGRyb3Bkb3duID0gJCh0aGlzKTtcclxuXHRcdFx0XHJcblx0XHRcdCQoJy5uaWNlLXNlbGVjdCcpLm5vdCgkZHJvcGRvd24pLnJlbW92ZUNsYXNzKCdvcGVuJyk7XHJcblx0XHRcdCRkcm9wZG93bi50b2dnbGVDbGFzcygnb3BlbicpO1xyXG5cdFx0XHRcclxuXHRcdFx0aWYgKCRkcm9wZG93bi5oYXNDbGFzcygnb3BlbicpKSB7XHJcblx0XHRcdCAgJGRyb3Bkb3duLmZpbmQoJy5vcHRpb24nKTsgIFxyXG5cdFx0XHQgICRkcm9wZG93bi5maW5kKCcuZm9jdXMnKS5yZW1vdmVDbGFzcygnZm9jdXMnKTtcclxuXHRcdFx0ICAkZHJvcGRvd24uZmluZCgnLnNlbGVjdGVkJykuYWRkQ2xhc3MoJ2ZvY3VzJyk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdCAgJGRyb3Bkb3duLmZvY3VzKCk7XHJcblx0XHRcdH1cclxuXHRcdCAgfSk7XHJcblx0XHQgIFxyXG5cdFx0ICAvLyBDbG9zZSB3aGVuIGNsaWNraW5nIG91dHNpZGVcclxuXHRcdCAgJChkb2N1bWVudCkub24oJ2NsaWNrLm5pY2Vfc2VsZWN0JywgZnVuY3Rpb24oZXZlbnQpIHtcclxuXHRcdFx0aWYgKCQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCcubmljZS1zZWxlY3QnKS5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0ICAkKCcubmljZS1zZWxlY3QnKS5yZW1vdmVDbGFzcygnb3BlbicpLmZpbmQoJy5vcHRpb24nKTsgIFxyXG5cdFx0XHR9XHJcblx0XHQgIH0pO1xyXG5cdFx0ICBcclxuXHRcdCAgLy8gT3B0aW9uIGNsaWNrXHJcblx0XHQgICQoZG9jdW1lbnQpLm9uKCdjbGljay5uaWNlX3NlbGVjdCcsICcubmljZS1zZWxlY3QgLm9wdGlvbjpub3QoLmRpc2FibGVkKScsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcblx0XHRcdHZhciAkb3B0aW9uID0gJCh0aGlzKTtcclxuXHRcdFx0dmFyICRkcm9wZG93biA9ICRvcHRpb24uY2xvc2VzdCgnLm5pY2Utc2VsZWN0Jyk7XHJcblx0XHRcdCRkcm9wZG93bi5hZGRDbGFzcygnaGFzLWlucHV0Jyk7XHJcblx0XHRcdFxyXG5cdFx0XHQkZHJvcGRvd24uZmluZCgnLnNlbGVjdGVkJykucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XHJcblx0XHRcdCRvcHRpb24uYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XHJcblx0XHRcdFxyXG5cdFx0XHR2YXIgdGV4dCA9ICRvcHRpb24uZGF0YSgnZGlzcGxheScpIHx8ICRvcHRpb24udGV4dCgpO1xyXG5cdFx0XHQkZHJvcGRvd24uZmluZCgnLmN1cnJlbnQnKS50ZXh0KHRleHQpO1xyXG5cdFx0XHRcclxuXHRcdFx0JGRyb3Bkb3duLnByZXYoJ3NlbGVjdCcpLnZhbCgkb3B0aW9uLmRhdGEoJ3ZhbHVlJykpLnRyaWdnZXIoJ2NoYW5nZScpO1xyXG5cdFx0ICB9KTtcclxuXHQgIFxyXG5cdFx0ICAvLyBLZXlib2FyZCBldmVudHNcclxuXHRcdCAgJChkb2N1bWVudCkub24oJ2tleWRvd24ubmljZV9zZWxlY3QnLCAnLm5pY2Utc2VsZWN0JywgZnVuY3Rpb24oZXZlbnQpIHsgICAgXHJcblx0XHRcdHZhciAkZHJvcGRvd24gPSAkKHRoaXMpO1xyXG5cdFx0XHR2YXIgJGZvY3VzZWRfb3B0aW9uID0gJCgkZHJvcGRvd24uZmluZCgnLmZvY3VzJykgfHwgJGRyb3Bkb3duLmZpbmQoJy5saXN0IC5vcHRpb24uc2VsZWN0ZWQnKSk7XHJcblx0XHRcdFxyXG5cdFx0XHQvLyBTcGFjZSBvciBFbnRlclxyXG5cdFx0XHRpZiAoZXZlbnQua2V5Q29kZSA9PSAzMiB8fCBldmVudC5rZXlDb2RlID09IDEzKSB7XHJcblx0XHRcdCAgaWYgKCRkcm9wZG93bi5oYXNDbGFzcygnb3BlbicpKSB7XHJcblx0XHRcdFx0JGZvY3VzZWRfb3B0aW9uLnRyaWdnZXIoJ2NsaWNrJyk7XHJcblx0XHRcdCAgfSBlbHNlIHtcclxuXHRcdFx0XHQkZHJvcGRvd24udHJpZ2dlcignY2xpY2snKTtcclxuXHRcdFx0ICB9XHJcblx0XHRcdCAgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHQvLyBEb3duXHJcblx0XHRcdH0gZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PSA0MCkge1xyXG5cdFx0XHQgIGlmICghJGRyb3Bkb3duLmhhc0NsYXNzKCdvcGVuJykpIHtcclxuXHRcdFx0XHQkZHJvcGRvd24udHJpZ2dlcignY2xpY2snKTtcclxuXHRcdFx0ICB9IGVsc2Uge1xyXG5cdFx0XHRcdHZhciAkbmV4dCA9ICRmb2N1c2VkX29wdGlvbi5uZXh0QWxsKCcub3B0aW9uOm5vdCguZGlzYWJsZWQpJykuZmlyc3QoKTtcclxuXHRcdFx0XHRpZiAoJG5leHQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdCAgJGRyb3Bkb3duLmZpbmQoJy5mb2N1cycpLnJlbW92ZUNsYXNzKCdmb2N1cycpO1xyXG5cdFx0XHRcdCAgJG5leHQuYWRkQ2xhc3MoJ2ZvY3VzJyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQgIH1cclxuXHRcdFx0ICByZXR1cm4gZmFsc2U7XHJcblx0XHRcdC8vIFVwXHJcblx0XHRcdH0gZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PSAzOCkge1xyXG5cdFx0XHQgIGlmICghJGRyb3Bkb3duLmhhc0NsYXNzKCdvcGVuJykpIHtcclxuXHRcdFx0XHQkZHJvcGRvd24udHJpZ2dlcignY2xpY2snKTtcclxuXHRcdFx0ICB9IGVsc2Uge1xyXG5cdFx0XHRcdHZhciAkcHJldiA9ICRmb2N1c2VkX29wdGlvbi5wcmV2QWxsKCcub3B0aW9uOm5vdCguZGlzYWJsZWQpJykuZmlyc3QoKTtcclxuXHRcdFx0XHRpZiAoJHByZXYubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdCAgJGRyb3Bkb3duLmZpbmQoJy5mb2N1cycpLnJlbW92ZUNsYXNzKCdmb2N1cycpO1xyXG5cdFx0XHRcdCAgJHByZXYuYWRkQ2xhc3MoJ2ZvY3VzJyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQgIH1cclxuXHRcdFx0ICByZXR1cm4gZmFsc2U7XHJcblx0XHRcdC8vIEVzY1xyXG5cdFx0XHR9IGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT0gMjcpIHtcclxuXHRcdFx0ICBpZiAoJGRyb3Bkb3duLmhhc0NsYXNzKCdvcGVuJykpIHtcclxuXHRcdFx0XHQkZHJvcGRvd24udHJpZ2dlcignY2xpY2snKTtcclxuXHRcdFx0ICB9XHJcblx0XHRcdC8vIFRhYlxyXG5cdFx0XHR9IGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT0gOSkge1xyXG5cdFx0XHQgIGlmICgkZHJvcGRvd24uaGFzQ2xhc3MoJ29wZW4nKSkge1xyXG5cdFx0XHRcdHJldHVybi
1BmYWxzZTtcclxuXHRcdFx0ICB9XHJcblx0XHRcdH1cclxuXHRcdCAgfSk7XHJcblx0ICBcclxuXHRcdCAgLy8gRGV0ZWN0IENTUyBwb2ludGVyLWV2ZW50cyBzdXBwb3J0LCBmb3IgSUUgPD0gMTAuIEZyb20gTW9kZXJuaXpyLlxyXG5cdFx0ICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJykuc3R5bGU7XHJcblx0XHQgIHN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6YXV0byc7XHJcblx0XHQgIGlmIChzdHlsZS5wb2ludGVyRXZlbnRzICE9PSAnYXV0bycpIHtcclxuXHRcdFx0JCgnaHRtbCcpLmFkZENsYXNzKCduby1jc3Nwb2ludGVyZXZlbnRzJyk7XHJcblx0XHQgIH1cclxuXHJcblx0XHRcdC8qdmFyIGxhYmVsID0gJGRyb3Bkb3duLnF1ZXJ5U2VsZWN0b3IoJ2xhYmVsJyk7XHJcblx0XHRcdHZhciBjb250YWluZXIgPSAkZHJvcGRvd24uY2xvc2VzdCgnLmdmaWVsZCcpO1xyXG5cdFx0XHRjb250YWluZXIucHJlcGVuZChsYWJlbCk7Ki9cclxuXHJcblxyXG5cdFx0XHRyZXR1cm4gdGhpcztcclxuXHQgIFxyXG5cdFx0fTtcclxuXHQgIFxyXG5cdCAgfShqUXVlcnkpKTsiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTs7QUFFRSxXQUFTQSxDQUFDLEVBQUU7RUFFWkEsQ0FBQyxDQUFDQyxFQUFFLENBQUNDLFVBQVUsR0FBRyxVQUFTQyxNQUFNLEVBQUU7SUFFakM7SUFDQSxJQUFJLE9BQU9BLE1BQU0sSUFBSSxRQUFRLEVBQUU7TUFDaEMsSUFBSUEsTUFBTSxJQUFJLFFBQVEsRUFBRTtRQUN0QixJQUFJLENBQUNDLElBQUksQ0FBQyxZQUFXO1VBQ3RCLElBQUlDLE9BQU8sR0FBR0wsQ0FBQyxDQUFDLElBQUksQ0FBQztVQUNyQixJQUFJTSxTQUFTLEdBQUdOLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ08sSUFBSSxDQUFDLGNBQWMsQ0FBQztVQUM1Q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\n//# sourceURL=webpack-internal:///827\n\n}")}},__webpack_module_cache__={};function __webpack_require__(c){var l=__webpack_module_cache__[c];if(void 0!==l)return l.exports;var n=__webpack_module_cache__[c]={exports:{}};return __webpack_modules__[c](n,n.exports,__webpack_require__),n.exports}var __webpack_exports__=__webpack_require__(312)})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.