{"version":3,"sources":["jzgj.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","__webpack_amd_options__","quoteTable","Url","$","ajax","jsonp","url","dataType","success","data","rank","length","_rank","Html","arr","push","split","Number","html","colorTd","contrast","each","val","this","text","obj","num","replace","zxj","parents","find","addClass","removeClass","obj1","obj2","num_color","get_cg","a","b","lg","div_lic","innerWidth","liwd","dv","e","click","eq","parent","index","siblings","children","hasClass","stop","animate","left","position","il","marginLeft","show_list","nubs","get_nub","hide","show","PlayVideo","_objId","_width","_height","_video","jQuery","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","Swiper","document","querySelectorAll","toString","apply","F","I","freeMode","slidesPerView","C","slides","centeredSlides","f","h","addEventListener","eventTarget","wrapper","container","browser","ie10","ie11","touchEvents","touchStart","touchMove","q","touchEnd","r","support","touch","simulateTouch","autoResize","window","resizeFix","g","_wheelEvent","mousewheelControl","onmousewheel","WheelEvent","j","keyboardControl","updateOnImagesReady","imagesToLoad","Image","onload","imagesLoaded","reInit","onImagesReady","fireCallback","src","getAttribute","preventLinks","releaseFormElements","onSlideClick","k","onSlideTouch","removeEventListener","keyCode","charCode","shiftKey","altKey","ctrlKey","metaKey","getOffset","windowScroll","top","windowWidth","windowHeight","width","height","M","preventDefault","returnValue","swipeNext","swipePrev","detail","mousewheelControlForceToAxis","Math","abs","wheelDeltaX","wheelDeltaY","wheelDelta","deltaX","deltaY","getWrapperTranslate","setWrapperTransition","setWrapperTranslate","updateActiveSlide","Date","getTime","U","autoplay","stopAutoplay","allowSlideClick","currentTarget","clickedSlide","srcElement","className","indexOf","slideClass","parentNode","clickedSlideIndex","clickedSlideLoopIndex","loopedSlides","allowLinks","preventLinksPropagation","stopPropagation","isTouched","onlyExternal","target","activeElement","blur","noSwiping","Z","type","which","targetTouches","callPlugins","isAndroid","tagName","toLowerCase","pageX","clientX","pageY","clientY","touches","startX","currentX","startY","currentY","start","current","positions","times","H","moveStartThreshold","W","onTouchStart","swipeToNext","swipeToPrev","assignedToSwiper","isMoved","loop","fixLoop","onTouchMoveStart","touchRatio","onResistanceBefore","onResistanceAfter","resistance","freeModeFluid","followFinger","watchActiveIndex","grabCursor","style","cursor","X","Y","velocity","onTouchMove","swipeReset","end","diff","setTimeout","onTouchEnd","momentumRatio","momentumBounceRatio","momentumBounce","transitions","wrapperTransitionEnd","onMomentumBounce","G","shortSwipes","getWidth","roundLengths","getHeight","E","longSwipesRatio","noSwipingClass","parentElement","wrapperClass","t","createElement","innerHTML","firstChild","outerHTML","u","ceil","_DOMAnimating","onSlideChangeEnd","runCallbacks","speed","DOMAnimation","onSlideNext","onSlidePrev","onSlideReset","v","onSlideChangeStart","queueStartCallbacks","_queueStartCallbacks","queueEndCallbacks","_queueEndCallbacks","w","paginationButtons","y","x","swipeTo","z","_","autoplayStopOnLast","clearTimeout","body","__defineGetter__","HTMLElement","B","XMLSerializer","serializeToString","getComputedStyle","el","getPropertyValue","test","arguments","toUpperCase","currentStyle","Array","nodeType","id","activeIndex","centerIndex","activeLoaderIndex","activeLoopIndex","previousIndex","snapGrid","slidesGrid","wrapperLeft","wrapperRight","wrapperTop","wrapperBottom","navigator","userAgent","D","J","mode","slidesPerGroup","slidesPerViewFit","createPagination","pagination","paginationElement","paginationClickable","paginationAsRange","scrollContainer","initialSlide","useCSS3Transforms","autoplayDisableOnInteraction","loopAdditionalSlides","calculateHeight","cssWidthAndHeight","visibilityFullFit","offsetPxBefore","offsetPxAfter","offsetSlidesBefore","offsetSlidesAfter","resizeReInit","loader","slidesHTMLType","surroundGroups","logic","loadAllSlides","slideElement","slideActiveClass","slideVisibleClass","slideDuplicateClass","paginationElementClass","paginationActiveClass","paginationVisibleClass","K","L","params","N","O","childNodes","P","Q","_extendSwiperSlide","append","insertAfter","appendChild","prepend","insertBefore","removeLoopedSlides","calcSlides","createLoop","clone","cloneNode","remove","removeChild","isActive","swiperSlideDataStorage","getData","setData","setAttribute","displaySlides","createSlide","appendSlide","prependSlide","insertSlideAfter","removeSlide","removeLastSlide","removeAllSlides","getSlide","getLastSlide","getFirstSlide","activeSlide","addCallback","removeCallbacks","R","S","plugins","T","classList","add","initialized","init","slidesOffset","paddingLeft","paddingRight","paddingTop","paddingBottom","max","floor","parseFloat","onInit","onFirstInit","startAutoplay","ab","clearInterval","destroy","disableKeyboardControl","enableKeyboardControl","disableMousewheelControl","enableMousewheelControl","V","round","parseInt","calcVisibleSlides","visibleSlides","RegExp","updatePagination","paginationContainer","onAutoplayStart","setInterval","onAutoplayStop","loopCreated","loadSlides","reloadSlides","min","onSwiperCreated","transforms","WebKitCSSMatrix","webkitTransform","MozTransform","OTransform","MsTransform","msTransform","transform","m41","m42","transforms3d","onSetWrapperTransform","webkitTransitionDuration","MsTransitionDuration","msTransitionDuration","MozTransitionDuration","OTransitionDuration","transitionDuration","duration","onSetWrapperTransition","isNaN","offsetWidth","offsetHeight","getBoundingClientRect","clientTop","clientLeft","pageYOffset","scrollTop","pageXOffset","scrollLeft","documentElement","clientWidth","innerHeight","clientHeight","attachEvent","detachEvent","setTransform","setTranslate","setTransition","Modernizr","DocumentTouch","csstransforms3d","csstransforms","csstransitions","ie8","appName","exec","$1","msPointerEnabled","pointerEnabled","Zepto","fn","swiper","undefined","its","mgs","extend","option","animationStart","paginationClass","currentClass","attr","match","crossfade","css","zIndex","fadeIn","fadeSpeed","fadeEasing","autoHeight","outerHeight","autoHeightSpeed","display","animationComplete","fadeOut","msie","removeAttribute","slideSpeed","slideEasing","pause","play","wrapAll","size","outerWidth","effect","slidesLoaded","next","prev","randomize","overflow","preload","background","preloadImage","load","bigTarget","hoverPause","bind","generateNextPrev","after","generatePagination","prependPagination","random","sort","appendTo","ready","showPics","nowLeft","sWidth","opacity","empty","lgs","swiperTj","autoWidth","on","$this","swiperFocus","spaceBetween","title","class_name","hover","marginTop","picTimer","len","btn","mouseover","trigger","mouseout","iTimer","titWrap","tit04","bottom"],"mappings":"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","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 2);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\n/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */\r\nmodule.exports = __webpack_amd_options__;\r\n\n/* WEBPACK VAR INJECTION */}.call(exports, {}))\n\n/***/ }),\n/* 1 */,\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*\r\n * Swiper 2.7.0\r\n * Mobile touch slider and framework with hardware accelerated transitions\r\n *\r\n * http://www.idangero.us/sliders/swiper/\r\n *\r\n * Copyright 2010-2014, Vladimir Kharlampidi\r\n * The iDangero.us\r\n * http://www.idangero.us/\r\n *\r\n * Licensed under GPL & MIT\r\n *\r\n * Released on: August 30, 2014\r\n */\r\nvar Swiper = function(a, b) {\r\n \"use strict\";\r\n\r\n function c(a, b) { return document.querySelectorAll ? (b || document).querySelectorAll(a) : jQuery(a, b) }\r\n\r\n function d(a) { return \"[object Array]\" === Object.prototype.toString.apply(a) ? !0 : !1 }\r\n\r\n function e() { var a = F - I; return b.freeMode && (a = F - I), b.slidesPerView > C.slides.length && !b.centeredSlides && (a = 0), 0 > a && (a = 0), a }\r\n\r\n function f() {\r\n function a(a) {\r\n var c = new Image;\r\n c.onload = function() { \"undefined\" != typeof C && null !== C && (void 0 !== C.imagesLoaded && C.imagesLoaded++, C.imagesLoaded === C.imagesToLoad.length && (C.reInit(), b.onImagesReady && C.fireCallback(b.onImagesReady, C))) }, c.src = a\r\n }\r\n var d = C.h.addEventListener,\r\n e = \"wrapper\" === b.eventTarget ? C.wrapper : C.container;\r\n if (C.browser.ie10 || C.browser.ie11 ? (d(e, C.touchEvents.touchStart, p), d(document, C.touchEvents.touchMove, q), d(document, C.touchEvents.touchEnd, r)) : (C.support.touch && (d(e, \"touchstart\", p), d(e, \"touchmove\", q), d(e, \"touchend\", r)), b.simulateTouch && (d(e, \"mousedown\", p), d(document, \"mousemove\", q), d(document, \"mouseup\", r))), b.autoResize && d(window, \"resize\", C.resizeFix), g(), C._wheelEvent = !1, b.mousewheelControl) {\r\n if (void 0 !== document.onmousewheel && (C._wheelEvent = \"mousewheel\"), !C._wheelEvent) try { new WheelEvent(\"wheel\"), C._wheelEvent = \"wheel\" } catch (f) {}\r\n C._wheelEvent || (C._wheelEvent = \"DOMMouseScroll\"), C._wheelEvent && d(C.container, C._wheelEvent, j)\r\n }\r\n if (b.keyboardControl && d(document, \"keydown\", i), b.updateOnImagesReady) { C.imagesToLoad = c(\"img\", C.container); for (var h = 0; h < C.imagesToLoad.length; h++) a(C.imagesToLoad[h].getAttribute(\"src\")) }\r\n }\r\n\r\n function g() {\r\n var a, d = C.h.addEventListener;\r\n if (b.preventLinks) { var e = c(\"a\", C.container); for (a = 0; a < e.length; a++) d(e[a], \"click\", n) }\r\n if (b.releaseFormElements) { var f = c(\"input, textarea, select\", C.container); for (a = 0; a < f.length; a++) d(f[a], C.touchEvents.touchStart, o, !0) }\r\n if (b.onSlideClick)\r\n for (a = 0; a < C.slides.length; a++) d(C.slides[a], \"click\", k);\r\n if (b.onSlideTouch)\r\n for (a = 0; a < C.slides.length; a++) d(C.slides[a], C.touchEvents.touchStart, l)\r\n }\r\n\r\n function h() {\r\n var a, d = C.h.removeEventListener;\r\n if (b.onSlideClick)\r\n for (a = 0; a < C.slides.length; a++) d(C.slides[a], \"click\", k);\r\n if (b.onSlideTouch)\r\n for (a = 0; a < C.slides.length; a++) d(C.slides[a], C.touchEvents.touchStart, l);\r\n if (b.releaseFormElements) { var e = c(\"input, textarea, select\", C.container); for (a = 0; a < e.length; a++) d(e[a], C.touchEvents.touchStart, o, !0) }\r\n if (b.preventLinks) { var f = c(\"a\", C.container); for (a = 0; a < f.length; a++) d(f[a], \"click\", n) }\r\n }\r\n\r\n function i(a) {\r\n var b = a.keyCode || a.charCode;\r\n if (!(a.shiftKey || a.altKey || a.ctrlKey || a.metaKey)) {\r\n if (37 === b || 39 === b || 38 === b || 40 === b) {\r\n for (var c = !1, d = C.h.getOffset(C.container), e = C.h.windowScroll().left, f = C.h.windowScroll().top, g = C.h.windowWidth(), h = C.h.windowHeight(), i = [\r\n [d.left, d.top],\r\n [d.left + C.width, d.top],\r\n [d.left, d.top + C.height],\r\n [d.left + C.width, d.top + C.height]\r\n ], j = 0; j < i.length; j++) {\r\n var k = i[j];\r\n k[0] >= e && k[0] <= e + g && k[1] >= f && k[1] <= f + h && (c = !0)\r\n }\r\n if (!c) return\r\n }\r\n M ? ((37 === b || 39 === b) && (a.preventDefault ? a.preventDefault() : a.returnValue = !1), 39 === b && C.swipeNext(), 37 === b && C.swipePrev()) : ((38 === b || 40 === b) && (a.preventDefault ? a.preventDefault() : a.returnValue = !1), 40 === b && C.swipeNext(), 38 === b && C.swipePrev())\r\n }\r\n }\r\n\r\n function j(a) {\r\n var c = C._wheelEvent,\r\n d = 0;\r\n if (a.detail) d = -a.detail;\r\n else if (\"mousewheel\" === c)\r\n if (b.mousewheelControlForceToAxis)\r\n if (M) {\r\n if (!(Math.abs(a.wheelDeltaX) > Math.abs(a.wheelDeltaY))) return;\r\n d = a.wheelDeltaX\r\n } else {\r\n if (!(Math.abs(a.wheelDeltaY) > Math.abs(a.wheelDeltaX))) return;\r\n d = a.wheelDeltaY\r\n }\r\n else d = a.wheelDelta;\r\n else if (\"DOMMouseScroll\" === c) d = -a.detail;\r\n else if (\"wheel\" === c)\r\n if (b.mousewheelControlForceToAxis)\r\n if (M) {\r\n if (!(Math.abs(a.deltaX) > Math.abs(a.deltaY))) return;\r\n d = -a.deltaX\r\n } else {\r\n if (!(Math.abs(a.deltaY) > Math.abs(a.deltaX))) return;\r\n d = -a.deltaY\r\n }\r\n else d = Math.abs(a.deltaX) > Math.abs(a.deltaY) ? -a.deltaX : -a.deltaY;\r\n if (b.freeMode) { var f = C.getWrapperTranslate() + d; if (f > 0 && (f = 0), f < -e() && (f = -e()), C.setWrapperTransition(0), C.setWrapperTranslate(f), C.updateActiveSlide(f), 0 === f || f === -e()) return } else(new Date).getTime() - U > 60 && (0 > d ? C.swipeNext() : C.swipePrev()), U = (new Date).getTime();\r\n return b.autoplay && C.stopAutoplay(!0), a.preventDefault ? a.preventDefault() : a.returnValue = !1, !1\r\n }\r\n\r\n function k(a) { C.allowSlideClick && (m(a), C.fireCallback(b.onSlideClick, C, a)) }\r\n\r\n function l(a) { m(a), C.fireCallback(b.onSlideTouch, C, a) }\r\n\r\n function m(a) {\r\n if (a.currentTarget) C.clickedSlide = a.currentTarget;\r\n else {\r\n var c = a.srcElement;\r\n do {\r\n if (c.className.indexOf(b.slideClass) > -1) break;\r\n c = c.parentNode\r\n } while (c);\r\n C.clickedSlide = c\r\n }\r\n C.clickedSlideIndex = C.slides.indexOf(C.clickedSlide), C.clickedSlideLoopIndex = C.clickedSlideIndex - (C.loopedSlides || 0)\r\n }\r\n\r\n function n(a) { return C.allowLinks ? void 0 : (a.preventDefault ? a.preventDefault() : a.returnValue = !1, b.preventLinksPropagation && \"stopPropagation\" in a && a.stopPropagation(), !1) }\r\n\r\n function o(a) { return a.stopPropagation ? a.stopPropagation() : a.returnValue = !1, !1 }\r\n\r\n function p(a) {\r\n if (b.preventLinks && (C.allowLinks = !0), C.isTouched || b.onlyExternal) return !1;\r\n var c = a.target || a.srcElement;\r\n document.activeElement && document.activeElement !== c && document.activeElement.blur();\r\n var d = \"input select textarea\".split(\" \");\r\n if (b.noSwiping && c && s(c)) return !1;\r\n if ($ = !1, C.isTouched = !0, Z = \"touchstart\" === a.type, !Z && \"which\" in a && 3 === a.which) return !1;\r\n if (!Z || 1 === a.targetTouches.length) {\r\n C.callPlugins(\"onTouchStartBegin\"), !Z && !C.isAndroid && d.indexOf(c.tagName.toLowerCase()) < 0 && (a.preventDefault ? a.preventDefault() : a.returnValue = !1);\r\n var e = Z ? a.targetTouches[0].pageX : a.pageX || a.clientX,\r\n f = Z ? a.targetTouches[0].pageY : a.pageY || a.clientY;\r\n C.touches.startX = C.touches.currentX = e, C.touches.startY = C.touches.currentY = f, C.touches.start = C.touches.current = M ? e : f, C.setWrapperTransition(0), C.positions.start = C.positions.current = C.getWrapperTranslate(), C.setWrapperTranslate(C.positions.start), C.times.start = (new Date).getTime(), H = void 0, b.moveStartThreshold > 0 && (W = !1), b.onTouchStart && C.fireCallback(b.onTouchStart, C, a), C.callPlugins(\"onTouchStartEnd\")\r\n }\r\n }\r\n\r\n function q(a) {\r\n if (C.isTouched && !b.onlyExternal && (!Z || \"mousemove\" !== a.type)) {\r\n var c = Z ? a.targetTouches[0].pageX : a.pageX || a.clientX,\r\n d = Z ? a.targetTouches[0].pageY : a.pageY || a.clientY;\r\n if (\"undefined\" == typeof H && M && (H = !!(H || Math.abs(d - C.touches.startY) > Math.abs(c - C.touches.startX))), \"undefined\" != typeof H || M || (H = !!(H || Math.abs(d - C.touches.startY) < Math.abs(c - C.touches.startX))), H) return void(C.isTouched = !1);\r\n if (M) { if (!b.swipeToNext && c < C.touches.startX || !b.swipeToPrev && c > C.touches.startX) return } else if (!b.swipeToNext && d < C.touches.startY || !b.swipeToPrev && d > C.touches.startY) return;\r\n if (a.assignedToSwiper) return void(C.isTouched = !1);\r\n if (a.assignedToSwiper = !0, b.preventLinks && (C.allowLinks = !1), b.onSlideClick && (C.allowSlideClick = !1), b.autoplay && C.stopAutoplay(!0), !Z || 1 === a.touches.length) {\r\n if (C.isMoved || (C.callPlugins(\"onTouchMoveStart\"), b.loop && (C.fixLoop(), C.positions.start = C.getWrapperTranslate()), b.onTouchMoveStart && C.fireCallback(b.onTouchMoveStart, C)), C.isMoved = !0, a.preventDefault ? a.preventDefault() : a.returnValue = !1, C.touches.current = M ? c : d, C.positions.current = (C.touches.current - C.touches.start) * b.touchRatio + C.positions.start, C.positions.current > 0 && b.onResistanceBefore && C.fireCallback(b.onResistanceBefore, C, C.positions.current), C.positions.current < -e() && b.onResistanceAfter && C.fireCallback(b.onResistanceAfter, C, Math.abs(C.positions.current + e())), b.resistance && \"100%\" !== b.resistance) {\r\n var f;\r\n if (C.positions.current > 0 && (f = 1 - C.positions.current / I / 2, C.positions.current = .5 > f ? I / 2 : C.positions.current * f), C.positions.current < -e()) {\r\n var g = (C.touches.current - C.touches.start) * b.touchRatio + (e() + C.positions.start);\r\n f = (I + g) / I;\r\n var h = C.positions.current - g * (1 - f) / 2,\r\n i = -e() - I / 2;\r\n C.positions.current = i > h || 0 >= f ? i : h\r\n }\r\n }\r\n if (b.resistance && \"100%\" === b.resistance && (C.positions.current > 0 && (!b.freeMode || b.freeModeFluid) && (C.positions.current = 0), C.positions.current < -e() && (!b.freeMode || b.freeModeFluid) && (C.positions.current = -e())), !b.followFinger) return;\r\n if (b.moveStartThreshold)\r\n if (Math.abs(C.touches.current - C.touches.start) > b.moveStartThreshold || W) {\r\n if (!W) return W = !0, void(C.touches.start = C.touches.current);\r\n C.setWrapperTranslate(C.positions.current)\r\n } else C.positions.current = C.positions.start;\r\n else C.setWrapperTranslate(C.positions.current);\r\n return (b.freeMode || b.watchActiveIndex) && C.updateActiveSlide(C.positions.current), b.grabCursor && (C.container.style.cursor = \"move\", C.container.style.cursor = \"grabbing\", C.container.style.cursor = \"-moz-grabbin\", C.container.style.cursor = \"-webkit-grabbing\"), X || (X = C.touches.current), Y || (Y = (new Date).getTime()), C.velocity = (C.touches.current - X) / ((new Date).getTime() - Y) / 2, Math.abs(C.touches.current - X) < 2 && (C.velocity = 0), X = C.touches.current, Y = (new Date).getTime(), C.callPlugins(\"onTouchMoveEnd\"), b.onTouchMove && C.fireCallback(b.onTouchMove, C, a), !1\r\n }\r\n }\r\n }\r\n\r\n function r(a) {\r\n if (H && C.swipeReset(), !b.onlyExternal && C.isTouched) {\r\n C.isTouched = !1, b.grabCursor && (C.container.style.cursor = \"move\", C.container.style.cursor = \"grab\", C.container.style.cursor = \"-moz-grab\", C.container.style.cursor = \"-webkit-grab\"), C.positions.current || 0 === C.positions.current || (C.positions.current = C.positions.start), b.followFinger && C.setWrapperTranslate(C.positions.current), C.times.end = (new Date).getTime(), C.touches.diff = C.touches.current - C.touches.start, C.touches.abs = Math.abs(C.touches.diff), C.positions.diff = C.positions.current - C.positions.start, C.positions.abs = Math.abs(C.positions.diff);\r\n var c = C.positions.diff,\r\n d = C.positions.abs,\r\n f = C.times.end - C.times.start;\r\n 5 > d && 300 > f && C.allowLinks === !1 && (b.freeMode || 0 === d || C.swipeReset(), b.preventLinks && (C.allowLinks = !0), b.onSlideClick && (C.allowSlideClick = !0)), setTimeout(function() { \"undefined\" != typeof C && null !== C && (b.preventLinks && (C.allowLinks = !0), b.onSlideClick && (C.allowSlideClick = !0)) }, 100);\r\n var g = e();\r\n if (!C.isMoved && b.freeMode) return C.isMoved = !1, b.onTouchEnd && C.fireCallback(b.onTouchEnd, C, a), void C.callPlugins(\"onTouchEnd\");\r\n if (!C.isMoved || C.positions.current > 0 || C.positions.current < -g) return C.swipeReset(), b.onTouchEnd && C.fireCallback(b.onTouchEnd, C, a), void C.callPlugins(\"onTouchEnd\");\r\n if (C.isMoved = !1, b.freeMode) {\r\n if (b.freeModeFluid) {\r\n var h, i = 1e3 * b.momentumRatio,\r\n j = C.velocity * i,\r\n k = C.positions.current + j,\r\n l = !1,\r\n m = 20 * Math.abs(C.velocity) * b.momentumBounceRatio; - g > k && (b.momentumBounce && C.support.transitions ? (-m > k + g && (k = -g - m), h = -g, l = !0, $ = !0) : k = -g), k > 0 && (b.momentumBounce && C.support.transitions ? (k > m && (k = m), h = 0, l = !0, $ = !0) : k = 0), 0 !== C.velocity && (i = Math.abs((k - C.positions.current) / C.velocity)), C.setWrapperTranslate(k), C.setWrapperTransition(i), b.momentumBounce && l && C.wrapperTransitionEnd(function() { $ && (b.onMomentumBounce && C.fireCallback(b.onMomentumBounce, C), C.callPlugins(\"onMomentumBounce\"), C.setWrapperTranslate(h), C.setWrapperTransition(300)) }), C.updateActiveSlide(k)\r\n }\r\n return (!b.freeModeFluid || f >= 300) && C.updateActiveSlide(C.positions.current), b.onTouchEnd && C.fireCallback(b.onTouchEnd, C, a), void C.callPlugins(\"onTouchEnd\")\r\n }\r\n G = 0 > c ? \"toNext\" : \"toPrev\", \"toNext\" === G && 300 >= f && (30 > d || !b.shortSwipes ? C.swipeReset() : C.swipeNext(!0)), \"toPrev\" === G && 300 >= f && (30 > d || !b.shortSwipes ? C.swipeReset() : C.swipePrev(!0));\r\n var n = 0;\r\n if (\"auto\" === b.slidesPerView) {\r\n for (var o, p = Math.abs(C.getWrapperTranslate()), q = 0, r = 0; r < C.slides.length; r++)\r\n if (o = M ? C.slides[r].getWidth(!0, b.roundLengths) : C.slides[r].getHeight(!0, b.roundLengths), q += o, q > p) { n = o; break }\r\n n > I && (n = I)\r\n } else n = E * b.slidesPerView;\r\n \"toNext\" === G && f > 300 && (d >= n * b.longSwipesRatio ? C.swipeNext(!0) : C.swipeReset()), \"toPrev\" === G && f > 300 && (d >= n * b.longSwipesRatio ? C.swipePrev(!0) : C.swipeReset()), b.onTouchEnd && C.fireCallback(b.onTouchEnd, C, a), C.callPlugins(\"onTouchEnd\")\r\n }\r\n }\r\n\r\n function s(a) {\r\n var c = !1;\r\n do a.className.indexOf(b.noSwipingClass) > -1 && (c = !0), a = a.parentElement; while (!c && a.parentElement && -1 === a.className.indexOf(b.wrapperClass));\r\n return !c && a.className.indexOf(b.wrapperClass) > -1 && a.className.indexOf(b.noSwipingClass) > -1 && (c = !0), c\r\n }\r\n\r\n function t(a, b) { var c, d = document.createElement(\"div\"); return d.innerHTML = b, c = d.firstChild, c.className += \" \" + a, c.outerHTML }\r\n\r\n function u(a, c, d) {\r\n function e() {\r\n var f = +new Date,\r\n l = f - g;\r\n h += i * l / (1e3 / 60), k = \"toNext\" === j ? h > a : a > h, k ? (C.setWrapperTranslate(Math.ceil(h)), C._DOMAnimating = !0, window.setTimeout(function() { e() }, 1e3 / 60)) : (b.onSlideChangeEnd && (\"to\" === c ? d.runCallbacks === !0 && C.fireCallback(b.onSlideChangeEnd, C, j) : C.fireCallback(b.onSlideChangeEnd, C, j)), C.setWrapperTranslate(a), C._DOMAnimating = !1)\r\n }\r\n var f = \"to\" === c && d.speed >= 0 ? d.speed : b.speed,\r\n g = +new Date;\r\n if (C.support.transitions || !b.DOMAnimation) C.setWrapperTranslate(a), C.setWrapperTransition(f);\r\n else {\r\n var h = C.getWrapperTranslate(),\r\n i = Math.ceil((a - h) / f * (1e3 / 60)),\r\n j = h > a ? \"toNext\" : \"toPrev\",\r\n k = \"toNext\" === j ? h > a : a > h;\r\n if (C._DOMAnimating) return;\r\n e()\r\n }\r\n C.updateActiveSlide(a), b.onSlideNext && \"next\" === c && C.fireCallback(b.onSlideNext, C, a), b.onSlidePrev && \"prev\" === c && C.fireCallback(b.onSlidePrev, C, a), b.onSlideReset && \"reset\" === c && C.fireCallback(b.onSlideReset, C, a), (\"next\" === c || \"prev\" === c || \"to\" === c && d.runCallbacks === !0) && v(c)\r\n }\r\n\r\n function v(a) {\r\n if (C.callPlugins(\"onSlideChangeStart\"), b.onSlideChangeStart)\r\n if (b.queueStartCallbacks && C.support.transitions) {\r\n if (C._queueStartCallbacks) return;\r\n C._queueStartCallbacks = !0, C.fireCallback(b.onSlideChangeStart, C, a), C.wrapperTransitionEnd(function() { C._queueStartCallbacks = !1 })\r\n } else C.fireCallback(b.onSlideChangeStart, C, a);\r\n if (b.onSlideChangeEnd)\r\n if (C.support.transitions)\r\n if (b.queueEndCallbacks) {\r\n if (C._queueEndCallbacks) return;\r\n C._queueEndCallbacks = !0, C.wrapperTransitionEnd(function(c) { C.fireCallback(b.onSlideChangeEnd, c, a) })\r\n } else C.wrapperTransitionEnd(function(c) { C.fireCallback(b.onSlideChangeEnd, c, a) });\r\n else b.DOMAnimation || setTimeout(function() { C.fireCallback(b.onSlideChangeEnd, C, a) }, 10)\r\n }\r\n\r\n function w() {\r\n var a = C.paginationButtons;\r\n if (a)\r\n for (var b = 0; b < a.length; b++) C.h.removeEventListener(a[b], \"click\", y)\r\n }\r\n\r\n function x() {\r\n var a = C.paginationButtons;\r\n if (a)\r\n for (var b = 0; b < a.length; b++) C.h.addEventListener(a[b], \"click\", y)\r\n }\r\n\r\n function y(a) {\r\n for (var c, d = a.target || a.srcElement, e = C.paginationButtons, f = 0; f < e.length; f++) d === e[f] && (c = f);\r\n b.autoplay && C.stopAutoplay(!0), C.swipeTo(c)\r\n }\r\n\r\n function z() { _ = setTimeout(function() { b.loop ? (C.fixLoop(), C.swipeNext(!0)) : C.swipeNext(!0) || (b.autoplayStopOnLast ? (clearTimeout(_), _ = void 0) : C.swipeTo(0)), C.wrapperTransitionEnd(function() { \"undefined\" != typeof _ && z() }) }, b.autoplay) }\r\n\r\n function A() { C.calcSlides(), b.loader.slides.length > 0 && 0 === C.slides.length && C.loadSlides(), b.loop && C.createLoop(), C.init(), f(), b.pagination && C.createPagination(!0), b.loop || b.initialSlide > 0 ? C.swipeTo(b.initialSlide, 0, !1) : C.updateActiveSlide(0), b.autoplay && C.startAutoplay(), C.centerIndex = C.activeIndex, b.onSwiperCreated && C.fireCallback(b.onSwiperCreated, C), C.callPlugins(\"onSwiperCreated\") }\r\n if (!document.body.outerHTML && document.body.__defineGetter__ && HTMLElement) {\r\n var B = HTMLElement.prototype;\r\n B.__defineGetter__ && B.__defineGetter__(\"outerHTML\", function() { return (new XMLSerializer).serializeToString(this) })\r\n }\r\n if (window.getComputedStyle || (window.getComputedStyle = function(a) { return this.el = a, this.getPropertyValue = function(b) { var c = /(\\-([a-z]){1})/g; return \"float\" === b && (b = \"styleFloat\"), c.test(b) && (b = b.replace(c, function() { return arguments[2].toUpperCase() })), a.currentStyle[b] ? a.currentStyle[b] : null }, this }), Array.prototype.indexOf || (Array.prototype.indexOf = function(a, b) {\r\n for (var c = b || 0, d = this.length; d > c; c++)\r\n if (this[c] === a) return c;\r\n return -1\r\n }), (document.querySelectorAll || window.jQuery) && \"undefined\" != typeof a && (a.nodeType || 0 !== c(a).length)) {\r\n var C = this;\r\n C.touches = { start: 0, startX: 0, startY: 0, current: 0, currentX: 0, currentY: 0, diff: 0, abs: 0 }, C.positions = { start: 0, abs: 0, diff: 0, current: 0 }, C.times = { start: 0, end: 0 }, C.id = (new Date).getTime(), C.container = a.nodeType ? a : c(a)[0], C.isTouched = !1, C.isMoved = !1, C.activeIndex = 0, C.centerIndex = 0, C.activeLoaderIndex = 0, C.activeLoopIndex = 0, C.previousIndex = null, C.velocity = 0, C.snapGrid = [], C.slidesGrid = [], C.imagesToLoad = [], C.imagesLoaded = 0, C.wrapperLeft = 0, C.wrapperRight = 0, C.wrapperTop = 0, C.wrapperBottom = 0, C.isAndroid = navigator.userAgent.toLowerCase().indexOf(\"android\") >= 0;\r\n var D, E, F, G, H, I, J = { eventTarget: \"wrapper\", mode: \"horizontal\", touchRatio: 1, speed: 300, freeMode: !1, freeModeFluid: !1, momentumRatio: 1, momentumBounce: !0, momentumBounceRatio: 1, slidesPerView: 1, slidesPerGroup: 1, slidesPerViewFit: !0, simulateTouch: !0, followFinger: !0, shortSwipes: !0, longSwipesRatio: .5, moveStartThreshold: !1, onlyExternal: !1, createPagination: !0, pagination: !1, paginationElement: \"span\", paginationClickable: !1, paginationAsRange: !0, resistance: !0, scrollContainer: !1, preventLinks: !0, preventLinksPropagation: !1, noSwiping: !1, noSwipingClass: \"swiper-no-swiping\", initialSlide: 0, keyboardControl: !1, mousewheelControl: !1, mousewheelControlForceToAxis: !1, useCSS3Transforms: !0, autoplay: !1, autoplayDisableOnInteraction: !0, autoplayStopOnLast: !1, loop: !1, loopAdditionalSlides: 0, roundLengths: !1, calculateHeight: !1, cssWidthAndHeight: !1, updateOnImagesReady: !0, releaseFormElements: !0, watchActiveIndex: !1, visibilityFullFit: !1, offsetPxBefore: 0, offsetPxAfter: 0, offsetSlidesBefore: 0, offsetSlidesAfter: 0, centeredSlides: !1, queueStartCallbacks: !1, queueEndCallbacks: !1, autoResize: !0, resizeReInit: !1, DOMAnimation: !0, loader: { slides: [], slidesHTMLType: \"inner\", surroundGroups: 1, logic: \"reload\", loadAllSlides: !1 }, swipeToPrev: !0, swipeToNext: !0, slideElement: \"div\", slideClass: \"swiper-slide\", slideActiveClass: \"swiper-slide-active\", slideVisibleClass: \"swiper-slide-visible\", slideDuplicateClass: \"swiper-slide-duplicate\", wrapperClass: \"swiper-wrapper\", paginationElementClass: \"swiper-pagination-switch\", paginationActiveClass: \"swiper-active-switch\", paginationVisibleClass: \"swiper-visible-switch\" };\r\n b = b || {};\r\n for (var K in J)\r\n if (K in b && \"object\" == typeof b[K])\r\n for (var L in J[K]) L in b[K] || (b[K][L] = J[K][L]);\r\n else K in b || (b[K] = J[K]);\r\n C.params = b, b.scrollContainer && (b.freeMode = !0, b.freeModeFluid = !0), b.loop && (b.resistance = \"100%\");\r\n var M = \"horizontal\" === b.mode,\r\n N = [\"mousedown\", \"mousemove\", \"mouseup\"];\r\n C.browser.ie10 && (N = [\"MSPointerDown\", \"MSPointerMove\", \"MSPointerUp\"]), C.browser.ie11 && (N = [\"pointerdown\", \"pointermove\", \"pointerup\"]), C.touchEvents = { touchStart: C.support.touch || !b.simulateTouch ? \"touchstart\" : N[0], touchMove: C.support.touch || !b.simulateTouch ? \"touchmove\" : N[1], touchEnd: C.support.touch || !b.simulateTouch ? \"touchend\" : N[2] };\r\n for (var O = C.container.childNodes.length - 1; O >= 0; O--)\r\n if (C.container.childNodes[O].className)\r\n for (var P = C.container.childNodes[O].className.split(/\\s+/), Q = 0; Q < P.length; Q++) P[Q] === b.wrapperClass && (D = C.container.childNodes[O]);\r\n C.wrapper = D, C._extendSwiperSlide = function(a) { return a.append = function() { return b.loop ? a.insertAfter(C.slides.length - C.loopedSlides) : (C.wrapper.appendChild(a), C.reInit()), a }, a.prepend = function() { return b.loop ? (C.wrapper.insertBefore(a, C.slides[C.loopedSlides]), C.removeLoopedSlides(), C.calcSlides(), C.createLoop()) : C.wrapper.insertBefore(a, C.wrapper.firstChild), C.reInit(), a }, a.insertAfter = function(c) { if (\"undefined\" == typeof c) return !1; var d; return b.loop ? (d = C.slides[c + 1 + C.loopedSlides], d ? C.wrapper.insertBefore(a, d) : C.wrapper.appendChild(a), C.removeLoopedSlides(), C.calcSlides(), C.createLoop()) : (d = C.slides[c + 1], C.wrapper.insertBefore(a, d)), C.reInit(), a }, a.clone = function() { return C._extendSwiperSlide(a.cloneNode(!0)) }, a.remove = function() { C.wrapper.removeChild(a), C.reInit() }, a.html = function(b) { return \"undefined\" == typeof b ? a.innerHTML : (a.innerHTML = b, a) }, a.index = function() { for (var b, c = C.slides.length - 1; c >= 0; c--) a === C.slides[c] && (b = c); return b }, a.isActive = function() { return a.index() === C.activeIndex ? !0 : !1 }, a.swiperSlideDataStorage || (a.swiperSlideDataStorage = {}), a.getData = function(b) { return a.swiperSlideDataStorage[b] }, a.setData = function(b, c) { return a.swiperSlideDataStorage[b] = c, a }, a.data = function(b, c) { return \"undefined\" == typeof c ? a.getAttribute(\"data-\" + b) : (a.setAttribute(\"data-\" + b, c), a) }, a.getWidth = function(b, c) { return C.h.getWidth(a, b, c) }, a.getHeight = function(b, c) { return C.h.getHeight(a, b, c) }, a.getOffset = function() { return C.h.getOffset(a) }, a }, C.calcSlides = function(a) {\r\n var c = C.slides ? C.slides.length : !1;\r\n C.slides = [], C.displaySlides = [];\r\n for (var d = 0; d < C.wrapper.childNodes.length; d++)\r\n if (C.wrapper.childNodes[d].className)\r\n for (var e = C.wrapper.childNodes[d].className, f = e.split(/\\s+/), i = 0; i < f.length; i++) f[i] === b.slideClass && C.slides.push(C.wrapper.childNodes[d]);\r\n for (d = C.slides.length - 1; d >= 0; d--) C._extendSwiperSlide(C.slides[d]);\r\n c !== !1 && (c !== C.slides.length || a) && (h(), g(), C.updateActiveSlide(), C.params.pagination && C.createPagination(), C.callPlugins(\"numberOfSlidesChanged\"))\r\n }, C.createSlide = function(a, c, d) { c = c || C.params.slideClass, d = d || b.slideElement; var e = document.createElement(d); return e.innerHTML = a || \"\", e.className = c, C._extendSwiperSlide(e) }, C.appendSlide = function(a, b, c) { return a ? a.nodeType ? C._extendSwiperSlide(a).append() : C.createSlide(a, b, c).append() : void 0 }, C.prependSlide = function(a, b, c) { return a ? a.nodeType ? C._extendSwiperSlide(a).prepend() : C.createSlide(a, b, c).prepend() : void 0 }, C.insertSlideAfter = function(a, b, c, d) { return \"undefined\" == typeof a ? !1 : b.nodeType ? C._extendSwiperSlide(b).insertAfter(a) : C.createSlide(b, c, d).insertAfter(a) }, C.removeSlide = function(a) {\r\n if (C.slides[a]) {\r\n if (b.loop) {\r\n if (!C.slides[a + C.loopedSlides]) return !1;\r\n C.slides[a + C.loopedSlides].remove(), C.removeLoopedSlides(), C.calcSlides(), C.createLoop()\r\n } else C.slides[a].remove();\r\n return !0\r\n }\r\n return !1\r\n }, C.removeLastSlide = function() { return C.slides.length > 0 ? (b.loop ? (C.slides[C.slides.length - 1 - C.loopedSlides].remove(), C.removeLoopedSlides(), C.calcSlides(), C.createLoop()) : C.slides[C.slides.length - 1].remove(), !0) : !1 }, C.removeAllSlides = function() { for (var a = C.slides.length - 1; a >= 0; a--) C.slides[a].remove() }, C.getSlide = function(a) { return C.slides[a] }, C.getLastSlide = function() { return C.slides[C.slides.length - 1] }, C.getFirstSlide = function() { return C.slides[0] }, C.activeSlide = function() { return C.slides[C.activeIndex] }, C.fireCallback = function() {\r\n var a = arguments[0];\r\n if (\"[object Array]\" === Object.prototype.toString.call(a))\r\n for (var c = 0; c < a.length; c++) \"function\" == typeof a[c] && a[c](arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);\r\n else \"[object String]\" === Object.prototype.toString.call(a) ? b[\"on\" + a] && C.fireCallback(b[\"on\" + a], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]) : a(arguments[1], arguments[2], arguments[3], arguments[4], arguments[5])\r\n }, C.addCallback = function(a, b) { var c, e = this; return e.params[\"on\" + a] ? d(this.params[\"on\" + a]) ? this.params[\"on\" + a].push(b) : \"function\" == typeof this.params[\"on\" + a] ? (c = this.params[\"on\" + a], this.params[\"on\" + a] = [], this.params[\"on\" + a].push(c), this.params[\"on\" + a].push(b)) : void 0 : (this.params[\"on\" + a] = [], this.params[\"on\" + a].push(b)) }, C.removeCallbacks = function(a) { C.params[\"on\" + a] && (C.params[\"on\" + a] = null) };\r\n var R = [];\r\n for (var S in C.plugins)\r\n if (b[S]) {\r\n var T = C.plugins[S](C, b[S]);\r\n T && R.push(T)\r\n }\r\n C.callPlugins = function(a, b) { b || (b = {}); for (var c = 0; c < R.length; c++) a in R[c] && R[c][a](b) }, !C.browser.ie10 && !C.browser.ie11 || b.onlyExternal || C.wrapper.classList.add(\"swiper-wp8-\" + (M ? \"horizontal\" : \"vertical\")), b.freeMode && (C.container.className += \" swiper-free-mode\"), C.initialized = !1, C.init = function(a, c) {\r\n var d = C.h.getWidth(C.container, !1, b.roundLengths),\r\n e = C.h.getHeight(C.container, !1, b.roundLengths);\r\n if (d !== C.width || e !== C.height || a) {\r\n C.width = d, C.height = e;\r\n var f, g, h, i, j, k, l;\r\n I = M ? d : e;\r\n var m = C.wrapper;\r\n if (a && C.calcSlides(c), \"auto\" === b.slidesPerView) {\r\n var n = 0,\r\n o = 0;\r\n b.slidesOffset > 0 && (m.style.paddingLeft = \"\", m.style.paddingRight = \"\", m.style.paddingTop = \"\", m.style.paddingBottom = \"\"), m.style.width = \"\", m.style.height = \"\", b.offsetPxBefore > 0 && (M ? C.wrapperLeft = b.offsetPxBefore : C.wrapperTop = b.offsetPxBefore), b.offsetPxAfter > 0 && (M ? C.wrapperRight = b.offsetPxAfter : C.wrapperBottom = b.offsetPxAfter), b.centeredSlides && (M ? (C.wrapperLeft = (I - this.slides[0].getWidth(!0, b.roundLengths)) / 2, C.wrapperRight = (I - C.slides[C.slides.length - 1].getWidth(!0, b.roundLengths)) / 2) : (C.wrapperTop = (I - C.slides[0].getHeight(!0, b.roundLengths)) / 2, C.wrapperBottom = (I - C.slides[C.slides.length - 1].getHeight(!0, b.roundLengths)) / 2)), M ? (C.wrapperLeft >= 0 && (m.style.paddingLeft = C.wrapperLeft + \"px\"), C.wrapperRight >= 0 && (m.style.paddingRight = C.wrapperRight + \"px\")) : (C.wrapperTop >= 0 && (m.style.paddingTop = C.wrapperTop + \"px\"), C.wrapperBottom >= 0 && (m.style.paddingBottom = C.wrapperBottom + \"px\")), k = 0;\r\n var p = 0;\r\n for (C.snapGrid = [], C.slidesGrid = [], h = 0, l = 0; l < C.slides.length; l++) {\r\n f = C.slides[l].getWidth(!0, b.roundLengths), g = C.slides[l].getHeight(!0, b.roundLengths), b.calculateHeight && (h = Math.max(h, g));\r\n var q = M ? f : g;\r\n if (b.centeredSlides) {\r\n var r = l === C.slides.length - 1 ? 0 : C.slides[l + 1].getWidth(!0, b.roundLengths),\r\n s = l === C.slides.length - 1 ? 0 : C.slides[l + 1].getHeight(!0, b.roundLengths),\r\n t = M ? r : s;\r\n if (q > I) {\r\n if (b.slidesPerViewFit) C.snapGrid.push(k + C.wrapperLeft), C.snapGrid.push(k + q - I + C.wrapperLeft);\r\n else\r\n for (var u = 0; u <= Math.floor(q / (I + C.wrapperLeft)); u++) C.snapGrid.push(0 === u ? k + C.wrapperLeft : k + C.wrapperLeft + I * u);\r\n C.slidesGrid.push(k + C.wrapperLeft)\r\n } else C.snapGrid.push(p), C.slidesGrid.push(p);\r\n p += q / 2 + t / 2\r\n } else {\r\n if (q > I)\r\n if (b.slidesPerViewFit) C.snapGrid.push(k), C.snapGrid.push(k + q - I);\r\n else if (0 !== I)\r\n for (var v = 0; v <= Math.floor(q / I); v++) C.snapGrid.push(k + I * v);\r\n else C.snapGrid.push(k);\r\n else C.snapGrid.push(k);\r\n C.slidesGrid.push(k)\r\n }\r\n k += q, n += f, o += g\r\n }\r\n b.calculateHeight && (C.height = h), M ? (F = n + C.wrapperRight + C.wrapperLeft, m.style.width = n + \"px\", m.style.height = C.height + \"px\") : (F = o + C.wrapperTop + C.wrapperBottom, m.style.width = C.width + \"px\", m.style.height = o + \"px\")\r\n } else if (b.scrollContainer) m.style.width = \"\", m.style.height = \"\", i = C.slides[0].getWidth(!0, b.roundLengths), j = C.slides[0].getHeight(!0, b.roundLengths), F = M ? i : j, m.style.width = i + \"px\", m.style.height = j + \"px\", E = M ? i : j;\r\n else {\r\n if (b.calculateHeight) {\r\n for (h = 0, j = 0, M || (C.container.style.height = \"\"), m.style.height = \"\", l = 0; l < C.slides.length; l++) C.slides[l].style.height = \"\", h = Math.max(C.slides[l].getHeight(!0), h), M || (j += C.slides[l].getHeight(!0));\r\n g = h, C.height = g, M ? j = g : (I = g, C.container.style.height = I + \"px\")\r\n } else g = M ? C.height : C.height / b.slidesPerView, b.roundLengths && (g = Math.ceil(g)), j = M ? C.height : C.slides.length * g;\r\n for (f = M ? C.width / b.slidesPerView : C.width, b.roundLengths && (f = Math.ceil(f)), i = M ? C.slides.length * f : C.width, E = M ? f : g, b.offsetSlidesBefore > 0 && (M ? C.wrapperLeft = E * b.offsetSlidesBefore : C.wrapperTop = E * b.offsetSlidesBefore), b.offsetSlidesAfter > 0 && (M ? C.wrapperRight = E * b.offsetSlidesAfter : C.wrapperBottom = E * b.offsetSlidesAfter), b.offsetPxBefore > 0 && (M ? C.wrapperLeft = b.offsetPxBefore : C.wrapperTop = b.offsetPxBefore), b.offsetPxAfter > 0 && (M ? C.wrapperRight = b.offsetPxAfter : C.wrapperBottom = b.offsetPxAfter), b.centeredSlides && (M ? (C.wrapperLeft = (I - E) / 2, C.wrapperRight = (I - E) / 2) : (C.wrapperTop = (I - E) / 2, C.wrapperBottom = (I - E) / 2)), M ? (C.wrapperLeft > 0 && (m.style.paddingLeft = C.wrapperLeft + \"px\"), C.wrapperRight > 0 && (m.style.paddingRight = C.wrapperRight + \"px\")) : (C.wrapperTop > 0 && (m.style.paddingTop = C.wrapperTop + \"px\"), C.wrapperBottom > 0 && (m.style.paddingBottom = C.wrapperBottom + \"px\")), F = M ? i + C.wrapperRight + C.wrapperLeft : j + C.wrapperTop + C.wrapperBottom, parseFloat(i) > 0 && (!b.cssWidthAndHeight || \"height\" === b.cssWidthAndHeight) && (m.style.width = i + \"px\"), parseFloat(j) > 0 && (!b.cssWidthAndHeight || \"width\" === b.cssWidthAndHeight) && (m.style.height = j + \"px\"), k = 0, C.snapGrid = [], C.slidesGrid = [], l = 0; l < C.slides.length; l++) C.snapGrid.push(k), C.slidesGrid.push(k), k += E, parseFloat(f) > 0 && (!b.cssWidthAndHeight || \"height\" === b.cssWidthAndHeight) && (C.slides[l].style.width = f + \"px\"), parseFloat(g) > 0 && (!b.cssWidthAndHeight || \"width\" === b.cssWidthAndHeight) && (C.slides[l].style.height = g + \"px\")\r\n }\r\n C.initialized ? (C.callPlugins(\"onInit\"), b.onInit && C.fireCallback(b.onInit, C)) : (C.callPlugins(\"onFirstInit\"), b.onFirstInit && C.fireCallback(b.onFirstInit, C)), C.initialized = !0\r\n }\r\n }, C.reInit = function(a) { C.init(!0, a) }, C.resizeFix = function(a) { C.callPlugins(\"beforeResizeFix\"), C.init(b.resizeReInit || a), b.freeMode ? C.getWrapperTranslate() < -e() && (C.setWrapperTransition(0), C.setWrapperTranslate(-e())) : (C.swipeTo(b.loop ? C.activeLoopIndex : C.activeIndex, 0, !1), b.autoplay && (C.support.transitions && \"undefined\" != typeof _ ? \"undefined\" != typeof _ && (clearTimeout(_), _ = void 0, C.startAutoplay()) : \"undefined\" != typeof ab && (clearInterval(ab), ab = void 0, C.startAutoplay()))), C.callPlugins(\"afterResizeFix\") }, C.destroy = function() {\r\n var a = C.h.removeEventListener,\r\n c = \"wrapper\" === b.eventTarget ? C.wrapper : C.container;\r\n C.browser.ie10 || C.browser.ie11 ? (a(c, C.touchEvents.touchStart, p), a(document, C.touchEvents.touchMove, q), a(document, C.touchEvents.touchEnd, r)) : (C.support.touch && (a(c, \"touchstart\", p), a(c, \"touchmove\", q), a(c, \"touchend\", r)), b.simulateTouch && (a(c, \"mousedown\", p), a(document, \"mousemove\", q), a(document, \"mouseup\", r))), b.autoResize && a(window, \"resize\", C.resizeFix), h(), b.paginationClickable && w(), b.mousewheelControl && C._wheelEvent && a(C.container, C._wheelEvent, j), b.keyboardControl && a(document, \"keydown\", i), b.autoplay && C.stopAutoplay(), C.callPlugins(\"onDestroy\"), C = null\r\n }, C.disableKeyboardControl = function() { b.keyboardControl = !1, C.h.removeEventListener(document, \"keydown\", i) }, C.enableKeyboardControl = function() { b.keyboardControl = !0, C.h.addEventListener(document, \"keydown\", i) };\r\n var U = (new Date).getTime();\r\n if (C.disableMousewheelControl = function() { return C._wheelEvent ? (b.mousewheelControl = !1, C.h.removeEventListener(C.container, C._wheelEvent, j), !0) : !1 }, C.enableMousewheelControl = function() { return C._wheelEvent ? (b.mousewheelControl = !0, C.h.addEventListener(C.container, C._wheelEvent, j), !0) : !1 }, b.grabCursor) {\r\n var V = C.container.style;\r\n V.cursor = \"move\", V.cursor = \"grab\", V.cursor = \"-moz-grab\", V.cursor = \"-webkit-grab\"\r\n }\r\n C.allowSlideClick = !0, C.allowLinks = !0;\r\n var W, X, Y, Z = !1,\r\n $ = !0;\r\n C.swipeNext = function(a) {\r\n !a && b.loop && C.fixLoop(), !a && b.autoplay && C.stopAutoplay(!0), C.callPlugins(\"onSwipeNext\");\r\n var c = C.getWrapperTranslate(),\r\n d = c;\r\n if (\"auto\" === b.slidesPerView) {\r\n for (var f = 0; f < C.snapGrid.length; f++)\r\n if (-c >= C.snapGrid[f] && -c < C.snapGrid[f + 1]) { d = -C.snapGrid[f + 1]; break }\r\n } else {\r\n var g = E * b.slidesPerGroup;\r\n d = -(Math.floor(Math.abs(c) / Math.floor(g)) * g + g)\r\n }\r\n return d < -e() && (d = -e()), d === c ? !1 : (u(d, \"next\"), !0)\r\n }, C.swipePrev = function(a) {\r\n !a && b.loop && C.fixLoop(), !a && b.autoplay && C.stopAutoplay(!0), C.callPlugins(\"onSwipePrev\");\r\n var c, d = Math.ceil(C.getWrapperTranslate());\r\n if (\"auto\" === b.slidesPerView) { c = 0; for (var e = 1; e < C.snapGrid.length; e++) { if (-d === C.snapGrid[e]) { c = -C.snapGrid[e - 1]; break } if (-d > C.snapGrid[e] && -d < C.snapGrid[e + 1]) { c = -C.snapGrid[e]; break } } } else {\r\n var f = E * b.slidesPerGroup;\r\n c = -(Math.ceil(-d / f) - 1) * f\r\n }\r\n return c > 0 && (c = 0), c === d ? !1 : (u(c, \"prev\"), !0)\r\n }, C.swipeReset = function() {\r\n C.callPlugins(\"onSwipeReset\"); {\r\n var a, c = C.getWrapperTranslate(),\r\n d = E * b.slidesPerGroup; - e()\r\n }\r\n if (\"auto\" === b.slidesPerView) { a = 0; for (var f = 0; f < C.snapGrid.length; f++) { if (-c === C.snapGrid[f]) return; if (-c >= C.snapGrid[f] && -c < C.snapGrid[f + 1]) { a = C.positions.diff > 0 ? -C.snapGrid[f + 1] : -C.snapGrid[f]; break } } - c >= C.snapGrid[C.snapGrid.length - 1] && (a = -C.snapGrid[C.snapGrid.length - 1]), c <= -e() && (a = -e()) } else a = 0 > c ? Math.round(c / d) * d : 0, c <= -e() && (a = -e());\r\n return b.scrollContainer && (a = 0 > c ? c : 0), a < -e() && (a = -e()), b.scrollContainer && I > E && (a = 0), a === c ? !1 : (u(a, \"reset\"), !0)\r\n }, C.swipeTo = function(a, c, d) { a = parseInt(a, 10), C.callPlugins(\"onSwipeTo\", { index: a, speed: c }), b.loop && (a += C.loopedSlides); var f = C.getWrapperTranslate(); if (!(a > C.slides.length - 1 || 0 > a)) { var g; return g = \"auto\" === b.slidesPerView ? -C.slidesGrid[a] : -a * E, g < -e() && (g = -e()), g === f ? !1 : (d = d === !1 ? !1 : !0, u(g, \"to\", { index: a, speed: c, runCallbacks: d }), !0) } }, C._queueStartCallbacks = !1, C._queueEndCallbacks = !1, C.updateActiveSlide = function(a) {\r\n if (C.initialized && 0 !== C.slides.length) {\r\n C.previousIndex = C.activeIndex, \"undefined\" == typeof a && (a = C.getWrapperTranslate()), a > 0 && (a = 0);\r\n var c;\r\n if (\"auto\" === b.slidesPerView) {\r\n if (C.activeIndex = C.slidesGrid.indexOf(-a), C.activeIndex < 0) {\r\n for (c = 0; c < C.slidesGrid.length - 1 && !(-a > C.slidesGrid[c] && -a < C.slidesGrid[c + 1]); c++);\r\n var d = Math.abs(C.slidesGrid[c] + a),\r\n e = Math.abs(C.slidesGrid[c + 1] + a);\r\n C.activeIndex = e >= d ? c : c + 1\r\n }\r\n } else C.activeIndex = Math[b.visibilityFullFit ? \"ceil\" : \"round\"](-a / E);\r\n if (C.activeIndex === C.slides.length && (C.activeIndex = C.slides.length - 1), C.activeIndex < 0 && (C.activeIndex = 0), C.slides[C.activeIndex]) {\r\n if (C.calcVisibleSlides(a), C.support.classList) {\r\n var f;\r\n for (c = 0; c < C.slides.length; c++) f = C.slides[c], f.classList.remove(b.slideActiveClass), C.visibleSlides.indexOf(f) >= 0 ? f.classList.add(b.slideVisibleClass) : f.classList.remove(b.slideVisibleClass);\r\n C.slides[C.activeIndex].classList.add(b.slideActiveClass)\r\n } else {\r\n var g = new RegExp(\"\\\\s*\" + b.slideActiveClass),\r\n h = new RegExp(\"\\\\s*\" + b.slideVisibleClass);\r\n for (c = 0; c < C.slides.length; c++) C.slides[c].className = C.slides[c].className.replace(g, \"\").replace(h, \"\"), C.visibleSlides.indexOf(C.slides[c]) >= 0 && (C.slides[c].className += \" \" + b.slideVisibleClass);\r\n C.slides[C.activeIndex].className += \" \" + b.slideActiveClass\r\n }\r\n if (b.loop) {\r\n var i = C.loopedSlides;\r\n C.activeLoopIndex = C.activeIndex - i, C.activeLoopIndex >= C.slides.length - 2 * i && (C.activeLoopIndex = C.slides.length - 2 * i - C.activeLoopIndex), C.activeLoopIndex < 0 && (C.activeLoopIndex = C.slides.length - 2 * i + C.activeLoopIndex), C.activeLoopIndex < 0 && (C.activeLoopIndex = 0)\r\n } else C.activeLoopIndex = C.activeIndex;\r\n b.pagination && C.updatePagination(a)\r\n }\r\n }\r\n }, C.createPagination = function(a) {\r\n if (b.paginationClickable && C.paginationButtons && w(), C.paginationContainer = b.pagination.nodeType ? b.pagination : c(b.pagination)[0], b.createPagination) {\r\n var d = \"\",\r\n e = C.slides.length,\r\n f = e;\r\n b.loop && (f -= 2 * C.loopedSlides);\r\n for (var g = 0; f > g; g++) d += \"<\" + b.paginationElement + ' class=\"' + b.paginationElementClass + '\">\";\r\n C.paginationContainer.innerHTML = d\r\n }\r\n C.paginationButtons = c(\".\" + b.paginationElementClass, C.paginationContainer), a || C.updatePagination(), C.callPlugins(\"onCreatePagination\"), b.paginationClickable && x()\r\n }, C.updatePagination = function(a) {\r\n if (b.pagination && !(C.slides.length < 1)) {\r\n var d = c(\".\" + b.paginationActiveClass, C.paginationContainer);\r\n if (d) {\r\n var e = C.paginationButtons;\r\n if (0 !== e.length) {\r\n for (var f = 0; f < e.length; f++) e[f].className = b.paginationElementClass;\r\n var g = b.loop ? C.loopedSlides : 0;\r\n if (b.paginationAsRange) {\r\n C.visibleSlides || C.calcVisibleSlides(a);\r\n var h, i = [];\r\n for (h = 0; h < C.visibleSlides.length; h++) {\r\n var j = C.slides.indexOf(C.visibleSlides[h]) - g;\r\n b.loop && 0 > j && (j = C.slides.length - 2 * C.loopedSlides + j), b.loop && j >= C.slides.length - 2 * C.loopedSlides && (j = C.slides.length - 2 * C.loopedSlides - j, j = Math.abs(j)), i.push(j)\r\n }\r\n for (h = 0; h < i.length; h++) e[i[h]] && (e[i[h]].className += \" \" + b.paginationVisibleClass);\r\n b.loop ? void 0 !== e[C.activeLoopIndex] && (e[C.activeLoopIndex].className += \" \" + b.paginationActiveClass) : e[C.activeIndex].className += \" \" + b.paginationActiveClass\r\n } else b.loop ? e[C.activeLoopIndex] && (e[C.activeLoopIndex].className += \" \" + b.paginationActiveClass + \" \" + b.paginationVisibleClass) : e[C.activeIndex].className += \" \" + b.paginationActiveClass + \" \" + b.paginationVisibleClass\r\n }\r\n }\r\n }\r\n }, C.calcVisibleSlides = function(a) {\r\n var c = [],\r\n d = 0,\r\n e = 0,\r\n f = 0;\r\n M && C.wrapperLeft > 0 && (a += C.wrapperLeft), !M && C.wrapperTop > 0 && (a += C.wrapperTop);\r\n for (var g = 0; g < C.slides.length; g++) {\r\n d += e, e = \"auto\" === b.slidesPerView ? M ? C.h.getWidth(C.slides[g], !0, b.roundLengths) : C.h.getHeight(C.slides[g], !0, b.roundLengths) : E, f = d + e;\r\n var h = !1;\r\n b.visibilityFullFit ? (d >= -a && -a + I >= f && (h = !0), -a >= d && f >= -a + I && (h = !0)) : (f > -a && -a + I >= f && (h = !0), d >= -a && -a + I > d && (h = !0), -a > d && f > -a + I && (h = !0)), h && c.push(C.slides[g])\r\n }\r\n 0 === c.length && (c = [C.slides[C.activeIndex]]), C.visibleSlides = c\r\n };\r\n var _, ab;\r\n C.startAutoplay = function() {\r\n if (C.support.transitions) {\r\n if (\"undefined\" != typeof _) return !1;\r\n if (!b.autoplay) return;\r\n C.callPlugins(\"onAutoplayStart\"), b.onAutoplayStart && C.fireCallback(b.onAutoplayStart, C), z()\r\n } else {\r\n if (\"undefined\" != typeof ab) return !1;\r\n if (!b.autoplay) return;\r\n C.callPlugins(\"onAutoplayStart\"), b.onAutoplayStart && C.fireCallback(b.onAutoplayStart, C), ab = setInterval(function() { b.loop ? (C.fixLoop(), C.swipeNext(!0)) : C.swipeNext(!0) || (b.autoplayStopOnLast ? (clearInterval(ab), ab = void 0) : C.swipeTo(0)) }, b.autoplay)\r\n }\r\n }, C.stopAutoplay = function(a) {\r\n if (C.support.transitions) {\r\n if (!_) return;\r\n _ && clearTimeout(_), _ = void 0, a && !b.autoplayDisableOnInteraction && C.wrapperTransitionEnd(function() { z() }), C.callPlugins(\"onAutoplayStop\"), b.onAutoplayStop && C.fireCallback(b.onAutoplayStop, C)\r\n } else ab && clearInterval(ab), ab = void 0, C.callPlugins(\"onAutoplayStop\"), b.onAutoplayStop && C.fireCallback(b.onAutoplayStop, C)\r\n }, C.loopCreated = !1, C.removeLoopedSlides = function() {\r\n if (C.loopCreated)\r\n for (var a = 0; a < C.slides.length; a++) C.slides[a].getData(\"looped\") === !0 && C.wrapper.removeChild(C.slides[a])\r\n }, C.createLoop = function() {\r\n if (0 !== C.slides.length) {\r\n C.loopedSlides = \"auto\" === b.slidesPerView ? b.loopedSlides || 1 : b.slidesPerView + b.loopAdditionalSlides, C.loopedSlides > C.slides.length && (C.loopedSlides = C.slides.length);\r\n var a, c = \"\",\r\n d = \"\",\r\n e = \"\",\r\n f = C.slides.length,\r\n g = Math.floor(C.loopedSlides / f),\r\n h = C.loopedSlides % f;\r\n for (a = 0; g * f > a; a++) {\r\n var i = a;\r\n if (a >= f) {\r\n var j = Math.floor(a / f);\r\n i = a - f * j\r\n }\r\n e += C.slides[i].outerHTML\r\n }\r\n for (a = 0; h > a; a++) d += t(b.slideDuplicateClass, C.slides[a].outerHTML);\r\n for (a = f - h; f > a; a++) c += t(b.slideDuplicateClass, C.slides[a].outerHTML);\r\n var k = c + e + D.innerHTML + e + d;\r\n for (D.innerHTML = k, C.loopCreated = !0, C.calcSlides(), a = 0; a < C.slides.length; a++)(a < C.loopedSlides || a >= C.slides.length - C.loopedSlides) && C.slides[a].setData(\"looped\", !0);\r\n C.callPlugins(\"onCreateLoop\")\r\n }\r\n }, C.fixLoop = function() {\r\n var a;\r\n C.activeIndex < C.loopedSlides ? (a = C.slides.length - 3 * C.loopedSlides + C.activeIndex, C.swipeTo(a, 0, !1)) : (\"auto\" === b.slidesPerView && C.activeIndex >= 2 * C.loopedSlides || C.activeIndex > C.slides.length - 2 * b.slidesPerView) && (a = -C.slides.length + C.activeIndex + C.loopedSlides, C.swipeTo(a, 0, !1))\r\n }, C.loadSlides = function() {\r\n var a = \"\";\r\n C.activeLoaderIndex = 0;\r\n for (var c = b.loader.slides, d = b.loader.loadAllSlides ? c.length : b.slidesPerView * (1 + b.loader.surroundGroups), e = 0; d > e; e++) a += \"outer\" === b.loader.slidesHTMLType ? c[e] : \"<\" + b.slideElement + ' class=\"' + b.slideClass + '\" data-swiperindex=\"' + e + '\">' + c[e] + \"\";\r\n C.wrapper.innerHTML = a, C.calcSlides(!0), b.loader.loadAllSlides || C.wrapperTransitionEnd(C.reloadSlides, !0)\r\n }, C.reloadSlides = function() {\r\n var a = b.loader.slides,\r\n c = parseInt(C.activeSlide().data(\"swiperindex\"), 10);\r\n if (!(0 > c || c > a.length - 1)) {\r\n C.activeLoaderIndex = c;\r\n var d = Math.max(0, c - b.slidesPerView * b.loader.surroundGroups),\r\n e = Math.min(c + b.slidesPerView * (1 + b.loader.surroundGroups) - 1, a.length - 1);\r\n if (c > 0) {\r\n var f = -E * (c - d);\r\n C.setWrapperTranslate(f), C.setWrapperTransition(0)\r\n }\r\n var g;\r\n if (\"reload\" === b.loader.logic) {\r\n C.wrapper.innerHTML = \"\";\r\n var h = \"\";\r\n for (g = d; e >= g; g++) h += \"outer\" === b.loader.slidesHTMLType ? a[g] : \"<\" + b.slideElement + ' class=\"' + b.slideClass + '\" data-swiperindex=\"' + g + '\">' + a[g] + \"\";\r\n C.wrapper.innerHTML = h\r\n } else {\r\n var i = 1e3,\r\n j = 0;\r\n for (g = 0; g < C.slides.length; g++) {\r\n var k = C.slides[g].data(\"swiperindex\");\r\n d > k || k > e ? C.wrapper.removeChild(C.slides[g]) : (i = Math.min(k, i), j = Math.max(k, j))\r\n }\r\n for (g = d; e >= g; g++) {\r\n var l;\r\n i > g && (l = document.createElement(b.slideElement), l.className = b.slideClass, l.setAttribute(\"data-swiperindex\", g), l.innerHTML = a[g], C.wrapper.insertBefore(l, C.wrapper.firstChild)), g > j && (l = document.createElement(b.slideElement), l.className = b.slideClass, l.setAttribute(\"data-swiperindex\", g), l.innerHTML = a[g], C.wrapper.appendChild(l))\r\n }\r\n }\r\n C.reInit(!0)\r\n }\r\n }, A()\r\n }\r\n};\r\nSwiper.prototype = {\r\n plugins: {},\r\n wrapperTransitionEnd: function(a, b) {\r\n \"use strict\";\r\n\r\n function c(h) {\r\n if (h.target === f && (a(e), e.params.queueEndCallbacks && (e._queueEndCallbacks = !1), !b))\r\n for (d = 0; d < g.length; d++) e.h.removeEventListener(f, g[d], c)\r\n }\r\n var d, e = this,\r\n f = e.wrapper,\r\n g = [\"webkitTransitionEnd\", \"transitionend\", \"oTransitionEnd\", \"MSTransitionEnd\", \"msTransitionEnd\"];\r\n if (a)\r\n for (d = 0; d < g.length; d++) e.h.addEventListener(f, g[d], c)\r\n },\r\n getWrapperTranslate: function(a) { \"use strict\"; var b, c, d, e, f = this.wrapper; return \"undefined\" == typeof a && (a = \"horizontal\" === this.params.mode ? \"x\" : \"y\"), this.support.transforms && this.params.useCSS3Transforms ? (d = window.getComputedStyle(f, null), window.WebKitCSSMatrix ? e = new WebKitCSSMatrix(\"none\" === d.webkitTransform ? \"\" : d.webkitTransform) : (e = d.MozTransform || d.OTransform || d.MsTransform || d.msTransform || d.transform || d.getPropertyValue(\"transform\").replace(\"translate(\", \"matrix(1, 0, 0, 1,\"), b = e.toString().split(\",\")), \"x\" === a && (c = window.WebKitCSSMatrix ? e.m41 : parseFloat(16 === b.length ? b[12] : b[4])), \"y\" === a && (c = window.WebKitCSSMatrix ? e.m42 : parseFloat(16 === b.length ? b[13] : b[5]))) : (\"x\" === a && (c = parseFloat(f.style.left, 10) || 0), \"y\" === a && (c = parseFloat(f.style.top, 10) || 0)), c || 0 },\r\n setWrapperTranslate: function(a, b, c) {\r\n \"use strict\";\r\n var d, e = this.wrapper.style,\r\n f = { x: 0, y: 0, z: 0 };\r\n 3 === arguments.length ? (f.x = a, f.y = b, f.z = c) : (\"undefined\" == typeof b && (b = \"horizontal\" === this.params.mode ? \"x\" : \"y\"), f[b] = a), this.support.transforms && this.params.useCSS3Transforms ? (d = this.support.transforms3d ? \"translate3d(\" + f.x + \"px, \" + f.y + \"px, \" + f.z + \"px)\" : \"translate(\" + f.x + \"px, \" + f.y + \"px)\", e.webkitTransform = e.MsTransform = e.msTransform = e.MozTransform = e.OTransform = e.transform = d) : (e.left = f.x + \"px\", e.top = f.y + \"px\"), this.callPlugins(\"onSetWrapperTransform\", f), this.params.onSetWrapperTransform && this.fireCallback(this.params.onSetWrapperTransform, this, f)\r\n },\r\n setWrapperTransition: function(a) {\r\n \"use strict\";\r\n var b = this.wrapper.style;\r\n b.webkitTransitionDuration = b.MsTransitionDuration = b.msTransitionDuration = b.MozTransitionDuration = b.OTransitionDuration = b.transitionDuration = a / 1e3 + \"s\", this.callPlugins(\"onSetWrapperTransition\", { duration: a }), this.params.onSetWrapperTransition && this.fireCallback(this.params.onSetWrapperTransition, this, a)\r\n },\r\n h: {\r\n getWidth: function(a, b, c) {\r\n \"use strict\";\r\n var d = window.getComputedStyle(a, null).getPropertyValue(\"width\"),\r\n e = parseFloat(d);\r\n return (isNaN(e) || d.indexOf(\"%\") > 0 || 0 > e) && (e = a.offsetWidth - parseFloat(window.getComputedStyle(a, null).getPropertyValue(\"padding-left\")) - parseFloat(window.getComputedStyle(a, null).getPropertyValue(\"padding-right\"))), b && (e += parseFloat(window.getComputedStyle(a, null).getPropertyValue(\"padding-left\")) + parseFloat(window.getComputedStyle(a, null).getPropertyValue(\"padding-right\"))), c ? Math.ceil(e) : e\r\n },\r\n getHeight: function(a, b, c) {\r\n \"use strict\";\r\n if (b) return a.offsetHeight;\r\n var d = window.getComputedStyle(a, null).getPropertyValue(\"height\"),\r\n e = parseFloat(d);\r\n return (isNaN(e) || d.indexOf(\"%\") > 0 || 0 > e) && (e = a.offsetHeight - parseFloat(window.getComputedStyle(a, null).getPropertyValue(\"padding-top\")) - parseFloat(window.getComputedStyle(a, null).getPropertyValue(\"padding-bottom\"))), b && (e += parseFloat(window.getComputedStyle(a, null).getPropertyValue(\"padding-top\")) + parseFloat(window.getComputedStyle(a, null).getPropertyValue(\"padding-bottom\"))), c ? Math.ceil(e) : e\r\n },\r\n getOffset: function(a) {\r\n \"use strict\";\r\n var b = a.getBoundingClientRect(),\r\n c = document.body,\r\n d = a.clientTop || c.clientTop || 0,\r\n e = a.clientLeft || c.clientLeft || 0,\r\n f = window.pageYOffset || a.scrollTop,\r\n g = window.pageXOffset || a.scrollLeft;\r\n return document.documentElement && !window.pageYOffset && (f = document.documentElement.scrollTop, g = document.documentElement.scrollLeft), { top: b.top + f - d, left: b.left + g - e }\r\n },\r\n windowWidth: function() { \"use strict\"; return window.innerWidth ? window.innerWidth : document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth : void 0 },\r\n windowHeight: function() { \"use strict\"; return window.innerHeight ? window.innerHeight : document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight : void 0 },\r\n windowScroll: function() { \"use strict\"; return \"undefined\" != typeof pageYOffset ? { left: window.pageXOffset, top: window.pageYOffset } : document.documentElement ? { left: document.documentElement.scrollLeft, top: document.documentElement.scrollTop } : void 0 },\r\n addEventListener: function(a, b, c, d) { \"use strict\"; \"undefined\" == typeof d && (d = !1), a.addEventListener ? a.addEventListener(b, c, d) : a.attachEvent && a.attachEvent(\"on\" + b, c) },\r\n removeEventListener: function(a, b, c, d) { \"use strict\"; \"undefined\" == typeof d && (d = !1), a.removeEventListener ? a.removeEventListener(b, c, d) : a.detachEvent && a.detachEvent(\"on\" + b, c) }\r\n },\r\n setTransform: function(a, b) {\r\n \"use strict\";\r\n var c = a.style;\r\n c.webkitTransform = c.MsTransform = c.msTransform = c.MozTransform = c.OTransform = c.transform = b\r\n },\r\n setTranslate: function(a, b) {\r\n \"use strict\";\r\n var c = a.style,\r\n d = { x: b.x || 0, y: b.y || 0, z: b.z || 0 },\r\n e = this.support.transforms3d ? \"translate3d(\" + d.x + \"px,\" + d.y + \"px,\" + d.z + \"px)\" : \"translate(\" + d.x + \"px,\" + d.y + \"px)\";\r\n c.webkitTransform = c.MsTransform = c.msTransform = c.MozTransform = c.OTransform = c.transform = e, this.support.transforms || (c.left = d.x + \"px\", c.top = d.y + \"px\")\r\n },\r\n setTransition: function(a, b) {\r\n \"use strict\";\r\n var c = a.style;\r\n c.webkitTransitionDuration = c.MsTransitionDuration = c.msTransitionDuration = c.MozTransitionDuration = c.OTransitionDuration = c.transitionDuration = b + \"ms\"\r\n },\r\n support: { touch: window.Modernizr && Modernizr.touch === !0 || function() { \"use strict\"; return !!(\"ontouchstart\" in window || window.DocumentTouch && document instanceof DocumentTouch) }(), transforms3d: window.Modernizr && Modernizr.csstransforms3d === !0 || function() { \"use strict\"; var a = document.createElement(\"div\").style; return \"webkitPerspective\" in a || \"MozPerspective\" in a || \"OPerspective\" in a || \"MsPerspective\" in a || \"perspective\" in a }(), transforms: window.Modernizr && Modernizr.csstransforms === !0 || function() { \"use strict\"; var a = document.createElement(\"div\").style; return \"transform\" in a || \"WebkitTransform\" in a || \"MozTransform\" in a || \"msTransform\" in a || \"MsTransform\" in a || \"OTransform\" in a }(), transitions: window.Modernizr && Modernizr.csstransitions === !0 || function() { \"use strict\"; var a = document.createElement(\"div\").style; return \"transition\" in a || \"WebkitTransition\" in a || \"MozTransition\" in a || \"msTransition\" in a || \"MsTransition\" in a || \"OTransition\" in a }(), classList: function() { \"use strict\"; var a = document.createElement(\"div\"); return \"classList\" in a }() },\r\n browser: {\r\n ie8: function() {\r\n \"use strict\";\r\n var a = -1;\r\n if (\"Microsoft Internet Explorer\" === navigator.appName) {\r\n var b = navigator.userAgent,\r\n c = new RegExp(/MSIE ([0-9]{1,}[\\.0-9]{0,})/);\r\n null !== c.exec(b) && (a = parseFloat(RegExp.$1))\r\n }\r\n return -1 !== a && 9 > a\r\n }(),\r\n ie10: window.navigator.msPointerEnabled,\r\n ie11: window.navigator.pointerEnabled\r\n }\r\n}, (window.jQuery || window.Zepto) && ! function(a) {\r\n \"use strict\";\r\n a.fn.swiper = function(b) {\r\n var c;\r\n return this.each(function(d) {\r\n var e = a(this);\r\n if (!e.data(\"swiper\")) {\r\n var f = new Swiper(e[0], b);\r\n d || (c = f), e.data(\"swiper\", f)\r\n }\r\n }), c\r\n }\r\n}(window.jQuery || window.Zepto), \"undefined\" != typeof module && (module.exports = Swiper), \"function\" == \"function\" && __webpack_require__(0) && !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { \"use strict\"; return Swiper }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\r\n\r\n\r\n\r\n// require([\"config\"], function(config) {\r\n// require([\"jquery\", \"focusPic\", 'swiper'], function($) {\r\nvar _index = 1;\r\nvar its = 0;\r\nvar slider;\r\nvar mgs = 0;\r\nsetInterval(function() {\r\n\r\n its++;\r\n if (its > 1300) {\r\n $(\".scroll_item ul\").animate({ left: 0 }, 50);\r\n its = 0;\r\n } else {\r\n $(\".scroll_item ul\").animate({ left: -its }, 50);\r\n }\r\n\r\n}, 50);\r\n(function(a) {\r\n a.fn.slides = function(b) {\r\n return b = a.extend({}, a.fn.slides.option, b), this.each(function() {\r\n function w(g, h, i) {\r\n if (!p && o) {\r\n p = !0, b.animationStart(n + 1);\r\n switch (g) {\r\n case \"next\":\r\n l = n, k = n + 1, k = e === k ? 0 : k, r = f * 2, g = -f * 2, n = k;\r\n break;\r\n case \"prev\":\r\n l = n, k = n - 1, k = k === -1 ? e - 1 : k, r = 0, g = 0, n = k;\r\n break;\r\n case \"pagination\":\r\n k = parseInt(i, 10), l = a(\".\" + b.paginationClass + \" li.\" + b.currentClass + \" a\", c).attr(\"href\").match(\"[^#/]+$\"), k > l ? (r = f * 2, g = -f * 2) : (r = 0, g = 0), n = k\r\n }\r\n h === \"fade\" ? b.crossfade ? d.children(\":eq(\" + k + \")\", c).css({ zIndex: 10 }).fadeIn(b.fadeSpeed, b.fadeEasing, function() { b.autoHeight ? d.animate({ height: d.children(\":eq(\" + k + \")\", c).outerHeight() }, b.autoHeightSpeed, function() { d.children(\":eq(\" + l + \")\", c).css({ display: \"none\", zIndex: 0 }), d.children(\":eq(\" + k + \")\", c).css({ zIndex: 0 }), b.animationComplete(k + 1), p = !1 }) : (d.children(\":eq(\" + l + \")\", c).css({ display: \"none\", zIndex: 0 }), d.children(\":eq(\" + k + \")\", c).css({ zIndex: 0 }), b.animationComplete(k + 1), p = !1) }) : d.children(\":eq(\" + l + \")\", c).fadeOut(b.fadeSpeed, b.fadeEasing, function() { b.autoHeight ? d.animate({ height: d.children(\":eq(\" + k + \")\", c).outerHeight() }, b.autoHeightSpeed, function() { d.children(\":eq(\" + k + \")\", c).fadeIn(b.fadeSpeed, b.fadeEasing) }) : d.children(\":eq(\" + k + \")\", c).fadeIn(b.fadeSpeed, b.fadeEasing, function() { a.browser.msie && a(this).get(0).style.removeAttribute(\"filter\") }), b.animationComplete(k + 1), p = !1 }) : (d.children(\":eq(\" + k + \")\").css({ left: r, display: \"block\" }), b.autoHeight ? d.animate({ left: g, height: d.children(\":eq(\" + k + \")\").outerHeight() }, b.slideSpeed, b.slideEasing, function() { d.css({ left: -f }), d.children(\":eq(\" + k + \")\").css({ left: f, zIndex: 5 }), d.children(\":eq(\" + l + \")\").css({ left: f, display: \"none\", zIndex: 0 }), b.animationComplete(k + 1), p = !1 }) : d.animate({ left: g }, b.slideSpeed, b.slideEasing, function() { d.css({ left: -f }), d.children(\":eq(\" + k + \")\").css({ left: f, zIndex: 5 }), d.children(\":eq(\" + l + \")\").css({ left: f, display: \"none\", zIndex: 0 }), b.animationComplete(k + 1), p = !1 })), b.pagination && (a(\".\" + b.paginationClass + \" li.\" + b.currentClass, c).removeClass(b.currentClass), a(\".\" + b.paginationClass + \" li:eq(\" + k + \")\", c).addClass(b.currentClass))\r\n }\r\n }\r\n\r\n function x() { clearInterval(c.data(\"interval\")) }\r\n\r\n function y() { b.pause ? (clearTimeout(c.data(\"pause\")), clearInterval(c.data(\"interval\")), u = setTimeout(function() { clearTimeout(c.data(\"pause\")), v = setInterval(function() { w(\"next\", i) }, b.play), c.data(\"interval\", v) }, b.pause), c.data(\"pause\", u)) : x() }\r\n a(\".\" + b.container, a(this)).children().wrapAll('
');\r\n var c = a(this),\r\n d = a(\".slides_control\", c),\r\n e = d.children().size(),\r\n f = d.children().outerWidth(),\r\n g = d.children().outerHeight(),\r\n h = b.start - 1,\r\n i = b.effect.indexOf(\",\") < 0 ? b.effect : b.effect.replace(\" \", \"\").split(\",\")[0],\r\n j = b.effect.indexOf(\",\") < 0 ? i : b.effect.replace(\" \", \"\").split(\",\")[1],\r\n k = 0,\r\n l = 0,\r\n m = 0,\r\n n = 0,\r\n o, p, q, r, s, t, u, v;\r\n if (e < 2) return a(\".\" + b.container, a(this)).fadeIn(b.fadeSpeed, b.fadeEasing, function() { o = !0, b.slidesLoaded() }), a(\".\" + b.next + \", .\" + b.prev).fadeOut(0), !1;\r\n if (e < 2) return;\r\n h < 0 && (h = 0), h > e && (h = e - 1), b.start && (n = h), b.randomize && d.randomize(), a(\".\" + b.container, c).css({ overflow: \"hidden\", position: \"relative\" }), d.children().css({ position: \"absolute\", top: 0, left: d.children().outerWidth(), zIndex: 0, display: \"none\" }), d.css({ position: \"relative\", width: f * 3, height: g, left: -f }), a(\".\" + b.container, c).css({ display: \"block\" }), b.autoHeight && (d.children().css({ height: \"auto\" }), d.animate({ height: d.children(\":eq(\" + h + \")\").outerHeight() }, b.autoHeightSpeed));\r\n if (b.preload && d.find(\"img:eq(\" + h + \")\").length) {\r\n a(\".\" + b.container, c).css({ background: \"url(\" + b.preloadImage + \") no-repeat 50% 50%\" });\r\n var z = d.find(\"img:eq(\" + h + \")\").attr(\"src\") + \"?\" + (new Date).getTime();\r\n a(\"img\", c).parent().attr(\"class\") != \"slides_control\" ? t = d.children(\":eq(0)\")[0].tagName.toLowerCase() : t = d.find(\"img:eq(\" + h + \")\"), d.find(\"img:eq(\" + h + \")\").attr(\"src\", z).load(function() { d.find(t + \":eq(\" + h + \")\").fadeIn(b.fadeSpeed, b.fadeEasing, function() { a(this).css({ zIndex: 5 }), a(\".\" + b.container, c).css({ background: \"\" }), o = !0, b.slidesLoaded() }) })\r\n } else d.children(\":eq(\" + h + \")\").fadeIn(b.fadeSpeed, b.fadeEasing, function() { o = !0, b.slidesLoaded() });\r\n b.bigTarget && (d.children().css({ cursor: \"pointer\" }), d.children().click(function() { return w(\"next\", i), !1 })), b.hoverPause && b.play && (d.bind(\"mouseover\", function() { x() }), d.bind(\"mouseleave\", function() { y() })), b.generateNextPrev && (a(\".\" + b.container, c).after('Prev'), a(\".\" + b.prev, c).after('Next')), a(\".\" + b.next, c).click(function(a) { a.preventDefault(), b.play && y(), w(\"next\", i) }), a(\".\" + b.prev, c).click(function(a) { a.preventDefault(), b.play && y(), w(\"prev\", i) }), b.generatePagination ? (b.prependPagination ? c.prepend(\"\") : c.append(\"\"), d.children().each(function() { a(\".\" + b.paginationClass, c).append('
  • ' + (m + 1) + \"
  • \"), m++ })) : a(\".\" + b.paginationClass + \" li a\", c).each(function() { a(this).attr(\"href\", \"#\" + m), m++ }), a(\".\" + b.paginationClass + \" li:eq(\" + h + \")\", c).addClass(b.currentClass), a(\".\" + b.paginationClass + \" li a\", c).click(function() { return b.play && y(), q = a(this).attr(\"href\").match(\"[^#/]+$\"), n != q && w(\"pagination\", j, q), !1 }), a(\"a.link\", c).click(function() { return b.play && y(), q = a(this).attr(\"href\").match(\"[^#/]+$\") - 1, n != q && w(\"pagination\", j, q), !1 }), b.play && (v = setInterval(function() { w(\"next\", i) }, b.play), c.data(\"interval\", v))\r\n })\r\n }, a.fn.slides.option = { preload: !1, preloadImage: \"\", container: \"slides_container\", generateNextPrev: !1, next: \"next\", prev: \"prev\", pagination: !0, generatePagination: !0, prependPagination: !1, paginationClass: \"pagination\", currentClass: \"current\", fadeSpeed: 350, fadeEasing: \"\", slideSpeed: 350, slideEasing: \"\", start: 1, effect: \"slide\", crossfade: !1, randomize: !1, play: 0, pause: 0, hoverPause: !1, autoHeight: !1, autoHeightSpeed: 350, bigTarget: !1, animationStart: function() {}, animationComplete: function() {}, slidesLoaded: function() {} }, a.fn.randomize = function(b) {\r\n function c() { return Math.round(Math.random()) - .5 }\r\n return a(this).each(function() {\r\n var d = a(this),\r\n e = d.children(),\r\n f = e.length;\r\n if (f > 1) {\r\n e.hide();\r\n var g = [];\r\n for (i = 0; i < f; i++) g[g.length] = i;\r\n g = g.sort(c), a.each(g, function(a, c) {\r\n var f = e.eq(c),\r\n g = f.clone(!0);\r\n g.show().appendTo(d), b !== undefined && b(f, g), f.remove()\r\n })\r\n }\r\n })\r\n }\r\n})(jQuery)\r\n$(document).ready(function() {\r\n\r\n //板块行情\r\n quoteTable(\"//nufm.dfcfw.com/EM_Finance2014NumericApplication/JS.aspx?type=CT&cmd=C.BK07121&sty=FCOIATA&sortType=C&sortRule=-1&page=1&pageSize=12&js=({rank:[(x)],pages:(pc)})&token=3a965a43f705cf1d9ad7e1a3e429d622\");\r\n\r\n $(\".zhdfClick a\").click(function() {\r\n $(\"#quote_table\").empty();\r\n if ($(\".zhdfClick b\").hasClass(\"icon-change-up\")) {\r\n $(\".zhdfClick b\").addClass(\"icon-change-down\").removeClass(\"icon-change-up\");\r\n quoteTable(\"//nufm.dfcfw.com/EM_Finance2014NumericApplication/JS.aspx?type=CT&cmd=C.BK07121&sty=FCOIATA&sortType=C&sortRule=1&page=1&pageSize=12&js=({rank:[(x)],pages:(pc)})&token=3a965a43f705cf1d9ad7e1a3e429d622\");\r\n\r\n } else {\r\n $(\".zhdfClick b\").addClass(\"icon-change-up\").removeClass(\"icon-change-down\");\r\n quoteTable(\"//nufm.dfcfw.com/EM_Finance2014NumericApplication/JS.aspx?type=CT&cmd=C.BK07121&sty=FCOIATA&sortType=C&sortRule=-1&page=1&pageSize=12&js=({rank:[(x)],pages:(pc)})&token=3a965a43f705cf1d9ad7e1a3e429d622\");\r\n }\r\n\r\n })\r\n\r\n\r\n var lgs = $(\".shows_right ul li\").length;\r\n var divs = 0;\r\n var swiperTj = new Swiper('#tujie .swiper-container', {\r\n loop: true,\r\n slidesPerView: 3,\r\n //nextButton: '.swiper-button-next',\r\n //prevButton: '.swiper-button-prev',\r\n autoHeight: true,\r\n autoWidth: true\r\n });\r\n\r\n $('#tujie').on('click', '.arrow-left', function(e) {\r\n e.preventDefault();\r\n swiperTj.swipePrev();\r\n });\r\n $('#tujie').on('click', '.arrow-right', function(e) {\r\n e.preventDefault();\r\n swiperTj.swipeNext();\r\n });\r\n $('#tabDay1').click(function() {\r\n var $this = $(this);\r\n if ($this.hasClass('selected-day')) {\r\n return;\r\n } else {\r\n $this.addClass('selected-day');\r\n $this.removeClass('unselected-day');\r\n $this.siblings().removeClass('selected-day');\r\n $this.siblings().addClass('unselected-day');\r\n $('#tabDayCon1').show();\r\n $('#tabDayCon1').siblings().hide();\r\n }\r\n });\r\n $('#tabDay2').click(function() {\r\n var $this = $(this);\r\n if ($this.hasClass('selected-day')) {\r\n return;\r\n } else {\r\n $this.addClass('selected-day');\r\n $this.removeClass('unselected-day');\r\n $this.siblings().removeClass('selected-day');\r\n $this.siblings().addClass('unselected-day');\r\n $('#tabDayCon2').show();\r\n $('#tabDayCon2').siblings().hide();\r\n }\r\n });\r\n $('#tabDay3').click(function() {\r\n var $this = $(this);\r\n if ($this.hasClass('selected-day')) {\r\n return;\r\n } else {\r\n $this.addClass('selected-day');\r\n $this.removeClass('unselected-day');\r\n $this.siblings().removeClass('selected-day');\r\n $this.siblings().addClass('unselected-day');\r\n $('#tabDayCon3').show();\r\n $('#tabDayCon3').siblings().hide();\r\n }\r\n });\r\n $('#tabDay4').click(function() {\r\n var $this = $(this);\r\n if ($this.hasClass('selected-day')) {\r\n return;\r\n } else {\r\n $this.addClass('selected-day');\r\n $this.removeClass('unselected-day');\r\n $this.siblings().removeClass('selected-day');\r\n $this.siblings().addClass('unselected-day');\r\n $('#tabDayCon4').show();\r\n $('#tabDayCon4').siblings().hide();\r\n }\r\n });\r\n\r\n // 鍒濆鍖栫劍鐐硅瑙�\r\n var swiperFocus = new Swiper('#focus .swiper-container', {\r\n //loop: true,\r\n mode: 'vertical',\r\n slidesPerView: 4,\r\n //nextButton: '.swiper-button-next',\r\n //prevButton: '.swiper-button-prev',\r\n autoHeight: true,\r\n spaceBetween: 10\r\n });\r\n\r\n $('#focus').on('click', '.arrow-left', function(e) {\r\n e.preventDefault();\r\n swiperFocus.swipePrev();\r\n })\r\n $('#focus').on('click', '.arrow-right', function(e) {\r\n e.preventDefault();\r\n swiperFocus.swipeNext();\r\n })\r\n\r\n //var swiperProposal = new Swiper('#proposal .swiper-container', {\r\n // slidesPerView: 1\r\n //});\r\n\r\n //$('#proposal').on('click', '.arrow-left', function (e) {\r\n // e.preventDefault()\r\n // swiperProposal.swipePrev()\r\n //});\r\n //$('#proposal').on('click', '.arrow-right', function (e) {\r\n // e.preventDefault()\r\n // swiperProposal.swipeNext()\r\n //});\r\n\r\n\r\n\r\n $(\"#focus\").on(\"click\", \".swiper-slide\", function() {\r\n var $this = $(this);\r\n if ($this.hasClass(\"active\")) {\r\n return false;\r\n } else {\r\n var title = $this.children(\"img\").attr('title');\r\n $(\"#focus .swiper-slide\").removeClass(\"active\");\r\n $this.addClass(\"active\");\r\n var src = $this.children(\"img\").attr(\"src\");\r\n $(\"#picViewMaster\").children(\"img\").attr(\"src\", src);\r\n $('#showImgText').text(title);\r\n }\r\n });\r\n\r\n //焦点议题\r\n $(\".proposal_right_div \").click(function() {\r\n var class_name = $(this).attr(\"id\");\r\n $(this).addClass(\"cur\").siblings(\".proposal_right_div\").removeClass(\"cur\");\r\n $(\".\" + class_name + \"\").show().siblings(\"li\").hide();\r\n });\r\n\r\n $(\"#day1-1 a\").click(function() {\r\n $(this).addClass(\"bg\").siblings().removeClass(\"bg\");\r\n $(\"#day1 div\").hide();\r\n $(\"#day1 div\").eq($(this).index() - 1).show();\r\n });\r\n $(\"#day1 div\").hide();\r\n $(\"#day1 div\").eq(0).show();\r\n $(\".news-left-cont\").hover(function() {\r\n $(this).addClass(\"bg_e3\");\r\n }, function() {\r\n $(this).removeClass(\"bg_e3\")\r\n });\r\n $(\".index-top div\").hide();\r\n $(\".index-top div\").eq(0).show();\r\n $(\"#p_cg span\").hover(function() {\r\n $(this).addClass(\"cur\").siblings().removeClass(\"cur\");\r\n $(\".index-top div\").stop(true, false).animate({ opacity: 0 }, 500).hide().eq($(this).index()).stop(true, false).animate({ opacity: 1 }, 500).show();\r\n });\r\n\r\n $(\"#his-right .his-div\").hide();\r\n $(\"#his-right .his-div\").eq(0).show();\r\n $(\"#his-ul li a\").hover(function() {\r\n $(this).addClass(\"a-bg\").parent().siblings().children().removeClass(\"a-bg\");\r\n $(this).parent().addClass(\"a-c\").siblings().removeClass(\"a-c\");\r\n $(\"#his-right .his-div\").hide();\r\n $(\"#his-right .his-div\").eq($(this).parent().index()).show();\r\n });\r\n $(\".index-top div\").hide();\r\n $(\".index-top div\").eq(0).show();\r\n $(\"#p_cg span\").hover(function() {\r\n $(this).addClass(\"cur\").siblings().removeClass(\"cur\");\r\n $(\".index-top div\").stop(true, false).animate({ opacity: 0 }, 500).hide().eq($(this).index()).stop(true, false).animate({ opacity: 1 }, 500).show();\r\n });\r\n $(\"#km_fr .fr_kms\").hide();\r\n $(\"#km_fr .fr_kms\").eq(0).show();\r\n $(\".fl_kms a\").hover(function() {\r\n $(this).addClass(\"hv_a\").siblings().removeClass(\"hv_a\");\r\n $(\"#km_fr .fr_kms\").hide();\r\n $(\"#km_fr .fr_kms\").eq($(this).index()).show();\r\n });\r\n $(\".img_ch ul li\").each(function() {\r\n $(this).click(function() {\r\n $(this).addClass(\"acctive\").siblings().removeClass(\"acctive\");\r\n\r\n $(\"#img_ch div\").hide();\r\n $(\"#img_ch div\").eq($(this).index()).show();\r\n });\r\n });\r\n\r\n $(\"#second .mbox0501 ul li\").each(function() {\r\n $(this).click(function() {\r\n $(this).addClass(\"current\").siblings().removeClass(\"current\");\r\n $(\"#second .mbox0502\").children(\"div\").hide();\r\n $(\"#second .mbox0502\").children(\"div\").eq($(this).index()).show();\r\n\r\n });\r\n\r\n });\r\n $(\".tof_l a\").hover(function() {\r\n $(\".img_tof a\").removeClass(\"bl\");\r\n $(this).addClass(\"bl\").siblings().removeClass(\"bl\");\r\n });\r\n $(\".tof_m a\").hover(function() {\r\n $(\".img_tof a\").removeClass(\"bl\");\r\n $(this).addClass(\"bl\").siblings().removeClass(\"bl\");\r\n\r\n });\r\n $(\".tof_r a\").hover(function() {\r\n $(\".img_tof a\").removeClass(\"bl\");\r\n $(this).addClass(\"bl\").siblings().removeClass(\"bl\");\r\n\r\n });\r\n\r\n $(\"#FS_Cont_06 .item\").hover(function() {\r\n $(this).children().find(\".info\").stop(true, false).animate({ top: 0 }, 600)\r\n }, function() {\r\n $(this).children().find(\".info\").stop(true, false).animate({ top: 400 }, 600)\r\n });\r\n $(\".shows_right ul li\").each(function() {\r\n $(this).click(function() {\r\n $(this).addClass(\"actives\").siblings().removeClass(\"actives\");\r\n $(\".show_left div\").eq($(this).index()).addClass(\"blk\").siblings().removeClass(\"blk\");\r\n\r\n });\r\n });\r\n $(\"#down\").click(function() {\r\n\r\n if (mgs + 4 >= lgs) {\r\n return false;\r\n }\r\n mgs++;\r\n $(\".shows_right ul\").stop(true, false).animate({ marginTop: -($(\".shows_right ul li\").height() * mgs + 18) }, 500, function() {\r\n $(\".shows_right ul li\").eq(mgs).addClass(\"actives\").siblings().removeClass(\"actives\");\r\n $(\".show_left div\").eq(mgs).addClass(\"blk\").siblings().removeClass(\"blk\");\r\n });\r\n });\r\n $(\"#up\").click(function() {\r\n\r\n if (mgs + 4 < lgs) {\r\n return false;\r\n }\r\n mgs--;\r\n $(\".shows_right ul\").stop(true, false).animate({ marginTop: ($(\".shows_right ul li\").height() * mgs) }, 500, function() {\r\n $(\".shows_right ul li\").eq(mgs).addClass(\"actives\").siblings().removeClass(\"actives\");\r\n $(\".show_left div\").eq(mgs).addClass(\"blk\").siblings().removeClass(\"blk\");\r\n });\r\n });\r\n $(\"#his-right .his-div\").hide();\r\n $(\"#his-right .his-div\").eq(0).show();\r\n $(\"#his-ul li a\").hover(function() {\r\n $(this).addClass(\"a-bg\").parent().siblings().children().removeClass(\"a-bg\");\r\n $(this).parent().addClass(\"a-c\").siblings().removeClass(\"a-c\");\r\n $(\"#his-right .his-div\").hide();\r\n $(\"#his-right .his-div\").eq($(this).parent().index()).show();\r\n });\r\n get_cg(\"clh3\", \"cg_ul3\", \"li_div3\");\r\n get_cg(\"clh4\", \"cg_ul4\", \"li_div4\");\r\n get_cg(\"clh5\", \"cg_ul5\", \"li_div5\");\r\n get_cg(\"clh6\", \"cg_ul6\", \"li_div6\");\r\n\r\n\r\n\r\n var sWidth = $(\"#focus\").width(); //获取焦点图的宽度(显示面积)\r\n var len = $(\"#focus ul li\").length; //获取焦点图个数\r\n var index = 0;\r\n var picTimer;\r\n\r\n //以下代码添加数字按钮和按钮后的半透明条,还有上一页、下一页两个按钮\r\n var btn = \"
    \";\r\n for (var i = 0; i < len; i++) {\r\n btn += \"\";\r\n }\r\n btn += \"
    \";\r\n $(\"#focus\").append(btn);\r\n $(\"#focus .btnBg\").css(\"opacity\", 0.5);\r\n\r\n //为小按钮添加鼠标滑入事件,以显示相应的内容\r\n $(\"#focus .btn span\").css(\"opacity\", 0.4).mouseover(function() {\r\n index = $(\"#focus .btn span\").index(this);\r\n showPics(index);\r\n }).eq(0).trigger(\"mouseover\");\r\n\r\n //上一页、下一页按钮透明度处理\r\n $(\"#focus .preNext\").css(\"opacity\", 0.2).hover(function() {\r\n $(this).stop(true, false).animate({ \"opacity\": \"0.5\" }, 300);\r\n }, function() {\r\n $(this).stop(true, false).animate({ \"opacity\": \"0.2\" }, 300);\r\n });\r\n\r\n //上一页按钮\r\n $(\"#focus .pre\").click(function() {\r\n index -= 1;\r\n if (index == -1) { index = len - 1; }\r\n showPics(index);\r\n });\r\n\r\n //下一页按钮\r\n $(\"#focus .next\").click(function() {\r\n index += 1;\r\n if (index == len) { index = 0; }\r\n showPics(index);\r\n });\r\n\r\n //本例为左右滚动,即所有li元素都是在同一排向左浮动,所以这里需要计算出外围ul元素的宽度\r\n $(\"#focus ul\").css(\"width\", sWidth * (len));\r\n\r\n //鼠标滑上焦点图时停止自动播放,滑出时开始自动播放\r\n $(\"#focus\").hover(function() {\r\n clearInterval(picTimer);\r\n }, function() {\r\n picTimer = setInterval(function() {\r\n showPics(index);\r\n index++;\r\n if (index == len) { index = 0; }\r\n }, 4000); //此4000代表自动播放的间隔,单位:毫秒\r\n }).trigger(\"mouseleave\");\r\n\r\n //显示图片函数,根据接收的index值显示相应的内容\r\n function showPics(index) { //普通切换\r\n var nowLeft = -index * sWidth; //根据index值计算ul元素的left值\r\n $(\"#focus ul\").stop(true, false).animate({ \"left\": nowLeft }, 300); //通过animate()调整ul元素滚动到计算出的position\r\n //$(\"#focus .btn span\").removeClass(\"on\").eq(index).addClass(\"on\"); //为当前的按钮切换到选中的效果\r\n $(\"#focus .btn span\").stop(true, false).animate({ \"opacity\": \"0.4\" }, 300).eq(index).stop(true, false).animate({ \"opacity\": \"1\" }, 300); //为当前的按钮切换到选中的效果\r\n };\r\n\r\n //论坛花絮\r\n $('#tidbit .pr').mouseover(function() {\r\n $(this).find('.bg').show();\r\n });\r\n $('#tidbit .pr').mouseout(function() {\r\n $(this).find('.bg').hide();\r\n });\r\n\r\n\r\n\r\n});\r\n\r\n\r\n//板块行情html渲染\r\nfunction quoteTable(Url) {\r\n $.ajax({\r\n jsonp: \"cb\",\r\n url: Url,\r\n dataType: \"jsonp\",\r\n success: function(data) {\r\n if (!data.rank || !data.rank.length) return;\r\n var _rank = data.rank;\r\n var Html = \"\";\r\n var arr = [];\r\n for (var i = 0; i < _rank.length; i++) {\r\n arr.push(_rank[i].split(\",\"));\r\n };\r\n for (var i = 0; i < arr.length; i++) {\r\n var xh = Number(i) + 1;\r\n Html += \"\" +\r\n \"\" + xh + \"\" +\r\n \"\" + arr[i][1] + \"\" +\r\n \"\" + arr[i][2] + \"\" +\r\n \"股吧\" +\r\n \"资金流\" +\r\n \"研报\" +\r\n \"\" + arr[i][3] + \"\" +\r\n \"\" + arr[i][4] + \"\" +\r\n \"\" + arr[i][5] + \"\" +\r\n \"\" + arr[i][6] + \"\" +\r\n \"\" + arr[i][7] + \"\" +\r\n \"\" + arr[i][8] + \"\" +\r\n \"\" + arr[i][9] + \"\" +\r\n \"\" + arr[i][10] + \"\" +\r\n \"\" + arr[i][11] + \"\" +\r\n \"\" + arr[i][12] + \"\" +\r\n \"\" + arr[i][21] + \"\" +\r\n \"\";\r\n };\r\n\r\n $(\"#quote_table\").html(Html);\r\n colorTd(\".zhde\");\r\n colorTd(\".zhdf\");\r\n contrast(\".jk\", \".zsh\");\r\n contrast(\".zg\", \".zsh\");\r\n contrast(\".zd\", \".zsh\");\r\n\r\n //为振幅添加百分号\r\n $(\".zhf\").each(function() {\r\n var val = $(this).text();\r\n if (val == \"\" || val == \"-\") {\r\n val = \"-\"\r\n } else {\r\n $(this).text(val + \"%\");\r\n }\r\n });\r\n }\r\n });\r\n}\r\n\r\n\r\n//板块行情判断涨跌额、涨跌幅 最新价的颜色\r\nfunction colorTd(obj) {\r\n $(obj).each(function() {\r\n var text = $(this).text();\r\n if (text == \"\" || text == \"-\") {\r\n return;\r\n } else {\r\n var num = Number(text.replace(\"%\", \"\"));\r\n var zxj = $(this).parents(\"tr\").find(\".zxj\");\r\n if (num > 0) {\r\n $(this).addClass(\"red\").removeClass(\"green\");\r\n zxj.addClass(\"red\").removeClass(\"green\");\r\n } else if (num < 0) {\r\n $(this).addClass(\"green\").removeClass(\"red\");\r\n zxj.addClass(\"green\").removeClass(\"red\");\r\n } else {\r\n $(this).removeClass(\"red green\");\r\n zxj.removeClass(\"red green\");\r\n };\r\n\r\n }\r\n\r\n });\r\n};\r\n\r\n//板块行情判断今开、最高、最低的颜色\r\nfunction contrast(obj1, obj2) {\r\n $(obj1).each(function() {\r\n var text = $(this).text();\r\n if (text == \"\" || text == \"-\") {\r\n return;\r\n } else {\r\n var num_color = Number(text);\r\n var num = Number($(this).parents(\"tr\").find(obj2).html());\r\n if (num_color > num) {\r\n $(this).addClass(\"red\").removeClass(\"green\");\r\n } else if (num_color < num) {\r\n $(this).addClass(\"green\").removeClass(\"red\");\r\n } else {\r\n $(this).removeClass(\"red green\");\r\n };\r\n }\r\n\r\n });\r\n\r\n};\r\n\r\n\r\n\r\nfunction get_cg(a, b, c) {\r\n var lg = $(\"#\" + b + \" li\").length;\r\n var wd = (lg * ($(\"#\" + b + \" li\").innerWidth())) + \"px\";\r\n var div_lic = $(\"#\" + c + \" .li_cont\");\r\n var liwd = $(\"#\" + b + \" li\").innerWidth();\r\n var dv = 0;\r\n $(\"#\" + b + \" li a\").each(function(e) {\r\n $(this).click(function(e) {\r\n div_lic.eq($(this).parent(\"li\").index()).addClass(\"blk\").siblings().removeClass(\"blk\");\r\n $(this).addClass(\"active\").parent(\"li\").siblings().children(\"a\").removeClass(\"active\");\r\n if ($(this).hasClass(\"active\")) {\r\n dv = $(this).parent(\"li\").index();\r\n }\r\n $(\"#\" + a + \" .sj_div\").stop(true, false).animate({ left: $(this).parent(\"li\").position().left + 2 }, 500);\r\n });\r\n });\r\n var il = 0;\r\n $(\"#\" + a + \" .rht\").click(function(e) {\r\n if (il + 3 >= lg) {\r\n return false;\r\n }\r\n il++;\r\n $(\"#\" + b).stop(true, false).animate({ marginLeft: -(liwd * il) }, 500, function() {\r\n if (dv == 0) {\r\n $(\"#\" + b + \" li a\").eq(il).addClass(\"active\").parent(\"li\").siblings().children(\"a\").removeClass(\"active\");\r\n div_lic.eq(il).addClass(\"blk\").siblings().removeClass(\"blk\");\r\n } else {\r\n dv = dv + 1;\r\n div_lic.eq(dv).addClass(\"blk\").siblings().removeClass(\"blk\");\r\n $(\"#\" + b + \" li a\").eq(dv).addClass(\"active\").parent(\"li\").siblings().children(\"a\").removeClass(\"active\");\r\n }\r\n });\r\n });\r\n $(\"#\" + a + \" .lft\").click(function(e) {\r\n if (il == 0 || il <= -1) {\r\n return false;\r\n } else if (il >= lg) {\r\n il = lg - 3;\r\n }\r\n il--;\r\n $(\"#\" + b).stop(true, false).animate({ marginLeft: -(liwd * il) }, 500, function() {\r\n if (dv == 0) {\r\n $(\"#\" + b + \" li a\").eq(il).addClass(\"active\").parent(\"li\").siblings().children(\"a\").removeClass(\"active\");\r\n div_lic.eq(il).addClass(\"blk\").siblings().removeClass(\"blk\");\r\n } else {\r\n dv = dv + -1;\r\n div_lic.eq(dv).addClass(\"blk\").siblings().removeClass(\"blk\");\r\n $(\"#\" + b + \" li a\").eq(dv).addClass(\"active\").parent(\"li\").siblings().children(\"a\").removeClass(\"active\");\r\n }\r\n });\r\n });\r\n}\r\n\r\nfunction show_list(nubs) {\r\n var get_nub = nubs;\r\n $(\".show_list_middle div\").hide();\r\n $(\".show_list_middle div\").eq(get_nub - 1).show();\r\n $(\".show_list_left li\").removeClass(\"active\");\r\n $(\".show_list_left li\").removeClass(\"active2\");\r\n if (nubs > 3) {\r\n $(\".show_list_left li\").eq(get_nub - 1).addClass(\"active2\").siblings().removeClass(\"active2\");\r\n } else {\r\n\r\n $(\".show_list_left li\").eq(get_nub - 1).addClass(\"active\").siblings().removeClass(\"active\");\r\n }\r\n\r\n}\r\n$(\"body\").on(\"click\", \".doom_div\", function() {\r\n //console.log($('.doom_div').index($(this)));\r\n show_list($('.doom_div').index($(this)) + 1)\r\n});\r\n\r\nfunction PlayVideo(_objId, _width, _height, _video) {\r\n // if (jQuery.browser.msie) {\r\n // var _player = \"\";\r\n // jQuery(\"#\" + _objId).children(\"a\").hide();\r\n // jQuery(\"#\" + _objId).html(_player);\r\n // }\r\n // else {\r\n // window.location = \"mms://videosource.eastmoney.com/live\";\r\n // }\r\n // }\r\n var _player = \"\";\r\n //jQuery(\"#\" + _objId).children().hide(); jQuery(\"#\" + _objId).append(\"\")\r\n jQuery(\"#\" + _objId).children().hide();\r\n var ifm = \"\";\r\n jQuery(\"#\" + _objId).html(ifm)\r\n}\r\n$(\"body\").on(\"click\", \"#video\", function() {\r\n PlayVideo('vdo-1', '487', '366', 'http://video.eastmoney.com/flashvideo.swf?id=8550&sts=1&video_title=%E5%8D%9A%E9%B3%8C%E4%BA%9A%E6%B4%B2%E8%AE%BA%E5%9D%9B2013%E5%B9%B4%E4%BC%9A%E4%B9%A0%E8%BF%91%E5%B9%B3%E4%B8%BB%E6%97%A8%E6%BC%94%E8%AE%B2&mm=0.4329834401141852');\r\n});\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nvar iTimer1 = null;\r\nvar iTimer = null;\r\nvar makShow = $('.m_img01');\r\nmakShow.hover(function() {\r\n var titWrap = $(this).find('.m_bgtxt01');\r\n var tit04 = $(this).find('.intr01');\r\n var mask = $(this).find('.m_black01');\r\n iTimer = setTimeout(function() {\r\n tit04.animate({\r\n marginTop: 0,\r\n height: 30\r\n\r\n }, 200);\r\n titWrap.animate({\r\n height: 124\r\n }, 200);\r\n }, 180);\r\n\r\n}, function() {\r\n clearTimeout(iTimer);\r\n var titWrap = $(this).find('.m_bgtxt01');\r\n var tit04 = $(this).find('.intr01');\r\n var mask = $(this).find('.m_black01');\r\n tit04.animate({\r\n marginTop: 0,\r\n height: 30\r\n }, 200);\r\n titWrap.animate({\r\n height: 30\r\n }, 200);\r\n});\r\n$('#slides').slides({\r\n preload: true,\r\n preloadImage: 'img/loading.gif',\r\n play: 5000,\r\n pause: 2500,\r\n hoverPause: false,\r\n animationStart: function(current) {\r\n $('.caption').animate({\r\n bottom: -35\r\n }, 100);\r\n },\r\n animationComplete: function(current) {\r\n $('.caption').animate({\r\n bottom: 0\r\n }, 300);\r\n },\r\n slidesLoaded: function() {\r\n $('.caption').animate({\r\n bottom: 0\r\n }, 300);\r\n }\r\n});\r\n// });\r\n\r\n// });\n\n/***/ })\n/******/ ]);\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgNmY2NGM4ZWZmNTZkODhlOWRiMjk/NGI3ZCIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vYW1kLW9wdGlvbnMuanM/NWY3MSIsIndlYnBhY2s6Ly8vLi9qcy9qemdqLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbURBQTJDLGNBQWM7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7OztBQ2hFQTtBQUNBOzs7Ozs7Ozs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0I7O0FBRXRCLG1CQUFtQjs7QUFFbkIsa0JBQWtCLGVBQWU7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyw0TUFBNE07QUFDL087QUFDQTtBQUNBO0FBQ0E7QUFDQSx5R0FBeUcsbURBQW1EO0FBQzVKO0FBQ0E7QUFDQSxvRkFBb0Ysd0NBQXdDLGdCQUFnQiwyQkFBMkI7QUFDdks7O0FBRUE7QUFDQTtBQUNBLDZCQUE2Qiw2QkFBNkIsWUFBWSxjQUFjO0FBQ3BGLG9DQUFvQyxtREFBbUQsWUFBWSxjQUFjO0FBQ2pIO0FBQ0EsdUJBQXVCLHFCQUFxQjtBQUM1QztBQUNB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VDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7OztBQUlQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxhQUFhLDZEQUE2RCxhQUFhO0FBQzlJLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQsYUFBYSw2REFBNkQsYUFBYTtBQUM5SSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTOztBQUVULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUEsS0FBSzs7QUFFTDtBQUNBLG9FQUFvRSxTQUFTO0FBQzdFLEtBQUs7QUFD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QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMseUdBQXlHO0FBQ3RKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7Ozs7Ozs7QUFVRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7O0FBRUwsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxDQUFDO0FBQ0QsUUFBUTs7QUFFUixJQUFJLEUiLCJmaWxlIjoianpnai5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMik7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgNmY2NGM4ZWZmNTZkODhlOWRiMjkiLCIvKiBnbG9iYWxzIF9fd2VicGFja19hbWRfb3B0aW9uc19fICovXHJcbm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX2FtZF9vcHRpb25zX187XHJcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL2FtZC1vcHRpb25zLmpzXG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwiLypcclxuICogU3dpcGVyIDIuNy4wXHJcbiAqIE1vYmlsZSB0b3VjaCBzbGlkZXIgYW5kIGZyYW1ld29yayB3aXRoIGhhcmR3YXJlIGFjY2VsZXJhdGVkIHRyYW5zaXRpb25zXHJcbiAqXHJcbiAqIGh0dHA6Ly93d3cuaWRhbmdlcm8udXMvc2xpZGVycy9zd2lwZXIvXHJcbiAqXHJcbiAqIENvcHlyaWdodCAyMDEwLTIwMTQsIFZsYWRpbWlyIEtoYXJsYW1waWRpXHJcbiAqIFRoZSBpRGFuZ2Vyby51c1xyXG4gKiBodHRwOi8vd3d3LmlkYW5nZXJvLnVzL1xyXG4gKlxyXG4gKiBMaWNlbnNlZCB1bmRlciBHUEwgJiBNSVRcclxuICpcclxuICogUmVsZWFzZWQgb246IEF1Z3VzdCAzMCwgMjAxNFxyXG4gKi9cclxudmFyIFN3aXBlciA9IGZ1bmN0aW9uKGEsIGIpIHtcclxuICAgIFwidXNlIHN0cmljdFwiO1xyXG5cclxuICAgIGZ1bmN0aW9uIGMoYSwgYikgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCA/IChiIHx8IGRvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKGEpIDogalF1ZXJ5KGEsIGIpIH1cclxuXHJcbiAgICBmdW5jdGlvbiBkKGEpIHsgcmV0dXJuIFwiW29iamVjdCBBcnJheV1cIiA9PT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5hcHBseShhKSA/ICEwIDogITEgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGUoKSB7IHZhciBhID0gRiAtIEk7IHJldHVybiBiLmZyZWVNb2RlICYmIChhID0gRiAtIEkpLCBiLnNsaWRlc1BlclZpZXcgPiBDLnNsaWRlcy5sZW5ndGggJiYgIWIuY2VudGVyZWRTbGlkZXMgJiYgKGEgPSAwKSwgMCA+IGEgJiYgKGEgPSAwKSwgYSB9XHJcblxyXG4gICAgZnVuY3Rpb24gZigpIHtcclxuICAgICAgICBmdW5jdGlvbiBhKGEpIHtcclxuICAgICAgICAgICAgdmFyIGMgPSBuZXcgSW1hZ2U7XHJcbiAgICAgICAgICAgIGMub25sb2FkID0gZnVuY3Rpb24oKSB7IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIEMgJiYgbnVsbCAhPT0gQyAmJiAodm9pZCAwICE9PSBDLmltYWdlc0xvYWRlZCAmJiBDLmltYWdlc0xvYWRlZCsrLCBDLmltYWdlc0xvYWRlZCA9PT0gQy5pbWFnZXNUb0xvYWQubGVuZ3RoICYmIChDLnJlSW5pdCgpLCBiLm9uSW1hZ2VzUmVhZHkgJiYgQy5maXJlQ2FsbGJhY2soYi5vbkltYWdlc1JlYWR5LCBDKSkpIH0sIGMuc3JjID0gYVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZCA9IEMuaC5hZGRFdmVudExpc3RlbmVyLFxyXG4gICAgICAgICAgICBlID0gXCJ3cmFwcGVyXCIgPT09IGIuZXZlbnRUYXJnZXQgPyBDLndyYXBwZXIgOiBDLmNvbnRhaW5lcjtcclxuICAgICAgICBpZiAoQy5icm93c2VyLmllMTAgfHwgQy5icm93c2VyLmllMTEgPyAoZChlLCBDLnRvdWNoRXZlbnRzLnRvdWNoU3RhcnQsIHApLCBkKGRvY3VtZW50LCBDLnRvdWNoRXZlbnRzLnRvdWNoTW92ZSwgcSksIGQoZG9jdW1lbnQsIEMudG91Y2hFdmVudHMudG91Y2hFbmQsIHIpKSA6IChDLnN1cHBvcnQudG91Y2ggJiYgKGQoZSwgXCJ0b3VjaHN0YXJ0XCIsIHApLCBkKGUsIFwidG91Y2htb3ZlXCIsIHEpLCBkKGUsIFwidG91Y2hlbmRcIiwgcikpLCBiLnNpbXVsYXRlVG91Y2ggJiYgKGQoZSwgXCJtb3VzZWRvd25cIiwgcCksIGQoZG9jdW1lbnQsIFwibW91c2Vtb3ZlXCIsIHEpLCBkKGRvY3VtZW50LCBcIm1vdXNldXBcIiwgcikpKSwgYi5hdXRvUmVzaXplICYmIGQod2luZG93LCBcInJlc2l6ZVwiLCBDLnJlc2l6ZUZpeCksIGcoKSwgQy5fd2hlZWxFdmVudCA9ICExLCBiLm1vdXNld2hlZWxDb250cm9sKSB7XHJcbiAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IGRvY3VtZW50Lm9ubW91c2V3aGVlbCAmJiAoQy5fd2hlZWxFdmVudCA9IFwibW91c2V3aGVlbFwiKSwgIUMuX3doZWVsRXZlbnQpIHRyeSB7IG5ldyBXaGVlbEV2ZW50KFwid2hlZWxcIiksIEMuX3doZWVsRXZlbnQgPSBcIndoZWVsXCIgfSBjYXRjaCAoZikge31cclxuICAgICAgICAgICAgQy5fd2hlZWxFdmVudCB8fCAoQy5fd2hlZWxFdmVudCA9IFwiRE9NTW91c2VTY3JvbGxcIiksIEMuX3doZWVsRXZlbnQgJiYgZChDLmNvbnRhaW5lciwgQy5fd2hlZWxFdmVudCwgailcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGIua2V5Ym9hcmRDb250cm9sICYmIGQoZG9jdW1lbnQsIFwia2V5ZG93blwiLCBpKSwgYi51cGRhdGVPbkltYWdlc1JlYWR5KSB7IEMuaW1hZ2VzVG9Mb2FkID0gYyhcImltZ1wiLCBDLmNvbnRhaW5lcik7IGZvciAodmFyIGggPSAwOyBoIDwgQy5pbWFnZXNUb0xvYWQubGVuZ3RoOyBoKyspIGEoQy5pbWFnZXNUb0xvYWRbaF0uZ2V0QXR0cmlidXRlKFwic3JjXCIpKSB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gZygpIHtcclxuICAgICAgICB2YXIgYSwgZCA9IEMuaC5hZGRFdmVudExpc3RlbmVyO1xyXG4gICAgICAgIGlmIChiLnByZXZlbnRMaW5rcykgeyB2YXIgZSA9IGMoXCJhXCIsIEMuY29udGFpbmVyKTsgZm9yIChhID0gMDsgYSA8IGUubGVuZ3RoOyBhKyspIGQoZVthXSwgXCJjbGlja1wiLCBuKSB9XHJcbiAgICAgICAgaWYgKGIucmVsZWFzZUZvcm1FbGVtZW50cykgeyB2YXIgZiA9IGMoXCJpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdFwiLCBDLmNvbnRhaW5lcik7IGZvciAoYSA9IDA7IGEgPCBmLmxlbmd0aDsgYSsrKSBkKGZbYV0sIEMudG91Y2hFdmVudHMudG91Y2hTdGFydCwgbywgITApIH1cclxuICAgICAgICBpZiAoYi5vblNsaWRlQ2xpY2spXHJcbiAgICAgICAgICAgIGZvciAoYSA9IDA7IGEgPCBDLnNsaWRlcy5sZW5ndGg7IGErKykgZChDLnNsaWRlc1thXSwgXCJjbGlja1wiLCBrKTtcclxuICAgICAgICBpZiAoYi5vblNsaWRlVG91Y2gpXHJcbiAgICAgICAgICAgIGZvciAoYSA9IDA7IGEgPCBDLnNsaWRlcy5sZW5ndGg7IGErKykgZChDLnNsaWRlc1thXSwgQy50b3VjaEV2ZW50cy50b3VjaFN0YXJ0LCBsKVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGgoKSB7XHJcbiAgICAgICAgdmFyIGEsIGQgPSBDLmgucmVtb3ZlRXZlbnRMaXN0ZW5lcjtcclxuICAgICAgICBpZiAoYi5vblNsaWRlQ2xpY2spXHJcbiAgICAgICAgICAgIGZvciAoYSA9IDA7IGEgPCBDLnNsaWRlcy5sZW5ndGg7IGErKykgZChDLnNsaWRlc1thXSwgXCJjbGlja1wiLCBrKTtcclxuICAgICAgICBpZiAoYi5vblNsaWRlVG91Y2gpXHJcbiAgICAgICAgICAgIGZvciAoYSA9IDA7IGEgPCBDLnNsaWRlcy5sZW5ndGg7IGErKykgZChDLnNsaWRlc1thXSwgQy50b3VjaEV2ZW50cy50b3VjaFN0YXJ0LCBsKTtcclxuICAgICAgICBpZiAoYi5yZWxlYXNlRm9ybUVsZW1lbnRzKSB7IHZhciBlID0gYyhcImlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0XCIsIEMuY29udGFpbmVyKTsgZm9yIChhID0gMDsgYSA8IGUubGVuZ3RoOyBhKyspIGQoZVthXSwgQy50b3VjaEV2ZW50cy50b3VjaFN0YXJ0LCBvLCAhMCkgfVxyXG4gICAgICAgIGlmIChiLnByZXZlbnRMaW5rcykgeyB2YXIgZiA9IGMoXCJhXCIsIEMuY29udGFpbmVyKTsgZm9yIChhID0gMDsgYSA8IGYubGVuZ3RoOyBhKyspIGQoZlthXSwgXCJjbGlja1wiLCBuKSB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaShhKSB7XHJcbiAgICAgICAgdmFyIGIgPSBhLmtleUNvZGUgfHwgYS5jaGFyQ29kZTtcclxuICAgICAgICBpZiAoIShhLnNoaWZ0S2V5IHx8IGEuYWx0S2V5IHx8IGEuY3RybEtleSB8fCBhLm1ldGFLZXkpKSB7XHJcbiAgICAgICAgICAgIGlmICgzNyA9PT0gYiB8fCAzOSA9PT0gYiB8fCAzOCA9PT0gYiB8fCA0MCA9PT0gYikge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYyA9ICExLCBkID0gQy5oLmdldE9mZnNldChDLmNvbnRhaW5lciksIGUgPSBDLmgud2luZG93U2Nyb2xsKCkubGVmdCwgZiA9IEMuaC53aW5kb3dTY3JvbGwoKS50b3AsIGcgPSBDLmgud2luZG93V2lkdGgoKSwgaCA9IEMuaC53aW5kb3dIZWlnaHQoKSwgaSA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2QubGVmdCwgZC50b3BdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZC5sZWZ0ICsgQy53aWR0aCwgZC50b3BdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZC5sZWZ0LCBkLnRvcCArIEMuaGVpZ2h0XSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2QubGVmdCArIEMud2lkdGgsIGQudG9wICsgQy5oZWlnaHRdXHJcbiAgICAgICAgICAgICAgICAgICAgXSwgaiA9IDA7IGogPCBpLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGsgPSBpW2pdO1xyXG4gICAgICAgICAgICAgICAgICAgIGtbMF0gPj0gZSAmJiBrWzBdIDw9IGUgKyBnICYmIGtbMV0gPj0gZiAmJiBrWzFdIDw9IGYgKyBoICYmIChjID0gITApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWMpIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIE0gPyAoKDM3ID09PSBiIHx8IDM5ID09PSBiKSAmJiAoYS5wcmV2ZW50RGVmYXVsdCA/IGEucHJldmVudERlZmF1bHQoKSA6IGEucmV0dXJuVmFsdWUgPSAhMSksIDM5ID09PSBiICYmIEMuc3dpcGVOZXh0KCksIDM3ID09PSBiICYmIEMuc3dpcGVQcmV2KCkpIDogKCgzOCA9PT0gYiB8fCA0MCA9PT0gYikgJiYgKGEucHJldmVudERlZmF1bHQgPyBhLnByZXZlbnREZWZhdWx0KCkgOiBhLnJldHVyblZhbHVlID0gITEpLCA0MCA9PT0gYiAmJiBDLnN3aXBlTmV4dCgpLCAzOCA9PT0gYiAmJiBDLnN3aXBlUHJldigpKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBqKGEpIHtcclxuICAgICAgICB2YXIgYyA9IEMuX3doZWVsRXZlbnQsXHJcbiAgICAgICAgICAgIGQgPSAwO1xyXG4gICAgICAgIGlmIChhLmRldGFpbCkgZCA9IC1hLmRldGFpbDtcclxuICAgICAgICBlbHNlIGlmIChcIm1vdXNld2hlZWxcIiA9PT0gYylcclxuICAgICAgICAgICAgaWYgKGIubW91c2V3aGVlbENvbnRyb2xGb3JjZVRvQXhpcylcclxuICAgICAgICAgICAgICAgIGlmIChNKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoTWF0aC5hYnMoYS53aGVlbERlbHRhWCkgPiBNYXRoLmFicyhhLndoZWVsRGVsdGFZKSkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBkID0gYS53aGVlbERlbHRhWFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIShNYXRoLmFicyhhLndoZWVsRGVsdGFZKSA+IE1hdGguYWJzKGEud2hlZWxEZWx0YVgpKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIGQgPSBhLndoZWVsRGVsdGFZXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBkID0gYS53aGVlbERlbHRhO1xyXG4gICAgICAgIGVsc2UgaWYgKFwiRE9NTW91c2VTY3JvbGxcIiA9PT0gYykgZCA9IC1hLmRldGFpbDtcclxuICAgICAgICBlbHNlIGlmIChcIndoZWVsXCIgPT09IGMpXHJcbiAgICAgICAgICAgIGlmIChiLm1vdXNld2hlZWxDb250cm9sRm9yY2VUb0F4aXMpXHJcbiAgICAgICAgICAgICAgICBpZiAoTSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKE1hdGguYWJzKGEuZGVsdGFYKSA+IE1hdGguYWJzKGEuZGVsdGFZKSkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBkID0gLWEuZGVsdGFYXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKE1hdGguYWJzKGEuZGVsdGFZKSA+IE1hdGguYWJzKGEuZGVsdGFYKSkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBkID0gLWEuZGVsdGFZXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBkID0gTWF0aC5hYnMoYS5kZWx0YVgpID4gTWF0aC5hYnMoYS5kZWx0YVkpID8gLWEuZGVsdGFYIDogLWEuZGVsdGFZO1xyXG4gICAgICAgIGlmIChiLmZyZWVNb2RlKSB7IHZhciBmID0gQy5nZXRXcmFwcGVyVHJhbnNsYXRlKCkgKyBkOyBpZiAoZiA+IDAgJiYgKGYgPSAwKSwgZiA8IC1lKCkgJiYgKGYgPSAtZSgpKSwgQy5zZXRXcmFwcGVyVHJhbnNpdGlvbigwKSwgQy5zZXRXcmFwcGVyVHJhbnNsYXRlKGYpLCBDLnVwZGF0ZUFjdGl2ZVNsaWRlKGYpLCAwID09PSBmIHx8IGYgPT09IC1lKCkpIHJldHVybiB9IGVsc2UobmV3IERhdGUpLmdldFRpbWUoKSAtIFUgPiA2MCAmJiAoMCA+IGQgPyBDLnN3aXBlTmV4dCgpIDogQy5zd2lwZVByZXYoKSksIFUgPSAobmV3IERhdGUpLmdldFRpbWUoKTtcclxuICAgICAgICByZXR1cm4gYi5hdXRvcGxheSAmJiBDLnN0b3BBdXRvcGxheSghMCksIGEucHJldmVudERlZmF1bHQgPyBhLnByZXZlbnREZWZhdWx0KCkgOiBhLnJldHVyblZhbHVlID0gITEsICExXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gayhhKSB7IEMuYWxsb3dTbGlkZUNsaWNrICYmIChtKGEpLCBDLmZpcmVDYWxsYmFjayhiLm9uU2xpZGVDbGljaywgQywgYSkpIH1cclxuXHJcbiAgICBmdW5jdGlvbiBsKGEpIHsgbShhKSwgQy5maXJlQ2FsbGJhY2soYi5vblNsaWRlVG91Y2gsIEMsIGEpIH1cclxuXHJcbiAgICBmdW5jdGlvbiBtKGEpIHtcclxuICAgICAgICBpZiAoYS5jdXJyZW50VGFyZ2V0KSBDLmNsaWNrZWRTbGlkZSA9IGEuY3VycmVudFRhcmdldDtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGMgPSBhLnNyY0VsZW1lbnQ7XHJcbiAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgIGlmIChjLmNsYXNzTmFtZS5pbmRleE9mKGIuc2xpZGVDbGFzcykgPiAtMSkgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjID0gYy5wYXJlbnROb2RlXHJcbiAgICAgICAgICAgIH0gd2hpbGUgKGMpO1xyXG4gICAgICAgICAgICBDLmNsaWNrZWRTbGlkZSA9IGNcclxuICAgICAgICB9XHJcbiAgICAgICAgQy5jbGlja2VkU2xpZGVJbmRleCA9IEMuc2xpZGVzLmluZGV4T2YoQy5jbGlja2VkU2xpZGUpLCBDLmNsaWNrZWRTbGlkZUxvb3BJbmRleCA9IEMuY2xpY2tlZFNsaWRlSW5kZXggLSAoQy5sb29wZWRTbGlkZXMgfHwgMClcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBuKGEpIHsgcmV0dXJuIEMuYWxsb3dMaW5rcyA/IHZvaWQgMCA6IChhLnByZXZlbnREZWZhdWx0ID8gYS5wcmV2ZW50RGVmYXVsdCgpIDogYS5yZXR1cm5WYWx1ZSA9ICExLCBiLnByZXZlbnRMaW5rc1Byb3BhZ2F0aW9uICYmIFwic3RvcFByb3BhZ2F0aW9uXCIgaW4gYSAmJiBhLnN0b3BQcm9wYWdhdGlvbigpLCAhMSkgfVxyXG5cclxuICAgIGZ1bmN0aW9uIG8oYSkgeyByZXR1cm4gYS5zdG9wUHJvcGFnYXRpb24gPyBhLnN0b3BQcm9wYWdhdGlvbigpIDogYS5yZXR1cm5WYWx1ZSA9ICExLCAhMSB9XHJcblxyXG4gICAgZnVuY3Rpb24gcChhKSB7XHJcbiAgICAgICAgaWYgKGIucHJldmVudExpbmtzICYmIChDLmFsbG93TGlua3MgPSAhMCksIEMuaXNUb3VjaGVkIHx8IGIub25seUV4dGVybmFsKSByZXR1cm4gITE7XHJcbiAgICAgICAgdmFyIGMgPSBhLnRhcmdldCB8fCBhLnNyY0VsZW1lbnQ7XHJcbiAgICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBjICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG4gICAgICAgIHZhciBkID0gXCJpbnB1dCBzZWxlY3QgdGV4dGFyZWFcIi5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgaWYgKGIubm9Td2lwaW5nICYmIGMgJiYgcyhjKSkgcmV0dXJuICExO1xyXG4gICAgICAgIGlmICgkID0gITEsIEMuaXNUb3VjaGVkID0gITAsIFogPSBcInRvdWNoc3RhcnRcIiA9PT0gYS50eXBlLCAhWiAmJiBcIndoaWNoXCIgaW4gYSAmJiAzID09PSBhLndoaWNoKSByZXR1cm4gITE7XHJcbiAgICAgICAgaWYgKCFaIHx8IDEgPT09IGEudGFyZ2V0VG91Y2hlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgQy5jYWxsUGx1Z2lucyhcIm9uVG91Y2hTdGFydEJlZ2luXCIpLCAhWiAmJiAhQy5pc0FuZHJvaWQgJiYgZC5pbmRleE9mKGMudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSA8IDAgJiYgKGEucHJldmVudERlZmF1bHQgPyBhLnByZXZlbnREZWZhdWx0KCkgOiBhLnJldHVyblZhbHVlID0gITEpO1xyXG4gICAgICAgICAgICB2YXIgZSA9IFogPyBhLnRhcmdldFRvdWNoZXNbMF0ucGFnZVggOiBhLnBhZ2VYIHx8IGEuY2xpZW50WCxcclxuICAgICAgICAgICAgICAgIGYgPSBaID8gYS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VZIDogYS5wYWdlWSB8fCBhLmNsaWVudFk7XHJcbiAgICAgICAgICAgIEMudG91Y2hlcy5zdGFydFggPSBDLnRvdWNoZXMuY3VycmVudFggPSBlLCBDLnRvdWNoZXMuc3RhcnRZID0gQy50b3VjaGVzLmN1cnJlbnRZID0gZiwgQy50b3VjaGVzLnN0YXJ0ID0gQy50b3VjaGVzLmN1cnJlbnQgPSBNID8gZSA6IGYsIEMuc2V0V3JhcHBlclRyYW5zaXRpb24oMCksIEMucG9zaXRpb25zLnN0YXJ0ID0gQy5wb3NpdGlvbnMuY3VycmVudCA9IEMuZ2V0V3JhcHBlclRyYW5zbGF0ZSgpLCBDLnNldFdyYXBwZXJUcmFuc2xhdGUoQy5wb3NpdGlvbnMuc3RhcnQpLCBDLnRpbWVzLnN0YXJ0ID0gKG5ldyBEYXRlKS5nZXRUaW1lKCksIEggPSB2b2lkIDAsIGIubW92ZVN0YXJ0VGhyZXNob2xkID4gMCAmJiAoVyA9ICExKSwgYi5vblRvdWNoU3RhcnQgJiYgQy5maXJlQ2FsbGJhY2soYi5vblRvdWNoU3RhcnQsIEMsIGEpLCBDLmNhbGxQbHVnaW5zKFwib25Ub3VjaFN0YXJ0RW5kXCIpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHEoYSkge1xyXG4gICAgICAgIGlmIChDLmlzVG91Y2hlZCAmJiAhYi5vbmx5RXh0ZXJuYWwgJiYgKCFaIHx8IFwibW91c2Vtb3ZlXCIgIT09IGEudHlwZSkpIHtcclxuICAgICAgICAgICAgdmFyIGMgPSBaID8gYS50YXJnZXRUb3VjaGVzWzBdLnBhZ2VYIDogYS5wYWdlWCB8fCBhLmNsaWVudFgsXHJcbiAgICAgICAgICAgICAgICBkID0gWiA/IGEudGFyZ2V0VG91Y2hlc1swXS5wYWdlWSA6IGEucGFnZVkgfHwgYS5jbGllbnRZO1xyXG4gICAgICAgICAgICBpZiAoXCJ1bmRlZmluZWRcIiA9PSB0eXBlb2YgSCAmJiBNICYmIChIID0gISEoSCB8fCBNYXRoLmFicyhkIC0gQy50b3VjaGVzLnN0YXJ0WSkgPiBNYXRoLmFicyhjIC0gQy50b3VjaGVzLnN0YXJ0WCkpKSwgXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgSCB8fCBNIHx8IChIID0gISEoSCB8fCBNYXRoLmFicyhkIC0gQy50b3VjaGVzLnN0YXJ0WSkgPCBNYXRoLmFicyhjIC0gQy50b3VjaGVzLnN0YXJ0WCkpKSwgSCkgcmV0dXJuIHZvaWQoQy5pc1RvdWNoZWQgPSAhMSk7XHJcbiAgICAgICAgICAgIGlmIChNKSB7IGlmICghYi5zd2lwZVRvTmV4dCAmJiBjIDwgQy50b3VjaGVzLnN0YXJ0WCB8fCAhYi5zd2lwZVRvUHJldiAmJiBjID4gQy50b3VjaGVzLnN0YXJ0WCkgcmV0dXJuIH0gZWxzZSBpZiAoIWIuc3dpcGVUb05leHQgJiYgZCA8IEMudG91Y2hlcy5zdGFydFkgfHwgIWIuc3dpcGVUb1ByZXYgJiYgZCA+IEMudG91Y2hlcy5zdGFydFkpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKGEuYXNzaWduZWRUb1N3aXBlcikgcmV0dXJuIHZvaWQoQy5pc1RvdWNoZWQgPSAhMSk7XHJcbiAgICAgICAgICAgIGlmIChhLmFzc2lnbmVkVG9Td2lwZXIgPSAhMCwgYi5wcmV2ZW50TGlua3MgJiYgKEMuYWxsb3dMaW5rcyA9ICExKSwgYi5vblNsaWRlQ2xpY2sgJiYgKEMuYWxsb3dTbGlkZUNsaWNrID0gITEpLCBiLmF1dG9wbGF5ICYmIEMuc3RvcEF1dG9wbGF5KCEwKSwgIVogfHwgMSA9PT0gYS50b3VjaGVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKEMuaXNNb3ZlZCB8fCAoQy5jYWxsUGx1Z2lucyhcIm9uVG91Y2hNb3ZlU3RhcnRcIiksIGIubG9vcCAmJiAoQy5maXhMb29wKCksIEMucG9zaXRpb25zLnN0YXJ0ID0gQy5nZXRXcmFwcGVyVHJhbnNsYXRlKCkpLCBiLm9uVG91Y2hNb3ZlU3RhcnQgJiYgQy5maXJlQ2FsbGJhY2soYi5vblRvdWNoTW92ZVN0YXJ0LCBDKSksIEMuaXNNb3ZlZCA9ICEwLCBhLnByZXZlbnREZWZhdWx0ID8gYS5wcmV2ZW50RGVmYXVsdCgpIDogYS5yZXR1cm5WYWx1ZSA9ICExLCBDLnRvdWNoZXMuY3VycmVudCA9IE0gPyBjIDogZCwgQy5wb3NpdGlvbnMuY3VycmVudCA9IChDLnRvdWNoZXMuY3VycmVudCAtIEMudG91Y2hlcy5zdGFydCkgKiBiLnRvdWNoUmF0aW8gKyBDLnBvc2l0aW9ucy5zdGFydCwgQy5wb3NpdGlvbnMuY3VycmVudCA+IDAgJiYgYi5vblJlc2lzdGFuY2VCZWZvcmUgJiYgQy5maXJlQ2FsbGJhY2soYi5vblJlc2lzdGFuY2VCZWZvcmUsIEMsIEMucG9zaXRpb25zLmN1cnJlbnQpLCBDLnBvc2l0aW9ucy5jdXJyZW50IDwgLWUoKSAmJiBiLm9uUmVzaXN0YW5jZUFmdGVyICYmIEMuZmlyZUNhbGxiYWNrKGIub25SZXNpc3RhbmNlQWZ0ZXIsIEMsIE1hdGguYWJzKEMucG9zaXRpb25zLmN1cnJlbnQgKyBlKCkpKSwgYi5yZXNpc3RhbmNlICYmIFwiMTAwJVwiICE9PSBiLnJlc2lzdGFuY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoQy5wb3NpdGlvbnMuY3VycmVudCA+IDAgJiYgKGYgPSAxIC0gQy5wb3NpdGlvbnMuY3VycmVudCAvIEkgLyAyLCBDLnBvc2l0aW9ucy5jdXJyZW50ID0gLjUgPiBmID8gSSAvIDIgOiBDLnBvc2l0aW9ucy5jdXJyZW50ICogZiksIEMucG9zaXRpb25zLmN1cnJlbnQgPCAtZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnID0gKEMudG91Y2hlcy5jdXJyZW50IC0gQy50b3VjaGVzLnN0YXJ0KSAqIGIudG91Y2hSYXRpbyArIChlKCkgKyBDLnBvc2l0aW9ucy5zdGFydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGYgPSAoSSArIGcpIC8gSTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGggPSBDLnBvc2l0aW9ucy5jdXJyZW50IC0gZyAqICgxIC0gZikgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IC1lKCkgLSBJIC8gMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQy5wb3NpdGlvbnMuY3VycmVudCA9IGkgPiBoIHx8IDAgPj0gZiA/IGkgOiBoXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGIucmVzaXN0YW5jZSAmJiBcIjEwMCVcIiA9PT0gYi5yZXNpc3RhbmNlICYmIChDLnBvc2l0aW9ucy5jdXJyZW50ID4gMCAmJiAoIWIuZnJlZU1vZGUgfHwgYi5mcmVlTW9kZUZsdWlkKSAmJiAoQy5wb3NpdGlvbnMuY3VycmVudCA9IDApLCBDLnBvc2l0aW9ucy5jdXJyZW50IDwgLWUoKSAmJiAoIWIuZnJlZU1vZGUgfHwgYi5mcmVlTW9kZUZsdWlkKSAmJiAoQy5wb3NpdGlvbnMuY3VycmVudCA9IC1lKCkpKSwgIWIuZm9sbG93RmluZ2VyKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBpZiAoYi5tb3ZlU3RhcnRUaHJlc2hvbGQpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKEMudG91Y2hlcy5jdXJyZW50IC0gQy50b3VjaGVzLnN0YXJ0KSA+IGIubW92ZVN0YXJ0VGhyZXNob2xkIHx8IFcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFXKSByZXR1cm4gVyA9ICEwLCB2b2lkKEMudG91Y2hlcy5zdGFydCA9IEMudG91Y2hlcy5jdXJyZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQy5zZXRXcmFwcGVyVHJhbnNsYXRlKEMucG9zaXRpb25zLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIEMucG9zaXRpb25zLmN1cnJlbnQgPSBDLnBvc2l0aW9ucy5zdGFydDtcclxuICAgICAgICAgICAgICAgIGVsc2UgQy5zZXRXcmFwcGVyVHJhbnNsYXRlKEMucG9zaXRpb25zLmN1cnJlbnQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChiLmZyZWVNb2RlIHx8IGIud2F0Y2hBY3RpdmVJbmRleCkgJiYgQy51cGRhdGVBY3RpdmVTbGlkZShDLnBvc2l0aW9ucy5jdXJyZW50KSwgYi5ncmFiQ3Vyc29yICYmIChDLmNvbnRhaW5lci5zdHlsZS5jdXJzb3IgPSBcIm1vdmVcIiwgQy5jb250YWluZXIuc3R5bGUuY3Vyc29yID0gXCJncmFiYmluZ1wiLCBDLmNvbnRhaW5lci5zdHlsZS5jdXJzb3IgPSBcIi1tb3otZ3JhYmJpblwiLCBDLmNvbnRhaW5lci5zdHlsZS5jdXJzb3IgPSBcIi13ZWJraXQtZ3JhYmJpbmdcIiksIFggfHwgKFggPSBDLnRvdWNoZXMuY3VycmVudCksIFkgfHwgKFkgPSAobmV3IERhdGUpLmdldFRpbWUoKSksIEMudmVsb2NpdHkgPSAoQy50b3VjaGVzLmN1cnJlbnQgLSBYKSAvICgobmV3IERhdGUpLmdldFRpbWUoKSAtIFkpIC8gMiwgTWF0aC5hYnMoQy50b3VjaGVzLmN1cnJlbnQgLSBYKSA8IDIgJiYgKEMudmVsb2NpdHkgPSAwKSwgWCA9IEMudG91Y2hlcy5jdXJyZW50LCBZID0gKG5ldyBEYXRlKS5nZXRUaW1lKCksIEMuY2FsbFBsdWdpbnMoXCJvblRvdWNoTW92ZUVuZFwiKSwgYi5vblRvdWNoTW92ZSAmJiBDLmZpcmVDYWxsYmFjayhiLm9uVG91Y2hNb3ZlLCBDLCBhKSwgITFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByKGEpIHtcclxuICAgICAgICBpZiAoSCAmJiBDLnN3aXBlUmVzZXQoKSwgIWIub25seUV4dGVybmFsICYmIEMuaXNUb3VjaGVkKSB7XHJcbiAgICAgICAgICAgIEMuaXNUb3VjaGVkID0gITEsIGIuZ3JhYkN1cnNvciAmJiAoQy5jb250YWluZXIuc3R5bGUuY3Vyc29yID0gXCJtb3ZlXCIsIEMuY29udGFpbmVyLnN0eWxlLmN1cnNvciA9IFwiZ3JhYlwiLCBDLmNvbnRhaW5lci5zdHlsZS5jdXJzb3IgPSBcIi1tb3otZ3JhYlwiLCBDLmNvbnRhaW5lci5zdHlsZS5jdXJzb3IgPSBcIi13ZWJraXQtZ3JhYlwiKSwgQy5wb3NpdGlvbnMuY3VycmVudCB8fCAwID09PSBDLnBvc2l0aW9ucy5jdXJyZW50IHx8IChDLnBvc2l0aW9ucy5jdXJyZW50ID0gQy5wb3NpdGlvbnMuc3RhcnQpLCBiLmZvbGxvd0ZpbmdlciAmJiBDLnNldFdyYXBwZXJUcmFuc2xhdGUoQy5wb3NpdGlvbnMuY3VycmVudCksIEMudGltZXMuZW5kID0gKG5ldyBEYXRlKS5nZXRUaW1lKCksIEMudG91Y2hlcy5kaWZmID0gQy50b3VjaGVzLmN1cnJlbnQgLSBDLnRvdWNoZXMuc3RhcnQsIEMudG91Y2hlcy5hYnMgPSBNYXRoLmFicyhDLnRvdWNoZXMuZGlmZiksIEMucG9zaXRpb25zLmRpZmYgPSBDLnBvc2l0aW9ucy5jdXJyZW50IC0gQy5wb3NpdGlvbnMuc3RhcnQsIEMucG9zaXRpb25zLmFicyA9IE1hdGguYWJzKEMucG9zaXRpb25zLmRpZmYpO1xyXG4gICAgICAgICAgICB2YXIgYyA9IEMucG9zaXRpb25zLmRpZmYsXHJcbiAgICAgICAgICAgICAgICBkID0gQy5wb3NpdGlvbnMuYWJzLFxyXG4gICAgICAgICAgICAgICAgZiA9IEMudGltZXMuZW5kIC0gQy50aW1lcy5zdGFydDtcclxuICAgICAgICAgICAgNSA+IGQgJiYgMzAwID4gZiAmJiBDLmFsbG93TGlua3MgPT09ICExICYmIChiLmZyZWVNb2RlIHx8IDAgPT09IGQgfHwgQy5zd2lwZVJlc2V0KCksIGIucHJldmVudExpbmtzICYmIChDLmFsbG93TGlua3MgPSAhMCksIGIub25TbGlkZUNsaWNrICYmIChDLmFsbG93U2xpZGVDbGljayA9ICEwKSksIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIEMgJiYgbnVsbCAhPT0gQyAmJiAoYi5wcmV2ZW50TGlua3MgJiYgKEMuYWxsb3dMaW5rcyA9ICEwKSwgYi5vblNsaWRlQ2xpY2sgJiYgKEMuYWxsb3dTbGlkZUNsaWNrID0gITApKSB9LCAxMDApO1xyXG4gICAgICAgICAgICB2YXIgZyA9IGUoKTtcclxuICAgICAgICAgICAgaWYgKCFDLmlzTW92ZWQgJiYgYi5mcmVlTW9kZSkgcmV0dXJuIEMuaXNNb3ZlZCA9ICExLCBiLm9uVG91Y2hFbmQgJiYgQy5maXJlQ2FsbGJhY2soYi5vblRvdWNoRW5kLCBDLCBhKSwgdm9pZCBDLmNhbGxQbHVnaW5zKFwib25Ub3VjaEVuZFwiKTtcclxuICAgICAgICAgICAgaWYgKCFDLmlzTW92ZWQgfHwgQy5wb3NpdGlvbnMuY3VycmVudCA+IDAgfHwgQy5wb3NpdGlvbnMuY3VycmVudCA8IC1nKSByZXR1cm4gQy5zd2lwZVJlc2V0KCksIGIub25Ub3VjaEVuZCAmJiBDLmZpcmVDYWxsYmFjayhiLm9uVG91Y2hFbmQsIEMsIGEpLCB2b2lkIEMuY2FsbFBsdWdpbnMoXCJvblRvdWNoRW5kXCIpO1xyXG4gICAgICAgICAgICBpZiAoQy5pc01vdmVkID0gITEsIGIuZnJlZU1vZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChiLmZyZWVNb2RlRmx1aWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaCwgaSA9IDFlMyAqIGIubW9tZW50dW1SYXRpbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaiA9IEMudmVsb2NpdHkgKiBpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrID0gQy5wb3NpdGlvbnMuY3VycmVudCArIGosXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAhMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbSA9IDIwICogTWF0aC5hYnMoQy52ZWxvY2l0eSkgKiBiLm1vbWVudHVtQm91bmNlUmF0aW87IC0gZyA+IGsgJiYgKGIubW9tZW50dW1Cb3VuY2UgJiYgQy5zdXBwb3J0LnRyYW5zaXRpb25zID8gKC1tID4gayArIGcgJiYgKGsgPSAtZyAtIG0pLCBoID0gLWcsIGwgPSAhMCwgJCA9ICEwKSA6IGsgPSAtZyksIGsgPiAwICYmIChiLm1vbWVudHVtQm91bmNlICYmIEMuc3VwcG9ydC50cmFuc2l0aW9ucyA/IChrID4gbSAmJiAoayA9IG0pLCBoID0gMCwgbCA9ICEwLCAkID0gITApIDogayA9IDApLCAwICE9PSBDLnZlbG9jaXR5ICYmIChpID0gTWF0aC5hYnMoKGsgLSBDLnBvc2l0aW9ucy5jdXJyZW50KSAvIEMudmVsb2NpdHkpKSwgQy5zZXRXcmFwcGVyVHJhbnNsYXRlKGspLCBDLnNldFdyYXBwZXJUcmFuc2l0aW9uKGkpLCBiLm1vbWVudHVtQm91bmNlICYmIGwgJiYgQy53cmFwcGVyVHJhbnNpdGlvbkVuZChmdW5jdGlvbigpIHsgJCAmJiAoYi5vbk1vbWVudHVtQm91bmNlICYmIEMuZmlyZUNhbGxiYWNrKGIub25Nb21lbnR1bUJvdW5jZSwgQyksIEMuY2FsbFBsdWdpbnMoXCJvbk1vbWVudHVtQm91bmNlXCIpLCBDLnNldFdyYXBwZXJUcmFuc2xhdGUoaCksIEMuc2V0V3JhcHBlclRyYW5zaXRpb24oMzAwKSkgfSksIEMudXBkYXRlQWN0aXZlU2xpZGUoaylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAoIWIuZnJlZU1vZGVGbHVpZCB8fCBmID49IDMwMCkgJiYgQy51cGRhdGVBY3RpdmVTbGlkZShDLnBvc2l0aW9ucy5jdXJyZW50KSwgYi5vblRvdWNoRW5kICYmIEMuZmlyZUNhbGxiYWNrKGIub25Ub3VjaEVuZCwgQywgYSksIHZvaWQgQy5jYWxsUGx1Z2lucyhcIm9uVG91Y2hFbmRcIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBHID0gMCA+IGMgPyBcInRvTmV4dFwiIDogXCJ0b1ByZXZcIiwgXCJ0b05leHRcIiA9PT0gRyAmJiAzMDAgPj0gZiAmJiAoMzAgPiBkIHx8ICFiLnNob3J0U3dpcGVzID8gQy5zd2lwZVJlc2V0KCkgOiBDLnN3aXBlTmV4dCghMCkpLCBcInRvUHJldlwiID09PSBHICYmIDMwMCA+PSBmICYmICgzMCA+IGQgfHwgIWIuc2hvcnRTd2lwZXMgPyBDLnN3aXBlUmVzZXQoKSA6IEMuc3dpcGVQcmV2KCEwKSk7XHJcbiAgICAgICAgICAgIHZhciBuID0gMDtcclxuICAgICAgICAgICAgaWYgKFwiYXV0b1wiID09PSBiLnNsaWRlc1BlclZpZXcpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIG8sIHAgPSBNYXRoLmFicyhDLmdldFdyYXBwZXJUcmFuc2xhdGUoKSksIHEgPSAwLCByID0gMDsgciA8IEMuc2xpZGVzLmxlbmd0aDsgcisrKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvID0gTSA/IEMuc2xpZGVzW3JdLmdldFdpZHRoKCEwLCBiLnJvdW5kTGVuZ3RocykgOiBDLnNsaWRlc1tyXS5nZXRIZWlnaHQoITAsIGIucm91bmRMZW5ndGhzKSwgcSArPSBvLCBxID4gcCkgeyBuID0gbzsgYnJlYWsgfVxyXG4gICAgICAgICAgICAgICAgbiA+IEkgJiYgKG4gPSBJKVxyXG4gICAgICAgICAgICB9IGVsc2UgbiA9IEUgKiBiLnNsaWRlc1BlclZpZXc7XHJcbiAgICAgICAgICAgIFwidG9OZXh0XCIgPT09IEcgJiYgZiA+IDMwMCAmJiAoZCA+PSBuICogYi5sb25nU3dpcGVzUmF0aW8gPyBDLnN3aXBlTmV4dCghMCkgOiBDLnN3aXBlUmVzZXQoKSksIFwidG9QcmV2XCIgPT09IEcgJiYgZiA+IDMwMCAmJiAoZCA+PSBuICogYi5sb25nU3dpcGVzUmF0aW8gPyBDLnN3aXBlUHJldighMCkgOiBDLnN3aXBlUmVzZXQoKSksIGIub25Ub3VjaEVuZCAmJiBDLmZpcmVDYWxsYmFjayhiLm9uVG91Y2hFbmQsIEMsIGEpLCBDLmNhbGxQbHVnaW5zKFwib25Ub3VjaEVuZFwiKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBzKGEpIHtcclxuICAgICAgICB2YXIgYyA9ICExO1xyXG4gICAgICAgIGRvIGEuY2xhc3NOYW1lLmluZGV4T2YoYi5ub1N3aXBpbmdDbGFzcykgPiAtMSAmJiAoYyA9ICEwKSwgYSA9IGEucGFyZW50RWxlbWVudDsgd2hpbGUgKCFjICYmIGEucGFyZW50RWxlbWVudCAmJiAtMSA9PT0gYS5jbGFzc05hbWUuaW5kZXhPZihiLndyYXBwZXJDbGFzcykpO1xyXG4gICAgICAgIHJldHVybiAhYyAmJiBhLmNsYXNzTmFtZS5pbmRleE9mKGIud3JhcHBlckNsYXNzKSA+IC0xICYmIGEuY2xhc3NOYW1lLmluZGV4T2YoYi5ub1N3aXBpbmdDbGFzcykgPiAtMSAmJiAoYyA9ICEwKSwgY1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHQoYSwgYikgeyB2YXIgYywgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7IHJldHVybiBkLmlubmVySFRNTCA9IGIsIGMgPSBkLmZpcnN0Q2hpbGQsIGMuY2xhc3NOYW1lICs9IFwiIFwiICsgYSwgYy5vdXRlckhUTUwgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHUoYSwgYywgZCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGUoKSB7XHJcbiAgICAgICAgICAgIHZhciBmID0gK25ldyBEYXRlLFxyXG4gICAgICAgICAgICAgICAgbCA9IGYgLSBnO1xyXG4gICAgICAgICAgICBoICs9IGkgKiBsIC8gKDFlMyAvIDYwKSwgayA9IFwidG9OZXh0XCIgPT09IGogPyBoID4gYSA6IGEgPiBoLCBrID8gKEMuc2V0V3JhcHBlclRyYW5zbGF0ZShNYXRoLmNlaWwoaCkpLCBDLl9ET01BbmltYXRpbmcgPSAhMCwgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGUoKSB9LCAxZTMgLyA2MCkpIDogKGIub25TbGlkZUNoYW5nZUVuZCAmJiAoXCJ0b1wiID09PSBjID8gZC5ydW5DYWxsYmFja3MgPT09ICEwICYmIEMuZmlyZUNhbGxiYWNrKGIub25TbGlkZUNoYW5nZUVuZCwgQywgaikgOiBDLmZpcmVDYWxsYmFjayhiLm9uU2xpZGVDaGFuZ2VFbmQsIEMsIGopKSwgQy5zZXRXcmFwcGVyVHJhbnNsYXRlKGEpLCBDLl9ET01BbmltYXRpbmcgPSAhMSlcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGYgPSBcInRvXCIgPT09IGMgJiYgZC5zcGVlZCA+PSAwID8gZC5zcGVlZCA6IGIuc3BlZWQsXHJcbiAgICAgICAgICAgIGcgPSArbmV3IERhdGU7XHJcbiAgICAgICAgaWYgKEMuc3VwcG9ydC50cmFuc2l0aW9ucyB8fCAhYi5ET01BbmltYXRpb24pIEMuc2V0V3JhcHBlclRyYW5zbGF0ZShhKSwgQy5zZXRXcmFwcGVyVHJhbnNpdGlvbihmKTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdmFyIGggPSBDLmdldFdyYXBwZXJUcmFuc2xhdGUoKSxcclxuICAgICAgICAgICAgICAgIGkgPSBNYXRoLmNlaWwoKGEgLSBoKSAvIGYgKiAoMWUzIC8gNjApKSxcclxuICAgICAgICAgICAgICAgIGogPSBoID4gYSA/IFwidG9OZXh0XCIgOiBcInRvUHJldlwiLFxyXG4gICAgICAgICAgICAgICAgayA9IFwidG9OZXh0XCIgPT09IGogPyBoID4gYSA6IGEgPiBoO1xyXG4gICAgICAgICAgICBpZiAoQy5fRE9NQW5pbWF0aW5nKSByZXR1cm47XHJcbiAgICAgICAgICAgIGUoKVxyXG4gICAgICAgIH1cclxuICAgICAgICBDLnVwZGF0ZUFjdGl2ZVNsaWRlKGEpLCBiLm9uU2xpZGVOZXh0ICYmIFwibmV4dFwiID09PSBjICYmIEMuZmlyZUNhbGxiYWNrKGIub25TbGlkZU5leHQsIEMsIGEpLCBiLm9uU2xpZGVQcmV2ICYmIFwicHJldlwiID09PSBjICYmIEMuZmlyZUNhbGxiYWNrKGIub25TbGlkZVByZXYsIEMsIGEpLCBiLm9uU2xpZGVSZXNldCAmJiBcInJlc2V0XCIgPT09IGMgJiYgQy5maXJlQ2FsbGJhY2soYi5vblNsaWRlUmVzZXQsIEMsIGEpLCAoXCJuZXh0XCIgPT09IGMgfHwgXCJwcmV2XCIgPT09IGMgfHwgXCJ0b1wiID09PSBjICYmIGQucnVuQ2FsbGJhY2tzID09PSAhMCkgJiYgdihjKVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHYoYSkge1xyXG4gICAgICAgIGlmIChDLmNhbGxQbHVnaW5zKFwib25TbGlkZUNoYW5nZVN0YXJ0XCIpLCBiLm9uU2xpZGVDaGFuZ2VTdGFydClcclxuICAgICAgICAgICAgaWYgKGIucXVldWVTdGFydENhbGxiYWNrcyAmJiBDLnN1cHBvcnQudHJhbnNpdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChDLl9xdWV1ZVN0YXJ0Q2FsbGJhY2tzKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBDLl9xdWV1ZVN0YXJ0Q2FsbGJhY2tzID0gITAsIEMuZmlyZUNhbGxiYWNrKGIub25TbGlkZUNoYW5nZVN0YXJ0LCBDLCBhKSwgQy53cmFwcGVyVHJhbnNpdGlvbkVuZChmdW5jdGlvbigpIHsgQy5fcXVldWVTdGFydENhbGxiYWNrcyA9ICExIH0pXHJcbiAgICAgICAgICAgIH0gZWxzZSBDLmZpcmVDYWxsYmFjayhiLm9uU2xpZGVDaGFuZ2VTdGFydCwgQywgYSk7XHJcbiAgICAgICAgaWYgKGIub25TbGlkZUNoYW5nZUVuZClcclxuICAgICAgICAgICAgaWYgKEMuc3VwcG9ydC50cmFuc2l0aW9ucylcclxuICAgICAgICAgICAgICAgIGlmIChiLnF1ZXVlRW5kQ2FsbGJhY2tzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKEMuX3F1ZXVlRW5kQ2FsbGJhY2tzKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgQy5fcXVldWVFbmRDYWxsYmFja3MgPSAhMCwgQy53cmFwcGVyVHJhbnNpdGlvbkVuZChmdW5jdGlvbihjKSB7IEMuZmlyZUNhbGxiYWNrKGIub25TbGlkZUNoYW5nZUVuZCwgYywgYSkgfSlcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBDLndyYXBwZXJUcmFuc2l0aW9uRW5kKGZ1bmN0aW9uKGMpIHsgQy5maXJlQ2FsbGJhY2soYi5vblNsaWRlQ2hhbmdlRW5kLCBjLCBhKSB9KTtcclxuICAgICAgICBlbHNlIGIuRE9NQW5pbWF0aW9uIHx8IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IEMuZmlyZUNhbGxiYWNrKGIub25TbGlkZUNoYW5nZUVuZCwgQywgYSkgfSwgMTApXHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gdygpIHtcclxuICAgICAgICB2YXIgYSA9IEMucGFnaW5hdGlvbkJ1dHRvbnM7XHJcbiAgICAgICAgaWYgKGEpXHJcbiAgICAgICAgICAgIGZvciAodmFyIGIgPSAwOyBiIDwgYS5sZW5ndGg7IGIrKykgQy5oLnJlbW92ZUV2ZW50TGlzdGVuZXIoYVtiXSwgXCJjbGlja1wiLCB5KVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHgoKSB7XHJcbiAgICAgICAgdmFyIGEgPSBDLnBhZ2luYXRpb25CdXR0b25zO1xyXG4gICAgICAgIGlmIChhKVxyXG4gICAgICAgICAgICBmb3IgKHZhciBiID0gMDsgYiA8IGEubGVuZ3RoOyBiKyspIEMuaC5hZGRFdmVudExpc3RlbmVyKGFbYl0sIFwiY2xpY2tcIiwgeSlcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiB5KGEpIHtcclxuICAgICAgICBmb3IgKHZhciBjLCBkID0gYS50YXJnZXQgfHwgYS5zcmNFbGVtZW50LCBlID0gQy5wYWdpbmF0aW9uQnV0dG9ucywgZiA9IDA7IGYgPCBlLmxlbmd0aDsgZisrKSBkID09PSBlW2ZdICYmIChjID0gZik7XHJcbiAgICAgICAgYi5hdXRvcGxheSAmJiBDLnN0b3BBdXRvcGxheSghMCksIEMuc3dpcGVUbyhjKVxyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHooKSB7IF8gPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBiLmxvb3AgPyAoQy5maXhMb29wKCksIEMuc3dpcGVOZXh0KCEwKSkgOiBDLnN3aXBlTmV4dCghMCkgfHwgKGIuYXV0b3BsYXlTdG9wT25MYXN0ID8gKGNsZWFyVGltZW91dChfKSwgXyA9IHZvaWQgMCkgOiBDLnN3aXBlVG8oMCkpLCBDLndyYXBwZXJUcmFuc2l0aW9uRW5kKGZ1bmN0aW9uKCkgeyBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBfICYmIHooKSB9KSB9LCBiLmF1dG9wbGF5KSB9XHJcblxyXG4gICAgZnVuY3Rpb24gQSgpIHsgQy5jYWxjU2xpZGVzKCksIGIubG9hZGVyLnNsaWRlcy5sZW5ndGggPiAwICYmIDAgPT09IEMuc2xpZGVzLmxlbmd0aCAmJiBDLmxvYWRTbGlkZXMoKSwgYi5sb29wICYmIEMuY3JlYXRlTG9vcCgpLCBDLmluaXQoKSwgZigpLCBiLnBhZ2luYXRpb24gJiYgQy5jcmVhdGVQYWdpbmF0aW9uKCEwKSwgYi5sb29wIHx8IGIuaW5pdGlhbFNsaWRlID4gMCA/IEMuc3dpcGVUbyhiLmluaXRpYWxTbGlkZSwgMCwgITEpIDogQy51cGRhdGVBY3RpdmVTbGlkZSgwKSwgYi5hdXRvcGxheSAmJiBDLnN0YXJ0QXV0b3BsYXkoKSwgQy5jZW50ZXJJbmRleCA9IEMuYWN0aXZlSW5kZXgsIGIub25Td2lwZXJDcmVhdGVkICYmIEMuZmlyZUNhbGxiYWNrKGIub25Td2lwZXJDcmVhdGVkLCBDKSwgQy5jYWxsUGx1Z2lucyhcIm9uU3dpcGVyQ3JlYXRlZFwiKSB9XHJcbiAgICBpZiAoIWRvY3VtZW50LmJvZHkub3V0ZXJIVE1MICYmIGRvY3VtZW50LmJvZHkuX19kZWZpbmVHZXR0ZXJfXyAmJiBIVE1MRWxlbWVudCkge1xyXG4gICAgICAgIHZhciBCID0gSFRNTEVsZW1lbnQucHJvdG90eXBlO1xyXG4gICAgICAgIEIuX19kZWZpbmVHZXR0ZXJfXyAmJiBCLl9fZGVmaW5lR2V0dGVyX18oXCJvdXRlckhUTUxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiAobmV3IFhNTFNlcmlhbGl6ZXIpLnNlcmlhbGl6ZVRvU3RyaW5nKHRoaXMpIH0pXHJcbiAgICB9XHJcbiAgICBpZiAod2luZG93LmdldENvbXB1dGVkU3R5bGUgfHwgKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlID0gZnVuY3Rpb24oYSkgeyByZXR1cm4gdGhpcy5lbCA9IGEsIHRoaXMuZ2V0UHJvcGVydHlWYWx1ZSA9IGZ1bmN0aW9uKGIpIHsgdmFyIGMgPSAvKFxcLShbYS16XSl7MX0pL2c7IHJldHVybiBcImZsb2F0XCIgPT09IGIgJiYgKGIgPSBcInN0eWxlRmxvYXRcIiksIGMudGVzdChiKSAmJiAoYiA9IGIucmVwbGFjZShjLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50c1syXS50b1VwcGVyQ2FzZSgpIH0pKSwgYS5jdXJyZW50U3R5bGVbYl0gPyBhLmN1cnJlbnRTdHlsZVtiXSA6IG51bGwgfSwgdGhpcyB9KSwgQXJyYXkucHJvdG90eXBlLmluZGV4T2YgfHwgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24oYSwgYikge1xyXG4gICAgICAgICAgICBmb3IgKHZhciBjID0gYiB8fCAwLCBkID0gdGhpcy5sZW5ndGg7IGQgPiBjOyBjKyspXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpc1tjXSA9PT0gYSkgcmV0dXJuIGM7XHJcbiAgICAgICAgICAgIHJldHVybiAtMVxyXG4gICAgICAgIH0pLCAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCB8fCB3aW5kb3cualF1ZXJ5KSAmJiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBhICYmIChhLm5vZGVUeXBlIHx8IDAgIT09IGMoYSkubGVuZ3RoKSkge1xyXG4gICAgICAgIHZhciBDID0gdGhpcztcclxuICAgICAgICBDLnRvdWNoZXMgPSB7IHN0YXJ0OiAwLCBzdGFydFg6IDAsIHN0YXJ0WTogMCwgY3VycmVudDogMCwgY3VycmVudFg6IDAsIGN1cnJlbnRZOiAwLCBkaWZmOiAwLCBhYnM6IDAgfSwgQy5wb3NpdGlvbnMgPSB7IHN0YXJ0OiAwLCBhYnM6IDAsIGRpZmY6IDAsIGN1cnJlbnQ6IDAgfSwgQy50aW1lcyA9IHsgc3RhcnQ6IDAsIGVuZDogMCB9LCBDLmlkID0gKG5ldyBEYXRlKS5nZXRUaW1lKCksIEMuY29udGFpbmVyID0gYS5ub2RlVHlwZSA/IGEgOiBjKGEpWzBdLCBDLmlzVG91Y2hlZCA9ICExLCBDLmlzTW92ZWQgPSAhMSwgQy5hY3RpdmVJbmRleCA9IDAsIEMuY2VudGVySW5kZXggPSAwLCBDLmFjdGl2ZUxvYWRlckluZGV4ID0gMCwgQy5hY3RpdmVMb29wSW5kZXggPSAwLCBDLnByZXZpb3VzSW5kZXggPSBudWxsLCBDLnZlbG9jaXR5ID0gMCwgQy5zbmFwR3JpZCA9IFtdLCBDLnNsaWRlc0dyaWQgPSBbXSwgQy5pbWFnZXNUb0xvYWQgPSBbXSwgQy5pbWFnZXNMb2FkZWQgPSAwLCBDLndyYXBwZXJMZWZ0ID0gMCwgQy53cmFwcGVyUmlnaHQgPSAwLCBDLndyYXBwZXJUb3AgPSAwLCBDLndyYXBwZXJCb3R0b20gPSAwLCBDLmlzQW5kcm9pZCA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKFwiYW5kcm9pZFwiKSA+PSAwO1xyXG4gICAgICAgIHZhciBELCBFLCBGLCBHLCBILCBJLCBKID0geyBldmVudFRhcmdldDogXCJ3cmFwcGVyXCIsIG1vZGU6IFwiaG9yaXpvbnRhbFwiLCB0b3VjaFJhdGlvOiAxLCBzcGVlZDogMzAwLCBmcmVlTW9kZTogITEsIGZyZWVNb2RlRmx1aWQ6ICExLCBtb21lbnR1bVJhdGlvOiAxLCBtb21lbnR1bUJvdW5jZTogITAsIG1vbWVudHVtQm91bmNlUmF0aW86IDEsIHNsaWRlc1BlclZpZXc6IDEsIHNsaWRlc1Blckdyb3VwOiAxLCBzbGlkZXNQZXJWaWV3Rml0OiAhMCwgc2ltdWxhdGVUb3VjaDogITAsIGZvbGxvd0ZpbmdlcjogITAsIHNob3J0U3dpcGVzOiAhMCwgbG9uZ1N3aXBlc1JhdGlvOiAuNSwgbW92ZVN0YXJ0VGhyZXNob2xkOiAhMSwgb25seUV4dGVybmFsOiAhMSwgY3JlYXRlUGFnaW5hdGlvbjogITAsIHBhZ2luYXRpb246ICExLCBwYWdpbmF0aW9uRWxlbWVudDogXCJzcGFuXCIsIHBhZ2luYXRpb25DbGlja2FibGU6ICExLCBwYWdpbmF0aW9uQXNSYW5nZTogITAsIHJlc2lzdGFuY2U6ICEwLCBzY3JvbGxDb250YWluZXI6ICExLCBwcmV2ZW50TGlua3M6ICEwLCBwcmV2ZW50TGlua3NQcm9wYWdhdGlvbjogITEsIG5vU3dpcGluZzogITEsIG5vU3dpcGluZ0NsYXNzOiBcInN3aXBlci1uby1zd2lwaW5nXCIsIGluaXRpYWxTbGlkZTogMCwga2V5Ym9hcmRDb250cm9sOiAhMSwgbW91c2V3aGVlbENvbnRyb2w6ICExLCBtb3VzZXdoZWVsQ29udHJvbEZvcmNlVG9BeGlzOiAhMSwgdXNlQ1NTM1RyYW5zZm9ybXM6ICEwLCBhdXRvcGxheTogITEsIGF1dG9wbGF5RGlzYWJsZU9uSW50ZXJhY3Rpb246ICEwLCBhdXRvcGxheVN0b3BPbkxhc3Q6ICExLCBsb29wOiAhMSwgbG9vcEFkZGl0aW9uYWxTbGlkZXM6IDAsIHJvdW5kTGVuZ3RoczogITEsIGNhbGN1bGF0ZUhlaWdodDogITEsIGNzc1dpZHRoQW5kSGVpZ2h0OiAhMSwgdXBkYXRlT25JbWFnZXNSZWFkeTogITAsIHJlbGVhc2VGb3JtRWxlbWVudHM6ICEwLCB3YXRjaEFjdGl2ZUluZGV4OiAhMSwgdmlzaWJpbGl0eUZ1bGxGaXQ6ICExLCBvZmZzZXRQeEJlZm9yZTogMCwgb2Zmc2V0UHhBZnRlcjogMCwgb2Zmc2V0U2xpZGVzQmVmb3JlOiAwLCBvZmZzZXRTbGlkZXNBZnRlcjogMCwgY2VudGVyZWRTbGlkZXM6ICExLCBxdWV1ZVN0YXJ0Q2FsbGJhY2tzOiAhMSwgcXVldWVFbmRDYWxsYmFja3M6ICExLCBhdXRvUmVzaXplOiAhMCwgcmVzaXplUmVJbml0OiAhMSwgRE9NQW5pbWF0aW9uOiAhMCwgbG9hZGVyOiB7IHNsaWRlczogW10sIHNsaWRlc0hUTUxUeXBlOiBcImlubmVyXCIsIHN1cnJvdW5kR3JvdXBzOiAxLCBsb2dpYzogXCJyZWxvYWRcIiwgbG9hZEFsbFNsaWRlczogITEgfSwgc3dpcGVUb1ByZXY6ICEwLCBzd2lwZVRvTmV4dDogITAsIHNsaWRlRWxlbWVudDogXCJkaXZcIiwgc2xpZGVDbGFzczogXCJzd2lwZXItc2xpZGVcIiwgc2xpZGVBY3RpdmVDbGFzczogXCJzd2lwZXItc2xpZGUtYWN0aXZlXCIsIHNsaWRlVmlzaWJsZUNsYXNzOiBcInN3aXBlci1zbGlkZS12aXNpYmxlXCIsIHNsaWRlRHVwbGljYXRlQ2xhc3M6IFwic3dpcGVyLXNsaWRlLWR1cGxpY2F0ZVwiLCB3cmFwcGVyQ2xhc3M6IFwic3dpcGVyLXdyYXBwZXJcIiwgcGFnaW5hdGlvbkVsZW1lbnRDbGFzczogXCJzd2lwZXItcGFnaW5hdGlvbi1zd2l0Y2hcIiwgcGFnaW5hdGlvbkFjdGl2ZUNsYXNzOiBcInN3aXBlci1hY3RpdmUtc3dpdGNoXCIsIHBhZ2luYXRpb25WaXNpYmxlQ2xhc3M6IFwic3dpcGVyLXZpc2libGUtc3dpdGNoXCIgfTtcclxuICAgICAgICBiID0gYiB8fCB7fTtcclxuICAgICAgICBmb3IgKHZhciBLIGluIEopXHJcbiAgICAgICAgICAgIGlmIChLIGluIGIgJiYgXCJvYmplY3RcIiA9PSB0eXBlb2YgYltLXSlcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIEwgaW4gSltLXSkgTCBpbiBiW0tdIHx8IChiW0tdW0xdID0gSltLXVtMXSk7XHJcbiAgICAgICAgICAgIGVsc2UgSyBpbiBiIHx8IChiW0tdID0gSltLXSk7XHJcbiAgICAgICAgQy5wYXJhbXMgPSBiLCBiLnNjcm9sbENvbnRhaW5lciAmJiAoYi5mcmVlTW9kZSA9ICEwLCBiLmZyZWVNb2RlRmx1aWQgPSAhMCksIGIubG9vcCAmJiAoYi5yZXNpc3RhbmNlID0gXCIxMDAlXCIpO1xyXG4gICAgICAgIHZhciBNID0gXCJob3Jpem9udGFsXCIgPT09IGIubW9kZSxcclxuICAgICAgICAgICAgTiA9IFtcIm1vdXNlZG93blwiLCBcIm1vdXNlbW92ZVwiLCBcIm1vdXNldXBcIl07XHJcbiAgICAgICAgQy5icm93c2VyLmllMTAgJiYgKE4gPSBbXCJNU1BvaW50ZXJEb3duXCIsIFwiTVNQb2ludGVyTW92ZVwiLCBcIk1TUG9pbnRlclVwXCJdKSwgQy5icm93c2VyLmllMTEgJiYgKE4gPSBbXCJwb2ludGVyZG93blwiLCBcInBvaW50ZXJtb3ZlXCIsIFwicG9pbnRlcnVwXCJdKSwgQy50b3VjaEV2ZW50cyA9IHsgdG91Y2hTdGFydDogQy5zdXBwb3J0LnRvdWNoIHx8ICFiLnNpbXVsYXRlVG91Y2ggPyBcInRvdWNoc3RhcnRcIiA6IE5bMF0sIHRvdWNoTW92ZTogQy5zdXBwb3J0LnRvdWNoIHx8ICFiLnNpbXVsYXRlVG91Y2ggPyBcInRvdWNobW92ZVwiIDogTlsxXSwgdG91Y2hFbmQ6IEMuc3VwcG9ydC50b3VjaCB8fCAhYi5zaW11bGF0ZVRvdWNoID8gXCJ0b3VjaGVuZFwiIDogTlsyXSB9O1xyXG4gICAgICAgIGZvciAodmFyIE8gPSBDLmNvbnRhaW5lci5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7IE8gPj0gMDsgTy0tKVxyXG4gICAgICAgICAgICBpZiAoQy5jb250YWluZXIuY2hpbGROb2Rlc1tPXS5jbGFzc05hbWUpXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBQID0gQy5jb250YWluZXIuY2hpbGROb2Rlc1tPXS5jbGFzc05hbWUuc3BsaXQoL1xccysvKSwgUSA9IDA7IFEgPCBQLmxlbmd0aDsgUSsrKSBQW1FdID09PSBiLndyYXBwZXJDbGFzcyAmJiAoRCA9IEMuY29udGFpbmVyLmNoaWxkTm9kZXNbT10pO1xyXG4gICAgICAgIEMud3JhcHBlciA9IEQsIEMuX2V4dGVuZFN3aXBlclNsaWRlID0gZnVuY3Rpb24oYSkgeyByZXR1cm4gYS5hcHBlbmQgPSBmdW5jdGlvbigpIHsgcmV0dXJuIGIubG9vcCA/IGEuaW5zZXJ0QWZ0ZXIoQy5zbGlkZXMubGVuZ3RoIC0gQy5sb29wZWRTbGlkZXMpIDogKEMud3JhcHBlci5hcHBlbmRDaGlsZChhKSwgQy5yZUluaXQoKSksIGEgfSwgYS5wcmVwZW5kID0gZnVuY3Rpb24oKSB7IHJldHVybiBiLmxvb3AgPyAoQy53cmFwcGVyLmluc2VydEJlZm9yZShhLCBDLnNsaWRlc1tDLmxvb3BlZFNsaWRlc10pLCBDLnJlbW92ZUxvb3BlZFNsaWRlcygpLCBDLmNhbGNTbGlkZXMoKSwgQy5jcmVhdGVMb29wKCkpIDogQy53cmFwcGVyLmluc2VydEJlZm9yZShhLCBDLndyYXBwZXIuZmlyc3RDaGlsZCksIEMucmVJbml0KCksIGEgfSwgYS5pbnNlcnRBZnRlciA9IGZ1bmN0aW9uKGMpIHsgaWYgKFwidW5kZWZpbmVkXCIgPT0gdHlwZW9mIGMpIHJldHVybiAhMTsgdmFyIGQ7IHJldHVybiBiLmxvb3AgPyAoZCA9IEMuc2xpZGVzW2MgKyAxICsgQy5sb29wZWRTbGlkZXNdLCBkID8gQy53cmFwcGVyLmluc2VydEJlZm9yZShhLCBkKSA6IEMud3JhcHBlci5hcHBlbmRDaGlsZChhKSwgQy5yZW1vdmVMb29wZWRTbGlkZXMoKSwgQy5jYWxjU2xpZGVzKCksIEMuY3JlYXRlTG9vcCgpKSA6IChkID0gQy5zbGlkZXNbYyArIDFdLCBDLndyYXBwZXIuaW5zZXJ0QmVmb3JlKGEsIGQpKSwgQy5yZUluaXQoKSwgYSB9LCBhLmNsb25lID0gZnVuY3Rpb24oKSB7IHJldHVybiBDLl9leHRlbmRTd2lwZXJTbGlkZShhLmNsb25lTm9kZSghMCkpIH0sIGEucmVtb3ZlID0gZnVuY3Rpb24oKSB7IEMud3JhcHBlci5yZW1vdmVDaGlsZChhKSwgQy5yZUluaXQoKSB9LCBhLmh0bWwgPSBmdW5jdGlvbihiKSB7IHJldHVybiBcInVuZGVmaW5lZFwiID09IHR5cGVvZiBiID8gYS5pbm5lckhUTUwgOiAoYS5pbm5lckhUTUwgPSBiLCBhKSB9LCBhLmluZGV4ID0gZnVuY3Rpb24oKSB7IGZvciAodmFyIGIsIGMgPSBDLnNsaWRlcy5sZW5ndGggLSAxOyBjID49IDA7IGMtLSkgYSA9PT0gQy5zbGlkZXNbY10gJiYgKGIgPSBjKTsgcmV0dXJuIGIgfSwgYS5pc0FjdGl2ZSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gYS5pbmRleCgpID09PSBDLmFjdGl2ZUluZGV4ID8gITAgOiAhMSB9LCBhLnN3aXBlclNsaWRlRGF0YVN0b3JhZ2UgfHwgKGEuc3dpcGVyU2xpZGVEYXRhU3RvcmFnZSA9IHt9KSwgYS5nZXREYXRhID0gZnVuY3Rpb24oYikgeyByZXR1cm4gYS5zd2lwZXJTbGlkZURhdGFTdG9yYWdlW2JdIH0sIGEuc2V0RGF0YSA9IGZ1bmN0aW9uKGIsIGMpIHsgcmV0dXJuIGEuc3dpcGVyU2xpZGVEYXRhU3RvcmFnZVtiXSA9IGMsIGEgfSwgYS5kYXRhID0gZnVuY3Rpb24oYiwgYykgeyByZXR1cm4gXCJ1bmRlZmluZWRcIiA9PSB0eXBlb2YgYyA/IGEuZ2V0QXR0cmlidXRlKFwiZGF0YS1cIiArIGIpIDogKGEuc2V0QXR0cmlidXRlKFwiZGF0YS1cIiArIGIsIGMpLCBhKSB9LCBhLmdldFdpZHRoID0gZnVuY3Rpb24oYiwgYykgeyByZXR1cm4gQy5oLmdldFdpZHRoKGEsIGIsIGMpIH0sIGEuZ2V0SGVpZ2h0ID0gZnVuY3Rpb24oYiwgYykgeyByZXR1cm4gQy5oLmdldEhlaWdodChhLCBiLCBjKSB9LCBhLmdldE9mZnNldCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gQy5oLmdldE9mZnNldChhKSB9LCBhIH0sIEMuY2FsY1NsaWRlcyA9IGZ1bmN0aW9uKGEpIHtcclxuICAgICAgICAgICAgdmFyIGMgPSBDLnNsaWRlcyA/IEMuc2xpZGVzLmxlbmd0aCA6ICExO1xyXG4gICAgICAgICAgICBDLnNsaWRlcyA9IFtdLCBDLmRpc3BsYXlTbGlkZXMgPSBbXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBDLndyYXBwZXIuY2hpbGROb2Rlcy5sZW5ndGg7IGQrKylcclxuICAgICAgICAgICAgICAgIGlmIChDLndyYXBwZXIuY2hpbGROb2Rlc1tkXS5jbGFzc05hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgZSA9IEMud3JhcHBlci5jaGlsZE5vZGVzW2RdLmNsYXNzTmFtZSwgZiA9IGUuc3BsaXQoL1xccysvKSwgaSA9IDA7IGkgPCBmLmxlbmd0aDsgaSsrKSBmW2ldID09PSBiLnNsaWRlQ2xhc3MgJiYgQy5zbGlkZXMucHVzaChDLndyYXBwZXIuY2hpbGROb2Rlc1tkXSk7XHJcbiAgICAgICAgICAgIGZvciAoZCA9IEMuc2xpZGVzLmxlbmd0aCAtIDE7IGQgPj0gMDsgZC0tKSBDLl9leHRlbmRTd2lwZXJTbGlkZShDLnNsaWRlc1tkXSk7XHJcbiAgICAgICAgICAgIGMgIT09ICExICYmIChjICE9PSBDLnNsaWRlcy5sZW5ndGggfHwgYSkgJiYgKGgoKSwgZygpLCBDLnVwZGF0ZUFjdGl2ZVNsaWRlKCksIEMucGFyYW1zLnBhZ2luYXRpb24gJiYgQy5jcmVhdGVQYWdpbmF0aW9uKCksIEMuY2FsbFBsdWdpbnMoXCJudW1iZXJPZlNsaWRlc0NoYW5nZWRcIikpXHJcbiAgICAgICAgfSwgQy5jcmVhdGVTbGlkZSA9IGZ1bmN0aW9uKGEsIGMsIGQpIHsgYyA9IGMgfHwgQy5wYXJhbXMuc2xpZGVDbGFzcywgZCA9IGQgfHwgYi5zbGlkZUVsZW1lbnQ7IHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChkKTsgcmV0dXJuIGUuaW5uZXJIVE1MID0gYSB8fCBcIlwiLCBlLmNsYXNzTmFtZSA9IGMsIEMuX2V4dGVuZFN3aXBlclNsaWRlKGUpIH0sIEMuYXBwZW5kU2xpZGUgPSBmdW5jdGlvbihhLCBiLCBjKSB7IHJldHVybiBhID8gYS5ub2RlVHlwZSA/IEMuX2V4dGVuZFN3aXBlclNsaWRlKGEpLmFwcGVuZCgpIDogQy5jcmVhdGVTbGlkZShhLCBiLCBjKS5hcHBlbmQoKSA6IHZvaWQgMCB9LCBDLnByZXBlbmRTbGlkZSA9IGZ1bmN0aW9uKGEsIGIsIGMpIHsgcmV0dXJuIGEgPyBhLm5vZGVUeXBlID8gQy5fZXh0ZW5kU3dpcGVyU2xpZGUoYSkucHJlcGVuZCgpIDogQy5jcmVhdGVTbGlkZShhLCBiLCBjKS5wcmVwZW5kKCkgOiB2b2lkIDAgfSwgQy5pbnNlcnRTbGlkZUFmdGVyID0gZnVuY3Rpb24oYSwgYiwgYywgZCkgeyByZXR1cm4gXCJ1bmRlZmluZWRcIiA9PSB0eXBlb2YgYSA/ICExIDogYi5ub2RlVHlwZSA/IEMuX2V4dGVuZFN3aXBlclNsaWRlKGIpLmluc2VydEFmdGVyKGEpIDogQy5jcmVhdGVTbGlkZShiLCBjLCBkKS5pbnNlcnRBZnRlcihhKSB9LCBDLnJlbW92ZVNsaWRlID0gZnVuY3Rpb24oYSkge1xyXG4gICAgICAgICAgICBpZiAoQy5zbGlkZXNbYV0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChiLmxvb3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIUMuc2xpZGVzW2EgKyBDLmxvb3BlZFNsaWRlc10pIHJldHVybiAhMTtcclxuICAgICAgICAgICAgICAgICAgICBDLnNsaWRlc1thICsgQy5sb29wZWRTbGlkZXNdLnJlbW92ZSgpLCBDLnJlbW92ZUxvb3BlZFNsaWRlcygpLCBDLmNhbGNTbGlkZXMoKSwgQy5jcmVhdGVMb29wKClcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBDLnNsaWRlc1thXS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiAhMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAhMVxyXG4gICAgICAgIH0sIEMucmVtb3ZlTGFzdFNsaWRlID0gZnVuY3Rpb24oKSB7IHJldHVybiBDLnNsaWRlcy5sZW5ndGggPiAwID8gKGIubG9vcCA/IChDLnNsaWRlc1tDLnNsaWRlcy5sZW5ndGggLSAxIC0gQy5sb29wZWRTbGlkZXNdLnJlbW92ZSgpLCBDLnJlbW92ZUxvb3BlZFNsaWRlcygpLCBDLmNhbGNTbGlkZXMoKSwgQy5jcmVhdGVMb29wKCkpIDogQy5zbGlkZXNbQy5zbGlkZXMubGVuZ3RoIC0gMV0ucmVtb3ZlKCksICEwKSA6ICExIH0sIEMucmVtb3ZlQWxsU2xpZGVzID0gZnVuY3Rpb24oKSB7IGZvciAodmFyIGEgPSBDLnNsaWRlcy5sZW5ndGggLSAxOyBhID49IDA7IGEtLSkgQy5zbGlkZXNbYV0ucmVtb3ZlKCkgfSwgQy5nZXRTbGlkZSA9IGZ1bmN0aW9uKGEpIHsgcmV0dXJuIEMuc2xpZGVzW2FdIH0sIEMuZ2V0TGFzdFNsaWRlID0gZnVuY3Rpb24oKSB7IHJldHVybiBDLnNsaWRlc1tDLnNsaWRlcy5sZW5ndGggLSAxXSB9LCBDLmdldEZpcnN0U2xpZGUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIEMuc2xpZGVzWzBdIH0sIEMuYWN0aXZlU2xpZGUgPSBmdW5jdGlvbigpIHsgcmV0dXJuIEMuc2xpZGVzW0MuYWN0aXZlSW5kZXhdIH0sIEMuZmlyZUNhbGxiYWNrID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHZhciBhID0gYXJndW1lbnRzWzBdO1xyXG4gICAgICAgICAgICBpZiAoXCJbb2JqZWN0IEFycmF5XVwiID09PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkpXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGEubGVuZ3RoOyBjKyspIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgYVtjXSAmJiBhW2NdKGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdLCBhcmd1bWVudHNbM10sIGFyZ3VtZW50c1s0XSwgYXJndW1lbnRzWzVdKTtcclxuICAgICAgICAgICAgZWxzZSBcIltvYmplY3QgU3RyaW5nXVwiID09PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkgPyBiW1wib25cIiArIGFdICYmIEMuZmlyZUNhbGxiYWNrKGJbXCJvblwiICsgYV0sIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdLCBhcmd1bWVudHNbM10sIGFyZ3VtZW50c1s0XSwgYXJndW1lbnRzWzVdKSA6IGEoYXJndW1lbnRzWzFdLCBhcmd1bWVudHNbMl0sIGFyZ3VtZW50c1szXSwgYXJndW1lbnRzWzRdLCBhcmd1bWVudHNbNV0pXHJcbiAgICAgICAgfSwgQy5hZGRDYWxsYmFjayA9IGZ1bmN0aW9uKGEsIGIpIHsgdmFyIGMsIGUgPSB0aGlzOyByZXR1cm4gZS5wYXJhbXNbXCJvblwiICsgYV0gPyBkKHRoaXMucGFyYW1zW1wib25cIiArIGFdKSA/IHRoaXMucGFyYW1zW1wib25cIiArIGFdLnB1c2goYikgOiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIHRoaXMucGFyYW1zW1wib25cIiArIGFdID8gKGMgPSB0aGlzLnBhcmFtc1tcIm9uXCIgKyBhXSwgdGhpcy5wYXJhbXNbXCJvblwiICsgYV0gPSBbXSwgdGhpcy5wYXJhbXNbXCJvblwiICsgYV0ucHVzaChjKSwgdGhpcy5wYXJhbXNbXCJvblwiICsgYV0ucHVzaChiKSkgOiB2b2lkIDAgOiAodGhpcy5wYXJhbXNbXCJvblwiICsgYV0gPSBbXSwgdGhpcy5wYXJhbXNbXCJvblwiICsgYV0ucHVzaChiKSkgfSwgQy5yZW1vdmVDYWxsYmFja3MgPSBmdW5jdGlvbihhKSB7IEMucGFyYW1zW1wib25cIiArIGFdICYmIChDLnBhcmFtc1tcIm9uXCIgKyBhXSA9IG51bGwpIH07XHJcbiAgICAgICAgdmFyIFIgPSBbXTtcclxuICAgICAgICBmb3IgKHZhciBTIGluIEMucGx1Z2lucylcclxuICAgICAgICAgICAgaWYgKGJbU10pIHtcclxuICAgICAgICAgICAgICAgIHZhciBUID0gQy5wbHVnaW5zW1NdKEMsIGJbU10pO1xyXG4gICAgICAgICAgICAgICAgVCAmJiBSLnB1c2goVClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIEMuY2FsbFBsdWdpbnMgPSBmdW5jdGlvbihhLCBiKSB7IGIgfHwgKGIgPSB7fSk7IGZvciAodmFyIGMgPSAwOyBjIDwgUi5sZW5ndGg7IGMrKykgYSBpbiBSW2NdICYmIFJbY11bYV0oYikgfSwgIUMuYnJvd3Nlci5pZTEwICYmICFDLmJyb3dzZXIuaWUxMSB8fCBiLm9ubHlFeHRlcm5hbCB8fCBDLndyYXBwZXIuY2xhc3NMaXN0LmFkZChcInN3aXBlci13cDgtXCIgKyAoTSA/IFwiaG9yaXpvbnRhbFwiIDogXCJ2ZXJ0aWNhbFwiKSksIGIuZnJlZU1vZGUgJiYgKEMuY29udGFpbmVyLmNsYXNzTmFtZSArPSBcIiBzd2lwZXItZnJlZS1tb2RlXCIpLCBDLmluaXRpYWxpemVkID0gITEsIEMuaW5pdCA9IGZ1bmN0aW9uKGEsIGMpIHtcclxuICAgICAgICAgICAgdmFyIGQgPSBDLmguZ2V0V2lkdGgoQy5jb250YWluZXIsICExLCBiLnJvdW5kTGVuZ3RocyksXHJcbiAgICAgICAgICAgICAgICBlID0gQy5oLmdldEhlaWdodChDLmNvbnRhaW5lciwgITEsIGIucm91bmRMZW5ndGhzKTtcclxuICAgICAgICAgICAgaWYgKGQgIT09IEMud2lkdGggfHwgZSAhPT0gQy5oZWlnaHQgfHwgYSkge1xyXG4gICAgICAgICAgICAgICAgQy53aWR0aCA9IGQsIEMuaGVpZ2h0ID0gZTtcclxuICAgICAgICAgICAgICAgIHZhciBmLCBnLCBoLCBpLCBqLCBrLCBsO1xyXG4gICAgICAgICAgICAgICAgSSA9IE0gPyBkIDogZTtcclxuICAgICAgICAgICAgICAgIHZhciBtID0gQy53cmFwcGVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKGEgJiYgQy5jYWxjU2xpZGVzKGMpLCBcImF1dG9cIiA9PT0gYi5zbGlkZXNQZXJWaWV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBiLnNsaWRlc09mZnNldCA+IDAgJiYgKG0uc3R5bGUucGFkZGluZ0xlZnQgPSBcIlwiLCBtLnN0eWxlLnBhZGRpbmdSaWdodCA9IFwiXCIsIG0uc3R5bGUucGFkZGluZ1RvcCA9IFwiXCIsIG0uc3R5bGUucGFkZGluZ0JvdHRvbSA9IFwiXCIpLCBtLnN0eWxlLndpZHRoID0gXCJcIiwgbS5zdHlsZS5oZWlnaHQgPSBcIlwiLCBiLm9mZnNldFB4QmVmb3JlID4gMCAmJiAoTSA/IEMud3JhcHBlckxlZnQgPSBiLm9mZnNldFB4QmVmb3JlIDogQy53cmFwcGVyVG9wID0gYi5vZmZzZXRQeEJlZm9yZSksIGIub2Zmc2V0UHhBZnRlciA+IDAgJiYgKE0gPyBDLndyYXBwZXJSaWdodCA9IGIub2Zmc2V0UHhBZnRlciA6IEMud3JhcHBlckJvdHRvbSA9IGIub2Zmc2V0UHhBZnRlciksIGIuY2VudGVyZWRTbGlkZXMgJiYgKE0gPyAoQy53cmFwcGVyTGVmdCA9IChJIC0gdGhpcy5zbGlkZXNbMF0uZ2V0V2lkdGgoITAsIGIucm91bmRMZW5ndGhzKSkgLyAyLCBDLndyYXBwZXJSaWdodCA9IChJIC0gQy5zbGlkZXNbQy5zbGlkZXMubGVuZ3RoIC0gMV0uZ2V0V2lkdGgoITAsIGIucm91bmRMZW5ndGhzKSkgLyAyKSA6IChDLndyYXBwZXJUb3AgPSAoSSAtIEMuc2xpZGVzWzBdLmdldEhlaWdodCghMCwgYi5yb3VuZExlbmd0aHMpKSAvIDIsIEMud3JhcHBlckJvdHRvbSA9IChJIC0gQy5zbGlkZXNbQy5zbGlkZXMubGVuZ3RoIC0gMV0uZ2V0SGVpZ2h0KCEwLCBiLnJvdW5kTGVuZ3RocykpIC8gMikpLCBNID8gKEMud3JhcHBlckxlZnQgPj0gMCAmJiAobS5zdHlsZS5wYWRkaW5nTGVmdCA9IEMud3JhcHBlckxlZnQgKyBcInB4XCIpLCBDLndyYXBwZXJSaWdodCA+PSAwICYmIChtLnN0eWxlLnBhZGRpbmdSaWdodCA9IEMud3JhcHBlclJpZ2h0ICsgXCJweFwiKSkgOiAoQy53cmFwcGVyVG9wID49IDAgJiYgKG0uc3R5bGUucGFkZGluZ1RvcCA9IEMud3JhcHBlclRvcCArIFwicHhcIiksIEMud3JhcHBlckJvdHRvbSA+PSAwICYmIChtLnN0eWxlLnBhZGRpbmdCb3R0b20gPSBDLndyYXBwZXJCb3R0b20gKyBcInB4XCIpKSwgayA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoQy5zbmFwR3JpZCA9IFtdLCBDLnNsaWRlc0dyaWQgPSBbXSwgaCA9IDAsIGwgPSAwOyBsIDwgQy5zbGlkZXMubGVuZ3RoOyBsKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZiA9IEMuc2xpZGVzW2xdLmdldFdpZHRoKCEwLCBiLnJvdW5kTGVuZ3RocyksIGcgPSBDLnNsaWRlc1tsXS5nZXRIZWlnaHQoITAsIGIucm91bmRMZW5ndGhzKSwgYi5jYWxjdWxhdGVIZWlnaHQgJiYgKGggPSBNYXRoLm1heChoLCBnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxID0gTSA/IGYgOiBnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYi5jZW50ZXJlZFNsaWRlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBsID09PSBDLnNsaWRlcy5sZW5ndGggLSAxID8gMCA6IEMuc2xpZGVzW2wgKyAxXS5nZXRXaWR0aCghMCwgYi5yb3VuZExlbmd0aHMpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBsID09PSBDLnNsaWRlcy5sZW5ndGggLSAxID8gMCA6IEMuc2xpZGVzW2wgKyAxXS5nZXRIZWlnaHQoITAsIGIucm91bmRMZW5ndGhzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gTSA/IHIgOiBzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEgPiBJKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGIuc2xpZGVzUGVyVmlld0ZpdCkgQy5zbmFwR3JpZC5wdXNoKGsgKyBDLndyYXBwZXJMZWZ0KSwgQy5zbmFwR3JpZC5wdXNoKGsgKyBxIC0gSSArIEMud3JhcHBlckxlZnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPD0gTWF0aC5mbG9vcihxIC8gKEkgKyBDLndyYXBwZXJMZWZ0KSk7IHUrKykgQy5zbmFwR3JpZC5wdXNoKDAgPT09IHUgPyBrICsgQy53cmFwcGVyTGVmdCA6IGsgKyBDLndyYXBwZXJMZWZ0ICsgSSAqIHUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMuc2xpZGVzR3JpZC5wdXNoKGsgKyBDLndyYXBwZXJMZWZ0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIEMuc25hcEdyaWQucHVzaChwKSwgQy5zbGlkZXNHcmlkLnB1c2gocCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICs9IHEgLyAyICsgdCAvIDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxID4gSSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYi5zbGlkZXNQZXJWaWV3Rml0KSBDLnNuYXBHcmlkLnB1c2goayksIEMuc25hcEdyaWQucHVzaChrICsgcSAtIEkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKDAgIT09IEkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgdiA9IDA7IHYgPD0gTWF0aC5mbG9vcihxIC8gSSk7IHYrKykgQy5zbmFwR3JpZC5wdXNoKGsgKyBJICogdik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIEMuc25hcEdyaWQucHVzaChrKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgQy5zbmFwR3JpZC5wdXNoKGspO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQy5zbGlkZXNHcmlkLnB1c2goaylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrICs9IHEsIG4gKz0gZiwgbyArPSBnXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGIuY2FsY3VsYXRlSGVpZ2h0ICYmIChDLmhlaWdodCA9IGgpLCBNID8gKEYgPSBuICsgQy53cmFwcGVyUmlnaHQgKyBDLndyYXBwZXJMZWZ0LCBtLnN0eWxlLndpZHRoID0gbiArIFwicHhcIiwgbS5zdHlsZS5oZWlnaHQgPSBDLmhlaWdodCArIFwicHhcIikgOiAoRiA9IG8gKyBDLndyYXBwZXJUb3AgKyBDLndyYXBwZXJCb3R0b20sIG0uc3R5bGUud2lkdGggPSBDLndpZHRoICsgXCJweFwiLCBtLnN0eWxlLmhlaWdodCA9IG8gKyBcInB4XCIpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGIuc2Nyb2xsQ29udGFpbmVyKSBtLnN0eWxlLndpZHRoID0gXCJcIiwgbS5zdHlsZS5oZWlnaHQgPSBcIlwiLCBpID0gQy5zbGlkZXNbMF0uZ2V0V2lkdGgoITAsIGIucm91bmRMZW5ndGhzKSwgaiA9IEMuc2xpZGVzWzBdLmdldEhlaWdodCghMCwgYi5yb3VuZExlbmd0aHMpLCBGID0gTSA/IGkgOiBqLCBtLnN0eWxlLndpZHRoID0gaSArIFwicHhcIiwgbS5zdHlsZS5oZWlnaHQgPSBqICsgXCJweFwiLCBFID0gTSA/IGkgOiBqO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGIuY2FsY3VsYXRlSGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaCA9IDAsIGogPSAwLCBNIHx8IChDLmNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBcIlwiKSwgbS5zdHlsZS5oZWlnaHQgPSBcIlwiLCBsID0gMDsgbCA8IEMuc2xpZGVzLmxlbmd0aDsgbCsrKSBDLnNsaWRlc1tsXS5zdHlsZS5oZWlnaHQgPSBcIlwiLCBoID0gTWF0aC5tYXgoQy5zbGlkZXNbbF0uZ2V0SGVpZ2h0KCEwKSwgaCksIE0gfHwgKGogKz0gQy5zbGlkZXNbbF0uZ2V0SGVpZ2h0KCEwKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBoLCBDLmhlaWdodCA9IGcsIE0gPyBqID0gZyA6IChJID0gZywgQy5jb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gSSArIFwicHhcIilcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgZyA9IE0gPyBDLmhlaWdodCA6IEMuaGVpZ2h0IC8gYi5zbGlkZXNQZXJWaWV3LCBiLnJvdW5kTGVuZ3RocyAmJiAoZyA9IE1hdGguY2VpbChnKSksIGogPSBNID8gQy5oZWlnaHQgOiBDLnNsaWRlcy5sZW5ndGggKiBnO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoZiA9IE0gPyBDLndpZHRoIC8gYi5zbGlkZXNQZXJWaWV3IDogQy53aWR0aCwgYi5yb3VuZExlbmd0aHMgJiYgKGYgPSBNYXRoLmNlaWwoZikpLCBpID0gTSA/IEMuc2xpZGVzLmxlbmd0aCAqIGYgOiBDLndpZHRoLCBFID0gTSA/IGYgOiBnLCBiLm9mZnNldFNsaWRlc0JlZm9yZSA+IDAgJiYgKE0gPyBDLndyYXBwZXJMZWZ0ID0gRSAqIGIub2Zmc2V0U2xpZGVzQmVmb3JlIDogQy53cmFwcGVyVG9wID0gRSAqIGIub2Zmc2V0U2xpZGVzQmVmb3JlKSwgYi5vZmZzZXRTbGlkZXNBZnRlciA+IDAgJiYgKE0gPyBDLndyYXBwZXJSaWdodCA9IEUgKiBiLm9mZnNldFNsaWRlc0FmdGVyIDogQy53cmFwcGVyQm90dG9tID0gRSAqIGIub2Zmc2V0U2xpZGVzQWZ0ZXIpLCBiLm9mZnNldFB4QmVmb3JlID4gMCAmJiAoTSA/IEMud3JhcHBlckxlZnQgPSBiLm9mZnNldFB4QmVmb3JlIDogQy53cmFwcGVyVG9wID0gYi5vZmZzZXRQeEJlZm9yZSksIGIub2Zmc2V0UHhBZnRlciA+IDAgJiYgKE0gPyBDLndyYXBwZXJSaWdodCA9IGIub2Zmc2V0UHhBZnRlciA6IEMud3JhcHBlckJvdHRvbSA9IGIub2Zmc2V0UHhBZnRlciksIGIuY2VudGVyZWRTbGlkZXMgJiYgKE0gPyAoQy53cmFwcGVyTGVmdCA9IChJIC0gRSkgLyAyLCBDLndyYXBwZXJSaWdodCA9IChJIC0gRSkgLyAyKSA6IChDLndyYXBwZXJUb3AgPSAoSSAtIEUpIC8gMiwgQy53cmFwcGVyQm90dG9tID0gKEkgLSBFKSAvIDIpKSwgTSA/IChDLndyYXBwZXJMZWZ0ID4gMCAmJiAobS5zdHlsZS5wYWRkaW5nTGVmdCA9IEMud3JhcHBlckxlZnQgKyBcInB4XCIpLCBDLndyYXBwZXJSaWdodCA+IDAgJiYgKG0uc3R5bGUucGFkZGluZ1JpZ2h0ID0gQy53cmFwcGVyUmlnaHQgKyBcInB4XCIpKSA6IChDLndyYXBwZXJUb3AgPiAwICYmIChtLnN0eWxlLnBhZGRpbmdUb3AgPSBDLndyYXBwZXJUb3AgKyBcInB4XCIpLCBDLndyYXBwZXJCb3R0b20gPiAwICYmIChtLnN0eWxlLnBhZGRpbmdCb3R0b20gPSBDLndyYXBwZXJCb3R0b20gKyBcInB4XCIpKSwgRiA9IE0gPyBpICsgQy53cmFwcGVyUmlnaHQgKyBDLndyYXBwZXJMZWZ0IDogaiArIEMud3JhcHBlclRvcCArIEMud3JhcHBlckJvdHRvbSwgcGFyc2VGbG9hdChpKSA+IDAgJiYgKCFiLmNzc1dpZHRoQW5kSGVpZ2h0IHx8IFwiaGVpZ2h0XCIgPT09IGIuY3NzV2lkdGhBbmRIZWlnaHQpICYmIChtLnN0eWxlLndpZHRoID0gaSArIFwicHhcIiksIHBhcnNlRmxvYXQoaikgPiAwICYmICghYi5jc3NXaWR0aEFuZEhlaWdodCB8fCBcIndpZHRoXCIgPT09IGIuY3NzV2lkdGhBbmRIZWlnaHQpICYmIChtLnN0eWxlLmhlaWdodCA9IGogKyBcInB4XCIpLCBrID0gMCwgQy5zbmFwR3JpZCA9IFtdLCBDLnNsaWRlc0dyaWQgPSBbXSwgbCA9IDA7IGwgPCBDLnNsaWRlcy5sZW5ndGg7IGwrKykgQy5zbmFwR3JpZC5wdXNoKGspLCBDLnNsaWRlc0dyaWQucHVzaChrKSwgayArPSBFLCBwYXJzZUZsb2F0KGYpID4gMCAmJiAoIWIuY3NzV2lkdGhBbmRIZWlnaHQgfHwgXCJoZWlnaHRcIiA9PT0gYi5jc3NXaWR0aEFuZEhlaWdodCkgJiYgKEMuc2xpZGVzW2xdLnN0eWxlLndpZHRoID0gZiArIFwicHhcIiksIHBhcnNlRmxvYXQoZykgPiAwICYmICghYi5jc3NXaWR0aEFuZEhlaWdodCB8fCBcIndpZHRoXCIgPT09IGIuY3NzV2lkdGhBbmRIZWlnaHQpICYmIChDLnNsaWRlc1tsXS5zdHlsZS5oZWlnaHQgPSBnICsgXCJweFwiKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgQy5pbml0aWFsaXplZCA/IChDLmNhbGxQbHVnaW5zKFwib25Jbml0XCIpLCBiLm9uSW5pdCAmJiBDLmZpcmVDYWxsYmFjayhiLm9uSW5pdCwgQykpIDogKEMuY2FsbFBsdWdpbnMoXCJvbkZpcnN0SW5pdFwiKSwgYi5vbkZpcnN0SW5pdCAmJiBDLmZpcmVDYWxsYmFjayhiLm9uRmlyc3RJbml0LCBDKSksIEMuaW5pdGlhbGl6ZWQgPSAhMFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgQy5yZUluaXQgPSBmdW5jdGlvbihhKSB7IEMuaW5pdCghMCwgYSkgfSwgQy5yZXNpemVGaXggPSBmdW5jdGlvbihhKSB7IEMuY2FsbFBsdWdpbnMoXCJiZWZvcmVSZXNpemVGaXhcIiksIEMuaW5pdChiLnJlc2l6ZVJlSW5pdCB8fCBhKSwgYi5mcmVlTW9kZSA/IEMuZ2V0V3JhcHBlclRyYW5zbGF0ZSgpIDwgLWUoKSAmJiAoQy5zZXRXcmFwcGVyVHJhbnNpdGlvbigwKSwgQy5zZXRXcmFwcGVyVHJhbnNsYXRlKC1lKCkpKSA6IChDLnN3aXBlVG8oYi5sb29wID8gQy5hY3RpdmVMb29wSW5kZXggOiBDLmFjdGl2ZUluZGV4LCAwLCAhMSksIGIuYXV0b3BsYXkgJiYgKEMuc3VwcG9ydC50cmFuc2l0aW9ucyAmJiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBfID8gXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgXyAmJiAoY2xlYXJUaW1lb3V0KF8pLCBfID0gdm9pZCAwLCBDLnN0YXJ0QXV0b3BsYXkoKSkgOiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBhYiAmJiAoY2xlYXJJbnRlcnZhbChhYiksIGFiID0gdm9pZCAwLCBDLnN0YXJ0QXV0b3BsYXkoKSkpKSwgQy5jYWxsUGx1Z2lucyhcImFmdGVyUmVzaXplRml4XCIpIH0sIEMuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB2YXIgYSA9IEMuaC5yZW1vdmVFdmVudExpc3RlbmVyLFxyXG4gICAgICAgICAgICAgICAgYyA9IFwid3JhcHBlclwiID09PSBiLmV2ZW50VGFyZ2V0ID8gQy53cmFwcGVyIDogQy5jb250YWluZXI7XHJcbiAgICAgICAgICAgIEMuYnJvd3Nlci5pZTEwIHx8IEMuYnJvd3Nlci5pZTExID8gKGEoYywgQy50b3VjaEV2ZW50cy50b3VjaFN0YXJ0LCBwKSwgYShkb2N1bWVudCwgQy50b3VjaEV2ZW50cy50b3VjaE1vdmUsIHEpLCBhKGRvY3VtZW50LCBDLnRvdWNoRXZlbnRzLnRvdWNoRW5kLCByKSkgOiAoQy5zdXBwb3J0LnRvdWNoICYmIChhKGMsIFwidG91Y2hzdGFydFwiLCBwKSwgYShjLCBcInRvdWNobW92ZVwiLCBxKSwgYShjLCBcInRvdWNoZW5kXCIsIHIpKSwgYi5zaW11bGF0ZVRvdWNoICYmIChhKGMsIFwibW91c2Vkb3duXCIsIHApLCBhKGRvY3VtZW50LCBcIm1vdXNlbW92ZVwiLCBxKSwgYShkb2N1bWVudCwgXCJtb3VzZXVwXCIsIHIpKSksIGIuYXV0b1Jlc2l6ZSAmJiBhKHdpbmRvdywgXCJyZXNpemVcIiwgQy5yZXNpemVGaXgpLCBoKCksIGIucGFnaW5hdGlvbkNsaWNrYWJsZSAmJiB3KCksIGIubW91c2V3aGVlbENvbnRyb2wgJiYgQy5fd2hlZWxFdmVudCAmJiBhKEMuY29udGFpbmVyLCBDLl93aGVlbEV2ZW50LCBqKSwgYi5rZXlib2FyZENvbnRyb2wgJiYgYShkb2N1bWVudCwgXCJrZXlkb3duXCIsIGkpLCBiLmF1dG9wbGF5ICYmIEMuc3RvcEF1dG9wbGF5KCksIEMuY2FsbFBsdWdpbnMoXCJvbkRlc3Ryb3lcIiksIEMgPSBudWxsXHJcbiAgICAgICAgfSwgQy5kaXNhYmxlS2V5Ym9hcmRDb250cm9sID0gZnVuY3Rpb24oKSB7IGIua2V5Ym9hcmRDb250cm9sID0gITEsIEMuaC5yZW1vdmVFdmVudExpc3RlbmVyKGRvY3VtZW50LCBcImtleWRvd25cIiwgaSkgfSwgQy5lbmFibGVLZXlib2FyZENvbnRyb2wgPSBmdW5jdGlvbigpIHsgYi5rZXlib2FyZENvbnRyb2wgPSAhMCwgQy5oLmFkZEV2ZW50TGlzdGVuZXIoZG9jdW1lbnQsIFwia2V5ZG93blwiLCBpKSB9O1xyXG4gICAgICAgIHZhciBVID0gKG5ldyBEYXRlKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgaWYgKEMuZGlzYWJsZU1vdXNld2hlZWxDb250cm9sID0gZnVuY3Rpb24oKSB7IHJldHVybiBDLl93aGVlbEV2ZW50ID8gKGIubW91c2V3aGVlbENvbnRyb2wgPSAhMSwgQy5oLnJlbW92ZUV2ZW50TGlzdGVuZXIoQy5jb250YWluZXIsIEMuX3doZWVsRXZlbnQsIGopLCAhMCkgOiAhMSB9LCBDLmVuYWJsZU1vdXNld2hlZWxDb250cm9sID0gZnVuY3Rpb24oKSB7IHJldHVybiBDLl93aGVlbEV2ZW50ID8gKGIubW91c2V3aGVlbENvbnRyb2wgPSAhMCwgQy5oLmFkZEV2ZW50TGlzdGVuZXIoQy5jb250YWluZXIsIEMuX3doZWVsRXZlbnQsIGopLCAhMCkgOiAhMSB9LCBiLmdyYWJDdXJzb3IpIHtcclxuICAgICAgICAgICAgdmFyIFYgPSBDLmNvbnRhaW5lci5zdHlsZTtcclxuICAgICAgICAgICAgVi5jdXJzb3IgPSBcIm1vdmVcIiwgVi5jdXJzb3IgPSBcImdyYWJcIiwgVi5jdXJzb3IgPSBcIi1tb3otZ3JhYlwiLCBWLmN1cnNvciA9IFwiLXdlYmtpdC1ncmFiXCJcclxuICAgICAgICB9XHJcbiAgICAgICAgQy5hbGxvd1NsaWRlQ2xpY2sgPSAhMCwgQy5hbGxvd0xpbmtzID0gITA7XHJcbiAgICAgICAgdmFyIFcsIFgsIFksIFogPSAhMSxcclxuICAgICAgICAgICAgJCA9ICEwO1xyXG4gICAgICAgIEMuc3dpcGVOZXh0ID0gZnVuY3Rpb24oYSkge1xyXG4gICAgICAgICAgICAhYSAmJiBiLmxvb3AgJiYgQy5maXhMb29wKCksICFhICYmIGIuYXV0b3BsYXkgJiYgQy5zdG9wQXV0b3BsYXkoITApLCBDLmNhbGxQbHVnaW5zKFwib25Td2lwZU5leHRcIik7XHJcbiAgICAgICAgICAgIHZhciBjID0gQy5nZXRXcmFwcGVyVHJhbnNsYXRlKCksXHJcbiAgICAgICAgICAgICAgICBkID0gYztcclxuICAgICAgICAgICAgaWYgKFwiYXV0b1wiID09PSBiLnNsaWRlc1BlclZpZXcpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGYgPSAwOyBmIDwgQy5zbmFwR3JpZC5sZW5ndGg7IGYrKylcclxuICAgICAgICAgICAgICAgICAgICBpZiAoLWMgPj0gQy5zbmFwR3JpZFtmXSAmJiAtYyA8IEMuc25hcEdyaWRbZiArIDFdKSB7IGQgPSAtQy5zbmFwR3JpZFtmICsgMV07IGJyZWFrIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBnID0gRSAqIGIuc2xpZGVzUGVyR3JvdXA7XHJcbiAgICAgICAgICAgICAgICBkID0gLShNYXRoLmZsb29yKE1hdGguYWJzKGMpIC8gTWF0aC5mbG9vcihnKSkgKiBnICsgZylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZCA8IC1lKCkgJiYgKGQgPSAtZSgpKSwgZCA9PT0gYyA/ICExIDogKHUoZCwgXCJuZXh0XCIpLCAhMClcclxuICAgICAgICB9LCBDLnN3aXBlUHJldiA9IGZ1bmN0aW9uKGEpIHtcclxuICAgICAgICAgICAgIWEgJiYgYi5sb29wICYmIEMuZml4TG9vcCgpLCAhYSAmJiBiLmF1dG9wbGF5ICYmIEMuc3RvcEF1dG9wbGF5KCEwKSwgQy5jYWxsUGx1Z2lucyhcIm9uU3dpcGVQcmV2XCIpO1xyXG4gICAgICAgICAgICB2YXIgYywgZCA9IE1hdGguY2VpbChDLmdldFdyYXBwZXJUcmFuc2xhdGUoKSk7XHJcbiAgICAgICAgICAgIGlmIChcImF1dG9cIiA9PT0gYi5zbGlkZXNQZXJWaWV3KSB7IGMgPSAwOyBmb3IgKHZhciBlID0gMTsgZSA8IEMuc25hcEdyaWQubGVuZ3RoOyBlKyspIHsgaWYgKC1kID09PSBDLnNuYXBHcmlkW2VdKSB7IGMgPSAtQy5zbmFwR3JpZFtlIC0gMV07IGJyZWFrIH0gaWYgKC1kID4gQy5zbmFwR3JpZFtlXSAmJiAtZCA8IEMuc25hcEdyaWRbZSArIDFdKSB7IGMgPSAtQy5zbmFwR3JpZFtlXTsgYnJlYWsgfSB9IH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZiA9IEUgKiBiLnNsaWRlc1Blckdyb3VwO1xyXG4gICAgICAgICAgICAgICAgYyA9IC0oTWF0aC5jZWlsKC1kIC8gZikgLSAxKSAqIGZcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYyA+IDAgJiYgKGMgPSAwKSwgYyA9PT0gZCA/ICExIDogKHUoYywgXCJwcmV2XCIpLCAhMClcclxuICAgICAgICB9LCBDLnN3aXBlUmVzZXQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgQy5jYWxsUGx1Z2lucyhcIm9uU3dpcGVSZXNldFwiKTsge1xyXG4gICAgICAgICAgICAgICAgdmFyIGEsIGMgPSBDLmdldFdyYXBwZXJUcmFuc2xhdGUoKSxcclxuICAgICAgICAgICAgICAgICAgICBkID0gRSAqIGIuc2xpZGVzUGVyR3JvdXA7IC0gZSgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKFwiYXV0b1wiID09PSBiLnNsaWRlc1BlclZpZXcpIHsgYSA9IDA7IGZvciAodmFyIGYgPSAwOyBmIDwgQy5zbmFwR3JpZC5sZW5ndGg7IGYrKykgeyBpZiAoLWMgPT09IEMuc25hcEdyaWRbZl0pIHJldHVybjsgaWYgKC1jID49IEMuc25hcEdyaWRbZl0gJiYgLWMgPCBDLnNuYXBHcmlkW2YgKyAxXSkgeyBhID0gQy5wb3NpdGlvbnMuZGlmZiA+IDAgPyAtQy5zbmFwR3JpZFtmICsgMV0gOiAtQy5zbmFwR3JpZFtmXTsgYnJlYWsgfSB9IC0gYyA+PSBDLnNuYXBHcmlkW0Muc25hcEdyaWQubGVuZ3RoIC0gMV0gJiYgKGEgPSAtQy5zbmFwR3JpZFtDLnNuYXBHcmlkLmxlbmd0aCAtIDFdKSwgYyA8PSAtZSgpICYmIChhID0gLWUoKSkgfSBlbHNlIGEgPSAwID4gYyA/IE1hdGgucm91bmQoYyAvIGQpICogZCA6IDAsIGMgPD0gLWUoKSAmJiAoYSA9IC1lKCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gYi5zY3JvbGxDb250YWluZXIgJiYgKGEgPSAwID4gYyA/IGMgOiAwKSwgYSA8IC1lKCkgJiYgKGEgPSAtZSgpKSwgYi5zY3JvbGxDb250YWluZXIgJiYgSSA+IEUgJiYgKGEgPSAwKSwgYSA9PT0gYyA/ICExIDogKHUoYSwgXCJyZXNldFwiKSwgITApXHJcbiAgICAgICAgfSwgQy5zd2lwZVRvID0gZnVuY3Rpb24oYSwgYywgZCkgeyBhID0gcGFyc2VJbnQoYSwgMTApLCBDLmNhbGxQbHVnaW5zKFwib25Td2lwZVRvXCIsIHsgaW5kZXg6IGEsIHNwZWVkOiBjIH0pLCBiLmxvb3AgJiYgKGEgKz0gQy5sb29wZWRTbGlkZXMpOyB2YXIgZiA9IEMuZ2V0V3JhcHBlclRyYW5zbGF0ZSgpOyBpZiAoIShhID4gQy5zbGlkZXMubGVuZ3RoIC0gMSB8fCAwID4gYSkpIHsgdmFyIGc7IHJldHVybiBnID0gXCJhdXRvXCIgPT09IGIuc2xpZGVzUGVyVmlldyA/IC1DLnNsaWRlc0dyaWRbYV0gOiAtYSAqIEUsIGcgPCAtZSgpICYmIChnID0gLWUoKSksIGcgPT09IGYgPyAhMSA6IChkID0gZCA9PT0gITEgPyAhMSA6ICEwLCB1KGcsIFwidG9cIiwgeyBpbmRleDogYSwgc3BlZWQ6IGMsIHJ1bkNhbGxiYWNrczogZCB9KSwgITApIH0gfSwgQy5fcXVldWVTdGFydENhbGxiYWNrcyA9ICExLCBDLl9xdWV1ZUVuZENhbGxiYWNrcyA9ICExLCBDLnVwZGF0ZUFjdGl2ZVNsaWRlID0gZnVuY3Rpb24oYSkge1xyXG4gICAgICAgICAgICBpZiAoQy5pbml0aWFsaXplZCAmJiAwICE9PSBDLnNsaWRlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIEMucHJldmlvdXNJbmRleCA9IEMuYWN0aXZlSW5kZXgsIFwidW5kZWZpbmVkXCIgPT0gdHlwZW9mIGEgJiYgKGEgPSBDLmdldFdyYXBwZXJUcmFuc2xhdGUoKSksIGEgPiAwICYmIChhID0gMCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgYztcclxuICAgICAgICAgICAgICAgIGlmIChcImF1dG9cIiA9PT0gYi5zbGlkZXNQZXJWaWV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKEMuYWN0aXZlSW5kZXggPSBDLnNsaWRlc0dyaWQuaW5kZXhPZigtYSksIEMuYWN0aXZlSW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCBDLnNsaWRlc0dyaWQubGVuZ3RoIC0gMSAmJiAhKC1hID4gQy5zbGlkZXNHcmlkW2NdICYmIC1hIDwgQy5zbGlkZXNHcmlkW2MgKyAxXSk7IGMrKyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gTWF0aC5hYnMoQy5zbGlkZXNHcmlkW2NdICsgYSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gTWF0aC5hYnMoQy5zbGlkZXNHcmlkW2MgKyAxXSArIGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBDLmFjdGl2ZUluZGV4ID0gZSA+PSBkID8gYyA6IGMgKyAxXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIEMuYWN0aXZlSW5kZXggPSBNYXRoW2IudmlzaWJpbGl0eUZ1bGxGaXQgPyBcImNlaWxcIiA6IFwicm91bmRcIl0oLWEgLyBFKTtcclxuICAgICAgICAgICAgICAgIGlmIChDLmFjdGl2ZUluZGV4ID09PSBDLnNsaWRlcy5sZW5ndGggJiYgKEMuYWN0aXZlSW5kZXggPSBDLnNsaWRlcy5sZW5ndGggLSAxKSwgQy5hY3RpdmVJbmRleCA8IDAgJiYgKEMuYWN0aXZlSW5kZXggPSAwKSwgQy5zbGlkZXNbQy5hY3RpdmVJbmRleF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoQy5jYWxjVmlzaWJsZVNsaWRlcyhhKSwgQy5zdXBwb3J0LmNsYXNzTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IEMuc2xpZGVzLmxlbmd0aDsgYysrKSBmID0gQy5zbGlkZXNbY10sIGYuY2xhc3NMaXN0LnJlbW92ZShiLnNsaWRlQWN0aXZlQ2xhc3MpLCBDLnZpc2libGVTbGlkZXMuaW5kZXhPZihmKSA+PSAwID8gZi5jbGFzc0xpc3QuYWRkKGIuc2xpZGVWaXNpYmxlQ2xhc3MpIDogZi5jbGFzc0xpc3QucmVtb3ZlKGIuc2xpZGVWaXNpYmxlQ2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBDLnNsaWRlc1tDLmFjdGl2ZUluZGV4XS5jbGFzc0xpc3QuYWRkKGIuc2xpZGVBY3RpdmVDbGFzcylcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZyA9IG5ldyBSZWdFeHAoXCJcXFxccypcIiArIGIuc2xpZGVBY3RpdmVDbGFzcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gbmV3IFJlZ0V4cChcIlxcXFxzKlwiICsgYi5zbGlkZVZpc2libGVDbGFzcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCBDLnNsaWRlcy5sZW5ndGg7IGMrKykgQy5zbGlkZXNbY10uY2xhc3NOYW1lID0gQy5zbGlkZXNbY10uY2xhc3NOYW1lLnJlcGxhY2UoZywgXCJcIikucmVwbGFjZShoLCBcIlwiKSwgQy52aXNpYmxlU2xpZGVzLmluZGV4T2YoQy5zbGlkZXNbY10pID49IDAgJiYgKEMuc2xpZGVzW2NdLmNsYXNzTmFtZSArPSBcIiBcIiArIGIuc2xpZGVWaXNpYmxlQ2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBDLnNsaWRlc1tDLmFjdGl2ZUluZGV4XS5jbGFzc05hbWUgKz0gXCIgXCIgKyBiLnNsaWRlQWN0aXZlQ2xhc3NcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGIubG9vcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IEMubG9vcGVkU2xpZGVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBDLmFjdGl2ZUxvb3BJbmRleCA9IEMuYWN0aXZlSW5kZXggLSBpLCBDLmFjdGl2ZUxvb3BJbmRleCA+PSBDLnNsaWRlcy5sZW5ndGggLSAyICogaSAmJiAoQy5hY3RpdmVMb29wSW5kZXggPSBDLnNsaWRlcy5sZW5ndGggLSAyICogaSAtIEMuYWN0aXZlTG9vcEluZGV4KSwgQy5hY3RpdmVMb29wSW5kZXggPCAwICYmIChDLmFjdGl2ZUxvb3BJbmRleCA9IEMuc2xpZGVzLmxlbmd0aCAtIDIgKiBpICsgQy5hY3RpdmVMb29wSW5kZXgpLCBDLmFjdGl2ZUxvb3BJbmRleCA8IDAgJiYgKEMuYWN0aXZlTG9vcEluZGV4ID0gMClcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgQy5hY3RpdmVMb29wSW5kZXggPSBDLmFjdGl2ZUluZGV4O1xyXG4gICAgICAgICAgICAgICAgICAgIGIucGFnaW5hdGlvbiAmJiBDLnVwZGF0ZVBhZ2luYXRpb24oYSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIEMuY3JlYXRlUGFnaW5hdGlvbiA9IGZ1bmN0aW9uKGEpIHtcclxuICAgICAgICAgICAgaWYgKGIucGFnaW5hdGlvbkNsaWNrYWJsZSAmJiBDLnBhZ2luYXRpb25CdXR0b25zICYmIHcoKSwgQy5wYWdpbmF0aW9uQ29udGFpbmVyID0gYi5wYWdpbmF0aW9uLm5vZGVUeXBlID8gYi5wYWdpbmF0aW9uIDogYyhiLnBhZ2luYXRpb24pWzBdLCBiLmNyZWF0ZVBhZ2luYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHZhciBkID0gXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBlID0gQy5zbGlkZXMubGVuZ3RoLFxyXG4gICAgICAgICAgICAgICAgICAgIGYgPSBlO1xyXG4gICAgICAgICAgICAgICAgYi5sb29wICYmIChmIC09IDIgKiBDLmxvb3BlZFNsaWRlcyk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBnID0gMDsgZiA+IGc7IGcrKykgZCArPSBcIjxcIiArIGIucGFnaW5hdGlvbkVsZW1lbnQgKyAnIGNsYXNzPVwiJyArIGIucGFnaW5hdGlvbkVsZW1lbnRDbGFzcyArICdcIj48LycgKyBiLnBhZ2luYXRpb25FbGVtZW50ICsgXCI+XCI7XHJcbiAgICAgICAgICAgICAgICBDLnBhZ2luYXRpb25Db250YWluZXIuaW5uZXJIVE1MID0gZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIEMucGFnaW5hdGlvbkJ1dHRvbnMgPSBjKFwiLlwiICsgYi5wYWdpbmF0aW9uRWxlbWVudENsYXNzLCBDLnBhZ2luYXRpb25Db250YWluZXIpLCBhIHx8IEMudXBkYXRlUGFnaW5hdGlvbigpLCBDLmNhbGxQbHVnaW5zKFwib25DcmVhdGVQYWdpbmF0aW9uXCIpLCBiLnBhZ2luYXRpb25DbGlja2FibGUgJiYgeCgpXHJcbiAgICAgICAgfSwgQy51cGRhdGVQYWdpbmF0aW9uID0gZnVuY3Rpb24oYSkge1xyXG4gICAgICAgICAgICBpZiAoYi5wYWdpbmF0aW9uICYmICEoQy5zbGlkZXMubGVuZ3RoIDwgMSkpIHtcclxuICAgICAgICAgICAgICAgIHZhciBkID0gYyhcIi5cIiArIGIucGFnaW5hdGlvbkFjdGl2ZUNsYXNzLCBDLnBhZ2luYXRpb25Db250YWluZXIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IEMucGFnaW5hdGlvbkJ1dHRvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKDAgIT09IGUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGYgPSAwOyBmIDwgZS5sZW5ndGg7IGYrKykgZVtmXS5jbGFzc05hbWUgPSBiLnBhZ2luYXRpb25FbGVtZW50Q2xhc3M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnID0gYi5sb29wID8gQy5sb29wZWRTbGlkZXMgOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYi5wYWdpbmF0aW9uQXNSYW5nZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQy52aXNpYmxlU2xpZGVzIHx8IEMuY2FsY1Zpc2libGVTbGlkZXMoYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaCwgaSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChoID0gMDsgaCA8IEMudmlzaWJsZVNsaWRlcy5sZW5ndGg7IGgrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqID0gQy5zbGlkZXMuaW5kZXhPZihDLnZpc2libGVTbGlkZXNbaF0pIC0gZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLmxvb3AgJiYgMCA+IGogJiYgKGogPSBDLnNsaWRlcy5sZW5ndGggLSAyICogQy5sb29wZWRTbGlkZXMgKyBqKSwgYi5sb29wICYmIGogPj0gQy5zbGlkZXMubGVuZ3RoIC0gMiAqIEMubG9vcGVkU2xpZGVzICYmIChqID0gQy5zbGlkZXMubGVuZ3RoIC0gMiAqIEMubG9vcGVkU2xpZGVzIC0gaiwgaiA9IE1hdGguYWJzKGopKSwgaS5wdXNoKGopXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGggPSAwOyBoIDwgaS5sZW5ndGg7IGgrKykgZVtpW2hdXSAmJiAoZVtpW2hdXS5jbGFzc05hbWUgKz0gXCIgXCIgKyBiLnBhZ2luYXRpb25WaXNpYmxlQ2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYi5sb29wID8gdm9pZCAwICE9PSBlW0MuYWN0aXZlTG9vcEluZGV4XSAmJiAoZVtDLmFjdGl2ZUxvb3BJbmRleF0uY2xhc3NOYW1lICs9IFwiIFwiICsgYi5wYWdpbmF0aW9uQWN0aXZlQ2xhc3MpIDogZVtDLmFjdGl2ZUluZGV4XS5jbGFzc05hbWUgKz0gXCIgXCIgKyBiLnBhZ2luYXRpb25BY3RpdmVDbGFzc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgYi5sb29wID8gZVtDLmFjdGl2ZUxvb3BJbmRleF0gJiYgKGVbQy5hY3RpdmVMb29wSW5kZXhdLmNsYXNzTmFtZSArPSBcIiBcIiArIGIucGFnaW5hdGlvbkFjdGl2ZUNsYXNzICsgXCIgXCIgKyBiLnBhZ2luYXRpb25WaXNpYmxlQ2xhc3MpIDogZVtDLmFjdGl2ZUluZGV4XS5jbGFzc05hbWUgKz0gXCIgXCIgKyBiLnBhZ2luYXRpb25BY3RpdmVDbGFzcyArIFwiIFwiICsgYi5wYWdpbmF0aW9uVmlzaWJsZUNsYXNzXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgQy5jYWxjVmlzaWJsZVNsaWRlcyA9IGZ1bmN0aW9uKGEpIHtcclxuICAgICAgICAgICAgdmFyIGMgPSBbXSxcclxuICAgICAgICAgICAgICAgIGQgPSAwLFxyXG4gICAgICAgICAgICAgICAgZSA9IDAsXHJcbiAgICAgICAgICAgICAgICBmID0gMDtcclxuICAgICAgICAgICAgTSAmJiBDLndyYXBwZXJMZWZ0ID4gMCAmJiAoYSArPSBDLndyYXBwZXJMZWZ0KSwgIU0gJiYgQy53cmFwcGVyVG9wID4gMCAmJiAoYSArPSBDLndyYXBwZXJUb3ApO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBnID0gMDsgZyA8IEMuc2xpZGVzLmxlbmd0aDsgZysrKSB7XHJcbiAgICAgICAgICAgICAgICBkICs9IGUsIGUgPSBcImF1dG9cIiA9PT0gYi5zbGlkZXNQZXJWaWV3ID8gTSA/IEMuaC5nZXRXaWR0aChDLnNsaWRlc1tnXSwgITAsIGIucm91bmRMZW5ndGhzKSA6IEMuaC5nZXRIZWlnaHQoQy5zbGlkZXNbZ10sICEwLCBiLnJvdW5kTGVuZ3RocykgOiBFLCBmID0gZCArIGU7XHJcbiAgICAgICAgICAgICAgICB2YXIgaCA9ICExO1xyXG4gICAgICAgICAgICAgICAgYi52aXNpYmlsaXR5RnVsbEZpdCA/IChkID49IC1hICYmIC1hICsgSSA+PSBmICYmIChoID0gITApLCAtYSA+PSBkICYmIGYgPj0gLWEgKyBJICYmIChoID0gITApKSA6IChmID4gLWEgJiYgLWEgKyBJID49IGYgJiYgKGggPSAhMCksIGQgPj0gLWEgJiYgLWEgKyBJID4gZCAmJiAoaCA9ICEwKSwgLWEgPiBkICYmIGYgPiAtYSArIEkgJiYgKGggPSAhMCkpLCBoICYmIGMucHVzaChDLnNsaWRlc1tnXSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAwID09PSBjLmxlbmd0aCAmJiAoYyA9IFtDLnNsaWRlc1tDLmFjdGl2ZUluZGV4XV0pLCBDLnZpc2libGVTbGlkZXMgPSBjXHJcbiAgICAgICAgfTtcclxuICAgICAgICB2YXIgXywgYWI7XHJcbiAgICAgICAgQy5zdGFydEF1dG9wbGF5ID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmIChDLnN1cHBvcnQudHJhbnNpdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBfKSByZXR1cm4gITE7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWIuYXV0b3BsYXkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIEMuY2FsbFBsdWdpbnMoXCJvbkF1dG9wbGF5U3RhcnRcIiksIGIub25BdXRvcGxheVN0YXJ0ICYmIEMuZmlyZUNhbGxiYWNrKGIub25BdXRvcGxheVN0YXJ0LCBDKSwgeigpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgYWIpIHJldHVybiAhMTtcclxuICAgICAgICAgICAgICAgIGlmICghYi5hdXRvcGxheSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgQy5jYWxsUGx1Z2lucyhcIm9uQXV0b3BsYXlTdGFydFwiKSwgYi5vbkF1dG9wbGF5U3RhcnQgJiYgQy5maXJlQ2FsbGJhY2soYi5vbkF1dG9wbGF5U3RhcnQsIEMpLCBhYiA9IHNldEludGVydmFsKGZ1bmN0aW9uKCkgeyBiLmxvb3AgPyAoQy5maXhMb29wKCksIEMuc3dpcGVOZXh0KCEwKSkgOiBDLnN3aXBlTmV4dCghMCkgfHwgKGIuYXV0b3BsYXlTdG9wT25MYXN0ID8gKGNsZWFySW50ZXJ2YWwoYWIpLCBhYiA9IHZvaWQgMCkgOiBDLnN3aXBlVG8oMCkpIH0sIGIuYXV0b3BsYXkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCBDLnN0b3BBdXRvcGxheSA9IGZ1bmN0aW9uKGEpIHtcclxuICAgICAgICAgICAgaWYgKEMuc3VwcG9ydC50cmFuc2l0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFfKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBfICYmIGNsZWFyVGltZW91dChfKSwgXyA9IHZvaWQgMCwgYSAmJiAhYi5hdXRvcGxheURpc2FibGVPbkludGVyYWN0aW9uICYmIEMud3JhcHBlclRyYW5zaXRpb25FbmQoZnVuY3Rpb24oKSB7IHooKSB9KSwgQy5jYWxsUGx1Z2lucyhcIm9uQXV0b3BsYXlTdG9wXCIpLCBiLm9uQXV0b3BsYXlTdG9wICYmIEMuZmlyZUNhbGxiYWNrKGIub25BdXRvcGxheVN0b3AsIEMpXHJcbiAgICAgICAgICAgIH0gZWxzZSBhYiAmJiBjbGVhckludGVydmFsKGFiKSwgYWIgPSB2b2lkIDAsIEMuY2FsbFBsdWdpbnMoXCJvbkF1dG9wbGF5U3RvcFwiKSwgYi5vbkF1dG9wbGF5U3RvcCAmJiBDLmZpcmVDYWxsYmFjayhiLm9uQXV0b3BsYXlTdG9wLCBDKVxyXG4gICAgICAgIH0sIEMubG9vcENyZWF0ZWQgPSAhMSwgQy5yZW1vdmVMb29wZWRTbGlkZXMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYgKEMubG9vcENyZWF0ZWQpXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IEMuc2xpZGVzLmxlbmd0aDsgYSsrKSBDLnNsaWRlc1thXS5nZXREYXRhKFwibG9vcGVkXCIpID09PSAhMCAmJiBDLndyYXBwZXIucmVtb3ZlQ2hpbGQoQy5zbGlkZXNbYV0pXHJcbiAgICAgICAgfSwgQy5jcmVhdGVMb29wID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmICgwICE9PSBDLnNsaWRlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIEMubG9vcGVkU2xpZGVzID0gXCJhdXRvXCIgPT09IGIuc2xpZGVzUGVyVmlldyA/IGIubG9vcGVkU2xpZGVzIHx8IDEgOiBiLnNsaWRlc1BlclZpZXcgKyBiLmxvb3BBZGRpdGlvbmFsU2xpZGVzLCBDLmxvb3BlZFNsaWRlcyA+IEMuc2xpZGVzLmxlbmd0aCAmJiAoQy5sb29wZWRTbGlkZXMgPSBDLnNsaWRlcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGEsIGMgPSBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGQgPSBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGUgPSBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGYgPSBDLnNsaWRlcy5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgZyA9IE1hdGguZmxvb3IoQy5sb29wZWRTbGlkZXMgLyBmKSxcclxuICAgICAgICAgICAgICAgICAgICBoID0gQy5sb29wZWRTbGlkZXMgJSBmO1xyXG4gICAgICAgICAgICAgICAgZm9yIChhID0gMDsgZyAqIGYgPiBhOyBhKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGE7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEgPj0gZikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaiA9IE1hdGguZmxvb3IoYSAvIGYpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gYSAtIGYgKiBqXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGUgKz0gQy5zbGlkZXNbaV0ub3V0ZXJIVE1MXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKGEgPSAwOyBoID4gYTsgYSsrKSBkICs9IHQoYi5zbGlkZUR1cGxpY2F0ZUNsYXNzLCBDLnNsaWRlc1thXS5vdXRlckhUTUwpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChhID0gZiAtIGg7IGYgPiBhOyBhKyspIGMgKz0gdChiLnNsaWRlRHVwbGljYXRlQ2xhc3MsIEMuc2xpZGVzW2FdLm91dGVySFRNTCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgayA9IGMgKyBlICsgRC5pbm5lckhUTUwgKyBlICsgZDtcclxuICAgICAgICAgICAgICAgIGZvciAoRC5pbm5lckhUTUwgPSBrLCBDLmxvb3BDcmVhdGVkID0gITAsIEMuY2FsY1NsaWRlcygpLCBhID0gMDsgYSA8IEMuc2xpZGVzLmxlbmd0aDsgYSsrKShhIDwgQy5sb29wZWRTbGlkZXMgfHwgYSA+PSBDLnNsaWRlcy5sZW5ndGggLSBDLmxvb3BlZFNsaWRlcykgJiYgQy5zbGlkZXNbYV0uc2V0RGF0YShcImxvb3BlZFwiLCAhMCk7XHJcbiAgICAgICAgICAgICAgICBDLmNhbGxQbHVnaW5zKFwib25DcmVhdGVMb29wXCIpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCBDLmZpeExvb3AgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdmFyIGE7XHJcbiAgICAgICAgICAgIEMuYWN0aXZlSW5kZXggPCBDLmxvb3BlZFNsaWRlcyA/IChhID0gQy5zbGlkZXMubGVuZ3RoIC0gMyAqIEMubG9vcGVkU2xpZGVzICsgQy5hY3RpdmVJbmRleCwgQy5zd2lwZVRvKGEsIDAsICExKSkgOiAoXCJhdXRvXCIgPT09IGIuc2xpZGVzUGVyVmlldyAmJiBDLmFjdGl2ZUluZGV4ID49IDIgKiBDLmxvb3BlZFNsaWRlcyB8fCBDLmFjdGl2ZUluZGV4ID4gQy5zbGlkZXMubGVuZ3RoIC0gMiAqIGIuc2xpZGVzUGVyVmlldykgJiYgKGEgPSAtQy5zbGlkZXMubGVuZ3RoICsgQy5hY3RpdmVJbmRleCArIEMubG9vcGVkU2xpZGVzLCBDLnN3aXBlVG8oYSwgMCwgITEpKVxyXG4gICAgICAgIH0sIEMubG9hZFNsaWRlcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB2YXIgYSA9IFwiXCI7XHJcbiAgICAgICAgICAgIEMuYWN0aXZlTG9hZGVySW5kZXggPSAwO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBjID0gYi5sb2FkZXIuc2xpZGVzLCBkID0gYi5sb2FkZXIubG9hZEFsbFNsaWRlcyA/IGMubGVuZ3RoIDogYi5zbGlkZXNQZXJWaWV3ICogKDEgKyBiLmxvYWRlci5zdXJyb3VuZEdyb3VwcyksIGUgPSAwOyBkID4gZTsgZSsrKSBhICs9IFwib3V0ZXJcIiA9PT0gYi5sb2FkZXIuc2xpZGVzSFRNTFR5cGUgPyBjW2VdIDogXCI8XCIgKyBiLnNsaWRlRWxlbWVudCArICcgY2xhc3M9XCInICsgYi5zbGlkZUNsYXNzICsgJ1wiIGRhdGEtc3dpcGVyaW5kZXg9XCInICsgZSArICdcIj4nICsgY1tlXSArIFwiPC9cIiArIGIuc2xpZGVFbGVtZW50ICsgXCI+XCI7XHJcbiAgICAgICAgICAgIEMud3JhcHBlci5pbm5lckhUTUwgPSBhLCBDLmNhbGNTbGlkZXMoITApLCBiLmxvYWRlci5sb2FkQWxsU2xpZGVzIHx8IEMud3JhcHBlclRyYW5zaXRpb25FbmQoQy5yZWxvYWRTbGlkZXMsICEwKVxyXG4gICAgICAgIH0sIEMucmVsb2FkU2xpZGVzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHZhciBhID0gYi5sb2FkZXIuc2xpZGVzLFxyXG4gICAgICAgICAgICAgICAgYyA9IHBhcnNlSW50KEMuYWN0aXZlU2xpZGUoKS5kYXRhKFwic3dpcGVyaW5kZXhcIiksIDEwKTtcclxuICAgICAgICAgICAgaWYgKCEoMCA+IGMgfHwgYyA+IGEubGVuZ3RoIC0gMSkpIHtcclxuICAgICAgICAgICAgICAgIEMuYWN0aXZlTG9hZGVySW5kZXggPSBjO1xyXG4gICAgICAgICAgICAgICAgdmFyIGQgPSBNYXRoLm1heCgwLCBjIC0gYi5zbGlkZXNQZXJWaWV3ICogYi5sb2FkZXIuc3Vycm91bmRHcm91cHMpLFxyXG4gICAgICAgICAgICAgICAgICAgIGUgPSBNYXRoLm1pbihjICsgYi5zbGlkZXNQZXJWaWV3ICogKDEgKyBiLmxvYWRlci5zdXJyb3VuZEdyb3VwcykgLSAxLCBhLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGMgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGYgPSAtRSAqIChjIC0gZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgQy5zZXRXcmFwcGVyVHJhbnNsYXRlKGYpLCBDLnNldFdyYXBwZXJUcmFuc2l0aW9uKDApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgZztcclxuICAgICAgICAgICAgICAgIGlmIChcInJlbG9hZFwiID09PSBiLmxvYWRlci5sb2dpYykge1xyXG4gICAgICAgICAgICAgICAgICAgIEMud3JhcHBlci5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBoID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSBkOyBlID49IGc7IGcrKykgaCArPSBcIm91dGVyXCIgPT09IGIubG9hZGVyLnNsaWRlc0hUTUxUeXBlID8gYVtnXSA6IFwiPFwiICsgYi5zbGlkZUVsZW1lbnQgKyAnIGNsYXNzPVwiJyArIGIuc2xpZGVDbGFzcyArICdcIiBkYXRhLXN3aXBlcmluZGV4PVwiJyArIGcgKyAnXCI+JyArIGFbZ10gKyBcIjwvXCIgKyBiLnNsaWRlRWxlbWVudCArIFwiPlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIEMud3JhcHBlci5pbm5lckhUTUwgPSBoXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpID0gMWUzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBqID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGcgPSAwOyBnIDwgQy5zbGlkZXMubGVuZ3RoOyBnKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGsgPSBDLnNsaWRlc1tnXS5kYXRhKFwic3dpcGVyaW5kZXhcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPiBrIHx8IGsgPiBlID8gQy53cmFwcGVyLnJlbW92ZUNoaWxkKEMuc2xpZGVzW2ddKSA6IChpID0gTWF0aC5taW4oaywgaSksIGogPSBNYXRoLm1heChrLCBqKSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChnID0gZDsgZSA+PSBnOyBnKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPiBnICYmIChsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChiLnNsaWRlRWxlbWVudCksIGwuY2xhc3NOYW1lID0gYi5zbGlkZUNsYXNzLCBsLnNldEF0dHJpYnV0ZShcImRhdGEtc3dpcGVyaW5kZXhcIiwgZyksIGwuaW5uZXJIVE1MID0gYVtnXSwgQy53cmFwcGVyLmluc2VydEJlZm9yZShsLCBDLndyYXBwZXIuZmlyc3RDaGlsZCkpLCBnID4gaiAmJiAobCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYi5zbGlkZUVsZW1lbnQpLCBsLmNsYXNzTmFtZSA9IGIuc2xpZGVDbGFzcywgbC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXN3aXBlcmluZGV4XCIsIGcpLCBsLmlubmVySFRNTCA9IGFbZ10sIEMud3JhcHBlci5hcHBlbmRDaGlsZChsKSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBDLnJlSW5pdCghMClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sIEEoKVxyXG4gICAgfVxyXG59O1xyXG5Td2lwZXIucHJvdG90eXBlID0ge1xyXG4gICAgcGx1Z2luczoge30sXHJcbiAgICB3cmFwcGVyVHJhbnNpdGlvbkVuZDogZnVuY3Rpb24oYSwgYikge1xyXG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xyXG5cclxuICAgICAgICBmdW5jdGlvbiBjKGgpIHtcclxuICAgICAgICAgICAgaWYgKGgudGFyZ2V0ID09PSBmICYmIChhKGUpLCBlLnBhcmFtcy5xdWV1ZUVuZENhbGxiYWNrcyAmJiAoZS5fcXVldWVFbmRDYWxsYmFja3MgPSAhMSksICFiKSlcclxuICAgICAgICAgICAgICAgIGZvciAoZCA9IDA7IGQgPCBnLmxlbmd0aDsgZCsrKSBlLmgucmVtb3ZlRXZlbnRMaXN0ZW5lcihmLCBnW2RdLCBjKVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgZCwgZSA9IHRoaXMsXHJcbiAgICAgICAgICAgIGYgPSBlLndyYXBwZXIsXHJcbiAgICAgICAgICAgIGcgPSBbXCJ3ZWJraXRUcmFuc2l0aW9uRW5kXCIsIFwidHJhbnNpdGlvbmVuZFwiLCBcIm9UcmFuc2l0aW9uRW5kXCIsIFwiTVNUcmFuc2l0aW9uRW5kXCIsIFwibXNUcmFuc2l0aW9uRW5kXCJdO1xyXG4gICAgICAgIGlmIChhKVxyXG4gICAgICAgICAgICBmb3IgKGQgPSAwOyBkIDwgZy5sZW5ndGg7IGQrKykgZS5oLmFkZEV2ZW50TGlzdGVuZXIoZiwgZ1tkXSwgYylcclxuICAgIH0sXHJcbiAgICBnZXRXcmFwcGVyVHJhbnNsYXRlOiBmdW5jdGlvbihhKSB7IFwidXNlIHN0cmljdFwiOyB2YXIgYiwgYywgZCwgZSwgZiA9IHRoaXMud3JhcHBlcjsgcmV0dXJuIFwidW5kZWZpbmVkXCIgPT0gdHlwZW9mIGEgJiYgKGEgPSBcImhvcml6b250YWxcIiA9PT0gdGhpcy5wYXJhbXMubW9kZSA/IFwieFwiIDogXCJ5XCIpLCB0aGlzLnN1cHBvcnQudHJhbnNmb3JtcyAmJiB0aGlzLnBhcmFtcy51c2VDU1MzVHJhbnNmb3JtcyA/IChkID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZiwgbnVsbCksIHdpbmRvdy5XZWJLaXRDU1NNYXRyaXggPyBlID0gbmV3IFdlYktpdENTU01hdHJpeChcIm5vbmVcIiA9PT0gZC53ZWJraXRUcmFuc2Zvcm0gPyBcIlwiIDogZC53ZWJraXRUcmFuc2Zvcm0pIDogKGUgPSBkLk1velRyYW5zZm9ybSB8fCBkLk9UcmFuc2Zvcm0gfHwgZC5Nc1RyYW5zZm9ybSB8fCBkLm1zVHJhbnNmb3JtIHx8IGQudHJhbnNmb3JtIHx8IGQuZ2V0UHJvcGVydHlWYWx1ZShcInRyYW5zZm9ybVwiKS5yZXBsYWNlKFwidHJhbnNsYXRlKFwiLCBcIm1hdHJpeCgxLCAwLCAwLCAxLFwiKSwgYiA9IGUudG9TdHJpbmcoKS5zcGxpdChcIixcIikpLCBcInhcIiA9PT0gYSAmJiAoYyA9IHdpbmRvdy5XZWJLaXRDU1NNYXRyaXggPyBlLm00MSA6IHBhcnNlRmxvYXQoMTYgPT09IGIubGVuZ3RoID8gYlsxMl0gOiBiWzRdKSksIFwieVwiID09PSBhICYmIChjID0gd2luZG93LldlYktpdENTU01hdHJpeCA/IGUubTQyIDogcGFyc2VGbG9hdCgxNiA9PT0gYi5sZW5ndGggPyBiWzEzXSA6IGJbNV0pKSkgOiAoXCJ4XCIgPT09IGEgJiYgKGMgPSBwYXJzZUZsb2F0KGYuc3R5bGUubGVmdCwgMTApIHx8IDApLCBcInlcIiA9PT0gYSAmJiAoYyA9IHBhcnNlRmxvYXQoZi5zdHlsZS50b3AsIDEwKSB8fCAwKSksIGMgfHwgMCB9LFxyXG4gICAgc2V0V3JhcHBlclRyYW5zbGF0ZTogZnVuY3Rpb24oYSwgYiwgYykge1xyXG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xyXG4gICAgICAgIHZhciBkLCBlID0gdGhpcy53cmFwcGVyLnN0eWxlLFxyXG4gICAgICAgICAgICBmID0geyB4OiAwLCB5OiAwLCB6OiAwIH07XHJcbiAgICAgICAgMyA9PT0gYXJndW1lbnRzLmxlbmd0aCA/IChmLnggPSBhLCBmLnkgPSBiLCBmLnogPSBjKSA6IChcInVuZGVmaW5lZFwiID09IHR5cGVvZiBiICYmIChiID0gXCJob3Jpem9udGFsXCIgPT09IHRoaXMucGFyYW1zLm1vZGUgPyBcInhcIiA6IFwieVwiKSwgZltiXSA9IGEpLCB0aGlzLnN1cHBvcnQudHJhbnNmb3JtcyAmJiB0aGlzLnBhcmFtcy51c2VDU1MzVHJhbnNmb3JtcyA/IChkID0gdGhpcy5zdXBwb3J0LnRyYW5zZm9ybXMzZCA/IFwidHJhbnNsYXRlM2QoXCIgKyBmLnggKyBcInB4LCBcIiArIGYueSArIFwicHgsIFwiICsgZi56ICsgXCJweClcIiA6IFwidHJhbnNsYXRlKFwiICsgZi54ICsgXCJweCwgXCIgKyBmLnkgKyBcInB4KVwiLCBlLndlYmtpdFRyYW5zZm9ybSA9IGUuTXNUcmFuc2Zvcm0gPSBlLm1zVHJhbnNmb3JtID0gZS5Nb3pUcmFuc2Zvcm0gPSBlLk9UcmFuc2Zvcm0gPSBlLnRyYW5zZm9ybSA9IGQpIDogKGUubGVmdCA9IGYueCArIFwicHhcIiwgZS50b3AgPSBmLnkgKyBcInB4XCIpLCB0aGlzLmNhbGxQbHVnaW5zKFwib25TZXRXcmFwcGVyVHJhbnNmb3JtXCIsIGYpLCB0aGlzLnBhcmFtcy5vblNldFdyYXBwZXJUcmFuc2Zvcm0gJiYgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5wYXJhbXMub25TZXRXcmFwcGVyVHJhbnNmb3JtLCB0aGlzLCBmKVxyXG4gICAgfSxcclxuICAgIHNldFdyYXBwZXJUcmFuc2l0aW9uOiBmdW5jdGlvbihhKSB7XHJcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XHJcbiAgICAgICAgdmFyIGIgPSB0aGlzLndyYXBwZXIuc3R5bGU7XHJcbiAgICAgICAgYi53ZWJraXRUcmFuc2l0aW9uRHVyYXRpb24gPSBiLk1zVHJhbnNpdGlvbkR1cmF0aW9uID0gYi5tc1RyYW5zaXRpb25EdXJhdGlvbiA9IGIuTW96VHJhbnNpdGlvbkR1cmF0aW9uID0gYi5PVHJhbnNpdGlvbkR1cmF0aW9uID0gYi50cmFuc2l0aW9uRHVyYXRpb24gPSBhIC8gMWUzICsgXCJzXCIsIHRoaXMuY2FsbFBsdWdpbnMoXCJvblNldFdyYXBwZXJUcmFuc2l0aW9uXCIsIHsgZHVyYXRpb246IGEgfSksIHRoaXMucGFyYW1zLm9uU2V0V3JhcHBlclRyYW5zaXRpb24gJiYgdGhpcy5maXJlQ2FsbGJhY2sodGhpcy5wYXJhbXMub25TZXRXcmFwcGVyVHJhbnNpdGlvbiwgdGhpcywgYSlcclxuICAgIH0sXHJcbiAgICBoOiB7XHJcbiAgICAgICAgZ2V0V2lkdGg6IGZ1bmN0aW9uKGEsIGIsIGMpIHtcclxuICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XHJcbiAgICAgICAgICAgIHZhciBkID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoYSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShcIndpZHRoXCIpLFxyXG4gICAgICAgICAgICAgICAgZSA9IHBhcnNlRmxvYXQoZCk7XHJcbiAgICAgICAgICAgIHJldHVybiAoaXNOYU4oZSkgfHwgZC5pbmRleE9mKFwiJVwiKSA+IDAgfHwgMCA+IGUpICYmIChlID0gYS5vZmZzZXRXaWR0aCAtIHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUoYSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmctbGVmdFwiKSkgLSBwYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGEsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nLXJpZ2h0XCIpKSksIGIgJiYgKGUgKz0gcGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZy1sZWZ0XCIpKSArIHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUoYSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmctcmlnaHRcIikpKSwgYyA/IE1hdGguY2VpbChlKSA6IGVcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldEhlaWdodDogZnVuY3Rpb24oYSwgYiwgYykge1xyXG4gICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcclxuICAgICAgICAgICAgaWYgKGIpIHJldHVybiBhLm9mZnNldEhlaWdodDtcclxuICAgICAgICAgICAgdmFyIGQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShhLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKFwiaGVpZ2h0XCIpLFxyXG4gICAgICAgICAgICAgICAgZSA9IHBhcnNlRmxvYXQoZCk7XHJcbiAgICAgICAgICAgIHJldHVybiAoaXNOYU4oZSkgfHwgZC5pbmRleE9mKFwiJVwiKSA+IDAgfHwgMCA+IGUpICYmIChlID0gYS5vZmZzZXRIZWlnaHQgLSBwYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGEsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nLXRvcFwiKSkgLSBwYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGEsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nLWJvdHRvbVwiKSkpLCBiICYmIChlICs9IHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUoYSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmctdG9wXCIpKSArIHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUoYSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShcInBhZGRpbmctYm90dG9tXCIpKSksIGMgPyBNYXRoLmNlaWwoZSkgOiBlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXRPZmZzZXQ6IGZ1bmN0aW9uKGEpIHtcclxuICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XHJcbiAgICAgICAgICAgIHZhciBiID0gYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxcclxuICAgICAgICAgICAgICAgIGMgPSBkb2N1bWVudC5ib2R5LFxyXG4gICAgICAgICAgICAgICAgZCA9IGEuY2xpZW50VG9wIHx8IGMuY2xpZW50VG9wIHx8IDAsXHJcbiAgICAgICAgICAgICAgICBlID0gYS5jbGllbnRMZWZ0IHx8IGMuY2xpZW50TGVmdCB8fCAwLFxyXG4gICAgICAgICAgICAgICAgZiA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBhLnNjcm9sbFRvcCxcclxuICAgICAgICAgICAgICAgIGcgPSB3aW5kb3cucGFnZVhPZmZzZXQgfHwgYS5zY3JvbGxMZWZ0O1xyXG4gICAgICAgICAgICByZXR1cm4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmICF3aW5kb3cucGFnZVlPZmZzZXQgJiYgKGYgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wLCBnID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQpLCB7IHRvcDogYi50b3AgKyBmIC0gZCwgbGVmdDogYi5sZWZ0ICsgZyAtIGUgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd2luZG93V2lkdGg6IGZ1bmN0aW9uKCkgeyBcInVzZSBzdHJpY3RcIjsgcmV0dXJuIHdpbmRvdy5pbm5lcldpZHRoID8gd2luZG93LmlubmVyV2lkdGggOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIDogdm9pZCAwIH0sXHJcbiAgICAgICAgd2luZG93SGVpZ2h0OiBmdW5jdGlvbigpIHsgXCJ1c2Ugc3RyaWN0XCI7IHJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQgPyB3aW5kb3cuaW5uZXJIZWlnaHQgOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgOiB2b2lkIDAgfSxcclxuICAgICAgICB3aW5kb3dTY3JvbGw6IGZ1bmN0aW9uKCkgeyBcInVzZSBzdHJpY3RcIjsgcmV0dXJuIFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIHBhZ2VZT2Zmc2V0ID8geyBsZWZ0OiB3aW5kb3cucGFnZVhPZmZzZXQsIHRvcDogd2luZG93LnBhZ2VZT2Zmc2V0IH0gOiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgPyB7IGxlZnQ6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LCB0b3A6IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfSA6IHZvaWQgMCB9LFxyXG4gICAgICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uKGEsIGIsIGMsIGQpIHsgXCJ1c2Ugc3RyaWN0XCI7IFwidW5kZWZpbmVkXCIgPT0gdHlwZW9mIGQgJiYgKGQgPSAhMSksIGEuYWRkRXZlbnRMaXN0ZW5lciA/IGEuYWRkRXZlbnRMaXN0ZW5lcihiLCBjLCBkKSA6IGEuYXR0YWNoRXZlbnQgJiYgYS5hdHRhY2hFdmVudChcIm9uXCIgKyBiLCBjKSB9LFxyXG4gICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uKGEsIGIsIGMsIGQpIHsgXCJ1c2Ugc3RyaWN0XCI7IFwidW5kZWZpbmVkXCIgPT0gdHlwZW9mIGQgJiYgKGQgPSAhMSksIGEucmVtb3ZlRXZlbnRMaXN0ZW5lciA/IGEucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLCBjLCBkKSA6IGEuZGV0YWNoRXZlbnQgJiYgYS5kZXRhY2hFdmVudChcIm9uXCIgKyBiLCBjKSB9XHJcbiAgICB9LFxyXG4gICAgc2V0VHJhbnNmb3JtOiBmdW5jdGlvbihhLCBiKSB7XHJcbiAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XHJcbiAgICAgICAgdmFyIGMgPSBhLnN0eWxlO1xyXG4gICAgICAgIGMud2Via2l0VHJhbnNmb3JtID0gYy5Nc1RyYW5zZm9ybSA9IGMubXNUcmFuc2Zvcm0gPSBjLk1velRyYW5zZm9ybSA9IGMuT1RyYW5zZm9ybSA9IGMudHJhbnNmb3JtID0gYlxyXG4gICAgfSxcclxuICAgIHNldFRyYW5zbGF0ZTogZnVuY3Rpb24oYSwgYikge1xyXG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xyXG4gICAgICAgIHZhciBjID0gYS5zdHlsZSxcclxuICAgICAgICAgICAgZCA9IHsgeDogYi54IHx8IDAsIHk6IGIueSB8fCAwLCB6OiBiLnogfHwgMCB9LFxyXG4gICAgICAgICAgICBlID0gdGhpcy5zdXBwb3J0LnRyYW5zZm9ybXMzZCA/IFwidHJhbnNsYXRlM2QoXCIgKyBkLnggKyBcInB4LFwiICsgZC55ICsgXCJweCxcIiArIGQueiArIFwicHgpXCIgOiBcInRyYW5zbGF0ZShcIiArIGQueCArIFwicHgsXCIgKyBkLnkgKyBcInB4KVwiO1xyXG4gICAgICAgIGMud2Via2l0VHJhbnNmb3JtID0gYy5Nc1RyYW5zZm9ybSA9IGMubXNUcmFuc2Zvcm0gPSBjLk1velRyYW5zZm9ybSA9IGMuT1RyYW5zZm9ybSA9IGMudHJhbnNmb3JtID0gZSwgdGhpcy5zdXBwb3J0LnRyYW5zZm9ybXMgfHwgKGMubGVmdCA9IGQueCArIFwicHhcIiwgYy50b3AgPSBkLnkgKyBcInB4XCIpXHJcbiAgICB9LFxyXG4gICAgc2V0VHJhbnNpdGlvbjogZnVuY3Rpb24oYSwgYikge1xyXG4gICAgICAgIFwidXNlIHN0cmljdFwiO1xyXG4gICAgICAgIHZhciBjID0gYS5zdHlsZTtcclxuICAgICAgICBjLndlYmtpdFRyYW5zaXRpb25EdXJhdGlvbiA9IGMuTXNUcmFuc2l0aW9uRHVyYXRpb24gPSBjLm1zVHJhbnNpdGlvbkR1cmF0aW9uID0gYy5Nb3pUcmFuc2l0aW9uRHVyYXRpb24gPSBjLk9UcmFuc2l0aW9uRHVyYXRpb24gPSBjLnRyYW5zaXRpb25EdXJhdGlvbiA9IGIgKyBcIm1zXCJcclxuICAgIH0sXHJcbiAgICBzdXBwb3J0OiB7IHRvdWNoOiB3aW5kb3cuTW9kZXJuaXpyICYmIE1vZGVybml6ci50b3VjaCA9PT0gITAgfHwgZnVuY3Rpb24oKSB7IFwidXNlIHN0cmljdFwiOyByZXR1cm4gISEoXCJvbnRvdWNoc3RhcnRcIiBpbiB3aW5kb3cgfHwgd2luZG93LkRvY3VtZW50VG91Y2ggJiYgZG9jdW1lbnQgaW5zdGFuY2VvZiBEb2N1bWVudFRvdWNoKSB9KCksIHRyYW5zZm9ybXMzZDogd2luZG93Lk1vZGVybml6ciAmJiBNb2Rlcm5penIuY3NzdHJhbnNmb3JtczNkID09PSAhMCB8fCBmdW5jdGlvbigpIHsgXCJ1c2Ugc3RyaWN0XCI7IHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKS5zdHlsZTsgcmV0dXJuIFwid2Via2l0UGVyc3BlY3RpdmVcIiBpbiBhIHx8IFwiTW96UGVyc3BlY3RpdmVcIiBpbiBhIHx8IFwiT1BlcnNwZWN0aXZlXCIgaW4gYSB8fCBcIk1zUGVyc3BlY3RpdmVcIiBpbiBhIHx8IFwicGVyc3BlY3RpdmVcIiBpbiBhIH0oKSwgdHJhbnNmb3Jtczogd2luZG93Lk1vZGVybml6ciAmJiBNb2Rlcm5penIuY3NzdHJhbnNmb3JtcyA9PT0gITAgfHwgZnVuY3Rpb24oKSB7IFwidXNlIHN0cmljdFwiOyB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuc3R5bGU7IHJldHVybiBcInRyYW5zZm9ybVwiIGluIGEgfHwgXCJXZWJraXRUcmFuc2Zvcm1cIiBpbiBhIHx8IFwiTW96VHJhbnNmb3JtXCIgaW4gYSB8fCBcIm1zVHJhbnNmb3JtXCIgaW4gYSB8fCBcIk1zVHJhbnNmb3JtXCIgaW4gYSB8fCBcIk9UcmFuc2Zvcm1cIiBpbiBhIH0oKSwgdHJhbnNpdGlvbnM6IHdpbmRvdy5Nb2Rlcm5penIgJiYgTW9kZXJuaXpyLmNzc3RyYW5zaXRpb25zID09PSAhMCB8fCBmdW5jdGlvbigpIHsgXCJ1c2Ugc3RyaWN0XCI7IHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKS5zdHlsZTsgcmV0dXJuIFwidHJhbnNpdGlvblwiIGluIGEgfHwgXCJXZWJraXRUcmFuc2l0aW9uXCIgaW4gYSB8fCBcIk1velRyYW5zaXRpb25cIiBpbiBhIHx8IFwibXNUcmFuc2l0aW9uXCIgaW4gYSB8fCBcIk1zVHJhbnNpdGlvblwiIGluIGEgfHwgXCJPVHJhbnNpdGlvblwiIGluIGEgfSgpLCBjbGFzc0xpc3Q6IGZ1bmN0aW9uKCkgeyBcInVzZSBzdHJpY3RcIjsgdmFyIGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpOyByZXR1cm4gXCJjbGFzc0xpc3RcIiBpbiBhIH0oKSB9LFxyXG4gICAgYnJvd3Nlcjoge1xyXG4gICAgICAgIGllODogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xyXG4gICAgICAgICAgICB2YXIgYSA9IC0xO1xyXG4gICAgICAgICAgICBpZiAoXCJNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXJcIiA9PT0gbmF2aWdhdG9yLmFwcE5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBiID0gbmF2aWdhdG9yLnVzZXJBZ2VudCxcclxuICAgICAgICAgICAgICAgICAgICBjID0gbmV3IFJlZ0V4cCgvTVNJRSAoWzAtOV17MSx9W1xcLjAtOV17MCx9KS8pO1xyXG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gYy5leGVjKGIpICYmIChhID0gcGFyc2VGbG9hdChSZWdFeHAuJDEpKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAtMSAhPT0gYSAmJiA5ID4gYVxyXG4gICAgICAgIH0oKSxcclxuICAgICAgICBpZTEwOiB3aW5kb3cubmF2aWdhdG9yLm1zUG9pbnRlckVuYWJsZWQsXHJcbiAgICAgICAgaWUxMTogd2luZG93Lm5hdmlnYXRvci5wb2ludGVyRW5hYmxlZFxyXG4gICAgfVxyXG59LCAod2luZG93LmpRdWVyeSB8fCB3aW5kb3cuWmVwdG8pICYmICEgZnVuY3Rpb24oYSkge1xyXG4gICAgXCJ1c2Ugc3RyaWN0XCI7XHJcbiAgICBhLmZuLnN3aXBlciA9IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICB2YXIgYztcclxuICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGQpIHtcclxuICAgICAgICAgICAgdmFyIGUgPSBhKHRoaXMpO1xyXG4gICAgICAgICAgICBpZiAoIWUuZGF0YShcInN3aXBlclwiKSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGYgPSBuZXcgU3dpcGVyKGVbMF0sIGIpO1xyXG4gICAgICAgICAgICAgICAgZCB8fCAoYyA9IGYpLCBlLmRhdGEoXCJzd2lwZXJcIiwgZilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pLCBjXHJcbiAgICB9XHJcbn0od2luZG93LmpRdWVyeSB8fCB3aW5kb3cuWmVwdG8pLCBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBtb2R1bGUgJiYgKG1vZHVsZS5leHBvcnRzID0gU3dpcGVyKSwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBkZWZpbmUgJiYgZGVmaW5lLmFtZCAmJiBkZWZpbmUoW10sIGZ1bmN0aW9uKCkgeyBcInVzZSBzdHJpY3RcIjsgcmV0dXJuIFN3aXBlciB9KTtcclxuXHJcblxyXG5cclxuLy8gcmVxdWlyZShbXCJjb25maWdcIl0sIGZ1bmN0aW9uKGNvbmZpZykge1xyXG4vLyAgICAgcmVxdWlyZShbXCJqcXVlcnlcIiwgXCJmb2N1c1BpY1wiLCAnc3dpcGVyJ10sIGZ1bmN0aW9uKCQpIHtcclxudmFyIF9pbmRleCA9IDE7XHJcbnZhciBpdHMgPSAwO1xyXG52YXIgc2xpZGVyO1xyXG52YXIgbWdzID0gMDtcclxuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XHJcblxyXG4gICAgaXRzKys7XHJcbiAgICBpZiAoaXRzID4gMTMwMCkge1xyXG4gICAgICAgICQoXCIuc2Nyb2xsX2l0ZW0gdWxcIikuYW5pbWF0ZSh7IGxlZnQ6IDAgfSwgNTApO1xyXG4gICAgICAgIGl0cyA9IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgICQoXCIuc2Nyb2xsX2l0ZW0gdWxcIikuYW5pbWF0ZSh7IGxlZnQ6IC1pdHMgfSwgNTApO1xyXG4gICAgfVxyXG5cclxufSwgNTApO1xyXG4oZnVuY3Rpb24oYSkge1xyXG4gICAgYS5mbi5zbGlkZXMgPSBmdW5jdGlvbihiKSB7XHJcbiAgICAgICAgcmV0dXJuIGIgPSBhLmV4dGVuZCh7fSwgYS5mbi5zbGlkZXMub3B0aW9uLCBiKSwgdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBmdW5jdGlvbiB3KGcsIGgsIGkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghcCAmJiBvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcCA9ICEwLCBiLmFuaW1hdGlvblN0YXJ0KG4gKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm5leHRcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBuLCBrID0gbiArIDEsIGsgPSBlID09PSBrID8gMCA6IGssIHIgPSBmICogMiwgZyA9IC1mICogMiwgbiA9IGs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInByZXZcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBuLCBrID0gbiAtIDEsIGsgPSBrID09PSAtMSA/IGUgLSAxIDogaywgciA9IDAsIGcgPSAwLCBuID0gaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwicGFnaW5hdGlvblwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IHBhcnNlSW50KGksIDEwKSwgbCA9IGEoXCIuXCIgKyBiLnBhZ2luYXRpb25DbGFzcyArIFwiIGxpLlwiICsgYi5jdXJyZW50Q2xhc3MgKyBcIiBhXCIsIGMpLmF0dHIoXCJocmVmXCIpLm1hdGNoKFwiW14jL10rJFwiKSwgayA+IGwgPyAociA9IGYgKiAyLCBnID0gLWYgKiAyKSA6IChyID0gMCwgZyA9IDApLCBuID0ga1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBoID09PSBcImZhZGVcIiA/IGIuY3Jvc3NmYWRlID8gZC5jaGlsZHJlbihcIjplcShcIiArIGsgKyBcIilcIiwgYykuY3NzKHsgekluZGV4OiAxMCB9KS5mYWRlSW4oYi5mYWRlU3BlZWQsIGIuZmFkZUVhc2luZywgZnVuY3Rpb24oKSB7IGIuYXV0b0hlaWdodCA/IGQuYW5pbWF0ZSh7IGhlaWdodDogZC5jaGlsZHJlbihcIjplcShcIiArIGsgKyBcIilcIiwgYykub3V0ZXJIZWlnaHQoKSB9LCBiLmF1dG9IZWlnaHRTcGVlZCwgZnVuY3Rpb24oKSB7IGQuY2hpbGRyZW4oXCI6ZXEoXCIgKyBsICsgXCIpXCIsIGMpLmNzcyh7IGRpc3BsYXk6IFwibm9uZVwiLCB6SW5kZXg6IDAgfSksIGQuY2hpbGRyZW4oXCI6ZXEoXCIgKyBrICsgXCIpXCIsIGMpLmNzcyh7IHpJbmRleDogMCB9KSwgYi5hbmltYXRpb25Db21wbGV0ZShrICsgMSksIHAgPSAhMSB9KSA6IChkLmNoaWxkcmVuKFwiOmVxKFwiICsgbCArIFwiKVwiLCBjKS5jc3MoeyBkaXNwbGF5OiBcIm5vbmVcIiwgekluZGV4OiAwIH0pLCBkLmNoaWxkcmVuKFwiOmVxKFwiICsgayArIFwiKVwiLCBjKS5jc3MoeyB6SW5kZXg6IDAgfSksIGIuYW5pbWF0aW9uQ29tcGxldGUoayArIDEpLCBwID0gITEpIH0pIDogZC5jaGlsZHJlbihcIjplcShcIiArIGwgKyBcIilcIiwgYykuZmFkZU91dChiLmZhZGVTcGVlZCwgYi5mYWRlRWFzaW5nLCBmdW5jdGlvbigpIHsgYi5hdXRvSGVpZ2h0ID8gZC5hbmltYXRlKHsgaGVpZ2h0OiBkLmNoaWxkcmVuKFwiOmVxKFwiICsgayArIFwiKVwiLCBjKS5vdXRlckhlaWdodCgpIH0sIGIuYXV0b0hlaWdodFNwZWVkLCBmdW5jdGlvbigpIHsgZC5jaGlsZHJlbihcIjplcShcIiArIGsgKyBcIilcIiwgYykuZmFkZUluKGIuZmFkZVNwZWVkLCBiLmZhZGVFYXNpbmcpIH0pIDogZC5jaGlsZHJlbihcIjplcShcIiArIGsgKyBcIilcIiwgYykuZmFkZUluKGIuZmFkZVNwZWVkLCBiLmZhZGVFYXNpbmcsIGZ1bmN0aW9uKCkgeyBhLmJyb3dzZXIubXNpZSAmJiBhKHRoaXMpLmdldCgwKS5zdHlsZS5yZW1vdmVBdHRyaWJ1dGUoXCJmaWx0ZXJcIikgfSksIGIuYW5pbWF0aW9uQ29tcGxldGUoayArIDEpLCBwID0gITEgfSkgOiAoZC5jaGlsZHJlbihcIjplcShcIiArIGsgKyBcIilcIikuY3NzKHsgbGVmdDogciwgZGlzcGxheTogXCJibG9ja1wiIH0pLCBiLmF1dG9IZWlnaHQgPyBkLmFuaW1hdGUoeyBsZWZ0OiBnLCBoZWlnaHQ6IGQuY2hpbGRyZW4oXCI6ZXEoXCIgKyBrICsgXCIpXCIpLm91dGVySGVpZ2h0KCkgfSwgYi5zbGlkZVNwZWVkLCBiLnNsaWRlRWFzaW5nLCBmdW5jdGlvbigpIHsgZC5jc3MoeyBsZWZ0OiAtZiB9KSwgZC5jaGlsZHJlbihcIjplcShcIiArIGsgKyBcIilcIikuY3NzKHsgbGVmdDogZiwgekluZGV4OiA1IH0pLCBkLmNoaWxkcmVuKFwiOmVxKFwiICsgbCArIFwiKVwiKS5jc3MoeyBsZWZ0OiBmLCBkaXNwbGF5OiBcIm5vbmVcIiwgekluZGV4OiAwIH0pLCBiLmFuaW1hdGlvbkNvbXBsZXRlKGsgKyAxKSwgcCA9ICExIH0pIDogZC5hbmltYXRlKHsgbGVmdDogZyB9LCBiLnNsaWRlU3BlZWQsIGIuc2xpZGVFYXNpbmcsIGZ1bmN0aW9uKCkgeyBkLmNzcyh7IGxlZnQ6IC1mIH0pLCBkLmNoaWxkcmVuKFwiOmVxKFwiICsgayArIFwiKVwiKS5jc3MoeyBsZWZ0OiBmLCB6SW5kZXg6IDUgfSksIGQuY2hpbGRyZW4oXCI6ZXEoXCIgKyBsICsgXCIpXCIpLmNzcyh7IGxlZnQ6IGYsIGRpc3BsYXk6IFwibm9uZVwiLCB6SW5kZXg6IDAgfSksIGIuYW5pbWF0aW9uQ29tcGxldGUoayArIDEpLCBwID0gITEgfSkpLCBiLnBhZ2luYXRpb24gJiYgKGEoXCIuXCIgKyBiLnBhZ2luYXRpb25DbGFzcyArIFwiIGxpLlwiICsgYi5jdXJyZW50Q2xhc3MsIGMpLnJlbW92ZUNsYXNzKGIuY3VycmVudENsYXNzKSwgYShcIi5cIiArIGIucGFnaW5hdGlvbkNsYXNzICsgXCIgbGk6ZXEoXCIgKyBrICsgXCIpXCIsIGMpLmFkZENsYXNzKGIuY3VycmVudENsYXNzKSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24geCgpIHsgY2xlYXJJbnRlcnZhbChjLmRhdGEoXCJpbnRlcnZhbFwiKSkgfVxyXG5cclxuICAgICAgICAgICAgZnVuY3Rpb24geSgpIHsgYi5wYXVzZSA/IChjbGVhclRpbWVvdXQoYy5kYXRhKFwicGF1c2VcIikpLCBjbGVhckludGVydmFsKGMuZGF0YShcImludGVydmFsXCIpKSwgdSA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGNsZWFyVGltZW91dChjLmRhdGEoXCJwYXVzZVwiKSksIHYgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsgdyhcIm5leHRcIiwgaSkgfSwgYi5wbGF5KSwgYy5kYXRhKFwiaW50ZXJ2YWxcIiwgdikgfSwgYi5wYXVzZSksIGMuZGF0YShcInBhdXNlXCIsIHUpKSA6IHgoKSB9XHJcbiAgICAgICAgICAgIGEoXCIuXCIgKyBiLmNvbnRhaW5lciwgYSh0aGlzKSkuY2hpbGRyZW4oKS53cmFwQWxsKCc8ZGl2IGNsYXNzPVwic2xpZGVzX2NvbnRyb2xcIi8+Jyk7XHJcbiAgICAgICAgICAgIHZhciBjID0gYSh0aGlzKSxcclxuICAgICAgICAgICAgICAgIGQgPSBhKFwiLnNsaWRlc19jb250cm9sXCIsIGMpLFxyXG4gICAgICAgICAgICAgICAgZSA9IGQuY2hpbGRyZW4oKS5zaXplKCksXHJcbiAgICAgICAgICAgICAgICBmID0gZC5jaGlsZHJlbigpLm91dGVyV2lkdGgoKSxcclxuICAgICAgICAgICAgICAgIGcgPSBkLmNoaWxkcmVuKCkub3V0ZXJIZWlnaHQoKSxcclxuICAgICAgICAgICAgICAgIGggPSBiLnN0YXJ0IC0gMSxcclxuICAgICAgICAgICAgICAgIGkgPSBiLmVmZmVjdC5pbmRleE9mKFwiLFwiKSA8IDAgPyBiLmVmZmVjdCA6IGIuZWZmZWN0LnJlcGxhY2UoXCIgXCIsIFwiXCIpLnNwbGl0KFwiLFwiKVswXSxcclxuICAgICAgICAgICAgICAgIGogPSBiLmVmZmVjdC5pbmRleE9mKFwiLFwiKSA8IDAgPyBpIDogYi5lZmZlY3QucmVwbGFjZShcIiBcIiwgXCJcIikuc3BsaXQoXCIsXCIpWzFdLFxyXG4gICAgICAgICAgICAgICAgayA9IDAsXHJcbiAgICAgICAgICAgICAgICBsID0gMCxcclxuICAgICAgICAgICAgICAgIG0gPSAwLFxyXG4gICAgICAgICAgICAgICAgbiA9IDAsXHJcbiAgICAgICAgICAgICAgICBvLCBwLCBxLCByLCBzLCB0LCB1LCB2O1xyXG4gICAgICAgICAgICBpZiAoZSA8IDIpIHJldHVybiBhKFwiLlwiICsgYi5jb250YWluZXIsIGEodGhpcykpLmZhZGVJbihiLmZhZGVTcGVlZCwgYi5mYWRlRWFzaW5nLCBmdW5jdGlvbigpIHsgbyA9ICEwLCBiLnNsaWRlc0xvYWRlZCgpIH0pLCBhKFwiLlwiICsgYi5uZXh0ICsgXCIsIC5cIiArIGIucHJldikuZmFkZU91dCgwKSwgITE7XHJcbiAgICAgICAgICAgIGlmIChlIDwgMikgcmV0dXJuO1xyXG4gICAgICAgICAgICBoIDwgMCAmJiAoaCA9IDApLCBoID4gZSAmJiAoaCA9IGUgLSAxKSwgYi5zdGFydCAmJiAobiA9IGgpLCBiLnJhbmRvbWl6ZSAmJiBkLnJhbmRvbWl6ZSgpLCBhKFwiLlwiICsgYi5jb250YWluZXIsIGMpLmNzcyh7IG92ZXJmbG93OiBcImhpZGRlblwiLCBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiIH0pLCBkLmNoaWxkcmVuKCkuY3NzKHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdG9wOiAwLCBsZWZ0OiBkLmNoaWxkcmVuKCkub3V0ZXJXaWR0aCgpLCB6SW5kZXg6IDAsIGRpc3BsYXk6IFwibm9uZVwiIH0pLCBkLmNzcyh7IHBvc2l0aW9uOiBcInJlbGF0aXZlXCIsIHdpZHRoOiBmICogMywgaGVpZ2h0OiBnLCBsZWZ0OiAtZiB9KSwgYShcIi5cIiArIGIuY29udGFpbmVyLCBjKS5jc3MoeyBkaXNwbGF5OiBcImJsb2NrXCIgfSksIGIuYXV0b0hlaWdodCAmJiAoZC5jaGlsZHJlbigpLmNzcyh7IGhlaWdodDogXCJhdXRvXCIgfSksIGQuYW5pbWF0ZSh7IGhlaWdodDogZC5jaGlsZHJlbihcIjplcShcIiArIGggKyBcIilcIikub3V0ZXJIZWlnaHQoKSB9LCBiLmF1dG9IZWlnaHRTcGVlZCkpO1xyXG4gICAgICAgICAgICBpZiAoYi5wcmVsb2FkICYmIGQuZmluZChcImltZzplcShcIiArIGggKyBcIilcIikubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBhKFwiLlwiICsgYi5jb250YWluZXIsIGMpLmNzcyh7IGJhY2tncm91bmQ6IFwidXJsKFwiICsgYi5wcmVsb2FkSW1hZ2UgKyBcIikgbm8tcmVwZWF0IDUwJSA1MCVcIiB9KTtcclxuICAgICAgICAgICAgICAgIHZhciB6ID0gZC5maW5kKFwiaW1nOmVxKFwiICsgaCArIFwiKVwiKS5hdHRyKFwic3JjXCIpICsgXCI/XCIgKyAobmV3IERhdGUpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgICAgIGEoXCJpbWdcIiwgYykucGFyZW50KCkuYXR0cihcImNsYXNzXCIpICE9IFwic2xpZGVzX2NvbnRyb2xcIiA/IHQgPSBkLmNoaWxkcmVuKFwiOmVxKDApXCIpWzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA6IHQgPSBkLmZpbmQoXCJpbWc6ZXEoXCIgKyBoICsgXCIpXCIpLCBkLmZpbmQoXCJpbWc6ZXEoXCIgKyBoICsgXCIpXCIpLmF0dHIoXCJzcmNcIiwgeikubG9hZChmdW5jdGlvbigpIHsgZC5maW5kKHQgKyBcIjplcShcIiArIGggKyBcIilcIikuZmFkZUluKGIuZmFkZVNwZWVkLCBiLmZhZGVFYXNpbmcsIGZ1bmN0aW9uKCkgeyBhKHRoaXMpLmNzcyh7IHpJbmRleDogNSB9KSwgYShcIi5cIiArIGIuY29udGFpbmVyLCBjKS5jc3MoeyBiYWNrZ3JvdW5kOiBcIlwiIH0pLCBvID0gITAsIGIuc2xpZGVzTG9hZGVkKCkgfSkgfSlcclxuICAgICAgICAgICAgfSBlbHNlIGQuY2hpbGRyZW4oXCI6ZXEoXCIgKyBoICsgXCIpXCIpLmZhZGVJbihiLmZhZGVTcGVlZCwgYi5mYWRlRWFzaW5nLCBmdW5jdGlvbigpIHsgbyA9ICEwLCBiLnNsaWRlc0xvYWRlZCgpIH0pO1xyXG4gICAgICAgICAgICBiLmJpZ1RhcmdldCAmJiAoZC5jaGlsZHJlbigpLmNzcyh7IGN1cnNvcjogXCJwb2ludGVyXCIgfSksIGQuY2hpbGRyZW4oKS5jbGljayhmdW5jdGlvbigpIHsgcmV0dXJuIHcoXCJuZXh0XCIsIGkpLCAhMSB9KSksIGIuaG92ZXJQYXVzZSAmJiBiLnBsYXkgJiYgKGQuYmluZChcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbigpIHsgeCgpIH0pLCBkLmJpbmQoXCJtb3VzZWxlYXZlXCIsIGZ1bmN0aW9uKCkgeyB5KCkgfSkpLCBiLmdlbmVyYXRlTmV4dFByZXYgJiYgKGEoXCIuXCIgKyBiLmNvbnRhaW5lciwgYykuYWZ0ZXIoJzxhIGhyZWY9XCIjXCIgY2xhc3M9XCInICsgYi5wcmV2ICsgJ1wiPlByZXY8L2E+JyksIGEoXCIuXCIgKyBiLnByZXYsIGMpLmFmdGVyKCc8YSBocmVmPVwiI1wiIGNsYXNzPVwiJyArIGIubmV4dCArICdcIj5OZXh0PC9hPicpKSwgYShcIi5cIiArIGIubmV4dCwgYykuY2xpY2soZnVuY3Rpb24oYSkgeyBhLnByZXZlbnREZWZhdWx0KCksIGIucGxheSAmJiB5KCksIHcoXCJuZXh0XCIsIGkpIH0pLCBhKFwiLlwiICsgYi5wcmV2LCBjKS5jbGljayhmdW5jdGlvbihhKSB7IGEucHJldmVudERlZmF1bHQoKSwgYi5wbGF5ICYmIHkoKSwgdyhcInByZXZcIiwgaSkgfSksIGIuZ2VuZXJhdGVQYWdpbmF0aW9uID8gKGIucHJlcGVuZFBhZ2luYXRpb24gPyBjLnByZXBlbmQoXCI8dWwgY2xhc3M9XCIgKyBiLnBhZ2luYXRpb25DbGFzcyArIFwiPjwvdWw+XCIpIDogYy5hcHBlbmQoXCI8dWwgY2xhc3M9XCIgKyBiLnBhZ2luYXRpb25DbGFzcyArIFwiPjwvdWw+XCIpLCBkLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbigpIHsgYShcIi5cIiArIGIucGFnaW5hdGlvbkNsYXNzLCBjKS5hcHBlbmQoJzxsaT48YSBocmVmPVwiIycgKyBtICsgJ1wiPicgKyAobSArIDEpICsgXCI8L2E+PC9saT5cIiksIG0rKyB9KSkgOiBhKFwiLlwiICsgYi5wYWdpbmF0aW9uQ2xhc3MgKyBcIiBsaSBhXCIsIGMpLmVhY2goZnVuY3Rpb24oKSB7IGEodGhpcykuYXR0cihcImhyZWZcIiwgXCIjXCIgKyBtKSwgbSsrIH0pLCBhKFwiLlwiICsgYi5wYWdpbmF0aW9uQ2xhc3MgKyBcIiBsaTplcShcIiArIGggKyBcIilcIiwgYykuYWRkQ2xhc3MoYi5jdXJyZW50Q2xhc3MpLCBhKFwiLlwiICsgYi5wYWdpbmF0aW9uQ2xhc3MgKyBcIiBsaSBhXCIsIGMpLmNsaWNrKGZ1bmN0aW9uKCkgeyByZXR1cm4gYi5wbGF5ICYmIHkoKSwgcSA9IGEodGhpcykuYXR0cihcImhyZWZcIikubWF0Y2goXCJbXiMvXSskXCIpLCBuICE9IHEgJiYgdyhcInBhZ2luYXRpb25cIiwgaiwgcSksICExIH0pLCBhKFwiYS5saW5rXCIsIGMpLmNsaWNrKGZ1bmN0aW9uKCkgeyByZXR1cm4gYi5wbGF5ICYmIHkoKSwgcSA9IGEodGhpcykuYXR0cihcImhyZWZcIikubWF0Y2goXCJbXiMvXSskXCIpIC0gMSwgbiAhPSBxICYmIHcoXCJwYWdpbmF0aW9uXCIsIGosIHEpLCAhMSB9KSwgYi5wbGF5ICYmICh2ID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7IHcoXCJuZXh0XCIsIGkpIH0sIGIucGxheSksIGMuZGF0YShcImludGVydmFsXCIsIHYpKVxyXG4gICAgICAgIH0pXHJcbiAgICB9LCBhLmZuLnNsaWRlcy5vcHRpb24gPSB7IHByZWxvYWQ6ICExLCBwcmVsb2FkSW1hZ2U6IFwiXCIsIGNvbnRhaW5lcjogXCJzbGlkZXNfY29udGFpbmVyXCIsIGdlbmVyYXRlTmV4dFByZXY6ICExLCBuZXh0OiBcIm5leHRcIiwgcHJldjogXCJwcmV2XCIsIHBhZ2luYXRpb246ICEwLCBnZW5lcmF0ZVBhZ2luYXRpb246ICEwLCBwcmVwZW5kUGFnaW5hdGlvbjogITEsIHBhZ2luYXRpb25DbGFzczogXCJwYWdpbmF0aW9uXCIsIGN1cnJlbnRDbGFzczogXCJjdXJyZW50XCIsIGZhZGVTcGVlZDogMzUwLCBmYWRlRWFzaW5nOiBcIlwiLCBzbGlkZVNwZWVkOiAzNTAsIHNsaWRlRWFzaW5nOiBcIlwiLCBzdGFydDogMSwgZWZmZWN0OiBcInNsaWRlXCIsIGNyb3NzZmFkZTogITEsIHJhbmRvbWl6ZTogITEsIHBsYXk6IDAsIHBhdXNlOiAwLCBob3ZlclBhdXNlOiAhMSwgYXV0b0hlaWdodDogITEsIGF1dG9IZWlnaHRTcGVlZDogMzUwLCBiaWdUYXJnZXQ6ICExLCBhbmltYXRpb25TdGFydDogZnVuY3Rpb24oKSB7fSwgYW5pbWF0aW9uQ29tcGxldGU6IGZ1bmN0aW9uKCkge30sIHNsaWRlc0xvYWRlZDogZnVuY3Rpb24oKSB7fSB9LCBhLmZuLnJhbmRvbWl6ZSA9IGZ1bmN0aW9uKGIpIHtcclxuICAgICAgICBmdW5jdGlvbiBjKCkgeyByZXR1cm4gTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpKSAtIC41IH1cclxuICAgICAgICByZXR1cm4gYSh0aGlzKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB2YXIgZCA9IGEodGhpcyksXHJcbiAgICAgICAgICAgICAgICBlID0gZC5jaGlsZHJlbigpLFxyXG4gICAgICAgICAgICAgICAgZiA9IGUubGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAoZiA+IDEpIHtcclxuICAgICAgICAgICAgICAgIGUuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGcgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBmOyBpKyspIGdbZy5sZW5ndGhdID0gaTtcclxuICAgICAgICAgICAgICAgIGcgPSBnLnNvcnQoYyksIGEuZWFjaChnLCBmdW5jdGlvbihhLCBjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGYgPSBlLmVxKGMpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBnID0gZi5jbG9uZSghMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZy5zaG93KCkuYXBwZW5kVG8oZCksIGIgIT09IHVuZGVmaW5lZCAmJiBiKGYsIGcpLCBmLnJlbW92ZSgpXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxufSkoalF1ZXJ5KVxyXG4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHtcclxuXHJcbiAgICAvL+adv+Wdl+ihjOaDhVxyXG4gICAgcXVvdGVUYWJsZShcIi8vbnVmbS5kZmNmdy5jb20vRU1fRmluYW5jZTIwMTROdW1lcmljQXBwbGljYXRpb24vSlMuYXNweD90eXBlPUNUJmNtZD1DLkJLMDcxMjEmc3R5PUZDT0lBVEEmc29ydFR5cGU9QyZzb3J0UnVsZT0tMSZwYWdlPTEmcGFnZVNpemU9MTImanM9KHtyYW5rOlsoeCldLHBhZ2VzOihwYyl9KSZ0b2tlbj0zYTk2NWE0M2Y3MDVjZjFkOWFkN2UxYTNlNDI5ZDYyMlwiKTtcclxuXHJcbiAgICAkKFwiLnpoZGZDbGljayBhXCIpLmNsaWNrKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICQoXCIjcXVvdGVfdGFibGVcIikuZW1wdHkoKTtcclxuICAgICAgICBpZiAoJChcIi56aGRmQ2xpY2sgYlwiKS5oYXNDbGFzcyhcImljb24tY2hhbmdlLXVwXCIpKSB7XHJcbiAgICAgICAgICAgICQoXCIuemhkZkNsaWNrIGJcIikuYWRkQ2xhc3MoXCJpY29uLWNoYW5nZS1kb3duXCIpLnJlbW92ZUNsYXNzKFwiaWNvbi1jaGFuZ2UtdXBcIik7XHJcbiAgICAgICAgICAgIHF1b3RlVGFibGUoXCIvL251Zm0uZGZjZncuY29tL0VNX0ZpbmFuY2UyMDE0TnVtZXJpY0FwcGxpY2F0aW9uL0pTLmFzcHg/dHlwZT1DVCZjbWQ9Qy5CSzA3MTIxJnN0eT1GQ09JQVRBJnNvcnRUeXBlPUMmc29ydFJ1bGU9MSZwYWdlPTEmcGFnZVNpemU9MTImanM9KHtyYW5rOlsoeCldLHBhZ2VzOihwYyl9KSZ0b2tlbj0zYTk2NWE0M2Y3MDVjZjFkOWFkN2UxYTNlNDI5ZDYyMlwiKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJChcIi56aGRmQ2xpY2sgYlwiKS5hZGRDbGFzcyhcImljb24tY2hhbmdlLXVwXCIpLnJlbW92ZUNsYXNzKFwiaWNvbi1jaGFuZ2UtZG93blwiKTtcclxuICAgICAgICAgICAgcXVvdGVUYWJsZShcIi8vbnVmbS5kZmNmdy5jb20vRU1fRmluYW5jZTIwMTROdW1lcmljQXBwbGljYXRpb24vSlMuYXNweD90eXBlPUNUJmNtZD1DLkJLMDcxMjEmc3R5PUZDT0lBVEEmc29ydFR5cGU9QyZzb3J0UnVsZT0tMSZwYWdlPTEmcGFnZVNpemU9MTImanM9KHtyYW5rOlsoeCldLHBhZ2VzOihwYyl9KSZ0b2tlbj0zYTk2NWE0M2Y3MDVjZjFkOWFkN2UxYTNlNDI5ZDYyMlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSlcclxuXHJcblxyXG4gICAgdmFyIGxncyA9ICQoXCIuc2hvd3NfcmlnaHQgdWwgbGlcIikubGVuZ3RoO1xyXG4gICAgdmFyIGRpdnMgPSAwO1xyXG4gICAgdmFyIHN3aXBlclRqID0gbmV3IFN3aXBlcignI3R1amllIC5zd2lwZXItY29udGFpbmVyJywge1xyXG4gICAgICAgIGxvb3A6IHRydWUsXHJcbiAgICAgICAgc2xpZGVzUGVyVmlldzogMyxcclxuICAgICAgICAvL25leHRCdXR0b246ICcuc3dpcGVyLWJ1dHRvbi1uZXh0JyxcclxuICAgICAgICAvL3ByZXZCdXR0b246ICcuc3dpcGVyLWJ1dHRvbi1wcmV2JyxcclxuICAgICAgICBhdXRvSGVpZ2h0OiB0cnVlLFxyXG4gICAgICAgIGF1dG9XaWR0aDogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgJCgnI3R1amllJykub24oJ2NsaWNrJywgJy5hcnJvdy1sZWZ0JywgZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBzd2lwZXJUai5zd2lwZVByZXYoKTtcclxuICAgIH0pO1xyXG4gICAgJCgnI3R1amllJykub24oJ2NsaWNrJywgJy5hcnJvdy1yaWdodCcsIGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgc3dpcGVyVGouc3dpcGVOZXh0KCk7XHJcbiAgICB9KTtcclxuICAgICQoJyN0YWJEYXkxJykuY2xpY2soZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcclxuICAgICAgICBpZiAoJHRoaXMuaGFzQ2xhc3MoJ3NlbGVjdGVkLWRheScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkdGhpcy5hZGRDbGFzcygnc2VsZWN0ZWQtZGF5Jyk7XHJcbiAgICAgICAgICAgICR0aGlzLnJlbW92ZUNsYXNzKCd1bnNlbGVjdGVkLWRheScpO1xyXG4gICAgICAgICAgICAkdGhpcy5zaWJsaW5ncygpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZC1kYXknKTtcclxuICAgICAgICAgICAgJHRoaXMuc2libGluZ3MoKS5hZGRDbGFzcygndW5zZWxlY3RlZC1kYXknKTtcclxuICAgICAgICAgICAgJCgnI3RhYkRheUNvbjEnKS5zaG93KCk7XHJcbiAgICAgICAgICAgICQoJyN0YWJEYXlDb24xJykuc2libGluZ3MoKS5oaWRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAkKCcjdGFiRGF5MicpLmNsaWNrKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7XHJcbiAgICAgICAgaWYgKCR0aGlzLmhhc0NsYXNzKCdzZWxlY3RlZC1kYXknKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJHRoaXMuYWRkQ2xhc3MoJ3NlbGVjdGVkLWRheScpO1xyXG4gICAgICAgICAgICAkdGhpcy5yZW1vdmVDbGFzcygndW5zZWxlY3RlZC1kYXknKTtcclxuICAgICAgICAgICAgJHRoaXMuc2libGluZ3MoKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQtZGF5Jyk7XHJcbiAgICAgICAgICAgICR0aGlzLnNpYmxpbmdzKCkuYWRkQ2xhc3MoJ3Vuc2VsZWN0ZWQtZGF5Jyk7XHJcbiAgICAgICAgICAgICQoJyN0YWJEYXlDb24yJykuc2hvdygpO1xyXG4gICAgICAgICAgICAkKCcjdGFiRGF5Q29uMicpLnNpYmxpbmdzKCkuaGlkZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgJCgnI3RhYkRheTMnKS5jbGljayhmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xyXG4gICAgICAgIGlmICgkdGhpcy5oYXNDbGFzcygnc2VsZWN0ZWQtZGF5JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICR0aGlzLmFkZENsYXNzKCdzZWxlY3RlZC1kYXknKTtcclxuICAgICAgICAgICAgJHRoaXMucmVtb3ZlQ2xhc3MoJ3Vuc2VsZWN0ZWQtZGF5Jyk7XHJcbiAgICAgICAgICAgICR0aGlzLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkLWRheScpO1xyXG4gICAgICAgICAgICAkdGhpcy5zaWJsaW5ncygpLmFkZENsYXNzKCd1bnNlbGVjdGVkLWRheScpO1xyXG4gICAgICAgICAgICAkKCcjdGFiRGF5Q29uMycpLnNob3coKTtcclxuICAgICAgICAgICAgJCgnI3RhYkRheUNvbjMnKS5zaWJsaW5ncygpLmhpZGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgICQoJyN0YWJEYXk0JykuY2xpY2soZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcclxuICAgICAgICBpZiAoJHRoaXMuaGFzQ2xhc3MoJ3NlbGVjdGVkLWRheScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkdGhpcy5hZGRDbGFzcygnc2VsZWN0ZWQtZGF5Jyk7XHJcbiAgICAgICAgICAgICR0aGlzLnJlbW92ZUNsYXNzKCd1bnNlbGVjdGVkLWRheScpO1xyXG4gICAgICAgICAgICAkdGhpcy5zaWJsaW5ncygpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZC1kYXknKTtcclxuICAgICAgICAgICAgJHRoaXMuc2libGluZ3MoKS5hZGRDbGFzcygndW5zZWxlY3RlZC1kYXknKTtcclxuICAgICAgICAgICAgJCgnI3RhYkRheUNvbjQnKS5zaG93KCk7XHJcbiAgICAgICAgICAgICQoJyN0YWJEYXlDb240Jykuc2libGluZ3MoKS5oaWRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g6Y2S5r+G7p2Q6Y2W5qCr5YqN6ZCQ56GF7p2L55GZ77+9XHJcbiAgICB2YXIgc3dpcGVyRm9jdXMgPSBuZXcgU3dpcGVyKCcjZm9jdXMgLnN3aXBlci1jb250YWluZXInLCB7XHJcbiAgICAgICAgLy9sb29wOiB0cnVlLFxyXG4gICAgICAgIG1vZGU6ICd2ZXJ0aWNhbCcsXHJcbiAgICAgICAgc2xpZGVzUGVyVmlldzogNCxcclxuICAgICAgICAvL25leHRCdXR0b246ICcuc3dpcGVyLWJ1dHRvbi1uZXh0JyxcclxuICAgICAgICAvL3ByZXZCdXR0b246ICcuc3dpcGVyLWJ1dHRvbi1wcmV2JyxcclxuICAgICAgICBhdXRvSGVpZ2h0OiB0cnVlLFxyXG4gICAgICAgIHNwYWNlQmV0d2VlbjogMTBcclxuICAgIH0pO1xyXG5cclxuICAgICQoJyNmb2N1cycpLm9uKCdjbGljaycsICcuYXJyb3ctbGVmdCcsIGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgc3dpcGVyRm9jdXMuc3dpcGVQcmV2KCk7XHJcbiAgICB9KVxyXG4gICAgJCgnI2ZvY3VzJykub24oJ2NsaWNrJywgJy5hcnJvdy1yaWdodCcsIGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgc3dpcGVyRm9jdXMuc3dpcGVOZXh0KCk7XHJcbiAgICB9KVxyXG5cclxuICAgIC8vdmFyIHN3aXBlclByb3Bvc2FsID0gbmV3IFN3aXBlcignI3Byb3Bvc2FsIC5zd2lwZXItY29udGFpbmVyJywge1xyXG4gICAgLy8gICAgc2xpZGVzUGVyVmlldzogMVxyXG4gICAgLy99KTtcclxuXHJcbiAgICAvLyQoJyNwcm9wb3NhbCcpLm9uKCdjbGljaycsICcuYXJyb3ctbGVmdCcsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAvLyAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgIC8vICAgIHN3aXBlclByb3Bvc2FsLnN3aXBlUHJldigpXHJcbiAgICAvL30pO1xyXG4gICAgLy8kKCcjcHJvcG9zYWwnKS5vbignY2xpY2snLCAnLmFycm93LXJpZ2h0JywgZnVuY3Rpb24gKGUpIHtcclxuICAgIC8vICAgIGUucHJldmVudERlZmF1bHQoKVxyXG4gICAgLy8gICAgc3dpcGVyUHJvcG9zYWwuc3dpcGVOZXh0KClcclxuICAgIC8vfSk7XHJcblxyXG5cclxuXHJcbiAgICAkKFwiI2ZvY3VzXCIpLm9uKFwiY2xpY2tcIiwgXCIuc3dpcGVyLXNsaWRlXCIsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7XHJcbiAgICAgICAgaWYgKCR0aGlzLmhhc0NsYXNzKFwiYWN0aXZlXCIpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSAkdGhpcy5jaGlsZHJlbihcImltZ1wiKS5hdHRyKCd0aXRsZScpO1xyXG4gICAgICAgICAgICAkKFwiI2ZvY3VzIC5zd2lwZXItc2xpZGVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICR0aGlzLmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICB2YXIgc3JjID0gJHRoaXMuY2hpbGRyZW4oXCJpbWdcIikuYXR0cihcInNyY1wiKTtcclxuICAgICAgICAgICAgJChcIiNwaWNWaWV3TWFzdGVyXCIpLmNoaWxkcmVuKFwiaW1nXCIpLmF0dHIoXCJzcmNcIiwgc3JjKTtcclxuICAgICAgICAgICAgJCgnI3Nob3dJbWdUZXh0JykudGV4dCh0aXRsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy/nhKbngrnorq7pophcclxuICAgICQoXCIucHJvcG9zYWxfcmlnaHRfZGl2IFwiKS5jbGljayhmdW5jdGlvbigpIHtcclxuICAgICAgICB2YXIgY2xhc3NfbmFtZSA9ICQodGhpcykuYXR0cihcImlkXCIpO1xyXG4gICAgICAgICQodGhpcykuYWRkQ2xhc3MoXCJjdXJcIikuc2libGluZ3MoXCIucHJvcG9zYWxfcmlnaHRfZGl2XCIpLnJlbW92ZUNsYXNzKFwiY3VyXCIpO1xyXG4gICAgICAgICQoXCIuXCIgKyBjbGFzc19uYW1lICsgXCJcIikuc2hvdygpLnNpYmxpbmdzKFwibGlcIikuaGlkZSgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJChcIiNkYXkxLTEgYVwiKS5jbGljayhmdW5jdGlvbigpIHtcclxuICAgICAgICAkKHRoaXMpLmFkZENsYXNzKFwiYmdcIikuc2libGluZ3MoKS5yZW1vdmVDbGFzcyhcImJnXCIpO1xyXG4gICAgICAgICQoXCIjZGF5MSBkaXZcIikuaGlkZSgpO1xyXG4gICAgICAgICQoXCIjZGF5MSBkaXZcIikuZXEoJCh0aGlzKS5pbmRleCgpIC0gMSkuc2hvdygpO1xyXG4gICAgfSk7XHJcbiAgICAkKFwiI2RheTEgZGl2XCIpLmhpZGUoKTtcclxuICAgICQoXCIjZGF5MSBkaXZcIikuZXEoMCkuc2hvdygpO1xyXG4gICAgJChcIi5uZXdzLWxlZnQtY29udFwiKS5ob3ZlcihmdW5jdGlvbigpIHtcclxuICAgICAgICAkKHRoaXMpLmFkZENsYXNzKFwiYmdfZTNcIik7XHJcbiAgICB9LCBmdW5jdGlvbigpIHtcclxuICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKFwiYmdfZTNcIilcclxuICAgIH0pO1xyXG4gICAgJChcIi5pbmRleC10b3AgZGl2XCIpLmhpZGUoKTtcclxuICAgICQoXCIuaW5kZXgtdG9wIGRpdlwiKS5lcSgwKS5zaG93KCk7XHJcbiAgICAkKFwiI3BfY2cgc3BhblwiKS5ob3ZlcihmdW5jdGlvbigpIHtcclxuICAgICAgICAkKHRoaXMpLmFkZENsYXNzKFwiY3VyXCIpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoXCJjdXJcIik7XHJcbiAgICAgICAgJChcIi5pbmRleC10b3AgZGl2XCIpLnN0b3AodHJ1ZSwgZmFsc2UpLmFuaW1hdGUoeyBvcGFjaXR5OiAwIH0sIDUwMCkuaGlkZSgpLmVxKCQodGhpcykuaW5kZXgoKSkuc3RvcCh0cnVlLCBmYWxzZSkuYW5pbWF0ZSh7IG9wYWNpdHk6IDEgfSwgNTAwKS5zaG93KCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAkKFwiI2hpcy1yaWdodCAuaGlzLWRpdlwiKS5oaWRlKCk7XHJcbiAgICAkKFwiI2hpcy1yaWdodCAuaGlzLWRpdlwiKS5lcSgwKS5zaG93KCk7XHJcbiAgICAkKFwiI2hpcy11bCBsaSBhXCIpLmhvdmVyKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICQodGhpcykuYWRkQ2xhc3MoXCJhLWJnXCIpLnBhcmVudCgpLnNpYmxpbmdzKCkuY2hpbGRyZW4oKS5yZW1vdmVDbGFzcyhcImEtYmdcIik7XHJcbiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5hZGRDbGFzcyhcImEtY1wiKS5zaWJsaW5ncygpLnJlbW92ZUNsYXNzKFwiYS1jXCIpO1xyXG4gICAgICAgICQoXCIjaGlzLXJpZ2h0IC5oaXMtZGl2XCIpLmhpZGUoKTtcclxuICAgICAgICAkKFwiI2hpcy1yaWdodCAuaGlzLWRpdlwiKS5lcSgkKHRoaXMpLnBhcmVudCgpLmluZGV4KCkpLnNob3coKTtcclxuICAgIH0pO1xyXG4gICAgJChcIi5pbmRleC10b3AgZGl2XCIpLmhpZGUoKTtcclxuICAgICQoXCIuaW5kZXgtdG9wIGRpdlwiKS5lcSgwKS5zaG93KCk7XHJcbiAgICAkKFwiI3BfY2cgc3BhblwiKS5ob3ZlcihmdW5jdGlvbigpIHtcclxuICAgICAgICAkKHRoaXMpLmFkZENsYXNzKFwiY3VyXCIpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoXCJjdXJcIik7XHJcbiAgICAgICAgJChcIi5pbmRleC10b3AgZGl2XCIpLnN0b3AodHJ1ZSwgZmFsc2UpLmFuaW1hdGUoeyBvcGFjaXR5OiAwIH0sIDUwMCkuaGlkZSgpLmVxKCQodGhpcykuaW5kZXgoKSkuc3RvcCh0cnVlLCBmYWxzZSkuYW5pbWF0ZSh7IG9wYWNpdHk6IDEgfSwgNTAwKS5zaG93KCk7XHJcbiAgICB9KTtcclxuICAgICQoXCIja21fZnIgLmZyX2ttc1wiKS5oaWRlKCk7XHJcbiAgICAkKFwiI2ttX2ZyIC5mcl9rbXNcIikuZXEoMCkuc2hvdygpO1xyXG4gICAgJChcIi5mbF9rbXMgYVwiKS5ob3ZlcihmdW5jdGlvbigpIHtcclxuICAgICAgICAkKHRoaXMpLmFkZENsYXNzKFwiaHZfYVwiKS5zaWJsaW5ncygpLnJlbW92ZUNsYXNzKFwiaHZfYVwiKTtcclxuICAgICAgICAkKFwiI2ttX2ZyIC5mcl9rbXNcIikuaGlkZSgpO1xyXG4gICAgICAgICQoXCIja21fZnIgLmZyX2ttc1wiKS5lcSgkKHRoaXMpLmluZGV4KCkpLnNob3coKTtcclxuICAgIH0pO1xyXG4gICAgJChcIi5pbWdfY2ggdWwgbGlcIikuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICAkKHRoaXMpLmNsaWNrKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKFwiYWNjdGl2ZVwiKS5zaWJsaW5ncygpLnJlbW92ZUNsYXNzKFwiYWNjdGl2ZVwiKTtcclxuXHJcbiAgICAgICAgICAgICQoXCIjaW1nX2NoIGRpdlwiKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICQoXCIjaW1nX2NoIGRpdlwiKS5lcSgkKHRoaXMpLmluZGV4KCkpLnNob3coKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgICQoXCIjc2Vjb25kIC5tYm94MDUwMSB1bCBsaVwiKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICQodGhpcykuY2xpY2soZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoXCJjdXJyZW50XCIpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoXCJjdXJyZW50XCIpO1xyXG4gICAgICAgICAgICAkKFwiI3NlY29uZCAubWJveDA1MDJcIikuY2hpbGRyZW4oXCJkaXZcIikuaGlkZSgpO1xyXG4gICAgICAgICAgICAkKFwiI3NlY29uZCAubWJveDA1MDJcIikuY2hpbGRyZW4oXCJkaXZcIikuZXEoJCh0aGlzKS5pbmRleCgpKS5zaG93KCk7XHJcblxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH0pO1xyXG4gICAgJChcIi50b2ZfbCBhXCIpLmhvdmVyKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICQoXCIuaW1nX3RvZiBhXCIpLnJlbW92ZUNsYXNzKFwiYmxcIik7XHJcbiAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhcImJsXCIpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoXCJibFwiKTtcclxuICAgIH0pO1xyXG4gICAgJChcIi50b2ZfbSBhXCIpLmhvdmVyKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICQoXCIuaW1nX3RvZiBhXCIpLnJlbW92ZUNsYXNzKFwiYmxcIik7XHJcbiAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhcImJsXCIpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoXCJibFwiKTtcclxuXHJcbiAgICB9KTtcclxuICAgICQoXCIudG9mX3IgYVwiKS5ob3ZlcihmdW5jdGlvbigpIHtcclxuICAgICAgICAkKFwiLmltZ190b2YgYVwiKS5yZW1vdmVDbGFzcyhcImJsXCIpO1xyXG4gICAgICAgICQodGhpcykuYWRkQ2xhc3MoXCJibFwiKS5zaWJsaW5ncygpLnJlbW92ZUNsYXNzKFwiYmxcIik7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgJChcIiNGU19Db250XzA2IC5pdGVtXCIpLmhvdmVyKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICQodGhpcykuY2hpbGRyZW4oKS5maW5kKFwiLmluZm9cIikuc3RvcCh0cnVlLCBmYWxzZSkuYW5pbWF0ZSh7IHRvcDogMCB9LCA2MDApXHJcbiAgICB9LCBmdW5jdGlvbigpIHtcclxuICAgICAgICAkKHRoaXMpLmNoaWxkcmVuKCkuZmluZChcIi5pbmZvXCIpLnN0b3AodHJ1ZSwgZmFsc2UpLmFuaW1hdGUoeyB0b3A6IDQwMCB9LCA2MDApXHJcbiAgICB9KTtcclxuICAgICQoXCIuc2hvd3NfcmlnaHQgdWwgbGlcIikuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICAkKHRoaXMpLmNsaWNrKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKFwiYWN0aXZlc1wiKS5zaWJsaW5ncygpLnJlbW92ZUNsYXNzKFwiYWN0aXZlc1wiKTtcclxuICAgICAgICAgICAgJChcIi5zaG93X2xlZnQgZGl2XCIpLmVxKCQodGhpcykuaW5kZXgoKSkuYWRkQ2xhc3MoXCJibGtcIikuc2libGluZ3MoKS5yZW1vdmVDbGFzcyhcImJsa1wiKTtcclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgICQoXCIjZG93blwiKS5jbGljayhmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgaWYgKG1ncyArIDQgPj0gbGdzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWdzKys7XHJcbiAgICAgICAgJChcIi5zaG93c19yaWdodCB1bFwiKS5zdG9wKHRydWUsIGZhbHNlKS5hbmltYXRlKHsgbWFyZ2luVG9wOiAtKCQoXCIuc2hvd3NfcmlnaHQgdWwgbGlcIikuaGVpZ2h0KCkgKiBtZ3MgKyAxOCkgfSwgNTAwLCBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgJChcIi5zaG93c19yaWdodCB1bCBsaVwiKS5lcShtZ3MpLmFkZENsYXNzKFwiYWN0aXZlc1wiKS5zaWJsaW5ncygpLnJlbW92ZUNsYXNzKFwiYWN0aXZlc1wiKTtcclxuICAgICAgICAgICAgJChcIi5zaG93X2xlZnQgZGl2XCIpLmVxKG1ncykuYWRkQ2xhc3MoXCJibGtcIikuc2libGluZ3MoKS5yZW1vdmVDbGFzcyhcImJsa1wiKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgJChcIiN1cFwiKS5jbGljayhmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgaWYgKG1ncyArIDQgPCBsZ3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtZ3MtLTtcclxuICAgICAgICAkKFwiLnNob3dzX3JpZ2h0IHVsXCIpLnN0b3AodHJ1ZSwgZmFsc2UpLmFuaW1hdGUoeyBtYXJnaW5Ub3A6ICgkKFwiLnNob3dzX3JpZ2h0IHVsIGxpXCIpLmhlaWdodCgpICogbWdzKSB9LCA1MDAsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAkKFwiLnNob3dzX3JpZ2h0IHVsIGxpXCIpLmVxKG1ncykuYWRkQ2xhc3MoXCJhY3RpdmVzXCIpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoXCJhY3RpdmVzXCIpO1xyXG4gICAgICAgICAgICAkKFwiLnNob3dfbGVmdCBkaXZcIikuZXEobWdzKS5hZGRDbGFzcyhcImJsa1wiKS5zaWJsaW5ncygpLnJlbW92ZUNsYXNzKFwiYmxrXCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICAkKFwiI2hpcy1yaWdodCAuaGlzLWRpdlwiKS5oaWRlKCk7XHJcbiAgICAkKFwiI2hpcy1yaWdodCAuaGlzLWRpdlwiKS5lcSgwKS5zaG93KCk7XHJcbiAgICAkKFwiI2hpcy11bCBsaSBhXCIpLmhvdmVyKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICQodGhpcykuYWRkQ2xhc3MoXCJhLWJnXCIpLnBhcmVudCgpLnNpYmxpbmdzKCkuY2hpbGRyZW4oKS5yZW1vdmVDbGFzcyhcImEtYmdcIik7XHJcbiAgICAgICAgJCh0aGlzKS5wYXJlbnQoKS5hZGRDbGFzcyhcImEtY1wiKS5zaWJsaW5ncygpLnJlbW92ZUNsYXNzKFwiYS1jXCIpO1xyXG4gICAgICAgICQoXCIjaGlzLXJpZ2h0IC5oaXMtZGl2XCIpLmhpZGUoKTtcclxuICAgICAgICAkKFwiI2hpcy1yaWdodCAuaGlzLWRpdlwiKS5lcSgkKHRoaXMpLnBhcmVudCgpLmluZGV4KCkpLnNob3coKTtcclxuICAgIH0pO1xyXG4gICAgZ2V0X2NnKFwiY2xoM1wiLCBcImNnX3VsM1wiLCBcImxpX2RpdjNcIik7XHJcbiAgICBnZXRfY2coXCJjbGg0XCIsIFwiY2dfdWw0XCIsIFwibGlfZGl2NFwiKTtcclxuICAgIGdldF9jZyhcImNsaDVcIiwgXCJjZ191bDVcIiwgXCJsaV9kaXY1XCIpO1xyXG4gICAgZ2V0X2NnKFwiY2xoNlwiLCBcImNnX3VsNlwiLCBcImxpX2RpdjZcIik7XHJcblxyXG5cclxuXHJcbiAgICB2YXIgc1dpZHRoID0gJChcIiNmb2N1c1wiKS53aWR0aCgpOyAvL+iOt+WPlueEpueCueWbvueahOWuveW6pu+8iOaYvuekuumdouenr++8iVxyXG4gICAgdmFyIGxlbiA9ICQoXCIjZm9jdXMgdWwgbGlcIikubGVuZ3RoOyAvL+iOt+WPlueEpueCueWbvuS4quaVsFxyXG4gICAgdmFyIGluZGV4ID0gMDtcclxuICAgIHZhciBwaWNUaW1lcjtcclxuXHJcbiAgICAvL+S7peS4i+S7o+eggea3u+WKoOaVsOWtl+aMiemSruWSjOaMiemSruWQjueahOWNiumAj+aYjuadoe+8jOi/mOacieS4iuS4gOmhteOAgeS4i+S4gOmhteS4pOS4quaMiemSrlxyXG4gICAgdmFyIGJ0biA9IFwiPGRpdiBjbGFzcz0nYnRuQmcnPjwvZGl2PjxkaXYgY2xhc3M9J2J0bic+XCI7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgYnRuICs9IFwiPHNwYW4+PC9zcGFuPlwiO1xyXG4gICAgfVxyXG4gICAgYnRuICs9IFwiPC9kaXY+PGRpdiBjbGFzcz0ncHJlTmV4dCBwcmUnPjwvZGl2PjxkaXYgY2xhc3M9J3ByZU5leHQgbmV4dCc+PC9kaXY+XCI7XHJcbiAgICAkKFwiI2ZvY3VzXCIpLmFwcGVuZChidG4pO1xyXG4gICAgJChcIiNmb2N1cyAuYnRuQmdcIikuY3NzKFwib3BhY2l0eVwiLCAwLjUpO1xyXG5cclxuICAgIC8v5Li65bCP5oyJ6ZKu5re75Yqg6byg5qCH5ruR5YWl5LqL5Lu277yM5Lul5pi+56S655u45bqU55qE5YaF5a65XHJcbiAgICAkKFwiI2ZvY3VzIC5idG4gc3BhblwiKS5jc3MoXCJvcGFjaXR5XCIsIDAuNCkubW91c2VvdmVyKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGluZGV4ID0gJChcIiNmb2N1cyAuYnRuIHNwYW5cIikuaW5kZXgodGhpcyk7XHJcbiAgICAgICAgc2hvd1BpY3MoaW5kZXgpO1xyXG4gICAgfSkuZXEoMCkudHJpZ2dlcihcIm1vdXNlb3ZlclwiKTtcclxuXHJcbiAgICAvL+S4iuS4gOmhteOAgeS4i+S4gOmhteaMiemSrumAj+aYjuW6puWkhOeQhlxyXG4gICAgJChcIiNmb2N1cyAucHJlTmV4dFwiKS5jc3MoXCJvcGFjaXR5XCIsIDAuMikuaG92ZXIoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgJCh0aGlzKS5zdG9wKHRydWUsIGZhbHNlKS5hbmltYXRlKHsgXCJvcGFjaXR5XCI6IFwiMC41XCIgfSwgMzAwKTtcclxuICAgIH0sIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICQodGhpcykuc3RvcCh0cnVlLCBmYWxzZSkuYW5pbWF0ZSh7IFwib3BhY2l0eVwiOiBcIjAuMlwiIH0sIDMwMCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvL+S4iuS4gOmhteaMiemSrlxyXG4gICAgJChcIiNmb2N1cyAucHJlXCIpLmNsaWNrKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGluZGV4IC09IDE7XHJcbiAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7IGluZGV4ID0gbGVuIC0gMTsgfVxyXG4gICAgICAgIHNob3dQaWNzKGluZGV4KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8v5LiL5LiA6aG15oyJ6ZKuXHJcbiAgICAkKFwiI2ZvY3VzIC5uZXh0XCIpLmNsaWNrKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGluZGV4ICs9IDE7XHJcbiAgICAgICAgaWYgKGluZGV4ID09IGxlbikgeyBpbmRleCA9IDA7IH1cclxuICAgICAgICBzaG93UGljcyhpbmRleCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvL+acrOS+i+S4uuW3puWPs+a7muWKqO+8jOWNs+aJgOaciWxp5YWD57Sg6YO95piv5Zyo5ZCM5LiA5o6S5ZCR5bem5rWu5Yqo77yM5omA5Lul6L+Z6YeM6ZyA6KaB6K6h566X5Ye65aSW5Zu0dWzlhYPntKDnmoTlrr3luqZcclxuICAgICQoXCIjZm9jdXMgdWxcIikuY3NzKFwid2lkdGhcIiwgc1dpZHRoICogKGxlbikpO1xyXG5cclxuICAgIC8v6byg5qCH5ruR5LiK54Sm54K55Zu+5pe25YGc5q2i6Ieq5Yqo5pKt5pS+77yM5ruR5Ye65pe25byA5aeL6Ieq5Yqo5pKt5pS+XHJcbiAgICAkKFwiI2ZvY3VzXCIpLmhvdmVyKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwocGljVGltZXIpO1xyXG4gICAgfSwgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcGljVGltZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgc2hvd1BpY3MoaW5kZXgpO1xyXG4gICAgICAgICAgICBpbmRleCsrO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPT0gbGVuKSB7IGluZGV4ID0gMDsgfVxyXG4gICAgICAgIH0sIDQwMDApOyAvL+atpDQwMDDku6Pooajoh6rliqjmkq3mlL7nmoTpl7TpmpTvvIzljZXkvY3vvJrmr6vnp5JcclxuICAgIH0pLnRyaWdnZXIoXCJtb3VzZWxlYXZlXCIpO1xyXG5cclxuICAgIC8v5pi+56S65Zu+54mH5Ye95pWw77yM5qC55o2u5o6l5pS255qEaW5kZXjlgLzmmL7npLrnm7jlupTnmoTlhoXlrrlcclxuICAgIGZ1bmN0aW9uIHNob3dQaWNzKGluZGV4KSB7IC8v5pmu6YCa5YiH5o2iXHJcbiAgICAgICAgdmFyIG5vd0xlZnQgPSAtaW5kZXggKiBzV2lkdGg7IC8v5qC55o2uaW5kZXjlgLzorqHnrpd1bOWFg+e0oOeahGxlZnTlgLxcclxuICAgICAgICAkKFwiI2ZvY3VzIHVsXCIpLnN0b3AodHJ1ZSwgZmFsc2UpLmFuaW1hdGUoeyBcImxlZnRcIjogbm93TGVmdCB9LCAzMDApOyAvL+mAmui/h2FuaW1hdGUoKeiwg+aVtHVs5YWD57Sg5rua5Yqo5Yiw6K6h566X5Ye655qEcG9zaXRpb25cclxuICAgICAgICAvLyQoXCIjZm9jdXMgLmJ0biBzcGFuXCIpLnJlbW92ZUNsYXNzKFwib25cIikuZXEoaW5kZXgpLmFkZENsYXNzKFwib25cIik7IC8v5Li65b2T5YmN55qE5oyJ6ZKu5YiH5o2i5Yiw6YCJ5Lit55qE5pWI5p6cXHJcbiAgICAgICAgJChcIiNmb2N1cyAuYnRuIHNwYW5cIikuc3RvcCh0cnVlLCBmYWxzZSkuYW5pbWF0ZSh7IFwib3BhY2l0eVwiOiBcIjAuNFwiIH0sIDMwMCkuZXEoaW5kZXgpLnN0b3AodHJ1ZSwgZmFsc2UpLmFuaW1hdGUoeyBcIm9wYWNpdHlcIjogXCIxXCIgfSwgMzAwKTsgLy/kuLrlvZPliY3nmoTmjInpkq7liIfmjaLliLDpgInkuK3nmoTmlYjmnpxcclxuICAgIH07XHJcblxyXG4gICAgLy/orrrlnZvoirHnta5cclxuICAgICQoJyN0aWRiaXQgLnByJykubW91c2VvdmVyKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICQodGhpcykuZmluZCgnLmJnJykuc2hvdygpO1xyXG4gICAgfSk7XHJcbiAgICAkKCcjdGlkYml0IC5wcicpLm1vdXNlb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICQodGhpcykuZmluZCgnLmJnJykuaGlkZSgpO1xyXG4gICAgfSk7XHJcblxyXG5cclxuXHJcbn0pO1xyXG5cclxuXHJcbi8v5p2/5Z2X6KGM5oOFaHRtbOa4suafk1xyXG5mdW5jdGlvbiBxdW90ZVRhYmxlKFVybCkge1xyXG4gICAgJC5hamF4KHtcclxuICAgICAgICBqc29ucDogXCJjYlwiLFxyXG4gICAgICAgIHVybDogVXJsLFxyXG4gICAgICAgIGRhdGFUeXBlOiBcImpzb25wXCIsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoIWRhdGEucmFuayB8fCAhZGF0YS5yYW5rLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgICAgICAgICB2YXIgX3JhbmsgPSBkYXRhLnJhbms7XHJcbiAgICAgICAgICAgIHZhciBIdG1sID0gXCJcIjtcclxuICAgICAgICAgICAgdmFyIGFyciA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9yYW5rLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaChfcmFua1tpXS5zcGxpdChcIixcIikpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHhoID0gTnVtYmVyKGkpICsgMTtcclxuICAgICAgICAgICAgICAgIEh0bWwgKz0gXCI8dHI+XCIgK1xyXG4gICAgICAgICAgICAgICAgICAgIFwiPHRkPlwiICsgeGggKyBcIjwvdGQ+XCIgK1xyXG4gICAgICAgICAgICAgICAgICAgIFwiPHRkPjxhIGhyZWY9Jy8vcXVvdGUuZWFzdG1vbmV5LmNvbS9zelwiICsgYXJyW2ldWzFdICsgXCIuaHRtbCcgdGFyZ2V0PSdfYmxhbmsnPlwiICsgYXJyW2ldWzFdICsgXCI8L2E+PC90ZD5cIiArXHJcbiAgICAgICAgICAgICAgICAgICAgXCI8dGQ+PGEgaHJlZj0nLy9xdW90ZS5lYXN0bW9uZXkuY29tL3N6XCIgKyBhcnJbaV1bMV0gKyBcIi5odG1sJyB0YXJnZXQ9J19ibGFuayc+XCIgKyBhcnJbaV1bMl0gKyBcIjwvYT48L3RkPlwiICtcclxuICAgICAgICAgICAgICAgICAgICBcIjx0ZCA+PGEgY2xhc3M9J2xpbmtfYScgaHJlZj0nLy9ndWJhLmVhc3Rtb25leS5jb20vdG9waWMsXCIgKyBhcnJbaV1bMV0gKyBcIi5odG1sJyB0YXJnZXQ9J19ibGFuayc+6IKh5ZCnPC9hPlwiICtcclxuICAgICAgICAgICAgICAgICAgICBcIjxhIGNsYXNzPSdsaW5rX2EnIGhyZWY9Jy8vZGF0YS5lYXN0bW9uZXkuY29tL3pqbHgvXCIgKyBhcnJbaV1bMV0gKyBcIi5odG1sJyB0YXJnZXQ9J19ibGFuayc+6LWE6YeR5rWBPC9hPlwiICtcclxuICAgICAgICAgICAgICAgICAgICBcIjxhIGNsYXNzPSdsaW5rX2EnIGhyZWY9Jy8vZGF0YS5lYXN0bW9uZXkuY29tL3JlcG9ydC9cIiArIGFycltpXVsxXSArIFwiLmh0bWwnIHRhcmdldD0nX2JsYW5rJz7noJTmiqU8L2E+PC90ZD5cIiArXHJcbiAgICAgICAgICAgICAgICAgICAgXCI8dGQ+PHNwYW4gY2xhc3M9J3RkX2JvbGQgenhqJz5cIiArIGFycltpXVszXSArIFwiPC9zcGFuPjwvdGQ+XCIgK1xyXG4gICAgICAgICAgICAgICAgICAgIFwiPHRkPjxzcGFuIGNsYXNzPSd0ZF9ib2xkIHpoZGUnPlwiICsgYXJyW2ldWzRdICsgXCI8L3NwYW4+PC90ZD5cIiArXHJcbiAgICAgICAgICAgICAgICAgICAgXCI8dGQ+PHNwYW4gY2xhc3M9J3RkX2JvbGQgemhkZic+XCIgKyBhcnJbaV1bNV0gKyBcIjwvc3Bhbj48L3RkPlwiICtcclxuICAgICAgICAgICAgICAgICAgICBcIjx0ZD48c3BhbiBjbGFzcz0ndGRfYm9sZCB6aGYnPlwiICsgYXJyW2ldWzZdICsgXCI8L3NwYW4+PC90ZD5cIiArXHJcbiAgICAgICAgICAgICAgICAgICAgXCI8dGQ+PHNwYW4gY2xhc3M9J3RkX2JvbGQnPlwiICsgYXJyW2ldWzddICsgXCI8L3NwYW4+PC90ZD5cIiArXHJcbiAgICAgICAgICAgICAgICAgICAgXCI8dGQ+PHNwYW4gY2xhc3M9J3RkX2JvbGQnPlwiICsgYXJyW2ldWzhdICsgXCI8L3NwYW4+PC90ZD5cIiArXHJcbiAgICAgICAgICAgICAgICAgICAgXCI8dGQ+PHNwYW4gY2xhc3M9J3RkX2JvbGQgenNoJz5cIiArIGFycltpXVs5XSArIFwiPC9zcGFuPjwvdGQ+XCIgK1xyXG4gICAgICAgICAgICAgICAgICAgIFwiPHRkPjxzcGFuIGNsYXNzPSd0ZF9ib2xkIGprJz5cIiArIGFycltpXVsxMF0gKyBcIjwvc3Bhbj48L3RkPlwiICtcclxuICAgICAgICAgICAgICAgICAgICBcIjx0ZD48c3BhbiBjbGFzcz0ndGRfYm9sZCB6Zyc+XCIgKyBhcnJbaV1bMTFdICsgXCI8L3NwYW4+PC90ZD5cIiArXHJcbiAgICAgICAgICAgICAgICAgICAgXCI8dGQ+PHNwYW4gY2xhc3M9J3RkX2JvbGQgemQnPlwiICsgYXJyW2ldWzEyXSArIFwiPC9zcGFuPjwvdGQ+XCIgK1xyXG4gICAgICAgICAgICAgICAgICAgIFwiPHRkPjxzcGFuIGNsYXNzPSd0ZF9ib2xkJz5cIiArIGFycltpXVsyMV0gKyBcIjwvc3Bhbj48L3RkPlwiICtcclxuICAgICAgICAgICAgICAgICAgICBcIjwvdHI+XCI7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAkKFwiI3F1b3RlX3RhYmxlXCIpLmh0bWwoSHRtbCk7XHJcbiAgICAgICAgICAgIGNvbG9yVGQoXCIuemhkZVwiKTtcclxuICAgICAgICAgICAgY29sb3JUZChcIi56aGRmXCIpO1xyXG4gICAgICAgICAgICBjb250cmFzdChcIi5qa1wiLCBcIi56c2hcIik7XHJcbiAgICAgICAgICAgIGNvbnRyYXN0KFwiLnpnXCIsIFwiLnpzaFwiKTtcclxuICAgICAgICAgICAgY29udHJhc3QoXCIuemRcIiwgXCIuenNoXCIpO1xyXG5cclxuICAgICAgICAgICAgLy/kuLrmjK/luYXmt7vliqDnmb7liIblj7dcclxuICAgICAgICAgICAgJChcIi56aGZcIikuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSAkKHRoaXMpLnRleHQoKTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWwgPT0gXCJcIiB8fCB2YWwgPT0gXCItXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWwgPSBcIi1cIlxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnRleHQodmFsICsgXCIlXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG5cclxuXHJcbi8v5p2/5Z2X6KGM5oOF5Yik5pat5rao6LeM6aKd44CB5rao6LeM5bmFIOacgOaWsOS7t+eahOminOiJslxyXG5mdW5jdGlvbiBjb2xvclRkKG9iaikge1xyXG4gICAgJChvYmopLmVhY2goZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdmFyIHRleHQgPSAkKHRoaXMpLnRleHQoKTtcclxuICAgICAgICBpZiAodGV4dCA9PSBcIlwiIHx8IHRleHQgPT0gXCItXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhciBudW0gPSBOdW1iZXIodGV4dC5yZXBsYWNlKFwiJVwiLCBcIlwiKSk7XHJcbiAgICAgICAgICAgIHZhciB6eGogPSAkKHRoaXMpLnBhcmVudHMoXCJ0clwiKS5maW5kKFwiLnp4alwiKTtcclxuICAgICAgICAgICAgaWYgKG51bSA+IDApIHtcclxuICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoXCJyZWRcIikucmVtb3ZlQ2xhc3MoXCJncmVlblwiKTtcclxuICAgICAgICAgICAgICAgIHp4ai5hZGRDbGFzcyhcInJlZFwiKS5yZW1vdmVDbGFzcyhcImdyZWVuXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bSA8IDApIHtcclxuICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoXCJncmVlblwiKS5yZW1vdmVDbGFzcyhcInJlZFwiKTtcclxuICAgICAgICAgICAgICAgIHp4ai5hZGRDbGFzcyhcImdyZWVuXCIpLnJlbW92ZUNsYXNzKFwicmVkXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcyhcInJlZCBncmVlblwiKTtcclxuICAgICAgICAgICAgICAgIHp4ai5yZW1vdmVDbGFzcyhcInJlZCBncmVlblwiKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG59O1xyXG5cclxuLy/mnb/lnZfooYzmg4XliKTmlq3ku4rlvIDjgIHmnIDpq5jjgIHmnIDkvY7nmoTpopzoibJcclxuZnVuY3Rpb24gY29udHJhc3Qob2JqMSwgb2JqMikge1xyXG4gICAgJChvYmoxKS5lYWNoKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHZhciB0ZXh0ID0gJCh0aGlzKS50ZXh0KCk7XHJcbiAgICAgICAgaWYgKHRleHQgPT0gXCJcIiB8fCB0ZXh0ID09IFwiLVwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YXIgbnVtX2NvbG9yID0gTnVtYmVyKHRleHQpO1xyXG4gICAgICAgICAgICB2YXIgbnVtID0gTnVtYmVyKCQodGhpcykucGFyZW50cyhcInRyXCIpLmZpbmQob2JqMikuaHRtbCgpKTtcclxuICAgICAgICAgICAgaWYgKG51bV9jb2xvciA+IG51bSkge1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhcInJlZFwiKS5yZW1vdmVDbGFzcyhcImdyZWVuXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bV9jb2xvciA8IG51bSkge1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhcImdyZWVuXCIpLnJlbW92ZUNsYXNzKFwicmVkXCIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcyhcInJlZCBncmVlblwiKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfSk7XHJcblxyXG59O1xyXG5cclxuXHJcblxyXG5mdW5jdGlvbiBnZXRfY2coYSwgYiwgYykge1xyXG4gICAgdmFyIGxnID0gJChcIiNcIiArIGIgKyBcIiBsaVwiKS5sZW5ndGg7XHJcbiAgICB2YXIgd2QgPSAobGcgKiAoJChcIiNcIiArIGIgKyBcIiBsaVwiKS5pbm5lcldpZHRoKCkpKSArIFwicHhcIjtcclxuICAgIHZhciBkaXZfbGljID0gJChcIiNcIiArIGMgKyBcIiAubGlfY29udFwiKTtcclxuICAgIHZhciBsaXdkID0gJChcIiNcIiArIGIgKyBcIiBsaVwiKS5pbm5lcldpZHRoKCk7XHJcbiAgICB2YXIgZHYgPSAwO1xyXG4gICAgJChcIiNcIiArIGIgKyBcIiBsaSBhXCIpLmVhY2goZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICQodGhpcykuY2xpY2soZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICBkaXZfbGljLmVxKCQodGhpcykucGFyZW50KFwibGlcIikuaW5kZXgoKSkuYWRkQ2xhc3MoXCJibGtcIikuc2libGluZ3MoKS5yZW1vdmVDbGFzcyhcImJsa1wiKTtcclxuICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhcImFjdGl2ZVwiKS5wYXJlbnQoXCJsaVwiKS5zaWJsaW5ncygpLmNoaWxkcmVuKFwiYVwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoXCJhY3RpdmVcIikpIHtcclxuICAgICAgICAgICAgICAgIGR2ID0gJCh0aGlzKS5wYXJlbnQoXCJsaVwiKS5pbmRleCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICQoXCIjXCIgKyBhICsgXCIgLnNqX2RpdlwiKS5zdG9wKHRydWUsIGZhbHNlKS5hbmltYXRlKHsgbGVmdDogJCh0aGlzKS5wYXJlbnQoXCJsaVwiKS5wb3NpdGlvbigpLmxlZnQgKyAyIH0sIDUwMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHZhciBpbCA9IDA7XHJcbiAgICAkKFwiI1wiICsgYSArIFwiIC5yaHRcIikuY2xpY2soZnVuY3Rpb24oZSkge1xyXG4gICAgICAgIGlmIChpbCArIDMgPj0gbGcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbCsrO1xyXG4gICAgICAgICQoXCIjXCIgKyBiKS5zdG9wKHRydWUsIGZhbHNlKS5hbmltYXRlKHsgbWFyZ2luTGVmdDogLShsaXdkICogaWwpIH0sIDUwMCwgZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmIChkdiA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAkKFwiI1wiICsgYiArIFwiIGxpIGFcIikuZXEoaWwpLmFkZENsYXNzKFwiYWN0aXZlXCIpLnBhcmVudChcImxpXCIpLnNpYmxpbmdzKCkuY2hpbGRyZW4oXCJhXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgZGl2X2xpYy5lcShpbCkuYWRkQ2xhc3MoXCJibGtcIikuc2libGluZ3MoKS5yZW1vdmVDbGFzcyhcImJsa1wiKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGR2ID0gZHYgKyAxO1xyXG4gICAgICAgICAgICAgICAgZGl2X2xpYy5lcShkdikuYWRkQ2xhc3MoXCJibGtcIikuc2libGluZ3MoKS5yZW1vdmVDbGFzcyhcImJsa1wiKTtcclxuICAgICAgICAgICAgICAgICQoXCIjXCIgKyBiICsgXCIgbGkgYVwiKS5lcShkdikuYWRkQ2xhc3MoXCJhY3RpdmVcIikucGFyZW50KFwibGlcIikuc2libGluZ3MoKS5jaGlsZHJlbihcImFcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgJChcIiNcIiArIGEgKyBcIiAubGZ0XCIpLmNsaWNrKGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICBpZiAoaWwgPT0gMCB8fCBpbCA8PSAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpbCA+PSBsZykge1xyXG4gICAgICAgICAgICBpbCA9IGxnIC0gMztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWwtLTtcclxuICAgICAgICAkKFwiI1wiICsgYikuc3RvcCh0cnVlLCBmYWxzZSkuYW5pbWF0ZSh7IG1hcmdpbkxlZnQ6IC0obGl3ZCAqIGlsKSB9LCA1MDAsIGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBpZiAoZHYgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgJChcIiNcIiArIGIgKyBcIiBsaSBhXCIpLmVxKGlsKS5hZGRDbGFzcyhcImFjdGl2ZVwiKS5wYXJlbnQoXCJsaVwiKS5zaWJsaW5ncygpLmNoaWxkcmVuKFwiYVwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgIGRpdl9saWMuZXEoaWwpLmFkZENsYXNzKFwiYmxrXCIpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoXCJibGtcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkdiA9IGR2ICsgLTE7XHJcbiAgICAgICAgICAgICAgICBkaXZfbGljLmVxKGR2KS5hZGRDbGFzcyhcImJsa1wiKS5zaWJsaW5ncygpLnJlbW92ZUNsYXNzKFwiYmxrXCIpO1xyXG4gICAgICAgICAgICAgICAgJChcIiNcIiArIGIgKyBcIiBsaSBhXCIpLmVxKGR2KS5hZGRDbGFzcyhcImFjdGl2ZVwiKS5wYXJlbnQoXCJsaVwiKS5zaWJsaW5ncygpLmNoaWxkcmVuKFwiYVwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNob3dfbGlzdChudWJzKSB7XHJcbiAgICB2YXIgZ2V0X251YiA9IG51YnM7XHJcbiAgICAkKFwiLnNob3dfbGlzdF9taWRkbGUgZGl2XCIpLmhpZGUoKTtcclxuICAgICQoXCIuc2hvd19saXN0X21pZGRsZSBkaXZcIikuZXEoZ2V0X251YiAtIDEpLnNob3coKTtcclxuICAgICQoXCIuc2hvd19saXN0X2xlZnQgbGlcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAkKFwiLnNob3dfbGlzdF9sZWZ0IGxpXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlMlwiKTtcclxuICAgIGlmIChudWJzID4gMykge1xyXG4gICAgICAgICQoXCIuc2hvd19saXN0X2xlZnQgbGlcIikuZXEoZ2V0X251YiAtIDEpLmFkZENsYXNzKFwiYWN0aXZlMlwiKS5zaWJsaW5ncygpLnJlbW92ZUNsYXNzKFwiYWN0aXZlMlwiKTtcclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICQoXCIuc2hvd19saXN0X2xlZnQgbGlcIikuZXEoZ2V0X251YiAtIDEpLmFkZENsYXNzKFwiYWN0aXZlXCIpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICB9XHJcblxyXG59XHJcbiQoXCJib2R5XCIpLm9uKFwiY2xpY2tcIiwgXCIuZG9vbV9kaXZcIiwgZnVuY3Rpb24oKSB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCQoJy5kb29tX2RpdicpLmluZGV4KCQodGhpcykpKTtcclxuICAgIHNob3dfbGlzdCgkKCcuZG9vbV9kaXYnKS5pbmRleCgkKHRoaXMpKSArIDEpXHJcbn0pO1xyXG5cclxuZnVuY3Rpb24gUGxheVZpZGVvKF9vYmpJZCwgX3dpZHRoLCBfaGVpZ2h0LCBfdmlkZW8pIHtcclxuICAgIC8vICAgICAgICAgICAgaWYgKGpRdWVyeS5icm93c2VyLm1zaWUpIHtcclxuICAgIC8vICAgICAgICAgICAgICAgIHZhciBfcGxheWVyID0gXCI8b2JqZWN0IGlkPSdNZWRpYVBsYXllcicgaGVpZ2h0PSdcIiArIF9oZWlnaHQgKyBcIicgd2lkdGg9J1wiICsgX3dpZHRoICsgXCInIGNsYXNzaWQ9J0NMU0lEOjZCRjUyQTUyLTM5NEEtMTFkMy1CMTUzLTAwQzA0Rjc5RkFBNicgVklFV0FTVEVYVD48cGFyYW0gaWQ9J1VSTCcgbmFtZT0nVVJMJyB2YWx1ZT0nbW1zOi8vdmlkZW9zb3VyY2UuZWFzdG1vbmV5LmNvbS9saXZlJyAvPjxwYXJhbSBuYW1lPSdyYXRlJyB2YWx1ZT0nMSc+PHBhcmFtIG5hbWU9J2JhbGFuY2UnIHZhbHVlPScwJz48cGFyYW0gbmFtZT0nY3VycmVudFBvc2l0aW9uJyB2YWx1ZT0nMCc+PHBhcmFtIG5hbWU9J3BsYXlDb3VudCcgdmFsdWU9JzEnPjxwYXJhbSBuYW1lPSdhdXRvU3RhcnQnIHZhbHVlPSctMSc+PHBhcmFtIG5hbWU9J1Nob3dTdGF0dXNCYXInIHZhbHVlPSctMSc+PC9vYmplY3Q+XCI7XHJcbiAgICAvLyAgICAgICAgICAgICAgICBqUXVlcnkoXCIjXCIgKyBfb2JqSWQpLmNoaWxkcmVuKFwiYVwiKS5oaWRlKCk7XHJcbiAgICAvLyAgICAgICAgICAgICAgICBqUXVlcnkoXCIjXCIgKyBfb2JqSWQpLmh0bWwoX3BsYXllcik7XHJcbiAgICAvLyAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBcIm1tczovL3ZpZGVvc291cmNlLmVhc3Rtb25leS5jb20vbGl2ZVwiO1xyXG4gICAgLy8gICAgICAgICAgICB9XHJcbiAgICAvLyAgICAgICAgfVxyXG4gICAgdmFyIF9wbGF5ZXIgPSBcIjxvYmplY3QgaWQ9J01lZGlhUGxheWVyJyBoZWlnaHQ9J1wiICsgX3dpZHRoICsgXCInIHdpZHRoPSdcIiArIF9oZWlnaHQgKyBcIicgY2xhc3NpZD0nQ0xTSUQ6NkJGNTJBNTItMzk0QS0xMWQzLUIxNTMtMDBDMDRGNzlGQUE2JyBWSUVXQVNURVhUPjxwYXJhbSBpZD0nVVJMJyBuYW1lPSdVUkwnIHZhbHVlPSdtbXM6Ly92aWRlb3NvdXJjZS5lYXN0bW9uZXkuY29tL2xpdmUnIC8+PHBhcmFtIG5hbWU9J3JhdGUnIHZhbHVlPScxJz48cGFyYW0gbmFtZT0nYmFsYW5jZScgdmFsdWU9JzAnPjxwYXJhbSBuYW1lPSdjdXJyZW50UG9zaXRpb24nIHZhbHVlPScwJz48cGFyYW0gbmFtZT0ncGxheUNvdW50JyB2YWx1ZT0nMSc+PHBhcmFtIG5hbWU9J2F1dG9TdGFydCcgdmFsdWU9Jy0xJz48cGFyYW0gbmFtZT0nU2hvd1N0YXR1c0JhcicgdmFsdWU9Jy0xJz48L29iamVjdD5cIjtcclxuICAgIC8valF1ZXJ5KFwiI1wiICsgX29iaklkKS5jaGlsZHJlbigpLmhpZGUoKTsgalF1ZXJ5KFwiI1wiICsgX29iaklkKS5hcHBlbmQoXCI8ZW1iZWQgc3JjPVxcXCJodHRwOi8vdmlkZW8uZWFzdG1vbmV5LmNvbS9mbGFzaHZpZGVvLnN3Zj9pZD1cIiArIDg1NTAgKyBcIiZhbXA7bW09MC42NjE5MzIyOTA1MzE2OTQ5XFxcIiBuYW1lPVxcXCJNZWRpYVBsYXllclxcXCIgd2lkdGg9XFxcIlwiICsgX3dpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBfaGVpZ2h0ICsgXCJcXFwiIHBsdWdpbnNwYWdlPVxcXCJodHRwOi8vd3d3LmFkb2JlLmNvbS9zaG9ja3dhdmUvZG93bmxvYWQvZG93bmxvYWQuY2dpP1AxX1Byb2RfVmVyc2lvbj1TaG9ja3dhdmVGbGFzaFxcXCI+XCIpXHJcbiAgICBqUXVlcnkoXCIjXCIgKyBfb2JqSWQpLmNoaWxkcmVuKCkuaGlkZSgpO1xyXG4gICAgdmFyIGlmbSA9IFwiPGlmcmFtZSBoZWlnaHQ9JzM2Nicgd2lkdGg9JzQ4Nicgc3JjPSdodHRwOi8vcGxheWVyLmthbmthbmV3cy5jb20vZW1iZWQvMjAxNi0wMS0yMl8wMDE3MzQ0NzM3JyBmcmFtZWJvcmRlcj0nMCc+PC9pZnJhbWU+XCI7XHJcbiAgICBqUXVlcnkoXCIjXCIgKyBfb2JqSWQpLmh0bWwoaWZtKVxyXG59XHJcbiQoXCJib2R5XCIpLm9uKFwiY2xpY2tcIiwgXCIjdmlkZW9cIiwgZnVuY3Rpb24oKSB7XHJcbiAgICBQbGF5VmlkZW8oJ3Zkby0xJywgJzQ4NycsICczNjYnLCAnaHR0cDovL3ZpZGVvLmVhc3Rtb25leS5jb20vZmxhc2h2aWRlby5zd2Y/aWQ9ODU1MCZzdHM9MSZ2aWRlb190aXRsZT0lRTUlOEQlOUElRTklQjMlOEMlRTQlQkElOUElRTYlQjQlQjIlRTglQUUlQkElRTUlOUQlOUIyMDEzJUU1JUI5JUI0JUU0JUJDJTlBJUU0JUI5JUEwJUU4JUJGJTkxJUU1JUI5JUIzJUU0JUI4JUJCJUU2JTk3JUE4JUU2JUJDJTk0JUU4JUFFJUIyJm1tPTAuNDMyOTgzNDQwMTE0MTg1MicpO1xyXG59KTtcclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxudmFyIGlUaW1lcjEgPSBudWxsO1xyXG52YXIgaVRpbWVyID0gbnVsbDtcclxudmFyIG1ha1Nob3cgPSAkKCcubV9pbWcwMScpO1xyXG5tYWtTaG93LmhvdmVyKGZ1bmN0aW9uKCkge1xyXG4gICAgdmFyIHRpdFdyYXAgPSAkKHRoaXMpLmZpbmQoJy5tX2JndHh0MDEnKTtcclxuICAgIHZhciB0aXQwNCA9ICQodGhpcykuZmluZCgnLmludHIwMScpO1xyXG4gICAgdmFyIG1hc2sgPSAkKHRoaXMpLmZpbmQoJy5tX2JsYWNrMDEnKTtcclxuICAgIGlUaW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgdGl0MDQuYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIG1hcmdpblRvcDogMCxcclxuICAgICAgICAgICAgaGVpZ2h0OiAzMFxyXG5cclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgICAgIHRpdFdyYXAuYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgIGhlaWdodDogMTI0XHJcbiAgICAgICAgfSwgMjAwKTtcclxuICAgIH0sIDE4MCk7XHJcblxyXG59LCBmdW5jdGlvbigpIHtcclxuICAgIGNsZWFyVGltZW91dChpVGltZXIpO1xyXG4gICAgdmFyIHRpdFdyYXAgPSAkKHRoaXMpLmZpbmQoJy5tX2JndHh0MDEnKTtcclxuICAgIHZhciB0aXQwNCA9ICQodGhpcykuZmluZCgnLmludHIwMScpO1xyXG4gICAgdmFyIG1hc2sgPSAkKHRoaXMpLmZpbmQoJy5tX2JsYWNrMDEnKTtcclxuICAgIHRpdDA0LmFuaW1hdGUoe1xyXG4gICAgICAgIG1hcmdpblRvcDogMCxcclxuICAgICAgICBoZWlnaHQ6IDMwXHJcbiAgICB9LCAyMDApO1xyXG4gICAgdGl0V3JhcC5hbmltYXRlKHtcclxuICAgICAgICBoZWlnaHQ6IDMwXHJcbiAgICB9LCAyMDApO1xyXG59KTtcclxuJCgnI3NsaWRlcycpLnNsaWRlcyh7XHJcbiAgICBwcmVsb2FkOiB0cnVlLFxyXG4gICAgcHJlbG9hZEltYWdlOiAnaW1nL2xvYWRpbmcuZ2lmJyxcclxuICAgIHBsYXk6IDUwMDAsXHJcbiAgICBwYXVzZTogMjUwMCxcclxuICAgIGhvdmVyUGF1c2U6IGZhbHNlLFxyXG4gICAgYW5pbWF0aW9uU3RhcnQ6IGZ1bmN0aW9uKGN1cnJlbnQpIHtcclxuICAgICAgICAkKCcuY2FwdGlvbicpLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBib3R0b206IC0zNVxyXG4gICAgICAgIH0sIDEwMCk7XHJcbiAgICB9LFxyXG4gICAgYW5pbWF0aW9uQ29tcGxldGU6IGZ1bmN0aW9uKGN1cnJlbnQpIHtcclxuICAgICAgICAkKCcuY2FwdGlvbicpLmFuaW1hdGUoe1xyXG4gICAgICAgICAgICBib3R0b206IDBcclxuICAgICAgICB9LCAzMDApO1xyXG4gICAgfSxcclxuICAgIHNsaWRlc0xvYWRlZDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgJCgnLmNhcHRpb24nKS5hbmltYXRlKHtcclxuICAgICAgICAgICAgYm90dG9tOiAwXHJcbiAgICAgICAgfSwgMzAwKTtcclxuICAgIH1cclxufSk7XHJcbi8vICAgICB9KTtcclxuXHJcbi8vIH0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vanMvanpnai5qc1xuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDEiXSwic291cmNlUm9vdCI6IiJ9"]}