/******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = "/"; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 1); /******/ }) /************************************************************************/ /******/ ({ /***/ "./node_modules/@fancyapps/ui/dist/fancybox.esm.js": /*!*********************************************************!*\ !*** ./node_modules/@fancyapps/ui/dist/fancybox.esm.js ***! \*********************************************************/ /*! exports provided: Carousel, Fancybox, Panzoom */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Carousel\", function() { return y; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Fancybox\", function() { return O; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Panzoom\", function() { return d; });\n// @fancyapps/ui/Fancybox v4.0.0-beta.2\nconst t=t=>\"object\"==typeof t&&null!==t&&t.constructor===Object&&\"[object Object]\"===Object.prototype.toString.call(t),e=(...i)=>{let s=!1;\"boolean\"==typeof i[0]&&(s=i.shift());let n=i[0];if(!n||\"object\"!=typeof n)throw new Error(\"extendee must be an object\");const o=i.slice(1),a=o.length;for(let i=0;i(t=parseFloat(t)||0,Math.round((t+Number.EPSILON)*e)/e),s=\"undefined\"!=typeof window&&window.ResizeObserver||class{constructor(t){this.observables=[],this.boundCheck=this.check.bind(this),this.boundCheck(),this.callback=t}observe(t){if(this.observables.some((e=>e.el===t)))return;const e={el:t,size:{height:t.clientHeight,width:t.clientWidth}};this.observables.push(e)}unobserve(t){this.observables=this.observables.filter((e=>e.el!==t))}disconnect(){this.observables=[]}check(){const t=this.observables.filter((t=>{const e=t.el.clientHeight,i=t.el.clientWidth;if(t.size.height!==e||t.size.width!==i)return t.size.height=e,t.size.width=i,!0})).map((t=>t.el));t.length>0&&this.callback(t),window.requestAnimationFrame(this.boundCheck)}};class n{constructor(t){this.id=-1,this.id=t.pointerId||t.identifier||-1,this.pageX=t.pageX,this.pageY=t.pageY,this.clientX=t.clientX,this.clientY=t.clientY,this.nativePointer=t}}function o(t,e){return e?Math.sqrt((e.clientX-t.clientX)**2+(e.clientY-t.clientY)**2):0}function a(t,e){return e?{clientX:(t.clientX+e.clientX)/2,clientY:(t.clientY+e.clientY)/2}:t}class r{constructor(t,{start:e=(()=>!0),move:i=(()=>{}),end:s=(()=>{})}={}){this.element=t,this.startPointers=[],this.currentPointers=[],this.startCallback=e,this.moveCallback=i,this.endCallback=s,this.onStart=t=>{if(t.button&&0!==t.button)return;const e=new n(t);if(!1===this.startCallback(e,t))return!1;t.preventDefault(),(()=>{const t=window.getSelection?window.getSelection():document.selection;t&&t.rangeCount&&t.getRangeAt(0).getClientRects().length&&(t.removeAllRanges?t.removeAllRanges():t.empty&&t.empty())})(),this.currentPointers.push(e),this.startPointers.push(e);(t.target&&\"setPointerCapture\"in t.target?t.target:this.element).setPointerCapture(t.pointerId),this.element.addEventListener(\"pointermove\",this.onMove),this.element.addEventListener(\"pointerup\",this.onEnd),this.element.addEventListener(\"pointercancel\",this.onEnd)},this.onMove=t=>{const e=this.currentPointers.slice(),i=[];for(const e of[new n(t)]){const t=this.currentPointers.findIndex((t=>t.id===e.id));t<0||(i.push(e),this.currentPointers[t]=e)}i.length&&this.moveCallback(e,this.currentPointers,t)},this.onEnd=t=>{const e=new n(t),i=this.currentPointers.findIndex((t=>t.id===e.id));if(-1===i)return!1;this.currentPointers.splice(i,1),this.startPointers.splice(i,1),this.endCallback(e,t),this.currentPointers.length||(this.element.removeEventListener(\"pointermove\",this.onMove),this.element.removeEventListener(\"pointerup\",this.onEnd),this.element.removeEventListener(\"pointercancel\",this.onEnd))},this.element.addEventListener(\"pointerdown\",this.onStart)}stop(){this.element.removeEventListener(\"pointerdown\",this.onStart),this.element.removeEventListener(\"pointermove\",this.onMove),this.element.removeEventListener(\"pointerup\",this.onEnd),this.element.removeEventListener(\"pointercancel\",this.onEnd)}}const l=function(t){return!(!t||t===document.body)&&(function(t){const e=window.getComputedStyle(t)[\"overflow-y\"],i=window.getComputedStyle(t)[\"overflow-x\"],s=(\"scroll\"===e||\"auto\"===e)&&Math.abs(t.scrollHeight-t.clientHeight)>1,n=(\"scroll\"===i||\"auto\"===i)&&Math.abs(t.scrollWidth-t.clientWidth)>1;return s||n}(t)?t:l(t.parentNode))};class h{constructor(t={}){this.options=e(!0,{},t),this.plugins=[],this.events={};for(const t of[\"on\",\"once\"])for(const e of Object.entries(this.options[t]||{}))this[t](...e)}option(t,e){t=String(t);let i=(s=t,n=this.options,s.split(\".\").reduce((function(t,e){return t&&t[e]}),n));var s,n;return\"function\"==typeof i&&(i=i.call(this,t)),void 0===i?e:i}localize(t,e=[]){return String(t).replace(/\\{\\{(\\w+).?(\\w+)?\\}\\}/g,((t,i,s)=>{let n=!1;if(n=s?this.option(`${i[0]+i.toLowerCase().substring(1)}.l10n.${s}`):this.option(`l10n.${i}`),!n)return i;for(let t=0;t{const e=this.events[t]=this.events[t]||[];-1==e.indexOf(i)&&e.push(i)})),this}once(e,i){if(t(e)){for(const t of Object.entries(e))this.once(...t);return this}return String(e).split(\" \").forEach((t=>{const e=(...s)=>{this.off(t,e),i.call(this,this,...s)};e._=i,this.on(t,e)})),this}off(e,i){if(!t(e))return e.split(\" \").forEach((t=>{const e=this.events[t];if(!e||!e.length)return this;let s=-1;for(let t=0,n=e.length;t1||Math.abs(e.left-this.dragStart.rect.left)>1))return t.preventDefault(),void t.stopPropagation();!1!==this.trigger(\"click\",t)&&this.option(\"zoom\")&&\"toggleZoom\"===this.option(\"click\")&&(t.preventDefault(),t.stopPropagation(),this.zoomWithClick(t))}onWheel(t){!1!==this.trigger(\"wheel\",t)&&this.option(\"zoom\")&&this.option(\"wheel\")&&this.zoomWithWheel(t)}zoomWithWheel(t){void 0===this.changedDelta&&(this.changedDelta=0);const e=Math.max(-1,Math.min(1,-t.deltaY||-t.deltaX||t.wheelDelta||-t.detail)),i=this.content.scale;let s=i*(100+e*this.option(\"wheelFactor\"))/100;if(e<0&&Math.abs(i-this.option(\"minScale\"))<.01||e>0&&Math.abs(i-this.option(\"maxScale\"))<.01?(this.changedDelta+=Math.abs(e),s=i):(this.changedDelta=0,s=Math.max(Math.min(s,this.option(\"maxScale\")),this.option(\"minScale\"))),this.changedDelta>this.option(\"wheelLimit\"))return;if(t.preventDefault(),s===i)return;const n=this.$content.getBoundingClientRect(),o=t.clientX-n.left,a=t.clientY-n.top;this.zoomTo(s,{x:o,y:a})}zoomWithClick(t){const e=this.$content.getClientRects()[0],i=t.clientX-e.left,s=t.clientY-e.top;this.toggleZoom({x:i,y:s})}attachEvents(){this.$content.addEventListener(\"load\",this.onLoad),this.$container.addEventListener(\"wheel\",this.onWheel,{passive:!1}),this.$container.addEventListener(\"click\",this.onClick,{passive:!1}),this.initObserver();const t=new r(this.$container,{start:(e,i)=>{if(!this.option(\"touch\"))return!1;if(!(this.velocity.scale<0)){if(!t.currentPointers.length){if(-1!==[\"BUTTON\",\"TEXTAREA\",\"OPTION\",\"INPUT\",\"SELECT\",\"VIDEO\"].indexOf(i.target.nodeName))return!1;if(this.option(\"textSelection\")&&((t,e,i)=>{const s=t.childNodes,n=document.createRange();for(let t=0;t=a.left&&i>=a.top&&e<=a.right&&i<=a.bottom)return o}return!1})(i.target,i.clientX,i.clientY))return!1;if(l(i.target))return!1}return!1!==this.trigger(\"touchStart\",i)&&(this.state=\"pointerdown\",this.resetDragPosition(),this.dragPosition.midPoint=null,this.dragPosition.time=Date.now(),!0)}},move:(e,i,s)=>{if(\"pointerdown\"!==this.state)return;if(0==this.trigger(\"touchMove\",s))return void s.preventDefault();if(i.length<2&&1==this.option(\"panOnlyZoomed\")&&this.content.width<=this.viewport.width&&this.content.height<=this.viewport.height&&this.transform.scale<=this.option(\"baseScale\"))return;if(i.length>1&&(!this.option(\"zoom\")||!1===this.option(\"pinchToZoom\")))return;s.preventDefault(),s.stopPropagation();const n=a(e[0],e[1]),r=a(i[0],i[1]),l=r.clientX-n.clientX,h=r.clientY-n.clientY,c=o(e[0],e[1]),d=o(i[0],i[1]),u=c?d/c:1;this.dragOffset.x+=l,this.dragOffset.y+=h,this.dragOffset.scale*=u,this.dragOffset.time=Date.now()-this.dragPosition.time;const f=1===this.dragStart.scale&&this.option(\"lockAxis\");if(f&&!this.lockAxis){if(Math.abs(this.dragOffset.x)<6&&Math.abs(this.dragOffset.y)<6)return;if(\"xy\"===f){const t=Math.abs(180*Math.atan2(this.dragOffset.y,this.dragOffset.x)/Math.PI);this.lockAxis=t>45&&t<135?\"y\":\"x\"}else this.lockAxis=f}if(this.lockAxis&&(this.dragOffset[\"x\"===this.lockAxis?\"y\":\"x\"]=0),this.$container.classList.add(this.option(\"draggingClass\")),this.transform.scale===this.option(\"baseScale\")&&\"y\"===this.lockAxis||(this.dragPosition.x=this.dragStart.x+this.dragOffset.x),this.transform.scale===this.option(\"baseScale\")&&\"x\"===this.lockAxis||(this.dragPosition.y=this.dragStart.y+this.dragOffset.y),this.dragPosition.scale=this.dragStart.scale*this.dragOffset.scale,i.length>1){const e=a(t.startPointers[0],t.startPointers[1]),i=e.clientX-this.dragStart.rect.x,s=e.clientY-this.dragStart.rect.y,{deltaX:n,deltaY:o}=this.getZoomDelta(this.content.scale*this.dragOffset.scale,i,s);this.dragPosition.x-=n,this.dragPosition.y-=o,this.dragPosition.midPoint=r}else this.setDragResistance();this.transform={x:this.dragPosition.x,y:this.dragPosition.y,scale:this.dragPosition.scale},this.startAnimation()},end:(e,i)=>{if(\"pointerdown\"!==this.state)return;if(this._dragOffset={...this.dragOffset},t.currentPointers.length)return void this.resetDragPosition();if(this.state=\"decel\",this.friction=this.option(\"decelFriction\"),this.recalculateTransform(),this.$container.classList.remove(this.option(\"draggingClass\")),!1===this.trigger(\"touchEnd\",i))return;if(\"decel\"!==this.state)return;const s=this.option(\"minScale\");if(this.transform.scale.01){const t=this.dragPosition.midPoint||e,i=this.$content.getClientRects()[0];this.zoomTo(n,{friction:.64,x:t.clientX-i.left,y:t.clientY-i.top})}else;}});this.pointerTracker=t}initObserver(){this.resizeObserver||(this.resizeObserver=new s((()=>{this.updateTimer||(this.updateTimer=setTimeout((()=>{const t=this.$container.getBoundingClientRect();t.width&&t.height?((Math.abs(t.width-this.container.width)>1||Math.abs(t.height-this.container.height)>1)&&(this.isAnimating()&&this.endAnimation(),this.updateMetrics(),this.panTo({x:this.content.x,y:this.content.y,scale:this.option(\"baseScale\"),friction:0})),this.updateTimer=null):this.updateTimer=null}),this.updateRate))})),this.resizeObserver.observe(this.$container))}resetDragPosition(){this.lockAxis=null,this.friction=this.option(\"friction\"),this.velocity={x:0,y:0,scale:0};const{x:t,y:e,scale:i}=this.content;this.dragStart={rect:this.$content.getBoundingClientRect(),x:t,y:e,scale:i},this.dragPosition={...this.dragPosition,x:t,y:e,scale:i},this.dragOffset={x:0,y:0,scale:1,time:0}}updateMetrics(t){!0!==t&&this.trigger(\"beforeUpdate\");const e=this.$container,s=this.$content,n=this.$viewport,o=this.$content instanceof HTMLImageElement,a=this.option(\"zoom\"),r=this.option(\"resizeParent\",a);let l=(h=this.$content,Math.max(parseFloat(h.naturalWidth||0),parseFloat(h.width&&h.width.baseVal&&h.width.baseVal.value||0),parseFloat(h.offsetWidth||0),parseFloat(h.scrollWidth||0)));var h;let c=(t=>Math.max(parseFloat(t.naturalHeight||0),parseFloat(t.height&&t.height.baseVal&&t.height.baseVal.value||0),parseFloat(t.offsetHeight||0),parseFloat(t.scrollHeight||0)))(this.$content);Object.assign(s.style,{width:\"\",height:\"\",maxWidth:\"\",maxHeight:\"\"}),r&&Object.assign(n.style,{width:\"\",height:\"\"});const d=this.option(\"ratio\");l=i(l*d),c=i(c*d);let u=l,f=c;const g=s.getBoundingClientRect(),p=n.getBoundingClientRect(),m=n==e?p:e.getBoundingClientRect();let y=Math.max(n.offsetWidth,i(p.width)),b=Math.max(n.offsetHeight,i(p.height)),v=window.getComputedStyle(n);if(y-=parseFloat(v.paddingLeft)+parseFloat(v.paddingRight),b-=parseFloat(v.paddingTop)+parseFloat(v.paddingBottom),this.viewport.width=y,this.viewport.height=b,a){if(Math.abs(l-g.width)>.1||Math.abs(c-g.height)>.1){const t=((t,e,i,s)=>{const n=Math.min(i/t||0,s/e);return{width:t*n||0,height:e*n||0}})(l,c,Math.min(l,g.width),Math.min(c,g.height));u=i(t.width),f=i(t.height)}Object.assign(s.style,{width:`${u}px`,height:`${f}px`,transform:\"\"})}if(r&&(Object.assign(n.style,{width:`${u}px`,height:`${f}px`}),this.viewport={...this.viewport,width:u,height:f}),o&&a&&\"function\"!=typeof this.options.maxScale){const t=this.option(\"maxScale\");this.options.maxScale=function(){return this.content.origWidth>0&&this.content.fitWidth>0?this.content.origWidth/this.content.fitWidth:t}}this.content={...this.content,origWidth:l,origHeight:c,fitWidth:u,fitHeight:f,width:u,height:f,scale:1,isZoomable:a},this.container={width:m.width,height:m.height},!0!==t&&this.trigger(\"afterUpdate\")}zoomIn(t){this.zoomTo(this.content.scale+(t||this.option(\"step\")))}zoomOut(t){this.zoomTo(this.content.scale-(t||this.option(\"step\")))}toggleZoom(t={}){const e=this.option(\"maxScale\"),i=this.option(\"baseScale\"),s=this.content.scale>i+.5*(e-i)?i:e;this.zoomTo(s,t)}zoomTo(t=this.option(\"baseScale\"),{x:e=null,y:s=null}={}){t=Math.max(Math.min(t,this.option(\"maxScale\")),this.option(\"minScale\"));const n=i(this.content.scale/(this.content.width/this.content.fitWidth),1e7);null===e&&(e=this.content.width*n*.5),null===s&&(s=this.content.height*n*.5);const{deltaX:o,deltaY:a}=this.getZoomDelta(t,e,s);e=this.content.x-o,s=this.content.y-a,this.panTo({x:e,y:s,scale:t,friction:this.option(\"zoomFriction\")})}getZoomDelta(t,e=0,i=0){const s=this.content.fitWidth*this.content.scale,n=this.content.fitHeight*this.content.scale,o=e>0&&s?e/s:0,a=i>0&&n?i/n:0;return{deltaX:(this.content.fitWidth*t-s)*o,deltaY:(this.content.fitHeight*t-n)*a}}panTo({x:t=this.content.x,y:e=this.content.y,scale:i,friction:s=this.option(\"friction\"),ignoreBounds:n=!1}={}){if(i=i||this.content.scale||1,!n){const{boundX:s,boundY:n}=this.getBounds(i);s&&(t=Math.max(Math.min(t,s.to),s.from)),n&&(e=Math.max(Math.min(e,n.to),n.from))}this.friction=s,this.transform={x:t,y:e,scale:i},s?(this.state=\"panning\",this.velocity={x:(1/this.friction-1)*(t-this.content.x),y:(1/this.friction-1)*(e-this.content.y),scale:(1/this.friction-1)*(i-this.content.scale)},this.startAnimation()):this.endAnimation()}startAnimation(){this.rAF?cancelAnimationFrame(this.rAF):this.trigger(\"startAnimation\"),this.rAF=requestAnimationFrame((()=>this.animate()))}animate(){if(this.setEdgeForce(),this.setDragForce(),this.velocity.x*=this.friction,this.velocity.y*=this.friction,this.velocity.scale*=this.friction,this.content.x+=this.velocity.x,this.content.y+=this.velocity.y,this.content.scale+=this.velocity.scale,this.isAnimating())this.setTransform();else if(\"pointerdown\"!==this.state)return this.endAnimation(),void this.trigger(\"endAnimation\");this.rAF=requestAnimationFrame((()=>this.animate()))}getBounds(t){let e=this.boundX,s=this.boundY;if(void 0!==e&&void 0!==s)return{boundX:e,boundY:s};e={from:0,to:0},s={from:0,to:0},t=t||this.transform.scale;const n=this.content.fitWidth,o=this.content.fitHeight,a=n*t,r=o*t,l=this.viewport.width,h=this.viewport.height;if(n<=l){const t=.5*(l-a),s=.5*(a-n);e.from=i(t-s),e.to=i(t+s)}else e.from=i(l-a);if(o<=h){const t=.5*(h-r),e=.5*(r-o);s.from=i(t-e),s.to=i(t+e)}else s.from=i(h-a);return{boundX:e,boundY:s}}setEdgeForce(){if(\"decel\"!==this.state)return;const t=this.option(\"bounceForce\"),{boundX:e,boundY:i}=this.getBounds(Math.max(this.transform.scale,this.content.scale));let s,n,o,a;if(e&&(s=this.content.xe.to),i&&(o=this.content.yi.to),s||n){let i=((s?e.from:e.to)-this.content.x)*t;const n=this.content.x+(this.velocity.x+i)/this.friction;n>=e.from&&n<=e.to&&(i+=this.velocity.x),this.velocity.x=i,this.recalculateTransform()}if(o||a){let e=((o?i.from:i.to)-this.content.y)*t;const s=this.content.y+(e+this.velocity.y)/this.friction;s>=i.from&&s<=i.to&&(e+=this.velocity.y),this.velocity.y=e,this.recalculateTransform()}}setDragResistance(){if(\"pointerdown\"!==this.state)return;const{boundX:t,boundY:e}=this.getBounds(this.dragPosition.scale);let i,s,n,o;if(t&&(i=this.dragPosition.xt.to),e&&(n=this.dragPosition.ye.to),(i||s)&&(!i||!s)){const e=i?t.from:t.to,s=e-this.dragPosition.x;this.dragPosition.x=e-.3*s}if((n||o)&&(!n||!o)){const t=n?e.from:e.to,i=t-this.dragPosition.y;this.dragPosition.y=t-.3*i}}setDragForce(){\"pointerdown\"===this.state&&(this.velocity.x=this.dragPosition.x-this.content.x,this.velocity.y=this.dragPosition.y-this.content.y,this.velocity.scale=this.dragPosition.scale-this.content.scale)}recalculateTransform(){this.transform.x=this.content.x+this.velocity.x/(1/this.friction-1),this.transform.y=this.content.y+this.velocity.y/(1/this.friction-1),this.transform.scale=this.content.scale+this.velocity.scale/(1/this.friction-1)}isAnimating(){return!(!this.friction||!(Math.abs(this.velocity.x)>.05||Math.abs(this.velocity.y)>.05||Math.abs(this.velocity.scale)>.05))}setTransform(t){let e,s,n;if(t?(e=i(this.transform.x),s=i(this.transform.y),n=this.transform.scale,this.content={...this.content,x:e,y:s,scale:n}):(e=i(this.content.x),s=i(this.content.y),n=this.content.scale/(this.content.width/this.content.fitWidth),this.content={...this.content,x:e,y:s}),this.trigger(\"beforeTransform\"),e=i(this.content.x),s=i(this.content.y),t&&this.option(\"zoom\")){let t,o;t=i(this.content.fitWidth*n),o=i(this.content.fitHeight*n),this.content.width=t,this.content.height=o,this.transform={...this.transform,width:t,height:o,scale:n},Object.assign(this.$content.style,{width:`${t}px`,height:`${o}px`,maxWidth:\"none\",maxHeight:\"none\",transform:`translate3d(${e}px, ${s}px, 0) scale(1)`})}else this.$content.style.transform=`translate3d(${e}px, ${s}px, 0) scale(${n})`;this.trigger(\"afterTransform\")}endAnimation(){cancelAnimationFrame(this.rAF),this.rAF=null,this.velocity={x:0,y:0,scale:0},this.setTransform(!0),this.state=\"ready\",this.handleCursor()}handleCursor(){const t=this.option(\"draggableClass\");t&&this.option(\"touch\")&&(1==this.option(\"panOnlyZoomed\")&&this.content.width<=this.viewport.width&&this.content.height<=this.viewport.height&&this.transform.scale<=this.option(\"baseScale\")?this.$container.classList.remove(t):this.$container.classList.add(t))}detachEvents(){this.$content.removeEventListener(\"load\",this.onLoad),this.$container.removeEventListener(\"wheel\",this.onWheel,{passive:!1}),this.$container.removeEventListener(\"click\",this.onClick,{passive:!1}),this.pointerTracker&&(this.pointerTracker.stop(),this.pointerTracker=null),this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null)}destroy(){\"destroy\"!==this.state&&(this.state=\"destroy\",clearTimeout(this.updateTimer),this.updateTimer=null,cancelAnimationFrame(this.rAF),this.rAF=null,this.detachEvents(),this.detachPlugins(),this.resetDragPosition())}}d.version=\"4.0.0-beta.2\",d.Plugins={};const u=(t,e)=>{let i=0;return function(...s){const n=(new Date).getTime();if(!(n-i{e.preventDefault(),e.stopPropagation(),this.carousel[\"slide\"+(\"next\"===t?\"Next\":\"Prev\")]()})),e}build(){this.$container||(this.$container=document.createElement(\"div\"),this.$container.classList.add(this.option(\"classNames.main\")),this.carousel.$container.appendChild(this.$container)),this.$next||(this.$next=this.createButton(\"next\"),this.$container.appendChild(this.$next)),this.$prev||(this.$prev=this.createButton(\"prev\"),this.$container.appendChild(this.$prev))}onRefresh(){const t=this.carousel.pages.length;t<=1||t>1&&this.carousel.elemDimWidth=t-1&&this.$next.setAttribute(\"disabled\",\"\")))}cleanup(){this.$prev&&this.$prev.remove(),this.$prev=null,this.$next&&this.$next.remove(),this.$next=null,this.$container&&this.$container.remove(),this.$container=null}attach(){this.carousel.on(\"refresh change\",this.onRefresh)}detach(){this.carousel.off(\"refresh change\",this.onRefresh),this.cleanup()}}f.defaults={prevTpl:'',nextTpl:'',classNames:{main:\"carousel__nav\",button:\"carousel__button\",next:\"is-next\",prev:\"is-prev\"}};class g{constructor(t){this.carousel=t,this.selectedIndex=null,this.friction=0,this.onNavReady=this.onNavReady.bind(this),this.onNavClick=this.onNavClick.bind(this),this.onNavCreateSlide=this.onNavCreateSlide.bind(this),this.onTargetChange=this.onTargetChange.bind(this)}addAsTargetFor(t){this.target=this.carousel,this.nav=t,this.attachEvents()}addAsNavFor(t){this.target=t,this.nav=this.carousel,this.attachEvents()}attachEvents(){this.nav.options.initialSlide=this.target.options.initialPage,this.nav.on(\"ready\",this.onNavReady),this.nav.on(\"createSlide\",this.onNavCreateSlide),this.nav.on(\"Panzoom.click\",this.onNavClick),this.target.on(\"change\",this.onTargetChange),this.target.on(\"Panzoom.afterUpdate\",this.onTargetChange)}onNavReady(){this.onTargetChange(!0)}onNavClick(t,e,i){const s=i.target.closest(\".carousel__slide\");if(!s)return;i.stopPropagation();const n=parseInt(s.dataset.index,10),o=this.target.findPageForSlide(n);this.target.page!==o&&this.target.slideTo(o,{friction:this.friction}),this.markSelectedSlide(n)}onNavCreateSlide(t,e){e.index===this.selectedIndex&&this.markSelectedSlide(e.index)}onTargetChange(){const t=this.target.pages[this.target.page].indexes[0],e=this.nav.findPageForSlide(t);this.nav.slideTo(e),this.markSelectedSlide(t)}markSelectedSlide(t){this.selectedIndex=t,[...this.nav.slides].filter((t=>t.$el&&t.$el.classList.remove(\"is-nav-selected\")));const e=this.nav.slides[t];e&&e.$el&&e.$el.classList.add(\"is-nav-selected\")}attach(t){const e=t.options.Sync;(e.target||e.nav)&&(e.target?this.addAsNavFor(e.target):e.nav&&this.addAsTargetFor(e.nav),this.friction=e.friction)}detach(){this.nav&&(this.nav.off(\"ready\",this.onNavReady),this.nav.off(\"Panzoom.click\",this.onNavClick),this.nav.off(\"createSlide\",this.onNavCreateSlide)),this.target&&(this.target.off(\"Panzoom.afterUpdate\",this.onTargetChange),this.target.off(\"change\",this.onTargetChange))}}g.defaults={friction:.92};const p={Navigation:f,Dots:class{constructor(t){this.carousel=t,this.$list=null,this.events={change:this.onChange.bind(this),refresh:this.onRefresh.bind(this)}}buildList(){if(this.carousel.pages.length<2)return;const t=document.createElement(\"ol\");return t.classList.add(\"carousel__dots\"),t.addEventListener(\"click\",(t=>{if(!(\"page\"in t.target.dataset))return;t.preventDefault(),t.stopPropagation();const e=parseInt(t.target.dataset.page,10),i=this.carousel;e!==i.page&&(i.pages.length<3&&i.option(\"infinite\")?i[0==e?\"slidePrev\":\"slideNext\"]():i.slideTo(e))})),this.$list=t,this.carousel.$container.appendChild(t),this.carousel.$container.classList.add(\"has-dots\"),t}removeList(){this.$list&&(this.$list.parentNode.removeChild(this.$list),this.$list=null),this.carousel.$container.classList.remove(\"has-dots\")}rebuildDots(){let t=this.$list;const e=!!t,i=this.carousel.pages.length;if(i<2)return void(e&&this.removeList());e||(t=this.buildList());const s=this.$list.children.length;if(s>i)for(let t=i;t{const i=t.code;let s;\"Enter\"===i||\"NumpadEnter\"===i?s=e:\"ArrowRight\"===i?s=e.nextSibling:\"ArrowLeft\"===i&&(s=e.previousSibling),s&&s.click()})),this.$list.appendChild(e)}this.setActiveDot()}}setActiveDot(){if(!this.$list)return;this.$list.childNodes.forEach((t=>{t.classList.remove(\"is-selected\")}));const t=this.$list.childNodes[this.carousel.page];t&&t.classList.add(\"is-selected\")}onChange(){this.setActiveDot()}onRefresh(){this.rebuildDots()}attach(){this.carousel.on(this.events)}detach(){this.removeList(),this.carousel.off(this.events),this.carousel=null}},Sync:g},m={slides:[],preload:0,slidesPerPage:\"auto\",initialPage:null,initialSlide:null,friction:.92,center:!0,infinite:!0,fill:!0,dragFree:!1,classNames:{viewport:\"carousel__viewport\",track:\"carousel__track\",slide:\"carousel__slide\",slideSelected:\"is-selected\"},l10n:{NEXT:\"Next slide\",PREV:\"Previous slide\",GOTO:\"Go to slide %d\"}};class y extends h{constructor(t,i={}){if(super(i=e(!0,{},m,i)),this.state=\"init\",this.$container=t,!(this.$container instanceof HTMLElement))throw new Error(\"No root element provided\");this.slideNext=u(this.slideNext.bind(this),250),this.slidePrev=u(this.slidePrev.bind(this),250),this.init()}init(){this.pages=[],this.page=this.pageIndex=null,this.prevPage=this.prevPageIndex=null,this.attachPlugins(y.Plugins),this.trigger(\"init\"),this.initLayout(),this.initSlides(),this.updateMetrics(),this.$track.style.transform=`translate3d(${-1*this.pages[this.page].left}px, 0px, 0) scale(1)`,this.manageSlideVisiblity(),this.initPanzoom(),this.state=\"ready\",this.trigger(\"ready\")}initLayout(){const t=this.option(\"classNames\");this.$viewport=this.option(\"viewport\")||this.$container.querySelector(\".\"+t.viewport),this.$viewport||(this.$viewport=document.createElement(\"div\"),this.$viewport.classList.add(t.viewport),this.$viewport.append(...this.$container.childNodes),this.$container.appendChild(this.$viewport)),this.$track=this.option(\"track\")||this.$container.querySelector(\".\"+t.track),this.$track||(this.$track=document.createElement(\"div\"),this.$track.classList.add(t.track),this.$track.append(...this.$viewport.childNodes),this.$viewport.appendChild(this.$track))}initSlides(){this.slides=[];this.$viewport.querySelectorAll(\".\"+this.option(\"classNames.slide\")).forEach((t=>{const e={$el:t,isDom:!0};this.slides.push(e),this.trigger(\"createSlide\",e,this.slides.length)})),Array.isArray(this.options.slides)&&(this.slides=e(!0,[...this.slides],this.options.slides))}updateMetrics(){let t,e=0,s=[];this.slides.forEach(((i,n)=>{const o=i.$el,a=i.isDom||!t?this.getSlideMetrics(o):t;i.index=n,i.width=a,i.left=e,t=a,e+=a,s.push(n)}));let n=Math.max(this.$track.offsetWidth,i(this.$track.getBoundingClientRect().width)),o=window.getComputedStyle(this.$track);n-=parseFloat(o.paddingLeft)+parseFloat(o.paddingRight),this.contentWidth=e,this.viewportWidth=n;const a=[],r=this.option(\"slidesPerPage\");if(Number.isInteger(r)&&e>n)for(let t=0;tn)&&(a.push({indexes:[],slides:[]}),t=a.length-1,e=0),e+=s.width,a[t].indexes.push(i),a[t].slides.push(s)}}const l=this.option(\"center\"),h=this.option(\"fill\");a.forEach(((t,i)=>{t.index=i,t.width=t.slides.reduce(((t,e)=>t+e.width),0),t.left=t.slides[0].left,l&&(t.left+=.5*(n-t.width)*-1),h&&!this.option(\"infiniteX\",this.option(\"infinite\"))&&e>n&&(t.left=Math.max(t.left,0),t.left=Math.min(t.left,e-n))}));const c=[];let d;a.forEach((t=>{const e={...t};d&&e.left===d.left?(d.width+=e.width,d.slides=[...d.slides,...e.slides],d.indexes=[...d.indexes,...e.indexes]):(e.index=c.length,d=e,c.push(e))})),this.pages=c;let u=this.page;if(null===u){const t=this.option(\"initialSlide\");u=null!==t?this.findPageForSlide(t):this.option(\"initialPage\",0),c[u]||(u=c.length&&u>c.length?c[c.length-1].index:0),this.page=u,this.pageIndex=u}this.updatePanzoom(),this.trigger(\"refresh\")}getSlideMetrics(t){if(!t){const e=this.slides[0];(t=document.createElement(\"div\")).dataset.isTestEl=1,t.style.visibility=\"hidden\",t.classList.add(this.option(\"classNames.slide\")),e.customClass&&t.classList.add(...e.customClass.split(\" \")),this.$track.prepend(t)}let e=Math.max(t.offsetWidth,i(t.getBoundingClientRect().width));const s=t.currentStyle||window.getComputedStyle(t);return e=e+(parseFloat(s.marginLeft)||0)+(parseFloat(s.marginRight)||0),t.dataset.isTestEl&&t.remove(),e}findPageForSlide(t){const e=this.pages.find((e=>e.indexes.indexOf(t)>-1));return e?e.index:null}slideNext(){this.slideTo(this.pageIndex+1)}slidePrev(){this.slideTo(this.pageIndex-1)}slideTo(t,e={}){const{x:i=-1*this.setPage(t,!0),y:s=0,friction:n=this.option(\"friction\")}=e;this.Panzoom.content.x===i&&!this.Panzoom.velocity.x&&n||(this.Panzoom.panTo({x:i,y:s,friction:n,ignoreBounds:!0}),\"ready\"===this.state&&\"ready\"===this.Panzoom.state&&this.trigger(\"settle\"))}initPanzoom(){this.Panzoom&&this.Panzoom.destroy();const t=e(!0,{},{content:this.$track,wrapInner:!1,resizeParent:!1,zoom:!1,click:!1,lockAxis:\"x\",x:-1*this.pages[this.page].left,centerOnStart:!1,textSelection:()=>this.option(\"textSelection\",!1),panOnlyZoomed:function(){return this.content.width<=this.viewport.width}},this.option(\"Panzoom\"));this.Panzoom=new d(this.$container,t),this.Panzoom.on({\"*\":(t,...e)=>this.trigger(`Panzoom.${t}`,...e),afterUpdate:()=>{this.updatePage()},beforeTransform:this.onBeforeTransform.bind(this),touchEnd:this.onTouchEnd.bind(this),endAnimation:()=>{this.trigger(\"settle\")}}),this.updateMetrics(),this.manageSlideVisiblity()}updatePanzoom(){this.Panzoom&&(this.Panzoom.content={...this.Panzoom.content,fitWidth:this.contentWidth,origWidth:this.contentWidth,width:this.contentWidth},this.pages.length>1&&this.option(\"infiniteX\",this.option(\"infinite\"))?this.Panzoom.boundX=null:this.Panzoom.boundX={from:-1*this.pages[this.pages.length-1].left,to:-1*this.pages[0].left},this.option(\"infiniteY\",this.option(\"infinite\"))?this.Panzoom.boundY=null:this.Panzoom.boundY={from:0,to:0},this.Panzoom.handleCursor())}manageSlideVisiblity(){const t=this.contentWidth,e=this.viewportWidth;let i=this.Panzoom?-1*this.Panzoom.content.x:this.pages[this.page].left;const s=this.option(\"preload\"),n=this.option(\"infiniteX\",this.option(\"infinite\")),o=parseFloat(window.getComputedStyle(this.$viewport,null).getPropertyValue(\"padding-left\")),a=parseFloat(window.getComputedStyle(this.$viewport,null).getPropertyValue(\"padding-right\"));this.slides.forEach((r=>{let l,h,c=0;l=i-o,h=i+e+a,l-=s*(e+o+a),h+=s*(e+o+a);const d=r.left+r.width>l&&r.leftl&&r.leftl&&r.lefti&&r.left<=i+e+a&&(c=0)):this.removeSlideEl(r),r.hasDiff=c}));let r=0,l=0;this.slides.forEach(((e,i)=>{let s=0;e.$el?(i!==r||e.hasDiff?s=l+e.hasDiff*t:l=0,e.$el.style.left=Math.abs(s)>.1?`${l+e.hasDiff*t}px`:\"\",r++):l+=e.width})),this.markSelectedSlides()}createSlideEl(t){if(!t)return;if(t.$el){if(parseInt(t.$el.dataset.index,10)!==t.index){t.$el.dataset.index=t.index;let e;t.$el.querySelectorAll(\"[data-lazy-src]\").forEach((t=>{let e=t.dataset.lazySrc;t instanceof HTMLImageElement?t.src=e:t.style.backgroundImage=`url('${e}')`})),(e=t.$el.dataset.lazySrc)&&(t.$el.style.backgroundImage=`url('${e}')`),t.state=\"ready\"}return}const e=document.createElement(\"div\");e.dataset.index=t.index,e.classList.add(this.option(\"classNames.slide\")),t.customClass&&e.classList.add(...t.customClass.split(\" \")),t.html&&(e.innerHTML=t.html);const i=[];this.slides.forEach(((t,e)=>{t.$el&&i.push(e)}));const s=t.index;let n=null;if(i.length){let t=i.reduce(((t,e)=>Math.abs(e-s){const n=i.$el;if(!n)return;const o=this.pages[this.page];o&&o.indexes&&o.indexes.indexOf(s)>-1?(t&&!n.classList.contains(t)&&(n.classList.add(t),this.trigger(\"selectSlide\",i)),n.removeAttribute(e)):(t&&n.classList.contains(t)&&(n.classList.remove(t),this.trigger(\"unselectSlide\",i)),n.setAttribute(e,!0))}))}updatePage(){this.updateMetrics(),this.slideTo(this.page,{friction:0})}onBeforeTransform(){this.option(\"infiniteX\",this.option(\"infinite\"))&&this.manageInfiniteTrack(),this.manageSlideVisiblity()}manageInfiniteTrack(){const t=this.contentWidth,e=this.viewportWidth;if(!this.option(\"infiniteX\",this.option(\"infinite\"))||this.pages.length<2||te&&(i.content.x-=t,this.pageIndex=this.pageIndex+this.pages.length,s=!0),s&&\"pointerdown\"===i.state&&i.resetDragPosition(),s}onTouchEnd(t,e){const i=this.option(\"dragFree\");if(!i&&this.pages.length>1&&t.dragOffset.time<350&&Math.abs(t.dragOffset.y)<1&&Math.abs(t.dragOffset.x)>5)this[t.dragOffset.x<0?\"slideNext\":\"slidePrev\"]();else if(i){const[,e]=this.getPageFromPosition(-1*t.transform.x);this.setPage(e)}else this.slideToClosest()}slideToClosest(t={}){let[,e]=this.getPageFromPosition(-1*this.Panzoom.content.x);this.slideTo(e,t)}getPageFromPosition(t){const e=this.pages.length;this.option(\"center\")&&(t+=.5*this.viewportWidth);const i=Math.floor(t/this.contentWidth);t-=i*this.contentWidth;let s=this.slides.find((e=>e.left<=t&&e.left+e.width>t));if(s){let t=this.findPageForSlide(s.index);return[t,t+i*e]}return[0,0]}setPage(t,e){let i=0,s=parseInt(t,10)||0;const n=this.page,o=this.pageIndex,a=this.pages.length,r=this.contentWidth,l=this.viewportWidth;if(t=(s%a+a)%a,this.option(\"infiniteX\",this.option(\"infinite\"))&&r>l){const n=Math.floor(s/a)||0,o=r;if(i=this.pages[t].left+n*o,!0===e&&a>2){let t=-1*this.Panzoom.content.x;const e=i-o,n=i+o,r=Math.abs(t-i),l=Math.abs(t-e),h=Math.abs(t-n);h{this.removeSlideEl(t)})),this.slides=[],this.Panzoom.destroy(),this.detachPlugins()}}y.version=\"4.0.0-beta.2\",y.Plugins=p;const b=!!(\"undefined\"!=typeof window&&window.document&&window.document.createElement&&window.document.body);class v{constructor(t){this.fancybox=t,this.$container=null,this.state=\"init\";for(const t of[\"onPrepare\",\"onClosing\",\"onKeydown\"])this[t]=this[t].bind(this);this.events={prepare:this.onPrepare,closing:this.onClosing,keydown:this.onKeydown}}onPrepare(){this.getSlides().length=this.fancybox.option(\"Thumbs.minScreenHeight\")&&this.build()}onClosing(){this.Carousel&&this.Carousel.Panzoom.detachEvents()}onKeydown(t,e){e===t.option(\"Thumbs.key\")&&this.toggle()}build(){if(this.$container)return;const t=document.createElement(\"div\");t.classList.add(\"fancybox__thumbs\"),this.fancybox.$carousel.parentNode.insertBefore(t,this.fancybox.$carousel.nextSibling),this.Carousel=new y(t,e(!0,{Dots:!1,Navigation:!1,Sync:{friction:0},infinite:!1,center:!0,fill:!0,dragFree:!0,slidesPerPage:1,preload:1},this.fancybox.option(\"Thumbs.Carousel\"),{Sync:{target:this.fancybox.Carousel},slides:this.getSlides()})),this.Carousel.Panzoom.on(\"wheel\",((t,e)=>{e.preventDefault(),this.fancybox[e.deltaY<0?\"prev\":\"next\"]()})),this.$container=t,this.state=\"visible\"}getSlides(){const t=[];for(const e of this.fancybox.items){const i=e.thumb;i&&t.push({html:`
`,customClass:`has-thumb has-${e.type||\"image\"}`})}return t}toggle(){return\"visible\"===this.state?(this.Carousel.Panzoom.detachEvents(),this.$container.style.display=\"none\",void(this.state=\"hidden\")):\"hidden\"===this.state?(this.$container.style.display=\"\",this.Carousel.Panzoom.attachEvents(),void(this.state=\"visible\")):void this.build()}cleanup(){this.Carousel&&(this.Carousel.destroy(),this.Carousel=null),this.$container&&(this.$container.remove(),this.$container=null),this.state=\"init\"}attach(){this.fancybox.on(this.events)}detach(){this.fancybox.off(this.events),this.cleanup()}}v.defaults={minSlideCount:2,minScreenHeight:500,autoStart:!0,key:\"t\"};const x=t=>Object.entries(t).map((t=>t.map(encodeURIComponent).join(\"=\"))).join(\"&\"),w={video:{autoplay:!0,ratio:16/9},youtube:{autohide:1,fs:1,rel:0,hd:1,wmode:\"transparent\",enablejsapi:1,html5:1},vimeo:{hd:1,show_title:1,show_byline:1,show_portrait:0,fullscreen:1},html5video:{tpl:'',format:\"\"}};class ${constructor(t){this.fancybox=t;for(const t of[\"onInit\",\"onReady\",\"onCreateSlide\",\"onRemoveSlide\",\"onSelectSlide\",\"onUnselectSlide\",\"onRefresh\",\"onMessage\"])this[t]=this[t].bind(this);this.events={init:this.onInit,ready:this.onReady,\"Carousel.createSlide\":this.onCreateSlide,\"Carousel.removeSlide\":this.onRemoveSlide,\"Carousel.selectSlide\":this.onSelectSlide,\"Carousel.unselectSlide\":this.onUnselectSlide,\"Carousel.refresh\":this.onRefresh}}onInit(){for(const t of this.fancybox.items)this.processType(t)}processType(t){if(t.html)return t.src=t.html,t.type=\"html\",void delete t.html;const i=t.src||\"\";let s=t.type||this.fancybox.options.type,n=null;if(!i||\"string\"==typeof i){if(n=i.match(/(?:youtube\\.com|youtu\\.be|youtube\\-nocookie\\.com)\\/(?:watch\\?(?:.*&)?v=|v\\/|u\\/|embed\\/?)?(videoseries\\?list=(?:.*)|[\\w-]{11}|\\?listType=(?:.*)&list=(?:.*))(?:.*)/i)){const e=x(this.fancybox.option(\"Html.youtube\")),i=encodeURIComponent(n[1]);t.videoId=i,t.src=`https://www.youtube-nocookie.com/embed/${i}?${e}`,t.thumb=t.thumb||`https://i.ytimg.com/vi/${i}/mqdefault.jpg`,t.vendor=\"youtube\",s=\"video\"}else if(n=i.match(/^.+vimeo.com\\/(?:\\/)?([\\d]+)(.*)?/)){const e=x(this.fancybox.option(\"Html.vimeo\")),i=encodeURIComponent(n[1]);t.videoId=i,t.src=`https://player.vimeo.com/video/${i}?${e}`,t.vendor=\"vimeo\",s=\"video\"}else(n=i.match(/(?:maps\\.)?google\\.([a-z]{2,3}(?:\\.[a-z]{2})?)\\/(?:(?:(?:maps\\/(?:place\\/(?:.*)\\/)?\\@(.*),(\\d+.?\\d+?)z))|(?:\\?ll=))(.*)?/i))?(t.src=`//maps.google.${n[1]}/?ll=${(n[2]?n[2]+\"&z=\"+Math.floor(n[3])+(n[4]?n[4].replace(/^\\//,\"&\"):\"\"):n[4]+\"\").replace(/\\?/,\"&\")}&output=${n[4]&&n[4].indexOf(\"layer=c\")>0?\"svembed\":\"embed\"}`,s=\"map\"):(n=i.match(/(?:maps\\.)?google\\.([a-z]{2,3}(?:\\.[a-z]{2})?)\\/(?:maps\\/search\\/)(.*)/i))&&(t.src=`//maps.google.${n[1]}/maps?q=${n[2].replace(\"query=\",\"q=\").replace(\"api=1\",\"\")}&output=embed`,s=\"map\");s||(\"#\"===i.charAt(0)?s=\"inline\":(n=i.match(/\\.(mp4|mov|ogv|webm)((\\?|#).*)?$/i))?(s=\"html5video\",t.format=t.format||\"video/\"+(\"ogv\"===n[1]?\"ogg\":n[1])):i.match(/(^data:image\\/[a-z0-9+\\/=]*,)|(\\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\\?|#).*)?$)/i)?s=\"image\":i.match(/\\.(pdf)((\\?|#).*)?$/i)&&(s=\"pdf\")),t.type=s||this.fancybox.option(\"defaultType\",\"image\"),\"html5video\"!==s&&\"video\"!==s||(t.video=e({},this.fancybox.option(\"Html.video\"),t.video),t.width&&t.height?t.ratio=parseFloat(t.width)/parseFloat(t.height):t.ratio=t.ratio||t.video.ratio)}}onReady(){this.fancybox.Carousel.slides.forEach((t=>{t.$el&&(this.setContent(t),t.index===this.fancybox.getSlide().index&&this.playVideo(t))}))}onCreateSlide(t,e,i){\"ready\"===this.fancybox.state&&this.setContent(i)}loadInlineContent(t){let e;if(t.src instanceof HTMLElement)e=t.src;else if(\"string\"==typeof t.src){const i=t.src.split(\"#\",2),s=2===i.length&&\"\"===i[0]?i[1]:i[0];e=document.getElementById(s)}if(e){if(\"clone\"===t.type||e.$placeHolder){e=e.cloneNode(!0);let i=e.getAttribute(\"id\");i=i?`${i}--clone`:`clone-${this.fancybox.id}-${t.index}`,e.setAttribute(\"id\",i)}else{const t=document.createElement(\"div\");t.classList.add(\"fancybox-placeholder\"),e.parentNode.insertBefore(t,e),e.$placeHolder=t}this.fancybox.setContent(t,e)}else this.fancybox.setError(t,\"{{ELEMENT_NOT_FOUND}}\")}loadAjaxContent(t){const e=this.fancybox,i=new XMLHttpRequest;e.showLoading(t),i.onreadystatechange=function(){i.readyState===XMLHttpRequest.DONE&&\"ready\"===e.state&&(e.hideLoading(t),200===i.status?e.setContent(t,i.responseText):e.setError(t,404===i.status?\"{{AJAX_NOT_FOUND}}\":\"{{AJAX_FORBIDDEN}}\"))},i.open(\"GET\",t.src),i.send(t.ajax||null),t.xhr=i}loadIframeContent(t){const e=this.fancybox,i=document.createElement(\"iframe\");if(i.className=\"fancybox__iframe\",i.setAttribute(\"id\",`fancybox__iframe_${e.id}_${t.index}`),i.setAttribute(\"allow\",\"autoplay; fullscreen\"),i.setAttribute(\"scrolling\",\"auto\"),t.$iframe=i,\"iframe\"!==t.type||!1===t.preload)return i.setAttribute(\"src\",t.src),void this.fancybox.setContent(t,i);e.showLoading(t);const s=document.createElement(\"div\");s.style.visibility=\"hidden\",this.fancybox.setContent(t,s),s.appendChild(i),i.onerror=()=>{e.setError(t,\"{{IFRAME_ERROR}}\")},i.onload=()=>{e.hideLoading(t);let s=!1;\"yes\"!==i.dataset.ready&&(i.dataset.ready=\"yes\",s=!0),i.src.length&&(i.parentNode.style.visibility=\"\",!1!==t.autoSize&&this.autoSizeIframe(i),s&&e.revealContent(t))},i.setAttribute(\"src\",t.src)}setAspectRatio(t){let e=t.ratio;if(!e||!t.$content)return;t.$content.style.maxWidth=\"\",t.$content.style.maxHeight=\"\";let i=t.$content.offsetWidth,s=t.$content.offsetHeight,n=t.width,o=t.height;if(n&&o&&(i>n||s>o)){let t=Math.min(n/i,o/s);i*=t,s*=t}e{t.$el&&(t.$iframe&&!1!==t.autoSize&&this.autoSizeIframe(t.$iframe),t.ratio&&this.setAspectRatio(t))}))}setContent(t){if(t&&!t.isDom){switch(t.type){case\"html\":this.fancybox.setContent(t,t.src);break;case\"html5video\":this.fancybox.setContent(t,this.fancybox.option(\"Html.html5video.tpl\").replace(/\\{\\{src\\}\\}/gi,t.src).replace(\"{{format}}\",t.format||t.html5video&&t.html5video.format||\"\").replace(\"{{poster}}\",t.thumb||\"\"));break;case\"inline\":case\"clone\":this.loadInlineContent(t);break;case\"ajax\":this.loadAjaxContent(t);break;case\"iframe\":case\"pdf\":case\"video\":case\"map\":this.loadIframeContent(t)}t.ratio&&this.setAspectRatio(t)}}onSelectSlide(t,e,i){\"ready\"===t.state&&this.playVideo(i)}playVideo(t){if(\"html5video\"===t.type){const e=t.$el.querySelector(\"video\");if(e)try{e.play()}catch(t){}}if(\"video\"!==t.type||!t.$iframe||!t.$iframe.contentWindow)return;const e=()=>{if(\"done\"!==t.state||!t.$iframe||!t.$iframe.contentWindow)return;let i;if(t.$iframe.isReady)return t.video&&t.video.autoplay&&(i=\"youtube\"==t.vendor?{event:\"command\",func:\"playVideo\"}:{method:\"play\",value:\"true\"}),void(i&&t.$iframe.contentWindow.postMessage(JSON.stringify(i),\"*\"));\"youtube\"===t.vendor&&(i={event:\"listening\",id:t.$iframe.getAttribute(\"id\")},t.$iframe.contentWindow.postMessage(JSON.stringify(i),\"*\")),t.poller=setTimeout(e,250)};e()}onUnselectSlide(t,e,i){if(\"html5video\"===i.type){try{i.$el.querySelector(\"video\").pause()}catch(t){}return}let s=!1;\"vimeo\"==i.vendor?s={method:\"pause\",value:\"true\"}:\"youtube\"===i.vendor&&(s={event:\"command\",func:\"pauseVideo\"}),s&&i.$iframe&&i.$iframe.contentWindow&&i.$iframe.contentWindow.postMessage(JSON.stringify(s),\"*\"),clearTimeout(i.poller)}onRemoveSlide(t,e,i){i.xhr&&(i.xhr.abort(),i.xhr=null),i.$iframe&&(i.$iframe.onload=i.$iframe.onerror=null,i.$iframe.src=\"//about:blank\",i.$iframe=null);const s=i.$content;\"inline\"===i.type&&s&&(s.classList.remove(\"fancybox__content\"),\"none\"!==s.style.display&&(s.style.display=\"none\"),i.$closeButton&&(i.$closeButton.remove(),i.$closeButton=null));const n=s&&s.$placeHolder;n&&(n.parentNode.insertBefore(s,n),n.remove(),s.$placeHolder=null)}onMessage(t){try{let e=JSON.parse(t.data);if(\"https://player.vimeo.com\"===t.origin){if(\"ready\"===e.event)for(let e of document.getElementsByClassName(\"fancybox__iframe\"))e.contentWindow===t.source&&(e.isReady=1)}else\"https://www.youtube-nocookie.com\"===t.origin&&\"onReady\"===e.event&&(document.getElementById(e.id).isReady=1)}catch(t){}}attach(){this.fancybox.on(this.events),window.addEventListener(\"message\",this.onMessage,!1)}detach(){this.fancybox.off(this.events),window.removeEventListener(\"message\",this.onMessage,!1)}}$.defaults=w;class S{constructor(t){this.fancybox=t;for(const t of[\"onReady\",\"onClosing\",\"onDone\",\"onPageChange\",\"onCreateSlide\",\"onRemoveSlide\",\"onImageStatusChange\"])this[t]=this[t].bind(this);this.events={ready:this.onReady,closing:this.onClosing,done:this.onDone,\"Carousel.change\":this.onPageChange,\"Carousel.createSlide\":this.onCreateSlide,\"Carousel.removeSlide\":this.onRemoveSlide}}onReady(){this.fancybox.Carousel.slides.forEach((t=>{t.$el&&this.setContent(t)}))}onDone(t,e){this.handleCursor(e)}onClosing(t){clearTimeout(this.clickTimer),t.Carousel.slides.forEach((t=>{t.$image&&(t.state=\"destroy\"),t.Panzoom&&t.Panzoom.detachEvents()})),\"closing\"===this.fancybox.state&&this.canZoom(t.getSlide())&&this.zoomOut()}onCreateSlide(t,e,i){\"ready\"===this.fancybox.state&&this.setContent(i)}onRemoveSlide(t,e,i){i.$image&&(i.$el.classList.remove(t.option(\"Image.canZoomInClass\")),i.$image.remove(),i.$image=null),i.Panzoom&&(i.Panzoom.destroy(),i.Panzoom=null),i.$el&&i.$el.dataset&&delete i.$el.dataset.imageFit}setContent(t){if(t.isDom||t.html||t.type&&\"image\"!==t.type)return;if(t.$image)return;t.type=\"image\",t.state=\"loading\";const e=document.createElement(\"div\");e.style.visibility=\"hidden\";const i=document.createElement(\"img\");i.addEventListener(\"load\",(e=>{e.stopImmediatePropagation(),this.onImageStatusChange(t)})),i.addEventListener(\"error\",(()=>{this.onImageStatusChange(t)})),i.src=t.src,i.alt=\"\",i.draggable=!1,i.classList.add(\"fancybox__image\"),t.srcset&&i.setAttribute(\"srcset\",t.srcset),t.sizes&&i.setAttribute(\"sizes\",t.sizes),t.$image=i;const s=this.fancybox.option(\"Image.wrap\");if(s){const n=document.createElement(\"div\");n.classList.add(\"string\"==typeof s?s:\"fancybox__image-wrap\"),n.appendChild(i),e.appendChild(n),t.$wrap=n}else e.appendChild(i);t.$el.dataset.imageFit=this.fancybox.option(\"Image.fit\"),this.fancybox.setContent(t,e),i.complete||i.error?this.onImageStatusChange(t):this.fancybox.showLoading(t)}onImageStatusChange(t){const e=t.$image;e&&\"loading\"===t.state&&(e.complete&&e.naturalWidth&&e.naturalHeight?(this.fancybox.hideLoading(t),\"contain\"===this.fancybox.option(\"Image.fit\")&&this.initSlidePanzoom(t),t.$el.addEventListener(\"wheel\",(e=>this.onWheel(t,e)),{passive:!1}),t.$content.addEventListener(\"click\",(e=>this.onClick(t,e)),{passive:!1}),this.revealContent(t)):this.fancybox.setError(t,\"{{IMAGE_ERROR}}\"))}initSlidePanzoom(t){t.Panzoom||(t.Panzoom=new d(t.$el,e(!0,this.fancybox.option(\"Image.Panzoom\",{}),{viewport:t.$wrap,content:t.$image,wrapInner:!1,textSelection:!0,touch:this.fancybox.option(\"Image.touch\"),panOnlyZoomed:!0,click:!1,wheel:!1})),t.Panzoom.on(\"startAnimation\",(()=>{this.fancybox.trigger(\"Image.startAnimation\",t)})),t.Panzoom.on(\"endAnimation\",(()=>{\"zoomIn\"===t.state&&this.fancybox.done(t),this.handleCursor(t),this.fancybox.trigger(\"Image.endAnimation\",t)})),t.Panzoom.on(\"afterUpdate\",(()=>{this.handleCursor(t),this.fancybox.trigger(\"Image.afterUpdate\",t)})))}revealContent(t){null===this.fancybox.Carousel.prevPage&&t.index===this.fancybox.options.startIndex&&this.canZoom(t)?this.zoomIn():this.fancybox.revealContent(t)}getZoomInfo(t){const e=t.$thumb.getBoundingClientRect(),i=e.width,s=e.height,n=t.$content.getBoundingClientRect(),o=n.width,a=n.height,r=n.top-e.top,l=n.left-e.left;let h=this.fancybox.option(\"Image.zoomOpacity\");return\"auto\"===h&&(h=Math.abs(i/s-o/a)>.1),{top:r,left:l,scale:e.width/o,opacity:h}}canZoom(t){const e=this.fancybox,i=e.$container;if(window.visualViewport&&1!==window.visualViewport.scale)return!1;if(!e.option(\"Image.zoom\")||\"contain\"!==e.option(\"Image.fit\"))return!1;const s=t.$thumb;if(!s||\"loading\"===t.state)return!1;i.classList.add(\"fancybox__no-click\");const n=s.getBoundingClientRect();let o;if(this.fancybox.option(\"Image.ignoreCoveredThumbnail\")){const t=document.elementFromPoint(n.left+1,n.top+1)===s,e=document.elementFromPoint(n.right-1,n.bottom-1)===s;o=t&&e}else o=document.elementFromPoint(n.left+.5*n.width,n.top+.5*n.height)===s;return i.classList.remove(\"fancybox__no-click\"),o}zoomIn(){const t=this.fancybox,e=t.getSlide(),i=e.Panzoom,{top:s,left:n,scale:o,opacity:a}=this.getZoomInfo(e);e.state=\"zoomIn\",t.trigger(\"reveal\",e),i.panTo({x:-1*n,y:-1*s,scale:o,friction:0,ignoreBounds:!0}),e.$content.style.visibility=\"\",!0===a&&i.on(\"afterTransform\",(t=>{\"zoomIn\"!==e.state&&\"zoomOut\"!==e.state||(t.$content.style.opacity=Math.min(1,1-(1-t.content.scale)/(1-o)))})),i.panTo({x:0,y:0,scale:1,friction:this.fancybox.option(\"Image.zoomFriction\")})}zoomOut(){const t=this.fancybox,e=t.getSlide(),i=e.Panzoom;if(!i)return;e.state=\"zoomOut\",t.state=\"customClosing\",e.$caption&&(e.$caption.style.visibility=\"hidden\");let s=this.fancybox.option(\"Image.zoomFriction\");const n=t=>{const{top:n,left:o,scale:a,opacity:r}=this.getZoomInfo(e);t||r||(s*=.82),i.panTo({x:-1*o,y:-1*n,scale:a,friction:s,ignoreBounds:!0}),s*=.98};window.addEventListener(\"scroll\",n),i.on(\"endAnimation\",(()=>{window.removeEventListener(\"scroll\",n),t.destroy()})),n()}handleCursor(t){if(\"image\"!==t.type)return;const e=t.Panzoom,i=this.fancybox.option(\"Image.click\"),s=t.$el.classList;if(e&&\"toggleZoom\"===i){s[e&&1===e.content.scale&&e.option(\"maxScale\")-e.content.scale>.01?\"add\":\"remove\"](this.fancybox.option(\"Image.canZoomInClass\"))}else\"close\"===i&&s.add(this.fancybox.option(\"Image.canZoomOutClass\"))}onWheel(t,e){if(\"ready\"===this.fancybox.state&&!1!==this.fancybox.trigger(\"Image.wheel\",e))switch(this.fancybox.option(\"Image.wheel\")){case\"zoom\":t.Panzoom&&t.Panzoom.zoomWithWheel(e);break;case\"close\":this.fancybox.close();break;case\"slide\":this.fancybox[e.deltaY<0?\"prev\":\"next\"]()}}onClick(t,e){if(\"ready\"!==this.fancybox.state)return;const i=t.Panzoom;if(i&&(i.dragPosition.midPoint||0!==i.dragOffset.x||0!==i.dragOffset.y||1!==i.dragOffset.scale))return;if(this.fancybox.Carousel.Panzoom.lockAxis)return!1;const s=i=>{if(!1!==this.fancybox.trigger(\"Image.click\",e))switch(i){case\"toggleZoom\":e.stopPropagation(),t.Panzoom&&t.Panzoom.zoomWithClick(e);break;case\"close\":this.fancybox.close();break;case\"next\":e.stopPropagation(),this.fancybox.next()}};this.clickTimer&&(clearTimeout(this.clickTimer),this.clickTimer=null);const n=this.fancybox.option(\"Image.click\"),o=this.fancybox.option(\"Image.doubleClick\");o?1===e.detail?this.clickTimer=setTimeout((()=>{s(n)}),300):2===e.detail&&s(o):s(n)}onPageChange(t,e){const i=t.getSlide();e.slides.forEach((t=>{t.Panzoom&&\"done\"===t.state&&t.index!==i.index&&t.Panzoom.panTo({x:0,y:0,scale:1,friction:.8})}))}attach(){this.fancybox.on(this.events)}detach(){this.fancybox.off(this.events)}}S.defaults={canZoomInClass:\"can-zoom_in\",canZoomOutClass:\"can-zoom_out\",zoom:!0,zoomOpacity:\"auto\",zoomFriction:.82,ignoreCoveredThumbnail:!1,touch:!0,click:\"toggleZoom\",doubleClick:null,wheel:\"zoom\",fit:\"contain\",wrap:!1,Panzoom:{ratio:1}};const C=function(){const t=window.location.hash.substr(1),e=t.split(\"-\"),i=e.length>1&&/^\\+?\\d+$/.test(e[e.length-1])&&parseInt(e.pop(-1),10)||null;return{hash:t,slug:e.join(\"-\"),index:i}};class E{constructor(t){this.fancybox=t;for(const t of[\"onChange\",\"onClosing\"])this[t]=this[t].bind(this);this.events={initCarousel:this.onChange,\"Carousel.change\":this.onChange,closing:this.onClosing},this.hasCreatedHistory=!1,this.origHash=\"\",this.timer=null}onChange(){const t=this.fancybox,e=t.Carousel;this.timer&&clearTimeout(this.timer);const i=null===e.prevPage,s=t.getSlide(),n=s.$trigger&&s.$trigger.dataset,o=window.location.hash.substr(1);let a=!1;if(s.slug)a=s.slug;else{let t=n&&n.fancybox;t&&t.length&&\"true\"!==t&&(a=t+(e.slides.length>1?\"-\"+(s.index+1):\"\"))}i&&(this.origHash=o!==a?this.origHash:\"\"),a&&o!==a&&(this.timer=setTimeout((()=>{try{window.history[i?\"pushState\":\"replaceState\"]({},document.title,window.location.pathname+window.location.search+\"#\"+a),i&&(this.hasCreatedHistory=!0)}catch(t){}}),300))}onClosing(){if(this.timer&&clearTimeout(this.timer),!0!==this.hasSilentClose){if(!this.hasCreatedHistory)try{return void window.history.replaceState({},document.title,window.location.pathname+window.location.search+(this.origHash?\"#\"+this.origHash:\"\"))}catch(t){}window.history.back()}}attach(t){t.on(this.events)}detach(t){t.off(this.events)}static startFromUrl(){if(E.Fancybox.getInstance())return;const{hash:t,slug:e,index:i}=C();if(!e)return;let s=document.querySelector(`[data-slug=\"${t}\"]`);if(s&&s.dispatchEvent(new CustomEvent(\"click\",{bubbles:!0,cancelable:!0})),E.Fancybox.getInstance())return;const n=document.querySelectorAll(`[data-fancybox=\"${e}\"]`);n.length&&(null===i&&1===n.length?s=n[0]:i&&(s=n[i-1]),s&&s.dispatchEvent(new CustomEvent(\"click\",{bubbles:!0,cancelable:!0})))}static onHashChange(){const{slug:t,index:e}=C(),i=E.Fancybox.getInstance();if(i){if(t){const s=i.Carousel;for(let e of s.slides)if(e.slug&&e.slug===t)return s.slideTo(e.index);const n=i.getSlide(),o=n.$trigger&&n.$trigger.dataset;if(o&&o.fancybox===t)return s.slideTo(e-1)}i.plugins.Hash.hasSilentClose=!0,i.close()}E.startFromUrl()}static onReady(){window.addEventListener(\"hashchange\",E.onHashChange,!1),E.startFromUrl()}static create(){b&&window.requestAnimationFrame((()=>{E.onReady()}))}static destroy(){window.removeEventListener(\"hashchange\",E.onHashChange,!1)}}const P={pageXOffset:0,pageYOffset:0,element:()=>document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement,activate(t){P.pageXOffset=window.pageXOffset,P.pageYOffset=window.pageYOffset,t.requestFullscreen?t.requestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullscreen?t.webkitRequestFullscreen():t.msRequestFullscreen&&t.msRequestFullscreen()},deactivate(){document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen()}};class T{constructor(t){this.fancybox=t,this.active=!1,this.handleVisibilityChange=this.handleVisibilityChange.bind(this)}isActive(){return this.active}setTimer(){if(!this.active||this.timer)return;const t=this.fancybox.option(\"slideshow.delay\",3e3);this.timer=setTimeout((()=>{this.timer=null,this.fancybox.option(\"infinite\")||this.fancybox.getSlide().index!==this.fancybox.Carousel.slides.length-1?this.fancybox.next():this.fancybox.jumpTo(0,{friction:0})}),t);let e=this.$progress;e||(e=document.createElement(\"div\"),e.classList.add(\"fancybox__progress\"),this.fancybox.$carousel.parentNode.insertBefore(e,this.fancybox.$carousel),this.$progress=e,e.offsetHeight),e.style.transitionDuration=`${t}ms`,e.style.transform=\"scaleX(1)\"}clearTimer(){clearTimeout(this.timer),this.timer=null,this.$progress&&(this.$progress.style.transitionDuration=\"\",this.$progress.style.transform=\"\",this.$progress.offsetHeight)}activate(){this.active||(this.active=!0,this.fancybox.$container.classList.add(\"has-slideshow\"),\"done\"===this.fancybox.getSlide().state&&this.setTimer(),document.addEventListener(\"visibilitychange\",this.handleVisibilityChange,!1))}handleVisibilityChange(){this.deactivate()}deactivate(){this.active=!1,this.clearTimer(),this.fancybox.$container.classList.remove(\"has-slideshow\"),document.removeEventListener(\"visibilitychange\",this.handleVisibilityChange,!1)}toggle(){this.active?this.deactivate():this.fancybox.Carousel.slides.length>1&&this.activate()}}const L={items:{counter:{type:\"div\",class:\"fancybox__counter\",html:' / ',tabindex:-1,position:\"left\"},prev:{type:\"button\",class:\"fancybox__button--prev\",label:\"PREV\",html:'',click:function(t){t.preventDefault(),this.fancybox.prev()}},next:{type:\"button\",class:\"fancybox__button--next\",label:\"NEXT\",html:'',click:function(t){t.preventDefault(),this.fancybox.next()}},fullscreen:{type:\"button\",class:\"fancybox__button--fullscreen\",label:\"TOGGLE_FULLSCREEN\",html:'\\n \\n \\n ',click:function(t){t.preventDefault(),P.element()?P.deactivate():P.activate(this.fancybox.$container)}},slideshow:{type:\"button\",class:\"fancybox__button--slideshow\",label:\"TOGGLE_SLIDESHOW\",html:'\\n \\n \\n ',click:function(t){t.preventDefault(),this.Slideshow.toggle()}},zoom:{type:\"button\",class:\"fancybox__button--zoom\",label:\"TOGGLE_ZOOM\",html:'',click:function(t){t.preventDefault();const e=this.fancybox.getSlide().Panzoom;e&&e.toggleZoom()}},download:{type:\"link\",label:\"DOWNLOAD\",class:\"fancybox__button--download\",html:'',click:function(t){t.stopPropagation()}},thumbs:{type:\"button\",label:\"TOGGLE_THUMBS\",class:\"fancybox__button--thumbs\",html:'',click:function(t){t.stopPropagation();const e=this.fancybox.plugins.Thumbs;e&&e.toggle()}},close:{type:\"button\",label:\"CLOSE\",class:\"fancybox__button--close\",html:'',tabindex:1,click:function(t){t.stopPropagation(),t.preventDefault(),this.fancybox.close()}}},display:[\"counter\",\"zoom\",\"slideshow\",\"fullscreen\",\"thumbs\",\"close\"],autoEnable:!0};class A{constructor(t){this.fancybox=t,this.$container=null,this.state=\"init\";for(const t of[\"onInit\",\"onPrepare\",\"onDone\",\"onKeydown\",\"onClosing\",\"onChange\",\"onSettle\",\"onRefresh\"])this[t]=this[t].bind(this);this.events={init:this.onInit,prepare:this.onPrepare,done:this.onDone,keydown:this.onKeydown,closing:this.onClosing,\"Carousel.change\":this.onChange,\"Carousel.settle\":this.onSettle,\"Carousel.Panzoom.touchStart\":()=>this.onRefresh(),\"Image.startAnimation\":(t,e)=>this.onRefresh(e),\"Image.afterUpdate\":(t,e)=>this.onRefresh(e)}}onInit(){if(this.fancybox.option(\"Toolbar.autoEnable\")){let t=!1;for(const e of this.fancybox.items)if(\"image\"===e.type){t=!0;break}if(!t)return void(this.state=\"disabled\")}for(const e of this.fancybox.option(\"Toolbar.display\")){if(\"close\"===(t(e)?e.id:e)){this.fancybox.options.closeButton=!1;break}}}onPrepare(){if(\"init\"===this.state&&(this.build(),this.update(),this.Slideshow=new T(this.fancybox),!this.fancybox.Carousel.prevPage&&(this.fancybox.option(\"slideshow.autoStart\")&&this.Slideshow.activate(),this.fancybox.option(\"fullscreen.autoStart\")&&!P.element())))try{P.activate(this.fancybox.$container)}catch(t){}}onFsChange(){window.scrollTo(P.pageXOffset,P.pageYOffset)}onSettle(){this.Slideshow&&this.Slideshow.isActive()&&(this.fancybox.getSlide().index!==this.fancybox.Carousel.slides.length-1||this.fancybox.option(\"infinite\")?\"done\"===this.fancybox.getSlide().state&&this.Slideshow.setTimer():this.Slideshow.deactivate())}onChange(){this.update(),this.Slideshow&&this.Slideshow.isActive()&&this.Slideshow.clearTimer()}onDone(t,e){e.index===t.getSlide().index&&(this.update(),this.Slideshow&&this.Slideshow.isActive()&&(this.fancybox.option(\"infinite\")||e.index!==this.fancybox.Carousel.slides.length-1?this.Slideshow.setTimer():this.Slideshow.deactivate()))}onRefresh(t){t&&t.index!==this.fancybox.getSlide().index||(this.update(),!this.Slideshow||!this.Slideshow.isActive()||t&&\"done\"!==t.state||this.Slideshow.deactivate())}onKeydown(t,e,i){\" \"===e&&(this.Slideshow.toggle(),i.preventDefault())}onClosing(){this.Slideshow&&this.Slideshow.deactivate(),document.removeEventListener(\"fullscreenchange\",this.onFsChange)}createElement(t){let e;return\"div\"===t.type?e=document.createElement(\"div\"):(e=document.createElement(\"link\"===t.type?\"a\":\"button\"),e.classList.add(\"carousel__button\")),e.innerHTML=t.html,e.setAttribute(\"tabindex\",t.tabindex||0),t.class&&e.classList.add(...t.class.split(\" \")),t.label&&e.setAttribute(\"title\",this.fancybox.localize(`{{${t.label}}}`)),t.click&&e.addEventListener(\"click\",t.click.bind(this)),\"prev\"===t.id&&e.setAttribute(\"data-fancybox-prev\",\"\"),\"next\"===t.id&&e.setAttribute(\"data-fancybox-next\",\"\"),e}build(){this.cleanup();const i=this.fancybox.option(\"Toolbar.items\"),s=[{position:\"left\",items:[]},{position:\"center\",items:[]},{position:\"right\",items:[]}],n=this.fancybox.plugins.Thumbs;for(const o of this.fancybox.option(\"Toolbar.display\")){let a,r;if(t(o)?(a=o.id,r=e({},i[a],o)):(a=o,r=i[a]),[\"counter\",\"next\",\"prev\",\"slideshow\"].includes(a)&&this.fancybox.items.length<2)continue;if(\"fullscreen\"===a){if(!document.fullscreenEnabled||window.fullScreen)continue;document.addEventListener(\"fullscreenchange\",this.onFsChange)}if(\"thumbs\"===a&&(!n||\"disabled\"===n.state))continue;if(!r)continue;let l=r.position||\"right\",h=s.find((t=>t.position===l));h&&h.items.push(r)}const o=document.createElement(\"div\");o.classList.add(\"fancybox__toolbar\");for(const t of s)if(t.items.length){const e=document.createElement(\"div\");e.classList.add(\"fancybox__toolbar__items\"),e.classList.add(`fancybox__toolbar__items--${t.position}`);for(const i of t.items)e.appendChild(this.createElement(i));o.appendChild(e)}this.fancybox.$carousel.parentNode.insertBefore(o,this.fancybox.$carousel),this.$container=o}update(){const t=this.fancybox.getSlide(),e=t.index,i=this.fancybox.items.length,s=t.downloadSrc||(\"image\"!==t.type||t.error?null:t.src);for(const t of this.fancybox.$container.querySelectorAll(\"a.fancybox__button--download\"))s?(t.removeAttribute(\"disabled\"),t.setAttribute(\"href\",s),t.setAttribute(\"download\",s),t.setAttribute(\"target\",\"_blank\")):(t.setAttribute(\"disabled\",\"\"),t.removeAttribute(\"href\"),t.removeAttribute(\"download\"));const n=t.Panzoom,o=n&&n.option(\"maxScale\")>n.option(\"baseScale\");for(const t of this.fancybox.$container.querySelectorAll(\".fancybox__button--zoom\"))o?t.removeAttribute(\"disabled\"):t.setAttribute(\"disabled\",\"\");for(const e of this.fancybox.$container.querySelectorAll(\"[data-fancybox-index]\"))e.innerHTML=t.index+1;for(const t of this.fancybox.$container.querySelectorAll(\"[data-fancybox-count]\"))t.innerHTML=i;if(!this.fancybox.option(\"infinite\")){for(const t of this.fancybox.$container.querySelectorAll(\"[data-fancybox-prev]\"))0===e?t.setAttribute(\"disabled\",\"\"):t.removeAttribute(\"disabled\");for(const t of this.fancybox.$container.querySelectorAll(\"[data-fancybox-next]\"))e===i-1?t.setAttribute(\"disabled\",\"\"):t.removeAttribute(\"disabled\")}}cleanup(){this.Slideshow&&this.Slideshow.isActive()&&this.Slideshow.clearTimer(),this.$container&&this.$container.remove(),this.$container=null}attach(){this.fancybox.on(this.events)}detach(){this.fancybox.off(this.events),this.cleanup()}}A.defaults=L;const k={ScrollLock:class{constructor(t){this.fancybox=t,this.viewport=null,this.pendingUpdate=null;for(const t of[\"onReady\",\"onResize\",\"onTouchstart\",\"onTouchmove\"])this[t]=this[t].bind(this)}onReady(){const t=window.visualViewport;t&&(this.viewport=t,this.startY=0,t.addEventListener(\"resize\",this.onResize),this.updateViewport()),window.addEventListener(\"touchstart\",this.onTouchstart,{passive:!1}),window.addEventListener(\"touchmove\",this.onTouchmove,{passive:!1})}onResize(){this.updateViewport()}updateViewport(){const t=this.fancybox,e=this.viewport,i=e.scale||1,s=t.$container;if(!s)return;let n=\"\",o=\"\",a=\"\";i-1>.1&&(n=e.width*i+\"px\",o=e.height*i+\"px\",a=`translate3d(${e.offsetLeft}px, ${e.offsetTop}px, 0) scale(${1/i})`),s.style.width=n,s.style.height=o,s.style.transform=a}onTouchstart(t){this.startY=t.touches?t.touches[0].screenY:t.screenY}onTouchmove(t){const e=this.startY,i=window.innerWidth/window.document.documentElement.clientWidth;if(t.touches.length>1||1!==i)return;const s=t.target,n=l(s);if(!n)return void t.preventDefault();const o=window.getComputedStyle(n),a=parseInt(o.getPropertyValue(\"height\"),10),r=t.touches?t.touches[0].screenY:t.screenY,h=e<=r&&0===n.scrollTop,c=e>=r&&n.scrollHeight-n.scrollTop===a;(h||c)&&t.preventDefault()}cleanup(){this.pendingUpdate&&(cancelAnimationFrame(this.pendingUpdate),this.pendingUpdate=null);const t=this.viewport;t&&(t.removeEventListener(\"resize\",this.onResize),this.viewport=null),window.removeEventListener(\"touchstart\",this.onTouchstart,!1),window.removeEventListener(\"touchmove\",this.onTouchmove,!1)}attach(){this.fancybox.on(\"initLayout\",this.onReady)}detach(){this.fancybox.off(\"initLayout\",this.onReady),this.cleanup()}},Thumbs:v,Html:$,Toolbar:A,Image:S,Hash:E};const z={startIndex:0,preload:1,infinite:!0,showClass:\"fancybox-zoomInUp\",hideClass:\"fancybox-fadeOut\",animated:!0,hideScrollbar:!0,parentEl:null,mainClass:null,autoFocus:!0,trapFocus:!0,placeFocusBack:!0,click:\"close\",closeButton:\"inside\",dragToClose:!0,keyboard:{Escape:\"close\",Delete:\"close\",Backspace:\"close\",PageUp:\"next\",PageDown:\"prev\",ArrowUp:\"next\",ArrowDown:\"prev\",ArrowRight:\"next\",ArrowLeft:\"prev\"},template:{closeButton:'',spinner:'',main:null},l10n:{CLOSE:\"Close\",NEXT:\"Next\",PREV:\"Previous\",MODAL:\"You can close this modal content with the ESC key\",ERROR:\"Something Went Wrong, Please Try Again Later\",IMAGE_ERROR:\"Image Not Found\",ELEMENT_NOT_FOUND:\"HTML Element Not Found\",AJAX_NOT_FOUND:\"Error Loading AJAX : Not Found\",AJAX_FORBIDDEN:\"Error Loading AJAX : Forbidden\",IFRAME_ERROR:\"Error Loading Page\",TOGGLE_ZOOM:\"Toggle zoom level\",TOGGLE_THUMBS:\"Toggle thumbnails\",TOGGLE_SLIDESHOW:\"Toggle slideshow\",TOGGLE_FULLSCREEN:\"Toggle full-screen mode\",DOWNLOAD:\"Download\"}};let _=0;class O extends h{constructor(t,i={}){super(e(!0,{},z,i)),this.bindHandlers(),this.state=\"init\",this.setItems(t),this.attachPlugins(O.Plugins),this.trigger(\"init\"),!0===this.option(\"hideScrollbar\")&&this.hideScrollbar(),this.initLayout(),this.initCarousel(),this.attachEvents(),this.trigger(\"prepare\"),this.state=\"ready\",this.trigger(\"ready\"),this.$container.setAttribute(\"aria-hidden\",\"false\"),this.option(\"trapFocus\")&&this.focus()}bindHandlers(){for(const t of[\"onMousedown\",\"onKeydown\",\"onClick\",\"onCreateSlide\",\"onTouchMove\",\"onTouchEnd\",\"onTransform\"])this[t]=this[t].bind(this)}attachEvents(){document.addEventListener(\"mousedown\",this.onMousedown),document.addEventListener(\"keydown\",this.onKeydown),this.$container.addEventListener(\"click\",this.onClick)}detachEvents(){document.removeEventListener(\"mousedown\",this.onMousedown),document.removeEventListener(\"keydown\",this.onKeydown),this.$container.removeEventListener(\"click\",this.onClick)}initLayout(){this.$root=this.option(\"parentEl\")||document.body;let t=this.option(\"template.main\");t&&(this.$root.insertAdjacentHTML(\"beforeend\",this.localize(t)),this.$container=this.$root.querySelector(\".fancybox__container\")),this.$container||(this.$container=document.createElement(\"div\"),this.$root.appendChild(this.$container)),this.$container.onscroll=()=>(this.$container.scrollLeft=0,!1),Object.entries({class:\"fancybox__container\",role:\"dialog\",\"aria-modal\":\"true\",\"aria-hidden\":\"true\",\"aria-label\":this.localize(\"{{MODAL}}\")}).forEach((t=>this.$container.setAttribute(...t))),this.option(\"animated\")&&this.$container.classList.add(\"is-animated\"),this.$backdrop=this.$container.querySelector(\".fancybox__backdrop\"),this.$backdrop||(this.$backdrop=document.createElement(\"div\"),this.$backdrop.classList.add(\"fancybox__backdrop\"),this.$container.appendChild(this.$backdrop)),this.$carousel=this.$container.querySelector(\".fancybox__carousel\"),this.$carousel||(this.$carousel=document.createElement(\"div\"),this.$carousel.classList.add(\"fancybox__carousel\"),this.$container.appendChild(this.$carousel)),this.$container.Fancybox=this,this.id=this.$container.getAttribute(\"id\"),this.id||(this.id=this.options.id||++_,this.$container.setAttribute(\"id\",\"fancybox-\"+this.id));const e=this.options.mainClass;return e&&this.$container.classList.add(...e.split(\" \")),document.documentElement.classList.add(\"with-fancybox\"),this.trigger(\"initLayout\"),this}setItems(t){const e=[];for(const i of t){const t=i.$trigger;if(t){const e=t.dataset||{};i.src=e.src||t.getAttribute(\"href\")||i.src,i.type=e.type||i.type,!i.src&&t instanceof HTMLImageElement&&(i.src=t.currentSrc||i.$trigger.src)}let s=i.$thumb;if(!s){let t=i.$trigger&&i.$trigger.origTarget;t&&(s=t instanceof HTMLImageElement?t:t.querySelector(\"img\")),!s&&i.$trigger&&(s=i.$trigger instanceof HTMLImageElement?i.$trigger:i.$trigger.querySelector(\"img\"))}i.$thumb=s||null;let n=i.thumb;!n&&i.$thumb&&(n=s.currentSrc||s.src),n||\"image\"!==i.type||(n=i.src),i.thumb=n||null,i.caption=i.caption||\"\",e.push(i)}this.items=e}initCarousel(){return this.Carousel=new y(this.$carousel,e(!0,{},{classNames:{viewport:\"fancybox__viewport\",track:\"fancybox__track\",slide:\"fancybox__slide\"},textSelection:!0,preload:this.option(\"preload\"),friction:.88,slides:this.items,initialPage:this.options.startIndex,slidesPerPage:1,infiniteX:this.option(\"infinite\"),infiniteY:!0,l10n:this.option(\"l10n\"),Dots:!1,Navigation:{classNames:{main:\"fancybox__nav\",button:\"carousel__button\",next:\"is-next\",prev:\"is-prev\"}},Panzoom:{textSelection:!0,panOnlyZoomed:()=>this.Carousel&&this.Carousel.pages&&this.Carousel.pages.length<2&&!this.options.dragToClose,lockAxis:()=>{if(this.Carousel){let t=\"x\";return this.options.dragToClose&&(t+=\"y\"),t}}},on:{\"*\":(t,...e)=>this.trigger(`Carousel.${t}`,...e),init:t=>this.Carousel=t,createSlide:this.onCreateSlide}},this.option(\"Carousel\"))),this.option(\"dragToClose\")&&this.Carousel.Panzoom.on({touchMove:this.onTouchMove,afterTransform:this.onTransform,touchEnd:this.onTouchEnd}),this.trigger(\"initCarousel\"),this}onCreateSlide(t,e){let i=e.caption||\"\";if(\"function\"==typeof this.options.caption&&(i=this.options.caption.call(this,this,this.Carousel,e)),\"string\"==typeof i&&i.length){const t=document.createElement(\"div\"),s=`fancybox__caption_${this.id}_${e.index}`;t.className=\"fancybox__caption\",t.innerHTML=i,t.setAttribute(\"id\",s),e.$caption=e.$el.appendChild(t),e.$el.classList.add(\"has-caption\"),e.$el.setAttribute(\"aria-labelledby\",s)}}onClick(t){if(t.defaultPrevented)return;if(t.target.closest(\".fancybox__content\"))return;if(window.getSelection().toString().length)return;if(!1===this.trigger(\"click\",t))return;switch(this.option(\"click\")){case\"close\":this.close();break;case\"next\":this.next()}}onTouchMove(){const t=this.getSlide().Panzoom;return!t||1===t.content.scale}onTouchEnd(t){const e=t.dragOffset.y;Math.abs(e)>=150||Math.abs(e)>=35&&t.dragOffset.time<350?(this.option(\"hideClass\")&&(this.getSlide().hideClass=\"fancybox-throwOut\"+(t.content.y<0?\"Up\":\"Down\")),this.close()):\"y\"===t.lockAxis&&t.panTo({y:0})}onTransform(t){if(this.$backdrop){const e=Math.abs(t.content.y),i=e<1?\"\":Math.max(.33,Math.min(1,1-e/t.content.fitHeight*1.5));this.$container.style.setProperty(\"--fancybox-ts\",i?\"0s\":\"\"),this.$container.style.setProperty(\"--fancybox-opacity\",i)}}onMousedown(){document.body.classList.add(\"is-using-mouse\")}onKeydown(t){if(O.getInstance().id!==this.id)return;document.body.classList.remove(\"is-using-mouse\");const e=t.key;if(\"Tab\"===e&&this.option(\"trapFocus\"))return void this.focus(t);const i=this.option(\"keyboard\");if(!i||t.ctrlKey||t.altKey||t.shiftKey)return;const s=document.activeElement&&document.activeElement.classList,n=s&&s.contains(\"carousel__button\");if(\"Escape\"!==e&&!n){if(t.target.isContentEditable||-1!==[\"BUTTON\",\"TEXTAREA\",\"OPTION\",\"INPUT\",\"SELECT\",\"VIDEO\"].indexOf(t.target.nodeName))return}if(!1===this.trigger(\"keydown\",e,t))return;const o=i[e];\"function\"==typeof this[o]&&this[o]()}getSlide(){const t=this.Carousel;if(!t)return null;const e=null===t.page?t.option(\"initialPage\"):t.page,i=t.pages||[];return i.length&&i[e]?i[e].slides[0]:null}focus(t){void 0===O.preventScrollSupported&&(O.preventScrollSupported=function(){let t=!1;return document.createElement(\"div\").focus({get preventScroll(){return t=!0,!1}}),t}());const e=t=>{t.setActive?t.setActive():O.preventScrollSupported?t.focus({preventScroll:!0}):t.focus()};if([\"init\",\"closing\",\"customClosing\",\"destroy\"].indexOf(this.state)>-1)return;t&&t.preventDefault();const i=this.getSlide().$el;if(!i)return;i.tabIndex=0;const s=[].slice.call(this.$container.querySelectorAll([\"a[href]\",\"area[href]\",'input:not([disabled]):not([type=\"hidden\"]):not([aria-hidden])',\"select:not([disabled]):not([aria-hidden])\",\"textarea:not([disabled]):not([aria-hidden])\",\"button:not([disabled]):not([aria-hidden])\",\"iframe\",\"object\",\"embed\",\"video\",\"audio\",\"[contenteditable]\",'[tabindex]:not([tabindex^=\"-\"]):not([disabled]):not([aria-hidden])']));let n=[];for(let t of s){if(t.classList&&t.classList.contains(\"fancybox__slide\"))continue;const e=t.closest(\".fancybox__slide\");e?e===i&&n[t.hasAttribute(\"autofocus\")?\"unshift\":\"push\"](t):n.push(t)}if(!n.length)return;this.Carousel.pages.length>1&&n.push(i),n.sort((function(t,e){return t.tabIndex>e.tabIndex?-1:t.tabIndex0&&(i=document.createElement(\"style\"),i.id=e,i.type=\"text/css\",i.innerHTML=`.compensate-for-scrollbar {padding-right: ${t}px;}`,document.getElementsByTagName(\"head\")[0].appendChild(i),document.body.classList.add(\"compensate-for-scrollbar\"))}revealScrollbar(){document.body.classList.remove(\"compensate-for-scrollbar\");const t=document.getElementById(\"fancybox-style-noscroll\");t&&t.remove()}clearContent(t){this.Carousel.trigger(\"removeSlide\",t),t.$content&&(t.$content.remove(),t.$content=null),t._className&&t.$el.classList.remove(t._className)}setContent(t,e,i={}){let s;const n=t.$el;if(e instanceof HTMLElement?[\"img\",\"iframe\",\"video\",\"audio\"].indexOf(e.nodeName.toLowerCase())>-1?(s=document.createElement(\"div\"),s.appendChild(e)):s=e:(s=document.createElement(\"div\"),s.innerHTML=e),!(s instanceof Element))throw new Error(\"Element expected\");return t._className=`has-${i.suffix||t.type||\"unknown\"}`,n.classList.add(t._className),s.classList.add(\"fancybox__content\"),\"none\"!==s.style.display&&\"none\"!==window.getComputedStyle(s).getPropertyValue(\"display\")||(s.style.display=\"flex\"),t.id&&s.setAttribute(\"id\",t.id),t.$content=s,n.prepend(s),this.manageCloseButton(t),\"loading\"!==t.state&&this.revealContent(t),s}manageCloseButton(t){const e=void 0===t.closeButton?this.option(\"closeButton\"):t.closeButton;if(!e||\"top\"===e&&this.$closeButton)return;const i=document.createElement(\"button\");i.classList.add(\"carousel__button\",\"is-close\"),i.setAttribute(\"title\",this.options.l10n.CLOSE),i.innerHTML=this.option(\"template.closeButton\"),i.addEventListener(\"click\",(t=>this.close(t))),\"inside\"===e?(t.$closeButton&&t.$closeButton.remove(),t.$closeButton=t.$content.appendChild(i)):this.$closeButton=this.$container.insertBefore(i,this.$container.firstChild)}revealContent(t){this.trigger(\"reveal\",t),t.$content.style.visibility=\"\";let e=!1;t.error||\"loading\"===t.state||null!==this.Carousel.prevPage||t.index!==this.options.startIndex||(e=void 0===t.showClass?this.option(\"showClass\"):t.showClass),e?(t.state=\"animating\",this.animateCSS(t.$content,e,(()=>{this.done(t)}))):this.done(t)}animateCSS(t,e,i){if(t&&t.dispatchEvent(new CustomEvent(\"animationend\",{bubbles:!0,cancelable:!0})),!t||!e)return void(\"function\"==typeof i&&i());const s=function(n){n.currentTarget===this&&(t.removeEventListener(\"animationend\",s),i&&i(),t.classList.remove(e))};t.addEventListener(\"animationend\",s),t.classList.add(e)}done(t){t.state=\"done\",this.trigger(\"done\",t);const e=this.getSlide();e&&t.index===e.index&&this.option(\"autoFocus\")&&this.focus()}setError(t,e){t.error=e,this.hideLoading(t),this.clearContent(t);const i=document.createElement(\"div\");i.classList.add(\"fancybox-error\"),i.innerHTML=this.localize(e||\"

{{ERROR}}

\"),this.setContent(t,i,{suffix:\"error\"})}showLoading(t){t.state=\"loading\",t.$el.classList.add(\"is-loading\");let e=t.$el.querySelector(\".fancybox__spinner\");e||(e=document.createElement(\"div\"),e.classList.add(\"fancybox__spinner\"),e.innerHTML=this.option(\"template.spinner\"),e.addEventListener(\"click\",(()=>{this.Carousel.Panzoom.velocity||this.close()})),t.$el.prepend(e))}hideLoading(t){const e=t.$el&&t.$el.querySelector(\".fancybox__spinner\");e&&(e.remove(),t.$el.classList.remove(\"is-loading\")),\"loading\"===t.state&&(this.trigger(\"load\",t),t.state=\"ready\")}next(){const t=this.Carousel;t&&t.pages.length>1&&t.slideNext()}prev(){const t=this.Carousel;t&&t.pages.length>1&&t.slidePrev()}jumpTo(...t){this.Carousel&&this.Carousel.slideTo(...t)}close(t){if(t&&t.preventDefault(),[\"closing\",\"customClosing\",\"destroy\"].indexOf(this.state)>-1)return;if(!1===this.trigger(\"shouldClose\",t))return;if(this.state=\"closing\",this.Carousel.Panzoom.destroy(),this.detachEvents(),this.trigger(\"closing\",t),\"destroy\"===this.state)return;this.$container.setAttribute(\"aria-hidden\",\"true\"),this.$container.classList.add(\"is-closing\");const e=this.getSlide();if(this.Carousel.slides.forEach((t=>{t.$content&&t.index!==e.index&&this.Carousel.trigger(\"removeSlide\",t)})),\"closing\"===this.state){const t=void 0===e.hideClass?this.option(\"hideClass\"):e.hideClass;this.animateCSS(e.$content,t,(()=>{this.destroy()}),!0)}}destroy(){this.state=\"destroy\",this.trigger(\"destroy\");const t=this.option(\"placeFocusBack\")?this.getSlide().$trigger:null;if(this.Carousel.destroy(),this.detachPlugins(),this.Carousel=null,this.options={},this.events={},this.$container.remove(),this.$container=this.$backdrop=this.$carousel=null,t)if(O.preventScrollSupported)t.focus({preventScroll:!0});else{const e=document.body.scrollTop;t.focus(),document.body.scrollTop=e}const e=O.getInstance();e?e.focus():(document.documentElement.classList.remove(\"with-fancybox\"),document.body.classList.remove(\"is-using-mouse\"),this.revealScrollbar())}static show(t,e={}){return new O(t,e)}static fromEvent(t,e={}){if(t.defaultPrevented)return;if(t.button&&0!==t.button)return;if(t.ctrlKey||t.metaKey||t.shiftKey)return;let i,s,n,o=t.target;if((o.matches(\"[data-fancybox-trigger]\")||(o=o.closest(\"[data-fancybox-trigger]\")))&&(i=o&&o.dataset&&o.dataset.fancyboxTrigger),i){const t=document.querySelectorAll(`[data-fancybox=\"${i}\"]`),e=parseInt(o.dataset.fancyboxIndex,10)||0;o=t.length?t[e]:o}o||(o=t.target),Array.from(O.openers.keys()).reverse().some((e=>{if(n=o,n.matches(e)||(n=n.closest(e)))return t.preventDefault(),s=e,!0}));let a=!1;if(s){e.event=t,e.target=n,n.origTarget=t.target,a=O.fromOpener(s,e);const i=O.getInstance();i&&\"ready\"===i.state&&t.detail&&document.body.classList.add(\"is-using-mouse\")}return a}static fromOpener(t,i={}){let s=[],n=i.startIndex||0,o=i.target||null;const a=void 0===(i=e({},i,O.openers.get(t))).groupAttr?\"data-fancybox\":i.groupAttr,r=a&&o&&o.getAttribute(`${a}`),l=void 0!==i.groupAll&&i.groupAll;if(l||r?(s=[].slice.call(document.querySelectorAll(t)),l||(s=s.filter((t=>t.getAttribute(`${a}`)===r)))):s=[o],!s.length)return!1;const h=O.getInstance();return!(h&&s.indexOf(h.options.$trigger)>-1)&&(n=o?s.indexOf(o):n,s=s.map((function(t){const e=[\"false\",\"0\",\"no\",\"null\",\"undefined\"],i=[\"true\",\"1\",\"yes\"],s=Object.assign({},t.dataset);for(let[t,n]of Object.entries(s))if(\"string\"==typeof n||n instanceof String)if(e.indexOf(n)>-1)s[t]=!1;else if(i.indexOf(s[t])>-1)s[t]=!0;else try{s[t]=JSON.parse(n)}catch(e){s[t]=n}return delete s.fancybox,delete s.type,t instanceof Element&&(s.$trigger=t),s})),new O(s,e({},i,{startIndex:n,$trigger:o})))}static bind(t,e={}){if(b){if(!O.openers.size){document.body.addEventListener(\"click\",O.fromEvent,!1);for(const[t,e]of Object.entries(O.Plugins||{}))e.Fancybox=this,\"function\"==typeof e.create&&e.create()}O.openers.set(t,e)}}static unbind(t){O.openers.delete(t),O.openers.size||O.destroy()}static destroy(){let t;for(;t=O.getInstance();)t.destroy();O.openers=new Map,document.body.removeEventListener(\"click\",O.fromEvent,!1)}static getInstance(t){let e=[];e=t?[document.getElementById(`fancybox-${t}`)]:Array.from(document.querySelectorAll(\".fancybox__container\")).reverse();for(const t of e){const e=t&&t.Fancybox;if(e&&\"closing\"!==e.state&&\"customClosing\"!==e.state)return e}return null}static close(t=!0){let e=null;for(;e=O.getInstance();)if(e.close(),!t)return}}O.version=\"4.0.0-beta.2\",O.defaults=z,O.openers=new Map,O.Plugins=k,O.bind(\"[data-fancybox]\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGZhbmN5YXBwcy91aS9kaXN0L2ZhbmN5Ym94LmVzbS5qcz9mOWQ4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQSxrSUFBa0ksU0FBUyxzQ0FBc0MsV0FBVyx3RUFBd0UsOEJBQThCLFlBQVksSUFBSSxLQUFLLGFBQWEsdUNBQXVDLGFBQWEsZ0NBQWdDLCtCQUErQix3Q0FBd0MsYUFBYSxTQUFTLGlJQUFpSSxlQUFlLDRGQUE0RixXQUFXLCtDQUErQyxTQUFTLFdBQVcsNENBQTRDLHlCQUF5QixhQUFhLHdEQUF3RCxhQUFhLG9CQUFvQixRQUFRLHFDQUFxQyw2Q0FBNkMsZ0ZBQWdGLGtCQUFrQiw2RUFBNkUsUUFBUSxlQUFlLDJKQUEySixnQkFBZ0Isd0VBQXdFLGdCQUFnQixVQUFVLGdFQUFnRSxHQUFHLFFBQVEsZUFBZSwrQkFBK0IsZUFBZSxFQUFFLEdBQUcsRUFBRSwwSUFBMEksaUNBQWlDLGlCQUFpQix5Q0FBeUMseUJBQXlCLHFFQUFxRSxxSEFBcUgsNERBQTRELHlRQUF5USxpQkFBaUIsMENBQTBDLDBCQUEwQix5REFBeUQsMkNBQTJDLHNEQUFzRCxnQkFBZ0Isb0VBQW9FLG1CQUFtQix1U0FBdVMsMkRBQTJELE9BQU8sZ1BBQWdQLG9CQUFvQiw2Q0FBNkMsME9BQTBPLFlBQVksd0JBQXdCLFFBQVEsZ0JBQWdCLEVBQUUsb0JBQW9CLG1DQUFtQyw2RUFBNkUsZ0JBQWdCLFlBQVksWUFBWSw2REFBNkQsZUFBZSxNQUFNLFFBQVEsOERBQThELGlCQUFpQiw0QkFBNEIsRUFBRSxlQUFlLEVBQUUsY0FBYyxTQUFTLHNCQUFzQixrQ0FBa0MsUUFBUSxFQUFFLHVCQUF1QixFQUFFLGVBQWUsWUFBWSxXQUFXLHFDQUFxQyxTQUFTLEdBQUcsUUFBUSxTQUFTLCtDQUErQyxZQUFZLHlDQUF5QywwQ0FBMEMsNEJBQTRCLFFBQVEsVUFBVSxTQUFTLGlEQUFpRCxZQUFZLHlDQUF5QyxpQkFBaUIsc0NBQXNDLG1CQUFtQixRQUFRLFNBQVMsMENBQTBDLHVCQUF1Qiw2QkFBNkIsU0FBUyx1QkFBdUIsSUFBSSxLQUFLLGFBQWEsd0JBQXdCLElBQUksT0FBTyxxQkFBcUIsUUFBUSxnREFBZ0QsZ0JBQWdCLHlGQUF5Riw2RkFBNkYsU0FBUyxpQkFBaUIsV0FBVyxxQ0FBcUMsOERBQThELGVBQWUsb0NBQW9DLGtEQUFrRCxvQ0FBb0Msc0JBQXNCLGdCQUFnQiw2QkFBNkIsTUFBTSxpRUFBaUUsc0JBQXNCLE9BQU8sU0FBUyxzVEFBc1Qsa0JBQWtCLGtCQUFrQixFQUFFLGFBQWEsMkNBQTJDLHdFQUF3RSx3TkFBd04sV0FBVyxFQUFFLGFBQWEsd0JBQXdCLCtFQUErRSxxRUFBcUUsb0RBQW9ELGdCQUFnQixxRUFBcUUsbUxBQW1MLGNBQWMsdUhBQXVILGlCQUFpQixnQkFBZ0IsaUJBQWlCLGVBQWUsbUhBQW1ILGlCQUFpQixnQkFBZ0IsMEJBQTBCLFVBQVUsaUNBQWlDLDBDQUEwQyx5QkFBeUIsV0FBVyw2QkFBNkIseUdBQXlHLDBDQUEwQyxpTUFBaU0sdUpBQXVKLFdBQVcsK0ZBQStGLGlCQUFpQixrREFBa0Qsb0dBQW9HLCtDQUErQyxvUkFBb1IsbUNBQW1DLG1GQUFtRixlQUFlLFFBQVEsRUFBRSxpQkFBaUIsK0VBQStFLGlCQUFpQixRQUFRLEVBQUUsZUFBZSwwR0FBMEcsV0FBVyx5REFBeUQsV0FBVyxzQkFBc0IsK0JBQStCLGNBQWMsa0NBQWtDLDZCQUE2Qiw4QkFBOEIsb0dBQW9HLDRDQUE0Qyw4Q0FBOEMsWUFBWSxXQUFXLEtBQUssYUFBYSx3Q0FBd0Msd0JBQXdCLGtDQUFrQyx5REFBeUQsU0FBUyx5Q0FBeUMsd0JBQXdCLG1LQUFtSyxnQkFBZ0IscUNBQXFDLGlFQUFpRSwwTEFBMEwsOEVBQThFLHVDQUF1Qyx3SEFBd0gsMEhBQTBILDBEQUEwRCxzQkFBc0IsdUVBQXVFLGFBQWEsOEVBQThFLGtDQUFrQyxxQkFBcUIsNGNBQTRjLHNIQUFzSCxrQkFBa0IsaUVBQWlFLDJFQUEyRSw4QkFBOEIsZ0JBQWdCLDBFQUEwRSx1QkFBdUIsYUFBYSxxQ0FBcUMscUJBQXFCLG1CQUFtQiwrREFBK0QsbU1BQW1NLCtCQUErQixnQ0FBZ0MscURBQXFELGFBQWEsRUFBRSxnQ0FBZ0MsK0JBQStCLDBFQUEwRSxlQUFlLGtEQUFrRCxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsZUFBZSxzREFBc0QscURBQXFELGdEQUFnRCxxTEFBcUwsNEVBQTRFLGdEQUFnRCxvQkFBb0IsaURBQWlELG9CQUFvQix3RUFBd0UsaUJBQWlCLE1BQU0sZ0JBQWdCLGNBQWMsZ0JBQWdCLDJEQUEyRCxvQkFBb0IscUNBQXFDLGtCQUFrQix3QkFBd0IsaUJBQWlCLHFDQUFxQywySkFBMkoseUxBQXlMLE1BQU0saU1BQWlNLHVCQUF1Qiw0Q0FBNEMsNEJBQTRCLG1CQUFtQixFQUFFLDZCQUE2QixrQkFBa0IsWUFBWSxpR0FBaUcsNkdBQTZHLG1LQUFtSyxvREFBb0QscUJBQXFCLDZCQUE2QixPQUFPLDRCQUE0QixnREFBZ0QsMkJBQTJCLHVCQUF1QixTQUFTLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLDhCQUE4QixTQUFTLEVBQUUsY0FBYyxFQUFFLElBQUksaUJBQWlCLGtDQUFrQyxrREFBa0QsZ0NBQWdDLGlDQUFpQyx5R0FBeUcsY0FBYyxzR0FBc0csaUJBQWlCLDhCQUE4QixxQ0FBcUMsVUFBVSx5REFBeUQsV0FBVyx5REFBeUQsZUFBZSxFQUFFLCtGQUErRixpQkFBaUIsbUNBQW1DLGtCQUFrQixHQUFHLEVBQUUsd0VBQXdFLDZFQUE2RSw2RUFBNkUsTUFBTSxrQkFBa0IsMEJBQTBCLGtEQUFrRCxxREFBcUQsRUFBRSx3QkFBd0IsMkhBQTJILE9BQU8sNEVBQTRFLE9BQU8sbUdBQW1HLEdBQUcsRUFBRSxrQ0FBa0MsTUFBTSxrQkFBa0IsbUJBQW1CLGtGQUFrRixnQ0FBZ0MsZ0JBQWdCLHdDQUF3QyxtSUFBbUksNENBQTRDLGlCQUFpQiw0SEFBNEgsVUFBVSwyUkFBMlIsZ0dBQWdHLHFEQUFxRCxhQUFhLGdDQUFnQyxpQ0FBaUMsbUJBQW1CLEdBQUcsWUFBWSxJQUFJLFlBQVksMkJBQTJCLGdIQUFnSCxTQUFTLDRCQUE0QiwwQkFBMEIsbUJBQW1CLFNBQVMsNEJBQTRCLDBCQUEwQixtQkFBbUIsT0FBTyxtQkFBbUIsZUFBZSwrQkFBK0Isb0NBQW9DLGtCQUFrQixtRUFBbUUsWUFBWSwrR0FBK0cseUNBQXlDLHlEQUF5RCx1RkFBdUYsU0FBUyx5Q0FBeUMseURBQXlELHdGQUF3RixvQkFBb0IscUNBQXFDLE1BQU0sa0JBQWtCLHlDQUF5QyxZQUFZLCtJQUErSSw4Q0FBOEMsMkJBQTJCLHFCQUFxQiw4Q0FBOEMsNEJBQTRCLGVBQWUsbU1BQW1NLHVCQUF1Qix3TkFBd04sY0FBYyw0SEFBNEgsZ0JBQWdCLFVBQVUsdUZBQXVGLGdDQUFnQyx5SEFBeUgsd0JBQXdCLGtHQUFrRyxRQUFRLHNIQUFzSCwyQ0FBMkMsb0NBQW9DLFNBQVMsRUFBRSxjQUFjLEVBQUUsOERBQThELEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLGtEQUFrRCxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsR0FBRywrQkFBK0IsZUFBZSw0REFBNEQsZ0JBQWdCLDhEQUE4RCxlQUFlLHNDQUFzQyxvUUFBb1EsZUFBZSxnSEFBZ0gsV0FBVyw0REFBNEQsV0FBVyw4SkFBOEosVUFBVSxvTkFBb04sc0NBQXNDLGdCQUFnQixRQUFRLHNCQUFzQiw2QkFBNkIsaUNBQWlDLFFBQVEsZUFBZSw4R0FBOEcsVUFBVSwwQ0FBMEMsRUFBRSxHQUFHLGdCQUFnQix5Q0FBeUMsaURBQWlELEVBQUUsa0JBQWtCLElBQUksdUVBQXVFLEVBQUUsR0FBRyx5SEFBeUgsRUFBRSx1Q0FBdUMsMkZBQTJGLEtBQUssUUFBUSwyV0FBMlcsWUFBWSxtQ0FBbUMsMmFBQTJhLFVBQVUsK0pBQStKLFNBQVMsa0RBQWtELFNBQVMsbUVBQW1FLFlBQVksb1BBQW9QLCtFQUErRSxRQUFRLGVBQWUsd1BBQXdQLGtCQUFrQix5REFBeUQsZUFBZSx5REFBeUQsZUFBZSx3U0FBd1MsYUFBYSx3QkFBd0Isa0JBQWtCLDZDQUE2QyxhQUFhLG9CQUFvQix1RUFBdUUsNkNBQTZDLHVCQUF1Qiw0QkFBNEIsc0JBQXNCLDhEQUE4RCxpQkFBaUIsc0ZBQXNGLDhDQUE4QyxxQkFBcUIsd0dBQXdHLDJCQUEyQixpREFBaUQsVUFBVSx1QkFBdUIsb0hBQW9ILFNBQVMsMlFBQTJRLFlBQVksY0FBYyxTQUFTLHdCQUF3QixlQUFlLDZDQUE2QyxtRUFBbUUsWUFBWSx1Q0FBdUMscUNBQXFDLHlFQUF5RSx1Q0FBdUMsdUNBQXVDLDJEQUEyRCxvR0FBb0csNkdBQTZHLGFBQWEsa0lBQWtJLGNBQWMsaUJBQWlCLHlDQUF5Qyx5Q0FBeUMsd0JBQXdCLG1DQUFtQyxtQkFBbUIsSUFBSSxpREFBaUQsS0FBSyxZQUFZLElBQUksS0FBSyxxQ0FBcUMsa0tBQWtLLE1BQU0sbURBQW1ELGVBQWUsTUFBTSx3SEFBd0gsNkJBQTZCLHFCQUFxQixlQUFlLHNCQUFzQixtQ0FBbUMsa0NBQWtDLEdBQUcsa0RBQWtELGtDQUFrQyxXQUFXLG9CQUFvQixZQUFZLG1CQUFtQixTQUFTLDhCQUE4QixTQUFTLHFFQUFxRSxRQUFRLElBQUksK0lBQStJLDBHQUEwRyxPQUFPLGdFQUFnRSxrQkFBa0Isa0JBQWtCLEVBQUUsa0JBQWtCLGlJQUFpSSw0R0FBNEcsT0FBTyx5T0FBeU8sOEJBQThCLDhHQUE4RyxhQUFhLGtDQUFrQyxpaUJBQWlpQixhQUFhLGVBQWUsa0ZBQWtGLFNBQVMsZ0JBQWdCLHFFQUFxRSxnR0FBZ0csZ0JBQWdCLGVBQWUsNkJBQTZCLHNEQUFzRCxnREFBZ0QsR0FBRyw0SEFBNEgsaUdBQWlHLDBDQUEwQyx3Q0FBd0MscUJBQXFCLGFBQWEsdURBQXVELEVBQUUsS0FBSyxZQUFZLFlBQVkscUJBQXFCLE1BQU0scUJBQXFCLG1DQUFtQyxxQkFBcUIseUVBQXlFLG9EQUFvRCxtQkFBbUIsa09BQWtPLEdBQUcsV0FBVyxNQUFNLGVBQWUsU0FBUyxNQUFNLGdKQUFnSixnQkFBZ0IsZ0JBQWdCLGFBQWEsb0NBQW9DLG1KQUFtSiw2Q0FBNkMsbUJBQW1CLE9BQU8sdUJBQXVCLHFOQUFxTixpRUFBaUUsbURBQW1ELHlHQUF5RyxvQkFBb0Isc0RBQXNELHNCQUFzQixZQUFZLCtCQUErQixZQUFZLCtCQUErQixjQUFjLEVBQUUsTUFBTSxtRUFBbUUsR0FBRyw4RUFBOEUsbUNBQW1DLDhFQUE4RSxjQUFjLHFDQUFxQyxlQUFlLEVBQUUsMk1BQTJNLGdEQUFnRCx5QkFBeUIsdURBQXVELHNDQUFzQyxFQUFFLHlCQUF5QixrQkFBa0IseUdBQXlHLHdCQUF3QixtREFBbUQsZ0JBQWdCLHFDQUFxQyx1R0FBdUcscUhBQXFILHNFQUFzRSxnR0FBZ0csWUFBWSw4QkFBOEIsdUJBQXVCLCtDQUErQyx3RUFBd0UsMlFBQTJRLHlCQUF5QixZQUFZLHdDQUF3QyxtQ0FBbUMsK0JBQStCLHNDQUFzQywrQkFBK0Isc0NBQXNDLHFJQUFxSSxHQUFHLFlBQVksNkJBQTZCLFFBQVEsK0VBQStFLGNBQWMsdUJBQXVCLDZCQUE2QixpQkFBaUIsYUFBYSxVQUFVLCtDQUErQyw0QkFBNEIsTUFBTSx1REFBdUQsd0JBQXdCLHNFQUFzRSxFQUFFLElBQUksbUVBQW1FLEVBQUUscUJBQXFCLE9BQU8sc0NBQXNDLGtLQUFrSyxXQUFXLDZCQUE2QixpQkFBaUIsR0FBRyxnQkFBZ0IsV0FBVyxhQUFhLHlEQUF5RCxpQkFBaUIsbUlBQW1JLGlCQUFpQiwyRUFBMkUscUJBQXFCLGdFQUFnRSw2QkFBNkIsY0FBYyxhQUFhLDhCQUE4Qix3UEFBd1AsR0FBRyxhQUFhLDZDQUE2QyxXQUFXLEVBQUUsb0JBQW9CLHlHQUF5RyxzQkFBc0IsK0NBQStDLHNGQUFzRixxQkFBcUIsU0FBUyw0T0FBNE8sZ0JBQWdCLGdDQUFnQywySkFBMkosV0FBVyxxREFBcUQsZ0JBQWdCLDJCQUEyQixtQkFBbUIsRUFBRSw0REFBNEQsa0JBQWtCLHVCQUF1QiwwQkFBMEIsa0RBQWtELHdDQUF3Qyx1QkFBdUIseURBQXlELE1BQU0scUNBQXFDLGdCQUFnQixZQUFZLGFBQWEsNEJBQTRCLGdHQUFnRyxzRUFBc0UsK0JBQStCLHlDQUF5QyxnQ0FBZ0Msa0VBQWtFLDJDQUEyQywwREFBMEQseUhBQXlILFVBQVUsOENBQThDLHNCQUFzQiwrREFBK0QscUNBQXFDLDZHQUE2RyxRQUFRLGVBQWUsdURBQXVELCtFQUErRSxhQUFhLHNFQUFzRSxZQUFZLHNQQUFzUCxZQUFZLG9EQUFvRCxlQUFlLDBDQUEwQyxRQUFRLDBCQUEwQixzQ0FBc0MsdUpBQXVKLDRCQUE0QixXQUFXLHFFQUFxRSwwQ0FBMEMsTUFBTSw4QkFBOEIseUJBQXlCLDZDQUE2Qyw2REFBNkQsMENBQTBDLFlBQVksV0FBVyxvQ0FBb0MsZ0JBQWdCLFdBQVcsa0VBQWtFLEVBQUUseUNBQXlDLGdCQUFnQixFQUFFLEVBQUUsU0FBUyxTQUFTLDhRQUE4USxVQUFVLCtJQUErSSxTQUFTLDhCQUE4QixTQUFTLCtDQUErQyxZQUFZLDBEQUEwRCx3RkFBd0YsT0FBTyx1QkFBdUIsVUFBVSxxRUFBcUUsUUFBUSw2REFBNkQsYUFBYSxrR0FBa0csUUFBUSxxQkFBcUIsS0FBSyxVQUFVLFFBQVEseUVBQXlFLEtBQUssaUZBQWlGLFFBQVEsZUFBZSxnQkFBZ0Isd0pBQXdKLGFBQWEsbVBBQW1QLFNBQVMsdURBQXVELGVBQWUsK0RBQStELGtCQUFrQixnREFBZ0QsMkJBQTJCLHdJQUF3SSxHQUFHLDBDQUEwQywyRUFBMkUsNERBQTRELEVBQUUsR0FBRyxFQUFFLDZDQUE2QyxFQUFFLDZDQUE2Qyx3REFBd0QseUVBQXlFLG9EQUFvRCxFQUFFLEdBQUcsRUFBRSw2QkFBNkIsMENBQTBDLElBQUksV0FBVyxFQUFFLDBHQUEwRyxLQUFLLE9BQU8sK0ZBQStGLFVBQVUsa0RBQWtELGlEQUFpRCxJQUFJLFdBQVcsRUFBRSx5REFBeUQsS0FBSyxVQUFVLGdEQUFnRCx3QkFBd0IsaVpBQWlaLGlKQUFpSixVQUFVLDJDQUEyQyx3RkFBd0YsR0FBRyxxQkFBcUIsa0RBQWtELHFCQUFxQixNQUFNLHdDQUF3QyxnQ0FBZ0MsK0RBQStELDZCQUE2QixNQUFNLHFDQUFxQyxrQkFBa0IsMkJBQTJCLE9BQU8sRUFBRSxrQkFBa0IsaUJBQWlCLEdBQUcsUUFBUSx5QkFBeUIsS0FBSyxzQ0FBc0Msd0ZBQXdGLDhCQUE4QixpQ0FBaUMsbUJBQW1CLEdBQUcsbUJBQW1CLDJDQUEyQyxpREFBaUQsc0pBQXNKLGdCQUFnQixLQUFLLGdCQUFnQixJQUFJLGtEQUFrRCxxQkFBcUIseURBQXlELDBFQUEwRSxLQUFLLEdBQUcsUUFBUSxvQ0FBb0MscUtBQXFLLGlCQUFpQixzQ0FBc0MsMEZBQTBGLGdCQUFnQixjQUFjLEdBQUcsZUFBZSxpQkFBaUIsU0FBUyxxS0FBcUssNkJBQTZCLGtCQUFrQixjQUFjLDBCQUEwQiwyREFBMkQsNEVBQTRFLHFCQUFxQix3QkFBd0IsVUFBVSwrQ0FBK0MsRUFBRSxrQ0FBa0MsRUFBRSxJQUFJLGtCQUFrQiw4Q0FBOEMseUJBQXlCLHlDQUF5QyxJQUFJLG9PQUFvTywwQkFBMEIsc0JBQXNCLFdBQVcsSUFBSSwrREFBK0QsZUFBZSxJQUFJLHVCQUF1QixZQUFZLElBQUksSUFBSSxTQUFTLE1BQU0sZUFBZSxzQkFBc0Isb0dBQW9HLEdBQUcsY0FBYyxnQkFBZ0IsZUFBZSw2Q0FBNkMsTUFBTSxtR0FBbUcsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLFFBQVEsOERBQThELFFBQVEsZ0JBQWdCLE1BQU0sbURBQW1ELE1BQU0sbUNBQW1DLE1BQU0sdUVBQXVFLGlDQUFpQyxxQkFBcUIscUNBQXFDLGFBQWEsMEJBQTBCLHFDQUFxQyxTQUFTLFNBQVMsV0FBVyxpRUFBaUUsYUFBYSxpRUFBaUUsTUFBTSwrRUFBK0UsaUNBQWlDLEVBQUUsMkJBQTJCLHNFQUFzRSwwQkFBMEIsa0RBQWtELHlGQUF5RixJQUFJLHVCQUF1QiwwQkFBMEIsSUFBSSxxQ0FBcUMsVUFBVSxPQUFPLFNBQVMscUJBQXFCLDRCQUE0QiwyQkFBMkIsa0NBQWtDLDJIQUEySCxxQkFBcUIsb0lBQW9JLG1CQUFtQixpTEFBaUwsMEJBQTBCLG1FQUFtRSxhQUFhLElBQUkseUJBQXlCLDBDQUEwQyxnSUFBZ0ksa0hBQWtILFdBQVcsU0FBUyxtRkFBbUYsU0FBUyx3RkFBd0YsYUFBYSxRQUFRLGVBQWUsZ0JBQWdCLCtJQUErSSxhQUFhLG9MQUFvTCxVQUFVLDJDQUEyQywwQkFBMEIsR0FBRyxZQUFZLHFCQUFxQixhQUFhLDZEQUE2RCxrRUFBa0UsK0VBQStFLHFCQUFxQixrREFBa0QscUJBQXFCLHlNQUF5TSxjQUFjLG9EQUFvRCxtQkFBbUIsaUNBQWlDLHNDQUFzQyw0QkFBNEIsc0NBQXNDLCtCQUErQix5REFBeUQsb0NBQW9DLDRCQUE0QiwwS0FBMEssMkNBQTJDLE1BQU0sc0NBQXNDLHlHQUF5RyxzQkFBc0Isb0tBQW9LLHVCQUF1QixpQkFBaUIsa09BQWtPLFdBQVcsOERBQThELFdBQVcscURBQXFELGFBQWEsSUFBSSxvQkFBb0IsOEVBQThFLEdBQUcsNklBQTZJLHVDQUF1QyxnREFBZ0QscUNBQXFDLDZHQUE2RyxvQ0FBb0Msa0VBQWtFLElBQUksaUJBQWlCLGlKQUFpSixlQUFlLHNKQUFzSixnREFBZ0QsNENBQTRDLHdDQUF3QyxXQUFXLHFDQUFxQyxtRUFBbUUsdUVBQXVFLGlCQUFpQixvQ0FBb0Msc0NBQXNDLGtDQUFrQyxNQUFNLHlEQUF5RCw4R0FBOEcsT0FBTywwRUFBMEUsa0RBQWtELFNBQVMsa0RBQWtELCtCQUErQixxQkFBcUIsZ0RBQWdELGlEQUFpRCxvRUFBb0UsNEdBQTRHLFlBQVksb0VBQW9FLEVBQUUsVUFBVSxpREFBaUQsYUFBYSw2RkFBNkYsaURBQWlELFlBQVksTUFBTSwrQkFBK0IscUJBQXFCLHdCQUF3QixpREFBaUQsVUFBVSw4REFBOEQsbURBQW1ELE9BQU8sZ0JBQWdCLDJCQUEyQiwwRUFBMEUsd0JBQXdCLGlJQUFpSSxzRUFBc0UsYUFBYSwwSEFBMEgsaURBQWlELE1BQU0sa0NBQWtDLE1BQU0sdURBQXVELGFBQWEsd0NBQXdDLGtCQUFrQix1R0FBdUcsb0RBQW9ELFlBQVkseURBQXlELDJFQUEyRSxNQUFNLGtDQUFrQyxNQUFNLHNEQUFzRCxzRUFBc0Usd0ZBQXdGLGdEQUFnRCxLQUFLLCtCQUErQixrQkFBa0IscUJBQXFCLHNCQUFzQixpRUFBaUUsNEJBQTRCLEVBQUUsR0FBRyxTQUFTLDhCQUE4QixTQUFTLGdDQUFnQyxZQUFZLDJOQUEyTixVQUFVLG1CQUFtQixpSUFBaUksT0FBTyxrQ0FBa0MsUUFBUSxlQUFlLGdCQUFnQixrRUFBa0UsYUFBYSxrRkFBa0YsNERBQTRELFdBQVcsbUNBQW1DLHFDQUFxQywyR0FBMkcsU0FBUyxtQkFBbUIsS0FBSyxvQkFBb0Isc0VBQXNFLGlGQUFpRixJQUFJLCtDQUErQyxzR0FBc0csV0FBVyxRQUFRLFlBQVksa0VBQWtFLCtCQUErQiwwQ0FBMEMsc0dBQXNHLFVBQVUsdUJBQXVCLFVBQVUsa0JBQWtCLFVBQVUsbUJBQW1CLHNCQUFzQixtQ0FBbUMsTUFBTSxzQkFBc0IsS0FBSyxhQUFhLDRDQUE0QyxFQUFFLEtBQUssK0NBQStDLHlCQUF5QixtQ0FBbUMscURBQXFELEVBQUUsS0FBSyxtR0FBbUcseUJBQXlCLElBQUksc0JBQXNCLE1BQU0sZUFBZSxnQ0FBZ0MsTUFBTSxNQUFNLG1CQUFtQixzRUFBc0Usc0RBQXNELDJDQUEyQywyQ0FBMkMsaUJBQWlCLGlCQUFpQix5RUFBeUUsZ0JBQWdCLHNDQUFzQyxZQUFZLEdBQUcsaUJBQWlCLDREQUE0RCxTQUFTLGdKQUFnSixpUUFBaVEsY0FBYywrS0FBK0ssUUFBUSxlQUFlLGtHQUFrRyxXQUFXLG1CQUFtQixXQUFXLG1DQUFtQyxvREFBb0QsNEJBQTRCLHVLQUF1SyxXQUFXLEVBQUUsS0FBSyxxQkFBcUIsb05BQW9OLEVBQUUsa0NBQWtDLGFBQWEsb0tBQW9LLFdBQVcsNE5BQTROLHlCQUF5QixrQkFBa0IsYUFBYSw0S0FBNEssU0FBUyx1RkFBdUYsU0FBUyxPQUFPLFNBQVMscUZBQXFGLE9BQU8sa0VBQWtFLE9BQU8sOExBQThMLHlDQUF5QyxPQUFPLDRMQUE0TCx5Q0FBeUMsYUFBYSx3WkFBd1osb0ZBQW9GLFlBQVksZ1ZBQWdWLDRDQUE0QyxPQUFPLDBPQUEwTyxtQkFBbUIseUNBQXlDLG1CQUFtQixXQUFXLDRRQUE0USxxQkFBcUIsU0FBUyxxcUJBQXFxQixvQkFBb0IscUNBQXFDLGVBQWUsUUFBUSx1TkFBdU4sK0RBQStELHFGQUFxRixRQUFRLGVBQWUsdURBQXVELG1JQUFtSSxhQUFhLHdUQUF3VCxTQUFTLCtDQUErQyxTQUFTLHdEQUF3RCxLQUFLLE1BQU0seUNBQXlDLHdEQUF3RCw0QkFBNEIscUNBQXFDLFFBQVEsWUFBWSxtUUFBbVEscUNBQXFDLFdBQVcsYUFBYSw2Q0FBNkMsV0FBVyxzUEFBc1AsV0FBVyxxRkFBcUYsWUFBWSxvT0FBb08sYUFBYSwySkFBMkosaUJBQWlCLHNEQUFzRCxZQUFZLDZHQUE2RyxpQkFBaUIsTUFBTSx3VEFBd1QsRUFBRSxVQUFVLDRLQUE0SyxRQUFRLGVBQWUsa0RBQWtELHlCQUF5QixFQUFFLDJCQUEyQixFQUFFLDBCQUEwQixpQ0FBaUMsd0RBQXdELFFBQVEsc0JBQXNCLGdIQUFnSCxxQkFBcUIsMkRBQTJELDhEQUE4RCxxREFBcUQsZUFBZSx3REFBd0QsbUJBQW1CLHNDQUFzQyxxQ0FBcUMsb0NBQW9DLHNDQUFzQyx5RkFBeUYsV0FBVyxHQUFHLDREQUE0RCxpQkFBaUIsNkZBQTZGLFNBQVMsZ0lBQWdJLDJTQUEyUyxrRUFBa0Usa0pBQWtKLHdHQUF3RyxnR0FBZ0csc0NBQXNDLG1KQUFtSixzSkFBc0osVUFBVSxzSUFBc0ksU0FBUyw4QkFBOEIsU0FBUywrQ0FBK0MsYUFBYSxTQUFTLGlCQUFpQixlQUFlLDJEQUEyRCw2RkFBNkYsVUFBVSw4QkFBOEIsNEpBQTRKLFdBQVcsd0RBQXdELFdBQVcsRUFBRSxXQUFXLHNCQUFzQixpQkFBaUIsa0VBQWtFLGFBQWEsbUJBQW1CLDZEQUE2RCxhQUFhLE1BQU0sWUFBWSxlQUFlLElBQUkseURBQXlELGdCQUFnQixxREFBcUQsZUFBZSxvRkFBb0Ysb0NBQW9DLHdCQUF3QixxQ0FBcUMseUxBQXlMLDJCQUEyQixVQUFVLHVGQUF1RixzQkFBc0IsZ01BQWdNLFNBQVMsNENBQTRDLFNBQVMsNkRBQTZELDJDQUEyQyxTQUFTLGdRQUFnUSxpSkFBaUosV0FBVyw2UkFBNlIsT0FBTyw0Z0JBQTRnQixRQUFRLGtCQUFrQixrQkFBa0IsRUFBRSxhQUFhLCtYQUErWCxlQUFlLHdJQUF3SSxlQUFlLG1LQUFtSyxlQUFlLDRLQUE0SyxhQUFhLGtEQUFrRCxtQ0FBbUMsMFRBQTBULGlIQUFpSCxPQUFPLEdBQUcscXVCQUFxdUIsK0JBQStCLGlKQUFpSixZQUFZLFdBQVcsa0JBQWtCLG1CQUFtQixNQUFNLHNCQUFzQiw2SUFBNkksZUFBZSxPQUFPLHdDQUF3QyxvS0FBb0ssaUJBQWlCLGNBQWMsdUhBQXVILGFBQWEsZUFBZSxpREFBaUQsRUFBRSxZQUFZLDhFQUE4RSxnT0FBZ08sWUFBWSw4RUFBOEUsVUFBVSw2SUFBNkksa0JBQWtCLFVBQVUsOENBQThDLEtBQUssdUNBQXVDLEVBQUUsZ0VBQWdFLGlGQUFpRixvRkFBb0Ysb0NBQW9DLG1CQUFtQixvQkFBb0IsbUlBQW1JLDZEQUE2RCxRQUFRLEdBQUcsUUFBUSxFQUFFLGlMQUFpTCxXQUFXLDZCQUE2QixpREFBaUQsa0RBQWtELHVDQUF1Qyw2QkFBNkIseUJBQXlCLE1BQU0sd0JBQXdCLGNBQWMsZ0NBQWdDLDhCQUE4QixjQUFjLHVCQUF1Qix5TUFBeU0sSUFBSSxFQUFFLGVBQWUsbUJBQW1CLDZGQUE2Rix3SEFBd0gsY0FBYyw4Q0FBOEMsYUFBYSx1Q0FBdUMsaURBQWlELGNBQWMsaUVBQWlFLGdDQUFnQyw4Q0FBOEMscUdBQXFHLHFCQUFxQiw4SEFBOEgsMkNBQTJDLGFBQWEsc0NBQXNDLFdBQVcsc0JBQXNCLGtCQUFrQixtRUFBbUUsMENBQTBDLFNBQVMsd0VBQXdFLFNBQVMsNENBQTRDLG9CQUFvQixnQkFBZ0IsSUFBSSxJQUFJLFlBQVksNERBQTRELGlCQUFpQixhQUFhLDhFQUE4RSxzQkFBc0IsNEJBQTRCLGFBQWEsYUFBYSwyWkFBMlosU0FBUyxnQkFBZ0IsaUVBQWlFLHNDQUFzQyxzRUFBc0Usb0JBQW9CLDhEQUE4RCwwREFBMEQsR0FBRywyRUFBMkUsNkZBQTZGLGdCQUFnQixhQUFhLDZHQUE2RyxpQ0FBaUMsNEdBQTRHLGlCQUFpQixFQUFFLElBQUksbUhBQW1ILGtCQUFrQiwyREFBMkQsMkRBQTJELGNBQWMsZ0JBQWdCLDRJQUE0SSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMscVFBQXFRLDJCQUEyQiw0QkFBNEIsMFRBQTBULHFCQUFxQix3RUFBd0UsMkNBQTJDLHlDQUF5QywyV0FBMlcsaUJBQWlCLHdEQUF3RCxTQUFTLHdOQUF3TixhQUFhLGlCQUFpQixrQkFBa0Isc0RBQXNELHlCQUF5QixpREFBaUQsb0JBQW9CLGdHQUFnRyx3REFBd0QsUUFBUSxzQ0FBc0Msd0JBQXdCLDZEQUE2RCxjQUFjLG1EQUFtRCxzQ0FBc0MscUVBQXFFLE9BQU8sNEJBQTRCLGVBQWUsRUFBRSxlQUFlLG9EQUFvRCxnREFBZ0Qsc0pBQXNKLDZDQUE2QyxxQkFBcUIsZUFBZSx5REFBeUQsbUhBQW1ILE9BQU8sc0JBQXNCLG1DQUFtQyxPQUFPLHNCQUFzQixtQ0FBbUMsYUFBYSwyQ0FBMkMsU0FBUyw2RkFBNkYsNkNBQTZDLG9JQUFvSSwrRkFBK0Ysd0JBQXdCLHFDQUFxQyxzRUFBc0UsMkJBQTJCLGtFQUFrRSxtQ0FBbUMsZUFBZSxPQUFPLFVBQVUsNkNBQTZDLG9FQUFvRSxrRkFBa0YsZUFBZSxvSEFBb0gsaUJBQWlCLEVBQUUsS0FBSyxnQ0FBZ0Msb0NBQW9DLHdCQUF3QixpSkFBaUosa0JBQWtCLEVBQUUsa0JBQWtCLHVCQUF1QixFQUFFLDZCQUE2QixpQ0FBaUMsMkNBQTJDLHFCQUFxQixvSUFBb0kscURBQXFELEVBQUUsK0NBQStDLGtCQUFrQixpRUFBaUUsdUVBQXVFLEdBQUcsU0FBUyxNQUFNLCtEQUErRCx3QkFBd0IsOEVBQThFLFNBQVMsd0JBQXdCLEVBQUUsNENBQTRDLHdCQUF3QixzRkFBc0YsRUFBRSxxQ0FBcUMsNEZBQTRGLEVBQUUsb0NBQW9DLHdCQUF3Qix1RkFBdUYscUZBQXFGLFlBQVksdUdBQXVHLG1DQUFtQyxTQUFTLG1CQUFtQixTQUFTLE9BQU8sOEVBQThFLGVBQWUsSUFBSSx3QkFBd0IsSUFBSSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQix1REFBdUQsNkNBQTZDLDBEQUEwRCxvQkFBb0IsaUJBQWlCLGdEQUFnRCxpQkFBaUIsTUFBTSxLQUFLLGtCQUFrQixhQUFhLDRFQUE0RSxzQkFBc0IsU0FBUyx5Q0FBeUMsRUFBRSw0RUFBNEUsa0JBQWtCLHNCQUFzQiw4REFBOEQsWUFBWSxtQkFBbUIsV0FBVyxLQUFLLGtCQUFrQix5QkFBeUIsOEZBQStJIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0BmYW5jeWFwcHMvdWkvZGlzdC9mYW5jeWJveC5lc20uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAZmFuY3lhcHBzL3VpL0ZhbmN5Ym94IHY0LjAuMC1iZXRhLjJcbmNvbnN0IHQ9dD0+XCJvYmplY3RcIj09dHlwZW9mIHQmJm51bGwhPT10JiZ0LmNvbnN0cnVjdG9yPT09T2JqZWN0JiZcIltvYmplY3QgT2JqZWN0XVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLGU9KC4uLmkpPT57bGV0IHM9ITE7XCJib29sZWFuXCI9PXR5cGVvZiBpWzBdJiYocz1pLnNoaWZ0KCkpO2xldCBuPWlbMF07aWYoIW58fFwib2JqZWN0XCIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcihcImV4dGVuZGVlIG11c3QgYmUgYW4gb2JqZWN0XCIpO2NvbnN0IG89aS5zbGljZSgxKSxhPW8ubGVuZ3RoO2ZvcihsZXQgaT0wO2k8YTtpKyspe2NvbnN0IGE9b1tpXTtmb3IobGV0IGkgaW4gYSlpZihhLmhhc093blByb3BlcnR5KGkpKXtjb25zdCBvPWFbaV07aWYocyYmKEFycmF5LmlzQXJyYXkobyl8fHQobykpKXtjb25zdCB0PUFycmF5LmlzQXJyYXkobyk/W106e307bltpXT1lKCEwLG4uaGFzT3duUHJvcGVydHkoaSk/bltpXTp0LG8pfWVsc2UgbltpXT1vfX1yZXR1cm4gbn0saT0odCxlPTFlNCk9Pih0PXBhcnNlRmxvYXQodCl8fDAsTWF0aC5yb3VuZCgodCtOdW1iZXIuRVBTSUxPTikqZSkvZSkscz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuUmVzaXplT2JzZXJ2ZXJ8fGNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMub2JzZXJ2YWJsZXM9W10sdGhpcy5ib3VuZENoZWNrPXRoaXMuY2hlY2suYmluZCh0aGlzKSx0aGlzLmJvdW5kQ2hlY2soKSx0aGlzLmNhbGxiYWNrPXR9b2JzZXJ2ZSh0KXtpZih0aGlzLm9ic2VydmFibGVzLnNvbWUoKGU9PmUuZWw9PT10KSkpcmV0dXJuO2NvbnN0IGU9e2VsOnQsc2l6ZTp7aGVpZ2h0OnQuY2xpZW50SGVpZ2h0LHdpZHRoOnQuY2xpZW50V2lkdGh9fTt0aGlzLm9ic2VydmFibGVzLnB1c2goZSl9dW5vYnNlcnZlKHQpe3RoaXMub2JzZXJ2YWJsZXM9dGhpcy5vYnNlcnZhYmxlcy5maWx0ZXIoKGU9PmUuZWwhPT10KSl9ZGlzY29ubmVjdCgpe3RoaXMub2JzZXJ2YWJsZXM9W119Y2hlY2soKXtjb25zdCB0PXRoaXMub2JzZXJ2YWJsZXMuZmlsdGVyKCh0PT57Y29uc3QgZT10LmVsLmNsaWVudEhlaWdodCxpPXQuZWwuY2xpZW50V2lkdGg7aWYodC5zaXplLmhlaWdodCE9PWV8fHQuc2l6ZS53aWR0aCE9PWkpcmV0dXJuIHQuc2l6ZS5oZWlnaHQ9ZSx0LnNpemUud2lkdGg9aSwhMH0pKS5tYXAoKHQ9PnQuZWwpKTt0Lmxlbmd0aD4wJiZ0aGlzLmNhbGxiYWNrKHQpLHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5ib3VuZENoZWNrKX19O2NsYXNzIG57Y29uc3RydWN0b3IodCl7dGhpcy5pZD0tMSx0aGlzLmlkPXQucG9pbnRlcklkfHx0LmlkZW50aWZpZXJ8fC0xLHRoaXMucGFnZVg9dC5wYWdlWCx0aGlzLnBhZ2VZPXQucGFnZVksdGhpcy5jbGllbnRYPXQuY2xpZW50WCx0aGlzLmNsaWVudFk9dC5jbGllbnRZLHRoaXMubmF0aXZlUG9pbnRlcj10fX1mdW5jdGlvbiBvKHQsZSl7cmV0dXJuIGU/TWF0aC5zcXJ0KChlLmNsaWVudFgtdC5jbGllbnRYKSoqMisoZS5jbGllbnRZLXQuY2xpZW50WSkqKjIpOjB9ZnVuY3Rpb24gYSh0LGUpe3JldHVybiBlP3tjbGllbnRYOih0LmNsaWVudFgrZS5jbGllbnRYKS8yLGNsaWVudFk6KHQuY2xpZW50WStlLmNsaWVudFkpLzJ9OnR9Y2xhc3Mgcntjb25zdHJ1Y3Rvcih0LHtzdGFydDplPSgoKT0+ITApLG1vdmU6aT0oKCk9Pnt9KSxlbmQ6cz0oKCk9Pnt9KX09e30pe3RoaXMuZWxlbWVudD10LHRoaXMuc3RhcnRQb2ludGVycz1bXSx0aGlzLmN1cnJlbnRQb2ludGVycz1bXSx0aGlzLnN0YXJ0Q2FsbGJhY2s9ZSx0aGlzLm1vdmVDYWxsYmFjaz1pLHRoaXMuZW5kQ2FsbGJhY2s9cyx0aGlzLm9uU3RhcnQ9dD0+e2lmKHQuYnV0dG9uJiYwIT09dC5idXR0b24pcmV0dXJuO2NvbnN0IGU9bmV3IG4odCk7aWYoITE9PT10aGlzLnN0YXJ0Q2FsbGJhY2soZSx0KSlyZXR1cm4hMTt0LnByZXZlbnREZWZhdWx0KCksKCgpPT57Y29uc3QgdD13aW5kb3cuZ2V0U2VsZWN0aW9uP3dpbmRvdy5nZXRTZWxlY3Rpb24oKTpkb2N1bWVudC5zZWxlY3Rpb247dCYmdC5yYW5nZUNvdW50JiZ0LmdldFJhbmdlQXQoMCkuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgmJih0LnJlbW92ZUFsbFJhbmdlcz90LnJlbW92ZUFsbFJhbmdlcygpOnQuZW1wdHkmJnQuZW1wdHkoKSl9KSgpLHRoaXMuY3VycmVudFBvaW50ZXJzLnB1c2goZSksdGhpcy5zdGFydFBvaW50ZXJzLnB1c2goZSk7KHQudGFyZ2V0JiZcInNldFBvaW50ZXJDYXB0dXJlXCJpbiB0LnRhcmdldD90LnRhcmdldDp0aGlzLmVsZW1lbnQpLnNldFBvaW50ZXJDYXB0dXJlKHQucG9pbnRlcklkKSx0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsdGhpcy5vbk1vdmUpLHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsdGhpcy5vbkVuZCksdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsdGhpcy5vbkVuZCl9LHRoaXMub25Nb3ZlPXQ9Pntjb25zdCBlPXRoaXMuY3VycmVudFBvaW50ZXJzLnNsaWNlKCksaT1bXTtmb3IoY29uc3QgZSBvZltuZXcgbih0KV0pe2NvbnN0IHQ9dGhpcy5jdXJyZW50UG9pbnRlcnMuZmluZEluZGV4KCh0PT50LmlkPT09ZS5pZCkpO3Q8MHx8KGkucHVzaChlKSx0aGlzLmN1cnJlbnRQb2ludGVyc1t0XT1lKX1pLmxlbmd0aCYmdGhpcy5tb3ZlQ2FsbGJhY2soZSx0aGlzLmN1cnJlbnRQb2ludGVycyx0KX0sdGhpcy5vbkVuZD10PT57Y29uc3QgZT1uZXcgbih0KSxpPXRoaXMuY3VycmVudFBvaW50ZXJzLmZpbmRJbmRleCgodD0+dC5pZD09PWUuaWQpKTtpZigtMT09PWkpcmV0dXJuITE7dGhpcy5jdXJyZW50UG9pbnRlcnMuc3BsaWNlKGksMSksdGhpcy5zdGFydFBvaW50ZXJzLnNwbGljZShpLDEpLHRoaXMuZW5kQ2FsbGJhY2soZSx0KSx0aGlzLmN1cnJlbnRQb2ludGVycy5sZW5ndGh8fCh0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsdGhpcy5vbk1vdmUpLHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsdGhpcy5vbkVuZCksdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyY2FuY2VsXCIsdGhpcy5vbkVuZCkpfSx0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsdGhpcy5vblN0YXJ0KX1zdG9wKCl7dGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLHRoaXMub25TdGFydCksdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLHRoaXMub25Nb3ZlKSx0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLHRoaXMub25FbmQpLHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLHRoaXMub25FbmQpfX1jb25zdCBsPWZ1bmN0aW9uKHQpe3JldHVybiEoIXR8fHQ9PT1kb2N1bWVudC5ib2R5KSYmKGZ1bmN0aW9uKHQpe2NvbnN0IGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodClbXCJvdmVyZmxvdy15XCJdLGk9d2luZG93LmdldENvbXB1dGVkU3R5bGUodClbXCJvdmVyZmxvdy14XCJdLHM9KFwic2Nyb2xsXCI9PT1lfHxcImF1dG9cIj09PWUpJiZNYXRoLmFicyh0LnNjcm9sbEhlaWdodC10LmNsaWVudEhlaWdodCk+MSxuPShcInNjcm9sbFwiPT09aXx8XCJhdXRvXCI9PT1pKSYmTWF0aC5hYnModC5zY3JvbGxXaWR0aC10LmNsaWVudFdpZHRoKT4xO3JldHVybiBzfHxufSh0KT90OmwodC5wYXJlbnROb2RlKSl9O2NsYXNzIGh7Y29uc3RydWN0b3IodD17fSl7dGhpcy5vcHRpb25zPWUoITAse30sdCksdGhpcy5wbHVnaW5zPVtdLHRoaXMuZXZlbnRzPXt9O2Zvcihjb25zdCB0IG9mW1wib25cIixcIm9uY2VcIl0pZm9yKGNvbnN0IGUgb2YgT2JqZWN0LmVudHJpZXModGhpcy5vcHRpb25zW3RdfHx7fSkpdGhpc1t0XSguLi5lKX1vcHRpb24odCxlKXt0PVN0cmluZyh0KTtsZXQgaT0ocz10LG49dGhpcy5vcHRpb25zLHMuc3BsaXQoXCIuXCIpLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmdFtlXX0pLG4pKTt2YXIgcyxuO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGkmJihpPWkuY2FsbCh0aGlzLHQpKSx2b2lkIDA9PT1pP2U6aX1sb2NhbGl6ZSh0LGU9W10pe3JldHVybiBTdHJpbmcodCkucmVwbGFjZSgvXFx7XFx7KFxcdyspLj8oXFx3Kyk/XFx9XFx9L2csKCh0LGkscyk9PntsZXQgbj0hMTtpZihuPXM/dGhpcy5vcHRpb24oYCR7aVswXStpLnRvTG93ZXJDYXNlKCkuc3Vic3RyaW5nKDEpfS5sMTBuLiR7c31gKTp0aGlzLm9wdGlvbihgbDEwbi4ke2l9YCksIW4pcmV0dXJuIGk7Zm9yKGxldCB0PTA7dDxlLmxlbmd0aDt0Kyspbj1uLnNwbGl0KGVbdF1bMF0pLmpvaW4oZVt0XVsxXSk7cmV0dXJuIG59KSl9b24oZSxpKXtpZih0KGUpKXtmb3IoY29uc3QgdCBvZiBPYmplY3QuZW50cmllcyhlKSl0aGlzLm9uKC4uLnQpO3JldHVybiB0aGlzfXJldHVybiBTdHJpbmcoZSkuc3BsaXQoXCIgXCIpLmZvckVhY2goKHQ9Pntjb25zdCBlPXRoaXMuZXZlbnRzW3RdPXRoaXMuZXZlbnRzW3RdfHxbXTstMT09ZS5pbmRleE9mKGkpJiZlLnB1c2goaSl9KSksdGhpc31vbmNlKGUsaSl7aWYodChlKSl7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmVudHJpZXMoZSkpdGhpcy5vbmNlKC4uLnQpO3JldHVybiB0aGlzfXJldHVybiBTdHJpbmcoZSkuc3BsaXQoXCIgXCIpLmZvckVhY2goKHQ9Pntjb25zdCBlPSguLi5zKT0+e3RoaXMub2ZmKHQsZSksaS5jYWxsKHRoaXMsdGhpcywuLi5zKX07ZS5fPWksdGhpcy5vbih0LGUpfSkpLHRoaXN9b2ZmKGUsaSl7aWYoIXQoZSkpcmV0dXJuIGUuc3BsaXQoXCIgXCIpLmZvckVhY2goKHQ9Pntjb25zdCBlPXRoaXMuZXZlbnRzW3RdO2lmKCFlfHwhZS5sZW5ndGgpcmV0dXJuIHRoaXM7bGV0IHM9LTE7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXtjb25zdCBuPWVbdF07aWYobiYmKG49PT1pfHxuLl89PT1pKSl7cz10O2JyZWFrfX0tMSE9cyYmZS5zcGxpY2UocywxKX0pKSx0aGlzO2Zvcihjb25zdCB0IG9mIE9iamVjdC5lbnRyaWVzKGUpKXRoaXMub2ZmKC4uLnQpfXRyaWdnZXIodCwuLi5lKXtmb3IoY29uc3QgaSBvZlsuLi50aGlzLmV2ZW50c1t0XXx8W11dLnNsaWNlKCkpaWYoaSYmITE9PT1pLmNhbGwodGhpcyx0aGlzLC4uLmUpKXJldHVybiExO2Zvcihjb25zdCBpIG9mWy4uLnRoaXMuZXZlbnRzW1wiKlwiXXx8W11dLnNsaWNlKCkpaWYoaSYmITE9PT1pLmNhbGwodGhpcyx0LHRoaXMsLi4uZSkpcmV0dXJuITE7cmV0dXJuITB9YXR0YWNoUGx1Z2lucyh0KXtjb25zdCBpPXt9O2Zvcihjb25zdFtzLG5db2YgT2JqZWN0LmVudHJpZXModHx8e30pKSExPT09dGhpcy5vcHRpb25zW3NdfHx0aGlzLnBsdWdpbnNbc118fCh0aGlzLm9wdGlvbnNbc109ZSh7fSxuLmRlZmF1bHRzfHx7fSx0aGlzLm9wdGlvbnNbc10pLGlbc109bmV3IG4odGhpcykpO2Zvcihjb25zdFt0LGVdb2YgT2JqZWN0LmVudHJpZXMoaSkpZS5hdHRhY2godGhpcyk7cmV0dXJuIHRoaXMucGx1Z2lucz1PYmplY3QuYXNzaWduKHt9LHRoaXMucGx1Z2lucyxpKSx0aGlzfWRldGFjaFBsdWdpbnMoKXtmb3IoY29uc3QgdCBpbiB0aGlzLnBsdWdpbnMpe2xldCBlOyhlPXRoaXMucGx1Z2luc1t0XSkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuZGV0YWNoJiZlLmRldGFjaCh0aGlzKX1yZXR1cm4gdGhpcy5wbHVnaW5zPXt9LHRoaXN9fWNvbnN0IGM9e3RvdWNoOiEwLHpvb206ITAscGluY2hUb1pvb206ITAscGFuT25seVpvb21lZDohMSxsb2NrQXhpczohMSxmcmljdGlvbjouNjQsZGVjZWxGcmljdGlvbjouODgsem9vbUZyaWN0aW9uOi43NCxib3VuY2VGb3JjZTouMixiYXNlU2NhbGU6MSxtaW5TY2FsZToxLG1heFNjYWxlOjIsc3RlcDouNSx0ZXh0U2VsZWN0aW9uOiExLGNsaWNrOlwidG9nZ2xlWm9vbVwiLHdoZWVsOlwiem9vbVwiLHdoZWVsRmFjdG9yOjQyLHdoZWVsTGltaXQ6NSxkcmFnZ2FibGVDbGFzczpcImlzLWRyYWdnYWJsZVwiLGRyYWdnaW5nQ2xhc3M6XCJpcy1kcmFnZ2luZ1wiLHJhdGlvOjF9O2NsYXNzIGQgZXh0ZW5kcyBoe2NvbnN0cnVjdG9yKHQsaT17fSl7c3VwZXIoZSghMCx7fSxjLGkpKSx0aGlzLnN0YXRlPVwiaW5pdFwiLHRoaXMuJGNvbnRhaW5lcj10O2Zvcihjb25zdCB0IG9mW1wib25Mb2FkXCIsXCJvbldoZWVsXCIsXCJvbkNsaWNrXCJdKXRoaXNbdF09dGhpc1t0XS5iaW5kKHRoaXMpO3RoaXMuaW5pdExheW91dCgpLHRoaXMucmVzZXRWYWx1ZXMoKSx0aGlzLmF0dGFjaFBsdWdpbnMoZC5QbHVnaW5zKSx0aGlzLnRyaWdnZXIoXCJpbml0XCIpLHRoaXMudXBkYXRlTWV0cmljcygpLHRoaXMuYXR0YWNoRXZlbnRzKCksdGhpcy50cmlnZ2VyKFwicmVhZHlcIiksITE9PT10aGlzLm9wdGlvbihcImNlbnRlck9uU3RhcnRcIik/dGhpcy5zdGF0ZT1cInJlYWR5XCI6dGhpcy5wYW5Ubyh7ZnJpY3Rpb246MH0pfWluaXRMYXlvdXQoKXtjb25zdCB0PXRoaXMuJGNvbnRhaW5lcjtpZighKHQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpdGhyb3cgbmV3IEVycm9yKFwiUGFuem9vbTogQ29udGFpbmVyIG5vdCBmb3VuZFwiKTtjb25zdCBlPXRoaXMub3B0aW9uKFwiY29udGVudFwiKXx8dC5xdWVyeVNlbGVjdG9yKFwiLnBhbnpvb21fX2NvbnRlbnRcIik7aWYoIWUpdGhyb3cgbmV3IEVycm9yKFwiUGFuem9vbTogQ29udGVudCBub3QgZm91bmRcIik7dGhpcy4kY29udGVudD1lO2xldCBpPXRoaXMub3B0aW9uKFwidmlld3BvcnRcIil8fHQucXVlcnlTZWxlY3RvcihcIi5wYW56b29tX192aWV3cG9ydFwiKTtpfHwhMT09PXRoaXMub3B0aW9uKFwid3JhcElubmVyXCIpfHwoaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGkuY2xhc3NMaXN0LmFkZChcInBhbnpvb21fX3ZpZXdwb3J0XCIpLGkuYXBwZW5kKC4uLnQuY2hpbGROb2RlcyksdC5hcHBlbmRDaGlsZChpKSksdGhpcy4kdmlld3BvcnQ9aXx8ZS5wYXJlbnROb2RlfXJlc2V0VmFsdWVzKCl7dGhpcy51cGRhdGVSYXRlPXRoaXMub3B0aW9uKFwidXBkYXRlUmF0ZVwiLC9pUGhvbmV8aVBhZHxpUG9kfEFuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpPzI1MDoyNCksdGhpcy5jb250YWluZXI9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMudmlld3BvcnQ9e3dpZHRoOjAsaGVpZ2h0OjB9LHRoaXMuY29udGVudD17b3JpZ0hlaWdodDowLG9yaWdXaWR0aDowLHdpZHRoOjAsaGVpZ2h0OjAseDp0aGlzLm9wdGlvbihcInhcIiwwKSx5OnRoaXMub3B0aW9uKFwieVwiLDApLHNjYWxlOnRoaXMub3B0aW9uKFwiYmFzZVNjYWxlXCIpfSx0aGlzLnRyYW5zZm9ybT17eDowLHk6MCxzY2FsZToxfSx0aGlzLnJlc2V0RHJhZ1Bvc2l0aW9uKCl9b25Mb2FkKHQpe3RoaXMudXBkYXRlTWV0cmljcygpLHRoaXMucGFuVG8oe3NjYWxlOnRoaXMub3B0aW9uKFwiYmFzZVNjYWxlXCIpLGZyaWN0aW9uOjB9KSx0aGlzLnRyaWdnZXIoXCJsb2FkXCIsdCl9b25DbGljayh0KXtpZih0LmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKHRoaXMub3B0aW9uKFwidGV4dFNlbGVjdGlvblwiKSYmd2luZG93LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkubGVuZ3RoKXJldHVybiB2b2lkIHQuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3QgZT10aGlzLiRjb250ZW50LmdldENsaWVudFJlY3RzKClbMF07aWYoXCJyZWFkeVwiIT09dGhpcy5zdGF0ZSYmKHRoaXMuZHJhZ1Bvc2l0aW9uLm1pZFBvaW50fHxNYXRoLmFicyhlLnRvcC10aGlzLmRyYWdTdGFydC5yZWN0LnRvcCk+MXx8TWF0aC5hYnMoZS5sZWZ0LXRoaXMuZHJhZ1N0YXJ0LnJlY3QubGVmdCk+MSkpcmV0dXJuIHQucHJldmVudERlZmF1bHQoKSx2b2lkIHQuc3RvcFByb3BhZ2F0aW9uKCk7ITEhPT10aGlzLnRyaWdnZXIoXCJjbGlja1wiLHQpJiZ0aGlzLm9wdGlvbihcInpvb21cIikmJlwidG9nZ2xlWm9vbVwiPT09dGhpcy5vcHRpb24oXCJjbGlja1wiKSYmKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuem9vbVdpdGhDbGljayh0KSl9b25XaGVlbCh0KXshMSE9PXRoaXMudHJpZ2dlcihcIndoZWVsXCIsdCkmJnRoaXMub3B0aW9uKFwiem9vbVwiKSYmdGhpcy5vcHRpb24oXCJ3aGVlbFwiKSYmdGhpcy56b29tV2l0aFdoZWVsKHQpfXpvb21XaXRoV2hlZWwodCl7dm9pZCAwPT09dGhpcy5jaGFuZ2VkRGVsdGEmJih0aGlzLmNoYW5nZWREZWx0YT0wKTtjb25zdCBlPU1hdGgubWF4KC0xLE1hdGgubWluKDEsLXQuZGVsdGFZfHwtdC5kZWx0YVh8fHQud2hlZWxEZWx0YXx8LXQuZGV0YWlsKSksaT10aGlzLmNvbnRlbnQuc2NhbGU7bGV0IHM9aSooMTAwK2UqdGhpcy5vcHRpb24oXCJ3aGVlbEZhY3RvclwiKSkvMTAwO2lmKGU8MCYmTWF0aC5hYnMoaS10aGlzLm9wdGlvbihcIm1pblNjYWxlXCIpKTwuMDF8fGU+MCYmTWF0aC5hYnMoaS10aGlzLm9wdGlvbihcIm1heFNjYWxlXCIpKTwuMDE/KHRoaXMuY2hhbmdlZERlbHRhKz1NYXRoLmFicyhlKSxzPWkpOih0aGlzLmNoYW5nZWREZWx0YT0wLHM9TWF0aC5tYXgoTWF0aC5taW4ocyx0aGlzLm9wdGlvbihcIm1heFNjYWxlXCIpKSx0aGlzLm9wdGlvbihcIm1pblNjYWxlXCIpKSksdGhpcy5jaGFuZ2VkRGVsdGE+dGhpcy5vcHRpb24oXCJ3aGVlbExpbWl0XCIpKXJldHVybjtpZih0LnByZXZlbnREZWZhdWx0KCkscz09PWkpcmV0dXJuO2NvbnN0IG49dGhpcy4kY29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPXQuY2xpZW50WC1uLmxlZnQsYT10LmNsaWVudFktbi50b3A7dGhpcy56b29tVG8ocyx7eDpvLHk6YX0pfXpvb21XaXRoQ2xpY2sodCl7Y29uc3QgZT10aGlzLiRjb250ZW50LmdldENsaWVudFJlY3RzKClbMF0saT10LmNsaWVudFgtZS5sZWZ0LHM9dC5jbGllbnRZLWUudG9wO3RoaXMudG9nZ2xlWm9vbSh7eDppLHk6c30pfWF0dGFjaEV2ZW50cygpe3RoaXMuJGNvbnRlbnQuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIix0aGlzLm9uTG9hZCksdGhpcy4kY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLHRoaXMub25XaGVlbCx7cGFzc2l2ZTohMX0pLHRoaXMuJGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLm9uQ2xpY2sse3Bhc3NpdmU6ITF9KSx0aGlzLmluaXRPYnNlcnZlcigpO2NvbnN0IHQ9bmV3IHIodGhpcy4kY29udGFpbmVyLHtzdGFydDooZSxpKT0+e2lmKCF0aGlzLm9wdGlvbihcInRvdWNoXCIpKXJldHVybiExO2lmKCEodGhpcy52ZWxvY2l0eS5zY2FsZTwwKSl7aWYoIXQuY3VycmVudFBvaW50ZXJzLmxlbmd0aCl7aWYoLTEhPT1bXCJCVVRUT05cIixcIlRFWFRBUkVBXCIsXCJPUFRJT05cIixcIklOUFVUXCIsXCJTRUxFQ1RcIixcIlZJREVPXCJdLmluZGV4T2YoaS50YXJnZXQubm9kZU5hbWUpKXJldHVybiExO2lmKHRoaXMub3B0aW9uKFwidGV4dFNlbGVjdGlvblwiKSYmKCh0LGUsaSk9Pntjb25zdCBzPXQuY2hpbGROb2RlcyxuPWRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Zm9yKGxldCB0PTA7dDxzLmxlbmd0aDt0Kyspe2NvbnN0IG89c1t0XTtpZihvLm5vZGVUeXBlIT09Tm9kZS5URVhUX05PREUpY29udGludWU7bi5zZWxlY3ROb2RlQ29udGVudHMobyk7Y29uc3QgYT1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKGU+PWEubGVmdCYmaT49YS50b3AmJmU8PWEucmlnaHQmJmk8PWEuYm90dG9tKXJldHVybiBvfXJldHVybiExfSkoaS50YXJnZXQsaS5jbGllbnRYLGkuY2xpZW50WSkpcmV0dXJuITE7aWYobChpLnRhcmdldCkpcmV0dXJuITF9cmV0dXJuITEhPT10aGlzLnRyaWdnZXIoXCJ0b3VjaFN0YXJ0XCIsaSkmJih0aGlzLnN0YXRlPVwicG9pbnRlcmRvd25cIix0aGlzLnJlc2V0RHJhZ1Bvc2l0aW9uKCksdGhpcy5kcmFnUG9zaXRpb24ubWlkUG9pbnQ9bnVsbCx0aGlzLmRyYWdQb3NpdGlvbi50aW1lPURhdGUubm93KCksITApfX0sbW92ZTooZSxpLHMpPT57aWYoXCJwb2ludGVyZG93blwiIT09dGhpcy5zdGF0ZSlyZXR1cm47aWYoMD09dGhpcy50cmlnZ2VyKFwidG91Y2hNb3ZlXCIscykpcmV0dXJuIHZvaWQgcy5wcmV2ZW50RGVmYXVsdCgpO2lmKGkubGVuZ3RoPDImJjE9PXRoaXMub3B0aW9uKFwicGFuT25seVpvb21lZFwiKSYmdGhpcy5jb250ZW50LndpZHRoPD10aGlzLnZpZXdwb3J0LndpZHRoJiZ0aGlzLmNvbnRlbnQuaGVpZ2h0PD10aGlzLnZpZXdwb3J0LmhlaWdodCYmdGhpcy50cmFuc2Zvcm0uc2NhbGU8PXRoaXMub3B0aW9uKFwiYmFzZVNjYWxlXCIpKXJldHVybjtpZihpLmxlbmd0aD4xJiYoIXRoaXMub3B0aW9uKFwiem9vbVwiKXx8ITE9PT10aGlzLm9wdGlvbihcInBpbmNoVG9ab29tXCIpKSlyZXR1cm47cy5wcmV2ZW50RGVmYXVsdCgpLHMuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3Qgbj1hKGVbMF0sZVsxXSkscj1hKGlbMF0saVsxXSksbD1yLmNsaWVudFgtbi5jbGllbnRYLGg9ci5jbGllbnRZLW4uY2xpZW50WSxjPW8oZVswXSxlWzFdKSxkPW8oaVswXSxpWzFdKSx1PWM/ZC9jOjE7dGhpcy5kcmFnT2Zmc2V0LngrPWwsdGhpcy5kcmFnT2Zmc2V0LnkrPWgsdGhpcy5kcmFnT2Zmc2V0LnNjYWxlKj11LHRoaXMuZHJhZ09mZnNldC50aW1lPURhdGUubm93KCktdGhpcy5kcmFnUG9zaXRpb24udGltZTtjb25zdCBmPTE9PT10aGlzLmRyYWdTdGFydC5zY2FsZSYmdGhpcy5vcHRpb24oXCJsb2NrQXhpc1wiKTtpZihmJiYhdGhpcy5sb2NrQXhpcyl7aWYoTWF0aC5hYnModGhpcy5kcmFnT2Zmc2V0LngpPDYmJk1hdGguYWJzKHRoaXMuZHJhZ09mZnNldC55KTw2KXJldHVybjtpZihcInh5XCI9PT1mKXtjb25zdCB0PU1hdGguYWJzKDE4MCpNYXRoLmF0YW4yKHRoaXMuZHJhZ09mZnNldC55LHRoaXMuZHJhZ09mZnNldC54KS9NYXRoLlBJKTt0aGlzLmxvY2tBeGlzPXQ+NDUmJnQ8MTM1P1wieVwiOlwieFwifWVsc2UgdGhpcy5sb2NrQXhpcz1mfWlmKHRoaXMubG9ja0F4aXMmJih0aGlzLmRyYWdPZmZzZXRbXCJ4XCI9PT10aGlzLmxvY2tBeGlzP1wieVwiOlwieFwiXT0wKSx0aGlzLiRjb250YWluZXIuY2xhc3NMaXN0LmFkZCh0aGlzLm9wdGlvbihcImRyYWdnaW5nQ2xhc3NcIikpLHRoaXMudHJhbnNmb3JtLnNjYWxlPT09dGhpcy5vcHRpb24oXCJiYXNlU2NhbGVcIikmJlwieVwiPT09dGhpcy5sb2NrQXhpc3x8KHRoaXMuZHJhZ1Bvc2l0aW9uLng9dGhpcy5kcmFnU3RhcnQueCt0aGlzLmRyYWdPZmZzZXQueCksdGhpcy50cmFuc2Zvcm0uc2NhbGU9PT10aGlzLm9wdGlvbihcImJhc2VTY2FsZVwiKSYmXCJ4XCI9PT10aGlzLmxvY2tBeGlzfHwodGhpcy5kcmFnUG9zaXRpb24ueT10aGlzLmRyYWdTdGFydC55K3RoaXMuZHJhZ09mZnNldC55KSx0aGlzLmRyYWdQb3NpdGlvbi5zY2FsZT10aGlzLmRyYWdTdGFydC5zY2FsZSp0aGlzLmRyYWdPZmZzZXQuc2NhbGUsaS5sZW5ndGg+MSl7Y29uc3QgZT1hKHQuc3RhcnRQb2ludGVyc1swXSx0LnN0YXJ0UG9pbnRlcnNbMV0pLGk9ZS5jbGllbnRYLXRoaXMuZHJhZ1N0YXJ0LnJlY3QueCxzPWUuY2xpZW50WS10aGlzLmRyYWdTdGFydC5yZWN0Lnkse2RlbHRhWDpuLGRlbHRhWTpvfT10aGlzLmdldFpvb21EZWx0YSh0aGlzLmNvbnRlbnQuc2NhbGUqdGhpcy5kcmFnT2Zmc2V0LnNjYWxlLGkscyk7dGhpcy5kcmFnUG9zaXRpb24ueC09bix0aGlzLmRyYWdQb3NpdGlvbi55LT1vLHRoaXMuZHJhZ1Bvc2l0aW9uLm1pZFBvaW50PXJ9ZWxzZSB0aGlzLnNldERyYWdSZXNpc3RhbmNlKCk7dGhpcy50cmFuc2Zvcm09e3g6dGhpcy5kcmFnUG9zaXRpb24ueCx5OnRoaXMuZHJhZ1Bvc2l0aW9uLnksc2NhbGU6dGhpcy5kcmFnUG9zaXRpb24uc2NhbGV9LHRoaXMuc3RhcnRBbmltYXRpb24oKX0sZW5kOihlLGkpPT57aWYoXCJwb2ludGVyZG93blwiIT09dGhpcy5zdGF0ZSlyZXR1cm47aWYodGhpcy5fZHJhZ09mZnNldD17Li4udGhpcy5kcmFnT2Zmc2V0fSx0LmN1cnJlbnRQb2ludGVycy5sZW5ndGgpcmV0dXJuIHZvaWQgdGhpcy5yZXNldERyYWdQb3NpdGlvbigpO2lmKHRoaXMuc3RhdGU9XCJkZWNlbFwiLHRoaXMuZnJpY3Rpb249dGhpcy5vcHRpb24oXCJkZWNlbEZyaWN0aW9uXCIpLHRoaXMucmVjYWxjdWxhdGVUcmFuc2Zvcm0oKSx0aGlzLiRjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLm9wdGlvbihcImRyYWdnaW5nQ2xhc3NcIikpLCExPT09dGhpcy50cmlnZ2VyKFwidG91Y2hFbmRcIixpKSlyZXR1cm47aWYoXCJkZWNlbFwiIT09dGhpcy5zdGF0ZSlyZXR1cm47Y29uc3Qgcz10aGlzLm9wdGlvbihcIm1pblNjYWxlXCIpO2lmKHRoaXMudHJhbnNmb3JtLnNjYWxlPHMpcmV0dXJuIHZvaWQgdGhpcy56b29tVG8ocyx7ZnJpY3Rpb246LjY0fSk7Y29uc3Qgbj10aGlzLm9wdGlvbihcIm1heFNjYWxlXCIpO2lmKHRoaXMudHJhbnNmb3JtLnNjYWxlLW4+LjAxKXtjb25zdCB0PXRoaXMuZHJhZ1Bvc2l0aW9uLm1pZFBvaW50fHxlLGk9dGhpcy4kY29udGVudC5nZXRDbGllbnRSZWN0cygpWzBdO3RoaXMuem9vbVRvKG4se2ZyaWN0aW9uOi42NCx4OnQuY2xpZW50WC1pLmxlZnQseTp0LmNsaWVudFktaS50b3B9KX1lbHNlO319KTt0aGlzLnBvaW50ZXJUcmFja2VyPXR9aW5pdE9ic2VydmVyKCl7dGhpcy5yZXNpemVPYnNlcnZlcnx8KHRoaXMucmVzaXplT2JzZXJ2ZXI9bmV3IHMoKCgpPT57dGhpcy51cGRhdGVUaW1lcnx8KHRoaXMudXBkYXRlVGltZXI9c2V0VGltZW91dCgoKCk9Pntjb25zdCB0PXRoaXMuJGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0LndpZHRoJiZ0LmhlaWdodD8oKE1hdGguYWJzKHQud2lkdGgtdGhpcy5jb250YWluZXIud2lkdGgpPjF8fE1hdGguYWJzKHQuaGVpZ2h0LXRoaXMuY29udGFpbmVyLmhlaWdodCk+MSkmJih0aGlzLmlzQW5pbWF0aW5nKCkmJnRoaXMuZW5kQW5pbWF0aW9uKCksdGhpcy51cGRhdGVNZXRyaWNzKCksdGhpcy5wYW5Ubyh7eDp0aGlzLmNvbnRlbnQueCx5OnRoaXMuY29udGVudC55LHNjYWxlOnRoaXMub3B0aW9uKFwiYmFzZVNjYWxlXCIpLGZyaWN0aW9uOjB9KSksdGhpcy51cGRhdGVUaW1lcj1udWxsKTp0aGlzLnVwZGF0ZVRpbWVyPW51bGx9KSx0aGlzLnVwZGF0ZVJhdGUpKX0pKSx0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy4kY29udGFpbmVyKSl9cmVzZXREcmFnUG9zaXRpb24oKXt0aGlzLmxvY2tBeGlzPW51bGwsdGhpcy5mcmljdGlvbj10aGlzLm9wdGlvbihcImZyaWN0aW9uXCIpLHRoaXMudmVsb2NpdHk9e3g6MCx5OjAsc2NhbGU6MH07Y29uc3R7eDp0LHk6ZSxzY2FsZTppfT10aGlzLmNvbnRlbnQ7dGhpcy5kcmFnU3RhcnQ9e3JlY3Q6dGhpcy4kY29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx4OnQseTplLHNjYWxlOml9LHRoaXMuZHJhZ1Bvc2l0aW9uPXsuLi50aGlzLmRyYWdQb3NpdGlvbix4OnQseTplLHNjYWxlOml9LHRoaXMuZHJhZ09mZnNldD17eDowLHk6MCxzY2FsZToxLHRpbWU6MH19dXBkYXRlTWV0cmljcyh0KXshMCE9PXQmJnRoaXMudHJpZ2dlcihcImJlZm9yZVVwZGF0ZVwiKTtjb25zdCBlPXRoaXMuJGNvbnRhaW5lcixzPXRoaXMuJGNvbnRlbnQsbj10aGlzLiR2aWV3cG9ydCxvPXRoaXMuJGNvbnRlbnQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50LGE9dGhpcy5vcHRpb24oXCJ6b29tXCIpLHI9dGhpcy5vcHRpb24oXCJyZXNpemVQYXJlbnRcIixhKTtsZXQgbD0oaD10aGlzLiRjb250ZW50LE1hdGgubWF4KHBhcnNlRmxvYXQoaC5uYXR1cmFsV2lkdGh8fDApLHBhcnNlRmxvYXQoaC53aWR0aCYmaC53aWR0aC5iYXNlVmFsJiZoLndpZHRoLmJhc2VWYWwudmFsdWV8fDApLHBhcnNlRmxvYXQoaC5vZmZzZXRXaWR0aHx8MCkscGFyc2VGbG9hdChoLnNjcm9sbFdpZHRofHwwKSkpO3ZhciBoO2xldCBjPSh0PT5NYXRoLm1heChwYXJzZUZsb2F0KHQubmF0dXJhbEhlaWdodHx8MCkscGFyc2VGbG9hdCh0LmhlaWdodCYmdC5oZWlnaHQuYmFzZVZhbCYmdC5oZWlnaHQuYmFzZVZhbC52YWx1ZXx8MCkscGFyc2VGbG9hdCh0Lm9mZnNldEhlaWdodHx8MCkscGFyc2VGbG9hdCh0LnNjcm9sbEhlaWdodHx8MCkpKSh0aGlzLiRjb250ZW50KTtPYmplY3QuYXNzaWduKHMuc3R5bGUse3dpZHRoOlwiXCIsaGVpZ2h0OlwiXCIsbWF4V2lkdGg6XCJcIixtYXhIZWlnaHQ6XCJcIn0pLHImJk9iamVjdC5hc3NpZ24obi5zdHlsZSx7d2lkdGg6XCJcIixoZWlnaHQ6XCJcIn0pO2NvbnN0IGQ9dGhpcy5vcHRpb24oXCJyYXRpb1wiKTtsPWkobCpkKSxjPWkoYypkKTtsZXQgdT1sLGY9Yztjb25zdCBnPXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscD1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG09bj09ZT9wOmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IHk9TWF0aC5tYXgobi5vZmZzZXRXaWR0aCxpKHAud2lkdGgpKSxiPU1hdGgubWF4KG4ub2Zmc2V0SGVpZ2h0LGkocC5oZWlnaHQpKSx2PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG4pO2lmKHktPXBhcnNlRmxvYXQodi5wYWRkaW5nTGVmdCkrcGFyc2VGbG9hdCh2LnBhZGRpbmdSaWdodCksYi09cGFyc2VGbG9hdCh2LnBhZGRpbmdUb3ApK3BhcnNlRmxvYXQodi5wYWRkaW5nQm90dG9tKSx0aGlzLnZpZXdwb3J0LndpZHRoPXksdGhpcy52aWV3cG9ydC5oZWlnaHQ9YixhKXtpZihNYXRoLmFicyhsLWcud2lkdGgpPi4xfHxNYXRoLmFicyhjLWcuaGVpZ2h0KT4uMSl7Y29uc3QgdD0oKHQsZSxpLHMpPT57Y29uc3Qgbj1NYXRoLm1pbihpL3R8fDAscy9lKTtyZXR1cm57d2lkdGg6dCpufHwwLGhlaWdodDplKm58fDB9fSkobCxjLE1hdGgubWluKGwsZy53aWR0aCksTWF0aC5taW4oYyxnLmhlaWdodCkpO3U9aSh0LndpZHRoKSxmPWkodC5oZWlnaHQpfU9iamVjdC5hc3NpZ24ocy5zdHlsZSx7d2lkdGg6YCR7dX1weGAsaGVpZ2h0OmAke2Z9cHhgLHRyYW5zZm9ybTpcIlwifSl9aWYociYmKE9iamVjdC5hc3NpZ24obi5zdHlsZSx7d2lkdGg6YCR7dX1weGAsaGVpZ2h0OmAke2Z9cHhgfSksdGhpcy52aWV3cG9ydD17Li4udGhpcy52aWV3cG9ydCx3aWR0aDp1LGhlaWdodDpmfSksbyYmYSYmXCJmdW5jdGlvblwiIT10eXBlb2YgdGhpcy5vcHRpb25zLm1heFNjYWxlKXtjb25zdCB0PXRoaXMub3B0aW9uKFwibWF4U2NhbGVcIik7dGhpcy5vcHRpb25zLm1heFNjYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGVudC5vcmlnV2lkdGg+MCYmdGhpcy5jb250ZW50LmZpdFdpZHRoPjA/dGhpcy5jb250ZW50Lm9yaWdXaWR0aC90aGlzLmNvbnRlbnQuZml0V2lkdGg6dH19dGhpcy5jb250ZW50PXsuLi50aGlzLmNvbnRlbnQsb3JpZ1dpZHRoOmwsb3JpZ0hlaWdodDpjLGZpdFdpZHRoOnUsZml0SGVpZ2h0OmYsd2lkdGg6dSxoZWlnaHQ6ZixzY2FsZToxLGlzWm9vbWFibGU6YX0sdGhpcy5jb250YWluZXI9e3dpZHRoOm0ud2lkdGgsaGVpZ2h0Om0uaGVpZ2h0fSwhMCE9PXQmJnRoaXMudHJpZ2dlcihcImFmdGVyVXBkYXRlXCIpfXpvb21Jbih0KXt0aGlzLnpvb21Ubyh0aGlzLmNvbnRlbnQuc2NhbGUrKHR8fHRoaXMub3B0aW9uKFwic3RlcFwiKSkpfXpvb21PdXQodCl7dGhpcy56b29tVG8odGhpcy5jb250ZW50LnNjYWxlLSh0fHx0aGlzLm9wdGlvbihcInN0ZXBcIikpKX10b2dnbGVab29tKHQ9e30pe2NvbnN0IGU9dGhpcy5vcHRpb24oXCJtYXhTY2FsZVwiKSxpPXRoaXMub3B0aW9uKFwiYmFzZVNjYWxlXCIpLHM9dGhpcy5jb250ZW50LnNjYWxlPmkrLjUqKGUtaSk/aTplO3RoaXMuem9vbVRvKHMsdCl9em9vbVRvKHQ9dGhpcy5vcHRpb24oXCJiYXNlU2NhbGVcIikse3g6ZT1udWxsLHk6cz1udWxsfT17fSl7dD1NYXRoLm1heChNYXRoLm1pbih0LHRoaXMub3B0aW9uKFwibWF4U2NhbGVcIikpLHRoaXMub3B0aW9uKFwibWluU2NhbGVcIikpO2NvbnN0IG49aSh0aGlzLmNvbnRlbnQuc2NhbGUvKHRoaXMuY29udGVudC53aWR0aC90aGlzLmNvbnRlbnQuZml0V2lkdGgpLDFlNyk7bnVsbD09PWUmJihlPXRoaXMuY29udGVudC53aWR0aCpuKi41KSxudWxsPT09cyYmKHM9dGhpcy5jb250ZW50LmhlaWdodCpuKi41KTtjb25zdHtkZWx0YVg6byxkZWx0YVk6YX09dGhpcy5nZXRab29tRGVsdGEodCxlLHMpO2U9dGhpcy5jb250ZW50LngtbyxzPXRoaXMuY29udGVudC55LWEsdGhpcy5wYW5Ubyh7eDplLHk6cyxzY2FsZTp0LGZyaWN0aW9uOnRoaXMub3B0aW9uKFwiem9vbUZyaWN0aW9uXCIpfSl9Z2V0Wm9vbURlbHRhKHQsZT0wLGk9MCl7Y29uc3Qgcz10aGlzLmNvbnRlbnQuZml0V2lkdGgqdGhpcy5jb250ZW50LnNjYWxlLG49dGhpcy5jb250ZW50LmZpdEhlaWdodCp0aGlzLmNvbnRlbnQuc2NhbGUsbz1lPjAmJnM/ZS9zOjAsYT1pPjAmJm4/aS9uOjA7cmV0dXJue2RlbHRhWDoodGhpcy5jb250ZW50LmZpdFdpZHRoKnQtcykqbyxkZWx0YVk6KHRoaXMuY29udGVudC5maXRIZWlnaHQqdC1uKSphfX1wYW5Ubyh7eDp0PXRoaXMuY29udGVudC54LHk6ZT10aGlzLmNvbnRlbnQueSxzY2FsZTppLGZyaWN0aW9uOnM9dGhpcy5vcHRpb24oXCJmcmljdGlvblwiKSxpZ25vcmVCb3VuZHM6bj0hMX09e30pe2lmKGk9aXx8dGhpcy5jb250ZW50LnNjYWxlfHwxLCFuKXtjb25zdHtib3VuZFg6cyxib3VuZFk6bn09dGhpcy5nZXRCb3VuZHMoaSk7cyYmKHQ9TWF0aC5tYXgoTWF0aC5taW4odCxzLnRvKSxzLmZyb20pKSxuJiYoZT1NYXRoLm1heChNYXRoLm1pbihlLG4udG8pLG4uZnJvbSkpfXRoaXMuZnJpY3Rpb249cyx0aGlzLnRyYW5zZm9ybT17eDp0LHk6ZSxzY2FsZTppfSxzPyh0aGlzLnN0YXRlPVwicGFubmluZ1wiLHRoaXMudmVsb2NpdHk9e3g6KDEvdGhpcy5mcmljdGlvbi0xKSoodC10aGlzLmNvbnRlbnQueCkseTooMS90aGlzLmZyaWN0aW9uLTEpKihlLXRoaXMuY29udGVudC55KSxzY2FsZTooMS90aGlzLmZyaWN0aW9uLTEpKihpLXRoaXMuY29udGVudC5zY2FsZSl9LHRoaXMuc3RhcnRBbmltYXRpb24oKSk6dGhpcy5lbmRBbmltYXRpb24oKX1zdGFydEFuaW1hdGlvbigpe3RoaXMuckFGP2NhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuckFGKTp0aGlzLnRyaWdnZXIoXCJzdGFydEFuaW1hdGlvblwiKSx0aGlzLnJBRj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCgpPT50aGlzLmFuaW1hdGUoKSkpfWFuaW1hdGUoKXtpZih0aGlzLnNldEVkZ2VGb3JjZSgpLHRoaXMuc2V0RHJhZ0ZvcmNlKCksdGhpcy52ZWxvY2l0eS54Kj10aGlzLmZyaWN0aW9uLHRoaXMudmVsb2NpdHkueSo9dGhpcy5mcmljdGlvbix0aGlzLnZlbG9jaXR5LnNjYWxlKj10aGlzLmZyaWN0aW9uLHRoaXMuY29udGVudC54Kz10aGlzLnZlbG9jaXR5LngsdGhpcy5jb250ZW50LnkrPXRoaXMudmVsb2NpdHkueSx0aGlzLmNvbnRlbnQuc2NhbGUrPXRoaXMudmVsb2NpdHkuc2NhbGUsdGhpcy5pc0FuaW1hdGluZygpKXRoaXMuc2V0VHJhbnNmb3JtKCk7ZWxzZSBpZihcInBvaW50ZXJkb3duXCIhPT10aGlzLnN0YXRlKXJldHVybiB0aGlzLmVuZEFuaW1hdGlvbigpLHZvaWQgdGhpcy50cmlnZ2VyKFwiZW5kQW5pbWF0aW9uXCIpO3RoaXMuckFGPXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKCk9PnRoaXMuYW5pbWF0ZSgpKSl9Z2V0Qm91bmRzKHQpe2xldCBlPXRoaXMuYm91bmRYLHM9dGhpcy5ib3VuZFk7aWYodm9pZCAwIT09ZSYmdm9pZCAwIT09cylyZXR1cm57Ym91bmRYOmUsYm91bmRZOnN9O2U9e2Zyb206MCx0bzowfSxzPXtmcm9tOjAsdG86MH0sdD10fHx0aGlzLnRyYW5zZm9ybS5zY2FsZTtjb25zdCBuPXRoaXMuY29udGVudC5maXRXaWR0aCxvPXRoaXMuY29udGVudC5maXRIZWlnaHQsYT1uKnQscj1vKnQsbD10aGlzLnZpZXdwb3J0LndpZHRoLGg9dGhpcy52aWV3cG9ydC5oZWlnaHQ7aWYobjw9bCl7Y29uc3QgdD0uNSoobC1hKSxzPS41KihhLW4pO2UuZnJvbT1pKHQtcyksZS50bz1pKHQrcyl9ZWxzZSBlLmZyb209aShsLWEpO2lmKG88PWgpe2NvbnN0IHQ9LjUqKGgtciksZT0uNSooci1vKTtzLmZyb209aSh0LWUpLHMudG89aSh0K2UpfWVsc2Ugcy5mcm9tPWkoaC1hKTtyZXR1cm57Ym91bmRYOmUsYm91bmRZOnN9fXNldEVkZ2VGb3JjZSgpe2lmKFwiZGVjZWxcIiE9PXRoaXMuc3RhdGUpcmV0dXJuO2NvbnN0IHQ9dGhpcy5vcHRpb24oXCJib3VuY2VGb3JjZVwiKSx7Ym91bmRYOmUsYm91bmRZOml9PXRoaXMuZ2V0Qm91bmRzKE1hdGgubWF4KHRoaXMudHJhbnNmb3JtLnNjYWxlLHRoaXMuY29udGVudC5zY2FsZSkpO2xldCBzLG4sbyxhO2lmKGUmJihzPXRoaXMuY29udGVudC54PGUuZnJvbSxuPXRoaXMuY29udGVudC54PmUudG8pLGkmJihvPXRoaXMuY29udGVudC55PGkuZnJvbSxhPXRoaXMuY29udGVudC55PmkudG8pLHN8fG4pe2xldCBpPSgocz9lLmZyb206ZS50byktdGhpcy5jb250ZW50LngpKnQ7Y29uc3Qgbj10aGlzLmNvbnRlbnQueCsodGhpcy52ZWxvY2l0eS54K2kpL3RoaXMuZnJpY3Rpb247bj49ZS5mcm9tJiZuPD1lLnRvJiYoaSs9dGhpcy52ZWxvY2l0eS54KSx0aGlzLnZlbG9jaXR5Lng9aSx0aGlzLnJlY2FsY3VsYXRlVHJhbnNmb3JtKCl9aWYob3x8YSl7bGV0IGU9KChvP2kuZnJvbTppLnRvKS10aGlzLmNvbnRlbnQueSkqdDtjb25zdCBzPXRoaXMuY29udGVudC55KyhlK3RoaXMudmVsb2NpdHkueSkvdGhpcy5mcmljdGlvbjtzPj1pLmZyb20mJnM8PWkudG8mJihlKz10aGlzLnZlbG9jaXR5LnkpLHRoaXMudmVsb2NpdHkueT1lLHRoaXMucmVjYWxjdWxhdGVUcmFuc2Zvcm0oKX19c2V0RHJhZ1Jlc2lzdGFuY2UoKXtpZihcInBvaW50ZXJkb3duXCIhPT10aGlzLnN0YXRlKXJldHVybjtjb25zdHtib3VuZFg6dCxib3VuZFk6ZX09dGhpcy5nZXRCb3VuZHModGhpcy5kcmFnUG9zaXRpb24uc2NhbGUpO2xldCBpLHMsbixvO2lmKHQmJihpPXRoaXMuZHJhZ1Bvc2l0aW9uLng8dC5mcm9tLHM9dGhpcy5kcmFnUG9zaXRpb24ueD50LnRvKSxlJiYobj10aGlzLmRyYWdQb3NpdGlvbi55PGUuZnJvbSxvPXRoaXMuZHJhZ1Bvc2l0aW9uLnk+ZS50byksKGl8fHMpJiYoIWl8fCFzKSl7Y29uc3QgZT1pP3QuZnJvbTp0LnRvLHM9ZS10aGlzLmRyYWdQb3NpdGlvbi54O3RoaXMuZHJhZ1Bvc2l0aW9uLng9ZS0uMypzfWlmKChufHxvKSYmKCFufHwhbykpe2NvbnN0IHQ9bj9lLmZyb206ZS50byxpPXQtdGhpcy5kcmFnUG9zaXRpb24ueTt0aGlzLmRyYWdQb3NpdGlvbi55PXQtLjMqaX19c2V0RHJhZ0ZvcmNlKCl7XCJwb2ludGVyZG93blwiPT09dGhpcy5zdGF0ZSYmKHRoaXMudmVsb2NpdHkueD10aGlzLmRyYWdQb3NpdGlvbi54LXRoaXMuY29udGVudC54LHRoaXMudmVsb2NpdHkueT10aGlzLmRyYWdQb3NpdGlvbi55LXRoaXMuY29udGVudC55LHRoaXMudmVsb2NpdHkuc2NhbGU9dGhpcy5kcmFnUG9zaXRpb24uc2NhbGUtdGhpcy5jb250ZW50LnNjYWxlKX1yZWNhbGN1bGF0ZVRyYW5zZm9ybSgpe3RoaXMudHJhbnNmb3JtLng9dGhpcy5jb250ZW50LngrdGhpcy52ZWxvY2l0eS54LygxL3RoaXMuZnJpY3Rpb24tMSksdGhpcy50cmFuc2Zvcm0ueT10aGlzLmNvbnRlbnQueSt0aGlzLnZlbG9jaXR5LnkvKDEvdGhpcy5mcmljdGlvbi0xKSx0aGlzLnRyYW5zZm9ybS5zY2FsZT10aGlzLmNvbnRlbnQuc2NhbGUrdGhpcy52ZWxvY2l0eS5zY2FsZS8oMS90aGlzLmZyaWN0aW9uLTEpfWlzQW5pbWF0aW5nKCl7cmV0dXJuISghdGhpcy5mcmljdGlvbnx8IShNYXRoLmFicyh0aGlzLnZlbG9jaXR5LngpPi4wNXx8TWF0aC5hYnModGhpcy52ZWxvY2l0eS55KT4uMDV8fE1hdGguYWJzKHRoaXMudmVsb2NpdHkuc2NhbGUpPi4wNSkpfXNldFRyYW5zZm9ybSh0KXtsZXQgZSxzLG47aWYodD8oZT1pKHRoaXMudHJhbnNmb3JtLngpLHM9aSh0aGlzLnRyYW5zZm9ybS55KSxuPXRoaXMudHJhbnNmb3JtLnNjYWxlLHRoaXMuY29udGVudD17Li4udGhpcy5jb250ZW50LHg6ZSx5OnMsc2NhbGU6bn0pOihlPWkodGhpcy5jb250ZW50LngpLHM9aSh0aGlzLmNvbnRlbnQueSksbj10aGlzLmNvbnRlbnQuc2NhbGUvKHRoaXMuY29udGVudC53aWR0aC90aGlzLmNvbnRlbnQuZml0V2lkdGgpLHRoaXMuY29udGVudD17Li4udGhpcy5jb250ZW50LHg6ZSx5OnN9KSx0aGlzLnRyaWdnZXIoXCJiZWZvcmVUcmFuc2Zvcm1cIiksZT1pKHRoaXMuY29udGVudC54KSxzPWkodGhpcy5jb250ZW50LnkpLHQmJnRoaXMub3B0aW9uKFwiem9vbVwiKSl7bGV0IHQsbzt0PWkodGhpcy5jb250ZW50LmZpdFdpZHRoKm4pLG89aSh0aGlzLmNvbnRlbnQuZml0SGVpZ2h0Km4pLHRoaXMuY29udGVudC53aWR0aD10LHRoaXMuY29udGVudC5oZWlnaHQ9byx0aGlzLnRyYW5zZm9ybT17Li4udGhpcy50cmFuc2Zvcm0sd2lkdGg6dCxoZWlnaHQ6byxzY2FsZTpufSxPYmplY3QuYXNzaWduKHRoaXMuJGNvbnRlbnQuc3R5bGUse3dpZHRoOmAke3R9cHhgLGhlaWdodDpgJHtvfXB4YCxtYXhXaWR0aDpcIm5vbmVcIixtYXhIZWlnaHQ6XCJub25lXCIsdHJhbnNmb3JtOmB0cmFuc2xhdGUzZCgke2V9cHgsICR7c31weCwgMCkgc2NhbGUoMSlgfSl9ZWxzZSB0aGlzLiRjb250ZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlM2QoJHtlfXB4LCAke3N9cHgsIDApIHNjYWxlKCR7bn0pYDt0aGlzLnRyaWdnZXIoXCJhZnRlclRyYW5zZm9ybVwiKX1lbmRBbmltYXRpb24oKXtjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnJBRiksdGhpcy5yQUY9bnVsbCx0aGlzLnZlbG9jaXR5PXt4OjAseTowLHNjYWxlOjB9LHRoaXMuc2V0VHJhbnNmb3JtKCEwKSx0aGlzLnN0YXRlPVwicmVhZHlcIix0aGlzLmhhbmRsZUN1cnNvcigpfWhhbmRsZUN1cnNvcigpe2NvbnN0IHQ9dGhpcy5vcHRpb24oXCJkcmFnZ2FibGVDbGFzc1wiKTt0JiZ0aGlzLm9wdGlvbihcInRvdWNoXCIpJiYoMT09dGhpcy5vcHRpb24oXCJwYW5Pbmx5Wm9vbWVkXCIpJiZ0aGlzLmNvbnRlbnQud2lkdGg8PXRoaXMudmlld3BvcnQud2lkdGgmJnRoaXMuY29udGVudC5oZWlnaHQ8PXRoaXMudmlld3BvcnQuaGVpZ2h0JiZ0aGlzLnRyYW5zZm9ybS5zY2FsZTw9dGhpcy5vcHRpb24oXCJiYXNlU2NhbGVcIik/dGhpcy4kY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUodCk6dGhpcy4kY29udGFpbmVyLmNsYXNzTGlzdC5hZGQodCkpfWRldGFjaEV2ZW50cygpe3RoaXMuJGNvbnRlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIix0aGlzLm9uTG9hZCksdGhpcy4kY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLHRoaXMub25XaGVlbCx7cGFzc2l2ZTohMX0pLHRoaXMuJGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLm9uQ2xpY2sse3Bhc3NpdmU6ITF9KSx0aGlzLnBvaW50ZXJUcmFja2VyJiYodGhpcy5wb2ludGVyVHJhY2tlci5zdG9wKCksdGhpcy5wb2ludGVyVHJhY2tlcj1udWxsKSx0aGlzLnJlc2l6ZU9ic2VydmVyJiYodGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCksdGhpcy5yZXNpemVPYnNlcnZlcj1udWxsKX1kZXN0cm95KCl7XCJkZXN0cm95XCIhPT10aGlzLnN0YXRlJiYodGhpcy5zdGF0ZT1cImRlc3Ryb3lcIixjbGVhclRpbWVvdXQodGhpcy51cGRhdGVUaW1lciksdGhpcy51cGRhdGVUaW1lcj1udWxsLGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuckFGKSx0aGlzLnJBRj1udWxsLHRoaXMuZGV0YWNoRXZlbnRzKCksdGhpcy5kZXRhY2hQbHVnaW5zKCksdGhpcy5yZXNldERyYWdQb3NpdGlvbigpKX19ZC52ZXJzaW9uPVwiNC4wLjAtYmV0YS4yXCIsZC5QbHVnaW5zPXt9O2NvbnN0IHU9KHQsZSk9PntsZXQgaT0wO3JldHVybiBmdW5jdGlvbiguLi5zKXtjb25zdCBuPShuZXcgRGF0ZSkuZ2V0VGltZSgpO2lmKCEobi1pPGUpKXJldHVybiBpPW4sdCguLi5zKX19O2NsYXNzIGZ7Y29uc3RydWN0b3IodCl7dGhpcy4kY29udGFpbmVyPW51bGwsdGhpcy4kcHJldj1udWxsLHRoaXMuJG5leHQ9bnVsbCx0aGlzLmNhcm91c2VsPXQsdGhpcy5vblJlZnJlc2g9dGhpcy5vblJlZnJlc2guYmluZCh0aGlzKX1vcHRpb24odCl7cmV0dXJuIHRoaXMuY2Fyb3VzZWwub3B0aW9uKGBOYXZpZ2F0aW9uLiR7dH1gKX1jcmVhdGVCdXR0b24odCl7Y29uc3QgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIpO2Uuc2V0QXR0cmlidXRlKFwidGl0bGVcIix0aGlzLmNhcm91c2VsLmxvY2FsaXplKGB7eyR7dC50b1VwcGVyQ2FzZSgpfX19YCkpO2NvbnN0IGk9dGhpcy5vcHRpb24oXCJjbGFzc05hbWVzLmJ1dHRvblwiKStcIiBcIit0aGlzLm9wdGlvbihgY2xhc3NOYW1lcy4ke3R9YCk7cmV0dXJuIGUuY2xhc3NMaXN0LmFkZCguLi5pLnNwbGl0KFwiIFwiKSksZS5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiMFwiKSxlLmlubmVySFRNTD10aGlzLmNhcm91c2VsLmxvY2FsaXplKHRoaXMub3B0aW9uKGAke3R9VHBsYCkpLGUuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKGU9PntlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNhcm91c2VsW1wic2xpZGVcIisoXCJuZXh0XCI9PT10P1wiTmV4dFwiOlwiUHJldlwiKV0oKX0pKSxlfWJ1aWxkKCl7dGhpcy4kY29udGFpbmVyfHwodGhpcy4kY29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksdGhpcy4kY29udGFpbmVyLmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb24oXCJjbGFzc05hbWVzLm1haW5cIikpLHRoaXMuY2Fyb3VzZWwuJGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLiRjb250YWluZXIpKSx0aGlzLiRuZXh0fHwodGhpcy4kbmV4dD10aGlzLmNyZWF0ZUJ1dHRvbihcIm5leHRcIiksdGhpcy4kY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuJG5leHQpKSx0aGlzLiRwcmV2fHwodGhpcy4kcHJldj10aGlzLmNyZWF0ZUJ1dHRvbihcInByZXZcIiksdGhpcy4kY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuJHByZXYpKX1vblJlZnJlc2goKXtjb25zdCB0PXRoaXMuY2Fyb3VzZWwucGFnZXMubGVuZ3RoO3Q8PTF8fHQ+MSYmdGhpcy5jYXJvdXNlbC5lbGVtRGltV2lkdGg8dGhpcy5jYXJvdXNlbC53cmFwRGltV2lkdGgmJiFOdW1iZXIuaXNJbnRlZ2VyKHRoaXMuY2Fyb3VzZWwub3B0aW9uKFwic2xpZGVzUGVyUGFnZVwiKSk/dGhpcy5jbGVhbnVwKCk6KHRoaXMuYnVpbGQoKSx0aGlzLiRwcmV2LnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpLHRoaXMuJG5leHQucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIiksdGhpcy5jYXJvdXNlbC5vcHRpb24oXCJpbmZpbml0ZVhcIix0aGlzLmNhcm91c2VsLm9wdGlvbihcImluZmluaXRlXCIpKXx8KHRoaXMuY2Fyb3VzZWwucGFnZTw9MCYmdGhpcy4kcHJldi5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLFwiXCIpLHRoaXMuY2Fyb3VzZWwucGFnZT49dC0xJiZ0aGlzLiRuZXh0LnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsXCJcIikpKX1jbGVhbnVwKCl7dGhpcy4kcHJldiYmdGhpcy4kcHJldi5yZW1vdmUoKSx0aGlzLiRwcmV2PW51bGwsdGhpcy4kbmV4dCYmdGhpcy4kbmV4dC5yZW1vdmUoKSx0aGlzLiRuZXh0PW51bGwsdGhpcy4kY29udGFpbmVyJiZ0aGlzLiRjb250YWluZXIucmVtb3ZlKCksdGhpcy4kY29udGFpbmVyPW51bGx9YXR0YWNoKCl7dGhpcy5jYXJvdXNlbC5vbihcInJlZnJlc2ggY2hhbmdlXCIsdGhpcy5vblJlZnJlc2gpfWRldGFjaCgpe3RoaXMuY2Fyb3VzZWwub2ZmKFwicmVmcmVzaCBjaGFuZ2VcIix0aGlzLm9uUmVmcmVzaCksdGhpcy5jbGVhbnVwKCl9fWYuZGVmYXVsdHM9e3ByZXZUcGw6JzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB0YWJpbmRleD1cIi0xXCI+PHBhdGggZD1cIk0xNSAzbC05IDkgOSA5XCIvPjwvc3ZnPicsbmV4dFRwbDonPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHRhYmluZGV4PVwiLTFcIj48cGF0aCBkPVwiTTkgM2w5IDktOSA5XCIvPjwvc3ZnPicsY2xhc3NOYW1lczp7bWFpbjpcImNhcm91c2VsX19uYXZcIixidXR0b246XCJjYXJvdXNlbF9fYnV0dG9uXCIsbmV4dDpcImlzLW5leHRcIixwcmV2OlwiaXMtcHJldlwifX07Y2xhc3MgZ3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmNhcm91c2VsPXQsdGhpcy5zZWxlY3RlZEluZGV4PW51bGwsdGhpcy5mcmljdGlvbj0wLHRoaXMub25OYXZSZWFkeT10aGlzLm9uTmF2UmVhZHkuYmluZCh0aGlzKSx0aGlzLm9uTmF2Q2xpY2s9dGhpcy5vbk5hdkNsaWNrLmJpbmQodGhpcyksdGhpcy5vbk5hdkNyZWF0ZVNsaWRlPXRoaXMub25OYXZDcmVhdGVTbGlkZS5iaW5kKHRoaXMpLHRoaXMub25UYXJnZXRDaGFuZ2U9dGhpcy5vblRhcmdldENoYW5nZS5iaW5kKHRoaXMpfWFkZEFzVGFyZ2V0Rm9yKHQpe3RoaXMudGFyZ2V0PXRoaXMuY2Fyb3VzZWwsdGhpcy5uYXY9dCx0aGlzLmF0dGFjaEV2ZW50cygpfWFkZEFzTmF2Rm9yKHQpe3RoaXMudGFyZ2V0PXQsdGhpcy5uYXY9dGhpcy5jYXJvdXNlbCx0aGlzLmF0dGFjaEV2ZW50cygpfWF0dGFjaEV2ZW50cygpe3RoaXMubmF2Lm9wdGlvbnMuaW5pdGlhbFNsaWRlPXRoaXMudGFyZ2V0Lm9wdGlvbnMuaW5pdGlhbFBhZ2UsdGhpcy5uYXYub24oXCJyZWFkeVwiLHRoaXMub25OYXZSZWFkeSksdGhpcy5uYXYub24oXCJjcmVhdGVTbGlkZVwiLHRoaXMub25OYXZDcmVhdGVTbGlkZSksdGhpcy5uYXYub24oXCJQYW56b29tLmNsaWNrXCIsdGhpcy5vbk5hdkNsaWNrKSx0aGlzLnRhcmdldC5vbihcImNoYW5nZVwiLHRoaXMub25UYXJnZXRDaGFuZ2UpLHRoaXMudGFyZ2V0Lm9uKFwiUGFuem9vbS5hZnRlclVwZGF0ZVwiLHRoaXMub25UYXJnZXRDaGFuZ2UpfW9uTmF2UmVhZHkoKXt0aGlzLm9uVGFyZ2V0Q2hhbmdlKCEwKX1vbk5hdkNsaWNrKHQsZSxpKXtjb25zdCBzPWkudGFyZ2V0LmNsb3Nlc3QoXCIuY2Fyb3VzZWxfX3NsaWRlXCIpO2lmKCFzKXJldHVybjtpLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49cGFyc2VJbnQocy5kYXRhc2V0LmluZGV4LDEwKSxvPXRoaXMudGFyZ2V0LmZpbmRQYWdlRm9yU2xpZGUobik7dGhpcy50YXJnZXQucGFnZSE9PW8mJnRoaXMudGFyZ2V0LnNsaWRlVG8obyx7ZnJpY3Rpb246dGhpcy5mcmljdGlvbn0pLHRoaXMubWFya1NlbGVjdGVkU2xpZGUobil9b25OYXZDcmVhdGVTbGlkZSh0LGUpe2UuaW5kZXg9PT10aGlzLnNlbGVjdGVkSW5kZXgmJnRoaXMubWFya1NlbGVjdGVkU2xpZGUoZS5pbmRleCl9b25UYXJnZXRDaGFuZ2UoKXtjb25zdCB0PXRoaXMudGFyZ2V0LnBhZ2VzW3RoaXMudGFyZ2V0LnBhZ2VdLmluZGV4ZXNbMF0sZT10aGlzLm5hdi5maW5kUGFnZUZvclNsaWRlKHQpO3RoaXMubmF2LnNsaWRlVG8oZSksdGhpcy5tYXJrU2VsZWN0ZWRTbGlkZSh0KX1tYXJrU2VsZWN0ZWRTbGlkZSh0KXt0aGlzLnNlbGVjdGVkSW5kZXg9dCxbLi4udGhpcy5uYXYuc2xpZGVzXS5maWx0ZXIoKHQ9PnQuJGVsJiZ0LiRlbC5jbGFzc0xpc3QucmVtb3ZlKFwiaXMtbmF2LXNlbGVjdGVkXCIpKSk7Y29uc3QgZT10aGlzLm5hdi5zbGlkZXNbdF07ZSYmZS4kZWwmJmUuJGVsLmNsYXNzTGlzdC5hZGQoXCJpcy1uYXYtc2VsZWN0ZWRcIil9YXR0YWNoKHQpe2NvbnN0IGU9dC5vcHRpb25zLlN5bmM7KGUudGFyZ2V0fHxlLm5hdikmJihlLnRhcmdldD90aGlzLmFkZEFzTmF2Rm9yKGUudGFyZ2V0KTplLm5hdiYmdGhpcy5hZGRBc1RhcmdldEZvcihlLm5hdiksdGhpcy5mcmljdGlvbj1lLmZyaWN0aW9uKX1kZXRhY2goKXt0aGlzLm5hdiYmKHRoaXMubmF2Lm9mZihcInJlYWR5XCIsdGhpcy5vbk5hdlJlYWR5KSx0aGlzLm5hdi5vZmYoXCJQYW56b29tLmNsaWNrXCIsdGhpcy5vbk5hdkNsaWNrKSx0aGlzLm5hdi5vZmYoXCJjcmVhdGVTbGlkZVwiLHRoaXMub25OYXZDcmVhdGVTbGlkZSkpLHRoaXMudGFyZ2V0JiYodGhpcy50YXJnZXQub2ZmKFwiUGFuem9vbS5hZnRlclVwZGF0ZVwiLHRoaXMub25UYXJnZXRDaGFuZ2UpLHRoaXMudGFyZ2V0Lm9mZihcImNoYW5nZVwiLHRoaXMub25UYXJnZXRDaGFuZ2UpKX19Zy5kZWZhdWx0cz17ZnJpY3Rpb246LjkyfTtjb25zdCBwPXtOYXZpZ2F0aW9uOmYsRG90czpjbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmNhcm91c2VsPXQsdGhpcy4kbGlzdD1udWxsLHRoaXMuZXZlbnRzPXtjaGFuZ2U6dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpLHJlZnJlc2g6dGhpcy5vblJlZnJlc2guYmluZCh0aGlzKX19YnVpbGRMaXN0KCl7aWYodGhpcy5jYXJvdXNlbC5wYWdlcy5sZW5ndGg8MilyZXR1cm47Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib2xcIik7cmV0dXJuIHQuY2xhc3NMaXN0LmFkZChcImNhcm91c2VsX19kb3RzXCIpLHQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKHQ9PntpZighKFwicGFnZVwiaW4gdC50YXJnZXQuZGF0YXNldCkpcmV0dXJuO3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IGU9cGFyc2VJbnQodC50YXJnZXQuZGF0YXNldC5wYWdlLDEwKSxpPXRoaXMuY2Fyb3VzZWw7ZSE9PWkucGFnZSYmKGkucGFnZXMubGVuZ3RoPDMmJmkub3B0aW9uKFwiaW5maW5pdGVcIik/aVswPT1lP1wic2xpZGVQcmV2XCI6XCJzbGlkZU5leHRcIl0oKTppLnNsaWRlVG8oZSkpfSkpLHRoaXMuJGxpc3Q9dCx0aGlzLmNhcm91c2VsLiRjb250YWluZXIuYXBwZW5kQ2hpbGQodCksdGhpcy5jYXJvdXNlbC4kY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJoYXMtZG90c1wiKSx0fXJlbW92ZUxpc3QoKXt0aGlzLiRsaXN0JiYodGhpcy4kbGlzdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuJGxpc3QpLHRoaXMuJGxpc3Q9bnVsbCksdGhpcy5jYXJvdXNlbC4kY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoXCJoYXMtZG90c1wiKX1yZWJ1aWxkRG90cygpe2xldCB0PXRoaXMuJGxpc3Q7Y29uc3QgZT0hIXQsaT10aGlzLmNhcm91c2VsLnBhZ2VzLmxlbmd0aDtpZihpPDIpcmV0dXJuIHZvaWQoZSYmdGhpcy5yZW1vdmVMaXN0KCkpO2V8fCh0PXRoaXMuYnVpbGRMaXN0KCkpO2NvbnN0IHM9dGhpcy4kbGlzdC5jaGlsZHJlbi5sZW5ndGg7aWYocz5pKWZvcihsZXQgdD1pO3Q8czt0KyspdGhpcy4kbGlzdC5yZW1vdmVDaGlsZCh0aGlzLiRsaXN0Lmxhc3RDaGlsZCk7ZWxzZXtmb3IobGV0IHQ9czt0PGk7dCsrKXtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKTtlLmNsYXNzTGlzdC5hZGQoXCJjYXJvdXNlbF9fZG90XCIpLGUuZGF0YXNldC5wYWdlPXQsZS5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJidXR0b25cIiksZS5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiMFwiKSxlLnNldEF0dHJpYnV0ZShcInRpdGxlXCIsdGhpcy5jYXJvdXNlbC5sb2NhbGl6ZShcInt7R09UT319XCIsW1tcIiVkXCIsdCsxXV0pKSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsKHQ9Pntjb25zdCBpPXQuY29kZTtsZXQgcztcIkVudGVyXCI9PT1pfHxcIk51bXBhZEVudGVyXCI9PT1pP3M9ZTpcIkFycm93UmlnaHRcIj09PWk/cz1lLm5leHRTaWJsaW5nOlwiQXJyb3dMZWZ0XCI9PT1pJiYocz1lLnByZXZpb3VzU2libGluZykscyYmcy5jbGljaygpfSkpLHRoaXMuJGxpc3QuYXBwZW5kQ2hpbGQoZSl9dGhpcy5zZXRBY3RpdmVEb3QoKX19c2V0QWN0aXZlRG90KCl7aWYoIXRoaXMuJGxpc3QpcmV0dXJuO3RoaXMuJGxpc3QuY2hpbGROb2Rlcy5mb3JFYWNoKCh0PT57dC5jbGFzc0xpc3QucmVtb3ZlKFwiaXMtc2VsZWN0ZWRcIil9KSk7Y29uc3QgdD10aGlzLiRsaXN0LmNoaWxkTm9kZXNbdGhpcy5jYXJvdXNlbC5wYWdlXTt0JiZ0LmNsYXNzTGlzdC5hZGQoXCJpcy1zZWxlY3RlZFwiKX1vbkNoYW5nZSgpe3RoaXMuc2V0QWN0aXZlRG90KCl9b25SZWZyZXNoKCl7dGhpcy5yZWJ1aWxkRG90cygpfWF0dGFjaCgpe3RoaXMuY2Fyb3VzZWwub24odGhpcy5ldmVudHMpfWRldGFjaCgpe3RoaXMucmVtb3ZlTGlzdCgpLHRoaXMuY2Fyb3VzZWwub2ZmKHRoaXMuZXZlbnRzKSx0aGlzLmNhcm91c2VsPW51bGx9fSxTeW5jOmd9LG09e3NsaWRlczpbXSxwcmVsb2FkOjAsc2xpZGVzUGVyUGFnZTpcImF1dG9cIixpbml0aWFsUGFnZTpudWxsLGluaXRpYWxTbGlkZTpudWxsLGZyaWN0aW9uOi45MixjZW50ZXI6ITAsaW5maW5pdGU6ITAsZmlsbDohMCxkcmFnRnJlZTohMSxjbGFzc05hbWVzOnt2aWV3cG9ydDpcImNhcm91c2VsX192aWV3cG9ydFwiLHRyYWNrOlwiY2Fyb3VzZWxfX3RyYWNrXCIsc2xpZGU6XCJjYXJvdXNlbF9fc2xpZGVcIixzbGlkZVNlbGVjdGVkOlwiaXMtc2VsZWN0ZWRcIn0sbDEwbjp7TkVYVDpcIk5leHQgc2xpZGVcIixQUkVWOlwiUHJldmlvdXMgc2xpZGVcIixHT1RPOlwiR28gdG8gc2xpZGUgJWRcIn19O2NsYXNzIHkgZXh0ZW5kcyBoe2NvbnN0cnVjdG9yKHQsaT17fSl7aWYoc3VwZXIoaT1lKCEwLHt9LG0saSkpLHRoaXMuc3RhdGU9XCJpbml0XCIsdGhpcy4kY29udGFpbmVyPXQsISh0aGlzLiRjb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpdGhyb3cgbmV3IEVycm9yKFwiTm8gcm9vdCBlbGVtZW50IHByb3ZpZGVkXCIpO3RoaXMuc2xpZGVOZXh0PXUodGhpcy5zbGlkZU5leHQuYmluZCh0aGlzKSwyNTApLHRoaXMuc2xpZGVQcmV2PXUodGhpcy5zbGlkZVByZXYuYmluZCh0aGlzKSwyNTApLHRoaXMuaW5pdCgpfWluaXQoKXt0aGlzLnBhZ2VzPVtdLHRoaXMucGFnZT10aGlzLnBhZ2VJbmRleD1udWxsLHRoaXMucHJldlBhZ2U9dGhpcy5wcmV2UGFnZUluZGV4PW51bGwsdGhpcy5hdHRhY2hQbHVnaW5zKHkuUGx1Z2lucyksdGhpcy50cmlnZ2VyKFwiaW5pdFwiKSx0aGlzLmluaXRMYXlvdXQoKSx0aGlzLmluaXRTbGlkZXMoKSx0aGlzLnVwZGF0ZU1ldHJpY3MoKSx0aGlzLiR0cmFjay5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZTNkKCR7LTEqdGhpcy5wYWdlc1t0aGlzLnBhZ2VdLmxlZnR9cHgsIDBweCwgMCkgc2NhbGUoMSlgLHRoaXMubWFuYWdlU2xpZGVWaXNpYmxpdHkoKSx0aGlzLmluaXRQYW56b29tKCksdGhpcy5zdGF0ZT1cInJlYWR5XCIsdGhpcy50cmlnZ2VyKFwicmVhZHlcIil9aW5pdExheW91dCgpe2NvbnN0IHQ9dGhpcy5vcHRpb24oXCJjbGFzc05hbWVzXCIpO3RoaXMuJHZpZXdwb3J0PXRoaXMub3B0aW9uKFwidmlld3BvcnRcIil8fHRoaXMuJGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLlwiK3Qudmlld3BvcnQpLHRoaXMuJHZpZXdwb3J0fHwodGhpcy4kdmlld3BvcnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLiR2aWV3cG9ydC5jbGFzc0xpc3QuYWRkKHQudmlld3BvcnQpLHRoaXMuJHZpZXdwb3J0LmFwcGVuZCguLi50aGlzLiRjb250YWluZXIuY2hpbGROb2RlcyksdGhpcy4kY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuJHZpZXdwb3J0KSksdGhpcy4kdHJhY2s9dGhpcy5vcHRpb24oXCJ0cmFja1wiKXx8dGhpcy4kY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuXCIrdC50cmFjayksdGhpcy4kdHJhY2t8fCh0aGlzLiR0cmFjaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLHRoaXMuJHRyYWNrLmNsYXNzTGlzdC5hZGQodC50cmFjayksdGhpcy4kdHJhY2suYXBwZW5kKC4uLnRoaXMuJHZpZXdwb3J0LmNoaWxkTm9kZXMpLHRoaXMuJHZpZXdwb3J0LmFwcGVuZENoaWxkKHRoaXMuJHRyYWNrKSl9aW5pdFNsaWRlcygpe3RoaXMuc2xpZGVzPVtdO3RoaXMuJHZpZXdwb3J0LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuXCIrdGhpcy5vcHRpb24oXCJjbGFzc05hbWVzLnNsaWRlXCIpKS5mb3JFYWNoKCh0PT57Y29uc3QgZT17JGVsOnQsaXNEb206ITB9O3RoaXMuc2xpZGVzLnB1c2goZSksdGhpcy50cmlnZ2VyKFwiY3JlYXRlU2xpZGVcIixlLHRoaXMuc2xpZGVzLmxlbmd0aCl9KSksQXJyYXkuaXNBcnJheSh0aGlzLm9wdGlvbnMuc2xpZGVzKSYmKHRoaXMuc2xpZGVzPWUoITAsWy4uLnRoaXMuc2xpZGVzXSx0aGlzLm9wdGlvbnMuc2xpZGVzKSl9dXBkYXRlTWV0cmljcygpe2xldCB0LGU9MCxzPVtdO3RoaXMuc2xpZGVzLmZvckVhY2goKChpLG4pPT57Y29uc3Qgbz1pLiRlbCxhPWkuaXNEb218fCF0P3RoaXMuZ2V0U2xpZGVNZXRyaWNzKG8pOnQ7aS5pbmRleD1uLGkud2lkdGg9YSxpLmxlZnQ9ZSx0PWEsZSs9YSxzLnB1c2gobil9KSk7bGV0IG49TWF0aC5tYXgodGhpcy4kdHJhY2sub2Zmc2V0V2lkdGgsaSh0aGlzLiR0cmFjay5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCkpLG89d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy4kdHJhY2spO24tPXBhcnNlRmxvYXQoby5wYWRkaW5nTGVmdCkrcGFyc2VGbG9hdChvLnBhZGRpbmdSaWdodCksdGhpcy5jb250ZW50V2lkdGg9ZSx0aGlzLnZpZXdwb3J0V2lkdGg9bjtjb25zdCBhPVtdLHI9dGhpcy5vcHRpb24oXCJzbGlkZXNQZXJQYWdlXCIpO2lmKE51bWJlci5pc0ludGVnZXIocikmJmU+bilmb3IobGV0IHQ9MDt0PHRoaXMuc2xpZGVzLmxlbmd0aDt0Kz1yKWEucHVzaCh7aW5kZXhlczpzLnNsaWNlKHQsdCtyKSxzbGlkZXM6dGhpcy5zbGlkZXMuc2xpY2UodCx0K3IpfSk7ZWxzZXtsZXQgdD0wLGU9MDtmb3IobGV0IGk9MDtpPHRoaXMuc2xpZGVzLmxlbmd0aDtpKz0xKXtsZXQgcz10aGlzLnNsaWRlc1tpXTsoIWEubGVuZ3RofHxlK3Mud2lkdGg+bikmJihhLnB1c2goe2luZGV4ZXM6W10sc2xpZGVzOltdfSksdD1hLmxlbmd0aC0xLGU9MCksZSs9cy53aWR0aCxhW3RdLmluZGV4ZXMucHVzaChpKSxhW3RdLnNsaWRlcy5wdXNoKHMpfX1jb25zdCBsPXRoaXMub3B0aW9uKFwiY2VudGVyXCIpLGg9dGhpcy5vcHRpb24oXCJmaWxsXCIpO2EuZm9yRWFjaCgoKHQsaSk9Pnt0LmluZGV4PWksdC53aWR0aD10LnNsaWRlcy5yZWR1Y2UoKCh0LGUpPT50K2Uud2lkdGgpLDApLHQubGVmdD10LnNsaWRlc1swXS5sZWZ0LGwmJih0LmxlZnQrPS41KihuLXQud2lkdGgpKi0xKSxoJiYhdGhpcy5vcHRpb24oXCJpbmZpbml0ZVhcIix0aGlzLm9wdGlvbihcImluZmluaXRlXCIpKSYmZT5uJiYodC5sZWZ0PU1hdGgubWF4KHQubGVmdCwwKSx0LmxlZnQ9TWF0aC5taW4odC5sZWZ0LGUtbikpfSkpO2NvbnN0IGM9W107bGV0IGQ7YS5mb3JFYWNoKCh0PT57Y29uc3QgZT17Li4udH07ZCYmZS5sZWZ0PT09ZC5sZWZ0PyhkLndpZHRoKz1lLndpZHRoLGQuc2xpZGVzPVsuLi5kLnNsaWRlcywuLi5lLnNsaWRlc10sZC5pbmRleGVzPVsuLi5kLmluZGV4ZXMsLi4uZS5pbmRleGVzXSk6KGUuaW5kZXg9Yy5sZW5ndGgsZD1lLGMucHVzaChlKSl9KSksdGhpcy5wYWdlcz1jO2xldCB1PXRoaXMucGFnZTtpZihudWxsPT09dSl7Y29uc3QgdD10aGlzLm9wdGlvbihcImluaXRpYWxTbGlkZVwiKTt1PW51bGwhPT10P3RoaXMuZmluZFBhZ2VGb3JTbGlkZSh0KTp0aGlzLm9wdGlvbihcImluaXRpYWxQYWdlXCIsMCksY1t1XXx8KHU9Yy5sZW5ndGgmJnU+Yy5sZW5ndGg/Y1tjLmxlbmd0aC0xXS5pbmRleDowKSx0aGlzLnBhZ2U9dSx0aGlzLnBhZ2VJbmRleD11fXRoaXMudXBkYXRlUGFuem9vbSgpLHRoaXMudHJpZ2dlcihcInJlZnJlc2hcIil9Z2V0U2xpZGVNZXRyaWNzKHQpe2lmKCF0KXtjb25zdCBlPXRoaXMuc2xpZGVzWzBdOyh0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmRhdGFzZXQuaXNUZXN0RWw9MSx0LnN0eWxlLnZpc2liaWxpdHk9XCJoaWRkZW5cIix0LmNsYXNzTGlzdC5hZGQodGhpcy5vcHRpb24oXCJjbGFzc05hbWVzLnNsaWRlXCIpKSxlLmN1c3RvbUNsYXNzJiZ0LmNsYXNzTGlzdC5hZGQoLi4uZS5jdXN0b21DbGFzcy5zcGxpdChcIiBcIikpLHRoaXMuJHRyYWNrLnByZXBlbmQodCl9bGV0IGU9TWF0aC5tYXgodC5vZmZzZXRXaWR0aCxpKHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpKTtjb25zdCBzPXQuY3VycmVudFN0eWxlfHx3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0KTtyZXR1cm4gZT1lKyhwYXJzZUZsb2F0KHMubWFyZ2luTGVmdCl8fDApKyhwYXJzZUZsb2F0KHMubWFyZ2luUmlnaHQpfHwwKSx0LmRhdGFzZXQuaXNUZXN0RWwmJnQucmVtb3ZlKCksZX1maW5kUGFnZUZvclNsaWRlKHQpe2NvbnN0IGU9dGhpcy5wYWdlcy5maW5kKChlPT5lLmluZGV4ZXMuaW5kZXhPZih0KT4tMSkpO3JldHVybiBlP2UuaW5kZXg6bnVsbH1zbGlkZU5leHQoKXt0aGlzLnNsaWRlVG8odGhpcy5wYWdlSW5kZXgrMSl9c2xpZGVQcmV2KCl7dGhpcy5zbGlkZVRvKHRoaXMucGFnZUluZGV4LTEpfXNsaWRlVG8odCxlPXt9KXtjb25zdHt4Omk9LTEqdGhpcy5zZXRQYWdlKHQsITApLHk6cz0wLGZyaWN0aW9uOm49dGhpcy5vcHRpb24oXCJmcmljdGlvblwiKX09ZTt0aGlzLlBhbnpvb20uY29udGVudC54PT09aSYmIXRoaXMuUGFuem9vbS52ZWxvY2l0eS54JiZufHwodGhpcy5QYW56b29tLnBhblRvKHt4OmkseTpzLGZyaWN0aW9uOm4saWdub3JlQm91bmRzOiEwfSksXCJyZWFkeVwiPT09dGhpcy5zdGF0ZSYmXCJyZWFkeVwiPT09dGhpcy5QYW56b29tLnN0YXRlJiZ0aGlzLnRyaWdnZXIoXCJzZXR0bGVcIikpfWluaXRQYW56b29tKCl7dGhpcy5QYW56b29tJiZ0aGlzLlBhbnpvb20uZGVzdHJveSgpO2NvbnN0IHQ9ZSghMCx7fSx7Y29udGVudDp0aGlzLiR0cmFjayx3cmFwSW5uZXI6ITEscmVzaXplUGFyZW50OiExLHpvb206ITEsY2xpY2s6ITEsbG9ja0F4aXM6XCJ4XCIseDotMSp0aGlzLnBhZ2VzW3RoaXMucGFnZV0ubGVmdCxjZW50ZXJPblN0YXJ0OiExLHRleHRTZWxlY3Rpb246KCk9PnRoaXMub3B0aW9uKFwidGV4dFNlbGVjdGlvblwiLCExKSxwYW5Pbmx5Wm9vbWVkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGVudC53aWR0aDw9dGhpcy52aWV3cG9ydC53aWR0aH19LHRoaXMub3B0aW9uKFwiUGFuem9vbVwiKSk7dGhpcy5QYW56b29tPW5ldyBkKHRoaXMuJGNvbnRhaW5lcix0KSx0aGlzLlBhbnpvb20ub24oe1wiKlwiOih0LC4uLmUpPT50aGlzLnRyaWdnZXIoYFBhbnpvb20uJHt0fWAsLi4uZSksYWZ0ZXJVcGRhdGU6KCk9Pnt0aGlzLnVwZGF0ZVBhZ2UoKX0sYmVmb3JlVHJhbnNmb3JtOnRoaXMub25CZWZvcmVUcmFuc2Zvcm0uYmluZCh0aGlzKSx0b3VjaEVuZDp0aGlzLm9uVG91Y2hFbmQuYmluZCh0aGlzKSxlbmRBbmltYXRpb246KCk9Pnt0aGlzLnRyaWdnZXIoXCJzZXR0bGVcIil9fSksdGhpcy51cGRhdGVNZXRyaWNzKCksdGhpcy5tYW5hZ2VTbGlkZVZpc2libGl0eSgpfXVwZGF0ZVBhbnpvb20oKXt0aGlzLlBhbnpvb20mJih0aGlzLlBhbnpvb20uY29udGVudD17Li4udGhpcy5QYW56b29tLmNvbnRlbnQsZml0V2lkdGg6dGhpcy5jb250ZW50V2lkdGgsb3JpZ1dpZHRoOnRoaXMuY29udGVudFdpZHRoLHdpZHRoOnRoaXMuY29udGVudFdpZHRofSx0aGlzLnBhZ2VzLmxlbmd0aD4xJiZ0aGlzLm9wdGlvbihcImluZmluaXRlWFwiLHRoaXMub3B0aW9uKFwiaW5maW5pdGVcIikpP3RoaXMuUGFuem9vbS5ib3VuZFg9bnVsbDp0aGlzLlBhbnpvb20uYm91bmRYPXtmcm9tOi0xKnRoaXMucGFnZXNbdGhpcy5wYWdlcy5sZW5ndGgtMV0ubGVmdCx0bzotMSp0aGlzLnBhZ2VzWzBdLmxlZnR9LHRoaXMub3B0aW9uKFwiaW5maW5pdGVZXCIsdGhpcy5vcHRpb24oXCJpbmZpbml0ZVwiKSk/dGhpcy5QYW56b29tLmJvdW5kWT1udWxsOnRoaXMuUGFuem9vbS5ib3VuZFk9e2Zyb206MCx0bzowfSx0aGlzLlBhbnpvb20uaGFuZGxlQ3Vyc29yKCkpfW1hbmFnZVNsaWRlVmlzaWJsaXR5KCl7Y29uc3QgdD10aGlzLmNvbnRlbnRXaWR0aCxlPXRoaXMudmlld3BvcnRXaWR0aDtsZXQgaT10aGlzLlBhbnpvb20/LTEqdGhpcy5QYW56b29tLmNvbnRlbnQueDp0aGlzLnBhZ2VzW3RoaXMucGFnZV0ubGVmdDtjb25zdCBzPXRoaXMub3B0aW9uKFwicHJlbG9hZFwiKSxuPXRoaXMub3B0aW9uKFwiaW5maW5pdGVYXCIsdGhpcy5vcHRpb24oXCJpbmZpbml0ZVwiKSksbz1wYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuJHZpZXdwb3J0LG51bGwpLmdldFByb3BlcnR5VmFsdWUoXCJwYWRkaW5nLWxlZnRcIikpLGE9cGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiR2aWV3cG9ydCxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKFwicGFkZGluZy1yaWdodFwiKSk7dGhpcy5zbGlkZXMuZm9yRWFjaCgocj0+e2xldCBsLGgsYz0wO2w9aS1vLGg9aStlK2EsbC09cyooZStvK2EpLGgrPXMqKGUrbythKTtjb25zdCBkPXIubGVmdCtyLndpZHRoPmwmJnIubGVmdDxoO2w9aSt0LW8saD1pK3QrZSthLGwtPXMqKGUrbythKTtjb25zdCB1PW4mJnIubGVmdCtyLndpZHRoPmwmJnIubGVmdDxoO2w9aS10LW8saD1pLXQrZSthLGwtPXMqKGUrbythKTtjb25zdCBmPW4mJnIubGVmdCtyLndpZHRoPmwmJnIubGVmdDxoO3V8fGR8fGY/KHRoaXMuY3JlYXRlU2xpZGVFbChyKSxkJiYoYz0wKSx1JiYoYz0tMSksZiYmKGM9MSksci5sZWZ0K3Iud2lkdGg+aSYmci5sZWZ0PD1pK2UrYSYmKGM9MCkpOnRoaXMucmVtb3ZlU2xpZGVFbChyKSxyLmhhc0RpZmY9Y30pKTtsZXQgcj0wLGw9MDt0aGlzLnNsaWRlcy5mb3JFYWNoKCgoZSxpKT0+e2xldCBzPTA7ZS4kZWw/KGkhPT1yfHxlLmhhc0RpZmY/cz1sK2UuaGFzRGlmZip0Omw9MCxlLiRlbC5zdHlsZS5sZWZ0PU1hdGguYWJzKHMpPi4xP2Ake2wrZS5oYXNEaWZmKnR9cHhgOlwiXCIscisrKTpsKz1lLndpZHRofSkpLHRoaXMubWFya1NlbGVjdGVkU2xpZGVzKCl9Y3JlYXRlU2xpZGVFbCh0KXtpZighdClyZXR1cm47aWYodC4kZWwpe2lmKHBhcnNlSW50KHQuJGVsLmRhdGFzZXQuaW5kZXgsMTApIT09dC5pbmRleCl7dC4kZWwuZGF0YXNldC5pbmRleD10LmluZGV4O2xldCBlO3QuJGVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1sYXp5LXNyY11cIikuZm9yRWFjaCgodD0+e2xldCBlPXQuZGF0YXNldC5sYXp5U3JjO3QgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P3Quc3JjPWU6dC5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2U9YHVybCgnJHtlfScpYH0pKSwoZT10LiRlbC5kYXRhc2V0LmxhenlTcmMpJiYodC4kZWwuc3R5bGUuYmFja2dyb3VuZEltYWdlPWB1cmwoJyR7ZX0nKWApLHQuc3RhdGU9XCJyZWFkeVwifXJldHVybn1jb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ZS5kYXRhc2V0LmluZGV4PXQuaW5kZXgsZS5jbGFzc0xpc3QuYWRkKHRoaXMub3B0aW9uKFwiY2xhc3NOYW1lcy5zbGlkZVwiKSksdC5jdXN0b21DbGFzcyYmZS5jbGFzc0xpc3QuYWRkKC4uLnQuY3VzdG9tQ2xhc3Muc3BsaXQoXCIgXCIpKSx0Lmh0bWwmJihlLmlubmVySFRNTD10Lmh0bWwpO2NvbnN0IGk9W107dGhpcy5zbGlkZXMuZm9yRWFjaCgoKHQsZSk9Pnt0LiRlbCYmaS5wdXNoKGUpfSkpO2NvbnN0IHM9dC5pbmRleDtsZXQgbj1udWxsO2lmKGkubGVuZ3RoKXtsZXQgdD1pLnJlZHVjZSgoKHQsZSk9Pk1hdGguYWJzKGUtcyk8TWF0aC5hYnModC1zKT9lOnQpKTtuPXRoaXMuc2xpZGVzW3RdfXJldHVybiB0aGlzLiR0cmFjay5pbnNlcnRCZWZvcmUoZSxuJiZuLiRlbD9uLmluZGV4PHQuaW5kZXg/bi4kZWwubmV4dFNpYmxpbmc6bi4kZWw6bnVsbCksdC4kZWw9ZSx0aGlzLnRyaWdnZXIoXCJjcmVhdGVTbGlkZVwiLHQscyksdH1yZW1vdmVTbGlkZUVsKHQpe3QuJGVsJiYhdC5pc0RvbSYmKHRoaXMudHJpZ2dlcihcInJlbW92ZVNsaWRlXCIsdCksdC4kZWwucmVtb3ZlKCksdC4kZWw9bnVsbCl9bWFya1NlbGVjdGVkU2xpZGVzKCl7Y29uc3QgdD10aGlzLm9wdGlvbihcImNsYXNzTmFtZXMuc2xpZGVTZWxlY3RlZFwiKSxlPVwiYXJpYS1oaWRkZW5cIjt0aGlzLnNsaWRlcy5mb3JFYWNoKCgoaSxzKT0+e2NvbnN0IG49aS4kZWw7aWYoIW4pcmV0dXJuO2NvbnN0IG89dGhpcy5wYWdlc1t0aGlzLnBhZ2VdO28mJm8uaW5kZXhlcyYmby5pbmRleGVzLmluZGV4T2Yocyk+LTE/KHQmJiFuLmNsYXNzTGlzdC5jb250YWlucyh0KSYmKG4uY2xhc3NMaXN0LmFkZCh0KSx0aGlzLnRyaWdnZXIoXCJzZWxlY3RTbGlkZVwiLGkpKSxuLnJlbW92ZUF0dHJpYnV0ZShlKSk6KHQmJm4uY2xhc3NMaXN0LmNvbnRhaW5zKHQpJiYobi5jbGFzc0xpc3QucmVtb3ZlKHQpLHRoaXMudHJpZ2dlcihcInVuc2VsZWN0U2xpZGVcIixpKSksbi5zZXRBdHRyaWJ1dGUoZSwhMCkpfSkpfXVwZGF0ZVBhZ2UoKXt0aGlzLnVwZGF0ZU1ldHJpY3MoKSx0aGlzLnNsaWRlVG8odGhpcy5wYWdlLHtmcmljdGlvbjowfSl9b25CZWZvcmVUcmFuc2Zvcm0oKXt0aGlzLm9wdGlvbihcImluZmluaXRlWFwiLHRoaXMub3B0aW9uKFwiaW5maW5pdGVcIikpJiZ0aGlzLm1hbmFnZUluZmluaXRlVHJhY2soKSx0aGlzLm1hbmFnZVNsaWRlVmlzaWJsaXR5KCl9bWFuYWdlSW5maW5pdGVUcmFjaygpe2NvbnN0IHQ9dGhpcy5jb250ZW50V2lkdGgsZT10aGlzLnZpZXdwb3J0V2lkdGg7aWYoIXRoaXMub3B0aW9uKFwiaW5maW5pdGVYXCIsdGhpcy5vcHRpb24oXCJpbmZpbml0ZVwiKSl8fHRoaXMucGFnZXMubGVuZ3RoPDJ8fHQ8ZSlyZXR1cm47Y29uc3QgaT10aGlzLlBhbnpvb207bGV0IHM9ITE7cmV0dXJuIGkuY29udGVudC54PC0xKih0LWUpJiYoaS5jb250ZW50LngrPXQsdGhpcy5wYWdlSW5kZXg9dGhpcy5wYWdlSW5kZXgtdGhpcy5wYWdlcy5sZW5ndGgscz0hMCksaS5jb250ZW50Lng+ZSYmKGkuY29udGVudC54LT10LHRoaXMucGFnZUluZGV4PXRoaXMucGFnZUluZGV4K3RoaXMucGFnZXMubGVuZ3RoLHM9ITApLHMmJlwicG9pbnRlcmRvd25cIj09PWkuc3RhdGUmJmkucmVzZXREcmFnUG9zaXRpb24oKSxzfW9uVG91Y2hFbmQodCxlKXtjb25zdCBpPXRoaXMub3B0aW9uKFwiZHJhZ0ZyZWVcIik7aWYoIWkmJnRoaXMucGFnZXMubGVuZ3RoPjEmJnQuZHJhZ09mZnNldC50aW1lPDM1MCYmTWF0aC5hYnModC5kcmFnT2Zmc2V0LnkpPDEmJk1hdGguYWJzKHQuZHJhZ09mZnNldC54KT41KXRoaXNbdC5kcmFnT2Zmc2V0Lng8MD9cInNsaWRlTmV4dFwiOlwic2xpZGVQcmV2XCJdKCk7ZWxzZSBpZihpKXtjb25zdFssZV09dGhpcy5nZXRQYWdlRnJvbVBvc2l0aW9uKC0xKnQudHJhbnNmb3JtLngpO3RoaXMuc2V0UGFnZShlKX1lbHNlIHRoaXMuc2xpZGVUb0Nsb3Nlc3QoKX1zbGlkZVRvQ2xvc2VzdCh0PXt9KXtsZXRbLGVdPXRoaXMuZ2V0UGFnZUZyb21Qb3NpdGlvbigtMSp0aGlzLlBhbnpvb20uY29udGVudC54KTt0aGlzLnNsaWRlVG8oZSx0KX1nZXRQYWdlRnJvbVBvc2l0aW9uKHQpe2NvbnN0IGU9dGhpcy5wYWdlcy5sZW5ndGg7dGhpcy5vcHRpb24oXCJjZW50ZXJcIikmJih0Kz0uNSp0aGlzLnZpZXdwb3J0V2lkdGgpO2NvbnN0IGk9TWF0aC5mbG9vcih0L3RoaXMuY29udGVudFdpZHRoKTt0LT1pKnRoaXMuY29udGVudFdpZHRoO2xldCBzPXRoaXMuc2xpZGVzLmZpbmQoKGU9PmUubGVmdDw9dCYmZS5sZWZ0K2Uud2lkdGg+dCkpO2lmKHMpe2xldCB0PXRoaXMuZmluZFBhZ2VGb3JTbGlkZShzLmluZGV4KTtyZXR1cm5bdCx0K2kqZV19cmV0dXJuWzAsMF19c2V0UGFnZSh0LGUpe2xldCBpPTAscz1wYXJzZUludCh0LDEwKXx8MDtjb25zdCBuPXRoaXMucGFnZSxvPXRoaXMucGFnZUluZGV4LGE9dGhpcy5wYWdlcy5sZW5ndGgscj10aGlzLmNvbnRlbnRXaWR0aCxsPXRoaXMudmlld3BvcnRXaWR0aDtpZih0PShzJWErYSklYSx0aGlzLm9wdGlvbihcImluZmluaXRlWFwiLHRoaXMub3B0aW9uKFwiaW5maW5pdGVcIikpJiZyPmwpe2NvbnN0IG49TWF0aC5mbG9vcihzL2EpfHwwLG89cjtpZihpPXRoaXMucGFnZXNbdF0ubGVmdCtuKm8sITA9PT1lJiZhPjIpe2xldCB0PS0xKnRoaXMuUGFuem9vbS5jb250ZW50Lng7Y29uc3QgZT1pLW8sbj1pK28scj1NYXRoLmFicyh0LWkpLGw9TWF0aC5hYnModC1lKSxoPU1hdGguYWJzKHQtbik7aDxyJiZoPD1sPyhpPW4scys9YSk6bDxyJiZsPGgmJihpPWUscy09YSl9fWVsc2UgdD1zPU1hdGgubWF4KDAsTWF0aC5taW4ocyxhLTEpKSxpPXRoaXMucGFnZXNbdF0ubGVmdDtyZXR1cm4gdGhpcy5wYWdlPXQsdGhpcy5wYWdlSW5kZXg9cyxudWxsIT09biYmdCE9PW4mJih0aGlzLnByZXZQYWdlPW4sdGhpcy5wcmV2UGFnZUluZGV4PW8sdGhpcy50cmlnZ2VyKFwiY2hhbmdlXCIsdCxuKSksaX1kZXN0cm95KCl7dGhpcy5zdGF0ZT1cImRlc3Ryb3lcIix0aGlzLnNsaWRlcy5mb3JFYWNoKCh0PT57dGhpcy5yZW1vdmVTbGlkZUVsKHQpfSkpLHRoaXMuc2xpZGVzPVtdLHRoaXMuUGFuem9vbS5kZXN0cm95KCksdGhpcy5kZXRhY2hQbHVnaW5zKCl9fXkudmVyc2lvbj1cIjQuMC4wLWJldGEuMlwiLHkuUGx1Z2lucz1wO2NvbnN0IGI9ISEoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93LmRvY3VtZW50JiZ3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCYmd2luZG93LmRvY3VtZW50LmJvZHkpO2NsYXNzIHZ7Y29uc3RydWN0b3IodCl7dGhpcy5mYW5jeWJveD10LHRoaXMuJGNvbnRhaW5lcj1udWxsLHRoaXMuc3RhdGU9XCJpbml0XCI7Zm9yKGNvbnN0IHQgb2ZbXCJvblByZXBhcmVcIixcIm9uQ2xvc2luZ1wiLFwib25LZXlkb3duXCJdKXRoaXNbdF09dGhpc1t0XS5iaW5kKHRoaXMpO3RoaXMuZXZlbnRzPXtwcmVwYXJlOnRoaXMub25QcmVwYXJlLGNsb3Npbmc6dGhpcy5vbkNsb3Npbmcsa2V5ZG93bjp0aGlzLm9uS2V5ZG93bn19b25QcmVwYXJlKCl7dGhpcy5nZXRTbGlkZXMoKS5sZW5ndGg8dGhpcy5mYW5jeWJveC5vcHRpb24oXCJUaHVtYnMubWluU2xpZGVDb3VudFwiKT90aGlzLnN0YXRlPVwiZGlzYWJsZWRcIjohMD09PXRoaXMuZmFuY3lib3gub3B0aW9uKFwiVGh1bWJzLmF1dG9TdGFydFwiKSYmdGhpcy5mYW5jeWJveC5DYXJvdXNlbC5QYW56b29tLmNvbnRlbnQuaGVpZ2h0Pj10aGlzLmZhbmN5Ym94Lm9wdGlvbihcIlRodW1icy5taW5TY3JlZW5IZWlnaHRcIikmJnRoaXMuYnVpbGQoKX1vbkNsb3NpbmcoKXt0aGlzLkNhcm91c2VsJiZ0aGlzLkNhcm91c2VsLlBhbnpvb20uZGV0YWNoRXZlbnRzKCl9b25LZXlkb3duKHQsZSl7ZT09PXQub3B0aW9uKFwiVGh1bWJzLmtleVwiKSYmdGhpcy50b2dnbGUoKX1idWlsZCgpe2lmKHRoaXMuJGNvbnRhaW5lcilyZXR1cm47Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3QuY2xhc3NMaXN0LmFkZChcImZhbmN5Ym94X190aHVtYnNcIiksdGhpcy5mYW5jeWJveC4kY2Fyb3VzZWwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCx0aGlzLmZhbmN5Ym94LiRjYXJvdXNlbC5uZXh0U2libGluZyksdGhpcy5DYXJvdXNlbD1uZXcgeSh0LGUoITAse0RvdHM6ITEsTmF2aWdhdGlvbjohMSxTeW5jOntmcmljdGlvbjowfSxpbmZpbml0ZTohMSxjZW50ZXI6ITAsZmlsbDohMCxkcmFnRnJlZTohMCxzbGlkZXNQZXJQYWdlOjEscHJlbG9hZDoxfSx0aGlzLmZhbmN5Ym94Lm9wdGlvbihcIlRodW1icy5DYXJvdXNlbFwiKSx7U3luYzp7dGFyZ2V0OnRoaXMuZmFuY3lib3guQ2Fyb3VzZWx9LHNsaWRlczp0aGlzLmdldFNsaWRlcygpfSkpLHRoaXMuQ2Fyb3VzZWwuUGFuem9vbS5vbihcIndoZWVsXCIsKCh0LGUpPT57ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZmFuY3lib3hbZS5kZWx0YVk8MD9cInByZXZcIjpcIm5leHRcIl0oKX0pKSx0aGlzLiRjb250YWluZXI9dCx0aGlzLnN0YXRlPVwidmlzaWJsZVwifWdldFNsaWRlcygpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IGUgb2YgdGhpcy5mYW5jeWJveC5pdGVtcyl7Y29uc3QgaT1lLnRodW1iO2kmJnQucHVzaCh7aHRtbDpgPGRpdiBjbGFzcz1cImZhbmN5Ym94X190aHVtYlwiIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTp1cmwoJyR7aX0nKVwiPjwvZGl2PmAsY3VzdG9tQ2xhc3M6YGhhcy10aHVtYiBoYXMtJHtlLnR5cGV8fFwiaW1hZ2VcIn1gfSl9cmV0dXJuIHR9dG9nZ2xlKCl7cmV0dXJuXCJ2aXNpYmxlXCI9PT10aGlzLnN0YXRlPyh0aGlzLkNhcm91c2VsLlBhbnpvb20uZGV0YWNoRXZlbnRzKCksdGhpcy4kY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsdm9pZCh0aGlzLnN0YXRlPVwiaGlkZGVuXCIpKTpcImhpZGRlblwiPT09dGhpcy5zdGF0ZT8odGhpcy4kY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9XCJcIix0aGlzLkNhcm91c2VsLlBhbnpvb20uYXR0YWNoRXZlbnRzKCksdm9pZCh0aGlzLnN0YXRlPVwidmlzaWJsZVwiKSk6dm9pZCB0aGlzLmJ1aWxkKCl9Y2xlYW51cCgpe3RoaXMuQ2Fyb3VzZWwmJih0aGlzLkNhcm91c2VsLmRlc3Ryb3koKSx0aGlzLkNhcm91c2VsPW51bGwpLHRoaXMuJGNvbnRhaW5lciYmKHRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKSx0aGlzLiRjb250YWluZXI9bnVsbCksdGhpcy5zdGF0ZT1cImluaXRcIn1hdHRhY2goKXt0aGlzLmZhbmN5Ym94Lm9uKHRoaXMuZXZlbnRzKX1kZXRhY2goKXt0aGlzLmZhbmN5Ym94Lm9mZih0aGlzLmV2ZW50cyksdGhpcy5jbGVhbnVwKCl9fXYuZGVmYXVsdHM9e21pblNsaWRlQ291bnQ6MixtaW5TY3JlZW5IZWlnaHQ6NTAwLGF1dG9TdGFydDohMCxrZXk6XCJ0XCJ9O2NvbnN0IHg9dD0+T2JqZWN0LmVudHJpZXModCkubWFwKCh0PT50Lm1hcChlbmNvZGVVUklDb21wb25lbnQpLmpvaW4oXCI9XCIpKSkuam9pbihcIiZcIiksdz17dmlkZW86e2F1dG9wbGF5OiEwLHJhdGlvOjE2Lzl9LHlvdXR1YmU6e2F1dG9oaWRlOjEsZnM6MSxyZWw6MCxoZDoxLHdtb2RlOlwidHJhbnNwYXJlbnRcIixlbmFibGVqc2FwaToxLGh0bWw1OjF9LHZpbWVvOntoZDoxLHNob3dfdGl0bGU6MSxzaG93X2J5bGluZToxLHNob3dfcG9ydHJhaXQ6MCxmdWxsc2NyZWVuOjF9LGh0bWw1dmlkZW86e3RwbDonPHZpZGVvIGNsYXNzPVwiZmFuY3lib3hfX2h0bWw1dmlkZW9cIiBwbGF5c2lubGluZSBjb250cm9scyBjb250cm9sc0xpc3Q9XCJub2Rvd25sb2FkXCIgcG9zdGVyPVwie3twb3N0ZXJ9fVwiPlxcbiAgPHNvdXJjZSBzcmM9XCJ7e3NyY319XCIgdHlwZT1cInt7Zm9ybWF0fX1cIiAvPlxcbiAgU29ycnksIHlvdXIgYnJvd3NlciBkb2VzblxcJ3Qgc3VwcG9ydCBlbWJlZGRlZCB2aWRlb3MsIDxhIGhyZWY9XCJ7e3NyY319XCI+ZG93bmxvYWQ8L2E+IGFuZCB3YXRjaCB3aXRoIHlvdXIgZmF2b3JpdGUgdmlkZW8gcGxheWVyIVxcbjwvdmlkZW8+Jyxmb3JtYXQ6XCJcIn19O2NsYXNzICR7Y29uc3RydWN0b3IodCl7dGhpcy5mYW5jeWJveD10O2Zvcihjb25zdCB0IG9mW1wib25Jbml0XCIsXCJvblJlYWR5XCIsXCJvbkNyZWF0ZVNsaWRlXCIsXCJvblJlbW92ZVNsaWRlXCIsXCJvblNlbGVjdFNsaWRlXCIsXCJvblVuc2VsZWN0U2xpZGVcIixcIm9uUmVmcmVzaFwiLFwib25NZXNzYWdlXCJdKXRoaXNbdF09dGhpc1t0XS5iaW5kKHRoaXMpO3RoaXMuZXZlbnRzPXtpbml0OnRoaXMub25Jbml0LHJlYWR5OnRoaXMub25SZWFkeSxcIkNhcm91c2VsLmNyZWF0ZVNsaWRlXCI6dGhpcy5vbkNyZWF0ZVNsaWRlLFwiQ2Fyb3VzZWwucmVtb3ZlU2xpZGVcIjp0aGlzLm9uUmVtb3ZlU2xpZGUsXCJDYXJvdXNlbC5zZWxlY3RTbGlkZVwiOnRoaXMub25TZWxlY3RTbGlkZSxcIkNhcm91c2VsLnVuc2VsZWN0U2xpZGVcIjp0aGlzLm9uVW5zZWxlY3RTbGlkZSxcIkNhcm91c2VsLnJlZnJlc2hcIjp0aGlzLm9uUmVmcmVzaH19b25Jbml0KCl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5mYW5jeWJveC5pdGVtcyl0aGlzLnByb2Nlc3NUeXBlKHQpfXByb2Nlc3NUeXBlKHQpe2lmKHQuaHRtbClyZXR1cm4gdC5zcmM9dC5odG1sLHQudHlwZT1cImh0bWxcIix2b2lkIGRlbGV0ZSB0Lmh0bWw7Y29uc3QgaT10LnNyY3x8XCJcIjtsZXQgcz10LnR5cGV8fHRoaXMuZmFuY3lib3gub3B0aW9ucy50eXBlLG49bnVsbDtpZighaXx8XCJzdHJpbmdcIj09dHlwZW9mIGkpe2lmKG49aS5tYXRjaCgvKD86eW91dHViZVxcLmNvbXx5b3V0dVxcLmJlfHlvdXR1YmVcXC1ub2Nvb2tpZVxcLmNvbSlcXC8oPzp3YXRjaFxcPyg/Oi4qJik/dj18dlxcL3x1XFwvfGVtYmVkXFwvPyk/KHZpZGVvc2VyaWVzXFw/bGlzdD0oPzouKil8W1xcdy1dezExfXxcXD9saXN0VHlwZT0oPzouKikmbGlzdD0oPzouKikpKD86LiopL2kpKXtjb25zdCBlPXgodGhpcy5mYW5jeWJveC5vcHRpb24oXCJIdG1sLnlvdXR1YmVcIikpLGk9ZW5jb2RlVVJJQ29tcG9uZW50KG5bMV0pO3QudmlkZW9JZD1pLHQuc3JjPWBodHRwczovL3d3dy55b3V0dWJlLW5vY29va2llLmNvbS9lbWJlZC8ke2l9PyR7ZX1gLHQudGh1bWI9dC50aHVtYnx8YGh0dHBzOi8vaS55dGltZy5jb20vdmkvJHtpfS9tcWRlZmF1bHQuanBnYCx0LnZlbmRvcj1cInlvdXR1YmVcIixzPVwidmlkZW9cIn1lbHNlIGlmKG49aS5tYXRjaCgvXi4rdmltZW8uY29tXFwvKD86XFwvKT8oW1xcZF0rKSguKik/Lykpe2NvbnN0IGU9eCh0aGlzLmZhbmN5Ym94Lm9wdGlvbihcIkh0bWwudmltZW9cIikpLGk9ZW5jb2RlVVJJQ29tcG9uZW50KG5bMV0pO3QudmlkZW9JZD1pLHQuc3JjPWBodHRwczovL3BsYXllci52aW1lby5jb20vdmlkZW8vJHtpfT8ke2V9YCx0LnZlbmRvcj1cInZpbWVvXCIscz1cInZpZGVvXCJ9ZWxzZShuPWkubWF0Y2goLyg/Om1hcHNcXC4pP2dvb2dsZVxcLihbYS16XXsyLDN9KD86XFwuW2Etel17Mn0pPylcXC8oPzooPzooPzptYXBzXFwvKD86cGxhY2VcXC8oPzouKilcXC8pP1xcQCguKiksKFxcZCsuP1xcZCs/KXopKXwoPzpcXD9sbD0pKSguKik/L2kpKT8odC5zcmM9YC8vbWFwcy5nb29nbGUuJHtuWzFdfS8/bGw9JHsoblsyXT9uWzJdK1wiJno9XCIrTWF0aC5mbG9vcihuWzNdKSsobls0XT9uWzRdLnJlcGxhY2UoL15cXC8vLFwiJlwiKTpcIlwiKTpuWzRdK1wiXCIpLnJlcGxhY2UoL1xcPy8sXCImXCIpfSZvdXRwdXQ9JHtuWzRdJiZuWzRdLmluZGV4T2YoXCJsYXllcj1jXCIpPjA/XCJzdmVtYmVkXCI6XCJlbWJlZFwifWAscz1cIm1hcFwiKToobj1pLm1hdGNoKC8oPzptYXBzXFwuKT9nb29nbGVcXC4oW2Etel17MiwzfSg/OlxcLlthLXpdezJ9KT8pXFwvKD86bWFwc1xcL3NlYXJjaFxcLykoLiopL2kpKSYmKHQuc3JjPWAvL21hcHMuZ29vZ2xlLiR7blsxXX0vbWFwcz9xPSR7blsyXS5yZXBsYWNlKFwicXVlcnk9XCIsXCJxPVwiKS5yZXBsYWNlKFwiYXBpPTFcIixcIlwiKX0mb3V0cHV0PWVtYmVkYCxzPVwibWFwXCIpO3N8fChcIiNcIj09PWkuY2hhckF0KDApP3M9XCJpbmxpbmVcIjoobj1pLm1hdGNoKC9cXC4obXA0fG1vdnxvZ3Z8d2VibSkoKFxcP3wjKS4qKT8kL2kpKT8ocz1cImh0bWw1dmlkZW9cIix0LmZvcm1hdD10LmZvcm1hdHx8XCJ2aWRlby9cIisoXCJvZ3ZcIj09PW5bMV0/XCJvZ2dcIjpuWzFdKSk6aS5tYXRjaCgvKF5kYXRhOmltYWdlXFwvW2EtejAtOStcXC89XSosKXwoXFwuKGpwKGV8Z3xlZyl8Z2lmfHBuZ3xibXB8d2VicHxzdmd8aWNvKSgoXFw/fCMpLiopPyQpL2kpP3M9XCJpbWFnZVwiOmkubWF0Y2goL1xcLihwZGYpKChcXD98IykuKik/JC9pKSYmKHM9XCJwZGZcIikpLHQudHlwZT1zfHx0aGlzLmZhbmN5Ym94Lm9wdGlvbihcImRlZmF1bHRUeXBlXCIsXCJpbWFnZVwiKSxcImh0bWw1dmlkZW9cIiE9PXMmJlwidmlkZW9cIiE9PXN8fCh0LnZpZGVvPWUoe30sdGhpcy5mYW5jeWJveC5vcHRpb24oXCJIdG1sLnZpZGVvXCIpLHQudmlkZW8pLHQud2lkdGgmJnQuaGVpZ2h0P3QucmF0aW89cGFyc2VGbG9hdCh0LndpZHRoKS9wYXJzZUZsb2F0KHQuaGVpZ2h0KTp0LnJhdGlvPXQucmF0aW98fHQudmlkZW8ucmF0aW8pfX1vblJlYWR5KCl7dGhpcy5mYW5jeWJveC5DYXJvdXNlbC5zbGlkZXMuZm9yRWFjaCgodD0+e3QuJGVsJiYodGhpcy5zZXRDb250ZW50KHQpLHQuaW5kZXg9PT10aGlzLmZhbmN5Ym94LmdldFNsaWRlKCkuaW5kZXgmJnRoaXMucGxheVZpZGVvKHQpKX0pKX1vbkNyZWF0ZVNsaWRlKHQsZSxpKXtcInJlYWR5XCI9PT10aGlzLmZhbmN5Ym94LnN0YXRlJiZ0aGlzLnNldENvbnRlbnQoaSl9bG9hZElubGluZUNvbnRlbnQodCl7bGV0IGU7aWYodC5zcmMgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCllPXQuc3JjO2Vsc2UgaWYoXCJzdHJpbmdcIj09dHlwZW9mIHQuc3JjKXtjb25zdCBpPXQuc3JjLnNwbGl0KFwiI1wiLDIpLHM9Mj09PWkubGVuZ3RoJiZcIlwiPT09aVswXT9pWzFdOmlbMF07ZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChzKX1pZihlKXtpZihcImNsb25lXCI9PT10LnR5cGV8fGUuJHBsYWNlSG9sZGVyKXtlPWUuY2xvbmVOb2RlKCEwKTtsZXQgaT1lLmdldEF0dHJpYnV0ZShcImlkXCIpO2k9aT9gJHtpfS0tY2xvbmVgOmBjbG9uZS0ke3RoaXMuZmFuY3lib3guaWR9LSR7dC5pbmRleH1gLGUuc2V0QXR0cmlidXRlKFwiaWRcIixpKX1lbHNle2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTt0LmNsYXNzTGlzdC5hZGQoXCJmYW5jeWJveC1wbGFjZWhvbGRlclwiKSxlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQsZSksZS4kcGxhY2VIb2xkZXI9dH10aGlzLmZhbmN5Ym94LnNldENvbnRlbnQodCxlKX1lbHNlIHRoaXMuZmFuY3lib3guc2V0RXJyb3IodCxcInt7RUxFTUVOVF9OT1RfRk9VTkR9fVwiKX1sb2FkQWpheENvbnRlbnQodCl7Y29uc3QgZT10aGlzLmZhbmN5Ym94LGk9bmV3IFhNTEh0dHBSZXF1ZXN0O2Uuc2hvd0xvYWRpbmcodCksaS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpLnJlYWR5U3RhdGU9PT1YTUxIdHRwUmVxdWVzdC5ET05FJiZcInJlYWR5XCI9PT1lLnN0YXRlJiYoZS5oaWRlTG9hZGluZyh0KSwyMDA9PT1pLnN0YXR1cz9lLnNldENvbnRlbnQodCxpLnJlc3BvbnNlVGV4dCk6ZS5zZXRFcnJvcih0LDQwND09PWkuc3RhdHVzP1wie3tBSkFYX05PVF9GT1VORH19XCI6XCJ7e0FKQVhfRk9SQklEREVOfX1cIikpfSxpLm9wZW4oXCJHRVRcIix0LnNyYyksaS5zZW5kKHQuYWpheHx8bnVsbCksdC54aHI9aX1sb2FkSWZyYW1lQ29udGVudCh0KXtjb25zdCBlPXRoaXMuZmFuY3lib3gsaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO2lmKGkuY2xhc3NOYW1lPVwiZmFuY3lib3hfX2lmcmFtZVwiLGkuc2V0QXR0cmlidXRlKFwiaWRcIixgZmFuY3lib3hfX2lmcmFtZV8ke2UuaWR9XyR7dC5pbmRleH1gKSxpLnNldEF0dHJpYnV0ZShcImFsbG93XCIsXCJhdXRvcGxheTsgZnVsbHNjcmVlblwiKSxpLnNldEF0dHJpYnV0ZShcInNjcm9sbGluZ1wiLFwiYXV0b1wiKSx0LiRpZnJhbWU9aSxcImlmcmFtZVwiIT09dC50eXBlfHwhMT09PXQucHJlbG9hZClyZXR1cm4gaS5zZXRBdHRyaWJ1dGUoXCJzcmNcIix0LnNyYyksdm9pZCB0aGlzLmZhbmN5Ym94LnNldENvbnRlbnQodCxpKTtlLnNob3dMb2FkaW5nKHQpO2NvbnN0IHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtzLnN0eWxlLnZpc2liaWxpdHk9XCJoaWRkZW5cIix0aGlzLmZhbmN5Ym94LnNldENvbnRlbnQodCxzKSxzLmFwcGVuZENoaWxkKGkpLGkub25lcnJvcj0oKT0+e2Uuc2V0RXJyb3IodCxcInt7SUZSQU1FX0VSUk9SfX1cIil9LGkub25sb2FkPSgpPT57ZS5oaWRlTG9hZGluZyh0KTtsZXQgcz0hMTtcInllc1wiIT09aS5kYXRhc2V0LnJlYWR5JiYoaS5kYXRhc2V0LnJlYWR5PVwieWVzXCIscz0hMCksaS5zcmMubGVuZ3RoJiYoaS5wYXJlbnROb2RlLnN0eWxlLnZpc2liaWxpdHk9XCJcIiwhMSE9PXQuYXV0b1NpemUmJnRoaXMuYXV0b1NpemVJZnJhbWUoaSkscyYmZS5yZXZlYWxDb250ZW50KHQpKX0saS5zZXRBdHRyaWJ1dGUoXCJzcmNcIix0LnNyYyl9c2V0QXNwZWN0UmF0aW8odCl7bGV0IGU9dC5yYXRpbztpZighZXx8IXQuJGNvbnRlbnQpcmV0dXJuO3QuJGNvbnRlbnQuc3R5bGUubWF4V2lkdGg9XCJcIix0LiRjb250ZW50LnN0eWxlLm1heEhlaWdodD1cIlwiO2xldCBpPXQuJGNvbnRlbnQub2Zmc2V0V2lkdGgscz10LiRjb250ZW50Lm9mZnNldEhlaWdodCxuPXQud2lkdGgsbz10LmhlaWdodDtpZihuJiZvJiYoaT5ufHxzPm8pKXtsZXQgdD1NYXRoLm1pbihuL2ksby9zKTtpKj10LHMqPXR9ZTxpL3M/aT1zKmU6cz1pL2UsdC4kY29udGVudC5zdHlsZS5tYXhXaWR0aD1gJHtpfXB4YCx0LiRjb250ZW50LnN0eWxlLm1heEhlaWdodD1gJHtzfXB4YH1hdXRvU2l6ZUlmcmFtZSh0KXtpZighdC5kYXRhc2V0fHxcInllc1wiIT09dC5kYXRhc2V0LnJlYWR5KXJldHVybjtsZXQgZT10LnBhcmVudE5vZGUuc3R5bGU7ZS5mbGV4PVwiMSAxIGF1dG9cIixlLndpZHRoPVwiXCIsZS5oZWlnaHQ9XCJcIjt0cnl7Y29uc3QgaT10LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQscz1pLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaHRtbFwiKVswXSxuPWkuYm9keSxvPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQucGFyZW50Tm9kZSksYT1wYXJzZUZsb2F0KG8ucGFkZGluZ0xlZnQpK3BhcnNlRmxvYXQoby5wYWRkaW5nUmlnaHQpLHI9cGFyc2VGbG9hdChvLnBhZGRpbmdUb3ApK3BhcnNlRmxvYXQoby5wYWRkaW5nQm90dG9tKTtuLnN0eWxlLm92ZXJmbG93PVwiaGlkZGVuXCI7Y29uc3QgbD1zLnNjcm9sbFdpZHRoO2Uud2lkdGg9YCR7bCthfXB4YCxuLnN0eWxlLm92ZXJmbG93PVwiXCIsZS5mbGV4PVwiXCIsZS5mbGV4U2hyaW5rPVwiMFwiLGUuaGVpZ2h0PWAke24uc2Nyb2xsSGVpZ2h0fXB4YDtjb25zdCBoPXMuc2Nyb2xsSGVpZ2h0O2UuaGVpZ2h0PWAke2grcn1weGB9Y2F0Y2godCl7ZT1cIlwifX1vblJlZnJlc2godCxlKXtlLnNsaWRlcy5mb3JFYWNoKCh0PT57dC4kZWwmJih0LiRpZnJhbWUmJiExIT09dC5hdXRvU2l6ZSYmdGhpcy5hdXRvU2l6ZUlmcmFtZSh0LiRpZnJhbWUpLHQucmF0aW8mJnRoaXMuc2V0QXNwZWN0UmF0aW8odCkpfSkpfXNldENvbnRlbnQodCl7aWYodCYmIXQuaXNEb20pe3N3aXRjaCh0LnR5cGUpe2Nhc2VcImh0bWxcIjp0aGlzLmZhbmN5Ym94LnNldENvbnRlbnQodCx0LnNyYyk7YnJlYWs7Y2FzZVwiaHRtbDV2aWRlb1wiOnRoaXMuZmFuY3lib3guc2V0Q29udGVudCh0LHRoaXMuZmFuY3lib3gub3B0aW9uKFwiSHRtbC5odG1sNXZpZGVvLnRwbFwiKS5yZXBsYWNlKC9cXHtcXHtzcmNcXH1cXH0vZ2ksdC5zcmMpLnJlcGxhY2UoXCJ7e2Zvcm1hdH19XCIsdC5mb3JtYXR8fHQuaHRtbDV2aWRlbyYmdC5odG1sNXZpZGVvLmZvcm1hdHx8XCJcIikucmVwbGFjZShcInt7cG9zdGVyfX1cIix0LnRodW1ifHxcIlwiKSk7YnJlYWs7Y2FzZVwiaW5saW5lXCI6Y2FzZVwiY2xvbmVcIjp0aGlzLmxvYWRJbmxpbmVDb250ZW50KHQpO2JyZWFrO2Nhc2VcImFqYXhcIjp0aGlzLmxvYWRBamF4Q29udGVudCh0KTticmVhaztjYXNlXCJpZnJhbWVcIjpjYXNlXCJwZGZcIjpjYXNlXCJ2aWRlb1wiOmNhc2VcIm1hcFwiOnRoaXMubG9hZElmcmFtZUNvbnRlbnQodCl9dC5yYXRpbyYmdGhpcy5zZXRBc3BlY3RSYXRpbyh0KX19b25TZWxlY3RTbGlkZSh0LGUsaSl7XCJyZWFkeVwiPT09dC5zdGF0ZSYmdGhpcy5wbGF5VmlkZW8oaSl9cGxheVZpZGVvKHQpe2lmKFwiaHRtbDV2aWRlb1wiPT09dC50eXBlKXtjb25zdCBlPXQuJGVsLnF1ZXJ5U2VsZWN0b3IoXCJ2aWRlb1wiKTtpZihlKXRyeXtlLnBsYXkoKX1jYXRjaCh0KXt9fWlmKFwidmlkZW9cIiE9PXQudHlwZXx8IXQuJGlmcmFtZXx8IXQuJGlmcmFtZS5jb250ZW50V2luZG93KXJldHVybjtjb25zdCBlPSgpPT57aWYoXCJkb25lXCIhPT10LnN0YXRlfHwhdC4kaWZyYW1lfHwhdC4kaWZyYW1lLmNvbnRlbnRXaW5kb3cpcmV0dXJuO2xldCBpO2lmKHQuJGlmcmFtZS5pc1JlYWR5KXJldHVybiB0LnZpZGVvJiZ0LnZpZGVvLmF1dG9wbGF5JiYoaT1cInlvdXR1YmVcIj09dC52ZW5kb3I/e2V2ZW50OlwiY29tbWFuZFwiLGZ1bmM6XCJwbGF5VmlkZW9cIn06e21ldGhvZDpcInBsYXlcIix2YWx1ZTpcInRydWVcIn0pLHZvaWQoaSYmdC4kaWZyYW1lLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoaSksXCIqXCIpKTtcInlvdXR1YmVcIj09PXQudmVuZG9yJiYoaT17ZXZlbnQ6XCJsaXN0ZW5pbmdcIixpZDp0LiRpZnJhbWUuZ2V0QXR0cmlidXRlKFwiaWRcIil9LHQuJGlmcmFtZS5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KGkpLFwiKlwiKSksdC5wb2xsZXI9c2V0VGltZW91dChlLDI1MCl9O2UoKX1vblVuc2VsZWN0U2xpZGUodCxlLGkpe2lmKFwiaHRtbDV2aWRlb1wiPT09aS50eXBlKXt0cnl7aS4kZWwucXVlcnlTZWxlY3RvcihcInZpZGVvXCIpLnBhdXNlKCl9Y2F0Y2godCl7fXJldHVybn1sZXQgcz0hMTtcInZpbWVvXCI9PWkudmVuZG9yP3M9e21ldGhvZDpcInBhdXNlXCIsdmFsdWU6XCJ0cnVlXCJ9OlwieW91dHViZVwiPT09aS52ZW5kb3ImJihzPXtldmVudDpcImNvbW1hbmRcIixmdW5jOlwicGF1c2VWaWRlb1wifSkscyYmaS4kaWZyYW1lJiZpLiRpZnJhbWUuY29udGVudFdpbmRvdyYmaS4kaWZyYW1lLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkocyksXCIqXCIpLGNsZWFyVGltZW91dChpLnBvbGxlcil9b25SZW1vdmVTbGlkZSh0LGUsaSl7aS54aHImJihpLnhoci5hYm9ydCgpLGkueGhyPW51bGwpLGkuJGlmcmFtZSYmKGkuJGlmcmFtZS5vbmxvYWQ9aS4kaWZyYW1lLm9uZXJyb3I9bnVsbCxpLiRpZnJhbWUuc3JjPVwiLy9hYm91dDpibGFua1wiLGkuJGlmcmFtZT1udWxsKTtjb25zdCBzPWkuJGNvbnRlbnQ7XCJpbmxpbmVcIj09PWkudHlwZSYmcyYmKHMuY2xhc3NMaXN0LnJlbW92ZShcImZhbmN5Ym94X19jb250ZW50XCIpLFwibm9uZVwiIT09cy5zdHlsZS5kaXNwbGF5JiYocy5zdHlsZS5kaXNwbGF5PVwibm9uZVwiKSxpLiRjbG9zZUJ1dHRvbiYmKGkuJGNsb3NlQnV0dG9uLnJlbW92ZSgpLGkuJGNsb3NlQnV0dG9uPW51bGwpKTtjb25zdCBuPXMmJnMuJHBsYWNlSG9sZGVyO24mJihuLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHMsbiksbi5yZW1vdmUoKSxzLiRwbGFjZUhvbGRlcj1udWxsKX1vbk1lc3NhZ2UodCl7dHJ5e2xldCBlPUpTT04ucGFyc2UodC5kYXRhKTtpZihcImh0dHBzOi8vcGxheWVyLnZpbWVvLmNvbVwiPT09dC5vcmlnaW4pe2lmKFwicmVhZHlcIj09PWUuZXZlbnQpZm9yKGxldCBlIG9mIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJmYW5jeWJveF9faWZyYW1lXCIpKWUuY29udGVudFdpbmRvdz09PXQuc291cmNlJiYoZS5pc1JlYWR5PTEpfWVsc2VcImh0dHBzOi8vd3d3LnlvdXR1YmUtbm9jb29raWUuY29tXCI9PT10Lm9yaWdpbiYmXCJvblJlYWR5XCI9PT1lLmV2ZW50JiYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZS5pZCkuaXNSZWFkeT0xKX1jYXRjaCh0KXt9fWF0dGFjaCgpe3RoaXMuZmFuY3lib3gub24odGhpcy5ldmVudHMpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLHRoaXMub25NZXNzYWdlLCExKX1kZXRhY2goKXt0aGlzLmZhbmN5Ym94Lm9mZih0aGlzLmV2ZW50cyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsdGhpcy5vbk1lc3NhZ2UsITEpfX0kLmRlZmF1bHRzPXc7Y2xhc3MgU3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmZhbmN5Ym94PXQ7Zm9yKGNvbnN0IHQgb2ZbXCJvblJlYWR5XCIsXCJvbkNsb3NpbmdcIixcIm9uRG9uZVwiLFwib25QYWdlQ2hhbmdlXCIsXCJvbkNyZWF0ZVNsaWRlXCIsXCJvblJlbW92ZVNsaWRlXCIsXCJvbkltYWdlU3RhdHVzQ2hhbmdlXCJdKXRoaXNbdF09dGhpc1t0XS5iaW5kKHRoaXMpO3RoaXMuZXZlbnRzPXtyZWFkeTp0aGlzLm9uUmVhZHksY2xvc2luZzp0aGlzLm9uQ2xvc2luZyxkb25lOnRoaXMub25Eb25lLFwiQ2Fyb3VzZWwuY2hhbmdlXCI6dGhpcy5vblBhZ2VDaGFuZ2UsXCJDYXJvdXNlbC5jcmVhdGVTbGlkZVwiOnRoaXMub25DcmVhdGVTbGlkZSxcIkNhcm91c2VsLnJlbW92ZVNsaWRlXCI6dGhpcy5vblJlbW92ZVNsaWRlfX1vblJlYWR5KCl7dGhpcy5mYW5jeWJveC5DYXJvdXNlbC5zbGlkZXMuZm9yRWFjaCgodD0+e3QuJGVsJiZ0aGlzLnNldENvbnRlbnQodCl9KSl9b25Eb25lKHQsZSl7dGhpcy5oYW5kbGVDdXJzb3IoZSl9b25DbG9zaW5nKHQpe2NsZWFyVGltZW91dCh0aGlzLmNsaWNrVGltZXIpLHQuQ2Fyb3VzZWwuc2xpZGVzLmZvckVhY2goKHQ9Pnt0LiRpbWFnZSYmKHQuc3RhdGU9XCJkZXN0cm95XCIpLHQuUGFuem9vbSYmdC5QYW56b29tLmRldGFjaEV2ZW50cygpfSkpLFwiY2xvc2luZ1wiPT09dGhpcy5mYW5jeWJveC5zdGF0ZSYmdGhpcy5jYW5ab29tKHQuZ2V0U2xpZGUoKSkmJnRoaXMuem9vbU91dCgpfW9uQ3JlYXRlU2xpZGUodCxlLGkpe1wicmVhZHlcIj09PXRoaXMuZmFuY3lib3guc3RhdGUmJnRoaXMuc2V0Q29udGVudChpKX1vblJlbW92ZVNsaWRlKHQsZSxpKXtpLiRpbWFnZSYmKGkuJGVsLmNsYXNzTGlzdC5yZW1vdmUodC5vcHRpb24oXCJJbWFnZS5jYW5ab29tSW5DbGFzc1wiKSksaS4kaW1hZ2UucmVtb3ZlKCksaS4kaW1hZ2U9bnVsbCksaS5QYW56b29tJiYoaS5QYW56b29tLmRlc3Ryb3koKSxpLlBhbnpvb209bnVsbCksaS4kZWwmJmkuJGVsLmRhdGFzZXQmJmRlbGV0ZSBpLiRlbC5kYXRhc2V0LmltYWdlRml0fXNldENvbnRlbnQodCl7aWYodC5pc0RvbXx8dC5odG1sfHx0LnR5cGUmJlwiaW1hZ2VcIiE9PXQudHlwZSlyZXR1cm47aWYodC4kaW1hZ2UpcmV0dXJuO3QudHlwZT1cImltYWdlXCIsdC5zdGF0ZT1cImxvYWRpbmdcIjtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ZS5zdHlsZS52aXNpYmlsaXR5PVwiaGlkZGVuXCI7Y29uc3QgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO2kuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwoZT0+e2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5vbkltYWdlU3RhdHVzQ2hhbmdlKHQpfSkpLGkuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsKCgpPT57dGhpcy5vbkltYWdlU3RhdHVzQ2hhbmdlKHQpfSkpLGkuc3JjPXQuc3JjLGkuYWx0PVwiXCIsaS5kcmFnZ2FibGU9ITEsaS5jbGFzc0xpc3QuYWRkKFwiZmFuY3lib3hfX2ltYWdlXCIpLHQuc3Jjc2V0JiZpLnNldEF0dHJpYnV0ZShcInNyY3NldFwiLHQuc3Jjc2V0KSx0LnNpemVzJiZpLnNldEF0dHJpYnV0ZShcInNpemVzXCIsdC5zaXplcyksdC4kaW1hZ2U9aTtjb25zdCBzPXRoaXMuZmFuY3lib3gub3B0aW9uKFwiSW1hZ2Uud3JhcFwiKTtpZihzKXtjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7bi5jbGFzc0xpc3QuYWRkKFwic3RyaW5nXCI9PXR5cGVvZiBzP3M6XCJmYW5jeWJveF9faW1hZ2Utd3JhcFwiKSxuLmFwcGVuZENoaWxkKGkpLGUuYXBwZW5kQ2hpbGQobiksdC4kd3JhcD1ufWVsc2UgZS5hcHBlbmRDaGlsZChpKTt0LiRlbC5kYXRhc2V0LmltYWdlRml0PXRoaXMuZmFuY3lib3gub3B0aW9uKFwiSW1hZ2UuZml0XCIpLHRoaXMuZmFuY3lib3guc2V0Q29udGVudCh0LGUpLGkuY29tcGxldGV8fGkuZXJyb3I/dGhpcy5vbkltYWdlU3RhdHVzQ2hhbmdlKHQpOnRoaXMuZmFuY3lib3guc2hvd0xvYWRpbmcodCl9b25JbWFnZVN0YXR1c0NoYW5nZSh0KXtjb25zdCBlPXQuJGltYWdlO2UmJlwibG9hZGluZ1wiPT09dC5zdGF0ZSYmKGUuY29tcGxldGUmJmUubmF0dXJhbFdpZHRoJiZlLm5hdHVyYWxIZWlnaHQ/KHRoaXMuZmFuY3lib3guaGlkZUxvYWRpbmcodCksXCJjb250YWluXCI9PT10aGlzLmZhbmN5Ym94Lm9wdGlvbihcIkltYWdlLmZpdFwiKSYmdGhpcy5pbml0U2xpZGVQYW56b29tKHQpLHQuJGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLChlPT50aGlzLm9uV2hlZWwodCxlKSkse3Bhc3NpdmU6ITF9KSx0LiRjb250ZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLChlPT50aGlzLm9uQ2xpY2sodCxlKSkse3Bhc3NpdmU6ITF9KSx0aGlzLnJldmVhbENvbnRlbnQodCkpOnRoaXMuZmFuY3lib3guc2V0RXJyb3IodCxcInt7SU1BR0VfRVJST1J9fVwiKSl9aW5pdFNsaWRlUGFuem9vbSh0KXt0LlBhbnpvb218fCh0LlBhbnpvb209bmV3IGQodC4kZWwsZSghMCx0aGlzLmZhbmN5Ym94Lm9wdGlvbihcIkltYWdlLlBhbnpvb21cIix7fSkse3ZpZXdwb3J0OnQuJHdyYXAsY29udGVudDp0LiRpbWFnZSx3cmFwSW5uZXI6ITEsdGV4dFNlbGVjdGlvbjohMCx0b3VjaDp0aGlzLmZhbmN5Ym94Lm9wdGlvbihcIkltYWdlLnRvdWNoXCIpLHBhbk9ubHlab29tZWQ6ITAsY2xpY2s6ITEsd2hlZWw6ITF9KSksdC5QYW56b29tLm9uKFwic3RhcnRBbmltYXRpb25cIiwoKCk9Pnt0aGlzLmZhbmN5Ym94LnRyaWdnZXIoXCJJbWFnZS5zdGFydEFuaW1hdGlvblwiLHQpfSkpLHQuUGFuem9vbS5vbihcImVuZEFuaW1hdGlvblwiLCgoKT0+e1wiem9vbUluXCI9PT10LnN0YXRlJiZ0aGlzLmZhbmN5Ym94LmRvbmUodCksdGhpcy5oYW5kbGVDdXJzb3IodCksdGhpcy5mYW5jeWJveC50cmlnZ2VyKFwiSW1hZ2UuZW5kQW5pbWF0aW9uXCIsdCl9KSksdC5QYW56b29tLm9uKFwiYWZ0ZXJVcGRhdGVcIiwoKCk9Pnt0aGlzLmhhbmRsZUN1cnNvcih0KSx0aGlzLmZhbmN5Ym94LnRyaWdnZXIoXCJJbWFnZS5hZnRlclVwZGF0ZVwiLHQpfSkpKX1yZXZlYWxDb250ZW50KHQpe251bGw9PT10aGlzLmZhbmN5Ym94LkNhcm91c2VsLnByZXZQYWdlJiZ0LmluZGV4PT09dGhpcy5mYW5jeWJveC5vcHRpb25zLnN0YXJ0SW5kZXgmJnRoaXMuY2FuWm9vbSh0KT90aGlzLnpvb21JbigpOnRoaXMuZmFuY3lib3gucmV2ZWFsQ29udGVudCh0KX1nZXRab29tSW5mbyh0KXtjb25zdCBlPXQuJHRodW1iLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9ZS53aWR0aCxzPWUuaGVpZ2h0LG49dC4kY29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPW4ud2lkdGgsYT1uLmhlaWdodCxyPW4udG9wLWUudG9wLGw9bi5sZWZ0LWUubGVmdDtsZXQgaD10aGlzLmZhbmN5Ym94Lm9wdGlvbihcIkltYWdlLnpvb21PcGFjaXR5XCIpO3JldHVyblwiYXV0b1wiPT09aCYmKGg9TWF0aC5hYnMoaS9zLW8vYSk+LjEpLHt0b3A6cixsZWZ0Omwsc2NhbGU6ZS53aWR0aC9vLG9wYWNpdHk6aH19Y2FuWm9vbSh0KXtjb25zdCBlPXRoaXMuZmFuY3lib3gsaT1lLiRjb250YWluZXI7aWYod2luZG93LnZpc3VhbFZpZXdwb3J0JiYxIT09d2luZG93LnZpc3VhbFZpZXdwb3J0LnNjYWxlKXJldHVybiExO2lmKCFlLm9wdGlvbihcIkltYWdlLnpvb21cIil8fFwiY29udGFpblwiIT09ZS5vcHRpb24oXCJJbWFnZS5maXRcIikpcmV0dXJuITE7Y29uc3Qgcz10LiR0aHVtYjtpZighc3x8XCJsb2FkaW5nXCI9PT10LnN0YXRlKXJldHVybiExO2kuY2xhc3NMaXN0LmFkZChcImZhbmN5Ym94X19uby1jbGlja1wiKTtjb25zdCBuPXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IG87aWYodGhpcy5mYW5jeWJveC5vcHRpb24oXCJJbWFnZS5pZ25vcmVDb3ZlcmVkVGh1bWJuYWlsXCIpKXtjb25zdCB0PWRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQobi5sZWZ0KzEsbi50b3ArMSk9PT1zLGU9ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChuLnJpZ2h0LTEsbi5ib3R0b20tMSk9PT1zO289dCYmZX1lbHNlIG89ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChuLmxlZnQrLjUqbi53aWR0aCxuLnRvcCsuNSpuLmhlaWdodCk9PT1zO3JldHVybiBpLmNsYXNzTGlzdC5yZW1vdmUoXCJmYW5jeWJveF9fbm8tY2xpY2tcIiksb316b29tSW4oKXtjb25zdCB0PXRoaXMuZmFuY3lib3gsZT10LmdldFNsaWRlKCksaT1lLlBhbnpvb20se3RvcDpzLGxlZnQ6bixzY2FsZTpvLG9wYWNpdHk6YX09dGhpcy5nZXRab29tSW5mbyhlKTtlLnN0YXRlPVwiem9vbUluXCIsdC50cmlnZ2VyKFwicmV2ZWFsXCIsZSksaS5wYW5Ubyh7eDotMSpuLHk6LTEqcyxzY2FsZTpvLGZyaWN0aW9uOjAsaWdub3JlQm91bmRzOiEwfSksZS4kY29udGVudC5zdHlsZS52aXNpYmlsaXR5PVwiXCIsITA9PT1hJiZpLm9uKFwiYWZ0ZXJUcmFuc2Zvcm1cIiwodD0+e1wiem9vbUluXCIhPT1lLnN0YXRlJiZcInpvb21PdXRcIiE9PWUuc3RhdGV8fCh0LiRjb250ZW50LnN0eWxlLm9wYWNpdHk9TWF0aC5taW4oMSwxLSgxLXQuY29udGVudC5zY2FsZSkvKDEtbykpKX0pKSxpLnBhblRvKHt4OjAseTowLHNjYWxlOjEsZnJpY3Rpb246dGhpcy5mYW5jeWJveC5vcHRpb24oXCJJbWFnZS56b29tRnJpY3Rpb25cIil9KX16b29tT3V0KCl7Y29uc3QgdD10aGlzLmZhbmN5Ym94LGU9dC5nZXRTbGlkZSgpLGk9ZS5QYW56b29tO2lmKCFpKXJldHVybjtlLnN0YXRlPVwiem9vbU91dFwiLHQuc3RhdGU9XCJjdXN0b21DbG9zaW5nXCIsZS4kY2FwdGlvbiYmKGUuJGNhcHRpb24uc3R5bGUudmlzaWJpbGl0eT1cImhpZGRlblwiKTtsZXQgcz10aGlzLmZhbmN5Ym94Lm9wdGlvbihcIkltYWdlLnpvb21GcmljdGlvblwiKTtjb25zdCBuPXQ9Pntjb25zdHt0b3A6bixsZWZ0Om8sc2NhbGU6YSxvcGFjaXR5OnJ9PXRoaXMuZ2V0Wm9vbUluZm8oZSk7dHx8cnx8KHMqPS44MiksaS5wYW5Ubyh7eDotMSpvLHk6LTEqbixzY2FsZTphLGZyaWN0aW9uOnMsaWdub3JlQm91bmRzOiEwfSkscyo9Ljk4fTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLG4pLGkub24oXCJlbmRBbmltYXRpb25cIiwoKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLG4pLHQuZGVzdHJveSgpfSkpLG4oKX1oYW5kbGVDdXJzb3IodCl7aWYoXCJpbWFnZVwiIT09dC50eXBlKXJldHVybjtjb25zdCBlPXQuUGFuem9vbSxpPXRoaXMuZmFuY3lib3gub3B0aW9uKFwiSW1hZ2UuY2xpY2tcIikscz10LiRlbC5jbGFzc0xpc3Q7aWYoZSYmXCJ0b2dnbGVab29tXCI9PT1pKXtzW2UmJjE9PT1lLmNvbnRlbnQuc2NhbGUmJmUub3B0aW9uKFwibWF4U2NhbGVcIiktZS5jb250ZW50LnNjYWxlPi4wMT9cImFkZFwiOlwicmVtb3ZlXCJdKHRoaXMuZmFuY3lib3gub3B0aW9uKFwiSW1hZ2UuY2FuWm9vbUluQ2xhc3NcIikpfWVsc2VcImNsb3NlXCI9PT1pJiZzLmFkZCh0aGlzLmZhbmN5Ym94Lm9wdGlvbihcIkltYWdlLmNhblpvb21PdXRDbGFzc1wiKSl9b25XaGVlbCh0LGUpe2lmKFwicmVhZHlcIj09PXRoaXMuZmFuY3lib3guc3RhdGUmJiExIT09dGhpcy5mYW5jeWJveC50cmlnZ2VyKFwiSW1hZ2Uud2hlZWxcIixlKSlzd2l0Y2godGhpcy5mYW5jeWJveC5vcHRpb24oXCJJbWFnZS53aGVlbFwiKSl7Y2FzZVwiem9vbVwiOnQuUGFuem9vbSYmdC5QYW56b29tLnpvb21XaXRoV2hlZWwoZSk7YnJlYWs7Y2FzZVwiY2xvc2VcIjp0aGlzLmZhbmN5Ym94LmNsb3NlKCk7YnJlYWs7Y2FzZVwic2xpZGVcIjp0aGlzLmZhbmN5Ym94W2UuZGVsdGFZPDA/XCJwcmV2XCI6XCJuZXh0XCJdKCl9fW9uQ2xpY2sodCxlKXtpZihcInJlYWR5XCIhPT10aGlzLmZhbmN5Ym94LnN0YXRlKXJldHVybjtjb25zdCBpPXQuUGFuem9vbTtpZihpJiYoaS5kcmFnUG9zaXRpb24ubWlkUG9pbnR8fDAhPT1pLmRyYWdPZmZzZXQueHx8MCE9PWkuZHJhZ09mZnNldC55fHwxIT09aS5kcmFnT2Zmc2V0LnNjYWxlKSlyZXR1cm47aWYodGhpcy5mYW5jeWJveC5DYXJvdXNlbC5QYW56b29tLmxvY2tBeGlzKXJldHVybiExO2NvbnN0IHM9aT0+e2lmKCExIT09dGhpcy5mYW5jeWJveC50cmlnZ2VyKFwiSW1hZ2UuY2xpY2tcIixlKSlzd2l0Y2goaSl7Y2FzZVwidG9nZ2xlWm9vbVwiOmUuc3RvcFByb3BhZ2F0aW9uKCksdC5QYW56b29tJiZ0LlBhbnpvb20uem9vbVdpdGhDbGljayhlKTticmVhaztjYXNlXCJjbG9zZVwiOnRoaXMuZmFuY3lib3guY2xvc2UoKTticmVhaztjYXNlXCJuZXh0XCI6ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmZhbmN5Ym94Lm5leHQoKX19O3RoaXMuY2xpY2tUaW1lciYmKGNsZWFyVGltZW91dCh0aGlzLmNsaWNrVGltZXIpLHRoaXMuY2xpY2tUaW1lcj1udWxsKTtjb25zdCBuPXRoaXMuZmFuY3lib3gub3B0aW9uKFwiSW1hZ2UuY2xpY2tcIiksbz10aGlzLmZhbmN5Ym94Lm9wdGlvbihcIkltYWdlLmRvdWJsZUNsaWNrXCIpO28/MT09PWUuZGV0YWlsP3RoaXMuY2xpY2tUaW1lcj1zZXRUaW1lb3V0KCgoKT0+e3Mobil9KSwzMDApOjI9PT1lLmRldGFpbCYmcyhvKTpzKG4pfW9uUGFnZUNoYW5nZSh0LGUpe2NvbnN0IGk9dC5nZXRTbGlkZSgpO2Uuc2xpZGVzLmZvckVhY2goKHQ9Pnt0LlBhbnpvb20mJlwiZG9uZVwiPT09dC5zdGF0ZSYmdC5pbmRleCE9PWkuaW5kZXgmJnQuUGFuem9vbS5wYW5Ubyh7eDowLHk6MCxzY2FsZToxLGZyaWN0aW9uOi44fSl9KSl9YXR0YWNoKCl7dGhpcy5mYW5jeWJveC5vbih0aGlzLmV2ZW50cyl9ZGV0YWNoKCl7dGhpcy5mYW5jeWJveC5vZmYodGhpcy5ldmVudHMpfX1TLmRlZmF1bHRzPXtjYW5ab29tSW5DbGFzczpcImNhbi16b29tX2luXCIsY2FuWm9vbU91dENsYXNzOlwiY2FuLXpvb21fb3V0XCIsem9vbTohMCx6b29tT3BhY2l0eTpcImF1dG9cIix6b29tRnJpY3Rpb246LjgyLGlnbm9yZUNvdmVyZWRUaHVtYm5haWw6ITEsdG91Y2g6ITAsY2xpY2s6XCJ0b2dnbGVab29tXCIsZG91YmxlQ2xpY2s6bnVsbCx3aGVlbDpcInpvb21cIixmaXQ6XCJjb250YWluXCIsd3JhcDohMSxQYW56b29tOntyYXRpbzoxfX07Y29uc3QgQz1mdW5jdGlvbigpe2NvbnN0IHQ9d2luZG93LmxvY2F0aW9uLmhhc2guc3Vic3RyKDEpLGU9dC5zcGxpdChcIi1cIiksaT1lLmxlbmd0aD4xJiYvXlxcKz9cXGQrJC8udGVzdChlW2UubGVuZ3RoLTFdKSYmcGFyc2VJbnQoZS5wb3AoLTEpLDEwKXx8bnVsbDtyZXR1cm57aGFzaDp0LHNsdWc6ZS5qb2luKFwiLVwiKSxpbmRleDppfX07Y2xhc3MgRXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmZhbmN5Ym94PXQ7Zm9yKGNvbnN0IHQgb2ZbXCJvbkNoYW5nZVwiLFwib25DbG9zaW5nXCJdKXRoaXNbdF09dGhpc1t0XS5iaW5kKHRoaXMpO3RoaXMuZXZlbnRzPXtpbml0Q2Fyb3VzZWw6dGhpcy5vbkNoYW5nZSxcIkNhcm91c2VsLmNoYW5nZVwiOnRoaXMub25DaGFuZ2UsY2xvc2luZzp0aGlzLm9uQ2xvc2luZ30sdGhpcy5oYXNDcmVhdGVkSGlzdG9yeT0hMSx0aGlzLm9yaWdIYXNoPVwiXCIsdGhpcy50aW1lcj1udWxsfW9uQ2hhbmdlKCl7Y29uc3QgdD10aGlzLmZhbmN5Ym94LGU9dC5DYXJvdXNlbDt0aGlzLnRpbWVyJiZjbGVhclRpbWVvdXQodGhpcy50aW1lcik7Y29uc3QgaT1udWxsPT09ZS5wcmV2UGFnZSxzPXQuZ2V0U2xpZGUoKSxuPXMuJHRyaWdnZXImJnMuJHRyaWdnZXIuZGF0YXNldCxvPXdpbmRvdy5sb2NhdGlvbi5oYXNoLnN1YnN0cigxKTtsZXQgYT0hMTtpZihzLnNsdWcpYT1zLnNsdWc7ZWxzZXtsZXQgdD1uJiZuLmZhbmN5Ym94O3QmJnQubGVuZ3RoJiZcInRydWVcIiE9PXQmJihhPXQrKGUuc2xpZGVzLmxlbmd0aD4xP1wiLVwiKyhzLmluZGV4KzEpOlwiXCIpKX1pJiYodGhpcy5vcmlnSGFzaD1vIT09YT90aGlzLm9yaWdIYXNoOlwiXCIpLGEmJm8hPT1hJiYodGhpcy50aW1lcj1zZXRUaW1lb3V0KCgoKT0+e3RyeXt3aW5kb3cuaGlzdG9yeVtpP1wicHVzaFN0YXRlXCI6XCJyZXBsYWNlU3RhdGVcIl0oe30sZG9jdW1lbnQudGl0bGUsd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2grXCIjXCIrYSksaSYmKHRoaXMuaGFzQ3JlYXRlZEhpc3Rvcnk9ITApfWNhdGNoKHQpe319KSwzMDApKX1vbkNsb3NpbmcoKXtpZih0aGlzLnRpbWVyJiZjbGVhclRpbWVvdXQodGhpcy50aW1lciksITAhPT10aGlzLmhhc1NpbGVudENsb3NlKXtpZighdGhpcy5oYXNDcmVhdGVkSGlzdG9yeSl0cnl7cmV0dXJuIHZvaWQgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LGRvY3VtZW50LnRpdGxlLHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKyh0aGlzLm9yaWdIYXNoP1wiI1wiK3RoaXMub3JpZ0hhc2g6XCJcIikpfWNhdGNoKHQpe313aW5kb3cuaGlzdG9yeS5iYWNrKCl9fWF0dGFjaCh0KXt0Lm9uKHRoaXMuZXZlbnRzKX1kZXRhY2godCl7dC5vZmYodGhpcy5ldmVudHMpfXN0YXRpYyBzdGFydEZyb21VcmwoKXtpZihFLkZhbmN5Ym94LmdldEluc3RhbmNlKCkpcmV0dXJuO2NvbnN0e2hhc2g6dCxzbHVnOmUsaW5kZXg6aX09QygpO2lmKCFlKXJldHVybjtsZXQgcz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1zbHVnPVwiJHt0fVwiXWApO2lmKHMmJnMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJjbGlja1wiLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITB9KSksRS5GYW5jeWJveC5nZXRJbnN0YW5jZSgpKXJldHVybjtjb25zdCBuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLWZhbmN5Ym94PVwiJHtlfVwiXWApO24ubGVuZ3RoJiYobnVsbD09PWkmJjE9PT1uLmxlbmd0aD9zPW5bMF06aSYmKHM9bltpLTFdKSxzJiZzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiY2xpY2tcIix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSkpKX1zdGF0aWMgb25IYXNoQ2hhbmdlKCl7Y29uc3R7c2x1Zzp0LGluZGV4OmV9PUMoKSxpPUUuRmFuY3lib3guZ2V0SW5zdGFuY2UoKTtpZihpKXtpZih0KXtjb25zdCBzPWkuQ2Fyb3VzZWw7Zm9yKGxldCBlIG9mIHMuc2xpZGVzKWlmKGUuc2x1ZyYmZS5zbHVnPT09dClyZXR1cm4gcy5zbGlkZVRvKGUuaW5kZXgpO2NvbnN0IG49aS5nZXRTbGlkZSgpLG89bi4kdHJpZ2dlciYmbi4kdHJpZ2dlci5kYXRhc2V0O2lmKG8mJm8uZmFuY3lib3g9PT10KXJldHVybiBzLnNsaWRlVG8oZS0xKX1pLnBsdWdpbnMuSGFzaC5oYXNTaWxlbnRDbG9zZT0hMCxpLmNsb3NlKCl9RS5zdGFydEZyb21VcmwoKX1zdGF0aWMgb25SZWFkeSgpe3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiaGFzaGNoYW5nZVwiLEUub25IYXNoQ2hhbmdlLCExKSxFLnN0YXJ0RnJvbVVybCgpfXN0YXRpYyBjcmVhdGUoKXtiJiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+e0Uub25SZWFkeSgpfSkpfXN0YXRpYyBkZXN0cm95KCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJoYXNoY2hhbmdlXCIsRS5vbkhhc2hDaGFuZ2UsITEpfX1jb25zdCBQPXtwYWdlWE9mZnNldDowLHBhZ2VZT2Zmc2V0OjAsZWxlbWVudDooKT0+ZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnR8fGRvY3VtZW50Lm1vekZ1bGxTY3JlZW5FbGVtZW50fHxkb2N1bWVudC53ZWJraXRGdWxsc2NyZWVuRWxlbWVudCxhY3RpdmF0ZSh0KXtQLnBhZ2VYT2Zmc2V0PXdpbmRvdy5wYWdlWE9mZnNldCxQLnBhZ2VZT2Zmc2V0PXdpbmRvdy5wYWdlWU9mZnNldCx0LnJlcXVlc3RGdWxsc2NyZWVuP3QucmVxdWVzdEZ1bGxzY3JlZW4oKTp0Lm1velJlcXVlc3RGdWxsU2NyZWVuP3QubW96UmVxdWVzdEZ1bGxTY3JlZW4oKTp0LndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuP3Qud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKTp0Lm1zUmVxdWVzdEZ1bGxzY3JlZW4mJnQubXNSZXF1ZXN0RnVsbHNjcmVlbigpfSxkZWFjdGl2YXRlKCl7ZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4/ZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTpkb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVuP2RvY3VtZW50Lm1vekNhbmNlbEZ1bGxTY3JlZW4oKTpkb2N1bWVudC53ZWJraXRFeGl0RnVsbHNjcmVlbiYmZG9jdW1lbnQud2Via2l0RXhpdEZ1bGxzY3JlZW4oKX19O2NsYXNzIFR7Y29uc3RydWN0b3IodCl7dGhpcy5mYW5jeWJveD10LHRoaXMuYWN0aXZlPSExLHRoaXMuaGFuZGxlVmlzaWJpbGl0eUNoYW5nZT10aGlzLmhhbmRsZVZpc2liaWxpdHlDaGFuZ2UuYmluZCh0aGlzKX1pc0FjdGl2ZSgpe3JldHVybiB0aGlzLmFjdGl2ZX1zZXRUaW1lcigpe2lmKCF0aGlzLmFjdGl2ZXx8dGhpcy50aW1lcilyZXR1cm47Y29uc3QgdD10aGlzLmZhbmN5Ym94Lm9wdGlvbihcInNsaWRlc2hvdy5kZWxheVwiLDNlMyk7dGhpcy50aW1lcj1zZXRUaW1lb3V0KCgoKT0+e3RoaXMudGltZXI9bnVsbCx0aGlzLmZhbmN5Ym94Lm9wdGlvbihcImluZmluaXRlXCIpfHx0aGlzLmZhbmN5Ym94LmdldFNsaWRlKCkuaW5kZXghPT10aGlzLmZhbmN5Ym94LkNhcm91c2VsLnNsaWRlcy5sZW5ndGgtMT90aGlzLmZhbmN5Ym94Lm5leHQoKTp0aGlzLmZhbmN5Ym94Lmp1bXBUbygwLHtmcmljdGlvbjowfSl9KSx0KTtsZXQgZT10aGlzLiRwcm9ncmVzcztlfHwoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGUuY2xhc3NMaXN0LmFkZChcImZhbmN5Ym94X19wcm9ncmVzc1wiKSx0aGlzLmZhbmN5Ym94LiRjYXJvdXNlbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMuZmFuY3lib3guJGNhcm91c2VsKSx0aGlzLiRwcm9ncmVzcz1lLGUub2Zmc2V0SGVpZ2h0KSxlLnN0eWxlLnRyYW5zaXRpb25EdXJhdGlvbj1gJHt0fW1zYCxlLnN0eWxlLnRyYW5zZm9ybT1cInNjYWxlWCgxKVwifWNsZWFyVGltZXIoKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj1udWxsLHRoaXMuJHByb2dyZXNzJiYodGhpcy4kcHJvZ3Jlc3Muc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPVwiXCIsdGhpcy4kcHJvZ3Jlc3Muc3R5bGUudHJhbnNmb3JtPVwiXCIsdGhpcy4kcHJvZ3Jlc3Mub2Zmc2V0SGVpZ2h0KX1hY3RpdmF0ZSgpe3RoaXMuYWN0aXZlfHwodGhpcy5hY3RpdmU9ITAsdGhpcy5mYW5jeWJveC4kY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJoYXMtc2xpZGVzaG93XCIpLFwiZG9uZVwiPT09dGhpcy5mYW5jeWJveC5nZXRTbGlkZSgpLnN0YXRlJiZ0aGlzLnNldFRpbWVyKCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIix0aGlzLmhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsITEpKX1oYW5kbGVWaXNpYmlsaXR5Q2hhbmdlKCl7dGhpcy5kZWFjdGl2YXRlKCl9ZGVhY3RpdmF0ZSgpe3RoaXMuYWN0aXZlPSExLHRoaXMuY2xlYXJUaW1lcigpLHRoaXMuZmFuY3lib3guJGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwiaGFzLXNsaWRlc2hvd1wiKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLHRoaXMuaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwhMSl9dG9nZ2xlKCl7dGhpcy5hY3RpdmU/dGhpcy5kZWFjdGl2YXRlKCk6dGhpcy5mYW5jeWJveC5DYXJvdXNlbC5zbGlkZXMubGVuZ3RoPjEmJnRoaXMuYWN0aXZhdGUoKX19Y29uc3QgTD17aXRlbXM6e2NvdW50ZXI6e3R5cGU6XCJkaXZcIixjbGFzczpcImZhbmN5Ym94X19jb3VudGVyXCIsaHRtbDonPHNwYW4gZGF0YS1mYW5jeWJveC1pbmRleD1cIlwiPjwvc3Bhbj4mbmJzcDsvJm5ic3A7PHNwYW4gZGF0YS1mYW5jeWJveC1jb3VudD1cIlwiPjwvc3Bhbj4nLHRhYmluZGV4Oi0xLHBvc2l0aW9uOlwibGVmdFwifSxwcmV2Ont0eXBlOlwiYnV0dG9uXCIsY2xhc3M6XCJmYW5jeWJveF9fYnV0dG9uLS1wcmV2XCIsbGFiZWw6XCJQUkVWXCIsaHRtbDonPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHRhYmluZGV4PVwiLTFcIj48cGF0aCBkPVwiTTE1IDRsLTggOCA4IDhcIi8+PC9zdmc+JyxjbGljazpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdGhpcy5mYW5jeWJveC5wcmV2KCl9fSxuZXh0Ont0eXBlOlwiYnV0dG9uXCIsY2xhc3M6XCJmYW5jeWJveF9fYnV0dG9uLS1uZXh0XCIsbGFiZWw6XCJORVhUXCIsaHRtbDonPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHRhYmluZGV4PVwiLTFcIj48cGF0aCBkPVwiTTggNGw4IDgtOCA4XCIvPjwvc3ZnPicsY2xpY2s6ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZmFuY3lib3gubmV4dCgpfX0sZnVsbHNjcmVlbjp7dHlwZTpcImJ1dHRvblwiLGNsYXNzOlwiZmFuY3lib3hfX2J1dHRvbi0tZnVsbHNjcmVlblwiLGxhYmVsOlwiVE9HR0xFX0ZVTExTQ1JFRU5cIixodG1sOic8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgdGFiaW5kZXg9XCItMVwiPlxcbiAgICAgICAgICAgICAgICA8Zz48cGF0aCBkPVwiTTMgOCBWM2g1XCI+PC9wYXRoPjxwYXRoIGQ9XCJNMjEgOFYzaC01XCI+PC9wYXRoPjxwYXRoIGQ9XCJNOCAyMUgzdi01XCI+PC9wYXRoPjxwYXRoIGQ9XCJNMTYgMjFoNXYtNVwiPjwvcGF0aD48L2c+XFxuICAgICAgICAgICAgICAgIDxnPjxwYXRoIGQ9XCJNNyAydjVIMk0xNyAydjVoNU0yIDE3aDV2NU0yMiAxN2gtNXY1XCIvPjwvZz5cXG4gICAgICAgICAgICA8L3N2Zz4nLGNsaWNrOmZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSxQLmVsZW1lbnQoKT9QLmRlYWN0aXZhdGUoKTpQLmFjdGl2YXRlKHRoaXMuZmFuY3lib3guJGNvbnRhaW5lcil9fSxzbGlkZXNob3c6e3R5cGU6XCJidXR0b25cIixjbGFzczpcImZhbmN5Ym94X19idXR0b24tLXNsaWRlc2hvd1wiLGxhYmVsOlwiVE9HR0xFX1NMSURFU0hPV1wiLGh0bWw6JzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB0YWJpbmRleD1cIi0xXCI+XFxuICAgICAgICAgICAgICAgIDxnPjxwYXRoIGQ9XCJNNiA0djE2XCIvPjxwYXRoIGQ9XCJNMjAgMTJMNiAyMFwiLz48cGF0aCBkPVwiTTIwIDEyTDYgNFwiLz48L2c+XFxuICAgICAgICAgICAgICAgIDxnPjxwYXRoIGQ9XCJNNyA0djE1TTE3IDR2MTVcIi8+PC9nPlxcbiAgICAgICAgICAgIDwvc3ZnPicsY2xpY2s6ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuU2xpZGVzaG93LnRvZ2dsZSgpfX0sem9vbTp7dHlwZTpcImJ1dHRvblwiLGNsYXNzOlwiZmFuY3lib3hfX2J1dHRvbi0tem9vbVwiLGxhYmVsOlwiVE9HR0xFX1pPT01cIixodG1sOic8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgdGFiaW5kZXg9XCItMVwiPjxjaXJjbGUgY3g9XCIxMFwiIGN5PVwiMTBcIiByPVwiN1wiPjwvY2lyY2xlPjxwYXRoIGQ9XCJNMTYgMTYgTDIxIDIxXCI+PC9zdmc+JyxjbGljazpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCk7Y29uc3QgZT10aGlzLmZhbmN5Ym94LmdldFNsaWRlKCkuUGFuem9vbTtlJiZlLnRvZ2dsZVpvb20oKX19LGRvd25sb2FkOnt0eXBlOlwibGlua1wiLGxhYmVsOlwiRE9XTkxPQURcIixjbGFzczpcImZhbmN5Ym94X19idXR0b24tLWRvd25sb2FkXCIsaHRtbDonPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHRhYmluZGV4PVwiLTFcIj48cGF0aCBkPVwiTTEyIDE1VjNtMCAxMmwtNC00bTQgNGw0LTRNMiAxN2wuNjIgMi40OEEyIDIgMCAwMDQuNTYgMjFoMTQuODhhMiAyIDAgMDAxLjk0LTEuNTFMMjIgMTdcIi8+PC9zdmc+JyxjbGljazpmdW5jdGlvbih0KXt0LnN0b3BQcm9wYWdhdGlvbigpfX0sdGh1bWJzOnt0eXBlOlwiYnV0dG9uXCIsbGFiZWw6XCJUT0dHTEVfVEhVTUJTXCIsY2xhc3M6XCJmYW5jeWJveF9fYnV0dG9uLS10aHVtYnNcIixodG1sOic8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgdGFiaW5kZXg9XCItMVwiPjxjaXJjbGUgY3g9XCI0XCIgY3k9XCI0XCIgcj1cIjFcIiAvPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiNFwiIHI9XCIxXCIgdHJhbnNmb3JtPVwicm90YXRlKDkwIDEyIDQpXCIvPjxjaXJjbGUgY3g9XCIyMFwiIGN5PVwiNFwiIHI9XCIxXCIgdHJhbnNmb3JtPVwicm90YXRlKDkwIDIwIDQpXCIvPjxjaXJjbGUgY3g9XCI0XCIgY3k9XCIxMlwiIHI9XCIxXCIgdHJhbnNmb3JtPVwicm90YXRlKDkwIDQgMTIpXCIvPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMVwiIHRyYW5zZm9ybT1cInJvdGF0ZSg5MCAxMiAxMilcIi8+PGNpcmNsZSBjeD1cIjIwXCIgY3k9XCIxMlwiIHI9XCIxXCIgdHJhbnNmb3JtPVwicm90YXRlKDkwIDIwIDEyKVwiLz48Y2lyY2xlIGN4PVwiNFwiIGN5PVwiMjBcIiByPVwiMVwiIHRyYW5zZm9ybT1cInJvdGF0ZSg5MCA0IDIwKVwiLz48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjIwXCIgcj1cIjFcIiB0cmFuc2Zvcm09XCJyb3RhdGUoOTAgMTIgMjApXCIvPjxjaXJjbGUgY3g9XCIyMFwiIGN5PVwiMjBcIiByPVwiMVwiIHRyYW5zZm9ybT1cInJvdGF0ZSg5MCAyMCAyMClcIi8+PC9zdmc+JyxjbGljazpmdW5jdGlvbih0KXt0LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IGU9dGhpcy5mYW5jeWJveC5wbHVnaW5zLlRodW1icztlJiZlLnRvZ2dsZSgpfX0sY2xvc2U6e3R5cGU6XCJidXR0b25cIixsYWJlbDpcIkNMT1NFXCIsY2xhc3M6XCJmYW5jeWJveF9fYnV0dG9uLS1jbG9zZVwiLGh0bWw6JzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB0YWJpbmRleD1cIi0xXCI+PHBhdGggZD1cIk0yMCAyMEw0IDRtMTYgMEw0IDIwXCI+PC9wYXRoPjwvc3ZnPicsdGFiaW5kZXg6MSxjbGljazpmdW5jdGlvbih0KXt0LnN0b3BQcm9wYWdhdGlvbigpLHQucHJldmVudERlZmF1bHQoKSx0aGlzLmZhbmN5Ym94LmNsb3NlKCl9fX0sZGlzcGxheTpbXCJjb3VudGVyXCIsXCJ6b29tXCIsXCJzbGlkZXNob3dcIixcImZ1bGxzY3JlZW5cIixcInRodW1ic1wiLFwiY2xvc2VcIl0sYXV0b0VuYWJsZTohMH07Y2xhc3MgQXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmZhbmN5Ym94PXQsdGhpcy4kY29udGFpbmVyPW51bGwsdGhpcy5zdGF0ZT1cImluaXRcIjtmb3IoY29uc3QgdCBvZltcIm9uSW5pdFwiLFwib25QcmVwYXJlXCIsXCJvbkRvbmVcIixcIm9uS2V5ZG93blwiLFwib25DbG9zaW5nXCIsXCJvbkNoYW5nZVwiLFwib25TZXR0bGVcIixcIm9uUmVmcmVzaFwiXSl0aGlzW3RdPXRoaXNbdF0uYmluZCh0aGlzKTt0aGlzLmV2ZW50cz17aW5pdDp0aGlzLm9uSW5pdCxwcmVwYXJlOnRoaXMub25QcmVwYXJlLGRvbmU6dGhpcy5vbkRvbmUsa2V5ZG93bjp0aGlzLm9uS2V5ZG93bixjbG9zaW5nOnRoaXMub25DbG9zaW5nLFwiQ2Fyb3VzZWwuY2hhbmdlXCI6dGhpcy5vbkNoYW5nZSxcIkNhcm91c2VsLnNldHRsZVwiOnRoaXMub25TZXR0bGUsXCJDYXJvdXNlbC5QYW56b29tLnRvdWNoU3RhcnRcIjooKT0+dGhpcy5vblJlZnJlc2goKSxcIkltYWdlLnN0YXJ0QW5pbWF0aW9uXCI6KHQsZSk9PnRoaXMub25SZWZyZXNoKGUpLFwiSW1hZ2UuYWZ0ZXJVcGRhdGVcIjoodCxlKT0+dGhpcy5vblJlZnJlc2goZSl9fW9uSW5pdCgpe2lmKHRoaXMuZmFuY3lib3gub3B0aW9uKFwiVG9vbGJhci5hdXRvRW5hYmxlXCIpKXtsZXQgdD0hMTtmb3IoY29uc3QgZSBvZiB0aGlzLmZhbmN5Ym94Lml0ZW1zKWlmKFwiaW1hZ2VcIj09PWUudHlwZSl7dD0hMDticmVha31pZighdClyZXR1cm4gdm9pZCh0aGlzLnN0YXRlPVwiZGlzYWJsZWRcIil9Zm9yKGNvbnN0IGUgb2YgdGhpcy5mYW5jeWJveC5vcHRpb24oXCJUb29sYmFyLmRpc3BsYXlcIikpe2lmKFwiY2xvc2VcIj09PSh0KGUpP2UuaWQ6ZSkpe3RoaXMuZmFuY3lib3gub3B0aW9ucy5jbG9zZUJ1dHRvbj0hMTticmVha319fW9uUHJlcGFyZSgpe2lmKFwiaW5pdFwiPT09dGhpcy5zdGF0ZSYmKHRoaXMuYnVpbGQoKSx0aGlzLnVwZGF0ZSgpLHRoaXMuU2xpZGVzaG93PW5ldyBUKHRoaXMuZmFuY3lib3gpLCF0aGlzLmZhbmN5Ym94LkNhcm91c2VsLnByZXZQYWdlJiYodGhpcy5mYW5jeWJveC5vcHRpb24oXCJzbGlkZXNob3cuYXV0b1N0YXJ0XCIpJiZ0aGlzLlNsaWRlc2hvdy5hY3RpdmF0ZSgpLHRoaXMuZmFuY3lib3gub3B0aW9uKFwiZnVsbHNjcmVlbi5hdXRvU3RhcnRcIikmJiFQLmVsZW1lbnQoKSkpKXRyeXtQLmFjdGl2YXRlKHRoaXMuZmFuY3lib3guJGNvbnRhaW5lcil9Y2F0Y2godCl7fX1vbkZzQ2hhbmdlKCl7d2luZG93LnNjcm9sbFRvKFAucGFnZVhPZmZzZXQsUC5wYWdlWU9mZnNldCl9b25TZXR0bGUoKXt0aGlzLlNsaWRlc2hvdyYmdGhpcy5TbGlkZXNob3cuaXNBY3RpdmUoKSYmKHRoaXMuZmFuY3lib3guZ2V0U2xpZGUoKS5pbmRleCE9PXRoaXMuZmFuY3lib3guQ2Fyb3VzZWwuc2xpZGVzLmxlbmd0aC0xfHx0aGlzLmZhbmN5Ym94Lm9wdGlvbihcImluZmluaXRlXCIpP1wiZG9uZVwiPT09dGhpcy5mYW5jeWJveC5nZXRTbGlkZSgpLnN0YXRlJiZ0aGlzLlNsaWRlc2hvdy5zZXRUaW1lcigpOnRoaXMuU2xpZGVzaG93LmRlYWN0aXZhdGUoKSl9b25DaGFuZ2UoKXt0aGlzLnVwZGF0ZSgpLHRoaXMuU2xpZGVzaG93JiZ0aGlzLlNsaWRlc2hvdy5pc0FjdGl2ZSgpJiZ0aGlzLlNsaWRlc2hvdy5jbGVhclRpbWVyKCl9b25Eb25lKHQsZSl7ZS5pbmRleD09PXQuZ2V0U2xpZGUoKS5pbmRleCYmKHRoaXMudXBkYXRlKCksdGhpcy5TbGlkZXNob3cmJnRoaXMuU2xpZGVzaG93LmlzQWN0aXZlKCkmJih0aGlzLmZhbmN5Ym94Lm9wdGlvbihcImluZmluaXRlXCIpfHxlLmluZGV4IT09dGhpcy5mYW5jeWJveC5DYXJvdXNlbC5zbGlkZXMubGVuZ3RoLTE/dGhpcy5TbGlkZXNob3cuc2V0VGltZXIoKTp0aGlzLlNsaWRlc2hvdy5kZWFjdGl2YXRlKCkpKX1vblJlZnJlc2godCl7dCYmdC5pbmRleCE9PXRoaXMuZmFuY3lib3guZ2V0U2xpZGUoKS5pbmRleHx8KHRoaXMudXBkYXRlKCksIXRoaXMuU2xpZGVzaG93fHwhdGhpcy5TbGlkZXNob3cuaXNBY3RpdmUoKXx8dCYmXCJkb25lXCIhPT10LnN0YXRlfHx0aGlzLlNsaWRlc2hvdy5kZWFjdGl2YXRlKCkpfW9uS2V5ZG93bih0LGUsaSl7XCIgXCI9PT1lJiYodGhpcy5TbGlkZXNob3cudG9nZ2xlKCksaS5wcmV2ZW50RGVmYXVsdCgpKX1vbkNsb3NpbmcoKXt0aGlzLlNsaWRlc2hvdyYmdGhpcy5TbGlkZXNob3cuZGVhY3RpdmF0ZSgpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmdWxsc2NyZWVuY2hhbmdlXCIsdGhpcy5vbkZzQ2hhbmdlKX1jcmVhdGVFbGVtZW50KHQpe2xldCBlO3JldHVyblwiZGl2XCI9PT10LnR5cGU/ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpOihlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCI9PT10LnR5cGU/XCJhXCI6XCJidXR0b25cIiksZS5jbGFzc0xpc3QuYWRkKFwiY2Fyb3VzZWxfX2J1dHRvblwiKSksZS5pbm5lckhUTUw9dC5odG1sLGUuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIix0LnRhYmluZGV4fHwwKSx0LmNsYXNzJiZlLmNsYXNzTGlzdC5hZGQoLi4udC5jbGFzcy5zcGxpdChcIiBcIikpLHQubGFiZWwmJmUuc2V0QXR0cmlidXRlKFwidGl0bGVcIix0aGlzLmZhbmN5Ym94LmxvY2FsaXplKGB7eyR7dC5sYWJlbH19fWApKSx0LmNsaWNrJiZlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHQuY2xpY2suYmluZCh0aGlzKSksXCJwcmV2XCI9PT10LmlkJiZlLnNldEF0dHJpYnV0ZShcImRhdGEtZmFuY3lib3gtcHJldlwiLFwiXCIpLFwibmV4dFwiPT09dC5pZCYmZS5zZXRBdHRyaWJ1dGUoXCJkYXRhLWZhbmN5Ym94LW5leHRcIixcIlwiKSxlfWJ1aWxkKCl7dGhpcy5jbGVhbnVwKCk7Y29uc3QgaT10aGlzLmZhbmN5Ym94Lm9wdGlvbihcIlRvb2xiYXIuaXRlbXNcIikscz1be3Bvc2l0aW9uOlwibGVmdFwiLGl0ZW1zOltdfSx7cG9zaXRpb246XCJjZW50ZXJcIixpdGVtczpbXX0se3Bvc2l0aW9uOlwicmlnaHRcIixpdGVtczpbXX1dLG49dGhpcy5mYW5jeWJveC5wbHVnaW5zLlRodW1icztmb3IoY29uc3QgbyBvZiB0aGlzLmZhbmN5Ym94Lm9wdGlvbihcIlRvb2xiYXIuZGlzcGxheVwiKSl7bGV0IGEscjtpZih0KG8pPyhhPW8uaWQscj1lKHt9LGlbYV0sbykpOihhPW8scj1pW2FdKSxbXCJjb3VudGVyXCIsXCJuZXh0XCIsXCJwcmV2XCIsXCJzbGlkZXNob3dcIl0uaW5jbHVkZXMoYSkmJnRoaXMuZmFuY3lib3guaXRlbXMubGVuZ3RoPDIpY29udGludWU7aWYoXCJmdWxsc2NyZWVuXCI9PT1hKXtpZighZG9jdW1lbnQuZnVsbHNjcmVlbkVuYWJsZWR8fHdpbmRvdy5mdWxsU2NyZWVuKWNvbnRpbnVlO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJmdWxsc2NyZWVuY2hhbmdlXCIsdGhpcy5vbkZzQ2hhbmdlKX1pZihcInRodW1ic1wiPT09YSYmKCFufHxcImRpc2FibGVkXCI9PT1uLnN0YXRlKSljb250aW51ZTtpZighciljb250aW51ZTtsZXQgbD1yLnBvc2l0aW9ufHxcInJpZ2h0XCIsaD1zLmZpbmQoKHQ9PnQucG9zaXRpb249PT1sKSk7aCYmaC5pdGVtcy5wdXNoKHIpfWNvbnN0IG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtvLmNsYXNzTGlzdC5hZGQoXCJmYW5jeWJveF9fdG9vbGJhclwiKTtmb3IoY29uc3QgdCBvZiBzKWlmKHQuaXRlbXMubGVuZ3RoKXtjb25zdCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ZS5jbGFzc0xpc3QuYWRkKFwiZmFuY3lib3hfX3Rvb2xiYXJfX2l0ZW1zXCIpLGUuY2xhc3NMaXN0LmFkZChgZmFuY3lib3hfX3Rvb2xiYXJfX2l0ZW1zLS0ke3QucG9zaXRpb259YCk7Zm9yKGNvbnN0IGkgb2YgdC5pdGVtcyllLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlRWxlbWVudChpKSk7by5hcHBlbmRDaGlsZChlKX10aGlzLmZhbmN5Ym94LiRjYXJvdXNlbC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShvLHRoaXMuZmFuY3lib3guJGNhcm91c2VsKSx0aGlzLiRjb250YWluZXI9b311cGRhdGUoKXtjb25zdCB0PXRoaXMuZmFuY3lib3guZ2V0U2xpZGUoKSxlPXQuaW5kZXgsaT10aGlzLmZhbmN5Ym94Lml0ZW1zLmxlbmd0aCxzPXQuZG93bmxvYWRTcmN8fChcImltYWdlXCIhPT10LnR5cGV8fHQuZXJyb3I/bnVsbDp0LnNyYyk7Zm9yKGNvbnN0IHQgb2YgdGhpcy5mYW5jeWJveC4kY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJhLmZhbmN5Ym94X19idXR0b24tLWRvd25sb2FkXCIpKXM/KHQucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIiksdC5zZXRBdHRyaWJ1dGUoXCJocmVmXCIscyksdC5zZXRBdHRyaWJ1dGUoXCJkb3dubG9hZFwiLHMpLHQuc2V0QXR0cmlidXRlKFwidGFyZ2V0XCIsXCJfYmxhbmtcIikpOih0LnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsXCJcIiksdC5yZW1vdmVBdHRyaWJ1dGUoXCJocmVmXCIpLHQucmVtb3ZlQXR0cmlidXRlKFwiZG93bmxvYWRcIikpO2NvbnN0IG49dC5QYW56b29tLG89biYmbi5vcHRpb24oXCJtYXhTY2FsZVwiKT5uLm9wdGlvbihcImJhc2VTY2FsZVwiKTtmb3IoY29uc3QgdCBvZiB0aGlzLmZhbmN5Ym94LiRjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIi5mYW5jeWJveF9fYnV0dG9uLS16b29tXCIpKW8/dC5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTp0LnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsXCJcIik7Zm9yKGNvbnN0IGUgb2YgdGhpcy5mYW5jeWJveC4kY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1mYW5jeWJveC1pbmRleF1cIikpZS5pbm5lckhUTUw9dC5pbmRleCsxO2Zvcihjb25zdCB0IG9mIHRoaXMuZmFuY3lib3guJGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtZmFuY3lib3gtY291bnRdXCIpKXQuaW5uZXJIVE1MPWk7aWYoIXRoaXMuZmFuY3lib3gub3B0aW9uKFwiaW5maW5pdGVcIikpe2Zvcihjb25zdCB0IG9mIHRoaXMuZmFuY3lib3guJGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtZmFuY3lib3gtcHJldl1cIikpMD09PWU/dC5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLFwiXCIpOnQucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7Zm9yKGNvbnN0IHQgb2YgdGhpcy5mYW5jeWJveC4kY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1mYW5jeWJveC1uZXh0XVwiKSllPT09aS0xP3Quc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIixcIlwiKTp0LnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpfX1jbGVhbnVwKCl7dGhpcy5TbGlkZXNob3cmJnRoaXMuU2xpZGVzaG93LmlzQWN0aXZlKCkmJnRoaXMuU2xpZGVzaG93LmNsZWFyVGltZXIoKSx0aGlzLiRjb250YWluZXImJnRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKSx0aGlzLiRjb250YWluZXI9bnVsbH1hdHRhY2goKXt0aGlzLmZhbmN5Ym94Lm9uKHRoaXMuZXZlbnRzKX1kZXRhY2goKXt0aGlzLmZhbmN5Ym94Lm9mZih0aGlzLmV2ZW50cyksdGhpcy5jbGVhbnVwKCl9fUEuZGVmYXVsdHM9TDtjb25zdCBrPXtTY3JvbGxMb2NrOmNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZmFuY3lib3g9dCx0aGlzLnZpZXdwb3J0PW51bGwsdGhpcy5wZW5kaW5nVXBkYXRlPW51bGw7Zm9yKGNvbnN0IHQgb2ZbXCJvblJlYWR5XCIsXCJvblJlc2l6ZVwiLFwib25Ub3VjaHN0YXJ0XCIsXCJvblRvdWNobW92ZVwiXSl0aGlzW3RdPXRoaXNbdF0uYmluZCh0aGlzKX1vblJlYWR5KCl7Y29uc3QgdD13aW5kb3cudmlzdWFsVmlld3BvcnQ7dCYmKHRoaXMudmlld3BvcnQ9dCx0aGlzLnN0YXJ0WT0wLHQuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHRoaXMub25SZXNpemUpLHRoaXMudXBkYXRlVmlld3BvcnQoKSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsdGhpcy5vblRvdWNoc3RhcnQse3Bhc3NpdmU6ITF9KSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLHRoaXMub25Ub3VjaG1vdmUse3Bhc3NpdmU6ITF9KX1vblJlc2l6ZSgpe3RoaXMudXBkYXRlVmlld3BvcnQoKX11cGRhdGVWaWV3cG9ydCgpe2NvbnN0IHQ9dGhpcy5mYW5jeWJveCxlPXRoaXMudmlld3BvcnQsaT1lLnNjYWxlfHwxLHM9dC4kY29udGFpbmVyO2lmKCFzKXJldHVybjtsZXQgbj1cIlwiLG89XCJcIixhPVwiXCI7aS0xPi4xJiYobj1lLndpZHRoKmkrXCJweFwiLG89ZS5oZWlnaHQqaStcInB4XCIsYT1gdHJhbnNsYXRlM2QoJHtlLm9mZnNldExlZnR9cHgsICR7ZS5vZmZzZXRUb3B9cHgsIDApIHNjYWxlKCR7MS9pfSlgKSxzLnN0eWxlLndpZHRoPW4scy5zdHlsZS5oZWlnaHQ9byxzLnN0eWxlLnRyYW5zZm9ybT1hfW9uVG91Y2hzdGFydCh0KXt0aGlzLnN0YXJ0WT10LnRvdWNoZXM/dC50b3VjaGVzWzBdLnNjcmVlblk6dC5zY3JlZW5ZfW9uVG91Y2htb3ZlKHQpe2NvbnN0IGU9dGhpcy5zdGFydFksaT13aW5kb3cuaW5uZXJXaWR0aC93aW5kb3cuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoO2lmKHQudG91Y2hlcy5sZW5ndGg+MXx8MSE9PWkpcmV0dXJuO2NvbnN0IHM9dC50YXJnZXQsbj1sKHMpO2lmKCFuKXJldHVybiB2b2lkIHQucHJldmVudERlZmF1bHQoKTtjb25zdCBvPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG4pLGE9cGFyc2VJbnQoby5nZXRQcm9wZXJ0eVZhbHVlKFwiaGVpZ2h0XCIpLDEwKSxyPXQudG91Y2hlcz90LnRvdWNoZXNbMF0uc2NyZWVuWTp0LnNjcmVlblksaD1lPD1yJiYwPT09bi5zY3JvbGxUb3AsYz1lPj1yJiZuLnNjcm9sbEhlaWdodC1uLnNjcm9sbFRvcD09PWE7KGh8fGMpJiZ0LnByZXZlbnREZWZhdWx0KCl9Y2xlYW51cCgpe3RoaXMucGVuZGluZ1VwZGF0ZSYmKGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMucGVuZGluZ1VwZGF0ZSksdGhpcy5wZW5kaW5nVXBkYXRlPW51bGwpO2NvbnN0IHQ9dGhpcy52aWV3cG9ydDt0JiYodC5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdGhpcy5vblJlc2l6ZSksdGhpcy52aWV3cG9ydD1udWxsKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIix0aGlzLm9uVG91Y2hzdGFydCwhMSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIix0aGlzLm9uVG91Y2htb3ZlLCExKX1hdHRhY2goKXt0aGlzLmZhbmN5Ym94Lm9uKFwiaW5pdExheW91dFwiLHRoaXMub25SZWFkeSl9ZGV0YWNoKCl7dGhpcy5mYW5jeWJveC5vZmYoXCJpbml0TGF5b3V0XCIsdGhpcy5vblJlYWR5KSx0aGlzLmNsZWFudXAoKX19LFRodW1iczp2LEh0bWw6JCxUb29sYmFyOkEsSW1hZ2U6UyxIYXNoOkV9O2NvbnN0IHo9e3N0YXJ0SW5kZXg6MCxwcmVsb2FkOjEsaW5maW5pdGU6ITAsc2hvd0NsYXNzOlwiZmFuY3lib3gtem9vbUluVXBcIixoaWRlQ2xhc3M6XCJmYW5jeWJveC1mYWRlT3V0XCIsYW5pbWF0ZWQ6ITAsaGlkZVNjcm9sbGJhcjohMCxwYXJlbnRFbDpudWxsLG1haW5DbGFzczpudWxsLGF1dG9Gb2N1czohMCx0cmFwRm9jdXM6ITAscGxhY2VGb2N1c0JhY2s6ITAsY2xpY2s6XCJjbG9zZVwiLGNsb3NlQnV0dG9uOlwiaW5zaWRlXCIsZHJhZ1RvQ2xvc2U6ITAsa2V5Ym9hcmQ6e0VzY2FwZTpcImNsb3NlXCIsRGVsZXRlOlwiY2xvc2VcIixCYWNrc3BhY2U6XCJjbG9zZVwiLFBhZ2VVcDpcIm5leHRcIixQYWdlRG93bjpcInByZXZcIixBcnJvd1VwOlwibmV4dFwiLEFycm93RG93bjpcInByZXZcIixBcnJvd1JpZ2h0OlwibmV4dFwiLEFycm93TGVmdDpcInByZXZcIn0sdGVtcGxhdGU6e2Nsb3NlQnV0dG9uOic8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgdGFiaW5kZXg9XCItMVwiPjxwYXRoIGQ9XCJNMjAgMjBMNCA0bTE2IDBMNCAyMFwiLz48L3N2Zz4nLHNwaW5uZXI6JzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNTBcIiBoZWlnaHQ9XCI1MFwiIHZpZXdCb3g9XCIyNSAyNSA1MCA1MFwiIHRhYmluZGV4PVwiLTFcIj48Y2lyY2xlIGN4PVwiNTBcIiBjeT1cIjUwXCIgcj1cIjIwXCIvPjwvc3ZnPicsbWFpbjpudWxsfSxsMTBuOntDTE9TRTpcIkNsb3NlXCIsTkVYVDpcIk5leHRcIixQUkVWOlwiUHJldmlvdXNcIixNT0RBTDpcIllvdSBjYW4gY2xvc2UgdGhpcyBtb2RhbCBjb250ZW50IHdpdGggdGhlIEVTQyBrZXlcIixFUlJPUjpcIlNvbWV0aGluZyBXZW50IFdyb25nLCBQbGVhc2UgVHJ5IEFnYWluIExhdGVyXCIsSU1BR0VfRVJST1I6XCJJbWFnZSBOb3QgRm91bmRcIixFTEVNRU5UX05PVF9GT1VORDpcIkhUTUwgRWxlbWVudCBOb3QgRm91bmRcIixBSkFYX05PVF9GT1VORDpcIkVycm9yIExvYWRpbmcgQUpBWCA6IE5vdCBGb3VuZFwiLEFKQVhfRk9SQklEREVOOlwiRXJyb3IgTG9hZGluZyBBSkFYIDogRm9yYmlkZGVuXCIsSUZSQU1FX0VSUk9SOlwiRXJyb3IgTG9hZGluZyBQYWdlXCIsVE9HR0xFX1pPT006XCJUb2dnbGUgem9vbSBsZXZlbFwiLFRPR0dMRV9USFVNQlM6XCJUb2dnbGUgdGh1bWJuYWlsc1wiLFRPR0dMRV9TTElERVNIT1c6XCJUb2dnbGUgc2xpZGVzaG93XCIsVE9HR0xFX0ZVTExTQ1JFRU46XCJUb2dnbGUgZnVsbC1zY3JlZW4gbW9kZVwiLERPV05MT0FEOlwiRG93bmxvYWRcIn19O2xldCBfPTA7Y2xhc3MgTyBleHRlbmRzIGh7Y29uc3RydWN0b3IodCxpPXt9KXtzdXBlcihlKCEwLHt9LHosaSkpLHRoaXMuYmluZEhhbmRsZXJzKCksdGhpcy5zdGF0ZT1cImluaXRcIix0aGlzLnNldEl0ZW1zKHQpLHRoaXMuYXR0YWNoUGx1Z2lucyhPLlBsdWdpbnMpLHRoaXMudHJpZ2dlcihcImluaXRcIiksITA9PT10aGlzLm9wdGlvbihcImhpZGVTY3JvbGxiYXJcIikmJnRoaXMuaGlkZVNjcm9sbGJhcigpLHRoaXMuaW5pdExheW91dCgpLHRoaXMuaW5pdENhcm91c2VsKCksdGhpcy5hdHRhY2hFdmVudHMoKSx0aGlzLnRyaWdnZXIoXCJwcmVwYXJlXCIpLHRoaXMuc3RhdGU9XCJyZWFkeVwiLHRoaXMudHJpZ2dlcihcInJlYWR5XCIpLHRoaXMuJGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiLFwiZmFsc2VcIiksdGhpcy5vcHRpb24oXCJ0cmFwRm9jdXNcIikmJnRoaXMuZm9jdXMoKX1iaW5kSGFuZGxlcnMoKXtmb3IoY29uc3QgdCBvZltcIm9uTW91c2Vkb3duXCIsXCJvbktleWRvd25cIixcIm9uQ2xpY2tcIixcIm9uQ3JlYXRlU2xpZGVcIixcIm9uVG91Y2hNb3ZlXCIsXCJvblRvdWNoRW5kXCIsXCJvblRyYW5zZm9ybVwiXSl0aGlzW3RdPXRoaXNbdF0uYmluZCh0aGlzKX1hdHRhY2hFdmVudHMoKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsdGhpcy5vbk1vdXNlZG93biksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIix0aGlzLm9uS2V5ZG93biksdGhpcy4kY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHRoaXMub25DbGljayl9ZGV0YWNoRXZlbnRzKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLHRoaXMub25Nb3VzZWRvd24pLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsdGhpcy5vbktleWRvd24pLHRoaXMuJGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLm9uQ2xpY2spfWluaXRMYXlvdXQoKXt0aGlzLiRyb290PXRoaXMub3B0aW9uKFwicGFyZW50RWxcIil8fGRvY3VtZW50LmJvZHk7bGV0IHQ9dGhpcy5vcHRpb24oXCJ0ZW1wbGF0ZS5tYWluXCIpO3QmJih0aGlzLiRyb290Lmluc2VydEFkamFjZW50SFRNTChcImJlZm9yZWVuZFwiLHRoaXMubG9jYWxpemUodCkpLHRoaXMuJGNvbnRhaW5lcj10aGlzLiRyb290LnF1ZXJ5U2VsZWN0b3IoXCIuZmFuY3lib3hfX2NvbnRhaW5lclwiKSksdGhpcy4kY29udGFpbmVyfHwodGhpcy4kY29udGFpbmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksdGhpcy4kcm9vdC5hcHBlbmRDaGlsZCh0aGlzLiRjb250YWluZXIpKSx0aGlzLiRjb250YWluZXIub25zY3JvbGw9KCk9Pih0aGlzLiRjb250YWluZXIuc2Nyb2xsTGVmdD0wLCExKSxPYmplY3QuZW50cmllcyh7Y2xhc3M6XCJmYW5jeWJveF9fY29udGFpbmVyXCIscm9sZTpcImRpYWxvZ1wiLFwiYXJpYS1tb2RhbFwiOlwidHJ1ZVwiLFwiYXJpYS1oaWRkZW5cIjpcInRydWVcIixcImFyaWEtbGFiZWxcIjp0aGlzLmxvY2FsaXplKFwie3tNT0RBTH19XCIpfSkuZm9yRWFjaCgodD0+dGhpcy4kY29udGFpbmVyLnNldEF0dHJpYnV0ZSguLi50KSkpLHRoaXMub3B0aW9uKFwiYW5pbWF0ZWRcIikmJnRoaXMuJGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaXMtYW5pbWF0ZWRcIiksdGhpcy4kYmFja2Ryb3A9dGhpcy4kY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuZmFuY3lib3hfX2JhY2tkcm9wXCIpLHRoaXMuJGJhY2tkcm9wfHwodGhpcy4kYmFja2Ryb3A9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLiRiYWNrZHJvcC5jbGFzc0xpc3QuYWRkKFwiZmFuY3lib3hfX2JhY2tkcm9wXCIpLHRoaXMuJGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLiRiYWNrZHJvcCkpLHRoaXMuJGNhcm91c2VsPXRoaXMuJGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmZhbmN5Ym94X19jYXJvdXNlbFwiKSx0aGlzLiRjYXJvdXNlbHx8KHRoaXMuJGNhcm91c2VsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksdGhpcy4kY2Fyb3VzZWwuY2xhc3NMaXN0LmFkZChcImZhbmN5Ym94X19jYXJvdXNlbFwiKSx0aGlzLiRjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy4kY2Fyb3VzZWwpKSx0aGlzLiRjb250YWluZXIuRmFuY3lib3g9dGhpcyx0aGlzLmlkPXRoaXMuJGNvbnRhaW5lci5nZXRBdHRyaWJ1dGUoXCJpZFwiKSx0aGlzLmlkfHwodGhpcy5pZD10aGlzLm9wdGlvbnMuaWR8fCsrXyx0aGlzLiRjb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIixcImZhbmN5Ym94LVwiK3RoaXMuaWQpKTtjb25zdCBlPXRoaXMub3B0aW9ucy5tYWluQ2xhc3M7cmV0dXJuIGUmJnRoaXMuJGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKC4uLmUuc3BsaXQoXCIgXCIpKSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcIndpdGgtZmFuY3lib3hcIiksdGhpcy50cmlnZ2VyKFwiaW5pdExheW91dFwiKSx0aGlzfXNldEl0ZW1zKHQpe2NvbnN0IGU9W107Zm9yKGNvbnN0IGkgb2YgdCl7Y29uc3QgdD1pLiR0cmlnZ2VyO2lmKHQpe2NvbnN0IGU9dC5kYXRhc2V0fHx7fTtpLnNyYz1lLnNyY3x8dC5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpfHxpLnNyYyxpLnR5cGU9ZS50eXBlfHxpLnR5cGUsIWkuc3JjJiZ0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCYmKGkuc3JjPXQuY3VycmVudFNyY3x8aS4kdHJpZ2dlci5zcmMpfWxldCBzPWkuJHRodW1iO2lmKCFzKXtsZXQgdD1pLiR0cmlnZ2VyJiZpLiR0cmlnZ2VyLm9yaWdUYXJnZXQ7dCYmKHM9dCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQ/dDp0LnF1ZXJ5U2VsZWN0b3IoXCJpbWdcIikpLCFzJiZpLiR0cmlnZ2VyJiYocz1pLiR0cmlnZ2VyIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudD9pLiR0cmlnZ2VyOmkuJHRyaWdnZXIucXVlcnlTZWxlY3RvcihcImltZ1wiKSl9aS4kdGh1bWI9c3x8bnVsbDtsZXQgbj1pLnRodW1iOyFuJiZpLiR0aHVtYiYmKG49cy5jdXJyZW50U3JjfHxzLnNyYyksbnx8XCJpbWFnZVwiIT09aS50eXBlfHwobj1pLnNyYyksaS50aHVtYj1ufHxudWxsLGkuY2FwdGlvbj1pLmNhcHRpb258fFwiXCIsZS5wdXNoKGkpfXRoaXMuaXRlbXM9ZX1pbml0Q2Fyb3VzZWwoKXtyZXR1cm4gdGhpcy5DYXJvdXNlbD1uZXcgeSh0aGlzLiRjYXJvdXNlbCxlKCEwLHt9LHtjbGFzc05hbWVzOnt2aWV3cG9ydDpcImZhbmN5Ym94X192aWV3cG9ydFwiLHRyYWNrOlwiZmFuY3lib3hfX3RyYWNrXCIsc2xpZGU6XCJmYW5jeWJveF9fc2xpZGVcIn0sdGV4dFNlbGVjdGlvbjohMCxwcmVsb2FkOnRoaXMub3B0aW9uKFwicHJlbG9hZFwiKSxmcmljdGlvbjouODgsc2xpZGVzOnRoaXMuaXRlbXMsaW5pdGlhbFBhZ2U6dGhpcy5vcHRpb25zLnN0YXJ0SW5kZXgsc2xpZGVzUGVyUGFnZToxLGluZmluaXRlWDp0aGlzLm9wdGlvbihcImluZmluaXRlXCIpLGluZmluaXRlWTohMCxsMTBuOnRoaXMub3B0aW9uKFwibDEwblwiKSxEb3RzOiExLE5hdmlnYXRpb246e2NsYXNzTmFtZXM6e21haW46XCJmYW5jeWJveF9fbmF2XCIsYnV0dG9uOlwiY2Fyb3VzZWxfX2J1dHRvblwiLG5leHQ6XCJpcy1uZXh0XCIscHJldjpcImlzLXByZXZcIn19LFBhbnpvb206e3RleHRTZWxlY3Rpb246ITAscGFuT25seVpvb21lZDooKT0+dGhpcy5DYXJvdXNlbCYmdGhpcy5DYXJvdXNlbC5wYWdlcyYmdGhpcy5DYXJvdXNlbC5wYWdlcy5sZW5ndGg8MiYmIXRoaXMub3B0aW9ucy5kcmFnVG9DbG9zZSxsb2NrQXhpczooKT0+e2lmKHRoaXMuQ2Fyb3VzZWwpe2xldCB0PVwieFwiO3JldHVybiB0aGlzLm9wdGlvbnMuZHJhZ1RvQ2xvc2UmJih0Kz1cInlcIiksdH19fSxvbjp7XCIqXCI6KHQsLi4uZSk9PnRoaXMudHJpZ2dlcihgQ2Fyb3VzZWwuJHt0fWAsLi4uZSksaW5pdDp0PT50aGlzLkNhcm91c2VsPXQsY3JlYXRlU2xpZGU6dGhpcy5vbkNyZWF0ZVNsaWRlfX0sdGhpcy5vcHRpb24oXCJDYXJvdXNlbFwiKSkpLHRoaXMub3B0aW9uKFwiZHJhZ1RvQ2xvc2VcIikmJnRoaXMuQ2Fyb3VzZWwuUGFuem9vbS5vbih7dG91Y2hNb3ZlOnRoaXMub25Ub3VjaE1vdmUsYWZ0ZXJUcmFuc2Zvcm06dGhpcy5vblRyYW5zZm9ybSx0b3VjaEVuZDp0aGlzLm9uVG91Y2hFbmR9KSx0aGlzLnRyaWdnZXIoXCJpbml0Q2Fyb3VzZWxcIiksdGhpc31vbkNyZWF0ZVNsaWRlKHQsZSl7bGV0IGk9ZS5jYXB0aW9ufHxcIlwiO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMub3B0aW9ucy5jYXB0aW9uJiYoaT10aGlzLm9wdGlvbnMuY2FwdGlvbi5jYWxsKHRoaXMsdGhpcyx0aGlzLkNhcm91c2VsLGUpKSxcInN0cmluZ1wiPT10eXBlb2YgaSYmaS5sZW5ndGgpe2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxzPWBmYW5jeWJveF9fY2FwdGlvbl8ke3RoaXMuaWR9XyR7ZS5pbmRleH1gO3QuY2xhc3NOYW1lPVwiZmFuY3lib3hfX2NhcHRpb25cIix0LmlubmVySFRNTD1pLHQuc2V0QXR0cmlidXRlKFwiaWRcIixzKSxlLiRjYXB0aW9uPWUuJGVsLmFwcGVuZENoaWxkKHQpLGUuJGVsLmNsYXNzTGlzdC5hZGQoXCJoYXMtY2FwdGlvblwiKSxlLiRlbC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsbGVkYnlcIixzKX19b25DbGljayh0KXtpZih0LmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKHQudGFyZ2V0LmNsb3Nlc3QoXCIuZmFuY3lib3hfX2NvbnRlbnRcIikpcmV0dXJuO2lmKHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpLmxlbmd0aClyZXR1cm47aWYoITE9PT10aGlzLnRyaWdnZXIoXCJjbGlja1wiLHQpKXJldHVybjtzd2l0Y2godGhpcy5vcHRpb24oXCJjbGlja1wiKSl7Y2FzZVwiY2xvc2VcIjp0aGlzLmNsb3NlKCk7YnJlYWs7Y2FzZVwibmV4dFwiOnRoaXMubmV4dCgpfX1vblRvdWNoTW92ZSgpe2NvbnN0IHQ9dGhpcy5nZXRTbGlkZSgpLlBhbnpvb207cmV0dXJuIXR8fDE9PT10LmNvbnRlbnQuc2NhbGV9b25Ub3VjaEVuZCh0KXtjb25zdCBlPXQuZHJhZ09mZnNldC55O01hdGguYWJzKGUpPj0xNTB8fE1hdGguYWJzKGUpPj0zNSYmdC5kcmFnT2Zmc2V0LnRpbWU8MzUwPyh0aGlzLm9wdGlvbihcImhpZGVDbGFzc1wiKSYmKHRoaXMuZ2V0U2xpZGUoKS5oaWRlQ2xhc3M9XCJmYW5jeWJveC10aHJvd091dFwiKyh0LmNvbnRlbnQueTwwP1wiVXBcIjpcIkRvd25cIikpLHRoaXMuY2xvc2UoKSk6XCJ5XCI9PT10LmxvY2tBeGlzJiZ0LnBhblRvKHt5OjB9KX1vblRyYW5zZm9ybSh0KXtpZih0aGlzLiRiYWNrZHJvcCl7Y29uc3QgZT1NYXRoLmFicyh0LmNvbnRlbnQueSksaT1lPDE/XCJcIjpNYXRoLm1heCguMzMsTWF0aC5taW4oMSwxLWUvdC5jb250ZW50LmZpdEhlaWdodCoxLjUpKTt0aGlzLiRjb250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCItLWZhbmN5Ym94LXRzXCIsaT9cIjBzXCI6XCJcIiksdGhpcy4kY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwiLS1mYW5jeWJveC1vcGFjaXR5XCIsaSl9fW9uTW91c2Vkb3duKCl7ZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiaXMtdXNpbmctbW91c2VcIil9b25LZXlkb3duKHQpe2lmKE8uZ2V0SW5zdGFuY2UoKS5pZCE9PXRoaXMuaWQpcmV0dXJuO2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcImlzLXVzaW5nLW1vdXNlXCIpO2NvbnN0IGU9dC5rZXk7aWYoXCJUYWJcIj09PWUmJnRoaXMub3B0aW9uKFwidHJhcEZvY3VzXCIpKXJldHVybiB2b2lkIHRoaXMuZm9jdXModCk7Y29uc3QgaT10aGlzLm9wdGlvbihcImtleWJvYXJkXCIpO2lmKCFpfHx0LmN0cmxLZXl8fHQuYWx0S2V5fHx0LnNoaWZ0S2V5KXJldHVybjtjb25zdCBzPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LG49cyYmcy5jb250YWlucyhcImNhcm91c2VsX19idXR0b25cIik7aWYoXCJFc2NhcGVcIiE9PWUmJiFuKXtpZih0LnRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZXx8LTEhPT1bXCJCVVRUT05cIixcIlRFWFRBUkVBXCIsXCJPUFRJT05cIixcIklOUFVUXCIsXCJTRUxFQ1RcIixcIlZJREVPXCJdLmluZGV4T2YodC50YXJnZXQubm9kZU5hbWUpKXJldHVybn1pZighMT09PXRoaXMudHJpZ2dlcihcImtleWRvd25cIixlLHQpKXJldHVybjtjb25zdCBvPWlbZV07XCJmdW5jdGlvblwiPT10eXBlb2YgdGhpc1tvXSYmdGhpc1tvXSgpfWdldFNsaWRlKCl7Y29uc3QgdD10aGlzLkNhcm91c2VsO2lmKCF0KXJldHVybiBudWxsO2NvbnN0IGU9bnVsbD09PXQucGFnZT90Lm9wdGlvbihcImluaXRpYWxQYWdlXCIpOnQucGFnZSxpPXQucGFnZXN8fFtdO3JldHVybiBpLmxlbmd0aCYmaVtlXT9pW2VdLnNsaWRlc1swXTpudWxsfWZvY3VzKHQpe3ZvaWQgMD09PU8ucHJldmVudFNjcm9sbFN1cHBvcnRlZCYmKE8ucHJldmVudFNjcm9sbFN1cHBvcnRlZD1mdW5jdGlvbigpe2xldCB0PSExO3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLmZvY3VzKHtnZXQgcHJldmVudFNjcm9sbCgpe3JldHVybiB0PSEwLCExfX0pLHR9KCkpO2NvbnN0IGU9dD0+e3Quc2V0QWN0aXZlP3Quc2V0QWN0aXZlKCk6Ty5wcmV2ZW50U2Nyb2xsU3VwcG9ydGVkP3QuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KTp0LmZvY3VzKCl9O2lmKFtcImluaXRcIixcImNsb3NpbmdcIixcImN1c3RvbUNsb3NpbmdcIixcImRlc3Ryb3lcIl0uaW5kZXhPZih0aGlzLnN0YXRlKT4tMSlyZXR1cm47dCYmdC5wcmV2ZW50RGVmYXVsdCgpO2NvbnN0IGk9dGhpcy5nZXRTbGlkZSgpLiRlbDtpZighaSlyZXR1cm47aS50YWJJbmRleD0wO2NvbnN0IHM9W10uc2xpY2UuY2FsbCh0aGlzLiRjb250YWluZXIucXVlcnlTZWxlY3RvckFsbChbXCJhW2hyZWZdXCIsXCJhcmVhW2hyZWZdXCIsJ2lucHV0Om5vdChbZGlzYWJsZWRdKTpub3QoW3R5cGU9XCJoaWRkZW5cIl0pOm5vdChbYXJpYS1oaWRkZW5dKScsXCJzZWxlY3Q6bm90KFtkaXNhYmxlZF0pOm5vdChbYXJpYS1oaWRkZW5dKVwiLFwidGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pOm5vdChbYXJpYS1oaWRkZW5dKVwiLFwiYnV0dG9uOm5vdChbZGlzYWJsZWRdKTpub3QoW2FyaWEtaGlkZGVuXSlcIixcImlmcmFtZVwiLFwib2JqZWN0XCIsXCJlbWJlZFwiLFwidmlkZW9cIixcImF1ZGlvXCIsXCJbY29udGVudGVkaXRhYmxlXVwiLCdbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXhePVwiLVwiXSk6bm90KFtkaXNhYmxlZF0pOm5vdChbYXJpYS1oaWRkZW5dKSddKSk7bGV0IG49W107Zm9yKGxldCB0IG9mIHMpe2lmKHQuY2xhc3NMaXN0JiZ0LmNsYXNzTGlzdC5jb250YWlucyhcImZhbmN5Ym94X19zbGlkZVwiKSljb250aW51ZTtjb25zdCBlPXQuY2xvc2VzdChcIi5mYW5jeWJveF9fc2xpZGVcIik7ZT9lPT09aSYmblt0Lmhhc0F0dHJpYnV0ZShcImF1dG9mb2N1c1wiKT9cInVuc2hpZnRcIjpcInB1c2hcIl0odCk6bi5wdXNoKHQpfWlmKCFuLmxlbmd0aClyZXR1cm47dGhpcy5DYXJvdXNlbC5wYWdlcy5sZW5ndGg+MSYmbi5wdXNoKGkpLG4uc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50YWJJbmRleD5lLnRhYkluZGV4Py0xOnQudGFiSW5kZXg8ZS50YWJJbmRleD8xOjB9KSk7Y29uc3Qgbz1uLmluZGV4T2YoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCksYT10JiYhdC5zaGlmdEtleSxyPXQmJnQuc2hpZnRLZXk7cmV0dXJuIGE/bz09PW4ubGVuZ3RoLTE/ZShuWzBdKTplKG5bbysxXSk6cj9lKDA9PT1vP25bbi5sZW5ndGgtMV06bltvLTFdKTpvPDA/ZShuWzBdKTp2b2lkIDB9aGlkZVNjcm9sbGJhcigpe2lmKCFiKXJldHVybjtjb25zdCB0PXdpbmRvdy5pbm5lcldpZHRoLWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCxlPVwiZmFuY3lib3gtc3R5bGUtbm9zY3JvbGxcIjtsZXQgaT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKTtpfHx0PjAmJihpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKSxpLmlkPWUsaS50eXBlPVwidGV4dC9jc3NcIixpLmlubmVySFRNTD1gLmNvbXBlbnNhdGUtZm9yLXNjcm9sbGJhciB7cGFkZGluZy1yaWdodDogJHt0fXB4O31gLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmRDaGlsZChpKSxkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoXCJjb21wZW5zYXRlLWZvci1zY3JvbGxiYXJcIikpfXJldmVhbFNjcm9sbGJhcigpe2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShcImNvbXBlbnNhdGUtZm9yLXNjcm9sbGJhclwiKTtjb25zdCB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZmFuY3lib3gtc3R5bGUtbm9zY3JvbGxcIik7dCYmdC5yZW1vdmUoKX1jbGVhckNvbnRlbnQodCl7dGhpcy5DYXJvdXNlbC50cmlnZ2VyKFwicmVtb3ZlU2xpZGVcIix0KSx0LiRjb250ZW50JiYodC4kY29udGVudC5yZW1vdmUoKSx0LiRjb250ZW50PW51bGwpLHQuX2NsYXNzTmFtZSYmdC4kZWwuY2xhc3NMaXN0LnJlbW92ZSh0Ll9jbGFzc05hbWUpfXNldENvbnRlbnQodCxlLGk9e30pe2xldCBzO2NvbnN0IG49dC4kZWw7aWYoZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50P1tcImltZ1wiLFwiaWZyYW1lXCIsXCJ2aWRlb1wiLFwiYXVkaW9cIl0uaW5kZXhPZihlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpPi0xPyhzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikscy5hcHBlbmRDaGlsZChlKSk6cz1lOihzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikscy5pbm5lckhUTUw9ZSksIShzIGluc3RhbmNlb2YgRWxlbWVudCkpdGhyb3cgbmV3IEVycm9yKFwiRWxlbWVudCBleHBlY3RlZFwiKTtyZXR1cm4gdC5fY2xhc3NOYW1lPWBoYXMtJHtpLnN1ZmZpeHx8dC50eXBlfHxcInVua25vd25cIn1gLG4uY2xhc3NMaXN0LmFkZCh0Ll9jbGFzc05hbWUpLHMuY2xhc3NMaXN0LmFkZChcImZhbmN5Ym94X19jb250ZW50XCIpLFwibm9uZVwiIT09cy5zdHlsZS5kaXNwbGF5JiZcIm5vbmVcIiE9PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHMpLmdldFByb3BlcnR5VmFsdWUoXCJkaXNwbGF5XCIpfHwocy5zdHlsZS5kaXNwbGF5PVwiZmxleFwiKSx0LmlkJiZzLnNldEF0dHJpYnV0ZShcImlkXCIsdC5pZCksdC4kY29udGVudD1zLG4ucHJlcGVuZChzKSx0aGlzLm1hbmFnZUNsb3NlQnV0dG9uKHQpLFwibG9hZGluZ1wiIT09dC5zdGF0ZSYmdGhpcy5yZXZlYWxDb250ZW50KHQpLHN9bWFuYWdlQ2xvc2VCdXR0b24odCl7Y29uc3QgZT12b2lkIDA9PT10LmNsb3NlQnV0dG9uP3RoaXMub3B0aW9uKFwiY2xvc2VCdXR0b25cIik6dC5jbG9zZUJ1dHRvbjtpZighZXx8XCJ0b3BcIj09PWUmJnRoaXMuJGNsb3NlQnV0dG9uKXJldHVybjtjb25zdCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIik7aS5jbGFzc0xpc3QuYWRkKFwiY2Fyb3VzZWxfX2J1dHRvblwiLFwiaXMtY2xvc2VcIiksaS5zZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiLHRoaXMub3B0aW9ucy5sMTBuLkNMT1NFKSxpLmlubmVySFRNTD10aGlzLm9wdGlvbihcInRlbXBsYXRlLmNsb3NlQnV0dG9uXCIpLGkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsKHQ9PnRoaXMuY2xvc2UodCkpKSxcImluc2lkZVwiPT09ZT8odC4kY2xvc2VCdXR0b24mJnQuJGNsb3NlQnV0dG9uLnJlbW92ZSgpLHQuJGNsb3NlQnV0dG9uPXQuJGNvbnRlbnQuYXBwZW5kQ2hpbGQoaSkpOnRoaXMuJGNsb3NlQnV0dG9uPXRoaXMuJGNvbnRhaW5lci5pbnNlcnRCZWZvcmUoaSx0aGlzLiRjb250YWluZXIuZmlyc3RDaGlsZCl9cmV2ZWFsQ29udGVudCh0KXt0aGlzLnRyaWdnZXIoXCJyZXZlYWxcIix0KSx0LiRjb250ZW50LnN0eWxlLnZpc2liaWxpdHk9XCJcIjtsZXQgZT0hMTt0LmVycm9yfHxcImxvYWRpbmdcIj09PXQuc3RhdGV8fG51bGwhPT10aGlzLkNhcm91c2VsLnByZXZQYWdlfHx0LmluZGV4IT09dGhpcy5vcHRpb25zLnN0YXJ0SW5kZXh8fChlPXZvaWQgMD09PXQuc2hvd0NsYXNzP3RoaXMub3B0aW9uKFwic2hvd0NsYXNzXCIpOnQuc2hvd0NsYXNzKSxlPyh0LnN0YXRlPVwiYW5pbWF0aW5nXCIsdGhpcy5hbmltYXRlQ1NTKHQuJGNvbnRlbnQsZSwoKCk9Pnt0aGlzLmRvbmUodCl9KSkpOnRoaXMuZG9uZSh0KX1hbmltYXRlQ1NTKHQsZSxpKXtpZih0JiZ0LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiYW5pbWF0aW9uZW5kXCIse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pKSwhdHx8IWUpcmV0dXJuIHZvaWQoXCJmdW5jdGlvblwiPT10eXBlb2YgaSYmaSgpKTtjb25zdCBzPWZ1bmN0aW9uKG4pe24uY3VycmVudFRhcmdldD09PXRoaXMmJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhbmltYXRpb25lbmRcIixzKSxpJiZpKCksdC5jbGFzc0xpc3QucmVtb3ZlKGUpKX07dC5hZGRFdmVudExpc3RlbmVyKFwiYW5pbWF0aW9uZW5kXCIscyksdC5jbGFzc0xpc3QuYWRkKGUpfWRvbmUodCl7dC5zdGF0ZT1cImRvbmVcIix0aGlzLnRyaWdnZXIoXCJkb25lXCIsdCk7Y29uc3QgZT10aGlzLmdldFNsaWRlKCk7ZSYmdC5pbmRleD09PWUuaW5kZXgmJnRoaXMub3B0aW9uKFwiYXV0b0ZvY3VzXCIpJiZ0aGlzLmZvY3VzKCl9c2V0RXJyb3IodCxlKXt0LmVycm9yPWUsdGhpcy5oaWRlTG9hZGluZyh0KSx0aGlzLmNsZWFyQ29udGVudCh0KTtjb25zdCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7aS5jbGFzc0xpc3QuYWRkKFwiZmFuY3lib3gtZXJyb3JcIiksaS5pbm5lckhUTUw9dGhpcy5sb2NhbGl6ZShlfHxcIjxwPnt7RVJST1J9fTwvcD5cIiksdGhpcy5zZXRDb250ZW50KHQsaSx7c3VmZml4OlwiZXJyb3JcIn0pfXNob3dMb2FkaW5nKHQpe3Quc3RhdGU9XCJsb2FkaW5nXCIsdC4kZWwuY2xhc3NMaXN0LmFkZChcImlzLWxvYWRpbmdcIik7bGV0IGU9dC4kZWwucXVlcnlTZWxlY3RvcihcIi5mYW5jeWJveF9fc3Bpbm5lclwiKTtlfHwoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGUuY2xhc3NMaXN0LmFkZChcImZhbmN5Ym94X19zcGlubmVyXCIpLGUuaW5uZXJIVE1MPXRoaXMub3B0aW9uKFwidGVtcGxhdGUuc3Bpbm5lclwiKSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCgoKT0+e3RoaXMuQ2Fyb3VzZWwuUGFuem9vbS52ZWxvY2l0eXx8dGhpcy5jbG9zZSgpfSkpLHQuJGVsLnByZXBlbmQoZSkpfWhpZGVMb2FkaW5nKHQpe2NvbnN0IGU9dC4kZWwmJnQuJGVsLnF1ZXJ5U2VsZWN0b3IoXCIuZmFuY3lib3hfX3NwaW5uZXJcIik7ZSYmKGUucmVtb3ZlKCksdC4kZWwuY2xhc3NMaXN0LnJlbW92ZShcImlzLWxvYWRpbmdcIikpLFwibG9hZGluZ1wiPT09dC5zdGF0ZSYmKHRoaXMudHJpZ2dlcihcImxvYWRcIix0KSx0LnN0YXRlPVwicmVhZHlcIil9bmV4dCgpe2NvbnN0IHQ9dGhpcy5DYXJvdXNlbDt0JiZ0LnBhZ2VzLmxlbmd0aD4xJiZ0LnNsaWRlTmV4dCgpfXByZXYoKXtjb25zdCB0PXRoaXMuQ2Fyb3VzZWw7dCYmdC5wYWdlcy5sZW5ndGg+MSYmdC5zbGlkZVByZXYoKX1qdW1wVG8oLi4udCl7dGhpcy5DYXJvdXNlbCYmdGhpcy5DYXJvdXNlbC5zbGlkZVRvKC4uLnQpfWNsb3NlKHQpe2lmKHQmJnQucHJldmVudERlZmF1bHQoKSxbXCJjbG9zaW5nXCIsXCJjdXN0b21DbG9zaW5nXCIsXCJkZXN0cm95XCJdLmluZGV4T2YodGhpcy5zdGF0ZSk+LTEpcmV0dXJuO2lmKCExPT09dGhpcy50cmlnZ2VyKFwic2hvdWxkQ2xvc2VcIix0KSlyZXR1cm47aWYodGhpcy5zdGF0ZT1cImNsb3NpbmdcIix0aGlzLkNhcm91c2VsLlBhbnpvb20uZGVzdHJveSgpLHRoaXMuZGV0YWNoRXZlbnRzKCksdGhpcy50cmlnZ2VyKFwiY2xvc2luZ1wiLHQpLFwiZGVzdHJveVwiPT09dGhpcy5zdGF0ZSlyZXR1cm47dGhpcy4kY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLHRoaXMuJGNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaXMtY2xvc2luZ1wiKTtjb25zdCBlPXRoaXMuZ2V0U2xpZGUoKTtpZih0aGlzLkNhcm91c2VsLnNsaWRlcy5mb3JFYWNoKCh0PT57dC4kY29udGVudCYmdC5pbmRleCE9PWUuaW5kZXgmJnRoaXMuQ2Fyb3VzZWwudHJpZ2dlcihcInJlbW92ZVNsaWRlXCIsdCl9KSksXCJjbG9zaW5nXCI9PT10aGlzLnN0YXRlKXtjb25zdCB0PXZvaWQgMD09PWUuaGlkZUNsYXNzP3RoaXMub3B0aW9uKFwiaGlkZUNsYXNzXCIpOmUuaGlkZUNsYXNzO3RoaXMuYW5pbWF0ZUNTUyhlLiRjb250ZW50LHQsKCgpPT57dGhpcy5kZXN0cm95KCl9KSwhMCl9fWRlc3Ryb3koKXt0aGlzLnN0YXRlPVwiZGVzdHJveVwiLHRoaXMudHJpZ2dlcihcImRlc3Ryb3lcIik7Y29uc3QgdD10aGlzLm9wdGlvbihcInBsYWNlRm9jdXNCYWNrXCIpP3RoaXMuZ2V0U2xpZGUoKS4kdHJpZ2dlcjpudWxsO2lmKHRoaXMuQ2Fyb3VzZWwuZGVzdHJveSgpLHRoaXMuZGV0YWNoUGx1Z2lucygpLHRoaXMuQ2Fyb3VzZWw9bnVsbCx0aGlzLm9wdGlvbnM9e30sdGhpcy5ldmVudHM9e30sdGhpcy4kY29udGFpbmVyLnJlbW92ZSgpLHRoaXMuJGNvbnRhaW5lcj10aGlzLiRiYWNrZHJvcD10aGlzLiRjYXJvdXNlbD1udWxsLHQpaWYoTy5wcmV2ZW50U2Nyb2xsU3VwcG9ydGVkKXQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KTtlbHNle2NvbnN0IGU9ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7dC5mb2N1cygpLGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wPWV9Y29uc3QgZT1PLmdldEluc3RhbmNlKCk7ZT9lLmZvY3VzKCk6KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwid2l0aC1mYW5jeWJveFwiKSxkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJpcy11c2luZy1tb3VzZVwiKSx0aGlzLnJldmVhbFNjcm9sbGJhcigpKX1zdGF0aWMgc2hvdyh0LGU9e30pe3JldHVybiBuZXcgTyh0LGUpfXN0YXRpYyBmcm9tRXZlbnQodCxlPXt9KXtpZih0LmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKHQuYnV0dG9uJiYwIT09dC5idXR0b24pcmV0dXJuO2lmKHQuY3RybEtleXx8dC5tZXRhS2V5fHx0LnNoaWZ0S2V5KXJldHVybjtsZXQgaSxzLG4sbz10LnRhcmdldDtpZigoby5tYXRjaGVzKFwiW2RhdGEtZmFuY3lib3gtdHJpZ2dlcl1cIil8fChvPW8uY2xvc2VzdChcIltkYXRhLWZhbmN5Ym94LXRyaWdnZXJdXCIpKSkmJihpPW8mJm8uZGF0YXNldCYmby5kYXRhc2V0LmZhbmN5Ym94VHJpZ2dlciksaSl7Y29uc3QgdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZGF0YS1mYW5jeWJveD1cIiR7aX1cIl1gKSxlPXBhcnNlSW50KG8uZGF0YXNldC5mYW5jeWJveEluZGV4LDEwKXx8MDtvPXQubGVuZ3RoP3RbZV06b31vfHwobz10LnRhcmdldCksQXJyYXkuZnJvbShPLm9wZW5lcnMua2V5cygpKS5yZXZlcnNlKCkuc29tZSgoZT0+e2lmKG49byxuLm1hdGNoZXMoZSl8fChuPW4uY2xvc2VzdChlKSkpcmV0dXJuIHQucHJldmVudERlZmF1bHQoKSxzPWUsITB9KSk7bGV0IGE9ITE7aWYocyl7ZS5ldmVudD10LGUudGFyZ2V0PW4sbi5vcmlnVGFyZ2V0PXQudGFyZ2V0LGE9Ty5mcm9tT3BlbmVyKHMsZSk7Y29uc3QgaT1PLmdldEluc3RhbmNlKCk7aSYmXCJyZWFkeVwiPT09aS5zdGF0ZSYmdC5kZXRhaWwmJmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImlzLXVzaW5nLW1vdXNlXCIpfXJldHVybiBhfXN0YXRpYyBmcm9tT3BlbmVyKHQsaT17fSl7bGV0IHM9W10sbj1pLnN0YXJ0SW5kZXh8fDAsbz1pLnRhcmdldHx8bnVsbDtjb25zdCBhPXZvaWQgMD09PShpPWUoe30saSxPLm9wZW5lcnMuZ2V0KHQpKSkuZ3JvdXBBdHRyP1wiZGF0YS1mYW5jeWJveFwiOmkuZ3JvdXBBdHRyLHI9YSYmbyYmby5nZXRBdHRyaWJ1dGUoYCR7YX1gKSxsPXZvaWQgMCE9PWkuZ3JvdXBBbGwmJmkuZ3JvdXBBbGw7aWYobHx8cj8ocz1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodCkpLGx8fChzPXMuZmlsdGVyKCh0PT50LmdldEF0dHJpYnV0ZShgJHthfWApPT09cikpKSk6cz1bb10sIXMubGVuZ3RoKXJldHVybiExO2NvbnN0IGg9Ty5nZXRJbnN0YW5jZSgpO3JldHVybiEoaCYmcy5pbmRleE9mKGgub3B0aW9ucy4kdHJpZ2dlcik+LTEpJiYobj1vP3MuaW5kZXhPZihvKTpuLHM9cy5tYXAoKGZ1bmN0aW9uKHQpe2NvbnN0IGU9W1wiZmFsc2VcIixcIjBcIixcIm5vXCIsXCJudWxsXCIsXCJ1bmRlZmluZWRcIl0saT1bXCJ0cnVlXCIsXCIxXCIsXCJ5ZXNcIl0scz1PYmplY3QuYXNzaWduKHt9LHQuZGF0YXNldCk7Zm9yKGxldFt0LG5db2YgT2JqZWN0LmVudHJpZXMocykpaWYoXCJzdHJpbmdcIj09dHlwZW9mIG58fG4gaW5zdGFuY2VvZiBTdHJpbmcpaWYoZS5pbmRleE9mKG4pPi0xKXNbdF09ITE7ZWxzZSBpZihpLmluZGV4T2Yoc1t0XSk+LTEpc1t0XT0hMDtlbHNlIHRyeXtzW3RdPUpTT04ucGFyc2Uobil9Y2F0Y2goZSl7c1t0XT1ufXJldHVybiBkZWxldGUgcy5mYW5jeWJveCxkZWxldGUgcy50eXBlLHQgaW5zdGFuY2VvZiBFbGVtZW50JiYocy4kdHJpZ2dlcj10KSxzfSkpLG5ldyBPKHMsZSh7fSxpLHtzdGFydEluZGV4Om4sJHRyaWdnZXI6b30pKSl9c3RhdGljIGJpbmQodCxlPXt9KXtpZihiKXtpZighTy5vcGVuZXJzLnNpemUpe2RvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsTy5mcm9tRXZlbnQsITEpO2Zvcihjb25zdFt0LGVdb2YgT2JqZWN0LmVudHJpZXMoTy5QbHVnaW5zfHx7fSkpZS5GYW5jeWJveD10aGlzLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY3JlYXRlJiZlLmNyZWF0ZSgpfU8ub3BlbmVycy5zZXQodCxlKX19c3RhdGljIHVuYmluZCh0KXtPLm9wZW5lcnMuZGVsZXRlKHQpLE8ub3BlbmVycy5zaXplfHxPLmRlc3Ryb3koKX1zdGF0aWMgZGVzdHJveSgpe2xldCB0O2Zvcig7dD1PLmdldEluc3RhbmNlKCk7KXQuZGVzdHJveSgpO08ub3BlbmVycz1uZXcgTWFwLGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsTy5mcm9tRXZlbnQsITEpfXN0YXRpYyBnZXRJbnN0YW5jZSh0KXtsZXQgZT1bXTtlPXQ/W2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBmYW5jeWJveC0ke3R9YCldOkFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5mYW5jeWJveF9fY29udGFpbmVyXCIpKS5yZXZlcnNlKCk7Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT10JiZ0LkZhbmN5Ym94O2lmKGUmJlwiY2xvc2luZ1wiIT09ZS5zdGF0ZSYmXCJjdXN0b21DbG9zaW5nXCIhPT1lLnN0YXRlKXJldHVybiBlfXJldHVybiBudWxsfXN0YXRpYyBjbG9zZSh0PSEwKXtsZXQgZT1udWxsO2Zvcig7ZT1PLmdldEluc3RhbmNlKCk7KWlmKGUuY2xvc2UoKSwhdClyZXR1cm59fU8udmVyc2lvbj1cIjQuMC4wLWJldGEuMlwiLE8uZGVmYXVsdHM9eixPLm9wZW5lcnM9bmV3IE1hcCxPLlBsdWdpbnM9ayxPLmJpbmQoXCJbZGF0YS1mYW5jeWJveF1cIik7ZXhwb3J0e3kgYXMgQ2Fyb3VzZWwsTyBhcyBGYW5jeWJveCxkIGFzIFBhbnpvb219O1xuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@fancyapps/ui/dist/fancybox.esm.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/createPopper.js": /*!*********************************************************!*\ !*** ./node_modules/@popperjs/core/lib/createPopper.js ***! \*********************************************************/ /*! exports provided: popperGenerator, createPopper, detectOverflow */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"popperGenerator\", function() { return popperGenerator; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createPopper\", function() { return createPopper; });\n/* harmony import */ var _dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom-utils/getCompositeRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js\");\n/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom-utils/getLayoutRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\");\n/* harmony import */ var _dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./dom-utils/listScrollParents.js */ \"./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js\");\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./dom-utils/getOffsetParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\");\n/* harmony import */ var _dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dom-utils/getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n/* harmony import */ var _utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/orderModifiers.js */ \"./node_modules/@popperjs/core/lib/utils/orderModifiers.js\");\n/* harmony import */ var _utils_debounce_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/debounce.js */ \"./node_modules/@popperjs/core/lib/utils/debounce.js\");\n/* harmony import */ var _utils_validateModifiers_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/validateModifiers.js */ \"./node_modules/@popperjs/core/lib/utils/validateModifiers.js\");\n/* harmony import */ var _utils_uniqueBy_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/uniqueBy.js */ \"./node_modules/@popperjs/core/lib/utils/uniqueBy.js\");\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils/getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utils/mergeByName.js */ \"./node_modules/@popperjs/core/lib/utils/mergeByName.js\");\n/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utils/detectOverflow.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"detectOverflow\", function() { return _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./dom-utils/instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar INVALID_ELEMENT_ERROR = 'Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.';\nvar INFINITE_LOOP_ERROR = 'Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.';\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nfunction popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(options) {\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: Object(_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_12__[\"isElement\"])(reference) ? Object(_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(reference) : reference.contextElement ? Object(_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(reference.contextElement) : [],\n popper: Object(_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = Object(_utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(Object(_utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"])([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n }); // Validate the provided modifiers so that the consumer will get warned\n // if one of the modifiers is invalid for any reason\n\n if (true) {\n var modifiers = Object(_utils_uniqueBy_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])([].concat(orderedModifiers, state.options.modifiers), function (_ref) {\n var name = _ref.name;\n return name;\n });\n Object(_utils_validateModifiers_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(modifiers);\n\n if (Object(_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(state.options.placement) === _enums_js__WEBPACK_IMPORTED_MODULE_13__[\"auto\"]) {\n var flipModifier = state.orderedModifiers.find(function (_ref2) {\n var name = _ref2.name;\n return name === 'flip';\n });\n\n if (!flipModifier) {\n console.error(['Popper: \"auto\" placements require the \"flip\" modifier be', 'present and enabled to work.'].join(' '));\n }\n }\n\n var _getComputedStyle = Object(_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(popper),\n marginTop = _getComputedStyle.marginTop,\n marginRight = _getComputedStyle.marginRight,\n marginBottom = _getComputedStyle.marginBottom,\n marginLeft = _getComputedStyle.marginLeft; // We no longer take into account `margins` on the popper, and it can\n // cause bugs with positioning, so we'll warn the consumer\n\n\n if ([marginTop, marginRight, marginBottom, marginLeft].some(function (margin) {\n return parseFloat(margin);\n })) {\n console.warn(['Popper: CSS \"margin\" styles cannot be used to apply padding', 'between the popper and its reference element or boundary.', 'To replicate margin, use the `offset` modifier, as well as', 'the `padding` option in the `preventOverflow` and `flip`', 'modifiers.'].join(' '));\n }\n }\n\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n if (true) {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: Object(_dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(reference, Object(_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(popper), state.options.strategy === 'fixed'),\n popper: Object(_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n var __debug_loops__ = 0;\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (true) {\n __debug_loops__ += 1;\n\n if (__debug_loops__ > 100) {\n console.error(INFINITE_LOOP_ERROR);\n break;\n }\n }\n\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: Object(_utils_debounce_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n if (true) {\n console.error(INVALID_ELEMENT_ERROR);\n }\n\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref3) {\n var name = _ref3.name,\n _ref3$options = _ref3.options,\n options = _ref3$options === void 0 ? {} : _ref3$options,\n effect = _ref3.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nvar createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcz82Y2VlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQStEO0FBQ047QUFDUTtBQUNKO0FBQ0U7QUFDUjtBQUNaO0FBQ2tCO0FBQ2xCO0FBQ2dCO0FBQ1Y7QUFDTTtBQUNEO0FBQ3BCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscUVBQXFFLGFBQWE7QUFDbEY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0I7QUFDL0IsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4QztBQUNBLHFCQUFxQiwyRUFBUyxjQUFjLCtFQUFpQix5Q0FBeUMsK0VBQWlCO0FBQ3ZILGtCQUFrQiwrRUFBaUI7QUFDbkMsVUFBVTtBQUNWOztBQUVBLCtCQUErQix3RUFBYyxDQUFDLHNFQUFXLHdEQUF3RDs7QUFFakg7QUFDQTtBQUNBLFNBQVMsRUFBRTtBQUNYOztBQUVBLFlBQVksSUFBcUM7QUFDakQsMEJBQTBCLGtFQUFRO0FBQ2xDO0FBQ0E7QUFDQSxXQUFXO0FBQ1gsVUFBVSwyRUFBaUI7O0FBRTNCLGNBQWMsMEVBQWdCLDhCQUE4QiwrQ0FBSTtBQUNoRTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQyw4RUFBZ0I7QUFDbEQ7QUFDQTtBQUNBO0FBQ0Esd0RBQXdEO0FBQ3hEOzs7QUFHQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDOztBQUVBO0FBQ0EsY0FBYyxJQUFxQztBQUNuRDtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQSxxQkFBcUIsOEVBQWdCLFlBQVksNkVBQWU7QUFDaEUsa0JBQWtCLDJFQUFhO0FBQy9CLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0EsNkNBQTZDLEtBQUs7O0FBRWxEO0FBQ0Esc0VBQXNFO0FBQ3RFLFNBQVM7QUFDVDs7QUFFQSwyQkFBMkIsdUNBQXVDO0FBQ2xFLGNBQWMsSUFBcUM7QUFDbkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRDtBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsY0FBYyxrRUFBUTtBQUN0QjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxVQUFVLElBQXFDO0FBQy9DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssRUFBRTtBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7O0FBRVg7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDTyxrREFBa0QiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2NyZWF0ZVBvcHBlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRDb21wb3NpdGVSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IG9yZGVyTW9kaWZpZXJzIGZyb20gXCIuL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzXCI7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSBcIi4vdXRpbHMvZGVib3VuY2UuanNcIjtcbmltcG9ydCB2YWxpZGF0ZU1vZGlmaWVycyBmcm9tIFwiLi91dGlscy92YWxpZGF0ZU1vZGlmaWVycy5qc1wiO1xuaW1wb3J0IHVuaXF1ZUJ5IGZyb20gXCIuL3V0aWxzL3VuaXF1ZUJ5LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgbWVyZ2VCeU5hbWUgZnJvbSBcIi4vdXRpbHMvbWVyZ2VCeU5hbWUuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCB7IGF1dG8gfSBmcm9tIFwiLi9lbnVtcy5qc1wiO1xudmFyIElOVkFMSURfRUxFTUVOVF9FUlJPUiA9ICdQb3BwZXI6IEludmFsaWQgcmVmZXJlbmNlIG9yIHBvcHBlciBhcmd1bWVudCBwcm92aWRlZC4gVGhleSBtdXN0IGJlIGVpdGhlciBhIERPTSBlbGVtZW50IG9yIHZpcnR1YWwgZWxlbWVudC4nO1xudmFyIElORklOSVRFX0xPT1BfRVJST1IgPSAnUG9wcGVyOiBBbiBpbmZpbml0ZSBsb29wIGluIHRoZSBtb2RpZmllcnMgY3ljbGUgaGFzIGJlZW4gZGV0ZWN0ZWQhIFRoZSBjeWNsZSBoYXMgYmVlbiBpbnRlcnJ1cHRlZCB0byBwcmV2ZW50IGEgYnJvd3NlciBjcmFzaC4nO1xudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgbW9kaWZpZXJzOiBbXSxcbiAgc3RyYXRlZ3k6ICdhYnNvbHV0ZSdcbn07XG5cbmZ1bmN0aW9uIGFyZVZhbGlkRWxlbWVudHMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gIWFyZ3Muc29tZShmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHJldHVybiAhKGVsZW1lbnQgJiYgdHlwZW9mIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID09PSAnZnVuY3Rpb24nKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3BwZXJHZW5lcmF0b3IoZ2VuZXJhdG9yT3B0aW9ucykge1xuICBpZiAoZ2VuZXJhdG9yT3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgZ2VuZXJhdG9yT3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9nZW5lcmF0b3JPcHRpb25zID0gZ2VuZXJhdG9yT3B0aW9ucyxcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRNb2RpZmllcnMsXG4gICAgICBkZWZhdWx0TW9kaWZpZXJzID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmID09PSB2b2lkIDAgPyBbXSA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZixcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0T3B0aW9ucyxcbiAgICAgIGRlZmF1bHRPcHRpb25zID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9PT0gdm9pZCAwID8gREVGQVVMVF9PUFRJT05TIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmMjtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVBvcHBlcihyZWZlcmVuY2UsIHBvcHBlciwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICB9XG5cbiAgICB2YXIgc3RhdGUgPSB7XG4gICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgb3JkZXJlZE1vZGlmaWVyczogW10sXG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVElPTlMsIGRlZmF1bHRPcHRpb25zKSxcbiAgICAgIG1vZGlmaWVyc0RhdGE6IHt9LFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2UsXG4gICAgICAgIHBvcHBlcjogcG9wcGVyXG4gICAgICB9LFxuICAgICAgYXR0cmlidXRlczoge30sXG4gICAgICBzdHlsZXM6IHt9XG4gICAgfTtcbiAgICB2YXIgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIHZhciBpc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHZhciBpbnN0YW5jZSA9IHtcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIHNldE9wdGlvbnM6IGZ1bmN0aW9uIHNldE9wdGlvbnMob3B0aW9ucykge1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHN0YXRlLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgc3RhdGUub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHN0YXRlLnNjcm9sbFBhcmVudHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBpc0VsZW1lbnQocmVmZXJlbmNlKSA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZSkgOiByZWZlcmVuY2UuY29udGV4dEVsZW1lbnQgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UuY29udGV4dEVsZW1lbnQpIDogW10sXG4gICAgICAgICAgcG9wcGVyOiBsaXN0U2Nyb2xsUGFyZW50cyhwb3BwZXIpXG4gICAgICAgIH07IC8vIE9yZGVycyB0aGUgbW9kaWZpZXJzIGJhc2VkIG9uIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgYHBoYXNlYFxuICAgICAgICAvLyBwcm9wZXJ0aWVzXG5cbiAgICAgICAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlck1vZGlmaWVycyhtZXJnZUJ5TmFtZShbXS5jb25jYXQoZGVmYXVsdE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpKSk7IC8vIFN0cmlwIG91dCBkaXNhYmxlZCBtb2RpZmllcnNcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICByZXR1cm4gbS5lbmFibGVkO1xuICAgICAgICB9KTsgLy8gVmFsaWRhdGUgdGhlIHByb3ZpZGVkIG1vZGlmaWVycyBzbyB0aGF0IHRoZSBjb25zdW1lciB3aWxsIGdldCB3YXJuZWRcbiAgICAgICAgLy8gaWYgb25lIG9mIHRoZSBtb2RpZmllcnMgaXMgaW52YWxpZCBmb3IgYW55IHJlYXNvblxuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICB2YXIgbW9kaWZpZXJzID0gdW5pcXVlQnkoW10uY29uY2F0KG9yZGVyZWRNb2RpZmllcnMsIHN0YXRlLm9wdGlvbnMubW9kaWZpZXJzKSwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gX3JlZi5uYW1lO1xuICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFsaWRhdGVNb2RpZmllcnMobW9kaWZpZXJzKTtcblxuICAgICAgICAgIGlmIChnZXRCYXNlUGxhY2VtZW50KHN0YXRlLm9wdGlvbnMucGxhY2VtZW50KSA9PT0gYXV0bykge1xuICAgICAgICAgICAgdmFyIGZsaXBNb2RpZmllciA9IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZmluZChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgICAgICAgdmFyIG5hbWUgPSBfcmVmMi5uYW1lO1xuICAgICAgICAgICAgICByZXR1cm4gbmFtZSA9PT0gJ2ZsaXAnO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICghZmxpcE1vZGlmaWVyKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoWydQb3BwZXI6IFwiYXV0b1wiIHBsYWNlbWVudHMgcmVxdWlyZSB0aGUgXCJmbGlwXCIgbW9kaWZpZXIgYmUnLCAncHJlc2VudCBhbmQgZW5hYmxlZCB0byB3b3JrLiddLmpvaW4oJyAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9nZXRDb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShwb3BwZXIpLFxuICAgICAgICAgICAgICBtYXJnaW5Ub3AgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5tYXJnaW5Ub3AsXG4gICAgICAgICAgICAgIG1hcmdpblJpZ2h0ID0gX2dldENvbXB1dGVkU3R5bGUubWFyZ2luUmlnaHQsXG4gICAgICAgICAgICAgIG1hcmdpbkJvdHRvbSA9IF9nZXRDb21wdXRlZFN0eWxlLm1hcmdpbkJvdHRvbSxcbiAgICAgICAgICAgICAgbWFyZ2luTGVmdCA9IF9nZXRDb21wdXRlZFN0eWxlLm1hcmdpbkxlZnQ7IC8vIFdlIG5vIGxvbmdlciB0YWtlIGludG8gYWNjb3VudCBgbWFyZ2luc2Agb24gdGhlIHBvcHBlciwgYW5kIGl0IGNhblxuICAgICAgICAgIC8vIGNhdXNlIGJ1Z3Mgd2l0aCBwb3NpdGlvbmluZywgc28gd2UnbGwgd2FybiB0aGUgY29uc3VtZXJcblxuXG4gICAgICAgICAgaWYgKFttYXJnaW5Ub3AsIG1hcmdpblJpZ2h0LCBtYXJnaW5Cb3R0b20sIG1hcmdpbkxlZnRdLnNvbWUoZnVuY3Rpb24gKG1hcmdpbikge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQobWFyZ2luKTtcbiAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFsnUG9wcGVyOiBDU1MgXCJtYXJnaW5cIiBzdHlsZXMgY2Fubm90IGJlIHVzZWQgdG8gYXBwbHkgcGFkZGluZycsICdiZXR3ZWVuIHRoZSBwb3BwZXIgYW5kIGl0cyByZWZlcmVuY2UgZWxlbWVudCBvciBib3VuZGFyeS4nLCAnVG8gcmVwbGljYXRlIG1hcmdpbiwgdXNlIHRoZSBgb2Zmc2V0YCBtb2RpZmllciwgYXMgd2VsbCBhcycsICd0aGUgYHBhZGRpbmdgIG9wdGlvbiBpbiB0aGUgYHByZXZlbnRPdmVyZmxvd2AgYW5kIGBmbGlwYCcsICdtb2RpZmllcnMuJ10uam9pbignICcpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBydW5Nb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIC8vIFN5bmMgdXBkYXRlIOKAkyBpdCB3aWxsIGFsd2F5cyBiZSBleGVjdXRlZCwgZXZlbiBpZiBub3QgbmVjZXNzYXJ5LiBUaGlzXG4gICAgICAvLyBpcyB1c2VmdWwgZm9yIGxvdyBmcmVxdWVuY3kgdXBkYXRlcyB3aGVyZSBzeW5jIGJlaGF2aW9yIHNpbXBsaWZpZXMgdGhlXG4gICAgICAvLyBsb2dpYy5cbiAgICAgIC8vIEZvciBoaWdoIGZyZXF1ZW5jeSB1cGRhdGVzIChlLmcuIGByZXNpemVgIGFuZCBgc2Nyb2xsYCBldmVudHMpLCBhbHdheXNcbiAgICAgIC8vIHByZWZlciB0aGUgYXN5bmMgUG9wcGVyI3VwZGF0ZSBtZXRob2RcbiAgICAgIGZvcmNlVXBkYXRlOiBmdW5jdGlvbiBmb3JjZVVwZGF0ZSgpIHtcbiAgICAgICAgaWYgKGlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9zdGF0ZSRlbGVtZW50cyA9IHN0YXRlLmVsZW1lbnRzLFxuICAgICAgICAgICAgcmVmZXJlbmNlID0gX3N0YXRlJGVsZW1lbnRzLnJlZmVyZW5jZSxcbiAgICAgICAgICAgIHBvcHBlciA9IF9zdGF0ZSRlbGVtZW50cy5wb3BwZXI7IC8vIERvbid0IHByb2NlZWQgaWYgYHJlZmVyZW5jZWAgb3IgYHBvcHBlcmAgYXJlIG5vdCB2YWxpZCBlbGVtZW50c1xuICAgICAgICAvLyBhbnltb3JlXG5cbiAgICAgICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoSU5WQUxJRF9FTEVNRU5UX0VSUk9SKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSBhbmQgcG9wcGVyIHJlY3RzIHRvIGJlIHJlYWQgYnkgbW9kaWZpZXJzXG5cblxuICAgICAgICBzdGF0ZS5yZWN0cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGdldENvbXBvc2l0ZVJlY3QocmVmZXJlbmNlLCBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKSwgc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJyksXG4gICAgICAgICAgcG9wcGVyOiBnZXRMYXlvdXRSZWN0KHBvcHBlcilcbiAgICAgICAgfTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gcmVzZXQgdGhlIGN1cnJlbnQgdXBkYXRlIGN5Y2xlLiBUaGVcbiAgICAgICAgLy8gbW9zdCBjb21tb24gdXNlIGNhc2UgZm9yIHRoaXMgaXMgdGhlIGBmbGlwYCBtb2RpZmllciBjaGFuZ2luZyB0aGVcbiAgICAgICAgLy8gcGxhY2VtZW50LCB3aGljaCB0aGVuIG5lZWRzIHRvIHJlLXJ1biBhbGwgdGhlIG1vZGlmaWVycywgYmVjYXVzZSB0aGVcbiAgICAgICAgLy8gbG9naWMgd2FzIHByZXZpb3VzbHkgcmFuIGZvciB0aGUgcHJldmlvdXMgcGxhY2VtZW50IGFuZCBpcyB0aGVyZWZvcmVcbiAgICAgICAgLy8gc3RhbGUvaW5jb3JyZWN0XG5cbiAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUucGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7IC8vIE9uIGVhY2ggdXBkYXRlIGN5Y2xlLCB0aGUgYG1vZGlmaWVyc0RhdGFgIHByb3BlcnR5IGZvciBlYWNoIG1vZGlmaWVyXG4gICAgICAgIC8vIGlzIGZpbGxlZCB3aXRoIHRoZSBpbml0aWFsIGRhdGEgc3BlY2lmaWVkIGJ5IHRoZSBtb2RpZmllci4gVGhpcyBtZWFuc1xuICAgICAgICAvLyBpdCBkb2Vzbid0IHBlcnNpc3QgYW5kIGlzIGZyZXNoIG9uIGVhY2ggdXBkYXRlLlxuICAgICAgICAvLyBUbyBlbnN1cmUgcGVyc2lzdGVudCBkYXRhLCB1c2UgYCR7bmFtZX0jcGVyc2lzdGVudGBcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLm1vZGlmaWVyc0RhdGFbbW9kaWZpZXIubmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBtb2RpZmllci5kYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBfX2RlYnVnX2xvb3BzX18gPSAwO1xuXG4gICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIF9fZGVidWdfbG9vcHNfXyArPSAxO1xuXG4gICAgICAgICAgICBpZiAoX19kZWJ1Z19sb29wc19fID4gMTAwKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoSU5GSU5JVEVfTE9PUF9FUlJPUik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdGF0ZS5yZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGluZGV4ID0gLTE7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX3N0YXRlJG9yZGVyZWRNb2RpZmllID0gc3RhdGUub3JkZXJlZE1vZGlmaWVyc1tpbmRleF0sXG4gICAgICAgICAgICAgIGZuID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLmZuLFxuICAgICAgICAgICAgICBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLm9wdGlvbnMsXG4gICAgICAgICAgICAgIF9vcHRpb25zID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllMiA9PT0gdm9pZCAwID8ge30gOiBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyLFxuICAgICAgICAgICAgICBuYW1lID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLm5hbWU7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IGZuKHtcbiAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgICBvcHRpb25zOiBfb3B0aW9ucyxcbiAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlXG4gICAgICAgICAgICB9KSB8fCBzdGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBBc3luYyBhbmQgb3B0aW1pc3RpY2FsbHkgb3B0aW1pemVkIHVwZGF0ZSDigJMgaXQgd2lsbCBub3QgYmUgZXhlY3V0ZWQgaWZcbiAgICAgIC8vIG5vdCBuZWNlc3NhcnkgKGRlYm91bmNlZCB0byBydW4gYXQgbW9zdCBvbmNlLXBlci10aWNrKVxuICAgICAgdXBkYXRlOiBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgcmVzb2x2ZShzdGF0ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBjb25zb2xlLmVycm9yKElOVkFMSURfRUxFTUVOVF9FUlJPUik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICBpbnN0YW5jZS5zZXRPcHRpb25zKG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICBpZiAoIWlzRGVzdHJveWVkICYmIG9wdGlvbnMub25GaXJzdFVwZGF0ZSkge1xuICAgICAgICBvcHRpb25zLm9uRmlyc3RVcGRhdGUoc3RhdGUpO1xuICAgICAgfVxuICAgIH0pOyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGFyYml0cmFyeSBjb2RlIGJlZm9yZSB0aGUgZmlyc3RcbiAgICAvLyB1cGRhdGUgY3ljbGUgcnVucy4gVGhleSB3aWxsIGJlIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSB1cGRhdGVcbiAgICAvLyBjeWNsZS4gVGhpcyBpcyB1c2VmdWwgd2hlbiBhIG1vZGlmaWVyIGFkZHMgc29tZSBwZXJzaXN0ZW50IGRhdGEgdGhhdFxuICAgIC8vIG90aGVyIG1vZGlmaWVycyBuZWVkIHRvIHVzZSwgYnV0IHRoZSBtb2RpZmllciBpcyBydW4gYWZ0ZXIgdGhlIGRlcGVuZGVudFxuICAgIC8vIG9uZS5cblxuICAgIGZ1bmN0aW9uIHJ1bk1vZGlmaWVyRWZmZWN0cygpIHtcbiAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBfcmVmMy5uYW1lLFxuICAgICAgICAgICAgX3JlZjMkb3B0aW9ucyA9IF9yZWYzLm9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zID0gX3JlZjMkb3B0aW9ucyA9PT0gdm9pZCAwID8ge30gOiBfcmVmMyRvcHRpb25zLFxuICAgICAgICAgICAgZWZmZWN0ID0gX3JlZjMuZWZmZWN0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgZWZmZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGNsZWFudXBGbiA9IGVmZmVjdCh7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdmFyIG5vb3BGbiA9IGZ1bmN0aW9uIG5vb3BGbigpIHt9O1xuXG4gICAgICAgICAgZWZmZWN0Q2xlYW51cEZucy5wdXNoKGNsZWFudXBGbiB8fCBub29wRm4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgZWZmZWN0Q2xlYW51cEZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgIH0pO1xuICAgICAgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcbn1cbmV4cG9ydCB2YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGRldGVjdE92ZXJmbG93IH07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/createPopper.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/contains.js": /*!***************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/contains.js ***! \***************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return contains; });\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\nfunction contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && Object(_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__[\"isShadowRoot\"])(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcz83ZjM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUErQztBQUNoQztBQUNmLDBEQUEwRDs7QUFFMUQ7QUFDQTtBQUNBLEdBQUc7QUFDSCx1QkFBdUIsbUVBQVk7QUFDbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQSxPQUFPO0FBQ1AsS0FBSzs7O0FBR0w7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2NvbnRhaW5zLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGFpbnMocGFyZW50LCBjaGlsZCkge1xuICB2YXIgcm9vdE5vZGUgPSBjaGlsZC5nZXRSb290Tm9kZSAmJiBjaGlsZC5nZXRSb290Tm9kZSgpOyAvLyBGaXJzdCwgYXR0ZW1wdCB3aXRoIGZhc3RlciBuYXRpdmUgbWV0aG9kXG5cbiAgaWYgKHBhcmVudC5jb250YWlucyhjaGlsZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyB0aGVuIGZhbGxiYWNrIHRvIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiB3aXRoIFNoYWRvdyBET00gc3VwcG9ydFxuICBlbHNlIGlmIChyb290Tm9kZSAmJiBpc1NoYWRvd1Jvb3Qocm9vdE5vZGUpKSB7XG4gICAgICB2YXIgbmV4dCA9IGNoaWxkO1xuXG4gICAgICBkbyB7XG4gICAgICAgIGlmIChuZXh0ICYmIHBhcmVudC5pc1NhbWVOb2RlKG5leHQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddOiBuZWVkIGEgYmV0dGVyIHdheSB0byBoYW5kbGUgdGhpcy4uLlxuXG5cbiAgICAgICAgbmV4dCA9IG5leHQucGFyZW50Tm9kZSB8fCBuZXh0Lmhvc3Q7XG4gICAgICB9IHdoaWxlIChuZXh0KTtcbiAgICB9IC8vIEdpdmUgdXAsIHRoZSByZXN1bHQgaXMgZmFsc2VcblxuXG4gIHJldHVybiBmYWxzZTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/contains.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js": /*!****************************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js ***! \****************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getBoundingClientRect; });\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\nvar round = Math.round;\nfunction getBoundingClientRect(element, includeScale) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n var rect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (Object(_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__[\"isHTMLElement\"])(element) && includeScale) {\n // Fallback to 1 in case both values are `0`\n scaleX = rect.width / element.offsetWidth || 1;\n scaleY = rect.height / element.offsetHeight || 1;\n }\n\n return {\n width: round(rect.width / scaleX),\n height: round(rect.height / scaleY),\n top: round(rect.top / scaleY),\n right: round(rect.right / scaleX),\n bottom: round(rect.bottom / scaleY),\n left: round(rect.left / scaleX),\n x: round(rect.left / scaleX),\n y: round(rect.top / scaleY)\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanM/MGY4OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBZ0Q7QUFDaEQ7QUFDZTtBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTSxvRUFBYTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbnZhciByb3VuZCA9IE1hdGgucm91bmQ7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgaW5jbHVkZVNjYWxlKSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gMTtcbiAgdmFyIHNjYWxlWSA9IDE7XG5cbiAgaWYgKGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgJiYgaW5jbHVkZVNjYWxlKSB7XG4gICAgLy8gRmFsbGJhY2sgdG8gMSBpbiBjYXNlIGJvdGggdmFsdWVzIGFyZSBgMGBcbiAgICBzY2FsZVggPSByZWN0LndpZHRoIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxO1xuICAgIHNjYWxlWSA9IHJlY3QuaGVpZ2h0IC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHJvdW5kKHJlY3Qud2lkdGggLyBzY2FsZVgpLFxuICAgIGhlaWdodDogcm91bmQocmVjdC5oZWlnaHQgLyBzY2FsZVkpLFxuICAgIHRvcDogcm91bmQocmVjdC50b3AgLyBzY2FsZVkpLFxuICAgIHJpZ2h0OiByb3VuZChyZWN0LnJpZ2h0IC8gc2NhbGVYKSxcbiAgICBib3R0b206IHJvdW5kKHJlY3QuYm90dG9tIC8gc2NhbGVZKSxcbiAgICBsZWZ0OiByb3VuZChyZWN0LmxlZnQgLyBzY2FsZVgpLFxuICAgIHg6IHJvdW5kKHJlY3QubGVmdCAvIHNjYWxlWCksXG4gICAgeTogcm91bmQocmVjdC50b3AgLyBzY2FsZVkpXG4gIH07XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js": /*!**********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js ***! \**********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getClippingRect; });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _getViewportRect_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getViewportRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js\");\n/* harmony import */ var _getDocumentRect_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js\");\n/* harmony import */ var _listScrollParents_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./listScrollParents.js */ \"./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js\");\n/* harmony import */ var _getOffsetParent_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getOffsetParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./getBoundingClientRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\");\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./getParentNode.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\");\n/* harmony import */ var _contains_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./contains.js */ \"./node_modules/@popperjs/core/lib/dom-utils/contains.js\");\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../utils/rectToClientRect.js */ \"./node_modules/@popperjs/core/lib/utils/rectToClientRect.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getInnerBoundingClientRect(element) {\n var rect = Object(_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(element);\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent) {\n return clippingParent === _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"viewport\"] ? Object(_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"])(Object(_getViewportRect_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element)) : Object(_instanceOf_js__WEBPACK_IMPORTED_MODULE_7__[\"isHTMLElement\"])(clippingParent) ? getInnerBoundingClientRect(clippingParent) : Object(_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"])(Object(_getDocumentRect_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(Object(_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = Object(_listScrollParents_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(Object(_getParentNode_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf(Object(_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(element).position) >= 0;\n var clipperElement = canEscapeClipping && Object(_instanceOf_js__WEBPACK_IMPORTED_MODULE_7__[\"isHTMLElement\"])(element) ? Object(_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(element) : element;\n\n if (!Object(_instanceOf_js__WEBPACK_IMPORTED_MODULE_7__[\"isElement\"])(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return Object(_instanceOf_js__WEBPACK_IMPORTED_MODULE_7__[\"isElement\"])(clippingParent) && Object(_contains_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(clippingParent, clipperElement) && Object(_getNodeName_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nfunction getClippingRect(element, boundary, rootBoundary) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent);\n accRect.top = Object(_utils_math_js__WEBPACK_IMPORTED_MODULE_13__[\"max\"])(rect.top, accRect.top);\n accRect.right = Object(_utils_math_js__WEBPACK_IMPORTED_MODULE_13__[\"min\"])(rect.right, accRect.right);\n accRect.bottom = Object(_utils_math_js__WEBPACK_IMPORTED_MODULE_13__[\"min\"])(rect.bottom, accRect.bottom);\n accRect.left = Object(_utils_math_js__WEBPACK_IMPORTED_MODULE_13__[\"max\"])(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanM/OWRlMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUF1QztBQUNZO0FBQ0E7QUFDSTtBQUNKO0FBQ007QUFDSjtBQUNNO0FBQ0k7QUFDaEI7QUFDVjtBQUNNO0FBQ2lCO0FBQ2hCOztBQUU1QztBQUNBLGFBQWEseUVBQXFCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNEJBQTRCLGtEQUFRLEdBQUcsMkVBQWdCLENBQUMsbUVBQWUsYUFBYSxvRUFBYSxnRUFBZ0UsMkVBQWdCLENBQUMsbUVBQWUsQ0FBQyxzRUFBa0I7QUFDcE4sQ0FBQztBQUNEO0FBQ0E7OztBQUdBO0FBQ0Esd0JBQXdCLHFFQUFpQixDQUFDLGlFQUFhO0FBQ3ZELHdEQUF3RCxvRUFBZ0I7QUFDeEUsNENBQTRDLG9FQUFhLFlBQVksbUVBQWU7O0FBRXBGLE9BQU8sZ0VBQVM7QUFDaEI7QUFDQSxHQUFHOzs7QUFHSDtBQUNBLFdBQVcsZ0VBQVMsb0JBQW9CLDZEQUFRLG9DQUFvQyxnRUFBVztBQUMvRixHQUFHO0FBQ0gsQ0FBQztBQUNEOzs7QUFHZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsMkRBQUc7QUFDckIsb0JBQW9CLDJEQUFHO0FBQ3ZCLHFCQUFxQiwyREFBRztBQUN4QixtQkFBbUIsMkRBQUc7QUFDdEI7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWaWV3cG9ydFJlY3QgZnJvbSBcIi4vZ2V0Vmlld3BvcnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRSZWN0IGZyb20gXCIuL2dldERvY3VtZW50UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4vY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4uL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IG1heCwgbWluIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KTtcbiAgcmVjdC50b3AgPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICByZWN0LmxlZnQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudExlZnQ7XG4gIHJlY3QuYm90dG9tID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC5yaWdodCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3Qud2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LmhlaWdodCA9IGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnggPSByZWN0LmxlZnQ7XG4gIHJlY3QueSA9IHJlY3QudG9wO1xuICByZXR1cm4gcmVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQpIHtcbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50ID09PSB2aWV3cG9ydCA/IHJlY3RUb0NsaWVudFJlY3QoZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQpKSA6IGlzSFRNTEVsZW1lbnQoY2xpcHBpbmdQYXJlbnQpID8gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdQYXJlbnQpIDogcmVjdFRvQ2xpZW50UmVjdChnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKSk7XG59IC8vIEEgXCJjbGlwcGluZyBwYXJlbnRcIiBpcyBhbiBvdmVyZmxvd2FibGUgY29udGFpbmVyIHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBvdmVyZmxvd2luZyBlbGVtZW50cyB3aXRoIGEgcG9zaXRpb24gZGlmZmVyZW50IGZyb21cbi8vIGBpbml0aWFsYFxuXG5cbmZ1bmN0aW9uIGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KSB7XG4gIHZhciBjbGlwcGluZ1BhcmVudHMgPSBsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKGVsZW1lbnQpKTtcbiAgdmFyIGNhbkVzY2FwZUNsaXBwaW5nID0gWydhYnNvbHV0ZScsICdmaXhlZCddLmluZGV4T2YoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbikgPj0gMDtcbiAgdmFyIGNsaXBwZXJFbGVtZW50ID0gY2FuRXNjYXBlQ2xpcHBpbmcgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSA/IGdldE9mZnNldFBhcmVudChlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgaWYgKCFpc0VsZW1lbnQoY2xpcHBlckVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8xNDE0XG5cblxuICByZXR1cm4gY2xpcHBpbmdQYXJlbnRzLmZpbHRlcihmdW5jdGlvbiAoY2xpcHBpbmdQYXJlbnQpIHtcbiAgICByZXR1cm4gaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSAmJiBjb250YWlucyhjbGlwcGluZ1BhcmVudCwgY2xpcHBlckVsZW1lbnQpICYmIGdldE5vZGVOYW1lKGNsaXBwaW5nUGFyZW50KSAhPT0gJ2JvZHknO1xuICB9KTtcbn0gLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgcGFyZW50c1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENsaXBwaW5nUmVjdChlbGVtZW50LCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5KSB7XG4gIHZhciBtYWluQ2xpcHBpbmdQYXJlbnRzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ1BhcmVudHMnID8gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIDogW10uY29uY2F0KGJvdW5kYXJ5KTtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IFtdLmNvbmNhdChtYWluQ2xpcHBpbmdQYXJlbnRzLCBbcm9vdEJvdW5kYXJ5XSk7XG4gIHZhciBmaXJzdENsaXBwaW5nUGFyZW50ID0gY2xpcHBpbmdQYXJlbnRzWzBdO1xuICB2YXIgY2xpcHBpbmdSZWN0ID0gY2xpcHBpbmdQYXJlbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjUmVjdCwgY2xpcHBpbmdQYXJlbnQpIHtcbiAgICB2YXIgcmVjdCA9IGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBmaXJzdENsaXBwaW5nUGFyZW50KSk7XG4gIGNsaXBwaW5nUmVjdC53aWR0aCA9IGNsaXBwaW5nUmVjdC5yaWdodCAtIGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QuaGVpZ2h0ID0gY2xpcHBpbmdSZWN0LmJvdHRvbSAtIGNsaXBwaW5nUmVjdC50b3A7XG4gIGNsaXBwaW5nUmVjdC54ID0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC55ID0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgcmV0dXJuIGNsaXBwaW5nUmVjdDtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js": /*!***********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js ***! \***********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getCompositeRect; });\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\");\n/* harmony import */ var _getNodeScroll_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getNodeScroll.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js\");\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./isScrollParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\");\n\n\n\n\n\n\n\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = rect.width / element.offsetWidth || 1;\n var scaleY = rect.height / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nfunction getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = Object(_instanceOf_js__WEBPACK_IMPORTED_MODULE_3__[\"isHTMLElement\"])(offsetParent);\n var offsetParentIsScaled = Object(_instanceOf_js__WEBPACK_IMPORTED_MODULE_3__[\"isHTMLElement\"])(offsetParent) && isElementScaled(offsetParent);\n var documentElement = Object(_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(offsetParent);\n var rect = Object(_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(elementOrVirtualElement, offsetParentIsScaled);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if (Object(_getNodeName_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n Object(_isScrollParent_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(documentElement)) {\n scroll = Object(_getNodeScroll_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(offsetParent);\n }\n\n if (Object(_instanceOf_js__WEBPACK_IMPORTED_MODULE_3__[\"isHTMLElement\"])(offsetParent)) {\n offsets = Object(_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = Object(_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzP2QxMTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQStEO0FBQ2hCO0FBQ0o7QUFDSztBQUNXO0FBQ0Y7QUFDUjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7O0FBR2U7QUFDZjtBQUNBO0FBQ0E7O0FBRUEsZ0NBQWdDLG9FQUFhO0FBQzdDLDZCQUE2QixvRUFBYTtBQUMxQyx3QkFBd0Isc0VBQWtCO0FBQzFDLGFBQWEseUVBQXFCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRLCtEQUFXO0FBQ25CLElBQUksa0VBQWM7QUFDbEIsZUFBZSxpRUFBYTtBQUM1Qjs7QUFFQSxRQUFRLG9FQUFhO0FBQ3JCLGdCQUFnQix5RUFBcUI7QUFDckM7QUFDQTtBQUNBLEtBQUs7QUFDTCxrQkFBa0IsdUVBQW1CO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXROb2RlU2Nyb2xsIGZyb20gXCIuL2dldE5vZGVTY3JvbGwuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50U2NhbGVkKGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gcmVjdC53aWR0aCAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMTtcbiAgdmFyIHNjYWxlWSA9IHJlY3QuaGVpZ2h0IC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMTtcbiAgcmV0dXJuIHNjYWxlWCAhPT0gMSB8fCBzY2FsZVkgIT09IDE7XG59IC8vIFJldHVybnMgdGhlIGNvbXBvc2l0ZSByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC5cbi8vIENvbXBvc2l0ZSBtZWFucyBpdCB0YWtlcyBpbnRvIGFjY291bnQgdHJhbnNmb3JtcyBhcyB3ZWxsIGFzIGxheW91dC5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wb3NpdGVSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnQsIGlzRml4ZWQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudElzU2NhbGVkID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGlzRWxlbWVudFNjYWxlZChvZmZzZXRQYXJlbnQpO1xuICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnRJc1NjYWxlZCk7XG4gIHZhciBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgdmFyIG9mZnNldHMgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMDc4XG4gICAgaXNTY3JvbGxQYXJlbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cblxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIG9mZnNldHMgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlKTtcbiAgICAgIG9mZnNldHMueCArPSBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSArPSBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCxcbiAgICB5OiByZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3AgLSBvZmZzZXRzLnksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js": /*!***********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js ***! \***********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getComputedStyle; });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n\nfunction getComputedStyle(element) {\n return Object(_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element).getComputedStyle(element);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzP2I1MTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQXVDO0FBQ3hCO0FBQ2YsU0FBUyw2REFBUztBQUNsQiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js": /*!*************************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js ***! \*************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getDocumentElement; });\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\nfunction getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return ((Object(_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__[\"isElement\"])(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanM/ZWY1MiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBNEM7QUFDN0I7QUFDZjtBQUNBLFdBQVcsZ0VBQVM7QUFDcEI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSB7XG4gIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgcmV0dXJuICgoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudC5vd25lckRvY3VtZW50IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gIGVsZW1lbnQuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkuZG9jdW1lbnRFbGVtZW50O1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js": /*!**********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js ***! \**********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getDocumentRect; });\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\");\n/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScroll.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\n\n\n\n // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nfunction getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = Object(_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element);\n var winScroll = Object(_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = Object(_utils_math_js__WEBPACK_IMPORTED_MODULE_4__[\"max\"])(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = Object(_utils_math_js__WEBPACK_IMPORTED_MODULE_4__[\"max\"])(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + Object(_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(element);\n var y = -winScroll.scrollTop;\n\n if (Object(_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(body || html).direction === 'rtl') {\n x += Object(_utils_math_js__WEBPACK_IMPORTED_MODULE_4__[\"max\"])(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudFJlY3QuanM/M2U3OSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUF5RDtBQUNKO0FBQ007QUFDUjtBQUNaO0FBQ3ZDOztBQUVlO0FBQ2Y7O0FBRUEsYUFBYSxzRUFBa0I7QUFDL0Isa0JBQWtCLG1FQUFlO0FBQ2pDO0FBQ0EsY0FBYywwREFBRztBQUNqQixlQUFlLDBEQUFHO0FBQ2xCLGtDQUFrQyx1RUFBbUI7QUFDckQ7O0FBRUEsTUFBTSxvRUFBZ0I7QUFDdEIsU0FBUywwREFBRztBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRSZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgeyBtYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB3aW5TY3JvbGwgPSBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCk7XG4gIHZhciBib2R5ID0gKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5O1xuICB2YXIgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuc2Nyb2xsV2lkdGggOiAwLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApO1xuICB2YXIgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keSA/IGJvZHkuc2Nyb2xsSGVpZ2h0IDogMCwgYm9keSA/IGJvZHkuY2xpZW50SGVpZ2h0IDogMCk7XG4gIHZhciB4ID0gLXdpblNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgdmFyIHkgPSAtd2luU2Nyb2xsLnNjcm9sbFRvcDtcblxuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShib2R5IHx8IGh0bWwpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApIC0gd2lkdGg7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js": /*!***************************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js ***! \***************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getHTMLElementScroll; });\nfunction getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcz81ZmU2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEhUTUxFbGVtZW50U2Nyb2xsKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICB9O1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js": /*!********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js ***! \********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getLayoutRect; });\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\");\n // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nfunction getLayoutRect(element) {\n var clientRect = Object(_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzP2UyZTkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQStEO0FBQy9EOztBQUVlO0FBQ2YsbUJBQW1CLHlFQUFxQixVQUFVO0FBQ2xEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiOyAvLyBSZXR1cm5zIHRoZSBsYXlvdXQgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuIExheW91dFxuLy8gbWVhbnMgaXQgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYXlvdXRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCk7IC8vIFVzZSB0aGUgY2xpZW50UmVjdCBzaXplcyBpZiBpdCdzIG5vdCBiZWVuIHRyYW5zZm9ybWVkLlxuICAvLyBGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEyMjNcblxuICB2YXIgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3Qud2lkdGggLSB3aWR0aCkgPD0gMSkge1xuICAgIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aDtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LmhlaWdodCAtIGhlaWdodCkgPD0gMSkge1xuICAgIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBlbGVtZW50Lm9mZnNldExlZnQsXG4gICAgeTogZWxlbWVudC5vZmZzZXRUb3AsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js": /*!******************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js ***! \******************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getNodeName; });\nfunction getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcz81Nzg4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBZTtBQUNmO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVOYW1lKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgPyAoZWxlbWVudC5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA6IG51bGw7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js": /*!********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js ***! \********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getNodeScroll; });\n/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindowScroll.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\");\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getHTMLElementScroll.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js\");\n\n\n\n\nfunction getNodeScroll(node) {\n if (node === Object(_getWindow_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(node) || !Object(_instanceOf_js__WEBPACK_IMPORTED_MODULE_2__[\"isHTMLElement\"])(node)) {\n return Object(_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node);\n } else {\n return Object(_getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(node);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlU2Nyb2xsLmpzPzE5OWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQW1EO0FBQ1o7QUFDUztBQUNhO0FBQzlDO0FBQ2YsZUFBZSw2REFBUyxXQUFXLG9FQUFhO0FBQ2hELFdBQVcsbUVBQWU7QUFDMUIsR0FBRztBQUNILFdBQVcsd0VBQW9CO0FBQy9CO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlU2Nyb2xsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEhUTUxFbGVtZW50U2Nyb2xsIGZyb20gXCIuL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlU2Nyb2xsKG5vZGUpIHtcbiAgaWYgKG5vZGUgPT09IGdldFdpbmRvdyhub2RlKSB8fCAhaXNIVE1MRWxlbWVudChub2RlKSkge1xuICAgIHJldHVybiBnZXRXaW5kb3dTY3JvbGwobm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGdldEhUTUxFbGVtZW50U2Nyb2xsKG5vZGUpO1xuICB9XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js": /*!**********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js ***! \**********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getOffsetParent; });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _isTableElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./isTableElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js\");\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getParentNode.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\");\n\n\n\n\n\n\n\nfunction getTrueOffsetParent(element) {\n if (!Object(_instanceOf_js__WEBPACK_IMPORTED_MODULE_3__[\"isHTMLElement\"])(element) || // https://github.com/popperjs/popper-core/issues/837\n Object(_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') !== -1;\n var isIE = navigator.userAgent.indexOf('Trident') !== -1;\n\n if (isIE && Object(_instanceOf_js__WEBPACK_IMPORTED_MODULE_3__[\"isHTMLElement\"])(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = Object(_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = Object(_getParentNode_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(element);\n\n while (Object(_instanceOf_js__WEBPACK_IMPORTED_MODULE_3__[\"isHTMLElement\"])(currentNode) && ['html', 'body'].indexOf(Object(_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(currentNode)) < 0) {\n var css = Object(_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nfunction getOffsetParent(element) {\n var window = Object(_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && Object(_isTableElement_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(offsetParent) && Object(_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && (Object(_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(offsetParent) === 'html' || Object(_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(offsetParent) === 'body' && Object(_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanM/YjYyYiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQXVDO0FBQ0k7QUFDVTtBQUNMO0FBQ0M7QUFDRjs7QUFFL0M7QUFDQSxPQUFPLG9FQUFhO0FBQ3BCLEVBQUUsb0VBQWdCO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQSxjQUFjLG9FQUFhO0FBQzNCO0FBQ0EscUJBQXFCLG9FQUFnQjs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLGlFQUFhOztBQUVqQyxTQUFTLG9FQUFhLDBDQUEwQywrREFBVztBQUMzRSxjQUFjLG9FQUFnQixjQUFjO0FBQzVDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7OztBQUdlO0FBQ2YsZUFBZSw2REFBUztBQUN4Qjs7QUFFQSx5QkFBeUIsa0VBQWMsa0JBQWtCLG9FQUFnQjtBQUN6RTtBQUNBOztBQUVBLHVCQUF1QiwrREFBVyw2QkFBNkIsK0RBQVcsNkJBQTZCLG9FQUFnQjtBQUN2SDtBQUNBOztBQUVBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGlzVGFibGVFbGVtZW50IGZyb20gXCIuL2lzVGFibGVFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy84MzdcbiAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50O1xufSAvLyBgLm9mZnNldFBhcmVudGAgcmVwb3J0cyBgbnVsbGAgZm9yIGZpeGVkIGVsZW1lbnRzLCB3aGlsZSBhYnNvbHV0ZSBlbGVtZW50c1xuLy8gcmV0dXJuIHRoZSBjb250YWluaW5nIGJsb2NrXG5cblxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgdmFyIGlzRmlyZWZveCA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXJlZm94JykgIT09IC0xO1xuICB2YXIgaXNJRSA9IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudCcpICE9PSAtMTtcblxuICBpZiAoaXNJRSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgLy8gSW4gSUUgOSwgMTAgYW5kIDExIGZpeGVkIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmxvY2sgaXMgYWx3YXlzIGVzdGFibGlzaGVkIGJ5IHRoZSB2aWV3cG9ydFxuICAgIHZhciBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Q3NzLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiBbJ2h0bWwnLCAnYm9keSddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoY3VycmVudE5vZGUpKSA8IDApIHtcbiAgICB2YXIgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7IC8vIFRoaXMgaXMgbm9uLWV4aGF1c3RpdmUgYnV0IGNvdmVycyB0aGUgbW9zdCBjb21tb24gQ1NTIHByb3BlcnRpZXMgdGhhdFxuICAgIC8vIGNyZWF0ZSBhIGNvbnRhaW5pbmcgYmxvY2suXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcblxuICAgIGlmIChjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgY3NzLmNvbnRhaW4gPT09ICdwYWludCcgfHwgWyd0cmFuc2Zvcm0nLCAncGVyc3BlY3RpdmUnXS5pbmRleE9mKGNzcy53aWxsQ2hhbmdlKSAhPT0gLTEgfHwgaXNGaXJlZm94ICYmIGNzcy53aWxsQ2hhbmdlID09PSAnZmlsdGVyJyB8fCBpc0ZpcmVmb3ggJiYgY3NzLmZpbHRlciAmJiBjc3MuZmlsdGVyICE9PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSAvLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpO1xuXG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgaWYgKG9mZnNldFBhcmVudCAmJiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2h0bWwnIHx8IGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdib2R5JyAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW5kb3c7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js": /*!********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js ***! \********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getParentNode; });\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\n\n\nfunction getParentNode(element) {\n if (Object(_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n Object(_instanceOf_js__WEBPACK_IMPORTED_MODULE_2__[\"isShadowRoot\"])(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n Object(_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element) // fallback\n\n );\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzPzI4YmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUEyQztBQUNjO0FBQ1Y7QUFDaEM7QUFDZixNQUFNLCtEQUFXO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksbUVBQVk7QUFDaEI7QUFDQSxJQUFJLHNFQUFrQjs7QUFFdEI7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGdldE5vZGVOYW1lKGVsZW1lbnQpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiAoLy8gdGhpcyBpcyBhIHF1aWNrZXIgKGJ1dCBsZXNzIHR5cGUgc2FmZSkgd2F5IHRvIHNhdmUgcXVpdGUgc29tZSBieXRlcyBmcm9tIHRoZSBidW5kbGVcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgZWxlbWVudC5hc3NpZ25lZFNsb3QgfHwgLy8gc3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGVcbiAgICBlbGVtZW50LnBhcmVudE5vZGUgfHwgKCAvLyBET00gRWxlbWVudCBkZXRlY3RlZFxuICAgIGlzU2hhZG93Um9vdChlbGVtZW50KSA/IGVsZW1lbnQuaG9zdCA6IG51bGwpIHx8IC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWRcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogSFRNTEVsZW1lbnQgaXMgYSBOb2RlXG4gICAgZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIC8vIGZhbGxiYWNrXG5cbiAgKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js": /*!**********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js ***! \**********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getScrollParent; });\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getParentNode.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\");\n/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./isScrollParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\");\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\n\n\n\nfunction getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf(Object(_getNodeName_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if (Object(_instanceOf_js__WEBPACK_IMPORTED_MODULE_3__[\"isHTMLElement\"])(node) && Object(_isScrollParent_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(node)) {\n return node;\n }\n\n return getScrollParent(Object(_getParentNode_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRTY3JvbGxQYXJlbnQuanM/OWQwZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBK0M7QUFDRTtBQUNOO0FBQ0s7QUFDakM7QUFDZiw0Q0FBNEMsK0RBQVc7QUFDdkQ7QUFDQTtBQUNBOztBQUVBLE1BQU0sb0VBQWEsVUFBVSxrRUFBYztBQUMzQztBQUNBOztBQUVBLHlCQUF5QixpRUFBYTtBQUN0QyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFNjcm9sbFBhcmVudC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KG5vZGUpIHtcbiAgaWYgKFsnaHRtbCcsICdib2R5JywgJyNkb2N1bWVudCddLmluZGV4T2YoZ2V0Tm9kZU5hbWUobm9kZSkpID49IDApIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgaWYgKGlzSFRNTEVsZW1lbnQobm9kZSkgJiYgaXNTY3JvbGxQYXJlbnQobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShub2RlKSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js": /*!**********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js ***! \**********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getViewportRect; });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\");\n\n\n\nfunction getViewportRect(element) {\n var win = Object(_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element);\n var html = Object(_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0; // NB: This isn't supported on iOS <= 12. If the keyboard is open, the popper\n // can be obscured underneath it.\n // Also, `html.clientHeight` adds the bottom bar height in Safari iOS, even\n // if it isn't open, so if this isn't available, the popper will be detected\n // to overflow the bottom of the screen too early.\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height; // Uses Layout Viewport (like Chrome; Safari does not currently)\n // In Chrome, it returns a value very close to 0 (+/-) but contains rounding\n // errors due to floating point numbers, so we need to check precision.\n // Safari returns a number <= 0, usually < -1 when pinch-zoomed\n // Feature detection fails in mobile emulation mode in Chrome.\n // Math.abs(win.innerWidth / visualViewport.scale - visualViewport.width) <\n // 0.001\n // Fallback here: \"Not Safari\" userAgent\n\n if (!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)) {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + Object(_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(element),\n y: y\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanM/N2M3MyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQXVDO0FBQ2tCO0FBQ0U7QUFDNUM7QUFDZixZQUFZLDZEQUFTO0FBQ3JCLGFBQWEsc0VBQWtCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQ0FBbUMsc0NBQXNDO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyx1RUFBbUI7QUFDOUI7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Vmlld3BvcnRSZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICB2YXIgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwOyAvLyBOQjogVGhpcyBpc24ndCBzdXBwb3J0ZWQgb24gaU9TIDw9IDEyLiBJZiB0aGUga2V5Ym9hcmQgaXMgb3BlbiwgdGhlIHBvcHBlclxuICAvLyBjYW4gYmUgb2JzY3VyZWQgdW5kZXJuZWF0aCBpdC5cbiAgLy8gQWxzbywgYGh0bWwuY2xpZW50SGVpZ2h0YCBhZGRzIHRoZSBib3R0b20gYmFyIGhlaWdodCBpbiBTYWZhcmkgaU9TLCBldmVuXG4gIC8vIGlmIGl0IGlzbid0IG9wZW4sIHNvIGlmIHRoaXMgaXNuJ3QgYXZhaWxhYmxlLCB0aGUgcG9wcGVyIHdpbGwgYmUgZGV0ZWN0ZWRcbiAgLy8gdG8gb3ZlcmZsb3cgdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuIHRvbyBlYXJseS5cblxuICBpZiAodmlzdWFsVmlld3BvcnQpIHtcbiAgICB3aWR0aCA9IHZpc3VhbFZpZXdwb3J0LndpZHRoO1xuICAgIGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmhlaWdodDsgLy8gVXNlcyBMYXlvdXQgVmlld3BvcnQgKGxpa2UgQ2hyb21lOyBTYWZhcmkgZG9lcyBub3QgY3VycmVudGx5KVxuICAgIC8vIEluIENocm9tZSwgaXQgcmV0dXJucyBhIHZhbHVlIHZlcnkgY2xvc2UgdG8gMCAoKy8tKSBidXQgY29udGFpbnMgcm91bmRpbmdcbiAgICAvLyBlcnJvcnMgZHVlIHRvIGZsb2F0aW5nIHBvaW50IG51bWJlcnMsIHNvIHdlIG5lZWQgdG8gY2hlY2sgcHJlY2lzaW9uLlxuICAgIC8vIFNhZmFyaSByZXR1cm5zIGEgbnVtYmVyIDw9IDAsIHVzdWFsbHkgPCAtMSB3aGVuIHBpbmNoLXpvb21lZFxuICAgIC8vIEZlYXR1cmUgZGV0ZWN0aW9uIGZhaWxzIGluIG1vYmlsZSBlbXVsYXRpb24gbW9kZSBpbiBDaHJvbWUuXG4gICAgLy8gTWF0aC5hYnMod2luLmlubmVyV2lkdGggLyB2aXN1YWxWaWV3cG9ydC5zY2FsZSAtIHZpc3VhbFZpZXdwb3J0LndpZHRoKSA8XG4gICAgLy8gMC4wMDFcbiAgICAvLyBGYWxsYmFjayBoZXJlOiBcIk5vdCBTYWZhcmlcIiB1c2VyQWdlbnRcblxuICAgIGlmICghL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHggKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpLFxuICAgIHk6IHlcbiAgfTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js": /*!****************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindow.js ***! \****************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getWindow; });\nfunction getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3cuanM/MWZjMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQWU7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvdyhub2RlKSB7XG4gIGlmIChub2RlID09IG51bGwpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgaWYgKG5vZGUudG9TdHJpbmcoKSAhPT0gJ1tvYmplY3QgV2luZG93XScpIHtcbiAgICB2YXIgb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudDtcbiAgICByZXR1cm4gb3duZXJEb2N1bWVudCA/IG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93IDogd2luZG93O1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js": /*!**********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js ***! \**********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getWindowScroll; });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n\nfunction getWindowScroll(node) {\n var win = Object(_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGwuanM/YTMyMSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBdUM7QUFDeEI7QUFDZixZQUFZLDZEQUFTO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbChub2RlKSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3cobm9kZSk7XG4gIHZhciBzY3JvbGxMZWZ0ID0gd2luLnBhZ2VYT2Zmc2V0O1xuICB2YXIgc2Nyb2xsVG9wID0gd2luLnBhZ2VZT2Zmc2V0O1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3BcbiAgfTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js": /*!**************************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js ***! \**************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getWindowScrollBarX; });\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\");\n\n\n\nfunction getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return Object(_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(Object(_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element)).left + Object(_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(element).scrollLeft;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzPzYxMjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUErRDtBQUNOO0FBQ047QUFDcEM7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMseUVBQXFCLENBQUMsc0VBQWtCLGtCQUFrQixtRUFBZTtBQUNsRiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbEJhclguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpIHtcbiAgLy8gSWYgPGh0bWw+IGhhcyBhIENTUyB3aWR0aCBncmVhdGVyIHRoYW4gdGhlIHZpZXdwb3J0LCB0aGVuIHRoaXMgd2lsbCBiZVxuICAvLyBpbmNvcnJlY3QgZm9yIFJUTC5cbiAgLy8gUG9wcGVyIDEgaXMgYnJva2VuIGluIHRoaXMgY2FzZSBhbmQgbmV2ZXIgaGFkIGEgYnVnIHJlcG9ydCBzbyBsZXQncyBhc3N1bWVcbiAgLy8gaXQncyBub3QgYW4gaXNzdWUuIEkgZG9uJ3QgdGhpbmsgYW55b25lIGV2ZXIgc3BlY2lmaWVzIHdpZHRoIG9uIDxodG1sPlxuICAvLyBhbnl3YXkuXG4gIC8vIEJyb3dzZXJzIHdoZXJlIHRoZSBsZWZ0IHNjcm9sbGJhciBkb2Vzbid0IGNhdXNlIGFuIGlzc3VlIHJlcG9ydCBgMGAgZm9yXG4gIC8vIHRoaXMgKGUuZy4gRWRnZSAyMDE5LCBJRTExLCBTYWZhcmkpXG4gIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js": /*!*****************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js ***! \*****************************************************************/ /*! exports provided: isElement, isHTMLElement, isShadowRoot */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isElement\", function() { return isElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isHTMLElement\", function() { return isHTMLElement; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"isShadowRoot\", function() { return isShadowRoot; });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n\n\nfunction isElement(node) {\n var OwnElement = Object(_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = Object(_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = Object(_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzPzI3NjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUF1Qzs7QUFFdkM7QUFDQSxtQkFBbUIsNkRBQVM7QUFDNUI7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQiw2REFBUztBQUM1QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLDZEQUFTO0FBQzVCO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuSFRNTEVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdChub2RlKSB7XG4gIC8vIElFIDExIGhhcyBubyBTaGFkb3dSb290XG4gIGlmICh0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5TaGFkb3dSb290O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q7XG59XG5cbmV4cG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNTaGFkb3dSb290IH07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js": /*!*********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js ***! \*********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return isScrollParent; });\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n\nfunction isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = Object(_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1Njcm9sbFBhcmVudC5qcz9hZTZjIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFxRDtBQUN0QztBQUNmO0FBQ0EsMEJBQTBCLG9FQUFnQjtBQUMxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTY3JvbGxQYXJlbnQoZWxlbWVudCkge1xuICAvLyBGaXJlZm94IHdhbnRzIHVzIHRvIGNoZWNrIGAteGAgYW5kIGAteWAgdmFyaWF0aW9ucyBhcyB3ZWxsXG4gIHZhciBfZ2V0Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCksXG4gICAgICBvdmVyZmxvdyA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93LFxuICAgICAgb3ZlcmZsb3dYID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dZO1xuXG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW4vLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js": /*!*********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js ***! \*********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return isTableElement; });\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].indexOf(Object(_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element)) >= 0;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcz9iNDUxIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUEyQztBQUM1QjtBQUNmLHVDQUF1QywrREFBVztBQUNsRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzVGFibGVFbGVtZW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5kZXhPZihnZXROb2RlTmFtZShlbGVtZW50KSkgPj0gMDtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js": /*!************************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js ***! \************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return listScrollParents; });\n/* harmony import */ var _getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getScrollParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js\");\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getParentNode.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\");\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isScrollParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\");\n\n\n\n\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nfunction listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = Object(_getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = Object(_getWindow_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], Object(_isScrollParent_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents(Object(_getParentNode_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(target)));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qcz9lYTFhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFtRDtBQUNKO0FBQ1I7QUFDVTtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWU7QUFDZjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLG1FQUFlO0FBQ3BDO0FBQ0EsWUFBWSw2REFBUztBQUNyQiwrREFBK0Qsa0VBQWM7QUFDN0U7QUFDQTtBQUNBLHVDQUF1QyxpRUFBYTtBQUNwRCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldFNjcm9sbFBhcmVudCBmcm9tIFwiLi9nZXRTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbi8qXG5naXZlbiBhIERPTSBlbGVtZW50LCByZXR1cm4gdGhlIGxpc3Qgb2YgYWxsIHNjcm9sbCBwYXJlbnRzLCB1cCB0aGUgbGlzdCBvZiBhbmNlc29yc1xudW50aWwgd2UgZ2V0IHRvIHRoZSB0b3Agd2luZG93IG9iamVjdC4gVGhpcyBsaXN0IGlzIHdoYXQgd2UgYXR0YWNoIHNjcm9sbCBsaXN0ZW5lcnNcbnRvLCBiZWNhdXNlIGlmIGFueSBvZiB0aGVzZSBwYXJlbnQgZWxlbWVudHMgc2Nyb2xsLCB3ZSdsbCBuZWVkIHRvIHJlLWNhbGN1bGF0ZSB0aGVcbnJlZmVyZW5jZSBlbGVtZW50J3MgcG9zaXRpb24uXG4qL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaXN0U2Nyb2xsUGFyZW50cyhlbGVtZW50LCBsaXN0KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuXG4gIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoZWxlbWVudCk7XG4gIHZhciBpc0JvZHkgPSBzY3JvbGxQYXJlbnQgPT09ICgoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHkpO1xuICB2YXIgd2luID0gZ2V0V2luZG93KHNjcm9sbFBhcmVudCk7XG4gIHZhciB0YXJnZXQgPSBpc0JvZHkgPyBbd2luXS5jb25jYXQod2luLnZpc3VhbFZpZXdwb3J0IHx8IFtdLCBpc1Njcm9sbFBhcmVudChzY3JvbGxQYXJlbnQpID8gc2Nyb2xsUGFyZW50IDogW10pIDogc2Nyb2xsUGFyZW50O1xuICB2YXIgdXBkYXRlZExpc3QgPSBsaXN0LmNvbmNhdCh0YXJnZXQpO1xuICByZXR1cm4gaXNCb2R5ID8gdXBkYXRlZExpc3QgOiAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogaXNCb2R5IHRlbGxzIHVzIHRhcmdldCB3aWxsIGJlIGFuIEhUTUxFbGVtZW50IGhlcmVcbiAgdXBkYXRlZExpc3QuY29uY2F0KGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUodGFyZ2V0KSkpO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/enums.js": /*!**************************************************!*\ !*** ./node_modules/@popperjs/core/lib/enums.js ***! \**************************************************/ /*! exports provided: top, bottom, right, left, auto, basePlacements, start, end, clippingParents, viewport, popper, reference, variationPlacements, placements, beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite, modifierPhases */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"top\", function() { return top; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"bottom\", function() { return bottom; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"right\", function() { return right; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"left\", function() { return left; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"auto\", function() { return auto; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"basePlacements\", function() { return basePlacements; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"start\", function() { return start; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"end\", function() { return end; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"clippingParents\", function() { return clippingParents; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"viewport\", function() { return viewport; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"popper\", function() { return popper; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"reference\", function() { return reference; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"variationPlacements\", function() { return variationPlacements; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"placements\", function() { return placements; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"beforeRead\", function() { return beforeRead; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"read\", function() { return read; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"afterRead\", function() { return afterRead; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"beforeMain\", function() { return beforeMain; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"main\", function() { return main; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"afterMain\", function() { return afterMain; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"beforeWrite\", function() { return beforeWrite; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"write\", function() { return write; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"afterWrite\", function() { return afterWrite; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"modifierPhases\", function() { return modifierPhases; });\nvar top = 'top';\nvar bottom = 'bottom';\nvar right = 'right';\nvar left = 'left';\nvar auto = 'auto';\nvar basePlacements = [top, bottom, right, left];\nvar start = 'start';\nvar end = 'end';\nvar clippingParents = 'clippingParents';\nvar viewport = 'viewport';\nvar popper = 'popper';\nvar reference = 'reference';\nvar variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nvar placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nvar beforeRead = 'beforeRead';\nvar read = 'read';\nvar afterRead = 'afterRead'; // pure-logic modifiers\n\nvar beforeMain = 'beforeMain';\nvar main = 'main';\nvar afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nvar beforeWrite = 'beforeWrite';\nvar write = 'write';\nvar afterWrite = 'afterWrite';\nvar modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2VudW1zLmpzPzc3ZjkiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBTztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNQO0FBQ0EsQ0FBQztBQUNNO0FBQ1A7QUFDQSxDQUFDLE1BQU07O0FBRUE7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBLDRCQUE0Qjs7QUFFNUI7QUFDQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2VudW1zLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHZhciB0b3AgPSAndG9wJztcbmV4cG9ydCB2YXIgYm90dG9tID0gJ2JvdHRvbSc7XG5leHBvcnQgdmFyIHJpZ2h0ID0gJ3JpZ2h0JztcbmV4cG9ydCB2YXIgbGVmdCA9ICdsZWZ0JztcbmV4cG9ydCB2YXIgYXV0byA9ICdhdXRvJztcbmV4cG9ydCB2YXIgYmFzZVBsYWNlbWVudHMgPSBbdG9wLCBib3R0b20sIHJpZ2h0LCBsZWZ0XTtcbmV4cG9ydCB2YXIgc3RhcnQgPSAnc3RhcnQnO1xuZXhwb3J0IHZhciBlbmQgPSAnZW5kJztcbmV4cG9ydCB2YXIgY2xpcHBpbmdQYXJlbnRzID0gJ2NsaXBwaW5nUGFyZW50cyc7XG5leHBvcnQgdmFyIHZpZXdwb3J0ID0gJ3ZpZXdwb3J0JztcbmV4cG9ydCB2YXIgcG9wcGVyID0gJ3BvcHBlcic7XG5leHBvcnQgdmFyIHJlZmVyZW5jZSA9ICdyZWZlcmVuY2UnO1xuZXhwb3J0IHZhciB2YXJpYXRpb25QbGFjZW1lbnRzID0gLyojX19QVVJFX18qL2Jhc2VQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7XG5leHBvcnQgdmFyIHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovW10uY29uY2F0KGJhc2VQbGFjZW1lbnRzLCBbYXV0b10pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCwgcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTsgLy8gbW9kaWZpZXJzIHRoYXQgbmVlZCB0byByZWFkIHRoZSBET01cblxuZXhwb3J0IHZhciBiZWZvcmVSZWFkID0gJ2JlZm9yZVJlYWQnO1xuZXhwb3J0IHZhciByZWFkID0gJ3JlYWQnO1xuZXhwb3J0IHZhciBhZnRlclJlYWQgPSAnYWZ0ZXJSZWFkJzsgLy8gcHVyZS1sb2dpYyBtb2RpZmllcnNcblxuZXhwb3J0IHZhciBiZWZvcmVNYWluID0gJ2JlZm9yZU1haW4nO1xuZXhwb3J0IHZhciBtYWluID0gJ21haW4nO1xuZXhwb3J0IHZhciBhZnRlck1haW4gPSAnYWZ0ZXJNYWluJzsgLy8gbW9kaWZpZXIgd2l0aCB0aGUgcHVycG9zZSB0byB3cml0ZSB0byB0aGUgRE9NIChvciB3cml0ZSBpbnRvIGEgZnJhbWV3b3JrIHN0YXRlKVxuXG5leHBvcnQgdmFyIGJlZm9yZVdyaXRlID0gJ2JlZm9yZVdyaXRlJztcbmV4cG9ydCB2YXIgd3JpdGUgPSAnd3JpdGUnO1xuZXhwb3J0IHZhciBhZnRlcldyaXRlID0gJ2FmdGVyV3JpdGUnO1xuZXhwb3J0IHZhciBtb2RpZmllclBoYXNlcyA9IFtiZWZvcmVSZWFkLCByZWFkLCBhZnRlclJlYWQsIGJlZm9yZU1haW4sIG1haW4sIGFmdGVyTWFpbiwgYmVmb3JlV3JpdGUsIHdyaXRlLCBhZnRlcldyaXRlXTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/enums.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/index.js": /*!**************************************************!*\ !*** ./node_modules/@popperjs/core/lib/index.js ***! \**************************************************/ /*! exports provided: top, bottom, right, left, auto, basePlacements, start, end, clippingParents, viewport, popper, reference, variationPlacements, placements, beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite, modifierPhases, applyStyles, arrow, computeStyles, eventListeners, flip, hide, offset, popperOffsets, preventOverflow, popperGenerator, detectOverflow, createPopperBase, createPopper, createPopperLite */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"top\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"top\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"bottom\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"bottom\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"right\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"right\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"left\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"left\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"auto\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"auto\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"basePlacements\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"basePlacements\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"start\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"start\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"end\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"end\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"clippingParents\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"clippingParents\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"viewport\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"viewport\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"popper\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"popper\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"reference\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"reference\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"variationPlacements\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"variationPlacements\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"placements\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"placements\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"beforeRead\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"beforeRead\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"read\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"read\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"afterRead\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"afterRead\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"beforeMain\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"beforeMain\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"main\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"main\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"afterMain\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"afterMain\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"beforeWrite\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"beforeWrite\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"write\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"write\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"afterWrite\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"afterWrite\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"modifierPhases\", function() { return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"modifierPhases\"]; });\n\n/* harmony import */ var _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/index.js */ \"./node_modules/@popperjs/core/lib/modifiers/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"applyStyles\", function() { return _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__[\"applyStyles\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"arrow\", function() { return _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__[\"arrow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"computeStyles\", function() { return _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__[\"computeStyles\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"eventListeners\", function() { return _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__[\"eventListeners\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"flip\", function() { return _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__[\"flip\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"hide\", function() { return _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__[\"hide\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"offset\", function() { return _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__[\"offset\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"popperOffsets\", function() { return _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__[\"popperOffsets\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"preventOverflow\", function() { return _modifiers_index_js__WEBPACK_IMPORTED_MODULE_1__[\"preventOverflow\"]; });\n\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./createPopper.js */ \"./node_modules/@popperjs/core/lib/createPopper.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"popperGenerator\", function() { return _createPopper_js__WEBPACK_IMPORTED_MODULE_2__[\"popperGenerator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"detectOverflow\", function() { return _createPopper_js__WEBPACK_IMPORTED_MODULE_2__[\"detectOverflow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createPopperBase\", function() { return _createPopper_js__WEBPACK_IMPORTED_MODULE_2__[\"createPopper\"]; });\n\n/* harmony import */ var _popper_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./popper.js */ \"./node_modules/@popperjs/core/lib/popper.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createPopper\", function() { return _popper_js__WEBPACK_IMPORTED_MODULE_3__[\"createPopper\"]; });\n\n/* harmony import */ var _popper_lite_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./popper-lite.js */ \"./node_modules/@popperjs/core/lib/popper-lite.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createPopperLite\", function() { return _popper_lite_js__WEBPACK_IMPORTED_MODULE_4__[\"createPopper\"]; });\n\n\n // eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2luZGV4LmpzPzEyMzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBMkI7QUFDVTs7QUFFaUU7O0FBRTNEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9pbmRleC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2VudW1zLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tb2RpZmllcnMvaW5kZXguanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBwb3BwZXJHZW5lcmF0b3IsIGRldGVjdE92ZXJmbG93LCBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyQmFzZSB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciB9IGZyb20gXCIuL3BvcHBlci5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJMaXRlIH0gZnJvbSBcIi4vcG9wcGVyLWxpdGUuanNcIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/index.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js": /*!******************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/modifiers/applyStyles.js ***! \******************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\n // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!Object(_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__[\"isHTMLElement\"])(element) || !Object(_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!Object(_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__[\"isHTMLElement\"])(element) || !Object(_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcz8wYWI0Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFzRDtBQUNLO0FBQzNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7O0FBRXZDLFNBQVMsOEVBQWEsY0FBYyx5RUFBVztBQUMvQztBQUNBLEtBQUs7QUFDTDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0hBQXNIOztBQUV0SDtBQUNBO0FBQ0E7QUFDQSxPQUFPLElBQUksRUFBRTs7QUFFYixXQUFXLDhFQUFhLGNBQWMseUVBQVc7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsQ0FBQzs7O0FBR2M7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiOyAvLyBUaGlzIG1vZGlmaWVyIHRha2VzIHRoZSBzdHlsZXMgcHJlcGFyZWQgYnkgdGhlIGBjb21wdXRlU3R5bGVzYCBtb2RpZmllclxuLy8gYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgSFRNTEVsZW1lbnRzIHN1Y2ggYXMgcG9wcGVyIGFuZCBhcnJvd1xuXG5mdW5jdGlvbiBhcHBseVN0eWxlcyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHN0eWxlID0gc3RhdGUuc3R5bGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEZsb3cgZG9lc24ndCBzdXBwb3J0IHRvIGV4dGVuZCB0aGlzIHByb3BlcnR5LCBidXQgaXQncyB0aGUgbW9zdFxuICAgIC8vIGVmZmVjdGl2ZSB3YXkgdG8gYXBwbHkgc3R5bGVzIHRvIGFuIEhUTUxFbGVtZW50XG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdXG5cblxuICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbbmFtZV07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSA9PT0gdHJ1ZSA/ICcnIDogdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlO1xuICB2YXIgaW5pdGlhbFN0eWxlcyA9IHtcbiAgICBwb3BwZXI6IHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgbGVmdDogJzAnLFxuICAgICAgdG9wOiAnMCcsXG4gICAgICBtYXJnaW46ICcwJ1xuICAgIH0sXG4gICAgYXJyb3c6IHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnXG4gICAgfSxcbiAgICByZWZlcmVuY2U6IHt9XG4gIH07XG4gIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMucG9wcGVyLnN0eWxlLCBpbml0aWFsU3R5bGVzLnBvcHBlcik7XG4gIHN0YXRlLnN0eWxlcyA9IGluaXRpYWxTdHlsZXM7XG5cbiAgaWYgKHN0YXRlLmVsZW1lbnRzLmFycm93KSB7XG4gICAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5hcnJvdy5zdHlsZSwgaW5pdGlhbFN0eWxlcy5hcnJvdyk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdO1xuICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgICAgdmFyIHN0eWxlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHN0YXRlLnN0eWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IHN0YXRlLnN0eWxlc1tuYW1lXSA6IGluaXRpYWxTdHlsZXNbbmFtZV0pOyAvLyBTZXQgYWxsIHZhbHVlcyB0byBhbiBlbXB0eSBzdHJpbmcgdG8gdW5zZXQgdGhlbVxuXG4gICAgICB2YXIgc3R5bGUgPSBzdHlsZVByb3BlcnRpZXMucmVkdWNlKGZ1bmN0aW9uIChzdHlsZSwgcHJvcGVydHkpIHtcbiAgICAgICAgc3R5bGVbcHJvcGVydHldID0gJyc7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH0sIHt9KTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcHBseVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogYXBwbHlTdHlsZXMsXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydjb21wdXRlU3R5bGVzJ11cbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/modifiers/arrow.js": /*!************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/modifiers/arrow.js ***! \************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\");\n/* harmony import */ var _dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom-utils/contains.js */ \"./node_modules/@popperjs/core/lib/dom-utils/contains.js\");\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\");\n/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\");\n/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/within.js */ \"./node_modules/@popperjs/core/lib/utils/within.js\");\n/* harmony import */ var _utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/mergePaddingObject.js */ \"./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js\");\n/* harmony import */ var _utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/expandToHashMap.js */ \"./node_modules/@popperjs/core/lib/utils/expandToHashMap.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\n\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return Object(_utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(typeof padding !== 'number' ? padding : Object(_utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_8__[\"basePlacements\"]));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = Object(_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(state.placement);\n var axis = Object(_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(basePlacement);\n var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_8__[\"left\"], _enums_js__WEBPACK_IMPORTED_MODULE_8__[\"right\"]].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = Object(_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(arrowElement);\n var minProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_8__[\"top\"] : _enums_js__WEBPACK_IMPORTED_MODULE_8__[\"left\"];\n var maxProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_8__[\"bottom\"] : _enums_js__WEBPACK_IMPORTED_MODULE_8__[\"right\"];\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = Object(_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = Object(_utils_within_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (true) {\n if (!Object(_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_9__[\"isHTMLElement\"])(arrowElement)) {\n console.error(['Popper: \"arrow\" element must be an HTMLElement (not an SVGElement).', 'To use an SVG arrow, wrap it in an HTMLElement that will be used as', 'the arrow.'].join(' '));\n }\n }\n\n if (!Object(_dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(state.elements.popper, arrowElement)) {\n if (true) {\n console.error(['Popper: \"arrow\" modifier\\'s `element` must be a child of the popper', 'element.'].join(' '));\n }\n\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcnJvdy5qcz8wOTI5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBNEQ7QUFDRjtBQUNWO0FBQ2M7QUFDYztBQUNwQztBQUN3QjtBQUNOO0FBQ2E7QUFDWjs7QUFFM0Q7QUFDQSxvRUFBb0U7QUFDcEU7QUFDQSxHQUFHO0FBQ0gsU0FBUyw0RUFBa0IseUNBQXlDLHlFQUFlLFVBQVUsd0RBQWM7QUFDM0c7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDBFQUFnQjtBQUN0QyxhQUFhLGtGQUF3QjtBQUNyQyxvQkFBb0IsOENBQUksRUFBRSwrQ0FBSztBQUMvQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsMkVBQWE7QUFDL0IsK0JBQStCLDZDQUFHLEdBQUcsOENBQUk7QUFDekMsK0JBQStCLGdEQUFNLEdBQUcsK0NBQUs7QUFDN0M7QUFDQTtBQUNBLDBCQUEwQiw2RUFBZTtBQUN6QztBQUNBLHNEQUFzRDtBQUN0RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGdFQUFNLG1CQUFtQjs7QUFFeEM7QUFDQSx5REFBeUQ7QUFDekQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxNQUFNLElBQXFDO0FBQzNDLFNBQVMsOEVBQWE7QUFDdEI7QUFDQTtBQUNBOztBQUVBLE9BQU8sc0VBQVE7QUFDZixRQUFRLElBQXFDO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7OztBQUdjO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgY29udGFpbnMgZnJvbSBcIi4uL2RvbS11dGlscy9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgd2l0aGluIGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSBcIi4uL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi4vdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzXCI7XG5pbXBvcnQgeyBsZWZ0LCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHRvcCwgYm90dG9tIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHRvUGFkZGluZ09iamVjdCA9IGZ1bmN0aW9uIHRvUGFkZGluZ09iamVjdChwYWRkaW5nLCBzdGF0ZSkge1xuICBwYWRkaW5nID0gdHlwZW9mIHBhZGRpbmcgPT09ICdmdW5jdGlvbicgPyBwYWRkaW5nKE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogcGFkZGluZztcbiAgcmV0dXJuIG1lcmdlUGFkZGluZ09iamVjdCh0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBwYWRkaW5nIDogZXhwYW5kVG9IYXNoTWFwKHBhZGRpbmcsIGJhc2VQbGFjZW1lbnRzKSk7XG59O1xuXG5mdW5jdGlvbiBhcnJvdyhfcmVmKSB7XG4gIHZhciBfc3RhdGUkbW9kaWZpZXJzRGF0YSQ7XG5cbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zO1xuICB2YXIgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3c7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBpc1ZlcnRpY2FsID0gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDA7XG4gIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gIGlmICghYXJyb3dFbGVtZW50IHx8ICFwb3BwZXJPZmZzZXRzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHBhZGRpbmdPYmplY3QgPSB0b1BhZGRpbmdPYmplY3Qob3B0aW9ucy5wYWRkaW5nLCBzdGF0ZSk7XG4gIHZhciBhcnJvd1JlY3QgPSBnZXRMYXlvdXRSZWN0KGFycm93RWxlbWVudCk7XG4gIHZhciBtaW5Qcm9wID0gYXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgdmFyIG1heFByb3AgPSBheGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgdmFyIGVuZERpZmYgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbbGVuXSArIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXSAtIHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5wb3BwZXJbbGVuXTtcbiAgdmFyIHN0YXJ0RGlmZiA9IHBvcHBlck9mZnNldHNbYXhpc10gLSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc107XG4gIHZhciBhcnJvd09mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChhcnJvd0VsZW1lbnQpO1xuICB2YXIgY2xpZW50U2l6ZSA9IGFycm93T2Zmc2V0UGFyZW50ID8gYXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50SGVpZ2h0IHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRXaWR0aCB8fCAwIDogMDtcbiAgdmFyIGNlbnRlclRvUmVmZXJlbmNlID0gZW5kRGlmZiAvIDIgLSBzdGFydERpZmYgLyAyOyAvLyBNYWtlIHN1cmUgdGhlIGFycm93IGRvZXNuJ3Qgb3ZlcmZsb3cgdGhlIHBvcHBlciBpZiB0aGUgY2VudGVyIHBvaW50IGlzXG4gIC8vIG91dHNpZGUgb2YgdGhlIHBvcHBlciBib3VuZHNcblxuICB2YXIgbWluID0gcGFkZGluZ09iamVjdFttaW5Qcm9wXTtcbiAgdmFyIG1heCA9IGNsaWVudFNpemUgLSBhcnJvd1JlY3RbbGVuXSAtIHBhZGRpbmdPYmplY3RbbWF4UHJvcF07XG4gIHZhciBjZW50ZXIgPSBjbGllbnRTaXplIC8gMiAtIGFycm93UmVjdFtsZW5dIC8gMiArIGNlbnRlclRvUmVmZXJlbmNlO1xuICB2YXIgb2Zmc2V0ID0gd2l0aGluKG1pbiwgY2VudGVyLCBtYXgpOyAvLyBQcmV2ZW50cyBicmVha2luZyBzeW50YXggaGlnaGxpZ2h0aW5nLi4uXG5cbiAgdmFyIGF4aXNQcm9wID0gYXhpcztcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IChfc3RhdGUkbW9kaWZpZXJzRGF0YSQgPSB7fSwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkW2F4aXNQcm9wXSA9IG9mZnNldCwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkLmNlbnRlck9mZnNldCA9IG9mZnNldCAtIGNlbnRlciwgX3N0YXRlJG1vZGlmaWVyc0RhdGEkKTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYyLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRlbGVtZW50ID0gb3B0aW9ucy5lbGVtZW50LFxuICAgICAgYXJyb3dFbGVtZW50ID0gX29wdGlvbnMkZWxlbWVudCA9PT0gdm9pZCAwID8gJ1tkYXRhLXBvcHBlci1hcnJvd10nIDogX29wdGlvbnMkZWxlbWVudDtcblxuICBpZiAoYXJyb3dFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gQ1NTIHNlbGVjdG9yXG5cblxuICBpZiAodHlwZW9mIGFycm93RWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5wb3BwZXIucXVlcnlTZWxlY3RvcihhcnJvd0VsZW1lbnQpO1xuXG4gICAgaWYgKCFhcnJvd0VsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgaWYgKCFpc0hUTUxFbGVtZW50KGFycm93RWxlbWVudCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoWydQb3BwZXI6IFwiYXJyb3dcIiBlbGVtZW50IG11c3QgYmUgYW4gSFRNTEVsZW1lbnQgKG5vdCBhbiBTVkdFbGVtZW50KS4nLCAnVG8gdXNlIGFuIFNWRyBhcnJvdywgd3JhcCBpdCBpbiBhbiBIVE1MRWxlbWVudCB0aGF0IHdpbGwgYmUgdXNlZCBhcycsICd0aGUgYXJyb3cuJ10uam9pbignICcpKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIWNvbnRhaW5zKHN0YXRlLmVsZW1lbnRzLnBvcHBlciwgYXJyb3dFbGVtZW50KSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoWydQb3BwZXI6IFwiYXJyb3dcIiBtb2RpZmllclxcJ3MgYGVsZW1lbnRgIG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgcG9wcGVyJywgJ2VsZW1lbnQuJ10uam9pbignICcpKTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0ZS5lbGVtZW50cy5hcnJvdyA9IGFycm93RWxlbWVudDtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2Fycm93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGFycm93LFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/arrow.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js": /*!********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/modifiers/computeStyles.js ***! \********************************************************************/ /*! exports provided: mapToStyles, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mapToStyles\", function() { return mapToStyles; });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\");\n/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref) {\n var x = _ref.x,\n y = _ref.y;\n var win = window;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: Object(_utils_math_js__WEBPACK_IMPORTED_MODULE_6__[\"round\"])(Object(_utils_math_js__WEBPACK_IMPORTED_MODULE_6__[\"round\"])(x * dpr) / dpr) || 0,\n y: Object(_utils_math_js__WEBPACK_IMPORTED_MODULE_6__[\"round\"])(Object(_utils_math_js__WEBPACK_IMPORTED_MODULE_6__[\"round\"])(y * dpr) / dpr) || 0\n };\n}\n\nfunction mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets;\n\n var _ref3 = roundOffsets === true ? roundOffsetsByDPR(offsets) : typeof roundOffsets === 'function' ? roundOffsets(offsets) : offsets,\n _ref3$x = _ref3.x,\n x = _ref3$x === void 0 ? 0 : _ref3$x,\n _ref3$y = _ref3.y,\n y = _ref3$y === void 0 ? 0 : _ref3$y;\n\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"left\"];\n var sideY = _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"top\"];\n var win = window;\n\n if (adaptive) {\n var offsetParent = Object(_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === Object(_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(popper)) {\n offsetParent = Object(_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(popper);\n\n if (Object(_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(offsetParent).position !== 'static') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"top\"]) {\n sideY = _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"bottom\"]; // $FlowFixMe[prop-missing]\n\n y -= offsetParent[heightProp] - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"left\"]) {\n sideX = _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"right\"]; // $FlowFixMe[prop-missing]\n\n x -= offsetParent[widthProp] - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref4) {\n var state = _ref4.state,\n options = _ref4.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n\n if (true) {\n var transitionProperty = Object(_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(state.elements.popper).transitionProperty || '';\n\n if (adaptive && ['transform', 'top', 'right', 'bottom', 'left'].some(function (property) {\n return transitionProperty.indexOf(property) >= 0;\n })) {\n console.warn(['Popper: Detected CSS transitions on at least one of the following', 'CSS properties: \"transform\", \"top\", \"right\", \"bottom\", \"left\".', '\\n\\n', 'Disable the \"computeStyles\" modifier\\'s `adaptive` option to allow', 'for smooth transitions, or remove these properties from the CSS', 'transition declaration on the popper element if only transitioning', 'opacity or background-color for example.', '\\n\\n', 'We recommend using the popper element as a wrapper around an inner', 'element that can have any CSS property transitioned for animations.'].join(' '));\n }\n }\n\n var commonStyles = {\n placement: Object(_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzPzdjZGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQXVEO0FBQ087QUFDWjtBQUNrQjtBQUNKO0FBQ0o7QUFDbkI7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLDREQUFLLENBQUMsNERBQUs7QUFDbEIsT0FBTyw0REFBSyxDQUFDLDREQUFLO0FBQ2xCO0FBQ0E7O0FBRU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGNBQWMsOENBQUk7QUFDbEIsY0FBYyw2Q0FBRztBQUNqQjs7QUFFQTtBQUNBLHVCQUF1Qiw2RUFBZTtBQUN0QztBQUNBOztBQUVBLHlCQUF5Qix1RUFBUztBQUNsQyxxQkFBcUIsZ0ZBQWtCOztBQUV2QyxVQUFVLDhFQUFnQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQSxzQkFBc0IsNkNBQUc7QUFDekIsY0FBYyxnREFBTSxDQUFDOztBQUVyQjtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCLDhDQUFJO0FBQzFCLGNBQWMsK0NBQUssQ0FBQzs7QUFFcEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQSwyQkFBMkIsb0NBQW9DO0FBQy9EOztBQUVBLHlCQUF5QixxQ0FBcUM7QUFDOUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU0sSUFBcUM7QUFDM0MsNkJBQTZCLDhFQUFnQjs7QUFFN0M7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLDBFQUFnQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBDQUEwQyxtREFBbUQ7QUFDN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSx5Q0FBeUMsa0RBQWtEO0FBQzNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBLDRDQUE0QztBQUM1QztBQUNBLEdBQUc7QUFDSCxDQUFDOzs7QUFHYztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgcm91bmQgfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB1bnNldFNpZGVzID0ge1xuICB0b3A6ICdhdXRvJyxcbiAgcmlnaHQ6ICdhdXRvJyxcbiAgYm90dG9tOiAnYXV0bycsXG4gIGxlZnQ6ICdhdXRvJ1xufTsgLy8gUm91bmQgdGhlIG9mZnNldHMgdG8gdGhlIG5lYXJlc3Qgc3VpdGFibGUgc3VicGl4ZWwgYmFzZWQgb24gdGhlIERQUi5cbi8vIFpvb21pbmcgY2FuIGNoYW5nZSB0aGUgRFBSLCBidXQgaXQgc2VlbXMgdG8gcmVwb3J0IGEgdmFsdWUgdGhhdCB3aWxsXG4vLyBjbGVhbmx5IGRpdmlkZSB0aGUgdmFsdWVzIGludG8gdGhlIGFwcHJvcHJpYXRlIHN1YnBpeGVscy5cblxuZnVuY3Rpb24gcm91bmRPZmZzZXRzQnlEUFIoX3JlZikge1xuICB2YXIgeCA9IF9yZWYueCxcbiAgICAgIHkgPSBfcmVmLnk7XG4gIHZhciB3aW4gPSB3aW5kb3c7XG4gIHZhciBkcHIgPSB3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICByZXR1cm4ge1xuICAgIHg6IHJvdW5kKHJvdW5kKHggKiBkcHIpIC8gZHByKSB8fCAwLFxuICAgIHk6IHJvdW5kKHJvdW5kKHkgKiBkcHIpIC8gZHByKSB8fCAwXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb1N0eWxlcyhfcmVmMikge1xuICB2YXIgX09iamVjdCRhc3NpZ24yO1xuXG4gIHZhciBwb3BwZXIgPSBfcmVmMi5wb3BwZXIsXG4gICAgICBwb3BwZXJSZWN0ID0gX3JlZjIucG9wcGVyUmVjdCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYyLnBsYWNlbWVudCxcbiAgICAgIG9mZnNldHMgPSBfcmVmMi5vZmZzZXRzLFxuICAgICAgcG9zaXRpb24gPSBfcmVmMi5wb3NpdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9yZWYyLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGFkYXB0aXZlID0gX3JlZjIuYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHMgPSBfcmVmMi5yb3VuZE9mZnNldHM7XG5cbiAgdmFyIF9yZWYzID0gcm91bmRPZmZzZXRzID09PSB0cnVlID8gcm91bmRPZmZzZXRzQnlEUFIob2Zmc2V0cykgOiB0eXBlb2Ygcm91bmRPZmZzZXRzID09PSAnZnVuY3Rpb24nID8gcm91bmRPZmZzZXRzKG9mZnNldHMpIDogb2Zmc2V0cyxcbiAgICAgIF9yZWYzJHggPSBfcmVmMy54LFxuICAgICAgeCA9IF9yZWYzJHggPT09IHZvaWQgMCA/IDAgOiBfcmVmMyR4LFxuICAgICAgX3JlZjMkeSA9IF9yZWYzLnksXG4gICAgICB5ID0gX3JlZjMkeSA9PT0gdm9pZCAwID8gMCA6IF9yZWYzJHk7XG5cbiAgdmFyIGhhc1ggPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd4Jyk7XG4gIHZhciBoYXNZID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneScpO1xuICB2YXIgc2lkZVggPSBsZWZ0O1xuICB2YXIgc2lkZVkgPSB0b3A7XG4gIHZhciB3aW4gPSB3aW5kb3c7XG5cbiAgaWYgKGFkYXB0aXZlKSB7XG4gICAgdmFyIG9mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChwb3BwZXIpO1xuICAgIHZhciBoZWlnaHRQcm9wID0gJ2NsaWVudEhlaWdodCc7XG4gICAgdmFyIHdpZHRoUHJvcCA9ICdjbGllbnRXaWR0aCc7XG5cbiAgICBpZiAob2Zmc2V0UGFyZW50ID09PSBnZXRXaW5kb3cocG9wcGVyKSkge1xuICAgICAgb2Zmc2V0UGFyZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KHBvcHBlcik7XG5cbiAgICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gIT09ICdzdGF0aWMnKSB7XG4gICAgICAgIGhlaWdodFByb3AgPSAnc2Nyb2xsSGVpZ2h0JztcbiAgICAgICAgd2lkdGhQcm9wID0gJ3Njcm9sbFdpZHRoJztcbiAgICAgIH1cbiAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhc3RdOiBmb3JjZSB0eXBlIHJlZmluZW1lbnQsIHdlIGNvbXBhcmUgb2Zmc2V0UGFyZW50IHdpdGggd2luZG93IGFib3ZlLCBidXQgRmxvdyBkb2Vzbid0IGRldGVjdCBpdFxuXG5cbiAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQ7XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSB0b3ApIHtcbiAgICAgIHNpZGVZID0gYm90dG9tOyAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cblxuICAgICAgeSAtPSBvZmZzZXRQYXJlbnRbaGVpZ2h0UHJvcF0gLSBwb3BwZXJSZWN0LmhlaWdodDtcbiAgICAgIHkgKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cblxuICAgIGlmIChwbGFjZW1lbnQgPT09IGxlZnQpIHtcbiAgICAgIHNpZGVYID0gcmlnaHQ7IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuXG4gICAgICB4IC09IG9mZnNldFBhcmVudFt3aWR0aFByb3BdIC0gcG9wcGVyUmVjdC53aWR0aDtcbiAgICAgIHggKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb21tb25TdHlsZXMgPSBPYmplY3QuYXNzaWduKHtcbiAgICBwb3NpdGlvbjogcG9zaXRpb25cbiAgfSwgYWRhcHRpdmUgJiYgdW5zZXRTaWRlcyk7XG5cbiAgaWYgKGdwdUFjY2VsZXJhdGlvbikge1xuICAgIHZhciBfT2JqZWN0JGFzc2lnbjtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbiA9IHt9LCBfT2JqZWN0JGFzc2lnbltzaWRlWV0gPSBoYXNZID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduW3NpZGVYXSA9IGhhc1ggPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ24udHJhbnNmb3JtID0gKHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIDwgMiA/IFwidHJhbnNsYXRlKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgpXCIgOiBcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgsIDApXCIsIF9PYmplY3QkYXNzaWduKSk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24yID0ge30sIF9PYmplY3QkYXNzaWduMltzaWRlWV0gPSBoYXNZID8geSArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjJbc2lkZVhdID0gaGFzWCA/IHggKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yLnRyYW5zZm9ybSA9ICcnLCBfT2JqZWN0JGFzc2lnbjIpKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0eWxlcyhfcmVmNCkge1xuICB2YXIgc3RhdGUgPSBfcmVmNC5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmNC5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID0gb3B0aW9ucy5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRncHVBY2NlbGVyYXQsXG4gICAgICBfb3B0aW9ucyRhZGFwdGl2ZSA9IG9wdGlvbnMuYWRhcHRpdmUsXG4gICAgICBhZGFwdGl2ZSA9IF9vcHRpb25zJGFkYXB0aXZlID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWRhcHRpdmUsXG4gICAgICBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPSBvcHRpb25zLnJvdW5kT2Zmc2V0cyxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJvdW5kT2Zmc2V0cztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgdmFyIHRyYW5zaXRpb25Qcm9wZXJ0eSA9IGdldENvbXB1dGVkU3R5bGUoc3RhdGUuZWxlbWVudHMucG9wcGVyKS50cmFuc2l0aW9uUHJvcGVydHkgfHwgJyc7XG5cbiAgICBpZiAoYWRhcHRpdmUgJiYgWyd0cmFuc2Zvcm0nLCAndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J10uc29tZShmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiB0cmFuc2l0aW9uUHJvcGVydHkuaW5kZXhPZihwcm9wZXJ0eSkgPj0gMDtcbiAgICB9KSkge1xuICAgICAgY29uc29sZS53YXJuKFsnUG9wcGVyOiBEZXRlY3RlZCBDU1MgdHJhbnNpdGlvbnMgb24gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcnLCAnQ1NTIHByb3BlcnRpZXM6IFwidHJhbnNmb3JtXCIsIFwidG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCIuJywgJ1xcblxcbicsICdEaXNhYmxlIHRoZSBcImNvbXB1dGVTdHlsZXNcIiBtb2RpZmllclxcJ3MgYGFkYXB0aXZlYCBvcHRpb24gdG8gYWxsb3cnLCAnZm9yIHNtb290aCB0cmFuc2l0aW9ucywgb3IgcmVtb3ZlIHRoZXNlIHByb3BlcnRpZXMgZnJvbSB0aGUgQ1NTJywgJ3RyYW5zaXRpb24gZGVjbGFyYXRpb24gb24gdGhlIHBvcHBlciBlbGVtZW50IGlmIG9ubHkgdHJhbnNpdGlvbmluZycsICdvcGFjaXR5IG9yIGJhY2tncm91bmQtY29sb3IgZm9yIGV4YW1wbGUuJywgJ1xcblxcbicsICdXZSByZWNvbW1lbmQgdXNpbmcgdGhlIHBvcHBlciBlbGVtZW50IGFzIGEgd3JhcHBlciBhcm91bmQgYW4gaW5uZXInLCAnZWxlbWVudCB0aGF0IGNhbiBoYXZlIGFueSBDU1MgcHJvcGVydHkgdHJhbnNpdGlvbmVkIGZvciBhbmltYXRpb25zLiddLmpvaW4oJyAnKSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IHtcbiAgICBwbGFjZW1lbnQ6IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KSxcbiAgICBwb3BwZXI6IHN0YXRlLmVsZW1lbnRzLnBvcHBlcixcbiAgICBwb3BwZXJSZWN0OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgZ3B1QWNjZWxlcmF0aW9uOiBncHVBY2NlbGVyYXRpb25cbiAgfTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLnBvcHBlciwgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMsXG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGFkYXB0aXZlOiBhZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93ICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMuYXJyb3cgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMuYXJyb3csIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgYWRhcHRpdmU6IGZhbHNlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1wbGFjZW1lbnQnOiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdjb21wdXRlU3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdiZWZvcmVXcml0ZScsXG4gIGZuOiBjb21wdXRlU3R5bGVzLFxuICBkYXRhOiB7fVxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js": /*!*********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/modifiers/eventListeners.js ***! \*********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = Object(_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcz9hZDZlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBa0Q7O0FBRWxEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSx1RUFBUztBQUN4Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR2M7QUFDZjtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgcGFzc2l2ZSA9IHtcbiAgcGFzc2l2ZTogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGluc3RhbmNlID0gX3JlZi5pbnN0YW5jZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRzY3JvbGwgPSBvcHRpb25zLnNjcm9sbCxcbiAgICAgIHNjcm9sbCA9IF9vcHRpb25zJHNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHNjcm9sbCxcbiAgICAgIF9vcHRpb25zJHJlc2l6ZSA9IG9wdGlvbnMucmVzaXplLFxuICAgICAgcmVzaXplID0gX29wdGlvbnMkcmVzaXplID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcmVzaXplO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KHN0YXRlLmVsZW1lbnRzLnBvcHBlcik7XG4gIHZhciBzY3JvbGxQYXJlbnRzID0gW10uY29uY2F0KHN0YXRlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLCBzdGF0ZS5zY3JvbGxQYXJlbnRzLnBvcHBlcik7XG5cbiAgaWYgKHNjcm9sbCkge1xuICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdldmVudExpc3RlbmVycycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogZnVuY3Rpb24gZm4oKSB7fSxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIGRhdGE6IHt9XG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/modifiers/flip.js": /*!***********************************************************!*\ !*** ./node_modules/@popperjs/core/lib/modifiers/flip.js ***! \***********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getOppositePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js\");\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getOppositeVariationPlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js\");\n/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/detectOverflow.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n/* harmony import */ var _utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/computeAutoPlacement.js */ \"./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/getVariation.js */ \"./node_modules/@popperjs/core/lib/utils/getVariation.js\");\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if (Object(_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_5__[\"auto\"]) {\n return [];\n }\n\n var oppositePlacement = Object(_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(placement);\n return [Object(_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(placement), oppositePlacement, Object(_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = Object(_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [Object(_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat(Object(_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_5__[\"auto\"] ? Object(_utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = Object(_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(placement);\n\n var isStartVariation = Object(_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_5__[\"start\"];\n var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_5__[\"top\"], _enums_js__WEBPACK_IMPORTED_MODULE_5__[\"bottom\"]].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = Object(_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_5__[\"right\"] : _enums_js__WEBPACK_IMPORTED_MODULE_5__[\"left\"] : isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_5__[\"bottom\"] : _enums_js__WEBPACK_IMPORTED_MODULE_5__[\"top\"];\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = Object(_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(mainVariationSide);\n }\n\n var altVariationSide = Object(_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzP2VjYjIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFvRTtBQUNSO0FBQzBCO0FBQzlCO0FBQ1k7QUFDQTtBQUNoQjs7QUFFcEQ7QUFDQSxNQUFNLDBFQUFnQixnQkFBZ0IsOENBQUk7QUFDMUM7QUFDQTs7QUFFQSwwQkFBMEIsOEVBQW9CO0FBQzlDLFVBQVUsdUZBQTZCLGdDQUFnQyx1RkFBNkI7QUFDcEc7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDBFQUFnQjtBQUN0QztBQUNBLGlHQUFpRyw4RUFBb0I7QUFDckg7QUFDQSxzQkFBc0IsMEVBQWdCLGdCQUFnQiw4Q0FBSSxHQUFHLDhFQUFvQjtBQUNqRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLHVCQUF1QjtBQUN4Qzs7QUFFQSx5QkFBeUIsMEVBQWdCOztBQUV6QywyQkFBMkIsc0VBQVksZ0JBQWdCLCtDQUFLO0FBQzVELHNCQUFzQiw2Q0FBRyxFQUFFLGdEQUFNO0FBQ2pDO0FBQ0EsbUJBQW1CLHdFQUFjO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsNERBQTRELCtDQUFLLEdBQUcsOENBQUksc0JBQXNCLGdEQUFNLEdBQUcsNkNBQUc7O0FBRTFHO0FBQ0EsMEJBQTBCLDhFQUFvQjtBQUM5Qzs7QUFFQSwyQkFBMkIsOEVBQW9CO0FBQy9DOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxRQUFRO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR2M7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2ZsaXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVBdXRvUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgYm90dG9tLCB0b3AsIHN0YXJ0LCByaWdodCwgbGVmdCwgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGlmIChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuXG5mdW5jdGlvbiBmbGlwKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzID0gb3B0aW9ucy5mYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPSBvcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRmbGlwVmFyaWF0aW8sXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBvcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cztcbiAgdmFyIHByZWZlcnJlZFBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9IGJhc2VQbGFjZW1lbnQgPT09IHByZWZlcnJlZFBsYWNlbWVudDtcbiAgdmFyIGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwVmFyaWF0aW9ucyA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHByZWZlcnJlZFBsYWNlbWVudCkpO1xuICB2YXIgcGxhY2VtZW50cyA9IFtwcmVmZXJyZWRQbGFjZW1lbnRdLmNvbmNhdChmYWxsYmFja1BsYWNlbWVudHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8gPyBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9uczogZmxpcFZhcmlhdGlvbnMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHM6IGFsbG93ZWRBdXRvUGxhY2VtZW50c1xuICAgIH0pIDogcGxhY2VtZW50KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBjaGVja3NNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBtYWtlRmFsbGJhY2tDaGVja3MgPSB0cnVlO1xuICB2YXIgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50c1swXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGxhY2VtZW50ID0gcGxhY2VtZW50c1tpXTtcblxuICAgIHZhciBfYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBpc1N0YXJ0VmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHN0YXJ0O1xuICAgIHZhciBpc1ZlcnRpY2FsID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKF9iYXNlUGxhY2VtZW50KSA+PSAwO1xuICAgIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pO1xuICAgIHZhciBtYWluVmFyaWF0aW9uU2lkZSA9IGlzVmVydGljYWwgPyBpc1N0YXJ0VmFyaWF0aW9uID8gcmlnaHQgOiBsZWZ0IDogaXNTdGFydFZhcmlhdGlvbiA/IGJvdHRvbSA6IHRvcDtcblxuICAgIGlmIChyZWZlcmVuY2VSZWN0W2xlbl0gPiBwb3BwZXJSZWN0W2xlbl0pIHtcbiAgICAgIG1haW5WYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIH1cblxuICAgIHZhciBhbHRWYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIHZhciBjaGVja3MgPSBbXTtcblxuICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1tfYmFzZVBsYWNlbWVudF0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbbWFpblZhcmlhdGlvblNpZGVdIDw9IDAsIG92ZXJmbG93W2FsdFZhcmlhdGlvblNpZGVdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICByZXR1cm4gY2hlY2s7XG4gICAgfSkpIHtcbiAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgIG1ha2VGYWxsYmFja0NoZWNrcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hlY2tzTWFwLnNldChwbGFjZW1lbnQsIGNoZWNrcyk7XG4gIH1cblxuICBpZiAobWFrZUZhbGxiYWNrQ2hlY2tzKSB7XG4gICAgLy8gYDJgIG1heSBiZSBkZXNpcmVkIGluIHNvbWUgY2FzZXMg4oCTIHJlc2VhcmNoIGxhdGVyXG4gICAgdmFyIG51bWJlck9mQ2hlY2tzID0gZmxpcFZhcmlhdGlvbnMgPyAzIDogMTtcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICB2YXIgZml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHMuZmluZChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBjaGVja3MgPSBjaGVja3NNYXAuZ2V0KHBsYWNlbWVudCk7XG5cbiAgICAgICAgaWYgKGNoZWNrcykge1xuICAgICAgICAgIHJldHVybiBjaGVja3Muc2xpY2UoMCwgX2kpLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gZml0dGluZ1BsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgX2kgPSBudW1iZXJPZkNoZWNrczsgX2kgPiAwOyBfaS0tKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKF9pKTtcblxuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLnBsYWNlbWVudCAhPT0gZmlyc3RGaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCA9IHRydWU7XG4gICAgc3RhdGUucGxhY2VtZW50ID0gZmlyc3RGaXR0aW5nUGxhY2VtZW50O1xuICAgIHN0YXRlLnJlc2V0ID0gdHJ1ZTtcbiAgfVxufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmxpcCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBmbGlwLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxuICBkYXRhOiB7XG4gICAgX3NraXA6IGZhbHNlXG4gIH1cbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/flip.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/modifiers/hide.js": /*!***********************************************************!*\ !*** ./node_modules/@popperjs/core/lib/modifiers/hide.js ***! \***********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/detectOverflow.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n\n\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [_enums_js__WEBPACK_IMPORTED_MODULE_0__[\"top\"], _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"right\"], _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"bottom\"], _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"left\"]].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = Object(_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = Object(_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9oaWRlLmpzPzFkNmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQXVEO0FBQ0M7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVSw2Q0FBRyxFQUFFLCtDQUFLLEVBQUUsZ0RBQU0sRUFBRSw4Q0FBSTtBQUNsQztBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsd0VBQWM7QUFDeEM7QUFDQSxHQUFHO0FBQ0gsMEJBQTBCLHdFQUFjO0FBQ3hDO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQzs7O0FBR2M7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2hpZGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcblxuZnVuY3Rpb24gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3QsIHByZXZlbnRlZE9mZnNldHMpIHtcbiAgaWYgKHByZXZlbnRlZE9mZnNldHMgPT09IHZvaWQgMCkge1xuICAgIHByZXZlbnRlZE9mZnNldHMgPSB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQgLSBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCArIHByZXZlbnRlZE9mZnNldHMueCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0ICsgcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoIC0gcHJldmVudGVkT2Zmc2V0cy54XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gW3RvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdF0uc29tZShmdW5jdGlvbiAoc2lkZSkge1xuICAgIHJldHVybiBvdmVyZmxvd1tzaWRlXSA+PSAwO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGlkZShfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBwcmV2ZW50ZWRPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wcmV2ZW50T3ZlcmZsb3c7XG4gIHZhciByZWZlcmVuY2VPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gIH0pO1xuICB2YXIgcG9wcGVyQWx0T3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGFsdEJvdW5kYXJ5OiB0cnVlXG4gIH0pO1xuICB2YXIgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocmVmZXJlbmNlT3ZlcmZsb3csIHJlZmVyZW5jZVJlY3QpO1xuICB2YXIgcG9wcGVyRXNjYXBlT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHBvcHBlckFsdE92ZXJmbG93LCBwb3BwZXJSZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKTtcbiAgdmFyIGlzUmVmZXJlbmNlSGlkZGVuID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyk7XG4gIHZhciBoYXNQb3BwZXJFc2NhcGVkID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHBvcHBlckVzY2FwZU9mZnNldHMpO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0ge1xuICAgIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0czogcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzLFxuICAgIHBvcHBlckVzY2FwZU9mZnNldHM6IHBvcHBlckVzY2FwZU9mZnNldHMsXG4gICAgaXNSZWZlcmVuY2VIaWRkZW46IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgIGhhc1BvcHBlckVzY2FwZWQ6IGhhc1BvcHBlckVzY2FwZWRcbiAgfTtcbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1yZWZlcmVuY2UtaGlkZGVuJzogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgJ2RhdGEtcG9wcGVyLWVzY2FwZWQnOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnaGlkZScsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J10sXG4gIGZuOiBoaWRlXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/hide.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/modifiers/index.js": /*!************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/modifiers/index.js ***! \************************************************************/ /*! exports provided: applyStyles, arrow, computeStyles, eventListeners, flip, hide, offset, popperOffsets, preventOverflow */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./applyStyles.js */ \"./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"applyStyles\", function() { return _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _arrow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./arrow.js */ \"./node_modules/@popperjs/core/lib/modifiers/arrow.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"arrow\", function() { return _arrow_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./computeStyles.js */ \"./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"computeStyles\", function() { return _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./eventListeners.js */ \"./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"eventListeners\", function() { return _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _flip_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./flip.js */ \"./node_modules/@popperjs/core/lib/modifiers/flip.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"flip\", function() { return _flip_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _hide_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hide.js */ \"./node_modules/@popperjs/core/lib/modifiers/hide.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"hide\", function() { return _hide_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _offset_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./offset.js */ \"./node_modules/@popperjs/core/lib/modifiers/offset.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"offset\", function() { return _offset_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./popperOffsets.js */ \"./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"popperOffsets\", function() { return _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./preventOverflow.js */ \"./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"preventOverflow\", function() { return _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9pbmRleC5qcz8xZTc2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQTBEO0FBQ1o7QUFDZ0I7QUFDRTtBQUNwQjtBQUNBO0FBQ0k7QUFDYyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZGVmYXVsdCBhcyBhcHBseVN0eWxlcyB9IGZyb20gXCIuL2FwcGx5U3R5bGVzLmpzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFycm93IH0gZnJvbSBcIi4vYXJyb3cuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgY29tcHV0ZVN0eWxlcyB9IGZyb20gXCIuL2NvbXB1dGVTdHlsZXMuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgZXZlbnRMaXN0ZW5lcnMgfSBmcm9tIFwiLi9ldmVudExpc3RlbmVycy5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBmbGlwIH0gZnJvbSBcIi4vZmxpcC5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBoaWRlIH0gZnJvbSBcIi4vaGlkZS5qc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBvZmZzZXQgfSBmcm9tIFwiLi9vZmZzZXQuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcG9wcGVyT2Zmc2V0cyB9IGZyb20gXCIuL3BvcHBlck9mZnNldHMuanNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcHJldmVudE92ZXJmbG93IH0gZnJvbSBcIi4vcHJldmVudE92ZXJmbG93LmpzXCI7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/index.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/modifiers/offset.js": /*!*************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/modifiers/offset.js ***! \*************************************************************/ /*! exports provided: distanceAndSkiddingToXY, default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"distanceAndSkiddingToXY\", function() { return distanceAndSkiddingToXY; });\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n\n\nfunction distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = Object(_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(placement);\n var invertDistance = [_enums_js__WEBPACK_IMPORTED_MODULE_1__[\"left\"], _enums_js__WEBPACK_IMPORTED_MODULE_1__[\"top\"]].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [_enums_js__WEBPACK_IMPORTED_MODULE_1__[\"left\"], _enums_js__WEBPACK_IMPORTED_MODULE_1__[\"right\"]].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = _enums_js__WEBPACK_IMPORTED_MODULE_1__[\"placements\"].reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanM/OTgzNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUE0RDtBQUNEO0FBQ3BEO0FBQ1Asc0JBQXNCLDBFQUFnQjtBQUN0Qyx3QkFBd0IsOENBQUksRUFBRSw2Q0FBRzs7QUFFakMsbUVBQW1FO0FBQ25FO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsOENBQUksRUFBRSwrQ0FBSztBQUNyQjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsb0RBQVU7QUFDdkI7QUFDQTtBQUNBLEdBQUcsSUFBSTtBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7OztBQUdjO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgcGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgcmVjdHMsIG9mZnNldCkge1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgdmFyIGludmVydERpc3RhbmNlID0gW2xlZnQsIHRvcF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8gLTEgOiAxO1xuXG4gIHZhciBfcmVmID0gdHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IG9mZnNldChPYmplY3QuYXNzaWduKHt9LCByZWN0cywge1xuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pKSA6IG9mZnNldCxcbiAgICAgIHNraWRkaW5nID0gX3JlZlswXSxcbiAgICAgIGRpc3RhbmNlID0gX3JlZlsxXTtcblxuICBza2lkZGluZyA9IHNraWRkaW5nIHx8IDA7XG4gIGRpc3RhbmNlID0gKGRpc3RhbmNlIHx8IDApICogaW52ZXJ0RGlzdGFuY2U7XG4gIHJldHVybiBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IHtcbiAgICB4OiBkaXN0YW5jZSxcbiAgICB5OiBza2lkZGluZ1xuICB9IDoge1xuICAgIHg6IHNraWRkaW5nLFxuICAgIHk6IGRpc3RhbmNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9mZnNldChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYyLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRvZmZzZXQgPSBvcHRpb25zLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9vcHRpb25zJG9mZnNldCA9PT0gdm9pZCAwID8gWzAsIDBdIDogX29wdGlvbnMkb2Zmc2V0O1xuICB2YXIgZGF0YSA9IHBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCBzdGF0ZS5yZWN0cywgb2Zmc2V0KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHZhciBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQgPSBkYXRhW3N0YXRlLnBsYWNlbWVudF0sXG4gICAgICB4ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50LngsXG4gICAgICB5ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50Lnk7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnggKz0geDtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSArPSB5O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdvZmZzZXQnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIGZuOiBvZmZzZXRcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/offset.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js": /*!********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js ***! \********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/computeOffsets.js */ \"./node_modules/@popperjs/core/lib/utils/computeOffsets.js\");\n\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = Object(_utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzPzEzNGEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUF3RDs7QUFFeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsd0VBQWM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsQ0FBQzs7O0FBR2M7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY29tcHV0ZU9mZnNldHMgZnJvbSBcIi4uL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzXCI7XG5cbmZ1bmN0aW9uIHBvcHBlck9mZnNldHMoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgLy8gT2Zmc2V0cyBhcmUgdGhlIGFjdHVhbCBwb3NpdGlvbiB0aGUgcG9wcGVyIG5lZWRzIHRvIGhhdmUgdG8gYmVcbiAgLy8gcHJvcGVybHkgcG9zaXRpb25lZCBuZWFyIGl0cyByZWZlcmVuY2UgZWxlbWVudFxuICAvLyBUaGlzIGlzIHRoZSBtb3N0IGJhc2ljIHBsYWNlbWVudCwgYW5kIHdpbGwgYmUgYWRqdXN0ZWQgYnlcbiAgLy8gdGhlIG1vZGlmaWVycyBpbiB0aGUgbmV4dCBzdGVwXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiBzdGF0ZS5yZWN0cy5yZWZlcmVuY2UsXG4gICAgZWxlbWVudDogc3RhdGUucmVjdHMucG9wcGVyLFxuICAgIHN0cmF0ZWd5OiAnYWJzb2x1dGUnLFxuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncG9wcGVyT2Zmc2V0cycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAncmVhZCcsXG4gIGZuOiBwb3BwZXJPZmZzZXRzLFxuICBkYXRhOiB7fVxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js": /*!**********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js ***! \**********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\");\n/* harmony import */ var _utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getAltAxis.js */ \"./node_modules/@popperjs/core/lib/utils/getAltAxis.js\");\n/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/within.js */ \"./node_modules/@popperjs/core/lib/utils/within.js\");\n/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\");\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\");\n/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/detectOverflow.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/getVariation.js */ \"./node_modules/@popperjs/core/lib/utils/getVariation.js\");\n/* harmony import */ var _utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/getFreshSideObject.js */ \"./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\n\n\n\n\n\n\n\n\n\n\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = Object(_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = Object(_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(state.placement);\n var variation = Object(_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = Object(_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(basePlacement);\n var altAxis = Object(_utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis || checkAltAxis) {\n var mainSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"top\"] : _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"left\"];\n var altSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"bottom\"] : _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"right\"];\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = popperOffsets[mainAxis] + overflow[mainSide];\n var max = popperOffsets[mainAxis] - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"start\"] ? referenceRect[len] : popperRect[len];\n var maxLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"start\"] ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? Object(_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : Object(_utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"])();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = Object(_utils_within_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - tetherOffsetValue : minLen - arrowLen - arrowPaddingMin - tetherOffsetValue;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + tetherOffsetValue : maxLen + arrowLen + arrowPaddingMax + tetherOffsetValue;\n var arrowOffsetParent = state.elements.arrow && Object(_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = state.modifiersData.offset ? state.modifiersData.offset[state.placement][mainAxis] : 0;\n var tetherMin = popperOffsets[mainAxis] + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = popperOffsets[mainAxis] + maxOffset - offsetModifierValue;\n\n if (checkMainAxis) {\n var preventedOffset = Object(_utils_within_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(tether ? Object(_utils_math_js__WEBPACK_IMPORTED_MODULE_10__[\"min\"])(min, tetherMin) : min, offset, tether ? Object(_utils_math_js__WEBPACK_IMPORTED_MODULE_10__[\"max\"])(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _mainSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"top\"] : _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"left\"];\n\n var _altSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"bottom\"] : _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"right\"];\n\n var _offset = popperOffsets[altAxis];\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var _preventedOffset = Object(_utils_within_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(tether ? Object(_utils_math_js__WEBPACK_IMPORTED_MODULE_10__[\"min\"])(_min, tetherMin) : _min, _offset, tether ? Object(_utils_math_js__WEBPACK_IMPORTED_MODULE_10__[\"max\"])(_max, tetherMax) : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanM/OTQzNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBOEQ7QUFDRjtBQUNnQjtBQUM1QjtBQUNSO0FBQ2tCO0FBQ0k7QUFDTjtBQUNKO0FBQ1k7QUFDRTs7QUFFbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsd0VBQWM7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsc0JBQXNCLDBFQUFnQjtBQUN0QyxrQkFBa0Isc0VBQVk7QUFDOUI7QUFDQSxpQkFBaUIsa0ZBQXdCO0FBQ3pDLGdCQUFnQixvRUFBVTtBQUMxQjtBQUNBO0FBQ0E7QUFDQSw0RkFBNEY7QUFDNUY7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0NBQXNDLDZDQUFHLEdBQUcsOENBQUk7QUFDaEQscUNBQXFDLGdEQUFNLEdBQUcsK0NBQUs7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQiwrQ0FBSztBQUNwQywrQkFBK0IsK0NBQUssMENBQTBDO0FBQzlFOztBQUVBO0FBQ0EsNkNBQTZDLDJFQUFhO0FBQzFEO0FBQ0E7QUFDQTtBQUNBLHlIQUF5SCw0RUFBa0I7QUFDM0k7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLGdFQUFNO0FBQ3pCO0FBQ0E7QUFDQSxvREFBb0QsNkVBQWU7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEIsZ0VBQU0sVUFBVSwyREFBTyx5Q0FBeUMsMkRBQU87QUFDbkc7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUNBQXlDLDZDQUFHLEdBQUcsOENBQUk7O0FBRW5ELHdDQUF3QyxnREFBTSxHQUFHLCtDQUFLOztBQUV0RDs7QUFFQTs7QUFFQTs7QUFFQSw2QkFBNkIsZ0VBQU0sVUFBVSwyREFBTyw0Q0FBNEMsMkRBQU87O0FBRXZHO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7O0FBR2M7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3ByZXZlbnRPdmVyZmxvdy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgc3RhcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRBbHRBeGlzIGZyb20gXCIuLi91dGlscy9nZXRBbHRBeGlzLmpzXCI7XG5pbXBvcnQgd2l0aGluIGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuLi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmltcG9ydCB7IG1heCBhcyBtYXRoTWF4LCBtaW4gYXMgbWF0aE1pbiB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIHByZXZlbnRPdmVyZmxvdyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0QXhpcyxcbiAgICAgIGJvdW5kYXJ5ID0gb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IG9wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBvcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyxcbiAgICAgIF9vcHRpb25zJHRldGhlciA9IG9wdGlvbnMudGV0aGVyLFxuICAgICAgdGV0aGVyID0gX29wdGlvbnMkdGV0aGVyID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkdGV0aGVyLFxuICAgICAgX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID0gb3B0aW9ucy50ZXRoZXJPZmZzZXQsXG4gICAgICB0ZXRoZXJPZmZzZXQgPSBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQ7XG4gIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5XG4gIH0pO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gIXZhcmlhdGlvbjtcbiAgdmFyIG1haW5BeGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICB2YXIgYWx0QXhpcyA9IGdldEFsdEF4aXMobWFpbkF4aXMpO1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgdGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gdGV0aGVyT2Zmc2V0KE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogdGV0aGVyT2Zmc2V0O1xuICB2YXIgZGF0YSA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY2hlY2tNYWluQXhpcyB8fCBjaGVja0FsdEF4aXMpIHtcbiAgICB2YXIgbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgICB2YXIgYWx0U2lkZSA9IG1haW5BeGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICB2YXIgb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc107XG4gICAgdmFyIG1pbiA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdICsgb3ZlcmZsb3dbbWFpblNpZGVdO1xuICAgIHZhciBtYXggPSBwb3BwZXJPZmZzZXRzW21haW5BeGlzXSAtIG92ZXJmbG93W2FsdFNpZGVdO1xuICAgIHZhciBhZGRpdGl2ZSA9IHRldGhlciA/IC1wb3BwZXJSZWN0W2xlbl0gLyAyIDogMDtcbiAgICB2YXIgbWluTGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IHJlZmVyZW5jZVJlY3RbbGVuXSA6IHBvcHBlclJlY3RbbGVuXTtcbiAgICB2YXIgbWF4TGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IC1wb3BwZXJSZWN0W2xlbl0gOiAtcmVmZXJlbmNlUmVjdFtsZW5dOyAvLyBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGFycm93IGluIHRoZSBjYWxjdWxhdGlvbiBzbyB0aGUgYXJyb3cgZG9lc24ndCBnb1xuICAgIC8vIG91dHNpZGUgdGhlIHJlZmVyZW5jZSBib3VuZHNcblxuICAgIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgICB2YXIgYXJyb3dSZWN0ID0gdGV0aGVyICYmIGFycm93RWxlbWVudCA/IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nT2JqZWN0ID0gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddID8gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddLnBhZGRpbmcgOiBnZXRGcmVzaFNpZGVPYmplY3QoKTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWluID0gYXJyb3dQYWRkaW5nT2JqZWN0W21haW5TaWRlXTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWF4ID0gYXJyb3dQYWRkaW5nT2JqZWN0W2FsdFNpZGVdOyAvLyBJZiB0aGUgcmVmZXJlbmNlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIGFycm93IGxlbmd0aCwgd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGluY2x1ZGUgaXRzIGZ1bGwgc2l6ZSBpbiB0aGUgY2FsY3VsYXRpb24uIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGxcbiAgICAvLyBhbmQgbmVhciB0aGUgZWRnZSBvZiBhIGJvdW5kYXJ5LCB0aGUgcG9wcGVyIGNhbiBvdmVyZmxvdyBldmVuIGlmIHRoZVxuICAgIC8vIHJlZmVyZW5jZSBpcyBub3Qgb3ZlcmZsb3dpbmcgYXMgd2VsbCAoZS5nLiB2aXJ0dWFsIGVsZW1lbnRzIHdpdGggbm9cbiAgICAvLyB3aWR0aCBvciBoZWlnaHQpXG5cbiAgICB2YXIgYXJyb3dMZW4gPSB3aXRoaW4oMCwgcmVmZXJlbmNlUmVjdFtsZW5dLCBhcnJvd1JlY3RbbGVuXSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IHJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgLSBhZGRpdGl2ZSAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gdGV0aGVyT2Zmc2V0VmFsdWUgOiBtaW5MZW4gLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIHRldGhlck9mZnNldFZhbHVlO1xuICAgIHZhciBtYXhPZmZzZXQgPSBpc0Jhc2VQbGFjZW1lbnQgPyAtcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiArIGFkZGl0aXZlICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyB0ZXRoZXJPZmZzZXRWYWx1ZSA6IG1heExlbiArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgdGV0aGVyT2Zmc2V0VmFsdWU7XG4gICAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3cgJiYgZ2V0T2Zmc2V0UGFyZW50KHN0YXRlLmVsZW1lbnRzLmFycm93KTtcbiAgICB2YXIgY2xpZW50T2Zmc2V0ID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBtYWluQXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50VG9wIHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRMZWZ0IHx8IDAgOiAwO1xuICAgIHZhciBvZmZzZXRNb2RpZmllclZhbHVlID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQgPyBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtzdGF0ZS5wbGFjZW1lbnRdW21haW5BeGlzXSA6IDA7XG4gICAgdmFyIHRldGhlck1pbiA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdICsgbWluT2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIGNsaWVudE9mZnNldDtcbiAgICB2YXIgdGV0aGVyTWF4ID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gKyBtYXhPZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlO1xuXG4gICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgIHZhciBwcmV2ZW50ZWRPZmZzZXQgPSB3aXRoaW4odGV0aGVyID8gbWF0aE1pbihtaW4sIHRldGhlck1pbikgOiBtaW4sIG9mZnNldCwgdGV0aGVyID8gbWF0aE1heChtYXgsIHRldGhlck1heCkgOiBtYXgpO1xuICAgICAgcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQ7XG4gICAgICBkYXRhW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldCAtIG9mZnNldDtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgICB2YXIgX21haW5TaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IHRvcCA6IGxlZnQ7XG5cbiAgICAgIHZhciBfYWx0U2lkZSA9IG1haW5BeGlzID09PSAneCcgPyBib3R0b20gOiByaWdodDtcblxuICAgICAgdmFyIF9vZmZzZXQgPSBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdO1xuXG4gICAgICB2YXIgX21pbiA9IF9vZmZzZXQgKyBvdmVyZmxvd1tfbWFpblNpZGVdO1xuXG4gICAgICB2YXIgX21heCA9IF9vZmZzZXQgLSBvdmVyZmxvd1tfYWx0U2lkZV07XG5cbiAgICAgIHZhciBfcHJldmVudGVkT2Zmc2V0ID0gd2l0aGluKHRldGhlciA/IG1hdGhNaW4oX21pbiwgdGV0aGVyTWluKSA6IF9taW4sIF9vZmZzZXQsIHRldGhlciA/IG1hdGhNYXgoX21heCwgdGV0aGVyTWF4KSA6IF9tYXgpO1xuXG4gICAgICBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdID0gX3ByZXZlbnRlZE9mZnNldDtcbiAgICAgIGRhdGFbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0IC0gX29mZnNldDtcbiAgICB9XG4gIH1cblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gZGF0YTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3ByZXZlbnRPdmVyZmxvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBwcmV2ZW50T3ZlcmZsb3csXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J11cbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/popper-lite.js": /*!********************************************************!*\ !*** ./node_modules/@popperjs/core/lib/popper-lite.js ***! \********************************************************/ /*! exports provided: createPopper, popperGenerator, defaultModifiers, detectOverflow */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createPopper\", function() { return createPopper; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultModifiers\", function() { return defaultModifiers; });\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createPopper.js */ \"./node_modules/@popperjs/core/lib/createPopper.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"popperGenerator\", function() { return _createPopper_js__WEBPACK_IMPORTED_MODULE_0__[\"popperGenerator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"detectOverflow\", function() { return _createPopper_js__WEBPACK_IMPORTED_MODULE_0__[\"detectOverflow\"]; });\n\n/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ \"./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\");\n/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ \"./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\");\n/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ \"./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\");\n/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ \"./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\");\n\n\n\n\n\nvar defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]];\nvar createPopper = /*#__PURE__*/Object(_createPopper_js__WEBPACK_IMPORTED_MODULE_0__[\"popperGenerator\"])({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3BvcHBlci1saXRlLmpzPzQ1ZDEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQW9FO0FBQ1Q7QUFDRjtBQUNBO0FBQ0o7QUFDckQsd0JBQXdCLG9FQUFjLEVBQUUsbUVBQWEsRUFBRSxtRUFBYSxFQUFFLGlFQUFXO0FBQ2pGLGdDQUFnQyx3RUFBZTtBQUMvQztBQUNBLENBQUMsRUFBRSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLWxpdGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwb3BwZXJHZW5lcmF0b3IsIGRldGVjdE92ZXJmbG93IH0gZnJvbSBcIi4vY3JlYXRlUG9wcGVyLmpzXCI7XG5pbXBvcnQgZXZlbnRMaXN0ZW5lcnMgZnJvbSBcIi4vbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzXCI7XG5pbXBvcnQgcG9wcGVyT2Zmc2V0cyBmcm9tIFwiLi9tb2RpZmllcnMvcG9wcGVyT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanNcIjtcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanNcIjtcbnZhciBkZWZhdWx0TW9kaWZpZXJzID0gW2V2ZW50TGlzdGVuZXJzLCBwb3BwZXJPZmZzZXRzLCBjb21wdXRlU3R5bGVzLCBhcHBseVN0eWxlc107XG52YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcih7XG4gIGRlZmF1bHRNb2RpZmllcnM6IGRlZmF1bHRNb2RpZmllcnNcbn0pOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciwgcG9wcGVyR2VuZXJhdG9yLCBkZWZhdWx0TW9kaWZpZXJzLCBkZXRlY3RPdmVyZmxvdyB9OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/popper-lite.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/popper.js": /*!***************************************************!*\ !*** ./node_modules/@popperjs/core/lib/popper.js ***! \***************************************************/ /*! exports provided: createPopper, popperGenerator, defaultModifiers, detectOverflow, createPopperLite, applyStyles, arrow, computeStyles, eventListeners, flip, hide, offset, popperOffsets, preventOverflow */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createPopper\", function() { return createPopper; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"defaultModifiers\", function() { return defaultModifiers; });\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createPopper.js */ \"./node_modules/@popperjs/core/lib/createPopper.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"popperGenerator\", function() { return _createPopper_js__WEBPACK_IMPORTED_MODULE_0__[\"popperGenerator\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"detectOverflow\", function() { return _createPopper_js__WEBPACK_IMPORTED_MODULE_0__[\"detectOverflow\"]; });\n\n/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ \"./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\");\n/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ \"./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\");\n/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ \"./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\");\n/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ \"./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\");\n/* harmony import */ var _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modifiers/offset.js */ \"./node_modules/@popperjs/core/lib/modifiers/offset.js\");\n/* harmony import */ var _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modifiers/flip.js */ \"./node_modules/@popperjs/core/lib/modifiers/flip.js\");\n/* harmony import */ var _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modifiers/preventOverflow.js */ \"./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js\");\n/* harmony import */ var _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modifiers/arrow.js */ \"./node_modules/@popperjs/core/lib/modifiers/arrow.js\");\n/* harmony import */ var _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./modifiers/hide.js */ \"./node_modules/@popperjs/core/lib/modifiers/hide.js\");\n/* harmony import */ var _popper_lite_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./popper-lite.js */ \"./node_modules/@popperjs/core/lib/popper-lite.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"createPopperLite\", function() { return _popper_lite_js__WEBPACK_IMPORTED_MODULE_10__[\"createPopper\"]; });\n\n/* harmony import */ var _modifiers_index_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./modifiers/index.js */ \"./node_modules/@popperjs/core/lib/modifiers/index.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"applyStyles\", function() { return _modifiers_index_js__WEBPACK_IMPORTED_MODULE_11__[\"applyStyles\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"arrow\", function() { return _modifiers_index_js__WEBPACK_IMPORTED_MODULE_11__[\"arrow\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"computeStyles\", function() { return _modifiers_index_js__WEBPACK_IMPORTED_MODULE_11__[\"computeStyles\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"eventListeners\", function() { return _modifiers_index_js__WEBPACK_IMPORTED_MODULE_11__[\"eventListeners\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"flip\", function() { return _modifiers_index_js__WEBPACK_IMPORTED_MODULE_11__[\"flip\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"hide\", function() { return _modifiers_index_js__WEBPACK_IMPORTED_MODULE_11__[\"hide\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"offset\", function() { return _modifiers_index_js__WEBPACK_IMPORTED_MODULE_11__[\"offset\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"popperOffsets\", function() { return _modifiers_index_js__WEBPACK_IMPORTED_MODULE_11__[\"popperOffsets\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"preventOverflow\", function() { return _modifiers_index_js__WEBPACK_IMPORTED_MODULE_11__[\"preventOverflow\"]; });\n\n\n\n\n\n\n\n\n\n\n\nvar defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"], _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"], _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"], _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"], _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"], _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"]];\nvar createPopper = /*#__PURE__*/Object(_createPopper_js__WEBPACK_IMPORTED_MODULE_0__[\"popperGenerator\"])({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3BvcHBlci5qcz8zOWMzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFvRTtBQUNUO0FBQ0Y7QUFDQTtBQUNKO0FBQ1Y7QUFDSjtBQUNzQjtBQUNwQjtBQUNGO0FBQ3ZDLHdCQUF3QixvRUFBYyxFQUFFLG1FQUFhLEVBQUUsbUVBQWEsRUFBRSxpRUFBVyxFQUFFLDREQUFNLEVBQUUsMERBQUksRUFBRSxxRUFBZSxFQUFFLDJEQUFLLEVBQUUsMERBQUk7QUFDN0gsZ0NBQWdDLHdFQUFlO0FBQy9DO0FBQ0EsQ0FBQyxFQUFFOztBQUV3RTs7QUFFUCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdyB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiO1xuaW1wb3J0IGV2ZW50TGlzdGVuZXJzIGZyb20gXCIuL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qc1wiO1xuaW1wb3J0IHBvcHBlck9mZnNldHMgZnJvbSBcIi4vbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanNcIjtcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzXCI7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzXCI7XG5pbXBvcnQgb2Zmc2V0IGZyb20gXCIuL21vZGlmaWVycy9vZmZzZXQuanNcIjtcbmltcG9ydCBmbGlwIGZyb20gXCIuL21vZGlmaWVycy9mbGlwLmpzXCI7XG5pbXBvcnQgcHJldmVudE92ZXJmbG93IGZyb20gXCIuL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBhcnJvdyBmcm9tIFwiLi9tb2RpZmllcnMvYXJyb3cuanNcIjtcbmltcG9ydCBoaWRlIGZyb20gXCIuL21vZGlmaWVycy9oaWRlLmpzXCI7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IFtldmVudExpc3RlbmVycywgcG9wcGVyT2Zmc2V0cywgY29tcHV0ZVN0eWxlcywgYXBwbHlTdHlsZXMsIG9mZnNldCwgZmxpcCwgcHJldmVudE92ZXJmbG93LCBhcnJvdywgaGlkZV07XG52YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcih7XG4gIGRlZmF1bHRNb2RpZmllcnM6IGRlZmF1bHRNb2RpZmllcnNcbn0pOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciwgcG9wcGVyR2VuZXJhdG9yLCBkZWZhdWx0TW9kaWZpZXJzLCBkZXRlY3RPdmVyZmxvdyB9OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJMaXRlIH0gZnJvbSBcIi4vcG9wcGVyLWxpdGUuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgKiBmcm9tIFwiLi9tb2RpZmllcnMvaW5kZXguanNcIjsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/popper.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js": /*!***********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js ***! \***********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return computeAutoPlacement; });\n/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getVariation.js */ \"./node_modules/@popperjs/core/lib/utils/getVariation.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./detectOverflow.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n\n\n\n\nfunction computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_1__[\"placements\"] : _options$allowedAutoP;\n var variation = Object(_getVariation_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(placement);\n var placements = variation ? flipVariations ? _enums_js__WEBPACK_IMPORTED_MODULE_1__[\"variationPlacements\"] : _enums_js__WEBPACK_IMPORTED_MODULE_1__[\"variationPlacements\"].filter(function (placement) {\n return Object(_getVariation_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(placement) === variation;\n }) : _enums_js__WEBPACK_IMPORTED_MODULE_1__[\"basePlacements\"];\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n\n if (true) {\n console.error(['Popper: The `allowedAutoPlacements` option did not allow any', 'placements. Ensure the `placement` option matches the variation', 'of the allowed placements.', 'For example, \"auto\" cannot be used to allow \"bottom-start\".', 'Use \"auto-start\" instead.'].join(' '));\n }\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = Object(_detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[Object(_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzPzQzY2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQTZDO0FBQ2tEO0FBQzlDO0FBQ0k7QUFDdEM7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBaUUsb0RBQWE7QUFDOUUsa0JBQWtCLGdFQUFZO0FBQzlCLGdEQUFnRCw2REFBbUIsR0FBRyw2REFBbUI7QUFDekYsV0FBVyxnRUFBWTtBQUN2QixHQUFHLElBQUksd0RBQWM7QUFDckI7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTs7QUFFQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBLHFCQUFxQixrRUFBYztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssRUFBRSxvRUFBZ0I7QUFDdkI7QUFDQSxHQUFHLElBQUk7QUFDUDtBQUNBO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyB2YXJpYXRpb25QbGFjZW1lbnRzLCBiYXNlUGxhY2VtZW50cywgcGxhY2VtZW50cyBhcyBhbGxQbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyxcbiAgICAgIF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9IF9vcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9PT0gdm9pZCAwID8gYWxsUGxhY2VtZW50cyA6IF9vcHRpb25zJGFsbG93ZWRBdXRvUDtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpO1xuICB2YXIgcGxhY2VtZW50cyA9IHZhcmlhdGlvbiA/IGZsaXBWYXJpYXRpb25zID8gdmFyaWF0aW9uUGxhY2VtZW50cyA6IHZhcmlhdGlvblBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHZhcmlhdGlvbjtcbiAgfSkgOiBiYXNlUGxhY2VtZW50cztcbiAgdmFyIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhbGxvd2VkQXV0b1BsYWNlbWVudHMuaW5kZXhPZihwbGFjZW1lbnQpID49IDA7XG4gIH0pO1xuXG4gIGlmIChhbGxvd2VkUGxhY2VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHM7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFsnUG9wcGVyOiBUaGUgYGFsbG93ZWRBdXRvUGxhY2VtZW50c2Agb3B0aW9uIGRpZCBub3QgYWxsb3cgYW55JywgJ3BsYWNlbWVudHMuIEVuc3VyZSB0aGUgYHBsYWNlbWVudGAgb3B0aW9uIG1hdGNoZXMgdGhlIHZhcmlhdGlvbicsICdvZiB0aGUgYWxsb3dlZCBwbGFjZW1lbnRzLicsICdGb3IgZXhhbXBsZSwgXCJhdXRvXCIgY2Fubm90IGJlIHVzZWQgdG8gYWxsb3cgXCJib3R0b20tc3RhcnRcIi4nLCAnVXNlIFwiYXV0by1zdGFydFwiIGluc3RlYWQuJ10uam9pbignICcpKTtcbiAgICB9XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV06IEZsb3cgc2VlbXMgdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIHR3byBhcnJheSB1bmlvbnMuLi5cblxuXG4gIHZhciBvdmVyZmxvd3MgPSBhbGxvd2VkUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgYWNjW3BsYWNlbWVudF0gPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICB9KVtnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCldO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG92ZXJmbG93cykuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBvdmVyZmxvd3NbYV0gLSBvdmVyZmxvd3NbYl07XG4gIH0pO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js": /*!*****************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/computeOffsets.js ***! \*****************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return computeOffsets; });\n/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ \"./node_modules/@popperjs/core/lib/utils/getVariation.js\");\n/* harmony import */ var _getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getMainAxisFromPlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n\n\n\n\nfunction computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? Object(_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(placement) : null;\n var variation = placement ? Object(_getVariation_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case _enums_js__WEBPACK_IMPORTED_MODULE_3__[\"top\"]:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case _enums_js__WEBPACK_IMPORTED_MODULE_3__[\"bottom\"]:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case _enums_js__WEBPACK_IMPORTED_MODULE_3__[\"right\"]:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case _enums_js__WEBPACK_IMPORTED_MODULE_3__[\"left\"]:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? Object(_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case _enums_js__WEBPACK_IMPORTED_MODULE_3__[\"start\"]:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case _enums_js__WEBPACK_IMPORTED_MODULE_3__[\"end\"]:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzPzVkN2UiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQXFEO0FBQ1I7QUFDd0I7QUFDRjtBQUNwRDtBQUNmO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxvRUFBZ0I7QUFDbEQsOEJBQThCLGdFQUFZO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVMsNkNBQUc7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsZ0RBQU07QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsK0NBQUs7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVMsOENBQUk7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUMsNEVBQXdCOztBQUV6RDtBQUNBOztBQUVBO0FBQ0EsV0FBVywrQ0FBSztBQUNoQjtBQUNBOztBQUVBLFdBQVcsNkNBQUc7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9jb21wdXRlT2Zmc2V0cy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzdGFydCwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciByZWZlcmVuY2UgPSBfcmVmLnJlZmVyZW5jZSxcbiAgICAgIGVsZW1lbnQgPSBfcmVmLmVsZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQgPyBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgdmFyaWF0aW9uID0gcGxhY2VtZW50ID8gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGVsZW1lbnQud2lkdGggLyAyO1xuICB2YXIgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBlbGVtZW50LmhlaWdodCAvIDI7XG4gIHZhciBvZmZzZXRzO1xuXG4gIHN3aXRjaCAoYmFzZVBsYWNlbWVudCkge1xuICAgIGNhc2UgdG9wOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBlbGVtZW50LmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBib3R0b206XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgcmlnaHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBsZWZ0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBlbGVtZW50LndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55XG4gICAgICB9O1xuICB9XG5cbiAgdmFyIG1haW5BeGlzID0gYmFzZVBsYWNlbWVudCA/IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KSA6IG51bGw7XG5cbiAgaWYgKG1haW5BeGlzICE9IG51bGwpIHtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHN3aXRjaCAodmFyaWF0aW9uKSB7XG4gICAgICBjYXNlIHN0YXJ0OlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdIC0gKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBlbmQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gKyAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvZmZzZXRzO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/computeOffsets.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/debounce.js": /*!***********************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/debounce.js ***! \***********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return debounce; });\nfunction debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RlYm91bmNlLmpzP2IxZTIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGVib3VuY2UuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmbikge1xuICB2YXIgcGVuZGluZztcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHBlbmRpbmcgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwZW5kaW5nID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlc29sdmUoZm4oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBlbmRpbmc7XG4gIH07XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/debounce.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js": /*!*****************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/detectOverflow.js ***! \*****************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return detectOverflow; });\n/* harmony import */ var _dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/getBoundingClientRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\");\n/* harmony import */ var _dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-utils/getClippingRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js\");\n/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _computeOffsets_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./computeOffsets.js */ \"./node_modules/@popperjs/core/lib/utils/computeOffsets.js\");\n/* harmony import */ var _rectToClientRect_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./rectToClientRect.js */ \"./node_modules/@popperjs/core/lib/utils/rectToClientRect.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./mergePaddingObject.js */ \"./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js\");\n/* harmony import */ var _expandToHashMap_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./expandToHashMap.js */ \"./node_modules/@popperjs/core/lib/utils/expandToHashMap.js\");\n\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_5__[\"clippingParents\"] : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_5__[\"viewport\"] : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_5__[\"popper\"] : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = Object(_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(typeof padding !== 'number' ? padding : Object(_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_5__[\"basePlacements\"]));\n var altContext = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_5__[\"popper\"] ? _enums_js__WEBPACK_IMPORTED_MODULE_5__[\"reference\"] : _enums_js__WEBPACK_IMPORTED_MODULE_5__[\"popper\"];\n var referenceElement = state.elements.reference;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = Object(_dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(Object(_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_6__[\"isElement\"])(element) ? element : element.contextElement || Object(_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(state.elements.popper), boundary, rootBoundary);\n var referenceClientRect = Object(_dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(referenceElement);\n var popperOffsets = Object(_computeOffsets_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = Object(_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_5__[\"popper\"] ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_5__[\"popper\"] && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [_enums_js__WEBPACK_IMPORTED_MODULE_5__[\"right\"], _enums_js__WEBPACK_IMPORTED_MODULE_5__[\"bottom\"]].indexOf(key) >= 0 ? 1 : -1;\n var axis = [_enums_js__WEBPACK_IMPORTED_MODULE_5__[\"top\"], _enums_js__WEBPACK_IMPORTED_MODULE_5__[\"bottom\"]].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzP2I2MTciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUEwRTtBQUNaO0FBQ007QUFDbkI7QUFDSTtBQUMwRDtBQUN4RDtBQUNFO0FBQ047O0FBRXBDO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELHlEQUFlO0FBQy9EO0FBQ0Esd0RBQXdELGtEQUFRO0FBQ2hFO0FBQ0EsMERBQTBELGdEQUFNO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLHNFQUFrQix5Q0FBeUMsbUVBQWUsVUFBVSx3REFBYztBQUN4SCxzQ0FBc0MsZ0RBQU0sR0FBRyxtREFBUyxHQUFHLGdEQUFNO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiw2RUFBZSxDQUFDLDBFQUFTLGdEQUFnRCxnRkFBa0I7QUFDdEgsNEJBQTRCLG1GQUFxQjtBQUNqRCxzQkFBc0Isa0VBQWM7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gseUJBQXlCLG9FQUFnQixpQkFBaUI7QUFDMUQsNkNBQTZDLGdEQUFNLDBDQUEwQztBQUM3Rjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7O0FBRTlDLHlCQUF5QixnREFBTTtBQUMvQjtBQUNBO0FBQ0Esc0JBQXNCLCtDQUFLLEVBQUUsZ0RBQU07QUFDbkMsa0JBQWtCLDZDQUFHLEVBQUUsZ0RBQU07QUFDN0I7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0Q2xpcHBpbmdSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgY29tcHV0ZU9mZnNldHMgZnJvbSBcIi4vY29tcHV0ZU9mZnNldHMuanNcIjtcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gXCIuL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IGNsaXBwaW5nUGFyZW50cywgcmVmZXJlbmNlLCBwb3BwZXIsIGJvdHRvbSwgdG9wLCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHZpZXdwb3J0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSBcIi4vbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuL2V4cGFuZFRvSGFzaE1hcC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgX29wdGlvbnMkcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMkcGxhY2VtZW50ID09PSB2b2lkIDAgPyBzdGF0ZS5wbGFjZW1lbnQgOiBfb3B0aW9ucyRwbGFjZW1lbnQsXG4gICAgICBfb3B0aW9ucyRib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucyRib3VuZGFyeSA9PT0gdm9pZCAwID8gY2xpcHBpbmdQYXJlbnRzIDogX29wdGlvbnMkYm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRyb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucyRyb290Qm91bmRhcnkgPT09IHZvaWQgMCA/IHZpZXdwb3J0IDogX29wdGlvbnMkcm9vdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkZWxlbWVudENvbnRlID0gX29wdGlvbnMuZWxlbWVudENvbnRleHQsXG4gICAgICBlbGVtZW50Q29udGV4dCA9IF9vcHRpb25zJGVsZW1lbnRDb250ZSA9PT0gdm9pZCAwID8gcG9wcGVyIDogX29wdGlvbnMkZWxlbWVudENvbnRlLFxuICAgICAgX29wdGlvbnMkYWx0Qm91bmRhcnkgPSBfb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMkYWx0Qm91bmRhcnkgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucyRwYWRkaW5nID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkcGFkZGluZztcbiAgdmFyIHBhZGRpbmdPYmplY3QgPSBtZXJnZVBhZGRpbmdPYmplY3QodHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gcGFkZGluZyA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cykpO1xuICB2YXIgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyByZWZlcmVuY2UgOiBwb3BwZXI7XG4gIHZhciByZWZlcmVuY2VFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIHZhciBjbGlwcGluZ0NsaWVudFJlY3QgPSBnZXRDbGlwcGluZ1JlY3QoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgZ2V0RG9jdW1lbnRFbGVtZW50KHN0YXRlLmVsZW1lbnRzLnBvcHBlciksIGJvdW5kYXJ5LCByb290Qm91bmRhcnkpO1xuICB2YXIgcmVmZXJlbmNlQ2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2VFbGVtZW50KTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiByZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgIGVsZW1lbnQ6IHBvcHBlclJlY3QsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSk7XG4gIHZhciBwb3BwZXJDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJSZWN0LCBwb3BwZXJPZmZzZXRzKSk7XG4gIHZhciBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDsgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG5cbiAgdmFyIG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206IGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6IGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodFxuICB9O1xuICB2YXIgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0OyAvLyBPZmZzZXRzIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gdGhlIHBvcHBlciBlbGVtZW50XG5cbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIHZhciBvZmZzZXQgPSBvZmZzZXREYXRhW3BsYWNlbWVudF07XG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIHZhciBheGlzID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/ICd5JyA6ICd4JztcbiAgICAgIG92ZXJmbG93T2Zmc2V0c1trZXldICs9IG9mZnNldFtheGlzXSAqIG11bHRpcGx5O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG92ZXJmbG93T2Zmc2V0cztcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/detectOverflow.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js": /*!******************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/expandToHashMap.js ***! \******************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return expandToHashMap; });\nfunction expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcz85ODUyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLEdBQUcsSUFBSTtBQUNQIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9leHBhbmRUb0hhc2hNYXAuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHBhbmRUb0hhc2hNYXAodmFsdWUsIGtleXMpIHtcbiAgcmV0dXJuIGtleXMucmVkdWNlKGZ1bmN0aW9uIChoYXNoTWFwLCBrZXkpIHtcbiAgICBoYXNoTWFwW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gaGFzaE1hcDtcbiAgfSwge30pO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/expandToHashMap.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/format.js": /*!*********************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/format.js ***! \*********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return format; });\nfunction format(str) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n return [].concat(args).reduce(function (p, c) {\n return p.replace(/%s/, c);\n }, str);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2Zvcm1hdC5qcz9mNTNlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBZTtBQUNmLHdGQUF3RixhQUFhO0FBQ3JHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZm9ybWF0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KHN0cikge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gW10uY29uY2F0KGFyZ3MpLnJlZHVjZShmdW5jdGlvbiAocCwgYykge1xuICAgIHJldHVybiBwLnJlcGxhY2UoLyVzLywgYyk7XG4gIH0sIHN0cik7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/format.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/getAltAxis.js": /*!*************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/getAltAxis.js ***! \*************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getAltAxis; });\nfunction getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanM/ZjJlMCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQWU7QUFDZjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRBbHRBeGlzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QWx0QXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getAltAxis.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js": /*!*******************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/getBasePlacement.js ***! \*******************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getBasePlacement; });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n\nfunction getBasePlacement(placement) {\n return placement.split('-')[0];\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanM/YjUwZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBbUM7QUFDcEI7QUFDZjtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js": /*!*********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js ***! \*********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getFreshSideObject; });\nfunction getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qcz8zNWY2Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRGcmVzaFNpZGVPYmplY3QoKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwXG4gIH07XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js": /*!***************************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js ***! \***************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getMainAxisFromPlacement; });\nfunction getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcz9hZDlkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBZTtBQUNmO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSA+PSAwID8gJ3gnIDogJ3knO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js": /*!***********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js ***! \***********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getOppositePlacement; });\nvar hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzPzUyMzIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNlO0FBQ2Y7QUFDQTtBQUNBLEdBQUc7QUFDSCIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgaGFzaCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js": /*!********************************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js ***! \********************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getOppositeVariationPlacement; });\nvar hash = {\n start: 'end',\n end: 'start'\n};\nfunction getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzPzUwMGIiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ2U7QUFDZjtBQUNBO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBoYXNoID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/getVariation.js": /*!***************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/getVariation.js ***! \***************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return getVariation; });\nfunction getVariation(placement) {\n return placement.split('-')[1];\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcz8zZDhkIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBZTtBQUNmO0FBQ0EiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/getVariation.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/math.js": /*!*******************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/math.js ***! \*******************************************************/ /*! exports provided: max, min, round */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"max\", function() { return max; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"min\", function() { return min; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"round\", function() { return round; });\nvar max = Math.max;\nvar min = Math.min;\nvar round = Math.round;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21hdGguanM/ODRjNiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFPO0FBQ0E7QUFDQSIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWF0aC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB2YXIgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgdmFyIG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IHZhciByb3VuZCA9IE1hdGgucm91bmQ7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/math.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/mergeByName.js": /*!**************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/mergeByName.js ***! \**************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return mergeByName; });\nfunction mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlQnlOYW1lLmpzPzJhMzUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFlO0FBQ2Y7QUFDQTtBQUNBLHNEQUFzRDtBQUN0RCwrQkFBK0I7QUFDL0IsNEJBQTRCO0FBQzVCLEtBQUs7QUFDTDtBQUNBLEdBQUcsSUFBSSxFQUFFOztBQUVUO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlQnlOYW1lLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VCeU5hbWUobW9kaWZpZXJzKSB7XG4gIHZhciBtZXJnZWQgPSBtb2RpZmllcnMucmVkdWNlKGZ1bmN0aW9uIChtZXJnZWQsIGN1cnJlbnQpIHtcbiAgICB2YXIgZXhpc3RpbmcgPSBtZXJnZWRbY3VycmVudC5uYW1lXTtcbiAgICBtZXJnZWRbY3VycmVudC5uYW1lXSA9IGV4aXN0aW5nID8gT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcsIGN1cnJlbnQsIHtcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLm9wdGlvbnMsIGN1cnJlbnQub3B0aW9ucyksXG4gICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5kYXRhLCBjdXJyZW50LmRhdGEpXG4gICAgfSkgOiBjdXJyZW50O1xuICAgIHJldHVybiBtZXJnZWQ7XG4gIH0sIHt9KTsgLy8gSUUxMSBkb2VzIG5vdCBzdXBwb3J0IE9iamVjdC52YWx1ZXNcblxuICByZXR1cm4gT2JqZWN0LmtleXMobWVyZ2VkKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBtZXJnZWRba2V5XTtcbiAgfSk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/mergeByName.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js": /*!*********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js ***! \*********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return mergePaddingObject; });\n/* harmony import */ var _getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getFreshSideObject.js */ \"./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js\");\n\nfunction mergePaddingObject(paddingObject) {\n return Object.assign({}, Object(_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(), paddingObject);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qcz9kMzliIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUF5RDtBQUMxQztBQUNmLHlCQUF5QixFQUFFLHNFQUFrQjtBQUM3QyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlUGFkZGluZ09iamVjdChwYWRkaW5nT2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBnZXRGcmVzaFNpZGVPYmplY3QoKSwgcGFkZGluZ09iamVjdCk7XG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/orderModifiers.js": /*!*****************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/orderModifiers.js ***! \*****************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return orderModifiers; });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nfunction orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return _enums_js__WEBPACK_IMPORTED_MODULE_0__[\"modifierPhases\"].reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzP2I5ZTYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQTZDOztBQUU3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHLEVBQUU7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVlO0FBQ2Y7QUFDQSwwQ0FBMEM7O0FBRTFDLFNBQVMsd0RBQWM7QUFDdkI7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0giLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbW9kaWZpZXJQaGFzZXMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gc291cmNlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80OTg3NTI1NVxuXG5mdW5jdGlvbiBvcmRlcihtb2RpZmllcnMpIHtcbiAgdmFyIG1hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgbWFwLnNldChtb2RpZmllci5uYW1lLCBtb2RpZmllcik7XG4gIH0pOyAvLyBPbiB2aXNpdGluZyBvYmplY3QsIGNoZWNrIGZvciBpdHMgZGVwZW5kZW5jaWVzIGFuZCB2aXNpdCB0aGVtIHJlY3Vyc2l2ZWx5XG5cbiAgZnVuY3Rpb24gc29ydChtb2RpZmllcikge1xuICAgIHZpc2l0ZWQuYWRkKG1vZGlmaWVyLm5hbWUpO1xuICAgIHZhciByZXF1aXJlcyA9IFtdLmNvbmNhdChtb2RpZmllci5yZXF1aXJlcyB8fCBbXSwgbW9kaWZpZXIucmVxdWlyZXNJZkV4aXN0cyB8fCBbXSk7XG4gICAgcmVxdWlyZXMuZm9yRWFjaChmdW5jdGlvbiAoZGVwKSB7XG4gICAgICBpZiAoIXZpc2l0ZWQuaGFzKGRlcCkpIHtcbiAgICAgICAgdmFyIGRlcE1vZGlmaWVyID0gbWFwLmdldChkZXApO1xuXG4gICAgICAgIGlmIChkZXBNb2RpZmllcikge1xuICAgICAgICAgIHNvcnQoZGVwTW9kaWZpZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzdWx0LnB1c2gobW9kaWZpZXIpO1xuICB9XG5cbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgaWYgKCF2aXNpdGVkLmhhcyhtb2RpZmllci5uYW1lKSkge1xuICAgICAgLy8gY2hlY2sgZm9yIHZpc2l0ZWQgb2JqZWN0XG4gICAgICBzb3J0KG1vZGlmaWVyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcmRlck1vZGlmaWVycyhtb2RpZmllcnMpIHtcbiAgLy8gb3JkZXIgYmFzZWQgb24gZGVwZW5kZW5jaWVzXG4gIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXIobW9kaWZpZXJzKTsgLy8gb3JkZXIgYmFzZWQgb24gcGhhc2VcblxuICByZXR1cm4gbW9kaWZpZXJQaGFzZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBoYXNlKSB7XG4gICAgcmV0dXJuIGFjYy5jb25jYXQob3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICByZXR1cm4gbW9kaWZpZXIucGhhc2UgPT09IHBoYXNlO1xuICAgIH0pKTtcbiAgfSwgW10pO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/orderModifiers.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js": /*!*******************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/rectToClientRect.js ***! \*******************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return rectToClientRect; });\nfunction rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanM/N2JjZiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQWU7QUFDZix5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWN0VG9DbGllbnRSZWN0KHJlY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHJlY3QsIHtcbiAgICBsZWZ0OiByZWN0LngsXG4gICAgdG9wOiByZWN0LnksXG4gICAgcmlnaHQ6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgYm90dG9tOiByZWN0LnkgKyByZWN0LmhlaWdodFxuICB9KTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/rectToClientRect.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/uniqueBy.js": /*!***********************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/uniqueBy.js ***! \***********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return uniqueBy; });\nfunction uniqueBy(arr, fn) {\n var identifiers = new Set();\n return arr.filter(function (item) {\n var identifier = fn(item);\n\n if (!identifiers.has(identifier)) {\n identifiers.add(identifier);\n return true;\n }\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3VuaXF1ZUJ5LmpzPzYwMTQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFlO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy91bmlxdWVCeS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuaXF1ZUJ5KGFyciwgZm4pIHtcbiAgdmFyIGlkZW50aWZpZXJzID0gbmV3IFNldCgpO1xuICByZXR1cm4gYXJyLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgIHZhciBpZGVudGlmaWVyID0gZm4oaXRlbSk7XG5cbiAgICBpZiAoIWlkZW50aWZpZXJzLmhhcyhpZGVudGlmaWVyKSkge1xuICAgICAgaWRlbnRpZmllcnMuYWRkKGlkZW50aWZpZXIpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/uniqueBy.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/validateModifiers.js": /*!********************************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/validateModifiers.js ***! \********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return validateModifiers; });\n/* harmony import */ var _format_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./format.js */ \"./node_modules/@popperjs/core/lib/utils/format.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n\n\nvar INVALID_MODIFIER_ERROR = 'Popper: modifier \"%s\" provided an invalid %s property, expected %s but got %s';\nvar MISSING_DEPENDENCY_ERROR = 'Popper: modifier \"%s\" requires \"%s\", but \"%s\" modifier is not available';\nvar VALID_PROPERTIES = ['name', 'enabled', 'phase', 'fn', 'effect', 'requires', 'options'];\nfunction validateModifiers(modifiers) {\n modifiers.forEach(function (modifier) {\n Object.keys(modifier).forEach(function (key) {\n switch (key) {\n case 'name':\n if (typeof modifier.name !== 'string') {\n console.error(Object(_format_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(INVALID_MODIFIER_ERROR, String(modifier.name), '\"name\"', '\"string\"', \"\\\"\" + String(modifier.name) + \"\\\"\"));\n }\n\n break;\n\n case 'enabled':\n if (typeof modifier.enabled !== 'boolean') {\n console.error(Object(_format_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(INVALID_MODIFIER_ERROR, modifier.name, '\"enabled\"', '\"boolean\"', \"\\\"\" + String(modifier.enabled) + \"\\\"\"));\n }\n\n case 'phase':\n if (_enums_js__WEBPACK_IMPORTED_MODULE_1__[\"modifierPhases\"].indexOf(modifier.phase) < 0) {\n console.error(Object(_format_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(INVALID_MODIFIER_ERROR, modifier.name, '\"phase\"', \"either \" + _enums_js__WEBPACK_IMPORTED_MODULE_1__[\"modifierPhases\"].join(', '), \"\\\"\" + String(modifier.phase) + \"\\\"\"));\n }\n\n break;\n\n case 'fn':\n if (typeof modifier.fn !== 'function') {\n console.error(Object(_format_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(INVALID_MODIFIER_ERROR, modifier.name, '\"fn\"', '\"function\"', \"\\\"\" + String(modifier.fn) + \"\\\"\"));\n }\n\n break;\n\n case 'effect':\n if (typeof modifier.effect !== 'function') {\n console.error(Object(_format_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(INVALID_MODIFIER_ERROR, modifier.name, '\"effect\"', '\"function\"', \"\\\"\" + String(modifier.fn) + \"\\\"\"));\n }\n\n break;\n\n case 'requires':\n if (!Array.isArray(modifier.requires)) {\n console.error(Object(_format_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(INVALID_MODIFIER_ERROR, modifier.name, '\"requires\"', '\"array\"', \"\\\"\" + String(modifier.requires) + \"\\\"\"));\n }\n\n break;\n\n case 'requiresIfExists':\n if (!Array.isArray(modifier.requiresIfExists)) {\n console.error(Object(_format_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(INVALID_MODIFIER_ERROR, modifier.name, '\"requiresIfExists\"', '\"array\"', \"\\\"\" + String(modifier.requiresIfExists) + \"\\\"\"));\n }\n\n break;\n\n case 'options':\n case 'data':\n break;\n\n default:\n console.error(\"PopperJS: an invalid property has been provided to the \\\"\" + modifier.name + \"\\\" modifier, valid properties are \" + VALID_PROPERTIES.map(function (s) {\n return \"\\\"\" + s + \"\\\"\";\n }).join(', ') + \"; but \\\"\" + key + \"\\\" was provided.\");\n }\n\n modifier.requires && modifier.requires.forEach(function (requirement) {\n if (modifiers.find(function (mod) {\n return mod.name === requirement;\n }) == null) {\n console.error(Object(_format_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement));\n }\n });\n });\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3ZhbGlkYXRlTW9kaWZpZXJzLmpzPzc5NTUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBaUM7QUFDWTtBQUM3QztBQUNBO0FBQ0E7QUFDZTtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsMERBQU07QUFDaEM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDBCQUEwQiwwREFBTTtBQUNoQzs7QUFFQTtBQUNBLGNBQWMsd0RBQWM7QUFDNUIsMEJBQTBCLDBEQUFNLCtEQUErRCx3REFBYztBQUM3Rzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsMEJBQTBCLDBEQUFNO0FBQ2hDOztBQUVBOztBQUVBO0FBQ0E7QUFDQSwwQkFBMEIsMERBQU07QUFDaEM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDBCQUEwQiwwREFBTTtBQUNoQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsMEJBQTBCLDBEQUFNO0FBQ2hDOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlCQUFpQjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsd0JBQXdCLDBEQUFNO0FBQzlCO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0giLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3ZhbGlkYXRlTW9kaWZpZXJzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZvcm1hdCBmcm9tIFwiLi9mb3JtYXQuanNcIjtcbmltcG9ydCB7IG1vZGlmaWVyUGhhc2VzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG52YXIgSU5WQUxJRF9NT0RJRklFUl9FUlJPUiA9ICdQb3BwZXI6IG1vZGlmaWVyIFwiJXNcIiBwcm92aWRlZCBhbiBpbnZhbGlkICVzIHByb3BlcnR5LCBleHBlY3RlZCAlcyBidXQgZ290ICVzJztcbnZhciBNSVNTSU5HX0RFUEVOREVOQ1lfRVJST1IgPSAnUG9wcGVyOiBtb2RpZmllciBcIiVzXCIgcmVxdWlyZXMgXCIlc1wiLCBidXQgXCIlc1wiIG1vZGlmaWVyIGlzIG5vdCBhdmFpbGFibGUnO1xudmFyIFZBTElEX1BST1BFUlRJRVMgPSBbJ25hbWUnLCAnZW5hYmxlZCcsICdwaGFzZScsICdmbicsICdlZmZlY3QnLCAncmVxdWlyZXMnLCAnb3B0aW9ucyddO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFsaWRhdGVNb2RpZmllcnMobW9kaWZpZXJzKSB7XG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIE9iamVjdC5rZXlzKG1vZGlmaWVyKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgJ25hbWUnOlxuICAgICAgICAgIGlmICh0eXBlb2YgbW9kaWZpZXIubmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KElOVkFMSURfTU9ESUZJRVJfRVJST1IsIFN0cmluZyhtb2RpZmllci5uYW1lKSwgJ1wibmFtZVwiJywgJ1wic3RyaW5nXCInLCBcIlxcXCJcIiArIFN0cmluZyhtb2RpZmllci5uYW1lKSArIFwiXFxcIlwiKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZW5hYmxlZCc6XG4gICAgICAgICAgaWYgKHR5cGVvZiBtb2RpZmllci5lbmFibGVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KElOVkFMSURfTU9ESUZJRVJfRVJST1IsIG1vZGlmaWVyLm5hbWUsICdcImVuYWJsZWRcIicsICdcImJvb2xlYW5cIicsIFwiXFxcIlwiICsgU3RyaW5nKG1vZGlmaWVyLmVuYWJsZWQpICsgXCJcXFwiXCIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAncGhhc2UnOlxuICAgICAgICAgIGlmIChtb2RpZmllclBoYXNlcy5pbmRleE9mKG1vZGlmaWVyLnBoYXNlKSA8IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KElOVkFMSURfTU9ESUZJRVJfRVJST1IsIG1vZGlmaWVyLm5hbWUsICdcInBoYXNlXCInLCBcImVpdGhlciBcIiArIG1vZGlmaWVyUGhhc2VzLmpvaW4oJywgJyksIFwiXFxcIlwiICsgU3RyaW5nKG1vZGlmaWVyLnBoYXNlKSArIFwiXFxcIlwiKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZm4nOlxuICAgICAgICAgIGlmICh0eXBlb2YgbW9kaWZpZXIuZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KElOVkFMSURfTU9ESUZJRVJfRVJST1IsIG1vZGlmaWVyLm5hbWUsICdcImZuXCInLCAnXCJmdW5jdGlvblwiJywgXCJcXFwiXCIgKyBTdHJpbmcobW9kaWZpZXIuZm4pICsgXCJcXFwiXCIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdlZmZlY3QnOlxuICAgICAgICAgIGlmICh0eXBlb2YgbW9kaWZpZXIuZWZmZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdChJTlZBTElEX01PRElGSUVSX0VSUk9SLCBtb2RpZmllci5uYW1lLCAnXCJlZmZlY3RcIicsICdcImZ1bmN0aW9uXCInLCBcIlxcXCJcIiArIFN0cmluZyhtb2RpZmllci5mbikgKyBcIlxcXCJcIikpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3JlcXVpcmVzJzpcbiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobW9kaWZpZXIucmVxdWlyZXMpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdChJTlZBTElEX01PRElGSUVSX0VSUk9SLCBtb2RpZmllci5uYW1lLCAnXCJyZXF1aXJlc1wiJywgJ1wiYXJyYXlcIicsIFwiXFxcIlwiICsgU3RyaW5nKG1vZGlmaWVyLnJlcXVpcmVzKSArIFwiXFxcIlwiKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAncmVxdWlyZXNJZkV4aXN0cyc6XG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdChJTlZBTElEX01PRElGSUVSX0VSUk9SLCBtb2RpZmllci5uYW1lLCAnXCJyZXF1aXJlc0lmRXhpc3RzXCInLCAnXCJhcnJheVwiJywgXCJcXFwiXCIgKyBTdHJpbmcobW9kaWZpZXIucmVxdWlyZXNJZkV4aXN0cykgKyBcIlxcXCJcIikpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ29wdGlvbnMnOlxuICAgICAgICBjYXNlICdkYXRhJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJQb3BwZXJKUzogYW4gaW52YWxpZCBwcm9wZXJ0eSBoYXMgYmVlbiBwcm92aWRlZCB0byB0aGUgXFxcIlwiICsgbW9kaWZpZXIubmFtZSArIFwiXFxcIiBtb2RpZmllciwgdmFsaWQgcHJvcGVydGllcyBhcmUgXCIgKyBWQUxJRF9QUk9QRVJUSUVTLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgcmV0dXJuIFwiXFxcIlwiICsgcyArIFwiXFxcIlwiO1xuICAgICAgICAgIH0pLmpvaW4oJywgJykgKyBcIjsgYnV0IFxcXCJcIiArIGtleSArIFwiXFxcIiB3YXMgcHJvdmlkZWQuXCIpO1xuICAgICAgfVxuXG4gICAgICBtb2RpZmllci5yZXF1aXJlcyAmJiBtb2RpZmllci5yZXF1aXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1aXJlbWVudCkge1xuICAgICAgICBpZiAobW9kaWZpZXJzLmZpbmQoZnVuY3Rpb24gKG1vZCkge1xuICAgICAgICAgIHJldHVybiBtb2QubmFtZSA9PT0gcmVxdWlyZW1lbnQ7XG4gICAgICAgIH0pID09IG51bGwpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGZvcm1hdChNSVNTSU5HX0RFUEVOREVOQ1lfRVJST1IsIFN0cmluZyhtb2RpZmllci5uYW1lKSwgcmVxdWlyZW1lbnQsIHJlcXVpcmVtZW50KSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/validateModifiers.js\n"); /***/ }), /***/ "./node_modules/@popperjs/core/lib/utils/within.js": /*!*********************************************************!*\ !*** ./node_modules/@popperjs/core/lib/utils/within.js ***! \*********************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return within; });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\nfunction within(min, value, max) {\n return Object(_math_js__WEBPACK_IMPORTED_MODULE_0__[\"max\"])(min, Object(_math_js__WEBPACK_IMPORTED_MODULE_0__[\"min\"])(value, max));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3dpdGhpbi5qcz9lNDNmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUEyRDtBQUM1QztBQUNmLFNBQVMsb0RBQU8sTUFBTSxvREFBTztBQUM3QiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvd2l0aGluLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWF4IGFzIG1hdGhNYXgsIG1pbiBhcyBtYXRoTWluIH0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd2l0aGluKG1pbiwgdmFsdWUsIG1heCkge1xuICByZXR1cm4gbWF0aE1heChtaW4sIG1hdGhNaW4odmFsdWUsIG1heCkpO1xufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/@popperjs/core/lib/utils/within.js\n"); /***/ }), /***/ "./node_modules/aos/dist/aos.js": /*!**************************************!*\ !*** ./node_modules/aos/dist/aos.js ***! \**************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("!function(e,t){ true?module.exports=t():undefined}(this,function(){return function(e){function t(o){if(n[o])return n[o].exports;var i=n[o]={exports:{},id:o,loaded:!1};return e[o].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p=\"dist/\",t(0)}([function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}var i=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]&&arguments[0];if(e&&(k=!0),k)return w=(0,y.default)(w,x),(0,b.default)(w,x.once),w},O=function(){w=(0,h.default)(),j()},M=function(){w.forEach(function(e,t){e.node.removeAttribute(\"data-aos\"),e.node.removeAttribute(\"data-aos-easing\"),e.node.removeAttribute(\"data-aos-duration\"),e.node.removeAttribute(\"data-aos-delay\")})},S=function(e){return e===!0||\"mobile\"===e&&p.default.mobile()||\"phone\"===e&&p.default.phone()||\"tablet\"===e&&p.default.tablet()||\"function\"==typeof e&&e()===!0},_=function(e){x=i(x,e),w=(0,h.default)();var t=document.all&&!window.atob;return S(x.disable)||t?M():(x.disableMutationObserver||d.default.isSupported()||(console.info('\\n aos: MutationObserver is not supported on this browser,\\n code mutations observing has been disabled.\\n You may have to call \"refreshHard()\" by yourself.\\n '),x.disableMutationObserver=!0),document.querySelector(\"body\").setAttribute(\"data-aos-easing\",x.easing),document.querySelector(\"body\").setAttribute(\"data-aos-duration\",x.duration),document.querySelector(\"body\").setAttribute(\"data-aos-delay\",x.delay),\"DOMContentLoaded\"===x.startEvent&&[\"complete\",\"interactive\"].indexOf(document.readyState)>-1?j(!0):\"load\"===x.startEvent?window.addEventListener(x.startEvent,function(){j(!0)}):document.addEventListener(x.startEvent,function(){j(!0)}),window.addEventListener(\"resize\",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener(\"orientationchange\",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener(\"scroll\",(0,u.default)(function(){(0,b.default)(w,x.once)},x.throttleDelay)),x.disableMutationObserver||d.default.ready(\"[data-aos]\",O),w)};e.exports={init:_,refresh:j,refreshHard:O}},function(e,t){},,,,,function(e,t){(function(t){\"use strict\";function n(e,t,n){function o(t){var n=b,o=v;return b=v=void 0,k=t,g=e.apply(o,n)}function r(e){return k=e,h=setTimeout(f,t),M?o(e):g}function a(e){var n=e-w,o=e-k,i=t-n;return S?j(i,y-o):i}function c(e){var n=e-w,o=e-k;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=O();return c(e)?d(e):void(h=setTimeout(f,a(e)))}function d(e){return h=void 0,_&&b?o(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),k=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(O())}function m(){var e=O(),n=c(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),o(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,k=0,M=!1,S=!1,_=!0;if(\"function\"!=typeof e)throw new TypeError(s);return t=u(t)||0,i(n)&&(M=!!n.leading,S=\"maxWait\"in n,y=S?x(u(n.maxWait)||0,t):y,_=\"trailing\"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e,t,o){var r=!0,a=!0;if(\"function\"!=typeof e)throw new TypeError(s);return i(o)&&(r=\"leading\"in o?!!o.leading:r,a=\"trailing\"in o?!!o.trailing:a),n(e,t,{leading:r,maxWait:t,trailing:a})}function i(e){var t=\"undefined\"==typeof e?\"undefined\":c(e);return!!e&&(\"object\"==t||\"function\"==t)}function r(e){return!!e&&\"object\"==(\"undefined\"==typeof e?\"undefined\":c(e))}function a(e){return\"symbol\"==(\"undefined\"==typeof e?\"undefined\":c(e))||r(e)&&k.call(e)==d}function u(e){if(\"number\"==typeof e)return e;if(a(e))return f;if(i(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(l,\"\");var n=m.test(e);return n||b.test(e)?v(e.slice(2),n?2:8):p.test(e)?f:+e}var c=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},s=\"Expected a function\",f=NaN,d=\"[object Symbol]\",l=/^\\s+|\\s+$/g,p=/^[-+]0x[0-9a-f]+$/i,m=/^0b[01]+$/i,b=/^0o[0-7]+$/i,v=parseInt,y=\"object\"==(\"undefined\"==typeof t?\"undefined\":c(t))&&t&&t.Object===Object&&t,g=\"object\"==(\"undefined\"==typeof self?\"undefined\":c(self))&&self&&self.Object===Object&&self,h=y||g||Function(\"return this\")(),w=Object.prototype,k=w.toString,x=Math.max,j=Math.min,O=function(){return h.Date.now()};e.exports=o}).call(t,function(){return this}())},function(e,t){(function(t){\"use strict\";function n(e,t,n){function i(t){var n=b,o=v;return b=v=void 0,O=t,g=e.apply(o,n)}function r(e){return O=e,h=setTimeout(f,t),M?i(e):g}function u(e){var n=e-w,o=e-O,i=t-n;return S?x(i,y-o):i}function s(e){var n=e-w,o=e-O;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=j();return s(e)?d(e):void(h=setTimeout(f,u(e)))}function d(e){return h=void 0,_&&b?i(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),O=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(j())}function m(){var e=j(),n=s(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),i(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,O=0,M=!1,S=!1,_=!0;if(\"function\"!=typeof e)throw new TypeError(c);return t=a(t)||0,o(n)&&(M=!!n.leading,S=\"maxWait\"in n,y=S?k(a(n.maxWait)||0,t):y,_=\"trailing\"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e){var t=\"undefined\"==typeof e?\"undefined\":u(e);return!!e&&(\"object\"==t||\"function\"==t)}function i(e){return!!e&&\"object\"==(\"undefined\"==typeof e?\"undefined\":u(e))}function r(e){return\"symbol\"==(\"undefined\"==typeof e?\"undefined\":u(e))||i(e)&&w.call(e)==f}function a(e){if(\"number\"==typeof e)return e;if(r(e))return s;if(o(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(d,\"\");var n=p.test(e);return n||m.test(e)?b(e.slice(2),n?2:8):l.test(e)?s:+e}var u=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},c=\"Expected a function\",s=NaN,f=\"[object Symbol]\",d=/^\\s+|\\s+$/g,l=/^[-+]0x[0-9a-f]+$/i,p=/^0b[01]+$/i,m=/^0o[0-7]+$/i,b=parseInt,v=\"object\"==(\"undefined\"==typeof t?\"undefined\":u(t))&&t&&t.Object===Object&&t,y=\"object\"==(\"undefined\"==typeof self?\"undefined\":u(self))&&self&&self.Object===Object&&self,g=v||y||Function(\"return this\")(),h=Object.prototype,w=h.toString,k=Math.max,x=Math.min,j=function(){return g.Date.now()};e.exports=n}).call(t,function(){return this}())},function(e,t){\"use strict\";function n(e){var t=void 0,o=void 0,i=void 0;for(t=0;te.position?e.node.classList.add(\"aos-animate\"):\"undefined\"!=typeof o&&(\"false\"===o||!n&&\"true\"!==o)&&e.node.classList.remove(\"aos-animate\")},o=function(e,t){var o=window.pageYOffset,i=window.innerHeight;e.forEach(function(e,r){n(e,i+o,t)})};t.default=o},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(12),r=o(i),a=function(e,t){return e.forEach(function(e,n){e.node.classList.add(\"aos-init\"),e.position=(0,r.default)(e.node,t.offset)}),e};t.default=a},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(13),r=o(i),a=function(e,t){var n=0,o=0,i=window.innerHeight,a={offset:e.getAttribute(\"data-aos-offset\"),anchor:e.getAttribute(\"data-aos-anchor\"),anchorPlacement:e.getAttribute(\"data-aos-anchor-placement\")};switch(a.offset&&!isNaN(a.offset)&&(o=parseInt(a.offset)),a.anchor&&document.querySelectorAll(a.anchor)&&(e=document.querySelectorAll(a.anchor)[0]),n=(0,r.default)(e).top,a.anchorPlacement){case\"top-bottom\":break;case\"center-bottom\":n+=e.offsetHeight/2;break;case\"bottom-bottom\":n+=e.offsetHeight;break;case\"top-center\":n+=i/2;break;case\"bottom-center\":n+=i/2+e.offsetHeight;break;case\"center-center\":n+=i/2+e.offsetHeight/2;break;case\"top-top\":n+=i;break;case\"bottom-top\":n+=e.offsetHeight+i;break;case\"center-top\":n+=e.offsetHeight/2+i}return a.anchorPlacement||a.offset||isNaN(t)||(o=t),n+o};t.default=a},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(e){for(var t=0,n=0;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)t+=e.offsetLeft-(\"BODY\"!=e.tagName?e.scrollLeft:0),n+=e.offsetTop-(\"BODY\"!=e.tagName?e.scrollTop:0),e=e.offsetParent;return{top:n,left:t}};t.default=n},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(e){return e=e||document.querySelectorAll(\"[data-aos]\"),Array.prototype.map.call(e,function(e){return{node:e}})};t.default=n}])});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYW9zL2Rpc3QvYW9zLmpzP2Y1YWYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZSxLQUFpRCxvQkFBb0IsU0FBcUcsQ0FBQyxpQkFBaUIsbUJBQW1CLGNBQWMsNEJBQTRCLFlBQVksVUFBVSxpQkFBaUIsZ0VBQWdFLFNBQVMsb0NBQW9DLGtCQUFrQixhQUFhLGNBQWMsMEJBQTBCLFdBQVcsaUNBQWlDLFlBQVksbUJBQW1CLEtBQUssbUJBQW1CLHNFQUFzRSxTQUFTLGlJQUFpSSw0SkFBNEosY0FBYyw4REFBOEQscUVBQXFFLGNBQWMsc0JBQXNCLGNBQWMsd0JBQXdCLGtLQUFrSyxFQUFFLGVBQWUsa0pBQWtKLGVBQWUsMkJBQTJCLGlDQUFpQyxxckJBQXFyQixNQUFNLG9EQUFvRCxNQUFNLG1OQUFtTix3QkFBd0Isa0ZBQWtGLFdBQVcsZ0NBQWdDLGdCQUFnQixtQkFBbUIsYUFBYSxhQUFhLGtCQUFrQixjQUFjLFlBQVkscUNBQXFDLGNBQWMsc0NBQXNDLGNBQWMsc0JBQXNCLG9CQUFvQixjQUFjLGdCQUFnQixzQ0FBc0MsYUFBYSxVQUFVLDRDQUE0QyxjQUFjLHlDQUF5QyxhQUFhLCtDQUErQyxhQUFhLDJCQUEyQixhQUFhLGlCQUFpQiw2QkFBNkIsMEJBQTBCLG1DQUFtQyx5Q0FBeUMsbUNBQW1DLCtDQUErQyx5SUFBeUksa0JBQWtCLGNBQWMsK0NBQStDLG9GQUFvRiwrQkFBK0IsRUFBRSxjQUFjLDZDQUE2Qyx3Q0FBd0MsY0FBYyw4REFBOEQsY0FBYyw2RUFBNkUsY0FBYywrQkFBK0IsaUJBQWlCLFNBQVMsaURBQWlELGNBQWMsd0NBQXdDLGtCQUFrQixnQkFBZ0IsdURBQXVELDhFQUE4RSxnQkFBZ0IsYUFBYSxvR0FBb0csbVpBQW1aLHFCQUFxQixZQUFZLG9CQUFvQixZQUFZLElBQUksZUFBZSxhQUFhLGFBQWEsa0JBQWtCLGNBQWMsWUFBWSxxQ0FBcUMsY0FBYyxzQ0FBc0MsY0FBYyxzQkFBc0Isb0JBQW9CLGNBQWMsZ0JBQWdCLHNDQUFzQyxhQUFhLFVBQVUsNENBQTRDLGNBQWMseUNBQXlDLGFBQWEsK0NBQStDLGFBQWEsMkJBQTJCLGFBQWEsaUJBQWlCLDZCQUE2QiwwQkFBMEIsbUNBQW1DLHlDQUF5QyxtQ0FBbUMsK0NBQStDLHlJQUF5SSxjQUFjLDZDQUE2Qyx3Q0FBd0MsY0FBYyw4REFBOEQsY0FBYyw2RUFBNkUsY0FBYywrQkFBK0IsaUJBQWlCLFNBQVMsaURBQWlELGNBQWMsd0NBQXdDLGtCQUFrQixnQkFBZ0IsdURBQXVELDhFQUE4RSxnQkFBZ0IsYUFBYSxvR0FBb0csbVpBQW1aLHFCQUFxQixZQUFZLG9CQUFvQixZQUFZLElBQUksZUFBZSxhQUFhLGNBQWMsK0JBQStCLFFBQVEsV0FBVyxNQUFNLDRDQUE0Qyx3Q0FBd0MsU0FBUyxhQUFhLDBGQUEwRixhQUFhLFlBQVksZ0JBQWdCLHVDQUF1QyxpQ0FBaUMsd0NBQXdDLEVBQUUsY0FBYyx5QkFBeUIsMEdBQTBHLG1CQUFtQixFQUFFLHNDQUFzQyxTQUFTLEVBQUUsbUJBQW1CLFdBQVcsdUJBQXVCLGVBQWUsYUFBYSxnQkFBZ0IsOEVBQThFLGFBQWEsK0RBQStELHNDQUFzQyxTQUFTLEVBQUUsaUJBQWlCLGdCQUFnQixZQUFZLFdBQVcsS0FBSyxXQUFXLCtHQUErRyx1QkFBdUIsd0NBQXdDLDZ6SEFBNnpILGFBQWEsVUFBVSxhQUFhLDZCQUE2QixVQUFVLDZDQUE2QyxFQUFFLDhCQUE4QixVQUFVLDZDQUE2QyxFQUFFLDhCQUE4QixxQ0FBcUMsS0FBSyxHQUFHLGdCQUFnQixlQUFlLGFBQWEsc0NBQXNDLFNBQVMsRUFBRSxzQkFBc0IsMkNBQTJDLDhJQUE4SSxpQkFBaUIsOENBQThDLHdCQUF3QixXQUFXLEdBQUcsWUFBWSxpQkFBaUIsYUFBYSxjQUFjLDBCQUEwQixXQUFXLHNDQUFzQyxTQUFTLEVBQUUsbUNBQW1DLCtCQUErQiwyRUFBMkUsS0FBSyxZQUFZLGlCQUFpQixhQUFhLGNBQWMsMEJBQTBCLFdBQVcsc0NBQXNDLFNBQVMsRUFBRSxtQ0FBbUMsb0NBQW9DLCtJQUErSSw4TEFBOEwsdUJBQXVCLHdDQUF3QyxNQUFNLHNDQUFzQyxNQUFNLHdCQUF3QixNQUFNLDBDQUEwQyxNQUFNLDRDQUE0QyxNQUFNLG1CQUFtQixNQUFNLHFDQUFxQyxNQUFNLHVDQUF1Qyx5REFBeUQsWUFBWSxlQUFlLGFBQWEsc0NBQXNDLFNBQVMsRUFBRSxrQkFBa0IsZ0JBQWdCLDZDQUE2QyxzSEFBc0gsT0FBTyxlQUFlLFlBQVksZUFBZSxhQUFhLHNDQUFzQyxTQUFTLEVBQUUsa0JBQWtCLDJGQUEyRixPQUFPLFFBQVEsR0FBRyxZQUFZLEdBQUciLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYW9zL2Rpc3QvYW9zLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKGUsdCl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9dCgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW10sdCk6XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0cy5BT1M9dCgpOmUuQU9TPXQoKX0odGhpcyxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtmdW5jdGlvbiB0KG8pe2lmKG5bb10pcmV0dXJuIG5bb10uZXhwb3J0czt2YXIgaT1uW29dPXtleHBvcnRzOnt9LGlkOm8sbG9hZGVkOiExfTtyZXR1cm4gZVtvXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyx0KSxpLmxvYWRlZD0hMCxpLmV4cG9ydHN9dmFyIG49e307cmV0dXJuIHQubT1lLHQuYz1uLHQucD1cImRpc3QvXCIsdCgwKX0oW2Z1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBvKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX12YXIgaT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciBvIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sbykmJihlW29dPW5bb10pfXJldHVybiBlfSxyPW4oMSksYT0obyhyKSxuKDYpKSx1PW8oYSksYz1uKDcpLHM9byhjKSxmPW4oOCksZD1vKGYpLGw9big5KSxwPW8obCksbT1uKDEwKSxiPW8obSksdj1uKDExKSx5PW8odiksZz1uKDE0KSxoPW8oZyksdz1bXSxrPSExLHg9e29mZnNldDoxMjAsZGVsYXk6MCxlYXNpbmc6XCJlYXNlXCIsZHVyYXRpb246NDAwLGRpc2FibGU6ITEsb25jZTohMSxzdGFydEV2ZW50OlwiRE9NQ29udGVudExvYWRlZFwiLHRocm90dGxlRGVsYXk6OTksZGVib3VuY2VEZWxheTo1MCxkaXNhYmxlTXV0YXRpb25PYnNlcnZlcjohMX0saj1mdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoZSYmKGs9ITApLGspcmV0dXJuIHc9KDAseS5kZWZhdWx0KSh3LHgpLCgwLGIuZGVmYXVsdCkodyx4Lm9uY2UpLHd9LE89ZnVuY3Rpb24oKXt3PSgwLGguZGVmYXVsdCkoKSxqKCl9LE09ZnVuY3Rpb24oKXt3LmZvckVhY2goZnVuY3Rpb24oZSx0KXtlLm5vZGUucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1hb3NcIiksZS5ub2RlLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtYW9zLWVhc2luZ1wiKSxlLm5vZGUucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1hb3MtZHVyYXRpb25cIiksZS5ub2RlLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtYW9zLWRlbGF5XCIpfSl9LFM9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0hMHx8XCJtb2JpbGVcIj09PWUmJnAuZGVmYXVsdC5tb2JpbGUoKXx8XCJwaG9uZVwiPT09ZSYmcC5kZWZhdWx0LnBob25lKCl8fFwidGFibGV0XCI9PT1lJiZwLmRlZmF1bHQudGFibGV0KCl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUoKT09PSEwfSxfPWZ1bmN0aW9uKGUpe3g9aSh4LGUpLHc9KDAsaC5kZWZhdWx0KSgpO3ZhciB0PWRvY3VtZW50LmFsbCYmIXdpbmRvdy5hdG9iO3JldHVybiBTKHguZGlzYWJsZSl8fHQ/TSgpOih4LmRpc2FibGVNdXRhdGlvbk9ic2VydmVyfHxkLmRlZmF1bHQuaXNTdXBwb3J0ZWQoKXx8KGNvbnNvbGUuaW5mbygnXFxuICAgICAgYW9zOiBNdXRhdGlvbk9ic2VydmVyIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBicm93c2VyLFxcbiAgICAgIGNvZGUgbXV0YXRpb25zIG9ic2VydmluZyBoYXMgYmVlbiBkaXNhYmxlZC5cXG4gICAgICBZb3UgbWF5IGhhdmUgdG8gY2FsbCBcInJlZnJlc2hIYXJkKClcIiBieSB5b3Vyc2VsZi5cXG4gICAgJykseC5kaXNhYmxlTXV0YXRpb25PYnNlcnZlcj0hMCksZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIikuc2V0QXR0cmlidXRlKFwiZGF0YS1hb3MtZWFzaW5nXCIseC5lYXNpbmcpLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJib2R5XCIpLnNldEF0dHJpYnV0ZShcImRhdGEtYW9zLWR1cmF0aW9uXCIseC5kdXJhdGlvbiksZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIikuc2V0QXR0cmlidXRlKFwiZGF0YS1hb3MtZGVsYXlcIix4LmRlbGF5KSxcIkRPTUNvbnRlbnRMb2FkZWRcIj09PXguc3RhcnRFdmVudCYmW1wiY29tcGxldGVcIixcImludGVyYWN0aXZlXCJdLmluZGV4T2YoZG9jdW1lbnQucmVhZHlTdGF0ZSk+LTE/aighMCk6XCJsb2FkXCI9PT14LnN0YXJ0RXZlbnQ/d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoeC5zdGFydEV2ZW50LGZ1bmN0aW9uKCl7aighMCl9KTpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHguc3RhcnRFdmVudCxmdW5jdGlvbigpe2ooITApfSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwoMCxzLmRlZmF1bHQpKGoseC5kZWJvdW5jZURlbGF5LCEwKSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJvcmllbnRhdGlvbmNoYW5nZVwiLCgwLHMuZGVmYXVsdCkoaix4LmRlYm91bmNlRGVsYXksITApKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCgwLHUuZGVmYXVsdCkoZnVuY3Rpb24oKXsoMCxiLmRlZmF1bHQpKHcseC5vbmNlKX0seC50aHJvdHRsZURlbGF5KSkseC5kaXNhYmxlTXV0YXRpb25PYnNlcnZlcnx8ZC5kZWZhdWx0LnJlYWR5KFwiW2RhdGEtYW9zXVwiLE8pLHcpfTtlLmV4cG9ydHM9e2luaXQ6XyxyZWZyZXNoOmoscmVmcmVzaEhhcmQ6T319LGZ1bmN0aW9uKGUsdCl7fSwsLCwsZnVuY3Rpb24oZSx0KXsoZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbihlLHQsbil7ZnVuY3Rpb24gbyh0KXt2YXIgbj1iLG89djtyZXR1cm4gYj12PXZvaWQgMCxrPXQsZz1lLmFwcGx5KG8sbil9ZnVuY3Rpb24gcihlKXtyZXR1cm4gaz1lLGg9c2V0VGltZW91dChmLHQpLE0/byhlKTpnfWZ1bmN0aW9uIGEoZSl7dmFyIG49ZS13LG89ZS1rLGk9dC1uO3JldHVybiBTP2ooaSx5LW8pOml9ZnVuY3Rpb24gYyhlKXt2YXIgbj1lLXcsbz1lLWs7cmV0dXJuIHZvaWQgMD09PXd8fG4+PXR8fG48MHx8UyYmbz49eX1mdW5jdGlvbiBmKCl7dmFyIGU9TygpO3JldHVybiBjKGUpP2QoZSk6dm9pZChoPXNldFRpbWVvdXQoZixhKGUpKSl9ZnVuY3Rpb24gZChlKXtyZXR1cm4gaD12b2lkIDAsXyYmYj9vKGUpOihiPXY9dm9pZCAwLGcpfWZ1bmN0aW9uIGwoKXt2b2lkIDAhPT1oJiZjbGVhclRpbWVvdXQoaCksaz0wLGI9dz12PWg9dm9pZCAwfWZ1bmN0aW9uIHAoKXtyZXR1cm4gdm9pZCAwPT09aD9nOmQoTygpKX1mdW5jdGlvbiBtKCl7dmFyIGU9TygpLG49YyhlKTtpZihiPWFyZ3VtZW50cyx2PXRoaXMsdz1lLG4pe2lmKHZvaWQgMD09PWgpcmV0dXJuIHIodyk7aWYoUylyZXR1cm4gaD1zZXRUaW1lb3V0KGYsdCksbyh3KX1yZXR1cm4gdm9pZCAwPT09aCYmKGg9c2V0VGltZW91dChmLHQpKSxnfXZhciBiLHYseSxnLGgsdyxrPTAsTT0hMSxTPSExLF89ITA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKHMpO3JldHVybiB0PXUodCl8fDAsaShuKSYmKE09ISFuLmxlYWRpbmcsUz1cIm1heFdhaXRcImluIG4seT1TP3godShuLm1heFdhaXQpfHwwLHQpOnksXz1cInRyYWlsaW5nXCJpbiBuPyEhbi50cmFpbGluZzpfKSxtLmNhbmNlbD1sLG0uZmx1c2g9cCxtfWZ1bmN0aW9uIG8oZSx0LG8pe3ZhciByPSEwLGE9ITA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKHMpO3JldHVybiBpKG8pJiYocj1cImxlYWRpbmdcImluIG8/ISFvLmxlYWRpbmc6cixhPVwidHJhaWxpbmdcImluIG8/ISFvLnRyYWlsaW5nOmEpLG4oZSx0LHtsZWFkaW5nOnIsbWF4V2FpdDp0LHRyYWlsaW5nOmF9KX1mdW5jdGlvbiBpKGUpe3ZhciB0PVwidW5kZWZpbmVkXCI9PXR5cGVvZiBlP1widW5kZWZpbmVkXCI6YyhlKTtyZXR1cm4hIWUmJihcIm9iamVjdFwiPT10fHxcImZ1bmN0aW9uXCI9PXQpfWZ1bmN0aW9uIHIoZSl7cmV0dXJuISFlJiZcIm9iamVjdFwiPT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIGU/XCJ1bmRlZmluZWRcIjpjKGUpKX1mdW5jdGlvbiBhKGUpe3JldHVyblwic3ltYm9sXCI9PShcInVuZGVmaW5lZFwiPT10eXBlb2YgZT9cInVuZGVmaW5lZFwiOmMoZSkpfHxyKGUpJiZrLmNhbGwoZSk9PWR9ZnVuY3Rpb24gdShlKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSlyZXR1cm4gZTtpZihhKGUpKXJldHVybiBmO2lmKGkoZSkpe3ZhciB0PVwiZnVuY3Rpb25cIj09dHlwZW9mIGUudmFsdWVPZj9lLnZhbHVlT2YoKTplO2U9aSh0KT90K1wiXCI6dH1pZihcInN0cmluZ1wiIT10eXBlb2YgZSlyZXR1cm4gMD09PWU/ZTorZTtlPWUucmVwbGFjZShsLFwiXCIpO3ZhciBuPW0udGVzdChlKTtyZXR1cm4gbnx8Yi50ZXN0KGUpP3YoZS5zbGljZSgyKSxuPzI6OCk6cC50ZXN0KGUpP2Y6K2V9dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZcInN5bWJvbFwiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/XCJzeW1ib2xcIjp0eXBlb2YgZX0scz1cIkV4cGVjdGVkIGEgZnVuY3Rpb25cIixmPU5hTixkPVwiW29iamVjdCBTeW1ib2xdXCIsbD0vXlxccyt8XFxzKyQvZyxwPS9eWy0rXTB4WzAtOWEtZl0rJC9pLG09L14wYlswMV0rJC9pLGI9L14wb1swLTddKyQvaSx2PXBhcnNlSW50LHk9XCJvYmplY3RcIj09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0P1widW5kZWZpbmVkXCI6Yyh0KSkmJnQmJnQuT2JqZWN0PT09T2JqZWN0JiZ0LGc9XCJvYmplY3RcIj09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBzZWxmP1widW5kZWZpbmVkXCI6YyhzZWxmKSkmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLGg9eXx8Z3x8RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpLHc9T2JqZWN0LnByb3RvdHlwZSxrPXcudG9TdHJpbmcseD1NYXRoLm1heCxqPU1hdGgubWluLE89ZnVuY3Rpb24oKXtyZXR1cm4gaC5EYXRlLm5vdygpfTtlLmV4cG9ydHM9b30pLmNhbGwodCxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpKX0sZnVuY3Rpb24oZSx0KXsoZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbihlLHQsbil7ZnVuY3Rpb24gaSh0KXt2YXIgbj1iLG89djtyZXR1cm4gYj12PXZvaWQgMCxPPXQsZz1lLmFwcGx5KG8sbil9ZnVuY3Rpb24gcihlKXtyZXR1cm4gTz1lLGg9c2V0VGltZW91dChmLHQpLE0/aShlKTpnfWZ1bmN0aW9uIHUoZSl7dmFyIG49ZS13LG89ZS1PLGk9dC1uO3JldHVybiBTP3goaSx5LW8pOml9ZnVuY3Rpb24gcyhlKXt2YXIgbj1lLXcsbz1lLU87cmV0dXJuIHZvaWQgMD09PXd8fG4+PXR8fG48MHx8UyYmbz49eX1mdW5jdGlvbiBmKCl7dmFyIGU9aigpO3JldHVybiBzKGUpP2QoZSk6dm9pZChoPXNldFRpbWVvdXQoZix1KGUpKSl9ZnVuY3Rpb24gZChlKXtyZXR1cm4gaD12b2lkIDAsXyYmYj9pKGUpOihiPXY9dm9pZCAwLGcpfWZ1bmN0aW9uIGwoKXt2b2lkIDAhPT1oJiZjbGVhclRpbWVvdXQoaCksTz0wLGI9dz12PWg9dm9pZCAwfWZ1bmN0aW9uIHAoKXtyZXR1cm4gdm9pZCAwPT09aD9nOmQoaigpKX1mdW5jdGlvbiBtKCl7dmFyIGU9aigpLG49cyhlKTtpZihiPWFyZ3VtZW50cyx2PXRoaXMsdz1lLG4pe2lmKHZvaWQgMD09PWgpcmV0dXJuIHIodyk7aWYoUylyZXR1cm4gaD1zZXRUaW1lb3V0KGYsdCksaSh3KX1yZXR1cm4gdm9pZCAwPT09aCYmKGg9c2V0VGltZW91dChmLHQpKSxnfXZhciBiLHYseSxnLGgsdyxPPTAsTT0hMSxTPSExLF89ITA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKGMpO3JldHVybiB0PWEodCl8fDAsbyhuKSYmKE09ISFuLmxlYWRpbmcsUz1cIm1heFdhaXRcImluIG4seT1TP2soYShuLm1heFdhaXQpfHwwLHQpOnksXz1cInRyYWlsaW5nXCJpbiBuPyEhbi50cmFpbGluZzpfKSxtLmNhbmNlbD1sLG0uZmx1c2g9cCxtfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9XCJ1bmRlZmluZWRcIj09dHlwZW9mIGU/XCJ1bmRlZmluZWRcIjp1KGUpO3JldHVybiEhZSYmKFwib2JqZWN0XCI9PXR8fFwiZnVuY3Rpb25cIj09dCl9ZnVuY3Rpb24gaShlKXtyZXR1cm4hIWUmJlwib2JqZWN0XCI9PShcInVuZGVmaW5lZFwiPT10eXBlb2YgZT9cInVuZGVmaW5lZFwiOnUoZSkpfWZ1bmN0aW9uIHIoZSl7cmV0dXJuXCJzeW1ib2xcIj09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBlP1widW5kZWZpbmVkXCI6dShlKSl8fGkoZSkmJncuY2FsbChlKT09Zn1mdW5jdGlvbiBhKGUpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXJldHVybiBlO2lmKHIoZSkpcmV0dXJuIHM7aWYobyhlKSl7dmFyIHQ9XCJmdW5jdGlvblwiPT10eXBlb2YgZS52YWx1ZU9mP2UudmFsdWVPZigpOmU7ZT1vKHQpP3QrXCJcIjp0fWlmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybiAwPT09ZT9lOitlO2U9ZS5yZXBsYWNlKGQsXCJcIik7dmFyIG49cC50ZXN0KGUpO3JldHVybiBufHxtLnRlc3QoZSk/YihlLnNsaWNlKDIpLG4/Mjo4KTpsLnRlc3QoZSk/czorZX12YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSxjPVwiRXhwZWN0ZWQgYSBmdW5jdGlvblwiLHM9TmFOLGY9XCJbb2JqZWN0IFN5bWJvbF1cIixkPS9eXFxzK3xcXHMrJC9nLGw9L15bLStdMHhbMC05YS1mXSskL2kscD0vXjBiWzAxXSskL2ksbT0vXjBvWzAtN10rJC9pLGI9cGFyc2VJbnQsdj1cIm9iamVjdFwiPT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIHQ/XCJ1bmRlZmluZWRcIjp1KHQpKSYmdCYmdC5PYmplY3Q9PT1PYmplY3QmJnQseT1cIm9iamVjdFwiPT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIHNlbGY/XCJ1bmRlZmluZWRcIjp1KHNlbGYpKSYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsZz12fHx5fHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCksaD1PYmplY3QucHJvdG90eXBlLHc9aC50b1N0cmluZyxrPU1hdGgubWF4LHg9TWF0aC5taW4saj1mdW5jdGlvbigpe3JldHVybiBnLkRhdGUubm93KCl9O2UuZXhwb3J0cz1ufSkuY2FsbCh0LGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCkpfSxmdW5jdGlvbihlLHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oZSl7dmFyIHQ9dm9pZCAwLG89dm9pZCAwLGk9dm9pZCAwO2Zvcih0PTA7dDxlLmxlbmd0aDt0Kz0xKXtpZihvPWVbdF0sby5kYXRhc2V0JiZvLmRhdGFzZXQuYW9zKXJldHVybiEwO2lmKGk9by5jaGlsZHJlbiYmbihvLmNoaWxkcmVuKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBvKCl7cmV0dXJuIHdpbmRvdy5NdXRhdGlvbk9ic2VydmVyfHx3aW5kb3cuV2ViS2l0TXV0YXRpb25PYnNlcnZlcnx8d2luZG93Lk1vek11dGF0aW9uT2JzZXJ2ZXJ9ZnVuY3Rpb24gaSgpe3JldHVybiEhbygpfWZ1bmN0aW9uIHIoZSx0KXt2YXIgbj13aW5kb3cuZG9jdW1lbnQsaT1vKCkscj1uZXcgaShhKTt1PXQsci5vYnNlcnZlKG4uZG9jdW1lbnRFbGVtZW50LHtjaGlsZExpc3Q6ITAsc3VidHJlZTohMCxyZW1vdmVkTm9kZXM6ITB9KX1mdW5jdGlvbiBhKGUpe2UmJmUuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlLmFkZGVkTm9kZXMpLG89QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZS5yZW1vdmVkTm9kZXMpLGk9dC5jb25jYXQobyk7aWYobihpKSlyZXR1cm4gdSgpfSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIHU9ZnVuY3Rpb24oKXt9O3QuZGVmYXVsdD17aXNTdXBwb3J0ZWQ6aSxyZWFkeTpyfX0sZnVuY3Rpb24oZSx0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBvKCl7cmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnR8fG5hdmlnYXRvci52ZW5kb3J8fHdpbmRvdy5vcGVyYXx8XCJcIn1PYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIG89dFtuXTtvLmVudW1lcmFibGU9by5lbnVtZXJhYmxlfHwhMSxvLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBvJiYoby53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsby5rZXksbyl9fXJldHVybiBmdW5jdGlvbih0LG4sbyl7cmV0dXJuIG4mJmUodC5wcm90b3R5cGUsbiksbyYmZSh0LG8pLHR9fSgpLHI9LyhhbmRyb2lkfGJiXFxkK3xtZWVnbykuK21vYmlsZXxhdmFudGdvfGJhZGFcXC98YmxhY2tiZXJyeXxibGF6ZXJ8Y29tcGFsfGVsYWluZXxmZW5uZWN8aGlwdG9wfGllbW9iaWxlfGlwKGhvbmV8b2QpfGlyaXN8a2luZGxlfGxnZSB8bWFlbW98bWlkcHxtbXB8bW9iaWxlLitmaXJlZm94fG5ldGZyb250fG9wZXJhIG0ob2J8aW4paXxwYWxtKCBvcyk/fHBob25lfHAoaXhpfHJlKVxcL3xwbHVja2VyfHBvY2tldHxwc3B8c2VyaWVzKDR8NikwfHN5bWJpYW58dHJlb3x1cFxcLihicm93c2VyfGxpbmspfHZvZGFmb25lfHdhcHx3aW5kb3dzIGNlfHhkYXx4aWluby9pLGE9LzEyMDd8NjMxMHw2NTkwfDNnc298NHRocHw1MFsxLTZdaXw3NzBzfDgwMnN8YSB3YXxhYmFjfGFjKGVyfG9vfHNcXC0pfGFpKGtvfHJuKXxhbChhdnxjYXxjbyl8YW1vaXxhbihleHxueXx5dyl8YXB0dXxhcihjaHxnbyl8YXModGV8dXMpfGF0dHd8YXUoZGl8XFwtbXxyIHxzICl8YXZhbnxiZShja3xsbHxucSl8YmkobGJ8cmQpfGJsKGFjfGF6KXxicihlfHYpd3xidW1ifGJ3XFwtKG58dSl8YzU1XFwvfGNhcGl8Y2N3YXxjZG1cXC18Y2VsbHxjaHRtfGNsZGN8Y21kXFwtfGNvKG1wfG5kKXxjcmF3fGRhKGl0fGxsfG5nKXxkYnRlfGRjXFwtc3xkZXZpfGRpY2F8ZG1vYnxkbyhjfHApb3xkcygxMnxcXC1kKXxlbCg0OXxhaSl8ZW0obDJ8dWwpfGVyKGljfGswKXxlc2w4fGV6KFs0LTddMHxvc3x3YXx6ZSl8ZmV0Y3xmbHkoXFwtfF8pfGcxIHV8ZzU2MHxnZW5lfGdmXFwtNXxnXFwtbW98Z28oXFwud3xvZCl8Z3IoYWR8dW4pfGhhaWV8aGNpdHxoZFxcLShtfHB8dCl8aGVpXFwtfGhpKHB0fHRhKXxocCggaXxpcCl8aHNcXC1jfGh0KGMoXFwtfCB8X3xhfGd8cHxzfHQpfHRwKXxodShhd3x0Yyl8aVxcLSgyMHxnb3xtYSl8aTIzMHxpYWMoIHxcXC18XFwvKXxpYnJvfGlkZWF8aWcwMXxpa29tfGltMWt8aW5ub3xpcGFxfGlyaXN8amEodHx2KWF8amJyb3xqZW11fGppZ3N8a2RkaXxrZWppfGtndCggfFxcLyl8a2xvbnxrcHQgfGt3Y1xcLXxreW8oY3xrKXxsZShub3x4aSl8bGcoIGd8XFwvKGt8bHx1KXw1MHw1NHxcXC1bYS13XSl8bGlid3xseW54fG0xXFwtd3xtM2dhfG01MFxcL3xtYSh0ZXx1aXx4byl8bWMoMDF8MjF8Y2EpfG1cXC1jcnxtZShyY3xyaSl8bWkobzh8b2F8dHMpfG1tZWZ8bW8oMDF8MDJ8Yml8ZGV8ZG98dChcXC18IHxvfHYpfHp6KXxtdCg1MHxwMXx2ICl8bXdicHxteXdhfG4xMFswLTJdfG4yMFsyLTNdfG4zMCgwfDIpfG41MCgwfDJ8NSl8bjcoMCgwfDEpfDEwKXxuZSgoY3xtKVxcLXxvbnx0Znx3Znx3Z3x3dCl8bm9rKDZ8aSl8bnpwaHxvMmltfG9wKHRpfHd2KXxvcmFufG93ZzF8cDgwMHxwYW4oYXxkfHQpfHBkeGd8cGcoMTN8XFwtKFsxLThdfGMpKXxwaGlsfHBpcmV8cGwoYXl8dWMpfHBuXFwtMnxwbyhja3xydHxzZSl8cHJveHxwc2lvfHB0XFwtZ3xxYVxcLWF8cWMoMDd8MTJ8MjF8MzJ8NjB8XFwtWzItN118aVxcLSl8cXRla3xyMzgwfHI2MDB8cmFrc3xyaW05fHJvKHZlfHpvKXxzNTVcXC98c2EoZ2V8bWF8bW18bXN8bnl8dmEpfHNjKDAxfGhcXC18b298cFxcLSl8c2RrXFwvfHNlKGMoXFwtfDB8MSl8NDd8bWN8bmR8cmkpfHNnaFxcLXxzaGFyfHNpZShcXC18bSl8c2tcXC0wfHNsKDQ1fGlkKXxzbShhbHxhcnxiM3xpdHx0NSl8c28oZnR8bnkpfHNwKDAxfGhcXC18dlxcLXx2ICl8c3koMDF8bWIpfHQyKDE4fDUwKXx0NigwMHwxMHwxOCl8dGEoZ3R8bGspfHRjbFxcLXx0ZGdcXC18dGVsKGl8bSl8dGltXFwtfHRcXC1tb3x0byhwbHxzaCl8dHMoNzB8bVxcLXxtM3xtNSl8dHhcXC05fHVwKFxcLmJ8ZzF8c2kpfHV0c3R8djQwMHx2NzUwfHZlcml8dmkocmd8dGUpfHZrKDQwfDVbMC0zXXxcXC12KXx2bTQwfHZvZGF8dnVsY3x2eCg1Mnw1M3w2MHw2MXw3MHw4MHw4MXw4M3w4NXw5OCl8dzNjKFxcLXwgKXx3ZWJjfHdoaXR8d2koZyB8bmN8bncpfHdtbGJ8d29udXx4NzAwfHlhc1xcLXx5b3VyfHpldG98enRlXFwtL2ksdT0vKGFuZHJvaWR8YmJcXGQrfG1lZWdvKS4rbW9iaWxlfGF2YW50Z298YmFkYVxcL3xibGFja2JlcnJ5fGJsYXplcnxjb21wYWx8ZWxhaW5lfGZlbm5lY3xoaXB0b3B8aWVtb2JpbGV8aXAoaG9uZXxvZCl8aXJpc3xraW5kbGV8bGdlIHxtYWVtb3xtaWRwfG1tcHxtb2JpbGUuK2ZpcmVmb3h8bmV0ZnJvbnR8b3BlcmEgbShvYnxpbilpfHBhbG0oIG9zKT98cGhvbmV8cChpeGl8cmUpXFwvfHBsdWNrZXJ8cG9ja2V0fHBzcHxzZXJpZXMoNHw2KTB8c3ltYmlhbnx0cmVvfHVwXFwuKGJyb3dzZXJ8bGluayl8dm9kYWZvbmV8d2FwfHdpbmRvd3MgY2V8eGRhfHhpaW5vfGFuZHJvaWR8aXBhZHxwbGF5Ym9va3xzaWxrL2ksYz0vMTIwN3w2MzEwfDY1OTB8M2dzb3w0dGhwfDUwWzEtNl1pfDc3MHN8ODAyc3xhIHdhfGFiYWN8YWMoZXJ8b298c1xcLSl8YWkoa298cm4pfGFsKGF2fGNhfGNvKXxhbW9pfGFuKGV4fG55fHl3KXxhcHR1fGFyKGNofGdvKXxhcyh0ZXx1cyl8YXR0d3xhdShkaXxcXC1tfHIgfHMgKXxhdmFufGJlKGNrfGxsfG5xKXxiaShsYnxyZCl8YmwoYWN8YXopfGJyKGV8dil3fGJ1bWJ8YndcXC0obnx1KXxjNTVcXC98Y2FwaXxjY3dhfGNkbVxcLXxjZWxsfGNodG18Y2xkY3xjbWRcXC18Y28obXB8bmQpfGNyYXd8ZGEoaXR8bGx8bmcpfGRidGV8ZGNcXC1zfGRldml8ZGljYXxkbW9ifGRvKGN8cClvfGRzKDEyfFxcLWQpfGVsKDQ5fGFpKXxlbShsMnx1bCl8ZXIoaWN8azApfGVzbDh8ZXooWzQtN10wfG9zfHdhfHplKXxmZXRjfGZseShcXC18Xyl8ZzEgdXxnNTYwfGdlbmV8Z2ZcXC01fGdcXC1tb3xnbyhcXC53fG9kKXxncihhZHx1bil8aGFpZXxoY2l0fGhkXFwtKG18cHx0KXxoZWlcXC18aGkocHR8dGEpfGhwKCBpfGlwKXxoc1xcLWN8aHQoYyhcXC18IHxffGF8Z3xwfHN8dCl8dHApfGh1KGF3fHRjKXxpXFwtKDIwfGdvfG1hKXxpMjMwfGlhYyggfFxcLXxcXC8pfGlicm98aWRlYXxpZzAxfGlrb218aW0xa3xpbm5vfGlwYXF8aXJpc3xqYSh0fHYpYXxqYnJvfGplbXV8amlnc3xrZGRpfGtlaml8a2d0KCB8XFwvKXxrbG9ufGtwdCB8a3djXFwtfGt5byhjfGspfGxlKG5vfHhpKXxsZyggZ3xcXC8oa3xsfHUpfDUwfDU0fFxcLVthLXddKXxsaWJ3fGx5bnh8bTFcXC13fG0zZ2F8bTUwXFwvfG1hKHRlfHVpfHhvKXxtYygwMXwyMXxjYSl8bVxcLWNyfG1lKHJjfHJpKXxtaShvOHxvYXx0cyl8bW1lZnxtbygwMXwwMnxiaXxkZXxkb3x0KFxcLXwgfG98dil8enopfG10KDUwfHAxfHYgKXxtd2JwfG15d2F8bjEwWzAtMl18bjIwWzItM118bjMwKDB8Mil8bjUwKDB8Mnw1KXxuNygwKDB8MSl8MTApfG5lKChjfG0pXFwtfG9ufHRmfHdmfHdnfHd0KXxub2soNnxpKXxuenBofG8yaW18b3AodGl8d3YpfG9yYW58b3dnMXxwODAwfHBhbihhfGR8dCl8cGR4Z3xwZygxM3xcXC0oWzEtOF18YykpfHBoaWx8cGlyZXxwbChheXx1Yyl8cG5cXC0yfHBvKGNrfHJ0fHNlKXxwcm94fHBzaW98cHRcXC1nfHFhXFwtYXxxYygwN3wxMnwyMXwzMnw2MHxcXC1bMi03XXxpXFwtKXxxdGVrfHIzODB8cjYwMHxyYWtzfHJpbTl8cm8odmV8em8pfHM1NVxcL3xzYShnZXxtYXxtbXxtc3xueXx2YSl8c2MoMDF8aFxcLXxvb3xwXFwtKXxzZGtcXC98c2UoYyhcXC18MHwxKXw0N3xtY3xuZHxyaSl8c2doXFwtfHNoYXJ8c2llKFxcLXxtKXxza1xcLTB8c2woNDV8aWQpfHNtKGFsfGFyfGIzfGl0fHQ1KXxzbyhmdHxueSl8c3AoMDF8aFxcLXx2XFwtfHYgKXxzeSgwMXxtYil8dDIoMTh8NTApfHQ2KDAwfDEwfDE4KXx0YShndHxsayl8dGNsXFwtfHRkZ1xcLXx0ZWwoaXxtKXx0aW1cXC18dFxcLW1vfHRvKHBsfHNoKXx0cyg3MHxtXFwtfG0zfG01KXx0eFxcLTl8dXAoXFwuYnxnMXxzaSl8dXRzdHx2NDAwfHY3NTB8dmVyaXx2aShyZ3x0ZSl8dmsoNDB8NVswLTNdfFxcLXYpfHZtNDB8dm9kYXx2dWxjfHZ4KDUyfDUzfDYwfDYxfDcwfDgwfDgxfDgzfDg1fDk4KXx3M2MoXFwtfCApfHdlYmN8d2hpdHx3aShnIHxuY3xudyl8d21sYnx3b251fHg3MDB8eWFzXFwtfHlvdXJ8emV0b3x6dGVcXC0vaSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe24odGhpcyxlKX1yZXR1cm4gaShlLFt7a2V5OlwicGhvbmVcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPW8oKTtyZXR1cm4hKCFyLnRlc3QoZSkmJiFhLnRlc3QoZS5zdWJzdHIoMCw0KSkpfX0se2tleTpcIm1vYmlsZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9bygpO3JldHVybiEoIXUudGVzdChlKSYmIWMudGVzdChlLnN1YnN0cigwLDQpKSl9fSx7a2V5OlwidGFibGV0XCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb2JpbGUoKSYmIXRoaXMucGhvbmUoKX19XSksZX0oKTt0LmRlZmF1bHQ9bmV3IHN9LGZ1bmN0aW9uKGUsdCl7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG49ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPWUubm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWFvcy1vbmNlXCIpO3Q+ZS5wb3NpdGlvbj9lLm5vZGUuY2xhc3NMaXN0LmFkZChcImFvcy1hbmltYXRlXCIpOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBvJiYoXCJmYWxzZVwiPT09b3x8IW4mJlwidHJ1ZVwiIT09bykmJmUubm9kZS5jbGFzc0xpc3QucmVtb3ZlKFwiYW9zLWFuaW1hdGVcIil9LG89ZnVuY3Rpb24oZSx0KXt2YXIgbz13aW5kb3cucGFnZVlPZmZzZXQsaT13aW5kb3cuaW5uZXJIZWlnaHQ7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUscil7bihlLGkrbyx0KX0pfTt0LmRlZmF1bHQ9b30sZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBpPW4oMTIpLHI9byhpKSxhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZm9yRWFjaChmdW5jdGlvbihlLG4pe2Uubm9kZS5jbGFzc0xpc3QuYWRkKFwiYW9zLWluaXRcIiksZS5wb3NpdGlvbj0oMCxyLmRlZmF1bHQpKGUubm9kZSx0Lm9mZnNldCl9KSxlfTt0LmRlZmF1bHQ9YX0sZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBpPW4oMTMpLHI9byhpKSxhPWZ1bmN0aW9uKGUsdCl7dmFyIG49MCxvPTAsaT13aW5kb3cuaW5uZXJIZWlnaHQsYT17b2Zmc2V0OmUuZ2V0QXR0cmlidXRlKFwiZGF0YS1hb3Mtb2Zmc2V0XCIpLGFuY2hvcjplLmdldEF0dHJpYnV0ZShcImRhdGEtYW9zLWFuY2hvclwiKSxhbmNob3JQbGFjZW1lbnQ6ZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWFvcy1hbmNob3ItcGxhY2VtZW50XCIpfTtzd2l0Y2goYS5vZmZzZXQmJiFpc05hTihhLm9mZnNldCkmJihvPXBhcnNlSW50KGEub2Zmc2V0KSksYS5hbmNob3ImJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYS5hbmNob3IpJiYoZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGEuYW5jaG9yKVswXSksbj0oMCxyLmRlZmF1bHQpKGUpLnRvcCxhLmFuY2hvclBsYWNlbWVudCl7Y2FzZVwidG9wLWJvdHRvbVwiOmJyZWFrO2Nhc2VcImNlbnRlci1ib3R0b21cIjpuKz1lLm9mZnNldEhlaWdodC8yO2JyZWFrO2Nhc2VcImJvdHRvbS1ib3R0b21cIjpuKz1lLm9mZnNldEhlaWdodDticmVhaztjYXNlXCJ0b3AtY2VudGVyXCI6bis9aS8yO2JyZWFrO2Nhc2VcImJvdHRvbS1jZW50ZXJcIjpuKz1pLzIrZS5vZmZzZXRIZWlnaHQ7YnJlYWs7Y2FzZVwiY2VudGVyLWNlbnRlclwiOm4rPWkvMitlLm9mZnNldEhlaWdodC8yO2JyZWFrO2Nhc2VcInRvcC10b3BcIjpuKz1pO2JyZWFrO2Nhc2VcImJvdHRvbS10b3BcIjpuKz1lLm9mZnNldEhlaWdodCtpO2JyZWFrO2Nhc2VcImNlbnRlci10b3BcIjpuKz1lLm9mZnNldEhlaWdodC8yK2l9cmV0dXJuIGEuYW5jaG9yUGxhY2VtZW50fHxhLm9mZnNldHx8aXNOYU4odCl8fChvPXQpLG4rb307dC5kZWZhdWx0PWF9LGZ1bmN0aW9uKGUsdCl7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG49ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj0wO2UmJiFpc05hTihlLm9mZnNldExlZnQpJiYhaXNOYU4oZS5vZmZzZXRUb3ApOyl0Kz1lLm9mZnNldExlZnQtKFwiQk9EWVwiIT1lLnRhZ05hbWU/ZS5zY3JvbGxMZWZ0OjApLG4rPWUub2Zmc2V0VG9wLShcIkJPRFlcIiE9ZS50YWdOYW1lP2Uuc2Nyb2xsVG9wOjApLGU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJue3RvcDpuLGxlZnQ6dH19O3QuZGVmYXVsdD1ufSxmdW5jdGlvbihlLHQpe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBuPWZ1bmN0aW9uKGUpe3JldHVybiBlPWV8fGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1hb3NdXCIpLEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChlLGZ1bmN0aW9uKGUpe3JldHVybntub2RlOmV9fSl9O3QuZGVmYXVsdD1ufV0pfSk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/aos/dist/aos.js\n"); /***/ }), /***/ "./node_modules/bootstrap/dist/js/bootstrap.min.js": /*!*********************************************************!*\ !*** ./node_modules/bootstrap/dist/js/bootstrap.min.js ***! \*********************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("/*!\n * Bootstrap v5.1.0 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n!function(t,e){ true?module.exports=e(__webpack_require__(/*! @popperjs/core */ \"./node_modules/@popperjs/core/lib/index.js\")):undefined}(this,(function(t){\"use strict\";function e(t){if(t&&t.__esModule)return t;var e=Object.create(null);return t&&Object.keys(t).forEach((function(i){if(\"default\"!==i){var s=Object.getOwnPropertyDescriptor(t,i);Object.defineProperty(e,i,s.get?s:{enumerable:!0,get:function(){return t[i]}})}})),e.default=t,Object.freeze(e)}var i=e(t);const s=t=>{let e=t.getAttribute(\"data-bs-target\");if(!e||\"#\"===e){let i=t.getAttribute(\"href\");if(!i||!i.includes(\"#\")&&!i.startsWith(\".\"))return null;i.includes(\"#\")&&!i.startsWith(\"#\")&&(i=\"#\"+i.split(\"#\")[1]),e=i&&\"#\"!==i?i.trim():null}return e},n=t=>{const e=s(t);return e&&document.querySelector(e)?e:null},o=t=>{const e=s(t);return e?document.querySelector(e):null},r=t=>{t.dispatchEvent(new Event(\"transitionend\"))},a=t=>!(!t||\"object\"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),l=t=>a(t)?t.jquery?t[0]:t:\"string\"==typeof t&&t.length>0?document.querySelector(t):null,c=(t,e,i)=>{Object.keys(i).forEach(s=>{const n=i[s],o=e[s],r=o&&a(o)?\"element\":null==(l=o)?\"\"+l:{}.toString.call(l).match(/\\s([a-z]+)/i)[1].toLowerCase();var l;if(!new RegExp(n).test(r))throw new TypeError(`${t.toUpperCase()}: Option \"${s}\" provided type \"${r}\" but expected type \"${n}\".`)})},h=t=>!(!a(t)||0===t.getClientRects().length)&&\"visible\"===getComputedStyle(t).getPropertyValue(\"visibility\"),d=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains(\"disabled\")||(void 0!==t.disabled?t.disabled:t.hasAttribute(\"disabled\")&&\"false\"!==t.getAttribute(\"disabled\")),u=t=>{if(!document.documentElement.attachShadow)return null;if(\"function\"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?u(t.parentNode):null},g=()=>{},p=t=>{t.offsetHeight},f=()=>{const{jQuery:t}=window;return t&&!document.body.hasAttribute(\"data-bs-no-jquery\")?t:null},_=[],m=()=>\"rtl\"===document.documentElement.dir,b=t=>{var e;e=()=>{const e=f();if(e){const i=t.NAME,s=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=s,t.jQueryInterface)}},\"loading\"===document.readyState?(_.length||document.addEventListener(\"DOMContentLoaded\",()=>{_.forEach(t=>t())}),_.push(e)):e()},v=t=>{\"function\"==typeof t&&t()},y=(t,e,i=!0)=>{if(!i)return void v(t);const s=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const s=Number.parseFloat(e),n=Number.parseFloat(i);return s||n?(e=e.split(\",\")[0],i=i.split(\",\")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let n=!1;const o=({target:i})=>{i===e&&(n=!0,e.removeEventListener(\"transitionend\",o),v(t))};e.addEventListener(\"transitionend\",o),setTimeout(()=>{n||r(e)},s)},w=(t,e,i,s)=>{let n=t.indexOf(e);if(-1===n)return t[!i&&s?t.length-1:0];const o=t.length;return n+=i?1:-1,s&&(n=(n+o)%o),t[Math.max(0,Math.min(n,o-1))]},E=/[^.]*(?=\\..*)\\.|.*/,A=/\\..*/,T=/::\\d+$/,C={};let k=1;const L={mouseenter:\"mouseover\",mouseleave:\"mouseout\"},S=/^(mouseenter|mouseleave)/i,O=new Set([\"click\",\"dblclick\",\"mouseup\",\"mousedown\",\"contextmenu\",\"mousewheel\",\"DOMMouseScroll\",\"mouseover\",\"mouseout\",\"mousemove\",\"selectstart\",\"selectend\",\"keydown\",\"keypress\",\"keyup\",\"orientationchange\",\"touchstart\",\"touchmove\",\"touchend\",\"touchcancel\",\"pointerdown\",\"pointermove\",\"pointerup\",\"pointerleave\",\"pointercancel\",\"gesturestart\",\"gesturechange\",\"gestureend\",\"focus\",\"blur\",\"change\",\"reset\",\"select\",\"submit\",\"focusin\",\"focusout\",\"load\",\"unload\",\"beforeunload\",\"resize\",\"move\",\"DOMContentLoaded\",\"readystatechange\",\"error\",\"abort\",\"scroll\"]);function N(t,e){return e&&`${e}::${k++}`||t.uidEvent||k++}function D(t){const e=N(t);return t.uidEvent=e,C[e]=C[e]||{},C[e]}function I(t,e,i=null){const s=Object.keys(t);for(let n=0,o=s.length;nfunction(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};s?s=t(s):i=t(i)}const[o,r,a]=x(e,i,s),l=D(t),c=l[a]||(l[a]={}),h=I(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&n);const d=N(r,e.replace(E,\"\")),u=o?function(t,e,i){return function s(n){const o=t.querySelectorAll(e);for(let{target:r}=n;r&&r!==this;r=r.parentNode)for(let a=o.length;a--;)if(o[a]===r)return n.delegateTarget=r,s.oneOff&&H.off(t,n.type,e,i),i.apply(r,[n]);return null}}(t,i,s):function(t,e){return function i(s){return s.delegateTarget=t,i.oneOff&&H.off(t,s.type,e),e.apply(t,[s])}}(t,i);u.delegationSelector=o?i:null,u.originalHandler=r,u.oneOff=n,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function M(t,e,i,s,n){const o=I(e[i],s,n);o&&(t.removeEventListener(i,o,Boolean(n)),delete e[i][o.uidEvent])}function j(t){return t=t.replace(A,\"\"),L[t]||t}const H={on(t,e,i,s){P(t,e,i,s,!1)},one(t,e,i,s){P(t,e,i,s,!0)},off(t,e,i,s){if(\"string\"!=typeof e||!t)return;const[n,o,r]=x(e,i,s),a=r!==e,l=D(t),c=e.startsWith(\".\");if(void 0!==o){if(!l||!l[r])return;return void M(t,l,r,o,n?i:null)}c&&Object.keys(l).forEach(i=>{!function(t,e,i,s){const n=e[i]||{};Object.keys(n).forEach(o=>{if(o.includes(s)){const s=n[o];M(t,e,i,s.originalHandler,s.delegationSelector)}})}(t,l,i,e.slice(1))});const h=l[r]||{};Object.keys(h).forEach(i=>{const s=i.replace(T,\"\");if(!a||e.includes(s)){const e=h[i];M(t,l,r,e.originalHandler,e.delegationSelector)}})},trigger(t,e,i){if(\"string\"!=typeof e||!t)return null;const s=f(),n=j(e),o=e!==n,r=O.has(n);let a,l=!0,c=!0,h=!1,d=null;return o&&s&&(a=s.Event(e,i),s(t).trigger(a),l=!a.isPropagationStopped(),c=!a.isImmediatePropagationStopped(),h=a.isDefaultPrevented()),r?(d=document.createEvent(\"HTMLEvents\"),d.initEvent(n,l,!0)):d=new CustomEvent(e,{bubbles:l,cancelable:!0}),void 0!==i&&Object.keys(i).forEach(t=>{Object.defineProperty(d,t,{get:()=>i[t]})}),h&&d.preventDefault(),c&&t.dispatchEvent(d),d.defaultPrevented&&void 0!==a&&a.preventDefault(),d}},B=new Map;var z={set(t,e,i){B.has(t)||B.set(t,new Map);const s=B.get(t);s.has(e)||0===s.size?s.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(t,e)=>B.has(t)&&B.get(t).get(e)||null,remove(t,e){if(!B.has(t))return;const i=B.get(t);i.delete(e),0===i.size&&B.delete(t)}};class R{constructor(t){(t=l(t))&&(this._element=t,z.set(this._element,this.constructor.DATA_KEY,this))}dispose(){z.remove(this._element,this.constructor.DATA_KEY),H.off(this._element,this.constructor.EVENT_KEY),Object.getOwnPropertyNames(this).forEach(t=>{this[t]=null})}_queueCallback(t,e,i=!0){y(t,e,i)}static getInstance(t){return z.get(l(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,\"object\"==typeof e?e:null)}static get VERSION(){return\"5.1.0\"}static get NAME(){throw new Error('You have to implement the static method \"NAME\", for each component!')}static get DATA_KEY(){return\"bs.\"+this.NAME}static get EVENT_KEY(){return\".\"+this.DATA_KEY}}const F=(t,e=\"hide\")=>{const i=\"click.dismiss\"+t.EVENT_KEY,s=t.NAME;H.on(document,i,`[data-bs-dismiss=\"${s}\"]`,(function(i){if([\"A\",\"AREA\"].includes(this.tagName)&&i.preventDefault(),d(this))return;const n=o(this)||this.closest(\".\"+s);t.getOrCreateInstance(n)[e]()}))};class W extends R{static get NAME(){return\"alert\"}close(){if(H.trigger(this._element,\"close.bs.alert\").defaultPrevented)return;this._element.classList.remove(\"show\");const t=this._element.classList.contains(\"fade\");this._queueCallback(()=>this._destroyElement(),this._element,t)}_destroyElement(){this._element.remove(),H.trigger(this._element,\"closed.bs.alert\"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=W.getOrCreateInstance(this);if(\"string\"==typeof t){if(void 0===e[t]||t.startsWith(\"_\")||\"constructor\"===t)throw new TypeError(`No method named \"${t}\"`);e[t](this)}}))}}F(W,\"close\"),b(W);class $ extends R{static get NAME(){return\"button\"}toggle(){this._element.setAttribute(\"aria-pressed\",this._element.classList.toggle(\"active\"))}static jQueryInterface(t){return this.each((function(){const e=$.getOrCreateInstance(this);\"toggle\"===t&&e[t]()}))}}function q(t){return\"true\"===t||\"false\"!==t&&(t===Number(t).toString()?Number(t):\"\"===t||\"null\"===t?null:t)}function U(t){return t.replace(/[A-Z]/g,t=>\"-\"+t.toLowerCase())}H.on(document,\"click.bs.button.data-api\",'[data-bs-toggle=\"button\"]',t=>{t.preventDefault();const e=t.target.closest('[data-bs-toggle=\"button\"]');$.getOrCreateInstance(e).toggle()}),b($);const K={setDataAttribute(t,e,i){t.setAttribute(\"data-bs-\"+U(e),i)},removeDataAttribute(t,e){t.removeAttribute(\"data-bs-\"+U(e))},getDataAttributes(t){if(!t)return{};const e={};return Object.keys(t.dataset).filter(t=>t.startsWith(\"bs\")).forEach(i=>{let s=i.replace(/^bs/,\"\");s=s.charAt(0).toLowerCase()+s.slice(1,s.length),e[s]=q(t.dataset[i])}),e},getDataAttribute:(t,e)=>q(t.getAttribute(\"data-bs-\"+U(e))),offset(t){const e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset,left:e.left+window.pageXOffset}},position:t=>({top:t.offsetTop,left:t.offsetLeft})},V={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter(t=>t.matches(e)),parents(t,e){const i=[];let s=t.parentNode;for(;s&&s.nodeType===Node.ELEMENT_NODE&&3!==s.nodeType;)s.matches(e)&&i.push(s),s=s.parentNode;return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=[\"a\",\"button\",\"input\",\"textarea\",\"select\",\"details\",\"[tabindex]\",'[contenteditable=\"true\"]'].map(t=>t+':not([tabindex^=\"-\"])').join(\", \");return this.find(e,t).filter(t=>!d(t)&&h(t))}},X={interval:5e3,keyboard:!0,slide:!1,pause:\"hover\",wrap:!0,touch:!0},Y={interval:\"(number|boolean)\",keyboard:\"boolean\",slide:\"(boolean|string)\",pause:\"(string|boolean)\",wrap:\"boolean\",touch:\"boolean\"},Q=\"next\",G=\"prev\",Z=\"left\",J=\"right\",tt={ArrowLeft:J,ArrowRight:Z};class et extends R{constructor(t,e){super(t),this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._indicatorsElement=V.findOne(\".carousel-indicators\",this._element),this._touchSupported=\"ontouchstart\"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent),this._addEventListeners()}static get Default(){return X}static get NAME(){return\"carousel\"}next(){this._slide(Q)}nextWhenVisible(){!document.hidden&&h(this._element)&&this.next()}prev(){this._slide(G)}pause(t){t||(this._isPaused=!0),V.findOne(\".carousel-item-next, .carousel-item-prev\",this._element)&&(r(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config&&this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement=V.findOne(\".active.carousel-item\",this._element);const e=this._getItemIndex(this._activeElement);if(t>this._items.length-1||t<0)return;if(this._isSliding)return void H.one(this._element,\"slid.bs.carousel\",()=>this.to(t));if(e===t)return this.pause(),void this.cycle();const i=t>e?Q:G;this._slide(i,this._items[t])}_getConfig(t){return t={...X,...K.getDataAttributes(this._element),...\"object\"==typeof t?t:{}},c(\"carousel\",t,Y),t}_handleSwipe(){const t=Math.abs(this.touchDeltaX);if(t<=40)return;const e=t/this.touchDeltaX;this.touchDeltaX=0,e&&this._slide(e>0?J:Z)}_addEventListeners(){this._config.keyboard&&H.on(this._element,\"keydown.bs.carousel\",t=>this._keydown(t)),\"hover\"===this._config.pause&&(H.on(this._element,\"mouseenter.bs.carousel\",t=>this.pause(t)),H.on(this._element,\"mouseleave.bs.carousel\",t=>this.cycle(t))),this._config.touch&&this._touchSupported&&this._addTouchEventListeners()}_addTouchEventListeners(){const t=t=>{!this._pointerEvent||\"pen\"!==t.pointerType&&\"touch\"!==t.pointerType?this._pointerEvent||(this.touchStartX=t.touches[0].clientX):this.touchStartX=t.clientX},e=t=>{this.touchDeltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this.touchStartX},i=t=>{!this._pointerEvent||\"pen\"!==t.pointerType&&\"touch\"!==t.pointerType||(this.touchDeltaX=t.clientX-this.touchStartX),this._handleSwipe(),\"hover\"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(t=>this.cycle(t),500+this._config.interval))};V.find(\".carousel-item img\",this._element).forEach(t=>{H.on(t,\"dragstart.bs.carousel\",t=>t.preventDefault())}),this._pointerEvent?(H.on(this._element,\"pointerdown.bs.carousel\",e=>t(e)),H.on(this._element,\"pointerup.bs.carousel\",t=>i(t)),this._element.classList.add(\"pointer-event\")):(H.on(this._element,\"touchstart.bs.carousel\",e=>t(e)),H.on(this._element,\"touchmove.bs.carousel\",t=>e(t)),H.on(this._element,\"touchend.bs.carousel\",t=>i(t)))}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=tt[t.key];e&&(t.preventDefault(),this._slide(e))}_getItemIndex(t){return this._items=t&&t.parentNode?V.find(\".carousel-item\",t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){const i=t===Q;return w(this._items,e,i,this._config.wrap)}_triggerSlideEvent(t,e){const i=this._getItemIndex(t),s=this._getItemIndex(V.findOne(\".active.carousel-item\",this._element));return H.trigger(this._element,\"slide.bs.carousel\",{relatedTarget:t,direction:e,from:s,to:i})}_setActiveIndicatorElement(t){if(this._indicatorsElement){const e=V.findOne(\".active\",this._indicatorsElement);e.classList.remove(\"active\"),e.removeAttribute(\"aria-current\");const i=V.find(\"[data-bs-target]\",this._indicatorsElement);for(let e=0;e{H.trigger(this._element,\"slid.bs.carousel\",{relatedTarget:o,direction:d,from:n,to:r})};if(this._element.classList.contains(\"slide\")){o.classList.add(h),p(o),s.classList.add(c),o.classList.add(c);const t=()=>{o.classList.remove(c,h),o.classList.add(\"active\"),s.classList.remove(\"active\",h,c),this._isSliding=!1,setTimeout(u,0)};this._queueCallback(t,s,!0)}else s.classList.remove(\"active\"),o.classList.add(\"active\"),this._isSliding=!1,u();a&&this.cycle()}_directionToOrder(t){return[J,Z].includes(t)?m()?t===Z?G:Q:t===Z?Q:G:t}_orderToDirection(t){return[Q,G].includes(t)?m()?t===G?Z:J:t===G?J:Z:t}static carouselInterface(t,e){const i=et.getOrCreateInstance(t,e);let{_config:s}=i;\"object\"==typeof e&&(s={...s,...e});const n=\"string\"==typeof e?e:s.slide;if(\"number\"==typeof e)i.to(e);else if(\"string\"==typeof n){if(void 0===i[n])throw new TypeError(`No method named \"${n}\"`);i[n]()}else s.interval&&s.ride&&(i.pause(),i.cycle())}static jQueryInterface(t){return this.each((function(){et.carouselInterface(this,t)}))}static dataApiClickHandler(t){const e=o(this);if(!e||!e.classList.contains(\"carousel\"))return;const i={...K.getDataAttributes(e),...K.getDataAttributes(this)},s=this.getAttribute(\"data-bs-slide-to\");s&&(i.interval=!1),et.carouselInterface(e,i),s&&et.getInstance(e).to(s),t.preventDefault()}}H.on(document,\"click.bs.carousel.data-api\",\"[data-bs-slide], [data-bs-slide-to]\",et.dataApiClickHandler),H.on(window,\"load.bs.carousel.data-api\",()=>{const t=V.find('[data-bs-ride=\"carousel\"]');for(let e=0,i=t.length;et===this._element);null!==s&&o.length&&(this._selector=s,this._triggerArray.push(e))}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return it}static get NAME(){return\"collapse\"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t,e=[];if(this._config.parent){const t=V.find(\".collapse .collapse\",this._config.parent);e=V.find(\".show, .collapsing\",this._config.parent).filter(e=>!t.includes(e))}const i=V.findOne(this._selector);if(e.length){const s=e.find(t=>i!==t);if(t=s?nt.getInstance(s):null,t&&t._isTransitioning)return}if(H.trigger(this._element,\"show.bs.collapse\").defaultPrevented)return;e.forEach(e=>{i!==e&&nt.getOrCreateInstance(e,{toggle:!1}).hide(),t||z.set(e,\"bs.collapse\",null)});const s=this._getDimension();this._element.classList.remove(\"collapse\"),this._element.classList.add(\"collapsing\"),this._element.style[s]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=\"scroll\"+(s[0].toUpperCase()+s.slice(1));this._queueCallback(()=>{this._isTransitioning=!1,this._element.classList.remove(\"collapsing\"),this._element.classList.add(\"collapse\",\"show\"),this._element.style[s]=\"\",H.trigger(this._element,\"shown.bs.collapse\")},this._element,!0),this._element.style[s]=this._element[n]+\"px\"}hide(){if(this._isTransitioning||!this._isShown())return;if(H.trigger(this._element,\"hide.bs.collapse\").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=this._element.getBoundingClientRect()[t]+\"px\",p(this._element),this._element.classList.add(\"collapsing\"),this._element.classList.remove(\"collapse\",\"show\");const e=this._triggerArray.length;for(let t=0;t{this._isTransitioning=!1,this._element.classList.remove(\"collapsing\"),this._element.classList.add(\"collapse\"),H.trigger(this._element,\"hidden.bs.collapse\")},this._element,!0)}_isShown(t=this._element){return t.classList.contains(\"show\")}_getConfig(t){return(t={...it,...K.getDataAttributes(this._element),...t}).toggle=Boolean(t.toggle),t.parent=l(t.parent),c(\"collapse\",t,st),t}_getDimension(){return this._element.classList.contains(\"collapse-horizontal\")?\"width\":\"height\"}_initializeChildren(){if(!this._config.parent)return;const t=V.find(\".collapse .collapse\",this._config.parent);V.find('[data-bs-toggle=\"collapse\"]',this._config.parent).filter(e=>!t.includes(e)).forEach(t=>{const e=o(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))})}_addAriaAndCollapsedClass(t,e){t.length&&t.forEach(t=>{e?t.classList.remove(\"collapsed\"):t.classList.add(\"collapsed\"),t.setAttribute(\"aria-expanded\",e)})}static jQueryInterface(t){return this.each((function(){const e={};\"string\"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1);const i=nt.getOrCreateInstance(this,e);if(\"string\"==typeof t){if(void 0===i[t])throw new TypeError(`No method named \"${t}\"`);i[t]()}}))}}H.on(document,\"click.bs.collapse.data-api\",'[data-bs-toggle=\"collapse\"]',(function(t){(\"A\"===t.target.tagName||t.delegateTarget&&\"A\"===t.delegateTarget.tagName)&&t.preventDefault();const e=n(this);V.find(e).forEach(t=>{nt.getOrCreateInstance(t,{toggle:!1}).toggle()})})),b(nt);const ot=new RegExp(\"ArrowUp|ArrowDown|Escape\"),rt=m()?\"top-end\":\"top-start\",at=m()?\"top-start\":\"top-end\",lt=m()?\"bottom-end\":\"bottom-start\",ct=m()?\"bottom-start\":\"bottom-end\",ht=m()?\"left-start\":\"right-start\",dt=m()?\"right-start\":\"left-start\",ut={offset:[0,2],boundary:\"clippingParents\",reference:\"toggle\",display:\"dynamic\",popperConfig:null,autoClose:!0},gt={offset:\"(array|string|function)\",boundary:\"(string|element)\",reference:\"(string|element|object)\",display:\"string\",popperConfig:\"(null|object|function)\",autoClose:\"(boolean|string)\"};class pt extends R{constructor(t,e){super(t),this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar()}static get Default(){return ut}static get DefaultType(){return gt}static get NAME(){return\"dropdown\"}toggle(){return this._isShown()?this.hide():this.show()}show(){if(d(this._element)||this._isShown(this._menu))return;const t={relatedTarget:this._element};if(H.trigger(this._element,\"show.bs.dropdown\",t).defaultPrevented)return;const e=pt.getParentFromElement(this._element);this._inNavbar?K.setDataAttribute(this._menu,\"popper\",\"none\"):this._createPopper(e),\"ontouchstart\"in document.documentElement&&!e.closest(\".navbar-nav\")&&[].concat(...document.body.children).forEach(t=>H.on(t,\"mouseover\",g)),this._element.focus(),this._element.setAttribute(\"aria-expanded\",!0),this._menu.classList.add(\"show\"),this._element.classList.add(\"show\"),H.trigger(this._element,\"shown.bs.dropdown\",t)}hide(){if(d(this._element)||!this._isShown(this._menu))return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){H.trigger(this._element,\"hide.bs.dropdown\",t).defaultPrevented||(\"ontouchstart\"in document.documentElement&&[].concat(...document.body.children).forEach(t=>H.off(t,\"mouseover\",g)),this._popper&&this._popper.destroy(),this._menu.classList.remove(\"show\"),this._element.classList.remove(\"show\"),this._element.setAttribute(\"aria-expanded\",\"false\"),K.removeDataAttribute(this._menu,\"popper\"),H.trigger(this._element,\"hidden.bs.dropdown\",t))}_getConfig(t){if(t={...this.constructor.Default,...K.getDataAttributes(this._element),...t},c(\"dropdown\",t,this.constructor.DefaultType),\"object\"==typeof t.reference&&!a(t.reference)&&\"function\"!=typeof t.reference.getBoundingClientRect)throw new TypeError(\"dropdown\".toUpperCase()+': Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.');return t}_createPopper(t){if(void 0===i)throw new TypeError(\"Bootstrap's dropdowns require Popper (https://popper.js.org)\");let e=this._element;\"parent\"===this._config.reference?e=t:a(this._config.reference)?e=l(this._config.reference):\"object\"==typeof this._config.reference&&(e=this._config.reference);const s=this._getPopperConfig(),n=s.modifiers.find(t=>\"applyStyles\"===t.name&&!1===t.enabled);this._popper=i.createPopper(e,this._menu,s),n&&K.setDataAttribute(this._menu,\"popper\",\"static\")}_isShown(t=this._element){return t.classList.contains(\"show\")}_getMenuElement(){return V.next(this._element,\".dropdown-menu\")[0]}_getPlacement(){const t=this._element.parentNode;if(t.classList.contains(\"dropend\"))return ht;if(t.classList.contains(\"dropstart\"))return dt;const e=\"end\"===getComputedStyle(this._menu).getPropertyValue(\"--bs-position\").trim();return t.classList.contains(\"dropup\")?e?at:rt:e?ct:lt}_detectNavbar(){return null!==this._element.closest(\".navbar\")}_getOffset(){const{offset:t}=this._config;return\"string\"==typeof t?t.split(\",\").map(t=>Number.parseInt(t,10)):\"function\"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:\"preventOverflow\",options:{boundary:this._config.boundary}},{name:\"offset\",options:{offset:this._getOffset()}}]};return\"static\"===this._config.display&&(t.modifiers=[{name:\"applyStyles\",enabled:!1}]),{...t,...\"function\"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i=V.find(\".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)\",this._menu).filter(h);i.length&&w(i,e,\"ArrowDown\"===t,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=pt.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}static clearMenus(t){if(t&&(2===t.button||\"keyup\"===t.type&&\"Tab\"!==t.key))return;const e=V.find('[data-bs-toggle=\"dropdown\"]');for(let i=0,s=e.length;ie+t),this._setElementAttributes(\".fixed-top, .fixed-bottom, .is-fixed, .sticky-top\",\"paddingRight\",e=>e+t),this._setElementAttributes(\".sticky-top\",\"marginRight\",e=>e-t)}_disableOverFlow(){this._saveInitialAttribute(this._element,\"overflow\"),this._element.style.overflow=\"hidden\"}_setElementAttributes(t,e,i){const s=this.getWidth();this._applyManipulationCallback(t,t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+s)return;this._saveInitialAttribute(t,e);const n=window.getComputedStyle(t)[e];t.style[e]=i(Number.parseFloat(n))+\"px\"})}reset(){this._resetElementAttributes(this._element,\"overflow\"),this._resetElementAttributes(this._element,\"paddingRight\"),this._resetElementAttributes(\".fixed-top, .fixed-bottom, .is-fixed, .sticky-top\",\"paddingRight\"),this._resetElementAttributes(\".sticky-top\",\"marginRight\")}_saveInitialAttribute(t,e){const i=t.style[e];i&&K.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,t=>{const i=K.getDataAttribute(t,e);void 0===i?t.style.removeProperty(e):(K.removeDataAttribute(t,e),t.style[e]=i)})}_applyManipulationCallback(t,e){a(t)?e(t):V.find(t,this._element).forEach(e)}isOverflowing(){return this.getWidth()>0}}const _t={className:\"modal-backdrop\",isVisible:!0,isAnimated:!1,rootElement:\"body\",clickCallback:null},mt={className:\"string\",isVisible:\"boolean\",isAnimated:\"boolean\",rootElement:\"(element|string)\",clickCallback:\"(function|null)\"};class bt{constructor(t){this._config=this._getConfig(t),this._isAppended=!1,this._element=null}show(t){this._config.isVisible?(this._append(),this._config.isAnimated&&p(this._getElement()),this._getElement().classList.add(\"show\"),this._emulateAnimation(()=>{v(t)})):v(t)}hide(t){this._config.isVisible?(this._getElement().classList.remove(\"show\"),this._emulateAnimation(()=>{this.dispose(),v(t)})):v(t)}_getElement(){if(!this._element){const t=document.createElement(\"div\");t.className=this._config.className,this._config.isAnimated&&t.classList.add(\"fade\"),this._element=t}return this._element}_getConfig(t){return(t={..._t,...\"object\"==typeof t?t:{}}).rootElement=l(t.rootElement),c(\"backdrop\",t,mt),t}_append(){this._isAppended||(this._config.rootElement.append(this._getElement()),H.on(this._getElement(),\"mousedown.bs.backdrop\",()=>{v(this._config.clickCallback)}),this._isAppended=!0)}dispose(){this._isAppended&&(H.off(this._element,\"mousedown.bs.backdrop\"),this._element.remove(),this._isAppended=!1)}_emulateAnimation(t){y(t,this._getElement(),this._config.isAnimated)}}const vt={trapElement:null,autofocus:!0},yt={trapElement:\"element\",autofocus:\"boolean\"};class wt{constructor(t){this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}activate(){const{trapElement:t,autofocus:e}=this._config;this._isActive||(e&&t.focus(),H.off(document,\".bs.focustrap\"),H.on(document,\"focusin.bs.focustrap\",t=>this._handleFocusin(t)),H.on(document,\"keydown.tab.bs.focustrap\",t=>this._handleKeydown(t)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,H.off(document,\".bs.focustrap\"))}_handleFocusin(t){const{target:e}=t,{trapElement:i}=this._config;if(e===document||e===i||i.contains(e))return;const s=V.focusableChildren(i);0===s.length?i.focus():\"backward\"===this._lastTabNavDirection?s[s.length-1].focus():s[0].focus()}_handleKeydown(t){\"Tab\"===t.key&&(this._lastTabNavDirection=t.shiftKey?\"backward\":\"forward\")}_getConfig(t){return t={...vt,...\"object\"==typeof t?t:{}},c(\"focustrap\",t,yt),t}}const Et={backdrop:!0,keyboard:!0,focus:!0},At={backdrop:\"(boolean|string)\",keyboard:\"boolean\",focus:\"boolean\"};class Tt extends R{constructor(t,e){super(t),this._config=this._getConfig(e),this._dialog=V.findOne(\".modal-dialog\",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollBar=new ft}static get Default(){return Et}static get NAME(){return\"modal\"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||H.trigger(this._element,\"show.bs.modal\",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isAnimated()&&(this._isTransitioning=!0),this._scrollBar.hide(),document.body.classList.add(\"modal-open\"),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),H.on(this._dialog,\"mousedown.dismiss.bs.modal\",()=>{H.one(this._element,\"mouseup.dismiss.bs.modal\",t=>{t.target===this._element&&(this._ignoreBackdropClick=!0)})}),this._showBackdrop(()=>this._showElement(t)))}hide(){if(!this._isShown||this._isTransitioning)return;if(H.trigger(this._element,\"hide.bs.modal\").defaultPrevented)return;this._isShown=!1;const t=this._isAnimated();t&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),this._focustrap.deactivate(),this._element.classList.remove(\"show\"),H.off(this._element,\"click.dismiss.bs.modal\"),H.off(this._dialog,\"mousedown.dismiss.bs.modal\"),this._queueCallback(()=>this._hideModal(),this._element,t)}dispose(){[window,this._dialog].forEach(t=>H.off(t,\".bs.modal\")),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new bt({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new wt({trapElement:this._element})}_getConfig(t){return t={...Et,...K.getDataAttributes(this._element),...\"object\"==typeof t?t:{}},c(\"modal\",t,At),t}_showElement(t){const e=this._isAnimated(),i=V.findOne(\".modal-body\",this._dialog);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.append(this._element),this._element.style.display=\"block\",this._element.removeAttribute(\"aria-hidden\"),this._element.setAttribute(\"aria-modal\",!0),this._element.setAttribute(\"role\",\"dialog\"),this._element.scrollTop=0,i&&(i.scrollTop=0),e&&p(this._element),this._element.classList.add(\"show\"),this._queueCallback(()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,H.trigger(this._element,\"shown.bs.modal\",{relatedTarget:t})},this._dialog,e)}_setEscapeEvent(){this._isShown?H.on(this._element,\"keydown.dismiss.bs.modal\",t=>{this._config.keyboard&&\"Escape\"===t.key?(t.preventDefault(),this.hide()):this._config.keyboard||\"Escape\"!==t.key||this._triggerBackdropTransition()}):H.off(this._element,\"keydown.dismiss.bs.modal\")}_setResizeEvent(){this._isShown?H.on(window,\"resize.bs.modal\",()=>this._adjustDialog()):H.off(window,\"resize.bs.modal\")}_hideModal(){this._element.style.display=\"none\",this._element.setAttribute(\"aria-hidden\",!0),this._element.removeAttribute(\"aria-modal\"),this._element.removeAttribute(\"role\"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(\"modal-open\"),this._resetAdjustments(),this._scrollBar.reset(),H.trigger(this._element,\"hidden.bs.modal\")})}_showBackdrop(t){H.on(this._element,\"click.dismiss.bs.modal\",t=>{this._ignoreBackdropClick?this._ignoreBackdropClick=!1:t.target===t.currentTarget&&(!0===this._config.backdrop?this.hide():\"static\"===this._config.backdrop&&this._triggerBackdropTransition())}),this._backdrop.show(t)}_isAnimated(){return this._element.classList.contains(\"fade\")}_triggerBackdropTransition(){if(H.trigger(this._element,\"hidePrevented.bs.modal\").defaultPrevented)return;const{classList:t,scrollHeight:e,style:i}=this._element,s=e>document.documentElement.clientHeight;!s&&\"hidden\"===i.overflowY||t.contains(\"modal-static\")||(s||(i.overflowY=\"hidden\"),t.add(\"modal-static\"),this._queueCallback(()=>{t.remove(\"modal-static\"),s||this._queueCallback(()=>{i.overflowY=\"\"},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;(!i&&t&&!m()||i&&!t&&m())&&(this._element.style.paddingLeft=e+\"px\"),(i&&!t&&!m()||!i&&t&&m())&&(this._element.style.paddingRight=e+\"px\")}_resetAdjustments(){this._element.style.paddingLeft=\"\",this._element.style.paddingRight=\"\"}static jQueryInterface(t,e){return this.each((function(){const i=Tt.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===i[t])throw new TypeError(`No method named \"${t}\"`);i[t](e)}}))}}H.on(document,\"click.bs.modal.data-api\",'[data-bs-toggle=\"modal\"]',(function(t){const e=o(this);[\"A\",\"AREA\"].includes(this.tagName)&&t.preventDefault(),H.one(e,\"show.bs.modal\",t=>{t.defaultPrevented||H.one(e,\"hidden.bs.modal\",()=>{h(this)&&this.focus()})}),Tt.getOrCreateInstance(e).toggle(this)})),F(Tt),b(Tt);const Ct={backdrop:!0,keyboard:!0,scroll:!1},kt={backdrop:\"boolean\",keyboard:\"boolean\",scroll:\"boolean\"};class Lt extends R{constructor(t,e){super(t),this._config=this._getConfig(e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get NAME(){return\"offcanvas\"}static get Default(){return Ct}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||H.trigger(this._element,\"show.bs.offcanvas\",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._element.style.visibility=\"visible\",this._backdrop.show(),this._config.scroll||(new ft).hide(),this._element.removeAttribute(\"aria-hidden\"),this._element.setAttribute(\"aria-modal\",!0),this._element.setAttribute(\"role\",\"dialog\"),this._element.classList.add(\"show\"),this._queueCallback(()=>{this._config.scroll||this._focustrap.activate(),H.trigger(this._element,\"shown.bs.offcanvas\",{relatedTarget:t})},this._element,!0))}hide(){this._isShown&&(H.trigger(this._element,\"hide.bs.offcanvas\").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.remove(\"show\"),this._backdrop.hide(),this._queueCallback(()=>{this._element.setAttribute(\"aria-hidden\",!0),this._element.removeAttribute(\"aria-modal\"),this._element.removeAttribute(\"role\"),this._element.style.visibility=\"hidden\",this._config.scroll||(new ft).reset(),H.trigger(this._element,\"hidden.bs.offcanvas\")},this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_getConfig(t){return t={...Ct,...K.getDataAttributes(this._element),...\"object\"==typeof t?t:{}},c(\"offcanvas\",t,kt),t}_initializeBackDrop(){return new bt({className:\"offcanvas-backdrop\",isVisible:this._config.backdrop,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:()=>this.hide()})}_initializeFocusTrap(){return new wt({trapElement:this._element})}_addEventListeners(){H.on(this._element,\"keydown.dismiss.bs.offcanvas\",t=>{this._config.keyboard&&\"Escape\"===t.key&&this.hide()})}static jQueryInterface(t){return this.each((function(){const e=Lt.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t]||t.startsWith(\"_\")||\"constructor\"===t)throw new TypeError(`No method named \"${t}\"`);e[t](this)}}))}}H.on(document,\"click.bs.offcanvas.data-api\",'[data-bs-toggle=\"offcanvas\"]',(function(t){const e=o(this);if([\"A\",\"AREA\"].includes(this.tagName)&&t.preventDefault(),d(this))return;H.one(e,\"hidden.bs.offcanvas\",()=>{h(this)&&this.focus()});const i=V.findOne(\".offcanvas.show\");i&&i!==e&&Lt.getInstance(i).hide(),Lt.getOrCreateInstance(e).toggle(this)})),H.on(window,\"load.bs.offcanvas.data-api\",()=>V.find(\".offcanvas.show\").forEach(t=>Lt.getOrCreateInstance(t).show())),F(Lt),b(Lt);const St=new Set([\"background\",\"cite\",\"href\",\"itemtype\",\"longdesc\",\"poster\",\"src\",\"xlink:href\"]),Ot=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i,Nt=/^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i,Dt=(t,e)=>{const i=t.nodeName.toLowerCase();if(e.includes(i))return!St.has(i)||Boolean(Ot.test(t.nodeValue)||Nt.test(t.nodeValue));const s=e.filter(t=>t instanceof RegExp);for(let t=0,e=s.length;t{Dt(t,a)||i.removeAttribute(t.nodeName)})}return s.body.innerHTML}const xt=new Set([\"sanitize\",\"allowList\",\"sanitizeFn\"]),Pt={animation:\"boolean\",template:\"string\",title:\"(string|element|function)\",trigger:\"string\",delay:\"(number|object)\",html:\"boolean\",selector:\"(string|boolean)\",placement:\"(string|function)\",offset:\"(array|string|function)\",container:\"(string|element|boolean)\",fallbackPlacements:\"array\",boundary:\"(string|element)\",customClass:\"(string|function)\",sanitize:\"boolean\",sanitizeFn:\"(null|function)\",allowList:\"object\",popperConfig:\"(null|object|function)\"},Mt={AUTO:\"auto\",TOP:\"top\",RIGHT:m()?\"left\":\"right\",BOTTOM:\"bottom\",LEFT:m()?\"right\":\"left\"},jt={animation:!0,template:'
',trigger:\"hover focus\",title:\"\",delay:0,html:!1,selector:!1,placement:\"top\",offset:[0,0],container:!1,fallbackPlacements:[\"top\",\"right\",\"bottom\",\"left\"],boundary:\"clippingParents\",customClass:\"\",sanitize:!0,sanitizeFn:null,allowList:{\"*\":[\"class\",\"dir\",\"id\",\"lang\",\"role\",/^aria-[\\w-]*$/i],a:[\"target\",\"href\",\"title\",\"rel\"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:[\"src\",\"srcset\",\"alt\",\"title\",\"width\",\"height\"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},Ht={HIDE:\"hide.bs.tooltip\",HIDDEN:\"hidden.bs.tooltip\",SHOW:\"show.bs.tooltip\",SHOWN:\"shown.bs.tooltip\",INSERTED:\"inserted.bs.tooltip\",CLICK:\"click.bs.tooltip\",FOCUSIN:\"focusin.bs.tooltip\",FOCUSOUT:\"focusout.bs.tooltip\",MOUSEENTER:\"mouseenter.bs.tooltip\",MOUSELEAVE:\"mouseleave.bs.tooltip\"};class Bt extends R{constructor(t,e){if(void 0===i)throw new TypeError(\"Bootstrap's tooltips require Popper (https://popper.js.org)\");super(t),this._isEnabled=!0,this._timeout=0,this._hoverState=\"\",this._activeTrigger={},this._popper=null,this._config=this._getConfig(e),this.tip=null,this._setListeners()}static get Default(){return jt}static get NAME(){return\"tooltip\"}static get Event(){return Ht}static get DefaultType(){return Pt}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(t){if(this._isEnabled)if(t){const e=this._initializeOnDelegatedTarget(t);e._activeTrigger.click=!e._activeTrigger.click,e._isWithActiveTrigger()?e._enter(null,e):e._leave(null,e)}else{if(this.getTipElement().classList.contains(\"show\"))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),H.off(this._element.closest(\".modal\"),\"hide.bs.modal\",this._hideModalHandler),this.tip&&this.tip.remove(),this._popper&&this._popper.destroy(),super.dispose()}show(){if(\"none\"===this._element.style.display)throw new Error(\"Please use show on visible elements\");if(!this.isWithContent()||!this._isEnabled)return;const t=H.trigger(this._element,this.constructor.Event.SHOW),e=u(this._element),s=null===e?this._element.ownerDocument.documentElement.contains(this._element):e.contains(this._element);if(t.defaultPrevented||!s)return;const n=this.getTipElement(),o=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME);n.setAttribute(\"id\",o),this._element.setAttribute(\"aria-describedby\",o),this._config.animation&&n.classList.add(\"fade\");const r=\"function\"==typeof this._config.placement?this._config.placement.call(this,n,this._element):this._config.placement,a=this._getAttachment(r);this._addAttachmentClass(a);const{container:l}=this._config;z.set(n,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(l.append(n),H.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper=i.createPopper(this._element,n,this._getPopperConfig(a)),n.classList.add(\"show\");const c=this._resolvePossibleFunction(this._config.customClass);c&&n.classList.add(...c.split(\" \")),\"ontouchstart\"in document.documentElement&&[].concat(...document.body.children).forEach(t=>{H.on(t,\"mouseover\",g)});const h=this.tip.classList.contains(\"fade\");this._queueCallback(()=>{const t=this._hoverState;this._hoverState=null,H.trigger(this._element,this.constructor.Event.SHOWN),\"out\"===t&&this._leave(null,this)},this.tip,h)}hide(){if(!this._popper)return;const t=this.getTipElement();if(H.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented)return;t.classList.remove(\"show\"),\"ontouchstart\"in document.documentElement&&[].concat(...document.body.children).forEach(t=>H.off(t,\"mouseover\",g)),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1;const e=this.tip.classList.contains(\"fade\");this._queueCallback(()=>{this._isWithActiveTrigger()||(\"show\"!==this._hoverState&&t.remove(),this._cleanTipClass(),this._element.removeAttribute(\"aria-describedby\"),H.trigger(this._element,this.constructor.Event.HIDDEN),this._popper&&(this._popper.destroy(),this._popper=null))},this.tip,e),this._hoverState=\"\"}update(){null!==this._popper&&this._popper.update()}isWithContent(){return Boolean(this.getTitle())}getTipElement(){if(this.tip)return this.tip;const t=document.createElement(\"div\");t.innerHTML=this._config.template;const e=t.children[0];return this.setContent(e),e.classList.remove(\"fade\",\"show\"),this.tip=e,this.tip}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),\".tooltip-inner\")}_sanitizeAndSetContent(t,e,i){const s=V.findOne(i,t);e||!s?this.setElementContent(s,e):s.remove()}setElementContent(t,e){if(null!==t)return a(e)?(e=l(e),void(this._config.html?e.parentNode!==t&&(t.innerHTML=\"\",t.append(e)):t.textContent=e.textContent)):void(this._config.html?(this._config.sanitize&&(e=It(e,this._config.allowList,this._config.sanitizeFn)),t.innerHTML=e):t.textContent=e)}getTitle(){const t=this._element.getAttribute(\"data-bs-original-title\")||this._config.title;return this._resolvePossibleFunction(t)}updateAttachment(t){return\"right\"===t?\"end\":\"left\"===t?\"start\":t}_initializeOnDelegatedTarget(t,e){return e||this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_getOffset(){const{offset:t}=this._config;return\"string\"==typeof t?t.split(\",\").map(t=>Number.parseInt(t,10)):\"function\"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return\"function\"==typeof t?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:\"flip\",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:\"offset\",options:{offset:this._getOffset()}},{name:\"preventOverflow\",options:{boundary:this._config.boundary}},{name:\"arrow\",options:{element:`.${this.constructor.NAME}-arrow`}},{name:\"onChange\",enabled:!0,phase:\"afterWrite\",fn:t=>this._handlePopperPlacementChange(t)}],onFirstUpdate:t=>{t.options.placement!==t.placement&&this._handlePopperPlacementChange(t)}};return{...e,...\"function\"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(t)}`)}_getAttachment(t){return Mt[t.toUpperCase()]}_setListeners(){this._config.trigger.split(\" \").forEach(t=>{if(\"click\"===t)H.on(this._element,this.constructor.Event.CLICK,this._config.selector,t=>this.toggle(t));else if(\"manual\"!==t){const e=\"hover\"===t?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,i=\"hover\"===t?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;H.on(this._element,e,this._config.selector,t=>this._enter(t)),H.on(this._element,i,this._config.selector,t=>this._leave(t))}}),this._hideModalHandler=()=>{this._element&&this.hide()},H.on(this._element.closest(\".modal\"),\"hide.bs.modal\",this._hideModalHandler),this._config.selector?this._config={...this._config,trigger:\"manual\",selector:\"\"}:this._fixTitle()}_fixTitle(){const t=this._element.getAttribute(\"title\"),e=typeof this._element.getAttribute(\"data-bs-original-title\");(t||\"string\"!==e)&&(this._element.setAttribute(\"data-bs-original-title\",t||\"\"),!t||this._element.getAttribute(\"aria-label\")||this._element.textContent||this._element.setAttribute(\"aria-label\",t),this._element.setAttribute(\"title\",\"\"))}_enter(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger[\"focusin\"===t.type?\"focus\":\"hover\"]=!0),e.getTipElement().classList.contains(\"show\")||\"show\"===e._hoverState?e._hoverState=\"show\":(clearTimeout(e._timeout),e._hoverState=\"show\",e._config.delay&&e._config.delay.show?e._timeout=setTimeout(()=>{\"show\"===e._hoverState&&e.show()},e._config.delay.show):e.show())}_leave(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger[\"focusout\"===t.type?\"focus\":\"hover\"]=e._element.contains(t.relatedTarget)),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=\"out\",e._config.delay&&e._config.delay.hide?e._timeout=setTimeout(()=>{\"out\"===e._hoverState&&e.hide()},e._config.delay.hide):e.hide())}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e=K.getDataAttributes(this._element);return Object.keys(e).forEach(t=>{xt.has(t)&&delete e[t]}),(t={...this.constructor.Default,...e,...\"object\"==typeof t&&t?t:{}}).container=!1===t.container?document.body:l(t.container),\"number\"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),\"number\"==typeof t.title&&(t.title=t.title.toString()),\"number\"==typeof t.content&&(t.content=t.content.toString()),c(\"tooltip\",t,this.constructor.DefaultType),t.sanitize&&(t.template=It(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t}_cleanTipClass(){const t=this.getTipElement(),e=new RegExp(`(^|\\\\s)${this._getBasicClassPrefix()}\\\\S+`,\"g\"),i=t.getAttribute(\"class\").match(e);null!==i&&i.length>0&&i.map(t=>t.trim()).forEach(e=>t.classList.remove(e))}_getBasicClassPrefix(){return\"bs-tooltip\"}_handlePopperPlacementChange(t){const{state:e}=t;e&&(this.tip=e.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(e.placement)))}static jQueryInterface(t){return this.each((function(){const e=Bt.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}}b(Bt);const zt={...Bt.Default,placement:\"right\",offset:[0,8],trigger:\"click\",content:\"\",template:'

'},Rt={...Bt.DefaultType,content:\"(string|element|function)\"},Ft={HIDE:\"hide.bs.popover\",HIDDEN:\"hidden.bs.popover\",SHOW:\"show.bs.popover\",SHOWN:\"shown.bs.popover\",INSERTED:\"inserted.bs.popover\",CLICK:\"click.bs.popover\",FOCUSIN:\"focusin.bs.popover\",FOCUSOUT:\"focusout.bs.popover\",MOUSEENTER:\"mouseenter.bs.popover\",MOUSELEAVE:\"mouseleave.bs.popover\"};class Wt extends Bt{static get Default(){return zt}static get NAME(){return\"popover\"}static get Event(){return Ft}static get DefaultType(){return Rt}isWithContent(){return this.getTitle()||this._getContent()}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),\".popover-header\"),this._sanitizeAndSetContent(t,this._getContent(),\".popover-body\")}_getContent(){return this._resolvePossibleFunction(this._config.content)}_getBasicClassPrefix(){return\"bs-popover\"}static jQueryInterface(t){return this.each((function(){const e=Wt.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}}b(Wt);const $t={offset:10,method:\"auto\",target:\"\"},qt={offset:\"number\",method:\"string\",target:\"(string|element)\"},Ut=\".nav-link, .list-group-item, .dropdown-item\";class Kt extends R{constructor(t,e){super(t),this._scrollElement=\"BODY\"===this._element.tagName?window:this._element,this._config=this._getConfig(e),this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,H.on(this._scrollElement,\"scroll.bs.scrollspy\",()=>this._process()),this.refresh(),this._process()}static get Default(){return $t}static get NAME(){return\"scrollspy\"}refresh(){const t=this._scrollElement===this._scrollElement.window?\"offset\":\"position\",e=\"auto\"===this._config.method?t:this._config.method,i=\"position\"===e?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),V.find(Ut,this._config.target).map(t=>{const s=n(t),o=s?V.findOne(s):null;if(o){const t=o.getBoundingClientRect();if(t.width||t.height)return[K[e](o).top+i,s]}return null}).filter(t=>t).sort((t,e)=>t[0]-e[0]).forEach(t=>{this._offsets.push(t[0]),this._targets.push(t[1])})}dispose(){H.off(this._scrollElement,\".bs.scrollspy\"),super.dispose()}_getConfig(t){return(t={...$t,...K.getDataAttributes(this._element),...\"object\"==typeof t&&t?t:{}}).target=l(t.target)||document.documentElement,c(\"scrollspy\",t,qt),t}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),i=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=i){const t=this._targets[this._targets.length-1];this._activeTarget!==t&&this._activate(t)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(let e=this._offsets.length;e--;)this._activeTarget!==this._targets[e]&&t>=this._offsets[e]&&(void 0===this._offsets[e+1]||t`${e}[data-bs-target=\"${t}\"],${e}[href=\"${t}\"]`),i=V.findOne(e.join(\",\"),this._config.target);i.classList.add(\"active\"),i.classList.contains(\"dropdown-item\")?V.findOne(\".dropdown-toggle\",i.closest(\".dropdown\")).classList.add(\"active\"):V.parents(i,\".nav, .list-group\").forEach(t=>{V.prev(t,\".nav-link, .list-group-item\").forEach(t=>t.classList.add(\"active\")),V.prev(t,\".nav-item\").forEach(t=>{V.children(t,\".nav-link\").forEach(t=>t.classList.add(\"active\"))})}),H.trigger(this._scrollElement,\"activate.bs.scrollspy\",{relatedTarget:t})}_clear(){V.find(Ut,this._config.target).filter(t=>t.classList.contains(\"active\")).forEach(t=>t.classList.remove(\"active\"))}static jQueryInterface(t){return this.each((function(){const e=Kt.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}}H.on(window,\"load.bs.scrollspy.data-api\",()=>{V.find('[data-bs-spy=\"scroll\"]').forEach(t=>new Kt(t))}),b(Kt);class Vt extends R{static get NAME(){return\"tab\"}show(){if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&this._element.classList.contains(\"active\"))return;let t;const e=o(this._element),i=this._element.closest(\".nav, .list-group\");if(i){const e=\"UL\"===i.nodeName||\"OL\"===i.nodeName?\":scope > li > .active\":\".active\";t=V.find(e,i),t=t[t.length-1]}const s=t?H.trigger(t,\"hide.bs.tab\",{relatedTarget:this._element}):null;if(H.trigger(this._element,\"show.bs.tab\",{relatedTarget:t}).defaultPrevented||null!==s&&s.defaultPrevented)return;this._activate(this._element,i);const n=()=>{H.trigger(t,\"hidden.bs.tab\",{relatedTarget:this._element}),H.trigger(this._element,\"shown.bs.tab\",{relatedTarget:t})};e?this._activate(e,e.parentNode,n):n()}_activate(t,e,i){const s=(!e||\"UL\"!==e.nodeName&&\"OL\"!==e.nodeName?V.children(e,\".active\"):V.find(\":scope > li > .active\",e))[0],n=i&&s&&s.classList.contains(\"fade\"),o=()=>this._transitionComplete(t,s,i);s&&n?(s.classList.remove(\"show\"),this._queueCallback(o,t,!0)):o()}_transitionComplete(t,e,i){if(e){e.classList.remove(\"active\");const t=V.findOne(\":scope > .dropdown-menu .active\",e.parentNode);t&&t.classList.remove(\"active\"),\"tab\"===e.getAttribute(\"role\")&&e.setAttribute(\"aria-selected\",!1)}t.classList.add(\"active\"),\"tab\"===t.getAttribute(\"role\")&&t.setAttribute(\"aria-selected\",!0),p(t),t.classList.contains(\"fade\")&&t.classList.add(\"show\");let s=t.parentNode;if(s&&\"LI\"===s.nodeName&&(s=s.parentNode),s&&s.classList.contains(\"dropdown-menu\")){const e=t.closest(\".dropdown\");e&&V.find(\".dropdown-toggle\",e).forEach(t=>t.classList.add(\"active\")),t.setAttribute(\"aria-expanded\",!0)}i&&i()}static jQueryInterface(t){return this.each((function(){const e=Vt.getOrCreateInstance(this);if(\"string\"==typeof t){if(void 0===e[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}}H.on(document,\"click.bs.tab.data-api\",'[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]',(function(t){[\"A\",\"AREA\"].includes(this.tagName)&&t.preventDefault(),d(this)||Vt.getOrCreateInstance(this).show()})),b(Vt);const Xt={animation:\"boolean\",autohide:\"boolean\",delay:\"number\"},Yt={animation:!0,autohide:!0,delay:5e3};class Qt extends R{constructor(t,e){super(t),this._config=this._getConfig(e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get DefaultType(){return Xt}static get Default(){return Yt}static get NAME(){return\"toast\"}show(){H.trigger(this._element,\"show.bs.toast\").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add(\"fade\"),this._element.classList.remove(\"hide\"),p(this._element),this._element.classList.add(\"show\"),this._element.classList.add(\"showing\"),this._queueCallback(()=>{this._element.classList.remove(\"showing\"),H.trigger(this._element,\"shown.bs.toast\"),this._maybeScheduleHide()},this._element,this._config.animation))}hide(){this._element.classList.contains(\"show\")&&(H.trigger(this._element,\"hide.bs.toast\").defaultPrevented||(this._element.classList.add(\"showing\"),this._queueCallback(()=>{this._element.classList.add(\"hide\"),this._element.classList.remove(\"showing\"),this._element.classList.remove(\"show\"),H.trigger(this._element,\"hidden.bs.toast\")},this._element,this._config.animation)))}dispose(){this._clearTimeout(),this._element.classList.contains(\"show\")&&this._element.classList.remove(\"show\"),super.dispose()}_getConfig(t){return t={...Yt,...K.getDataAttributes(this._element),...\"object\"==typeof t&&t?t:{}},c(\"toast\",t,this.constructor.DefaultType),t}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(t,e){switch(t.type){case\"mouseover\":case\"mouseout\":this._hasMouseInteraction=e;break;case\"focusin\":case\"focusout\":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){H.on(this._element,\"mouseover.bs.toast\",t=>this._onInteraction(t,!0)),H.on(this._element,\"mouseout.bs.toast\",t=>this._onInteraction(t,!1)),H.on(this._element,\"focusin.bs.toast\",t=>this._onInteraction(t,!0)),H.on(this._element,\"focusout.bs.toast\",t=>this._onInteraction(t,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=Qt.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t])throw new TypeError(`No method named \"${t}\"`);e[t](this)}}))}}return F(Qt),b(Qt),{Alert:W,Button:$,Carousel:et,Collapse:nt,Dropdown:pt,Modal:Tt,Offcanvas:Lt,Popover:Wt,ScrollSpy:Kt,Tab:Vt,Toast:Qt,Tooltip:Bt}}));\n//# sourceMappingURL=bootstrap.min.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2Rpc3QvanMvYm9vdHN0cmFwLm1pbi5qcz8zZTQ4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQW9ELGtCQUFrQixtQkFBTyxDQUFDLGtFQUFnQixHQUFHLFNBQThJLENBQUMsbUJBQW1CLGFBQWEsY0FBYyw0QkFBNEIsMEJBQTBCLDhDQUE4QyxrQkFBa0IsMkNBQTJDLG1DQUFtQyw2QkFBNkIsYUFBYSxHQUFHLGdDQUFnQyxXQUFXLFlBQVksdUNBQXVDLGdCQUFnQiw2QkFBNkIsd0RBQXdELHdGQUF3RixTQUFTLE9BQU8sYUFBYSwyQ0FBMkMsT0FBTyxhQUFhLHdDQUF3QyxPQUFPLDRDQUE0Qyx1TEFBdUwsMkJBQTJCLDJEQUEyRCx3REFBd0QsTUFBTSxpREFBaUQsZ0JBQWdCLFlBQVksRUFBRSxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsbVNBQW1TLHNEQUFzRCxxQ0FBcUMsd0JBQXdCLHNDQUFzQyxtRUFBbUUsU0FBUyxPQUFPLGVBQWUsUUFBUSxNQUFNLFNBQVMsUUFBUSxrRUFBa0UsdURBQXVELE1BQU0sT0FBTyxZQUFZLE1BQU0seUJBQXlCLHNHQUFzRyw4RkFBOEYsa0JBQWtCLGlCQUFpQixPQUFPLDBCQUEwQixnQkFBZ0IsdUJBQXVCLGFBQWEsZUFBZSxJQUFJLHVDQUF1Qyw0QkFBNEIsb0RBQW9ELG9HQUFvRyxPQUFPLFNBQVMsVUFBVSxTQUFTLElBQUksNkRBQTZELHNEQUFzRCxRQUFRLElBQUksZUFBZSxtQkFBbUIsdUNBQXVDLGlCQUFpQiwrREFBK0QsaURBQWlELFFBQVEsU0FBUyw2Q0FBNkMseWtCQUF5a0IsZ0JBQWdCLGFBQWEsRUFBRSxJQUFJLElBQUksbUJBQW1CLGNBQWMsYUFBYSxpQ0FBaUMsTUFBTSx1QkFBdUIsdUJBQXVCLHVCQUF1QixJQUFJLEtBQUssZ0JBQWdCLDREQUE0RCxZQUFZLGtCQUFrQixtQ0FBbUMsV0FBVywrQkFBK0Isc0JBQXNCLGlDQUFpQyw4QkFBOEIsdUJBQXVCLDRIQUE0SCxnQkFBZ0IsNkNBQTZDLG9CQUFvQix1Q0FBdUMsaURBQWlELHFCQUFxQiw4QkFBOEIsUUFBUSxTQUFTLEdBQUcsWUFBWSxrQ0FBa0MsSUFBSSxvRkFBb0YsYUFBYSxzQkFBc0IscUJBQXFCLHNFQUFzRSxNQUFNLDJHQUEyRyxzQkFBc0Isb0JBQW9CLG1FQUFtRSxjQUFjLGlDQUFpQyxTQUFTLFlBQVksY0FBYyxjQUFjLGNBQWMsY0FBYyxpQ0FBaUMseURBQXlELGVBQWUsb0JBQW9CLGdDQUFnQyw4QkFBOEIsbUJBQW1CLGlCQUFpQiwyQkFBMkIsa0JBQWtCLGFBQWEsaURBQWlELEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLDJCQUEyQix3QkFBd0Isc0JBQXNCLGFBQWEsaURBQWlELEVBQUUsZ0JBQWdCLHNDQUFzQyxzQ0FBc0MsNEJBQTRCLDBOQUEwTix3QkFBd0IseUNBQXlDLDJCQUEyQixhQUFhLEVBQUUsb0dBQW9HLFdBQVcsT0FBTyxXQUFXLDJCQUEyQixpQkFBaUIsNkhBQTZILHdCQUF3QixJQUFJLHdEQUF3RCxvQkFBb0IsaUJBQWlCLHNDQUFzQyxRQUFRLGVBQWUsZ0ZBQWdGLFVBQVUsK0lBQStJLGFBQWEsRUFBRSx5QkFBeUIsU0FBUyxzQkFBc0IsaUNBQWlDLGlDQUFpQyxFQUFFLGtFQUFrRSxxQkFBcUIsY0FBYyxrQkFBa0IsdUZBQXVGLHNCQUFzQixzQkFBc0IsdUJBQXVCLHlCQUF5Qix1QkFBdUIsNkNBQTZDLHFDQUFxQyxFQUFFLGlCQUFpQiwwRUFBMEUscUNBQXFDLDhCQUE4QixJQUFJLGtCQUFrQixrQkFBa0IsY0FBYyxRQUFRLHFFQUFxRSx1Q0FBdUMsaURBQWlELGdFQUFnRSxrQkFBa0IsaUZBQWlGLDBCQUEwQiw2QkFBNkIsb0NBQW9DLHVCQUF1QiwrRkFBK0YsRUFBRSxJQUFJLFlBQVksSUFBSSxrQkFBa0Isa0JBQWtCLGtCQUFrQixlQUFlLFNBQVMsb0ZBQW9GLDBCQUEwQiw2QkFBNkIsb0NBQW9DLHFCQUFxQixJQUFJLGNBQWMsOEZBQThGLGNBQWMsa0RBQWtELHlFQUF5RSxtQkFBbUIsc0RBQXNELGtDQUFrQyxPQUFPLFNBQVMsd0JBQXdCLGtDQUFrQywwQkFBMEIsbUNBQW1DLHNCQUFzQixlQUFlLFdBQVcsd0VBQXdFLDBCQUEwQixxRUFBcUUsSUFBSSxzRUFBc0Usa0NBQWtDLE9BQU8sNkRBQTZELGVBQWUsa0NBQWtDLEVBQUUsSUFBSSxnUUFBZ1EsV0FBVyxtQkFBbUIsS0FBSyxrREFBa0Qsd0NBQXdDLFNBQVMsV0FBVywrQkFBK0IsS0FBSyxFQUFFLEVBQUUsMEJBQTBCLDJCQUEyQixTQUFTLFdBQVcsMkJBQTJCLEtBQUssRUFBRSxFQUFFLDBCQUEwQix1QkFBdUIsU0FBUyxzQkFBc0Isa0pBQWtKLDhDQUE4QyxJQUFJLGlFQUFpRSxJQUFJLGdJQUFnSSwwQ0FBMEMsMEJBQTBCLG1CQUFtQixpQkFBaUIsc2JBQXNiLHFCQUFxQixTQUFTLGtCQUFrQixpQkFBaUIsT0FBTyxlQUFlLGtCQUFrQixnREFBZ0QsT0FBTyxlQUFlLFNBQVMsZ0xBQWdMLFNBQVMsaVNBQWlTLE1BQU0scUVBQXFFLGdEQUFnRCxzQ0FBc0Msc0ZBQXNGLCtDQUErQyxnQkFBZ0IsOEJBQThCLGNBQWMsVUFBVSxzRUFBc0UscUJBQXFCLGVBQWUsbUNBQW1DLGdCQUFnQiwyQkFBMkIsMkNBQTJDLHFCQUFxQiwwVEFBMFQsMEJBQTBCLFlBQVksMkpBQTJKLE9BQU8sdUZBQXVGLE9BQU8saVRBQWlULHVEQUF1RCxzREFBc0QsNFVBQTRVLFlBQVksbURBQW1ELGtCQUFrQix1Q0FBdUMsaUJBQWlCLG1HQUFtRyxxQkFBcUIsY0FBYyw0Q0FBNEMsd0JBQXdCLHFHQUFxRyxvREFBb0Qsd0NBQXdDLEVBQUUsOEJBQThCLDRCQUE0QixxREFBcUQsK0RBQStELDJEQUEyRCxZQUFZLFdBQVcsMEZBQTBGLHNFQUFzRSxRQUFRLGtCQUFrQiw4RUFBOEUsYUFBYSwrREFBK0QsdUxBQXVMLFlBQVksOFRBQThULHFFQUFxRSwwQkFBMEIsd0RBQXdELGlCQUFpQiw0RkFBNEYsYUFBYSw0Q0FBNEMsd0NBQXdDLEdBQUcsOENBQThDLDhEQUE4RCxhQUFhLHVIQUF1SCw0QkFBNEIsbUZBQW1GLGdCQUFnQixxQkFBcUIsa0RBQWtELHFCQUFxQixrREFBa0QsOEJBQThCLG9DQUFvQyxJQUFJLFVBQVUsR0FBRyx3QkFBd0IsVUFBVSxFQUFFLHFDQUFxQyw4QkFBOEIsNEJBQTRCLHlEQUF5RCxFQUFFLElBQUksT0FBTywrQ0FBK0MsMEJBQTBCLDZCQUE2Qiw2QkFBNkIsR0FBRyw4QkFBOEIsZ0JBQWdCLGdEQUFnRCxTQUFTLHVEQUF1RCx5Q0FBeUMsNEZBQTRGLHNKQUFzSiw0Q0FBNEMsdUJBQXVCLElBQUksb0RBQW9ELFFBQVEsVUFBVSxzQkFBc0IsS0FBSywwQ0FBMEMsbUJBQW1CLGlCQUFpQix3RkFBd0YsOENBQThDLHVCQUF1QixJQUFJLEtBQUssNkRBQTZELGtFQUFrRSxzSkFBc0oscUJBQXFCLFVBQVUsa0JBQWtCLGlCQUFpQixTQUFTLHdDQUF3QyxPQUFPLGlEQUFpRCxXQUFXLHdCQUF3QiwwREFBMEQsNkVBQTZFLGtDQUFrQyxhQUFhLHlCQUF5QiwyREFBMkQsdUVBQXVFLGNBQWMsaUNBQWlDLFVBQVUsd0NBQXdDLEVBQUUsNkJBQTZCLDZMQUE2TCxpREFBaUQseUJBQXlCLDRMQUE0TCxnRUFBZ0UsT0FBTyxrREFBa0QsdUVBQXVFLDZCQUE2QixrTEFBa0wsa0NBQWtDLFlBQVksSUFBSSxLQUFLLHFDQUFxQyw2REFBNkQsNEVBQTRFLDRKQUE0SixtQkFBbUIsMEJBQTBCLG9DQUFvQyxjQUFjLFVBQVUsaURBQWlELHFFQUFxRSxnQkFBZ0IsZ0ZBQWdGLHNCQUFzQiwrQkFBK0IsMERBQTBELGdHQUFnRyxhQUFhLHdEQUF3RCxFQUFFLCtCQUErQix3QkFBd0IsaUdBQWlHLEVBQUUsMEJBQTBCLDZCQUE2QixXQUFXLHVEQUF1RCx1Q0FBdUMsdUJBQXVCLHlEQUF5RCxFQUFFLElBQUksUUFBUSxJQUFJLHNGQUFzRiwrRkFBK0YsZ0JBQWdCLHNCQUFzQiwwQkFBMEIsVUFBVSxXQUFXLEVBQUUsU0FBUyx3UEFBd1AsNEdBQTRHLEtBQUssc0xBQXNMLG1CQUFtQixpQkFBaUIsaUlBQWlJLHFCQUFxQixVQUFVLHlCQUF5QixVQUFVLGtCQUFrQixpQkFBaUIsU0FBUywrQ0FBK0MsT0FBTyxzREFBc0QsU0FBUyw2QkFBNkIseUVBQXlFLCtDQUErQywwWkFBMFosT0FBTyx1REFBdUQsU0FBUyw2QkFBNkIsc0JBQXNCLFVBQVUscURBQXFELFNBQVMsd0VBQXdFLGlCQUFpQixvYkFBb2IsY0FBYyxNQUFNLHVFQUF1RSxpU0FBaVMsU0FBUyxpQkFBaUIsa0dBQWtHLG9CQUFvQixnS0FBZ0ssOEZBQThGLGdHQUFnRywwQkFBMEIsb0NBQW9DLGtCQUFrQixpREFBaUQsZ0JBQWdCLGlDQUFpQyw2Q0FBNkMsK0NBQStDLHNGQUFzRixzREFBc0QsZ0JBQWdCLCtDQUErQyxhQUFhLE1BQU0sU0FBUyxjQUFjLGlIQUFpSCxtQkFBbUIsU0FBUywyQ0FBMkMsZ0NBQWdDLGdDQUFnQyxFQUFFLHVCQUF1QiwwQkFBMEIsR0FBRyxzREFBc0QsOEJBQThCLElBQUksNkdBQTZHLGlCQUFpQixlQUFlLEVBQUUsbUdBQW1HLHdEQUF3RCwwQkFBMEIsNkJBQTZCLHVDQUF1Qyx1QkFBdUIseURBQXlELEVBQUUsSUFBSSxRQUFRLEdBQUcscUJBQXFCLDZEQUE2RCw4Q0FBOEMsdUJBQXVCLElBQUksS0FBSyw2QkFBNkIseUNBQXlDLDBCQUEwQixTQUFTLDBCQUEwQixNQUFNLCtDQUErQywyR0FBMkcsdUlBQXVJLG1DQUFtQyxvQkFBb0IsK0JBQStCLDBCQUEwQixnQ0FBZ0MsbUxBQW1MLHdDQUF3QywrQkFBK0IseURBQXlELG1JQUFtSSxtSkFBbUosVUFBVSx1WUFBdVkseURBQXlELFNBQVMsU0FBUyxjQUFjLDRCQUE0QixXQUFXLDZDQUE2QyxxQ0FBcUMsT0FBTyx3QkFBd0IsNlBBQTZQLG1CQUFtQiwyRkFBMkYsNkJBQTZCLHdCQUF3QixzQ0FBc0MsK0RBQStELGdDQUFnQyxzQ0FBc0Msd0NBQXdDLEVBQUUsUUFBUSw2UUFBNlEsMkJBQTJCLG1CQUFtQiw2QkFBNkIsNkJBQTZCLHNDQUFzQyxnQ0FBZ0MsK0VBQStFLEVBQUUsZ0NBQWdDLDZDQUE2QyxnQkFBZ0IsMEJBQTBCLFVBQVUsNEZBQTRGLEtBQUssNEhBQTRILFNBQVMsZUFBZSx1RUFBdUUsUUFBUSwySkFBMkosS0FBSyxRQUFRLFFBQVEsZ0dBQWdHLG9CQUFvQixRQUFRLGNBQWMsbUJBQW1CLHNDQUFzQyxvR0FBb0cscUJBQXFCLGNBQWMsVUFBVSxpQ0FBaUMsb0RBQW9ELFVBQVUsNEhBQTRILDhCQUE4Qix1QkFBdUIsVUFBVSw0R0FBNEcscUJBQXFCLGlEQUFpRCxVQUFVLDhCQUE4QixLQUFLLDJDQUEyQyxTQUFTLGVBQWUsaUZBQWlGLFdBQVcsTUFBTSwwQkFBMEIsY0FBYyxxTkFBcU4sYUFBYSxvRUFBb0Usa0JBQWtCLE1BQU0sU0FBUyxJQUFJLGNBQWMsY0FBYyw2Q0FBNkMsK0JBQStCLGlHQUFpRyxrQkFBa0IsMkVBQTJFLGNBQWMsVUFBVSxpQ0FBaUMsd0JBQXdCLFVBQVUsaUNBQWlDLEtBQUssZ0VBQWdFLG1CQUFtQixpQkFBaUIsbVJBQW1SLHFCQUFxQixVQUFVLGtCQUFrQixjQUFjLFVBQVUsOENBQThDLFFBQVEsK0VBQStFLGdCQUFnQiw2UUFBNlEsbURBQW1ELHlEQUF5RCxFQUFFLGdEQUFnRCxPQUFPLGdEQUFnRCxvRUFBb0UsaUJBQWlCLDJCQUEyQiwwU0FBMFMsVUFBVSw2SEFBNkgsZUFBZSxxQkFBcUIsc0JBQXNCLGVBQWUsdUVBQXVFLEVBQUUsdUJBQXVCLGVBQWUsMEJBQTBCLEVBQUUsY0FBYyxVQUFVLHVFQUF1RSxtQkFBbUIsZ0JBQWdCLG1FQUFtRSw0WkFBNFosa0hBQWtILGdCQUFnQixFQUFFLGlCQUFpQixrQkFBa0IsZ0VBQWdFLG9KQUFvSixrREFBa0Qsa0JBQWtCLHNHQUFzRyxhQUFhLG9OQUFvTix5SUFBeUksRUFBRSxpQkFBaUIsZ0RBQWdELGdNQUFnTSx5QkFBeUIsY0FBYyxnREFBZ0QsNkJBQTZCLDZFQUE2RSxNQUFNLG1DQUFtQyx5REFBeUQsa0lBQWtJLHFEQUFxRCxlQUFlLGVBQWUsc0NBQXNDLGdCQUFnQiw0R0FBNEcseUlBQXlJLG9CQUFvQix1RUFBdUUsNEJBQTRCLDZCQUE2Qix1Q0FBdUMsdUJBQXVCLHlEQUF5RCxFQUFFLElBQUksU0FBUyxJQUFJLGdGQUFnRixnQkFBZ0Isb0ZBQW9GLG1EQUFtRCxzQkFBc0IsRUFBRSx5Q0FBeUMsZUFBZSxVQUFVLGtDQUFrQyxLQUFLLHdEQUF3RCxtQkFBbUIsaUJBQWlCLDBLQUEwSyxrQkFBa0Isa0JBQWtCLHFCQUFxQixVQUFVLFVBQVUsOENBQThDLFFBQVEsNERBQTRELGdCQUFnQiw0VUFBNFUsOEZBQThGLGdCQUFnQixFQUFFLG9CQUFvQixPQUFPLHlPQUF5Tyw0UEFBNFAscUJBQXFCLFVBQVUsc0VBQXNFLGNBQWMsVUFBVSx1RUFBdUUsdUJBQXVCLHNCQUFzQixlQUFlLGdKQUFnSixFQUFFLHVCQUF1QixlQUFlLDBCQUEwQixFQUFFLHFCQUFxQixzREFBc0QscURBQXFELEVBQUUsMEJBQTBCLDZCQUE2Qix1Q0FBdUMsdUJBQXVCLCtGQUErRixFQUFFLElBQUksWUFBWSxJQUFJLHdGQUF3RixnQkFBZ0IsMEVBQTBFLG1DQUFtQyxzQkFBc0IsRUFBRSxxQ0FBcUMsMEVBQTBFLG9JQUFvSSxrUkFBa1Isa0NBQWtDLGlDQUFpQyx1RkFBdUYseUNBQXlDLHVCQUF1QixJQUFJLDZCQUE2QixVQUFVLG1CQUFtQixzQkFBc0IsdUNBQXVDLDRIQUE0SCx1QkFBdUIsSUFBSSxLQUFLLHdDQUF3QyxtQkFBbUIsV0FBVyxTQUFTLG9FQUFvRSxjQUFjLHVDQUF1QyxFQUFFLHdCQUF3Qiw0REFBNEQsZ2NBQWdjLEtBQUssdUZBQXVGLEtBQUssOFdBQThXLDZUQUE2VCxtQkFBbUIsS0FBSyw2UkFBNlIsbUJBQW1CLGlCQUFpQixpR0FBaUcsc0ZBQXNGLHNGQUFzRixxQkFBcUIsVUFBVSxrQkFBa0IsZ0JBQWdCLG1CQUFtQixVQUFVLHlCQUF5QixVQUFVLFNBQVMsbUJBQW1CLFVBQVUsbUJBQW1CLGdCQUFnQixpQ0FBaUMsVUFBVSx5QkFBeUIsNkNBQTZDLDBHQUEwRyxLQUFLLHNGQUFzRix3QkFBd0IsVUFBVSwyTEFBMkwsT0FBTywrRkFBK0Ysa0RBQWtELHlMQUF5TCxpQ0FBaUMsb0NBQW9DLEdBQUcsaUNBQWlDLGtDQUFrQyxTQUFTLHlCQUF5Qix3SEFBd0gsb0pBQW9KLDRCQUE0QixNQUFNLFlBQVksY0FBYyxnVEFBZ1QsZ0VBQWdFLGdJQUFnSSxzQkFBc0IsRUFBRSw0Q0FBNEMseUJBQXlCLHlCQUF5Qiw4R0FBOEcsYUFBYSxPQUFPLHdCQUF3Qiw2QkFBNkIsZ0ZBQWdGLHFPQUFxTyw0Q0FBNEMseUJBQXlCLDZQQUE2UCxpQ0FBaUMsU0FBUywyQ0FBMkMsZ0JBQWdCLGdDQUFnQyxnQkFBZ0IsNEJBQTRCLHNDQUFzQyxrQ0FBa0Msc0JBQXNCLGdGQUFnRixjQUFjLGdFQUFnRSw4QkFBOEIsdUJBQXVCLDZDQUE2Qyx1QkFBdUIsNFFBQTRRLFdBQVcsaUZBQWlGLHdDQUF3QyxvQkFBb0IsNkNBQTZDLGtDQUFrQywyRkFBMkYsYUFBYSxNQUFNLFNBQVMsY0FBYyxpSEFBaUgsNEJBQTRCLG1EQUFtRCxvQkFBb0IsU0FBUyx3QkFBd0IscUJBQXFCLG9EQUFvRCxFQUFFLHVCQUF1QiwwQkFBMEIsRUFBRSxnQ0FBZ0MsZ0NBQWdDLEVBQUUsc0JBQXNCLFlBQVksc0JBQXNCLFNBQVMsRUFBRSx5RkFBeUYsb0JBQW9CLDBFQUEwRSxPQUFPLDZHQUE2Ryx1QkFBdUIsc0NBQXNDLDRCQUE0QixHQUFHLHlCQUF5QixHQUFHLGtCQUFrQiwyQkFBMkIsZ0JBQWdCLDRDQUE0Qyx3R0FBd0csc0JBQXNCLHFLQUFxSyw2SEFBNkgsOEJBQThCLDJCQUEyQixrSEFBa0gsNkNBQTZDLGtCQUFrQixZQUFZLDBHQUEwRywyT0FBMk8sWUFBWSxnVEFBZ1QsaUNBQWlDLGlDQUFpQyxZQUFZLGtSQUFrUixnQ0FBZ0MsaUNBQWlDLHVCQUF1QixzRUFBc0UsU0FBUyxjQUFjLDJDQUEyQyxrQ0FBa0MsdUJBQXVCLE1BQU0sK0RBQStELDhGQUE4RiwwQkFBMEIscU9BQXFPLHFCQUFxQixXQUFXLGtHQUFrRyxTQUFTLGlCQUFpQixvREFBb0QsNEJBQTRCLDhDQUE4QywyRUFBMkUsdUJBQXVCLG1CQUFtQixnQ0FBZ0MsTUFBTSxRQUFRLEdBQUcsaUhBQWlILDBCQUEwQiw2QkFBNkIsdUNBQXVDLHVCQUF1Qix5REFBeUQsRUFBRSxJQUFJLFFBQVEsSUFBSSxNQUFNLFVBQVUsK05BQStOLEtBQUssc0RBQXNELEtBQUssNlJBQTZSLG9CQUFvQixxQkFBcUIsVUFBVSxrQkFBa0IsZ0JBQWdCLG1CQUFtQixVQUFVLHlCQUF5QixVQUFVLGdCQUFnQiwyQ0FBMkMsY0FBYyxtSUFBbUksY0FBYywyREFBMkQsdUJBQXVCLG1CQUFtQiwwQkFBMEIsNkJBQTZCLHVDQUF1Qyx1QkFBdUIseURBQXlELEVBQUUsSUFBSSxRQUFRLElBQUksTUFBTSxVQUFVLGtDQUFrQyxLQUFLLDBEQUEwRCxrREFBa0QsbUJBQW1CLGlCQUFpQixtU0FBbVMscUJBQXFCLFVBQVUsa0JBQWtCLGtCQUFrQixVQUFVLDBLQUEwSyxvSEFBb0gsbUNBQW1DLE1BQU0sa0NBQWtDLDZDQUE2QyxZQUFZLGtEQUFrRCxrREFBa0QsRUFBRSxVQUFVLDJEQUEyRCxjQUFjLFVBQVUsMEVBQTBFLHFFQUFxRSxnQkFBZ0Isa0dBQWtHLG1CQUFtQixvSEFBb0gsbUJBQW1CLDBHQUEwRyxXQUFXLDJIQUEySCxnREFBZ0QsOENBQThDLDBDQUEwQyxLQUFLLGdIQUFnSCwrQkFBK0IsSUFBSSxvSkFBb0osYUFBYSxtQ0FBbUMsZ0NBQWdDLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxrREFBa0QsMExBQTBMLGdIQUFnSCxnRUFBZ0UsRUFBRSx5REFBeUQsZ0JBQWdCLEVBQUUsU0FBUyxrSEFBa0gsMEJBQTBCLDZCQUE2Qix1Q0FBdUMsdUJBQXVCLHlEQUF5RCxFQUFFLElBQUksUUFBUSxJQUFJLDhDQUE4Qyx1REFBdUQsUUFBUSxtQkFBbUIsa0JBQWtCLFlBQVksT0FBTyxzSUFBc0ksTUFBTSxzRUFBc0UsTUFBTSwrRUFBK0UsOEJBQThCLHFDQUFxQyw0QkFBNEIsT0FBTywwQ0FBMEMsZ0JBQWdCLHdEQUF3RCxnQ0FBZ0MsYUFBYSw2QkFBNkIsNEJBQTRCLDBDQUEwQyxnQkFBZ0IsR0FBRyx1Q0FBdUMsaUJBQWlCLDJMQUEyTCxrRUFBa0UsMkJBQTJCLE1BQU0sNkJBQTZCLGtFQUFrRSxtR0FBbUcsd0pBQXdKLG1CQUFtQixvRkFBb0YsK0JBQStCLHlHQUF5RyxPQUFPLDBCQUEwQiw2QkFBNkIscUNBQXFDLHVCQUF1Qix5REFBeUQsRUFBRSxJQUFJLFFBQVEsSUFBSSw4SEFBOEgscUdBQXFHLFNBQVMsVUFBVSxzREFBc0QsS0FBSyxvQ0FBb0MsbUJBQW1CLGlCQUFpQiw4SUFBOEkseUJBQXlCLFVBQVUscUJBQXFCLFVBQVUsa0JBQWtCLGNBQWMsT0FBTyx5U0FBeVMsOEdBQThHLHdDQUF3QyxPQUFPLHVLQUF1SyxnS0FBZ0sseUNBQXlDLFVBQVUsc0hBQXNILGNBQWMsVUFBVSwwRUFBMEUsNkNBQTZDLHFCQUFxQixnSEFBZ0gsWUFBWSx1QkFBdUIsb0JBQW9CLGVBQWUsMkRBQTJELE1BQU0sNERBQTRELHNDQUFzQyx3QkFBd0Isd0VBQXdFLGdCQUFnQixvUkFBb1IsZ0JBQWdCLCtDQUErQywwQkFBMEIsNkJBQTZCLHVDQUF1Qyx1QkFBdUIseURBQXlELEVBQUUsSUFBSSxZQUFZLElBQUksb0JBQW9CLCtIQUErSDtBQUM3MXpEIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9kaXN0L2pzL2Jvb3RzdHJhcC5taW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAgKiBCb290c3RyYXAgdjUuMS4wIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKVxuICAqIENvcHlyaWdodCAyMDExLTIwMjEgVGhlIEJvb3RzdHJhcCBBdXRob3JzIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvZ3JhcGhzL2NvbnRyaWJ1dG9ycylcbiAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgKi9cbiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUocmVxdWlyZShcIkBwb3BwZXJqcy9jb3JlXCIpKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcIkBwb3BwZXJqcy9jb3JlXCJdLGUpOih0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6dHx8c2VsZikuYm9vdHN0cmFwPWUodC5Qb3BwZXIpfSh0aGlzLChmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKHQpe2lmKHQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiB0JiZPYmplY3Qua2V5cyh0KS5mb3JFYWNoKChmdW5jdGlvbihpKXtpZihcImRlZmF1bHRcIiE9PWkpe3ZhciBzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxpKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxpLHMuZ2V0P3M6e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbaV19fSl9fSkpLGUuZGVmYXVsdD10LE9iamVjdC5mcmVlemUoZSl9dmFyIGk9ZSh0KTtjb25zdCBzPXQ9PntsZXQgZT10LmdldEF0dHJpYnV0ZShcImRhdGEtYnMtdGFyZ2V0XCIpO2lmKCFlfHxcIiNcIj09PWUpe2xldCBpPXQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKTtpZighaXx8IWkuaW5jbHVkZXMoXCIjXCIpJiYhaS5zdGFydHNXaXRoKFwiLlwiKSlyZXR1cm4gbnVsbDtpLmluY2x1ZGVzKFwiI1wiKSYmIWkuc3RhcnRzV2l0aChcIiNcIikmJihpPVwiI1wiK2kuc3BsaXQoXCIjXCIpWzFdKSxlPWkmJlwiI1wiIT09aT9pLnRyaW0oKTpudWxsfXJldHVybiBlfSxuPXQ9Pntjb25zdCBlPXModCk7cmV0dXJuIGUmJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSk/ZTpudWxsfSxvPXQ9Pntjb25zdCBlPXModCk7cmV0dXJuIGU/ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKTpudWxsfSxyPXQ9Pnt0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwidHJhbnNpdGlvbmVuZFwiKSl9LGE9dD0+ISghdHx8XCJvYmplY3RcIiE9dHlwZW9mIHQpJiYodm9pZCAwIT09dC5qcXVlcnkmJih0PXRbMF0pLHZvaWQgMCE9PXQubm9kZVR5cGUpLGw9dD0+YSh0KT90LmpxdWVyeT90WzBdOnQ6XCJzdHJpbmdcIj09dHlwZW9mIHQmJnQubGVuZ3RoPjA/ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0KTpudWxsLGM9KHQsZSxpKT0+e09iamVjdC5rZXlzKGkpLmZvckVhY2gocz0+e2NvbnN0IG49aVtzXSxvPWVbc10scj1vJiZhKG8pP1wiZWxlbWVudFwiOm51bGw9PShsPW8pP1wiXCIrbDp7fS50b1N0cmluZy5jYWxsKGwpLm1hdGNoKC9cXHMoW2Etel0rKS9pKVsxXS50b0xvd2VyQ2FzZSgpO3ZhciBsO2lmKCFuZXcgUmVnRXhwKG4pLnRlc3QocikpdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0LnRvVXBwZXJDYXNlKCl9OiBPcHRpb24gXCIke3N9XCIgcHJvdmlkZWQgdHlwZSBcIiR7cn1cIiBidXQgZXhwZWN0ZWQgdHlwZSBcIiR7bn1cIi5gKX0pfSxoPXQ9PiEoIWEodCl8fDA9PT10LmdldENsaWVudFJlY3RzKCkubGVuZ3RoKSYmXCJ2aXNpYmxlXCI9PT1nZXRDb21wdXRlZFN0eWxlKHQpLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmlsaXR5XCIpLGQ9dD0+IXR8fHQubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERXx8ISF0LmNsYXNzTGlzdC5jb250YWlucyhcImRpc2FibGVkXCIpfHwodm9pZCAwIT09dC5kaXNhYmxlZD90LmRpc2FibGVkOnQuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikmJlwiZmFsc2VcIiE9PXQuZ2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIikpLHU9dD0+e2lmKCFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXR0YWNoU2hhZG93KXJldHVybiBudWxsO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZ2V0Um9vdE5vZGUpe2NvbnN0IGU9dC5nZXRSb290Tm9kZSgpO3JldHVybiBlIGluc3RhbmNlb2YgU2hhZG93Um9vdD9lOm51bGx9cmV0dXJuIHQgaW5zdGFuY2VvZiBTaGFkb3dSb290P3Q6dC5wYXJlbnROb2RlP3UodC5wYXJlbnROb2RlKTpudWxsfSxnPSgpPT57fSxwPXQ9Pnt0Lm9mZnNldEhlaWdodH0sZj0oKT0+e2NvbnN0e2pRdWVyeTp0fT13aW5kb3c7cmV0dXJuIHQmJiFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZShcImRhdGEtYnMtbm8tanF1ZXJ5XCIpP3Q6bnVsbH0sXz1bXSxtPSgpPT5cInJ0bFwiPT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpcixiPXQ9Pnt2YXIgZTtlPSgpPT57Y29uc3QgZT1mKCk7aWYoZSl7Y29uc3QgaT10Lk5BTUUscz1lLmZuW2ldO2UuZm5baV09dC5qUXVlcnlJbnRlcmZhY2UsZS5mbltpXS5Db25zdHJ1Y3Rvcj10LGUuZm5baV0ubm9Db25mbGljdD0oKT0+KGUuZm5baV09cyx0LmpRdWVyeUludGVyZmFjZSl9fSxcImxvYWRpbmdcIj09PWRvY3VtZW50LnJlYWR5U3RhdGU/KF8ubGVuZ3RofHxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCgpPT57Xy5mb3JFYWNoKHQ9PnQoKSl9KSxfLnB1c2goZSkpOmUoKX0sdj10PT57XCJmdW5jdGlvblwiPT10eXBlb2YgdCYmdCgpfSx5PSh0LGUsaT0hMCk9PntpZighaSlyZXR1cm4gdm9pZCB2KHQpO2NvbnN0IHM9KHQ9PntpZighdClyZXR1cm4gMDtsZXR7dHJhbnNpdGlvbkR1cmF0aW9uOmUsdHJhbnNpdGlvbkRlbGF5Oml9PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpO2NvbnN0IHM9TnVtYmVyLnBhcnNlRmxvYXQoZSksbj1OdW1iZXIucGFyc2VGbG9hdChpKTtyZXR1cm4gc3x8bj8oZT1lLnNwbGl0KFwiLFwiKVswXSxpPWkuc3BsaXQoXCIsXCIpWzBdLDFlMyooTnVtYmVyLnBhcnNlRmxvYXQoZSkrTnVtYmVyLnBhcnNlRmxvYXQoaSkpKTowfSkoZSkrNTtsZXQgbj0hMTtjb25zdCBvPSh7dGFyZ2V0Oml9KT0+e2k9PT1lJiYobj0hMCxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0cmFuc2l0aW9uZW5kXCIsbyksdih0KSl9O2UuYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIixvKSxzZXRUaW1lb3V0KCgpPT57bnx8cihlKX0scyl9LHc9KHQsZSxpLHMpPT57bGV0IG49dC5pbmRleE9mKGUpO2lmKC0xPT09bilyZXR1cm4gdFshaSYmcz90Lmxlbmd0aC0xOjBdO2NvbnN0IG89dC5sZW5ndGg7cmV0dXJuIG4rPWk/MTotMSxzJiYobj0obitvKSVvKSx0W01hdGgubWF4KDAsTWF0aC5taW4obixvLTEpKV19LEU9L1teLl0qKD89XFwuLiopXFwufC4qLyxBPS9cXC4uKi8sVD0vOjpcXGQrJC8sQz17fTtsZXQgaz0xO2NvbnN0IEw9e21vdXNlZW50ZXI6XCJtb3VzZW92ZXJcIixtb3VzZWxlYXZlOlwibW91c2VvdXRcIn0sUz0vXihtb3VzZWVudGVyfG1vdXNlbGVhdmUpL2ksTz1uZXcgU2V0KFtcImNsaWNrXCIsXCJkYmxjbGlja1wiLFwibW91c2V1cFwiLFwibW91c2Vkb3duXCIsXCJjb250ZXh0bWVudVwiLFwibW91c2V3aGVlbFwiLFwiRE9NTW91c2VTY3JvbGxcIixcIm1vdXNlb3ZlclwiLFwibW91c2VvdXRcIixcIm1vdXNlbW92ZVwiLFwic2VsZWN0c3RhcnRcIixcInNlbGVjdGVuZFwiLFwia2V5ZG93blwiLFwia2V5cHJlc3NcIixcImtleXVwXCIsXCJvcmllbnRhdGlvbmNoYW5nZVwiLFwidG91Y2hzdGFydFwiLFwidG91Y2htb3ZlXCIsXCJ0b3VjaGVuZFwiLFwidG91Y2hjYW5jZWxcIixcInBvaW50ZXJkb3duXCIsXCJwb2ludGVybW92ZVwiLFwicG9pbnRlcnVwXCIsXCJwb2ludGVybGVhdmVcIixcInBvaW50ZXJjYW5jZWxcIixcImdlc3R1cmVzdGFydFwiLFwiZ2VzdHVyZWNoYW5nZVwiLFwiZ2VzdHVyZWVuZFwiLFwiZm9jdXNcIixcImJsdXJcIixcImNoYW5nZVwiLFwicmVzZXRcIixcInNlbGVjdFwiLFwic3VibWl0XCIsXCJmb2N1c2luXCIsXCJmb2N1c291dFwiLFwibG9hZFwiLFwidW5sb2FkXCIsXCJiZWZvcmV1bmxvYWRcIixcInJlc2l6ZVwiLFwibW92ZVwiLFwiRE9NQ29udGVudExvYWRlZFwiLFwicmVhZHlzdGF0ZWNoYW5nZVwiLFwiZXJyb3JcIixcImFib3J0XCIsXCJzY3JvbGxcIl0pO2Z1bmN0aW9uIE4odCxlKXtyZXR1cm4gZSYmYCR7ZX06OiR7aysrfWB8fHQudWlkRXZlbnR8fGsrK31mdW5jdGlvbiBEKHQpe2NvbnN0IGU9Tih0KTtyZXR1cm4gdC51aWRFdmVudD1lLENbZV09Q1tlXXx8e30sQ1tlXX1mdW5jdGlvbiBJKHQsZSxpPW51bGwpe2NvbnN0IHM9T2JqZWN0LmtleXModCk7Zm9yKGxldCBuPTAsbz1zLmxlbmd0aDtuPG87bisrKXtjb25zdCBvPXRbc1tuXV07aWYoby5vcmlnaW5hbEhhbmRsZXI9PT1lJiZvLmRlbGVnYXRpb25TZWxlY3Rvcj09PWkpcmV0dXJuIG99cmV0dXJuIG51bGx9ZnVuY3Rpb24geCh0LGUsaSl7Y29uc3Qgcz1cInN0cmluZ1wiPT10eXBlb2YgZSxuPXM/aTplO2xldCBvPWoodCk7cmV0dXJuIE8uaGFzKG8pfHwobz10KSxbcyxuLG9dfWZ1bmN0aW9uIFAodCxlLGkscyxuKXtpZihcInN0cmluZ1wiIT10eXBlb2YgZXx8IXQpcmV0dXJuO2lmKGl8fChpPXMscz1udWxsKSxTLnRlc3QoZSkpe2NvbnN0IHQ9dD0+ZnVuY3Rpb24oZSl7aWYoIWUucmVsYXRlZFRhcmdldHx8ZS5yZWxhdGVkVGFyZ2V0IT09ZS5kZWxlZ2F0ZVRhcmdldCYmIWUuZGVsZWdhdGVUYXJnZXQuY29udGFpbnMoZS5yZWxhdGVkVGFyZ2V0KSlyZXR1cm4gdC5jYWxsKHRoaXMsZSl9O3M/cz10KHMpOmk9dChpKX1jb25zdFtvLHIsYV09eChlLGkscyksbD1EKHQpLGM9bFthXXx8KGxbYV09e30pLGg9SShjLHIsbz9pOm51bGwpO2lmKGgpcmV0dXJuIHZvaWQoaC5vbmVPZmY9aC5vbmVPZmYmJm4pO2NvbnN0IGQ9TihyLGUucmVwbGFjZShFLFwiXCIpKSx1PW8/ZnVuY3Rpb24odCxlLGkpe3JldHVybiBmdW5jdGlvbiBzKG4pe2NvbnN0IG89dC5xdWVyeVNlbGVjdG9yQWxsKGUpO2ZvcihsZXR7dGFyZ2V0OnJ9PW47ciYmciE9PXRoaXM7cj1yLnBhcmVudE5vZGUpZm9yKGxldCBhPW8ubGVuZ3RoO2EtLTspaWYob1thXT09PXIpcmV0dXJuIG4uZGVsZWdhdGVUYXJnZXQ9cixzLm9uZU9mZiYmSC5vZmYodCxuLnR5cGUsZSxpKSxpLmFwcGx5KHIsW25dKTtyZXR1cm4gbnVsbH19KHQsaSxzKTpmdW5jdGlvbih0LGUpe3JldHVybiBmdW5jdGlvbiBpKHMpe3JldHVybiBzLmRlbGVnYXRlVGFyZ2V0PXQsaS5vbmVPZmYmJkgub2ZmKHQscy50eXBlLGUpLGUuYXBwbHkodCxbc10pfX0odCxpKTt1LmRlbGVnYXRpb25TZWxlY3Rvcj1vP2k6bnVsbCx1Lm9yaWdpbmFsSGFuZGxlcj1yLHUub25lT2ZmPW4sdS51aWRFdmVudD1kLGNbZF09dSx0LmFkZEV2ZW50TGlzdGVuZXIoYSx1LG8pfWZ1bmN0aW9uIE0odCxlLGkscyxuKXtjb25zdCBvPUkoZVtpXSxzLG4pO28mJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoaSxvLEJvb2xlYW4obikpLGRlbGV0ZSBlW2ldW28udWlkRXZlbnRdKX1mdW5jdGlvbiBqKHQpe3JldHVybiB0PXQucmVwbGFjZShBLFwiXCIpLExbdF18fHR9Y29uc3QgSD17b24odCxlLGkscyl7UCh0LGUsaSxzLCExKX0sb25lKHQsZSxpLHMpe1AodCxlLGkscywhMCl9LG9mZih0LGUsaSxzKXtpZihcInN0cmluZ1wiIT10eXBlb2YgZXx8IXQpcmV0dXJuO2NvbnN0W24sbyxyXT14KGUsaSxzKSxhPXIhPT1lLGw9RCh0KSxjPWUuc3RhcnRzV2l0aChcIi5cIik7aWYodm9pZCAwIT09byl7aWYoIWx8fCFsW3JdKXJldHVybjtyZXR1cm4gdm9pZCBNKHQsbCxyLG8sbj9pOm51bGwpfWMmJk9iamVjdC5rZXlzKGwpLmZvckVhY2goaT0+eyFmdW5jdGlvbih0LGUsaSxzKXtjb25zdCBuPWVbaV18fHt9O09iamVjdC5rZXlzKG4pLmZvckVhY2gobz0+e2lmKG8uaW5jbHVkZXMocykpe2NvbnN0IHM9bltvXTtNKHQsZSxpLHMub3JpZ2luYWxIYW5kbGVyLHMuZGVsZWdhdGlvblNlbGVjdG9yKX19KX0odCxsLGksZS5zbGljZSgxKSl9KTtjb25zdCBoPWxbcl18fHt9O09iamVjdC5rZXlzKGgpLmZvckVhY2goaT0+e2NvbnN0IHM9aS5yZXBsYWNlKFQsXCJcIik7aWYoIWF8fGUuaW5jbHVkZXMocykpe2NvbnN0IGU9aFtpXTtNKHQsbCxyLGUub3JpZ2luYWxIYW5kbGVyLGUuZGVsZWdhdGlvblNlbGVjdG9yKX19KX0sdHJpZ2dlcih0LGUsaSl7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGV8fCF0KXJldHVybiBudWxsO2NvbnN0IHM9ZigpLG49aihlKSxvPWUhPT1uLHI9Ty5oYXMobik7bGV0IGEsbD0hMCxjPSEwLGg9ITEsZD1udWxsO3JldHVybiBvJiZzJiYoYT1zLkV2ZW50KGUsaSkscyh0KS50cmlnZ2VyKGEpLGw9IWEuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSxjPSFhLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCksaD1hLmlzRGVmYXVsdFByZXZlbnRlZCgpKSxyPyhkPWRvY3VtZW50LmNyZWF0ZUV2ZW50KFwiSFRNTEV2ZW50c1wiKSxkLmluaXRFdmVudChuLGwsITApKTpkPW5ldyBDdXN0b21FdmVudChlLHtidWJibGVzOmwsY2FuY2VsYWJsZTohMH0pLHZvaWQgMCE9PWkmJk9iamVjdC5rZXlzKGkpLmZvckVhY2godD0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShkLHQse2dldDooKT0+aVt0XX0pfSksaCYmZC5wcmV2ZW50RGVmYXVsdCgpLGMmJnQuZGlzcGF0Y2hFdmVudChkKSxkLmRlZmF1bHRQcmV2ZW50ZWQmJnZvaWQgMCE9PWEmJmEucHJldmVudERlZmF1bHQoKSxkfX0sQj1uZXcgTWFwO3ZhciB6PXtzZXQodCxlLGkpe0IuaGFzKHQpfHxCLnNldCh0LG5ldyBNYXApO2NvbnN0IHM9Qi5nZXQodCk7cy5oYXMoZSl8fDA9PT1zLnNpemU/cy5zZXQoZSxpKTpjb25zb2xlLmVycm9yKGBCb290c3RyYXAgZG9lc24ndCBhbGxvdyBtb3JlIHRoYW4gb25lIGluc3RhbmNlIHBlciBlbGVtZW50LiBCb3VuZCBpbnN0YW5jZTogJHtBcnJheS5mcm9tKHMua2V5cygpKVswXX0uYCl9LGdldDoodCxlKT0+Qi5oYXModCkmJkIuZ2V0KHQpLmdldChlKXx8bnVsbCxyZW1vdmUodCxlKXtpZighQi5oYXModCkpcmV0dXJuO2NvbnN0IGk9Qi5nZXQodCk7aS5kZWxldGUoZSksMD09PWkuc2l6ZSYmQi5kZWxldGUodCl9fTtjbGFzcyBSe2NvbnN0cnVjdG9yKHQpeyh0PWwodCkpJiYodGhpcy5fZWxlbWVudD10LHouc2V0KHRoaXMuX2VsZW1lbnQsdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSx0aGlzKSl9ZGlzcG9zZSgpe3oucmVtb3ZlKHRoaXMuX2VsZW1lbnQsdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSksSC5vZmYodGhpcy5fZWxlbWVudCx0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0tFWSksT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykuZm9yRWFjaCh0PT57dGhpc1t0XT1udWxsfSl9X3F1ZXVlQ2FsbGJhY2sodCxlLGk9ITApe3kodCxlLGkpfXN0YXRpYyBnZXRJbnN0YW5jZSh0KXtyZXR1cm4gei5nZXQobCh0KSx0aGlzLkRBVEFfS0VZKX1zdGF0aWMgZ2V0T3JDcmVhdGVJbnN0YW5jZSh0LGU9e30pe3JldHVybiB0aGlzLmdldEluc3RhbmNlKHQpfHxuZXcgdGhpcyh0LFwib2JqZWN0XCI9PXR5cGVvZiBlP2U6bnVsbCl9c3RhdGljIGdldCBWRVJTSU9OKCl7cmV0dXJuXCI1LjEuMFwifXN0YXRpYyBnZXQgTkFNRSgpe3Rocm93IG5ldyBFcnJvcignWW91IGhhdmUgdG8gaW1wbGVtZW50IHRoZSBzdGF0aWMgbWV0aG9kIFwiTkFNRVwiLCBmb3IgZWFjaCBjb21wb25lbnQhJyl9c3RhdGljIGdldCBEQVRBX0tFWSgpe3JldHVyblwiYnMuXCIrdGhpcy5OQU1FfXN0YXRpYyBnZXQgRVZFTlRfS0VZKCl7cmV0dXJuXCIuXCIrdGhpcy5EQVRBX0tFWX19Y29uc3QgRj0odCxlPVwiaGlkZVwiKT0+e2NvbnN0IGk9XCJjbGljay5kaXNtaXNzXCIrdC5FVkVOVF9LRVkscz10Lk5BTUU7SC5vbihkb2N1bWVudCxpLGBbZGF0YS1icy1kaXNtaXNzPVwiJHtzfVwiXWAsKGZ1bmN0aW9uKGkpe2lmKFtcIkFcIixcIkFSRUFcIl0uaW5jbHVkZXModGhpcy50YWdOYW1lKSYmaS5wcmV2ZW50RGVmYXVsdCgpLGQodGhpcykpcmV0dXJuO2NvbnN0IG49byh0aGlzKXx8dGhpcy5jbG9zZXN0KFwiLlwiK3MpO3QuZ2V0T3JDcmVhdGVJbnN0YW5jZShuKVtlXSgpfSkpfTtjbGFzcyBXIGV4dGVuZHMgUntzdGF0aWMgZ2V0IE5BTUUoKXtyZXR1cm5cImFsZXJ0XCJ9Y2xvc2UoKXtpZihILnRyaWdnZXIodGhpcy5fZWxlbWVudCxcImNsb3NlLmJzLmFsZXJ0XCIpLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO3RoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcInNob3dcIik7Y29uc3QgdD10aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImZhZGVcIik7dGhpcy5fcXVldWVDYWxsYmFjaygoKT0+dGhpcy5fZGVzdHJveUVsZW1lbnQoKSx0aGlzLl9lbGVtZW50LHQpfV9kZXN0cm95RWxlbWVudCgpe3RoaXMuX2VsZW1lbnQucmVtb3ZlKCksSC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsXCJjbG9zZWQuYnMuYWxlcnRcIiksdGhpcy5kaXNwb3NlKCl9c3RhdGljIGpRdWVyeUludGVyZmFjZSh0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe2NvbnN0IGU9Vy5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXtpZih2b2lkIDA9PT1lW3RdfHx0LnN0YXJ0c1dpdGgoXCJfXCIpfHxcImNvbnN0cnVjdG9yXCI9PT10KXRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7dH1cImApO2VbdF0odGhpcyl9fSkpfX1GKFcsXCJjbG9zZVwiKSxiKFcpO2NsYXNzICQgZXh0ZW5kcyBSe3N0YXRpYyBnZXQgTkFNRSgpe3JldHVyblwiYnV0dG9uXCJ9dG9nZ2xlKCl7dGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJhcmlhLXByZXNzZWRcIix0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoXCJhY3RpdmVcIikpfXN0YXRpYyBqUXVlcnlJbnRlcmZhY2UodCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXtjb25zdCBlPSQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKTtcInRvZ2dsZVwiPT09dCYmZVt0XSgpfSkpfX1mdW5jdGlvbiBxKHQpe3JldHVyblwidHJ1ZVwiPT09dHx8XCJmYWxzZVwiIT09dCYmKHQ9PT1OdW1iZXIodCkudG9TdHJpbmcoKT9OdW1iZXIodCk6XCJcIj09PXR8fFwibnVsbFwiPT09dD9udWxsOnQpfWZ1bmN0aW9uIFUodCl7cmV0dXJuIHQucmVwbGFjZSgvW0EtWl0vZyx0PT5cIi1cIit0LnRvTG93ZXJDYXNlKCkpfUgub24oZG9jdW1lbnQsXCJjbGljay5icy5idXR0b24uZGF0YS1hcGlcIiwnW2RhdGEtYnMtdG9nZ2xlPVwiYnV0dG9uXCJdJyx0PT57dC5wcmV2ZW50RGVmYXVsdCgpO2NvbnN0IGU9dC50YXJnZXQuY2xvc2VzdCgnW2RhdGEtYnMtdG9nZ2xlPVwiYnV0dG9uXCJdJyk7JC5nZXRPckNyZWF0ZUluc3RhbmNlKGUpLnRvZ2dsZSgpfSksYigkKTtjb25zdCBLPXtzZXREYXRhQXR0cmlidXRlKHQsZSxpKXt0LnNldEF0dHJpYnV0ZShcImRhdGEtYnMtXCIrVShlKSxpKX0scmVtb3ZlRGF0YUF0dHJpYnV0ZSh0LGUpe3QucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1icy1cIitVKGUpKX0sZ2V0RGF0YUF0dHJpYnV0ZXModCl7aWYoIXQpcmV0dXJue307Y29uc3QgZT17fTtyZXR1cm4gT2JqZWN0LmtleXModC5kYXRhc2V0KS5maWx0ZXIodD0+dC5zdGFydHNXaXRoKFwiYnNcIikpLmZvckVhY2goaT0+e2xldCBzPWkucmVwbGFjZSgvXmJzLyxcIlwiKTtzPXMuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkrcy5zbGljZSgxLHMubGVuZ3RoKSxlW3NdPXEodC5kYXRhc2V0W2ldKX0pLGV9LGdldERhdGFBdHRyaWJ1dGU6KHQsZSk9PnEodC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWJzLVwiK1UoZSkpKSxvZmZzZXQodCl7Y29uc3QgZT10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6ZS50b3Ard2luZG93LnBhZ2VZT2Zmc2V0LGxlZnQ6ZS5sZWZ0K3dpbmRvdy5wYWdlWE9mZnNldH19LHBvc2l0aW9uOnQ9Pih7dG9wOnQub2Zmc2V0VG9wLGxlZnQ6dC5vZmZzZXRMZWZ0fSl9LFY9e2ZpbmQ6KHQsZT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpPT5bXS5jb25jYXQoLi4uRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbC5jYWxsKGUsdCkpLGZpbmRPbmU6KHQsZT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpPT5FbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yLmNhbGwoZSx0KSxjaGlsZHJlbjoodCxlKT0+W10uY29uY2F0KC4uLnQuY2hpbGRyZW4pLmZpbHRlcih0PT50Lm1hdGNoZXMoZSkpLHBhcmVudHModCxlKXtjb25zdCBpPVtdO2xldCBzPXQucGFyZW50Tm9kZTtmb3IoO3MmJnMubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmMyE9PXMubm9kZVR5cGU7KXMubWF0Y2hlcyhlKSYmaS5wdXNoKHMpLHM9cy5wYXJlbnROb2RlO3JldHVybiBpfSxwcmV2KHQsZSl7bGV0IGk9dC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO2Zvcig7aTspe2lmKGkubWF0Y2hlcyhlKSlyZXR1cm5baV07aT1pLnByZXZpb3VzRWxlbWVudFNpYmxpbmd9cmV0dXJuW119LG5leHQodCxlKXtsZXQgaT10Lm5leHRFbGVtZW50U2libGluZztmb3IoO2k7KXtpZihpLm1hdGNoZXMoZSkpcmV0dXJuW2ldO2k9aS5uZXh0RWxlbWVudFNpYmxpbmd9cmV0dXJuW119LGZvY3VzYWJsZUNoaWxkcmVuKHQpe2NvbnN0IGU9W1wiYVwiLFwiYnV0dG9uXCIsXCJpbnB1dFwiLFwidGV4dGFyZWFcIixcInNlbGVjdFwiLFwiZGV0YWlsc1wiLFwiW3RhYmluZGV4XVwiLCdbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXSddLm1hcCh0PT50Kyc6bm90KFt0YWJpbmRleF49XCItXCJdKScpLmpvaW4oXCIsIFwiKTtyZXR1cm4gdGhpcy5maW5kKGUsdCkuZmlsdGVyKHQ9PiFkKHQpJiZoKHQpKX19LFg9e2ludGVydmFsOjVlMyxrZXlib2FyZDohMCxzbGlkZTohMSxwYXVzZTpcImhvdmVyXCIsd3JhcDohMCx0b3VjaDohMH0sWT17aW50ZXJ2YWw6XCIobnVtYmVyfGJvb2xlYW4pXCIsa2V5Ym9hcmQ6XCJib29sZWFuXCIsc2xpZGU6XCIoYm9vbGVhbnxzdHJpbmcpXCIscGF1c2U6XCIoc3RyaW5nfGJvb2xlYW4pXCIsd3JhcDpcImJvb2xlYW5cIix0b3VjaDpcImJvb2xlYW5cIn0sUT1cIm5leHRcIixHPVwicHJldlwiLFo9XCJsZWZ0XCIsSj1cInJpZ2h0XCIsdHQ9e0Fycm93TGVmdDpKLEFycm93UmlnaHQ6Wn07Y2xhc3MgZXQgZXh0ZW5kcyBSe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCksdGhpcy5faXRlbXM9bnVsbCx0aGlzLl9pbnRlcnZhbD1udWxsLHRoaXMuX2FjdGl2ZUVsZW1lbnQ9bnVsbCx0aGlzLl9pc1BhdXNlZD0hMSx0aGlzLl9pc1NsaWRpbmc9ITEsdGhpcy50b3VjaFRpbWVvdXQ9bnVsbCx0aGlzLnRvdWNoU3RhcnRYPTAsdGhpcy50b3VjaERlbHRhWD0wLHRoaXMuX2NvbmZpZz10aGlzLl9nZXRDb25maWcoZSksdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQ9Vi5maW5kT25lKFwiLmNhcm91c2VsLWluZGljYXRvcnNcIix0aGlzLl9lbGVtZW50KSx0aGlzLl90b3VjaFN1cHBvcnRlZD1cIm9udG91Y2hzdGFydFwiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fHxuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHM+MCx0aGlzLl9wb2ludGVyRXZlbnQ9Qm9vbGVhbih3aW5kb3cuUG9pbnRlckV2ZW50KSx0aGlzLl9hZGRFdmVudExpc3RlbmVycygpfXN0YXRpYyBnZXQgRGVmYXVsdCgpe3JldHVybiBYfXN0YXRpYyBnZXQgTkFNRSgpe3JldHVyblwiY2Fyb3VzZWxcIn1uZXh0KCl7dGhpcy5fc2xpZGUoUSl9bmV4dFdoZW5WaXNpYmxlKCl7IWRvY3VtZW50LmhpZGRlbiYmaCh0aGlzLl9lbGVtZW50KSYmdGhpcy5uZXh0KCl9cHJldigpe3RoaXMuX3NsaWRlKEcpfXBhdXNlKHQpe3R8fCh0aGlzLl9pc1BhdXNlZD0hMCksVi5maW5kT25lKFwiLmNhcm91c2VsLWl0ZW0tbmV4dCwgLmNhcm91c2VsLWl0ZW0tcHJldlwiLHRoaXMuX2VsZW1lbnQpJiYocih0aGlzLl9lbGVtZW50KSx0aGlzLmN5Y2xlKCEwKSksY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbCksdGhpcy5faW50ZXJ2YWw9bnVsbH1jeWNsZSh0KXt0fHwodGhpcy5faXNQYXVzZWQ9ITEpLHRoaXMuX2ludGVydmFsJiYoY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbCksdGhpcy5faW50ZXJ2YWw9bnVsbCksdGhpcy5fY29uZmlnJiZ0aGlzLl9jb25maWcuaW50ZXJ2YWwmJiF0aGlzLl9pc1BhdXNlZCYmKHRoaXMuX3VwZGF0ZUludGVydmFsKCksdGhpcy5faW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT90aGlzLm5leHRXaGVuVmlzaWJsZTp0aGlzLm5leHQpLmJpbmQodGhpcyksdGhpcy5fY29uZmlnLmludGVydmFsKSl9dG8odCl7dGhpcy5fYWN0aXZlRWxlbWVudD1WLmZpbmRPbmUoXCIuYWN0aXZlLmNhcm91c2VsLWl0ZW1cIix0aGlzLl9lbGVtZW50KTtjb25zdCBlPXRoaXMuX2dldEl0ZW1JbmRleCh0aGlzLl9hY3RpdmVFbGVtZW50KTtpZih0PnRoaXMuX2l0ZW1zLmxlbmd0aC0xfHx0PDApcmV0dXJuO2lmKHRoaXMuX2lzU2xpZGluZylyZXR1cm4gdm9pZCBILm9uZSh0aGlzLl9lbGVtZW50LFwic2xpZC5icy5jYXJvdXNlbFwiLCgpPT50aGlzLnRvKHQpKTtpZihlPT09dClyZXR1cm4gdGhpcy5wYXVzZSgpLHZvaWQgdGhpcy5jeWNsZSgpO2NvbnN0IGk9dD5lP1E6Rzt0aGlzLl9zbGlkZShpLHRoaXMuX2l0ZW1zW3RdKX1fZ2V0Q29uZmlnKHQpe3JldHVybiB0PXsuLi5YLC4uLksuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCksLi4uXCJvYmplY3RcIj09dHlwZW9mIHQ/dDp7fX0sYyhcImNhcm91c2VsXCIsdCxZKSx0fV9oYW5kbGVTd2lwZSgpe2NvbnN0IHQ9TWF0aC5hYnModGhpcy50b3VjaERlbHRhWCk7aWYodDw9NDApcmV0dXJuO2NvbnN0IGU9dC90aGlzLnRvdWNoRGVsdGFYO3RoaXMudG91Y2hEZWx0YVg9MCxlJiZ0aGlzLl9zbGlkZShlPjA/SjpaKX1fYWRkRXZlbnRMaXN0ZW5lcnMoKXt0aGlzLl9jb25maWcua2V5Ym9hcmQmJkgub24odGhpcy5fZWxlbWVudCxcImtleWRvd24uYnMuY2Fyb3VzZWxcIix0PT50aGlzLl9rZXlkb3duKHQpKSxcImhvdmVyXCI9PT10aGlzLl9jb25maWcucGF1c2UmJihILm9uKHRoaXMuX2VsZW1lbnQsXCJtb3VzZWVudGVyLmJzLmNhcm91c2VsXCIsdD0+dGhpcy5wYXVzZSh0KSksSC5vbih0aGlzLl9lbGVtZW50LFwibW91c2VsZWF2ZS5icy5jYXJvdXNlbFwiLHQ9PnRoaXMuY3ljbGUodCkpKSx0aGlzLl9jb25maWcudG91Y2gmJnRoaXMuX3RvdWNoU3VwcG9ydGVkJiZ0aGlzLl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCl9X2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKXtjb25zdCB0PXQ9PnshdGhpcy5fcG9pbnRlckV2ZW50fHxcInBlblwiIT09dC5wb2ludGVyVHlwZSYmXCJ0b3VjaFwiIT09dC5wb2ludGVyVHlwZT90aGlzLl9wb2ludGVyRXZlbnR8fCh0aGlzLnRvdWNoU3RhcnRYPXQudG91Y2hlc1swXS5jbGllbnRYKTp0aGlzLnRvdWNoU3RhcnRYPXQuY2xpZW50WH0sZT10PT57dGhpcy50b3VjaERlbHRhWD10LnRvdWNoZXMmJnQudG91Y2hlcy5sZW5ndGg+MT8wOnQudG91Y2hlc1swXS5jbGllbnRYLXRoaXMudG91Y2hTdGFydFh9LGk9dD0+eyF0aGlzLl9wb2ludGVyRXZlbnR8fFwicGVuXCIhPT10LnBvaW50ZXJUeXBlJiZcInRvdWNoXCIhPT10LnBvaW50ZXJUeXBlfHwodGhpcy50b3VjaERlbHRhWD10LmNsaWVudFgtdGhpcy50b3VjaFN0YXJ0WCksdGhpcy5faGFuZGxlU3dpcGUoKSxcImhvdmVyXCI9PT10aGlzLl9jb25maWcucGF1c2UmJih0aGlzLnBhdXNlKCksdGhpcy50b3VjaFRpbWVvdXQmJmNsZWFyVGltZW91dCh0aGlzLnRvdWNoVGltZW91dCksdGhpcy50b3VjaFRpbWVvdXQ9c2V0VGltZW91dCh0PT50aGlzLmN5Y2xlKHQpLDUwMCt0aGlzLl9jb25maWcuaW50ZXJ2YWwpKX07Vi5maW5kKFwiLmNhcm91c2VsLWl0ZW0gaW1nXCIsdGhpcy5fZWxlbWVudCkuZm9yRWFjaCh0PT57SC5vbih0LFwiZHJhZ3N0YXJ0LmJzLmNhcm91c2VsXCIsdD0+dC5wcmV2ZW50RGVmYXVsdCgpKX0pLHRoaXMuX3BvaW50ZXJFdmVudD8oSC5vbih0aGlzLl9lbGVtZW50LFwicG9pbnRlcmRvd24uYnMuY2Fyb3VzZWxcIixlPT50KGUpKSxILm9uKHRoaXMuX2VsZW1lbnQsXCJwb2ludGVydXAuYnMuY2Fyb3VzZWxcIix0PT5pKHQpKSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJwb2ludGVyLWV2ZW50XCIpKTooSC5vbih0aGlzLl9lbGVtZW50LFwidG91Y2hzdGFydC5icy5jYXJvdXNlbFwiLGU9PnQoZSkpLEgub24odGhpcy5fZWxlbWVudCxcInRvdWNobW92ZS5icy5jYXJvdXNlbFwiLHQ9PmUodCkpLEgub24odGhpcy5fZWxlbWVudCxcInRvdWNoZW5kLmJzLmNhcm91c2VsXCIsdD0+aSh0KSkpfV9rZXlkb3duKHQpe2lmKC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QodC50YXJnZXQudGFnTmFtZSkpcmV0dXJuO2NvbnN0IGU9dHRbdC5rZXldO2UmJih0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fc2xpZGUoZSkpfV9nZXRJdGVtSW5kZXgodCl7cmV0dXJuIHRoaXMuX2l0ZW1zPXQmJnQucGFyZW50Tm9kZT9WLmZpbmQoXCIuY2Fyb3VzZWwtaXRlbVwiLHQucGFyZW50Tm9kZSk6W10sdGhpcy5faXRlbXMuaW5kZXhPZih0KX1fZ2V0SXRlbUJ5T3JkZXIodCxlKXtjb25zdCBpPXQ9PT1RO3JldHVybiB3KHRoaXMuX2l0ZW1zLGUsaSx0aGlzLl9jb25maWcud3JhcCl9X3RyaWdnZXJTbGlkZUV2ZW50KHQsZSl7Y29uc3QgaT10aGlzLl9nZXRJdGVtSW5kZXgodCkscz10aGlzLl9nZXRJdGVtSW5kZXgoVi5maW5kT25lKFwiLmFjdGl2ZS5jYXJvdXNlbC1pdGVtXCIsdGhpcy5fZWxlbWVudCkpO3JldHVybiBILnRyaWdnZXIodGhpcy5fZWxlbWVudCxcInNsaWRlLmJzLmNhcm91c2VsXCIse3JlbGF0ZWRUYXJnZXQ6dCxkaXJlY3Rpb246ZSxmcm9tOnMsdG86aX0pfV9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KHQpe2lmKHRoaXMuX2luZGljYXRvcnNFbGVtZW50KXtjb25zdCBlPVYuZmluZE9uZShcIi5hY3RpdmVcIix0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCk7ZS5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpLGUucmVtb3ZlQXR0cmlidXRlKFwiYXJpYS1jdXJyZW50XCIpO2NvbnN0IGk9Vi5maW5kKFwiW2RhdGEtYnMtdGFyZ2V0XVwiLHRoaXMuX2luZGljYXRvcnNFbGVtZW50KTtmb3IobGV0IGU9MDtlPGkubGVuZ3RoO2UrKylpZihOdW1iZXIucGFyc2VJbnQoaVtlXS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWJzLXNsaWRlLXRvXCIpLDEwKT09PXRoaXMuX2dldEl0ZW1JbmRleCh0KSl7aVtlXS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpLGlbZV0uc2V0QXR0cmlidXRlKFwiYXJpYS1jdXJyZW50XCIsXCJ0cnVlXCIpO2JyZWFrfX19X3VwZGF0ZUludGVydmFsKCl7Y29uc3QgdD10aGlzLl9hY3RpdmVFbGVtZW50fHxWLmZpbmRPbmUoXCIuYWN0aXZlLmNhcm91c2VsLWl0ZW1cIix0aGlzLl9lbGVtZW50KTtpZighdClyZXR1cm47Y29uc3QgZT1OdW1iZXIucGFyc2VJbnQodC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWJzLWludGVydmFsXCIpLDEwKTtlPyh0aGlzLl9jb25maWcuZGVmYXVsdEludGVydmFsPXRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWx8fHRoaXMuX2NvbmZpZy5pbnRlcnZhbCx0aGlzLl9jb25maWcuaW50ZXJ2YWw9ZSk6dGhpcy5fY29uZmlnLmludGVydmFsPXRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWx8fHRoaXMuX2NvbmZpZy5pbnRlcnZhbH1fc2xpZGUodCxlKXtjb25zdCBpPXRoaXMuX2RpcmVjdGlvblRvT3JkZXIodCkscz1WLmZpbmRPbmUoXCIuYWN0aXZlLmNhcm91c2VsLWl0ZW1cIix0aGlzLl9lbGVtZW50KSxuPXRoaXMuX2dldEl0ZW1JbmRleChzKSxvPWV8fHRoaXMuX2dldEl0ZW1CeU9yZGVyKGkscykscj10aGlzLl9nZXRJdGVtSW5kZXgobyksYT1Cb29sZWFuKHRoaXMuX2ludGVydmFsKSxsPWk9PT1RLGM9bD9cImNhcm91c2VsLWl0ZW0tc3RhcnRcIjpcImNhcm91c2VsLWl0ZW0tZW5kXCIsaD1sP1wiY2Fyb3VzZWwtaXRlbS1uZXh0XCI6XCJjYXJvdXNlbC1pdGVtLXByZXZcIixkPXRoaXMuX29yZGVyVG9EaXJlY3Rpb24oaSk7aWYobyYmby5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpcmV0dXJuIHZvaWQodGhpcy5faXNTbGlkaW5nPSExKTtpZih0aGlzLl9pc1NsaWRpbmcpcmV0dXJuO2lmKHRoaXMuX3RyaWdnZXJTbGlkZUV2ZW50KG8sZCkuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoIXN8fCFvKXJldHVybjt0aGlzLl9pc1NsaWRpbmc9ITAsYSYmdGhpcy5wYXVzZSgpLHRoaXMuX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQobyksdGhpcy5fYWN0aXZlRWxlbWVudD1vO2NvbnN0IHU9KCk9PntILnRyaWdnZXIodGhpcy5fZWxlbWVudCxcInNsaWQuYnMuY2Fyb3VzZWxcIix7cmVsYXRlZFRhcmdldDpvLGRpcmVjdGlvbjpkLGZyb206bix0bzpyfSl9O2lmKHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwic2xpZGVcIikpe28uY2xhc3NMaXN0LmFkZChoKSxwKG8pLHMuY2xhc3NMaXN0LmFkZChjKSxvLmNsYXNzTGlzdC5hZGQoYyk7Y29uc3QgdD0oKT0+e28uY2xhc3NMaXN0LnJlbW92ZShjLGgpLG8uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKSxzLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIixoLGMpLHRoaXMuX2lzU2xpZGluZz0hMSxzZXRUaW1lb3V0KHUsMCl9O3RoaXMuX3F1ZXVlQ2FsbGJhY2sodCxzLCEwKX1lbHNlIHMuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKSxvLmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIiksdGhpcy5faXNTbGlkaW5nPSExLHUoKTthJiZ0aGlzLmN5Y2xlKCl9X2RpcmVjdGlvblRvT3JkZXIodCl7cmV0dXJuW0osWl0uaW5jbHVkZXModCk/bSgpP3Q9PT1aP0c6UTp0PT09Wj9ROkc6dH1fb3JkZXJUb0RpcmVjdGlvbih0KXtyZXR1cm5bUSxHXS5pbmNsdWRlcyh0KT9tKCk/dD09PUc/WjpKOnQ9PT1HP0o6Wjp0fXN0YXRpYyBjYXJvdXNlbEludGVyZmFjZSh0LGUpe2NvbnN0IGk9ZXQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0LGUpO2xldHtfY29uZmlnOnN9PWk7XCJvYmplY3RcIj09dHlwZW9mIGUmJihzPXsuLi5zLC4uLmV9KTtjb25zdCBuPVwic3RyaW5nXCI9PXR5cGVvZiBlP2U6cy5zbGlkZTtpZihcIm51bWJlclwiPT10eXBlb2YgZSlpLnRvKGUpO2Vsc2UgaWYoXCJzdHJpbmdcIj09dHlwZW9mIG4pe2lmKHZvaWQgMD09PWlbbl0pdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtufVwiYCk7aVtuXSgpfWVsc2Ugcy5pbnRlcnZhbCYmcy5yaWRlJiYoaS5wYXVzZSgpLGkuY3ljbGUoKSl9c3RhdGljIGpRdWVyeUludGVyZmFjZSh0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe2V0LmNhcm91c2VsSW50ZXJmYWNlKHRoaXMsdCl9KSl9c3RhdGljIGRhdGFBcGlDbGlja0hhbmRsZXIodCl7Y29uc3QgZT1vKHRoaXMpO2lmKCFlfHwhZS5jbGFzc0xpc3QuY29udGFpbnMoXCJjYXJvdXNlbFwiKSlyZXR1cm47Y29uc3QgaT17Li4uSy5nZXREYXRhQXR0cmlidXRlcyhlKSwuLi5LLmdldERhdGFBdHRyaWJ1dGVzKHRoaXMpfSxzPXRoaXMuZ2V0QXR0cmlidXRlKFwiZGF0YS1icy1zbGlkZS10b1wiKTtzJiYoaS5pbnRlcnZhbD0hMSksZXQuY2Fyb3VzZWxJbnRlcmZhY2UoZSxpKSxzJiZldC5nZXRJbnN0YW5jZShlKS50byhzKSx0LnByZXZlbnREZWZhdWx0KCl9fUgub24oZG9jdW1lbnQsXCJjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaVwiLFwiW2RhdGEtYnMtc2xpZGVdLCBbZGF0YS1icy1zbGlkZS10b11cIixldC5kYXRhQXBpQ2xpY2tIYW5kbGVyKSxILm9uKHdpbmRvdyxcImxvYWQuYnMuY2Fyb3VzZWwuZGF0YS1hcGlcIiwoKT0+e2NvbnN0IHQ9Vi5maW5kKCdbZGF0YS1icy1yaWRlPVwiY2Fyb3VzZWxcIl0nKTtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspZXQuY2Fyb3VzZWxJbnRlcmZhY2UodFtlXSxldC5nZXRJbnN0YW5jZSh0W2VdKSl9KSxiKGV0KTtjb25zdCBpdD17dG9nZ2xlOiEwLHBhcmVudDpudWxsfSxzdD17dG9nZ2xlOlwiYm9vbGVhblwiLHBhcmVudDpcIihudWxsfGVsZW1lbnQpXCJ9O2NsYXNzIG50IGV4dGVuZHMgUntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQpLHRoaXMuX2lzVHJhbnNpdGlvbmluZz0hMSx0aGlzLl9jb25maWc9dGhpcy5fZ2V0Q29uZmlnKGUpLHRoaXMuX3RyaWdnZXJBcnJheT1bXTtjb25zdCBpPVYuZmluZCgnW2RhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIl0nKTtmb3IobGV0IHQ9MCxlPWkubGVuZ3RoO3Q8ZTt0Kyspe2NvbnN0IGU9aVt0XSxzPW4oZSksbz1WLmZpbmQocykuZmlsdGVyKHQ9PnQ9PT10aGlzLl9lbGVtZW50KTtudWxsIT09cyYmby5sZW5ndGgmJih0aGlzLl9zZWxlY3Rvcj1zLHRoaXMuX3RyaWdnZXJBcnJheS5wdXNoKGUpKX10aGlzLl9pbml0aWFsaXplQ2hpbGRyZW4oKSx0aGlzLl9jb25maWcucGFyZW50fHx0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fdHJpZ2dlckFycmF5LHRoaXMuX2lzU2hvd24oKSksdGhpcy5fY29uZmlnLnRvZ2dsZSYmdGhpcy50b2dnbGUoKX1zdGF0aWMgZ2V0IERlZmF1bHQoKXtyZXR1cm4gaXR9c3RhdGljIGdldCBOQU1FKCl7cmV0dXJuXCJjb2xsYXBzZVwifXRvZ2dsZSgpe3RoaXMuX2lzU2hvd24oKT90aGlzLmhpZGUoKTp0aGlzLnNob3coKX1zaG93KCl7aWYodGhpcy5faXNUcmFuc2l0aW9uaW5nfHx0aGlzLl9pc1Nob3duKCkpcmV0dXJuO2xldCB0LGU9W107aWYodGhpcy5fY29uZmlnLnBhcmVudCl7Y29uc3QgdD1WLmZpbmQoXCIuY29sbGFwc2UgLmNvbGxhcHNlXCIsdGhpcy5fY29uZmlnLnBhcmVudCk7ZT1WLmZpbmQoXCIuc2hvdywgLmNvbGxhcHNpbmdcIix0aGlzLl9jb25maWcucGFyZW50KS5maWx0ZXIoZT0+IXQuaW5jbHVkZXMoZSkpfWNvbnN0IGk9Vi5maW5kT25lKHRoaXMuX3NlbGVjdG9yKTtpZihlLmxlbmd0aCl7Y29uc3Qgcz1lLmZpbmQodD0+aSE9PXQpO2lmKHQ9cz9udC5nZXRJbnN0YW5jZShzKTpudWxsLHQmJnQuX2lzVHJhbnNpdGlvbmluZylyZXR1cm59aWYoSC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsXCJzaG93LmJzLmNvbGxhcHNlXCIpLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2UuZm9yRWFjaChlPT57aSE9PWUmJm50LmdldE9yQ3JlYXRlSW5zdGFuY2UoZSx7dG9nZ2xlOiExfSkuaGlkZSgpLHR8fHouc2V0KGUsXCJicy5jb2xsYXBzZVwiLG51bGwpfSk7Y29uc3Qgcz10aGlzLl9nZXREaW1lbnNpb24oKTt0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJjb2xsYXBzZVwiKSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJjb2xsYXBzaW5nXCIpLHRoaXMuX2VsZW1lbnQuc3R5bGVbc109MCx0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fdHJpZ2dlckFycmF5LCEwKSx0aGlzLl9pc1RyYW5zaXRpb25pbmc9ITA7Y29uc3Qgbj1cInNjcm9sbFwiKyhzWzBdLnRvVXBwZXJDYXNlKCkrcy5zbGljZSgxKSk7dGhpcy5fcXVldWVDYWxsYmFjaygoKT0+e3RoaXMuX2lzVHJhbnNpdGlvbmluZz0hMSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJjb2xsYXBzaW5nXCIpLHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChcImNvbGxhcHNlXCIsXCJzaG93XCIpLHRoaXMuX2VsZW1lbnQuc3R5bGVbc109XCJcIixILnRyaWdnZXIodGhpcy5fZWxlbWVudCxcInNob3duLmJzLmNvbGxhcHNlXCIpfSx0aGlzLl9lbGVtZW50LCEwKSx0aGlzLl9lbGVtZW50LnN0eWxlW3NdPXRoaXMuX2VsZW1lbnRbbl0rXCJweFwifWhpZGUoKXtpZih0aGlzLl9pc1RyYW5zaXRpb25pbmd8fCF0aGlzLl9pc1Nob3duKCkpcmV0dXJuO2lmKEgudHJpZ2dlcih0aGlzLl9lbGVtZW50LFwiaGlkZS5icy5jb2xsYXBzZVwiKS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtjb25zdCB0PXRoaXMuX2dldERpbWVuc2lvbigpO3RoaXMuX2VsZW1lbnQuc3R5bGVbdF09dGhpcy5fZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVt0XStcInB4XCIscCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJjb2xsYXBzaW5nXCIpLHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcImNvbGxhcHNlXCIsXCJzaG93XCIpO2NvbnN0IGU9dGhpcy5fdHJpZ2dlckFycmF5Lmxlbmd0aDtmb3IobGV0IHQ9MDt0PGU7dCsrKXtjb25zdCBlPXRoaXMuX3RyaWdnZXJBcnJheVt0XSxpPW8oZSk7aSYmIXRoaXMuX2lzU2hvd24oaSkmJnRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhbZV0sITEpfXRoaXMuX2lzVHJhbnNpdGlvbmluZz0hMCx0aGlzLl9lbGVtZW50LnN0eWxlW3RdPVwiXCIsdGhpcy5fcXVldWVDYWxsYmFjaygoKT0+e3RoaXMuX2lzVHJhbnNpdGlvbmluZz0hMSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJjb2xsYXBzaW5nXCIpLHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChcImNvbGxhcHNlXCIpLEgudHJpZ2dlcih0aGlzLl9lbGVtZW50LFwiaGlkZGVuLmJzLmNvbGxhcHNlXCIpfSx0aGlzLl9lbGVtZW50LCEwKX1faXNTaG93bih0PXRoaXMuX2VsZW1lbnQpe3JldHVybiB0LmNsYXNzTGlzdC5jb250YWlucyhcInNob3dcIil9X2dldENvbmZpZyh0KXtyZXR1cm4odD17Li4uaXQsLi4uSy5nZXREYXRhQXR0cmlidXRlcyh0aGlzLl9lbGVtZW50KSwuLi50fSkudG9nZ2xlPUJvb2xlYW4odC50b2dnbGUpLHQucGFyZW50PWwodC5wYXJlbnQpLGMoXCJjb2xsYXBzZVwiLHQsc3QpLHR9X2dldERpbWVuc2lvbigpe3JldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImNvbGxhcHNlLWhvcml6b250YWxcIik/XCJ3aWR0aFwiOlwiaGVpZ2h0XCJ9X2luaXRpYWxpemVDaGlsZHJlbigpe2lmKCF0aGlzLl9jb25maWcucGFyZW50KXJldHVybjtjb25zdCB0PVYuZmluZChcIi5jb2xsYXBzZSAuY29sbGFwc2VcIix0aGlzLl9jb25maWcucGFyZW50KTtWLmZpbmQoJ1tkYXRhLWJzLXRvZ2dsZT1cImNvbGxhcHNlXCJdJyx0aGlzLl9jb25maWcucGFyZW50KS5maWx0ZXIoZT0+IXQuaW5jbHVkZXMoZSkpLmZvckVhY2godD0+e2NvbnN0IGU9byh0KTtlJiZ0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoW3RdLHRoaXMuX2lzU2hvd24oZSkpfSl9X2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0LGUpe3QubGVuZ3RoJiZ0LmZvckVhY2godD0+e2U/dC5jbGFzc0xpc3QucmVtb3ZlKFwiY29sbGFwc2VkXCIpOnQuY2xhc3NMaXN0LmFkZChcImNvbGxhcHNlZFwiKSx0LnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIixlKX0pfXN0YXRpYyBqUXVlcnlJbnRlcmZhY2UodCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXtjb25zdCBlPXt9O1wic3RyaW5nXCI9PXR5cGVvZiB0JiYvc2hvd3xoaWRlLy50ZXN0KHQpJiYoZS50b2dnbGU9ITEpO2NvbnN0IGk9bnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLGUpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXtpZih2b2lkIDA9PT1pW3RdKXRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7dH1cImApO2lbdF0oKX19KSl9fUgub24oZG9jdW1lbnQsXCJjbGljay5icy5jb2xsYXBzZS5kYXRhLWFwaVwiLCdbZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiXScsKGZ1bmN0aW9uKHQpeyhcIkFcIj09PXQudGFyZ2V0LnRhZ05hbWV8fHQuZGVsZWdhdGVUYXJnZXQmJlwiQVwiPT09dC5kZWxlZ2F0ZVRhcmdldC50YWdOYW1lKSYmdC5wcmV2ZW50RGVmYXVsdCgpO2NvbnN0IGU9bih0aGlzKTtWLmZpbmQoZSkuZm9yRWFjaCh0PT57bnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0LHt0b2dnbGU6ITF9KS50b2dnbGUoKX0pfSkpLGIobnQpO2NvbnN0IG90PW5ldyBSZWdFeHAoXCJBcnJvd1VwfEFycm93RG93bnxFc2NhcGVcIikscnQ9bSgpP1widG9wLWVuZFwiOlwidG9wLXN0YXJ0XCIsYXQ9bSgpP1widG9wLXN0YXJ0XCI6XCJ0b3AtZW5kXCIsbHQ9bSgpP1wiYm90dG9tLWVuZFwiOlwiYm90dG9tLXN0YXJ0XCIsY3Q9bSgpP1wiYm90dG9tLXN0YXJ0XCI6XCJib3R0b20tZW5kXCIsaHQ9bSgpP1wibGVmdC1zdGFydFwiOlwicmlnaHQtc3RhcnRcIixkdD1tKCk/XCJyaWdodC1zdGFydFwiOlwibGVmdC1zdGFydFwiLHV0PXtvZmZzZXQ6WzAsMl0sYm91bmRhcnk6XCJjbGlwcGluZ1BhcmVudHNcIixyZWZlcmVuY2U6XCJ0b2dnbGVcIixkaXNwbGF5OlwiZHluYW1pY1wiLHBvcHBlckNvbmZpZzpudWxsLGF1dG9DbG9zZTohMH0sZ3Q9e29mZnNldDpcIihhcnJheXxzdHJpbmd8ZnVuY3Rpb24pXCIsYm91bmRhcnk6XCIoc3RyaW5nfGVsZW1lbnQpXCIscmVmZXJlbmNlOlwiKHN0cmluZ3xlbGVtZW50fG9iamVjdClcIixkaXNwbGF5Olwic3RyaW5nXCIscG9wcGVyQ29uZmlnOlwiKG51bGx8b2JqZWN0fGZ1bmN0aW9uKVwiLGF1dG9DbG9zZTpcIihib29sZWFufHN0cmluZylcIn07Y2xhc3MgcHQgZXh0ZW5kcyBSe2NvbnN0cnVjdG9yKHQsZSl7c3VwZXIodCksdGhpcy5fcG9wcGVyPW51bGwsdGhpcy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyhlKSx0aGlzLl9tZW51PXRoaXMuX2dldE1lbnVFbGVtZW50KCksdGhpcy5faW5OYXZiYXI9dGhpcy5fZGV0ZWN0TmF2YmFyKCl9c3RhdGljIGdldCBEZWZhdWx0KCl7cmV0dXJuIHV0fXN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKXtyZXR1cm4gZ3R9c3RhdGljIGdldCBOQU1FKCl7cmV0dXJuXCJkcm9wZG93blwifXRvZ2dsZSgpe3JldHVybiB0aGlzLl9pc1Nob3duKCk/dGhpcy5oaWRlKCk6dGhpcy5zaG93KCl9c2hvdygpe2lmKGQodGhpcy5fZWxlbWVudCl8fHRoaXMuX2lzU2hvd24odGhpcy5fbWVudSkpcmV0dXJuO2NvbnN0IHQ9e3JlbGF0ZWRUYXJnZXQ6dGhpcy5fZWxlbWVudH07aWYoSC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsXCJzaG93LmJzLmRyb3Bkb3duXCIsdCkuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47Y29uc3QgZT1wdC5nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTt0aGlzLl9pbk5hdmJhcj9LLnNldERhdGFBdHRyaWJ1dGUodGhpcy5fbWVudSxcInBvcHBlclwiLFwibm9uZVwiKTp0aGlzLl9jcmVhdGVQb3BwZXIoZSksXCJvbnRvdWNoc3RhcnRcImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmIWUuY2xvc2VzdChcIi5uYXZiYXItbmF2XCIpJiZbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikuZm9yRWFjaCh0PT5ILm9uKHQsXCJtb3VzZW92ZXJcIixnKSksdGhpcy5fZWxlbWVudC5mb2N1cygpLHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCEwKSx0aGlzLl9tZW51LmNsYXNzTGlzdC5hZGQoXCJzaG93XCIpLHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChcInNob3dcIiksSC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsXCJzaG93bi5icy5kcm9wZG93blwiLHQpfWhpZGUoKXtpZihkKHRoaXMuX2VsZW1lbnQpfHwhdGhpcy5faXNTaG93bih0aGlzLl9tZW51KSlyZXR1cm47Y29uc3QgdD17cmVsYXRlZFRhcmdldDp0aGlzLl9lbGVtZW50fTt0aGlzLl9jb21wbGV0ZUhpZGUodCl9ZGlzcG9zZSgpe3RoaXMuX3BvcHBlciYmdGhpcy5fcG9wcGVyLmRlc3Ryb3koKSxzdXBlci5kaXNwb3NlKCl9dXBkYXRlKCl7dGhpcy5faW5OYXZiYXI9dGhpcy5fZGV0ZWN0TmF2YmFyKCksdGhpcy5fcG9wcGVyJiZ0aGlzLl9wb3BwZXIudXBkYXRlKCl9X2NvbXBsZXRlSGlkZSh0KXtILnRyaWdnZXIodGhpcy5fZWxlbWVudCxcImhpZGUuYnMuZHJvcGRvd25cIix0KS5kZWZhdWx0UHJldmVudGVkfHwoXCJvbnRvdWNoc3RhcnRcImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pLmZvckVhY2godD0+SC5vZmYodCxcIm1vdXNlb3ZlclwiLGcpKSx0aGlzLl9wb3BwZXImJnRoaXMuX3BvcHBlci5kZXN0cm95KCksdGhpcy5fbWVudS5jbGFzc0xpc3QucmVtb3ZlKFwic2hvd1wiKSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJzaG93XCIpLHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLFwiZmFsc2VcIiksSy5yZW1vdmVEYXRhQXR0cmlidXRlKHRoaXMuX21lbnUsXCJwb3BwZXJcIiksSC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsXCJoaWRkZW4uYnMuZHJvcGRvd25cIix0KSl9X2dldENvbmZpZyh0KXtpZih0PXsuLi50aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHQsLi4uSy5nZXREYXRhQXR0cmlidXRlcyh0aGlzLl9lbGVtZW50KSwuLi50fSxjKFwiZHJvcGRvd25cIix0LHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFR5cGUpLFwib2JqZWN0XCI9PXR5cGVvZiB0LnJlZmVyZW5jZSYmIWEodC5yZWZlcmVuY2UpJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB0LnJlZmVyZW5jZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QpdGhyb3cgbmV3IFR5cGVFcnJvcihcImRyb3Bkb3duXCIudG9VcHBlckNhc2UoKSsnOiBPcHRpb24gXCJyZWZlcmVuY2VcIiBwcm92aWRlZCB0eXBlIFwib2JqZWN0XCIgd2l0aG91dCBhIHJlcXVpcmVkIFwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0XCIgbWV0aG9kLicpO3JldHVybiB0fV9jcmVhdGVQb3BwZXIodCl7aWYodm9pZCAwPT09aSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQm9vdHN0cmFwJ3MgZHJvcGRvd25zIHJlcXVpcmUgUG9wcGVyIChodHRwczovL3BvcHBlci5qcy5vcmcpXCIpO2xldCBlPXRoaXMuX2VsZW1lbnQ7XCJwYXJlbnRcIj09PXRoaXMuX2NvbmZpZy5yZWZlcmVuY2U/ZT10OmEodGhpcy5fY29uZmlnLnJlZmVyZW5jZSk/ZT1sKHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpOlwib2JqZWN0XCI9PXR5cGVvZiB0aGlzLl9jb25maWcucmVmZXJlbmNlJiYoZT10aGlzLl9jb25maWcucmVmZXJlbmNlKTtjb25zdCBzPXRoaXMuX2dldFBvcHBlckNvbmZpZygpLG49cy5tb2RpZmllcnMuZmluZCh0PT5cImFwcGx5U3R5bGVzXCI9PT10Lm5hbWUmJiExPT09dC5lbmFibGVkKTt0aGlzLl9wb3BwZXI9aS5jcmVhdGVQb3BwZXIoZSx0aGlzLl9tZW51LHMpLG4mJksuc2V0RGF0YUF0dHJpYnV0ZSh0aGlzLl9tZW51LFwicG9wcGVyXCIsXCJzdGF0aWNcIil9X2lzU2hvd24odD10aGlzLl9lbGVtZW50KXtyZXR1cm4gdC5jbGFzc0xpc3QuY29udGFpbnMoXCJzaG93XCIpfV9nZXRNZW51RWxlbWVudCgpe3JldHVybiBWLm5leHQodGhpcy5fZWxlbWVudCxcIi5kcm9wZG93bi1tZW51XCIpWzBdfV9nZXRQbGFjZW1lbnQoKXtjb25zdCB0PXRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZTtpZih0LmNsYXNzTGlzdC5jb250YWlucyhcImRyb3BlbmRcIikpcmV0dXJuIGh0O2lmKHQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZHJvcHN0YXJ0XCIpKXJldHVybiBkdDtjb25zdCBlPVwiZW5kXCI9PT1nZXRDb21wdXRlZFN0eWxlKHRoaXMuX21lbnUpLmdldFByb3BlcnR5VmFsdWUoXCItLWJzLXBvc2l0aW9uXCIpLnRyaW0oKTtyZXR1cm4gdC5jbGFzc0xpc3QuY29udGFpbnMoXCJkcm9wdXBcIik/ZT9hdDpydDplP2N0Omx0fV9kZXRlY3ROYXZiYXIoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2VsZW1lbnQuY2xvc2VzdChcIi5uYXZiYXJcIil9X2dldE9mZnNldCgpe2NvbnN0e29mZnNldDp0fT10aGlzLl9jb25maWc7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/dC5zcGxpdChcIixcIikubWFwKHQ9Pk51bWJlci5wYXJzZUludCh0LDEwKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgdD9lPT50KGUsdGhpcy5fZWxlbWVudCk6dH1fZ2V0UG9wcGVyQ29uZmlnKCl7Y29uc3QgdD17cGxhY2VtZW50OnRoaXMuX2dldFBsYWNlbWVudCgpLG1vZGlmaWVyczpbe25hbWU6XCJwcmV2ZW50T3ZlcmZsb3dcIixvcHRpb25zOntib3VuZGFyeTp0aGlzLl9jb25maWcuYm91bmRhcnl9fSx7bmFtZTpcIm9mZnNldFwiLG9wdGlvbnM6e29mZnNldDp0aGlzLl9nZXRPZmZzZXQoKX19XX07cmV0dXJuXCJzdGF0aWNcIj09PXRoaXMuX2NvbmZpZy5kaXNwbGF5JiYodC5tb2RpZmllcnM9W3tuYW1lOlwiYXBwbHlTdHlsZXNcIixlbmFibGVkOiExfV0pLHsuLi50LC4uLlwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWc/dGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZyh0KTp0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnfX1fc2VsZWN0TWVudUl0ZW0oe2tleTp0LHRhcmdldDplfSl7Y29uc3QgaT1WLmZpbmQoXCIuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTpub3QoLmRpc2FibGVkKTpub3QoOmRpc2FibGVkKVwiLHRoaXMuX21lbnUpLmZpbHRlcihoKTtpLmxlbmd0aCYmdyhpLGUsXCJBcnJvd0Rvd25cIj09PXQsIWkuaW5jbHVkZXMoZSkpLmZvY3VzKCl9c3RhdGljIGpRdWVyeUludGVyZmFjZSh0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe2NvbnN0IGU9cHQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLHQpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXtpZih2b2lkIDA9PT1lW3RdKXRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7dH1cImApO2VbdF0oKX19KSl9c3RhdGljIGNsZWFyTWVudXModCl7aWYodCYmKDI9PT10LmJ1dHRvbnx8XCJrZXl1cFwiPT09dC50eXBlJiZcIlRhYlwiIT09dC5rZXkpKXJldHVybjtjb25zdCBlPVYuZmluZCgnW2RhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIl0nKTtmb3IobGV0IGk9MCxzPWUubGVuZ3RoO2k8cztpKyspe2NvbnN0IHM9cHQuZ2V0SW5zdGFuY2UoZVtpXSk7aWYoIXN8fCExPT09cy5fY29uZmlnLmF1dG9DbG9zZSljb250aW51ZTtpZighcy5faXNTaG93bigpKWNvbnRpbnVlO2NvbnN0IG49e3JlbGF0ZWRUYXJnZXQ6cy5fZWxlbWVudH07aWYodCl7Y29uc3QgZT10LmNvbXBvc2VkUGF0aCgpLGk9ZS5pbmNsdWRlcyhzLl9tZW51KTtpZihlLmluY2x1ZGVzKHMuX2VsZW1lbnQpfHxcImluc2lkZVwiPT09cy5fY29uZmlnLmF1dG9DbG9zZSYmIWl8fFwib3V0c2lkZVwiPT09cy5fY29uZmlnLmF1dG9DbG9zZSYmaSljb250aW51ZTtpZihzLl9tZW51LmNvbnRhaW5zKHQudGFyZ2V0KSYmKFwia2V5dXBcIj09PXQudHlwZSYmXCJUYWJcIj09PXQua2V5fHwvaW5wdXR8c2VsZWN0fG9wdGlvbnx0ZXh0YXJlYXxmb3JtL2kudGVzdCh0LnRhcmdldC50YWdOYW1lKSkpY29udGludWU7XCJjbGlja1wiPT09dC50eXBlJiYobi5jbGlja0V2ZW50PXQpfXMuX2NvbXBsZXRlSGlkZShuKX19c3RhdGljIGdldFBhcmVudEZyb21FbGVtZW50KHQpe3JldHVybiBvKHQpfHx0LnBhcmVudE5vZGV9c3RhdGljIGRhdGFBcGlLZXlkb3duSGFuZGxlcih0KXtpZigvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KHQudGFyZ2V0LnRhZ05hbWUpP1wiU3BhY2VcIj09PXQua2V5fHxcIkVzY2FwZVwiIT09dC5rZXkmJihcIkFycm93RG93blwiIT09dC5rZXkmJlwiQXJyb3dVcFwiIT09dC5rZXl8fHQudGFyZ2V0LmNsb3Nlc3QoXCIuZHJvcGRvd24tbWVudVwiKSk6IW90LnRlc3QodC5rZXkpKXJldHVybjtjb25zdCBlPXRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKFwic2hvd1wiKTtpZighZSYmXCJFc2NhcGVcIj09PXQua2V5KXJldHVybjtpZih0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSxkKHRoaXMpKXJldHVybjtjb25zdCBpPXRoaXMubWF0Y2hlcygnW2RhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIl0nKT90aGlzOlYucHJldih0aGlzLCdbZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiXScpWzBdLHM9cHQuZ2V0T3JDcmVhdGVJbnN0YW5jZShpKTtpZihcIkVzY2FwZVwiIT09dC5rZXkpcmV0dXJuXCJBcnJvd1VwXCI9PT10LmtleXx8XCJBcnJvd0Rvd25cIj09PXQua2V5PyhlfHxzLnNob3coKSx2b2lkIHMuX3NlbGVjdE1lbnVJdGVtKHQpKTp2b2lkKGUmJlwiU3BhY2VcIiE9PXQua2V5fHxwdC5jbGVhck1lbnVzKCkpO3MuaGlkZSgpfX1ILm9uKGRvY3VtZW50LFwia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaVwiLCdbZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiXScscHQuZGF0YUFwaUtleWRvd25IYW5kbGVyKSxILm9uKGRvY3VtZW50LFwia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaVwiLFwiLmRyb3Bkb3duLW1lbnVcIixwdC5kYXRhQXBpS2V5ZG93bkhhbmRsZXIpLEgub24oZG9jdW1lbnQsXCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaVwiLHB0LmNsZWFyTWVudXMpLEgub24oZG9jdW1lbnQsXCJrZXl1cC5icy5kcm9wZG93bi5kYXRhLWFwaVwiLHB0LmNsZWFyTWVudXMpLEgub24oZG9jdW1lbnQsXCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaVwiLCdbZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiXScsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSxwdC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpLnRvZ2dsZSgpfSkpLGIocHQpO2NsYXNzIGZ0e2NvbnN0cnVjdG9yKCl7dGhpcy5fZWxlbWVudD1kb2N1bWVudC5ib2R5fWdldFdpZHRoKCl7Y29uc3QgdD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7cmV0dXJuIE1hdGguYWJzKHdpbmRvdy5pbm5lcldpZHRoLXQpfWhpZGUoKXtjb25zdCB0PXRoaXMuZ2V0V2lkdGgoKTt0aGlzLl9kaXNhYmxlT3ZlckZsb3coKSx0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LFwicGFkZGluZ1JpZ2h0XCIsZT0+ZSt0KSx0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyhcIi5maXhlZC10b3AsIC5maXhlZC1ib3R0b20sIC5pcy1maXhlZCwgLnN0aWNreS10b3BcIixcInBhZGRpbmdSaWdodFwiLGU9PmUrdCksdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXMoXCIuc3RpY2t5LXRvcFwiLFwibWFyZ2luUmlnaHRcIixlPT5lLXQpfV9kaXNhYmxlT3ZlckZsb3coKXt0aGlzLl9zYXZlSW5pdGlhbEF0dHJpYnV0ZSh0aGlzLl9lbGVtZW50LFwib3ZlcmZsb3dcIiksdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvdz1cImhpZGRlblwifV9zZXRFbGVtZW50QXR0cmlidXRlcyh0LGUsaSl7Y29uc3Qgcz10aGlzLmdldFdpZHRoKCk7dGhpcy5fYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayh0LHQ9PntpZih0IT09dGhpcy5fZWxlbWVudCYmd2luZG93LmlubmVyV2lkdGg+dC5jbGllbnRXaWR0aCtzKXJldHVybjt0aGlzLl9zYXZlSW5pdGlhbEF0dHJpYnV0ZSh0LGUpO2NvbnN0IG49d2luZG93LmdldENvbXB1dGVkU3R5bGUodClbZV07dC5zdHlsZVtlXT1pKE51bWJlci5wYXJzZUZsb2F0KG4pKStcInB4XCJ9KX1yZXNldCgpe3RoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCxcIm92ZXJmbG93XCIpLHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCxcInBhZGRpbmdSaWdodFwiKSx0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKFwiLmZpeGVkLXRvcCwgLmZpeGVkLWJvdHRvbSwgLmlzLWZpeGVkLCAuc3RpY2t5LXRvcFwiLFwicGFkZGluZ1JpZ2h0XCIpLHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoXCIuc3RpY2t5LXRvcFwiLFwibWFyZ2luUmlnaHRcIil9X3NhdmVJbml0aWFsQXR0cmlidXRlKHQsZSl7Y29uc3QgaT10LnN0eWxlW2VdO2kmJksuc2V0RGF0YUF0dHJpYnV0ZSh0LGUsaSl9X3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXModCxlKXt0aGlzLl9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHQsdD0+e2NvbnN0IGk9Sy5nZXREYXRhQXR0cmlidXRlKHQsZSk7dm9pZCAwPT09aT90LnN0eWxlLnJlbW92ZVByb3BlcnR5KGUpOihLLnJlbW92ZURhdGFBdHRyaWJ1dGUodCxlKSx0LnN0eWxlW2VdPWkpfSl9X2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2sodCxlKXthKHQpP2UodCk6Vi5maW5kKHQsdGhpcy5fZWxlbWVudCkuZm9yRWFjaChlKX1pc092ZXJmbG93aW5nKCl7cmV0dXJuIHRoaXMuZ2V0V2lkdGgoKT4wfX1jb25zdCBfdD17Y2xhc3NOYW1lOlwibW9kYWwtYmFja2Ryb3BcIixpc1Zpc2libGU6ITAsaXNBbmltYXRlZDohMSxyb290RWxlbWVudDpcImJvZHlcIixjbGlja0NhbGxiYWNrOm51bGx9LG10PXtjbGFzc05hbWU6XCJzdHJpbmdcIixpc1Zpc2libGU6XCJib29sZWFuXCIsaXNBbmltYXRlZDpcImJvb2xlYW5cIixyb290RWxlbWVudDpcIihlbGVtZW50fHN0cmluZylcIixjbGlja0NhbGxiYWNrOlwiKGZ1bmN0aW9ufG51bGwpXCJ9O2NsYXNzIGJ0e2NvbnN0cnVjdG9yKHQpe3RoaXMuX2NvbmZpZz10aGlzLl9nZXRDb25maWcodCksdGhpcy5faXNBcHBlbmRlZD0hMSx0aGlzLl9lbGVtZW50PW51bGx9c2hvdyh0KXt0aGlzLl9jb25maWcuaXNWaXNpYmxlPyh0aGlzLl9hcHBlbmQoKSx0aGlzLl9jb25maWcuaXNBbmltYXRlZCYmcCh0aGlzLl9nZXRFbGVtZW50KCkpLHRoaXMuX2dldEVsZW1lbnQoKS5jbGFzc0xpc3QuYWRkKFwic2hvd1wiKSx0aGlzLl9lbXVsYXRlQW5pbWF0aW9uKCgpPT57dih0KX0pKTp2KHQpfWhpZGUodCl7dGhpcy5fY29uZmlnLmlzVmlzaWJsZT8odGhpcy5fZ2V0RWxlbWVudCgpLmNsYXNzTGlzdC5yZW1vdmUoXCJzaG93XCIpLHRoaXMuX2VtdWxhdGVBbmltYXRpb24oKCk9Pnt0aGlzLmRpc3Bvc2UoKSx2KHQpfSkpOnYodCl9X2dldEVsZW1lbnQoKXtpZighdGhpcy5fZWxlbWVudCl7Y29uc3QgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3QuY2xhc3NOYW1lPXRoaXMuX2NvbmZpZy5jbGFzc05hbWUsdGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQmJnQuY2xhc3NMaXN0LmFkZChcImZhZGVcIiksdGhpcy5fZWxlbWVudD10fXJldHVybiB0aGlzLl9lbGVtZW50fV9nZXRDb25maWcodCl7cmV0dXJuKHQ9ey4uLl90LC4uLlwib2JqZWN0XCI9PXR5cGVvZiB0P3Q6e319KS5yb290RWxlbWVudD1sKHQucm9vdEVsZW1lbnQpLGMoXCJiYWNrZHJvcFwiLHQsbXQpLHR9X2FwcGVuZCgpe3RoaXMuX2lzQXBwZW5kZWR8fCh0aGlzLl9jb25maWcucm9vdEVsZW1lbnQuYXBwZW5kKHRoaXMuX2dldEVsZW1lbnQoKSksSC5vbih0aGlzLl9nZXRFbGVtZW50KCksXCJtb3VzZWRvd24uYnMuYmFja2Ryb3BcIiwoKT0+e3YodGhpcy5fY29uZmlnLmNsaWNrQ2FsbGJhY2spfSksdGhpcy5faXNBcHBlbmRlZD0hMCl9ZGlzcG9zZSgpe3RoaXMuX2lzQXBwZW5kZWQmJihILm9mZih0aGlzLl9lbGVtZW50LFwibW91c2Vkb3duLmJzLmJhY2tkcm9wXCIpLHRoaXMuX2VsZW1lbnQucmVtb3ZlKCksdGhpcy5faXNBcHBlbmRlZD0hMSl9X2VtdWxhdGVBbmltYXRpb24odCl7eSh0LHRoaXMuX2dldEVsZW1lbnQoKSx0aGlzLl9jb25maWcuaXNBbmltYXRlZCl9fWNvbnN0IHZ0PXt0cmFwRWxlbWVudDpudWxsLGF1dG9mb2N1czohMH0seXQ9e3RyYXBFbGVtZW50OlwiZWxlbWVudFwiLGF1dG9mb2N1czpcImJvb2xlYW5cIn07Y2xhc3Mgd3R7Y29uc3RydWN0b3IodCl7dGhpcy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyh0KSx0aGlzLl9pc0FjdGl2ZT0hMSx0aGlzLl9sYXN0VGFiTmF2RGlyZWN0aW9uPW51bGx9YWN0aXZhdGUoKXtjb25zdHt0cmFwRWxlbWVudDp0LGF1dG9mb2N1czplfT10aGlzLl9jb25maWc7dGhpcy5faXNBY3RpdmV8fChlJiZ0LmZvY3VzKCksSC5vZmYoZG9jdW1lbnQsXCIuYnMuZm9jdXN0cmFwXCIpLEgub24oZG9jdW1lbnQsXCJmb2N1c2luLmJzLmZvY3VzdHJhcFwiLHQ9PnRoaXMuX2hhbmRsZUZvY3VzaW4odCkpLEgub24oZG9jdW1lbnQsXCJrZXlkb3duLnRhYi5icy5mb2N1c3RyYXBcIix0PT50aGlzLl9oYW5kbGVLZXlkb3duKHQpKSx0aGlzLl9pc0FjdGl2ZT0hMCl9ZGVhY3RpdmF0ZSgpe3RoaXMuX2lzQWN0aXZlJiYodGhpcy5faXNBY3RpdmU9ITEsSC5vZmYoZG9jdW1lbnQsXCIuYnMuZm9jdXN0cmFwXCIpKX1faGFuZGxlRm9jdXNpbih0KXtjb25zdHt0YXJnZXQ6ZX09dCx7dHJhcEVsZW1lbnQ6aX09dGhpcy5fY29uZmlnO2lmKGU9PT1kb2N1bWVudHx8ZT09PWl8fGkuY29udGFpbnMoZSkpcmV0dXJuO2NvbnN0IHM9Vi5mb2N1c2FibGVDaGlsZHJlbihpKTswPT09cy5sZW5ndGg/aS5mb2N1cygpOlwiYmFja3dhcmRcIj09PXRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24/c1tzLmxlbmd0aC0xXS5mb2N1cygpOnNbMF0uZm9jdXMoKX1faGFuZGxlS2V5ZG93bih0KXtcIlRhYlwiPT09dC5rZXkmJih0aGlzLl9sYXN0VGFiTmF2RGlyZWN0aW9uPXQuc2hpZnRLZXk/XCJiYWNrd2FyZFwiOlwiZm9yd2FyZFwiKX1fZ2V0Q29uZmlnKHQpe3JldHVybiB0PXsuLi52dCwuLi5cIm9iamVjdFwiPT10eXBlb2YgdD90Ont9fSxjKFwiZm9jdXN0cmFwXCIsdCx5dCksdH19Y29uc3QgRXQ9e2JhY2tkcm9wOiEwLGtleWJvYXJkOiEwLGZvY3VzOiEwfSxBdD17YmFja2Ryb3A6XCIoYm9vbGVhbnxzdHJpbmcpXCIsa2V5Ym9hcmQ6XCJib29sZWFuXCIsZm9jdXM6XCJib29sZWFuXCJ9O2NsYXNzIFR0IGV4dGVuZHMgUntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQpLHRoaXMuX2NvbmZpZz10aGlzLl9nZXRDb25maWcoZSksdGhpcy5fZGlhbG9nPVYuZmluZE9uZShcIi5tb2RhbC1kaWFsb2dcIix0aGlzLl9lbGVtZW50KSx0aGlzLl9iYWNrZHJvcD10aGlzLl9pbml0aWFsaXplQmFja0Ryb3AoKSx0aGlzLl9mb2N1c3RyYXA9dGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpLHRoaXMuX2lzU2hvd249ITEsdGhpcy5faWdub3JlQmFja2Ryb3BDbGljaz0hMSx0aGlzLl9pc1RyYW5zaXRpb25pbmc9ITEsdGhpcy5fc2Nyb2xsQmFyPW5ldyBmdH1zdGF0aWMgZ2V0IERlZmF1bHQoKXtyZXR1cm4gRXR9c3RhdGljIGdldCBOQU1FKCl7cmV0dXJuXCJtb2RhbFwifXRvZ2dsZSh0KXtyZXR1cm4gdGhpcy5faXNTaG93bj90aGlzLmhpZGUoKTp0aGlzLnNob3codCl9c2hvdyh0KXt0aGlzLl9pc1Nob3dufHx0aGlzLl9pc1RyYW5zaXRpb25pbmd8fEgudHJpZ2dlcih0aGlzLl9lbGVtZW50LFwic2hvdy5icy5tb2RhbFwiLHtyZWxhdGVkVGFyZ2V0OnR9KS5kZWZhdWx0UHJldmVudGVkfHwodGhpcy5faXNTaG93bj0hMCx0aGlzLl9pc0FuaW1hdGVkKCkmJih0aGlzLl9pc1RyYW5zaXRpb25pbmc9ITApLHRoaXMuX3Njcm9sbEJhci5oaWRlKCksZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwibW9kYWwtb3BlblwiKSx0aGlzLl9hZGp1c3REaWFsb2coKSx0aGlzLl9zZXRFc2NhcGVFdmVudCgpLHRoaXMuX3NldFJlc2l6ZUV2ZW50KCksSC5vbih0aGlzLl9kaWFsb2csXCJtb3VzZWRvd24uZGlzbWlzcy5icy5tb2RhbFwiLCgpPT57SC5vbmUodGhpcy5fZWxlbWVudCxcIm1vdXNldXAuZGlzbWlzcy5icy5tb2RhbFwiLHQ9Pnt0LnRhcmdldD09PXRoaXMuX2VsZW1lbnQmJih0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrPSEwKX0pfSksdGhpcy5fc2hvd0JhY2tkcm9wKCgpPT50aGlzLl9zaG93RWxlbWVudCh0KSkpfWhpZGUoKXtpZighdGhpcy5faXNTaG93bnx8dGhpcy5faXNUcmFuc2l0aW9uaW5nKXJldHVybjtpZihILnRyaWdnZXIodGhpcy5fZWxlbWVudCxcImhpZGUuYnMubW9kYWxcIikuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47dGhpcy5faXNTaG93bj0hMTtjb25zdCB0PXRoaXMuX2lzQW5pbWF0ZWQoKTt0JiYodGhpcy5faXNUcmFuc2l0aW9uaW5nPSEwKSx0aGlzLl9zZXRFc2NhcGVFdmVudCgpLHRoaXMuX3NldFJlc2l6ZUV2ZW50KCksdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJzaG93XCIpLEgub2ZmKHRoaXMuX2VsZW1lbnQsXCJjbGljay5kaXNtaXNzLmJzLm1vZGFsXCIpLEgub2ZmKHRoaXMuX2RpYWxvZyxcIm1vdXNlZG93bi5kaXNtaXNzLmJzLm1vZGFsXCIpLHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCk9PnRoaXMuX2hpZGVNb2RhbCgpLHRoaXMuX2VsZW1lbnQsdCl9ZGlzcG9zZSgpe1t3aW5kb3csdGhpcy5fZGlhbG9nXS5mb3JFYWNoKHQ9Pkgub2ZmKHQsXCIuYnMubW9kYWxcIikpLHRoaXMuX2JhY2tkcm9wLmRpc3Bvc2UoKSx0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpLHN1cGVyLmRpc3Bvc2UoKX1oYW5kbGVVcGRhdGUoKXt0aGlzLl9hZGp1c3REaWFsb2coKX1faW5pdGlhbGl6ZUJhY2tEcm9wKCl7cmV0dXJuIG5ldyBidCh7aXNWaXNpYmxlOkJvb2xlYW4odGhpcy5fY29uZmlnLmJhY2tkcm9wKSxpc0FuaW1hdGVkOnRoaXMuX2lzQW5pbWF0ZWQoKX0pfV9pbml0aWFsaXplRm9jdXNUcmFwKCl7cmV0dXJuIG5ldyB3dCh7dHJhcEVsZW1lbnQ6dGhpcy5fZWxlbWVudH0pfV9nZXRDb25maWcodCl7cmV0dXJuIHQ9ey4uLkV0LC4uLksuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCksLi4uXCJvYmplY3RcIj09dHlwZW9mIHQ/dDp7fX0sYyhcIm1vZGFsXCIsdCxBdCksdH1fc2hvd0VsZW1lbnQodCl7Y29uc3QgZT10aGlzLl9pc0FuaW1hdGVkKCksaT1WLmZpbmRPbmUoXCIubW9kYWwtYm9keVwiLHRoaXMuX2RpYWxvZyk7dGhpcy5fZWxlbWVudC5wYXJlbnROb2RlJiZ0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERXx8ZG9jdW1lbnQuYm9keS5hcHBlbmQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIix0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIpLHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1tb2RhbFwiLCEwKSx0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZShcInJvbGVcIixcImRpYWxvZ1wiKSx0aGlzLl9lbGVtZW50LnNjcm9sbFRvcD0wLGkmJihpLnNjcm9sbFRvcD0wKSxlJiZwKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChcInNob3dcIiksdGhpcy5fcXVldWVDYWxsYmFjaygoKT0+e3RoaXMuX2NvbmZpZy5mb2N1cyYmdGhpcy5fZm9jdXN0cmFwLmFjdGl2YXRlKCksdGhpcy5faXNUcmFuc2l0aW9uaW5nPSExLEgudHJpZ2dlcih0aGlzLl9lbGVtZW50LFwic2hvd24uYnMubW9kYWxcIix7cmVsYXRlZFRhcmdldDp0fSl9LHRoaXMuX2RpYWxvZyxlKX1fc2V0RXNjYXBlRXZlbnQoKXt0aGlzLl9pc1Nob3duP0gub24odGhpcy5fZWxlbWVudCxcImtleWRvd24uZGlzbWlzcy5icy5tb2RhbFwiLHQ9Pnt0aGlzLl9jb25maWcua2V5Ym9hcmQmJlwiRXNjYXBlXCI9PT10LmtleT8odC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaGlkZSgpKTp0aGlzLl9jb25maWcua2V5Ym9hcmR8fFwiRXNjYXBlXCIhPT10LmtleXx8dGhpcy5fdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpfSk6SC5vZmYodGhpcy5fZWxlbWVudCxcImtleWRvd24uZGlzbWlzcy5icy5tb2RhbFwiKX1fc2V0UmVzaXplRXZlbnQoKXt0aGlzLl9pc1Nob3duP0gub24od2luZG93LFwicmVzaXplLmJzLm1vZGFsXCIsKCk9PnRoaXMuX2FkanVzdERpYWxvZygpKTpILm9mZih3aW5kb3csXCJyZXNpemUuYnMubW9kYWxcIil9X2hpZGVNb2RhbCgpe3RoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheT1cIm5vbmVcIix0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIsITApLHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwiYXJpYS1tb2RhbFwiKSx0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcInJvbGVcIiksdGhpcy5faXNUcmFuc2l0aW9uaW5nPSExLHRoaXMuX2JhY2tkcm9wLmhpZGUoKCk9Pntkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJtb2RhbC1vcGVuXCIpLHRoaXMuX3Jlc2V0QWRqdXN0bWVudHMoKSx0aGlzLl9zY3JvbGxCYXIucmVzZXQoKSxILnRyaWdnZXIodGhpcy5fZWxlbWVudCxcImhpZGRlbi5icy5tb2RhbFwiKX0pfV9zaG93QmFja2Ryb3AodCl7SC5vbih0aGlzLl9lbGVtZW50LFwiY2xpY2suZGlzbWlzcy5icy5tb2RhbFwiLHQ9Pnt0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrP3RoaXMuX2lnbm9yZUJhY2tkcm9wQ2xpY2s9ITE6dC50YXJnZXQ9PT10LmN1cnJlbnRUYXJnZXQmJighMD09PXRoaXMuX2NvbmZpZy5iYWNrZHJvcD90aGlzLmhpZGUoKTpcInN0YXRpY1wiPT09dGhpcy5fY29uZmlnLmJhY2tkcm9wJiZ0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCkpfSksdGhpcy5fYmFja2Ryb3Auc2hvdyh0KX1faXNBbmltYXRlZCgpe3JldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImZhZGVcIil9X3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKXtpZihILnRyaWdnZXIodGhpcy5fZWxlbWVudCxcImhpZGVQcmV2ZW50ZWQuYnMubW9kYWxcIikuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47Y29uc3R7Y2xhc3NMaXN0OnQsc2Nyb2xsSGVpZ2h0OmUsc3R5bGU6aX09dGhpcy5fZWxlbWVudCxzPWU+ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDshcyYmXCJoaWRkZW5cIj09PWkub3ZlcmZsb3dZfHx0LmNvbnRhaW5zKFwibW9kYWwtc3RhdGljXCIpfHwoc3x8KGkub3ZlcmZsb3dZPVwiaGlkZGVuXCIpLHQuYWRkKFwibW9kYWwtc3RhdGljXCIpLHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCk9Pnt0LnJlbW92ZShcIm1vZGFsLXN0YXRpY1wiKSxzfHx0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpPT57aS5vdmVyZmxvd1k9XCJcIn0sdGhpcy5fZGlhbG9nKX0sdGhpcy5fZGlhbG9nKSx0aGlzLl9lbGVtZW50LmZvY3VzKCkpfV9hZGp1c3REaWFsb2coKXtjb25zdCB0PXRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0PmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsZT10aGlzLl9zY3JvbGxCYXIuZ2V0V2lkdGgoKSxpPWU+MDsoIWkmJnQmJiFtKCl8fGkmJiF0JiZtKCkpJiYodGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nTGVmdD1lK1wicHhcIiksKGkmJiF0JiYhbSgpfHwhaSYmdCYmbSgpKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0PWUrXCJweFwiKX1fcmVzZXRBZGp1c3RtZW50cygpe3RoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQ9XCJcIix0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodD1cIlwifXN0YXRpYyBqUXVlcnlJbnRlcmZhY2UodCxlKXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe2NvbnN0IGk9VHQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLHQpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXtpZih2b2lkIDA9PT1pW3RdKXRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7dH1cImApO2lbdF0oZSl9fSkpfX1ILm9uKGRvY3VtZW50LFwiY2xpY2suYnMubW9kYWwuZGF0YS1hcGlcIiwnW2RhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIl0nLChmdW5jdGlvbih0KXtjb25zdCBlPW8odGhpcyk7W1wiQVwiLFwiQVJFQVwiXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpJiZ0LnByZXZlbnREZWZhdWx0KCksSC5vbmUoZSxcInNob3cuYnMubW9kYWxcIix0PT57dC5kZWZhdWx0UHJldmVudGVkfHxILm9uZShlLFwiaGlkZGVuLmJzLm1vZGFsXCIsKCk9PntoKHRoaXMpJiZ0aGlzLmZvY3VzKCl9KX0pLFR0LmdldE9yQ3JlYXRlSW5zdGFuY2UoZSkudG9nZ2xlKHRoaXMpfSkpLEYoVHQpLGIoVHQpO2NvbnN0IEN0PXtiYWNrZHJvcDohMCxrZXlib2FyZDohMCxzY3JvbGw6ITF9LGt0PXtiYWNrZHJvcDpcImJvb2xlYW5cIixrZXlib2FyZDpcImJvb2xlYW5cIixzY3JvbGw6XCJib29sZWFuXCJ9O2NsYXNzIEx0IGV4dGVuZHMgUntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQpLHRoaXMuX2NvbmZpZz10aGlzLl9nZXRDb25maWcoZSksdGhpcy5faXNTaG93bj0hMSx0aGlzLl9iYWNrZHJvcD10aGlzLl9pbml0aWFsaXplQmFja0Ryb3AoKSx0aGlzLl9mb2N1c3RyYXA9dGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpLHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKCl9c3RhdGljIGdldCBOQU1FKCl7cmV0dXJuXCJvZmZjYW52YXNcIn1zdGF0aWMgZ2V0IERlZmF1bHQoKXtyZXR1cm4gQ3R9dG9nZ2xlKHQpe3JldHVybiB0aGlzLl9pc1Nob3duP3RoaXMuaGlkZSgpOnRoaXMuc2hvdyh0KX1zaG93KHQpe3RoaXMuX2lzU2hvd258fEgudHJpZ2dlcih0aGlzLl9lbGVtZW50LFwic2hvdy5icy5vZmZjYW52YXNcIix7cmVsYXRlZFRhcmdldDp0fSkuZGVmYXVsdFByZXZlbnRlZHx8KHRoaXMuX2lzU2hvd249ITAsdGhpcy5fZWxlbWVudC5zdHlsZS52aXNpYmlsaXR5PVwidmlzaWJsZVwiLHRoaXMuX2JhY2tkcm9wLnNob3coKSx0aGlzLl9jb25maWcuc2Nyb2xsfHwobmV3IGZ0KS5oaWRlKCksdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiKSx0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZShcImFyaWEtbW9kYWxcIiwhMCksdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJkaWFsb2dcIiksdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwic2hvd1wiKSx0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpPT57dGhpcy5fY29uZmlnLnNjcm9sbHx8dGhpcy5fZm9jdXN0cmFwLmFjdGl2YXRlKCksSC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsXCJzaG93bi5icy5vZmZjYW52YXNcIix7cmVsYXRlZFRhcmdldDp0fSl9LHRoaXMuX2VsZW1lbnQsITApKX1oaWRlKCl7dGhpcy5faXNTaG93biYmKEgudHJpZ2dlcih0aGlzLl9lbGVtZW50LFwiaGlkZS5icy5vZmZjYW52YXNcIikuZGVmYXVsdFByZXZlbnRlZHx8KHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKCksdGhpcy5fZWxlbWVudC5ibHVyKCksdGhpcy5faXNTaG93bj0hMSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJzaG93XCIpLHRoaXMuX2JhY2tkcm9wLmhpZGUoKSx0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpPT57dGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiLCEwKSx0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcImFyaWEtbW9kYWxcIiksdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJyb2xlXCIpLHRoaXMuX2VsZW1lbnQuc3R5bGUudmlzaWJpbGl0eT1cImhpZGRlblwiLHRoaXMuX2NvbmZpZy5zY3JvbGx8fChuZXcgZnQpLnJlc2V0KCksSC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsXCJoaWRkZW4uYnMub2ZmY2FudmFzXCIpfSx0aGlzLl9lbGVtZW50LCEwKSkpfWRpc3Bvc2UoKXt0aGlzLl9iYWNrZHJvcC5kaXNwb3NlKCksdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKSxzdXBlci5kaXNwb3NlKCl9X2dldENvbmZpZyh0KXtyZXR1cm4gdD17Li4uQ3QsLi4uSy5nZXREYXRhQXR0cmlidXRlcyh0aGlzLl9lbGVtZW50KSwuLi5cIm9iamVjdFwiPT10eXBlb2YgdD90Ont9fSxjKFwib2ZmY2FudmFzXCIsdCxrdCksdH1faW5pdGlhbGl6ZUJhY2tEcm9wKCl7cmV0dXJuIG5ldyBidCh7Y2xhc3NOYW1lOlwib2ZmY2FudmFzLWJhY2tkcm9wXCIsaXNWaXNpYmxlOnRoaXMuX2NvbmZpZy5iYWNrZHJvcCxpc0FuaW1hdGVkOiEwLHJvb3RFbGVtZW50OnRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSxjbGlja0NhbGxiYWNrOigpPT50aGlzLmhpZGUoKX0pfV9pbml0aWFsaXplRm9jdXNUcmFwKCl7cmV0dXJuIG5ldyB3dCh7dHJhcEVsZW1lbnQ6dGhpcy5fZWxlbWVudH0pfV9hZGRFdmVudExpc3RlbmVycygpe0gub24odGhpcy5fZWxlbWVudCxcImtleWRvd24uZGlzbWlzcy5icy5vZmZjYW52YXNcIix0PT57dGhpcy5fY29uZmlnLmtleWJvYXJkJiZcIkVzY2FwZVwiPT09dC5rZXkmJnRoaXMuaGlkZSgpfSl9c3RhdGljIGpRdWVyeUludGVyZmFjZSh0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe2NvbnN0IGU9THQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLHQpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXtpZih2b2lkIDA9PT1lW3RdfHx0LnN0YXJ0c1dpdGgoXCJfXCIpfHxcImNvbnN0cnVjdG9yXCI9PT10KXRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7dH1cImApO2VbdF0odGhpcyl9fSkpfX1ILm9uKGRvY3VtZW50LFwiY2xpY2suYnMub2ZmY2FudmFzLmRhdGEtYXBpXCIsJ1tkYXRhLWJzLXRvZ2dsZT1cIm9mZmNhbnZhc1wiXScsKGZ1bmN0aW9uKHQpe2NvbnN0IGU9byh0aGlzKTtpZihbXCJBXCIsXCJBUkVBXCJdLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkmJnQucHJldmVudERlZmF1bHQoKSxkKHRoaXMpKXJldHVybjtILm9uZShlLFwiaGlkZGVuLmJzLm9mZmNhbnZhc1wiLCgpPT57aCh0aGlzKSYmdGhpcy5mb2N1cygpfSk7Y29uc3QgaT1WLmZpbmRPbmUoXCIub2ZmY2FudmFzLnNob3dcIik7aSYmaSE9PWUmJkx0LmdldEluc3RhbmNlKGkpLmhpZGUoKSxMdC5nZXRPckNyZWF0ZUluc3RhbmNlKGUpLnRvZ2dsZSh0aGlzKX0pKSxILm9uKHdpbmRvdyxcImxvYWQuYnMub2ZmY2FudmFzLmRhdGEtYXBpXCIsKCk9PlYuZmluZChcIi5vZmZjYW52YXMuc2hvd1wiKS5mb3JFYWNoKHQ9Pkx0LmdldE9yQ3JlYXRlSW5zdGFuY2UodCkuc2hvdygpKSksRihMdCksYihMdCk7Y29uc3QgU3Q9bmV3IFNldChbXCJiYWNrZ3JvdW5kXCIsXCJjaXRlXCIsXCJocmVmXCIsXCJpdGVtdHlwZVwiLFwibG9uZ2Rlc2NcIixcInBvc3RlclwiLFwic3JjXCIsXCJ4bGluazpocmVmXCJdKSxPdD0vXig/Oig/Omh0dHBzP3xtYWlsdG98ZnRwfHRlbHxmaWxlKTp8W14jJi86P10qKD86WyMvP118JCkpL2ksTnQ9L15kYXRhOig/OmltYWdlXFwvKD86Ym1wfGdpZnxqcGVnfGpwZ3xwbmd8dGlmZnx3ZWJwKXx2aWRlb1xcLyg/Om1wZWd8bXA0fG9nZ3x3ZWJtKXxhdWRpb1xcLyg/Om1wM3xvZ2F8b2dnfG9wdXMpKTtiYXNlNjQsW1xcZCsvYS16XSs9KiQvaSxEdD0odCxlKT0+e2NvbnN0IGk9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKGUuaW5jbHVkZXMoaSkpcmV0dXJuIVN0LmhhcyhpKXx8Qm9vbGVhbihPdC50ZXN0KHQubm9kZVZhbHVlKXx8TnQudGVzdCh0Lm5vZGVWYWx1ZSkpO2NvbnN0IHM9ZS5maWx0ZXIodD0+dCBpbnN0YW5jZW9mIFJlZ0V4cCk7Zm9yKGxldCB0PTAsZT1zLmxlbmd0aDt0PGU7dCsrKWlmKHNbdF0udGVzdChpKSlyZXR1cm4hMDtyZXR1cm4hMX07ZnVuY3Rpb24gSXQodCxlLGkpe2lmKCF0Lmxlbmd0aClyZXR1cm4gdDtpZihpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBpKXJldHVybiBpKHQpO2NvbnN0IHM9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcodCxcInRleHQvaHRtbFwiKSxuPU9iamVjdC5rZXlzKGUpLG89W10uY29uY2F0KC4uLnMuYm9keS5xdWVyeVNlbGVjdG9yQWxsKFwiKlwiKSk7Zm9yKGxldCB0PTAsaT1vLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBpPW9bdF0scz1pLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoIW4uaW5jbHVkZXMocykpe2kucmVtb3ZlKCk7Y29udGludWV9Y29uc3Qgcj1bXS5jb25jYXQoLi4uaS5hdHRyaWJ1dGVzKSxhPVtdLmNvbmNhdChlW1wiKlwiXXx8W10sZVtzXXx8W10pO3IuZm9yRWFjaCh0PT57RHQodCxhKXx8aS5yZW1vdmVBdHRyaWJ1dGUodC5ub2RlTmFtZSl9KX1yZXR1cm4gcy5ib2R5LmlubmVySFRNTH1jb25zdCB4dD1uZXcgU2V0KFtcInNhbml0aXplXCIsXCJhbGxvd0xpc3RcIixcInNhbml0aXplRm5cIl0pLFB0PXthbmltYXRpb246XCJib29sZWFuXCIsdGVtcGxhdGU6XCJzdHJpbmdcIix0aXRsZTpcIihzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbilcIix0cmlnZ2VyOlwic3RyaW5nXCIsZGVsYXk6XCIobnVtYmVyfG9iamVjdClcIixodG1sOlwiYm9vbGVhblwiLHNlbGVjdG9yOlwiKHN0cmluZ3xib29sZWFuKVwiLHBsYWNlbWVudDpcIihzdHJpbmd8ZnVuY3Rpb24pXCIsb2Zmc2V0OlwiKGFycmF5fHN0cmluZ3xmdW5jdGlvbilcIixjb250YWluZXI6XCIoc3RyaW5nfGVsZW1lbnR8Ym9vbGVhbilcIixmYWxsYmFja1BsYWNlbWVudHM6XCJhcnJheVwiLGJvdW5kYXJ5OlwiKHN0cmluZ3xlbGVtZW50KVwiLGN1c3RvbUNsYXNzOlwiKHN0cmluZ3xmdW5jdGlvbilcIixzYW5pdGl6ZTpcImJvb2xlYW5cIixzYW5pdGl6ZUZuOlwiKG51bGx8ZnVuY3Rpb24pXCIsYWxsb3dMaXN0Olwib2JqZWN0XCIscG9wcGVyQ29uZmlnOlwiKG51bGx8b2JqZWN0fGZ1bmN0aW9uKVwifSxNdD17QVVUTzpcImF1dG9cIixUT1A6XCJ0b3BcIixSSUdIVDptKCk/XCJsZWZ0XCI6XCJyaWdodFwiLEJPVFRPTTpcImJvdHRvbVwiLExFRlQ6bSgpP1wicmlnaHRcIjpcImxlZnRcIn0sanQ9e2FuaW1hdGlvbjohMCx0ZW1wbGF0ZTonPGRpdiBjbGFzcz1cInRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiPjxkaXYgY2xhc3M9XCJ0b29sdGlwLWFycm93XCI+PC9kaXY+PGRpdiBjbGFzcz1cInRvb2x0aXAtaW5uZXJcIj48L2Rpdj48L2Rpdj4nLHRyaWdnZXI6XCJob3ZlciBmb2N1c1wiLHRpdGxlOlwiXCIsZGVsYXk6MCxodG1sOiExLHNlbGVjdG9yOiExLHBsYWNlbWVudDpcInRvcFwiLG9mZnNldDpbMCwwXSxjb250YWluZXI6ITEsZmFsbGJhY2tQbGFjZW1lbnRzOltcInRvcFwiLFwicmlnaHRcIixcImJvdHRvbVwiLFwibGVmdFwiXSxib3VuZGFyeTpcImNsaXBwaW5nUGFyZW50c1wiLGN1c3RvbUNsYXNzOlwiXCIsc2FuaXRpemU6ITAsc2FuaXRpemVGbjpudWxsLGFsbG93TGlzdDp7XCIqXCI6W1wiY2xhc3NcIixcImRpclwiLFwiaWRcIixcImxhbmdcIixcInJvbGVcIiwvXmFyaWEtW1xcdy1dKiQvaV0sYTpbXCJ0YXJnZXRcIixcImhyZWZcIixcInRpdGxlXCIsXCJyZWxcIl0sYXJlYTpbXSxiOltdLGJyOltdLGNvbDpbXSxjb2RlOltdLGRpdjpbXSxlbTpbXSxocjpbXSxoMTpbXSxoMjpbXSxoMzpbXSxoNDpbXSxoNTpbXSxoNjpbXSxpOltdLGltZzpbXCJzcmNcIixcInNyY3NldFwiLFwiYWx0XCIsXCJ0aXRsZVwiLFwid2lkdGhcIixcImhlaWdodFwiXSxsaTpbXSxvbDpbXSxwOltdLHByZTpbXSxzOltdLHNtYWxsOltdLHNwYW46W10sc3ViOltdLHN1cDpbXSxzdHJvbmc6W10sdTpbXSx1bDpbXX0scG9wcGVyQ29uZmlnOm51bGx9LEh0PXtISURFOlwiaGlkZS5icy50b29sdGlwXCIsSElEREVOOlwiaGlkZGVuLmJzLnRvb2x0aXBcIixTSE9XOlwic2hvdy5icy50b29sdGlwXCIsU0hPV046XCJzaG93bi5icy50b29sdGlwXCIsSU5TRVJURUQ6XCJpbnNlcnRlZC5icy50b29sdGlwXCIsQ0xJQ0s6XCJjbGljay5icy50b29sdGlwXCIsRk9DVVNJTjpcImZvY3VzaW4uYnMudG9vbHRpcFwiLEZPQ1VTT1VUOlwiZm9jdXNvdXQuYnMudG9vbHRpcFwiLE1PVVNFRU5URVI6XCJtb3VzZWVudGVyLmJzLnRvb2x0aXBcIixNT1VTRUxFQVZFOlwibW91c2VsZWF2ZS5icy50b29sdGlwXCJ9O2NsYXNzIEJ0IGV4dGVuZHMgUntjb25zdHJ1Y3Rvcih0LGUpe2lmKHZvaWQgMD09PWkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkJvb3RzdHJhcCdzIHRvb2x0aXBzIHJlcXVpcmUgUG9wcGVyIChodHRwczovL3BvcHBlci5qcy5vcmcpXCIpO3N1cGVyKHQpLHRoaXMuX2lzRW5hYmxlZD0hMCx0aGlzLl90aW1lb3V0PTAsdGhpcy5faG92ZXJTdGF0ZT1cIlwiLHRoaXMuX2FjdGl2ZVRyaWdnZXI9e30sdGhpcy5fcG9wcGVyPW51bGwsdGhpcy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyhlKSx0aGlzLnRpcD1udWxsLHRoaXMuX3NldExpc3RlbmVycygpfXN0YXRpYyBnZXQgRGVmYXVsdCgpe3JldHVybiBqdH1zdGF0aWMgZ2V0IE5BTUUoKXtyZXR1cm5cInRvb2x0aXBcIn1zdGF0aWMgZ2V0IEV2ZW50KCl7cmV0dXJuIEh0fXN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKXtyZXR1cm4gUHR9ZW5hYmxlKCl7dGhpcy5faXNFbmFibGVkPSEwfWRpc2FibGUoKXt0aGlzLl9pc0VuYWJsZWQ9ITF9dG9nZ2xlRW5hYmxlZCgpe3RoaXMuX2lzRW5hYmxlZD0hdGhpcy5faXNFbmFibGVkfXRvZ2dsZSh0KXtpZih0aGlzLl9pc0VuYWJsZWQpaWYodCl7Y29uc3QgZT10aGlzLl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQodCk7ZS5fYWN0aXZlVHJpZ2dlci5jbGljaz0hZS5fYWN0aXZlVHJpZ2dlci5jbGljayxlLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCk/ZS5fZW50ZXIobnVsbCxlKTplLl9sZWF2ZShudWxsLGUpfWVsc2V7aWYodGhpcy5nZXRUaXBFbGVtZW50KCkuY2xhc3NMaXN0LmNvbnRhaW5zKFwic2hvd1wiKSlyZXR1cm4gdm9pZCB0aGlzLl9sZWF2ZShudWxsLHRoaXMpO3RoaXMuX2VudGVyKG51bGwsdGhpcyl9fWRpc3Bvc2UoKXtjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCksSC5vZmYodGhpcy5fZWxlbWVudC5jbG9zZXN0KFwiLm1vZGFsXCIpLFwiaGlkZS5icy5tb2RhbFwiLHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIpLHRoaXMudGlwJiZ0aGlzLnRpcC5yZW1vdmUoKSx0aGlzLl9wb3BwZXImJnRoaXMuX3BvcHBlci5kZXN0cm95KCksc3VwZXIuZGlzcG9zZSgpfXNob3coKXtpZihcIm5vbmVcIj09PXRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSl0aHJvdyBuZXcgRXJyb3IoXCJQbGVhc2UgdXNlIHNob3cgb24gdmlzaWJsZSBlbGVtZW50c1wiKTtpZighdGhpcy5pc1dpdGhDb250ZW50KCl8fCF0aGlzLl9pc0VuYWJsZWQpcmV0dXJuO2NvbnN0IHQ9SC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsdGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5TSE9XKSxlPXUodGhpcy5fZWxlbWVudCkscz1udWxsPT09ZT90aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKHRoaXMuX2VsZW1lbnQpOmUuY29udGFpbnModGhpcy5fZWxlbWVudCk7aWYodC5kZWZhdWx0UHJldmVudGVkfHwhcylyZXR1cm47Y29uc3Qgbj10aGlzLmdldFRpcEVsZW1lbnQoKSxvPSh0PT57ZG97dCs9TWF0aC5mbG9vcigxZTYqTWF0aC5yYW5kb20oKSl9d2hpbGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCkpO3JldHVybiB0fSkodGhpcy5jb25zdHJ1Y3Rvci5OQU1FKTtuLnNldEF0dHJpYnV0ZShcImlkXCIsbyksdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWRlc2NyaWJlZGJ5XCIsbyksdGhpcy5fY29uZmlnLmFuaW1hdGlvbiYmbi5jbGFzc0xpc3QuYWRkKFwiZmFkZVwiKTtjb25zdCByPVwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMuX2NvbmZpZy5wbGFjZW1lbnQ/dGhpcy5fY29uZmlnLnBsYWNlbWVudC5jYWxsKHRoaXMsbix0aGlzLl9lbGVtZW50KTp0aGlzLl9jb25maWcucGxhY2VtZW50LGE9dGhpcy5fZ2V0QXR0YWNobWVudChyKTt0aGlzLl9hZGRBdHRhY2htZW50Q2xhc3MoYSk7Y29uc3R7Y29udGFpbmVyOmx9PXRoaXMuX2NvbmZpZzt6LnNldChuLHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVksdGhpcyksdGhpcy5fZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb250YWlucyh0aGlzLnRpcCl8fChsLmFwcGVuZChuKSxILnRyaWdnZXIodGhpcy5fZWxlbWVudCx0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LklOU0VSVEVEKSksdGhpcy5fcG9wcGVyP3RoaXMuX3BvcHBlci51cGRhdGUoKTp0aGlzLl9wb3BwZXI9aS5jcmVhdGVQb3BwZXIodGhpcy5fZWxlbWVudCxuLHRoaXMuX2dldFBvcHBlckNvbmZpZyhhKSksbi5jbGFzc0xpc3QuYWRkKFwic2hvd1wiKTtjb25zdCBjPXRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKHRoaXMuX2NvbmZpZy5jdXN0b21DbGFzcyk7YyYmbi5jbGFzc0xpc3QuYWRkKC4uLmMuc3BsaXQoXCIgXCIpKSxcIm9udG91Y2hzdGFydFwiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikuZm9yRWFjaCh0PT57SC5vbih0LFwibW91c2VvdmVyXCIsZyl9KTtjb25zdCBoPXRoaXMudGlwLmNsYXNzTGlzdC5jb250YWlucyhcImZhZGVcIik7dGhpcy5fcXVldWVDYWxsYmFjaygoKT0+e2NvbnN0IHQ9dGhpcy5faG92ZXJTdGF0ZTt0aGlzLl9ob3ZlclN0YXRlPW51bGwsSC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsdGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5TSE9XTiksXCJvdXRcIj09PXQmJnRoaXMuX2xlYXZlKG51bGwsdGhpcyl9LHRoaXMudGlwLGgpfWhpZGUoKXtpZighdGhpcy5fcG9wcGVyKXJldHVybjtjb25zdCB0PXRoaXMuZ2V0VGlwRWxlbWVudCgpO2lmKEgudHJpZ2dlcih0aGlzLl9lbGVtZW50LHRoaXMuY29uc3RydWN0b3IuRXZlbnQuSElERSkuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47dC5jbGFzc0xpc3QucmVtb3ZlKFwic2hvd1wiKSxcIm9udG91Y2hzdGFydFwiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikuZm9yRWFjaCh0PT5ILm9mZih0LFwibW91c2VvdmVyXCIsZykpLHRoaXMuX2FjdGl2ZVRyaWdnZXIuY2xpY2s9ITEsdGhpcy5fYWN0aXZlVHJpZ2dlci5mb2N1cz0hMSx0aGlzLl9hY3RpdmVUcmlnZ2VyLmhvdmVyPSExO2NvbnN0IGU9dGhpcy50aXAuY2xhc3NMaXN0LmNvbnRhaW5zKFwiZmFkZVwiKTt0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpPT57dGhpcy5faXNXaXRoQWN0aXZlVHJpZ2dlcigpfHwoXCJzaG93XCIhPT10aGlzLl9ob3ZlclN0YXRlJiZ0LnJlbW92ZSgpLHRoaXMuX2NsZWFuVGlwQ2xhc3MoKSx0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcImFyaWEtZGVzY3JpYmVkYnlcIiksSC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsdGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5ISURERU4pLHRoaXMuX3BvcHBlciYmKHRoaXMuX3BvcHBlci5kZXN0cm95KCksdGhpcy5fcG9wcGVyPW51bGwpKX0sdGhpcy50aXAsZSksdGhpcy5faG92ZXJTdGF0ZT1cIlwifXVwZGF0ZSgpe251bGwhPT10aGlzLl9wb3BwZXImJnRoaXMuX3BvcHBlci51cGRhdGUoKX1pc1dpdGhDb250ZW50KCl7cmV0dXJuIEJvb2xlYW4odGhpcy5nZXRUaXRsZSgpKX1nZXRUaXBFbGVtZW50KCl7aWYodGhpcy50aXApcmV0dXJuIHRoaXMudGlwO2NvbnN0IHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTt0LmlubmVySFRNTD10aGlzLl9jb25maWcudGVtcGxhdGU7Y29uc3QgZT10LmNoaWxkcmVuWzBdO3JldHVybiB0aGlzLnNldENvbnRlbnQoZSksZS5jbGFzc0xpc3QucmVtb3ZlKFwiZmFkZVwiLFwic2hvd1wiKSx0aGlzLnRpcD1lLHRoaXMudGlwfXNldENvbnRlbnQodCl7dGhpcy5fc2FuaXRpemVBbmRTZXRDb250ZW50KHQsdGhpcy5nZXRUaXRsZSgpLFwiLnRvb2x0aXAtaW5uZXJcIil9X3Nhbml0aXplQW5kU2V0Q29udGVudCh0LGUsaSl7Y29uc3Qgcz1WLmZpbmRPbmUoaSx0KTtlfHwhcz90aGlzLnNldEVsZW1lbnRDb250ZW50KHMsZSk6cy5yZW1vdmUoKX1zZXRFbGVtZW50Q29udGVudCh0LGUpe2lmKG51bGwhPT10KXJldHVybiBhKGUpPyhlPWwoZSksdm9pZCh0aGlzLl9jb25maWcuaHRtbD9lLnBhcmVudE5vZGUhPT10JiYodC5pbm5lckhUTUw9XCJcIix0LmFwcGVuZChlKSk6dC50ZXh0Q29udGVudD1lLnRleHRDb250ZW50KSk6dm9pZCh0aGlzLl9jb25maWcuaHRtbD8odGhpcy5fY29uZmlnLnNhbml0aXplJiYoZT1JdChlLHRoaXMuX2NvbmZpZy5hbGxvd0xpc3QsdGhpcy5fY29uZmlnLnNhbml0aXplRm4pKSx0LmlubmVySFRNTD1lKTp0LnRleHRDb250ZW50PWUpfWdldFRpdGxlKCl7Y29uc3QgdD10aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtYnMtb3JpZ2luYWwtdGl0bGVcIil8fHRoaXMuX2NvbmZpZy50aXRsZTtyZXR1cm4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odCl9dXBkYXRlQXR0YWNobWVudCh0KXtyZXR1cm5cInJpZ2h0XCI9PT10P1wiZW5kXCI6XCJsZWZ0XCI9PT10P1wic3RhcnRcIjp0fV9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQodCxlKXtyZXR1cm4gZXx8dGhpcy5jb25zdHJ1Y3Rvci5nZXRPckNyZWF0ZUluc3RhbmNlKHQuZGVsZWdhdGVUYXJnZXQsdGhpcy5fZ2V0RGVsZWdhdGVDb25maWcoKSl9X2dldE9mZnNldCgpe2NvbnN0e29mZnNldDp0fT10aGlzLl9jb25maWc7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/dC5zcGxpdChcIixcIikubWFwKHQ9Pk51bWJlci5wYXJzZUludCh0LDEwKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgdD9lPT50KGUsdGhpcy5fZWxlbWVudCk6dH1fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdD90LmNhbGwodGhpcy5fZWxlbWVudCk6dH1fZ2V0UG9wcGVyQ29uZmlnKHQpe2NvbnN0IGU9e3BsYWNlbWVudDp0LG1vZGlmaWVyczpbe25hbWU6XCJmbGlwXCIsb3B0aW9uczp7ZmFsbGJhY2tQbGFjZW1lbnRzOnRoaXMuX2NvbmZpZy5mYWxsYmFja1BsYWNlbWVudHN9fSx7bmFtZTpcIm9mZnNldFwiLG9wdGlvbnM6e29mZnNldDp0aGlzLl9nZXRPZmZzZXQoKX19LHtuYW1lOlwicHJldmVudE92ZXJmbG93XCIsb3B0aW9uczp7Ym91bmRhcnk6dGhpcy5fY29uZmlnLmJvdW5kYXJ5fX0se25hbWU6XCJhcnJvd1wiLG9wdGlvbnM6e2VsZW1lbnQ6YC4ke3RoaXMuY29uc3RydWN0b3IuTkFNRX0tYXJyb3dgfX0se25hbWU6XCJvbkNoYW5nZVwiLGVuYWJsZWQ6ITAscGhhc2U6XCJhZnRlcldyaXRlXCIsZm46dD0+dGhpcy5faGFuZGxlUG9wcGVyUGxhY2VtZW50Q2hhbmdlKHQpfV0sb25GaXJzdFVwZGF0ZTp0PT57dC5vcHRpb25zLnBsYWNlbWVudCE9PXQucGxhY2VtZW50JiZ0aGlzLl9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2UodCl9fTtyZXR1cm57Li4uZSwuLi5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnP3RoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcoZSk6dGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZ319X2FkZEF0dGFjaG1lbnRDbGFzcyh0KXt0aGlzLmdldFRpcEVsZW1lbnQoKS5jbGFzc0xpc3QuYWRkKGAke3RoaXMuX2dldEJhc2ljQ2xhc3NQcmVmaXgoKX0tJHt0aGlzLnVwZGF0ZUF0dGFjaG1lbnQodCl9YCl9X2dldEF0dGFjaG1lbnQodCl7cmV0dXJuIE10W3QudG9VcHBlckNhc2UoKV19X3NldExpc3RlbmVycygpe3RoaXMuX2NvbmZpZy50cmlnZ2VyLnNwbGl0KFwiIFwiKS5mb3JFYWNoKHQ9PntpZihcImNsaWNrXCI9PT10KUgub24odGhpcy5fZWxlbWVudCx0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LkNMSUNLLHRoaXMuX2NvbmZpZy5zZWxlY3Rvcix0PT50aGlzLnRvZ2dsZSh0KSk7ZWxzZSBpZihcIm1hbnVhbFwiIT09dCl7Y29uc3QgZT1cImhvdmVyXCI9PT10P3RoaXMuY29uc3RydWN0b3IuRXZlbnQuTU9VU0VFTlRFUjp0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LkZPQ1VTSU4saT1cImhvdmVyXCI9PT10P3RoaXMuY29uc3RydWN0b3IuRXZlbnQuTU9VU0VMRUFWRTp0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LkZPQ1VTT1VUO0gub24odGhpcy5fZWxlbWVudCxlLHRoaXMuX2NvbmZpZy5zZWxlY3Rvcix0PT50aGlzLl9lbnRlcih0KSksSC5vbih0aGlzLl9lbGVtZW50LGksdGhpcy5fY29uZmlnLnNlbGVjdG9yLHQ9PnRoaXMuX2xlYXZlKHQpKX19KSx0aGlzLl9oaWRlTW9kYWxIYW5kbGVyPSgpPT57dGhpcy5fZWxlbWVudCYmdGhpcy5oaWRlKCl9LEgub24odGhpcy5fZWxlbWVudC5jbG9zZXN0KFwiLm1vZGFsXCIpLFwiaGlkZS5icy5tb2RhbFwiLHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIpLHRoaXMuX2NvbmZpZy5zZWxlY3Rvcj90aGlzLl9jb25maWc9ey4uLnRoaXMuX2NvbmZpZyx0cmlnZ2VyOlwibWFudWFsXCIsc2VsZWN0b3I6XCJcIn06dGhpcy5fZml4VGl0bGUoKX1fZml4VGl0bGUoKXtjb25zdCB0PXRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKFwidGl0bGVcIiksZT10eXBlb2YgdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWJzLW9yaWdpbmFsLXRpdGxlXCIpOyh0fHxcInN0cmluZ1wiIT09ZSkmJih0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZShcImRhdGEtYnMtb3JpZ2luYWwtdGl0bGVcIix0fHxcIlwiKSwhdHx8dGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIpfHx0aGlzLl9lbGVtZW50LnRleHRDb250ZW50fHx0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIix0KSx0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZShcInRpdGxlXCIsXCJcIikpfV9lbnRlcih0LGUpe2U9dGhpcy5faW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KHQsZSksdCYmKGUuX2FjdGl2ZVRyaWdnZXJbXCJmb2N1c2luXCI9PT10LnR5cGU/XCJmb2N1c1wiOlwiaG92ZXJcIl09ITApLGUuZ2V0VGlwRWxlbWVudCgpLmNsYXNzTGlzdC5jb250YWlucyhcInNob3dcIil8fFwic2hvd1wiPT09ZS5faG92ZXJTdGF0ZT9lLl9ob3ZlclN0YXRlPVwic2hvd1wiOihjbGVhclRpbWVvdXQoZS5fdGltZW91dCksZS5faG92ZXJTdGF0ZT1cInNob3dcIixlLl9jb25maWcuZGVsYXkmJmUuX2NvbmZpZy5kZWxheS5zaG93P2UuX3RpbWVvdXQ9c2V0VGltZW91dCgoKT0+e1wic2hvd1wiPT09ZS5faG92ZXJTdGF0ZSYmZS5zaG93KCl9LGUuX2NvbmZpZy5kZWxheS5zaG93KTplLnNob3coKSl9X2xlYXZlKHQsZSl7ZT10aGlzLl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQodCxlKSx0JiYoZS5fYWN0aXZlVHJpZ2dlcltcImZvY3Vzb3V0XCI9PT10LnR5cGU/XCJmb2N1c1wiOlwiaG92ZXJcIl09ZS5fZWxlbWVudC5jb250YWlucyh0LnJlbGF0ZWRUYXJnZXQpKSxlLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCl8fChjbGVhclRpbWVvdXQoZS5fdGltZW91dCksZS5faG92ZXJTdGF0ZT1cIm91dFwiLGUuX2NvbmZpZy5kZWxheSYmZS5fY29uZmlnLmRlbGF5LmhpZGU/ZS5fdGltZW91dD1zZXRUaW1lb3V0KCgpPT57XCJvdXRcIj09PWUuX2hvdmVyU3RhdGUmJmUuaGlkZSgpfSxlLl9jb25maWcuZGVsYXkuaGlkZSk6ZS5oaWRlKCkpfV9pc1dpdGhBY3RpdmVUcmlnZ2VyKCl7Zm9yKGNvbnN0IHQgaW4gdGhpcy5fYWN0aXZlVHJpZ2dlcilpZih0aGlzLl9hY3RpdmVUcmlnZ2VyW3RdKXJldHVybiEwO3JldHVybiExfV9nZXRDb25maWcodCl7Y29uc3QgZT1LLmdldERhdGFBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQpO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKHQ9Pnt4dC5oYXModCkmJmRlbGV0ZSBlW3RdfSksKHQ9ey4uLnRoaXMuY29uc3RydWN0b3IuRGVmYXVsdCwuLi5lLC4uLlwib2JqZWN0XCI9PXR5cGVvZiB0JiZ0P3Q6e319KS5jb250YWluZXI9ITE9PT10LmNvbnRhaW5lcj9kb2N1bWVudC5ib2R5OmwodC5jb250YWluZXIpLFwibnVtYmVyXCI9PXR5cGVvZiB0LmRlbGF5JiYodC5kZWxheT17c2hvdzp0LmRlbGF5LGhpZGU6dC5kZWxheX0pLFwibnVtYmVyXCI9PXR5cGVvZiB0LnRpdGxlJiYodC50aXRsZT10LnRpdGxlLnRvU3RyaW5nKCkpLFwibnVtYmVyXCI9PXR5cGVvZiB0LmNvbnRlbnQmJih0LmNvbnRlbnQ9dC5jb250ZW50LnRvU3RyaW5nKCkpLGMoXCJ0b29sdGlwXCIsdCx0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKSx0LnNhbml0aXplJiYodC50ZW1wbGF0ZT1JdCh0LnRlbXBsYXRlLHQuYWxsb3dMaXN0LHQuc2FuaXRpemVGbikpLHR9X2dldERlbGVnYXRlQ29uZmlnKCl7Y29uc3QgdD17fTtmb3IoY29uc3QgZSBpbiB0aGlzLl9jb25maWcpdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0W2VdIT09dGhpcy5fY29uZmlnW2VdJiYodFtlXT10aGlzLl9jb25maWdbZV0pO3JldHVybiB0fV9jbGVhblRpcENsYXNzKCl7Y29uc3QgdD10aGlzLmdldFRpcEVsZW1lbnQoKSxlPW5ldyBSZWdFeHAoYChefFxcXFxzKSR7dGhpcy5fZ2V0QmFzaWNDbGFzc1ByZWZpeCgpfVxcXFxTK2AsXCJnXCIpLGk9dC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKS5tYXRjaChlKTtudWxsIT09aSYmaS5sZW5ndGg+MCYmaS5tYXAodD0+dC50cmltKCkpLmZvckVhY2goZT0+dC5jbGFzc0xpc3QucmVtb3ZlKGUpKX1fZ2V0QmFzaWNDbGFzc1ByZWZpeCgpe3JldHVyblwiYnMtdG9vbHRpcFwifV9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2UodCl7Y29uc3R7c3RhdGU6ZX09dDtlJiYodGhpcy50aXA9ZS5lbGVtZW50cy5wb3BwZXIsdGhpcy5fY2xlYW5UaXBDbGFzcygpLHRoaXMuX2FkZEF0dGFjaG1lbnRDbGFzcyh0aGlzLl9nZXRBdHRhY2htZW50KGUucGxhY2VtZW50KSkpfXN0YXRpYyBqUXVlcnlJbnRlcmZhY2UodCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXtjb25zdCBlPUJ0LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcyx0KTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7aWYodm9pZCAwPT09ZVt0XSl0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke3R9XCJgKTtlW3RdKCl9fSkpfX1iKEJ0KTtjb25zdCB6dD17Li4uQnQuRGVmYXVsdCxwbGFjZW1lbnQ6XCJyaWdodFwiLG9mZnNldDpbMCw4XSx0cmlnZ2VyOlwiY2xpY2tcIixjb250ZW50OlwiXCIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9XCJwb3BvdmVyXCIgcm9sZT1cInRvb2x0aXBcIj48ZGl2IGNsYXNzPVwicG9wb3Zlci1hcnJvd1wiPjwvZGl2PjxoMyBjbGFzcz1cInBvcG92ZXItaGVhZGVyXCI+PC9oMz48ZGl2IGNsYXNzPVwicG9wb3Zlci1ib2R5XCI+PC9kaXY+PC9kaXY+J30sUnQ9ey4uLkJ0LkRlZmF1bHRUeXBlLGNvbnRlbnQ6XCIoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pXCJ9LEZ0PXtISURFOlwiaGlkZS5icy5wb3BvdmVyXCIsSElEREVOOlwiaGlkZGVuLmJzLnBvcG92ZXJcIixTSE9XOlwic2hvdy5icy5wb3BvdmVyXCIsU0hPV046XCJzaG93bi5icy5wb3BvdmVyXCIsSU5TRVJURUQ6XCJpbnNlcnRlZC5icy5wb3BvdmVyXCIsQ0xJQ0s6XCJjbGljay5icy5wb3BvdmVyXCIsRk9DVVNJTjpcImZvY3VzaW4uYnMucG9wb3ZlclwiLEZPQ1VTT1VUOlwiZm9jdXNvdXQuYnMucG9wb3ZlclwiLE1PVVNFRU5URVI6XCJtb3VzZWVudGVyLmJzLnBvcG92ZXJcIixNT1VTRUxFQVZFOlwibW91c2VsZWF2ZS5icy5wb3BvdmVyXCJ9O2NsYXNzIFd0IGV4dGVuZHMgQnR7c3RhdGljIGdldCBEZWZhdWx0KCl7cmV0dXJuIHp0fXN0YXRpYyBnZXQgTkFNRSgpe3JldHVyblwicG9wb3ZlclwifXN0YXRpYyBnZXQgRXZlbnQoKXtyZXR1cm4gRnR9c3RhdGljIGdldCBEZWZhdWx0VHlwZSgpe3JldHVybiBSdH1pc1dpdGhDb250ZW50KCl7cmV0dXJuIHRoaXMuZ2V0VGl0bGUoKXx8dGhpcy5fZ2V0Q29udGVudCgpfXNldENvbnRlbnQodCl7dGhpcy5fc2FuaXRpemVBbmRTZXRDb250ZW50KHQsdGhpcy5nZXRUaXRsZSgpLFwiLnBvcG92ZXItaGVhZGVyXCIpLHRoaXMuX3Nhbml0aXplQW5kU2V0Q29udGVudCh0LHRoaXMuX2dldENvbnRlbnQoKSxcIi5wb3BvdmVyLWJvZHlcIil9X2dldENvbnRlbnQoKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmNvbnRlbnQpfV9nZXRCYXNpY0NsYXNzUHJlZml4KCl7cmV0dXJuXCJicy1wb3BvdmVyXCJ9c3RhdGljIGpRdWVyeUludGVyZmFjZSh0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe2NvbnN0IGU9V3QuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLHQpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXtpZih2b2lkIDA9PT1lW3RdKXRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7dH1cImApO2VbdF0oKX19KSl9fWIoV3QpO2NvbnN0ICR0PXtvZmZzZXQ6MTAsbWV0aG9kOlwiYXV0b1wiLHRhcmdldDpcIlwifSxxdD17b2Zmc2V0OlwibnVtYmVyXCIsbWV0aG9kOlwic3RyaW5nXCIsdGFyZ2V0OlwiKHN0cmluZ3xlbGVtZW50KVwifSxVdD1cIi5uYXYtbGluaywgLmxpc3QtZ3JvdXAtaXRlbSwgLmRyb3Bkb3duLWl0ZW1cIjtjbGFzcyBLdCBleHRlbmRzIFJ7Y29uc3RydWN0b3IodCxlKXtzdXBlcih0KSx0aGlzLl9zY3JvbGxFbGVtZW50PVwiQk9EWVwiPT09dGhpcy5fZWxlbWVudC50YWdOYW1lP3dpbmRvdzp0aGlzLl9lbGVtZW50LHRoaXMuX2NvbmZpZz10aGlzLl9nZXRDb25maWcoZSksdGhpcy5fb2Zmc2V0cz1bXSx0aGlzLl90YXJnZXRzPVtdLHRoaXMuX2FjdGl2ZVRhcmdldD1udWxsLHRoaXMuX3Njcm9sbEhlaWdodD0wLEgub24odGhpcy5fc2Nyb2xsRWxlbWVudCxcInNjcm9sbC5icy5zY3JvbGxzcHlcIiwoKT0+dGhpcy5fcHJvY2VzcygpKSx0aGlzLnJlZnJlc2goKSx0aGlzLl9wcm9jZXNzKCl9c3RhdGljIGdldCBEZWZhdWx0KCl7cmV0dXJuICR0fXN0YXRpYyBnZXQgTkFNRSgpe3JldHVyblwic2Nyb2xsc3B5XCJ9cmVmcmVzaCgpe2NvbnN0IHQ9dGhpcy5fc2Nyb2xsRWxlbWVudD09PXRoaXMuX3Njcm9sbEVsZW1lbnQud2luZG93P1wib2Zmc2V0XCI6XCJwb3NpdGlvblwiLGU9XCJhdXRvXCI9PT10aGlzLl9jb25maWcubWV0aG9kP3Q6dGhpcy5fY29uZmlnLm1ldGhvZCxpPVwicG9zaXRpb25cIj09PWU/dGhpcy5fZ2V0U2Nyb2xsVG9wKCk6MDt0aGlzLl9vZmZzZXRzPVtdLHRoaXMuX3RhcmdldHM9W10sdGhpcy5fc2Nyb2xsSGVpZ2h0PXRoaXMuX2dldFNjcm9sbEhlaWdodCgpLFYuZmluZChVdCx0aGlzLl9jb25maWcudGFyZ2V0KS5tYXAodD0+e2NvbnN0IHM9bih0KSxvPXM/Vi5maW5kT25lKHMpOm51bGw7aWYobyl7Y29uc3QgdD1vLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKHQud2lkdGh8fHQuaGVpZ2h0KXJldHVybltLW2VdKG8pLnRvcCtpLHNdfXJldHVybiBudWxsfSkuZmlsdGVyKHQ9PnQpLnNvcnQoKHQsZSk9PnRbMF0tZVswXSkuZm9yRWFjaCh0PT57dGhpcy5fb2Zmc2V0cy5wdXNoKHRbMF0pLHRoaXMuX3RhcmdldHMucHVzaCh0WzFdKX0pfWRpc3Bvc2UoKXtILm9mZih0aGlzLl9zY3JvbGxFbGVtZW50LFwiLmJzLnNjcm9sbHNweVwiKSxzdXBlci5kaXNwb3NlKCl9X2dldENvbmZpZyh0KXtyZXR1cm4odD17Li4uJHQsLi4uSy5nZXREYXRhQXR0cmlidXRlcyh0aGlzLl9lbGVtZW50KSwuLi5cIm9iamVjdFwiPT10eXBlb2YgdCYmdD90Ont9fSkudGFyZ2V0PWwodC50YXJnZXQpfHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsYyhcInNjcm9sbHNweVwiLHQscXQpLHR9X2dldFNjcm9sbFRvcCgpe3JldHVybiB0aGlzLl9zY3JvbGxFbGVtZW50PT09d2luZG93P3RoaXMuX3Njcm9sbEVsZW1lbnQucGFnZVlPZmZzZXQ6dGhpcy5fc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3B9X2dldFNjcm9sbEhlaWdodCgpe3JldHVybiB0aGlzLl9zY3JvbGxFbGVtZW50LnNjcm9sbEhlaWdodHx8TWF0aC5tYXgoZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCl9X2dldE9mZnNldEhlaWdodCgpe3JldHVybiB0aGlzLl9zY3JvbGxFbGVtZW50PT09d2luZG93P3dpbmRvdy5pbm5lckhlaWdodDp0aGlzLl9zY3JvbGxFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodH1fcHJvY2Vzcygpe2NvbnN0IHQ9dGhpcy5fZ2V0U2Nyb2xsVG9wKCkrdGhpcy5fY29uZmlnLm9mZnNldCxlPXRoaXMuX2dldFNjcm9sbEhlaWdodCgpLGk9dGhpcy5fY29uZmlnLm9mZnNldCtlLXRoaXMuX2dldE9mZnNldEhlaWdodCgpO2lmKHRoaXMuX3Njcm9sbEhlaWdodCE9PWUmJnRoaXMucmVmcmVzaCgpLHQ+PWkpe2NvbnN0IHQ9dGhpcy5fdGFyZ2V0c1t0aGlzLl90YXJnZXRzLmxlbmd0aC0xXTt0aGlzLl9hY3RpdmVUYXJnZXQhPT10JiZ0aGlzLl9hY3RpdmF0ZSh0KX1lbHNle2lmKHRoaXMuX2FjdGl2ZVRhcmdldCYmdDx0aGlzLl9vZmZzZXRzWzBdJiZ0aGlzLl9vZmZzZXRzWzBdPjApcmV0dXJuIHRoaXMuX2FjdGl2ZVRhcmdldD1udWxsLHZvaWQgdGhpcy5fY2xlYXIoKTtmb3IobGV0IGU9dGhpcy5fb2Zmc2V0cy5sZW5ndGg7ZS0tOyl0aGlzLl9hY3RpdmVUYXJnZXQhPT10aGlzLl90YXJnZXRzW2VdJiZ0Pj10aGlzLl9vZmZzZXRzW2VdJiYodm9pZCAwPT09dGhpcy5fb2Zmc2V0c1tlKzFdfHx0PHRoaXMuX29mZnNldHNbZSsxXSkmJnRoaXMuX2FjdGl2YXRlKHRoaXMuX3RhcmdldHNbZV0pfX1fYWN0aXZhdGUodCl7dGhpcy5fYWN0aXZlVGFyZ2V0PXQsdGhpcy5fY2xlYXIoKTtjb25zdCBlPVV0LnNwbGl0KFwiLFwiKS5tYXAoZT0+YCR7ZX1bZGF0YS1icy10YXJnZXQ9XCIke3R9XCJdLCR7ZX1baHJlZj1cIiR7dH1cIl1gKSxpPVYuZmluZE9uZShlLmpvaW4oXCIsXCIpLHRoaXMuX2NvbmZpZy50YXJnZXQpO2kuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKSxpLmNsYXNzTGlzdC5jb250YWlucyhcImRyb3Bkb3duLWl0ZW1cIik/Vi5maW5kT25lKFwiLmRyb3Bkb3duLXRvZ2dsZVwiLGkuY2xvc2VzdChcIi5kcm9wZG93blwiKSkuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTpWLnBhcmVudHMoaSxcIi5uYXYsIC5saXN0LWdyb3VwXCIpLmZvckVhY2godD0+e1YucHJldih0LFwiLm5hdi1saW5rLCAubGlzdC1ncm91cC1pdGVtXCIpLmZvckVhY2godD0+dC5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpKSxWLnByZXYodCxcIi5uYXYtaXRlbVwiKS5mb3JFYWNoKHQ9PntWLmNoaWxkcmVuKHQsXCIubmF2LWxpbmtcIikuZm9yRWFjaCh0PT50LmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIikpfSl9KSxILnRyaWdnZXIodGhpcy5fc2Nyb2xsRWxlbWVudCxcImFjdGl2YXRlLmJzLnNjcm9sbHNweVwiLHtyZWxhdGVkVGFyZ2V0OnR9KX1fY2xlYXIoKXtWLmZpbmQoVXQsdGhpcy5fY29uZmlnLnRhcmdldCkuZmlsdGVyKHQ9PnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKS5mb3JFYWNoKHQ9PnQuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKSl9c3RhdGljIGpRdWVyeUludGVyZmFjZSh0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe2NvbnN0IGU9S3QuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLHQpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXtpZih2b2lkIDA9PT1lW3RdKXRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7dH1cImApO2VbdF0oKX19KSl9fUgub24od2luZG93LFwibG9hZC5icy5zY3JvbGxzcHkuZGF0YS1hcGlcIiwoKT0+e1YuZmluZCgnW2RhdGEtYnMtc3B5PVwic2Nyb2xsXCJdJykuZm9yRWFjaCh0PT5uZXcgS3QodCkpfSksYihLdCk7Y2xhc3MgVnQgZXh0ZW5kcyBSe3N0YXRpYyBnZXQgTkFNRSgpe3JldHVyblwidGFiXCJ9c2hvdygpe2lmKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJnRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKXJldHVybjtsZXQgdDtjb25zdCBlPW8odGhpcy5fZWxlbWVudCksaT10aGlzLl9lbGVtZW50LmNsb3Nlc3QoXCIubmF2LCAubGlzdC1ncm91cFwiKTtpZihpKXtjb25zdCBlPVwiVUxcIj09PWkubm9kZU5hbWV8fFwiT0xcIj09PWkubm9kZU5hbWU/XCI6c2NvcGUgPiBsaSA+IC5hY3RpdmVcIjpcIi5hY3RpdmVcIjt0PVYuZmluZChlLGkpLHQ9dFt0Lmxlbmd0aC0xXX1jb25zdCBzPXQ/SC50cmlnZ2VyKHQsXCJoaWRlLmJzLnRhYlwiLHtyZWxhdGVkVGFyZ2V0OnRoaXMuX2VsZW1lbnR9KTpudWxsO2lmKEgudHJpZ2dlcih0aGlzLl9lbGVtZW50LFwic2hvdy5icy50YWJcIix7cmVsYXRlZFRhcmdldDp0fSkuZGVmYXVsdFByZXZlbnRlZHx8bnVsbCE9PXMmJnMuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47dGhpcy5fYWN0aXZhdGUodGhpcy5fZWxlbWVudCxpKTtjb25zdCBuPSgpPT57SC50cmlnZ2VyKHQsXCJoaWRkZW4uYnMudGFiXCIse3JlbGF0ZWRUYXJnZXQ6dGhpcy5fZWxlbWVudH0pLEgudHJpZ2dlcih0aGlzLl9lbGVtZW50LFwic2hvd24uYnMudGFiXCIse3JlbGF0ZWRUYXJnZXQ6dH0pfTtlP3RoaXMuX2FjdGl2YXRlKGUsZS5wYXJlbnROb2RlLG4pOm4oKX1fYWN0aXZhdGUodCxlLGkpe2NvbnN0IHM9KCFlfHxcIlVMXCIhPT1lLm5vZGVOYW1lJiZcIk9MXCIhPT1lLm5vZGVOYW1lP1YuY2hpbGRyZW4oZSxcIi5hY3RpdmVcIik6Vi5maW5kKFwiOnNjb3BlID4gbGkgPiAuYWN0aXZlXCIsZSkpWzBdLG49aSYmcyYmcy5jbGFzc0xpc3QuY29udGFpbnMoXCJmYWRlXCIpLG89KCk9PnRoaXMuX3RyYW5zaXRpb25Db21wbGV0ZSh0LHMsaSk7cyYmbj8ocy5jbGFzc0xpc3QucmVtb3ZlKFwic2hvd1wiKSx0aGlzLl9xdWV1ZUNhbGxiYWNrKG8sdCwhMCkpOm8oKX1fdHJhbnNpdGlvbkNvbXBsZXRlKHQsZSxpKXtpZihlKXtlLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7Y29uc3QgdD1WLmZpbmRPbmUoXCI6c2NvcGUgPiAuZHJvcGRvd24tbWVudSAuYWN0aXZlXCIsZS5wYXJlbnROb2RlKTt0JiZ0LmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIiksXCJ0YWJcIj09PWUuZ2V0QXR0cmlidXRlKFwicm9sZVwiKSYmZS5zZXRBdHRyaWJ1dGUoXCJhcmlhLXNlbGVjdGVkXCIsITEpfXQuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKSxcInRhYlwiPT09dC5nZXRBdHRyaWJ1dGUoXCJyb2xlXCIpJiZ0LnNldEF0dHJpYnV0ZShcImFyaWEtc2VsZWN0ZWRcIiwhMCkscCh0KSx0LmNsYXNzTGlzdC5jb250YWlucyhcImZhZGVcIikmJnQuY2xhc3NMaXN0LmFkZChcInNob3dcIik7bGV0IHM9dC5wYXJlbnROb2RlO2lmKHMmJlwiTElcIj09PXMubm9kZU5hbWUmJihzPXMucGFyZW50Tm9kZSkscyYmcy5jbGFzc0xpc3QuY29udGFpbnMoXCJkcm9wZG93bi1tZW51XCIpKXtjb25zdCBlPXQuY2xvc2VzdChcIi5kcm9wZG93blwiKTtlJiZWLmZpbmQoXCIuZHJvcGRvd24tdG9nZ2xlXCIsZSkuZm9yRWFjaCh0PT50LmNsYXNzTGlzdC5hZGQoXCJhY3RpdmVcIikpLHQuc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCEwKX1pJiZpKCl9c3RhdGljIGpRdWVyeUludGVyZmFjZSh0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe2NvbnN0IGU9VnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7aWYodm9pZCAwPT09ZVt0XSl0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke3R9XCJgKTtlW3RdKCl9fSkpfX1ILm9uKGRvY3VtZW50LFwiY2xpY2suYnMudGFiLmRhdGEtYXBpXCIsJ1tkYXRhLWJzLXRvZ2dsZT1cInRhYlwiXSwgW2RhdGEtYnMtdG9nZ2xlPVwicGlsbFwiXSwgW2RhdGEtYnMtdG9nZ2xlPVwibGlzdFwiXScsKGZ1bmN0aW9uKHQpe1tcIkFcIixcIkFSRUFcIl0uaW5jbHVkZXModGhpcy50YWdOYW1lKSYmdC5wcmV2ZW50RGVmYXVsdCgpLGQodGhpcyl8fFZ0LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcykuc2hvdygpfSkpLGIoVnQpO2NvbnN0IFh0PXthbmltYXRpb246XCJib29sZWFuXCIsYXV0b2hpZGU6XCJib29sZWFuXCIsZGVsYXk6XCJudW1iZXJcIn0sWXQ9e2FuaW1hdGlvbjohMCxhdXRvaGlkZTohMCxkZWxheTo1ZTN9O2NsYXNzIFF0IGV4dGVuZHMgUntjb25zdHJ1Y3Rvcih0LGUpe3N1cGVyKHQpLHRoaXMuX2NvbmZpZz10aGlzLl9nZXRDb25maWcoZSksdGhpcy5fdGltZW91dD1udWxsLHRoaXMuX2hhc01vdXNlSW50ZXJhY3Rpb249ITEsdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbj0hMSx0aGlzLl9zZXRMaXN0ZW5lcnMoKX1zdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCl7cmV0dXJuIFh0fXN0YXRpYyBnZXQgRGVmYXVsdCgpe3JldHVybiBZdH1zdGF0aWMgZ2V0IE5BTUUoKXtyZXR1cm5cInRvYXN0XCJ9c2hvdygpe0gudHJpZ2dlcih0aGlzLl9lbGVtZW50LFwic2hvdy5icy50b2FzdFwiKS5kZWZhdWx0UHJldmVudGVkfHwodGhpcy5fY2xlYXJUaW1lb3V0KCksdGhpcy5fY29uZmlnLmFuaW1hdGlvbiYmdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiZmFkZVwiKSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJoaWRlXCIpLHAodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwic2hvd1wiKSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJzaG93aW5nXCIpLHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCk9Pnt0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJzaG93aW5nXCIpLEgudHJpZ2dlcih0aGlzLl9lbGVtZW50LFwic2hvd24uYnMudG9hc3RcIiksdGhpcy5fbWF5YmVTY2hlZHVsZUhpZGUoKX0sdGhpcy5fZWxlbWVudCx0aGlzLl9jb25maWcuYW5pbWF0aW9uKSl9aGlkZSgpe3RoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwic2hvd1wiKSYmKEgudHJpZ2dlcih0aGlzLl9lbGVtZW50LFwiaGlkZS5icy50b2FzdFwiKS5kZWZhdWx0UHJldmVudGVkfHwodGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwic2hvd2luZ1wiKSx0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpPT57dGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiaGlkZVwiKSx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJzaG93aW5nXCIpLHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcInNob3dcIiksSC50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsXCJoaWRkZW4uYnMudG9hc3RcIil9LHRoaXMuX2VsZW1lbnQsdGhpcy5fY29uZmlnLmFuaW1hdGlvbikpKX1kaXNwb3NlKCl7dGhpcy5fY2xlYXJUaW1lb3V0KCksdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJzaG93XCIpJiZ0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJzaG93XCIpLHN1cGVyLmRpc3Bvc2UoKX1fZ2V0Q29uZmlnKHQpe3JldHVybiB0PXsuLi5ZdCwuLi5LLmdldERhdGFBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQpLC4uLlwib2JqZWN0XCI9PXR5cGVvZiB0JiZ0P3Q6e319LGMoXCJ0b2FzdFwiLHQsdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSksdH1fbWF5YmVTY2hlZHVsZUhpZGUoKXt0aGlzLl9jb25maWcuYXV0b2hpZGUmJih0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9ufHx0aGlzLl9oYXNLZXlib2FyZEludGVyYWN0aW9ufHwodGhpcy5fdGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5oaWRlKCl9LHRoaXMuX2NvbmZpZy5kZWxheSkpKX1fb25JbnRlcmFjdGlvbih0LGUpe3N3aXRjaCh0LnR5cGUpe2Nhc2VcIm1vdXNlb3ZlclwiOmNhc2VcIm1vdXNlb3V0XCI6dGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbj1lO2JyZWFrO2Nhc2VcImZvY3VzaW5cIjpjYXNlXCJmb2N1c291dFwiOnRoaXMuX2hhc0tleWJvYXJkSW50ZXJhY3Rpb249ZX1pZihlKXJldHVybiB2b2lkIHRoaXMuX2NsZWFyVGltZW91dCgpO2NvbnN0IGk9dC5yZWxhdGVkVGFyZ2V0O3RoaXMuX2VsZW1lbnQ9PT1pfHx0aGlzLl9lbGVtZW50LmNvbnRhaW5zKGkpfHx0aGlzLl9tYXliZVNjaGVkdWxlSGlkZSgpfV9zZXRMaXN0ZW5lcnMoKXtILm9uKHRoaXMuX2VsZW1lbnQsXCJtb3VzZW92ZXIuYnMudG9hc3RcIix0PT50aGlzLl9vbkludGVyYWN0aW9uKHQsITApKSxILm9uKHRoaXMuX2VsZW1lbnQsXCJtb3VzZW91dC5icy50b2FzdFwiLHQ9PnRoaXMuX29uSW50ZXJhY3Rpb24odCwhMSkpLEgub24odGhpcy5fZWxlbWVudCxcImZvY3VzaW4uYnMudG9hc3RcIix0PT50aGlzLl9vbkludGVyYWN0aW9uKHQsITApKSxILm9uKHRoaXMuX2VsZW1lbnQsXCJmb2N1c291dC5icy50b2FzdFwiLHQ9PnRoaXMuX29uSW50ZXJhY3Rpb24odCwhMSkpfV9jbGVhclRpbWVvdXQoKXtjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCksdGhpcy5fdGltZW91dD1udWxsfXN0YXRpYyBqUXVlcnlJbnRlcmZhY2UodCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXtjb25zdCBlPVF0LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcyx0KTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7aWYodm9pZCAwPT09ZVt0XSl0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke3R9XCJgKTtlW3RdKHRoaXMpfX0pKX19cmV0dXJuIEYoUXQpLGIoUXQpLHtBbGVydDpXLEJ1dHRvbjokLENhcm91c2VsOmV0LENvbGxhcHNlOm50LERyb3Bkb3duOnB0LE1vZGFsOlR0LE9mZmNhbnZhczpMdCxQb3BvdmVyOld0LFNjcm9sbFNweTpLdCxUYWI6VnQsVG9hc3Q6UXQsVG9vbHRpcDpCdH19KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ib290c3RyYXAubWluLmpzLm1hcCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/bootstrap/dist/js/bootstrap.min.js\n"); /***/ }), /***/ "./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./node_modules/swiper/swiper-bundle.css": /*!*******************************************************************************************************************************!*\ !*** ./node_modules/css-loader??ref--7-1!./node_modules/postcss-loader/src??ref--7-2!./node_modules/swiper/swiper-bundle.css ***! \*******************************************************************************************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("exports = module.exports = __webpack_require__(/*! ../css-loader/lib/css-base.js */ \"./node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.i, \"/**\\n * Swiper 6.8.4\\n * Most modern mobile touch slider and framework with hardware accelerated transitions\\n * https://swiperjs.com\\n *\\n * Copyright 2014-2021 Vladimir Kharlampidi\\n *\\n * Released under the MIT License\\n *\\n * Released on: August 23, 2021\\n */\\n\\n@font-face {\\n font-family: 'swiper-icons';\\n src: url('data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA') format('woff');\\n font-weight: 400;\\n font-style: normal;\\n}\\n:root {\\n --swiper-theme-color: #007aff;\\n}\\n.swiper-container {\\n margin-left: auto;\\n margin-right: auto;\\n position: relative;\\n overflow: hidden;\\n list-style: none;\\n padding: 0;\\n /* Fix of Webkit flickering */\\n z-index: 1;\\n}\\n.swiper-container-vertical > .swiper-wrapper {\\n flex-direction: column;\\n}\\n.swiper-wrapper {\\n position: relative;\\n width: 100%;\\n height: 100%;\\n z-index: 1;\\n display: flex;\\n transition-property: transform;\\n box-sizing: content-box;\\n}\\n.swiper-container-android .swiper-slide,\\n.swiper-wrapper {\\n transform: translate3d(0px, 0, 0);\\n}\\n.swiper-container-multirow > .swiper-wrapper {\\n flex-wrap: wrap;\\n}\\n.swiper-container-multirow-column > .swiper-wrapper {\\n flex-wrap: wrap;\\n flex-direction: column;\\n}\\n.swiper-container-free-mode > .swiper-wrapper {\\n transition-timing-function: ease-out;\\n margin: 0 auto;\\n}\\n.swiper-container-pointer-events {\\n touch-action: pan-y;\\n}\\n.swiper-container-pointer-events.swiper-container-vertical {\\n touch-action: pan-x;\\n}\\n.swiper-slide {\\n flex-shrink: 0;\\n width: 100%;\\n height: 100%;\\n position: relative;\\n transition-property: transform;\\n}\\n.swiper-slide-invisible-blank {\\n visibility: hidden;\\n}\\n/* Auto Height */\\n.swiper-container-autoheight,\\n.swiper-container-autoheight .swiper-slide {\\n height: auto;\\n}\\n.swiper-container-autoheight .swiper-wrapper {\\n align-items: flex-start;\\n transition-property: transform, height;\\n}\\n/* 3D Effects */\\n.swiper-container-3d {\\n perspective: 1200px;\\n}\\n.swiper-container-3d .swiper-wrapper,\\n.swiper-container-3d .swiper-slide,\\n.swiper-container-3d .swiper-slide-shadow-left,\\n.swiper-container-3d .swiper-slide-shadow-right,\\n.swiper-container-3d .swiper-slide-shadow-top,\\n.swiper-container-3d .swiper-slide-shadow-bottom,\\n.swiper-container-3d .swiper-cube-shadow {\\n transform-style: preserve-3d;\\n}\\n.swiper-container-3d .swiper-slide-shadow-left,\\n.swiper-container-3d .swiper-slide-shadow-right,\\n.swiper-container-3d .swiper-slide-shadow-top,\\n.swiper-container-3d .swiper-slide-shadow-bottom {\\n position: absolute;\\n left: 0;\\n top: 0;\\n width: 100%;\\n height: 100%;\\n pointer-events: none;\\n z-index: 10;\\n}\\n.swiper-container-3d .swiper-slide-shadow-left {\\n background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n}\\n.swiper-container-3d .swiper-slide-shadow-right {\\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n}\\n.swiper-container-3d .swiper-slide-shadow-top {\\n background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n}\\n.swiper-container-3d .swiper-slide-shadow-bottom {\\n background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\\n}\\n/* CSS Mode */\\n.swiper-container-css-mode > .swiper-wrapper {\\n overflow: auto;\\n scrollbar-width: none;\\n /* For Firefox */\\n -ms-overflow-style: none;\\n /* For Internet Explorer and Edge */\\n}\\n.swiper-container-css-mode > .swiper-wrapper::-webkit-scrollbar {\\n display: none;\\n}\\n.swiper-container-css-mode > .swiper-wrapper > .swiper-slide {\\n scroll-snap-align: start start;\\n}\\n.swiper-container-horizontal.swiper-container-css-mode > .swiper-wrapper {\\n -ms-scroll-snap-type: x mandatory;\\n scroll-snap-type: x mandatory;\\n}\\n.swiper-container-vertical.swiper-container-css-mode > .swiper-wrapper {\\n -ms-scroll-snap-type: y mandatory;\\n scroll-snap-type: y mandatory;\\n}\\n:root {\\n --swiper-navigation-size: 44px;\\n /*\\n --swiper-navigation-color: var(--swiper-theme-color);\\n */\\n}\\n.swiper-button-prev,\\n.swiper-button-next {\\n position: absolute;\\n top: 50%;\\n width: calc(var(--swiper-navigation-size) / 44 * 27);\\n height: var(--swiper-navigation-size);\\n margin-top: calc(0px - (var(--swiper-navigation-size) / 2));\\n z-index: 10;\\n cursor: pointer;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n color: var(--swiper-navigation-color, var(--swiper-theme-color));\\n}\\n.swiper-button-prev.swiper-button-disabled,\\n.swiper-button-next.swiper-button-disabled {\\n opacity: 0.35;\\n cursor: auto;\\n pointer-events: none;\\n}\\n.swiper-button-prev:after,\\n.swiper-button-next:after {\\n font-family: swiper-icons;\\n font-size: var(--swiper-navigation-size);\\n text-transform: none !important;\\n letter-spacing: 0;\\n text-transform: none;\\n font-variant: initial;\\n line-height: 1;\\n}\\n.swiper-button-prev,\\n.swiper-container-rtl .swiper-button-next {\\n left: 10px;\\n right: auto;\\n}\\n.swiper-button-prev:after,\\n.swiper-container-rtl .swiper-button-next:after {\\n content: 'prev';\\n}\\n.swiper-button-next,\\n.swiper-container-rtl .swiper-button-prev {\\n right: 10px;\\n left: auto;\\n}\\n.swiper-button-next:after,\\n.swiper-container-rtl .swiper-button-prev:after {\\n content: 'next';\\n}\\n.swiper-button-prev.swiper-button-white,\\n.swiper-button-next.swiper-button-white {\\n --swiper-navigation-color: #ffffff;\\n}\\n.swiper-button-prev.swiper-button-black,\\n.swiper-button-next.swiper-button-black {\\n --swiper-navigation-color: #000000;\\n}\\n.swiper-button-lock {\\n display: none;\\n}\\n:root {\\n /*\\n --swiper-pagination-color: var(--swiper-theme-color);\\n */\\n}\\n.swiper-pagination {\\n position: absolute;\\n text-align: center;\\n transition: 300ms opacity;\\n transform: translate3d(0, 0, 0);\\n z-index: 10;\\n}\\n.swiper-pagination.swiper-pagination-hidden {\\n opacity: 0;\\n}\\n/* Common Styles */\\n.swiper-pagination-fraction,\\n.swiper-pagination-custom,\\n.swiper-container-horizontal > .swiper-pagination-bullets {\\n bottom: 10px;\\n left: 0;\\n width: 100%;\\n}\\n/* Bullets */\\n.swiper-pagination-bullets-dynamic {\\n overflow: hidden;\\n font-size: 0;\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\\n transform: scale(0.33);\\n position: relative;\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active {\\n transform: scale(1);\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main {\\n transform: scale(1);\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev {\\n transform: scale(0.66);\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev {\\n transform: scale(0.33);\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next {\\n transform: scale(0.66);\\n}\\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next {\\n transform: scale(0.33);\\n}\\n.swiper-pagination-bullet {\\n width: 8px;\\n height: 8px;\\n display: inline-block;\\n border-radius: 50%;\\n background: #000;\\n opacity: 0.2;\\n}\\nbutton.swiper-pagination-bullet {\\n border: none;\\n margin: 0;\\n padding: 0;\\n box-shadow: none;\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n appearance: none;\\n}\\n.swiper-pagination-clickable .swiper-pagination-bullet {\\n cursor: pointer;\\n}\\n.swiper-pagination-bullet:only-child {\\n display: none !important;\\n}\\n.swiper-pagination-bullet-active {\\n opacity: 1;\\n background: var(--swiper-pagination-color, var(--swiper-theme-color));\\n}\\n.swiper-container-vertical > .swiper-pagination-bullets {\\n right: 10px;\\n top: 50%;\\n transform: translate3d(0px, -50%, 0);\\n}\\n.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet {\\n margin: 6px 0;\\n display: block;\\n}\\n.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {\\n top: 50%;\\n transform: translateY(-50%);\\n width: 8px;\\n}\\n.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\\n display: inline-block;\\n transition: 200ms transform, 200ms top;\\n}\\n.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet {\\n margin: 0 4px;\\n}\\n.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {\\n left: 50%;\\n transform: translateX(-50%);\\n white-space: nowrap;\\n}\\n.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\\n transition: 200ms transform, 200ms left;\\n}\\n.swiper-container-horizontal.swiper-container-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\\n transition: 200ms transform, 200ms right;\\n}\\n/* Progress */\\n.swiper-pagination-progressbar {\\n background: rgba(0, 0, 0, 0.25);\\n position: absolute;\\n}\\n.swiper-pagination-progressbar .swiper-pagination-progressbar-fill {\\n background: var(--swiper-pagination-color, var(--swiper-theme-color));\\n position: absolute;\\n left: 0;\\n top: 0;\\n width: 100%;\\n height: 100%;\\n transform: scale(0);\\n transform-origin: left top;\\n}\\n.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill {\\n transform-origin: right top;\\n}\\n.swiper-container-horizontal > .swiper-pagination-progressbar,\\n.swiper-container-vertical > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite {\\n width: 100%;\\n height: 4px;\\n left: 0;\\n top: 0;\\n}\\n.swiper-container-vertical > .swiper-pagination-progressbar,\\n.swiper-container-horizontal > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite {\\n width: 4px;\\n height: 100%;\\n left: 0;\\n top: 0;\\n}\\n.swiper-pagination-white {\\n --swiper-pagination-color: #ffffff;\\n}\\n.swiper-pagination-black {\\n --swiper-pagination-color: #000000;\\n}\\n.swiper-pagination-lock {\\n display: none;\\n}\\n/* Scrollbar */\\n.swiper-scrollbar {\\n border-radius: 10px;\\n position: relative;\\n -ms-touch-action: none;\\n background: rgba(0, 0, 0, 0.1);\\n}\\n.swiper-container-horizontal > .swiper-scrollbar {\\n position: absolute;\\n left: 1%;\\n bottom: 3px;\\n z-index: 50;\\n height: 5px;\\n width: 98%;\\n}\\n.swiper-container-vertical > .swiper-scrollbar {\\n position: absolute;\\n right: 3px;\\n top: 1%;\\n z-index: 50;\\n width: 5px;\\n height: 98%;\\n}\\n.swiper-scrollbar-drag {\\n height: 100%;\\n width: 100%;\\n position: relative;\\n background: rgba(0, 0, 0, 0.5);\\n border-radius: 10px;\\n left: 0;\\n top: 0;\\n}\\n.swiper-scrollbar-cursor-drag {\\n cursor: move;\\n}\\n.swiper-scrollbar-lock {\\n display: none;\\n}\\n.swiper-zoom-container {\\n width: 100%;\\n height: 100%;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n text-align: center;\\n}\\n.swiper-zoom-container > img,\\n.swiper-zoom-container > svg,\\n.swiper-zoom-container > canvas {\\n max-width: 100%;\\n max-height: 100%;\\n -o-object-fit: contain;\\n object-fit: contain;\\n}\\n.swiper-slide-zoomed {\\n cursor: move;\\n}\\n/* Preloader */\\n:root {\\n /*\\n --swiper-preloader-color: var(--swiper-theme-color);\\n */\\n}\\n.swiper-lazy-preloader {\\n width: 42px;\\n height: 42px;\\n position: absolute;\\n left: 50%;\\n top: 50%;\\n margin-left: -21px;\\n margin-top: -21px;\\n z-index: 10;\\n transform-origin: 50%;\\n -webkit-animation: swiper-preloader-spin 1s infinite linear;\\n animation: swiper-preloader-spin 1s infinite linear;\\n box-sizing: border-box;\\n border: 4px solid var(--swiper-preloader-color, var(--swiper-theme-color));\\n border-radius: 50%;\\n border-top-color: transparent;\\n}\\n.swiper-lazy-preloader-white {\\n --swiper-preloader-color: #fff;\\n}\\n.swiper-lazy-preloader-black {\\n --swiper-preloader-color: #000;\\n}\\n@-webkit-keyframes swiper-preloader-spin {\\n 100% {\\n transform: rotate(360deg);\\n }\\n}\\n@keyframes swiper-preloader-spin {\\n 100% {\\n transform: rotate(360deg);\\n }\\n}\\n/* a11y */\\n.swiper-container .swiper-notification {\\n position: absolute;\\n left: 0;\\n top: 0;\\n pointer-events: none;\\n opacity: 0;\\n z-index: -1000;\\n}\\n.swiper-container-fade.swiper-container-free-mode .swiper-slide {\\n transition-timing-function: ease-out;\\n}\\n.swiper-container-fade .swiper-slide {\\n pointer-events: none;\\n transition-property: opacity;\\n}\\n.swiper-container-fade .swiper-slide .swiper-slide {\\n pointer-events: none;\\n}\\n.swiper-container-fade .swiper-slide-active,\\n.swiper-container-fade .swiper-slide-active .swiper-slide-active {\\n pointer-events: auto;\\n}\\n.swiper-container-cube {\\n overflow: visible;\\n}\\n.swiper-container-cube .swiper-slide {\\n pointer-events: none;\\n -webkit-backface-visibility: hidden;\\n backface-visibility: hidden;\\n z-index: 1;\\n visibility: hidden;\\n transform-origin: 0 0;\\n width: 100%;\\n height: 100%;\\n}\\n.swiper-container-cube .swiper-slide .swiper-slide {\\n pointer-events: none;\\n}\\n.swiper-container-cube.swiper-container-rtl .swiper-slide {\\n transform-origin: 100% 0;\\n}\\n.swiper-container-cube .swiper-slide-active,\\n.swiper-container-cube .swiper-slide-active .swiper-slide-active {\\n pointer-events: auto;\\n}\\n.swiper-container-cube .swiper-slide-active,\\n.swiper-container-cube .swiper-slide-next,\\n.swiper-container-cube .swiper-slide-prev,\\n.swiper-container-cube .swiper-slide-next + .swiper-slide {\\n pointer-events: auto;\\n visibility: visible;\\n}\\n.swiper-container-cube .swiper-slide-shadow-top,\\n.swiper-container-cube .swiper-slide-shadow-bottom,\\n.swiper-container-cube .swiper-slide-shadow-left,\\n.swiper-container-cube .swiper-slide-shadow-right {\\n z-index: 0;\\n -webkit-backface-visibility: hidden;\\n backface-visibility: hidden;\\n}\\n.swiper-container-cube .swiper-cube-shadow {\\n position: absolute;\\n left: 0;\\n bottom: 0px;\\n width: 100%;\\n height: 100%;\\n opacity: 0.6;\\n z-index: 0;\\n}\\n.swiper-container-cube .swiper-cube-shadow:before {\\n content: '';\\n background: #000;\\n position: absolute;\\n left: 0;\\n top: 0;\\n bottom: 0;\\n right: 0;\\n filter: blur(50px);\\n}\\n.swiper-container-flip {\\n overflow: visible;\\n}\\n.swiper-container-flip .swiper-slide {\\n pointer-events: none;\\n -webkit-backface-visibility: hidden;\\n backface-visibility: hidden;\\n z-index: 1;\\n}\\n.swiper-container-flip .swiper-slide .swiper-slide {\\n pointer-events: none;\\n}\\n.swiper-container-flip .swiper-slide-active,\\n.swiper-container-flip .swiper-slide-active .swiper-slide-active {\\n pointer-events: auto;\\n}\\n.swiper-container-flip .swiper-slide-shadow-top,\\n.swiper-container-flip .swiper-slide-shadow-bottom,\\n.swiper-container-flip .swiper-slide-shadow-left,\\n.swiper-container-flip .swiper-slide-shadow-right {\\n z-index: 0;\\n -webkit-backface-visibility: hidden;\\n backface-visibility: hidden;\\n}\\n\", \"\"]);\n\n// exports\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3dpcGVyL3N3aXBlci1idW5kbGUuY3NzP2VjYjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkJBQTJCLG1CQUFPLENBQUMsZ0ZBQStCO0FBQ2xFOzs7QUFHQTtBQUNBLGNBQWMsUUFBUywwUkFBMFIsZ0NBQWdDLHlDQUF5QyxjQUFjLDBwRUFBMHBFLHFCQUFxQix1QkFBdUIsR0FBRyxTQUFTLGtDQUFrQyxHQUFHLHFCQUFxQixzQkFBc0IsdUJBQXVCLHVCQUF1QixxQkFBcUIscUJBQXFCLGVBQWUsaURBQWlELEdBQUcsZ0RBQWdELDJCQUEyQixHQUFHLG1CQUFtQix1QkFBdUIsZ0JBQWdCLGlCQUFpQixlQUFlLGtCQUFrQixtQ0FBbUMsNEJBQTRCLEdBQUcsNkRBQTZELHNDQUFzQyxHQUFHLGdEQUFnRCxvQkFBb0IsR0FBRyx1REFBdUQsb0JBQW9CLDJCQUEyQixHQUFHLGlEQUFpRCx5Q0FBeUMsbUJBQW1CLEdBQUcsb0NBQW9DLHdCQUF3QixHQUFHLDhEQUE4RCx3QkFBd0IsR0FBRyxpQkFBaUIsbUJBQW1CLGdCQUFnQixpQkFBaUIsdUJBQXVCLG1DQUFtQyxHQUFHLGlDQUFpQyx1QkFBdUIsR0FBRyxnR0FBZ0csaUJBQWlCLEdBQUcsZ0RBQWdELDRCQUE0QiwyQ0FBMkMsR0FBRywwQ0FBMEMsd0JBQXdCLEdBQUcsOFRBQThULGlDQUFpQyxHQUFHLHVNQUF1TSx1QkFBdUIsWUFBWSxXQUFXLGdCQUFnQixpQkFBaUIseUJBQXlCLGdCQUFnQixHQUFHLGtEQUFrRCxxRkFBcUYsR0FBRyxtREFBbUQsc0ZBQXNGLEdBQUcsaURBQWlELG9GQUFvRixHQUFHLG9EQUFvRCx1RkFBdUYsR0FBRyxnRUFBZ0UsbUJBQW1CLDBCQUEwQixrREFBa0QsMkNBQTJDLG1FQUFtRSxrQkFBa0IsR0FBRyxnRUFBZ0UsbUNBQW1DLEdBQUcsNEVBQTRFLHNDQUFzQyxzQ0FBc0MsR0FBRywwRUFBMEUsc0NBQXNDLHNDQUFzQyxHQUFHLFNBQVMsbUNBQW1DLCtEQUErRCxTQUFTLDZDQUE2Qyx1QkFBdUIsYUFBYSx5REFBeUQsMENBQTBDLGdFQUFnRSxnQkFBZ0Isb0JBQW9CLGtCQUFrQix3QkFBd0IsNEJBQTRCLHFFQUFxRSxHQUFHLDJGQUEyRixrQkFBa0IsaUJBQWlCLHlCQUF5QixHQUFHLHlEQUF5RCw4QkFBOEIsNkNBQTZDLG9DQUFvQyxzQkFBc0IseUJBQXlCLDBCQUEwQixtQkFBbUIsR0FBRyxtRUFBbUUsZUFBZSxnQkFBZ0IsR0FBRywrRUFBK0Usb0JBQW9CLEdBQUcsbUVBQW1FLGdCQUFnQixlQUFlLEdBQUcsK0VBQStFLG9CQUFvQixHQUFHLHFGQUFxRix1Q0FBdUMsR0FBRyxxRkFBcUYsdUNBQXVDLEdBQUcsdUJBQXVCLGtCQUFrQixHQUFHLFNBQVMsK0RBQStELFNBQVMsc0JBQXNCLHVCQUF1Qix1QkFBdUIsOEJBQThCLG9DQUFvQyxnQkFBZ0IsR0FBRywrQ0FBK0MsZUFBZSxHQUFHLDRJQUE0SSxpQkFBaUIsWUFBWSxnQkFBZ0IsR0FBRyxxREFBcUQscUJBQXFCLGlCQUFpQixHQUFHLGdFQUFnRSwyQkFBMkIsdUJBQXVCLEdBQUcsdUVBQXVFLHdCQUF3QixHQUFHLDRFQUE0RSx3QkFBd0IsR0FBRyw0RUFBNEUsMkJBQTJCLEdBQUcsaUZBQWlGLDJCQUEyQixHQUFHLDRFQUE0RSwyQkFBMkIsR0FBRyxpRkFBaUYsMkJBQTJCLEdBQUcsNkJBQTZCLGVBQWUsZ0JBQWdCLDBCQUEwQix1QkFBdUIscUJBQXFCLGlCQUFpQixHQUFHLG1DQUFtQyxpQkFBaUIsY0FBYyxlQUFlLHFCQUFxQiw2QkFBNkIsa0NBQWtDLDBCQUEwQixHQUFHLDBEQUEwRCxvQkFBb0IsR0FBRyx3Q0FBd0MsNkJBQTZCLEdBQUcsb0NBQW9DLGVBQWUsMEVBQTBFLEdBQUcsMkRBQTJELGdCQUFnQixhQUFhLHlDQUF5QyxHQUFHLHFGQUFxRixrQkFBa0IsbUJBQW1CLEdBQUcsNkZBQTZGLGFBQWEsZ0NBQWdDLGVBQWUsR0FBRyx1SEFBdUgsMEJBQTBCLDJDQUEyQyxHQUFHLHVGQUF1RixrQkFBa0IsR0FBRywrRkFBK0YsY0FBYyxnQ0FBZ0Msd0JBQXdCLEdBQUcseUhBQXlILDRDQUE0QyxHQUFHLG9IQUFvSCw2Q0FBNkMsR0FBRyxrREFBa0Qsb0NBQW9DLHVCQUF1QixHQUFHLHNFQUFzRSwwRUFBMEUsdUJBQXVCLFlBQVksV0FBVyxnQkFBZ0IsaUJBQWlCLHdCQUF3QiwrQkFBK0IsR0FBRyw0RkFBNEYsZ0NBQWdDLEdBQUcsc0tBQXNLLGdCQUFnQixnQkFBZ0IsWUFBWSxXQUFXLEdBQUcsc0tBQXNLLGVBQWUsaUJBQWlCLFlBQVksV0FBVyxHQUFHLDRCQUE0Qix1Q0FBdUMsR0FBRyw0QkFBNEIsdUNBQXVDLEdBQUcsMkJBQTJCLGtCQUFrQixHQUFHLHNDQUFzQyx3QkFBd0IsdUJBQXVCLDJCQUEyQixtQ0FBbUMsR0FBRyxvREFBb0QsdUJBQXVCLGFBQWEsZ0JBQWdCLGdCQUFnQixnQkFBZ0IsZUFBZSxHQUFHLGtEQUFrRCx1QkFBdUIsZUFBZSxZQUFZLGdCQUFnQixlQUFlLGdCQUFnQixHQUFHLDBCQUEwQixpQkFBaUIsZ0JBQWdCLHVCQUF1QixtQ0FBbUMsd0JBQXdCLFlBQVksV0FBVyxHQUFHLGlDQUFpQyxpQkFBaUIsR0FBRywwQkFBMEIsa0JBQWtCLEdBQUcsMEJBQTBCLGdCQUFnQixpQkFBaUIsa0JBQWtCLDRCQUE0Qix3QkFBd0IsdUJBQXVCLEdBQUcsaUdBQWlHLG9CQUFvQixxQkFBcUIsMkJBQTJCLDJCQUEyQixHQUFHLHdCQUF3QixpQkFBaUIsR0FBRywwQkFBMEIsOERBQThELFNBQVMsMEJBQTBCLGdCQUFnQixpQkFBaUIsdUJBQXVCLGNBQWMsYUFBYSx1QkFBdUIsc0JBQXNCLGdCQUFnQiwwQkFBMEIsZ0VBQWdFLGdFQUFnRSwyQkFBMkIsK0VBQStFLHVCQUF1QixrQ0FBa0MsR0FBRyxnQ0FBZ0MsbUNBQW1DLEdBQUcsZ0NBQWdDLG1DQUFtQyxHQUFHLDRDQUE0QyxVQUFVLGdDQUFnQyxLQUFLLEdBQUcsb0NBQW9DLFVBQVUsZ0NBQWdDLEtBQUssR0FBRyxzREFBc0QsdUJBQXVCLFlBQVksV0FBVyx5QkFBeUIsZUFBZSxtQkFBbUIsR0FBRyxtRUFBbUUseUNBQXlDLEdBQUcsd0NBQXdDLHlCQUF5QixpQ0FBaUMsR0FBRyxzREFBc0QseUJBQXlCLEdBQUcsa0hBQWtILHlCQUF5QixHQUFHLDBCQUEwQixzQkFBc0IsR0FBRyx3Q0FBd0MseUJBQXlCLHdDQUF3Qyx3Q0FBd0MsZUFBZSx1QkFBdUIsMEJBQTBCLGdCQUFnQixpQkFBaUIsR0FBRyxzREFBc0QseUJBQXlCLEdBQUcsNkRBQTZELDZCQUE2QixHQUFHLGtIQUFrSCx5QkFBeUIsR0FBRyxtTUFBbU0seUJBQXlCLHdCQUF3QixHQUFHLCtNQUErTSxlQUFlLHdDQUF3Qyx3Q0FBd0MsR0FBRyw4Q0FBOEMsdUJBQXVCLFlBQVksZ0JBQWdCLGdCQUFnQixpQkFBaUIsaUJBQWlCLGVBQWUsR0FBRyxxREFBcUQsZ0JBQWdCLHFCQUFxQix1QkFBdUIsWUFBWSxXQUFXLGNBQWMsYUFBYSx1QkFBdUIsR0FBRywwQkFBMEIsc0JBQXNCLEdBQUcsd0NBQXdDLHlCQUF5Qix3Q0FBd0Msd0NBQXdDLGVBQWUsR0FBRyxzREFBc0QseUJBQXlCLEdBQUcsa0hBQWtILHlCQUF5QixHQUFHLCtNQUErTSxlQUFlLHdDQUF3Qyx3Q0FBd0MsR0FBRzs7QUFFOWtoQiIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2luZGV4LmpzPyEuL25vZGVfbW9kdWxlcy9wb3N0Y3NzLWxvYWRlci9zcmMvaW5kZXguanM/IS4vbm9kZV9tb2R1bGVzL3N3aXBlci9zd2lwZXItYnVuZGxlLmNzcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuLi9jc3MtbG9hZGVyL2xpYi9jc3MtYmFzZS5qc1wiKShmYWxzZSk7XG4vLyBpbXBvcnRzXG5cblxuLy8gbW9kdWxlXG5leHBvcnRzLnB1c2goW21vZHVsZS5pZCwgXCIvKipcXG4gKiBTd2lwZXIgNi44LjRcXG4gKiBNb3N0IG1vZGVybiBtb2JpbGUgdG91Y2ggc2xpZGVyIGFuZCBmcmFtZXdvcmsgd2l0aCBoYXJkd2FyZSBhY2NlbGVyYXRlZCB0cmFuc2l0aW9uc1xcbiAqIGh0dHBzOi8vc3dpcGVyanMuY29tXFxuICpcXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDIxIFZsYWRpbWlyIEtoYXJsYW1waWRpXFxuICpcXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2VcXG4gKlxcbiAqIFJlbGVhc2VkIG9uOiBBdWd1c3QgMjMsIDIwMjFcXG4gKi9cXG5cXG5AZm9udC1mYWNlIHtcXG4gIGZvbnQtZmFtaWx5OiAnc3dpcGVyLWljb25zJztcXG4gIHNyYzogdXJsKCdkYXRhOmFwcGxpY2F0aW9uL2ZvbnQtd29mZjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCwgZDA5R1JnQUJBQUFBQUFaZ0FCQUFBQUFBREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJHUmxSTkFBQUdSQUFBQUJvQUFBQWNpNnFIa1VkRVJVWUFBQVdnQUFBQUl3QUFBQ1FBWUFCWFIxQlBVd0FBQmhRQUFBQXVBQUFBTnVBWTcreEhVMVZDQUFBRnhBQUFBRkFBQUFCbTJmUGN6VTlUTHpJQUFBSGNBQUFBU2dBQUFHQlA5VjVSWTIxaGNBQUFBa1FBQUFDSUFBQUJZdDZGMGNCamRuUWdBQUFDekFBQUFBUUFBQUFFQUJFQlJHZGhjM0FBQUFXWUFBQUFDQUFBQUFqLy93QURaMng1WmdBQUF5d0FBQURNQUFBRDJNSHRyeVZvWldGa0FBQUJiQUFBQURBQUFBQTJFMitlb1dob1pXRUFBQUdjQUFBQUh3QUFBQ1FDOWdEemFHMTBlQUFBQWlnQUFBQVpBQUFBcmdKa0FCRnNiMk5oQUFBQzBBQUFBRm9BQUFCYUZRQVVHRzFoZUhBQUFBRzhBQUFBSHdBQUFDQUFjQUJBYm1GdFpRQUFBL2dBQUFFNUFBQUNYdkZkQndsd2IzTjBBQUFGTkFBQUFHSUFBQUNFNXM3NGhYamFZMkJrWUdBQVlwZjVIdS9qK1cyK01uQXpNWURBemFYNlFqRDYvNC8vQnhqNUdBOEF1UndNWUdrQVB5d0wxM2phWTJCa1lHQTg4UDhBZ3g0aisvOGZRRFlmQTFBRUJXZ0RBSUIyQk9vQWVOcGpZR1JnWU5CaDRHZGdZZ0FCRU1uSUFCSnpZTkFEQ1FBQUNXZ0FzUUI0Mm1OZ1lmekNPSUdCbFlHQjBZY3hqWUdCd1IxS2YyV1FaR2hoWUdCaVlHVm1nQUZHQmlRUWtPYWF3dERBb01CUXhYamcvd0VHUGNZRERBNHdOVUEyQ0Nnd3NBQUFPNEVMNmdBQWVOcGoyTTBneUFBQ3F4Z0dOV0JrWjJENC93TUEreGtEZGdBQUFIamFZMkJnWUdhQVlCa0dSZ1lRaUFIeUdNRjhGZ1lISU0zRHdNSEFCR1FyTU9neVdETEVNMVQ5L3c4VUJmRU1nTHpFLy8vL1AvNS8vZi9WL3h2K3I0ZWFBQWVNYkF4d0lVWW1JTUhFZ0tZQVlqVWNzREF3c0xLeGMzQnljZlB3OGpFUUEvZ1pCQVNGaEVWRXhjUWxKS1drWldUbDVCVVVsWlJWVk5YVU5UUVpCZ01BQU1SK0UrZ0FFUUZFQUFBQUtnQXFBQ29BTkFBK0FFZ0FVZ0JjQUdZQWNBQjZBSVFBamdDWUFLSUFyQUMyQU1BQXlnRFVBTjRBNkFEeUFQd0JCZ0VRQVJvQkpBRXVBVGdCUWdGTUFWWUJZQUZxQVhRQmZnR0lBWklCbkFHbUFiSUJ6Z0hzQUFCNDJ1Mk5NUTZDVUF5R1c1Njh4OUFuZVlZZ200TUpiaEtGYUV4SU9BVlg4QXBld1N0NEJpYzRBZmVBaWQzVk9CaXhEeGZQWUV6YTVPK1hmaTA0WUFEZ2dpVUlVTEN1RUpLOFZoTzRiU3ZwZG5rdEhJNVFDWXRkaTJzbDhablhhSGxxVXJOS3pkS2NUOGNqbHErcndaU3ZJVmN6TmllenNmblAvdXpubWZQRkJOT0RNMks3TVRRNDVZRUFacUdQODFBbUdHY0YzaVBxT29wMHIxU1BUYVRiVmtmVWU0SFhqOTd3WUUreU53V1l4d1d1NHYxdWdXSGdvM1MxWGRaRVZxV003RVQwY2ZuTEd4V2ZrZ1I0Mm8yUHZXckRNQlNGai9JSExhRjB6S2pSZ2RpVk13U2NOUkFvV1VvSDc4WTJpY0IveUlZMDlBbjZBSDJCZHUvVUIreXhvcFlzaFFpRXZudnUwZFVSZ0R0OFFlQzhQRHc3RnBqaTNmRUE0ei9QRUo2WU9CNWhLaDRkajNFdlhoeFBxSC9TS1VZM3JKN3NyWjRGWm5oMVBNQXRQaHdQNmZsMlBNSk1QRGdlUTRyWThZVDZHemFvMGVBRUE0MDlEdWdnbVRuRm5PY1NDaUVpTE1neENpVEk2Q3E1RFpVZDNRbXAxMHZPMExhTFRkMmNqTjRmT3VtbGM3bFVZYlNRY1pGa3V0Ukc3ZzZKS1pLeTBSbWRMWTY4MENEbkVKK1VNa3BGRmUxUk43bnhkVnBYckM0YVR0bmF1ck9uWWVyY1pnMllWbUxOL2QvZ2N6ZkVpbXJFL2ZzL2JPdXEyOVptbjh0bG9PUmFYZ1pnR2E3OHlPOS9jblhtMkJwYUd2cTI1RHY5UzRFOSs1U0ljOVBxdXBKS2hZRlNTbDQ3K1FjcjFtWU5BQUFBZU5wdHcwY0t3a0FBQU1EWkpBOFE3T1VKdmtMc1BmWjZ6RlZFUlB5OHFIaDJZRVIrM2kvQlA4M3ZJQkxMeVNzb0tpbXJxS3FwYTJocDYranE2UnNZR2htYm1KcVpTeTBzcmF4dGJPM3NIUnlkbkVNVTR1UjZ5eDdKSlh2ZVA3V3JEeWNBQUFBQUFBSC8vd0FDZU5wallHUmdZT0FCWWhrZ1pnSkNaZ1pOQmtZR0xRWnRJSnNGTE1ZQUFBdzNBTGdBZU5vbGl6RUtnREFRQkNjaFJiQzJzRkVSMFlENnFWUWlCQ3YvSDllekdJNlo1WEJBdzhDQksvbTVpUVFWYXVWYlhMbk9yTVp2Mm9MZEtGYThQanVydTJoSnpHYWJtT1NMek5NenZ1dHBCM040Mm1OZ1pHQmc0R0tRWXpCaFlNeEpMTWxqNEdCZ0FZb3cvUC9QQUpKaExNNnNTb1dLZldDQUF3REFqZ2JSQUFCNDJtTmdZR0JrQUlJYkNabzVJUHJtVW4waEdBMEFPOEVGVFFBQScpIGZvcm1hdCgnd29mZicpO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG59XFxuOnJvb3Qge1xcbiAgLS1zd2lwZXItdGhlbWUtY29sb3I6ICMwMDdhZmY7XFxufVxcbi5zd2lwZXItY29udGFpbmVyIHtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbiAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGxpc3Qtc3R5bGU6IG5vbmU7XFxuICBwYWRkaW5nOiAwO1xcbiAgLyogRml4IG9mIFdlYmtpdCBmbGlja2VyaW5nICovXFxuICB6LWluZGV4OiAxO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci12ZXJ0aWNhbCA+IC5zd2lwZXItd3JhcHBlciB7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbn1cXG4uc3dpcGVyLXdyYXBwZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB6LWluZGV4OiAxO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybTtcXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1hbmRyb2lkIC5zd2lwZXItc2xpZGUsXFxuLnN3aXBlci13cmFwcGVyIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMHB4LCAwLCAwKTtcXG59XFxuLnN3aXBlci1jb250YWluZXItbXVsdGlyb3cgPiAuc3dpcGVyLXdyYXBwZXIge1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1tdWx0aXJvdy1jb2x1bW4gPiAuc3dpcGVyLXdyYXBwZXIge1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG59XFxuLnN3aXBlci1jb250YWluZXItZnJlZS1tb2RlID4gLnN3aXBlci13cmFwcGVyIHtcXG4gIHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBlYXNlLW91dDtcXG4gIG1hcmdpbjogMCBhdXRvO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1wb2ludGVyLWV2ZW50cyB7XFxuICB0b3VjaC1hY3Rpb246IHBhbi15O1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1wb2ludGVyLWV2ZW50cy5zd2lwZXItY29udGFpbmVyLXZlcnRpY2FsIHtcXG4gIHRvdWNoLWFjdGlvbjogcGFuLXg7XFxufVxcbi5zd2lwZXItc2xpZGUge1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHRyYW5zZm9ybTtcXG59XFxuLnN3aXBlci1zbGlkZS1pbnZpc2libGUtYmxhbmsge1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbn1cXG4vKiBBdXRvIEhlaWdodCAqL1xcbi5zd2lwZXItY29udGFpbmVyLWF1dG9oZWlnaHQsXFxuLnN3aXBlci1jb250YWluZXItYXV0b2hlaWdodCAuc3dpcGVyLXNsaWRlIHtcXG4gIGhlaWdodDogYXV0bztcXG59XFxuLnN3aXBlci1jb250YWluZXItYXV0b2hlaWdodCAuc3dpcGVyLXdyYXBwZXIge1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICB0cmFuc2l0aW9uLXByb3BlcnR5OiB0cmFuc2Zvcm0sIGhlaWdodDtcXG59XFxuLyogM0QgRWZmZWN0cyAqL1xcbi5zd2lwZXItY29udGFpbmVyLTNkIHtcXG4gIHBlcnNwZWN0aXZlOiAxMjAwcHg7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItd3JhcHBlcixcXG4uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLFxcbi5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQsXFxuLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQsXFxuLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wLFxcbi5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbSxcXG4uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLWN1YmUtc2hhZG93IHtcXG4gIHRyYW5zZm9ybS1zdHlsZTogcHJlc2VydmUtM2Q7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUtc2hhZG93LWxlZnQsXFxuLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQsXFxuLnN3aXBlci1jb250YWluZXItM2QgLnN3aXBlci1zbGlkZS1zaGFkb3ctdG9wLFxcbi5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUtc2hhZG93LWJvdHRvbSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIHotaW5kZXg6IDEwO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDAsIDAsIDAsIDAuNSksIHJnYmEoMCwgMCwgMCwgMCkpO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1yaWdodCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMCwgMCwgMCwgMC41KSwgcmdiYSgwLCAwLCAwLCAwKSk7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLTNkIC5zd2lwZXItc2xpZGUtc2hhZG93LXRvcCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gdG9wLCByZ2JhKDAsIDAsIDAsIDAuNSksIHJnYmEoMCwgMCwgMCwgMCkpO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci0zZCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgwLCAwLCAwLCAwLjUpLCByZ2JhKDAsIDAsIDAsIDApKTtcXG59XFxuLyogQ1NTIE1vZGUgKi9cXG4uc3dpcGVyLWNvbnRhaW5lci1jc3MtbW9kZSA+IC5zd2lwZXItd3JhcHBlciB7XFxuICBvdmVyZmxvdzogYXV0bztcXG4gIHNjcm9sbGJhci13aWR0aDogbm9uZTtcXG4gIC8qIEZvciBGaXJlZm94ICovXFxuICAtbXMtb3ZlcmZsb3ctc3R5bGU6IG5vbmU7XFxuICAvKiBGb3IgSW50ZXJuZXQgRXhwbG9yZXIgYW5kIEVkZ2UgKi9cXG59XFxuLnN3aXBlci1jb250YWluZXItY3NzLW1vZGUgPiAuc3dpcGVyLXdyYXBwZXI6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWNzcy1tb2RlID4gLnN3aXBlci13cmFwcGVyID4gLnN3aXBlci1zbGlkZSB7XFxuICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQgc3RhcnQ7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWhvcml6b250YWwuc3dpcGVyLWNvbnRhaW5lci1jc3MtbW9kZSA+IC5zd2lwZXItd3JhcHBlciB7XFxuICAtbXMtc2Nyb2xsLXNuYXAtdHlwZTogeCBtYW5kYXRvcnk7XFxuICAgICAgc2Nyb2xsLXNuYXAtdHlwZTogeCBtYW5kYXRvcnk7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLXZlcnRpY2FsLnN3aXBlci1jb250YWluZXItY3NzLW1vZGUgPiAuc3dpcGVyLXdyYXBwZXIge1xcbiAgLW1zLXNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xcbiAgICAgIHNjcm9sbC1zbmFwLXR5cGU6IHkgbWFuZGF0b3J5O1xcbn1cXG46cm9vdCB7XFxuICAtLXN3aXBlci1uYXZpZ2F0aW9uLXNpemU6IDQ0cHg7XFxuICAvKlxcbiAgLS1zd2lwZXItbmF2aWdhdGlvbi1jb2xvcjogdmFyKC0tc3dpcGVyLXRoZW1lLWNvbG9yKTtcXG4gICovXFxufVxcbi5zd2lwZXItYnV0dG9uLXByZXYsXFxuLnN3aXBlci1idXR0b24tbmV4dCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDUwJTtcXG4gIHdpZHRoOiBjYWxjKHZhcigtLXN3aXBlci1uYXZpZ2F0aW9uLXNpemUpIC8gNDQgKiAyNyk7XFxuICBoZWlnaHQ6IHZhcigtLXN3aXBlci1uYXZpZ2F0aW9uLXNpemUpO1xcbiAgbWFyZ2luLXRvcDogY2FsYygwcHggLSAodmFyKC0tc3dpcGVyLW5hdmlnYXRpb24tc2l6ZSkgLyAyKSk7XFxuICB6LWluZGV4OiAxMDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBjb2xvcjogdmFyKC0tc3dpcGVyLW5hdmlnYXRpb24tY29sb3IsIHZhcigtLXN3aXBlci10aGVtZS1jb2xvcikpO1xcbn1cXG4uc3dpcGVyLWJ1dHRvbi1wcmV2LnN3aXBlci1idXR0b24tZGlzYWJsZWQsXFxuLnN3aXBlci1idXR0b24tbmV4dC5zd2lwZXItYnV0dG9uLWRpc2FibGVkIHtcXG4gIG9wYWNpdHk6IDAuMzU7XFxuICBjdXJzb3I6IGF1dG87XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLnN3aXBlci1idXR0b24tcHJldjphZnRlcixcXG4uc3dpcGVyLWJ1dHRvbi1uZXh0OmFmdGVyIHtcXG4gIGZvbnQtZmFtaWx5OiBzd2lwZXItaWNvbnM7XFxuICBmb250LXNpemU6IHZhcigtLXN3aXBlci1uYXZpZ2F0aW9uLXNpemUpO1xcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcXG4gIGxldHRlci1zcGFjaW5nOiAwO1xcbiAgdGV4dC10cmFuc2Zvcm06IG5vbmU7XFxuICBmb250LXZhcmlhbnQ6IGluaXRpYWw7XFxuICBsaW5lLWhlaWdodDogMTtcXG59XFxuLnN3aXBlci1idXR0b24tcHJldixcXG4uc3dpcGVyLWNvbnRhaW5lci1ydGwgLnN3aXBlci1idXR0b24tbmV4dCB7XFxuICBsZWZ0OiAxMHB4O1xcbiAgcmlnaHQ6IGF1dG87XFxufVxcbi5zd2lwZXItYnV0dG9uLXByZXY6YWZ0ZXIsXFxuLnN3aXBlci1jb250YWluZXItcnRsIC5zd2lwZXItYnV0dG9uLW5leHQ6YWZ0ZXIge1xcbiAgY29udGVudDogJ3ByZXYnO1xcbn1cXG4uc3dpcGVyLWJ1dHRvbi1uZXh0LFxcbi5zd2lwZXItY29udGFpbmVyLXJ0bCAuc3dpcGVyLWJ1dHRvbi1wcmV2IHtcXG4gIHJpZ2h0OiAxMHB4O1xcbiAgbGVmdDogYXV0bztcXG59XFxuLnN3aXBlci1idXR0b24tbmV4dDphZnRlcixcXG4uc3dpcGVyLWNvbnRhaW5lci1ydGwgLnN3aXBlci1idXR0b24tcHJldjphZnRlciB7XFxuICBjb250ZW50OiAnbmV4dCc7XFxufVxcbi5zd2lwZXItYnV0dG9uLXByZXYuc3dpcGVyLWJ1dHRvbi13aGl0ZSxcXG4uc3dpcGVyLWJ1dHRvbi1uZXh0LnN3aXBlci1idXR0b24td2hpdGUge1xcbiAgLS1zd2lwZXItbmF2aWdhdGlvbi1jb2xvcjogI2ZmZmZmZjtcXG59XFxuLnN3aXBlci1idXR0b24tcHJldi5zd2lwZXItYnV0dG9uLWJsYWNrLFxcbi5zd2lwZXItYnV0dG9uLW5leHQuc3dpcGVyLWJ1dHRvbi1ibGFjayB7XFxuICAtLXN3aXBlci1uYXZpZ2F0aW9uLWNvbG9yOiAjMDAwMDAwO1xcbn1cXG4uc3dpcGVyLWJ1dHRvbi1sb2NrIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbjpyb290IHtcXG4gIC8qXFxuICAtLXN3aXBlci1wYWdpbmF0aW9uLWNvbG9yOiB2YXIoLS1zd2lwZXItdGhlbWUtY29sb3IpO1xcbiAgKi9cXG59XFxuLnN3aXBlci1wYWdpbmF0aW9uIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHRyYW5zaXRpb246IDMwMG1zIG9wYWNpdHk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xcbiAgei1pbmRleDogMTA7XFxufVxcbi5zd2lwZXItcGFnaW5hdGlvbi5zd2lwZXItcGFnaW5hdGlvbi1oaWRkZW4ge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuLyogQ29tbW9uIFN0eWxlcyAqL1xcbi5zd2lwZXItcGFnaW5hdGlvbi1mcmFjdGlvbixcXG4uc3dpcGVyLXBhZ2luYXRpb24tY3VzdG9tLFxcbi5zd2lwZXItY29udGFpbmVyLWhvcml6b250YWwgPiAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cyB7XFxuICBib3R0b206IDEwcHg7XFxuICBsZWZ0OiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcbi8qIEJ1bGxldHMgKi9cXG4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIHtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBmb250LXNpemU6IDA7XFxufVxcbi5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDAuMzMpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlIHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMSk7XFxufVxcbi5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldC1hY3RpdmUtbWFpbiB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQtYWN0aXZlLXByZXYge1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjY2KTtcXG59XFxuLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZS1wcmV2LXByZXYge1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjMzKTtcXG59XFxuLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZS1uZXh0IHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMC42Nik7XFxufVxcbi5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldC1hY3RpdmUtbmV4dC1uZXh0IHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMC4zMyk7XFxufVxcbi5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQge1xcbiAgd2lkdGg6IDhweDtcXG4gIGhlaWdodDogOHB4O1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYmFja2dyb3VuZDogIzAwMDtcXG4gIG9wYWNpdHk6IDAuMjtcXG59XFxuYnV0dG9uLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gICAgICAgICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xcbiAgICAgICBhcHBlYXJhbmNlOiBub25lO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tY2xpY2thYmxlIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0Om9ubHktY2hpbGQge1xcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0LWFjdGl2ZSB7XFxuICBvcGFjaXR5OiAxO1xcbiAgYmFja2dyb3VuZDogdmFyKC0tc3dpcGVyLXBhZ2luYXRpb24tY29sb3IsIHZhcigtLXN3aXBlci10aGVtZS1jb2xvcikpO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci12ZXJ0aWNhbCA+IC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzIHtcXG4gIHJpZ2h0OiAxMHB4O1xcbiAgdG9wOiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDBweCwgLTUwJSwgMCk7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLXZlcnRpY2FsID4gLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCB7XFxuICBtYXJnaW46IDZweCAwO1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLXZlcnRpY2FsID4gLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIHtcXG4gIHRvcDogNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xcbiAgd2lkdGg6IDhweDtcXG59XFxuLnN3aXBlci1jb250YWluZXItdmVydGljYWwgPiAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLWR5bmFtaWMgLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB0cmFuc2l0aW9uOiAyMDBtcyB0cmFuc2Zvcm0sIDIwMG1zIHRvcDtcXG59XFxuLnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbCA+IC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQge1xcbiAgbWFyZ2luOiAwIDRweDtcXG59XFxuLnN3aXBlci1jb250YWluZXItaG9yaXpvbnRhbCA+IC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXRzLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyB7XFxuICBsZWZ0OiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1ob3Jpem9udGFsID4gLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0cy1keW5hbWljIC5zd2lwZXItcGFnaW5hdGlvbi1idWxsZXQge1xcbiAgdHJhbnNpdGlvbjogMjAwbXMgdHJhbnNmb3JtLCAyMDBtcyBsZWZ0O1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1ob3Jpem9udGFsLnN3aXBlci1jb250YWluZXItcnRsID4gLnN3aXBlci1wYWdpbmF0aW9uLWJ1bGxldHMtZHluYW1pYyAuc3dpcGVyLXBhZ2luYXRpb24tYnVsbGV0IHtcXG4gIHRyYW5zaXRpb246IDIwMG1zIHRyYW5zZm9ybSwgMjAwbXMgcmlnaHQ7XFxufVxcbi8qIFByb2dyZXNzICovXFxuLnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcbi5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2JhciAuc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXItZmlsbCB7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1zd2lwZXItcGFnaW5hdGlvbi1jb2xvciwgdmFyKC0tc3dpcGVyLXRoZW1lLWNvbG9yKSk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDApO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdCB0b3A7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLXJ0bCAuc3dpcGVyLXBhZ2luYXRpb24tcHJvZ3Jlc3NiYXIgLnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyLWZpbGwge1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogcmlnaHQgdG9wO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1ob3Jpem9udGFsID4gLnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyLFxcbi5zd2lwZXItY29udGFpbmVyLXZlcnRpY2FsID4gLnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyLnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyLW9wcG9zaXRlIHtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiA0cHg7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci12ZXJ0aWNhbCA+IC5zd2lwZXItcGFnaW5hdGlvbi1wcm9ncmVzc2JhcixcXG4uc3dpcGVyLWNvbnRhaW5lci1ob3Jpem9udGFsID4gLnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyLnN3aXBlci1wYWdpbmF0aW9uLXByb2dyZXNzYmFyLW9wcG9zaXRlIHtcXG4gIHdpZHRoOiA0cHg7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbn1cXG4uc3dpcGVyLXBhZ2luYXRpb24td2hpdGUge1xcbiAgLS1zd2lwZXItcGFnaW5hdGlvbi1jb2xvcjogI2ZmZmZmZjtcXG59XFxuLnN3aXBlci1wYWdpbmF0aW9uLWJsYWNrIHtcXG4gIC0tc3dpcGVyLXBhZ2luYXRpb24tY29sb3I6ICMwMDAwMDA7XFxufVxcbi5zd2lwZXItcGFnaW5hdGlvbi1sb2NrIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi8qIFNjcm9sbGJhciAqL1xcbi5zd2lwZXItc2Nyb2xsYmFyIHtcXG4gIGJvcmRlci1yYWRpdXM6IDEwcHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAtbXMtdG91Y2gtYWN0aW9uOiBub25lO1xcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjEpO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1ob3Jpem9udGFsID4gLnN3aXBlci1zY3JvbGxiYXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMSU7XFxuICBib3R0b206IDNweDtcXG4gIHotaW5kZXg6IDUwO1xcbiAgaGVpZ2h0OiA1cHg7XFxuICB3aWR0aDogOTglO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci12ZXJ0aWNhbCA+IC5zd2lwZXItc2Nyb2xsYmFyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAzcHg7XFxuICB0b3A6IDElO1xcbiAgei1pbmRleDogNTA7XFxuICB3aWR0aDogNXB4O1xcbiAgaGVpZ2h0OiA5OCU7XFxufVxcbi5zd2lwZXItc2Nyb2xsYmFyLWRyYWcge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNSk7XFxuICBib3JkZXItcmFkaXVzOiAxMHB4O1xcbiAgbGVmdDogMDtcXG4gIHRvcDogMDtcXG59XFxuLnN3aXBlci1zY3JvbGxiYXItY3Vyc29yLWRyYWcge1xcbiAgY3Vyc29yOiBtb3ZlO1xcbn1cXG4uc3dpcGVyLXNjcm9sbGJhci1sb2NrIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5zd2lwZXItem9vbS1jb250YWluZXIge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4uc3dpcGVyLXpvb20tY29udGFpbmVyID4gaW1nLFxcbi5zd2lwZXItem9vbS1jb250YWluZXIgPiBzdmcsXFxuLnN3aXBlci16b29tLWNvbnRhaW5lciA+IGNhbnZhcyB7XFxuICBtYXgtd2lkdGg6IDEwMCU7XFxuICBtYXgtaGVpZ2h0OiAxMDAlO1xcbiAgLW8tb2JqZWN0LWZpdDogY29udGFpbjtcXG4gICAgIG9iamVjdC1maXQ6IGNvbnRhaW47XFxufVxcbi5zd2lwZXItc2xpZGUtem9vbWVkIHtcXG4gIGN1cnNvcjogbW92ZTtcXG59XFxuLyogUHJlbG9hZGVyICovXFxuOnJvb3Qge1xcbiAgLypcXG4gIC0tc3dpcGVyLXByZWxvYWRlci1jb2xvcjogdmFyKC0tc3dpcGVyLXRoZW1lLWNvbG9yKTtcXG4gICovXFxufVxcbi5zd2lwZXItbGF6eS1wcmVsb2FkZXIge1xcbiAgd2lkdGg6IDQycHg7XFxuICBoZWlnaHQ6IDQycHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiA1MCU7XFxuICB0b3A6IDUwJTtcXG4gIG1hcmdpbi1sZWZ0OiAtMjFweDtcXG4gIG1hcmdpbi10b3A6IC0yMXB4O1xcbiAgei1pbmRleDogMTA7XFxuICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCU7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogc3dpcGVyLXByZWxvYWRlci1zcGluIDFzIGluZmluaXRlIGxpbmVhcjtcXG4gICAgICAgICAgYW5pbWF0aW9uOiBzd2lwZXItcHJlbG9hZGVyLXNwaW4gMXMgaW5maW5pdGUgbGluZWFyO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlcjogNHB4IHNvbGlkIHZhcigtLXN3aXBlci1wcmVsb2FkZXItY29sb3IsIHZhcigtLXN3aXBlci10aGVtZS1jb2xvcikpO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcbi5zd2lwZXItbGF6eS1wcmVsb2FkZXItd2hpdGUge1xcbiAgLS1zd2lwZXItcHJlbG9hZGVyLWNvbG9yOiAjZmZmO1xcbn1cXG4uc3dpcGVyLWxhenktcHJlbG9hZGVyLWJsYWNrIHtcXG4gIC0tc3dpcGVyLXByZWxvYWRlci1jb2xvcjogIzAwMDtcXG59XFxuQC13ZWJraXQta2V5ZnJhbWVzIHN3aXBlci1wcmVsb2FkZXItc3BpbiB7XFxuICAxMDAlIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcXG4gIH1cXG59XFxuQGtleWZyYW1lcyBzd2lwZXItcHJlbG9hZGVyLXNwaW4ge1xcbiAgMTAwJSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcbi8qIGExMXkgKi9cXG4uc3dpcGVyLWNvbnRhaW5lciAuc3dpcGVyLW5vdGlmaWNhdGlvbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBvcGFjaXR5OiAwO1xcbiAgei1pbmRleDogLTEwMDA7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWZhZGUuc3dpcGVyLWNvbnRhaW5lci1mcmVlLW1vZGUgLnN3aXBlci1zbGlkZSB7XFxuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1vdXQ7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWZhZGUgLnN3aXBlci1zbGlkZSB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IG9wYWNpdHk7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWZhZGUgLnN3aXBlci1zbGlkZSAuc3dpcGVyLXNsaWRlIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1mYWRlIC5zd2lwZXItc2xpZGUtYWN0aXZlLFxcbi5zd2lwZXItY29udGFpbmVyLWZhZGUgLnN3aXBlci1zbGlkZS1hY3RpdmUgLnN3aXBlci1zbGlkZS1hY3RpdmUge1xcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUge1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZSB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XFxuICB6LWluZGV4OiAxO1xcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZSAuc3dpcGVyLXNsaWRlIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1jdWJlLnN3aXBlci1jb250YWluZXItcnRsIC5zd2lwZXItc2xpZGUge1xcbiAgdHJhbnNmb3JtLW9yaWdpbjogMTAwJSAwO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1jdWJlIC5zd2lwZXItc2xpZGUtYWN0aXZlLFxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1hY3RpdmUgLnN3aXBlci1zbGlkZS1hY3RpdmUge1xcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1hY3RpdmUsXFxuLnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRlLW5leHQsXFxuLnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRlLXByZXYsXFxuLnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRlLW5leHQgKyAuc3dpcGVyLXNsaWRlIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcXG59XFxuLnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AsXFxuLnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20sXFxuLnN3aXBlci1jb250YWluZXItY3ViZSAuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0LFxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQge1xcbiAgei1pbmRleDogMDtcXG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1jdWJlLXNoYWRvdyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwO1xcbiAgYm90dG9tOiAwcHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG9wYWNpdHk6IDAuNjtcXG4gIHotaW5kZXg6IDA7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWN1YmUgLnN3aXBlci1jdWJlLXNoYWRvdzpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxuICBiYWNrZ3JvdW5kOiAjMDAwO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMDtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgZmlsdGVyOiBibHVyKDUwcHgpO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1mbGlwIHtcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbn1cXG4uc3dpcGVyLWNvbnRhaW5lci1mbGlwIC5zd2lwZXItc2xpZGUge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICAtd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHk6IGhpZGRlbjtcXG4gICAgICAgICAgYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgei1pbmRleDogMTtcXG59XFxuLnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlIC5zd2lwZXItc2xpZGUge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcbi5zd2lwZXItY29udGFpbmVyLWZsaXAgLnN3aXBlci1zbGlkZS1hY3RpdmUsXFxuLnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlLWFjdGl2ZSAuc3dpcGVyLXNsaWRlLWFjdGl2ZSB7XFxuICBwb2ludGVyLWV2ZW50czogYXV0bztcXG59XFxuLnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlLXNoYWRvdy10b3AsXFxuLnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1ib3R0b20sXFxuLnN3aXBlci1jb250YWluZXItZmxpcCAuc3dpcGVyLXNsaWRlLXNoYWRvdy1sZWZ0LFxcbi5zd2lwZXItY29udGFpbmVyLWZsaXAgLnN3aXBlci1zbGlkZS1zaGFkb3ctcmlnaHQge1xcbiAgei1pbmRleDogMDtcXG4gIC13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eTogaGlkZGVuO1xcbiAgICAgICAgICBiYWNrZmFjZS12aXNpYmlsaXR5OiBoaWRkZW47XFxufVxcblwiLCBcIlwiXSk7XG5cbi8vIGV4cG9ydHNcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/css-loader/index.js?!./node_modules/postcss-loader/src/index.js?!./node_modules/swiper/swiper-bundle.css\n"); /***/ }), /***/ "./node_modules/css-loader/lib/css-base.js": /*!*************************************************!*\ !*** ./node_modules/css-loader/lib/css-base.js ***! \*************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t// when a module is imported multiple times with different media queries.\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9saWIvY3NzLWJhc2UuanM/MjM1MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGdCQUFnQjtBQUNuRCxJQUFJO0FBQ0o7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksb0JBQW9CO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRCxjQUFjOztBQUVsRTtBQUNBIiwiZmlsZSI6Ii4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvbGliL2Nzcy1iYXNlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbi8vIGNzcyBiYXNlIGNvZGUsIGluamVjdGVkIGJ5IHRoZSBjc3MtbG9hZGVyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHVzZVNvdXJjZU1hcCkge1xuXHR2YXIgbGlzdCA9IFtdO1xuXG5cdC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblx0bGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuXHRcdFx0dmFyIGNvbnRlbnQgPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0sIHVzZVNvdXJjZU1hcCk7XG5cdFx0XHRpZihpdGVtWzJdKSB7XG5cdFx0XHRcdHJldHVybiBcIkBtZWRpYSBcIiArIGl0ZW1bMl0gKyBcIntcIiArIGNvbnRlbnQgKyBcIn1cIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBjb250ZW50O1xuXHRcdFx0fVxuXHRcdH0pLmpvaW4oXCJcIik7XG5cdH07XG5cblx0Ly8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3Rcblx0bGlzdC5pID0gZnVuY3Rpb24obW9kdWxlcywgbWVkaWFRdWVyeSkge1xuXHRcdGlmKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKVxuXHRcdFx0bW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgXCJcIl1dO1xuXHRcdHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBpZCA9IHRoaXNbaV1bMF07XG5cdFx0XHRpZih0eXBlb2YgaWQgPT09IFwibnVtYmVyXCIpXG5cdFx0XHRcdGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcblx0XHR9XG5cdFx0Zm9yKGkgPSAwOyBpIDwgbW9kdWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGl0ZW0gPSBtb2R1bGVzW2ldO1xuXHRcdFx0Ly8gc2tpcCBhbHJlYWR5IGltcG9ydGVkIG1vZHVsZVxuXHRcdFx0Ly8gdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgMTAwJSBwZXJmZWN0IGZvciB3ZWlyZCBtZWRpYSBxdWVyeSBjb21iaW5hdGlvbnNcblx0XHRcdC8vICB3aGVuIGEgbW9kdWxlIGlzIGltcG9ydGVkIG11bHRpcGxlIHRpbWVzIHdpdGggZGlmZmVyZW50IG1lZGlhIHF1ZXJpZXMuXG5cdFx0XHQvLyAgSSBob3BlIHRoaXMgd2lsbCBuZXZlciBvY2N1ciAoSGV5IHRoaXMgd2F5IHdlIGhhdmUgc21hbGxlciBidW5kbGVzKVxuXHRcdFx0aWYodHlwZW9mIGl0ZW1bMF0gIT09IFwibnVtYmVyXCIgfHwgIWFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcblx0XHRcdFx0aWYobWVkaWFRdWVyeSAmJiAhaXRlbVsyXSkge1xuXHRcdFx0XHRcdGl0ZW1bMl0gPSBtZWRpYVF1ZXJ5O1xuXHRcdFx0XHR9IGVsc2UgaWYobWVkaWFRdWVyeSkge1xuXHRcdFx0XHRcdGl0ZW1bMl0gPSBcIihcIiArIGl0ZW1bMl0gKyBcIikgYW5kIChcIiArIG1lZGlhUXVlcnkgKyBcIilcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRsaXN0LnB1c2goaXRlbSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRyZXR1cm4gbGlzdDtcbn07XG5cbmZ1bmN0aW9uIGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSwgdXNlU291cmNlTWFwKSB7XG5cdHZhciBjb250ZW50ID0gaXRlbVsxXSB8fCAnJztcblx0dmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuXHRpZiAoIWNzc01hcHBpbmcpIHtcblx0XHRyZXR1cm4gY29udGVudDtcblx0fVxuXG5cdGlmICh1c2VTb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgPT09ICdmdW5jdGlvbicpIHtcblx0XHR2YXIgc291cmNlTWFwcGluZyA9IHRvQ29tbWVudChjc3NNYXBwaW5nKTtcblx0XHR2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuXHRcdFx0cmV0dXJuICcvKiMgc291cmNlVVJMPScgKyBjc3NNYXBwaW5nLnNvdXJjZVJvb3QgKyBzb3VyY2UgKyAnICovJ1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIFtjb250ZW50XS5jb25jYXQoc291cmNlVVJMcykuY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbignXFxuJyk7XG5cdH1cblxuXHRyZXR1cm4gW2NvbnRlbnRdLmpvaW4oJ1xcbicpO1xufVxuXG4vLyBBZGFwdGVkIGZyb20gY29udmVydC1zb3VyY2UtbWFwIChNSVQpXG5mdW5jdGlvbiB0b0NvbW1lbnQoc291cmNlTWFwKSB7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuXHR2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKTtcblx0dmFyIGRhdGEgPSAnc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsJyArIGJhc2U2NDtcblxuXHRyZXR1cm4gJy8qIyAnICsgZGF0YSArICcgKi8nO1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/css-loader/lib/css-base.js\n"); /***/ }), /***/ "./node_modules/dom7/dom7.esm.js": /*!***************************************!*\ !*** ./node_modules/dom7/dom7.esm.js ***! \***************************************/ /*! exports provided: default, $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"$\", function() { return $; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"add\", function() { return add; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"addClass\", function() { return addClass; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"animate\", function() { return animate; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"animationEnd\", function() { return animationEnd; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"append\", function() { return append; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"appendTo\", function() { return appendTo; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"attr\", function() { return attr; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"blur\", function() { return blur; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"change\", function() { return change; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"children\", function() { return children; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"click\", function() { return click; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"closest\", function() { return closest; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"css\", function() { return css; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"data\", function() { return data; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dataset\", function() { return dataset; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"detach\", function() { return detach; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"each\", function() { return each; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"empty\", function() { return empty; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"eq\", function() { return eq; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"filter\", function() { return filter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"find\", function() { return find; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"focus\", function() { return focus; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"focusin\", function() { return focusin; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"focusout\", function() { return focusout; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hasClass\", function() { return hasClass; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"height\", function() { return height; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"hide\", function() { return hide; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"html\", function() { return html; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"index\", function() { return index; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"insertAfter\", function() { return insertAfter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"insertBefore\", function() { return insertBefore; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"is\", function() { return is; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"keydown\", function() { return keydown; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"keypress\", function() { return keypress; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"keyup\", function() { return keyup; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mousedown\", function() { return mousedown; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mouseenter\", function() { return mouseenter; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mouseleave\", function() { return mouseleave; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mousemove\", function() { return mousemove; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mouseout\", function() { return mouseout; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mouseover\", function() { return mouseover; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"mouseup\", function() { return mouseup; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"next\", function() { return next; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"nextAll\", function() { return nextAll; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"off\", function() { return off; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"offset\", function() { return offset; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"on\", function() { return on; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"once\", function() { return once; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"outerHeight\", function() { return outerHeight; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"outerWidth\", function() { return outerWidth; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parent\", function() { return parent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"parents\", function() { return parents; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"prepend\", function() { return prepend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"prependTo\", function() { return prependTo; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"prev\", function() { return prev; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"prevAll\", function() { return prevAll; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"prop\", function() { return prop; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"remove\", function() { return remove; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"removeAttr\", function() { return removeAttr; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"removeClass\", function() { return removeClass; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"removeData\", function() { return removeData; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"resize\", function() { return resize; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"scroll\", function() { return scroll; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"scrollLeft\", function() { return scrollLeft; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"scrollTo\", function() { return scrollTo; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"scrollTop\", function() { return scrollTop; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"show\", function() { return show; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"siblings\", function() { return siblings; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"stop\", function() { return stop; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"styles\", function() { return styles; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"submit\", function() { return submit; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"text\", function() { return text; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"toggleClass\", function() { return toggleClass; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"touchend\", function() { return touchend; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"touchmove\", function() { return touchmove; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"touchstart\", function() { return touchstart; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"transform\", function() { return transform; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"transition\", function() { return transition; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"transitionEnd\", function() { return transitionEnd; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"trigger\", function() { return trigger; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"val\", function() { return val; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"value\", function() { return value; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"width\", function() { return width; });\n/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ \"./node_modules/ssr-window/ssr-window.esm.js\");\n/**\n * Dom7 3.0.0\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2020, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: November 9, 2020\n */\n\n\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}\n\nfunction _getPrototypeOf(o) {\n _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nfunction _construct(Parent, args, Class) {\n if (_isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\nfunction _isNativeFunction(fn) {\n return Function.toString.call(fn).indexOf(\"[native code]\") !== -1;\n}\n\nfunction _wrapNativeSuper(Class) {\n var _cache = typeof Map === \"function\" ? new Map() : undefined;\n\n _wrapNativeSuper = function _wrapNativeSuper(Class) {\n if (Class === null || !_isNativeFunction(Class)) return Class;\n\n if (typeof Class !== \"function\") {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n if (typeof _cache !== \"undefined\") {\n if (_cache.has(Class)) return _cache.get(Class);\n\n _cache.set(Class, Wrapper);\n }\n\n function Wrapper() {\n return _construct(Class, arguments, _getPrototypeOf(this).constructor);\n }\n\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n return _setPrototypeOf(Wrapper, Class);\n };\n\n return _wrapNativeSuper(Class);\n}\n\nfunction _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n var proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get: function get() {\n return proto;\n },\n set: function set(value) {\n proto.__proto__ = value;\n }\n });\n}\n\nvar Dom7 = /*#__PURE__*/function (_Array) {\n _inheritsLoose(Dom7, _Array);\n\n function Dom7(items) {\n var _this;\n\n _this = _Array.call.apply(_Array, [this].concat(items)) || this;\n makeReactive(_assertThisInitialized(_this));\n return _this;\n }\n\n return Dom7;\n}( /*#__PURE__*/_wrapNativeSuper(Array));\n\nfunction arrayFlat(arr) {\n if (arr === void 0) {\n arr = [];\n }\n\n var res = [];\n arr.forEach(function (el) {\n if (Array.isArray(el)) {\n res.push.apply(res, arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n var uniqueArray = [];\n\n for (var i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, function (match, group) {\n return group.toUpperCase();\n });\n}\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n var a = [];\n var res = context.querySelectorAll(selector);\n\n for (var i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n var window = Object(ssr_window__WEBPACK_IMPORTED_MODULE_0__[\"getWindow\"])();\n var document = Object(ssr_window__WEBPACK_IMPORTED_MODULE_0__[\"getDocument\"])();\n var arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n var html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n var toCreate = 'div';\n if (html.indexOf(' 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (var i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (var attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (var i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (var i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (var propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n var el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n var dataKey = el.getAttribute(\"data-\" + key);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (var i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (var i = 0; i < this.length; i += 1) {\n var el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n var el = this[0];\n if (!el) return undefined;\n var dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (var dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (var i = 0; i < el.attributes.length; i += 1) {\n var _attr = el.attributes[i];\n\n if (_attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(_attr.name.split('data-')[1])] = _attr.value;\n }\n }\n }\n\n for (var key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n var el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n var values = [];\n\n for (var i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (var _i = 0; _i < this.length; _i += 1) {\n var _el = this[_i];\n\n if (Array.isArray(value) && _el.multiple && _el.nodeName.toLowerCase() === 'select') {\n for (var j = 0; j < _el.options.length; j += 1) {\n _el.options[j].selected = value.indexOf(_el.options[j].value) >= 0;\n }\n } else {\n _el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (var i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (var i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? duration + \"ms\" : duration;\n }\n\n return this;\n}\n\nfunction on() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n var eventType = args[0],\n targetSelector = args[1],\n listener = args[2],\n capture = args[3];\n\n if (typeof args[1] === 'function') {\n eventType = args[0];\n listener = args[1];\n capture = args[2];\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n var target = e.target;\n if (!target) return;\n var eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n var _parents = $(target).parents(); // eslint-disable-line\n\n\n for (var k = 0; k < _parents.length; k += 1) {\n if ($(_parents[k]).is(targetSelector)) listener.apply(_parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n var eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n var events = eventType.split(' ');\n var j;\n\n for (var i = 0; i < this.length; i += 1) {\n var el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n var event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener: listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n var _event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[_event]) el.dom7LiveListeners[_event] = [];\n\n el.dom7LiveListeners[_event].push({\n listener: listener,\n proxyListener: handleLiveEvent\n });\n\n el.addEventListener(_event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n var eventType = args[0],\n targetSelector = args[1],\n listener = args[2],\n capture = args[3];\n\n if (typeof args[1] === 'function') {\n eventType = args[0];\n listener = args[1];\n capture = args[2];\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n var events = eventType.split(' ');\n\n for (var i = 0; i < events.length; i += 1) {\n var event = events[i];\n\n for (var j = 0; j < this.length; j += 1) {\n var el = this[j];\n var handlers = void 0;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (var k = handlers.length - 1; k >= 0; k -= 1) {\n var handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once() {\n var dom = this;\n\n for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n\n var eventName = args[0],\n targetSelector = args[1],\n listener = args[2],\n capture = args[3];\n\n if (typeof args[1] === 'function') {\n eventName = args[0];\n listener = args[1];\n capture = args[2];\n targetSelector = undefined;\n }\n\n function onceHandler() {\n for (var _len8 = arguments.length, eventArgs = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n eventArgs[_key8] = arguments[_key8];\n }\n\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger() {\n var window = Object(ssr_window__WEBPACK_IMPORTED_MODULE_0__[\"getWindow\"])();\n\n for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n args[_key9] = arguments[_key9];\n }\n\n var events = args[0].split(' ');\n var eventData = args[1];\n\n for (var i = 0; i < events.length; i += 1) {\n var event = events[i];\n\n for (var j = 0; j < this.length; j += 1) {\n var el = this[j];\n\n if (window.CustomEvent) {\n var evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter(function (data, dataIndex) {\n return dataIndex > 0;\n });\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n var dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n var dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n var window = Object(ssr_window__WEBPACK_IMPORTED_MODULE_0__[\"getWindow\"])();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n var _styles = this.styles();\n\n return this[0].offsetWidth + parseFloat(_styles.getPropertyValue('margin-right')) + parseFloat(_styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n var window = Object(ssr_window__WEBPACK_IMPORTED_MODULE_0__[\"getWindow\"])();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n var _styles2 = this.styles();\n\n return this[0].offsetHeight + parseFloat(_styles2.getPropertyValue('margin-top')) + parseFloat(_styles2.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n var window = Object(ssr_window__WEBPACK_IMPORTED_MODULE_0__[\"getWindow\"])();\n var document = Object(ssr_window__WEBPACK_IMPORTED_MODULE_0__[\"getDocument\"])();\n var el = this[0];\n var box = el.getBoundingClientRect();\n var body = document.body;\n var clientTop = el.clientTop || body.clientTop || 0;\n var clientLeft = el.clientLeft || body.clientLeft || 0;\n var scrollTop = el === window ? window.scrollY : el.scrollTop;\n var scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n}\n\nfunction hide() {\n for (var i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n var window = Object(ssr_window__WEBPACK_IMPORTED_MODULE_0__[\"getWindow\"])();\n\n for (var i = 0; i < this.length; i += 1) {\n var el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n var window = Object(ssr_window__WEBPACK_IMPORTED_MODULE_0__[\"getWindow\"])();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n var window = Object(ssr_window__WEBPACK_IMPORTED_MODULE_0__[\"getWindow\"])();\n var i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (var _prop in props) {\n this[i].style[_prop] = props[_prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach(function (el, index) {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n var result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (var i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (var i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n var window = Object(ssr_window__WEBPACK_IMPORTED_MODULE_0__[\"getWindow\"])();\n var document = Object(ssr_window__WEBPACK_IMPORTED_MODULE_0__[\"getDocument\"])();\n var el = this[0];\n var compareWith;\n var i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n var child = this[0];\n var i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n var length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n var returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append() {\n var newChild;\n var document = Object(ssr_window__WEBPACK_IMPORTED_MODULE_0__[\"getDocument\"])();\n\n for (var k = 0; k < arguments.length; k += 1) {\n newChild = k < 0 || arguments.length <= k ? undefined : arguments[k];\n\n for (var i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n var tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (var j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n var document = Object(ssr_window__WEBPACK_IMPORTED_MODULE_0__[\"getDocument\"])();\n var i;\n var j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n var tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n var before = $(selector);\n\n for (var i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (var j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n var after = $(selector);\n\n for (var i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (var j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n var nextEls = [];\n var el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n var _next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(_next).is(selector)) nextEls.push(_next);\n } else nextEls.push(_next);\n\n el = _next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n var el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n var prevEls = [];\n var el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n var _prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(_prev).is(selector)) prevEls.push(_prev);\n } else prevEls.push(_prev);\n\n el = _prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n var parents = []; // eslint-disable-line\n\n for (var i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n var parents = []; // eslint-disable-line\n\n for (var i = 0; i < this.length; i += 1) {\n var _parent = this[i].parentNode; // eslint-disable-line\n\n while (_parent) {\n if (selector) {\n if ($(_parent).is(selector)) parents.push(_parent);\n } else {\n parents.push(_parent);\n }\n\n _parent = _parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n var closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n var foundElements = [];\n\n for (var i = 0; i < this.length; i += 1) {\n var found = this[i].querySelectorAll(selector);\n\n for (var j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n var children = []; // eslint-disable-line\n\n for (var i = 0; i < this.length; i += 1) {\n var childNodes = this[i].children;\n\n for (var j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (var i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add() {\n var dom = this;\n var i;\n var j;\n\n for (var _len10 = arguments.length, els = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {\n els[_key10] = arguments[_key10];\n }\n\n for (i = 0; i < els.length; i += 1) {\n var toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (var i = 0; i < this.length; i += 1) {\n var el = this[i];\n\n if (el.nodeType === 1) {\n for (var j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\nfunction scrollTo() {\n var window = Object(ssr_window__WEBPACK_IMPORTED_MODULE_0__[\"getWindow\"])();\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var left = args[0],\n top = args[1],\n duration = args[2],\n easing = args[3],\n callback = args[4];\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n left = args[0];\n top = args[1];\n duration = args[2];\n callback = args[3];\n easing = args[4];\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n var el = this;\n var currentTop;\n var currentLeft;\n var maxTop;\n var maxLeft;\n var newTop;\n var newLeft;\n var scrollTop; // eslint-disable-line\n\n var scrollLeft; // eslint-disable-line\n\n var animateTop = top > 0 || top === 0;\n var animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n var startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time) {\n if (time === void 0) {\n time = new Date().getTime();\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n var progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n var easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n var done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var top = args[0],\n duration = args[1],\n easing = args[2],\n callback = args[3];\n\n if (args.length === 3 && typeof easing === 'function') {\n top = args[0];\n duration = args[1];\n callback = args[2];\n easing = args[3];\n }\n\n var dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n var left = args[0],\n duration = args[1],\n easing = args[2],\n callback = args[3];\n\n if (args.length === 3 && typeof easing === 'function') {\n left = args[0];\n duration = args[1];\n callback = args[2];\n easing = args[3];\n }\n\n var dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\nfunction animate(initialProps, initialParams) {\n var window = Object(ssr_window__WEBPACK_IMPORTED_MODULE_0__[\"getWindow\"])();\n var els = this;\n var a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n easingProgress: function easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n stop: function stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(function (el) {\n var element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n done: function done(complete) {\n a.animating = false;\n a.elements.each(function (el) {\n var element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n var que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n animate: function animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n var elements = []; // Define & Cache Initials & Units\n\n a.elements.each(function (el, index) {\n var initialFullValue;\n var initialValue;\n var unit;\n var finalValue;\n var finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(function (prop) {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue: initialFullValue,\n initialValue: initialValue,\n unit: unit,\n finalValue: finalValue,\n finalFullValue: finalFullValue,\n currentValue: initialValue\n };\n });\n });\n var startTime = null;\n var time;\n var elementsDone = 0;\n var propsDone = 0;\n var done;\n var began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n var progress;\n var easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(function (element) {\n var el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(function (prop) {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n var _el$prop = el[prop],\n initialValue = _el$prop.initialValue,\n finalValue = _el$prop.finalValue,\n unit = _el$prop.unit;\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n var currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n var animateInstance;\n\n for (var i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n var els = this;\n\n for (var i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nvar noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (typeof args[0] === 'undefined') {\n for (var i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on.apply(this, [name].concat(args));\n }\n\n return eventHandler;\n}\n\nvar click = shortcut('click');\nvar blur = shortcut('blur');\nvar focus = shortcut('focus');\nvar focusin = shortcut('focusin');\nvar focusout = shortcut('focusout');\nvar keyup = shortcut('keyup');\nvar keydown = shortcut('keydown');\nvar keypress = shortcut('keypress');\nvar submit = shortcut('submit');\nvar change = shortcut('change');\nvar mousedown = shortcut('mousedown');\nvar mousemove = shortcut('mousemove');\nvar mouseup = shortcut('mouseup');\nvar mouseenter = shortcut('mouseenter');\nvar mouseleave = shortcut('mouseleave');\nvar mouseout = shortcut('mouseout');\nvar mouseover = shortcut('mouseover');\nvar touchstart = shortcut('touchstart');\nvar touchend = shortcut('touchend');\nvar touchmove = shortcut('touchmove');\nvar resize = shortcut('resize');\nvar scroll = shortcut('scroll');\n\n/* harmony default export */ __webpack_exports__[\"default\"] = ($);\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9tNy9kb203LmVzbS5qcz9kY2YzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ29EOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyRUFBMkU7QUFDM0U7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixnQkFBZ0I7QUFDakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLGdCQUFnQjtBQUNqQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLDREQUFTO0FBQ3hCLGlCQUFpQiw4REFBVztBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixrQ0FBa0M7QUFDdkQ7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7O0FBRUwsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0Esd0VBQXdFLGFBQWE7QUFDckY7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBLDJFQUEyRSxlQUFlO0FBQzFGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQSwyRUFBMkUsZUFBZTtBQUMxRjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7QUFFQTtBQUNBLDJFQUEyRSxlQUFlO0FBQzFGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSCxpQkFBaUIsaUJBQWlCO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDhCQUE4Qjs7QUFFOUI7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7OztBQUdILGlCQUFpQixpQkFBaUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixpQkFBaUI7QUFDbEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjs7QUFFbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsbUJBQW1CLDBCQUEwQjtBQUM3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdURBQXVELHNEQUFzRDtBQUM3Rzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxxQkFBcUIsK0JBQStCO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEdBQUc7OztBQUdILGtCQUFrQixrQkFBa0I7QUFDcEM7O0FBRUE7QUFDQSxxQkFBcUIsd0JBQXdCO0FBQzdDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsaUJBQWlCO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHdFQUF3RSxlQUFlO0FBQ3ZGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx3RUFBd0U7QUFDeEUseUNBQXlDOzs7QUFHekMscUJBQXFCLHFCQUFxQjtBQUMxQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLGlCQUFpQjtBQUNsQzs7QUFFQTtBQUNBLGlCQUFpQixtQkFBbUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxpQkFBaUIsbUJBQW1CO0FBQ3BDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx3RUFBd0UsZUFBZTtBQUN2RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixtQkFBbUI7QUFDcEM7O0FBRUEsbUJBQW1CLGlCQUFpQjtBQUNwQztBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLHlDQUF5QyxRQUFRO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx3RUFBd0UsZUFBZTtBQUN2RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLCtFQUErRSxlQUFlO0FBQzlGO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLDREQUFTOztBQUV4Qix3RUFBd0UsZUFBZTtBQUN2RjtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLG1CQUFtQjtBQUNwQzs7QUFFQSxtQkFBbUIsaUJBQWlCO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSw0REFBUzs7QUFFeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSw0REFBUzs7QUFFeEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsNERBQVM7QUFDMUIsbUJBQW1CLDhEQUFXO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLDREQUFTOztBQUV4QixpQkFBaUIsaUJBQWlCO0FBQ2xDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLDREQUFTO0FBQ3hCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGVBQWUsNERBQVM7QUFDeEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZUFBZSxpQkFBaUI7QUFDaEMsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLDREQUFTO0FBQ3hCLGlCQUFpQiw4REFBVztBQUM1QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGVBQWUsd0JBQXdCO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsZUFBZSx3QkFBd0I7QUFDdkM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsVUFBVTs7QUFFVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUIsOERBQVc7O0FBRTVCLGlCQUFpQixzQkFBc0I7QUFDdkM7O0FBRUEsbUJBQW1CLGlCQUFpQjtBQUNwQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLDhEQUFXO0FBQzVCO0FBQ0E7O0FBRUEsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQTtBQUNBOztBQUVBLDZDQUE2QyxRQUFRO0FBQ3JEO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsaUJBQWlCLHFCQUFxQjtBQUN0QztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBO0FBQ0EsS0FBSztBQUNMLHFCQUFxQixtQkFBbUI7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixpQkFBaUI7QUFDbEM7QUFDQTtBQUNBLEtBQUs7QUFDTCxxQkFBcUIsa0JBQWtCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQ0FBc0M7O0FBRXRDO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBDQUEwQzs7QUFFMUM7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQjs7QUFFbkIsaUJBQWlCLGlCQUFpQjtBQUNsQztBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQjs7QUFFbkIsaUJBQWlCLGlCQUFpQjtBQUNsQyxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsaUJBQWlCO0FBQ2xDOztBQUVBLG1CQUFtQixrQkFBa0I7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0I7O0FBRXBCLGlCQUFpQixpQkFBaUI7QUFDbEM7O0FBRUEsbUJBQW1CLHVCQUF1QjtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsaUJBQWlCO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMEVBQTBFLGlCQUFpQjtBQUMzRjtBQUNBOztBQUVBLGFBQWEsZ0JBQWdCO0FBQzdCOztBQUVBLGVBQWUsa0JBQWtCO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCLGlCQUFpQjtBQUNsQzs7QUFFQTtBQUNBLHFCQUFxQiwwQkFBMEI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlLDREQUFTOztBQUV4QixxRUFBcUUsYUFBYTtBQUNsRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCLG1CQUFtQjs7QUFFbkI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSCxDQUFDOzs7QUFHRDtBQUNBLHdFQUF3RSxlQUFlO0FBQ3ZGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx3RUFBd0UsZUFBZTtBQUN2RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSw0REFBUztBQUN4QjtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdCQUF3Qjs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7O0FBRXpCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXO0FBQ1gsU0FBUztBQUNULHlCQUF5Qjs7QUFFekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsaUJBQWlCLHVCQUF1QjtBQUN4QztBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixnQkFBZ0I7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsdUVBQXVFLGFBQWE7QUFDcEY7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQixpQkFBaUI7QUFDdEM7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWUsZ0VBQUMsRUFBQztBQUNvdEIiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvZG9tNy9kb203LmVzbS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRG9tNyAzLjAuMFxuICogTWluaW1hbGlzdGljIEphdmFTY3JpcHQgbGlicmFyeSBmb3IgRE9NIG1hbmlwdWxhdGlvbiwgd2l0aCBhIGpRdWVyeS1jb21wYXRpYmxlIEFQSVxuICogaHR0cHM6Ly9mcmFtZXdvcms3LmlvL2RvY3MvZG9tNy5odG1sXG4gKlxuICogQ29weXJpZ2h0IDIwMjAsIFZsYWRpbWlyIEtoYXJsYW1waWRpXG4gKlxuICogTGljZW5zZWQgdW5kZXIgTUlUXG4gKlxuICogUmVsZWFzZWQgb246IE5vdmVtYmVyIDksIDIwMjBcbiAqL1xuaW1wb3J0IHsgZ2V0V2luZG93LCBnZXREb2N1bWVudCB9IGZyb20gJ3Nzci13aW5kb3cnO1xuXG5mdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59XG5cbmZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gIF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7XG4gICAgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTtcbiAgfTtcbiAgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTtcbn1cblxuZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7XG4gICAgby5fX3Byb3RvX18gPSBwO1xuICAgIHJldHVybiBvO1xuICB9O1xuXG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7XG59XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTtcbiAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTtcblxuICB0cnkge1xuICAgIERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoRGF0ZSwgW10sIGZ1bmN0aW9uICgpIHt9KSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2NvbnN0cnVjdChQYXJlbnQsIGFyZ3MsIENsYXNzKSB7XG4gIGlmIChfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0KCkpIHtcbiAgICBfY29uc3RydWN0ID0gUmVmbGVjdC5jb25zdHJ1Y3Q7XG4gIH0gZWxzZSB7XG4gICAgX2NvbnN0cnVjdCA9IGZ1bmN0aW9uIF9jb25zdHJ1Y3QoUGFyZW50LCBhcmdzLCBDbGFzcykge1xuICAgICAgdmFyIGEgPSBbbnVsbF07XG4gICAgICBhLnB1c2guYXBwbHkoYSwgYXJncyk7XG4gICAgICB2YXIgQ29uc3RydWN0b3IgPSBGdW5jdGlvbi5iaW5kLmFwcGx5KFBhcmVudCwgYSk7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgIGlmIChDbGFzcykgX3NldFByb3RvdHlwZU9mKGluc3RhbmNlLCBDbGFzcy5wcm90b3R5cGUpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gX2NvbnN0cnVjdC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBfaXNOYXRpdmVGdW5jdGlvbihmbikge1xuICByZXR1cm4gRnVuY3Rpb24udG9TdHJpbmcuY2FsbChmbikuaW5kZXhPZihcIltuYXRpdmUgY29kZV1cIikgIT09IC0xO1xufVxuXG5mdW5jdGlvbiBfd3JhcE5hdGl2ZVN1cGVyKENsYXNzKSB7XG4gIHZhciBfY2FjaGUgPSB0eXBlb2YgTWFwID09PSBcImZ1bmN0aW9uXCIgPyBuZXcgTWFwKCkgOiB1bmRlZmluZWQ7XG5cbiAgX3dyYXBOYXRpdmVTdXBlciA9IGZ1bmN0aW9uIF93cmFwTmF0aXZlU3VwZXIoQ2xhc3MpIHtcbiAgICBpZiAoQ2xhc3MgPT09IG51bGwgfHwgIV9pc05hdGl2ZUZ1bmN0aW9uKENsYXNzKSkgcmV0dXJuIENsYXNzO1xuXG4gICAgaWYgKHR5cGVvZiBDbGFzcyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBfY2FjaGUgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGlmIChfY2FjaGUuaGFzKENsYXNzKSkgcmV0dXJuIF9jYWNoZS5nZXQoQ2xhc3MpO1xuXG4gICAgICBfY2FjaGUuc2V0KENsYXNzLCBXcmFwcGVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBXcmFwcGVyKCkge1xuICAgICAgcmV0dXJuIF9jb25zdHJ1Y3QoQ2xhc3MsIGFyZ3VtZW50cywgX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yKTtcbiAgICB9XG5cbiAgICBXcmFwcGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQ2xhc3MucHJvdG90eXBlLCB7XG4gICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICB2YWx1ZTogV3JhcHBlcixcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKFdyYXBwZXIsIENsYXNzKTtcbiAgfTtcblxuICByZXR1cm4gX3dyYXBOYXRpdmVTdXBlcihDbGFzcyk7XG59XG5cbmZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5mdW5jdGlvbiBtYWtlUmVhY3RpdmUob2JqKSB7XG4gIHZhciBwcm90byA9IG9iai5fX3Byb3RvX187XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosICdfX3Byb3RvX18nLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gcHJvdG87XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldCh2YWx1ZSkge1xuICAgICAgcHJvdG8uX19wcm90b19fID0gdmFsdWU7XG4gICAgfVxuICB9KTtcbn1cblxudmFyIERvbTcgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9BcnJheSkge1xuICBfaW5oZXJpdHNMb29zZShEb203LCBfQXJyYXkpO1xuXG4gIGZ1bmN0aW9uIERvbTcoaXRlbXMpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9BcnJheS5jYWxsLmFwcGx5KF9BcnJheSwgW3RoaXNdLmNvbmNhdChpdGVtcykpIHx8IHRoaXM7XG4gICAgbWFrZVJlYWN0aXZlKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gRG9tNztcbn0oIC8qI19fUFVSRV9fKi9fd3JhcE5hdGl2ZVN1cGVyKEFycmF5KSk7XG5cbmZ1bmN0aW9uIGFycmF5RmxhdChhcnIpIHtcbiAgaWYgKGFyciA9PT0gdm9pZCAwKSB7XG4gICAgYXJyID0gW107XG4gIH1cblxuICB2YXIgcmVzID0gW107XG4gIGFyci5mb3JFYWNoKGZ1bmN0aW9uIChlbCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGVsKSkge1xuICAgICAgcmVzLnB1c2guYXBwbHkocmVzLCBhcnJheUZsYXQoZWwpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzLnB1c2goZWwpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXM7XG59XG5mdW5jdGlvbiBhcnJheUZpbHRlcihhcnIsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwoYXJyLCBjYWxsYmFjayk7XG59XG5mdW5jdGlvbiBhcnJheVVuaXF1ZShhcnIpIHtcbiAgdmFyIHVuaXF1ZUFycmF5ID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAodW5pcXVlQXJyYXkuaW5kZXhPZihhcnJbaV0pID09PSAtMSkgdW5pcXVlQXJyYXkucHVzaChhcnJbaV0pO1xuICB9XG5cbiAgcmV0dXJuIHVuaXF1ZUFycmF5O1xufVxuZnVuY3Rpb24gdG9DYW1lbENhc2Uoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8tKC4pL2csIGZ1bmN0aW9uIChtYXRjaCwgZ3JvdXApIHtcbiAgICByZXR1cm4gZ3JvdXAudG9VcHBlckNhc2UoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHFzYShzZWxlY3RvciwgY29udGV4dCkge1xuICBpZiAodHlwZW9mIHNlbGVjdG9yICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBbc2VsZWN0b3JdO1xuICB9XG5cbiAgdmFyIGEgPSBbXTtcbiAgdmFyIHJlcyA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBhLnB1c2gocmVzW2ldKTtcbiAgfVxuXG4gIHJldHVybiBhO1xufVxuXG5mdW5jdGlvbiAkKHNlbGVjdG9yLCBjb250ZXh0KSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgdmFyIGRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoKTtcbiAgdmFyIGFyciA9IFtdO1xuXG4gIGlmICghY29udGV4dCAmJiBzZWxlY3RvciBpbnN0YW5jZW9mIERvbTcpIHtcbiAgICByZXR1cm4gc2VsZWN0b3I7XG4gIH1cblxuICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG5ldyBEb203KGFycik7XG4gIH1cblxuICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJykge1xuICAgIHZhciBodG1sID0gc2VsZWN0b3IudHJpbSgpO1xuXG4gICAgaWYgKGh0bWwuaW5kZXhPZignPCcpID49IDAgJiYgaHRtbC5pbmRleE9mKCc+JykgPj0gMCkge1xuICAgICAgdmFyIHRvQ3JlYXRlID0gJ2Rpdic7XG4gICAgICBpZiAoaHRtbC5pbmRleE9mKCc8bGknKSA9PT0gMCkgdG9DcmVhdGUgPSAndWwnO1xuICAgICAgaWYgKGh0bWwuaW5kZXhPZignPHRyJykgPT09IDApIHRvQ3JlYXRlID0gJ3Rib2R5JztcbiAgICAgIGlmIChodG1sLmluZGV4T2YoJzx0ZCcpID09PSAwIHx8IGh0bWwuaW5kZXhPZignPHRoJykgPT09IDApIHRvQ3JlYXRlID0gJ3RyJztcbiAgICAgIGlmIChodG1sLmluZGV4T2YoJzx0Ym9keScpID09PSAwKSB0b0NyZWF0ZSA9ICd0YWJsZSc7XG4gICAgICBpZiAoaHRtbC5pbmRleE9mKCc8b3B0aW9uJykgPT09IDApIHRvQ3JlYXRlID0gJ3NlbGVjdCc7XG4gICAgICB2YXIgdGVtcFBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodG9DcmVhdGUpO1xuICAgICAgdGVtcFBhcmVudC5pbm5lckhUTUwgPSBodG1sO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlbXBQYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBhcnIucHVzaCh0ZW1wUGFyZW50LmNoaWxkTm9kZXNbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhcnIgPSBxc2Eoc2VsZWN0b3IudHJpbSgpLCBjb250ZXh0IHx8IGRvY3VtZW50KTtcbiAgICB9IC8vIGFyciA9IHFzYShzZWxlY3RvciwgZG9jdW1lbnQpO1xuXG4gIH0gZWxzZSBpZiAoc2VsZWN0b3Iubm9kZVR5cGUgfHwgc2VsZWN0b3IgPT09IHdpbmRvdyB8fCBzZWxlY3RvciA9PT0gZG9jdW1lbnQpIHtcbiAgICBhcnIucHVzaChzZWxlY3Rvcik7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3RvcikpIHtcbiAgICBpZiAoc2VsZWN0b3IgaW5zdGFuY2VvZiBEb203KSByZXR1cm4gc2VsZWN0b3I7XG4gICAgYXJyID0gc2VsZWN0b3I7XG4gIH1cblxuICByZXR1cm4gbmV3IERvbTcoYXJyYXlVbmlxdWUoYXJyKSk7XG59XG5cbiQuZm4gPSBEb203LnByb3RvdHlwZTtcblxuZnVuY3Rpb24gYWRkQ2xhc3MoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBjbGFzc2VzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGNsYXNzZXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICB2YXIgY2xhc3NOYW1lcyA9IGFycmF5RmxhdChjbGFzc2VzLm1hcChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjLnNwbGl0KCcgJyk7XG4gIH0pKTtcbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uIChlbCkge1xuICAgIHZhciBfZWwkY2xhc3NMaXN0O1xuXG4gICAgKF9lbCRjbGFzc0xpc3QgPSBlbC5jbGFzc0xpc3QpLmFkZC5hcHBseShfZWwkY2xhc3NMaXN0LCBjbGFzc05hbWVzKTtcbiAgfSk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDbGFzcygpIHtcbiAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBjbGFzc2VzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgY2xhc3Nlc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICB9XG5cbiAgdmFyIGNsYXNzTmFtZXMgPSBhcnJheUZsYXQoY2xhc3Nlcy5tYXAoZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYy5zcGxpdCgnICcpO1xuICB9KSk7XG4gIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHtcbiAgICB2YXIgX2VsJGNsYXNzTGlzdDI7XG5cbiAgICAoX2VsJGNsYXNzTGlzdDIgPSBlbC5jbGFzc0xpc3QpLnJlbW92ZS5hcHBseShfZWwkY2xhc3NMaXN0MiwgY2xhc3NOYW1lcyk7XG4gIH0pO1xuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoKSB7XG4gIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgY2xhc3NlcyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgIGNsYXNzZXNbX2tleTNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgfVxuXG4gIHZhciBjbGFzc05hbWVzID0gYXJyYXlGbGF0KGNsYXNzZXMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGMuc3BsaXQoJyAnKTtcbiAgfSkpO1xuICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgY2xhc3NOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICAgIGVsLmNsYXNzTGlzdC50b2dnbGUoY2xhc3NOYW1lKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhhc0NsYXNzKCkge1xuICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGNsYXNzZXMgPSBuZXcgQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcbiAgICBjbGFzc2VzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07XG4gIH1cblxuICB2YXIgY2xhc3NOYW1lcyA9IGFycmF5RmxhdChjbGFzc2VzLm1hcChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjLnNwbGl0KCcgJyk7XG4gIH0pKTtcbiAgcmV0dXJuIGFycmF5RmlsdGVyKHRoaXMsIGZ1bmN0aW9uIChlbCkge1xuICAgIHJldHVybiBjbGFzc05hbWVzLmZpbHRlcihmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XG4gICAgICByZXR1cm4gZWwuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XG4gICAgfSkubGVuZ3RoID4gMDtcbiAgfSkubGVuZ3RoID4gMDtcbn1cblxuZnVuY3Rpb24gYXR0cihhdHRycywgdmFsdWUpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGF0dHJzID09PSAnc3RyaW5nJykge1xuICAgIC8vIEdldCBhdHRyXG4gICAgaWYgKHRoaXNbMF0pIHJldHVybiB0aGlzWzBdLmdldEF0dHJpYnV0ZShhdHRycyk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSAvLyBTZXQgYXR0cnNcblxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBTdHJpbmdcbiAgICAgIHRoaXNbaV0uc2V0QXR0cmlidXRlKGF0dHJzLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE9iamVjdFxuICAgICAgZm9yICh2YXIgYXR0ck5hbWUgaW4gYXR0cnMpIHtcbiAgICAgICAgdGhpc1tpXVthdHRyTmFtZV0gPSBhdHRyc1thdHRyTmFtZV07XG4gICAgICAgIHRoaXNbaV0uc2V0QXR0cmlidXRlKGF0dHJOYW1lLCBhdHRyc1thdHRyTmFtZV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiByZW1vdmVBdHRyKGF0dHIpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhpc1tpXS5yZW1vdmVBdHRyaWJ1dGUoYXR0cik7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gcHJvcChwcm9wcywgdmFsdWUpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIHByb3BzID09PSAnc3RyaW5nJykge1xuICAgIC8vIEdldCBwcm9wXG4gICAgaWYgKHRoaXNbMF0pIHJldHVybiB0aGlzWzBdW3Byb3BzXTtcbiAgfSBlbHNlIHtcbiAgICAvLyBTZXQgcHJvcHNcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIC8vIFN0cmluZ1xuICAgICAgICB0aGlzW2ldW3Byb3BzXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gT2JqZWN0XG4gICAgICAgIGZvciAodmFyIHByb3BOYW1lIGluIHByb3BzKSB7XG4gICAgICAgICAgdGhpc1tpXVtwcm9wTmFtZV0gPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBkYXRhKGtleSwgdmFsdWUpIHtcbiAgdmFyIGVsO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgZWwgPSB0aGlzWzBdO1xuICAgIGlmICghZWwpIHJldHVybiB1bmRlZmluZWQ7IC8vIEdldCB2YWx1ZVxuXG4gICAgaWYgKGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2UgJiYga2V5IGluIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2UpIHtcbiAgICAgIHJldHVybiBlbC5kb203RWxlbWVudERhdGFTdG9yYWdlW2tleV07XG4gICAgfVxuXG4gICAgdmFyIGRhdGFLZXkgPSBlbC5nZXRBdHRyaWJ1dGUoXCJkYXRhLVwiICsga2V5KTtcblxuICAgIGlmIChkYXRhS2V5KSB7XG4gICAgICByZXR1cm4gZGF0YUtleTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IC8vIFNldCB2YWx1ZVxuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgZWwgPSB0aGlzW2ldO1xuICAgIGlmICghZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZSkgZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZSA9IHt9O1xuICAgIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2Vba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZURhdGEoa2V5KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBlbCA9IHRoaXNbaV07XG5cbiAgICBpZiAoZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZSAmJiBlbC5kb203RWxlbWVudERhdGFTdG9yYWdlW2tleV0pIHtcbiAgICAgIGVsLmRvbTdFbGVtZW50RGF0YVN0b3JhZ2Vba2V5XSA9IG51bGw7XG4gICAgICBkZWxldGUgZWwuZG9tN0VsZW1lbnREYXRhU3RvcmFnZVtrZXldO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkYXRhc2V0KCkge1xuICB2YXIgZWwgPSB0aGlzWzBdO1xuICBpZiAoIWVsKSByZXR1cm4gdW5kZWZpbmVkO1xuICB2YXIgZGF0YXNldCA9IHt9OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgaWYgKGVsLmRhdGFzZXQpIHtcbiAgICBmb3IgKHZhciBkYXRhS2V5IGluIGVsLmRhdGFzZXQpIHtcbiAgICAgIGRhdGFzZXRbZGF0YUtleV0gPSBlbC5kYXRhc2V0W2RhdGFLZXldO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVsLmF0dHJpYnV0ZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHZhciBfYXR0ciA9IGVsLmF0dHJpYnV0ZXNbaV07XG5cbiAgICAgIGlmIChfYXR0ci5uYW1lLmluZGV4T2YoJ2RhdGEtJykgPj0gMCkge1xuICAgICAgICBkYXRhc2V0W3RvQ2FtZWxDYXNlKF9hdHRyLm5hbWUuc3BsaXQoJ2RhdGEtJylbMV0pXSA9IF9hdHRyLnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGtleSBpbiBkYXRhc2V0KSB7XG4gICAgaWYgKGRhdGFzZXRba2V5XSA9PT0gJ2ZhbHNlJykgZGF0YXNldFtrZXldID0gZmFsc2U7ZWxzZSBpZiAoZGF0YXNldFtrZXldID09PSAndHJ1ZScpIGRhdGFzZXRba2V5XSA9IHRydWU7ZWxzZSBpZiAocGFyc2VGbG9hdChkYXRhc2V0W2tleV0pID09PSBkYXRhc2V0W2tleV0gKiAxKSBkYXRhc2V0W2tleV0gKj0gMTtcbiAgfVxuXG4gIHJldHVybiBkYXRhc2V0O1xufVxuXG5mdW5jdGlvbiB2YWwodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBnZXQgdmFsdWVcbiAgICB2YXIgZWwgPSB0aGlzWzBdO1xuICAgIGlmICghZWwpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZWwubXVsdGlwbGUgJiYgZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbC5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdmFsdWVzLnB1c2goZWwuc2VsZWN0ZWRPcHRpb25zW2ldLnZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICB9XG5cbiAgICByZXR1cm4gZWwudmFsdWU7XG4gIH0gLy8gc2V0IHZhbHVlXG5cblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdGhpcy5sZW5ndGg7IF9pICs9IDEpIHtcbiAgICB2YXIgX2VsID0gdGhpc1tfaV07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgX2VsLm11bHRpcGxlICYmIF9lbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnc2VsZWN0Jykge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBfZWwub3B0aW9ucy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICBfZWwub3B0aW9uc1tqXS5zZWxlY3RlZCA9IHZhbHVlLmluZGV4T2YoX2VsLm9wdGlvbnNbal0udmFsdWUpID49IDA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIF9lbC52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiB2YWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdGhpcy52YWwodmFsdWUpO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm0odHJhbnNmb3JtKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHRoaXNbaV0uc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHRyYW5zaXRpb24oZHVyYXRpb24pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhpc1tpXS5zdHlsZS50cmFuc2l0aW9uRHVyYXRpb24gPSB0eXBlb2YgZHVyYXRpb24gIT09ICdzdHJpbmcnID8gZHVyYXRpb24gKyBcIm1zXCIgOiBkdXJhdGlvbjtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBvbigpIHtcbiAgZm9yICh2YXIgX2xlbjUgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW41KSwgX2tleTUgPSAwOyBfa2V5NSA8IF9sZW41OyBfa2V5NSsrKSB7XG4gICAgYXJnc1tfa2V5NV0gPSBhcmd1bWVudHNbX2tleTVdO1xuICB9XG5cbiAgdmFyIGV2ZW50VHlwZSA9IGFyZ3NbMF0sXG4gICAgICB0YXJnZXRTZWxlY3RvciA9IGFyZ3NbMV0sXG4gICAgICBsaXN0ZW5lciA9IGFyZ3NbMl0sXG4gICAgICBjYXB0dXJlID0gYXJnc1szXTtcblxuICBpZiAodHlwZW9mIGFyZ3NbMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICBldmVudFR5cGUgPSBhcmdzWzBdO1xuICAgIGxpc3RlbmVyID0gYXJnc1sxXTtcbiAgICBjYXB0dXJlID0gYXJnc1syXTtcbiAgICB0YXJnZXRTZWxlY3RvciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICghY2FwdHVyZSkgY2FwdHVyZSA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZUxpdmVFdmVudChlKSB7XG4gICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0O1xuICAgIGlmICghdGFyZ2V0KSByZXR1cm47XG4gICAgdmFyIGV2ZW50RGF0YSA9IGUudGFyZ2V0LmRvbTdFdmVudERhdGEgfHwgW107XG5cbiAgICBpZiAoZXZlbnREYXRhLmluZGV4T2YoZSkgPCAwKSB7XG4gICAgICBldmVudERhdGEudW5zaGlmdChlKTtcbiAgICB9XG5cbiAgICBpZiAoJCh0YXJnZXQpLmlzKHRhcmdldFNlbGVjdG9yKSkgbGlzdGVuZXIuYXBwbHkodGFyZ2V0LCBldmVudERhdGEpO2Vsc2Uge1xuICAgICAgdmFyIF9wYXJlbnRzID0gJCh0YXJnZXQpLnBhcmVudHMoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG5cbiAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgX3BhcmVudHMubGVuZ3RoOyBrICs9IDEpIHtcbiAgICAgICAgaWYgKCQoX3BhcmVudHNba10pLmlzKHRhcmdldFNlbGVjdG9yKSkgbGlzdGVuZXIuYXBwbHkoX3BhcmVudHNba10sIGV2ZW50RGF0YSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlRXZlbnQoZSkge1xuICAgIHZhciBldmVudERhdGEgPSBlICYmIGUudGFyZ2V0ID8gZS50YXJnZXQuZG9tN0V2ZW50RGF0YSB8fCBbXSA6IFtdO1xuXG4gICAgaWYgKGV2ZW50RGF0YS5pbmRleE9mKGUpIDwgMCkge1xuICAgICAgZXZlbnREYXRhLnVuc2hpZnQoZSk7XG4gICAgfVxuXG4gICAgbGlzdGVuZXIuYXBwbHkodGhpcywgZXZlbnREYXRhKTtcbiAgfVxuXG4gIHZhciBldmVudHMgPSBldmVudFR5cGUuc3BsaXQoJyAnKTtcbiAgdmFyIGo7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIGVsID0gdGhpc1tpXTtcblxuICAgIGlmICghdGFyZ2V0U2VsZWN0b3IpIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBldmVudHMubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0gZXZlbnRzW2pdO1xuICAgICAgICBpZiAoIWVsLmRvbTdMaXN0ZW5lcnMpIGVsLmRvbTdMaXN0ZW5lcnMgPSB7fTtcbiAgICAgICAgaWYgKCFlbC5kb203TGlzdGVuZXJzW2V2ZW50XSkgZWwuZG9tN0xpc3RlbmVyc1tldmVudF0gPSBbXTtcbiAgICAgICAgZWwuZG9tN0xpc3RlbmVyc1tldmVudF0ucHVzaCh7XG4gICAgICAgICAgbGlzdGVuZXI6IGxpc3RlbmVyLFxuICAgICAgICAgIHByb3h5TGlzdGVuZXI6IGhhbmRsZUV2ZW50XG4gICAgICAgIH0pO1xuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVFdmVudCwgY2FwdHVyZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpdmUgZXZlbnRzXG4gICAgICBmb3IgKGogPSAwOyBqIDwgZXZlbnRzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIHZhciBfZXZlbnQgPSBldmVudHNbal07XG4gICAgICAgIGlmICghZWwuZG9tN0xpdmVMaXN0ZW5lcnMpIGVsLmRvbTdMaXZlTGlzdGVuZXJzID0ge307XG4gICAgICAgIGlmICghZWwuZG9tN0xpdmVMaXN0ZW5lcnNbX2V2ZW50XSkgZWwuZG9tN0xpdmVMaXN0ZW5lcnNbX2V2ZW50XSA9IFtdO1xuXG4gICAgICAgIGVsLmRvbTdMaXZlTGlzdGVuZXJzW19ldmVudF0ucHVzaCh7XG4gICAgICAgICAgbGlzdGVuZXI6IGxpc3RlbmVyLFxuICAgICAgICAgIHByb3h5TGlzdGVuZXI6IGhhbmRsZUxpdmVFdmVudFxuICAgICAgICB9KTtcblxuICAgICAgICBlbC5hZGRFdmVudExpc3RlbmVyKF9ldmVudCwgaGFuZGxlTGl2ZUV2ZW50LCBjYXB0dXJlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gb2ZmKCkge1xuICBmb3IgKHZhciBfbGVuNiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjYpLCBfa2V5NiA9IDA7IF9rZXk2IDwgX2xlbjY7IF9rZXk2KyspIHtcbiAgICBhcmdzW19rZXk2XSA9IGFyZ3VtZW50c1tfa2V5Nl07XG4gIH1cblxuICB2YXIgZXZlbnRUeXBlID0gYXJnc1swXSxcbiAgICAgIHRhcmdldFNlbGVjdG9yID0gYXJnc1sxXSxcbiAgICAgIGxpc3RlbmVyID0gYXJnc1syXSxcbiAgICAgIGNhcHR1cmUgPSBhcmdzWzNdO1xuXG4gIGlmICh0eXBlb2YgYXJnc1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGV2ZW50VHlwZSA9IGFyZ3NbMF07XG4gICAgbGlzdGVuZXIgPSBhcmdzWzFdO1xuICAgIGNhcHR1cmUgPSBhcmdzWzJdO1xuICAgIHRhcmdldFNlbGVjdG9yID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFjYXB0dXJlKSBjYXB0dXJlID0gZmFsc2U7XG4gIHZhciBldmVudHMgPSBldmVudFR5cGUuc3BsaXQoJyAnKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBldmVudCA9IGV2ZW50c1tpXTtcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgdmFyIGVsID0gdGhpc1tqXTtcbiAgICAgIHZhciBoYW5kbGVycyA9IHZvaWQgMDtcblxuICAgICAgaWYgKCF0YXJnZXRTZWxlY3RvciAmJiBlbC5kb203TGlzdGVuZXJzKSB7XG4gICAgICAgIGhhbmRsZXJzID0gZWwuZG9tN0xpc3RlbmVyc1tldmVudF07XG4gICAgICB9IGVsc2UgaWYgKHRhcmdldFNlbGVjdG9yICYmIGVsLmRvbTdMaXZlTGlzdGVuZXJzKSB7XG4gICAgICAgIGhhbmRsZXJzID0gZWwuZG9tN0xpdmVMaXN0ZW5lcnNbZXZlbnRdO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFuZGxlcnMgJiYgaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICAgIGZvciAodmFyIGsgPSBoYW5kbGVycy5sZW5ndGggLSAxOyBrID49IDA7IGsgLT0gMSkge1xuICAgICAgICAgIHZhciBoYW5kbGVyID0gaGFuZGxlcnNba107XG5cbiAgICAgICAgICBpZiAobGlzdGVuZXIgJiYgaGFuZGxlci5saXN0ZW5lciA9PT0gbGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIucHJveHlMaXN0ZW5lciwgY2FwdHVyZSk7XG4gICAgICAgICAgICBoYW5kbGVycy5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChsaXN0ZW5lciAmJiBoYW5kbGVyLmxpc3RlbmVyICYmIGhhbmRsZXIubGlzdGVuZXIuZG9tN3Byb3h5ICYmIGhhbmRsZXIubGlzdGVuZXIuZG9tN3Byb3h5ID09PSBsaXN0ZW5lcikge1xuICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlci5wcm94eUxpc3RlbmVyLCBjYXB0dXJlKTtcbiAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZShrLCAxKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFsaXN0ZW5lcikge1xuICAgICAgICAgICAgZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlci5wcm94eUxpc3RlbmVyLCBjYXB0dXJlKTtcbiAgICAgICAgICAgIGhhbmRsZXJzLnNwbGljZShrLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gb25jZSgpIHtcbiAgdmFyIGRvbSA9IHRoaXM7XG5cbiAgZm9yICh2YXIgX2xlbjcgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW43KSwgX2tleTcgPSAwOyBfa2V5NyA8IF9sZW43OyBfa2V5NysrKSB7XG4gICAgYXJnc1tfa2V5N10gPSBhcmd1bWVudHNbX2tleTddO1xuICB9XG5cbiAgdmFyIGV2ZW50TmFtZSA9IGFyZ3NbMF0sXG4gICAgICB0YXJnZXRTZWxlY3RvciA9IGFyZ3NbMV0sXG4gICAgICBsaXN0ZW5lciA9IGFyZ3NbMl0sXG4gICAgICBjYXB0dXJlID0gYXJnc1szXTtcblxuICBpZiAodHlwZW9mIGFyZ3NbMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICBldmVudE5hbWUgPSBhcmdzWzBdO1xuICAgIGxpc3RlbmVyID0gYXJnc1sxXTtcbiAgICBjYXB0dXJlID0gYXJnc1syXTtcbiAgICB0YXJnZXRTZWxlY3RvciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uY2VIYW5kbGVyKCkge1xuICAgIGZvciAodmFyIF9sZW44ID0gYXJndW1lbnRzLmxlbmd0aCwgZXZlbnRBcmdzID0gbmV3IEFycmF5KF9sZW44KSwgX2tleTggPSAwOyBfa2V5OCA8IF9sZW44OyBfa2V5OCsrKSB7XG4gICAgICBldmVudEFyZ3NbX2tleThdID0gYXJndW1lbnRzW19rZXk4XTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBldmVudEFyZ3MpO1xuICAgIGRvbS5vZmYoZXZlbnROYW1lLCB0YXJnZXRTZWxlY3Rvciwgb25jZUhhbmRsZXIsIGNhcHR1cmUpO1xuXG4gICAgaWYgKG9uY2VIYW5kbGVyLmRvbTdwcm94eSkge1xuICAgICAgZGVsZXRlIG9uY2VIYW5kbGVyLmRvbTdwcm94eTtcbiAgICB9XG4gIH1cblxuICBvbmNlSGFuZGxlci5kb203cHJveHkgPSBsaXN0ZW5lcjtcbiAgcmV0dXJuIGRvbS5vbihldmVudE5hbWUsIHRhcmdldFNlbGVjdG9yLCBvbmNlSGFuZGxlciwgY2FwdHVyZSk7XG59XG5cbmZ1bmN0aW9uIHRyaWdnZXIoKSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuICBmb3IgKHZhciBfbGVuOSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjkpLCBfa2V5OSA9IDA7IF9rZXk5IDwgX2xlbjk7IF9rZXk5KyspIHtcbiAgICBhcmdzW19rZXk5XSA9IGFyZ3VtZW50c1tfa2V5OV07XG4gIH1cblxuICB2YXIgZXZlbnRzID0gYXJnc1swXS5zcGxpdCgnICcpO1xuICB2YXIgZXZlbnREYXRhID0gYXJnc1sxXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBldmVudCA9IGV2ZW50c1tpXTtcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgdmFyIGVsID0gdGhpc1tqXTtcblxuICAgICAgaWYgKHdpbmRvdy5DdXN0b21FdmVudCkge1xuICAgICAgICB2YXIgZXZ0ID0gbmV3IHdpbmRvdy5DdXN0b21FdmVudChldmVudCwge1xuICAgICAgICAgIGRldGFpbDogZXZlbnREYXRhLFxuICAgICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgZWwuZG9tN0V2ZW50RGF0YSA9IGFyZ3MuZmlsdGVyKGZ1bmN0aW9uIChkYXRhLCBkYXRhSW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gZGF0YUluZGV4ID4gMDtcbiAgICAgICAgfSk7XG4gICAgICAgIGVsLmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICAgICAgZWwuZG9tN0V2ZW50RGF0YSA9IFtdO1xuICAgICAgICBkZWxldGUgZWwuZG9tN0V2ZW50RGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gdHJhbnNpdGlvbkVuZChjYWxsYmFjaykge1xuICB2YXIgZG9tID0gdGhpcztcblxuICBmdW5jdGlvbiBmaXJlQ2FsbEJhY2soZSkge1xuICAgIGlmIChlLnRhcmdldCAhPT0gdGhpcykgcmV0dXJuO1xuICAgIGNhbGxiYWNrLmNhbGwodGhpcywgZSk7XG4gICAgZG9tLm9mZigndHJhbnNpdGlvbmVuZCcsIGZpcmVDYWxsQmFjayk7XG4gIH1cblxuICBpZiAoY2FsbGJhY2spIHtcbiAgICBkb20ub24oJ3RyYW5zaXRpb25lbmQnLCBmaXJlQ2FsbEJhY2spO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIGFuaW1hdGlvbkVuZChjYWxsYmFjaykge1xuICB2YXIgZG9tID0gdGhpcztcblxuICBmdW5jdGlvbiBmaXJlQ2FsbEJhY2soZSkge1xuICAgIGlmIChlLnRhcmdldCAhPT0gdGhpcykgcmV0dXJuO1xuICAgIGNhbGxiYWNrLmNhbGwodGhpcywgZSk7XG4gICAgZG9tLm9mZignYW5pbWF0aW9uZW5kJywgZmlyZUNhbGxCYWNrKTtcbiAgfVxuXG4gIGlmIChjYWxsYmFjaykge1xuICAgIGRvbS5vbignYW5pbWF0aW9uZW5kJywgZmlyZUNhbGxCYWNrKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiB3aWR0aCgpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuXG4gIGlmICh0aGlzWzBdID09PSB3aW5kb3cpIHtcbiAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGg7XG4gIH1cblxuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodGhpcy5jc3MoJ3dpZHRoJykpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIG91dGVyV2lkdGgoaW5jbHVkZU1hcmdpbnMpIHtcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIGlmIChpbmNsdWRlTWFyZ2lucykge1xuICAgICAgdmFyIF9zdHlsZXMgPSB0aGlzLnN0eWxlcygpO1xuXG4gICAgICByZXR1cm4gdGhpc1swXS5vZmZzZXRXaWR0aCArIHBhcnNlRmxvYXQoX3N0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdtYXJnaW4tcmlnaHQnKSkgKyBwYXJzZUZsb2F0KF9zdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgnbWFyZ2luLWxlZnQnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNbMF0ub2Zmc2V0V2lkdGg7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gaGVpZ2h0KCkge1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG5cbiAgaWYgKHRoaXNbMF0gPT09IHdpbmRvdykge1xuICAgIHJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gIH1cblxuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodGhpcy5jc3MoJ2hlaWdodCcpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBvdXRlckhlaWdodChpbmNsdWRlTWFyZ2lucykge1xuICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgaWYgKGluY2x1ZGVNYXJnaW5zKSB7XG4gICAgICB2YXIgX3N0eWxlczIgPSB0aGlzLnN0eWxlcygpO1xuXG4gICAgICByZXR1cm4gdGhpc1swXS5vZmZzZXRIZWlnaHQgKyBwYXJzZUZsb2F0KF9zdHlsZXMyLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi10b3AnKSkgKyBwYXJzZUZsb2F0KF9zdHlsZXMyLmdldFByb3BlcnR5VmFsdWUoJ21hcmdpbi1ib3R0b20nKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNbMF0ub2Zmc2V0SGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIG9mZnNldCgpIHtcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgICB2YXIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuICAgIHZhciBlbCA9IHRoaXNbMF07XG4gICAgdmFyIGJveCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHZhciBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgICB2YXIgY2xpZW50VG9wID0gZWwuY2xpZW50VG9wIHx8IGJvZHkuY2xpZW50VG9wIHx8IDA7XG4gICAgdmFyIGNsaWVudExlZnQgPSBlbC5jbGllbnRMZWZ0IHx8IGJvZHkuY2xpZW50TGVmdCB8fCAwO1xuICAgIHZhciBzY3JvbGxUb3AgPSBlbCA9PT0gd2luZG93ID8gd2luZG93LnNjcm9sbFkgOiBlbC5zY3JvbGxUb3A7XG4gICAgdmFyIHNjcm9sbExlZnQgPSBlbCA9PT0gd2luZG93ID8gd2luZG93LnNjcm9sbFggOiBlbC5zY3JvbGxMZWZ0O1xuICAgIHJldHVybiB7XG4gICAgICB0b3A6IGJveC50b3AgKyBzY3JvbGxUb3AgLSBjbGllbnRUb3AsXG4gICAgICBsZWZ0OiBib3gubGVmdCArIHNjcm9sbExlZnQgLSBjbGllbnRMZWZ0XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBoaWRlKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGlzW2ldLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gc2hvdygpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdygpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBlbCA9IHRoaXNbaV07XG5cbiAgICBpZiAoZWwuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICBlbC5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgfVxuXG4gICAgaWYgKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdkaXNwbGF5JykgPT09ICdub25lJykge1xuICAgICAgLy8gU3RpbGwgbm90IHZpc2libGVcbiAgICAgIGVsLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBzdHlsZXMoKSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgaWYgKHRoaXNbMF0pIHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzWzBdLCBudWxsKTtcbiAgcmV0dXJuIHt9O1xufVxuXG5mdW5jdGlvbiBjc3MocHJvcHMsIHZhbHVlKSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgdmFyIGk7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAodHlwZW9mIHByb3BzID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gLmNzcygnd2lkdGgnKVxuICAgICAgaWYgKHRoaXNbMF0pIHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzWzBdLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gLmNzcyh7IHdpZHRoOiAnMTAwcHgnIH0pXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBmb3IgKHZhciBfcHJvcCBpbiBwcm9wcykge1xuICAgICAgICAgIHRoaXNbaV0uc3R5bGVbX3Byb3BdID0gcHJvcHNbX3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyICYmIHR5cGVvZiBwcm9wcyA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyAuY3NzKCd3aWR0aCcsICcxMDBweCcpXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIHRoaXNbaV0uc3R5bGVbcHJvcHNdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gZWFjaChjYWxsYmFjaykge1xuICBpZiAoIWNhbGxiYWNrKSByZXR1cm4gdGhpcztcbiAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uIChlbCwgaW5kZXgpIHtcbiAgICBjYWxsYmFjay5hcHBseShlbCwgW2VsLCBpbmRleF0pO1xuICB9KTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIGZpbHRlcihjYWxsYmFjaykge1xuICB2YXIgcmVzdWx0ID0gYXJyYXlGaWx0ZXIodGhpcywgY2FsbGJhY2spO1xuICByZXR1cm4gJChyZXN1bHQpO1xufVxuXG5mdW5jdGlvbiBodG1sKGh0bWwpIHtcbiAgaWYgKHR5cGVvZiBodG1sID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0aGlzWzBdID8gdGhpc1swXS5pbm5lckhUTUwgOiBudWxsO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhpc1tpXS5pbm5lckhUTUwgPSBodG1sO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHRleHQodGV4dCkge1xuICBpZiAodHlwZW9mIHRleHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRoaXNbMF0gPyB0aGlzWzBdLnRleHRDb250ZW50LnRyaW0oKSA6IG51bGw7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGlzW2ldLnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBpcyhzZWxlY3Rvcikge1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KCk7XG4gIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gIHZhciBlbCA9IHRoaXNbMF07XG4gIHZhciBjb21wYXJlV2l0aDtcbiAgdmFyIGk7XG4gIGlmICghZWwgfHwgdHlwZW9mIHNlbGVjdG9yID09PSAndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGVsLm1hdGNoZXMpIHJldHVybiBlbC5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgICBpZiAoZWwud2Via2l0TWF0Y2hlc1NlbGVjdG9yKSByZXR1cm4gZWwud2Via2l0TWF0Y2hlc1NlbGVjdG9yKHNlbGVjdG9yKTtcbiAgICBpZiAoZWwubXNNYXRjaGVzU2VsZWN0b3IpIHJldHVybiBlbC5tc01hdGNoZXNTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgY29tcGFyZVdpdGggPSAkKHNlbGVjdG9yKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBjb21wYXJlV2l0aC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgaWYgKGNvbXBhcmVXaXRoW2ldID09PSBlbCkgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHNlbGVjdG9yID09PSBkb2N1bWVudCkge1xuICAgIHJldHVybiBlbCA9PT0gZG9jdW1lbnQ7XG4gIH1cblxuICBpZiAoc2VsZWN0b3IgPT09IHdpbmRvdykge1xuICAgIHJldHVybiBlbCA9PT0gd2luZG93O1xuICB9XG5cbiAgaWYgKHNlbGVjdG9yLm5vZGVUeXBlIHx8IHNlbGVjdG9yIGluc3RhbmNlb2YgRG9tNykge1xuICAgIGNvbXBhcmVXaXRoID0gc2VsZWN0b3Iubm9kZVR5cGUgPyBbc2VsZWN0b3JdIDogc2VsZWN0b3I7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgY29tcGFyZVdpdGgubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmIChjb21wYXJlV2l0aFtpXSA9PT0gZWwpIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaW5kZXgoKSB7XG4gIHZhciBjaGlsZCA9IHRoaXNbMF07XG4gIHZhciBpO1xuXG4gIGlmIChjaGlsZCkge1xuICAgIGkgPSAwOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcblxuICAgIHdoaWxlICgoY2hpbGQgPSBjaGlsZC5wcmV2aW91c1NpYmxpbmcpICE9PSBudWxsKSB7XG4gICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDEpIGkgKz0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gaTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGVxKGluZGV4KSB7XG4gIGlmICh0eXBlb2YgaW5kZXggPT09ICd1bmRlZmluZWQnKSByZXR1cm4gdGhpcztcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuXG4gIGlmIChpbmRleCA+IGxlbmd0aCAtIDEpIHtcbiAgICByZXR1cm4gJChbXSk7XG4gIH1cblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgdmFyIHJldHVybkluZGV4ID0gbGVuZ3RoICsgaW5kZXg7XG4gICAgaWYgKHJldHVybkluZGV4IDwgMCkgcmV0dXJuICQoW10pO1xuICAgIHJldHVybiAkKFt0aGlzW3JldHVybkluZGV4XV0pO1xuICB9XG5cbiAgcmV0dXJuICQoW3RoaXNbaW5kZXhdXSk7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZCgpIHtcbiAgdmFyIG5ld0NoaWxkO1xuICB2YXIgZG9jdW1lbnQgPSBnZXREb2N1bWVudCgpO1xuXG4gIGZvciAodmFyIGsgPSAwOyBrIDwgYXJndW1lbnRzLmxlbmd0aDsgayArPSAxKSB7XG4gICAgbmV3Q2hpbGQgPSBrIDwgMCB8fCBhcmd1bWVudHMubGVuZ3RoIDw9IGsgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNba107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhciB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRlbXBEaXYuaW5uZXJIVE1MID0gbmV3Q2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKHRlbXBEaXYuZmlyc3RDaGlsZCkge1xuICAgICAgICAgIHRoaXNbaV0uYXBwZW5kQ2hpbGQodGVtcERpdi5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChuZXdDaGlsZCBpbnN0YW5jZW9mIERvbTcpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuZXdDaGlsZC5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgIHRoaXNbaV0uYXBwZW5kQ2hpbGQobmV3Q2hpbGRbal0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW2ldLmFwcGVuZENoaWxkKG5ld0NoaWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gYXBwZW5kVG8ocGFyZW50KSB7XG4gICQocGFyZW50KS5hcHBlbmQodGhpcyk7XG4gIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBwcmVwZW5kKG5ld0NoaWxkKSB7XG4gIHZhciBkb2N1bWVudCA9IGdldERvY3VtZW50KCk7XG4gIHZhciBpO1xuICB2YXIgajtcblxuICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgdGVtcERpdi5pbm5lckhUTUwgPSBuZXdDaGlsZDtcblxuICAgICAgZm9yIChqID0gdGVtcERpdi5jaGlsZE5vZGVzLmxlbmd0aCAtIDE7IGogPj0gMDsgaiAtPSAxKSB7XG4gICAgICAgIHRoaXNbaV0uaW5zZXJ0QmVmb3JlKHRlbXBEaXYuY2hpbGROb2Rlc1tqXSwgdGhpc1tpXS5jaGlsZE5vZGVzWzBdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgRG9tNykge1xuICAgICAgZm9yIChqID0gMDsgaiA8IG5ld0NoaWxkLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIHRoaXNbaV0uaW5zZXJ0QmVmb3JlKG5ld0NoaWxkW2pdLCB0aGlzW2ldLmNoaWxkTm9kZXNbMF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2ldLmluc2VydEJlZm9yZShuZXdDaGlsZCwgdGhpc1tpXS5jaGlsZE5vZGVzWzBdKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gcHJlcGVuZFRvKHBhcmVudCkge1xuICAkKHBhcmVudCkucHJlcGVuZCh0aGlzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIGluc2VydEJlZm9yZShzZWxlY3Rvcikge1xuICB2YXIgYmVmb3JlID0gJChzZWxlY3Rvcik7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGJlZm9yZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGJlZm9yZVswXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzW2ldLCBiZWZvcmVbMF0pO1xuICAgIH0gZWxzZSBpZiAoYmVmb3JlLmxlbmd0aCA+IDEpIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYmVmb3JlLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIGJlZm9yZVtqXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzW2ldLmNsb25lTm9kZSh0cnVlKSwgYmVmb3JlW2pdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zZXJ0QWZ0ZXIoc2VsZWN0b3IpIHtcbiAgdmFyIGFmdGVyID0gJChzZWxlY3Rvcik7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGFmdGVyLmxlbmd0aCA9PT0gMSkge1xuICAgICAgYWZ0ZXJbMF0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpc1tpXSwgYWZ0ZXJbMF0ubmV4dFNpYmxpbmcpO1xuICAgIH0gZWxzZSBpZiAoYWZ0ZXIubGVuZ3RoID4gMSkge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhZnRlci5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICBhZnRlcltqXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzW2ldLmNsb25lTm9kZSh0cnVlKSwgYWZ0ZXJbal0ubmV4dFNpYmxpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBuZXh0KHNlbGVjdG9yKSB7XG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgIGlmICh0aGlzWzBdLm5leHRFbGVtZW50U2libGluZyAmJiAkKHRoaXNbMF0ubmV4dEVsZW1lbnRTaWJsaW5nKS5pcyhzZWxlY3RvcikpIHtcbiAgICAgICAgcmV0dXJuICQoW3RoaXNbMF0ubmV4dEVsZW1lbnRTaWJsaW5nXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAkKFtdKTtcbiAgICB9XG5cbiAgICBpZiAodGhpc1swXS5uZXh0RWxlbWVudFNpYmxpbmcpIHJldHVybiAkKFt0aGlzWzBdLm5leHRFbGVtZW50U2libGluZ10pO1xuICAgIHJldHVybiAkKFtdKTtcbiAgfVxuXG4gIHJldHVybiAkKFtdKTtcbn1cblxuZnVuY3Rpb24gbmV4dEFsbChzZWxlY3Rvcikge1xuICB2YXIgbmV4dEVscyA9IFtdO1xuICB2YXIgZWwgPSB0aGlzWzBdO1xuICBpZiAoIWVsKSByZXR1cm4gJChbXSk7XG5cbiAgd2hpbGUgKGVsLm5leHRFbGVtZW50U2libGluZykge1xuICAgIHZhciBfbmV4dCA9IGVsLm5leHRFbGVtZW50U2libGluZzsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICBpZiAoJChfbmV4dCkuaXMoc2VsZWN0b3IpKSBuZXh0RWxzLnB1c2goX25leHQpO1xuICAgIH0gZWxzZSBuZXh0RWxzLnB1c2goX25leHQpO1xuXG4gICAgZWwgPSBfbmV4dDtcbiAgfVxuXG4gIHJldHVybiAkKG5leHRFbHMpO1xufVxuXG5mdW5jdGlvbiBwcmV2KHNlbGVjdG9yKSB7XG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgZWwgPSB0aGlzWzBdO1xuXG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICBpZiAoZWwucHJldmlvdXNFbGVtZW50U2libGluZyAmJiAkKGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpLmlzKHNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gJChbZWwucHJldmlvdXNFbGVtZW50U2libGluZ10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gJChbXSk7XG4gICAgfVxuXG4gICAgaWYgKGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHJldHVybiAkKFtlbC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nXSk7XG4gICAgcmV0dXJuICQoW10pO1xuICB9XG5cbiAgcmV0dXJuICQoW10pO1xufVxuXG5mdW5jdGlvbiBwcmV2QWxsKHNlbGVjdG9yKSB7XG4gIHZhciBwcmV2RWxzID0gW107XG4gIHZhciBlbCA9IHRoaXNbMF07XG4gIGlmICghZWwpIHJldHVybiAkKFtdKTtcblxuICB3aGlsZSAoZWwucHJldmlvdXNFbGVtZW50U2libGluZykge1xuICAgIHZhciBfcHJldiA9IGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgaWYgKCQoX3ByZXYpLmlzKHNlbGVjdG9yKSkgcHJldkVscy5wdXNoKF9wcmV2KTtcbiAgICB9IGVsc2UgcHJldkVscy5wdXNoKF9wcmV2KTtcblxuICAgIGVsID0gX3ByZXY7XG4gIH1cblxuICByZXR1cm4gJChwcmV2RWxzKTtcbn1cblxuZnVuY3Rpb24gc2libGluZ3Moc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHRoaXMubmV4dEFsbChzZWxlY3RvcikuYWRkKHRoaXMucHJldkFsbChzZWxlY3RvcikpO1xufVxuXG5mdW5jdGlvbiBwYXJlbnQoc2VsZWN0b3IpIHtcbiAgdmFyIHBhcmVudHMgPSBbXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGlmICh0aGlzW2ldLnBhcmVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICBpZiAoJCh0aGlzW2ldLnBhcmVudE5vZGUpLmlzKHNlbGVjdG9yKSkgcGFyZW50cy5wdXNoKHRoaXNbaV0ucGFyZW50Tm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJlbnRzLnB1c2godGhpc1tpXS5wYXJlbnROb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gJChwYXJlbnRzKTtcbn1cblxuZnVuY3Rpb24gcGFyZW50cyhzZWxlY3Rvcikge1xuICB2YXIgcGFyZW50cyA9IFtdOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIF9wYXJlbnQgPSB0aGlzW2ldLnBhcmVudE5vZGU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIHdoaWxlIChfcGFyZW50KSB7XG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKCQoX3BhcmVudCkuaXMoc2VsZWN0b3IpKSBwYXJlbnRzLnB1c2goX3BhcmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJlbnRzLnB1c2goX3BhcmVudCk7XG4gICAgICB9XG5cbiAgICAgIF9wYXJlbnQgPSBfcGFyZW50LnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICQocGFyZW50cyk7XG59XG5cbmZ1bmN0aW9uIGNsb3Nlc3Qoc2VsZWN0b3IpIHtcbiAgdmFyIGNsb3Nlc3QgPSB0aGlzOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgaWYgKHR5cGVvZiBzZWxlY3RvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gJChbXSk7XG4gIH1cblxuICBpZiAoIWNsb3Nlc3QuaXMoc2VsZWN0b3IpKSB7XG4gICAgY2xvc2VzdCA9IGNsb3Nlc3QucGFyZW50cyhzZWxlY3RvcikuZXEoMCk7XG4gIH1cblxuICByZXR1cm4gY2xvc2VzdDtcbn1cblxuZnVuY3Rpb24gZmluZChzZWxlY3Rvcikge1xuICB2YXIgZm91bmRFbGVtZW50cyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBmb3VuZCA9IHRoaXNbaV0ucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGZvdW5kLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICBmb3VuZEVsZW1lbnRzLnB1c2goZm91bmRbal0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAkKGZvdW5kRWxlbWVudHMpO1xufVxuXG5mdW5jdGlvbiBjaGlsZHJlbihzZWxlY3Rvcikge1xuICB2YXIgY2hpbGRyZW4gPSBbXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIHZhciBjaGlsZE5vZGVzID0gdGhpc1tpXS5jaGlsZHJlbjtcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2hpbGROb2Rlcy5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgaWYgKCFzZWxlY3RvciB8fCAkKGNoaWxkTm9kZXNbal0pLmlzKHNlbGVjdG9yKSkge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkTm9kZXNbal0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAkKGNoaWxkcmVuKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAodGhpc1tpXS5wYXJlbnROb2RlKSB0aGlzW2ldLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpc1tpXSk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gZGV0YWNoKCkge1xuICByZXR1cm4gdGhpcy5yZW1vdmUoKTtcbn1cblxuZnVuY3Rpb24gYWRkKCkge1xuICB2YXIgZG9tID0gdGhpcztcbiAgdmFyIGk7XG4gIHZhciBqO1xuXG4gIGZvciAodmFyIF9sZW4xMCA9IGFyZ3VtZW50cy5sZW5ndGgsIGVscyA9IG5ldyBBcnJheShfbGVuMTApLCBfa2V5MTAgPSAwOyBfa2V5MTAgPCBfbGVuMTA7IF9rZXkxMCsrKSB7XG4gICAgZWxzW19rZXkxMF0gPSBhcmd1bWVudHNbX2tleTEwXTtcbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBlbHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB2YXIgdG9BZGQgPSAkKGVsc1tpXSk7XG5cbiAgICBmb3IgKGogPSAwOyBqIDwgdG9BZGQubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgIGRvbS5wdXNoKHRvQWRkW2pdKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZG9tO1xufVxuXG5mdW5jdGlvbiBlbXB0eSgpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIGVsID0gdGhpc1tpXTtcblxuICAgIGlmIChlbC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBlbC5jaGlsZE5vZGVzLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgIGlmIChlbC5jaGlsZE5vZGVzW2pdLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICBlbC5jaGlsZE5vZGVzW2pdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwuY2hpbGROb2Rlc1tqXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZWwudGV4dENvbnRlbnQgPSAnJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gc2Nyb2xsVG8oKSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgdmFyIGxlZnQgPSBhcmdzWzBdLFxuICAgICAgdG9wID0gYXJnc1sxXSxcbiAgICAgIGR1cmF0aW9uID0gYXJnc1syXSxcbiAgICAgIGVhc2luZyA9IGFyZ3NbM10sXG4gICAgICBjYWxsYmFjayA9IGFyZ3NbNF07XG5cbiAgaWYgKGFyZ3MubGVuZ3RoID09PSA0ICYmIHR5cGVvZiBlYXNpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IGVhc2luZztcbiAgICBsZWZ0ID0gYXJnc1swXTtcbiAgICB0b3AgPSBhcmdzWzFdO1xuICAgIGR1cmF0aW9uID0gYXJnc1syXTtcbiAgICBjYWxsYmFjayA9IGFyZ3NbM107XG4gICAgZWFzaW5nID0gYXJnc1s0XTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZWFzaW5nID09PSAndW5kZWZpbmVkJykgZWFzaW5nID0gJ3N3aW5nJztcbiAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiBhbmltYXRlKCkge1xuICAgIHZhciBlbCA9IHRoaXM7XG4gICAgdmFyIGN1cnJlbnRUb3A7XG4gICAgdmFyIGN1cnJlbnRMZWZ0O1xuICAgIHZhciBtYXhUb3A7XG4gICAgdmFyIG1heExlZnQ7XG4gICAgdmFyIG5ld1RvcDtcbiAgICB2YXIgbmV3TGVmdDtcbiAgICB2YXIgc2Nyb2xsVG9wOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICB2YXIgc2Nyb2xsTGVmdDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgdmFyIGFuaW1hdGVUb3AgPSB0b3AgPiAwIHx8IHRvcCA9PT0gMDtcbiAgICB2YXIgYW5pbWF0ZUxlZnQgPSBsZWZ0ID4gMCB8fCBsZWZ0ID09PSAwO1xuXG4gICAgaWYgKHR5cGVvZiBlYXNpbmcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBlYXNpbmcgPSAnc3dpbmcnO1xuICAgIH1cblxuICAgIGlmIChhbmltYXRlVG9wKSB7XG4gICAgICBjdXJyZW50VG9wID0gZWwuc2Nyb2xsVG9wO1xuXG4gICAgICBpZiAoIWR1cmF0aW9uKSB7XG4gICAgICAgIGVsLnNjcm9sbFRvcCA9IHRvcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYW5pbWF0ZUxlZnQpIHtcbiAgICAgIGN1cnJlbnRMZWZ0ID0gZWwuc2Nyb2xsTGVmdDtcblxuICAgICAgaWYgKCFkdXJhdGlvbikge1xuICAgICAgICBlbC5zY3JvbGxMZWZ0ID0gbGVmdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWR1cmF0aW9uKSByZXR1cm47XG5cbiAgICBpZiAoYW5pbWF0ZVRvcCkge1xuICAgICAgbWF4VG9wID0gZWwuc2Nyb2xsSGVpZ2h0IC0gZWwub2Zmc2V0SGVpZ2h0O1xuICAgICAgbmV3VG9wID0gTWF0aC5tYXgoTWF0aC5taW4odG9wLCBtYXhUb3ApLCAwKTtcbiAgICB9XG5cbiAgICBpZiAoYW5pbWF0ZUxlZnQpIHtcbiAgICAgIG1heExlZnQgPSBlbC5zY3JvbGxXaWR0aCAtIGVsLm9mZnNldFdpZHRoO1xuICAgICAgbmV3TGVmdCA9IE1hdGgubWF4KE1hdGgubWluKGxlZnQsIG1heExlZnQpLCAwKTtcbiAgICB9XG5cbiAgICB2YXIgc3RhcnRUaW1lID0gbnVsbDtcbiAgICBpZiAoYW5pbWF0ZVRvcCAmJiBuZXdUb3AgPT09IGN1cnJlbnRUb3ApIGFuaW1hdGVUb3AgPSBmYWxzZTtcbiAgICBpZiAoYW5pbWF0ZUxlZnQgJiYgbmV3TGVmdCA9PT0gY3VycmVudExlZnQpIGFuaW1hdGVMZWZ0ID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiByZW5kZXIodGltZSkge1xuICAgICAgaWYgKHRpbWUgPT09IHZvaWQgMCkge1xuICAgICAgICB0aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGFydFRpbWUgPT09IG51bGwpIHtcbiAgICAgICAgc3RhcnRUaW1lID0gdGltZTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb2dyZXNzID0gTWF0aC5tYXgoTWF0aC5taW4oKHRpbWUgLSBzdGFydFRpbWUpIC8gZHVyYXRpb24sIDEpLCAwKTtcbiAgICAgIHZhciBlYXNlUHJvZ3Jlc3MgPSBlYXNpbmcgPT09ICdsaW5lYXInID8gcHJvZ3Jlc3MgOiAwLjUgLSBNYXRoLmNvcyhwcm9ncmVzcyAqIE1hdGguUEkpIC8gMjtcbiAgICAgIHZhciBkb25lO1xuICAgICAgaWYgKGFuaW1hdGVUb3ApIHNjcm9sbFRvcCA9IGN1cnJlbnRUb3AgKyBlYXNlUHJvZ3Jlc3MgKiAobmV3VG9wIC0gY3VycmVudFRvcCk7XG4gICAgICBpZiAoYW5pbWF0ZUxlZnQpIHNjcm9sbExlZnQgPSBjdXJyZW50TGVmdCArIGVhc2VQcm9ncmVzcyAqIChuZXdMZWZ0IC0gY3VycmVudExlZnQpO1xuXG4gICAgICBpZiAoYW5pbWF0ZVRvcCAmJiBuZXdUb3AgPiBjdXJyZW50VG9wICYmIHNjcm9sbFRvcCA+PSBuZXdUb3ApIHtcbiAgICAgICAgZWwuc2Nyb2xsVG9wID0gbmV3VG9wO1xuICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFuaW1hdGVUb3AgJiYgbmV3VG9wIDwgY3VycmVudFRvcCAmJiBzY3JvbGxUb3AgPD0gbmV3VG9wKSB7XG4gICAgICAgIGVsLnNjcm9sbFRvcCA9IG5ld1RvcDtcbiAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChhbmltYXRlTGVmdCAmJiBuZXdMZWZ0ID4gY3VycmVudExlZnQgJiYgc2Nyb2xsTGVmdCA+PSBuZXdMZWZ0KSB7XG4gICAgICAgIGVsLnNjcm9sbExlZnQgPSBuZXdMZWZ0O1xuICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFuaW1hdGVMZWZ0ICYmIG5ld0xlZnQgPCBjdXJyZW50TGVmdCAmJiBzY3JvbGxMZWZ0IDw9IG5ld0xlZnQpIHtcbiAgICAgICAgZWwuc2Nyb2xsTGVmdCA9IG5ld0xlZnQ7XG4gICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGFuaW1hdGVUb3ApIGVsLnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgICAgIGlmIChhbmltYXRlTGVmdCkgZWwuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlbmRlcik7XG4gICAgfVxuXG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShyZW5kZXIpO1xuICB9KTtcbn0gLy8gc2Nyb2xsVG9wKHRvcCwgZHVyYXRpb24sIGVhc2luZywgY2FsbGJhY2spIHtcblxuXG5mdW5jdGlvbiBzY3JvbGxUb3AoKSB7XG4gIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgfVxuXG4gIHZhciB0b3AgPSBhcmdzWzBdLFxuICAgICAgZHVyYXRpb24gPSBhcmdzWzFdLFxuICAgICAgZWFzaW5nID0gYXJnc1syXSxcbiAgICAgIGNhbGxiYWNrID0gYXJnc1szXTtcblxuICBpZiAoYXJncy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIGVhc2luZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRvcCA9IGFyZ3NbMF07XG4gICAgZHVyYXRpb24gPSBhcmdzWzFdO1xuICAgIGNhbGxiYWNrID0gYXJnc1syXTtcbiAgICBlYXNpbmcgPSBhcmdzWzNdO1xuICB9XG5cbiAgdmFyIGRvbSA9IHRoaXM7XG5cbiAgaWYgKHR5cGVvZiB0b3AgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgaWYgKGRvbS5sZW5ndGggPiAwKSByZXR1cm4gZG9tWzBdLnNjcm9sbFRvcDtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBkb20uc2Nyb2xsVG8odW5kZWZpbmVkLCB0b3AsIGR1cmF0aW9uLCBlYXNpbmcsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gc2Nyb2xsTGVmdCgpIHtcbiAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgYXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICB9XG5cbiAgdmFyIGxlZnQgPSBhcmdzWzBdLFxuICAgICAgZHVyYXRpb24gPSBhcmdzWzFdLFxuICAgICAgZWFzaW5nID0gYXJnc1syXSxcbiAgICAgIGNhbGxiYWNrID0gYXJnc1szXTtcblxuICBpZiAoYXJncy5sZW5ndGggPT09IDMgJiYgdHlwZW9mIGVhc2luZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGxlZnQgPSBhcmdzWzBdO1xuICAgIGR1cmF0aW9uID0gYXJnc1sxXTtcbiAgICBjYWxsYmFjayA9IGFyZ3NbMl07XG4gICAgZWFzaW5nID0gYXJnc1szXTtcbiAgfVxuXG4gIHZhciBkb20gPSB0aGlzO1xuXG4gIGlmICh0eXBlb2YgbGVmdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAoZG9tLmxlbmd0aCA+IDApIHJldHVybiBkb21bMF0uc2Nyb2xsTGVmdDtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBkb20uc2Nyb2xsVG8obGVmdCwgdW5kZWZpbmVkLCBkdXJhdGlvbiwgZWFzaW5nLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGFuaW1hdGUoaW5pdGlhbFByb3BzLCBpbml0aWFsUGFyYW1zKSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coKTtcbiAgdmFyIGVscyA9IHRoaXM7XG4gIHZhciBhID0ge1xuICAgIHByb3BzOiBPYmplY3QuYXNzaWduKHt9LCBpbml0aWFsUHJvcHMpLFxuICAgIHBhcmFtczogT2JqZWN0LmFzc2lnbih7XG4gICAgICBkdXJhdGlvbjogMzAwLFxuICAgICAgZWFzaW5nOiAnc3dpbmcnIC8vIG9yICdsaW5lYXInXG5cbiAgICAgIC8qIENhbGxiYWNrc1xuICAgICAgYmVnaW4oZWxlbWVudHMpXG4gICAgICBjb21wbGV0ZShlbGVtZW50cylcbiAgICAgIHByb2dyZXNzKGVsZW1lbnRzLCBjb21wbGV0ZSwgcmVtYWluaW5nLCBzdGFydCwgdHdlZW5WYWx1ZSlcbiAgICAgICovXG5cbiAgICB9LCBpbml0aWFsUGFyYW1zKSxcbiAgICBlbGVtZW50czogZWxzLFxuICAgIGFuaW1hdGluZzogZmFsc2UsXG4gICAgcXVlOiBbXSxcbiAgICBlYXNpbmdQcm9ncmVzczogZnVuY3Rpb24gZWFzaW5nUHJvZ3Jlc3MoZWFzaW5nLCBwcm9ncmVzcykge1xuICAgICAgaWYgKGVhc2luZyA9PT0gJ3N3aW5nJykge1xuICAgICAgICByZXR1cm4gMC41IC0gTWF0aC5jb3MocHJvZ3Jlc3MgKiBNYXRoLlBJKSAvIDI7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZWFzaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBlYXNpbmcocHJvZ3Jlc3MpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvZ3Jlc3M7XG4gICAgfSxcbiAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgaWYgKGEuZnJhbWVJZCkge1xuICAgICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoYS5mcmFtZUlkKTtcbiAgICAgIH1cblxuICAgICAgYS5hbmltYXRpbmcgPSBmYWxzZTtcbiAgICAgIGEuZWxlbWVudHMuZWFjaChmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSBlbDtcbiAgICAgICAgZGVsZXRlIGVsZW1lbnQuZG9tN0FuaW1hdGVJbnN0YW5jZTtcbiAgICAgIH0pO1xuICAgICAgYS5xdWUgPSBbXTtcbiAgICB9LFxuICAgIGRvbmU6IGZ1bmN0aW9uIGRvbmUoY29tcGxldGUpIHtcbiAgICAgIGEuYW5pbWF0aW5nID0gZmFsc2U7XG4gICAgICBhLmVsZW1lbnRzLmVhY2goZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgIHZhciBlbGVtZW50ID0gZWw7XG4gICAgICAgIGRlbGV0ZSBlbGVtZW50LmRvbTdBbmltYXRlSW5zdGFuY2U7XG4gICAgICB9KTtcbiAgICAgIGlmIChjb21wbGV0ZSkgY29tcGxldGUoZWxzKTtcblxuICAgICAgaWYgKGEucXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIHF1ZSA9IGEucXVlLnNoaWZ0KCk7XG4gICAgICAgIGEuYW5pbWF0ZShxdWVbMF0sIHF1ZVsxXSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBhbmltYXRlOiBmdW5jdGlvbiBhbmltYXRlKHByb3BzLCBwYXJhbXMpIHtcbiAgICAgIGlmIChhLmFuaW1hdGluZykge1xuICAgICAgICBhLnF1ZS5wdXNoKFtwcm9wcywgcGFyYW1zXSk7XG4gICAgICAgIHJldHVybiBhO1xuICAgICAgfVxuXG4gICAgICB2YXIgZWxlbWVudHMgPSBbXTsgLy8gRGVmaW5lICYgQ2FjaGUgSW5pdGlhbHMgJiBVbml0c1xuXG4gICAgICBhLmVsZW1lbnRzLmVhY2goZnVuY3Rpb24gKGVsLCBpbmRleCkge1xuICAgICAgICB2YXIgaW5pdGlhbEZ1bGxWYWx1ZTtcbiAgICAgICAgdmFyIGluaXRpYWxWYWx1ZTtcbiAgICAgICAgdmFyIHVuaXQ7XG4gICAgICAgIHZhciBmaW5hbFZhbHVlO1xuICAgICAgICB2YXIgZmluYWxGdWxsVmFsdWU7XG4gICAgICAgIGlmICghZWwuZG9tN0FuaW1hdGVJbnN0YW5jZSkgYS5lbGVtZW50c1tpbmRleF0uZG9tN0FuaW1hdGVJbnN0YW5jZSA9IGE7XG4gICAgICAgIGVsZW1lbnRzW2luZGV4XSA9IHtcbiAgICAgICAgICBjb250YWluZXI6IGVsXG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgICAgaW5pdGlhbEZ1bGxWYWx1ZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKHByb3ApLnJlcGxhY2UoJywnLCAnLicpO1xuICAgICAgICAgIGluaXRpYWxWYWx1ZSA9IHBhcnNlRmxvYXQoaW5pdGlhbEZ1bGxWYWx1ZSk7XG4gICAgICAgICAgdW5pdCA9IGluaXRpYWxGdWxsVmFsdWUucmVwbGFjZShpbml0aWFsVmFsdWUsICcnKTtcbiAgICAgICAgICBmaW5hbFZhbHVlID0gcGFyc2VGbG9hdChwcm9wc1twcm9wXSk7XG4gICAgICAgICAgZmluYWxGdWxsVmFsdWUgPSBwcm9wc1twcm9wXSArIHVuaXQ7XG4gICAgICAgICAgZWxlbWVudHNbaW5kZXhdW3Byb3BdID0ge1xuICAgICAgICAgICAgaW5pdGlhbEZ1bGxWYWx1ZTogaW5pdGlhbEZ1bGxWYWx1ZSxcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogaW5pdGlhbFZhbHVlLFxuICAgICAgICAgICAgdW5pdDogdW5pdCxcbiAgICAgICAgICAgIGZpbmFsVmFsdWU6IGZpbmFsVmFsdWUsXG4gICAgICAgICAgICBmaW5hbEZ1bGxWYWx1ZTogZmluYWxGdWxsVmFsdWUsXG4gICAgICAgICAgICBjdXJyZW50VmFsdWU6IGluaXRpYWxWYWx1ZVxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICB2YXIgc3RhcnRUaW1lID0gbnVsbDtcbiAgICAgIHZhciB0aW1lO1xuICAgICAgdmFyIGVsZW1lbnRzRG9uZSA9IDA7XG4gICAgICB2YXIgcHJvcHNEb25lID0gMDtcbiAgICAgIHZhciBkb25lO1xuICAgICAgdmFyIGJlZ2FuID0gZmFsc2U7XG4gICAgICBhLmFuaW1hdGluZyA9IHRydWU7XG5cbiAgICAgIGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgdGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB2YXIgcHJvZ3Jlc3M7XG4gICAgICAgIHZhciBlYXNlUHJvZ3Jlc3M7IC8vIGxldCBlbDtcblxuICAgICAgICBpZiAoIWJlZ2FuKSB7XG4gICAgICAgICAgYmVnYW4gPSB0cnVlO1xuICAgICAgICAgIGlmIChwYXJhbXMuYmVnaW4pIHBhcmFtcy5iZWdpbihlbHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXJ0VGltZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHN0YXJ0VGltZSA9IHRpbWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1zLnByb2dyZXNzKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgcGFyYW1zLnByb2dyZXNzKGVscywgTWF0aC5tYXgoTWF0aC5taW4oKHRpbWUgLSBzdGFydFRpbWUpIC8gcGFyYW1zLmR1cmF0aW9uLCAxKSwgMCksIHN0YXJ0VGltZSArIHBhcmFtcy5kdXJhdGlvbiAtIHRpbWUgPCAwID8gMCA6IHN0YXJ0VGltZSArIHBhcmFtcy5kdXJhdGlvbiAtIHRpbWUsIHN0YXJ0VGltZSk7XG4gICAgICAgIH1cblxuICAgICAgICBlbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICAgICAgdmFyIGVsID0gZWxlbWVudDtcbiAgICAgICAgICBpZiAoZG9uZSB8fCBlbC5kb25lKSByZXR1cm47XG4gICAgICAgICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgICAgIGlmIChkb25lIHx8IGVsLmRvbmUpIHJldHVybjtcbiAgICAgICAgICAgIHByb2dyZXNzID0gTWF0aC5tYXgoTWF0aC5taW4oKHRpbWUgLSBzdGFydFRpbWUpIC8gcGFyYW1zLmR1cmF0aW9uLCAxKSwgMCk7XG4gICAgICAgICAgICBlYXNlUHJvZ3Jlc3MgPSBhLmVhc2luZ1Byb2dyZXNzKHBhcmFtcy5lYXNpbmcsIHByb2dyZXNzKTtcbiAgICAgICAgICAgIHZhciBfZWwkcHJvcCA9IGVsW3Byb3BdLFxuICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZSA9IF9lbCRwcm9wLmluaXRpYWxWYWx1ZSxcbiAgICAgICAgICAgICAgICBmaW5hbFZhbHVlID0gX2VsJHByb3AuZmluYWxWYWx1ZSxcbiAgICAgICAgICAgICAgICB1bml0ID0gX2VsJHByb3AudW5pdDtcbiAgICAgICAgICAgIGVsW3Byb3BdLmN1cnJlbnRWYWx1ZSA9IGluaXRpYWxWYWx1ZSArIGVhc2VQcm9ncmVzcyAqIChmaW5hbFZhbHVlIC0gaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSBlbFtwcm9wXS5jdXJyZW50VmFsdWU7XG5cbiAgICAgICAgICAgIGlmIChmaW5hbFZhbHVlID4gaW5pdGlhbFZhbHVlICYmIGN1cnJlbnRWYWx1ZSA+PSBmaW5hbFZhbHVlIHx8IGZpbmFsVmFsdWUgPCBpbml0aWFsVmFsdWUgJiYgY3VycmVudFZhbHVlIDw9IGZpbmFsVmFsdWUpIHtcbiAgICAgICAgICAgICAgZWwuY29udGFpbmVyLnN0eWxlW3Byb3BdID0gZmluYWxWYWx1ZSArIHVuaXQ7XG4gICAgICAgICAgICAgIHByb3BzRG9uZSArPSAxO1xuXG4gICAgICAgICAgICAgIGlmIChwcm9wc0RvbmUgPT09IE9iamVjdC5rZXlzKHByb3BzKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBlbC5kb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBlbGVtZW50c0RvbmUgKz0gMTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChlbGVtZW50c0RvbmUgPT09IGVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgIGEuZG9uZShwYXJhbXMuY29tcGxldGUpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVsLmNvbnRhaW5lci5zdHlsZVtwcm9wXSA9IGN1cnJlbnRWYWx1ZSArIHVuaXQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZG9uZSkgcmV0dXJuOyAvLyBUaGVuIGNhbGxcblxuICAgICAgICBhLmZyYW1lSWQgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlbmRlcik7XG4gICAgICB9XG5cbiAgICAgIGEuZnJhbWVJZCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVuZGVyKTtcbiAgICAgIHJldHVybiBhO1xuICAgIH1cbiAgfTtcblxuICBpZiAoYS5lbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZWxzO1xuICB9XG5cbiAgdmFyIGFuaW1hdGVJbnN0YW5jZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGEuZWxlbWVudHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICBpZiAoYS5lbGVtZW50c1tpXS5kb203QW5pbWF0ZUluc3RhbmNlKSB7XG4gICAgICBhbmltYXRlSW5zdGFuY2UgPSBhLmVsZW1lbnRzW2ldLmRvbTdBbmltYXRlSW5zdGFuY2U7XG4gICAgfSBlbHNlIGEuZWxlbWVudHNbaV0uZG9tN0FuaW1hdGVJbnN0YW5jZSA9IGE7XG4gIH1cblxuICBpZiAoIWFuaW1hdGVJbnN0YW5jZSkge1xuICAgIGFuaW1hdGVJbnN0YW5jZSA9IGE7XG4gIH1cblxuICBpZiAoaW5pdGlhbFByb3BzID09PSAnc3RvcCcpIHtcbiAgICBhbmltYXRlSW5zdGFuY2Uuc3RvcCgpO1xuICB9IGVsc2Uge1xuICAgIGFuaW1hdGVJbnN0YW5jZS5hbmltYXRlKGEucHJvcHMsIGEucGFyYW1zKTtcbiAgfVxuXG4gIHJldHVybiBlbHM7XG59XG5cbmZ1bmN0aW9uIHN0b3AoKSB7XG4gIHZhciBlbHMgPSB0aGlzO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZWxzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgaWYgKGVsc1tpXS5kb203QW5pbWF0ZUluc3RhbmNlKSB7XG4gICAgICBlbHNbaV0uZG9tN0FuaW1hdGVJbnN0YW5jZS5zdG9wKCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBub1RyaWdnZXIgPSAncmVzaXplIHNjcm9sbCcuc3BsaXQoJyAnKTtcblxuZnVuY3Rpb24gc2hvcnRjdXQobmFtZSkge1xuICBmdW5jdGlvbiBldmVudEhhbmRsZXIoKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYXJnc1swXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAobm9UcmlnZ2VyLmluZGV4T2YobmFtZSkgPCAwKSB7XG4gICAgICAgICAgaWYgKG5hbWUgaW4gdGhpc1tpXSkgdGhpc1tpXVtuYW1lXSgpO2Vsc2Uge1xuICAgICAgICAgICAgJCh0aGlzW2ldKS50cmlnZ2VyKG5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5vbi5hcHBseSh0aGlzLCBbbmFtZV0uY29uY2F0KGFyZ3MpKTtcbiAgfVxuXG4gIHJldHVybiBldmVudEhhbmRsZXI7XG59XG5cbnZhciBjbGljayA9IHNob3J0Y3V0KCdjbGljaycpO1xudmFyIGJsdXIgPSBzaG9ydGN1dCgnYmx1cicpO1xudmFyIGZvY3VzID0gc2hvcnRjdXQoJ2ZvY3VzJyk7XG52YXIgZm9jdXNpbiA9IHNob3J0Y3V0KCdmb2N1c2luJyk7XG52YXIgZm9jdXNvdXQgPSBzaG9ydGN1dCgnZm9jdXNvdXQnKTtcbnZhciBrZXl1cCA9IHNob3J0Y3V0KCdrZXl1cCcpO1xudmFyIGtleWRvd24gPSBzaG9ydGN1dCgna2V5ZG93bicpO1xudmFyIGtleXByZXNzID0gc2hvcnRjdXQoJ2tleXByZXNzJyk7XG52YXIgc3VibWl0ID0gc2hvcnRjdXQoJ3N1Ym1pdCcpO1xudmFyIGNoYW5nZSA9IHNob3J0Y3V0KCdjaGFuZ2UnKTtcbnZhciBtb3VzZWRvd24gPSBzaG9ydGN1dCgnbW91c2Vkb3duJyk7XG52YXIgbW91c2Vtb3ZlID0gc2hvcnRjdXQoJ21vdXNlbW92ZScpO1xudmFyIG1vdXNldXAgPSBzaG9ydGN1dCgnbW91c2V1cCcpO1xudmFyIG1vdXNlZW50ZXIgPSBzaG9ydGN1dCgnbW91c2VlbnRlcicpO1xudmFyIG1vdXNlbGVhdmUgPSBzaG9ydGN1dCgnbW91c2VsZWF2ZScpO1xudmFyIG1vdXNlb3V0ID0gc2hvcnRjdXQoJ21vdXNlb3V0Jyk7XG52YXIgbW91c2VvdmVyID0gc2hvcnRjdXQoJ21vdXNlb3ZlcicpO1xudmFyIHRvdWNoc3RhcnQgPSBzaG9ydGN1dCgndG91Y2hzdGFydCcpO1xudmFyIHRvdWNoZW5kID0gc2hvcnRjdXQoJ3RvdWNoZW5kJyk7XG52YXIgdG91Y2htb3ZlID0gc2hvcnRjdXQoJ3RvdWNobW92ZScpO1xudmFyIHJlc2l6ZSA9IHNob3J0Y3V0KCdyZXNpemUnKTtcbnZhciBzY3JvbGwgPSBzaG9ydGN1dCgnc2Nyb2xsJyk7XG5cbmV4cG9ydCBkZWZhdWx0ICQ7XG5leHBvcnQgeyAkLCBhZGQsIGFkZENsYXNzLCBhbmltYXRlLCBhbmltYXRpb25FbmQsIGFwcGVuZCwgYXBwZW5kVG8sIGF0dHIsIGJsdXIsIGNoYW5nZSwgY2hpbGRyZW4sIGNsaWNrLCBjbG9zZXN0LCBjc3MsIGRhdGEsIGRhdGFzZXQsIGRldGFjaCwgZWFjaCwgZW1wdHksIGVxLCBmaWx0ZXIsIGZpbmQsIGZvY3VzLCBmb2N1c2luLCBmb2N1c291dCwgaGFzQ2xhc3MsIGhlaWdodCwgaGlkZSwgaHRtbCwgaW5kZXgsIGluc2VydEFmdGVyLCBpbnNlcnRCZWZvcmUsIGlzLCBrZXlkb3duLCBrZXlwcmVzcywga2V5dXAsIG1vdXNlZG93biwgbW91c2VlbnRlciwgbW91c2VsZWF2ZSwgbW91c2Vtb3ZlLCBtb3VzZW91dCwgbW91c2VvdmVyLCBtb3VzZXVwLCBuZXh0LCBuZXh0QWxsLCBvZmYsIG9mZnNldCwgb24sIG9uY2UsIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoLCBwYXJlbnQsIHBhcmVudHMsIHByZXBlbmQsIHByZXBlbmRUbywgcHJldiwgcHJldkFsbCwgcHJvcCwgcmVtb3ZlLCByZW1vdmVBdHRyLCByZW1vdmVDbGFzcywgcmVtb3ZlRGF0YSwgcmVzaXplLCBzY3JvbGwsIHNjcm9sbExlZnQsIHNjcm9sbFRvLCBzY3JvbGxUb3AsIHNob3csIHNpYmxpbmdzLCBzdG9wLCBzdHlsZXMsIHN1Ym1pdCwgdGV4dCwgdG9nZ2xlQ2xhc3MsIHRvdWNoZW5kLCB0b3VjaG1vdmUsIHRvdWNoc3RhcnQsIHRyYW5zZm9ybSwgdHJhbnNpdGlvbiwgdHJhbnNpdGlvbkVuZCwgdHJpZ2dlciwgdmFsLCB2YWx1ZSwgd2lkdGggfTtcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/dom7/dom7.esm.js\n"); /***/ }), /***/ "./node_modules/inputmask/dist/inputmask.js": /*!**************************************************!*\ !*** ./node_modules/inputmask/dist/inputmask.js ***! \**************************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("/*!\n * dist/inputmask\n * https://github.com/RobinHerbots/Inputmask\n * Copyright (c) 2010 - 2021 Robin Herbots\n * Licensed under the MIT license\n * Version: 5.0.6\n */\n!function(e, t) {\n if (true) module.exports = t(); else { var i, a; }\n}(this, (function() {\n return function() {\n \"use strict\";\n var e = {\n 4528: function(e) {\n e.exports = JSON.parse('{\"BACKSPACE\":8,\"BACKSPACE_SAFARI\":127,\"DELETE\":46,\"DOWN\":40,\"END\":35,\"ENTER\":13,\"ESCAPE\":27,\"HOME\":36,\"INSERT\":45,\"LEFT\":37,\"PAGE_DOWN\":34,\"PAGE_UP\":33,\"RIGHT\":39,\"SPACE\":32,\"TAB\":9,\"UP\":38,\"X\":88,\"Z\":90,\"CONTROL\":17,\"PAUSE/BREAK\":19,\"WINDOWS_LEFT\":91,\"WINDOWS_RIGHT\":92,\"KEY_229\":229}');\n },\n 8741: function(e, t) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0;\n var a = !(\"undefined\" == typeof window || !window.document || !window.document.createElement);\n t.default = a;\n },\n 3976: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0;\n var i, n = (i = a(4528)) && i.__esModule ? i : {\n default: i\n };\n var r = {\n _maxTestPos: 500,\n placeholder: \"_\",\n optionalmarker: [ \"[\", \"]\" ],\n quantifiermarker: [ \"{\", \"}\" ],\n groupmarker: [ \"(\", \")\" ],\n alternatormarker: \"|\",\n escapeChar: \"\\\\\",\n mask: null,\n regex: null,\n oncomplete: function() {},\n onincomplete: function() {},\n oncleared: function() {},\n repeat: 0,\n greedy: !1,\n autoUnmask: !1,\n removeMaskOnSubmit: !1,\n clearMaskOnLostFocus: !0,\n insertMode: !0,\n insertModeVisual: !0,\n clearIncomplete: !1,\n alias: null,\n onKeyDown: function() {},\n onBeforeMask: null,\n onBeforePaste: function(e, t) {\n return \"function\" == typeof t.onBeforeMask ? t.onBeforeMask.call(this, e, t) : e;\n },\n onBeforeWrite: null,\n onUnMask: null,\n showMaskOnFocus: !0,\n showMaskOnHover: !0,\n onKeyValidation: function() {},\n skipOptionalPartCharacter: \" \",\n numericInput: !1,\n rightAlign: !1,\n undoOnEscape: !0,\n radixPoint: \"\",\n _radixDance: !1,\n groupSeparator: \"\",\n keepStatic: null,\n positionCaretOnTab: !0,\n tabThrough: !1,\n supportsInputType: [ \"text\", \"tel\", \"url\", \"password\", \"search\" ],\n ignorables: [ n.default.BACKSPACE, n.default.TAB, n.default[\"PAUSE/BREAK\"], n.default.ESCAPE, n.default.PAGE_UP, n.default.PAGE_DOWN, n.default.END, n.default.HOME, n.default.LEFT, n.default.UP, n.default.RIGHT, n.default.DOWN, n.default.INSERT, n.default.DELETE, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 0, 229 ],\n isComplete: null,\n preValidation: null,\n postValidation: null,\n staticDefinitionSymbol: void 0,\n jitMasking: !1,\n nullable: !0,\n inputEventOnly: !1,\n noValuePatching: !1,\n positionCaretOnClick: \"lvp\",\n casing: null,\n inputmode: \"text\",\n importDataAttributes: !0,\n shiftPositions: !0,\n usePrototypeDefinitions: !0,\n validationEventTimeOut: 3e3\n };\n t.default = r;\n },\n 7392: function(e, t) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0;\n t.default = {\n 9: {\n validator: \"[0-9\\uff10-\\uff19]\",\n definitionSymbol: \"*\"\n },\n a: {\n validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n definitionSymbol: \"*\"\n },\n \"*\": {\n validator: \"[0-9\\uff10-\\uff19A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\"\n }\n };\n },\n 253: function(e, t) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = function(e, t, a) {\n if (void 0 === a) return e.__data ? e.__data[t] : null;\n e.__data = e.__data || {}, e.__data[t] = a;\n };\n },\n 3776: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.on = function(e, t) {\n function a(e, a) {\n n.addEventListener ? n.addEventListener(e, t, !1) : n.attachEvent && n.attachEvent(\"on\" + e, t), \n i[e] = i[e] || {}, i[e][a] = i[e][a] || [], i[e][a].push(t);\n }\n if (u(this[0])) for (var i = this[0].eventRegistry, n = this[0], r = e.split(\" \"), o = 0; o < r.length; o++) {\n var s = r[o].split(\".\"), l = s[0], c = s[1] || \"global\";\n a(l, c);\n }\n return this;\n }, t.off = function(e, t) {\n var a, i;\n function n(e, t, n) {\n if (e in a == !0) if (i.removeEventListener ? i.removeEventListener(e, n, !1) : i.detachEvent && i.detachEvent(\"on\" + e, n), \n \"global\" === t) for (var r in a[e]) a[e][r].splice(a[e][r].indexOf(n), 1); else a[e][t].splice(a[e][t].indexOf(n), 1);\n }\n function r(e, i) {\n var n, r, o = [];\n if (e.length > 0) if (void 0 === t) for (n = 0, r = a[e][i].length; n < r; n++) o.push({\n ev: e,\n namespace: i && i.length > 0 ? i : \"global\",\n handler: a[e][i][n]\n }); else o.push({\n ev: e,\n namespace: i && i.length > 0 ? i : \"global\",\n handler: t\n }); else if (i.length > 0) for (var s in a) for (var l in a[s]) if (l === i) if (void 0 === t) for (n = 0, \n r = a[s][l].length; n < r; n++) o.push({\n ev: s,\n namespace: l,\n handler: a[s][l][n]\n }); else o.push({\n ev: s,\n namespace: l,\n handler: t\n });\n return o;\n }\n if (u(this[0]) && e) {\n a = this[0].eventRegistry, i = this[0];\n for (var o = e.split(\" \"), s = 0; s < o.length; s++) for (var l = o[s].split(\".\"), c = r(l[0], l[1]), f = 0, d = c.length; f < d; f++) n(c[f].ev, c[f].namespace, c[f].handler);\n }\n return this;\n }, t.trigger = function(e) {\n if (u(this[0])) for (var t = this[0].eventRegistry, a = this[0], i = \"string\" == typeof e ? e.split(\" \") : [ e.type ], r = 0; r < i.length; r++) {\n var s = i[r].split(\".\"), l = s[0], c = s[1] || \"global\";\n if (void 0 !== document && \"global\" === c) {\n var f, d, p = {\n bubbles: !0,\n cancelable: !0,\n detail: arguments[1]\n };\n if (document.createEvent) {\n try {\n switch (l) {\n case \"input\":\n p.inputType = \"insertText\", f = new InputEvent(l, p);\n break;\n\n default:\n f = new CustomEvent(l, p);\n }\n } catch (e) {\n (f = document.createEvent(\"CustomEvent\")).initCustomEvent(l, p.bubbles, p.cancelable, p.detail);\n }\n e.type && (0, n.default)(f, e), a.dispatchEvent(f);\n } else (f = document.createEventObject()).eventType = l, f.detail = arguments[1], \n e.type && (0, n.default)(f, e), a.fireEvent(\"on\" + f.eventType, f);\n } else if (void 0 !== t[l]) if (arguments[0] = arguments[0].type ? arguments[0] : o.default.Event(arguments[0]), \n arguments[0].detail = arguments.slice(1), \"global\" === c) for (var h in t[l]) for (d = 0; d < t[l][h].length; d++) t[l][h][d].apply(a, arguments); else for (d = 0; d < t[l][c].length; d++) t[l][c][d].apply(a, arguments);\n }\n return this;\n }, t.Event = void 0;\n var i, n = l(a(600)), r = l(a(9380)), o = l(a(4963)), s = l(a(8741));\n function l(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n function u(e) {\n return e instanceof Element;\n }\n t.Event = i, \"function\" == typeof r.default.CustomEvent ? t.Event = i = r.default.CustomEvent : s.default && (t.Event = i = function(e, t) {\n t = t || {\n bubbles: !1,\n cancelable: !1,\n detail: void 0\n };\n var a = document.createEvent(\"CustomEvent\");\n return a.initCustomEvent(e, t.bubbles, t.cancelable, t.detail), a;\n }, i.prototype = r.default.Event.prototype);\n },\n 600: function(e, t) {\n function a(e) {\n return (a = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n return typeof e;\n } : function(e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n })(e);\n }\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = function e() {\n var t, i, n, r, o, s, l = arguments[0] || {}, u = 1, c = arguments.length, f = !1;\n \"boolean\" == typeof l && (f = l, l = arguments[u] || {}, u++);\n \"object\" !== a(l) && \"function\" != typeof l && (l = {});\n for (;u < c; u++) if (null != (t = arguments[u])) for (i in t) n = l[i], r = t[i], \n l !== r && (f && r && (\"[object Object]\" === Object.prototype.toString.call(r) || (o = Array.isArray(r))) ? (o ? (o = !1, \n s = n && Array.isArray(n) ? n : []) : s = n && \"[object Object]\" === Object.prototype.toString.call(n) ? n : {}, \n l[i] = e(f, s, r)) : void 0 !== r && (l[i] = r));\n return l;\n };\n },\n 4963: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0;\n var i = s(a(600)), n = s(a(9380)), r = s(a(253)), o = a(3776);\n function s(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n var l = n.default.document;\n function u(e) {\n return e instanceof u ? e : this instanceof u ? void (null != e && e !== n.default && (this[0] = e.nodeName ? e : void 0 !== e[0] && e[0].nodeName ? e[0] : l.querySelector(e), \n void 0 !== this[0] && null !== this[0] && (this[0].eventRegistry = this[0].eventRegistry || {}))) : new u(e);\n }\n u.prototype = {\n on: o.on,\n off: o.off,\n trigger: o.trigger\n }, u.extend = i.default, u.data = r.default, u.Event = o.Event;\n var c = u;\n t.default = c;\n },\n 9845: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.iphone = t.iemobile = t.mobile = t.ie = t.ua = void 0;\n var i, n = (i = a(9380)) && i.__esModule ? i : {\n default: i\n };\n var r = n.default.navigator && n.default.navigator.userAgent || \"\", o = r.indexOf(\"MSIE \") > 0 || r.indexOf(\"Trident/\") > 0, s = \"ontouchstart\" in n.default, l = /iemobile/i.test(r), u = /iphone/i.test(r) && !l;\n t.iphone = u, t.iemobile = l, t.mobile = s, t.ie = o, t.ua = r;\n },\n 7184: function(e, t) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = function(e) {\n return e.replace(a, \"\\\\$1\");\n };\n var a = new RegExp(\"(\\\\\" + [ \"/\", \".\", \"*\", \"+\", \"?\", \"|\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", \"\\\\\", \"$\", \"^\" ].join(\"|\\\\\") + \")\", \"gim\");\n },\n 6030: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.EventHandlers = void 0;\n var i, n = a(8711), r = (i = a(4528)) && i.__esModule ? i : {\n default: i\n }, o = a(9845), s = a(7215), l = a(7760), u = a(4713);\n var c = {\n keydownEvent: function(e) {\n var t = this.inputmask, a = t.opts, i = t.dependencyLib, c = t.maskset, f = this, d = i(f), p = e.keyCode, h = n.caret.call(t, f), v = a.onKeyDown.call(this, e, n.getBuffer.call(t), h, a);\n if (void 0 !== v) return v;\n if (p === r.default.BACKSPACE || p === r.default.DELETE || o.iphone && p === r.default.BACKSPACE_SAFARI || e.ctrlKey && p === r.default.X && !(\"oncut\" in f)) e.preventDefault(), \n s.handleRemove.call(t, f, p, h), (0, l.writeBuffer)(f, n.getBuffer.call(t, !0), c.p, e, f.inputmask._valueGet() !== n.getBuffer.call(t).join(\"\")); else if (p === r.default.END || p === r.default.PAGE_DOWN) {\n e.preventDefault();\n var m = n.seekNext.call(t, n.getLastValidPosition.call(t));\n n.caret.call(t, f, e.shiftKey ? h.begin : m, m, !0);\n } else p === r.default.HOME && !e.shiftKey || p === r.default.PAGE_UP ? (e.preventDefault(), \n n.caret.call(t, f, 0, e.shiftKey ? h.begin : 0, !0)) : a.undoOnEscape && p === r.default.ESCAPE && !0 !== e.altKey ? ((0, \n l.checkVal)(f, !0, !1, t.undoValue.split(\"\")), d.trigger(\"click\")) : !0 === a.tabThrough && p === r.default.TAB ? !0 === e.shiftKey ? (h.end = n.seekPrevious.call(t, h.end, !0), \n !0 === u.getTest.call(t, h.end - 1).match.static && h.end--, h.begin = n.seekPrevious.call(t, h.end, !0), \n h.begin >= 0 && h.end > 0 && (e.preventDefault(), n.caret.call(t, f, h.begin, h.end))) : (h.begin = n.seekNext.call(t, h.begin, !0), \n h.end = n.seekNext.call(t, h.begin, !0), h.end < c.maskLength && h.end--, h.begin <= c.maskLength && (e.preventDefault(), \n n.caret.call(t, f, h.begin, h.end))) : e.shiftKey || a.insertModeVisual && !1 === a.insertMode && (p === r.default.RIGHT ? setTimeout((function() {\n var e = n.caret.call(t, f);\n n.caret.call(t, f, e.begin);\n }), 0) : p === r.default.LEFT && setTimeout((function() {\n var e = n.translatePosition.call(t, f.inputmask.caretPos.begin);\n n.translatePosition.call(t, f.inputmask.caretPos.end);\n t.isRTL ? n.caret.call(t, f, e + (e === c.maskLength ? 0 : 1)) : n.caret.call(t, f, e - (0 === e ? 0 : 1));\n }), 0));\n t.ignorable = a.ignorables.includes(p);\n },\n keypressEvent: function(e, t, a, i, o) {\n var u = this.inputmask || this, c = u.opts, f = u.dependencyLib, d = u.maskset, p = u.el, h = f(p), v = e.which || e.charCode || e.keyCode;\n if (!(!0 === t || e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || u.ignorable)) return v === r.default.ENTER && u.undoValue !== u._valueGet(!0) && (u.undoValue = u._valueGet(!0), \n setTimeout((function() {\n h.trigger(\"change\");\n }), 0)), u.skipInputEvent = !0, !0;\n if (v) {\n 44 !== v && 46 !== v || 3 !== e.location || \"\" === c.radixPoint || (v = c.radixPoint.charCodeAt(0));\n var m, g = t ? {\n begin: o,\n end: o\n } : n.caret.call(u, p), k = String.fromCharCode(v);\n d.writeOutBuffer = !0;\n var y = s.isValid.call(u, g, k, i, void 0, void 0, void 0, t);\n if (!1 !== y && (n.resetMaskSet.call(u, !0), m = void 0 !== y.caret ? y.caret : n.seekNext.call(u, y.pos.begin ? y.pos.begin : y.pos), \n d.p = m), m = c.numericInput && void 0 === y.caret ? n.seekPrevious.call(u, m) : m, \n !1 !== a && (setTimeout((function() {\n c.onKeyValidation.call(p, v, y);\n }), 0), d.writeOutBuffer && !1 !== y)) {\n var b = n.getBuffer.call(u);\n (0, l.writeBuffer)(p, b, m, e, !0 !== t);\n }\n if (e.preventDefault(), t) return !1 !== y && (y.forwardPosition = m), y;\n }\n },\n keyupEvent: function(e) {\n var t = this.inputmask;\n !t.isComposing || e.keyCode !== r.default.KEY_229 && e.keyCode !== r.default.ENTER || t.$el.trigger(\"input\");\n },\n pasteEvent: function(e) {\n var t, a = this.inputmask, i = a.opts, r = a._valueGet(!0), o = n.caret.call(a, this);\n a.isRTL && (t = o.end, o.end = o.begin, o.begin = t);\n var s = r.substr(0, o.begin), u = r.substr(o.end, r.length);\n if (s == (a.isRTL ? n.getBufferTemplate.call(a).slice().reverse() : n.getBufferTemplate.call(a)).slice(0, o.begin).join(\"\") && (s = \"\"), \n u == (a.isRTL ? n.getBufferTemplate.call(a).slice().reverse() : n.getBufferTemplate.call(a)).slice(o.end).join(\"\") && (u = \"\"), \n window.clipboardData && window.clipboardData.getData) r = s + window.clipboardData.getData(\"Text\") + u; else {\n if (!e.clipboardData || !e.clipboardData.getData) return !0;\n r = s + e.clipboardData.getData(\"text/plain\") + u;\n }\n var c = r;\n if (\"function\" == typeof i.onBeforePaste) {\n if (!1 === (c = i.onBeforePaste.call(a, r, i))) return e.preventDefault();\n c || (c = r);\n }\n return (0, l.checkVal)(this, !0, !1, c.toString().split(\"\"), e), e.preventDefault();\n },\n inputFallBackEvent: function(e) {\n var t = this.inputmask, a = t.opts, i = t.dependencyLib;\n var s = this, f = s.inputmask._valueGet(!0), d = (t.isRTL ? n.getBuffer.call(t).slice().reverse() : n.getBuffer.call(t)).join(\"\"), p = n.caret.call(t, s, void 0, void 0, !0);\n if (d !== f) {\n var h = function(e, i, r) {\n for (var o, s, l, c = e.substr(0, r.begin).split(\"\"), f = e.substr(r.begin).split(\"\"), d = i.substr(0, r.begin).split(\"\"), p = i.substr(r.begin).split(\"\"), h = c.length >= d.length ? c.length : d.length, v = f.length >= p.length ? f.length : p.length, m = \"\", g = [], k = \"~\"; c.length < h; ) c.push(k);\n for (;d.length < h; ) d.push(k);\n for (;f.length < v; ) f.unshift(k);\n for (;p.length < v; ) p.unshift(k);\n var y = c.concat(f), b = d.concat(p);\n for (s = 0, o = y.length; s < o; s++) switch (l = u.getPlaceholder.call(t, n.translatePosition.call(t, s)), \n m) {\n case \"insertText\":\n b[s - 1] === y[s] && r.begin == y.length - 1 && g.push(y[s]), s = o;\n break;\n\n case \"insertReplacementText\":\n case \"deleteContentBackward\":\n y[s] === k ? r.end++ : s = o;\n break;\n\n default:\n y[s] !== b[s] && (y[s + 1] !== k && y[s + 1] !== l && void 0 !== y[s + 1] || (b[s] !== l || b[s + 1] !== k) && b[s] !== k ? b[s + 1] === k && b[s] === y[s + 1] ? (m = \"insertText\", \n g.push(y[s]), r.begin--, r.end--) : y[s] !== l && y[s] !== k && (y[s + 1] === k || b[s] !== y[s] && b[s + 1] === y[s + 1]) ? (m = \"insertReplacementText\", \n g.push(y[s]), r.begin--) : y[s] === k ? (m = \"deleteContentBackward\", (n.isMask.call(t, n.translatePosition.call(t, s), !0) || b[s] === a.radixPoint) && r.end++) : s = o : (m = \"insertText\", \n g.push(y[s]), r.begin--, r.end--));\n }\n return {\n action: m,\n data: g,\n caret: r\n };\n }(f = function(e, a, i) {\n if (o.iemobile) {\n var r = a.replace(n.getBuffer.call(t).join(\"\"), \"\");\n if (1 === r.length) {\n var s = a.split(\"\");\n s.splice(i.begin, 0, r), a = s.join(\"\");\n }\n }\n return a;\n }(0, f, p), d, p);\n switch ((s.inputmask.shadowRoot || s.ownerDocument).activeElement !== s && s.focus(), \n (0, l.writeBuffer)(s, n.getBuffer.call(t)), n.caret.call(t, s, p.begin, p.end, !0), \n h.action) {\n case \"insertText\":\n case \"insertReplacementText\":\n h.data.forEach((function(e, a) {\n var n = new i.Event(\"keypress\");\n n.which = e.charCodeAt(0), t.ignorable = !1, c.keypressEvent.call(s, n);\n })), setTimeout((function() {\n t.$el.trigger(\"keyup\");\n }), 0);\n break;\n\n case \"deleteContentBackward\":\n var v = new i.Event(\"keydown\");\n v.keyCode = r.default.BACKSPACE, c.keydownEvent.call(s, v);\n break;\n\n default:\n (0, l.applyInputValue)(s, f);\n }\n e.preventDefault();\n }\n },\n compositionendEvent: function(e) {\n var t = this.inputmask;\n t.isComposing = !1, t.$el.trigger(\"input\");\n },\n setValueEvent: function(e) {\n var t = this.inputmask, a = this, i = e && e.detail ? e.detail[0] : arguments[1];\n void 0 === i && (i = a.inputmask._valueGet(!0)), (0, l.applyInputValue)(a, i), (e.detail && void 0 !== e.detail[1] || void 0 !== arguments[2]) && n.caret.call(t, a, e.detail ? e.detail[1] : arguments[2]);\n },\n focusEvent: function(e) {\n var t = this.inputmask, a = t.opts, i = this, r = i.inputmask._valueGet();\n a.showMaskOnFocus && r !== n.getBuffer.call(t).join(\"\") && (0, l.writeBuffer)(i, n.getBuffer.call(t), n.seekNext.call(t, n.getLastValidPosition.call(t))), \n !0 !== a.positionCaretOnTab || !1 !== t.mouseEnter || s.isComplete.call(t, n.getBuffer.call(t)) && -1 !== n.getLastValidPosition.call(t) || c.clickEvent.apply(i, [ e, !0 ]), \n t.undoValue = t._valueGet(!0);\n },\n invalidEvent: function(e) {\n this.inputmask.validationEvent = !0;\n },\n mouseleaveEvent: function() {\n var e = this.inputmask, t = e.opts, a = this;\n e.mouseEnter = !1, t.clearMaskOnLostFocus && (a.inputmask.shadowRoot || a.ownerDocument).activeElement !== a && (0, \n l.HandleNativePlaceholder)(a, e.originalPlaceholder);\n },\n clickEvent: function(e, t) {\n var a = this.inputmask, i = this;\n if ((i.inputmask.shadowRoot || i.ownerDocument).activeElement === i) {\n var r = n.determineNewCaretPosition.call(a, n.caret.call(a, i), t);\n void 0 !== r && n.caret.call(a, i, r);\n }\n },\n cutEvent: function(e) {\n var t = this.inputmask, a = t.maskset, i = this, o = n.caret.call(t, i), u = window.clipboardData || e.clipboardData, c = t.isRTL ? n.getBuffer.call(t).slice(o.end, o.begin) : n.getBuffer.call(t).slice(o.begin, o.end);\n u.setData(\"text\", t.isRTL ? c.reverse().join(\"\") : c.join(\"\")), document.execCommand && document.execCommand(\"copy\"), \n s.handleRemove.call(t, i, r.default.DELETE, o), (0, l.writeBuffer)(i, n.getBuffer.call(t), a.p, e, t.undoValue !== t._valueGet(!0));\n },\n blurEvent: function(e) {\n var t = this.inputmask, a = t.opts, i = (0, t.dependencyLib)(this), r = this;\n if (r.inputmask) {\n (0, l.HandleNativePlaceholder)(r, t.originalPlaceholder);\n var o = r.inputmask._valueGet(), u = n.getBuffer.call(t).slice();\n \"\" !== o && (a.clearMaskOnLostFocus && (-1 === n.getLastValidPosition.call(t) && o === n.getBufferTemplate.call(t).join(\"\") ? u = [] : l.clearOptionalTail.call(t, u)), \n !1 === s.isComplete.call(t, u) && (setTimeout((function() {\n i.trigger(\"incomplete\");\n }), 0), a.clearIncomplete && (n.resetMaskSet.call(t), u = a.clearMaskOnLostFocus ? [] : n.getBufferTemplate.call(t).slice())), \n (0, l.writeBuffer)(r, u, void 0, e)), t.undoValue !== t._valueGet(!0) && (t.undoValue = t._valueGet(!0), \n i.trigger(\"change\"));\n }\n },\n mouseenterEvent: function() {\n var e = this.inputmask, t = e.opts, a = this;\n if (e.mouseEnter = !0, (a.inputmask.shadowRoot || a.ownerDocument).activeElement !== a) {\n var i = (e.isRTL ? n.getBufferTemplate.call(e).slice().reverse() : n.getBufferTemplate.call(e)).join(\"\");\n e.placeholder !== i && a.placeholder !== e.originalPlaceholder && (e.originalPlaceholder = a.placeholder), \n t.showMaskOnHover && (0, l.HandleNativePlaceholder)(a, i);\n }\n },\n submitEvent: function() {\n var e = this.inputmask, t = e.opts;\n e.undoValue !== e._valueGet(!0) && e.$el.trigger(\"change\"), t.clearMaskOnLostFocus && -1 === n.getLastValidPosition.call(e) && e._valueGet && e._valueGet() === n.getBufferTemplate.call(e).join(\"\") && e._valueSet(\"\"), \n t.clearIncomplete && !1 === s.isComplete.call(e, n.getBuffer.call(e)) && e._valueSet(\"\"), \n t.removeMaskOnSubmit && (e._valueSet(e.unmaskedvalue(), !0), setTimeout((function() {\n (0, l.writeBuffer)(e.el, n.getBuffer.call(e));\n }), 0));\n },\n resetEvent: function() {\n var e = this.inputmask;\n e.refreshValue = !0, setTimeout((function() {\n (0, l.applyInputValue)(e.el, e._valueGet(!0));\n }), 0);\n }\n };\n t.EventHandlers = c;\n },\n 9716: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.EventRuler = void 0;\n var i = s(a(2394)), n = s(a(4528)), r = a(8711), o = a(7760);\n function s(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n var l = {\n on: function(e, t, a) {\n var s = e.inputmask.dependencyLib, l = function(t) {\n t.originalEvent && (t = t.originalEvent || t, arguments[0] = t);\n var l, u = this, c = u.inputmask, f = c ? c.opts : void 0;\n if (void 0 === c && \"FORM\" !== this.nodeName) {\n var d = s.data(u, \"_inputmask_opts\");\n s(u).off(), d && new i.default(d).mask(u);\n } else {\n if ([ \"submit\", \"reset\", \"setvalue\" ].includes(t.type) || \"FORM\" === this.nodeName || !(u.disabled || u.readOnly && !(\"keydown\" === t.type && t.ctrlKey && 67 === t.keyCode || !1 === f.tabThrough && t.keyCode === n.default.TAB))) {\n switch (t.type) {\n case \"input\":\n if (!0 === c.skipInputEvent || t.inputType && \"insertCompositionText\" === t.inputType) return c.skipInputEvent = !1, \n t.preventDefault();\n break;\n\n case \"keydown\":\n c.skipKeyPressEvent = !1, c.skipInputEvent = c.isComposing = t.keyCode === n.default.KEY_229;\n break;\n\n case \"keyup\":\n case \"compositionend\":\n c.isComposing && (c.skipInputEvent = !1);\n break;\n\n case \"keypress\":\n if (!0 === c.skipKeyPressEvent) return t.preventDefault();\n c.skipKeyPressEvent = !0;\n break;\n\n case \"click\":\n case \"focus\":\n return c.validationEvent ? (c.validationEvent = !1, e.blur(), (0, o.HandleNativePlaceholder)(e, (c.isRTL ? r.getBufferTemplate.call(c).slice().reverse() : r.getBufferTemplate.call(c)).join(\"\")), \n setTimeout((function() {\n e.focus();\n }), f.validationEventTimeOut), !1) : (l = arguments, setTimeout((function() {\n e.inputmask && a.apply(u, l);\n }), 0), !1);\n }\n var p = a.apply(u, arguments);\n return !1 === p && (t.preventDefault(), t.stopPropagation()), p;\n }\n t.preventDefault();\n }\n };\n [ \"submit\", \"reset\" ].includes(t) ? (l = l.bind(e), null !== e.form && s(e.form).on(t, l)) : s(e).on(t, l), \n e.inputmask.events[t] = e.inputmask.events[t] || [], e.inputmask.events[t].push(l);\n },\n off: function(e, t) {\n if (e.inputmask && e.inputmask.events) {\n var a = e.inputmask.dependencyLib, i = e.inputmask.events;\n for (var n in t && ((i = [])[t] = e.inputmask.events[t]), i) {\n for (var r = i[n]; r.length > 0; ) {\n var o = r.pop();\n [ \"submit\", \"reset\" ].includes(n) ? null !== e.form && a(e.form).off(n, o) : a(e).off(n, o);\n }\n delete e.inputmask.events[n];\n }\n }\n }\n };\n t.EventRuler = l;\n },\n 219: function(e, t, a) {\n var i = l(a(2394)), n = l(a(4528)), r = l(a(7184)), o = a(8711);\n function s(e) {\n return (s = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n return typeof e;\n } : function(e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n })(e);\n }\n function l(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n var u = i.default.dependencyLib, c = (new Date).getFullYear(), f = {\n d: [ \"[1-9]|[12][0-9]|3[01]\", Date.prototype.setDate, \"day\", Date.prototype.getDate ],\n dd: [ \"0[1-9]|[12][0-9]|3[01]\", Date.prototype.setDate, \"day\", function() {\n return y(Date.prototype.getDate.call(this), 2);\n } ],\n ddd: [ \"\" ],\n dddd: [ \"\" ],\n m: [ \"[1-9]|1[012]\", Date.prototype.setMonth, \"month\", function() {\n return Date.prototype.getMonth.call(this) + 1;\n } ],\n mm: [ \"0[1-9]|1[012]\", Date.prototype.setMonth, \"month\", function() {\n return y(Date.prototype.getMonth.call(this) + 1, 2);\n } ],\n mmm: [ \"\" ],\n mmmm: [ \"\" ],\n yy: [ \"[0-9]{2}\", Date.prototype.setFullYear, \"year\", function() {\n return y(Date.prototype.getFullYear.call(this), 2);\n } ],\n yyyy: [ \"[0-9]{4}\", Date.prototype.setFullYear, \"year\", function() {\n return y(Date.prototype.getFullYear.call(this), 4);\n } ],\n h: [ \"[1-9]|1[0-2]\", Date.prototype.setHours, \"hours\", Date.prototype.getHours ],\n hh: [ \"0[1-9]|1[0-2]\", Date.prototype.setHours, \"hours\", function() {\n return y(Date.prototype.getHours.call(this), 2);\n } ],\n hx: [ function(e) {\n return \"[0-9]{\".concat(e, \"}\");\n }, Date.prototype.setHours, \"hours\", function(e) {\n return Date.prototype.getHours;\n } ],\n H: [ \"1?[0-9]|2[0-3]\", Date.prototype.setHours, \"hours\", Date.prototype.getHours ],\n HH: [ \"0[0-9]|1[0-9]|2[0-3]\", Date.prototype.setHours, \"hours\", function() {\n return y(Date.prototype.getHours.call(this), 2);\n } ],\n Hx: [ function(e) {\n return \"[0-9]{\".concat(e, \"}\");\n }, Date.prototype.setHours, \"hours\", function(e) {\n return function() {\n return y(Date.prototype.getHours.call(this), e);\n };\n } ],\n M: [ \"[1-5]?[0-9]\", Date.prototype.setMinutes, \"minutes\", Date.prototype.getMinutes ],\n MM: [ \"0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]\", Date.prototype.setMinutes, \"minutes\", function() {\n return y(Date.prototype.getMinutes.call(this), 2);\n } ],\n s: [ \"[1-5]?[0-9]\", Date.prototype.setSeconds, \"seconds\", Date.prototype.getSeconds ],\n ss: [ \"0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9]\", Date.prototype.setSeconds, \"seconds\", function() {\n return y(Date.prototype.getSeconds.call(this), 2);\n } ],\n l: [ \"[0-9]{3}\", Date.prototype.setMilliseconds, \"milliseconds\", function() {\n return y(Date.prototype.getMilliseconds.call(this), 3);\n } ],\n L: [ \"[0-9]{2}\", Date.prototype.setMilliseconds, \"milliseconds\", function() {\n return y(Date.prototype.getMilliseconds.call(this), 2);\n } ],\n t: [ \"[ap]\", p, \"ampm\", h, 1 ],\n tt: [ \"[ap]m\", p, \"ampm\", h, 2 ],\n T: [ \"[AP]\", p, \"ampm\", h, 1 ],\n TT: [ \"[AP]M\", p, \"ampm\", h, 2 ],\n Z: [ \"\" ],\n o: [ \"\" ],\n S: [ \"\" ]\n }, d = {\n isoDate: \"yyyy-mm-dd\",\n isoTime: \"HH:MM:ss\",\n isoDateTime: \"yyyy-mm-dd'T'HH:MM:ss\",\n isoUtcDateTime: \"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'\"\n };\n function p(e) {\n e.toLowerCase().includes(\"p\") && this.setHours(this.getHours() + 12);\n }\n function h() {}\n function v(e) {\n var t = new RegExp(\"\\\\d+$\").exec(e[0]);\n if (t && void 0 !== t[0]) {\n var a = f[e[0][0] + \"x\"].slice(\"\");\n return a[0] = a[0](t[0]), a[3] = a[3](t[0]), a;\n }\n if (f[e[0]]) return f[e[0]];\n }\n function m(e) {\n if (!e.tokenizer) {\n var t = [], a = [];\n for (var i in f) if (/\\.*x$/.test(i)) {\n var n = i[0] + \"\\\\d+\";\n -1 === a.indexOf(n) && a.push(n);\n } else -1 === t.indexOf(i[0]) && t.push(i[0]);\n e.tokenizer = \"(\" + (a.length > 0 ? a.join(\"|\") + \"|\" : \"\") + t.join(\"+|\") + \")+?|.\", \n e.tokenizer = new RegExp(e.tokenizer, \"g\");\n }\n return e.tokenizer;\n }\n function g(e, t, a) {\n if (void 0 === e.rawday || !isFinite(e.rawday) && new Date(e.date.getFullYear(), isFinite(e.rawmonth) ? e.month : e.date.getMonth() + 1, 0).getDate() >= e.day || \"29\" == e.day && !Number.isFinite(e.rawyear) || new Date(e.date.getFullYear(), isFinite(e.rawmonth) ? e.month : e.date.getMonth() + 1, 0).getDate() >= e.day) return t;\n if (\"29\" == e.day) {\n var i = P(t.pos, a);\n if (\"yyyy\" === i.targetMatch[0] && t.pos - i.targetMatchIndex == 2) return t.remove = t.pos + 1, \n t;\n } else if (\"02\" == e.month && \"30\" == e.day && void 0 !== t.c) return e.day = \"03\", \n e.date.setDate(3), e.date.setMonth(1), t.insert = [ {\n pos: t.pos,\n c: \"0\"\n }, {\n pos: t.pos + 1,\n c: t.c\n } ], t.caret = o.seekNext.call(this, t.pos + 1), t;\n return !1;\n }\n function k(e, t, a, i) {\n var n, o, s = \"\";\n for (m(a).lastIndex = 0; n = m(a).exec(e); ) {\n if (void 0 === t) if (o = v(n)) s += \"(\" + o[0] + \")\"; else switch (n[0]) {\n case \"[\":\n s += \"(\";\n break;\n\n case \"]\":\n s += \")?\";\n break;\n\n default:\n s += (0, r.default)(n[0]);\n } else if (o = v(n)) if (!0 !== i && o[3]) s += o[3].call(t.date); else o[2] ? s += t[\"raw\" + o[2]] : s += n[0]; else s += n[0];\n }\n return s;\n }\n function y(e, t, a) {\n for (e = String(e), t = t || 2; e.length < t; ) e = a ? e + \"0\" : \"0\" + e;\n return e;\n }\n function b(e, t, a) {\n var i, n, r, o = {\n date: new Date(1, 0, 1)\n }, l = e;\n function u(e, t, a) {\n if (e[i] = \"ampm\" === i ? t : t.replace(/[^0-9]/g, \"0\"), e[\"raw\" + i] = t, void 0 !== r) {\n var n = e[i];\n (\"day\" === i && 29 === parseInt(n) || \"month\" === i && 2 === parseInt(n)) && (29 !== parseInt(e.day) || 2 !== parseInt(e.month) || \"\" !== e.year && void 0 !== e.year || e.date.setFullYear(2012, 1, 29)), \n \"day\" === i && 0 === parseInt(n) && (n = 1), \"month\" === i && (n = parseInt(n)) > 0 && (n -= 1), \n \"year\" === i && n.length < 4 && (n = y(n, 4, !0)), \"\" === n || isNaN(n) || r.call(e.date, n), \n \"ampm\" === i && r.call(e.date, n);\n }\n }\n if (\"string\" == typeof l) {\n for (m(a).lastIndex = 0; n = m(a).exec(t); ) {\n var c = new RegExp(\"\\\\d+$\").exec(n[0]), d = c ? n[0][0] + \"x\" : n[0], p = void 0;\n if (c) {\n var h = m(a).lastIndex, v = P(n.index, a);\n m(a).lastIndex = h, p = l.slice(0, l.indexOf(v.nextMatch[0]));\n } else p = l.slice(0, d.length);\n Object.prototype.hasOwnProperty.call(f, d) && (i = f[d][2], r = f[d][1], u(o, p)), \n l = l.slice(p.length);\n }\n return o;\n }\n if (l && \"object\" === s(l) && Object.prototype.hasOwnProperty.call(l, \"date\")) return l;\n }\n function x(e, t) {\n return k(t.inputFormat, {\n date: e\n }, t);\n }\n function P(e, t) {\n var a, i, n = 0, r = 0;\n for (m(t).lastIndex = 0; i = m(t).exec(t.inputFormat); ) {\n var o = new RegExp(\"\\\\d+$\").exec(i[0]);\n if ((n += r = o ? parseInt(o[0]) : i[0].length) >= e) {\n a = i, i = m(t).exec(t.inputFormat);\n break;\n }\n }\n return {\n targetMatchIndex: n - r,\n nextMatch: i,\n targetMatch: a\n };\n }\n i.default.extendAliases({\n datetime: {\n mask: function(e) {\n return e.numericInput = !1, f.S = e.i18n.ordinalSuffix.join(\"|\"), e.inputFormat = d[e.inputFormat] || e.inputFormat, \n e.displayFormat = d[e.displayFormat] || e.displayFormat || e.inputFormat, e.outputFormat = d[e.outputFormat] || e.outputFormat || e.inputFormat, \n e.placeholder = \"\" !== e.placeholder ? e.placeholder : e.inputFormat.replace(/[[\\]]/, \"\"), \n e.regex = k(e.inputFormat, void 0, e), e.min = b(e.min, e.inputFormat, e), e.max = b(e.max, e.inputFormat, e), \n null;\n },\n placeholder: \"\",\n inputFormat: \"isoDateTime\",\n displayFormat: void 0,\n outputFormat: void 0,\n min: null,\n max: null,\n skipOptionalPartCharacter: \"\",\n i18n: {\n dayNames: [ \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\", \"Sunday\" ],\n monthNames: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\", \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\" ],\n ordinalSuffix: [ \"st\", \"nd\", \"rd\", \"th\" ]\n },\n preValidation: function(e, t, a, i, n, r, o, s) {\n if (s) return !0;\n if (isNaN(a) && e[t] !== a) {\n var l = P(t, n);\n if (l.nextMatch && l.nextMatch[0] === a && l.targetMatch[0].length > 1) {\n var u = f[l.targetMatch[0]][0];\n if (new RegExp(u).test(\"0\" + e[t - 1])) return e[t] = e[t - 1], e[t - 1] = \"0\", \n {\n fuzzy: !0,\n buffer: e,\n refreshFromBuffer: {\n start: t - 1,\n end: t + 1\n },\n pos: t + 1\n };\n }\n }\n return !0;\n },\n postValidation: function(e, t, a, i, n, r, o, s) {\n var l, u;\n if (o) return !0;\n if (!1 === i && (((l = P(t + 1, n)).targetMatch && l.targetMatchIndex === t && l.targetMatch[0].length > 1 && void 0 !== f[l.targetMatch[0]] || (l = P(t + 2, n)).targetMatch && l.targetMatchIndex === t + 1 && l.targetMatch[0].length > 1 && void 0 !== f[l.targetMatch[0]]) && (u = f[l.targetMatch[0]][0]), \n void 0 !== u && (void 0 !== r.validPositions[t + 1] && new RegExp(u).test(a + \"0\") ? (e[t] = a, \n e[t + 1] = \"0\", i = {\n pos: t + 2,\n caret: t\n }) : new RegExp(u).test(\"0\" + a) && (e[t] = \"0\", e[t + 1] = a, i = {\n pos: t + 2\n })), !1 === i)) return i;\n if (i.fuzzy && (e = i.buffer, t = i.pos), (l = P(t, n)).targetMatch && l.targetMatch[0] && void 0 !== f[l.targetMatch[0]]) {\n u = f[l.targetMatch[0]][0];\n var d = e.slice(l.targetMatchIndex, l.targetMatchIndex + l.targetMatch[0].length);\n !1 === new RegExp(u).test(d.join(\"\")) && 2 === l.targetMatch[0].length && r.validPositions[l.targetMatchIndex] && r.validPositions[l.targetMatchIndex + 1] && (r.validPositions[l.targetMatchIndex + 1].input = \"0\");\n }\n var p = i, h = b(e.join(\"\"), n.inputFormat, n);\n return p && h.date.getTime() == h.date.getTime() && (n.prefillYear && (p = function(e, t, a) {\n if (e.year !== e.rawyear) {\n var i = c.toString(), n = e.rawyear.replace(/[^0-9]/g, \"\"), r = i.slice(0, n.length), o = i.slice(n.length);\n if (2 === n.length && n === r) {\n var s = new Date(c, e.month - 1, e.day);\n e.day == s.getDate() && (!a.max || a.max.date.getTime() >= s.getTime()) && (e.date.setFullYear(c), \n e.year = i, t.insert = [ {\n pos: t.pos + 1,\n c: o[0]\n }, {\n pos: t.pos + 2,\n c: o[1]\n } ]);\n }\n }\n return t;\n }(h, p, n)), p = function(e, t, a, i, n) {\n if (!t) return t;\n if (a.min) {\n if (e.rawyear) {\n var r, o = e.rawyear.replace(/[^0-9]/g, \"\"), s = a.min.year.substr(0, o.length);\n if (o < s) {\n var l = P(t.pos, a);\n if (o = e.rawyear.substr(0, t.pos - l.targetMatchIndex + 1).replace(/[^0-9]/g, \"0\"), \n (s = a.min.year.substr(0, o.length)) <= o) return t.remove = l.targetMatchIndex + o.length, \n t;\n if (o = \"yyyy\" === l.targetMatch[0] ? e.rawyear.substr(1, 1) : e.rawyear.substr(0, 1), \n s = a.min.year.substr(2, 1), r = a.max ? a.max.year.substr(2, 1) : o, 1 === o.length && s <= o && o <= r && !0 !== n) return \"yyyy\" === l.targetMatch[0] ? (t.insert = [ {\n pos: t.pos + 1,\n c: o,\n strict: !0\n } ], t.caret = t.pos + 2, i.validPositions[t.pos].input = a.min.year[1]) : (t.insert = [ {\n pos: t.pos + 1,\n c: a.min.year[1],\n strict: !0\n }, {\n pos: t.pos + 2,\n c: o,\n strict: !0\n } ], t.caret = t.pos + 3, i.validPositions[t.pos].input = a.min.year[0]), t;\n t = !1;\n }\n }\n for (var u in e) -1 === u.indexOf(\"raw\") && e[\"raw\".concat(u)] && (e[u], e[\"raw\".concat(u)]);\n t && e.year && e.year === e.rawyear && a.min.date.getTime() == a.min.date.getTime() && (t = a.min.date.getTime() <= e.date.getTime());\n }\n return t && a.max && a.max.date.getTime() == a.max.date.getTime() && (t = a.max.date.getTime() >= e.date.getTime()), \n t;\n }(h, p = g.call(this, h, p, n), n, r, s)), void 0 !== t && p && i.pos !== t ? {\n buffer: k(n.inputFormat, h, n).split(\"\"),\n refreshFromBuffer: {\n start: t,\n end: i.pos\n },\n pos: i.caret || i.pos\n } : p;\n },\n onKeyDown: function(e, t, a, i) {\n e.ctrlKey && e.keyCode === n.default.RIGHT && (this.inputmask._valueSet(x(new Date, i)), \n u(this).trigger(\"setvalue\"));\n },\n onUnMask: function(e, t, a) {\n return t ? k(a.outputFormat, b(e, a.inputFormat, a), a, !0) : t;\n },\n casing: function(e, t, a, i) {\n return 0 == t.nativeDef.indexOf(\"[ap]\") ? e.toLowerCase() : 0 == t.nativeDef.indexOf(\"[AP]\") ? e.toUpperCase() : e;\n },\n onBeforeMask: function(e, t) {\n return \"[object Date]\" === Object.prototype.toString.call(e) && (e = x(e, t)), e;\n },\n insertMode: !1,\n shiftPositions: !1,\n keepStatic: !1,\n inputmode: \"numeric\",\n prefillYear: !0\n }\n });\n },\n 3851: function(e, t, a) {\n var i, n = (i = a(2394)) && i.__esModule ? i : {\n default: i\n }, r = a(8711), o = a(4713);\n n.default.extendDefinitions({\n A: {\n validator: \"[A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n casing: \"upper\"\n },\n \"&\": {\n validator: \"[0-9A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5]\",\n casing: \"upper\"\n },\n \"#\": {\n validator: \"[0-9A-Fa-f]\",\n casing: \"upper\"\n }\n });\n var s = new RegExp(\"25[0-5]|2[0-4][0-9]|[01][0-9][0-9]\");\n function l(e, t, a, i, n) {\n return a - 1 > -1 && \".\" !== t.buffer[a - 1] ? (e = t.buffer[a - 1] + e, e = a - 2 > -1 && \".\" !== t.buffer[a - 2] ? t.buffer[a - 2] + e : \"0\" + e) : e = \"00\" + e, \n s.test(e);\n }\n n.default.extendAliases({\n cssunit: {\n regex: \"[+-]?[0-9]+\\\\.?([0-9]+)?(px|em|rem|ex|%|in|cm|mm|pt|pc)\"\n },\n url: {\n regex: \"(https?|ftp)://.*\",\n autoUnmask: !1,\n keepStatic: !1,\n tabThrough: !0\n },\n ip: {\n mask: \"i[i[i]].j[j[j]].k[k[k]].l[l[l]]\",\n definitions: {\n i: {\n validator: l\n },\n j: {\n validator: l\n },\n k: {\n validator: l\n },\n l: {\n validator: l\n }\n },\n onUnMask: function(e, t, a) {\n return e;\n },\n inputmode: \"numeric\"\n },\n email: {\n mask: \"*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]\",\n greedy: !1,\n casing: \"lower\",\n onBeforePaste: function(e, t) {\n return (e = e.toLowerCase()).replace(\"mailto:\", \"\");\n },\n definitions: {\n \"*\": {\n validator: \"[0-9\\uff11-\\uff19A-Za-z\\u0410-\\u044f\\u0401\\u0451\\xc0-\\xff\\xb5!#$%&'*+/=?^_`{|}~-]\"\n },\n \"-\": {\n validator: \"[0-9A-Za-z-]\"\n }\n },\n onUnMask: function(e, t, a) {\n return e;\n },\n inputmode: \"email\"\n },\n mac: {\n mask: \"##:##:##:##:##:##\"\n },\n vin: {\n mask: \"V{13}9{4}\",\n definitions: {\n V: {\n validator: \"[A-HJ-NPR-Za-hj-npr-z\\\\d]\",\n casing: \"upper\"\n }\n },\n clearIncomplete: !0,\n autoUnmask: !0\n },\n ssn: {\n mask: \"999-99-9999\",\n postValidation: function(e, t, a, i, n, s, l) {\n var u = o.getMaskTemplate.call(this, !0, r.getLastValidPosition.call(this), !0, !0);\n return /^(?!219-09-9999|078-05-1120)(?!666|000|9.{2}).{3}-(?!00).{2}-(?!0{4}).{4}$/.test(u.join(\"\"));\n }\n }\n });\n },\n 207: function(e, t, a) {\n var i = s(a(2394)), n = s(a(4528)), r = s(a(7184)), o = a(8711);\n function s(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n var l = i.default.dependencyLib;\n function u(e, t) {\n for (var a = \"\", n = 0; n < e.length; n++) i.default.prototype.definitions[e.charAt(n)] || t.definitions[e.charAt(n)] || t.optionalmarker[0] === e.charAt(n) || t.optionalmarker[1] === e.charAt(n) || t.quantifiermarker[0] === e.charAt(n) || t.quantifiermarker[1] === e.charAt(n) || t.groupmarker[0] === e.charAt(n) || t.groupmarker[1] === e.charAt(n) || t.alternatormarker === e.charAt(n) ? a += \"\\\\\" + e.charAt(n) : a += e.charAt(n);\n return a;\n }\n function c(e, t, a, i) {\n if (e.length > 0 && t > 0 && (!a.digitsOptional || i)) {\n var n = e.indexOf(a.radixPoint), r = !1;\n a.negationSymbol.back === e[e.length - 1] && (r = !0, e.length--), -1 === n && (e.push(a.radixPoint), \n n = e.length - 1);\n for (var o = 1; o <= t; o++) isFinite(e[n + o]) || (e[n + o] = \"0\");\n }\n return r && e.push(a.negationSymbol.back), e;\n }\n function f(e, t) {\n var a = 0;\n if (\"+\" === e) {\n for (a in t.validPositions) ;\n a = o.seekNext.call(this, parseInt(a));\n }\n for (var i in t.tests) if ((i = parseInt(i)) >= a) for (var n = 0, r = t.tests[i].length; n < r; n++) if ((void 0 === t.validPositions[i] || \"-\" === e) && t.tests[i][n].match.def === e) return i + (void 0 !== t.validPositions[i] && \"-\" !== e ? 1 : 0);\n return a;\n }\n function d(e, t) {\n var a = -1;\n for (var i in t.validPositions) {\n var n = t.validPositions[i];\n if (n && n.match.def === e) {\n a = parseInt(i);\n break;\n }\n }\n return a;\n }\n function p(e, t, a, i, n) {\n var r = t.buffer ? t.buffer.indexOf(n.radixPoint) : -1, o = (-1 !== r || i && n.jitMasking) && new RegExp(n.definitions[9].validator).test(e);\n return n._radixDance && -1 !== r && o && null == t.validPositions[r] ? {\n insert: {\n pos: r === a ? r + 1 : r,\n c: n.radixPoint\n },\n pos: a\n } : o;\n }\n i.default.extendAliases({\n numeric: {\n mask: function(e) {\n e.repeat = 0, e.groupSeparator === e.radixPoint && e.digits && \"0\" !== e.digits && (\".\" === e.radixPoint ? e.groupSeparator = \",\" : \",\" === e.radixPoint ? e.groupSeparator = \".\" : e.groupSeparator = \"\"), \n \" \" === e.groupSeparator && (e.skipOptionalPartCharacter = void 0), e.placeholder.length > 1 && (e.placeholder = e.placeholder.charAt(0)), \n \"radixFocus\" === e.positionCaretOnClick && \"\" === e.placeholder && (e.positionCaretOnClick = \"lvp\");\n var t = \"0\", a = e.radixPoint;\n !0 === e.numericInput && void 0 === e.__financeInput ? (t = \"1\", e.positionCaretOnClick = \"radixFocus\" === e.positionCaretOnClick ? \"lvp\" : e.positionCaretOnClick, \n e.digitsOptional = !1, isNaN(e.digits) && (e.digits = 2), e._radixDance = !1, a = \",\" === e.radixPoint ? \"?\" : \"!\", \n \"\" !== e.radixPoint && void 0 === e.definitions[a] && (e.definitions[a] = {}, e.definitions[a].validator = \"[\" + e.radixPoint + \"]\", \n e.definitions[a].placeholder = e.radixPoint, e.definitions[a].static = !0, e.definitions[a].generated = !0)) : (e.__financeInput = !1, \n e.numericInput = !0);\n var i, n = \"[+]\";\n if (n += u(e.prefix, e), \"\" !== e.groupSeparator ? (void 0 === e.definitions[e.groupSeparator] && (e.definitions[e.groupSeparator] = {}, \n e.definitions[e.groupSeparator].validator = \"[\" + e.groupSeparator + \"]\", e.definitions[e.groupSeparator].placeholder = e.groupSeparator, \n e.definitions[e.groupSeparator].static = !0, e.definitions[e.groupSeparator].generated = !0), \n n += e._mask(e)) : n += \"9{+}\", void 0 !== e.digits && 0 !== e.digits) {\n var o = e.digits.toString().split(\",\");\n isFinite(o[0]) && o[1] && isFinite(o[1]) ? n += a + t + \"{\" + e.digits + \"}\" : (isNaN(e.digits) || parseInt(e.digits) > 0) && (e.digitsOptional || e.jitMasking ? (i = n + a + t + \"{0,\" + e.digits + \"}\", \n e.keepStatic = !0) : n += a + t + \"{\" + e.digits + \"}\");\n } else e.inputmode = \"numeric\";\n return n += u(e.suffix, e), n += \"[-]\", i && (n = [ i + u(e.suffix, e) + \"[-]\", n ]), \n e.greedy = !1, function(e) {\n void 0 === e.parseMinMaxOptions && (null !== e.min && (e.min = e.min.toString().replace(new RegExp((0, \n r.default)(e.groupSeparator), \"g\"), \"\"), \",\" === e.radixPoint && (e.min = e.min.replace(e.radixPoint, \".\")), \n e.min = isFinite(e.min) ? parseFloat(e.min) : NaN, isNaN(e.min) && (e.min = Number.MIN_VALUE)), \n null !== e.max && (e.max = e.max.toString().replace(new RegExp((0, r.default)(e.groupSeparator), \"g\"), \"\"), \n \",\" === e.radixPoint && (e.max = e.max.replace(e.radixPoint, \".\")), e.max = isFinite(e.max) ? parseFloat(e.max) : NaN, \n isNaN(e.max) && (e.max = Number.MAX_VALUE)), e.parseMinMaxOptions = \"done\");\n }(e), n;\n },\n _mask: function(e) {\n return \"(\" + e.groupSeparator + \"999){+|1}\";\n },\n digits: \"*\",\n digitsOptional: !0,\n enforceDigitsOnBlur: !1,\n radixPoint: \".\",\n positionCaretOnClick: \"radixFocus\",\n _radixDance: !0,\n groupSeparator: \"\",\n allowMinus: !0,\n negationSymbol: {\n front: \"-\",\n back: \"\"\n },\n prefix: \"\",\n suffix: \"\",\n min: null,\n max: null,\n SetMaxOnOverflow: !1,\n step: 1,\n inputType: \"text\",\n unmaskAsNumber: !1,\n roundingFN: Math.round,\n inputmode: \"decimal\",\n shortcuts: {\n k: \"000\",\n m: \"000000\"\n },\n placeholder: \"0\",\n greedy: !1,\n rightAlign: !0,\n insertMode: !0,\n autoUnmask: !1,\n skipOptionalPartCharacter: \"\",\n usePrototypeDefinitions: !1,\n definitions: {\n 0: {\n validator: p\n },\n 1: {\n validator: p,\n definitionSymbol: \"9\"\n },\n 9: {\n validator: \"[0-9\\uff10-\\uff19\\u0660-\\u0669\\u06f0-\\u06f9]\",\n definitionSymbol: \"*\"\n },\n \"+\": {\n validator: function(e, t, a, i, n) {\n return n.allowMinus && (\"-\" === e || e === n.negationSymbol.front);\n }\n },\n \"-\": {\n validator: function(e, t, a, i, n) {\n return n.allowMinus && e === n.negationSymbol.back;\n }\n }\n },\n preValidation: function(e, t, a, i, n, r, o, s) {\n var l;\n if (!1 !== n.__financeInput && a === n.radixPoint) return !1;\n if (l = n.shortcuts && n.shortcuts[a]) {\n if (l.length > 1) for (var u = [], c = 0; c < l.length; c++) u.push({\n pos: t + c,\n c: l[c],\n strict: !1\n });\n return {\n insert: u\n };\n }\n var p = e.indexOf(n.radixPoint), h = t;\n if (t = function(e, t, a, i, n) {\n return n._radixDance && n.numericInput && t !== n.negationSymbol.back && e <= a && (a > 0 || t == n.radixPoint) && (void 0 === i.validPositions[e - 1] || i.validPositions[e - 1].input !== n.negationSymbol.back) && (e -= 1), \n e;\n }(t, a, p, r, n), \"-\" === a || a === n.negationSymbol.front) {\n if (!0 !== n.allowMinus) return !1;\n var v = !1, m = d(\"+\", r), g = d(\"-\", r);\n return -1 !== m && (v = [ m, g ]), !1 !== v ? {\n remove: v,\n caret: h - n.negationSymbol.back.length\n } : {\n insert: [ {\n pos: f.call(this, \"+\", r),\n c: n.negationSymbol.front,\n fromIsValid: !0\n }, {\n pos: f.call(this, \"-\", r),\n c: n.negationSymbol.back,\n fromIsValid: void 0\n } ],\n caret: h + n.negationSymbol.back.length\n };\n }\n if (a === n.groupSeparator) return {\n caret: h\n };\n if (s) return !0;\n if (-1 !== p && !0 === n._radixDance && !1 === i && a === n.radixPoint && void 0 !== n.digits && (isNaN(n.digits) || parseInt(n.digits) > 0) && p !== t) return {\n caret: n._radixDance && t === p - 1 ? p + 1 : p\n };\n if (!1 === n.__financeInput) if (i) {\n if (n.digitsOptional) return {\n rewritePosition: o.end\n };\n if (!n.digitsOptional) {\n if (o.begin > p && o.end <= p) return a === n.radixPoint ? {\n insert: {\n pos: p + 1,\n c: \"0\",\n fromIsValid: !0\n },\n rewritePosition: p\n } : {\n rewritePosition: p + 1\n };\n if (o.begin < p) return {\n rewritePosition: o.begin - 1\n };\n }\n } else if (!n.showMaskOnHover && !n.showMaskOnFocus && !n.digitsOptional && n.digits > 0 && \"\" === this.__valueGet.call(this.el)) return {\n rewritePosition: p\n };\n return {\n rewritePosition: t\n };\n },\n postValidation: function(e, t, a, i, n, r, o) {\n if (!1 === i) return i;\n if (o) return !0;\n if (null !== n.min || null !== n.max) {\n var s = n.onUnMask(e.slice().reverse().join(\"\"), void 0, l.extend({}, n, {\n unmaskAsNumber: !0\n }));\n if (null !== n.min && s < n.min && (s.toString().length > n.min.toString().length || s < 0)) return !1;\n if (null !== n.max && s > n.max) return !!n.SetMaxOnOverflow && {\n refreshFromBuffer: !0,\n buffer: c(n.max.toString().replace(\".\", n.radixPoint).split(\"\"), n.digits, n).reverse()\n };\n }\n return i;\n },\n onUnMask: function(e, t, a) {\n if (\"\" === t && !0 === a.nullable) return t;\n var i = e.replace(a.prefix, \"\");\n return i = (i = i.replace(a.suffix, \"\")).replace(new RegExp((0, r.default)(a.groupSeparator), \"g\"), \"\"), \n \"\" !== a.placeholder.charAt(0) && (i = i.replace(new RegExp(a.placeholder.charAt(0), \"g\"), \"0\")), \n a.unmaskAsNumber ? (\"\" !== a.radixPoint && -1 !== i.indexOf(a.radixPoint) && (i = i.replace(r.default.call(this, a.radixPoint), \".\")), \n i = (i = i.replace(new RegExp(\"^\" + (0, r.default)(a.negationSymbol.front)), \"-\")).replace(new RegExp((0, \n r.default)(a.negationSymbol.back) + \"$\"), \"\"), Number(i)) : i;\n },\n isComplete: function(e, t) {\n var a = (t.numericInput ? e.slice().reverse() : e).join(\"\");\n return a = (a = (a = (a = (a = a.replace(new RegExp(\"^\" + (0, r.default)(t.negationSymbol.front)), \"-\")).replace(new RegExp((0, \n r.default)(t.negationSymbol.back) + \"$\"), \"\")).replace(t.prefix, \"\")).replace(t.suffix, \"\")).replace(new RegExp((0, \n r.default)(t.groupSeparator) + \"([0-9]{3})\", \"g\"), \"$1\"), \",\" === t.radixPoint && (a = a.replace((0, \n r.default)(t.radixPoint), \".\")), isFinite(a);\n },\n onBeforeMask: function(e, t) {\n var a = t.radixPoint || \",\";\n isFinite(t.digits) && (t.digits = parseInt(t.digits)), \"number\" != typeof e && \"number\" !== t.inputType || \"\" === a || (e = e.toString().replace(\".\", a));\n var i = \"-\" === e.charAt(0) || e.charAt(0) === t.negationSymbol.front, n = e.split(a), o = n[0].replace(/[^\\-0-9]/g, \"\"), s = n.length > 1 ? n[1].replace(/[^0-9]/g, \"\") : \"\", l = n.length > 1;\n e = o + (\"\" !== s ? a + s : s);\n var u = 0;\n if (\"\" !== a && (u = t.digitsOptional ? t.digits < s.length ? t.digits : s.length : t.digits, \n \"\" !== s || !t.digitsOptional)) {\n var f = Math.pow(10, u || 1);\n e = e.replace((0, r.default)(a), \".\"), isNaN(parseFloat(e)) || (e = (t.roundingFN(parseFloat(e) * f) / f).toFixed(u)), \n e = e.toString().replace(\".\", a);\n }\n if (0 === t.digits && -1 !== e.indexOf(a) && (e = e.substring(0, e.indexOf(a))), \n null !== t.min || null !== t.max) {\n var d = e.toString().replace(a, \".\");\n null !== t.min && d < t.min ? e = t.min.toString().replace(\".\", a) : null !== t.max && d > t.max && (e = t.max.toString().replace(\".\", a));\n }\n return i && \"-\" !== e.charAt(0) && (e = \"-\" + e), c(e.toString().split(\"\"), u, t, l).join(\"\");\n },\n onBeforeWrite: function(e, t, a, i) {\n function n(e, t) {\n if (!1 !== i.__financeInput || t) {\n var a = e.indexOf(i.radixPoint);\n -1 !== a && e.splice(a, 1);\n }\n if (\"\" !== i.groupSeparator) for (;-1 !== (a = e.indexOf(i.groupSeparator)); ) e.splice(a, 1);\n return e;\n }\n var o, s = function(e, t) {\n var a = new RegExp(\"(^\" + (\"\" !== t.negationSymbol.front ? (0, r.default)(t.negationSymbol.front) + \"?\" : \"\") + (0, \n r.default)(t.prefix) + \")(.*)(\" + (0, r.default)(t.suffix) + (\"\" != t.negationSymbol.back ? (0, \n r.default)(t.negationSymbol.back) + \"?\" : \"\") + \"$)\").exec(e.slice().reverse().join(\"\")), i = a ? a[2] : \"\", n = !1;\n return i && (i = i.split(t.radixPoint.charAt(0))[0], n = new RegExp(\"^[0\" + t.groupSeparator + \"]*\").exec(i)), \n !(!n || !(n[0].length > 1 || n[0].length > 0 && n[0].length < i.length)) && n;\n }(t, i);\n if (s) for (var u = t.join(\"\").lastIndexOf(s[0].split(\"\").reverse().join(\"\")) - (s[0] == s.input ? 0 : 1), f = s[0] == s.input ? 1 : 0, d = s[0].length - f; d > 0; d--) delete this.maskset.validPositions[u + d], \n delete t[u + d];\n if (e) switch (e.type) {\n case \"blur\":\n case \"checkval\":\n if (null !== i.min) {\n var p = i.onUnMask(t.slice().reverse().join(\"\"), void 0, l.extend({}, i, {\n unmaskAsNumber: !0\n }));\n if (null !== i.min && p < i.min) return {\n refreshFromBuffer: !0,\n buffer: c(i.min.toString().replace(\".\", i.radixPoint).split(\"\"), i.digits, i).reverse()\n };\n }\n if (t[t.length - 1] === i.negationSymbol.front) {\n var h = new RegExp(\"(^\" + (\"\" != i.negationSymbol.front ? (0, r.default)(i.negationSymbol.front) + \"?\" : \"\") + (0, \n r.default)(i.prefix) + \")(.*)(\" + (0, r.default)(i.suffix) + (\"\" != i.negationSymbol.back ? (0, \n r.default)(i.negationSymbol.back) + \"?\" : \"\") + \"$)\").exec(n(t.slice(), !0).reverse().join(\"\"));\n 0 == (h ? h[2] : \"\") && (o = {\n refreshFromBuffer: !0,\n buffer: [ 0 ]\n });\n } else \"\" !== i.radixPoint && t[0] === i.radixPoint && (o && o.buffer ? o.buffer.shift() : (t.shift(), \n o = {\n refreshFromBuffer: !0,\n buffer: n(t)\n }));\n if (i.enforceDigitsOnBlur) {\n var v = (o = o || {}) && o.buffer || t.slice().reverse();\n o.refreshFromBuffer = !0, o.buffer = c(v, i.digits, i, !0).reverse();\n }\n }\n return o;\n },\n onKeyDown: function(e, t, a, i) {\n var r, o = l(this);\n if (e.ctrlKey) switch (e.keyCode) {\n case n.default.UP:\n return this.inputmask.__valueSet.call(this, parseFloat(this.inputmask.unmaskedvalue()) + parseInt(i.step)), \n o.trigger(\"setvalue\"), !1;\n\n case n.default.DOWN:\n return this.inputmask.__valueSet.call(this, parseFloat(this.inputmask.unmaskedvalue()) - parseInt(i.step)), \n o.trigger(\"setvalue\"), !1;\n }\n if (!e.shiftKey && (e.keyCode === n.default.DELETE || e.keyCode === n.default.BACKSPACE || e.keyCode === n.default.BACKSPACE_SAFARI) && a.begin !== t.length) {\n if (t[e.keyCode === n.default.DELETE ? a.begin - 1 : a.end] === i.negationSymbol.front) return r = t.slice().reverse(), \n \"\" !== i.negationSymbol.front && r.shift(), \"\" !== i.negationSymbol.back && r.pop(), \n o.trigger(\"setvalue\", [ r.join(\"\"), a.begin ]), !1;\n if (!0 === i._radixDance) {\n var s = t.indexOf(i.radixPoint);\n if (i.digitsOptional) {\n if (0 === s) return (r = t.slice().reverse()).pop(), o.trigger(\"setvalue\", [ r.join(\"\"), a.begin >= r.length ? r.length : a.begin ]), \n !1;\n } else if (-1 !== s && (a.begin < s || a.end < s || e.keyCode === n.default.DELETE && a.begin === s)) return a.begin !== a.end || e.keyCode !== n.default.BACKSPACE && e.keyCode !== n.default.BACKSPACE_SAFARI || a.begin++, \n (r = t.slice().reverse()).splice(r.length - a.begin, a.begin - a.end + 1), r = c(r, i.digits, i).join(\"\"), \n o.trigger(\"setvalue\", [ r, a.begin >= r.length ? s + 1 : a.begin ]), !1;\n }\n }\n }\n },\n currency: {\n prefix: \"\",\n groupSeparator: \",\",\n alias: \"numeric\",\n digits: 2,\n digitsOptional: !1\n },\n decimal: {\n alias: \"numeric\"\n },\n integer: {\n alias: \"numeric\",\n inputmode: \"numeric\",\n digits: 0\n },\n percentage: {\n alias: \"numeric\",\n min: 0,\n max: 100,\n suffix: \" %\",\n digits: 0,\n allowMinus: !1\n },\n indianns: {\n alias: \"numeric\",\n _mask: function(e) {\n return \"(\" + e.groupSeparator + \"99){*|1}(\" + e.groupSeparator + \"999){1|1}\";\n },\n groupSeparator: \",\",\n radixPoint: \".\",\n placeholder: \"0\",\n digits: 2,\n digitsOptional: !1\n }\n });\n },\n 9380: function(e, t, a) {\n var i;\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0;\n var n = ((i = a(8741)) && i.__esModule ? i : {\n default: i\n }).default ? window : {};\n t.default = n;\n },\n 7760: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.applyInputValue = c, t.clearOptionalTail = f, t.checkVal = d, t.HandleNativePlaceholder = function(e, t) {\n var a = e ? e.inputmask : this;\n if (l.ie) {\n if (e.inputmask._valueGet() !== t && (e.placeholder !== t || \"\" === e.placeholder)) {\n var i = o.getBuffer.call(a).slice(), n = e.inputmask._valueGet();\n if (n !== t) {\n var r = o.getLastValidPosition.call(a);\n -1 === r && n === o.getBufferTemplate.call(a).join(\"\") ? i = [] : -1 !== r && f.call(a, i), \n p(e, i);\n }\n }\n } else e.placeholder !== t && (e.placeholder = t, \"\" === e.placeholder && e.removeAttribute(\"placeholder\"));\n }, t.unmaskedvalue = function(e) {\n var t = e ? e.inputmask : this, a = t.opts, i = t.maskset;\n if (e) {\n if (void 0 === e.inputmask) return e.value;\n e.inputmask && e.inputmask.refreshValue && c(e, e.inputmask._valueGet(!0));\n }\n var n = [], r = i.validPositions;\n for (var s in r) r[s] && r[s].match && (1 != r[s].match.static || Array.isArray(i.metadata) && !0 !== r[s].generatedInput) && n.push(r[s].input);\n var l = 0 === n.length ? \"\" : (t.isRTL ? n.reverse() : n).join(\"\");\n if (\"function\" == typeof a.onUnMask) {\n var u = (t.isRTL ? o.getBuffer.call(t).slice().reverse() : o.getBuffer.call(t)).join(\"\");\n l = a.onUnMask.call(t, u, l, a);\n }\n return l;\n }, t.writeBuffer = p;\n var i, n = (i = a(4528)) && i.__esModule ? i : {\n default: i\n }, r = a(4713), o = a(8711), s = a(7215), l = a(9845), u = a(6030);\n function c(e, t) {\n var a = e ? e.inputmask : this, i = a.opts;\n e.inputmask.refreshValue = !1, \"function\" == typeof i.onBeforeMask && (t = i.onBeforeMask.call(a, t, i) || t), \n d(e, !0, !1, t = t.toString().split(\"\")), a.undoValue = a._valueGet(!0), (i.clearMaskOnLostFocus || i.clearIncomplete) && e.inputmask._valueGet() === o.getBufferTemplate.call(a).join(\"\") && -1 === o.getLastValidPosition.call(a) && e.inputmask._valueSet(\"\");\n }\n function f(e) {\n e.length = 0;\n for (var t, a = r.getMaskTemplate.call(this, !0, 0, !0, void 0, !0); void 0 !== (t = a.shift()); ) e.push(t);\n return e;\n }\n function d(e, t, a, i, n) {\n var l = e ? e.inputmask : this, c = l.maskset, f = l.opts, d = l.dependencyLib, h = i.slice(), v = \"\", m = -1, g = void 0, k = f.skipOptionalPartCharacter;\n f.skipOptionalPartCharacter = \"\", o.resetMaskSet.call(l), c.tests = {}, m = f.radixPoint ? o.determineNewCaretPosition.call(l, {\n begin: 0,\n end: 0\n }, !1, !1 === f.__financeInput ? \"radixFocus\" : void 0).begin : 0, c.p = m, l.caretPos = {\n begin: m\n };\n var y = [], b = l.caretPos;\n if (h.forEach((function(e, t) {\n if (void 0 !== e) {\n var i = new d.Event(\"_checkval\");\n i.which = e.toString().charCodeAt(0), v += e;\n var n = o.getLastValidPosition.call(l, void 0, !0);\n !function(e, t) {\n for (var a = r.getMaskTemplate.call(l, !0, 0).slice(e, o.seekNext.call(l, e, !1, !1)).join(\"\").replace(/'/g, \"\"), i = a.indexOf(t); i > 0 && \" \" === a[i - 1]; ) i--;\n var n = 0 === i && !o.isMask.call(l, e) && (r.getTest.call(l, e).match.nativeDef === t.charAt(0) || !0 === r.getTest.call(l, e).match.static && r.getTest.call(l, e).match.nativeDef === \"'\" + t.charAt(0) || \" \" === r.getTest.call(l, e).match.nativeDef && (r.getTest.call(l, e + 1).match.nativeDef === t.charAt(0) || !0 === r.getTest.call(l, e + 1).match.static && r.getTest.call(l, e + 1).match.nativeDef === \"'\" + t.charAt(0)));\n if (!n && i > 0 && !o.isMask.call(l, e, !1, !0)) {\n var s = o.seekNext.call(l, e);\n l.caretPos.begin < s && (l.caretPos = {\n begin: s\n });\n }\n return n;\n }(m, v) ? (g = u.EventHandlers.keypressEvent.call(l, i, !0, !1, a, l.caretPos.begin)) && (m = l.caretPos.begin + 1, \n v = \"\") : g = u.EventHandlers.keypressEvent.call(l, i, !0, !1, a, n + 1), g ? (void 0 !== g.pos && c.validPositions[g.pos] && !0 === c.validPositions[g.pos].match.static && void 0 === c.validPositions[g.pos].alternation && (y.push(g.pos), \n l.isRTL || (g.forwardPosition = g.pos + 1)), p.call(l, void 0, o.getBuffer.call(l), g.forwardPosition, i, !1), \n l.caretPos = {\n begin: g.forwardPosition,\n end: g.forwardPosition\n }, b = l.caretPos) : void 0 === c.validPositions[t] && h[t] === r.getPlaceholder.call(l, t) && o.isMask.call(l, t, !0) ? l.caretPos.begin++ : l.caretPos = b;\n }\n })), y.length > 0) {\n var x, P, E = o.seekNext.call(l, -1, void 0, !1);\n if (!s.isComplete.call(l, o.getBuffer.call(l)) && y.length <= E || s.isComplete.call(l, o.getBuffer.call(l)) && y.length > 0 && y.length !== E && 0 === y[0]) for (var S = E; void 0 !== (x = y.shift()); ) {\n var _ = new d.Event(\"_checkval\");\n if ((P = c.validPositions[x]).generatedInput = !0, _.which = P.input.charCodeAt(0), \n (g = u.EventHandlers.keypressEvent.call(l, _, !0, !1, a, S)) && void 0 !== g.pos && g.pos !== x && c.validPositions[g.pos] && !0 === c.validPositions[g.pos].match.static) y.push(g.pos); else if (!g) break;\n S++;\n }\n }\n t && p.call(l, e, o.getBuffer.call(l), g ? g.forwardPosition : l.caretPos.begin, n || new d.Event(\"checkval\"), n && \"input\" === n.type && l.undoValue !== l._valueGet(!0)), \n f.skipOptionalPartCharacter = k;\n }\n function p(e, t, a, i, r) {\n var l = e ? e.inputmask : this, u = l.opts, c = l.dependencyLib;\n if (i && \"function\" == typeof u.onBeforeWrite) {\n var f = u.onBeforeWrite.call(l, i, t, a, u);\n if (f) {\n if (f.refreshFromBuffer) {\n var d = f.refreshFromBuffer;\n s.refreshFromBuffer.call(l, !0 === d ? d : d.start, d.end, f.buffer || t), t = o.getBuffer.call(l, !0);\n }\n void 0 !== a && (a = void 0 !== f.caret ? f.caret : a);\n }\n }\n if (void 0 !== e && (e.inputmask._valueSet(t.join(\"\")), void 0 === a || void 0 !== i && \"blur\" === i.type || o.caret.call(l, e, a, void 0, void 0, void 0 !== i && \"keydown\" === i.type && (i.keyCode === n.default.DELETE || i.keyCode === n.default.BACKSPACE)), \n !0 === r)) {\n var p = c(e), h = e.inputmask._valueGet();\n e.inputmask.skipInputEvent = !0, p.trigger(\"input\"), setTimeout((function() {\n h === o.getBufferTemplate.call(l).join(\"\") ? p.trigger(\"cleared\") : !0 === s.isComplete.call(l, t) && p.trigger(\"complete\");\n }), 0);\n }\n }\n },\n 2394: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0, a(7149), a(3194);\n var i = a(157), n = m(a(4963)), r = m(a(9380)), o = a(2391), s = a(4713), l = a(8711), u = a(7215), c = a(7760), f = a(9716), d = m(a(7392)), p = m(a(3976)), h = m(a(8741));\n function v(e) {\n return (v = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n return typeof e;\n } : function(e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n })(e);\n }\n function m(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n var g = r.default.document, k = \"_inputmask_opts\";\n function y(e, t, a) {\n if (h.default) {\n if (!(this instanceof y)) return new y(e, t, a);\n this.dependencyLib = n.default, this.el = void 0, this.events = {}, this.maskset = void 0, \n !0 !== a && (\"[object Object]\" === Object.prototype.toString.call(e) ? t = e : (t = t || {}, \n e && (t.alias = e)), this.opts = n.default.extend(!0, {}, this.defaults, t), this.noMasksCache = t && void 0 !== t.definitions, \n this.userOptions = t || {}, b(this.opts.alias, t, this.opts)), this.refreshValue = !1, \n this.undoValue = void 0, this.$el = void 0, this.skipKeyPressEvent = !1, this.skipInputEvent = !1, \n this.validationEvent = !1, this.ignorable = !1, this.maxLength, this.mouseEnter = !1, \n this.originalPlaceholder = void 0, this.isComposing = !1;\n }\n }\n function b(e, t, a) {\n var i = y.prototype.aliases[e];\n return i ? (i.alias && b(i.alias, void 0, a), n.default.extend(!0, a, i), n.default.extend(!0, a, t), \n !0) : (null === a.mask && (a.mask = e), !1);\n }\n y.prototype = {\n dataAttribute: \"data-inputmask\",\n defaults: p.default,\n definitions: d.default,\n aliases: {},\n masksCache: {},\n get isRTL() {\n return this.opts.isRTL || this.opts.numericInput;\n },\n mask: function(e) {\n var t = this;\n return \"string\" == typeof e && (e = g.getElementById(e) || g.querySelectorAll(e)), \n (e = e.nodeName ? [ e ] : Array.isArray(e) ? e : Array.from(e)).forEach((function(e, a) {\n var s = n.default.extend(!0, {}, t.opts);\n if (function(e, t, a, i) {\n function o(t, n) {\n var o = \"\" === i ? t : i + \"-\" + t;\n null !== (n = void 0 !== n ? n : e.getAttribute(o)) && (\"string\" == typeof n && (0 === t.indexOf(\"on\") ? n = r.default[n] : \"false\" === n ? n = !1 : \"true\" === n && (n = !0)), \n a[t] = n);\n }\n if (!0 === t.importDataAttributes) {\n var s, l, u, c, f = e.getAttribute(i);\n if (f && \"\" !== f && (f = f.replace(/'/g, '\"'), l = JSON.parse(\"{\" + f + \"}\")), \n l) for (c in u = void 0, l) if (\"alias\" === c.toLowerCase()) {\n u = l[c];\n break;\n }\n for (s in o(\"alias\", u), a.alias && b(a.alias, a, t), t) {\n if (l) for (c in u = void 0, l) if (c.toLowerCase() === s.toLowerCase()) {\n u = l[c];\n break;\n }\n o(s, u);\n }\n }\n n.default.extend(!0, t, a), (\"rtl\" === e.dir || t.rightAlign) && (e.style.textAlign = \"right\");\n (\"rtl\" === e.dir || t.numericInput) && (e.dir = \"ltr\", e.removeAttribute(\"dir\"), \n t.isRTL = !0);\n return Object.keys(a).length;\n }(e, s, n.default.extend(!0, {}, t.userOptions), t.dataAttribute)) {\n var l = (0, o.generateMaskSet)(s, t.noMasksCache);\n void 0 !== l && (void 0 !== e.inputmask && (e.inputmask.opts.autoUnmask = !0, e.inputmask.remove()), \n e.inputmask = new y(void 0, void 0, !0), e.inputmask.opts = s, e.inputmask.noMasksCache = t.noMasksCache, \n e.inputmask.userOptions = n.default.extend(!0, {}, t.userOptions), e.inputmask.el = e, \n e.inputmask.$el = (0, n.default)(e), e.inputmask.maskset = l, n.default.data(e, k, t.userOptions), \n i.mask.call(e.inputmask));\n }\n })), e && e[0] && e[0].inputmask || this;\n },\n option: function(e, t) {\n return \"string\" == typeof e ? this.opts[e] : \"object\" === v(e) ? (n.default.extend(this.userOptions, e), \n this.el && !0 !== t && this.mask(this.el), this) : void 0;\n },\n unmaskedvalue: function(e) {\n if (this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache), \n void 0 === this.el || void 0 !== e) {\n var t = (\"function\" == typeof this.opts.onBeforeMask && this.opts.onBeforeMask.call(this, e, this.opts) || e).split(\"\");\n c.checkVal.call(this, void 0, !1, !1, t), \"function\" == typeof this.opts.onBeforeWrite && this.opts.onBeforeWrite.call(this, void 0, l.getBuffer.call(this), 0, this.opts);\n }\n return c.unmaskedvalue.call(this, this.el);\n },\n remove: function() {\n if (this.el) {\n n.default.data(this.el, k, null);\n var e = this.opts.autoUnmask ? (0, c.unmaskedvalue)(this.el) : this._valueGet(this.opts.autoUnmask);\n e !== l.getBufferTemplate.call(this).join(\"\") ? this._valueSet(e, this.opts.autoUnmask) : this._valueSet(\"\"), \n f.EventRuler.off(this.el), Object.getOwnPropertyDescriptor && Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(this.el), \"value\") && this.__valueGet && Object.defineProperty(this.el, \"value\", {\n get: this.__valueGet,\n set: this.__valueSet,\n configurable: !0\n }) : g.__lookupGetter__ && this.el.__lookupGetter__(\"value\") && this.__valueGet && (this.el.__defineGetter__(\"value\", this.__valueGet), \n this.el.__defineSetter__(\"value\", this.__valueSet)), this.el.inputmask = void 0;\n }\n return this.el;\n },\n getemptymask: function() {\n return this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache), \n l.getBufferTemplate.call(this).join(\"\");\n },\n hasMaskedValue: function() {\n return !this.opts.autoUnmask;\n },\n isComplete: function() {\n return this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache), \n u.isComplete.call(this, l.getBuffer.call(this));\n },\n getmetadata: function() {\n if (this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache), \n Array.isArray(this.maskset.metadata)) {\n var e = s.getMaskTemplate.call(this, !0, 0, !1).join(\"\");\n return this.maskset.metadata.forEach((function(t) {\n return t.mask !== e || (e = t, !1);\n })), e;\n }\n return this.maskset.metadata;\n },\n isValid: function(e) {\n if (this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache), \n e) {\n var t = (\"function\" == typeof this.opts.onBeforeMask && this.opts.onBeforeMask.call(this, e, this.opts) || e).split(\"\");\n c.checkVal.call(this, void 0, !0, !1, t);\n } else e = this.isRTL ? l.getBuffer.call(this).slice().reverse().join(\"\") : l.getBuffer.call(this).join(\"\");\n for (var a = l.getBuffer.call(this), i = l.determineLastRequiredPosition.call(this), n = a.length - 1; n > i && !l.isMask.call(this, n); n--) ;\n return a.splice(i, n + 1 - i), u.isComplete.call(this, a) && e === (this.isRTL ? l.getBuffer.call(this).slice().reverse().join(\"\") : l.getBuffer.call(this).join(\"\"));\n },\n format: function(e, t) {\n this.maskset = this.maskset || (0, o.generateMaskSet)(this.opts, this.noMasksCache);\n var a = (\"function\" == typeof this.opts.onBeforeMask && this.opts.onBeforeMask.call(this, e, this.opts) || e).split(\"\");\n c.checkVal.call(this, void 0, !0, !1, a);\n var i = this.isRTL ? l.getBuffer.call(this).slice().reverse().join(\"\") : l.getBuffer.call(this).join(\"\");\n return t ? {\n value: i,\n metadata: this.getmetadata()\n } : i;\n },\n setValue: function(e) {\n this.el && (0, n.default)(this.el).trigger(\"setvalue\", [ e ]);\n },\n analyseMask: o.analyseMask\n }, y.extendDefaults = function(e) {\n n.default.extend(!0, y.prototype.defaults, e);\n }, y.extendDefinitions = function(e) {\n n.default.extend(!0, y.prototype.definitions, e);\n }, y.extendAliases = function(e) {\n n.default.extend(!0, y.prototype.aliases, e);\n }, y.format = function(e, t, a) {\n return y(t).format(e, a);\n }, y.unmask = function(e, t) {\n return y(t).unmaskedvalue(e);\n }, y.isValid = function(e, t) {\n return y(t).isValid(e);\n }, y.remove = function(e) {\n \"string\" == typeof e && (e = g.getElementById(e) || g.querySelectorAll(e)), (e = e.nodeName ? [ e ] : e).forEach((function(e) {\n e.inputmask && e.inputmask.remove();\n }));\n }, y.setValue = function(e, t) {\n \"string\" == typeof e && (e = g.getElementById(e) || g.querySelectorAll(e)), (e = e.nodeName ? [ e ] : e).forEach((function(e) {\n e.inputmask ? e.inputmask.setValue(t) : (0, n.default)(e).trigger(\"setvalue\", [ t ]);\n }));\n }, y.dependencyLib = n.default, r.default.Inputmask = y;\n var x = y;\n t.default = x;\n },\n 5296: function(e, t, a) {\n function i(e) {\n return (i = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n return typeof e;\n } : function(e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n })(e);\n }\n var n = p(a(9380)), r = p(a(2394)), o = p(a(8741));\n function s(e, t) {\n return !t || \"object\" !== i(t) && \"function\" != typeof t ? function(e) {\n if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n return e;\n }(e) : t;\n }\n function l(e) {\n var t = \"function\" == typeof Map ? new Map : void 0;\n return (l = function(e) {\n if (null === e || (a = e, -1 === Function.toString.call(a).indexOf(\"[native code]\"))) return e;\n var a;\n if (\"function\" != typeof e) throw new TypeError(\"Super expression must either be null or a function\");\n if (void 0 !== t) {\n if (t.has(e)) return t.get(e);\n t.set(e, i);\n }\n function i() {\n return u(e, arguments, d(this).constructor);\n }\n return i.prototype = Object.create(e.prototype, {\n constructor: {\n value: i,\n enumerable: !1,\n writable: !0,\n configurable: !0\n }\n }), f(i, e);\n })(e);\n }\n function u(e, t, a) {\n return (u = c() ? Reflect.construct : function(e, t, a) {\n var i = [ null ];\n i.push.apply(i, t);\n var n = new (Function.bind.apply(e, i));\n return a && f(n, a.prototype), n;\n }).apply(null, arguments);\n }\n function c() {\n if (\"undefined\" == typeof Reflect || !Reflect.construct) return !1;\n if (Reflect.construct.sham) return !1;\n if (\"function\" == typeof Proxy) return !0;\n try {\n return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], (function() {}))), \n !0;\n } catch (e) {\n return !1;\n }\n }\n function f(e, t) {\n return (f = Object.setPrototypeOf || function(e, t) {\n return e.__proto__ = t, e;\n })(e, t);\n }\n function d(e) {\n return (d = Object.setPrototypeOf ? Object.getPrototypeOf : function(e) {\n return e.__proto__ || Object.getPrototypeOf(e);\n })(e);\n }\n function p(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n var h = n.default.document;\n if (o.default && h && h.head && h.head.attachShadow && n.default.customElements && void 0 === n.default.customElements.get(\"input-mask\")) {\n var v = function(e) {\n !function(e, t) {\n if (\"function\" != typeof t && null !== t) throw new TypeError(\"Super expression must either be null or a function\");\n e.prototype = Object.create(t && t.prototype, {\n constructor: {\n value: e,\n writable: !0,\n configurable: !0\n }\n }), t && f(e, t);\n }(n, e);\n var t, a, i = (t = n, a = c(), function() {\n var e, i = d(t);\n if (a) {\n var n = d(this).constructor;\n e = Reflect.construct(i, arguments, n);\n } else e = i.apply(this, arguments);\n return s(this, e);\n });\n function n() {\n var e;\n !function(e, t) {\n if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\");\n }(this, n);\n var t = (e = i.call(this)).getAttributeNames(), a = e.attachShadow({\n mode: \"closed\"\n }), o = h.createElement(\"input\");\n for (var s in o.type = \"text\", a.appendChild(o), t) Object.prototype.hasOwnProperty.call(t, s) && o.setAttribute(t[s], e.getAttribute(t[s]));\n var l = new r.default;\n return l.dataAttribute = \"\", l.mask(o), o.inputmask.shadowRoot = a, e;\n }\n return n;\n }(l(HTMLElement));\n n.default.customElements.define(\"input-mask\", v);\n }\n },\n 2391: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.generateMaskSet = function(e, t) {\n var a;\n function n(e, a, n) {\n var r, o, s = !1;\n if (null !== e && \"\" !== e || ((s = null !== n.regex) ? e = (e = n.regex).replace(/^(\\^)(.*)(\\$)$/, \"$2\") : (s = !0, \n e = \".*\")), 1 === e.length && !1 === n.greedy && 0 !== n.repeat && (n.placeholder = \"\"), \n n.repeat > 0 || \"*\" === n.repeat || \"+\" === n.repeat) {\n var l = \"*\" === n.repeat ? 0 : \"+\" === n.repeat ? 1 : n.repeat;\n e = n.groupmarker[0] + e + n.groupmarker[1] + n.quantifiermarker[0] + l + \",\" + n.repeat + n.quantifiermarker[1];\n }\n return o = s ? \"regex_\" + n.regex : n.numericInput ? e.split(\"\").reverse().join(\"\") : e, \n !1 !== n.keepStatic && (o = \"ks_\" + o), void 0 === Inputmask.prototype.masksCache[o] || !0 === t ? (r = {\n mask: e,\n maskToken: Inputmask.prototype.analyseMask(e, s, n),\n validPositions: {},\n _buffer: void 0,\n buffer: void 0,\n tests: {},\n excludes: {},\n metadata: a,\n maskLength: void 0,\n jitOffset: {}\n }, !0 !== t && (Inputmask.prototype.masksCache[o] = r, r = i.default.extend(!0, {}, Inputmask.prototype.masksCache[o]))) : r = i.default.extend(!0, {}, Inputmask.prototype.masksCache[o]), \n r;\n }\n \"function\" == typeof e.mask && (e.mask = e.mask(e));\n if (Array.isArray(e.mask)) {\n if (e.mask.length > 1) {\n null === e.keepStatic && (e.keepStatic = !0);\n var r = e.groupmarker[0];\n return (e.isRTL ? e.mask.reverse() : e.mask).forEach((function(t) {\n r.length > 1 && (r += e.groupmarker[1] + e.alternatormarker + e.groupmarker[0]), \n void 0 !== t.mask && \"function\" != typeof t.mask ? r += t.mask : r += t;\n })), n(r += e.groupmarker[1], e.mask, e);\n }\n e.mask = e.mask.pop();\n }\n null === e.keepStatic && (e.keepStatic = !1);\n a = e.mask && void 0 !== e.mask.mask && \"function\" != typeof e.mask.mask ? n(e.mask.mask, e.mask, e) : n(e.mask, e.mask, e);\n return a;\n }, t.analyseMask = function(e, t, a) {\n var i, r, o, s, l, u, c = /(?:[?*+]|\\{[0-9+*]+(?:,[0-9+*]*)?(?:\\|[0-9+*]*)?\\})|[^.?*+^${[]()|\\\\]+|./g, f = /\\[\\^?]?(?:[^\\\\\\]]+|\\\\[\\S\\s]?)*]?|\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\\S\\s]?)|\\((?:\\?[:=!]?)?|(?:[?*+]|\\{[0-9]+(?:,[0-9]*)?\\})\\??|[^.?*+^${[()|\\\\]+|./g, d = !1, p = new n.default, h = [], v = [], m = !1;\n function g(e, i, n) {\n n = void 0 !== n ? n : e.matches.length;\n var r = e.matches[n - 1];\n if (t) 0 === i.indexOf(\"[\") || d && /\\\\d|\\\\s|\\\\w]/i.test(i) || \".\" === i ? e.matches.splice(n++, 0, {\n fn: new RegExp(i, a.casing ? \"i\" : \"\"),\n static: !1,\n optionality: !1,\n newBlockMarker: void 0 === r ? \"master\" : r.def !== i,\n casing: null,\n def: i,\n placeholder: void 0,\n nativeDef: i\n }) : (d && (i = i[i.length - 1]), i.split(\"\").forEach((function(t, i) {\n r = e.matches[n - 1], e.matches.splice(n++, 0, {\n fn: /[a-z]/i.test(a.staticDefinitionSymbol || t) ? new RegExp(\"[\" + (a.staticDefinitionSymbol || t) + \"]\", a.casing ? \"i\" : \"\") : null,\n static: !0,\n optionality: !1,\n newBlockMarker: void 0 === r ? \"master\" : r.def !== t && !0 !== r.static,\n casing: null,\n def: a.staticDefinitionSymbol || t,\n placeholder: void 0 !== a.staticDefinitionSymbol ? t : void 0,\n nativeDef: (d ? \"'\" : \"\") + t\n });\n }))), d = !1; else {\n var o = a.definitions && a.definitions[i] || a.usePrototypeDefinitions && Inputmask.prototype.definitions[i];\n o && !d ? e.matches.splice(n++, 0, {\n fn: o.validator ? \"string\" == typeof o.validator ? new RegExp(o.validator, a.casing ? \"i\" : \"\") : new function() {\n this.test = o.validator;\n } : new RegExp(\".\"),\n static: o.static || !1,\n optionality: !1,\n newBlockMarker: void 0 === r ? \"master\" : r.def !== (o.definitionSymbol || i),\n casing: o.casing,\n def: o.definitionSymbol || i,\n placeholder: o.placeholder,\n nativeDef: i,\n generated: o.generated\n }) : (e.matches.splice(n++, 0, {\n fn: /[a-z]/i.test(a.staticDefinitionSymbol || i) ? new RegExp(\"[\" + (a.staticDefinitionSymbol || i) + \"]\", a.casing ? \"i\" : \"\") : null,\n static: !0,\n optionality: !1,\n newBlockMarker: void 0 === r ? \"master\" : r.def !== i && !0 !== r.static,\n casing: null,\n def: a.staticDefinitionSymbol || i,\n placeholder: void 0 !== a.staticDefinitionSymbol ? i : void 0,\n nativeDef: (d ? \"'\" : \"\") + i\n }), d = !1);\n }\n }\n function k() {\n if (h.length > 0) {\n if (g(s = h[h.length - 1], r), s.isAlternator) {\n l = h.pop();\n for (var e = 0; e < l.matches.length; e++) l.matches[e].isGroup && (l.matches[e].isGroup = !1);\n h.length > 0 ? (s = h[h.length - 1]).matches.push(l) : p.matches.push(l);\n }\n } else g(p, r);\n }\n function y(e) {\n var t = new n.default(!0);\n return t.openGroup = !1, t.matches = e, t;\n }\n function b() {\n if ((o = h.pop()).openGroup = !1, void 0 !== o) if (h.length > 0) {\n if ((s = h[h.length - 1]).matches.push(o), s.isAlternator) {\n l = h.pop();\n for (var e = 0; e < l.matches.length; e++) l.matches[e].isGroup = !1, l.matches[e].alternatorGroup = !1;\n h.length > 0 ? (s = h[h.length - 1]).matches.push(l) : p.matches.push(l);\n }\n } else p.matches.push(o); else k();\n }\n function x(e) {\n var t = e.pop();\n return t.isQuantifier && (t = y([ e.pop(), t ])), t;\n }\n t && (a.optionalmarker[0] = void 0, a.optionalmarker[1] = void 0);\n for (;i = t ? f.exec(e) : c.exec(e); ) {\n if (r = i[0], t) switch (r.charAt(0)) {\n case \"?\":\n r = \"{0,1}\";\n break;\n\n case \"+\":\n case \"*\":\n r = \"{\" + r + \"}\";\n break;\n\n case \"|\":\n if (0 === h.length) {\n var P = y(p.matches);\n P.openGroup = !0, h.push(P), p.matches = [], m = !0;\n }\n }\n if (d) k(); else switch (r.charAt(0)) {\n case \"$\":\n case \"^\":\n t || k();\n break;\n\n case \"(?=\":\n case \"(?!\":\n case \"(?<=\":\n case \"(? 0 ? h[h.length - 1].matches : p.matches;\n if ((i = T.pop()).isAlternator) {\n T.push(i), T = i.matches;\n var C = new n.default(!0), A = T.pop();\n T.push(C), T = C.matches, i = A;\n }\n i.isGroup || (i = y([ i ])), T.push(i), T.push(E);\n break;\n\n case a.alternatormarker:\n if (h.length > 0) {\n var D = (s = h[h.length - 1]).matches[s.matches.length - 1];\n u = s.openGroup && (void 0 === D.matches || !1 === D.isGroup && !1 === D.isAlternator) ? h.pop() : x(s.matches);\n } else u = x(p.matches);\n if (u.isAlternator) h.push(u); else if (u.alternatorGroup ? (l = h.pop(), u.alternatorGroup = !1) : l = new n.default(!1, !1, !1, !0), \n l.matches.push(u), h.push(l), u.openGroup) {\n u.openGroup = !1;\n var B = new n.default(!0);\n B.alternatorGroup = !0, h.push(B);\n }\n break;\n\n default:\n k();\n }\n }\n m && b();\n for (;h.length > 0; ) o = h.pop(), p.matches.push(o);\n p.matches.length > 0 && (!function e(i) {\n i && i.matches && i.matches.forEach((function(n, r) {\n var o = i.matches[r + 1];\n (void 0 === o || void 0 === o.matches || !1 === o.isQuantifier) && n && n.isGroup && (n.isGroup = !1, \n t || (g(n, a.groupmarker[0], 0), !0 !== n.openGroup && g(n, a.groupmarker[1]))), \n e(n);\n }));\n }(p), v.push(p));\n (a.numericInput || a.isRTL) && function e(t) {\n for (var i in t.matches = t.matches.reverse(), t.matches) if (Object.prototype.hasOwnProperty.call(t.matches, i)) {\n var n = parseInt(i);\n if (t.matches[i].isQuantifier && t.matches[n + 1] && t.matches[n + 1].isGroup) {\n var r = t.matches[i];\n t.matches.splice(i, 1), t.matches.splice(n + 1, 0, r);\n }\n void 0 !== t.matches[i].matches ? t.matches[i] = e(t.matches[i]) : t.matches[i] = ((o = t.matches[i]) === a.optionalmarker[0] ? o = a.optionalmarker[1] : o === a.optionalmarker[1] ? o = a.optionalmarker[0] : o === a.groupmarker[0] ? o = a.groupmarker[1] : o === a.groupmarker[1] && (o = a.groupmarker[0]), \n o);\n }\n var o;\n return t;\n }(v[0]);\n return v;\n };\n var i = r(a(4963)), n = r(a(9695));\n function r(e) {\n return e && e.__esModule ? e : {\n default: e\n };\n }\n },\n 157: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.mask = function() {\n var e = this, t = this.opts, a = this.el, i = this.dependencyLib;\n s.EventRuler.off(a);\n var f = function(t, a) {\n \"textarea\" !== t.tagName.toLowerCase() && a.ignorables.push(n.default.ENTER);\n var l = t.getAttribute(\"type\"), u = \"input\" === t.tagName.toLowerCase() && a.supportsInputType.includes(l) || t.isContentEditable || \"textarea\" === t.tagName.toLowerCase();\n if (!u) if (\"input\" === t.tagName.toLowerCase()) {\n var c = document.createElement(\"input\");\n c.setAttribute(\"type\", l), u = \"text\" === c.type, c = null;\n } else u = \"partial\";\n return !1 !== u ? function(t) {\n var n, l;\n function u() {\n return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : -1 !== r.getLastValidPosition.call(e) || !0 !== a.nullable ? (this.inputmask.shadowRoot || this.ownerDocument).activeElement === this && a.clearMaskOnLostFocus ? (e.isRTL ? o.clearOptionalTail.call(e, r.getBuffer.call(e).slice()).reverse() : o.clearOptionalTail.call(e, r.getBuffer.call(e).slice())).join(\"\") : n.call(this) : \"\" : n.call(this);\n }\n function c(e) {\n l.call(this, e), this.inputmask && (0, o.applyInputValue)(this, e);\n }\n if (!t.inputmask.__valueGet) {\n if (!0 !== a.noValuePatching) {\n if (Object.getOwnPropertyDescriptor) {\n var f = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(t), \"value\") : void 0;\n f && f.get && f.set ? (n = f.get, l = f.set, Object.defineProperty(t, \"value\", {\n get: u,\n set: c,\n configurable: !0\n })) : \"input\" !== t.tagName.toLowerCase() && (n = function() {\n return this.textContent;\n }, l = function(e) {\n this.textContent = e;\n }, Object.defineProperty(t, \"value\", {\n get: u,\n set: c,\n configurable: !0\n }));\n } else document.__lookupGetter__ && t.__lookupGetter__(\"value\") && (n = t.__lookupGetter__(\"value\"), \n l = t.__lookupSetter__(\"value\"), t.__defineGetter__(\"value\", u), t.__defineSetter__(\"value\", c));\n t.inputmask.__valueGet = n, t.inputmask.__valueSet = l;\n }\n t.inputmask._valueGet = function(t) {\n return e.isRTL && !0 !== t ? n.call(this.el).split(\"\").reverse().join(\"\") : n.call(this.el);\n }, t.inputmask._valueSet = function(t, a) {\n l.call(this.el, null == t ? \"\" : !0 !== a && e.isRTL ? t.split(\"\").reverse().join(\"\") : t);\n }, void 0 === n && (n = function() {\n return this.value;\n }, l = function(e) {\n this.value = e;\n }, function(t) {\n if (i.valHooks && (void 0 === i.valHooks[t] || !0 !== i.valHooks[t].inputmaskpatch)) {\n var n = i.valHooks[t] && i.valHooks[t].get ? i.valHooks[t].get : function(e) {\n return e.value;\n }, s = i.valHooks[t] && i.valHooks[t].set ? i.valHooks[t].set : function(e, t) {\n return e.value = t, e;\n };\n i.valHooks[t] = {\n get: function(t) {\n if (t.inputmask) {\n if (t.inputmask.opts.autoUnmask) return t.inputmask.unmaskedvalue();\n var i = n(t);\n return -1 !== r.getLastValidPosition.call(e, void 0, void 0, t.inputmask.maskset.validPositions) || !0 !== a.nullable ? i : \"\";\n }\n return n(t);\n },\n set: function(e, t) {\n var a = s(e, t);\n return e.inputmask && (0, o.applyInputValue)(e, t), a;\n },\n inputmaskpatch: !0\n };\n }\n }(t.type), function(t) {\n s.EventRuler.on(t, \"mouseenter\", (function() {\n var t = this.inputmask._valueGet(!0);\n t !== (e.isRTL ? r.getBuffer.call(e).reverse() : r.getBuffer.call(e)).join(\"\") && (0, \n o.applyInputValue)(this, t);\n }));\n }(t));\n }\n }(t) : t.inputmask = void 0, u;\n }(a, t);\n if (!1 !== f) {\n e.originalPlaceholder = a.placeholder, e.maxLength = void 0 !== a ? a.maxLength : void 0, \n -1 === e.maxLength && (e.maxLength = void 0), \"inputMode\" in a && null === a.getAttribute(\"inputmode\") && (a.inputMode = t.inputmode, \n a.setAttribute(\"inputmode\", t.inputmode)), !0 === f && (t.showMaskOnFocus = t.showMaskOnFocus && -1 === [ \"cc-number\", \"cc-exp\" ].indexOf(a.autocomplete), \n l.iphone && (t.insertModeVisual = !1), s.EventRuler.on(a, \"submit\", c.EventHandlers.submitEvent), \n s.EventRuler.on(a, \"reset\", c.EventHandlers.resetEvent), s.EventRuler.on(a, \"blur\", c.EventHandlers.blurEvent), \n s.EventRuler.on(a, \"focus\", c.EventHandlers.focusEvent), s.EventRuler.on(a, \"invalid\", c.EventHandlers.invalidEvent), \n s.EventRuler.on(a, \"click\", c.EventHandlers.clickEvent), s.EventRuler.on(a, \"mouseleave\", c.EventHandlers.mouseleaveEvent), \n s.EventRuler.on(a, \"mouseenter\", c.EventHandlers.mouseenterEvent), s.EventRuler.on(a, \"paste\", c.EventHandlers.pasteEvent), \n s.EventRuler.on(a, \"cut\", c.EventHandlers.cutEvent), s.EventRuler.on(a, \"complete\", t.oncomplete), \n s.EventRuler.on(a, \"incomplete\", t.onincomplete), s.EventRuler.on(a, \"cleared\", t.oncleared), \n !0 !== t.inputEventOnly && (s.EventRuler.on(a, \"keydown\", c.EventHandlers.keydownEvent), \n s.EventRuler.on(a, \"keypress\", c.EventHandlers.keypressEvent), s.EventRuler.on(a, \"keyup\", c.EventHandlers.keyupEvent)), \n (l.mobile || t.inputEventOnly) && a.removeAttribute(\"maxLength\"), s.EventRuler.on(a, \"input\", c.EventHandlers.inputFallBackEvent), \n s.EventRuler.on(a, \"compositionend\", c.EventHandlers.compositionendEvent)), s.EventRuler.on(a, \"setvalue\", c.EventHandlers.setValueEvent), \n r.getBufferTemplate.call(e).join(\"\"), e.undoValue = e._valueGet(!0);\n var d = (a.inputmask.shadowRoot || a.ownerDocument).activeElement;\n if (\"\" !== a.inputmask._valueGet(!0) || !1 === t.clearMaskOnLostFocus || d === a) {\n (0, o.applyInputValue)(a, a.inputmask._valueGet(!0), t);\n var p = r.getBuffer.call(e).slice();\n !1 === u.isComplete.call(e, p) && t.clearIncomplete && r.resetMaskSet.call(e), t.clearMaskOnLostFocus && d !== a && (-1 === r.getLastValidPosition.call(e) ? p = [] : o.clearOptionalTail.call(e, p)), \n (!1 === t.clearMaskOnLostFocus || t.showMaskOnFocus && d === a || \"\" !== a.inputmask._valueGet(!0)) && (0, \n o.writeBuffer)(a, p), d === a && r.caret.call(e, a, r.seekNext.call(e, r.getLastValidPosition.call(e)));\n }\n }\n };\n var i, n = (i = a(4528)) && i.__esModule ? i : {\n default: i\n }, r = a(8711), o = a(7760), s = a(9716), l = a(9845), u = a(7215), c = a(6030);\n },\n 9695: function(e, t) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = function(e, t, a, i) {\n this.matches = [], this.openGroup = e || !1, this.alternatorGroup = !1, this.isGroup = e || !1, \n this.isOptional = t || !1, this.isQuantifier = a || !1, this.isAlternator = i || !1, \n this.quantifier = {\n min: 1,\n max: 1\n };\n };\n },\n 3194: function() {\n Array.prototype.includes || Object.defineProperty(Array.prototype, \"includes\", {\n value: function(e, t) {\n if (null == this) throw new TypeError('\"this\" is null or not defined');\n var a = Object(this), i = a.length >>> 0;\n if (0 === i) return !1;\n for (var n = 0 | t, r = Math.max(n >= 0 ? n : i - Math.abs(n), 0); r < i; ) {\n if (a[r] === e) return !0;\n r++;\n }\n return !1;\n }\n });\n },\n 7149: function() {\n function e(t) {\n return (e = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(e) {\n return typeof e;\n } : function(e) {\n return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e;\n })(t);\n }\n \"function\" != typeof Object.getPrototypeOf && (Object.getPrototypeOf = \"object\" === e(\"test\".__proto__) ? function(e) {\n return e.__proto__;\n } : function(e) {\n return e.constructor.prototype;\n });\n },\n 8711: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.caret = function(e, t, a, i, n) {\n var r, o = this, s = this.opts;\n if (void 0 === t) return \"selectionStart\" in e && \"selectionEnd\" in e ? (t = e.selectionStart, \n a = e.selectionEnd) : window.getSelection ? (r = window.getSelection().getRangeAt(0)).commonAncestorContainer.parentNode !== e && r.commonAncestorContainer !== e || (t = r.startOffset, \n a = r.endOffset) : document.selection && document.selection.createRange && (r = document.selection.createRange(), \n t = 0 - r.duplicate().moveStart(\"character\", -e.inputmask._valueGet().length), a = t + r.text.length), \n {\n begin: i ? t : u.call(o, t),\n end: i ? a : u.call(o, a)\n };\n if (Array.isArray(t) && (a = o.isRTL ? t[0] : t[1], t = o.isRTL ? t[1] : t[0]), \n void 0 !== t.begin && (a = o.isRTL ? t.begin : t.end, t = o.isRTL ? t.end : t.begin), \n \"number\" == typeof t) {\n t = i ? t : u.call(o, t), a = \"number\" == typeof (a = i ? a : u.call(o, a)) ? a : t;\n var l = parseInt(((e.ownerDocument.defaultView || window).getComputedStyle ? (e.ownerDocument.defaultView || window).getComputedStyle(e, null) : e.currentStyle).fontSize) * a;\n if (e.scrollLeft = l > e.scrollWidth ? l : 0, e.inputmask.caretPos = {\n begin: t,\n end: a\n }, s.insertModeVisual && !1 === s.insertMode && t === a && (n || a++), e === (e.inputmask.shadowRoot || e.ownerDocument).activeElement) if (\"setSelectionRange\" in e) e.setSelectionRange(t, a); else if (window.getSelection) {\n if (r = document.createRange(), void 0 === e.firstChild || null === e.firstChild) {\n var c = document.createTextNode(\"\");\n e.appendChild(c);\n }\n r.setStart(e.firstChild, t < e.inputmask._valueGet().length ? t : e.inputmask._valueGet().length), \n r.setEnd(e.firstChild, a < e.inputmask._valueGet().length ? a : e.inputmask._valueGet().length), \n r.collapse(!0);\n var f = window.getSelection();\n f.removeAllRanges(), f.addRange(r);\n } else e.createTextRange && ((r = e.createTextRange()).collapse(!0), r.moveEnd(\"character\", a), \n r.moveStart(\"character\", t), r.select());\n }\n }, t.determineLastRequiredPosition = function(e) {\n var t, a, r = this, s = this.maskset, l = this.dependencyLib, u = i.getMaskTemplate.call(r, !0, o.call(r), !0, !0), c = u.length, f = o.call(r), d = {}, p = s.validPositions[f], h = void 0 !== p ? p.locator.slice() : void 0;\n for (t = f + 1; t < u.length; t++) a = i.getTestTemplate.call(r, t, h, t - 1), h = a.locator.slice(), \n d[t] = l.extend(!0, {}, a);\n var v = p && void 0 !== p.alternation ? p.locator[p.alternation] : void 0;\n for (t = c - 1; t > f && (((a = d[t]).match.optionality || a.match.optionalQuantifier && a.match.newBlockMarker || v && (v !== d[t].locator[p.alternation] && 1 != a.match.static || !0 === a.match.static && a.locator[p.alternation] && n.checkAlternationMatch.call(r, a.locator[p.alternation].toString().split(\",\"), v.toString().split(\",\")) && \"\" !== i.getTests.call(r, t)[0].def)) && u[t] === i.getPlaceholder.call(r, t, a.match)); t--) c--;\n return e ? {\n l: c,\n def: d[c] ? d[c].match : void 0\n } : c;\n }, t.determineNewCaretPosition = function(e, t, a) {\n var n = this, u = this.maskset, c = this.opts;\n t && (n.isRTL ? e.end = e.begin : e.begin = e.end);\n if (e.begin === e.end) {\n switch (a = a || c.positionCaretOnClick) {\n case \"none\":\n break;\n\n case \"select\":\n e = {\n begin: 0,\n end: r.call(n).length\n };\n break;\n\n case \"ignore\":\n e.end = e.begin = l.call(n, o.call(n));\n break;\n\n case \"radixFocus\":\n if (function(e) {\n if (\"\" !== c.radixPoint && 0 !== c.digits) {\n var t = u.validPositions;\n if (void 0 === t[e] || t[e].input === i.getPlaceholder.call(n, e)) {\n if (e < l.call(n, -1)) return !0;\n var a = r.call(n).indexOf(c.radixPoint);\n if (-1 !== a) {\n for (var o in t) if (t[o] && a < o && t[o].input !== i.getPlaceholder.call(n, o)) return !1;\n return !0;\n }\n }\n }\n return !1;\n }(e.begin)) {\n var f = r.call(n).join(\"\").indexOf(c.radixPoint);\n e.end = e.begin = c.numericInput ? l.call(n, f) : f;\n break;\n }\n\n default:\n var d = e.begin, p = o.call(n, d, !0), h = l.call(n, -1 !== p || s.call(n, 0) ? p : -1);\n if (d <= h) e.end = e.begin = s.call(n, d, !1, !0) ? d : l.call(n, d); else {\n var v = u.validPositions[p], m = i.getTestTemplate.call(n, h, v ? v.match.locator : void 0, v), g = i.getPlaceholder.call(n, h, m.match);\n if (\"\" !== g && r.call(n)[h] !== g && !0 !== m.match.optionalQuantifier && !0 !== m.match.newBlockMarker || !s.call(n, h, c.keepStatic, !0) && m.match.def === g) {\n var k = l.call(n, h);\n (d >= k || d === h) && (h = k);\n }\n e.end = e.begin = h;\n }\n }\n return e;\n }\n }, t.getBuffer = r, t.getBufferTemplate = function() {\n var e = this.maskset;\n void 0 === e._buffer && (e._buffer = i.getMaskTemplate.call(this, !1, 1), void 0 === e.buffer && (e.buffer = e._buffer.slice()));\n return e._buffer;\n }, t.getLastValidPosition = o, t.isMask = s, t.resetMaskSet = function(e) {\n var t = this.maskset;\n t.buffer = void 0, !0 !== e && (t.validPositions = {}, t.p = 0);\n }, t.seekNext = l, t.seekPrevious = function(e, t) {\n var a = this, n = e - 1;\n if (e <= 0) return 0;\n for (;n > 0 && (!0 === t && (!0 !== i.getTest.call(a, n).match.newBlockMarker || !s.call(a, n, void 0, !0)) || !0 !== t && !s.call(a, n, void 0, !0)); ) n--;\n return n;\n }, t.translatePosition = u;\n var i = a(4713), n = a(7215);\n function r(e) {\n var t = this.maskset;\n return void 0 !== t.buffer && !0 !== e || (t.buffer = i.getMaskTemplate.call(this, !0, o.call(this), !0), \n void 0 === t._buffer && (t._buffer = t.buffer.slice())), t.buffer;\n }\n function o(e, t, a) {\n var i = this.maskset, n = -1, r = -1, o = a || i.validPositions;\n for (var s in void 0 === e && (e = -1), o) {\n var l = parseInt(s);\n o[l] && (t || !0 !== o[l].generatedInput) && (l <= e && (n = l), l >= e && (r = l));\n }\n return -1 === n || n == e ? r : -1 == r || e - n < r - e ? n : r;\n }\n function s(e, t, a) {\n var n = this, r = this.maskset, o = i.getTestTemplate.call(n, e).match;\n if (\"\" === o.def && (o = i.getTest.call(n, e).match), !0 !== o.static) return o.fn;\n if (!0 === a && void 0 !== r.validPositions[e] && !0 !== r.validPositions[e].generatedInput) return !0;\n if (!0 !== t && e > -1) {\n if (a) {\n var s = i.getTests.call(n, e);\n return s.length > 1 + (\"\" === s[s.length - 1].match.def ? 1 : 0);\n }\n var l = i.determineTestTemplate.call(n, e, i.getTests.call(n, e)), u = i.getPlaceholder.call(n, e, l.match);\n return l.match.def !== u;\n }\n return !1;\n }\n function l(e, t, a) {\n var n = this;\n void 0 === a && (a = !0);\n for (var r = e + 1; \"\" !== i.getTest.call(n, r).match.def && (!0 === t && (!0 !== i.getTest.call(n, r).match.newBlockMarker || !s.call(n, r, void 0, !0)) || !0 !== t && !s.call(n, r, void 0, a)); ) r++;\n return r;\n }\n function u(e) {\n var t = this.opts, a = this.el;\n return !this.isRTL || \"number\" != typeof e || t.greedy && \"\" === t.placeholder || !a || (e = Math.abs(this._valueGet().length - e)), \n e;\n }\n },\n 4713: function(e, t) {\n function a(e, t) {\n var a = (null != e.alternation ? e.mloc[i(e)] : e.locator).join(\"\");\n if (\"\" !== a) for (;a.length < t; ) a += \"0\";\n return a;\n }\n function i(e) {\n var t = e.locator[e.alternation];\n return \"string\" == typeof t && t.length > 0 && (t = t.split(\",\")[0]), void 0 !== t ? t.toString() : \"\";\n }\n function n(e, t, a) {\n var i = this.opts, n = this.maskset;\n if (void 0 !== (t = t || s.call(this, e).match).placeholder || !0 === a) return \"function\" == typeof t.placeholder ? t.placeholder(i) : t.placeholder;\n if (!0 === t.static) {\n if (e > -1 && void 0 === n.validPositions[e]) {\n var r, o = u.call(this, e), l = [];\n if (o.length > 1 + (\"\" === o[o.length - 1].match.def ? 1 : 0)) for (var c = 0; c < o.length; c++) if (\"\" !== o[c].match.def && !0 !== o[c].match.optionality && !0 !== o[c].match.optionalQuantifier && (!0 === o[c].match.static || void 0 === r || !1 !== o[c].match.fn.test(r.match.def, n, e, !0, i)) && (l.push(o[c]), \n !0 === o[c].match.static && (r = o[c]), l.length > 1 && /[0-9a-bA-Z]/.test(l[0].match.def))) return i.placeholder.charAt(e % i.placeholder.length);\n }\n return t.def;\n }\n return i.placeholder.charAt(e % i.placeholder.length);\n }\n function r(e, t, a) {\n return this.maskset.validPositions[e] || o.call(this, e, u.call(this, e, t ? t.slice() : t, a));\n }\n function o(e, t) {\n var i = this.opts;\n e = e > 0 ? e - 1 : 0;\n for (var n, r, o, l = a(s.call(this, e)), u = 0; u < t.length; u++) {\n var c = t[u];\n n = a(c, l.length);\n var f = Math.abs(n - l);\n (void 0 === r || \"\" !== n && f < r || o && !i.greedy && o.match.optionality && \"master\" === o.match.newBlockMarker && (!c.match.optionality || !c.match.newBlockMarker) || o && o.match.optionalQuantifier && !c.match.optionalQuantifier) && (r = f, \n o = c);\n }\n return o;\n }\n function s(e, t) {\n var a = this.maskset;\n return a.validPositions[e] ? a.validPositions[e] : (t || u.call(this, e))[0];\n }\n function l(e, t, a) {\n function i(e) {\n for (var t, a = [], i = -1, n = 0, r = e.length; n < r; n++) if (\"-\" === e.charAt(n)) for (t = e.charCodeAt(n + 1); ++i < t; ) a.push(String.fromCharCode(i)); else i = e.charCodeAt(n), \n a.push(e.charAt(n));\n return a.join(\"\");\n }\n return e.match.def === t.match.nativeDef || !(!(a.regex || e.match.fn instanceof RegExp && t.match.fn instanceof RegExp) || !0 === e.match.static || !0 === t.match.static) && -1 !== i(t.match.fn.toString().replace(/[[\\]/]/g, \"\")).indexOf(i(e.match.fn.toString().replace(/[[\\]/]/g, \"\")));\n }\n function u(e, t, a) {\n var i, n = this, r = this.dependencyLib, s = this.maskset, u = this.opts, c = this.el, f = s.maskToken, d = t ? a : 0, p = t ? t.slice() : [ 0 ], h = [], v = !1, m = t ? t.join(\"\") : \"\";\n function g(t, a, n, r) {\n function o(n, r, f) {\n function p(e, t) {\n var a = 0 === t.matches.indexOf(e);\n return a || t.matches.every((function(i, n) {\n return !0 === i.isQuantifier ? a = p(e, t.matches[n - 1]) : Object.prototype.hasOwnProperty.call(i, \"matches\") && (a = p(e, i)), \n !a;\n })), a;\n }\n function k(e, t, a) {\n var i, n;\n if ((s.tests[e] || s.validPositions[e]) && (s.tests[e] || [ s.validPositions[e] ]).every((function(e, r) {\n if (e.mloc[t]) return i = e, !1;\n var o = void 0 !== a ? a : e.alternation, s = void 0 !== e.locator[o] ? e.locator[o].toString().indexOf(t) : -1;\n return (void 0 === n || s < n) && -1 !== s && (i = e, n = s), !0;\n })), i) {\n var r = i.locator[i.alternation];\n return (i.mloc[t] || i.mloc[r] || i.locator).slice((void 0 !== a ? a : i.alternation) + 1);\n }\n return void 0 !== a ? k(e, t) : void 0;\n }\n function y(e, t) {\n var a = e.alternation, i = void 0 === t || a === t.alternation && -1 === e.locator[a].toString().indexOf(t.locator[a]);\n if (!i && a > t.alternation) for (var n = t.alternation; n < a; n++) if (e.locator[n] !== t.locator[n]) {\n a = n, i = !0;\n break;\n }\n if (i) {\n e.mloc = e.mloc || {};\n var r = e.locator[a];\n if (void 0 !== r) {\n if (\"string\" == typeof r && (r = r.split(\",\")[0]), void 0 === e.mloc[r] && (e.mloc[r] = e.locator.slice()), \n void 0 !== t) {\n for (var o in t.mloc) \"string\" == typeof o && (o = o.split(\",\")[0]), void 0 === e.mloc[o] && (e.mloc[o] = t.mloc[o]);\n e.locator[a] = Object.keys(e.mloc).join(\",\");\n }\n return !0;\n }\n e.alternation = void 0;\n }\n return !1;\n }\n function b(e, t) {\n if (e.locator.length !== t.locator.length) return !1;\n for (var a = e.alternation + 1; a < e.locator.length; a++) if (e.locator[a] !== t.locator[a]) return !1;\n return !0;\n }\n if (d > e + u._maxTestPos) throw \"Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. \" + s.mask;\n if (d === e && void 0 === n.matches) return h.push({\n match: n,\n locator: r.reverse(),\n cd: m,\n mloc: {}\n }), !0;\n if (void 0 !== n.matches) {\n if (n.isGroup && f !== n) {\n if (n = o(t.matches[t.matches.indexOf(n) + 1], r, f)) return !0;\n } else if (n.isOptional) {\n var x = n, P = h.length;\n if (n = g(n, a, r, f)) {\n if (h.forEach((function(e, t) {\n t >= P && (e.match.optionality = !0);\n })), i = h[h.length - 1].match, void 0 !== f || !p(i, x)) return !0;\n v = !0, d = e;\n }\n } else if (n.isAlternator) {\n var E, S = n, _ = [], M = h.slice(), w = r.length, O = !1, T = a.length > 0 ? a.shift() : -1;\n if (-1 === T || \"string\" == typeof T) {\n var C, A = d, D = a.slice(), B = [];\n if (\"string\" == typeof T) B = T.split(\",\"); else for (C = 0; C < S.matches.length; C++) B.push(C.toString());\n if (void 0 !== s.excludes[e]) {\n for (var j = B.slice(), R = 0, L = s.excludes[e].length; R < L; R++) {\n var I = s.excludes[e][R].toString().split(\":\");\n r.length == I[1] && B.splice(B.indexOf(I[0]), 1);\n }\n 0 === B.length && (delete s.excludes[e], B = j);\n }\n (!0 === u.keepStatic || isFinite(parseInt(u.keepStatic)) && A >= u.keepStatic) && (B = B.slice(0, 1));\n for (var F = 0; F < B.length; F++) {\n C = parseInt(B[F]), h = [], a = \"string\" == typeof T && k(d, C, w) || D.slice();\n var N = S.matches[C];\n if (N && o(N, [ C ].concat(r), f)) n = !0; else if (0 === F && (O = !0), N && N.matches && N.matches.length > S.matches[0].matches.length) break;\n E = h.slice(), d = A, h = [];\n for (var V = 0; V < E.length; V++) {\n var G = E[V], H = !1;\n G.match.jit = G.match.jit || O, G.alternation = G.alternation || w, y(G);\n for (var K = 0; K < _.length; K++) {\n var U = _[K];\n if (\"string\" != typeof T || void 0 !== G.alternation && B.includes(G.locator[G.alternation].toString())) {\n if (G.match.nativeDef === U.match.nativeDef) {\n H = !0, y(U, G);\n break;\n }\n if (l(G, U, u)) {\n y(G, U) && (H = !0, _.splice(_.indexOf(U), 0, G));\n break;\n }\n if (l(U, G, u)) {\n y(U, G);\n break;\n }\n if (Q = U, !0 === (W = G).match.static && !0 !== Q.match.static && Q.match.fn.test(W.match.def, s, e, !1, u, !1)) {\n b(G, U) || void 0 !== c.inputmask.userOptions.keepStatic ? y(G, U) && (H = !0, _.splice(_.indexOf(U), 0, G)) : u.keepStatic = !0;\n break;\n }\n }\n }\n H || _.push(G);\n }\n }\n h = M.concat(_), d = e, v = h.length > 0, n = _.length > 0, a = D.slice();\n } else n = o(S.matches[T] || t.matches[T], [ T ].concat(r), f);\n if (n) return !0;\n } else if (n.isQuantifier && f !== t.matches[t.matches.indexOf(n) - 1]) for (var $ = n, z = a.length > 0 ? a.shift() : 0; z < (isNaN($.quantifier.max) ? z + 1 : $.quantifier.max) && d <= e; z++) {\n var q = t.matches[t.matches.indexOf($) - 1];\n if (n = o(q, [ z ].concat(r), q)) {\n if ((i = h[h.length - 1].match).optionalQuantifier = z >= $.quantifier.min, i.jit = (z + 1) * (q.matches.indexOf(i) + 1) > $.quantifier.jit, \n i.optionalQuantifier && p(i, q)) {\n v = !0, d = e;\n break;\n }\n return i.jit && (s.jitOffset[e] = q.matches.length - q.matches.indexOf(i)), !0;\n }\n } else if (n = g(n, a, r, f)) return !0;\n } else d++;\n var W, Q;\n }\n for (var f = a.length > 0 ? a.shift() : 0; f < t.matches.length; f++) if (!0 !== t.matches[f].isQuantifier) {\n var p = o(t.matches[f], [ f ].concat(n), r);\n if (p && d === e) return p;\n if (d > e) break;\n }\n }\n if (e > -1) {\n if (void 0 === t) {\n for (var k, y = e - 1; void 0 === (k = s.validPositions[y] || s.tests[y]) && y > -1; ) y--;\n void 0 !== k && y > -1 && (p = function(e, t) {\n var a, i = [];\n return Array.isArray(t) || (t = [ t ]), t.length > 0 && (void 0 === t[0].alternation || !0 === u.keepStatic ? 0 === (i = o.call(n, e, t.slice()).locator.slice()).length && (i = t[0].locator.slice()) : t.forEach((function(e) {\n \"\" !== e.def && (0 === i.length ? (a = e.alternation, i = e.locator.slice()) : e.locator[a] && -1 === i[a].toString().indexOf(e.locator[a]) && (i[a] += \",\" + e.locator[a]));\n }))), i;\n }(y, k), m = p.join(\"\"), d = y);\n }\n if (s.tests[e] && s.tests[e][0].cd === m) return s.tests[e];\n for (var b = p.shift(); b < f.length; b++) {\n if (g(f[b], p, [ b ]) && d === e || d > e) break;\n }\n }\n return (0 === h.length || v) && h.push({\n match: {\n fn: null,\n static: !0,\n optionality: !1,\n casing: null,\n def: \"\",\n placeholder: \"\"\n },\n locator: [],\n mloc: {},\n cd: m\n }), void 0 !== t && s.tests[e] ? r.extend(!0, [], h) : (s.tests[e] = r.extend(!0, [], h), \n s.tests[e]);\n }\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.determineTestTemplate = o, t.getDecisionTaker = i, t.getMaskTemplate = function(e, t, a, i, s) {\n var l = this, c = this.opts, f = this.maskset, d = c.greedy;\n s && (c.greedy = !1);\n t = t || 0;\n var p, h, v, m, g = [], k = 0;\n do {\n if (!0 === e && f.validPositions[k]) v = s && !0 === f.validPositions[k].match.optionality && void 0 === f.validPositions[k + 1] && (!0 === f.validPositions[k].generatedInput || f.validPositions[k].input == c.skipOptionalPartCharacter && k > 0) ? o.call(l, k, u.call(l, k, p, k - 1)) : f.validPositions[k], \n h = v.match, p = v.locator.slice(), g.push(!0 === a ? v.input : !1 === a ? h.nativeDef : n.call(l, k, h)); else {\n v = r.call(l, k, p, k - 1), h = v.match, p = v.locator.slice();\n var y = !0 !== i && (!1 !== c.jitMasking ? c.jitMasking : h.jit);\n (m = (m && h.static && h.def !== c.groupSeparator && null === h.fn || f.validPositions[k - 1] && h.static && h.def !== c.groupSeparator && null === h.fn) && f.tests[k] && 1 === f.tests[k].length) || !1 === y || void 0 === y || \"number\" == typeof y && isFinite(y) && y > k ? g.push(!1 === a ? h.nativeDef : n.call(l, k, h)) : m = !1;\n }\n k++;\n } while (!0 !== h.static || \"\" !== h.def || t > k);\n \"\" === g[g.length - 1] && g.pop();\n !1 === a && void 0 !== f.maskLength || (f.maskLength = k - 1);\n return c.greedy = d, g;\n }, t.getPlaceholder = n, t.getTest = s, t.getTests = u, t.getTestTemplate = r, t.isSubsetOf = l;\n },\n 7215: function(e, t, a) {\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.alternate = l, t.checkAlternationMatch = function(e, t, a) {\n for (var i, n = this.opts.greedy ? t : t.slice(0, 1), r = !1, o = void 0 !== a ? a.split(\",\") : [], s = 0; s < o.length; s++) -1 !== (i = e.indexOf(o[s])) && e.splice(i, 1);\n for (var l = 0; l < e.length; l++) if (n.includes(e[l])) {\n r = !0;\n break;\n }\n return r;\n }, t.isComplete = c, t.isValid = f, t.refreshFromBuffer = p, t.revalidateMask = v, \n t.handleRemove = function(e, t, a, i, s) {\n var u = this, c = this.maskset, f = this.opts;\n if ((f.numericInput || u.isRTL) && (t === r.default.BACKSPACE ? t = r.default.DELETE : t === r.default.DELETE && (t = r.default.BACKSPACE), \n u.isRTL)) {\n var d = a.end;\n a.end = a.begin, a.begin = d;\n }\n var p, h = o.getLastValidPosition.call(u, void 0, !0);\n a.end >= o.getBuffer.call(u).length && h >= a.end && (a.end = h + 1);\n t === r.default.BACKSPACE ? a.end - a.begin < 1 && (a.begin = o.seekPrevious.call(u, a.begin)) : t === r.default.DELETE && a.begin === a.end && (a.end = o.isMask.call(u, a.end, !0, !0) ? a.end + 1 : o.seekNext.call(u, a.end) + 1);\n if (!1 !== (p = v.call(u, a))) {\n if (!0 !== i && !1 !== f.keepStatic || null !== f.regex && -1 !== n.getTest.call(u, a.begin).match.def.indexOf(\"|\")) {\n var m = l.call(u, !0);\n if (m) {\n var g = void 0 !== m.caret ? m.caret : m.pos ? o.seekNext.call(u, m.pos.begin ? m.pos.begin : m.pos) : o.getLastValidPosition.call(u, -1, !0);\n (t !== r.default.DELETE || a.begin > g) && a.begin;\n }\n }\n !0 !== i && (c.p = t === r.default.DELETE ? a.begin + p : a.begin, c.p = o.determineNewCaretPosition.call(u, {\n begin: c.p,\n end: c.p\n }, !1).begin);\n }\n };\n var i, n = a(4713), r = (i = a(4528)) && i.__esModule ? i : {\n default: i\n }, o = a(8711), s = a(6030);\n function l(e, t, a, i, r, s) {\n var u, c, d, p, h, v, m, g, k, y, b, x = this, P = this.dependencyLib, E = this.opts, S = x.maskset, _ = P.extend(!0, {}, S.validPositions), M = P.extend(!0, {}, S.tests), w = !1, O = !1, T = void 0 !== r ? r : o.getLastValidPosition.call(x);\n if (s && (y = s.begin, b = s.end, s.begin > s.end && (y = s.end, b = s.begin)), \n -1 === T && void 0 === r) u = 0, c = (p = n.getTest.call(x, u)).alternation; else for (;T >= 0; T--) if ((d = S.validPositions[T]) && void 0 !== d.alternation) {\n if (p && p.locator[d.alternation] !== d.locator[d.alternation]) break;\n u = T, c = S.validPositions[u].alternation, p = d;\n }\n if (void 0 !== c) {\n m = parseInt(u), S.excludes[m] = S.excludes[m] || [], !0 !== e && S.excludes[m].push((0, \n n.getDecisionTaker)(p) + \":\" + p.alternation);\n var C = [], A = -1;\n for (h = m; h < o.getLastValidPosition.call(x, void 0, !0) + 1; h++) -1 === A && e <= h && void 0 !== t && (C.push(t), \n A = C.length - 1), (v = S.validPositions[h]) && !0 !== v.generatedInput && (void 0 === s || h < y || h >= b) && C.push(v.input), \n delete S.validPositions[h];\n for (-1 === A && void 0 !== t && (C.push(t), A = C.length - 1); void 0 !== S.excludes[m] && S.excludes[m].length < 10; ) {\n for (S.tests = {}, o.resetMaskSet.call(x, !0), w = !0, h = 0; h < C.length && (g = w.caret || o.getLastValidPosition.call(x, void 0, !0) + 1, \n k = C[h], w = f.call(x, g, k, !1, i, !0)); h++) h === A && (O = w), 1 == e && w && (O = {\n caretPos: h\n });\n if (w) break;\n if (o.resetMaskSet.call(x), p = n.getTest.call(x, m), S.validPositions = P.extend(!0, {}, _), \n S.tests = P.extend(!0, {}, M), !S.excludes[m]) {\n O = l.call(x, e, t, a, i, m - 1, s);\n break;\n }\n var D = (0, n.getDecisionTaker)(p);\n if (-1 !== S.excludes[m].indexOf(D + \":\" + p.alternation)) {\n O = l.call(x, e, t, a, i, m - 1, s);\n break;\n }\n for (S.excludes[m].push(D + \":\" + p.alternation), h = m; h < o.getLastValidPosition.call(x, void 0, !0) + 1; h++) delete S.validPositions[h];\n }\n }\n return O && !1 === E.keepStatic || delete S.excludes[m], O;\n }\n function u(e, t, a) {\n var i = this.opts, n = this.maskset;\n switch (i.casing || t.casing) {\n case \"upper\":\n e = e.toUpperCase();\n break;\n\n case \"lower\":\n e = e.toLowerCase();\n break;\n\n case \"title\":\n var o = n.validPositions[a - 1];\n e = 0 === a || o && o.input === String.fromCharCode(r.default.SPACE) ? e.toUpperCase() : e.toLowerCase();\n break;\n\n default:\n if (\"function\" == typeof i.casing) {\n var s = Array.prototype.slice.call(arguments);\n s.push(n.validPositions), e = i.casing.apply(this, s);\n }\n }\n return e;\n }\n function c(e) {\n var t = this, a = this.opts, i = this.maskset;\n if (\"function\" == typeof a.isComplete) return a.isComplete(e, a);\n if (\"*\" !== a.repeat) {\n var r = !1, s = o.determineLastRequiredPosition.call(t, !0), l = o.seekPrevious.call(t, s.l);\n if (void 0 === s.def || s.def.newBlockMarker || s.def.optionality || s.def.optionalQuantifier) {\n r = !0;\n for (var u = 0; u <= l; u++) {\n var c = n.getTestTemplate.call(t, u).match;\n if (!0 !== c.static && void 0 === i.validPositions[u] && !0 !== c.optionality && !0 !== c.optionalQuantifier || !0 === c.static && e[u] !== n.getPlaceholder.call(t, u, c)) {\n r = !1;\n break;\n }\n }\n }\n return r;\n }\n }\n function f(e, t, a, i, r, s, d) {\n var m = this, g = this.dependencyLib, k = this.opts, y = m.maskset;\n function b(e) {\n return m.isRTL ? e.begin - e.end > 1 || e.begin - e.end == 1 : e.end - e.begin > 1 || e.end - e.begin == 1;\n }\n a = !0 === a;\n var x = e;\n function P(e) {\n if (void 0 !== e) {\n if (void 0 !== e.remove && (Array.isArray(e.remove) || (e.remove = [ e.remove ]), \n e.remove.sort((function(e, t) {\n return t.pos - e.pos;\n })).forEach((function(e) {\n v.call(m, {\n begin: e,\n end: e + 1\n });\n })), e.remove = void 0), void 0 !== e.insert && (Array.isArray(e.insert) || (e.insert = [ e.insert ]), \n e.insert.sort((function(e, t) {\n return e.pos - t.pos;\n })).forEach((function(e) {\n \"\" !== e.c && f.call(m, e.pos, e.c, void 0 === e.strict || e.strict, void 0 !== e.fromIsValid ? e.fromIsValid : i);\n })), e.insert = void 0), e.refreshFromBuffer && e.buffer) {\n var t = e.refreshFromBuffer;\n p.call(m, !0 === t ? t : t.start, t.end, e.buffer), e.refreshFromBuffer = void 0;\n }\n void 0 !== e.rewritePosition && (x = e.rewritePosition, e = !0);\n }\n return e;\n }\n function E(t, a, r) {\n var s = !1;\n return n.getTests.call(m, t).every((function(l, c) {\n var f = l.match;\n if (o.getBuffer.call(m, !0), !1 !== (s = (!f.jit || void 0 !== y.validPositions[o.seekPrevious.call(m, t)]) && (null != f.fn ? f.fn.test(a, y, t, r, k, b(e)) : (a === f.def || a === k.skipOptionalPartCharacter) && \"\" !== f.def && {\n c: n.getPlaceholder.call(m, t, f, !0) || f.def,\n pos: t\n }))) {\n var d = void 0 !== s.c ? s.c : a, p = t;\n return d = d === k.skipOptionalPartCharacter && !0 === f.static ? n.getPlaceholder.call(m, t, f, !0) || f.def : d, \n !0 !== (s = P(s)) && void 0 !== s.pos && s.pos !== t && (p = s.pos), !0 !== s && void 0 === s.pos && void 0 === s.c ? !1 : (!1 === v.call(m, e, g.extend({}, l, {\n input: u.call(m, d, f, p)\n }), i, p) && (s = !1), !1);\n }\n return !0;\n })), s;\n }\n void 0 !== e.begin && (x = m.isRTL ? e.end : e.begin);\n var S = !0, _ = g.extend(!0, {}, y.validPositions);\n if (!1 === k.keepStatic && void 0 !== y.excludes[x] && !0 !== r && !0 !== i) for (var M = x; M < (m.isRTL ? e.begin : e.end); M++) void 0 !== y.excludes[M] && (y.excludes[M] = void 0, \n delete y.tests[M]);\n if (\"function\" == typeof k.preValidation && !0 !== i && !0 !== s && (S = P(S = k.preValidation.call(m, o.getBuffer.call(m), x, t, b(e), k, y, e, a || r))), \n !0 === S) {\n if (S = E(x, t, a), (!a || !0 === i) && !1 === S && !0 !== s) {\n var w = y.validPositions[x];\n if (!w || !0 !== w.match.static || w.match.def !== t && t !== k.skipOptionalPartCharacter) {\n if (k.insertMode || void 0 === y.validPositions[o.seekNext.call(m, x)] || e.end > x) {\n var O = !1;\n if (y.jitOffset[x] && void 0 === y.validPositions[o.seekNext.call(m, x)] && !1 !== (S = f.call(m, x + y.jitOffset[x], t, !0, !0)) && (!0 !== r && (S.caret = x), \n O = !0), e.end > x && (y.validPositions[x] = void 0), !O && !o.isMask.call(m, x, k.keepStatic && 0 === x)) for (var T = x + 1, C = o.seekNext.call(m, x, !1, 0 !== x); T <= C; T++) if (!1 !== (S = E(T, t, a))) {\n S = h.call(m, x, void 0 !== S.pos ? S.pos : T) || S, x = T;\n break;\n }\n }\n } else S = {\n caret: o.seekNext.call(m, x)\n };\n }\n !1 !== S || !k.keepStatic || !c.call(m, o.getBuffer.call(m)) && 0 !== x || a || !0 === r ? b(e) && y.tests[x] && y.tests[x].length > 1 && k.keepStatic && !a && !0 !== r && (S = l.call(m, !0)) : S = l.call(m, x, t, a, i, void 0, e), \n !0 === S && (S = {\n pos: x\n });\n }\n if (\"function\" == typeof k.postValidation && !0 !== i && !0 !== s) {\n var A = k.postValidation.call(m, o.getBuffer.call(m, !0), void 0 !== e.begin ? m.isRTL ? e.end : e.begin : e, t, S, k, y, a, d);\n void 0 !== A && (S = !0 === A ? S : A);\n }\n S && void 0 === S.pos && (S.pos = x), !1 === S || !0 === s ? (o.resetMaskSet.call(m, !0), \n y.validPositions = g.extend(!0, {}, _)) : h.call(m, void 0, x, !0);\n var D = P(S);\n void 0 !== m.maxLength && (o.getBuffer.call(m).length > m.maxLength && !i && (o.resetMaskSet.call(m, !0), \n y.validPositions = g.extend(!0, {}, _), D = !1));\n return D;\n }\n function d(e, t, a) {\n for (var i = this.maskset, r = !1, o = n.getTests.call(this, e), s = 0; s < o.length; s++) {\n if (o[s].match && (o[s].match.nativeDef === t.match[a.shiftPositions ? \"def\" : \"nativeDef\"] && (!a.shiftPositions || !t.match.static) || o[s].match.nativeDef === t.match.nativeDef || a.regex && !o[s].match.static && o[s].match.fn.test(t.input))) {\n r = !0;\n break;\n }\n if (o[s].match && o[s].match.def === t.match.nativeDef) {\n r = void 0;\n break;\n }\n }\n return !1 === r && void 0 !== i.jitOffset[e] && (r = d.call(this, e + i.jitOffset[e], t, a)), \n r;\n }\n function p(e, t, a) {\n var i, n, r = this, l = this.maskset, u = this.opts, c = this.dependencyLib, f = u.skipOptionalPartCharacter, d = r.isRTL ? a.slice().reverse() : a;\n if (u.skipOptionalPartCharacter = \"\", !0 === e) o.resetMaskSet.call(r), l.tests = {}, \n e = 0, t = a.length, n = o.determineNewCaretPosition.call(r, {\n begin: 0,\n end: 0\n }, !1).begin; else {\n for (i = e; i < t; i++) delete l.validPositions[i];\n n = e;\n }\n var p = new c.Event(\"keypress\");\n for (i = e; i < t; i++) {\n p.which = d[i].toString().charCodeAt(0), r.ignorable = !1;\n var h = s.EventHandlers.keypressEvent.call(r, p, !0, !1, !1, n);\n !1 !== h && void 0 !== h && (n = h.forwardPosition);\n }\n u.skipOptionalPartCharacter = f;\n }\n function h(e, t, a) {\n var i = this, r = this.maskset, s = this.dependencyLib;\n if (void 0 === e) for (e = t - 1; e > 0 && !r.validPositions[e]; e--) ;\n for (var l = e; l < t; l++) {\n if (void 0 === r.validPositions[l] && !o.isMask.call(i, l, !1)) if (0 == l ? n.getTest.call(i, l) : r.validPositions[l - 1]) {\n var u = n.getTests.call(i, l).slice();\n \"\" === u[u.length - 1].match.def && u.pop();\n var c, d = n.determineTestTemplate.call(i, l, u);\n if (d && (!0 !== d.match.jit || \"master\" === d.match.newBlockMarker && (c = r.validPositions[l + 1]) && !0 === c.match.optionalQuantifier) && ((d = s.extend({}, d, {\n input: n.getPlaceholder.call(i, l, d.match, !0) || d.match.def\n })).generatedInput = !0, v.call(i, l, d, !0), !0 !== a)) {\n var p = r.validPositions[t].input;\n return r.validPositions[t] = void 0, f.call(i, t, p, !0, !0);\n }\n }\n }\n }\n function v(e, t, a, i) {\n var r = this, s = this.maskset, l = this.opts, u = this.dependencyLib;\n function c(e, t, a) {\n var i = t[e];\n if (void 0 !== i && !0 === i.match.static && !0 !== i.match.optionality && (void 0 === t[0] || void 0 === t[0].alternation)) {\n var n = a.begin <= e - 1 ? t[e - 1] && !0 === t[e - 1].match.static && t[e - 1] : t[e - 1], r = a.end > e + 1 ? t[e + 1] && !0 === t[e + 1].match.static && t[e + 1] : t[e + 1];\n return n && r;\n }\n return !1;\n }\n var p = 0, h = void 0 !== e.begin ? e.begin : e, v = void 0 !== e.end ? e.end : e, m = !0;\n if (e.begin > e.end && (h = e.end, v = e.begin), i = void 0 !== i ? i : h, h !== v || l.insertMode && void 0 !== s.validPositions[i] && void 0 === a || void 0 === t) {\n var g, k = u.extend(!0, {}, s.validPositions), y = o.getLastValidPosition.call(r, void 0, !0);\n for (s.p = h, g = y; g >= h; g--) delete s.validPositions[g], void 0 === t && delete s.tests[g + 1];\n var b, x, P = i, E = P;\n for (t && (s.validPositions[i] = u.extend(!0, {}, t), E++, P++), g = t ? v : v - 1; g <= y; g++) {\n if (void 0 !== (b = k[g]) && !0 !== b.generatedInput && (g >= v || g >= h && c(g, k, {\n begin: h,\n end: v\n }))) {\n for (;\"\" !== n.getTest.call(r, E).match.def; ) {\n if (!1 !== (x = d.call(r, E, b, l)) || \"+\" === b.match.def) {\n \"+\" === b.match.def && o.getBuffer.call(r, !0);\n var S = f.call(r, E, b.input, \"+\" !== b.match.def, !0);\n if (m = !1 !== S, P = (S.pos || E) + 1, !m && x) break;\n } else m = !1;\n if (m) {\n void 0 === t && b.match.static && g === e.begin && p++;\n break;\n }\n if (!m && E > s.maskLength) break;\n E++;\n }\n \"\" == n.getTest.call(r, E).match.def && (m = !1), E = P;\n }\n if (!m) break;\n }\n if (!m) return s.validPositions = u.extend(!0, {}, k), o.resetMaskSet.call(r, !0), \n !1;\n } else t && n.getTest.call(r, i).match.cd === t.match.cd && (s.validPositions[i] = u.extend(!0, {}, t));\n return o.resetMaskSet.call(r, !0), p;\n }\n }\n }, t = {};\n function a(i) {\n var n = t[i];\n if (void 0 !== n) return n.exports;\n var r = t[i] = {\n exports: {}\n };\n return e[i](r, r.exports, a), r.exports;\n }\n var i = {};\n return function() {\n var e, t = i;\n Object.defineProperty(t, \"__esModule\", {\n value: !0\n }), t.default = void 0, a(3851), a(219), a(207), a(5296);\n var n = ((e = a(2394)) && e.__esModule ? e : {\n default: e\n }).default;\n t.default = n;\n }(), i;\n }();\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaW5wdXRtYXNrL2Rpc3QvaW5wdXRtYXNrLmpzPzI1MjYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsSUFBdUQsdUJBQXVCLE1BQU0sYUFHdkY7QUFDTCxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsNFJBQTRSO0FBQ3JVLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsS0FBSztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDLCtDQUErQztBQUMvQyw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0EsNkdBQTZHLGNBQWM7QUFDM0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0Esa0dBQWtHO0FBQ2xHO0FBQ0E7QUFDQTtBQUNBLDJGQUEyRixPQUFPO0FBQ2xHO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixFQUFFO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixFQUFFO0FBQzNCLDJDQUEyQyxPQUFPO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixFQUFFO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RCxjQUFjLDJFQUEyRSxPQUFPO0FBQ3pKO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsaUpBQWlKLGNBQWM7QUFDL0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBLHlCQUF5QjtBQUN6QixpSEFBaUgsb0JBQW9CLHFDQUFxQyxpQkFBaUIsb0JBQW9CO0FBQy9NO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGdFQUFnRTtBQUNoRSwyRUFBMkU7QUFDM0UsMEVBQTBFO0FBQzFFLDBCQUEwQixNQUFNO0FBQ2hDO0FBQ0EsbUlBQW1JO0FBQ25JO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0hBQWtIO0FBQ2xIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLGlHQUFpRyxLQUFLO0FBQ3RHLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEtBQTBLO0FBQzFLO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtIQUErSDtBQUMvSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9UQUFvVCxjQUFjO0FBQ2xVLHNDQUFzQyxhQUFhO0FBQ25ELHNDQUFzQyxhQUFhO0FBQ25ELHNDQUFzQyxhQUFhO0FBQ25EO0FBQ0EseURBQXlELE9BQU87QUFDaEU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQSxpQ0FBaUM7QUFDakM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCxjQUFjO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLGlDQUFpQyxFQUFFO0FBQ25DO0FBQ0EscUJBQXFCO0FBQ3JCLG1DQUFtQyxFQUFFO0FBQ3JDO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLHNDQUFzQyxjQUFjO0FBQ3BELHFCQUFxQjtBQUNyQjtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxzQ0FBc0MsY0FBYztBQUNwRCxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsZ0NBQWdDLEVBQUU7QUFDbEM7QUFDQSxxQkFBcUI7QUFDckIsZ0NBQWdDLEVBQUU7QUFDbEM7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLGtCQUFrQjtBQUM5RCw4RUFBOEU7QUFDOUU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseUJBQXlCLGlFQUFpRSw4Q0FBOEM7QUFDeEk7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQsY0FBYztBQUNqRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELGtCQUFrQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEMsOEJBQThCO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0EsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLGlDQUFpQyxLQUFLLElBQUksS0FBSyxLQUFLLEtBQUssS0FBSyxLQUFLLElBQUksS0FBSyxHQUFHLEtBQUssSUFBSSxLQUFLLEtBQUssS0FBSztBQUN2RztBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0Esd0hBQXdILEVBQUU7QUFDMUgsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxpQ0FBaUMsR0FBRyxFQUFFLEVBQUU7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEVBQThFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQzdHO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyxjQUFjO0FBQ3pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLFFBQVE7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkdBQTZHLE9BQU87QUFDcEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3R0FBd0c7QUFDeEc7QUFDQTtBQUNBO0FBQ0EsbUtBQW1LO0FBQ25LO0FBQ0E7QUFDQSx1REFBdUQsRUFBRTtBQUN6RDtBQUNBLDBGQUEwRixpQkFBaUIsMEdBQTBHLG1CQUFtQjtBQUN4TyxvRUFBb0UsaUJBQWlCO0FBQ3JGLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QjtBQUNBLGtFQUFrRSxJQUFJO0FBQ3RFLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlFQUF5RSxjQUFjO0FBQ3ZGO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvR0FBb0c7QUFDcEc7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRSxFQUFFO0FBQ3JFO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtRUFBbUUseUNBQXlDO0FBQzVHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0Isd0xBQXdMLE9BQU87QUFDL0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdHQUF3RztBQUN4RztBQUNBLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBLHdEQUF3RDtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxpRUFBaUUsSUFBSSw4QkFBOEIsSUFBSTtBQUN2Ryx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdGQUF3Riw0QkFBNEI7QUFDcEg7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwRkFBMEY7QUFDMUY7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtS0FBbUssMkJBQTJCO0FBQzlMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0EscU1BQXFNLDRCQUE0QjtBQUNqTztBQUNBO0FBQ0EscU5BQXFOO0FBQ3JOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwRkFBMEY7QUFDMUYsbUhBQW1IO0FBQ25ILGdGQUFnRjtBQUNoRixrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQixrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUdBQXFHLFVBQVU7QUFDL0c7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsOEJBQThCO0FBQzNEO0FBQ0E7QUFDQTtBQUNBLGlGQUFpRjtBQUNqRjtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekIscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCLDhIQUE4SCxrQ0FBa0M7QUFDaEs7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekIscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJHQUEyRztBQUMzRztBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTtBQUNBLHFDQUFxQztBQUNyQyx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGlGQUFpRixvRUFBb0U7QUFDOUs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLDBEQUEwRCx1Q0FBdUMsV0FBVyx5RUFBeUUsSUFBSSx3Q0FBd0MsRUFBRSxjQUFjLEVBQUUsK0NBQStDLG9CQUFvQixjQUFjO0FBQ3BVO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0IseUJBQXlCLFlBQVk7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxzQkFBc0I7QUFDckU7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0Msc0JBQXNCO0FBQ3JFO0FBQ0E7QUFDQSx5QkFBeUIsd0JBQXdCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQiw4QkFBOEI7QUFDeEQ7QUFDQTtBQUNBLGtDQUFrQyxJQUFJO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0MsVUFBVTtBQUM1Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0ZBQXNGO0FBQ3RGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixhQUFhO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQztBQUNBLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwRkFBMEYsT0FBTztBQUNqRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLCtMQUErTDtBQUN4TjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQiwyS0FBMks7QUFDM0ssbUNBQW1DLGNBQWM7QUFDakQsMENBQTBDO0FBQzFDO0FBQ0EsbUNBQW1DLCtaQUErWjtBQUNsYztBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtHQUFrRztBQUNsRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSx5RUFBeUU7QUFDekUsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSwwQkFBMEIsZ0pBQWdKO0FBQzFLO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGdMQUFnTDtBQUN2TjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsYUFBYTtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwR0FBMEcsY0FBYztBQUN4SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvRUFBb0UsY0FBYztBQUNsRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0VBQXdFLE9BQU8sNERBQTRELFNBQVMsa0NBQWtDO0FBQ3RMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RkFBd0YsT0FBTztBQUMvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStELHNCQUFzQjtBQUNyRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLG1GQUFtRixpQkFBaUIsc0JBQXNCO0FBQzFIO0FBQ0Esb0dBQW9HLE9BQU87QUFDM0c7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELGNBQWM7QUFDckU7QUFDQTtBQUNBLHNGQUFzRjtBQUN0RjtBQUNBLDJEQUEyRCxjQUFjO0FBQ3pFO0FBQ0E7QUFDQSwrREFBK0QsY0FBYztBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQSxpQ0FBaUMsd0hBQXdILG9FQUFvRTtBQUM3TjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQSxrRUFBa0Usc0JBQXNCO0FBQ3hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0RBQWtELDhEQUE4RDtBQUNoSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLCtDQUErQyxjQUFjO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0lBQWtJO0FBQ2xJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsOEhBQThILGNBQWM7QUFDNUksbUNBQW1DLGNBQWM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsNElBQTRJLHdDQUF3QztBQUNwTDtBQUNBLGdHQUFnRyxZQUFZLE9BQU87QUFDbkg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsb0RBQW9EO0FBQ3ZGO0FBQ0E7QUFDQSx1RkFBdUYsdURBQXVEO0FBQzlJLDZDQUE2Qyw0Q0FBNEM7QUFDekYsc0VBQXNFO0FBQ3RFO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0Esb0hBQW9IO0FBQ3BILHFEQUFxRDtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0ZBQW9GLG9EQUFvRDtBQUN4STtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLFFBQVE7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLDJMQUEyTDtBQUMzTDtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQSxtREFBbUQ7QUFDbkQsZ0hBQWdILGlDQUFpQztBQUNqSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwTUFBME0sUUFBUTtBQUNsTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3REO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0EsMkZBQTJGLGNBQWM7QUFDekc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdHQUF3RztBQUN4RztBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsWUFBWTtBQUNqQyxtQ0FBbUMsT0FBTztBQUMxQztBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsT0FBTztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELCtCQUErQjtBQUNwRixtQ0FBbUMsT0FBTztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLDJMQUEyTDtBQUMzTDtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQsNENBQTRDLFFBQVE7QUFDcEQ7QUFDQSx3RUFBd0UsbUNBQW1DLFFBQVE7QUFDbkg7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCLHNDQUFzQyxzQ0FBc0M7QUFDNUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlFQUF5RTtBQUN6RTtBQUNBLHFCQUFxQixpR0FBaUc7QUFDdEg7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvaW5wdXRtYXNrL2Rpc3QvaW5wdXRtYXNrLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBkaXN0L2lucHV0bWFza1xuICogaHR0cHM6Ly9naXRodWIuY29tL1JvYmluSGVyYm90cy9JbnB1dG1hc2tcbiAqIENvcHlyaWdodCAoYykgMjAxMCAtIDIwMjEgUm9iaW4gSGVyYm90c1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBWZXJzaW9uOiA1LjAuNlxuICovXG4hZnVuY3Rpb24oZSwgdCkge1xuICAgIGlmIChcIm9iamVjdFwiID09IHR5cGVvZiBleHBvcnRzICYmIFwib2JqZWN0XCIgPT0gdHlwZW9mIG1vZHVsZSkgbW9kdWxlLmV4cG9ydHMgPSB0KCk7IGVsc2UgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZGVmaW5lICYmIGRlZmluZS5hbWQpIGRlZmluZShbXSwgdCk7IGVsc2Uge1xuICAgICAgICB2YXIgYSA9IHQoKTtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBhKSAoXCJvYmplY3RcIiA9PSB0eXBlb2YgZXhwb3J0cyA/IGV4cG9ydHMgOiBlKVtpXSA9IGFbaV07XG4gICAgfVxufSh0aGlzLCAoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgdmFyIGUgPSB7XG4gICAgICAgICAgICA0NTI4OiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgZS5leHBvcnRzID0gSlNPTi5wYXJzZSgne1wiQkFDS1NQQUNFXCI6OCxcIkJBQ0tTUEFDRV9TQUZBUklcIjoxMjcsXCJERUxFVEVcIjo0NixcIkRPV05cIjo0MCxcIkVORFwiOjM1LFwiRU5URVJcIjoxMyxcIkVTQ0FQRVwiOjI3LFwiSE9NRVwiOjM2LFwiSU5TRVJUXCI6NDUsXCJMRUZUXCI6MzcsXCJQQUdFX0RPV05cIjozNCxcIlBBR0VfVVBcIjozMyxcIlJJR0hUXCI6MzksXCJTUEFDRVwiOjMyLFwiVEFCXCI6OSxcIlVQXCI6MzgsXCJYXCI6ODgsXCJaXCI6OTAsXCJDT05UUk9MXCI6MTcsXCJQQVVTRS9CUkVBS1wiOjE5LFwiV0lORE9XU19MRUZUXCI6OTEsXCJXSU5ET1dTX1JJR0hUXCI6OTIsXCJLRVlfMjI5XCI6MjI5fScpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDg3NDE6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICEwXG4gICAgICAgICAgICAgICAgfSksIHQuZGVmYXVsdCA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICB2YXIgYSA9ICEoXCJ1bmRlZmluZWRcIiA9PSB0eXBlb2Ygd2luZG93IHx8ICF3aW5kb3cuZG9jdW1lbnQgfHwgIXdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0LmRlZmF1bHQgPSBhO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDM5NzY6IGZ1bmN0aW9uKGUsIHQsIGEpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICEwXG4gICAgICAgICAgICAgICAgfSksIHQuZGVmYXVsdCA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICB2YXIgaSwgbiA9IChpID0gYSg0NTI4KSkgJiYgaS5fX2VzTW9kdWxlID8gaSA6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogaVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdmFyIHIgPSB7XG4gICAgICAgICAgICAgICAgICAgIF9tYXhUZXN0UG9zOiA1MDAsXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIl9cIixcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxtYXJrZXI6IFsgXCJbXCIsIFwiXVwiIF0sXG4gICAgICAgICAgICAgICAgICAgIHF1YW50aWZpZXJtYXJrZXI6IFsgXCJ7XCIsIFwifVwiIF0sXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwbWFya2VyOiBbIFwiKFwiLCBcIilcIiBdLFxuICAgICAgICAgICAgICAgICAgICBhbHRlcm5hdG9ybWFya2VyOiBcInxcIixcbiAgICAgICAgICAgICAgICAgICAgZXNjYXBlQ2hhcjogXCJcXFxcXCIsXG4gICAgICAgICAgICAgICAgICAgIG1hc2s6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHJlZ2V4OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBvbmNvbXBsZXRlOiBmdW5jdGlvbigpIHt9LFxuICAgICAgICAgICAgICAgICAgICBvbmluY29tcGxldGU6IGZ1bmN0aW9uKCkge30sXG4gICAgICAgICAgICAgICAgICAgIG9uY2xlYXJlZDogZnVuY3Rpb24oKSB7fSxcbiAgICAgICAgICAgICAgICAgICAgcmVwZWF0OiAwLFxuICAgICAgICAgICAgICAgICAgICBncmVlZHk6ICExLFxuICAgICAgICAgICAgICAgICAgICBhdXRvVW5tYXNrOiAhMSxcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTWFza09uU3VibWl0OiAhMSxcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJNYXNrT25Mb3N0Rm9jdXM6ICEwLFxuICAgICAgICAgICAgICAgICAgICBpbnNlcnRNb2RlOiAhMCxcbiAgICAgICAgICAgICAgICAgICAgaW5zZXJ0TW9kZVZpc3VhbDogITAsXG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW5jb21wbGV0ZTogITEsXG4gICAgICAgICAgICAgICAgICAgIGFsaWFzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBvbktleURvd246IGZ1bmN0aW9uKCkge30sXG4gICAgICAgICAgICAgICAgICAgIG9uQmVmb3JlTWFzazogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgb25CZWZvcmVQYXN0ZTogZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdC5vbkJlZm9yZU1hc2sgPyB0Lm9uQmVmb3JlTWFzay5jYWxsKHRoaXMsIGUsIHQpIDogZTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb25CZWZvcmVXcml0ZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgb25Vbk1hc2s6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHNob3dNYXNrT25Gb2N1czogITAsXG4gICAgICAgICAgICAgICAgICAgIHNob3dNYXNrT25Ib3ZlcjogITAsXG4gICAgICAgICAgICAgICAgICAgIG9uS2V5VmFsaWRhdGlvbjogZnVuY3Rpb24oKSB7fSxcbiAgICAgICAgICAgICAgICAgICAgc2tpcE9wdGlvbmFsUGFydENoYXJhY3RlcjogXCIgXCIsXG4gICAgICAgICAgICAgICAgICAgIG51bWVyaWNJbnB1dDogITEsXG4gICAgICAgICAgICAgICAgICAgIHJpZ2h0QWxpZ246ICExLFxuICAgICAgICAgICAgICAgICAgICB1bmRvT25Fc2NhcGU6ICEwLFxuICAgICAgICAgICAgICAgICAgICByYWRpeFBvaW50OiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICBfcmFkaXhEYW5jZTogITEsXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwU2VwYXJhdG9yOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICBrZWVwU3RhdGljOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbkNhcmV0T25UYWI6ICEwLFxuICAgICAgICAgICAgICAgICAgICB0YWJUaHJvdWdoOiAhMSxcbiAgICAgICAgICAgICAgICAgICAgc3VwcG9ydHNJbnB1dFR5cGU6IFsgXCJ0ZXh0XCIsIFwidGVsXCIsIFwidXJsXCIsIFwicGFzc3dvcmRcIiwgXCJzZWFyY2hcIiBdLFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmFibGVzOiBbIG4uZGVmYXVsdC5CQUNLU1BBQ0UsIG4uZGVmYXVsdC5UQUIsIG4uZGVmYXVsdFtcIlBBVVNFL0JSRUFLXCJdLCBuLmRlZmF1bHQuRVNDQVBFLCBuLmRlZmF1bHQuUEFHRV9VUCwgbi5kZWZhdWx0LlBBR0VfRE9XTiwgbi5kZWZhdWx0LkVORCwgbi5kZWZhdWx0LkhPTUUsIG4uZGVmYXVsdC5MRUZULCBuLmRlZmF1bHQuVVAsIG4uZGVmYXVsdC5SSUdIVCwgbi5kZWZhdWx0LkRPV04sIG4uZGVmYXVsdC5JTlNFUlQsIG4uZGVmYXVsdC5ERUxFVEUsIDkzLCAxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxMTgsIDExOSwgMTIwLCAxMjEsIDEyMiwgMTIzLCAwLCAyMjkgXSxcbiAgICAgICAgICAgICAgICAgICAgaXNDb21wbGV0ZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcHJlVmFsaWRhdGlvbjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcG9zdFZhbGlkYXRpb246IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRpY0RlZmluaXRpb25TeW1ib2w6IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgaml0TWFza2luZzogITEsXG4gICAgICAgICAgICAgICAgICAgIG51bGxhYmxlOiAhMCxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRFdmVudE9ubHk6ICExLFxuICAgICAgICAgICAgICAgICAgICBub1ZhbHVlUGF0Y2hpbmc6ICExLFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbkNhcmV0T25DbGljazogXCJsdnBcIixcbiAgICAgICAgICAgICAgICAgICAgY2FzaW5nOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBpbnB1dG1vZGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICBpbXBvcnREYXRhQXR0cmlidXRlczogITAsXG4gICAgICAgICAgICAgICAgICAgIHNoaWZ0UG9zaXRpb25zOiAhMCxcbiAgICAgICAgICAgICAgICAgICAgdXNlUHJvdG90eXBlRGVmaW5pdGlvbnM6ICEwLFxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uRXZlbnRUaW1lT3V0OiAzZTNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHQuZGVmYXVsdCA9IHI7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgNzM5MjogZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogITBcbiAgICAgICAgICAgICAgICB9KSwgdC5kZWZhdWx0ID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgIHQuZGVmYXVsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgOToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBcIlswLTlcXHVmZjEwLVxcdWZmMTldXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uU3ltYm9sOiBcIipcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IFwiW0EtWmEtelxcdTA0MTAtXFx1MDQ0ZlxcdTA0MDFcXHUwNDUxXFx4YzAtXFx4ZmZcXHhiNV1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25TeW1ib2w6IFwiKlwiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiKlwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IFwiWzAtOVxcdWZmMTAtXFx1ZmYxOUEtWmEtelxcdTA0MTAtXFx1MDQ0ZlxcdTA0MDFcXHUwNDUxXFx4YzAtXFx4ZmZcXHhiNV1cIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAyNTM6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICEwXG4gICAgICAgICAgICAgICAgfSksIHQuZGVmYXVsdCA9IGZ1bmN0aW9uKGUsIHQsIGEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCA9PT0gYSkgcmV0dXJuIGUuX19kYXRhID8gZS5fX2RhdGFbdF0gOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICBlLl9fZGF0YSA9IGUuX19kYXRhIHx8IHt9LCBlLl9fZGF0YVt0XSA9IGE7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAzNzc2OiBmdW5jdGlvbihlLCB0LCBhKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAhMFxuICAgICAgICAgICAgICAgIH0pLCB0Lm9uID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhKGUsIGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG4uYWRkRXZlbnRMaXN0ZW5lciA/IG4uYWRkRXZlbnRMaXN0ZW5lcihlLCB0LCAhMSkgOiBuLmF0dGFjaEV2ZW50ICYmIG4uYXR0YWNoRXZlbnQoXCJvblwiICsgZSwgdCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgaVtlXSA9IGlbZV0gfHwge30sIGlbZV1bYV0gPSBpW2VdW2FdIHx8IFtdLCBpW2VdW2FdLnB1c2godCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHUodGhpc1swXSkpIGZvciAodmFyIGkgPSB0aGlzWzBdLmV2ZW50UmVnaXN0cnksIG4gPSB0aGlzWzBdLCByID0gZS5zcGxpdChcIiBcIiksIG8gPSAwOyBvIDwgci5sZW5ndGg7IG8rKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSByW29dLnNwbGl0KFwiLlwiKSwgbCA9IHNbMF0sIGMgPSBzWzFdIHx8IFwiZ2xvYmFsXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBhKGwsIGMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH0sIHQub2ZmID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSwgaTtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbihlLCB0LCBuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSBpbiBhID09ICEwKSBpZiAoaS5yZW1vdmVFdmVudExpc3RlbmVyID8gaS5yZW1vdmVFdmVudExpc3RlbmVyKGUsIG4sICExKSA6IGkuZGV0YWNoRXZlbnQgJiYgaS5kZXRhY2hFdmVudChcIm9uXCIgKyBlLCBuKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBcImdsb2JhbFwiID09PSB0KSBmb3IgKHZhciByIGluIGFbZV0pIGFbZV1bcl0uc3BsaWNlKGFbZV1bcl0uaW5kZXhPZihuKSwgMSk7IGVsc2UgYVtlXVt0XS5zcGxpY2UoYVtlXVt0XS5pbmRleE9mKG4pLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByKGUsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuLCByLCBvID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5sZW5ndGggPiAwKSBpZiAodm9pZCAwID09PSB0KSBmb3IgKG4gPSAwLCByID0gYVtlXVtpXS5sZW5ndGg7IG4gPCByOyBuKyspIG8ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXY6IGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlOiBpICYmIGkubGVuZ3RoID4gMCA/IGkgOiBcImdsb2JhbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IGFbZV1baV1bbl1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pOyBlbHNlIG8ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXY6IGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlOiBpICYmIGkubGVuZ3RoID4gMCA/IGkgOiBcImdsb2JhbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IHRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pOyBlbHNlIGlmIChpLmxlbmd0aCA+IDApIGZvciAodmFyIHMgaW4gYSkgZm9yICh2YXIgbCBpbiBhW3NdKSBpZiAobCA9PT0gaSkgaWYgKHZvaWQgMCA9PT0gdCkgZm9yIChuID0gMCwgXG4gICAgICAgICAgICAgICAgICAgICAgICByID0gYVtzXVtsXS5sZW5ndGg7IG4gPCByOyBuKyspIG8ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXY6IHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlOiBsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IGFbc11bbF1bbl1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pOyBlbHNlIG8ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXY6IHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlOiBsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IHRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG87XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHUodGhpc1swXSkgJiYgZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHRoaXNbMF0uZXZlbnRSZWdpc3RyeSwgaSA9IHRoaXNbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBvID0gZS5zcGxpdChcIiBcIiksIHMgPSAwOyBzIDwgby5sZW5ndGg7IHMrKykgZm9yICh2YXIgbCA9IG9bc10uc3BsaXQoXCIuXCIpLCBjID0gcihsWzBdLCBsWzFdKSwgZiA9IDAsIGQgPSBjLmxlbmd0aDsgZiA8IGQ7IGYrKykgbihjW2ZdLmV2LCBjW2ZdLm5hbWVzcGFjZSwgY1tmXS5oYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9LCB0LnRyaWdnZXIgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1KHRoaXNbMF0pKSBmb3IgKHZhciB0ID0gdGhpc1swXS5ldmVudFJlZ2lzdHJ5LCBhID0gdGhpc1swXSwgaSA9IFwic3RyaW5nXCIgPT0gdHlwZW9mIGUgPyBlLnNwbGl0KFwiIFwiKSA6IFsgZS50eXBlIF0sIHIgPSAwOyByIDwgaS5sZW5ndGg7IHIrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBpW3JdLnNwbGl0KFwiLlwiKSwgbCA9IHNbMF0sIGMgPSBzWzFdIHx8IFwiZ2xvYmFsXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodm9pZCAwICE9PSBkb2N1bWVudCAmJiBcImdsb2JhbFwiID09PSBjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGYsIGQsIHAgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6ICEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiAhMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiBhcmd1bWVudHNbMV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5jcmVhdGVFdmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJpbnB1dFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuaW5wdXRUeXBlID0gXCJpbnNlcnRUZXh0XCIsIGYgPSBuZXcgSW5wdXRFdmVudChsLCBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBuZXcgQ3VzdG9tRXZlbnQobCwgcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJDdXN0b21FdmVudFwiKSkuaW5pdEN1c3RvbUV2ZW50KGwsIHAuYnViYmxlcywgcC5jYW5jZWxhYmxlLCBwLmRldGFpbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50eXBlICYmICgwLCBuLmRlZmF1bHQpKGYsIGUpLCBhLmRpc3BhdGNoRXZlbnQoZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIChmID0gZG9jdW1lbnQuY3JlYXRlRXZlbnRPYmplY3QoKSkuZXZlbnRUeXBlID0gbCwgZi5kZXRhaWwgPSBhcmd1bWVudHNbMV0sIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudHlwZSAmJiAoMCwgbi5kZWZhdWx0KShmLCBlKSwgYS5maXJlRXZlbnQoXCJvblwiICsgZi5ldmVudFR5cGUsIGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2b2lkIDAgIT09IHRbbF0pIGlmIChhcmd1bWVudHNbMF0gPSBhcmd1bWVudHNbMF0udHlwZSA/IGFyZ3VtZW50c1swXSA6IG8uZGVmYXVsdC5FdmVudChhcmd1bWVudHNbMF0pLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1swXS5kZXRhaWwgPSBhcmd1bWVudHMuc2xpY2UoMSksIFwiZ2xvYmFsXCIgPT09IGMpIGZvciAodmFyIGggaW4gdFtsXSkgZm9yIChkID0gMDsgZCA8IHRbbF1baF0ubGVuZ3RoOyBkKyspIHRbbF1baF1bZF0uYXBwbHkoYSwgYXJndW1lbnRzKTsgZWxzZSBmb3IgKGQgPSAwOyBkIDwgdFtsXVtjXS5sZW5ndGg7IGQrKykgdFtsXVtjXVtkXS5hcHBseShhLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH0sIHQuRXZlbnQgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgdmFyIGksIG4gPSBsKGEoNjAwKSksIHIgPSBsKGEoOTM4MCkpLCBvID0gbChhKDQ5NjMpKSwgcyA9IGwoYSg4NzQxKSk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBlXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHUoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZSBpbnN0YW5jZW9mIEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHQuRXZlbnQgPSBpLCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIHIuZGVmYXVsdC5DdXN0b21FdmVudCA/IHQuRXZlbnQgPSBpID0gci5kZWZhdWx0LkN1c3RvbUV2ZW50IDogcy5kZWZhdWx0ICYmICh0LkV2ZW50ID0gaSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdCA9IHQgfHwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnViYmxlczogITEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiAhMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogdm9pZCAwXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJDdXN0b21FdmVudFwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuaW5pdEN1c3RvbUV2ZW50KGUsIHQuYnViYmxlcywgdC5jYW5jZWxhYmxlLCB0LmRldGFpbCksIGE7XG4gICAgICAgICAgICAgICAgfSwgaS5wcm90b3R5cGUgPSByLmRlZmF1bHQuRXZlbnQucHJvdG90eXBlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA2MDA6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBlO1xuICAgICAgICAgICAgICAgICAgICB9IDogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUgJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgZS5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIGUgIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIGU7XG4gICAgICAgICAgICAgICAgICAgIH0pKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICEwXG4gICAgICAgICAgICAgICAgfSksIHQuZGVmYXVsdCA9IGZ1bmN0aW9uIGUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0LCBpLCBuLCByLCBvLCBzLCBsID0gYXJndW1lbnRzWzBdIHx8IHt9LCB1ID0gMSwgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIGYgPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgXCJib29sZWFuXCIgPT0gdHlwZW9mIGwgJiYgKGYgPSBsLCBsID0gYXJndW1lbnRzW3VdIHx8IHt9LCB1KyspO1xuICAgICAgICAgICAgICAgICAgICBcIm9iamVjdFwiICE9PSBhKGwpICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgbCAmJiAobCA9IHt9KTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICg7dSA8IGM7IHUrKykgaWYgKG51bGwgIT0gKHQgPSBhcmd1bWVudHNbdV0pKSBmb3IgKGkgaW4gdCkgbiA9IGxbaV0sIHIgPSB0W2ldLCBcbiAgICAgICAgICAgICAgICAgICAgbCAhPT0gciAmJiAoZiAmJiByICYmIChcIltvYmplY3QgT2JqZWN0XVwiID09PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocikgfHwgKG8gPSBBcnJheS5pc0FycmF5KHIpKSkgPyAobyA/IChvID0gITEsIFxuICAgICAgICAgICAgICAgICAgICBzID0gbiAmJiBBcnJheS5pc0FycmF5KG4pID8gbiA6IFtdKSA6IHMgPSBuICYmIFwiW29iamVjdCBPYmplY3RdXCIgPT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKSA/IG4gOiB7fSwgXG4gICAgICAgICAgICAgICAgICAgIGxbaV0gPSBlKGYsIHMsIHIpKSA6IHZvaWQgMCAhPT0gciAmJiAobFtpXSA9IHIpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGw7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA0OTYzOiBmdW5jdGlvbihlLCB0LCBhKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAhMFxuICAgICAgICAgICAgICAgIH0pLCB0LmRlZmF1bHQgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgdmFyIGkgPSBzKGEoNjAwKSksIG4gPSBzKGEoOTM4MCkpLCByID0gcyhhKDI1MykpLCBvID0gYSgzNzc2KTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUgJiYgZS5fX2VzTW9kdWxlID8gZSA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGVcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGwgPSBuLmRlZmF1bHQuZG9jdW1lbnQ7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdShlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlIGluc3RhbmNlb2YgdSA/IGUgOiB0aGlzIGluc3RhbmNlb2YgdSA/IHZvaWQgKG51bGwgIT0gZSAmJiBlICE9PSBuLmRlZmF1bHQgJiYgKHRoaXNbMF0gPSBlLm5vZGVOYW1lID8gZSA6IHZvaWQgMCAhPT0gZVswXSAmJiBlWzBdLm5vZGVOYW1lID8gZVswXSA6IGwucXVlcnlTZWxlY3RvcihlKSwgXG4gICAgICAgICAgICAgICAgICAgIHZvaWQgMCAhPT0gdGhpc1swXSAmJiBudWxsICE9PSB0aGlzWzBdICYmICh0aGlzWzBdLmV2ZW50UmVnaXN0cnkgPSB0aGlzWzBdLmV2ZW50UmVnaXN0cnkgfHwge30pKSkgOiBuZXcgdShlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIG9uOiBvLm9uLFxuICAgICAgICAgICAgICAgICAgICBvZmY6IG8ub2ZmLFxuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyOiBvLnRyaWdnZXJcbiAgICAgICAgICAgICAgICB9LCB1LmV4dGVuZCA9IGkuZGVmYXVsdCwgdS5kYXRhID0gci5kZWZhdWx0LCB1LkV2ZW50ID0gby5FdmVudDtcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHU7XG4gICAgICAgICAgICAgICAgdC5kZWZhdWx0ID0gYztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5ODQ1OiBmdW5jdGlvbihlLCB0LCBhKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAhMFxuICAgICAgICAgICAgICAgIH0pLCB0LmlwaG9uZSA9IHQuaWVtb2JpbGUgPSB0Lm1vYmlsZSA9IHQuaWUgPSB0LnVhID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgIHZhciBpLCBuID0gKGkgPSBhKDkzODApKSAmJiBpLl9fZXNNb2R1bGUgPyBpIDoge1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB2YXIgciA9IG4uZGVmYXVsdC5uYXZpZ2F0b3IgJiYgbi5kZWZhdWx0Lm5hdmlnYXRvci51c2VyQWdlbnQgfHwgXCJcIiwgbyA9IHIuaW5kZXhPZihcIk1TSUUgXCIpID4gMCB8fCByLmluZGV4T2YoXCJUcmlkZW50L1wiKSA+IDAsIHMgPSBcIm9udG91Y2hzdGFydFwiIGluIG4uZGVmYXVsdCwgbCA9IC9pZW1vYmlsZS9pLnRlc3QociksIHUgPSAvaXBob25lL2kudGVzdChyKSAmJiAhbDtcbiAgICAgICAgICAgICAgICB0LmlwaG9uZSA9IHUsIHQuaWVtb2JpbGUgPSBsLCB0Lm1vYmlsZSA9IHMsIHQuaWUgPSBvLCB0LnVhID0gcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA3MTg0OiBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAhMFxuICAgICAgICAgICAgICAgIH0pLCB0LmRlZmF1bHQgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlLnJlcGxhY2UoYSwgXCJcXFxcJDFcIik7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB2YXIgYSA9IG5ldyBSZWdFeHAoXCIoXFxcXFwiICsgWyBcIi9cIiwgXCIuXCIsIFwiKlwiLCBcIitcIiwgXCI/XCIsIFwifFwiLCBcIihcIiwgXCIpXCIsIFwiW1wiLCBcIl1cIiwgXCJ7XCIsIFwifVwiLCBcIlxcXFxcIiwgXCIkXCIsIFwiXlwiIF0uam9pbihcInxcXFxcXCIpICsgXCIpXCIsIFwiZ2ltXCIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDYwMzA6IGZ1bmN0aW9uKGUsIHQsIGEpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICEwXG4gICAgICAgICAgICAgICAgfSksIHQuRXZlbnRIYW5kbGVycyA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICB2YXIgaSwgbiA9IGEoODcxMSksIHIgPSAoaSA9IGEoNDUyOCkpICYmIGkuX19lc01vZHVsZSA/IGkgOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGlcbiAgICAgICAgICAgICAgICB9LCBvID0gYSg5ODQ1KSwgcyA9IGEoNzIxNSksIGwgPSBhKDc3NjApLCB1ID0gYSg0NzEzKTtcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHtcbiAgICAgICAgICAgICAgICAgICAga2V5ZG93bkV2ZW50OiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHRoaXMuaW5wdXRtYXNrLCBhID0gdC5vcHRzLCBpID0gdC5kZXBlbmRlbmN5TGliLCBjID0gdC5tYXNrc2V0LCBmID0gdGhpcywgZCA9IGkoZiksIHAgPSBlLmtleUNvZGUsIGggPSBuLmNhcmV0LmNhbGwodCwgZiksIHYgPSBhLm9uS2V5RG93bi5jYWxsKHRoaXMsIGUsIG4uZ2V0QnVmZmVyLmNhbGwodCksIGgsIGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gdikgcmV0dXJuIHY7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA9PT0gci5kZWZhdWx0LkJBQ0tTUEFDRSB8fCBwID09PSByLmRlZmF1bHQuREVMRVRFIHx8IG8uaXBob25lICYmIHAgPT09IHIuZGVmYXVsdC5CQUNLU1BBQ0VfU0FGQVJJIHx8IGUuY3RybEtleSAmJiBwID09PSByLmRlZmF1bHQuWCAmJiAhKFwib25jdXRcIiBpbiBmKSkgZS5wcmV2ZW50RGVmYXVsdCgpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHMuaGFuZGxlUmVtb3ZlLmNhbGwodCwgZiwgcCwgaCksICgwLCBsLndyaXRlQnVmZmVyKShmLCBuLmdldEJ1ZmZlci5jYWxsKHQsICEwKSwgYy5wLCBlLCBmLmlucHV0bWFzay5fdmFsdWVHZXQoKSAhPT0gbi5nZXRCdWZmZXIuY2FsbCh0KS5qb2luKFwiXCIpKTsgZWxzZSBpZiAocCA9PT0gci5kZWZhdWx0LkVORCB8fCBwID09PSByLmRlZmF1bHQuUEFHRV9ET1dOKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtID0gbi5zZWVrTmV4dC5jYWxsKHQsIG4uZ2V0TGFzdFZhbGlkUG9zaXRpb24uY2FsbCh0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbi5jYXJldC5jYWxsKHQsIGYsIGUuc2hpZnRLZXkgPyBoLmJlZ2luIDogbSwgbSwgITApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHAgPT09IHIuZGVmYXVsdC5IT01FICYmICFlLnNoaWZ0S2V5IHx8IHAgPT09IHIuZGVmYXVsdC5QQUdFX1VQID8gKGUucHJldmVudERlZmF1bHQoKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBuLmNhcmV0LmNhbGwodCwgZiwgMCwgZS5zaGlmdEtleSA/IGguYmVnaW4gOiAwLCAhMCkpIDogYS51bmRvT25Fc2NhcGUgJiYgcCA9PT0gci5kZWZhdWx0LkVTQ0FQRSAmJiAhMCAhPT0gZS5hbHRLZXkgPyAoKDAsIFxuICAgICAgICAgICAgICAgICAgICAgICAgbC5jaGVja1ZhbCkoZiwgITAsICExLCB0LnVuZG9WYWx1ZS5zcGxpdChcIlwiKSksIGQudHJpZ2dlcihcImNsaWNrXCIpKSA6ICEwID09PSBhLnRhYlRocm91Z2ggJiYgcCA9PT0gci5kZWZhdWx0LlRBQiA/ICEwID09PSBlLnNoaWZ0S2V5ID8gKGguZW5kID0gbi5zZWVrUHJldmlvdXMuY2FsbCh0LCBoLmVuZCwgITApLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICEwID09PSB1LmdldFRlc3QuY2FsbCh0LCBoLmVuZCAtIDEpLm1hdGNoLnN0YXRpYyAmJiBoLmVuZC0tLCBoLmJlZ2luID0gbi5zZWVrUHJldmlvdXMuY2FsbCh0LCBoLmVuZCwgITApLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIGguYmVnaW4gPj0gMCAmJiBoLmVuZCA+IDAgJiYgKGUucHJldmVudERlZmF1bHQoKSwgbi5jYXJldC5jYWxsKHQsIGYsIGguYmVnaW4sIGguZW5kKSkpIDogKGguYmVnaW4gPSBuLnNlZWtOZXh0LmNhbGwodCwgaC5iZWdpbiwgITApLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIGguZW5kID0gbi5zZWVrTmV4dC5jYWxsKHQsIGguYmVnaW4sICEwKSwgaC5lbmQgPCBjLm1hc2tMZW5ndGggJiYgaC5lbmQtLSwgaC5iZWdpbiA8PSBjLm1hc2tMZW5ndGggJiYgKGUucHJldmVudERlZmF1bHQoKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBuLmNhcmV0LmNhbGwodCwgZiwgaC5iZWdpbiwgaC5lbmQpKSkgOiBlLnNoaWZ0S2V5IHx8IGEuaW5zZXJ0TW9kZVZpc3VhbCAmJiAhMSA9PT0gYS5pbnNlcnRNb2RlICYmIChwID09PSByLmRlZmF1bHQuUklHSFQgPyBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IG4uY2FyZXQuY2FsbCh0LCBmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLmNhcmV0LmNhbGwodCwgZiwgZS5iZWdpbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSwgMCkgOiBwID09PSByLmRlZmF1bHQuTEVGVCAmJiBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IG4udHJhbnNsYXRlUG9zaXRpb24uY2FsbCh0LCBmLmlucHV0bWFzay5jYXJldFBvcy5iZWdpbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbi50cmFuc2xhdGVQb3NpdGlvbi5jYWxsKHQsIGYuaW5wdXRtYXNrLmNhcmV0UG9zLmVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5pc1JUTCA/IG4uY2FyZXQuY2FsbCh0LCBmLCBlICsgKGUgPT09IGMubWFza0xlbmd0aCA/IDAgOiAxKSkgOiBuLmNhcmV0LmNhbGwodCwgZiwgZSAtICgwID09PSBlID8gMCA6IDEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCAwKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Lmlnbm9yYWJsZSA9IGEuaWdub3JhYmxlcy5pbmNsdWRlcyhwKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAga2V5cHJlc3NFdmVudDogZnVuY3Rpb24oZSwgdCwgYSwgaSwgbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHUgPSB0aGlzLmlucHV0bWFzayB8fCB0aGlzLCBjID0gdS5vcHRzLCBmID0gdS5kZXBlbmRlbmN5TGliLCBkID0gdS5tYXNrc2V0LCBwID0gdS5lbCwgaCA9IGYocCksIHYgPSBlLndoaWNoIHx8IGUuY2hhckNvZGUgfHwgZS5rZXlDb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoITAgPT09IHQgfHwgZS5jdHJsS2V5ICYmIGUuYWx0S2V5KSAmJiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSB8fCB1Lmlnbm9yYWJsZSkpIHJldHVybiB2ID09PSByLmRlZmF1bHQuRU5URVIgJiYgdS51bmRvVmFsdWUgIT09IHUuX3ZhbHVlR2V0KCEwKSAmJiAodS51bmRvVmFsdWUgPSB1Ll92YWx1ZUdldCghMCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaC50cmlnZ2VyKFwiY2hhbmdlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksIDApKSwgdS5za2lwSW5wdXRFdmVudCA9ICEwLCAhMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNDQgIT09IHYgJiYgNDYgIT09IHYgfHwgMyAhPT0gZS5sb2NhdGlvbiB8fCBcIlwiID09PSBjLnJhZGl4UG9pbnQgfHwgKHYgPSBjLnJhZGl4UG9pbnQuY2hhckNvZGVBdCgwKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0sIGcgPSB0ID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbjogbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA6IG4uY2FyZXQuY2FsbCh1LCBwKSwgayA9IFN0cmluZy5mcm9tQ2hhckNvZGUodik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC53cml0ZU91dEJ1ZmZlciA9ICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5ID0gcy5pc1ZhbGlkLmNhbGwodSwgZywgaywgaSwgdm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCExICE9PSB5ICYmIChuLnJlc2V0TWFza1NldC5jYWxsKHUsICEwKSwgbSA9IHZvaWQgMCAhPT0geS5jYXJldCA/IHkuY2FyZXQgOiBuLnNlZWtOZXh0LmNhbGwodSwgeS5wb3MuYmVnaW4gPyB5LnBvcy5iZWdpbiA6IHkucG9zKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wID0gbSksIG0gPSBjLm51bWVyaWNJbnB1dCAmJiB2b2lkIDAgPT09IHkuY2FyZXQgPyBuLnNlZWtQcmV2aW91cy5jYWxsKHUsIG0pIDogbSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgITEgIT09IGEgJiYgKHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLm9uS2V5VmFsaWRhdGlvbi5jYWxsKHAsIHYsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCAwKSwgZC53cml0ZU91dEJ1ZmZlciAmJiAhMSAhPT0geSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBuLmdldEJ1ZmZlci5jYWxsKHUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgbC53cml0ZUJ1ZmZlcikocCwgYiwgbSwgZSwgITAgIT09IHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCgpLCB0KSByZXR1cm4gITEgIT09IHkgJiYgKHkuZm9yd2FyZFBvc2l0aW9uID0gbSksIHk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGtleXVwRXZlbnQ6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdGhpcy5pbnB1dG1hc2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAhdC5pc0NvbXBvc2luZyB8fCBlLmtleUNvZGUgIT09IHIuZGVmYXVsdC5LRVlfMjI5ICYmIGUua2V5Q29kZSAhPT0gci5kZWZhdWx0LkVOVEVSIHx8IHQuJGVsLnRyaWdnZXIoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcGFzdGVFdmVudDogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQsIGEgPSB0aGlzLmlucHV0bWFzaywgaSA9IGEub3B0cywgciA9IGEuX3ZhbHVlR2V0KCEwKSwgbyA9IG4uY2FyZXQuY2FsbChhLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuaXNSVEwgJiYgKHQgPSBvLmVuZCwgby5lbmQgPSBvLmJlZ2luLCBvLmJlZ2luID0gdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IHIuc3Vic3RyKDAsIG8uYmVnaW4pLCB1ID0gci5zdWJzdHIoby5lbmQsIHIubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzID09IChhLmlzUlRMID8gbi5nZXRCdWZmZXJUZW1wbGF0ZS5jYWxsKGEpLnNsaWNlKCkucmV2ZXJzZSgpIDogbi5nZXRCdWZmZXJUZW1wbGF0ZS5jYWxsKGEpKS5zbGljZSgwLCBvLmJlZ2luKS5qb2luKFwiXCIpICYmIChzID0gXCJcIiksIFxuICAgICAgICAgICAgICAgICAgICAgICAgdSA9PSAoYS5pc1JUTCA/IG4uZ2V0QnVmZmVyVGVtcGxhdGUuY2FsbChhKS5zbGljZSgpLnJldmVyc2UoKSA6IG4uZ2V0QnVmZmVyVGVtcGxhdGUuY2FsbChhKSkuc2xpY2Uoby5lbmQpLmpvaW4oXCJcIikgJiYgKHUgPSBcIlwiKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuY2xpcGJvYXJkRGF0YSAmJiB3aW5kb3cuY2xpcGJvYXJkRGF0YS5nZXREYXRhKSByID0gcyArIHdpbmRvdy5jbGlwYm9hcmREYXRhLmdldERhdGEoXCJUZXh0XCIpICsgdTsgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmNsaXBib2FyZERhdGEgfHwgIWUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKSByZXR1cm4gITA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IHMgKyBlLmNsaXBib2FyZERhdGEuZ2V0RGF0YShcInRleHQvcGxhaW5cIikgKyB1O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSByO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgaS5vbkJlZm9yZVBhc3RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCExID09PSAoYyA9IGkub25CZWZvcmVQYXN0ZS5jYWxsKGEsIHIsIGkpKSkgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjIHx8IChjID0gcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIGwuY2hlY2tWYWwpKHRoaXMsICEwLCAhMSwgYy50b1N0cmluZygpLnNwbGl0KFwiXCIpLCBlKSwgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBpbnB1dEZhbGxCYWNrRXZlbnQ6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdGhpcy5pbnB1dG1hc2ssIGEgPSB0Lm9wdHMsIGkgPSB0LmRlcGVuZGVuY3lMaWI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IHRoaXMsIGYgPSBzLmlucHV0bWFzay5fdmFsdWVHZXQoITApLCBkID0gKHQuaXNSVEwgPyBuLmdldEJ1ZmZlci5jYWxsKHQpLnNsaWNlKCkucmV2ZXJzZSgpIDogbi5nZXRCdWZmZXIuY2FsbCh0KSkuam9pbihcIlwiKSwgcCA9IG4uY2FyZXQuY2FsbCh0LCBzLCB2b2lkIDAsIHZvaWQgMCwgITApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGQgIT09IGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaCA9IGZ1bmN0aW9uKGUsIGksIHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbywgcywgbCwgYyA9IGUuc3Vic3RyKDAsIHIuYmVnaW4pLnNwbGl0KFwiXCIpLCBmID0gZS5zdWJzdHIoci5iZWdpbikuc3BsaXQoXCJcIiksIGQgPSBpLnN1YnN0cigwLCByLmJlZ2luKS5zcGxpdChcIlwiKSwgcCA9IGkuc3Vic3RyKHIuYmVnaW4pLnNwbGl0KFwiXCIpLCBoID0gYy5sZW5ndGggPj0gZC5sZW5ndGggPyBjLmxlbmd0aCA6IGQubGVuZ3RoLCB2ID0gZi5sZW5ndGggPj0gcC5sZW5ndGggPyBmLmxlbmd0aCA6IHAubGVuZ3RoLCBtID0gXCJcIiwgZyA9IFtdLCBrID0gXCJ+XCI7IGMubGVuZ3RoIDwgaDsgKSBjLnB1c2goayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoO2QubGVuZ3RoIDwgaDsgKSBkLnB1c2goayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoO2YubGVuZ3RoIDwgdjsgKSBmLnVuc2hpZnQoayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoO3AubGVuZ3RoIDwgdjsgKSBwLnVuc2hpZnQoayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5ID0gYy5jb25jYXQoZiksIGIgPSBkLmNvbmNhdChwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzID0gMCwgbyA9IHkubGVuZ3RoOyBzIDwgbzsgcysrKSBzd2l0Y2ggKGwgPSB1LmdldFBsYWNlaG9sZGVyLmNhbGwodCwgbi50cmFuc2xhdGVQb3NpdGlvbi5jYWxsKHQsIHMpKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW5zZXJ0VGV4dFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYltzIC0gMV0gPT09IHlbc10gJiYgci5iZWdpbiA9PSB5Lmxlbmd0aCAtIDEgJiYgZy5wdXNoKHlbc10pLCBzID0gbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImluc2VydFJlcGxhY2VtZW50VGV4dFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJkZWxldGVDb250ZW50QmFja3dhcmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlbc10gPT09IGsgPyByLmVuZCsrIDogcyA9IG87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5W3NdICE9PSBiW3NdICYmICh5W3MgKyAxXSAhPT0gayAmJiB5W3MgKyAxXSAhPT0gbCAmJiB2b2lkIDAgIT09IHlbcyArIDFdIHx8IChiW3NdICE9PSBsIHx8IGJbcyArIDFdICE9PSBrKSAmJiBiW3NdICE9PSBrID8gYltzICsgMV0gPT09IGsgJiYgYltzXSA9PT0geVtzICsgMV0gPyAobSA9IFwiaW5zZXJ0VGV4dFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcucHVzaCh5W3NdKSwgci5iZWdpbi0tLCByLmVuZC0tKSA6IHlbc10gIT09IGwgJiYgeVtzXSAhPT0gayAmJiAoeVtzICsgMV0gPT09IGsgfHwgYltzXSAhPT0geVtzXSAmJiBiW3MgKyAxXSA9PT0geVtzICsgMV0pID8gKG0gPSBcImluc2VydFJlcGxhY2VtZW50VGV4dFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcucHVzaCh5W3NdKSwgci5iZWdpbi0tKSA6IHlbc10gPT09IGsgPyAobSA9IFwiZGVsZXRlQ29udGVudEJhY2t3YXJkXCIsIChuLmlzTWFzay5jYWxsKHQsIG4udHJhbnNsYXRlUG9zaXRpb24uY2FsbCh0LCBzKSwgITApIHx8IGJbc10gPT09IGEucmFkaXhQb2ludCkgJiYgci5lbmQrKykgOiBzID0gbyA6IChtID0gXCJpbnNlcnRUZXh0XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZy5wdXNoKHlbc10pLCByLmJlZ2luLS0sIHIuZW5kLS0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmV0OiByXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfShmID0gZnVuY3Rpb24oZSwgYSwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoby5pZW1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBhLnJlcGxhY2Uobi5nZXRCdWZmZXIuY2FsbCh0KS5qb2luKFwiXCIpLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgxID09PSByLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzID0gYS5zcGxpdChcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnNwbGljZShpLmJlZ2luLCAwLCByKSwgYSA9IHMuam9pbihcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KDAsIGYsIHApLCBkLCBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKChzLmlucHV0bWFzay5zaGFkb3dSb290IHx8IHMub3duZXJEb2N1bWVudCkuYWN0aXZlRWxlbWVudCAhPT0gcyAmJiBzLmZvY3VzKCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBsLndyaXRlQnVmZmVyKShzLCBuLmdldEJ1ZmZlci5jYWxsKHQpKSwgbi5jYXJldC5jYWxsKHQsIHMsIHAuYmVnaW4sIHAuZW5kLCAhMCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGguYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW5zZXJ0VGV4dFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImluc2VydFJlcGxhY2VtZW50VGV4dFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoLmRhdGEuZm9yRWFjaCgoZnVuY3Rpb24oZSwgYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBuZXcgaS5FdmVudChcImtleXByZXNzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbi53aGljaCA9IGUuY2hhckNvZGVBdCgwKSwgdC5pZ25vcmFibGUgPSAhMSwgYy5rZXlwcmVzc0V2ZW50LmNhbGwocywgbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKSwgc2V0VGltZW91dCgoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LiRlbC50cmlnZ2VyKFwia2V5dXBcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJkZWxldGVDb250ZW50QmFja3dhcmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHYgPSBuZXcgaS5FdmVudChcImtleWRvd25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYua2V5Q29kZSA9IHIuZGVmYXVsdC5CQUNLU1BBQ0UsIGMua2V5ZG93bkV2ZW50LmNhbGwocywgdik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgbC5hcHBseUlucHV0VmFsdWUpKHMsIGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0aW9uZW5kRXZlbnQ6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdGhpcy5pbnB1dG1hc2s7XG4gICAgICAgICAgICAgICAgICAgICAgICB0LmlzQ29tcG9zaW5nID0gITEsIHQuJGVsLnRyaWdnZXIoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWVFdmVudDogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSB0aGlzLmlucHV0bWFzaywgYSA9IHRoaXMsIGkgPSBlICYmIGUuZGV0YWlsID8gZS5kZXRhaWxbMF0gOiBhcmd1bWVudHNbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2b2lkIDAgPT09IGkgJiYgKGkgPSBhLmlucHV0bWFzay5fdmFsdWVHZXQoITApKSwgKDAsIGwuYXBwbHlJbnB1dFZhbHVlKShhLCBpKSwgKGUuZGV0YWlsICYmIHZvaWQgMCAhPT0gZS5kZXRhaWxbMV0gfHwgdm9pZCAwICE9PSBhcmd1bWVudHNbMl0pICYmIG4uY2FyZXQuY2FsbCh0LCBhLCBlLmRldGFpbCA/IGUuZGV0YWlsWzFdIDogYXJndW1lbnRzWzJdKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNFdmVudDogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSB0aGlzLmlucHV0bWFzaywgYSA9IHQub3B0cywgaSA9IHRoaXMsIHIgPSBpLmlucHV0bWFzay5fdmFsdWVHZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuc2hvd01hc2tPbkZvY3VzICYmIHIgIT09IG4uZ2V0QnVmZmVyLmNhbGwodCkuam9pbihcIlwiKSAmJiAoMCwgbC53cml0ZUJ1ZmZlcikoaSwgbi5nZXRCdWZmZXIuY2FsbCh0KSwgbi5zZWVrTmV4dC5jYWxsKHQsIG4uZ2V0TGFzdFZhbGlkUG9zaXRpb24uY2FsbCh0KSkpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICEwICE9PSBhLnBvc2l0aW9uQ2FyZXRPblRhYiB8fCAhMSAhPT0gdC5tb3VzZUVudGVyIHx8IHMuaXNDb21wbGV0ZS5jYWxsKHQsIG4uZ2V0QnVmZmVyLmNhbGwodCkpICYmIC0xICE9PSBuLmdldExhc3RWYWxpZFBvc2l0aW9uLmNhbGwodCkgfHwgYy5jbGlja0V2ZW50LmFwcGx5KGksIFsgZSwgITAgXSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgdC51bmRvVmFsdWUgPSB0Ll92YWx1ZUdldCghMCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGludmFsaWRFdmVudDogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dG1hc2sudmFsaWRhdGlvbkV2ZW50ID0gITA7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG1vdXNlbGVhdmVFdmVudDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IHRoaXMuaW5wdXRtYXNrLCB0ID0gZS5vcHRzLCBhID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGUubW91c2VFbnRlciA9ICExLCB0LmNsZWFyTWFza09uTG9zdEZvY3VzICYmIChhLmlucHV0bWFzay5zaGFkb3dSb290IHx8IGEub3duZXJEb2N1bWVudCkuYWN0aXZlRWxlbWVudCAhPT0gYSAmJiAoMCwgXG4gICAgICAgICAgICAgICAgICAgICAgICBsLkhhbmRsZU5hdGl2ZVBsYWNlaG9sZGVyKShhLCBlLm9yaWdpbmFsUGxhY2Vob2xkZXIpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBjbGlja0V2ZW50OiBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHRoaXMuaW5wdXRtYXNrLCBpID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoaS5pbnB1dG1hc2suc2hhZG93Um9vdCB8fCBpLm93bmVyRG9jdW1lbnQpLmFjdGl2ZUVsZW1lbnQgPT09IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA9IG4uZGV0ZXJtaW5lTmV3Q2FyZXRQb3NpdGlvbi5jYWxsKGEsIG4uY2FyZXQuY2FsbChhLCBpKSwgdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAwICE9PSByICYmIG4uY2FyZXQuY2FsbChhLCBpLCByKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY3V0RXZlbnQ6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdGhpcy5pbnB1dG1hc2ssIGEgPSB0Lm1hc2tzZXQsIGkgPSB0aGlzLCBvID0gbi5jYXJldC5jYWxsKHQsIGkpLCB1ID0gd2luZG93LmNsaXBib2FyZERhdGEgfHwgZS5jbGlwYm9hcmREYXRhLCBjID0gdC5pc1JUTCA/IG4uZ2V0QnVmZmVyLmNhbGwodCkuc2xpY2Uoby5lbmQsIG8uYmVnaW4pIDogbi5nZXRCdWZmZXIuY2FsbCh0KS5zbGljZShvLmJlZ2luLCBvLmVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1LnNldERhdGEoXCJ0ZXh0XCIsIHQuaXNSVEwgPyBjLnJldmVyc2UoKS5qb2luKFwiXCIpIDogYy5qb2luKFwiXCIpKSwgZG9jdW1lbnQuZXhlY0NvbW1hbmQgJiYgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHMuaGFuZGxlUmVtb3ZlLmNhbGwodCwgaSwgci5kZWZhdWx0LkRFTEVURSwgbyksICgwLCBsLndyaXRlQnVmZmVyKShpLCBuLmdldEJ1ZmZlci5jYWxsKHQpLCBhLnAsIGUsIHQudW5kb1ZhbHVlICE9PSB0Ll92YWx1ZUdldCghMCkpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBibHVyRXZlbnQ6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdGhpcy5pbnB1dG1hc2ssIGEgPSB0Lm9wdHMsIGkgPSAoMCwgdC5kZXBlbmRlbmN5TGliKSh0aGlzKSwgciA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoci5pbnB1dG1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgbC5IYW5kbGVOYXRpdmVQbGFjZWhvbGRlcikociwgdC5vcmlnaW5hbFBsYWNlaG9sZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IHIuaW5wdXRtYXNrLl92YWx1ZUdldCgpLCB1ID0gbi5nZXRCdWZmZXIuY2FsbCh0KS5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXCIgIT09IG8gJiYgKGEuY2xlYXJNYXNrT25Mb3N0Rm9jdXMgJiYgKC0xID09PSBuLmdldExhc3RWYWxpZFBvc2l0aW9uLmNhbGwodCkgJiYgbyA9PT0gbi5nZXRCdWZmZXJUZW1wbGF0ZS5jYWxsKHQpLmpvaW4oXCJcIikgPyB1ID0gW10gOiBsLmNsZWFyT3B0aW9uYWxUYWlsLmNhbGwodCwgdSkpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhMSA9PT0gcy5pc0NvbXBsZXRlLmNhbGwodCwgdSkgJiYgKHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLnRyaWdnZXIoXCJpbmNvbXBsZXRlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCAwKSwgYS5jbGVhckluY29tcGxldGUgJiYgKG4ucmVzZXRNYXNrU2V0LmNhbGwodCksIHUgPSBhLmNsZWFyTWFza09uTG9zdEZvY3VzID8gW10gOiBuLmdldEJ1ZmZlclRlbXBsYXRlLmNhbGwodCkuc2xpY2UoKSkpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgbC53cml0ZUJ1ZmZlcikociwgdSwgdm9pZCAwLCBlKSksIHQudW5kb1ZhbHVlICE9PSB0Ll92YWx1ZUdldCghMCkgJiYgKHQudW5kb1ZhbHVlID0gdC5fdmFsdWVHZXQoITApLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLnRyaWdnZXIoXCJjaGFuZ2VcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBtb3VzZWVudGVyRXZlbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSB0aGlzLmlucHV0bWFzaywgdCA9IGUub3B0cywgYSA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5tb3VzZUVudGVyID0gITAsIChhLmlucHV0bWFzay5zaGFkb3dSb290IHx8IGEub3duZXJEb2N1bWVudCkuYWN0aXZlRWxlbWVudCAhPT0gYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gKGUuaXNSVEwgPyBuLmdldEJ1ZmZlclRlbXBsYXRlLmNhbGwoZSkuc2xpY2UoKS5yZXZlcnNlKCkgOiBuLmdldEJ1ZmZlclRlbXBsYXRlLmNhbGwoZSkpLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wbGFjZWhvbGRlciAhPT0gaSAmJiBhLnBsYWNlaG9sZGVyICE9PSBlLm9yaWdpbmFsUGxhY2Vob2xkZXIgJiYgKGUub3JpZ2luYWxQbGFjZWhvbGRlciA9IGEucGxhY2Vob2xkZXIpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnNob3dNYXNrT25Ib3ZlciAmJiAoMCwgbC5IYW5kbGVOYXRpdmVQbGFjZWhvbGRlcikoYSwgaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHN1Ym1pdEV2ZW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gdGhpcy5pbnB1dG1hc2ssIHQgPSBlLm9wdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnVuZG9WYWx1ZSAhPT0gZS5fdmFsdWVHZXQoITApICYmIGUuJGVsLnRyaWdnZXIoXCJjaGFuZ2VcIiksIHQuY2xlYXJNYXNrT25Mb3N0Rm9jdXMgJiYgLTEgPT09IG4uZ2V0TGFzdFZhbGlkUG9zaXRpb24uY2FsbChlKSAmJiBlLl92YWx1ZUdldCAmJiBlLl92YWx1ZUdldCgpID09PSBuLmdldEJ1ZmZlclRlbXBsYXRlLmNhbGwoZSkuam9pbihcIlwiKSAmJiBlLl92YWx1ZVNldChcIlwiKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICB0LmNsZWFySW5jb21wbGV0ZSAmJiAhMSA9PT0gcy5pc0NvbXBsZXRlLmNhbGwoZSwgbi5nZXRCdWZmZXIuY2FsbChlKSkgJiYgZS5fdmFsdWVTZXQoXCJcIiksIFxuICAgICAgICAgICAgICAgICAgICAgICAgdC5yZW1vdmVNYXNrT25TdWJtaXQgJiYgKGUuX3ZhbHVlU2V0KGUudW5tYXNrZWR2YWx1ZSgpLCAhMCksIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBsLndyaXRlQnVmZmVyKShlLmVsLCBuLmdldEJ1ZmZlci5jYWxsKGUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCAwKSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlc2V0RXZlbnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSB0aGlzLmlucHV0bWFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucmVmcmVzaFZhbHVlID0gITAsIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBsLmFwcGx5SW5wdXRWYWx1ZSkoZS5lbCwgZS5fdmFsdWVHZXQoITApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdC5FdmVudEhhbmRsZXJzID0gYztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA5NzE2OiBmdW5jdGlvbihlLCB0LCBhKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAhMFxuICAgICAgICAgICAgICAgIH0pLCB0LkV2ZW50UnVsZXIgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgdmFyIGkgPSBzKGEoMjM5NCkpLCBuID0gcyhhKDQ1MjgpKSwgciA9IGEoODcxMSksIG8gPSBhKDc3NjApO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHMoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZSAmJiBlLl9fZXNNb2R1bGUgPyBlIDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgb246IGZ1bmN0aW9uKGUsIHQsIGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzID0gZS5pbnB1dG1hc2suZGVwZW5kZW5jeUxpYiwgbCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Lm9yaWdpbmFsRXZlbnQgJiYgKHQgPSB0Lm9yaWdpbmFsRXZlbnQgfHwgdCwgYXJndW1lbnRzWzBdID0gdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGwsIHUgPSB0aGlzLCBjID0gdS5pbnB1dG1hc2ssIGYgPSBjID8gYy5vcHRzIDogdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgPT09IGMgJiYgXCJGT1JNXCIgIT09IHRoaXMubm9kZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBzLmRhdGEodSwgXCJfaW5wdXRtYXNrX29wdHNcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHModSkub2ZmKCksIGQgJiYgbmV3IGkuZGVmYXVsdChkKS5tYXNrKHUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChbIFwic3VibWl0XCIsIFwicmVzZXRcIiwgXCJzZXR2YWx1ZVwiIF0uaW5jbHVkZXModC50eXBlKSB8fCBcIkZPUk1cIiA9PT0gdGhpcy5ub2RlTmFtZSB8fCAhKHUuZGlzYWJsZWQgfHwgdS5yZWFkT25seSAmJiAhKFwia2V5ZG93blwiID09PSB0LnR5cGUgJiYgdC5jdHJsS2V5ICYmIDY3ID09PSB0LmtleUNvZGUgfHwgITEgPT09IGYudGFiVGhyb3VnaCAmJiB0LmtleUNvZGUgPT09IG4uZGVmYXVsdC5UQUIpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0LnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImlucHV0XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEwID09PSBjLnNraXBJbnB1dEV2ZW50IHx8IHQuaW5wdXRUeXBlICYmIFwiaW5zZXJ0Q29tcG9zaXRpb25UZXh0XCIgPT09IHQuaW5wdXRUeXBlKSByZXR1cm4gYy5za2lwSW5wdXRFdmVudCA9ICExLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImtleWRvd25cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLnNraXBLZXlQcmVzc0V2ZW50ID0gITEsIGMuc2tpcElucHV0RXZlbnQgPSBjLmlzQ29tcG9zaW5nID0gdC5rZXlDb2RlID09PSBuLmRlZmF1bHQuS0VZXzIyOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwia2V5dXBcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNvbXBvc2l0aW9uZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5pc0NvbXBvc2luZyAmJiAoYy5za2lwSW5wdXRFdmVudCA9ICExKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwia2V5cHJlc3NcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoITAgPT09IGMuc2tpcEtleVByZXNzRXZlbnQpIHJldHVybiB0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5za2lwS2V5UHJlc3NFdmVudCA9ICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjbGlja1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZm9jdXNcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy52YWxpZGF0aW9uRXZlbnQgPyAoYy52YWxpZGF0aW9uRXZlbnQgPSAhMSwgZS5ibHVyKCksICgwLCBvLkhhbmRsZU5hdGl2ZVBsYWNlaG9sZGVyKShlLCAoYy5pc1JUTCA/IHIuZ2V0QnVmZmVyVGVtcGxhdGUuY2FsbChjKS5zbGljZSgpLnJldmVyc2UoKSA6IHIuZ2V0QnVmZmVyVGVtcGxhdGUuY2FsbChjKSkuam9pbihcIlwiKSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIGYudmFsaWRhdGlvbkV2ZW50VGltZU91dCksICExKSA6IChsID0gYXJndW1lbnRzLCBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5pbnB1dG1hc2sgJiYgYS5hcHBseSh1LCBsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgMCksICExKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwID0gYS5hcHBseSh1LCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICExID09PSBwICYmICh0LnByZXZlbnREZWZhdWx0KCksIHQuc3RvcFByb3BhZ2F0aW9uKCkpLCBwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgWyBcInN1Ym1pdFwiLCBcInJlc2V0XCIgXS5pbmNsdWRlcyh0KSA/IChsID0gbC5iaW5kKGUpLCBudWxsICE9PSBlLmZvcm0gJiYgcyhlLmZvcm0pLm9uKHQsIGwpKSA6IHMoZSkub24odCwgbCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgZS5pbnB1dG1hc2suZXZlbnRzW3RdID0gZS5pbnB1dG1hc2suZXZlbnRzW3RdIHx8IFtdLCBlLmlucHV0bWFzay5ldmVudHNbdF0ucHVzaChsKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmOiBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5pbnB1dG1hc2sgJiYgZS5pbnB1dG1hc2suZXZlbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBlLmlucHV0bWFzay5kZXBlbmRlbmN5TGliLCBpID0gZS5pbnB1dG1hc2suZXZlbnRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4gaW4gdCAmJiAoKGkgPSBbXSlbdF0gPSBlLmlucHV0bWFzay5ldmVudHNbdF0pLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHIgPSBpW25dOyByLmxlbmd0aCA+IDA7ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG8gPSByLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyBcInN1Ym1pdFwiLCBcInJlc2V0XCIgXS5pbmNsdWRlcyhuKSA/IG51bGwgIT09IGUuZm9ybSAmJiBhKGUuZm9ybSkub2ZmKG4sIG8pIDogYShlKS5vZmYobiwgbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGUuaW5wdXRtYXNrLmV2ZW50c1tuXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHQuRXZlbnRSdWxlciA9IGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMjE5OiBmdW5jdGlvbihlLCB0LCBhKSB7XG4gICAgICAgICAgICAgICAgdmFyIGkgPSBsKGEoMjM5NCkpLCBuID0gbChhKDQ1MjgpKSwgciA9IGwoYSg3MTg0KSksIG8gPSBhKDg3MTEpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHMoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHMgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGU7XG4gICAgICAgICAgICAgICAgICAgIH0gOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZSAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBlLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgZSAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgZTtcbiAgICAgICAgICAgICAgICAgICAgfSkoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGwoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZSAmJiBlLl9fZXNNb2R1bGUgPyBlIDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgdSA9IGkuZGVmYXVsdC5kZXBlbmRlbmN5TGliLCBjID0gKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLCBmID0ge1xuICAgICAgICAgICAgICAgICAgICBkOiBbIFwiWzEtOV18WzEyXVswLTldfDNbMDFdXCIsIERhdGUucHJvdG90eXBlLnNldERhdGUsIFwiZGF5XCIsIERhdGUucHJvdG90eXBlLmdldERhdGUgXSxcbiAgICAgICAgICAgICAgICAgICAgZGQ6IFsgXCIwWzEtOV18WzEyXVswLTldfDNbMDFdXCIsIERhdGUucHJvdG90eXBlLnNldERhdGUsIFwiZGF5XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHkoRGF0ZS5wcm90b3R5cGUuZ2V0RGF0ZS5jYWxsKHRoaXMpLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBdLFxuICAgICAgICAgICAgICAgICAgICBkZGQ6IFsgXCJcIiBdLFxuICAgICAgICAgICAgICAgICAgICBkZGRkOiBbIFwiXCIgXSxcbiAgICAgICAgICAgICAgICAgICAgbTogWyBcIlsxLTldfDFbMDEyXVwiLCBEYXRlLnByb3RvdHlwZS5zZXRNb250aCwgXCJtb250aFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBEYXRlLnByb3RvdHlwZS5nZXRNb250aC5jYWxsKHRoaXMpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgfSBdLFxuICAgICAgICAgICAgICAgICAgICBtbTogWyBcIjBbMS05XXwxWzAxMl1cIiwgRGF0ZS5wcm90b3R5cGUuc2V0TW9udGgsIFwibW9udGhcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geShEYXRlLnByb3RvdHlwZS5nZXRNb250aC5jYWxsKHRoaXMpICsgMSwgMik7XG4gICAgICAgICAgICAgICAgICAgIH0gXSxcbiAgICAgICAgICAgICAgICAgICAgbW1tOiBbIFwiXCIgXSxcbiAgICAgICAgICAgICAgICAgICAgbW1tbTogWyBcIlwiIF0sXG4gICAgICAgICAgICAgICAgICAgIHl5OiBbIFwiWzAtOV17Mn1cIiwgRGF0ZS5wcm90b3R5cGUuc2V0RnVsbFllYXIsIFwieWVhclwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB5KERhdGUucHJvdG90eXBlLmdldEZ1bGxZZWFyLmNhbGwodGhpcyksIDIpO1xuICAgICAgICAgICAgICAgICAgICB9IF0sXG4gICAgICAgICAgICAgICAgICAgIHl5eXk6IFsgXCJbMC05XXs0fVwiLCBEYXRlLnByb3RvdHlwZS5zZXRGdWxsWWVhciwgXCJ5ZWFyXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHkoRGF0ZS5wcm90b3R5cGUuZ2V0RnVsbFllYXIuY2FsbCh0aGlzKSwgNCk7XG4gICAgICAgICAgICAgICAgICAgIH0gXSxcbiAgICAgICAgICAgICAgICAgICAgaDogWyBcIlsxLTldfDFbMC0yXVwiLCBEYXRlLnByb3RvdHlwZS5zZXRIb3VycywgXCJob3Vyc1wiLCBEYXRlLnByb3RvdHlwZS5nZXRIb3VycyBdLFxuICAgICAgICAgICAgICAgICAgICBoaDogWyBcIjBbMS05XXwxWzAtMl1cIiwgRGF0ZS5wcm90b3R5cGUuc2V0SG91cnMsIFwiaG91cnNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geShEYXRlLnByb3RvdHlwZS5nZXRIb3Vycy5jYWxsKHRoaXMpLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBdLFxuICAgICAgICAgICAgICAgICAgICBoeDogWyBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJbMC05XXtcIi5jb25jYXQoZSwgXCJ9XCIpO1xuICAgICAgICAgICAgICAgICAgICB9LCBEYXRlLnByb3RvdHlwZS5zZXRIb3VycywgXCJob3Vyc1wiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRGF0ZS5wcm90b3R5cGUuZ2V0SG91cnM7XG4gICAgICAgICAgICAgICAgICAgIH0gXSxcbiAgICAgICAgICAgICAgICAgICAgSDogWyBcIjE/WzAtOV18MlswLTNdXCIsIERhdGUucHJvdG90eXBlLnNldEhvdXJzLCBcImhvdXJzXCIsIERhdGUucHJvdG90eXBlLmdldEhvdXJzIF0sXG4gICAgICAgICAgICAgICAgICAgIEhIOiBbIFwiMFswLTldfDFbMC05XXwyWzAtM11cIiwgRGF0ZS5wcm90b3R5cGUuc2V0SG91cnMsIFwiaG91cnNcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geShEYXRlLnByb3RvdHlwZS5nZXRIb3Vycy5jYWxsKHRoaXMpLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBdLFxuICAgICAgICAgICAgICAgICAgICBIeDogWyBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJbMC05XXtcIi5jb25jYXQoZSwgXCJ9XCIpO1xuICAgICAgICAgICAgICAgICAgICB9LCBEYXRlLnByb3RvdHlwZS5zZXRIb3VycywgXCJob3Vyc1wiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHkoRGF0ZS5wcm90b3R5cGUuZ2V0SG91cnMuY2FsbCh0aGlzKSwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IF0sXG4gICAgICAgICAgICAgICAgICAgIE06IFsgXCJbMS01XT9bMC05XVwiLCBEYXRlLnByb3RvdHlwZS5zZXRNaW51dGVzLCBcIm1pbnV0ZXNcIiwgRGF0ZS5wcm90b3R5cGUuZ2V0TWludXRlcyBdLFxuICAgICAgICAgICAgICAgICAgICBNTTogWyBcIjBbMC05XXwxWzAtOV18MlswLTldfDNbMC05XXw0WzAtOV18NVswLTldXCIsIERhdGUucHJvdG90eXBlLnNldE1pbnV0ZXMsIFwibWludXRlc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB5KERhdGUucHJvdG90eXBlLmdldE1pbnV0ZXMuY2FsbCh0aGlzKSwgMik7XG4gICAgICAgICAgICAgICAgICAgIH0gXSxcbiAgICAgICAgICAgICAgICAgICAgczogWyBcIlsxLTVdP1swLTldXCIsIERhdGUucHJvdG90eXBlLnNldFNlY29uZHMsIFwic2Vjb25kc1wiLCBEYXRlLnByb3RvdHlwZS5nZXRTZWNvbmRzIF0sXG4gICAgICAgICAgICAgICAgICAgIHNzOiBbIFwiMFswLTldfDFbMC05XXwyWzAtOV18M1swLTldfDRbMC05XXw1WzAtOV1cIiwgRGF0ZS5wcm90b3R5cGUuc2V0U2Vjb25kcywgXCJzZWNvbmRzXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHkoRGF0ZS5wcm90b3R5cGUuZ2V0U2Vjb25kcy5jYWxsKHRoaXMpLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBdLFxuICAgICAgICAgICAgICAgICAgICBsOiBbIFwiWzAtOV17M31cIiwgRGF0ZS5wcm90b3R5cGUuc2V0TWlsbGlzZWNvbmRzLCBcIm1pbGxpc2Vjb25kc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB5KERhdGUucHJvdG90eXBlLmdldE1pbGxpc2Vjb25kcy5jYWxsKHRoaXMpLCAzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBdLFxuICAgICAgICAgICAgICAgICAgICBMOiBbIFwiWzAtOV17Mn1cIiwgRGF0ZS5wcm90b3R5cGUuc2V0TWlsbGlzZWNvbmRzLCBcIm1pbGxpc2Vjb25kc1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB5KERhdGUucHJvdG90eXBlLmdldE1pbGxpc2Vjb25kcy5jYWxsKHRoaXMpLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBdLFxuICAgICAgICAgICAgICAgICAgICB0OiBbIFwiW2FwXVwiLCBwLCBcImFtcG1cIiwgaCwgMSBdLFxuICAgICAgICAgICAgICAgICAgICB0dDogWyBcIlthcF1tXCIsIHAsIFwiYW1wbVwiLCBoLCAyIF0sXG4gICAgICAgICAgICAgICAgICAgIFQ6IFsgXCJbQVBdXCIsIHAsIFwiYW1wbVwiLCBoLCAxIF0sXG4gICAgICAgICAgICAgICAgICAgIFRUOiBbIFwiW0FQXU1cIiwgcCwgXCJhbXBtXCIsIGgsIDIgXSxcbiAgICAgICAgICAgICAgICAgICAgWjogWyBcIlwiIF0sXG4gICAgICAgICAgICAgICAgICAgIG86IFsgXCJcIiBdLFxuICAgICAgICAgICAgICAgICAgICBTOiBbIFwiXCIgXVxuICAgICAgICAgICAgICAgIH0sIGQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGlzb0RhdGU6IFwieXl5eS1tbS1kZFwiLFxuICAgICAgICAgICAgICAgICAgICBpc29UaW1lOiBcIkhIOk1NOnNzXCIsXG4gICAgICAgICAgICAgICAgICAgIGlzb0RhdGVUaW1lOiBcInl5eXktbW0tZGQnVCdISDpNTTpzc1wiLFxuICAgICAgICAgICAgICAgICAgICBpc29VdGNEYXRlVGltZTogXCJVVEM6eXl5eS1tbS1kZCdUJ0hIOk1NOnNzJ1onXCJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJwXCIpICYmIHRoaXMuc2V0SG91cnModGhpcy5nZXRIb3VycygpICsgMTIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBoKCkge31cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB2KGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBuZXcgUmVnRXhwKFwiXFxcXGQrJFwiKS5leGVjKGVbMF0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiB2b2lkIDAgIT09IHRbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gZltlWzBdWzBdICsgXCJ4XCJdLnNsaWNlKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFbMF0gPSBhWzBdKHRbMF0pLCBhWzNdID0gYVszXSh0WzBdKSwgYTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZltlWzBdXSkgcmV0dXJuIGZbZVswXV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG0oZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWUudG9rZW5pemVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IFtdLCBhID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIGYpIGlmICgvXFwuKngkLy50ZXN0KGkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBpWzBdICsgXCJcXFxcZCtcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSA9PT0gYS5pbmRleE9mKG4pICYmIGEucHVzaChuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSAtMSA9PT0gdC5pbmRleE9mKGlbMF0pICYmIHQucHVzaChpWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUudG9rZW5pemVyID0gXCIoXCIgKyAoYS5sZW5ndGggPiAwID8gYS5qb2luKFwifFwiKSArIFwifFwiIDogXCJcIikgKyB0LmpvaW4oXCIrfFwiKSArIFwiKSs/fC5cIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnRva2VuaXplciA9IG5ldyBSZWdFeHAoZS50b2tlbml6ZXIsIFwiZ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS50b2tlbml6ZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGcoZSwgdCwgYSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodm9pZCAwID09PSBlLnJhd2RheSB8fCAhaXNGaW5pdGUoZS5yYXdkYXkpICYmIG5ldyBEYXRlKGUuZGF0ZS5nZXRGdWxsWWVhcigpLCBpc0Zpbml0ZShlLnJhd21vbnRoKSA/IGUubW9udGggOiBlLmRhdGUuZ2V0TW9udGgoKSArIDEsIDApLmdldERhdGUoKSA+PSBlLmRheSB8fCBcIjI5XCIgPT0gZS5kYXkgJiYgIU51bWJlci5pc0Zpbml0ZShlLnJhd3llYXIpIHx8IG5ldyBEYXRlKGUuZGF0ZS5nZXRGdWxsWWVhcigpLCBpc0Zpbml0ZShlLnJhd21vbnRoKSA/IGUubW9udGggOiBlLmRhdGUuZ2V0TW9udGgoKSArIDEsIDApLmdldERhdGUoKSA+PSBlLmRheSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcIjI5XCIgPT0gZS5kYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gUCh0LnBvcywgYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXCJ5eXl5XCIgPT09IGkudGFyZ2V0TWF0Y2hbMF0gJiYgdC5wb3MgLSBpLnRhcmdldE1hdGNoSW5kZXggPT0gMikgcmV0dXJuIHQucmVtb3ZlID0gdC5wb3MgKyAxLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXCIwMlwiID09IGUubW9udGggJiYgXCIzMFwiID09IGUuZGF5ICYmIHZvaWQgMCAhPT0gdC5jKSByZXR1cm4gZS5kYXkgPSBcIjAzXCIsIFxuICAgICAgICAgICAgICAgICAgICBlLmRhdGUuc2V0RGF0ZSgzKSwgZS5kYXRlLnNldE1vbnRoKDEpLCB0Lmluc2VydCA9IFsge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiB0LnBvcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGM6IFwiMFwiXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvczogdC5wb3MgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYzogdC5jXG4gICAgICAgICAgICAgICAgICAgIH0gXSwgdC5jYXJldCA9IG8uc2Vla05leHQuY2FsbCh0aGlzLCB0LnBvcyArIDEpLCB0O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGsoZSwgdCwgYSwgaSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbiwgbywgcyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobShhKS5sYXN0SW5kZXggPSAwOyBuID0gbShhKS5leGVjKGUpOyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgPT09IHQpIGlmIChvID0gdihuKSkgcyArPSBcIihcIiArIG9bMF0gKyBcIilcIjsgZWxzZSBzd2l0Y2ggKG5bMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIltcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzICs9IFwiKFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJdXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcyArPSBcIik/XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzICs9ICgwLCByLmRlZmF1bHQpKG5bMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvID0gdihuKSkgaWYgKCEwICE9PSBpICYmIG9bM10pIHMgKz0gb1szXS5jYWxsKHQuZGF0ZSk7IGVsc2Ugb1syXSA/IHMgKz0gdFtcInJhd1wiICsgb1syXV0gOiBzICs9IG5bMF07IGVsc2UgcyArPSBuWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB5KGUsIHQsIGEpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChlID0gU3RyaW5nKGUpLCB0ID0gdCB8fCAyOyBlLmxlbmd0aCA8IHQ7ICkgZSA9IGEgPyBlICsgXCIwXCIgOiBcIjBcIiArIGU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBiKGUsIHQsIGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGksIG4sIHIsIG8gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgxLCAwLCAxKVxuICAgICAgICAgICAgICAgICAgICB9LCBsID0gZTtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gdShlLCB0LCBhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZVtpXSA9IFwiYW1wbVwiID09PSBpID8gdCA6IHQucmVwbGFjZSgvW14wLTldL2csIFwiMFwiKSwgZVtcInJhd1wiICsgaV0gPSB0LCB2b2lkIDAgIT09IHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IGVbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKFwiZGF5XCIgPT09IGkgJiYgMjkgPT09IHBhcnNlSW50KG4pIHx8IFwibW9udGhcIiA9PT0gaSAmJiAyID09PSBwYXJzZUludChuKSkgJiYgKDI5ICE9PSBwYXJzZUludChlLmRheSkgfHwgMiAhPT0gcGFyc2VJbnQoZS5tb250aCkgfHwgXCJcIiAhPT0gZS55ZWFyICYmIHZvaWQgMCAhPT0gZS55ZWFyIHx8IGUuZGF0ZS5zZXRGdWxsWWVhcigyMDEyLCAxLCAyOSkpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRheVwiID09PSBpICYmIDAgPT09IHBhcnNlSW50KG4pICYmIChuID0gMSksIFwibW9udGhcIiA9PT0gaSAmJiAobiA9IHBhcnNlSW50KG4pKSA+IDAgJiYgKG4gLT0gMSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwieWVhclwiID09PSBpICYmIG4ubGVuZ3RoIDwgNCAmJiAobiA9IHkobiwgNCwgITApKSwgXCJcIiA9PT0gbiB8fCBpc05hTihuKSB8fCByLmNhbGwoZS5kYXRlLCBuKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJhbXBtXCIgPT09IGkgJiYgci5jYWxsKGUuZGF0ZSwgbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobShhKS5sYXN0SW5kZXggPSAwOyBuID0gbShhKS5leGVjKHQpOyApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IG5ldyBSZWdFeHAoXCJcXFxcZCskXCIpLmV4ZWMoblswXSksIGQgPSBjID8gblswXVswXSArIFwieFwiIDogblswXSwgcCA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaCA9IG0oYSkubGFzdEluZGV4LCB2ID0gUChuLmluZGV4LCBhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbShhKS5sYXN0SW5kZXggPSBoLCBwID0gbC5zbGljZSgwLCBsLmluZGV4T2Yodi5uZXh0TWF0Y2hbMF0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcCA9IGwuc2xpY2UoMCwgZC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmLCBkKSAmJiAoaSA9IGZbZF1bMl0sIHIgPSBmW2RdWzFdLCB1KG8sIHApKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IGwuc2xpY2UocC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG87XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGwgJiYgXCJvYmplY3RcIiA9PT0gcyhsKSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobCwgXCJkYXRlXCIpKSByZXR1cm4gbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24geChlLCB0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrKHQuaW5wdXRGb3JtYXQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGU6IGVcbiAgICAgICAgICAgICAgICAgICAgfSwgdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFAoZSwgdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSwgaSwgbiA9IDAsIHIgPSAwO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKG0odCkubGFzdEluZGV4ID0gMDsgaSA9IG0odCkuZXhlYyh0LmlucHV0Rm9ybWF0KTsgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IG5ldyBSZWdFeHAoXCJcXFxcZCskXCIpLmV4ZWMoaVswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG4gKz0gciA9IG8gPyBwYXJzZUludChvWzBdKSA6IGlbMF0ubGVuZ3RoKSA+PSBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IGksIGkgPSBtKHQpLmV4ZWModC5pbnB1dEZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE1hdGNoSW5kZXg6IG4gLSByLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dE1hdGNoOiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWF0Y2g6IGFcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaS5kZWZhdWx0LmV4dGVuZEFsaWFzZXMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRldGltZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFzazogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLm51bWVyaWNJbnB1dCA9ICExLCBmLlMgPSBlLmkxOG4ub3JkaW5hbFN1ZmZpeC5qb2luKFwifFwiKSwgZS5pbnB1dEZvcm1hdCA9IGRbZS5pbnB1dEZvcm1hdF0gfHwgZS5pbnB1dEZvcm1hdCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5kaXNwbGF5Rm9ybWF0ID0gZFtlLmRpc3BsYXlGb3JtYXRdIHx8IGUuZGlzcGxheUZvcm1hdCB8fCBlLmlucHV0Rm9ybWF0LCBlLm91dHB1dEZvcm1hdCA9IGRbZS5vdXRwdXRGb3JtYXRdIHx8IGUub3V0cHV0Rm9ybWF0IHx8IGUuaW5wdXRGb3JtYXQsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucGxhY2Vob2xkZXIgPSBcIlwiICE9PSBlLnBsYWNlaG9sZGVyID8gZS5wbGFjZWhvbGRlciA6IGUuaW5wdXRGb3JtYXQucmVwbGFjZSgvW1tcXF1dLywgXCJcIiksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucmVnZXggPSBrKGUuaW5wdXRGb3JtYXQsIHZvaWQgMCwgZSksIGUubWluID0gYihlLm1pbiwgZS5pbnB1dEZvcm1hdCwgZSksIGUubWF4ID0gYihlLm1heCwgZS5pbnB1dEZvcm1hdCwgZSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dEZvcm1hdDogXCJpc29EYXRlVGltZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUZvcm1hdDogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0Rm9ybWF0OiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwT3B0aW9uYWxQYXJ0Q2hhcmFjdGVyOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaTE4bjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRheU5hbWVzOiBbIFwiTW9uXCIsIFwiVHVlXCIsIFwiV2VkXCIsIFwiVGh1XCIsIFwiRnJpXCIsIFwiU2F0XCIsIFwiU3VuXCIsIFwiTW9uZGF5XCIsIFwiVHVlc2RheVwiLCBcIldlZG5lc2RheVwiLCBcIlRodXJzZGF5XCIsIFwiRnJpZGF5XCIsIFwiU2F0dXJkYXlcIiwgXCJTdW5kYXlcIiBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoTmFtZXM6IFsgXCJKYW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBcHJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBdWdcIiwgXCJTZXBcIiwgXCJPY3RcIiwgXCJOb3ZcIiwgXCJEZWNcIiwgXCJKYW51YXJ5XCIsIFwiRmVicnVhcnlcIiwgXCJNYXJjaFwiLCBcIkFwcmlsXCIsIFwiTWF5XCIsIFwiSnVuZVwiLCBcIkp1bHlcIiwgXCJBdWd1c3RcIiwgXCJTZXB0ZW1iZXJcIiwgXCJPY3RvYmVyXCIsIFwiTm92ZW1iZXJcIiwgXCJEZWNlbWJlclwiIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkaW5hbFN1ZmZpeDogWyBcInN0XCIsIFwibmRcIiwgXCJyZFwiLCBcInRoXCIgXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZVZhbGlkYXRpb246IGZ1bmN0aW9uKGUsIHQsIGEsIGksIG4sIHIsIG8sIHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocykgcmV0dXJuICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihhKSAmJiBlW3RdICE9PSBhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsID0gUCh0LCBuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwubmV4dE1hdGNoICYmIGwubmV4dE1hdGNoWzBdID09PSBhICYmIGwudGFyZ2V0TWF0Y2hbMF0ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHUgPSBmW2wudGFyZ2V0TWF0Y2hbMF1dWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ldyBSZWdFeHAodSkudGVzdChcIjBcIiArIGVbdCAtIDFdKSkgcmV0dXJuIGVbdF0gPSBlW3QgLSAxXSwgZVt0IC0gMV0gPSBcIjBcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnV6enk6ICEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcjogZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoRnJvbUJ1ZmZlcjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogdCAtIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogdCArIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvczogdCArIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RWYWxpZGF0aW9uOiBmdW5jdGlvbihlLCB0LCBhLCBpLCBuLCByLCBvLCBzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGwsIHU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8pIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoITEgPT09IGkgJiYgKCgobCA9IFAodCArIDEsIG4pKS50YXJnZXRNYXRjaCAmJiBsLnRhcmdldE1hdGNoSW5kZXggPT09IHQgJiYgbC50YXJnZXRNYXRjaFswXS5sZW5ndGggPiAxICYmIHZvaWQgMCAhPT0gZltsLnRhcmdldE1hdGNoWzBdXSB8fCAobCA9IFAodCArIDIsIG4pKS50YXJnZXRNYXRjaCAmJiBsLnRhcmdldE1hdGNoSW5kZXggPT09IHQgKyAxICYmIGwudGFyZ2V0TWF0Y2hbMF0ubGVuZ3RoID4gMSAmJiB2b2lkIDAgIT09IGZbbC50YXJnZXRNYXRjaFswXV0pICYmICh1ID0gZltsLnRhcmdldE1hdGNoWzBdXVswXSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgMCAhPT0gdSAmJiAodm9pZCAwICE9PSByLnZhbGlkUG9zaXRpb25zW3QgKyAxXSAmJiBuZXcgUmVnRXhwKHUpLnRlc3QoYSArIFwiMFwiKSA/IChlW3RdID0gYSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZVt0ICsgMV0gPSBcIjBcIiwgaSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiB0ICsgMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyZXQ6IHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSA6IG5ldyBSZWdFeHAodSkudGVzdChcIjBcIiArIGEpICYmIChlW3RdID0gXCIwXCIsIGVbdCArIDFdID0gYSwgaSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiB0ICsgMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKSwgITEgPT09IGkpKSByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaS5mdXp6eSAmJiAoZSA9IGkuYnVmZmVyLCB0ID0gaS5wb3MpLCAobCA9IFAodCwgbikpLnRhcmdldE1hdGNoICYmIGwudGFyZ2V0TWF0Y2hbMF0gJiYgdm9pZCAwICE9PSBmW2wudGFyZ2V0TWF0Y2hbMF1dKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBmW2wudGFyZ2V0TWF0Y2hbMF1dWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IGUuc2xpY2UobC50YXJnZXRNYXRjaEluZGV4LCBsLnRhcmdldE1hdGNoSW5kZXggKyBsLnRhcmdldE1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICExID09PSBuZXcgUmVnRXhwKHUpLnRlc3QoZC5qb2luKFwiXCIpKSAmJiAyID09PSBsLnRhcmdldE1hdGNoWzBdLmxlbmd0aCAmJiByLnZhbGlkUG9zaXRpb25zW2wudGFyZ2V0TWF0Y2hJbmRleF0gJiYgci52YWxpZFBvc2l0aW9uc1tsLnRhcmdldE1hdGNoSW5kZXggKyAxXSAmJiAoci52YWxpZFBvc2l0aW9uc1tsLnRhcmdldE1hdGNoSW5kZXggKyAxXS5pbnB1dCA9IFwiMFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBpLCBoID0gYihlLmpvaW4oXCJcIiksIG4uaW5wdXRGb3JtYXQsIG4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwICYmIGguZGF0ZS5nZXRUaW1lKCkgPT0gaC5kYXRlLmdldFRpbWUoKSAmJiAobi5wcmVmaWxsWWVhciAmJiAocCA9IGZ1bmN0aW9uKGUsIHQsIGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUueWVhciAhPT0gZS5yYXd5ZWFyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGMudG9TdHJpbmcoKSwgbiA9IGUucmF3eWVhci5yZXBsYWNlKC9bXjAtOV0vZywgXCJcIiksIHIgPSBpLnNsaWNlKDAsIG4ubGVuZ3RoKSwgbyA9IGkuc2xpY2Uobi5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDIgPT09IG4ubGVuZ3RoICYmIG4gPT09IHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IG5ldyBEYXRlKGMsIGUubW9udGggLSAxLCBlLmRheSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXkgPT0gcy5nZXREYXRlKCkgJiYgKCFhLm1heCB8fCBhLm1heC5kYXRlLmdldFRpbWUoKSA+PSBzLmdldFRpbWUoKSkgJiYgKGUuZGF0ZS5zZXRGdWxsWWVhcihjKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS55ZWFyID0gaSwgdC5pbnNlcnQgPSBbIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiB0LnBvcyArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IG9bMF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvczogdC5wb3MgKyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBvWzFdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KGgsIHAsIG4pKSwgcCA9IGZ1bmN0aW9uKGUsIHQsIGEsIGksIG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0KSByZXR1cm4gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEubWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5yYXd5ZWFyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIsIG8gPSBlLnJhd3llYXIucmVwbGFjZSgvW14wLTldL2csIFwiXCIpLCBzID0gYS5taW4ueWVhci5zdWJzdHIoMCwgby5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvIDwgcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IFAodC5wb3MsIGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobyA9IGUucmF3eWVhci5zdWJzdHIoMCwgdC5wb3MgLSBsLnRhcmdldE1hdGNoSW5kZXggKyAxKS5yZXBsYWNlKC9bXjAtOV0vZywgXCIwXCIpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHMgPSBhLm1pbi55ZWFyLnN1YnN0cigwLCBvLmxlbmd0aCkpIDw9IG8pIHJldHVybiB0LnJlbW92ZSA9IGwudGFyZ2V0TWF0Y2hJbmRleCArIG8ubGVuZ3RoLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG8gPSBcInl5eXlcIiA9PT0gbC50YXJnZXRNYXRjaFswXSA/IGUucmF3eWVhci5zdWJzdHIoMSwgMSkgOiBlLnJhd3llYXIuc3Vic3RyKDAsIDEpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IGEubWluLnllYXIuc3Vic3RyKDIsIDEpLCByID0gYS5tYXggPyBhLm1heC55ZWFyLnN1YnN0cigyLCAxKSA6IG8sIDEgPT09IG8ubGVuZ3RoICYmIHMgPD0gbyAmJiBvIDw9IHIgJiYgITAgIT09IG4pIHJldHVybiBcInl5eXlcIiA9PT0gbC50YXJnZXRNYXRjaFswXSA/ICh0Lmluc2VydCA9IFsge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiB0LnBvcyArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWN0OiAhMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0sIHQuY2FyZXQgPSB0LnBvcyArIDIsIGkudmFsaWRQb3NpdGlvbnNbdC5wb3NdLmlucHV0ID0gYS5taW4ueWVhclsxXSkgOiAodC5pbnNlcnQgPSBbIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvczogdC5wb3MgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzogYS5taW4ueWVhclsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmljdDogITBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiB0LnBvcyArIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaWN0OiAhMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0sIHQuY2FyZXQgPSB0LnBvcyArIDMsIGkudmFsaWRQb3NpdGlvbnNbdC5wb3NdLmlucHV0ID0gYS5taW4ueWVhclswXSksIHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB1IGluIGUpIC0xID09PSB1LmluZGV4T2YoXCJyYXdcIikgJiYgZVtcInJhd1wiLmNvbmNhdCh1KV0gJiYgKGVbdV0sIGVbXCJyYXdcIi5jb25jYXQodSldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgJiYgZS55ZWFyICYmIGUueWVhciA9PT0gZS5yYXd5ZWFyICYmIGEubWluLmRhdGUuZ2V0VGltZSgpID09IGEubWluLmRhdGUuZ2V0VGltZSgpICYmICh0ID0gYS5taW4uZGF0ZS5nZXRUaW1lKCkgPD0gZS5kYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQgJiYgYS5tYXggJiYgYS5tYXguZGF0ZS5nZXRUaW1lKCkgPT0gYS5tYXguZGF0ZS5nZXRUaW1lKCkgJiYgKHQgPSBhLm1heC5kYXRlLmdldFRpbWUoKSA+PSBlLmRhdGUuZ2V0VGltZSgpKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfShoLCBwID0gZy5jYWxsKHRoaXMsIGgsIHAsIG4pLCBuLCByLCBzKSksIHZvaWQgMCAhPT0gdCAmJiBwICYmIGkucG9zICE9PSB0ID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXI6IGsobi5pbnB1dEZvcm1hdCwgaCwgbikuc3BsaXQoXCJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hGcm9tQnVmZmVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogaS5wb3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiBpLmNhcmV0IHx8IGkucG9zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA6IHA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb25LZXlEb3duOiBmdW5jdGlvbihlLCB0LCBhLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5jdHJsS2V5ICYmIGUua2V5Q29kZSA9PT0gbi5kZWZhdWx0LlJJR0hUICYmICh0aGlzLmlucHV0bWFzay5fdmFsdWVTZXQoeChuZXcgRGF0ZSwgaSkpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1KHRoaXMpLnRyaWdnZXIoXCJzZXR2YWx1ZVwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb25Vbk1hc2s6IGZ1bmN0aW9uKGUsIHQsIGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdCA/IGsoYS5vdXRwdXRGb3JtYXQsIGIoZSwgYS5pbnB1dEZvcm1hdCwgYSksIGEsICEwKSA6IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzaW5nOiBmdW5jdGlvbihlLCB0LCBhLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAgPT0gdC5uYXRpdmVEZWYuaW5kZXhPZihcIlthcF1cIikgPyBlLnRvTG93ZXJDYXNlKCkgOiAwID09IHQubmF0aXZlRGVmLmluZGV4T2YoXCJbQVBdXCIpID8gZS50b1VwcGVyQ2FzZSgpIDogZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkJlZm9yZU1hc2s6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJbb2JqZWN0IERhdGVdXCIgPT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSAmJiAoZSA9IHgoZSwgdCkpLCBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydE1vZGU6ICExLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRQb3NpdGlvbnM6ICExLFxuICAgICAgICAgICAgICAgICAgICAgICAga2VlcFN0YXRpYzogITEsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dG1vZGU6IFwibnVtZXJpY1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZmlsbFllYXI6ICEwXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAzODUxOiBmdW5jdGlvbihlLCB0LCBhKSB7XG4gICAgICAgICAgICAgICAgdmFyIGksIG4gPSAoaSA9IGEoMjM5NCkpICYmIGkuX19lc01vZHVsZSA/IGkgOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGlcbiAgICAgICAgICAgICAgICB9LCByID0gYSg4NzExKSwgbyA9IGEoNDcxMyk7XG4gICAgICAgICAgICAgICAgbi5kZWZhdWx0LmV4dGVuZERlZmluaXRpb25zKHtcbiAgICAgICAgICAgICAgICAgICAgQToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBcIltBLVphLXpcXHUwNDEwLVxcdTA0NGZcXHUwNDAxXFx1MDQ1MVxceGMwLVxceGZmXFx4YjVdXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbmc6IFwidXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIiZcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBcIlswLTlBLVphLXpcXHUwNDEwLVxcdTA0NGZcXHUwNDAxXFx1MDQ1MVxceGMwLVxceGZmXFx4YjVdXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbmc6IFwidXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcIiNcIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBcIlswLTlBLUZhLWZdXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbmc6IFwidXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdmFyIHMgPSBuZXcgUmVnRXhwKFwiMjVbMC01XXwyWzAtNF1bMC05XXxbMDFdWzAtOV1bMC05XVwiKTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBsKGUsIHQsIGEsIGksIG4pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgLSAxID4gLTEgJiYgXCIuXCIgIT09IHQuYnVmZmVyW2EgLSAxXSA/IChlID0gdC5idWZmZXJbYSAtIDFdICsgZSwgZSA9IGEgLSAyID4gLTEgJiYgXCIuXCIgIT09IHQuYnVmZmVyW2EgLSAyXSA/IHQuYnVmZmVyW2EgLSAyXSArIGUgOiBcIjBcIiArIGUpIDogZSA9IFwiMDBcIiArIGUsIFxuICAgICAgICAgICAgICAgICAgICBzLnRlc3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG4uZGVmYXVsdC5leHRlbmRBbGlhc2VzKHtcbiAgICAgICAgICAgICAgICAgICAgY3NzdW5pdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXg6IFwiWystXT9bMC05XStcXFxcLj8oWzAtOV0rKT8ocHh8ZW18cmVtfGV4fCV8aW58Y218bW18cHR8cGMpXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWdleDogXCIoaHR0cHM/fGZ0cCk6Ly8uKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1VubWFzazogITEsXG4gICAgICAgICAgICAgICAgICAgICAgICBrZWVwU3RhdGljOiAhMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYlRocm91Z2g6ICEwXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGlwOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrOiBcImlbaVtpXV0ualtqW2pdXS5rW2tba11dLmxbbFtsXV1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGo6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb25Vbk1hc2s6IGZ1bmN0aW9uKGUsIHQsIGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dG1vZGU6IFwibnVtZXJpY1wiXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVtYWlsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrOiBcIip7MSw2NH1bLip7MSw2NH1dWy4qezEsNjR9XVsuKnsxLDYzfV1ALXsxLDYzfS4tezEsNjN9Wy4tezEsNjN9XVsuLXsxLDYzfV1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyZWVkeTogITEsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNpbmc6IFwibG93ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQmVmb3JlUGFzdGU6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGUgPSBlLnRvTG93ZXJDYXNlKCkpLnJlcGxhY2UoXCJtYWlsdG86XCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIqXCI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBcIlswLTlcXHVmZjExLVxcdWZmMTlBLVphLXpcXHUwNDEwLVxcdTA0NGZcXHUwNDAxXFx1MDQ1MVxceGMwLVxceGZmXFx4YjUhIyQlJicqKy89P15fYHt8fX4tXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIi1cIjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IFwiWzAtOUEtWmEtei1dXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb25Vbk1hc2s6IGZ1bmN0aW9uKGUsIHQsIGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dG1vZGU6IFwiZW1haWxcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBtYWM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2s6IFwiIyM6IyM6IyM6IyM6IyM6IyNcIlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB2aW46IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2s6IFwiVnsxM305ezR9XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBcIltBLUhKLU5QUi1aYS1oai1ucHItelxcXFxkXVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbmc6IFwidXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhckluY29tcGxldGU6ICEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b1VubWFzazogITBcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc3NuOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXNrOiBcIjk5OS05OS05OTk5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3N0VmFsaWRhdGlvbjogZnVuY3Rpb24oZSwgdCwgYSwgaSwgbiwgcywgbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1ID0gby5nZXRNYXNrVGVtcGxhdGUuY2FsbCh0aGlzLCAhMCwgci5nZXRMYXN0VmFsaWRQb3NpdGlvbi5jYWxsKHRoaXMpLCAhMCwgITApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAvXig/ITIxOS0wOS05OTk5fDA3OC0wNS0xMTIwKSg/ITY2NnwwMDB8OS57Mn0pLnszfS0oPyEwMCkuezJ9LSg/ITB7NH0pLns0fSQvLnRlc3QodS5qb2luKFwiXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDIwNzogZnVuY3Rpb24oZSwgdCwgYSkge1xuICAgICAgICAgICAgICAgIHZhciBpID0gcyhhKDIzOTQpKSwgbiA9IHMoYSg0NTI4KSksIHIgPSBzKGEoNzE4NCkpLCBvID0gYSg4NzExKTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUgJiYgZS5fX2VzTW9kdWxlID8gZSA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGVcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGwgPSBpLmRlZmF1bHQuZGVwZW5kZW5jeUxpYjtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB1KGUsIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYSA9IFwiXCIsIG4gPSAwOyBuIDwgZS5sZW5ndGg7IG4rKykgaS5kZWZhdWx0LnByb3RvdHlwZS5kZWZpbml0aW9uc1tlLmNoYXJBdChuKV0gfHwgdC5kZWZpbml0aW9uc1tlLmNoYXJBdChuKV0gfHwgdC5vcHRpb25hbG1hcmtlclswXSA9PT0gZS5jaGFyQXQobikgfHwgdC5vcHRpb25hbG1hcmtlclsxXSA9PT0gZS5jaGFyQXQobikgfHwgdC5xdWFudGlmaWVybWFya2VyWzBdID09PSBlLmNoYXJBdChuKSB8fCB0LnF1YW50aWZpZXJtYXJrZXJbMV0gPT09IGUuY2hhckF0KG4pIHx8IHQuZ3JvdXBtYXJrZXJbMF0gPT09IGUuY2hhckF0KG4pIHx8IHQuZ3JvdXBtYXJrZXJbMV0gPT09IGUuY2hhckF0KG4pIHx8IHQuYWx0ZXJuYXRvcm1hcmtlciA9PT0gZS5jaGFyQXQobikgPyBhICs9IFwiXFxcXFwiICsgZS5jaGFyQXQobikgOiBhICs9IGUuY2hhckF0KG4pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYyhlLCB0LCBhLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmxlbmd0aCA+IDAgJiYgdCA+IDAgJiYgKCFhLmRpZ2l0c09wdGlvbmFsIHx8IGkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IGUuaW5kZXhPZihhLnJhZGl4UG9pbnQpLCByID0gITE7XG4gICAgICAgICAgICAgICAgICAgICAgICBhLm5lZ2F0aW9uU3ltYm9sLmJhY2sgPT09IGVbZS5sZW5ndGggLSAxXSAmJiAociA9ICEwLCBlLmxlbmd0aC0tKSwgLTEgPT09IG4gJiYgKGUucHVzaChhLnJhZGl4UG9pbnQpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBlLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbyA9IDE7IG8gPD0gdDsgbysrKSBpc0Zpbml0ZShlW24gKyBvXSkgfHwgKGVbbiArIG9dID0gXCIwXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByICYmIGUucHVzaChhLm5lZ2F0aW9uU3ltYm9sLmJhY2spLCBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBmKGUsIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSAwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXCIrXCIgPT09IGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoYSBpbiB0LnZhbGlkUG9zaXRpb25zKSA7XG4gICAgICAgICAgICAgICAgICAgICAgICBhID0gby5zZWVrTmV4dC5jYWxsKHRoaXMsIHBhcnNlSW50KGEpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIHQudGVzdHMpIGlmICgoaSA9IHBhcnNlSW50KGkpKSA+PSBhKSBmb3IgKHZhciBuID0gMCwgciA9IHQudGVzdHNbaV0ubGVuZ3RoOyBuIDwgcjsgbisrKSBpZiAoKHZvaWQgMCA9PT0gdC52YWxpZFBvc2l0aW9uc1tpXSB8fCBcIi1cIiA9PT0gZSkgJiYgdC50ZXN0c1tpXVtuXS5tYXRjaC5kZWYgPT09IGUpIHJldHVybiBpICsgKHZvaWQgMCAhPT0gdC52YWxpZFBvc2l0aW9uc1tpXSAmJiBcIi1cIiAhPT0gZSA/IDEgOiAwKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGQoZSwgdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IC0xO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIHQudmFsaWRQb3NpdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuID0gdC52YWxpZFBvc2l0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuICYmIG4ubWF0Y2guZGVmID09PSBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHBhcnNlSW50KGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBwKGUsIHQsIGEsIGksIG4pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSB0LmJ1ZmZlciA/IHQuYnVmZmVyLmluZGV4T2Yobi5yYWRpeFBvaW50KSA6IC0xLCBvID0gKC0xICE9PSByIHx8IGkgJiYgbi5qaXRNYXNraW5nKSAmJiBuZXcgUmVnRXhwKG4uZGVmaW5pdGlvbnNbOV0udmFsaWRhdG9yKS50ZXN0KGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbi5fcmFkaXhEYW5jZSAmJiAtMSAhPT0gciAmJiBvICYmIG51bGwgPT0gdC52YWxpZFBvc2l0aW9uc1tyXSA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvczogciA9PT0gYSA/IHIgKyAxIDogcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBuLnJhZGl4UG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3M6IGFcbiAgICAgICAgICAgICAgICAgICAgfSA6IG87XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGkuZGVmYXVsdC5leHRlbmRBbGlhc2VzKHtcbiAgICAgICAgICAgICAgICAgICAgbnVtZXJpYzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFzazogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucmVwZWF0ID0gMCwgZS5ncm91cFNlcGFyYXRvciA9PT0gZS5yYWRpeFBvaW50ICYmIGUuZGlnaXRzICYmIFwiMFwiICE9PSBlLmRpZ2l0cyAmJiAoXCIuXCIgPT09IGUucmFkaXhQb2ludCA/IGUuZ3JvdXBTZXBhcmF0b3IgPSBcIixcIiA6IFwiLFwiID09PSBlLnJhZGl4UG9pbnQgPyBlLmdyb3VwU2VwYXJhdG9yID0gXCIuXCIgOiBlLmdyb3VwU2VwYXJhdG9yID0gXCJcIiksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIFwiID09PSBlLmdyb3VwU2VwYXJhdG9yICYmIChlLnNraXBPcHRpb25hbFBhcnRDaGFyYWN0ZXIgPSB2b2lkIDApLCBlLnBsYWNlaG9sZGVyLmxlbmd0aCA+IDEgJiYgKGUucGxhY2Vob2xkZXIgPSBlLnBsYWNlaG9sZGVyLmNoYXJBdCgwKSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicmFkaXhGb2N1c1wiID09PSBlLnBvc2l0aW9uQ2FyZXRPbkNsaWNrICYmIFwiXCIgPT09IGUucGxhY2Vob2xkZXIgJiYgKGUucG9zaXRpb25DYXJldE9uQ2xpY2sgPSBcImx2cFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IFwiMFwiLCBhID0gZS5yYWRpeFBvaW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICEwID09PSBlLm51bWVyaWNJbnB1dCAmJiB2b2lkIDAgPT09IGUuX19maW5hbmNlSW5wdXQgPyAodCA9IFwiMVwiLCBlLnBvc2l0aW9uQ2FyZXRPbkNsaWNrID0gXCJyYWRpeEZvY3VzXCIgPT09IGUucG9zaXRpb25DYXJldE9uQ2xpY2sgPyBcImx2cFwiIDogZS5wb3NpdGlvbkNhcmV0T25DbGljaywgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5kaWdpdHNPcHRpb25hbCA9ICExLCBpc05hTihlLmRpZ2l0cykgJiYgKGUuZGlnaXRzID0gMiksIGUuX3JhZGl4RGFuY2UgPSAhMSwgYSA9IFwiLFwiID09PSBlLnJhZGl4UG9pbnQgPyBcIj9cIiA6IFwiIVwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlwiICE9PSBlLnJhZGl4UG9pbnQgJiYgdm9pZCAwID09PSBlLmRlZmluaXRpb25zW2FdICYmIChlLmRlZmluaXRpb25zW2FdID0ge30sIGUuZGVmaW5pdGlvbnNbYV0udmFsaWRhdG9yID0gXCJbXCIgKyBlLnJhZGl4UG9pbnQgKyBcIl1cIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5kZWZpbml0aW9uc1thXS5wbGFjZWhvbGRlciA9IGUucmFkaXhQb2ludCwgZS5kZWZpbml0aW9uc1thXS5zdGF0aWMgPSAhMCwgZS5kZWZpbml0aW9uc1thXS5nZW5lcmF0ZWQgPSAhMCkpIDogKGUuX19maW5hbmNlSW5wdXQgPSAhMSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5udW1lcmljSW5wdXQgPSAhMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIG4gPSBcIlsrXVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuICs9IHUoZS5wcmVmaXgsIGUpLCBcIlwiICE9PSBlLmdyb3VwU2VwYXJhdG9yID8gKHZvaWQgMCA9PT0gZS5kZWZpbml0aW9uc1tlLmdyb3VwU2VwYXJhdG9yXSAmJiAoZS5kZWZpbml0aW9uc1tlLmdyb3VwU2VwYXJhdG9yXSA9IHt9LCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmRlZmluaXRpb25zW2UuZ3JvdXBTZXBhcmF0b3JdLnZhbGlkYXRvciA9IFwiW1wiICsgZS5ncm91cFNlcGFyYXRvciArIFwiXVwiLCBlLmRlZmluaXRpb25zW2UuZ3JvdXBTZXBhcmF0b3JdLnBsYWNlaG9sZGVyID0gZS5ncm91cFNlcGFyYXRvciwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5kZWZpbml0aW9uc1tlLmdyb3VwU2VwYXJhdG9yXS5zdGF0aWMgPSAhMCwgZS5kZWZpbml0aW9uc1tlLmdyb3VwU2VwYXJhdG9yXS5nZW5lcmF0ZWQgPSAhMCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gKz0gZS5fbWFzayhlKSkgOiBuICs9IFwiOXsrfVwiLCB2b2lkIDAgIT09IGUuZGlnaXRzICYmIDAgIT09IGUuZGlnaXRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gZS5kaWdpdHMudG9TdHJpbmcoKS5zcGxpdChcIixcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRmluaXRlKG9bMF0pICYmIG9bMV0gJiYgaXNGaW5pdGUob1sxXSkgPyBuICs9IGEgKyB0ICsgXCJ7XCIgKyBlLmRpZ2l0cyArIFwifVwiIDogKGlzTmFOKGUuZGlnaXRzKSB8fCBwYXJzZUludChlLmRpZ2l0cykgPiAwKSAmJiAoZS5kaWdpdHNPcHRpb25hbCB8fCBlLmppdE1hc2tpbmcgPyAoaSA9IG4gKyBhICsgdCArIFwiezAsXCIgKyBlLmRpZ2l0cyArIFwifVwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5rZWVwU3RhdGljID0gITApIDogbiArPSBhICsgdCArIFwie1wiICsgZS5kaWdpdHMgKyBcIn1cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGUuaW5wdXRtb2RlID0gXCJudW1lcmljXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4gKz0gdShlLnN1ZmZpeCwgZSksIG4gKz0gXCJbLV1cIiwgaSAmJiAobiA9IFsgaSArIHUoZS5zdWZmaXgsIGUpICsgXCJbLV1cIiwgbiBdKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5ncmVlZHkgPSAhMSwgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIDAgPT09IGUucGFyc2VNaW5NYXhPcHRpb25zICYmIChudWxsICE9PSBlLm1pbiAmJiAoZS5taW4gPSBlLm1pbi50b1N0cmluZygpLnJlcGxhY2UobmV3IFJlZ0V4cCgoMCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuZGVmYXVsdCkoZS5ncm91cFNlcGFyYXRvciksIFwiZ1wiKSwgXCJcIiksIFwiLFwiID09PSBlLnJhZGl4UG9pbnQgJiYgKGUubWluID0gZS5taW4ucmVwbGFjZShlLnJhZGl4UG9pbnQsIFwiLlwiKSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLm1pbiA9IGlzRmluaXRlKGUubWluKSA/IHBhcnNlRmxvYXQoZS5taW4pIDogTmFOLCBpc05hTihlLm1pbikgJiYgKGUubWluID0gTnVtYmVyLk1JTl9WQUxVRSkpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gZS5tYXggJiYgKGUubWF4ID0gZS5tYXgudG9TdHJpbmcoKS5yZXBsYWNlKG5ldyBSZWdFeHAoKDAsIHIuZGVmYXVsdCkoZS5ncm91cFNlcGFyYXRvciksIFwiZ1wiKSwgXCJcIiksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIixcIiA9PT0gZS5yYWRpeFBvaW50ICYmIChlLm1heCA9IGUubWF4LnJlcGxhY2UoZS5yYWRpeFBvaW50LCBcIi5cIikpLCBlLm1heCA9IGlzRmluaXRlKGUubWF4KSA/IHBhcnNlRmxvYXQoZS5tYXgpIDogTmFOLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNOYU4oZS5tYXgpICYmIChlLm1heCA9IE51bWJlci5NQVhfVkFMVUUpKSwgZS5wYXJzZU1pbk1heE9wdGlvbnMgPSBcImRvbmVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfShlKSwgbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBfbWFzazogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIihcIiArIGUuZ3JvdXBTZXBhcmF0b3IgKyBcIjk5OSl7K3wxfVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0czogXCIqXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaWdpdHNPcHRpb25hbDogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmZvcmNlRGlnaXRzT25CbHVyOiAhMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl4UG9pbnQ6IFwiLlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25DYXJldE9uQ2xpY2s6IFwicmFkaXhGb2N1c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgX3JhZGl4RGFuY2U6ICEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBTZXBhcmF0b3I6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxvd01pbnVzOiAhMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZ2F0aW9uU3ltYm9sOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbnQ6IFwiLVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2s6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXg6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBTZXRNYXhPbk92ZXJmbG93OiAhMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXA6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5tYXNrQXNOdW1iZXI6ICExLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRpbmdGTjogTWF0aC5yb3VuZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0bW9kZTogXCJkZWNpbWFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG9ydGN1dHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrOiBcIjAwMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG06IFwiMDAwMDAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBncmVlZHk6ICExLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRBbGlnbjogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRNb2RlOiAhMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9Vbm1hc2s6ICExLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcE9wdGlvbmFsUGFydENoYXJhY3RlcjogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZVByb3RvdHlwZURlZmluaXRpb25zOiAhMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IHBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yOiBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uU3ltYm9sOiBcIjlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3I6IFwiWzAtOVxcdWZmMTAtXFx1ZmYxOVxcdTA2NjAtXFx1MDY2OVxcdTA2ZjAtXFx1MDZmOV1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvblN5bWJvbDogXCIqXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiK1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24oZSwgdCwgYSwgaSwgbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4uYWxsb3dNaW51cyAmJiAoXCItXCIgPT09IGUgfHwgZSA9PT0gbi5uZWdhdGlvblN5bWJvbC5mcm9udCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiLVwiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcjogZnVuY3Rpb24oZSwgdCwgYSwgaSwgbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4uYWxsb3dNaW51cyAmJiBlID09PSBuLm5lZ2F0aW9uU3ltYm9sLmJhY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlVmFsaWRhdGlvbjogZnVuY3Rpb24oZSwgdCwgYSwgaSwgbiwgciwgbywgcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghMSAhPT0gbi5fX2ZpbmFuY2VJbnB1dCAmJiBhID09PSBuLnJhZGl4UG9pbnQpIHJldHVybiAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobCA9IG4uc2hvcnRjdXRzICYmIG4uc2hvcnRjdXRzW2FdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsLmxlbmd0aCA+IDEpIGZvciAodmFyIHUgPSBbXSwgYyA9IDA7IGMgPCBsLmxlbmd0aDsgYysrKSB1LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiB0ICsgYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IGxbY10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpY3Q6ICExXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0OiB1XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwID0gZS5pbmRleE9mKG4ucmFkaXhQb2ludCksIGggPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID0gZnVuY3Rpb24oZSwgdCwgYSwgaSwgbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbi5fcmFkaXhEYW5jZSAmJiBuLm51bWVyaWNJbnB1dCAmJiB0ICE9PSBuLm5lZ2F0aW9uU3ltYm9sLmJhY2sgJiYgZSA8PSBhICYmIChhID4gMCB8fCB0ID09IG4ucmFkaXhQb2ludCkgJiYgKHZvaWQgMCA9PT0gaS52YWxpZFBvc2l0aW9uc1tlIC0gMV0gfHwgaS52YWxpZFBvc2l0aW9uc1tlIC0gMV0uaW5wdXQgIT09IG4ubmVnYXRpb25TeW1ib2wuYmFjaykgJiYgKGUgLT0gMSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0odCwgYSwgcCwgciwgbiksIFwiLVwiID09PSBhIHx8IGEgPT09IG4ubmVnYXRpb25TeW1ib2wuZnJvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEwICE9PSBuLmFsbG93TWludXMpIHJldHVybiAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHYgPSAhMSwgbSA9IGQoXCIrXCIsIHIpLCBnID0gZChcIi1cIiwgcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMSAhPT0gbSAmJiAodiA9IFsgbSwgZyBdKSwgITEgIT09IHYgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmU6IHYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJldDogaCAtIG4ubmVnYXRpb25TeW1ib2wuYmFjay5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydDogWyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiBmLmNhbGwodGhpcywgXCIrXCIsIHIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IG4ubmVnYXRpb25TeW1ib2wuZnJvbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUlzVmFsaWQ6ICEwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiBmLmNhbGwodGhpcywgXCItXCIsIHIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM6IG4ubmVnYXRpb25TeW1ib2wuYmFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tSXNWYWxpZDogdm9pZCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXJldDogaCArIG4ubmVnYXRpb25TeW1ib2wuYmFjay5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPT09IG4uZ3JvdXBTZXBhcmF0b3IpIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmV0OiBoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocykgcmV0dXJuICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtMSAhPT0gcCAmJiAhMCA9PT0gbi5fcmFkaXhEYW5jZSAmJiAhMSA9PT0gaSAmJiBhID09PSBuLnJhZGl4UG9pbnQgJiYgdm9pZCAwICE9PSBuLmRpZ2l0cyAmJiAoaXNOYU4obi5kaWdpdHMpIHx8IHBhcnNlSW50KG4uZGlnaXRzKSA+IDApICYmIHAgIT09IHQpIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmV0OiBuLl9yYWRpeERhbmNlICYmIHQgPT09IHAgLSAxID8gcCArIDEgOiBwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoITEgPT09IG4uX19maW5hbmNlSW5wdXQpIGlmIChpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLmRpZ2l0c09wdGlvbmFsKSByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV3cml0ZVBvc2l0aW9uOiBvLmVuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW4uZGlnaXRzT3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvLmJlZ2luID4gcCAmJiBvLmVuZCA8PSBwKSByZXR1cm4gYSA9PT0gbi5yYWRpeFBvaW50ID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3M6IHAgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBcIjBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUlzVmFsaWQ6ICEwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXdyaXRlUG9zaXRpb246IHBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV3cml0ZVBvc2l0aW9uOiBwICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvLmJlZ2luIDwgcCkgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXdyaXRlUG9zaXRpb246IG8uYmVnaW4gLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbi5zaG93TWFza09uSG92ZXIgJiYgIW4uc2hvd01hc2tPbkZvY3VzICYmICFuLmRpZ2l0c09wdGlvbmFsICYmIG4uZGlnaXRzID4gMCAmJiBcIlwiID09PSB0aGlzLl9fdmFsdWVHZXQuY2FsbCh0aGlzLmVsKSkgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV3cml0ZVBvc2l0aW9uOiBwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXdyaXRlUG9zaXRpb246IHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RWYWxpZGF0aW9uOiBmdW5jdGlvbihlLCB0LCBhLCBpLCBuLCByLCBvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCExID09PSBpKSByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobykgcmV0dXJuICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSBuLm1pbiB8fCBudWxsICE9PSBuLm1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IG4ub25Vbk1hc2soZS5zbGljZSgpLnJldmVyc2UoKS5qb2luKFwiXCIpLCB2b2lkIDAsIGwuZXh0ZW5kKHt9LCBuLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm1hc2tBc051bWJlcjogITBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gbi5taW4gJiYgcyA8IG4ubWluICYmIChzLnRvU3RyaW5nKCkubGVuZ3RoID4gbi5taW4udG9TdHJpbmcoKS5sZW5ndGggfHwgcyA8IDApKSByZXR1cm4gITE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSBuLm1heCAmJiBzID4gbi5tYXgpIHJldHVybiAhIW4uU2V0TWF4T25PdmVyZmxvdyAmJiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoRnJvbUJ1ZmZlcjogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXI6IGMobi5tYXgudG9TdHJpbmcoKS5yZXBsYWNlKFwiLlwiLCBuLnJhZGl4UG9pbnQpLnNwbGl0KFwiXCIpLCBuLmRpZ2l0cywgbikucmV2ZXJzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uVW5NYXNrOiBmdW5jdGlvbihlLCB0LCBhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFwiXCIgPT09IHQgJiYgITAgPT09IGEubnVsbGFibGUpIHJldHVybiB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gZS5yZXBsYWNlKGEucHJlZml4LCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSA9IChpID0gaS5yZXBsYWNlKGEuc3VmZml4LCBcIlwiKSkucmVwbGFjZShuZXcgUmVnRXhwKCgwLCByLmRlZmF1bHQpKGEuZ3JvdXBTZXBhcmF0b3IpLCBcImdcIiksIFwiXCIpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlwiICE9PSBhLnBsYWNlaG9sZGVyLmNoYXJBdCgwKSAmJiAoaSA9IGkucmVwbGFjZShuZXcgUmVnRXhwKGEucGxhY2Vob2xkZXIuY2hhckF0KDApLCBcImdcIiksIFwiMFwiKSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEudW5tYXNrQXNOdW1iZXIgPyAoXCJcIiAhPT0gYS5yYWRpeFBvaW50ICYmIC0xICE9PSBpLmluZGV4T2YoYS5yYWRpeFBvaW50KSAmJiAoaSA9IGkucmVwbGFjZShyLmRlZmF1bHQuY2FsbCh0aGlzLCBhLnJhZGl4UG9pbnQpLCBcIi5cIikpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gKGkgPSBpLnJlcGxhY2UobmV3IFJlZ0V4cChcIl5cIiArICgwLCByLmRlZmF1bHQpKGEubmVnYXRpb25TeW1ib2wuZnJvbnQpKSwgXCItXCIpKS5yZXBsYWNlKG5ldyBSZWdFeHAoKDAsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuZGVmYXVsdCkoYS5uZWdhdGlvblN5bWJvbC5iYWNrKSArIFwiJFwiKSwgXCJcIiksIE51bWJlcihpKSkgOiBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ29tcGxldGU6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9ICh0Lm51bWVyaWNJbnB1dCA/IGUuc2xpY2UoKS5yZXZlcnNlKCkgOiBlKS5qb2luKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhID0gKGEgPSAoYSA9IChhID0gKGEgPSBhLnJlcGxhY2UobmV3IFJlZ0V4cChcIl5cIiArICgwLCByLmRlZmF1bHQpKHQubmVnYXRpb25TeW1ib2wuZnJvbnQpKSwgXCItXCIpKS5yZXBsYWNlKG5ldyBSZWdFeHAoKDAsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuZGVmYXVsdCkodC5uZWdhdGlvblN5bWJvbC5iYWNrKSArIFwiJFwiKSwgXCJcIikpLnJlcGxhY2UodC5wcmVmaXgsIFwiXCIpKS5yZXBsYWNlKHQuc3VmZml4LCBcIlwiKSkucmVwbGFjZShuZXcgUmVnRXhwKCgwLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmRlZmF1bHQpKHQuZ3JvdXBTZXBhcmF0b3IpICsgXCIoWzAtOV17M30pXCIsIFwiZ1wiKSwgXCIkMVwiKSwgXCIsXCIgPT09IHQucmFkaXhQb2ludCAmJiAoYSA9IGEucmVwbGFjZSgoMCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgci5kZWZhdWx0KSh0LnJhZGl4UG9pbnQpLCBcIi5cIikpLCBpc0Zpbml0ZShhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkJlZm9yZU1hc2s6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHQucmFkaXhQb2ludCB8fCBcIixcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0Zpbml0ZSh0LmRpZ2l0cykgJiYgKHQuZGlnaXRzID0gcGFyc2VJbnQodC5kaWdpdHMpKSwgXCJudW1iZXJcIiAhPSB0eXBlb2YgZSAmJiBcIm51bWJlclwiICE9PSB0LmlucHV0VHlwZSB8fCBcIlwiID09PSBhIHx8IChlID0gZS50b1N0cmluZygpLnJlcGxhY2UoXCIuXCIsIGEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IFwiLVwiID09PSBlLmNoYXJBdCgwKSB8fCBlLmNoYXJBdCgwKSA9PT0gdC5uZWdhdGlvblN5bWJvbC5mcm9udCwgbiA9IGUuc3BsaXQoYSksIG8gPSBuWzBdLnJlcGxhY2UoL1teXFwtMC05XS9nLCBcIlwiKSwgcyA9IG4ubGVuZ3RoID4gMSA/IG5bMV0ucmVwbGFjZSgvW14wLTldL2csIFwiXCIpIDogXCJcIiwgbCA9IG4ubGVuZ3RoID4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gbyArIChcIlwiICE9PSBzID8gYSArIHMgOiBzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFwiXCIgIT09IGEgJiYgKHUgPSB0LmRpZ2l0c09wdGlvbmFsID8gdC5kaWdpdHMgPCBzLmxlbmd0aCA/IHQuZGlnaXRzIDogcy5sZW5ndGggOiB0LmRpZ2l0cywgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcIiAhPT0gcyB8fCAhdC5kaWdpdHNPcHRpb25hbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGYgPSBNYXRoLnBvdygxMCwgdSB8fCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IGUucmVwbGFjZSgoMCwgci5kZWZhdWx0KShhKSwgXCIuXCIpLCBpc05hTihwYXJzZUZsb2F0KGUpKSB8fCAoZSA9ICh0LnJvdW5kaW5nRk4ocGFyc2VGbG9hdChlKSAqIGYpIC8gZikudG9GaXhlZCh1KSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gZS50b1N0cmluZygpLnJlcGxhY2UoXCIuXCIsIGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gdC5kaWdpdHMgJiYgLTEgIT09IGUuaW5kZXhPZihhKSAmJiAoZSA9IGUuc3Vic3RyaW5nKDAsIGUuaW5kZXhPZihhKSkpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsICE9PSB0Lm1pbiB8fCBudWxsICE9PSB0Lm1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IGUudG9TdHJpbmcoKS5yZXBsYWNlKGEsIFwiLlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCAhPT0gdC5taW4gJiYgZCA8IHQubWluID8gZSA9IHQubWluLnRvU3RyaW5nKCkucmVwbGFjZShcIi5cIiwgYSkgOiBudWxsICE9PSB0Lm1heCAmJiBkID4gdC5tYXggJiYgKGUgPSB0Lm1heC50b1N0cmluZygpLnJlcGxhY2UoXCIuXCIsIGEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgJiYgXCItXCIgIT09IGUuY2hhckF0KDApICYmIChlID0gXCItXCIgKyBlKSwgYyhlLnRvU3RyaW5nKCkuc3BsaXQoXCJcIiksIHUsIHQsIGwpLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb25CZWZvcmVXcml0ZTogZnVuY3Rpb24oZSwgdCwgYSwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG4oZSwgdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoITEgIT09IGkuX19maW5hbmNlSW5wdXQgfHwgdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBlLmluZGV4T2YoaS5yYWRpeFBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xICE9PSBhICYmIGUuc3BsaWNlKGEsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcIlwiICE9PSBpLmdyb3VwU2VwYXJhdG9yKSBmb3IgKDstMSAhPT0gKGEgPSBlLmluZGV4T2YoaS5ncm91cFNlcGFyYXRvcikpOyApIGUuc3BsaWNlKGEsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG8sIHMgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gbmV3IFJlZ0V4cChcIiheXCIgKyAoXCJcIiAhPT0gdC5uZWdhdGlvblN5bWJvbC5mcm9udCA/ICgwLCByLmRlZmF1bHQpKHQubmVnYXRpb25TeW1ib2wuZnJvbnQpICsgXCI/XCIgOiBcIlwiKSArICgwLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci5kZWZhdWx0KSh0LnByZWZpeCkgKyBcIikoLiopKFwiICsgKDAsIHIuZGVmYXVsdCkodC5zdWZmaXgpICsgKFwiXCIgIT0gdC5uZWdhdGlvblN5bWJvbC5iYWNrID8gKDAsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmRlZmF1bHQpKHQubmVnYXRpb25TeW1ib2wuYmFjaykgKyBcIj9cIiA6IFwiXCIpICsgXCIkKVwiKS5leGVjKGUuc2xpY2UoKS5yZXZlcnNlKCkuam9pbihcIlwiKSksIGkgPSBhID8gYVsyXSA6IFwiXCIsIG4gPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgJiYgKGkgPSBpLnNwbGl0KHQucmFkaXhQb2ludC5jaGFyQXQoMCkpWzBdLCBuID0gbmV3IFJlZ0V4cChcIl5bMFwiICsgdC5ncm91cFNlcGFyYXRvciArIFwiXSpcIikuZXhlYyhpKSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKCFuIHx8ICEoblswXS5sZW5ndGggPiAxIHx8IG5bMF0ubGVuZ3RoID4gMCAmJiBuWzBdLmxlbmd0aCA8IGkubGVuZ3RoKSkgJiYgbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KHQsIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzKSBmb3IgKHZhciB1ID0gdC5qb2luKFwiXCIpLmxhc3RJbmRleE9mKHNbMF0uc3BsaXQoXCJcIikucmV2ZXJzZSgpLmpvaW4oXCJcIikpIC0gKHNbMF0gPT0gcy5pbnB1dCA/IDAgOiAxKSwgZiA9IHNbMF0gPT0gcy5pbnB1dCA/IDEgOiAwLCBkID0gc1swXS5sZW5ndGggLSBmOyBkID4gMDsgZC0tKSBkZWxldGUgdGhpcy5tYXNrc2V0LnZhbGlkUG9zaXRpb25zW3UgKyBkXSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRbdSArIGRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlKSBzd2l0Y2ggKGUudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImJsdXJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjaGVja3ZhbFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCAhPT0gaS5taW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwID0gaS5vblVuTWFzayh0LnNsaWNlKCkucmV2ZXJzZSgpLmpvaW4oXCJcIiksIHZvaWQgMCwgbC5leHRlbmQoe30sIGksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm1hc2tBc051bWJlcjogITBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSBpLm1pbiAmJiBwIDwgaS5taW4pIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaEZyb21CdWZmZXI6ICEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcjogYyhpLm1pbi50b1N0cmluZygpLnJlcGxhY2UoXCIuXCIsIGkucmFkaXhQb2ludCkuc3BsaXQoXCJcIiksIGkuZGlnaXRzLCBpKS5yZXZlcnNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRbdC5sZW5ndGggLSAxXSA9PT0gaS5uZWdhdGlvblN5bWJvbC5mcm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGggPSBuZXcgUmVnRXhwKFwiKF5cIiArIChcIlwiICE9IGkubmVnYXRpb25TeW1ib2wuZnJvbnQgPyAoMCwgci5kZWZhdWx0KShpLm5lZ2F0aW9uU3ltYm9sLmZyb250KSArIFwiP1wiIDogXCJcIikgKyAoMCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmRlZmF1bHQpKGkucHJlZml4KSArIFwiKSguKikoXCIgKyAoMCwgci5kZWZhdWx0KShpLnN1ZmZpeCkgKyAoXCJcIiAhPSBpLm5lZ2F0aW9uU3ltYm9sLmJhY2sgPyAoMCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmRlZmF1bHQpKGkubmVnYXRpb25TeW1ib2wuYmFjaykgKyBcIj9cIiA6IFwiXCIpICsgXCIkKVwiKS5leGVjKG4odC5zbGljZSgpLCAhMCkucmV2ZXJzZSgpLmpvaW4oXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA9PSAoaCA/IGhbMl0gOiBcIlwiKSAmJiAobyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoRnJvbUJ1ZmZlcjogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyOiBbIDAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBcIlwiICE9PSBpLnJhZGl4UG9pbnQgJiYgdFswXSA9PT0gaS5yYWRpeFBvaW50ICYmIChvICYmIG8uYnVmZmVyID8gby5idWZmZXIuc2hpZnQoKSA6ICh0LnNoaWZ0KCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaEZyb21CdWZmZXI6ICEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyOiBuKHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkuZW5mb3JjZURpZ2l0c09uQmx1cikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHYgPSAobyA9IG8gfHwge30pICYmIG8uYnVmZmVyIHx8IHQuc2xpY2UoKS5yZXZlcnNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvLnJlZnJlc2hGcm9tQnVmZmVyID0gITAsIG8uYnVmZmVyID0gYyh2LCBpLmRpZ2l0cywgaSwgITApLnJldmVyc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbktleURvd246IGZ1bmN0aW9uKGUsIHQsIGEsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgciwgbyA9IGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY3RybEtleSkgc3dpdGNoIChlLmtleUNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugbi5kZWZhdWx0LlVQOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dG1hc2suX192YWx1ZVNldC5jYWxsKHRoaXMsIHBhcnNlRmxvYXQodGhpcy5pbnB1dG1hc2sudW5tYXNrZWR2YWx1ZSgpKSArIHBhcnNlSW50KGkuc3RlcCkpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby50cmlnZ2VyKFwic2V0dmFsdWVcIiksICExO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIG4uZGVmYXVsdC5ET1dOOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dG1hc2suX192YWx1ZVNldC5jYWxsKHRoaXMsIHBhcnNlRmxvYXQodGhpcy5pbnB1dG1hc2sudW5tYXNrZWR2YWx1ZSgpKSAtIHBhcnNlSW50KGkuc3RlcCkpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby50cmlnZ2VyKFwic2V0dmFsdWVcIiksICExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuc2hpZnRLZXkgJiYgKGUua2V5Q29kZSA9PT0gbi5kZWZhdWx0LkRFTEVURSB8fCBlLmtleUNvZGUgPT09IG4uZGVmYXVsdC5CQUNLU1BBQ0UgfHwgZS5rZXlDb2RlID09PSBuLmRlZmF1bHQuQkFDS1NQQUNFX1NBRkFSSSkgJiYgYS5iZWdpbiAhPT0gdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRbZS5rZXlDb2RlID09PSBuLmRlZmF1bHQuREVMRVRFID8gYS5iZWdpbiAtIDEgOiBhLmVuZF0gPT09IGkubmVnYXRpb25TeW1ib2wuZnJvbnQpIHJldHVybiByID0gdC5zbGljZSgpLnJldmVyc2UoKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXCIgIT09IGkubmVnYXRpb25TeW1ib2wuZnJvbnQgJiYgci5zaGlmdCgpLCBcIlwiICE9PSBpLm5lZ2F0aW9uU3ltYm9sLmJhY2sgJiYgci5wb3AoKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8udHJpZ2dlcihcInNldHZhbHVlXCIsIFsgci5qb2luKFwiXCIpLCBhLmJlZ2luIF0pLCAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEwID09PSBpLl9yYWRpeERhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IHQuaW5kZXhPZihpLnJhZGl4UG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkuZGlnaXRzT3B0aW9uYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gcykgcmV0dXJuIChyID0gdC5zbGljZSgpLnJldmVyc2UoKSkucG9wKCksIG8udHJpZ2dlcihcInNldHZhbHVlXCIsIFsgci5qb2luKFwiXCIpLCBhLmJlZ2luID49IHIubGVuZ3RoID8gci5sZW5ndGggOiBhLmJlZ2luIF0pLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoLTEgIT09IHMgJiYgKGEuYmVnaW4gPCBzIHx8IGEuZW5kIDwgcyB8fCBlLmtleUNvZGUgPT09IG4uZGVmYXVsdC5ERUxFVEUgJiYgYS5iZWdpbiA9PT0gcykpIHJldHVybiBhLmJlZ2luICE9PSBhLmVuZCB8fCBlLmtleUNvZGUgIT09IG4uZGVmYXVsdC5CQUNLU1BBQ0UgJiYgZS5rZXlDb2RlICE9PSBuLmRlZmF1bHQuQkFDS1NQQUNFX1NBRkFSSSB8fCBhLmJlZ2luKyssIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHIgPSB0LnNsaWNlKCkucmV2ZXJzZSgpKS5zcGxpY2Uoci5sZW5ndGggLSBhLmJlZ2luLCBhLmJlZ2luIC0gYS5lbmQgKyAxKSwgciA9IGMociwgaS5kaWdpdHMsIGkpLmpvaW4oXCJcIiksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby50cmlnZ2VyKFwic2V0dmFsdWVcIiwgWyByLCBhLmJlZ2luID49IHIubGVuZ3RoID8gcyArIDEgOiBhLmJlZ2luIF0pLCAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVuY3k6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwU2VwYXJhdG9yOiBcIixcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzOiBcIm51bWVyaWNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0czogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0c09wdGlvbmFsOiAhMVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkZWNpbWFsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogXCJudW1lcmljXCJcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgaW50ZWdlcjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXM6IFwibnVtZXJpY1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRtb2RlOiBcIm51bWVyaWNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0czogMFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwZXJjZW50YWdlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogXCJudW1lcmljXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXg6IDEwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeDogXCIgJVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXRzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dNaW51czogITFcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgaW5kaWFubnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzOiBcIm51bWVyaWNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIF9tYXNrOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiKFwiICsgZS5ncm91cFNlcGFyYXRvciArIFwiOTkpeyp8MX0oXCIgKyBlLmdyb3VwU2VwYXJhdG9yICsgXCI5OTkpezF8MX1cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cFNlcGFyYXRvcjogXCIsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpeFBvaW50OiBcIi5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIjBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0czogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0c09wdGlvbmFsOiAhMVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgOTM4MDogZnVuY3Rpb24oZSwgdCwgYSkge1xuICAgICAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogITBcbiAgICAgICAgICAgICAgICB9KSwgdC5kZWZhdWx0ID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgIHZhciBuID0gKChpID0gYSg4NzQxKSkgJiYgaS5fX2VzTW9kdWxlID8gaSA6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogaVxuICAgICAgICAgICAgICAgIH0pLmRlZmF1bHQgPyB3aW5kb3cgOiB7fTtcbiAgICAgICAgICAgICAgICB0LmRlZmF1bHQgPSBuO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDc3NjA6IGZ1bmN0aW9uKGUsIHQsIGEpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICEwXG4gICAgICAgICAgICAgICAgfSksIHQuYXBwbHlJbnB1dFZhbHVlID0gYywgdC5jbGVhck9wdGlvbmFsVGFpbCA9IGYsIHQuY2hlY2tWYWwgPSBkLCB0LkhhbmRsZU5hdGl2ZVBsYWNlaG9sZGVyID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGUgPyBlLmlucHV0bWFzayA6IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsLmllKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5pbnB1dG1hc2suX3ZhbHVlR2V0KCkgIT09IHQgJiYgKGUucGxhY2Vob2xkZXIgIT09IHQgfHwgXCJcIiA9PT0gZS5wbGFjZWhvbGRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IG8uZ2V0QnVmZmVyLmNhbGwoYSkuc2xpY2UoKSwgbiA9IGUuaW5wdXRtYXNrLl92YWx1ZUdldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuICE9PSB0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByID0gby5nZXRMYXN0VmFsaWRQb3NpdGlvbi5jYWxsKGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSA9PT0gciAmJiBuID09PSBvLmdldEJ1ZmZlclRlbXBsYXRlLmNhbGwoYSkuam9pbihcIlwiKSA/IGkgPSBbXSA6IC0xICE9PSByICYmIGYuY2FsbChhLCBpKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAoZSwgaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgZS5wbGFjZWhvbGRlciAhPT0gdCAmJiAoZS5wbGFjZWhvbGRlciA9IHQsIFwiXCIgPT09IGUucGxhY2Vob2xkZXIgJiYgZS5yZW1vdmVBdHRyaWJ1dGUoXCJwbGFjZWhvbGRlclwiKSk7XG4gICAgICAgICAgICAgICAgfSwgdC51bm1hc2tlZHZhbHVlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IGUgPyBlLmlucHV0bWFzayA6IHRoaXMsIGEgPSB0Lm9wdHMsIGkgPSB0Lm1hc2tzZXQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodm9pZCAwID09PSBlLmlucHV0bWFzaykgcmV0dXJuIGUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLmlucHV0bWFzayAmJiBlLmlucHV0bWFzay5yZWZyZXNoVmFsdWUgJiYgYyhlLCBlLmlucHV0bWFzay5fdmFsdWVHZXQoITApKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IFtdLCByID0gaS52YWxpZFBvc2l0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcyBpbiByKSByW3NdICYmIHJbc10ubWF0Y2ggJiYgKDEgIT0gcltzXS5tYXRjaC5zdGF0aWMgfHwgQXJyYXkuaXNBcnJheShpLm1ldGFkYXRhKSAmJiAhMCAhPT0gcltzXS5nZW5lcmF0ZWRJbnB1dCkgJiYgbi5wdXNoKHJbc10uaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IDAgPT09IG4ubGVuZ3RoID8gXCJcIiA6ICh0LmlzUlRMID8gbi5yZXZlcnNlKCkgOiBuKS5qb2luKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBhLm9uVW5NYXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdSA9ICh0LmlzUlRMID8gby5nZXRCdWZmZXIuY2FsbCh0KS5zbGljZSgpLnJldmVyc2UoKSA6IG8uZ2V0QnVmZmVyLmNhbGwodCkpLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBsID0gYS5vblVuTWFzay5jYWxsKHQsIHUsIGwsIGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsO1xuICAgICAgICAgICAgICAgIH0sIHQud3JpdGVCdWZmZXIgPSBwO1xuICAgICAgICAgICAgICAgIHZhciBpLCBuID0gKGkgPSBhKDQ1MjgpKSAmJiBpLl9fZXNNb2R1bGUgPyBpIDoge1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBpXG4gICAgICAgICAgICAgICAgfSwgciA9IGEoNDcxMyksIG8gPSBhKDg3MTEpLCBzID0gYSg3MjE1KSwgbCA9IGEoOTg0NSksIHUgPSBhKDYwMzApO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGMoZSwgdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IGUgPyBlLmlucHV0bWFzayA6IHRoaXMsIGkgPSBhLm9wdHM7XG4gICAgICAgICAgICAgICAgICAgIGUuaW5wdXRtYXNrLnJlZnJlc2hWYWx1ZSA9ICExLCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGkub25CZWZvcmVNYXNrICYmICh0ID0gaS5vbkJlZm9yZU1hc2suY2FsbChhLCB0LCBpKSB8fCB0KSwgXG4gICAgICAgICAgICAgICAgICAgIGQoZSwgITAsICExLCB0ID0gdC50b1N0cmluZygpLnNwbGl0KFwiXCIpKSwgYS51bmRvVmFsdWUgPSBhLl92YWx1ZUdldCghMCksIChpLmNsZWFyTWFza09uTG9zdEZvY3VzIHx8IGkuY2xlYXJJbmNvbXBsZXRlKSAmJiBlLmlucHV0bWFzay5fdmFsdWVHZXQoKSA9PT0gby5nZXRCdWZmZXJUZW1wbGF0ZS5jYWxsKGEpLmpvaW4oXCJcIikgJiYgLTEgPT09IG8uZ2V0TGFzdFZhbGlkUG9zaXRpb24uY2FsbChhKSAmJiBlLmlucHV0bWFzay5fdmFsdWVTZXQoXCJcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGYoZSkge1xuICAgICAgICAgICAgICAgICAgICBlLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHQsIGEgPSByLmdldE1hc2tUZW1wbGF0ZS5jYWxsKHRoaXMsICEwLCAwLCAhMCwgdm9pZCAwLCAhMCk7IHZvaWQgMCAhPT0gKHQgPSBhLnNoaWZ0KCkpOyApIGUucHVzaCh0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGQoZSwgdCwgYSwgaSwgbikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IGUgPyBlLmlucHV0bWFzayA6IHRoaXMsIGMgPSBsLm1hc2tzZXQsIGYgPSBsLm9wdHMsIGQgPSBsLmRlcGVuZGVuY3lMaWIsIGggPSBpLnNsaWNlKCksIHYgPSBcIlwiLCBtID0gLTEsIGcgPSB2b2lkIDAsIGsgPSBmLnNraXBPcHRpb25hbFBhcnRDaGFyYWN0ZXI7XG4gICAgICAgICAgICAgICAgICAgIGYuc2tpcE9wdGlvbmFsUGFydENoYXJhY3RlciA9IFwiXCIsIG8ucmVzZXRNYXNrU2V0LmNhbGwobCksIGMudGVzdHMgPSB7fSwgbSA9IGYucmFkaXhQb2ludCA/IG8uZGV0ZXJtaW5lTmV3Q2FyZXRQb3NpdGlvbi5jYWxsKGwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiAwXG4gICAgICAgICAgICAgICAgICAgIH0sICExLCAhMSA9PT0gZi5fX2ZpbmFuY2VJbnB1dCA/IFwicmFkaXhGb2N1c1wiIDogdm9pZCAwKS5iZWdpbiA6IDAsIGMucCA9IG0sIGwuY2FyZXRQb3MgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbjogbVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IFtdLCBiID0gbC5jYXJldFBvcztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGguZm9yRWFjaCgoZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gbmV3IGQuRXZlbnQoXCJfY2hlY2t2YWxcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS53aGljaCA9IGUudG9TdHJpbmcoKS5jaGFyQ29kZUF0KDApLCB2ICs9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBvLmdldExhc3RWYWxpZFBvc2l0aW9uLmNhbGwobCwgdm9pZCAwLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYSA9IHIuZ2V0TWFza1RlbXBsYXRlLmNhbGwobCwgITAsIDApLnNsaWNlKGUsIG8uc2Vla05leHQuY2FsbChsLCBlLCAhMSwgITEpKS5qb2luKFwiXCIpLnJlcGxhY2UoLycvZywgXCJcIiksIGkgPSBhLmluZGV4T2YodCk7IGkgPiAwICYmIFwiIFwiID09PSBhW2kgLSAxXTsgKSBpLS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuID0gMCA9PT0gaSAmJiAhby5pc01hc2suY2FsbChsLCBlKSAmJiAoci5nZXRUZXN0LmNhbGwobCwgZSkubWF0Y2gubmF0aXZlRGVmID09PSB0LmNoYXJBdCgwKSB8fCAhMCA9PT0gci5nZXRUZXN0LmNhbGwobCwgZSkubWF0Y2guc3RhdGljICYmIHIuZ2V0VGVzdC5jYWxsKGwsIGUpLm1hdGNoLm5hdGl2ZURlZiA9PT0gXCInXCIgKyB0LmNoYXJBdCgwKSB8fCBcIiBcIiA9PT0gci5nZXRUZXN0LmNhbGwobCwgZSkubWF0Y2gubmF0aXZlRGVmICYmIChyLmdldFRlc3QuY2FsbChsLCBlICsgMSkubWF0Y2gubmF0aXZlRGVmID09PSB0LmNoYXJBdCgwKSB8fCAhMCA9PT0gci5nZXRUZXN0LmNhbGwobCwgZSArIDEpLm1hdGNoLnN0YXRpYyAmJiByLmdldFRlc3QuY2FsbChsLCBlICsgMSkubWF0Y2gubmF0aXZlRGVmID09PSBcIidcIiArIHQuY2hhckF0KDApKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbiAmJiBpID4gMCAmJiAhby5pc01hc2suY2FsbChsLCBlLCAhMSwgITApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IG8uc2Vla05leHQuY2FsbChsLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwuY2FyZXRQb3MuYmVnaW4gPCBzICYmIChsLmNhcmV0UG9zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiBzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KG0sIHYpID8gKGcgPSB1LkV2ZW50SGFuZGxlcnMua2V5cHJlc3NFdmVudC5jYWxsKGwsIGksICEwLCAhMSwgYSwgbC5jYXJldFBvcy5iZWdpbikpICYmIChtID0gbC5jYXJldFBvcy5iZWdpbiArIDEsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBcIlwiKSA6IGcgPSB1LkV2ZW50SGFuZGxlcnMua2V5cHJlc3NFdmVudC5jYWxsKGwsIGksICEwLCAhMSwgYSwgbiArIDEpLCBnID8gKHZvaWQgMCAhPT0gZy5wb3MgJiYgYy52YWxpZFBvc2l0aW9uc1tnLnBvc10gJiYgITAgPT09IGMudmFsaWRQb3NpdGlvbnNbZy5wb3NdLm1hdGNoLnN0YXRpYyAmJiB2b2lkIDAgPT09IGMudmFsaWRQb3NpdGlvbnNbZy5wb3NdLmFsdGVybmF0aW9uICYmICh5LnB1c2goZy5wb3MpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsLmlzUlRMIHx8IChnLmZvcndhcmRQb3NpdGlvbiA9IGcucG9zICsgMSkpLCBwLmNhbGwobCwgdm9pZCAwLCBvLmdldEJ1ZmZlci5jYWxsKGwpLCBnLmZvcndhcmRQb3NpdGlvbiwgaSwgITEpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsLmNhcmV0UG9zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbjogZy5mb3J3YXJkUG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogZy5mb3J3YXJkUG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBiID0gbC5jYXJldFBvcykgOiB2b2lkIDAgPT09IGMudmFsaWRQb3NpdGlvbnNbdF0gJiYgaFt0XSA9PT0gci5nZXRQbGFjZWhvbGRlci5jYWxsKGwsIHQpICYmIG8uaXNNYXNrLmNhbGwobCwgdCwgITApID8gbC5jYXJldFBvcy5iZWdpbisrIDogbC5jYXJldFBvcyA9IGI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKSwgeS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeCwgUCwgRSA9IG8uc2Vla05leHQuY2FsbChsLCAtMSwgdm9pZCAwLCAhMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXMuaXNDb21wbGV0ZS5jYWxsKGwsIG8uZ2V0QnVmZmVyLmNhbGwobCkpICYmIHkubGVuZ3RoIDw9IEUgfHwgcy5pc0NvbXBsZXRlLmNhbGwobCwgby5nZXRCdWZmZXIuY2FsbChsKSkgJiYgeS5sZW5ndGggPiAwICYmIHkubGVuZ3RoICE9PSBFICYmIDAgPT09IHlbMF0pIGZvciAodmFyIFMgPSBFOyB2b2lkIDAgIT09ICh4ID0geS5zaGlmdCgpKTsgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF8gPSBuZXcgZC5FdmVudChcIl9jaGVja3ZhbFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKFAgPSBjLnZhbGlkUG9zaXRpb25zW3hdKS5nZW5lcmF0ZWRJbnB1dCA9ICEwLCBfLndoaWNoID0gUC5pbnB1dC5jaGFyQ29kZUF0KDApLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZyA9IHUuRXZlbnRIYW5kbGVycy5rZXlwcmVzc0V2ZW50LmNhbGwobCwgXywgITAsICExLCBhLCBTKSkgJiYgdm9pZCAwICE9PSBnLnBvcyAmJiBnLnBvcyAhPT0geCAmJiBjLnZhbGlkUG9zaXRpb25zW2cucG9zXSAmJiAhMCA9PT0gYy52YWxpZFBvc2l0aW9uc1tnLnBvc10ubWF0Y2guc3RhdGljKSB5LnB1c2goZy5wb3MpOyBlbHNlIGlmICghZykgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHQgJiYgcC5jYWxsKGwsIGUsIG8uZ2V0QnVmZmVyLmNhbGwobCksIGcgPyBnLmZvcndhcmRQb3NpdGlvbiA6IGwuY2FyZXRQb3MuYmVnaW4sIG4gfHwgbmV3IGQuRXZlbnQoXCJjaGVja3ZhbFwiKSwgbiAmJiBcImlucHV0XCIgPT09IG4udHlwZSAmJiBsLnVuZG9WYWx1ZSAhPT0gbC5fdmFsdWVHZXQoITApKSwgXG4gICAgICAgICAgICAgICAgICAgIGYuc2tpcE9wdGlvbmFsUGFydENoYXJhY3RlciA9IGs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHAoZSwgdCwgYSwgaSwgcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IGUgPyBlLmlucHV0bWFzayA6IHRoaXMsIHUgPSBsLm9wdHMsIGMgPSBsLmRlcGVuZGVuY3lMaWI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdS5vbkJlZm9yZVdyaXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZiA9IHUub25CZWZvcmVXcml0ZS5jYWxsKGwsIGksIHQsIGEsIHUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZi5yZWZyZXNoRnJvbUJ1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IGYucmVmcmVzaEZyb21CdWZmZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMucmVmcmVzaEZyb21CdWZmZXIuY2FsbChsLCAhMCA9PT0gZCA/IGQgOiBkLnN0YXJ0LCBkLmVuZCwgZi5idWZmZXIgfHwgdCksIHQgPSBvLmdldEJ1ZmZlci5jYWxsKGwsICEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAwICE9PSBhICYmIChhID0gdm9pZCAwICE9PSBmLmNhcmV0ID8gZi5jYXJldCA6IGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IGUgJiYgKGUuaW5wdXRtYXNrLl92YWx1ZVNldCh0LmpvaW4oXCJcIikpLCB2b2lkIDAgPT09IGEgfHwgdm9pZCAwICE9PSBpICYmIFwiYmx1clwiID09PSBpLnR5cGUgfHwgby5jYXJldC5jYWxsKGwsIGUsIGEsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAgIT09IGkgJiYgXCJrZXlkb3duXCIgPT09IGkudHlwZSAmJiAoaS5rZXlDb2RlID09PSBuLmRlZmF1bHQuREVMRVRFIHx8IGkua2V5Q29kZSA9PT0gbi5kZWZhdWx0LkJBQ0tTUEFDRSkpLCBcbiAgICAgICAgICAgICAgICAgICAgITAgPT09IHIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IGMoZSksIGggPSBlLmlucHV0bWFzay5fdmFsdWVHZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuaW5wdXRtYXNrLnNraXBJbnB1dEV2ZW50ID0gITAsIHAudHJpZ2dlcihcImlucHV0XCIpLCBzZXRUaW1lb3V0KChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID09PSBvLmdldEJ1ZmZlclRlbXBsYXRlLmNhbGwobCkuam9pbihcIlwiKSA/IHAudHJpZ2dlcihcImNsZWFyZWRcIikgOiAhMCA9PT0gcy5pc0NvbXBsZXRlLmNhbGwobCwgdCkgJiYgcC50cmlnZ2VyKFwiY29tcGxldGVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgMjM5NDogZnVuY3Rpb24oZSwgdCwgYSkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogITBcbiAgICAgICAgICAgICAgICB9KSwgdC5kZWZhdWx0ID0gdm9pZCAwLCBhKDcxNDkpLCBhKDMxOTQpO1xuICAgICAgICAgICAgICAgIHZhciBpID0gYSgxNTcpLCBuID0gbShhKDQ5NjMpKSwgciA9IG0oYSg5MzgwKSksIG8gPSBhKDIzOTEpLCBzID0gYSg0NzEzKSwgbCA9IGEoODcxMSksIHUgPSBhKDcyMTUpLCBjID0gYSg3NzYwKSwgZiA9IGEoOTcxNiksIGQgPSBtKGEoNzM5MikpLCBwID0gbShhKDM5NzYpKSwgaCA9IG0oYSg4NzQxKSk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdihlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAodiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgZTtcbiAgICAgICAgICAgICAgICAgICAgfSA6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIGUuY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBlICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBlO1xuICAgICAgICAgICAgICAgICAgICB9KShlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbShlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBlXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBnID0gci5kZWZhdWx0LmRvY3VtZW50LCBrID0gXCJfaW5wdXRtYXNrX29wdHNcIjtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB5KGUsIHQsIGEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGguZGVmYXVsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIHkpKSByZXR1cm4gbmV3IHkoZSwgdCwgYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcGVuZGVuY3lMaWIgPSBuLmRlZmF1bHQsIHRoaXMuZWwgPSB2b2lkIDAsIHRoaXMuZXZlbnRzID0ge30sIHRoaXMubWFza3NldCA9IHZvaWQgMCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAhMCAhPT0gYSAmJiAoXCJbb2JqZWN0IE9iamVjdF1cIiA9PT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpID8gdCA9IGUgOiAodCA9IHQgfHwge30sIFxuICAgICAgICAgICAgICAgICAgICAgICAgZSAmJiAodC5hbGlhcyA9IGUpKSwgdGhpcy5vcHRzID0gbi5kZWZhdWx0LmV4dGVuZCghMCwge30sIHRoaXMuZGVmYXVsdHMsIHQpLCB0aGlzLm5vTWFza3NDYWNoZSA9IHQgJiYgdm9pZCAwICE9PSB0LmRlZmluaXRpb25zLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlck9wdGlvbnMgPSB0IHx8IHt9LCBiKHRoaXMub3B0cy5hbGlhcywgdCwgdGhpcy5vcHRzKSksIHRoaXMucmVmcmVzaFZhbHVlID0gITEsIFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmRvVmFsdWUgPSB2b2lkIDAsIHRoaXMuJGVsID0gdm9pZCAwLCB0aGlzLnNraXBLZXlQcmVzc0V2ZW50ID0gITEsIHRoaXMuc2tpcElucHV0RXZlbnQgPSAhMSwgXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25FdmVudCA9ICExLCB0aGlzLmlnbm9yYWJsZSA9ICExLCB0aGlzLm1heExlbmd0aCwgdGhpcy5tb3VzZUVudGVyID0gITEsIFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbFBsYWNlaG9sZGVyID0gdm9pZCAwLCB0aGlzLmlzQ29tcG9zaW5nID0gITE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYihlLCB0LCBhKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpID0geS5wcm90b3R5cGUuYWxpYXNlc1tlXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPyAoaS5hbGlhcyAmJiBiKGkuYWxpYXMsIHZvaWQgMCwgYSksIG4uZGVmYXVsdC5leHRlbmQoITAsIGEsIGkpLCBuLmRlZmF1bHQuZXh0ZW5kKCEwLCBhLCB0KSwgXG4gICAgICAgICAgICAgICAgICAgICEwKSA6IChudWxsID09PSBhLm1hc2sgJiYgKGEubWFzayA9IGUpLCAhMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHkucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhQXR0cmlidXRlOiBcImRhdGEtaW5wdXRtYXNrXCIsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRzOiBwLmRlZmF1bHQsXG4gICAgICAgICAgICAgICAgICAgIGRlZmluaXRpb25zOiBkLmRlZmF1bHQsXG4gICAgICAgICAgICAgICAgICAgIGFsaWFzZXM6IHt9LFxuICAgICAgICAgICAgICAgICAgICBtYXNrc0NhY2hlOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0IGlzUlRMKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0cy5pc1JUTCB8fCB0aGlzLm9wdHMubnVtZXJpY0lucHV0O1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBtYXNrOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIiA9PSB0eXBlb2YgZSAmJiAoZSA9IGcuZ2V0RWxlbWVudEJ5SWQoZSkgfHwgZy5xdWVyeVNlbGVjdG9yQWxsKGUpKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAoZSA9IGUubm9kZU5hbWUgPyBbIGUgXSA6IEFycmF5LmlzQXJyYXkoZSkgPyBlIDogQXJyYXkuZnJvbShlKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSwgYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzID0gbi5kZWZhdWx0LmV4dGVuZCghMCwge30sIHQub3B0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uKGUsIHQsIGEsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbyh0LCBuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IFwiXCIgPT09IGkgPyB0IDogaSArIFwiLVwiICsgdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwgIT09IChuID0gdm9pZCAwICE9PSBuID8gbiA6IGUuZ2V0QXR0cmlidXRlKG8pKSAmJiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgbiAmJiAoMCA9PT0gdC5pbmRleE9mKFwib25cIikgPyBuID0gci5kZWZhdWx0W25dIDogXCJmYWxzZVwiID09PSBuID8gbiA9ICExIDogXCJ0cnVlXCIgPT09IG4gJiYgKG4gPSAhMCkpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbdF0gPSBuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoITAgPT09IHQuaW1wb3J0RGF0YUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzLCBsLCB1LCBjLCBmID0gZS5nZXRBdHRyaWJ1dGUoaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiAmJiBcIlwiICE9PSBmICYmIChmID0gZi5yZXBsYWNlKC8nL2csICdcIicpLCBsID0gSlNPTi5wYXJzZShcIntcIiArIGYgKyBcIn1cIikpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwpIGZvciAoYyBpbiB1ID0gdm9pZCAwLCBsKSBpZiAoXCJhbGlhc1wiID09PSBjLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gbFtjXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocyBpbiBvKFwiYWxpYXNcIiwgdSksIGEuYWxpYXMgJiYgYihhLmFsaWFzLCBhLCB0KSwgdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKSBmb3IgKGMgaW4gdSA9IHZvaWQgMCwgbCkgaWYgKGMudG9Mb3dlckNhc2UoKSA9PT0gcy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBsW2NdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbyhzLCB1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLmRlZmF1bHQuZXh0ZW5kKCEwLCB0LCBhKSwgKFwicnRsXCIgPT09IGUuZGlyIHx8IHQucmlnaHRBbGlnbikgJiYgKGUuc3R5bGUudGV4dEFsaWduID0gXCJyaWdodFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFwicnRsXCIgPT09IGUuZGlyIHx8IHQubnVtZXJpY0lucHV0KSAmJiAoZS5kaXIgPSBcImx0clwiLCBlLnJlbW92ZUF0dHJpYnV0ZShcImRpclwiKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuaXNSVEwgPSAhMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhKS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfShlLCBzLCBuLmRlZmF1bHQuZXh0ZW5kKCEwLCB7fSwgdC51c2VyT3B0aW9ucyksIHQuZGF0YUF0dHJpYnV0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGwgPSAoMCwgby5nZW5lcmF0ZU1hc2tTZXQpKHMsIHQubm9NYXNrc0NhY2hlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAwICE9PSBsICYmICh2b2lkIDAgIT09IGUuaW5wdXRtYXNrICYmIChlLmlucHV0bWFzay5vcHRzLmF1dG9Vbm1hc2sgPSAhMCwgZS5pbnB1dG1hc2sucmVtb3ZlKCkpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5pbnB1dG1hc2sgPSBuZXcgeSh2b2lkIDAsIHZvaWQgMCwgITApLCBlLmlucHV0bWFzay5vcHRzID0gcywgZS5pbnB1dG1hc2subm9NYXNrc0NhY2hlID0gdC5ub01hc2tzQ2FjaGUsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmlucHV0bWFzay51c2VyT3B0aW9ucyA9IG4uZGVmYXVsdC5leHRlbmQoITAsIHt9LCB0LnVzZXJPcHRpb25zKSwgZS5pbnB1dG1hc2suZWwgPSBlLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5pbnB1dG1hc2suJGVsID0gKDAsIG4uZGVmYXVsdCkoZSksIGUuaW5wdXRtYXNrLm1hc2tzZXQgPSBsLCBuLmRlZmF1bHQuZGF0YShlLCBrLCB0LnVzZXJPcHRpb25zKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkubWFzay5jYWxsKGUuaW5wdXRtYXNrKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpLCBlICYmIGVbMF0gJiYgZVswXS5pbnB1dG1hc2sgfHwgdGhpcztcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uOiBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIiA9PSB0eXBlb2YgZSA/IHRoaXMub3B0c1tlXSA6IFwib2JqZWN0XCIgPT09IHYoZSkgPyAobi5kZWZhdWx0LmV4dGVuZCh0aGlzLnVzZXJPcHRpb25zLCBlKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVsICYmICEwICE9PSB0ICYmIHRoaXMubWFzayh0aGlzLmVsKSwgdGhpcykgOiB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHVubWFza2VkdmFsdWU6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hc2tzZXQgPSB0aGlzLm1hc2tzZXQgfHwgKDAsIG8uZ2VuZXJhdGVNYXNrU2V0KSh0aGlzLm9wdHMsIHRoaXMubm9NYXNrc0NhY2hlKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICB2b2lkIDAgPT09IHRoaXMuZWwgfHwgdm9pZCAwICE9PSBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSAoXCJmdW5jdGlvblwiID09IHR5cGVvZiB0aGlzLm9wdHMub25CZWZvcmVNYXNrICYmIHRoaXMub3B0cy5vbkJlZm9yZU1hc2suY2FsbCh0aGlzLCBlLCB0aGlzLm9wdHMpIHx8IGUpLnNwbGl0KFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuY2hlY2tWYWwuY2FsbCh0aGlzLCB2b2lkIDAsICExLCAhMSwgdCksIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdGhpcy5vcHRzLm9uQmVmb3JlV3JpdGUgJiYgdGhpcy5vcHRzLm9uQmVmb3JlV3JpdGUuY2FsbCh0aGlzLCB2b2lkIDAsIGwuZ2V0QnVmZmVyLmNhbGwodGhpcyksIDAsIHRoaXMub3B0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy51bm1hc2tlZHZhbHVlLmNhbGwodGhpcywgdGhpcy5lbCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4uZGVmYXVsdC5kYXRhKHRoaXMuZWwsIGssIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gdGhpcy5vcHRzLmF1dG9Vbm1hc2sgPyAoMCwgYy51bm1hc2tlZHZhbHVlKSh0aGlzLmVsKSA6IHRoaXMuX3ZhbHVlR2V0KHRoaXMub3B0cy5hdXRvVW5tYXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlICE9PSBsLmdldEJ1ZmZlclRlbXBsYXRlLmNhbGwodGhpcykuam9pbihcIlwiKSA/IHRoaXMuX3ZhbHVlU2V0KGUsIHRoaXMub3B0cy5hdXRvVW5tYXNrKSA6IHRoaXMuX3ZhbHVlU2V0KFwiXCIpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLkV2ZW50UnVsZXIub2ZmKHRoaXMuZWwpLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMuZWwpLCBcInZhbHVlXCIpICYmIHRoaXMuX192YWx1ZUdldCAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5lbCwgXCJ2YWx1ZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogdGhpcy5fX3ZhbHVlR2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IHRoaXMuX192YWx1ZVNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pIDogZy5fX2xvb2t1cEdldHRlcl9fICYmIHRoaXMuZWwuX19sb29rdXBHZXR0ZXJfXyhcInZhbHVlXCIpICYmIHRoaXMuX192YWx1ZUdldCAmJiAodGhpcy5lbC5fX2RlZmluZUdldHRlcl9fKFwidmFsdWVcIiwgdGhpcy5fX3ZhbHVlR2V0KSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbC5fX2RlZmluZVNldHRlcl9fKFwidmFsdWVcIiwgdGhpcy5fX3ZhbHVlU2V0KSksIHRoaXMuZWwuaW5wdXRtYXNrID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWw7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGdldGVtcHR5bWFzazogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXNrc2V0ID0gdGhpcy5tYXNrc2V0IHx8ICgwLCBvLmdlbmVyYXRlTWFza1NldCkodGhpcy5vcHRzLCB0aGlzLm5vTWFza3NDYWNoZSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgbC5nZXRCdWZmZXJUZW1wbGF0ZS5jYWxsKHRoaXMpLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGhhc01hc2tlZFZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5vcHRzLmF1dG9Vbm1hc2s7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGlzQ29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFza3NldCA9IHRoaXMubWFza3NldCB8fCAoMCwgby5nZW5lcmF0ZU1hc2tTZXQpKHRoaXMub3B0cywgdGhpcy5ub01hc2tzQ2FjaGUpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHUuaXNDb21wbGV0ZS5jYWxsKHRoaXMsIGwuZ2V0QnVmZmVyLmNhbGwodGhpcykpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBnZXRtZXRhZGF0YTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXNrc2V0ID0gdGhpcy5tYXNrc2V0IHx8ICgwLCBvLmdlbmVyYXRlTWFza1NldCkodGhpcy5vcHRzLCB0aGlzLm5vTWFza3NDYWNoZSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0aGlzLm1hc2tzZXQubWV0YWRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSBzLmdldE1hc2tUZW1wbGF0ZS5jYWxsKHRoaXMsICEwLCAwLCAhMSkuam9pbihcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXNrc2V0Lm1ldGFkYXRhLmZvckVhY2goKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQubWFzayAhPT0gZSB8fCAoZSA9IHQsICExKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSksIGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXNrc2V0Lm1ldGFkYXRhO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXNrc2V0ID0gdGhpcy5tYXNrc2V0IHx8ICgwLCBvLmdlbmVyYXRlTWFza1NldCkodGhpcy5vcHRzLCB0aGlzLm5vTWFza3NDYWNoZSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdGhpcy5vcHRzLm9uQmVmb3JlTWFzayAmJiB0aGlzLm9wdHMub25CZWZvcmVNYXNrLmNhbGwodGhpcywgZSwgdGhpcy5vcHRzKSB8fCBlKS5zcGxpdChcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLmNoZWNrVmFsLmNhbGwodGhpcywgdm9pZCAwLCAhMCwgITEsIHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGUgPSB0aGlzLmlzUlRMID8gbC5nZXRCdWZmZXIuY2FsbCh0aGlzKS5zbGljZSgpLnJldmVyc2UoKS5qb2luKFwiXCIpIDogbC5nZXRCdWZmZXIuY2FsbCh0aGlzKS5qb2luKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYSA9IGwuZ2V0QnVmZmVyLmNhbGwodGhpcyksIGkgPSBsLmRldGVybWluZUxhc3RSZXF1aXJlZFBvc2l0aW9uLmNhbGwodGhpcyksIG4gPSBhLmxlbmd0aCAtIDE7IG4gPiBpICYmICFsLmlzTWFzay5jYWxsKHRoaXMsIG4pOyBuLS0pIDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLnNwbGljZShpLCBuICsgMSAtIGkpLCB1LmlzQ29tcGxldGUuY2FsbCh0aGlzLCBhKSAmJiBlID09PSAodGhpcy5pc1JUTCA/IGwuZ2V0QnVmZmVyLmNhbGwodGhpcykuc2xpY2UoKS5yZXZlcnNlKCkuam9pbihcIlwiKSA6IGwuZ2V0QnVmZmVyLmNhbGwodGhpcykuam9pbihcIlwiKSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXNrc2V0ID0gdGhpcy5tYXNrc2V0IHx8ICgwLCBvLmdlbmVyYXRlTWFza1NldCkodGhpcy5vcHRzLCB0aGlzLm5vTWFza3NDYWNoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIHRoaXMub3B0cy5vbkJlZm9yZU1hc2sgJiYgdGhpcy5vcHRzLm9uQmVmb3JlTWFzay5jYWxsKHRoaXMsIGUsIHRoaXMub3B0cykgfHwgZSkuc3BsaXQoXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLmNoZWNrVmFsLmNhbGwodGhpcywgdm9pZCAwLCAhMCwgITEsIGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSB0aGlzLmlzUlRMID8gbC5nZXRCdWZmZXIuY2FsbCh0aGlzKS5zbGljZSgpLnJldmVyc2UoKS5qb2luKFwiXCIpIDogbC5nZXRCdWZmZXIuY2FsbCh0aGlzKS5qb2luKFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IHRoaXMuZ2V0bWV0YWRhdGEoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSA6IGk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVsICYmICgwLCBuLmRlZmF1bHQpKHRoaXMuZWwpLnRyaWdnZXIoXCJzZXR2YWx1ZVwiLCBbIGUgXSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFuYWx5c2VNYXNrOiBvLmFuYWx5c2VNYXNrXG4gICAgICAgICAgICAgICAgfSwgeS5leHRlbmREZWZhdWx0cyA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgbi5kZWZhdWx0LmV4dGVuZCghMCwgeS5wcm90b3R5cGUuZGVmYXVsdHMsIGUpO1xuICAgICAgICAgICAgICAgIH0sIHkuZXh0ZW5kRGVmaW5pdGlvbnMgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgIG4uZGVmYXVsdC5leHRlbmQoITAsIHkucHJvdG90eXBlLmRlZmluaXRpb25zLCBlKTtcbiAgICAgICAgICAgICAgICB9LCB5LmV4dGVuZEFsaWFzZXMgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgIG4uZGVmYXVsdC5leHRlbmQoITAsIHkucHJvdG90eXBlLmFsaWFzZXMsIGUpO1xuICAgICAgICAgICAgICAgIH0sIHkuZm9ybWF0ID0gZnVuY3Rpb24oZSwgdCwgYSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geSh0KS5mb3JtYXQoZSwgYSk7XG4gICAgICAgICAgICAgICAgfSwgeS51bm1hc2sgPSBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB5KHQpLnVubWFza2VkdmFsdWUoZSk7XG4gICAgICAgICAgICAgICAgfSwgeS5pc1ZhbGlkID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geSh0KS5pc1ZhbGlkKGUpO1xuICAgICAgICAgICAgICAgIH0sIHkucmVtb3ZlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09IHR5cGVvZiBlICYmIChlID0gZy5nZXRFbGVtZW50QnlJZChlKSB8fCBnLnF1ZXJ5U2VsZWN0b3JBbGwoZSkpLCAoZSA9IGUubm9kZU5hbWUgPyBbIGUgXSA6IGUpLmZvckVhY2goKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuaW5wdXRtYXNrICYmIGUuaW5wdXRtYXNrLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSwgeS5zZXRWYWx1ZSA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgXCJzdHJpbmdcIiA9PSB0eXBlb2YgZSAmJiAoZSA9IGcuZ2V0RWxlbWVudEJ5SWQoZSkgfHwgZy5xdWVyeVNlbGVjdG9yQWxsKGUpKSwgKGUgPSBlLm5vZGVOYW1lID8gWyBlIF0gOiBlKS5mb3JFYWNoKChmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLmlucHV0bWFzayA/IGUuaW5wdXRtYXNrLnNldFZhbHVlKHQpIDogKDAsIG4uZGVmYXVsdCkoZSkudHJpZ2dlcihcInNldHZhbHVlXCIsIFsgdCBdKTtcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH0sIHkuZGVwZW5kZW5jeUxpYiA9IG4uZGVmYXVsdCwgci5kZWZhdWx0LklucHV0bWFzayA9IHk7XG4gICAgICAgICAgICAgICAgdmFyIHggPSB5O1xuICAgICAgICAgICAgICAgIHQuZGVmYXVsdCA9IHg7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgNTI5NjogZnVuY3Rpb24oZSwgdCwgYSkge1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGkoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGkgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGU7XG4gICAgICAgICAgICAgICAgICAgIH0gOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZSAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBlLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgZSAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgZTtcbiAgICAgICAgICAgICAgICAgICAgfSkoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBuID0gcChhKDkzODApKSwgciA9IHAoYSgyMzk0KSksIG8gPSBwKGEoODc0MSkpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHMoZSwgdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXQgfHwgXCJvYmplY3RcIiAhPT0gaSh0KSAmJiBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIHQgPyBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgICAgICAgICAgfShlKSA6IHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGwoZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgTWFwID8gbmV3IE1hcCA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChsID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bGwgPT09IGUgfHwgKGEgPSBlLCAtMSA9PT0gRnVuY3Rpb24udG9TdHJpbmcuY2FsbChhKS5pbmRleE9mKFwiW25hdGl2ZSBjb2RlXVwiKSkpIHJldHVybiBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodm9pZCAwICE9PSB0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuaGFzKGUpKSByZXR1cm4gdC5nZXQoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5zZXQoZSwgaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1KGUsIGFyZ3VtZW50cywgZCh0aGlzKS5jb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSwgZihpLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfSkoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHUoZSwgdCwgYSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHUgPSBjKCkgPyBSZWZsZWN0LmNvbnN0cnVjdCA6IGZ1bmN0aW9uKGUsIHQsIGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gWyBudWxsIF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpLnB1c2guYXBwbHkoaSwgdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IG5ldyAoRnVuY3Rpb24uYmluZC5hcHBseShlLCBpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSAmJiBmKG4sIGEucHJvdG90eXBlKSwgbjtcbiAgICAgICAgICAgICAgICAgICAgfSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYygpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFwidW5kZWZpbmVkXCIgPT0gdHlwZW9mIFJlZmxlY3QgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gITE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKSByZXR1cm4gITE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFByb3h5KSByZXR1cm4gITA7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCAoZnVuY3Rpb24oKSB7fSkpKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAhMDtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGYoZSwgdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGYgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuX19wcm90b19fID0gdCwgZTtcbiAgICAgICAgICAgICAgICAgICAgfSkoZSwgdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGQoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO1xuICAgICAgICAgICAgICAgICAgICB9KShlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gcChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlICYmIGUuX19lc01vZHVsZSA/IGUgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBlXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBoID0gbi5kZWZhdWx0LmRvY3VtZW50O1xuICAgICAgICAgICAgICAgIGlmIChvLmRlZmF1bHQgJiYgaCAmJiBoLmhlYWQgJiYgaC5oZWFkLmF0dGFjaFNoYWRvdyAmJiBuLmRlZmF1bHQuY3VzdG9tRWxlbWVudHMgJiYgdm9pZCAwID09PSBuLmRlZmF1bHQuY3VzdG9tRWxlbWVudHMuZ2V0KFwiaW5wdXQtbWFza1wiKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICFmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgdCAmJiBudWxsICE9PSB0KSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHQgJiYgdC5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIHQgJiYgZihlLCB0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0obiwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCwgYSwgaSA9ICh0ID0gbiwgYSA9IGMoKSwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGUsIGkgPSBkKHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuID0gZCh0aGlzKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFJlZmxlY3QuY29uc3RydWN0KGksIGFyZ3VtZW50cywgbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGUgPSBpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHModGhpcywgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG4oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZSBpbnN0YW5jZW9mIHQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0odGhpcywgbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSAoZSA9IGkuY2FsbCh0aGlzKSkuZ2V0QXR0cmlidXRlTmFtZXMoKSwgYSA9IGUuYXR0YWNoU2hhZG93KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogXCJjbG9zZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBvID0gaC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcyBpbiBvLnR5cGUgPSBcInRleHRcIiwgYS5hcHBlbmRDaGlsZChvKSwgdCkgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHMpICYmIG8uc2V0QXR0cmlidXRlKHRbc10sIGUuZ2V0QXR0cmlidXRlKHRbc10pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IG5ldyByLmRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGwuZGF0YUF0dHJpYnV0ZSA9IFwiXCIsIGwubWFzayhvKSwgby5pbnB1dG1hc2suc2hhZG93Um9vdCA9IGEsIGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICAgICAgICAgICAgfShsKEhUTUxFbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgICAgIG4uZGVmYXVsdC5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJpbnB1dC1tYXNrXCIsIHYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAyMzkxOiBmdW5jdGlvbihlLCB0LCBhKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAhMFxuICAgICAgICAgICAgICAgIH0pLCB0LmdlbmVyYXRlTWFza1NldCA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGE7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG4oZSwgYSwgbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIsIG8sIHMgPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSBlICYmIFwiXCIgIT09IGUgfHwgKChzID0gbnVsbCAhPT0gbi5yZWdleCkgPyBlID0gKGUgPSBuLnJlZ2V4KS5yZXBsYWNlKC9eKFxcXikoLiopKFxcJCkkLywgXCIkMlwiKSA6IChzID0gITAsIFxuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IFwiLipcIikpLCAxID09PSBlLmxlbmd0aCAmJiAhMSA9PT0gbi5ncmVlZHkgJiYgMCAhPT0gbi5yZXBlYXQgJiYgKG4ucGxhY2Vob2xkZXIgPSBcIlwiKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBuLnJlcGVhdCA+IDAgfHwgXCIqXCIgPT09IG4ucmVwZWF0IHx8IFwiK1wiID09PSBuLnJlcGVhdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsID0gXCIqXCIgPT09IG4ucmVwZWF0ID8gMCA6IFwiK1wiID09PSBuLnJlcGVhdCA/IDEgOiBuLnJlcGVhdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gbi5ncm91cG1hcmtlclswXSArIGUgKyBuLmdyb3VwbWFya2VyWzFdICsgbi5xdWFudGlmaWVybWFya2VyWzBdICsgbCArIFwiLFwiICsgbi5yZXBlYXQgKyBuLnF1YW50aWZpZXJtYXJrZXJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbyA9IHMgPyBcInJlZ2V4X1wiICsgbi5yZWdleCA6IG4ubnVtZXJpY0lucHV0ID8gZS5zcGxpdChcIlwiKS5yZXZlcnNlKCkuam9pbihcIlwiKSA6IGUsIFxuICAgICAgICAgICAgICAgICAgICAgICAgITEgIT09IG4ua2VlcFN0YXRpYyAmJiAobyA9IFwia3NfXCIgKyBvKSwgdm9pZCAwID09PSBJbnB1dG1hc2sucHJvdG90eXBlLm1hc2tzQ2FjaGVbb10gfHwgITAgPT09IHQgPyAociA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrOiBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tUb2tlbjogSW5wdXRtYXNrLnByb3RvdHlwZS5hbmFseXNlTWFzayhlLCBzLCBuKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZFBvc2l0aW9uczoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2J1ZmZlcjogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcjogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlczoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0xlbmd0aDogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdE9mZnNldDoge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sICEwICE9PSB0ICYmIChJbnB1dG1hc2sucHJvdG90eXBlLm1hc2tzQ2FjaGVbb10gPSByLCByID0gaS5kZWZhdWx0LmV4dGVuZCghMCwge30sIElucHV0bWFzay5wcm90b3R5cGUubWFza3NDYWNoZVtvXSkpKSA6IHIgPSBpLmRlZmF1bHQuZXh0ZW5kKCEwLCB7fSwgSW5wdXRtYXNrLnByb3RvdHlwZS5tYXNrc0NhY2hlW29dKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICByO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgZS5tYXNrICYmIChlLm1hc2sgPSBlLm1hc2soZSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlLm1hc2spKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5tYXNrLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsID09PSBlLmtlZXBTdGF0aWMgJiYgKGUua2VlcFN0YXRpYyA9ICEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA9IGUuZ3JvdXBtYXJrZXJbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChlLmlzUlRMID8gZS5tYXNrLnJldmVyc2UoKSA6IGUubWFzaykuZm9yRWFjaCgoZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmxlbmd0aCA+IDEgJiYgKHIgKz0gZS5ncm91cG1hcmtlclsxXSArIGUuYWx0ZXJuYXRvcm1hcmtlciArIGUuZ3JvdXBtYXJrZXJbMF0pLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAwICE9PSB0Lm1hc2sgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiB0Lm1hc2sgPyByICs9IHQubWFzayA6IHIgKz0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSksIG4ociArPSBlLmdyb3VwbWFya2VyWzFdLCBlLm1hc2ssIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZS5tYXNrID0gZS5tYXNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG51bGwgPT09IGUua2VlcFN0YXRpYyAmJiAoZS5rZWVwU3RhdGljID0gITEpO1xuICAgICAgICAgICAgICAgICAgICBhID0gZS5tYXNrICYmIHZvaWQgMCAhPT0gZS5tYXNrLm1hc2sgJiYgXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlLm1hc2subWFzayA/IG4oZS5tYXNrLm1hc2ssIGUubWFzaywgZSkgOiBuKGUubWFzaywgZS5tYXNrLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgICAgICAgICAgfSwgdC5hbmFseXNlTWFzayA9IGZ1bmN0aW9uKGUsIHQsIGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGksIHIsIG8sIHMsIGwsIHUsIGMgPSAvKD86Wz8qK118XFx7WzAtOSsqXSsoPzosWzAtOSsqXSopPyg/OlxcfFswLTkrKl0qKT9cXH0pfFteLj8qK14ke1tdKCl8XFxcXF0rfC4vZywgZiA9IC9cXFtcXF4/XT8oPzpbXlxcXFxcXF1dK3xcXFxcW1xcU1xcc10/KSpdP3xcXFxcKD86MCg/OlswLTNdWzAtN117MCwyfXxbNC03XVswLTddPyk/fFsxLTldWzAtOV0qfHhbMC05QS1GYS1mXXsyfXx1WzAtOUEtRmEtZl17NH18Y1tBLVphLXpdfFtcXFNcXHNdPyl8XFwoKD86XFw/Wzo9IV0/KT98KD86Wz8qK118XFx7WzAtOV0rKD86LFswLTldKik/XFx9KVxcPz98W14uPyorXiR7WygpfFxcXFxdK3wuL2csIGQgPSAhMSwgcCA9IG5ldyBuLmRlZmF1bHQsIGggPSBbXSwgdiA9IFtdLCBtID0gITE7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGcoZSwgaSwgbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbiA9IHZvaWQgMCAhPT0gbiA/IG4gOiBlLm1hdGNoZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBlLm1hdGNoZXNbbiAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQpIDAgPT09IGkuaW5kZXhPZihcIltcIikgfHwgZCAmJiAvXFxcXGR8XFxcXHN8XFxcXHddL2kudGVzdChpKSB8fCBcIi5cIiA9PT0gaSA/IGUubWF0Y2hlcy5zcGxpY2UobisrLCAwLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm46IG5ldyBSZWdFeHAoaSwgYS5jYXNpbmcgPyBcImlcIiA6IFwiXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYzogITEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxpdHk6ICExLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Jsb2NrTWFya2VyOiB2b2lkIDAgPT09IHIgPyBcIm1hc3RlclwiIDogci5kZWYgIT09IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaW5nOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZjogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZURlZjogaVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkgOiAoZCAmJiAoaSA9IGlbaS5sZW5ndGggLSAxXSksIGkuc3BsaXQoXCJcIikuZm9yRWFjaCgoZnVuY3Rpb24odCwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBlLm1hdGNoZXNbbiAtIDFdLCBlLm1hdGNoZXMuc3BsaWNlKG4rKywgMCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbjogL1thLXpdL2kudGVzdChhLnN0YXRpY0RlZmluaXRpb25TeW1ib2wgfHwgdCkgPyBuZXcgUmVnRXhwKFwiW1wiICsgKGEuc3RhdGljRGVmaW5pdGlvblN5bWJvbCB8fCB0KSArIFwiXVwiLCBhLmNhc2luZyA/IFwiaVwiIDogXCJcIikgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWM6ICEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25hbGl0eTogITEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Jsb2NrTWFya2VyOiB2b2lkIDAgPT09IHIgPyBcIm1hc3RlclwiIDogci5kZWYgIT09IHQgJiYgITAgIT09IHIuc3RhdGljLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbmc6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZjogYS5zdGF0aWNEZWZpbml0aW9uU3ltYm9sIHx8IHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB2b2lkIDAgIT09IGEuc3RhdGljRGVmaW5pdGlvblN5bWJvbCA/IHQgOiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZURlZjogKGQgPyBcIidcIiA6IFwiXCIpICsgdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkpKSwgZCA9ICExOyBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IGEuZGVmaW5pdGlvbnMgJiYgYS5kZWZpbml0aW9uc1tpXSB8fCBhLnVzZVByb3RvdHlwZURlZmluaXRpb25zICYmIElucHV0bWFzay5wcm90b3R5cGUuZGVmaW5pdGlvbnNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbyAmJiAhZCA/IGUubWF0Y2hlcy5zcGxpY2UobisrLCAwLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuOiBvLnZhbGlkYXRvciA/IFwic3RyaW5nXCIgPT0gdHlwZW9mIG8udmFsaWRhdG9yID8gbmV3IFJlZ0V4cChvLnZhbGlkYXRvciwgYS5jYXNpbmcgPyBcImlcIiA6IFwiXCIpIDogbmV3IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXN0ID0gby52YWxpZGF0b3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gOiBuZXcgUmVnRXhwKFwiLlwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljOiBvLnN0YXRpYyB8fCAhMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxpdHk6ICExLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdCbG9ja01hcmtlcjogdm9pZCAwID09PSByID8gXCJtYXN0ZXJcIiA6IHIuZGVmICE9PSAoby5kZWZpbml0aW9uU3ltYm9sIHx8IGkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbmc6IG8uY2FzaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWY6IG8uZGVmaW5pdGlvblN5bWJvbCB8fCBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogby5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRGVmOiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQ6IG8uZ2VuZXJhdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgOiAoZS5tYXRjaGVzLnNwbGljZShuKyssIDAsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm46IC9bYS16XS9pLnRlc3QoYS5zdGF0aWNEZWZpbml0aW9uU3ltYm9sIHx8IGkpID8gbmV3IFJlZ0V4cChcIltcIiArIChhLnN0YXRpY0RlZmluaXRpb25TeW1ib2wgfHwgaSkgKyBcIl1cIiwgYS5jYXNpbmcgPyBcImlcIiA6IFwiXCIpIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljOiAhMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uYWxpdHk6ICExLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdCbG9ja01hcmtlcjogdm9pZCAwID09PSByID8gXCJtYXN0ZXJcIiA6IHIuZGVmICE9PSBpICYmICEwICE9PSByLnN0YXRpYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzaW5nOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWY6IGEuc3RhdGljRGVmaW5pdGlvblN5bWJvbCB8fCBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdm9pZCAwICE9PSBhLnN0YXRpY0RlZmluaXRpb25TeW1ib2wgPyBpIDogdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVEZWY6IChkID8gXCInXCIgOiBcIlwiKSArIGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgZCA9ICExKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBrKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnKHMgPSBoW2gubGVuZ3RoIC0gMV0sIHIpLCBzLmlzQWx0ZXJuYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gaC5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgZSA9IDA7IGUgPCBsLm1hdGNoZXMubGVuZ3RoOyBlKyspIGwubWF0Y2hlc1tlXS5pc0dyb3VwICYmIChsLm1hdGNoZXNbZV0uaXNHcm91cCA9ICExKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaC5sZW5ndGggPiAwID8gKHMgPSBoW2gubGVuZ3RoIC0gMV0pLm1hdGNoZXMucHVzaChsKSA6IHAubWF0Y2hlcy5wdXNoKGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBnKHAsIHIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHkoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBuZXcgbi5kZWZhdWx0KCEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0Lm9wZW5Hcm91cCA9ICExLCB0Lm1hdGNoZXMgPSBlLCB0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG8gPSBoLnBvcCgpKS5vcGVuR3JvdXAgPSAhMSwgdm9pZCAwICE9PSBvKSBpZiAoaC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzID0gaFtoLmxlbmd0aCAtIDFdKS5tYXRjaGVzLnB1c2gobyksIHMuaXNBbHRlcm5hdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBoLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBlID0gMDsgZSA8IGwubWF0Y2hlcy5sZW5ndGg7IGUrKykgbC5tYXRjaGVzW2VdLmlzR3JvdXAgPSAhMSwgbC5tYXRjaGVzW2VdLmFsdGVybmF0b3JHcm91cCA9ICExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoLmxlbmd0aCA+IDAgPyAocyA9IGhbaC5sZW5ndGggLSAxXSkubWF0Y2hlcy5wdXNoKGwpIDogcC5tYXRjaGVzLnB1c2gobCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHAubWF0Y2hlcy5wdXNoKG8pOyBlbHNlIGsoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB4KGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gZS5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0LmlzUXVhbnRpZmllciAmJiAodCA9IHkoWyBlLnBvcCgpLCB0IF0pKSwgdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ICYmIChhLm9wdGlvbmFsbWFya2VyWzBdID0gdm9pZCAwLCBhLm9wdGlvbmFsbWFya2VyWzFdID0gdm9pZCAwKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICg7aSA9IHQgPyBmLmV4ZWMoZSkgOiBjLmV4ZWMoZSk7ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPSBpWzBdLCB0KSBzd2l0Y2ggKHIuY2hhckF0KDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCI/XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IFwiezAsMX1cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiK1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiKlwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBcIntcIiArIHIgKyBcIn1cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwifFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBoLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgUCA9IHkocC5tYXRjaGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUC5vcGVuR3JvdXAgPSAhMCwgaC5wdXNoKFApLCBwLm1hdGNoZXMgPSBbXSwgbSA9ICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkKSBrKCk7IGVsc2Ugc3dpdGNoIChyLmNoYXJBdCgwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiJFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiXlwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgfHwgaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCIoPz1cIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcIig/IVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiKD88PVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiKD88IVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgucHVzaChuZXcgbi5kZWZhdWx0KCEwKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBhLmVzY2FwZUNoYXI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9ICEwLCB0ICYmIGsoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIGEub3B0aW9uYWxtYXJrZXJbMV06XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgYS5ncm91cG1hcmtlclsxXTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBhLm9wdGlvbmFsbWFya2VyWzBdOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgucHVzaChuZXcgbi5kZWZhdWx0KCExLCAhMCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgYS5ncm91cG1hcmtlclswXTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoLnB1c2gobmV3IG4uZGVmYXVsdCghMCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgYS5xdWFudGlmaWVybWFya2VyWzBdOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBFID0gbmV3IG4uZGVmYXVsdCghMSwgITEsICEwKSwgUyA9IChyID0gci5yZXBsYWNlKC9be31dL2csIFwiXCIpKS5zcGxpdChcInxcIiksIF8gPSBTWzBdLnNwbGl0KFwiLFwiKSwgTSA9IGlzTmFOKF9bMF0pID8gX1swXSA6IHBhcnNlSW50KF9bMF0pLCB3ID0gMSA9PT0gXy5sZW5ndGggPyBNIDogaXNOYU4oX1sxXSkgPyBfWzFdIDogcGFyc2VJbnQoX1sxXSksIE8gPSBpc05hTihTWzFdKSA/IFNbMV0gOiBwYXJzZUludChTWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIipcIiAhPT0gTSAmJiBcIitcIiAhPT0gTSB8fCAoTSA9IFwiKlwiID09PSB3ID8gMCA6IDEpLCBFLnF1YW50aWZpZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogTSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiB3LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaXQ6IE9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBUID0gaC5sZW5ndGggPiAwID8gaFtoLmxlbmd0aCAtIDFdLm1hdGNoZXMgOiBwLm1hdGNoZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpID0gVC5wb3AoKSkuaXNBbHRlcm5hdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQucHVzaChpKSwgVCA9IGkubWF0Y2hlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEMgPSBuZXcgbi5kZWZhdWx0KCEwKSwgQSA9IFQucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQucHVzaChDKSwgVCA9IEMubWF0Y2hlcywgaSA9IEE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkuaXNHcm91cCB8fCAoaSA9IHkoWyBpIF0pKSwgVC5wdXNoKGkpLCBULnB1c2goRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBhLmFsdGVybmF0b3JtYXJrZXI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgRCA9IChzID0gaFtoLmxlbmd0aCAtIDFdKS5tYXRjaGVzW3MubWF0Y2hlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IHMub3Blbkdyb3VwICYmICh2b2lkIDAgPT09IEQubWF0Y2hlcyB8fCAhMSA9PT0gRC5pc0dyb3VwICYmICExID09PSBELmlzQWx0ZXJuYXRvcikgPyBoLnBvcCgpIDogeChzLm1hdGNoZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB1ID0geChwLm1hdGNoZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1LmlzQWx0ZXJuYXRvcikgaC5wdXNoKHUpOyBlbHNlIGlmICh1LmFsdGVybmF0b3JHcm91cCA/IChsID0gaC5wb3AoKSwgdS5hbHRlcm5hdG9yR3JvdXAgPSAhMSkgOiBsID0gbmV3IG4uZGVmYXVsdCghMSwgITEsICExLCAhMCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwubWF0Y2hlcy5wdXNoKHUpLCBoLnB1c2gobCksIHUub3Blbkdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUub3Blbkdyb3VwID0gITE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBCID0gbmV3IG4uZGVmYXVsdCghMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIuYWx0ZXJuYXRvckdyb3VwID0gITAsIGgucHVzaChCKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbSAmJiBiKCk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoO2gubGVuZ3RoID4gMDsgKSBvID0gaC5wb3AoKSwgcC5tYXRjaGVzLnB1c2gobyk7XG4gICAgICAgICAgICAgICAgICAgIHAubWF0Y2hlcy5sZW5ndGggPiAwICYmICghZnVuY3Rpb24gZShpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpICYmIGkubWF0Y2hlcyAmJiBpLm1hdGNoZXMuZm9yRWFjaCgoZnVuY3Rpb24obiwgcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvID0gaS5tYXRjaGVzW3IgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAwID09PSBvIHx8IHZvaWQgMCA9PT0gby5tYXRjaGVzIHx8ICExID09PSBvLmlzUXVhbnRpZmllcikgJiYgbiAmJiBuLmlzR3JvdXAgJiYgKG4uaXNHcm91cCA9ICExLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0IHx8IChnKG4sIGEuZ3JvdXBtYXJrZXJbMF0sIDApLCAhMCAhPT0gbi5vcGVuR3JvdXAgJiYgZyhuLCBhLmdyb3VwbWFya2VyWzFdKSkpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlKG4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICB9KHApLCB2LnB1c2gocCkpO1xuICAgICAgICAgICAgICAgICAgICAoYS5udW1lcmljSW5wdXQgfHwgYS5pc1JUTCkgJiYgZnVuY3Rpb24gZSh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIHQubWF0Y2hlcyA9IHQubWF0Y2hlcy5yZXZlcnNlKCksIHQubWF0Y2hlcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0Lm1hdGNoZXMsIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBwYXJzZUludChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodC5tYXRjaGVzW2ldLmlzUXVhbnRpZmllciAmJiB0Lm1hdGNoZXNbbiArIDFdICYmIHQubWF0Y2hlc1tuICsgMV0uaXNHcm91cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA9IHQubWF0Y2hlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5tYXRjaGVzLnNwbGljZShpLCAxKSwgdC5tYXRjaGVzLnNwbGljZShuICsgMSwgMCwgcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgMCAhPT0gdC5tYXRjaGVzW2ldLm1hdGNoZXMgPyB0Lm1hdGNoZXNbaV0gPSBlKHQubWF0Y2hlc1tpXSkgOiB0Lm1hdGNoZXNbaV0gPSAoKG8gPSB0Lm1hdGNoZXNbaV0pID09PSBhLm9wdGlvbmFsbWFya2VyWzBdID8gbyA9IGEub3B0aW9uYWxtYXJrZXJbMV0gOiBvID09PSBhLm9wdGlvbmFsbWFya2VyWzFdID8gbyA9IGEub3B0aW9uYWxtYXJrZXJbMF0gOiBvID09PSBhLmdyb3VwbWFya2VyWzBdID8gbyA9IGEuZ3JvdXBtYXJrZXJbMV0gOiBvID09PSBhLmdyb3VwbWFya2VyWzFdICYmIChvID0gYS5ncm91cG1hcmtlclswXSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG87XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgICAgICAgICAgfSh2WzBdKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB2YXIgaSA9IHIoYSg0OTYzKSksIG4gPSByKGEoOTY5NSkpO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHIoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZSAmJiBlLl9fZXNNb2R1bGUgPyBlIDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAxNTc6IGZ1bmN0aW9uKGUsIHQsIGEpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICEwXG4gICAgICAgICAgICAgICAgfSksIHQubWFzayA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IHRoaXMsIHQgPSB0aGlzLm9wdHMsIGEgPSB0aGlzLmVsLCBpID0gdGhpcy5kZXBlbmRlbmN5TGliO1xuICAgICAgICAgICAgICAgICAgICBzLkV2ZW50UnVsZXIub2ZmKGEpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZiA9IGZ1bmN0aW9uKHQsIGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidGV4dGFyZWFcIiAhPT0gdC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgJiYgYS5pZ25vcmFibGVzLnB1c2gobi5kZWZhdWx0LkVOVEVSKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsID0gdC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpLCB1ID0gXCJpbnB1dFwiID09PSB0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSAmJiBhLnN1cHBvcnRzSW5wdXRUeXBlLmluY2x1ZGVzKGwpIHx8IHQuaXNDb250ZW50RWRpdGFibGUgfHwgXCJ0ZXh0YXJlYVwiID09PSB0LnRhZ05hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdSkgaWYgKFwiaW5wdXRcIiA9PT0gdC50YWdOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgbCksIHUgPSBcInRleHRcIiA9PT0gYy50eXBlLCBjID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB1ID0gXCJwYXJ0aWFsXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gITEgIT09IHUgPyBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4sIGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gdSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRtYXNrID8gdGhpcy5pbnB1dG1hc2sub3B0cy5hdXRvVW5tYXNrID8gdGhpcy5pbnB1dG1hc2sudW5tYXNrZWR2YWx1ZSgpIDogLTEgIT09IHIuZ2V0TGFzdFZhbGlkUG9zaXRpb24uY2FsbChlKSB8fCAhMCAhPT0gYS5udWxsYWJsZSA/ICh0aGlzLmlucHV0bWFzay5zaGFkb3dSb290IHx8IHRoaXMub3duZXJEb2N1bWVudCkuYWN0aXZlRWxlbWVudCA9PT0gdGhpcyAmJiBhLmNsZWFyTWFza09uTG9zdEZvY3VzID8gKGUuaXNSVEwgPyBvLmNsZWFyT3B0aW9uYWxUYWlsLmNhbGwoZSwgci5nZXRCdWZmZXIuY2FsbChlKS5zbGljZSgpKS5yZXZlcnNlKCkgOiBvLmNsZWFyT3B0aW9uYWxUYWlsLmNhbGwoZSwgci5nZXRCdWZmZXIuY2FsbChlKS5zbGljZSgpKSkuam9pbihcIlwiKSA6IG4uY2FsbCh0aGlzKSA6IFwiXCIgOiBuLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGMoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsLmNhbGwodGhpcywgZSksIHRoaXMuaW5wdXRtYXNrICYmICgwLCBvLmFwcGx5SW5wdXRWYWx1ZSkodGhpcywgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdC5pbnB1dG1hc2suX192YWx1ZUdldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoITAgIT09IGEubm9WYWx1ZVBhdGNoaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmID0gT2JqZWN0LmdldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QuZ2V0UHJvdG90eXBlT2YodCksIFwidmFsdWVcIikgOiB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiAmJiBmLmdldCAmJiBmLnNldCA/IChuID0gZi5nZXQsIGwgPSBmLnNldCwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwidmFsdWVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IHUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldDogYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKSA6IFwiaW5wdXRcIiAhPT0gdC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgJiYgKG4gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dENvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgbCA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0Q29udGVudCA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwidmFsdWVcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IHUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldDogYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBkb2N1bWVudC5fX2xvb2t1cEdldHRlcl9fICYmIHQuX19sb29rdXBHZXR0ZXJfXyhcInZhbHVlXCIpICYmIChuID0gdC5fX2xvb2t1cEdldHRlcl9fKFwidmFsdWVcIiksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IHQuX19sb29rdXBTZXR0ZXJfXyhcInZhbHVlXCIpLCB0Ll9fZGVmaW5lR2V0dGVyX18oXCJ2YWx1ZVwiLCB1KSwgdC5fX2RlZmluZVNldHRlcl9fKFwidmFsdWVcIiwgYykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5pbnB1dG1hc2suX192YWx1ZUdldCA9IG4sIHQuaW5wdXRtYXNrLl9fdmFsdWVTZXQgPSBsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuaW5wdXRtYXNrLl92YWx1ZUdldCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmlzUlRMICYmICEwICE9PSB0ID8gbi5jYWxsKHRoaXMuZWwpLnNwbGl0KFwiXCIpLnJldmVyc2UoKS5qb2luKFwiXCIpIDogbi5jYWxsKHRoaXMuZWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0LmlucHV0bWFzay5fdmFsdWVTZXQgPSBmdW5jdGlvbih0LCBhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsLmNhbGwodGhpcy5lbCwgbnVsbCA9PSB0ID8gXCJcIiA6ICEwICE9PSBhICYmIGUuaXNSVEwgPyB0LnNwbGl0KFwiXCIpLnJldmVyc2UoKS5qb2luKFwiXCIpIDogdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHZvaWQgMCA9PT0gbiAmJiAobiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGwgPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkudmFsSG9va3MgJiYgKHZvaWQgMCA9PT0gaS52YWxIb29rc1t0XSB8fCAhMCAhPT0gaS52YWxIb29rc1t0XS5pbnB1dG1hc2twYXRjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IGkudmFsSG9va3NbdF0gJiYgaS52YWxIb29rc1t0XS5nZXQgPyBpLnZhbEhvb2tzW3RdLmdldCA6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgcyA9IGkudmFsSG9va3NbdF0gJiYgaS52YWxIb29rc1t0XS5zZXQgPyBpLnZhbEhvb2tzW3RdLnNldCA6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUudmFsdWUgPSB0LCBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaS52YWxIb29rc1t0XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodC5pbnB1dG1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodC5pbnB1dG1hc2sub3B0cy5hdXRvVW5tYXNrKSByZXR1cm4gdC5pbnB1dG1hc2sudW5tYXNrZWR2YWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gbih0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTEgIT09IHIuZ2V0TGFzdFZhbGlkUG9zaXRpb24uY2FsbChlLCB2b2lkIDAsIHZvaWQgMCwgdC5pbnB1dG1hc2subWFza3NldC52YWxpZFBvc2l0aW9ucykgfHwgITAgIT09IGEubnVsbGFibGUgPyBpIDogXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuKHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gcyhlLCB0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlLmlucHV0bWFzayAmJiAoMCwgby5hcHBseUlucHV0VmFsdWUpKGUsIHQpLCBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dG1hc2twYXRjaDogITBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KHQudHlwZSksIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuRXZlbnRSdWxlci5vbih0LCBcIm1vdXNlZW50ZXJcIiwgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdGhpcy5pbnB1dG1hc2suX3ZhbHVlR2V0KCEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ICE9PSAoZS5pc1JUTCA/IHIuZ2V0QnVmZmVyLmNhbGwoZSkucmV2ZXJzZSgpIDogci5nZXRCdWZmZXIuY2FsbChlKSkuam9pbihcIlwiKSAmJiAoMCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby5hcHBseUlucHV0VmFsdWUpKHRoaXMsIHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KHQpIDogdC5pbnB1dG1hc2sgPSB2b2lkIDAsIHU7XG4gICAgICAgICAgICAgICAgICAgIH0oYSwgdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghMSAhPT0gZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5vcmlnaW5hbFBsYWNlaG9sZGVyID0gYS5wbGFjZWhvbGRlciwgZS5tYXhMZW5ndGggPSB2b2lkIDAgIT09IGEgPyBhLm1heExlbmd0aCA6IHZvaWQgMCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAtMSA9PT0gZS5tYXhMZW5ndGggJiYgKGUubWF4TGVuZ3RoID0gdm9pZCAwKSwgXCJpbnB1dE1vZGVcIiBpbiBhICYmIG51bGwgPT09IGEuZ2V0QXR0cmlidXRlKFwiaW5wdXRtb2RlXCIpICYmIChhLmlucHV0TW9kZSA9IHQuaW5wdXRtb2RlLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuc2V0QXR0cmlidXRlKFwiaW5wdXRtb2RlXCIsIHQuaW5wdXRtb2RlKSksICEwID09PSBmICYmICh0LnNob3dNYXNrT25Gb2N1cyA9IHQuc2hvd01hc2tPbkZvY3VzICYmIC0xID09PSBbIFwiY2MtbnVtYmVyXCIsIFwiY2MtZXhwXCIgXS5pbmRleE9mKGEuYXV0b2NvbXBsZXRlKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBsLmlwaG9uZSAmJiAodC5pbnNlcnRNb2RlVmlzdWFsID0gITEpLCBzLkV2ZW50UnVsZXIub24oYSwgXCJzdWJtaXRcIiwgYy5FdmVudEhhbmRsZXJzLnN1Ym1pdEV2ZW50KSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBzLkV2ZW50UnVsZXIub24oYSwgXCJyZXNldFwiLCBjLkV2ZW50SGFuZGxlcnMucmVzZXRFdmVudCksIHMuRXZlbnRSdWxlci5vbihhLCBcImJsdXJcIiwgYy5FdmVudEhhbmRsZXJzLmJsdXJFdmVudCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgcy5FdmVudFJ1bGVyLm9uKGEsIFwiZm9jdXNcIiwgYy5FdmVudEhhbmRsZXJzLmZvY3VzRXZlbnQpLCBzLkV2ZW50UnVsZXIub24oYSwgXCJpbnZhbGlkXCIsIGMuRXZlbnRIYW5kbGVycy5pbnZhbGlkRXZlbnQpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHMuRXZlbnRSdWxlci5vbihhLCBcImNsaWNrXCIsIGMuRXZlbnRIYW5kbGVycy5jbGlja0V2ZW50KSwgcy5FdmVudFJ1bGVyLm9uKGEsIFwibW91c2VsZWF2ZVwiLCBjLkV2ZW50SGFuZGxlcnMubW91c2VsZWF2ZUV2ZW50KSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBzLkV2ZW50UnVsZXIub24oYSwgXCJtb3VzZWVudGVyXCIsIGMuRXZlbnRIYW5kbGVycy5tb3VzZWVudGVyRXZlbnQpLCBzLkV2ZW50UnVsZXIub24oYSwgXCJwYXN0ZVwiLCBjLkV2ZW50SGFuZGxlcnMucGFzdGVFdmVudCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgcy5FdmVudFJ1bGVyLm9uKGEsIFwiY3V0XCIsIGMuRXZlbnRIYW5kbGVycy5jdXRFdmVudCksIHMuRXZlbnRSdWxlci5vbihhLCBcImNvbXBsZXRlXCIsIHQub25jb21wbGV0ZSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgcy5FdmVudFJ1bGVyLm9uKGEsIFwiaW5jb21wbGV0ZVwiLCB0Lm9uaW5jb21wbGV0ZSksIHMuRXZlbnRSdWxlci5vbihhLCBcImNsZWFyZWRcIiwgdC5vbmNsZWFyZWQpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICEwICE9PSB0LmlucHV0RXZlbnRPbmx5ICYmIChzLkV2ZW50UnVsZXIub24oYSwgXCJrZXlkb3duXCIsIGMuRXZlbnRIYW5kbGVycy5rZXlkb3duRXZlbnQpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHMuRXZlbnRSdWxlci5vbihhLCBcImtleXByZXNzXCIsIGMuRXZlbnRIYW5kbGVycy5rZXlwcmVzc0V2ZW50KSwgcy5FdmVudFJ1bGVyLm9uKGEsIFwia2V5dXBcIiwgYy5FdmVudEhhbmRsZXJzLmtleXVwRXZlbnQpKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAobC5tb2JpbGUgfHwgdC5pbnB1dEV2ZW50T25seSkgJiYgYS5yZW1vdmVBdHRyaWJ1dGUoXCJtYXhMZW5ndGhcIiksIHMuRXZlbnRSdWxlci5vbihhLCBcImlucHV0XCIsIGMuRXZlbnRIYW5kbGVycy5pbnB1dEZhbGxCYWNrRXZlbnQpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHMuRXZlbnRSdWxlci5vbihhLCBcImNvbXBvc2l0aW9uZW5kXCIsIGMuRXZlbnRIYW5kbGVycy5jb21wb3NpdGlvbmVuZEV2ZW50KSksIHMuRXZlbnRSdWxlci5vbihhLCBcInNldHZhbHVlXCIsIGMuRXZlbnRIYW5kbGVycy5zZXRWYWx1ZUV2ZW50KSwgXG4gICAgICAgICAgICAgICAgICAgICAgICByLmdldEJ1ZmZlclRlbXBsYXRlLmNhbGwoZSkuam9pbihcIlwiKSwgZS51bmRvVmFsdWUgPSBlLl92YWx1ZUdldCghMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IChhLmlucHV0bWFzay5zaGFkb3dSb290IHx8IGEub3duZXJEb2N1bWVudCkuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcIlwiICE9PSBhLmlucHV0bWFzay5fdmFsdWVHZXQoITApIHx8ICExID09PSB0LmNsZWFyTWFza09uTG9zdEZvY3VzIHx8IGQgPT09IGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgby5hcHBseUlucHV0VmFsdWUpKGEsIGEuaW5wdXRtYXNrLl92YWx1ZUdldCghMCksIHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwID0gci5nZXRCdWZmZXIuY2FsbChlKS5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICExID09PSB1LmlzQ29tcGxldGUuY2FsbChlLCBwKSAmJiB0LmNsZWFySW5jb21wbGV0ZSAmJiByLnJlc2V0TWFza1NldC5jYWxsKGUpLCB0LmNsZWFyTWFza09uTG9zdEZvY3VzICYmIGQgIT09IGEgJiYgKC0xID09PSByLmdldExhc3RWYWxpZFBvc2l0aW9uLmNhbGwoZSkgPyBwID0gW10gOiBvLmNsZWFyT3B0aW9uYWxUYWlsLmNhbGwoZSwgcCkpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoITEgPT09IHQuY2xlYXJNYXNrT25Mb3N0Rm9jdXMgfHwgdC5zaG93TWFza09uRm9jdXMgJiYgZCA9PT0gYSB8fCBcIlwiICE9PSBhLmlucHV0bWFzay5fdmFsdWVHZXQoITApKSAmJiAoMCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgby53cml0ZUJ1ZmZlcikoYSwgcCksIGQgPT09IGEgJiYgci5jYXJldC5jYWxsKGUsIGEsIHIuc2Vla05leHQuY2FsbChlLCByLmdldExhc3RWYWxpZFBvc2l0aW9uLmNhbGwoZSkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdmFyIGksIG4gPSAoaSA9IGEoNDUyOCkpICYmIGkuX19lc01vZHVsZSA/IGkgOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGlcbiAgICAgICAgICAgICAgICB9LCByID0gYSg4NzExKSwgbyA9IGEoNzc2MCksIHMgPSBhKDk3MTYpLCBsID0gYSg5ODQ1KSwgdSA9IGEoNzIxNSksIGMgPSBhKDYwMzApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDk2OTU6IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICEwXG4gICAgICAgICAgICAgICAgfSksIHQuZGVmYXVsdCA9IGZ1bmN0aW9uKGUsIHQsIGEsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaGVzID0gW10sIHRoaXMub3Blbkdyb3VwID0gZSB8fCAhMSwgdGhpcy5hbHRlcm5hdG9yR3JvdXAgPSAhMSwgdGhpcy5pc0dyb3VwID0gZSB8fCAhMSwgXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNPcHRpb25hbCA9IHQgfHwgITEsIHRoaXMuaXNRdWFudGlmaWVyID0gYSB8fCAhMSwgdGhpcy5pc0FsdGVybmF0b3IgPSBpIHx8ICExLCBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWFudGlmaWVyID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiAxXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAzMTk0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXMgfHwgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgXCJpbmNsdWRlc1wiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVsbCA9PSB0aGlzKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcInRoaXNcIiBpcyBudWxsIG9yIG5vdCBkZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IE9iamVjdCh0aGlzKSwgaSA9IGEubGVuZ3RoID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT09IGkpIHJldHVybiAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwIHwgdCwgciA9IE1hdGgubWF4KG4gPj0gMCA/IG4gOiBpIC0gTWF0aC5hYnMobiksIDApOyByIDwgaTsgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFbcl0gPT09IGUpIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA3MTQ5OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBlKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChlID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBlO1xuICAgICAgICAgICAgICAgICAgICB9IDogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUgJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgZS5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIGUgIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIGU7XG4gICAgICAgICAgICAgICAgICAgIH0pKHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIE9iamVjdC5nZXRQcm90b3R5cGVPZiAmJiAoT2JqZWN0LmdldFByb3RvdHlwZU9mID0gXCJvYmplY3RcIiA9PT0gZShcInRlc3RcIi5fX3Byb3RvX18pID8gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5fX3Byb3RvX187XG4gICAgICAgICAgICAgICAgfSA6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUuY29uc3RydWN0b3IucHJvdG90eXBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDg3MTE6IGZ1bmN0aW9uKGUsIHQsIGEpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICEwXG4gICAgICAgICAgICAgICAgfSksIHQuY2FyZXQgPSBmdW5jdGlvbihlLCB0LCBhLCBpLCBuKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByLCBvID0gdGhpcywgcyA9IHRoaXMub3B0cztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCA9PT0gdCkgcmV0dXJuIFwic2VsZWN0aW9uU3RhcnRcIiBpbiBlICYmIFwic2VsZWN0aW9uRW5kXCIgaW4gZSA/ICh0ID0gZS5zZWxlY3Rpb25TdGFydCwgXG4gICAgICAgICAgICAgICAgICAgIGEgPSBlLnNlbGVjdGlvbkVuZCkgOiB3aW5kb3cuZ2V0U2VsZWN0aW9uID8gKHIgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuZ2V0UmFuZ2VBdCgwKSkuY29tbW9uQW5jZXN0b3JDb250YWluZXIucGFyZW50Tm9kZSAhPT0gZSAmJiByLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyICE9PSBlIHx8ICh0ID0gci5zdGFydE9mZnNldCwgXG4gICAgICAgICAgICAgICAgICAgIGEgPSByLmVuZE9mZnNldCkgOiBkb2N1bWVudC5zZWxlY3Rpb24gJiYgZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlICYmIChyID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCksIFxuICAgICAgICAgICAgICAgICAgICB0ID0gMCAtIHIuZHVwbGljYXRlKCkubW92ZVN0YXJ0KFwiY2hhcmFjdGVyXCIsIC1lLmlucHV0bWFzay5fdmFsdWVHZXQoKS5sZW5ndGgpLCBhID0gdCArIHIudGV4dC5sZW5ndGgpLCBcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46IGkgPyB0IDogdS5jYWxsKG8sIHQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBpID8gYSA6IHUuY2FsbChvLCBhKVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0KSAmJiAoYSA9IG8uaXNSVEwgPyB0WzBdIDogdFsxXSwgdCA9IG8uaXNSVEwgPyB0WzFdIDogdFswXSksIFxuICAgICAgICAgICAgICAgICAgICB2b2lkIDAgIT09IHQuYmVnaW4gJiYgKGEgPSBvLmlzUlRMID8gdC5iZWdpbiA6IHQuZW5kLCB0ID0gby5pc1JUTCA/IHQuZW5kIDogdC5iZWdpbiksIFxuICAgICAgICAgICAgICAgICAgICBcIm51bWJlclwiID09IHR5cGVvZiB0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ID0gaSA/IHQgOiB1LmNhbGwobywgdCksIGEgPSBcIm51bWJlclwiID09IHR5cGVvZiAoYSA9IGkgPyBhIDogdS5jYWxsKG8sIGEpKSA/IGEgOiB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGwgPSBwYXJzZUludCgoKGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cpLmdldENvbXB1dGVkU3R5bGUgPyAoZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdykuZ2V0Q29tcHV0ZWRTdHlsZShlLCBudWxsKSA6IGUuY3VycmVudFN0eWxlKS5mb250U2l6ZSkgKiBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuc2Nyb2xsTGVmdCA9IGwgPiBlLnNjcm9sbFdpZHRoID8gbCA6IDAsIGUuaW5wdXRtYXNrLmNhcmV0UG9zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiB0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogYVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcy5pbnNlcnRNb2RlVmlzdWFsICYmICExID09PSBzLmluc2VydE1vZGUgJiYgdCA9PT0gYSAmJiAobiB8fCBhKyspLCBlID09PSAoZS5pbnB1dG1hc2suc2hhZG93Um9vdCB8fCBlLm93bmVyRG9jdW1lbnQpLmFjdGl2ZUVsZW1lbnQpIGlmIChcInNldFNlbGVjdGlvblJhbmdlXCIgaW4gZSkgZS5zZXRTZWxlY3Rpb25SYW5nZSh0LCBhKTsgZWxzZSBpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSwgdm9pZCAwID09PSBlLmZpcnN0Q2hpbGQgfHwgbnVsbCA9PT0gZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuYXBwZW5kQ2hpbGQoYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0U3RhcnQoZS5maXJzdENoaWxkLCB0IDwgZS5pbnB1dG1hc2suX3ZhbHVlR2V0KCkubGVuZ3RoID8gdCA6IGUuaW5wdXRtYXNrLl92YWx1ZUdldCgpLmxlbmd0aCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuc2V0RW5kKGUuZmlyc3RDaGlsZCwgYSA8IGUuaW5wdXRtYXNrLl92YWx1ZUdldCgpLmxlbmd0aCA/IGEgOiBlLmlucHV0bWFzay5fdmFsdWVHZXQoKS5sZW5ndGgpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmNvbGxhcHNlKCEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLnJlbW92ZUFsbFJhbmdlcygpLCBmLmFkZFJhbmdlKHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGUuY3JlYXRlVGV4dFJhbmdlICYmICgociA9IGUuY3JlYXRlVGV4dFJhbmdlKCkpLmNvbGxhcHNlKCEwKSwgci5tb3ZlRW5kKFwiY2hhcmFjdGVyXCIsIGEpLCBcbiAgICAgICAgICAgICAgICAgICAgICAgIHIubW92ZVN0YXJ0KFwiY2hhcmFjdGVyXCIsIHQpLCByLnNlbGVjdCgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIHQuZGV0ZXJtaW5lTGFzdFJlcXVpcmVkUG9zaXRpb24gPSBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0LCBhLCByID0gdGhpcywgcyA9IHRoaXMubWFza3NldCwgbCA9IHRoaXMuZGVwZW5kZW5jeUxpYiwgdSA9IGkuZ2V0TWFza1RlbXBsYXRlLmNhbGwociwgITAsIG8uY2FsbChyKSwgITAsICEwKSwgYyA9IHUubGVuZ3RoLCBmID0gby5jYWxsKHIpLCBkID0ge30sIHAgPSBzLnZhbGlkUG9zaXRpb25zW2ZdLCBoID0gdm9pZCAwICE9PSBwID8gcC5sb2NhdG9yLnNsaWNlKCkgOiB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodCA9IGYgKyAxOyB0IDwgdS5sZW5ndGg7IHQrKykgYSA9IGkuZ2V0VGVzdFRlbXBsYXRlLmNhbGwociwgdCwgaCwgdCAtIDEpLCBoID0gYS5sb2NhdG9yLnNsaWNlKCksIFxuICAgICAgICAgICAgICAgICAgICBkW3RdID0gbC5leHRlbmQoITAsIHt9LCBhKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHYgPSBwICYmIHZvaWQgMCAhPT0gcC5hbHRlcm5hdGlvbiA/IHAubG9jYXRvcltwLmFsdGVybmF0aW9uXSA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh0ID0gYyAtIDE7IHQgPiBmICYmICgoKGEgPSBkW3RdKS5tYXRjaC5vcHRpb25hbGl0eSB8fCBhLm1hdGNoLm9wdGlvbmFsUXVhbnRpZmllciAmJiBhLm1hdGNoLm5ld0Jsb2NrTWFya2VyIHx8IHYgJiYgKHYgIT09IGRbdF0ubG9jYXRvcltwLmFsdGVybmF0aW9uXSAmJiAxICE9IGEubWF0Y2guc3RhdGljIHx8ICEwID09PSBhLm1hdGNoLnN0YXRpYyAmJiBhLmxvY2F0b3JbcC5hbHRlcm5hdGlvbl0gJiYgbi5jaGVja0FsdGVybmF0aW9uTWF0Y2guY2FsbChyLCBhLmxvY2F0b3JbcC5hbHRlcm5hdGlvbl0udG9TdHJpbmcoKS5zcGxpdChcIixcIiksIHYudG9TdHJpbmcoKS5zcGxpdChcIixcIikpICYmIFwiXCIgIT09IGkuZ2V0VGVzdHMuY2FsbChyLCB0KVswXS5kZWYpKSAmJiB1W3RdID09PSBpLmdldFBsYWNlaG9sZGVyLmNhbGwociwgdCwgYS5tYXRjaCkpOyB0LS0pIGMtLTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsOiBjLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmOiBkW2NdID8gZFtjXS5tYXRjaCA6IHZvaWQgMFxuICAgICAgICAgICAgICAgICAgICB9IDogYztcbiAgICAgICAgICAgICAgICB9LCB0LmRldGVybWluZU5ld0NhcmV0UG9zaXRpb24gPSBmdW5jdGlvbihlLCB0LCBhKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuID0gdGhpcywgdSA9IHRoaXMubWFza3NldCwgYyA9IHRoaXMub3B0cztcbiAgICAgICAgICAgICAgICAgICAgdCAmJiAobi5pc1JUTCA/IGUuZW5kID0gZS5iZWdpbiA6IGUuYmVnaW4gPSBlLmVuZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLmJlZ2luID09PSBlLmVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhID0gYSB8fCBjLnBvc2l0aW9uQ2FyZXRPbkNsaWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJub25lXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNlbGVjdFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IHIuY2FsbChuKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJpZ25vcmVcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmVuZCA9IGUuYmVnaW4gPSBsLmNhbGwobiwgby5jYWxsKG4pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwicmFkaXhGb2N1c1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcIlwiICE9PSBjLnJhZGl4UG9pbnQgJiYgMCAhPT0gYy5kaWdpdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdS52YWxpZFBvc2l0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgPT09IHRbZV0gfHwgdFtlXS5pbnB1dCA9PT0gaS5nZXRQbGFjZWhvbGRlci5jYWxsKG4sIGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgPCBsLmNhbGwobiwgLTEpKSByZXR1cm4gITA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSByLmNhbGwobikuaW5kZXhPZihjLnJhZGl4UG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtMSAhPT0gYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBvIGluIHQpIGlmICh0W29dICYmIGEgPCBvICYmIHRbb10uaW5wdXQgIT09IGkuZ2V0UGxhY2Vob2xkZXIuY2FsbChuLCBvKSkgcmV0dXJuICExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KGUuYmVnaW4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmID0gci5jYWxsKG4pLmpvaW4oXCJcIikuaW5kZXhPZihjLnJhZGl4UG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmVuZCA9IGUuYmVnaW4gPSBjLm51bWVyaWNJbnB1dCA/IGwuY2FsbChuLCBmKSA6IGY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gZS5iZWdpbiwgcCA9IG8uY2FsbChuLCBkLCAhMCksIGggPSBsLmNhbGwobiwgLTEgIT09IHAgfHwgcy5jYWxsKG4sIDApID8gcCA6IC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZCA8PSBoKSBlLmVuZCA9IGUuYmVnaW4gPSBzLmNhbGwobiwgZCwgITEsICEwKSA/IGQgOiBsLmNhbGwobiwgZCk7IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IHUudmFsaWRQb3NpdGlvbnNbcF0sIG0gPSBpLmdldFRlc3RUZW1wbGF0ZS5jYWxsKG4sIGgsIHYgPyB2Lm1hdGNoLmxvY2F0b3IgOiB2b2lkIDAsIHYpLCBnID0gaS5nZXRQbGFjZWhvbGRlci5jYWxsKG4sIGgsIG0ubWF0Y2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXCJcIiAhPT0gZyAmJiByLmNhbGwobilbaF0gIT09IGcgJiYgITAgIT09IG0ubWF0Y2gub3B0aW9uYWxRdWFudGlmaWVyICYmICEwICE9PSBtLm1hdGNoLm5ld0Jsb2NrTWFya2VyIHx8ICFzLmNhbGwobiwgaCwgYy5rZWVwU3RhdGljLCAhMCkgJiYgbS5tYXRjaC5kZWYgPT09IGcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrID0gbC5jYWxsKG4sIGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGQgPj0gayB8fCBkID09PSBoKSAmJiAoaCA9IGspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZW5kID0gZS5iZWdpbiA9IGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCB0LmdldEJ1ZmZlciA9IHIsIHQuZ2V0QnVmZmVyVGVtcGxhdGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSB0aGlzLm1hc2tzZXQ7XG4gICAgICAgICAgICAgICAgICAgIHZvaWQgMCA9PT0gZS5fYnVmZmVyICYmIChlLl9idWZmZXIgPSBpLmdldE1hc2tUZW1wbGF0ZS5jYWxsKHRoaXMsICExLCAxKSwgdm9pZCAwID09PSBlLmJ1ZmZlciAmJiAoZS5idWZmZXIgPSBlLl9idWZmZXIuc2xpY2UoKSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZS5fYnVmZmVyO1xuICAgICAgICAgICAgICAgIH0sIHQuZ2V0TGFzdFZhbGlkUG9zaXRpb24gPSBvLCB0LmlzTWFzayA9IHMsIHQucmVzZXRNYXNrU2V0ID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IHRoaXMubWFza3NldDtcbiAgICAgICAgICAgICAgICAgICAgdC5idWZmZXIgPSB2b2lkIDAsICEwICE9PSBlICYmICh0LnZhbGlkUG9zaXRpb25zID0ge30sIHQucCA9IDApO1xuICAgICAgICAgICAgICAgIH0sIHQuc2Vla05leHQgPSBsLCB0LnNlZWtQcmV2aW91cyA9IGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSB0aGlzLCBuID0gZSAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlIDw9IDApIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKDtuID4gMCAmJiAoITAgPT09IHQgJiYgKCEwICE9PSBpLmdldFRlc3QuY2FsbChhLCBuKS5tYXRjaC5uZXdCbG9ja01hcmtlciB8fCAhcy5jYWxsKGEsIG4sIHZvaWQgMCwgITApKSB8fCAhMCAhPT0gdCAmJiAhcy5jYWxsKGEsIG4sIHZvaWQgMCwgITApKTsgKSBuLS07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICAgICAgICAgIH0sIHQudHJhbnNsYXRlUG9zaXRpb24gPSB1O1xuICAgICAgICAgICAgICAgIHZhciBpID0gYSg0NzEzKSwgbiA9IGEoNzIxNSk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gcihlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdGhpcy5tYXNrc2V0O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAwICE9PSB0LmJ1ZmZlciAmJiAhMCAhPT0gZSB8fCAodC5idWZmZXIgPSBpLmdldE1hc2tUZW1wbGF0ZS5jYWxsKHRoaXMsICEwLCBvLmNhbGwodGhpcyksICEwKSwgXG4gICAgICAgICAgICAgICAgICAgIHZvaWQgMCA9PT0gdC5fYnVmZmVyICYmICh0Ll9idWZmZXIgPSB0LmJ1ZmZlci5zbGljZSgpKSksIHQuYnVmZmVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBvKGUsIHQsIGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSB0aGlzLm1hc2tzZXQsIG4gPSAtMSwgciA9IC0xLCBvID0gYSB8fCBpLnZhbGlkUG9zaXRpb25zO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBzIGluIHZvaWQgMCA9PT0gZSAmJiAoZSA9IC0xKSwgbykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGwgPSBwYXJzZUludChzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9bbF0gJiYgKHQgfHwgITAgIT09IG9bbF0uZ2VuZXJhdGVkSW5wdXQpICYmIChsIDw9IGUgJiYgKG4gPSBsKSwgbCA+PSBlICYmIChyID0gbCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMSA9PT0gbiB8fCBuID09IGUgPyByIDogLTEgPT0gciB8fCBlIC0gbiA8IHIgLSBlID8gbiA6IHI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHMoZSwgdCwgYSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IHRoaXMsIHIgPSB0aGlzLm1hc2tzZXQsIG8gPSBpLmdldFRlc3RUZW1wbGF0ZS5jYWxsKG4sIGUpLm1hdGNoO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXCJcIiA9PT0gby5kZWYgJiYgKG8gPSBpLmdldFRlc3QuY2FsbChuLCBlKS5tYXRjaCksICEwICE9PSBvLnN0YXRpYykgcmV0dXJuIG8uZm47XG4gICAgICAgICAgICAgICAgICAgIGlmICghMCA9PT0gYSAmJiB2b2lkIDAgIT09IHIudmFsaWRQb3NpdGlvbnNbZV0gJiYgITAgIT09IHIudmFsaWRQb3NpdGlvbnNbZV0uZ2VuZXJhdGVkSW5wdXQpIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEwICE9PSB0ICYmIGUgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IGkuZ2V0VGVzdHMuY2FsbChuLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcy5sZW5ndGggPiAxICsgKFwiXCIgPT09IHNbcy5sZW5ndGggLSAxXS5tYXRjaC5kZWYgPyAxIDogMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IGkuZGV0ZXJtaW5lVGVzdFRlbXBsYXRlLmNhbGwobiwgZSwgaS5nZXRUZXN0cy5jYWxsKG4sIGUpKSwgdSA9IGkuZ2V0UGxhY2Vob2xkZXIuY2FsbChuLCBlLCBsLm1hdGNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsLm1hdGNoLmRlZiAhPT0gdTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGwoZSwgdCwgYSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIHZvaWQgMCA9PT0gYSAmJiAoYSA9ICEwKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgciA9IGUgKyAxOyBcIlwiICE9PSBpLmdldFRlc3QuY2FsbChuLCByKS5tYXRjaC5kZWYgJiYgKCEwID09PSB0ICYmICghMCAhPT0gaS5nZXRUZXN0LmNhbGwobiwgcikubWF0Y2gubmV3QmxvY2tNYXJrZXIgfHwgIXMuY2FsbChuLCByLCB2b2lkIDAsICEwKSkgfHwgITAgIT09IHQgJiYgIXMuY2FsbChuLCByLCB2b2lkIDAsIGEpKTsgKSByKys7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB1KGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSB0aGlzLm9wdHMsIGEgPSB0aGlzLmVsO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNSVEwgfHwgXCJudW1iZXJcIiAhPSB0eXBlb2YgZSB8fCB0LmdyZWVkeSAmJiBcIlwiID09PSB0LnBsYWNlaG9sZGVyIHx8ICFhIHx8IChlID0gTWF0aC5hYnModGhpcy5fdmFsdWVHZXQoKS5sZW5ndGggLSBlKSksIFxuICAgICAgICAgICAgICAgICAgICBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA0NzEzOiBmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYShlLCB0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gKG51bGwgIT0gZS5hbHRlcm5hdGlvbiA/IGUubWxvY1tpKGUpXSA6IGUubG9jYXRvcikuam9pbihcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFwiXCIgIT09IGEpIGZvciAoO2EubGVuZ3RoIDwgdDsgKSBhICs9IFwiMFwiO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaShlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0ID0gZS5sb2NhdG9yW2UuYWx0ZXJuYXRpb25dO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIiA9PSB0eXBlb2YgdCAmJiB0Lmxlbmd0aCA+IDAgJiYgKHQgPSB0LnNwbGl0KFwiLFwiKVswXSksIHZvaWQgMCAhPT0gdCA/IHQudG9TdHJpbmcoKSA6IFwiXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG4oZSwgdCwgYSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHRoaXMub3B0cywgbiA9IHRoaXMubWFza3NldDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gKHQgPSB0IHx8IHMuY2FsbCh0aGlzLCBlKS5tYXRjaCkucGxhY2Vob2xkZXIgfHwgITAgPT09IGEpIHJldHVybiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIHQucGxhY2Vob2xkZXIgPyB0LnBsYWNlaG9sZGVyKGkpIDogdC5wbGFjZWhvbGRlcjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEwID09PSB0LnN0YXRpYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgPiAtMSAmJiB2b2lkIDAgPT09IG4udmFsaWRQb3NpdGlvbnNbZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgciwgbyA9IHUuY2FsbCh0aGlzLCBlKSwgbCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvLmxlbmd0aCA+IDEgKyAoXCJcIiA9PT0gb1tvLmxlbmd0aCAtIDFdLm1hdGNoLmRlZiA/IDEgOiAwKSkgZm9yICh2YXIgYyA9IDA7IGMgPCBvLmxlbmd0aDsgYysrKSBpZiAoXCJcIiAhPT0gb1tjXS5tYXRjaC5kZWYgJiYgITAgIT09IG9bY10ubWF0Y2gub3B0aW9uYWxpdHkgJiYgITAgIT09IG9bY10ubWF0Y2gub3B0aW9uYWxRdWFudGlmaWVyICYmICghMCA9PT0gb1tjXS5tYXRjaC5zdGF0aWMgfHwgdm9pZCAwID09PSByIHx8ICExICE9PSBvW2NdLm1hdGNoLmZuLnRlc3Qoci5tYXRjaC5kZWYsIG4sIGUsICEwLCBpKSkgJiYgKGwucHVzaChvW2NdKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgITAgPT09IG9bY10ubWF0Y2guc3RhdGljICYmIChyID0gb1tjXSksIGwubGVuZ3RoID4gMSAmJiAvWzAtOWEtYkEtWl0vLnRlc3QobFswXS5tYXRjaC5kZWYpKSkgcmV0dXJuIGkucGxhY2Vob2xkZXIuY2hhckF0KGUgJSBpLnBsYWNlaG9sZGVyLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdC5kZWY7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkucGxhY2Vob2xkZXIuY2hhckF0KGUgJSBpLnBsYWNlaG9sZGVyLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHIoZSwgdCwgYSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYXNrc2V0LnZhbGlkUG9zaXRpb25zW2VdIHx8IG8uY2FsbCh0aGlzLCBlLCB1LmNhbGwodGhpcywgZSwgdCA/IHQuc2xpY2UoKSA6IHQsIGEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbyhlLCB0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpID0gdGhpcy5vcHRzO1xuICAgICAgICAgICAgICAgICAgICBlID0gZSA+IDAgPyBlIC0gMSA6IDA7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4sIHIsIG8sIGwgPSBhKHMuY2FsbCh0aGlzLCBlKSksIHUgPSAwOyB1IDwgdC5sZW5ndGg7IHUrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSB0W3VdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGEoYywgbC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGYgPSBNYXRoLmFicyhuIC0gbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAwID09PSByIHx8IFwiXCIgIT09IG4gJiYgZiA8IHIgfHwgbyAmJiAhaS5ncmVlZHkgJiYgby5tYXRjaC5vcHRpb25hbGl0eSAmJiBcIm1hc3RlclwiID09PSBvLm1hdGNoLm5ld0Jsb2NrTWFya2VyICYmICghYy5tYXRjaC5vcHRpb25hbGl0eSB8fCAhYy5tYXRjaC5uZXdCbG9ja01hcmtlcikgfHwgbyAmJiBvLm1hdGNoLm9wdGlvbmFsUXVhbnRpZmllciAmJiAhYy5tYXRjaC5vcHRpb25hbFF1YW50aWZpZXIpICYmIChyID0gZiwgXG4gICAgICAgICAgICAgICAgICAgICAgICBvID0gYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG87XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHMoZSwgdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHRoaXMubWFza3NldDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEudmFsaWRQb3NpdGlvbnNbZV0gPyBhLnZhbGlkUG9zaXRpb25zW2VdIDogKHQgfHwgdS5jYWxsKHRoaXMsIGUpKVswXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbChlLCB0LCBhKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGkoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgdCwgYSA9IFtdLCBpID0gLTEsIG4gPSAwLCByID0gZS5sZW5ndGg7IG4gPCByOyBuKyspIGlmIChcIi1cIiA9PT0gZS5jaGFyQXQobikpIGZvciAodCA9IGUuY2hhckNvZGVBdChuICsgMSk7ICsraSA8IHQ7ICkgYS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoaSkpOyBlbHNlIGkgPSBlLmNoYXJDb2RlQXQobiksIFxuICAgICAgICAgICAgICAgICAgICAgICAgYS5wdXNoKGUuY2hhckF0KG4pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUubWF0Y2guZGVmID09PSB0Lm1hdGNoLm5hdGl2ZURlZiB8fCAhKCEoYS5yZWdleCB8fCBlLm1hdGNoLmZuIGluc3RhbmNlb2YgUmVnRXhwICYmIHQubWF0Y2guZm4gaW5zdGFuY2VvZiBSZWdFeHApIHx8ICEwID09PSBlLm1hdGNoLnN0YXRpYyB8fCAhMCA9PT0gdC5tYXRjaC5zdGF0aWMpICYmIC0xICE9PSBpKHQubWF0Y2guZm4udG9TdHJpbmcoKS5yZXBsYWNlKC9bW1xcXS9dL2csIFwiXCIpKS5pbmRleE9mKGkoZS5tYXRjaC5mbi50b1N0cmluZygpLnJlcGxhY2UoL1tbXFxdL10vZywgXCJcIikpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdShlLCB0LCBhKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpLCBuID0gdGhpcywgciA9IHRoaXMuZGVwZW5kZW5jeUxpYiwgcyA9IHRoaXMubWFza3NldCwgdSA9IHRoaXMub3B0cywgYyA9IHRoaXMuZWwsIGYgPSBzLm1hc2tUb2tlbiwgZCA9IHQgPyBhIDogMCwgcCA9IHQgPyB0LnNsaWNlKCkgOiBbIDAgXSwgaCA9IFtdLCB2ID0gITEsIG0gPSB0ID8gdC5qb2luKFwiXCIpIDogXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZyh0LCBhLCBuLCByKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBvKG4sIHIsIGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwKGUsIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSAwID09PSB0Lm1hdGNoZXMuaW5kZXhPZihlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgfHwgdC5tYXRjaGVzLmV2ZXJ5KChmdW5jdGlvbihpLCBuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gITAgPT09IGkuaXNRdWFudGlmaWVyID8gYSA9IHAoZSwgdC5tYXRjaGVzW24gLSAxXSkgOiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaSwgXCJtYXRjaGVzXCIpICYmIChhID0gcChlLCBpKSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKSwgYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gayhlLCB0LCBhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHMudGVzdHNbZV0gfHwgcy52YWxpZFBvc2l0aW9uc1tlXSkgJiYgKHMudGVzdHNbZV0gfHwgWyBzLnZhbGlkUG9zaXRpb25zW2VdIF0pLmV2ZXJ5KChmdW5jdGlvbihlLCByKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5tbG9jW3RdKSByZXR1cm4gaSA9IGUsICExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG8gPSB2b2lkIDAgIT09IGEgPyBhIDogZS5hbHRlcm5hdGlvbiwgcyA9IHZvaWQgMCAhPT0gZS5sb2NhdG9yW29dID8gZS5sb2NhdG9yW29dLnRvU3RyaW5nKCkuaW5kZXhPZih0KSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh2b2lkIDAgPT09IG4gfHwgcyA8IG4pICYmIC0xICE9PSBzICYmIChpID0gZSwgbiA9IHMpLCAhMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA9IGkubG9jYXRvcltpLmFsdGVybmF0aW9uXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaS5tbG9jW3RdIHx8IGkubWxvY1tyXSB8fCBpLmxvY2F0b3IpLnNsaWNlKCh2b2lkIDAgIT09IGEgPyBhIDogaS5hbHRlcm5hdGlvbikgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAwICE9PSBhID8gayhlLCB0KSA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24geShlLCB0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gZS5hbHRlcm5hdGlvbiwgaSA9IHZvaWQgMCA9PT0gdCB8fCBhID09PSB0LmFsdGVybmF0aW9uICYmIC0xID09PSBlLmxvY2F0b3JbYV0udG9TdHJpbmcoKS5pbmRleE9mKHQubG9jYXRvclthXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaSAmJiBhID4gdC5hbHRlcm5hdGlvbikgZm9yICh2YXIgbiA9IHQuYWx0ZXJuYXRpb247IG4gPCBhOyBuKyspIGlmIChlLmxvY2F0b3Jbbl0gIT09IHQubG9jYXRvcltuXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IG4sIGkgPSAhMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLm1sb2MgPSBlLm1sb2MgfHwge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA9IGUubG9jYXRvclthXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgciAmJiAociA9IHIuc3BsaXQoXCIsXCIpWzBdKSwgdm9pZCAwID09PSBlLm1sb2Nbcl0gJiYgKGUubWxvY1tyXSA9IGUubG9jYXRvci5zbGljZSgpKSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAwICE9PSB0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG8gaW4gdC5tbG9jKSBcInN0cmluZ1wiID09IHR5cGVvZiBvICYmIChvID0gby5zcGxpdChcIixcIilbMF0pLCB2b2lkIDAgPT09IGUubWxvY1tvXSAmJiAoZS5tbG9jW29dID0gdC5tbG9jW29dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5sb2NhdG9yW2FdID0gT2JqZWN0LmtleXMoZS5tbG9jKS5qb2luKFwiLFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5hbHRlcm5hdGlvbiA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGIoZSwgdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5sb2NhdG9yLmxlbmd0aCAhPT0gdC5sb2NhdG9yLmxlbmd0aCkgcmV0dXJuICExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBhID0gZS5hbHRlcm5hdGlvbiArIDE7IGEgPCBlLmxvY2F0b3IubGVuZ3RoOyBhKyspIGlmIChlLmxvY2F0b3JbYV0gIT09IHQubG9jYXRvclthXSkgcmV0dXJuICExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkID4gZSArIHUuX21heFRlc3RQb3MpIHRocm93IFwiSW5wdXRtYXNrOiBUaGVyZSBpcyBwcm9iYWJseSBhbiBlcnJvciBpbiB5b3VyIG1hc2sgZGVmaW5pdGlvbiBvciBpbiB0aGUgY29kZS4gQ3JlYXRlIGFuIGlzc3VlIG9uIGdpdGh1YiB3aXRoIGFuIGV4YW1wbGUgb2YgdGhlIG1hc2sgeW91IGFyZSB1c2luZy4gXCIgKyBzLm1hc2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGQgPT09IGUgJiYgdm9pZCAwID09PSBuLm1hdGNoZXMpIHJldHVybiBoLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaDogbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRvcjogci5yZXZlcnNlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNkOiBtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbG9jOiB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCAhMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodm9pZCAwICE9PSBuLm1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4uaXNHcm91cCAmJiBmICE9PSBuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9IG8odC5tYXRjaGVzW3QubWF0Y2hlcy5pbmRleE9mKG4pICsgMV0sIHIsIGYpKSByZXR1cm4gITA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobi5pc09wdGlvbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IG4sIFAgPSBoLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gZyhuLCBhLCByLCBmKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoLmZvckVhY2goKGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA+PSBQICYmIChlLm1hdGNoLm9wdGlvbmFsaXR5ID0gITApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKSwgaSA9IGhbaC5sZW5ndGggLSAxXS5tYXRjaCwgdm9pZCAwICE9PSBmIHx8ICFwKGksIHgpKSByZXR1cm4gITA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9ICEwLCBkID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuLmlzQWx0ZXJuYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEUsIFMgPSBuLCBfID0gW10sIE0gPSBoLnNsaWNlKCksIHcgPSByLmxlbmd0aCwgTyA9ICExLCBUID0gYS5sZW5ndGggPiAwID8gYS5zaGlmdCgpIDogLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLTEgPT09IFQgfHwgXCJzdHJpbmdcIiA9PSB0eXBlb2YgVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBDLCBBID0gZCwgRCA9IGEuc2xpY2UoKSwgQiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiBUKSBCID0gVC5zcGxpdChcIixcIik7IGVsc2UgZm9yIChDID0gMDsgQyA8IFMubWF0Y2hlcy5sZW5ndGg7IEMrKykgQi5wdXNoKEMudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gcy5leGNsdWRlc1tlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gQi5zbGljZSgpLCBSID0gMCwgTCA9IHMuZXhjbHVkZXNbZV0ubGVuZ3RoOyBSIDwgTDsgUisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgSSA9IHMuZXhjbHVkZXNbZV1bUl0udG9TdHJpbmcoKS5zcGxpdChcIjpcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmxlbmd0aCA9PSBJWzFdICYmIEIuc3BsaWNlKEIuaW5kZXhPZihJWzBdKSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA9PT0gQi5sZW5ndGggJiYgKGRlbGV0ZSBzLmV4Y2x1ZGVzW2VdLCBCID0gaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICghMCA9PT0gdS5rZWVwU3RhdGljIHx8IGlzRmluaXRlKHBhcnNlSW50KHUua2VlcFN0YXRpYykpICYmIEEgPj0gdS5rZWVwU3RhdGljKSAmJiAoQiA9IEIuc2xpY2UoMCwgMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIEYgPSAwOyBGIDwgQi5sZW5ndGg7IEYrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gcGFyc2VJbnQoQltGXSksIGggPSBbXSwgYSA9IFwic3RyaW5nXCIgPT0gdHlwZW9mIFQgJiYgayhkLCBDLCB3KSB8fCBELnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBOID0gUy5tYXRjaGVzW0NdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTiAmJiBvKE4sIFsgQyBdLmNvbmNhdChyKSwgZikpIG4gPSAhMDsgZWxzZSBpZiAoMCA9PT0gRiAmJiAoTyA9ICEwKSwgTiAmJiBOLm1hdGNoZXMgJiYgTi5tYXRjaGVzLmxlbmd0aCA+IFMubWF0Y2hlc1swXS5tYXRjaGVzLmxlbmd0aCkgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUgPSBoLnNsaWNlKCksIGQgPSBBLCBoID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIFYgPSAwOyBWIDwgRS5sZW5ndGg7IFYrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEcgPSBFW1ZdLCBIID0gITE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHLm1hdGNoLmppdCA9IEcubWF0Y2guaml0IHx8IE8sIEcuYWx0ZXJuYXRpb24gPSBHLmFsdGVybmF0aW9uIHx8IHcsIHkoRyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBLID0gMDsgSyA8IF8ubGVuZ3RoOyBLKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVSA9IF9bS107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFwic3RyaW5nXCIgIT0gdHlwZW9mIFQgfHwgdm9pZCAwICE9PSBHLmFsdGVybmF0aW9uICYmIEIuaW5jbHVkZXMoRy5sb2NhdG9yW0cuYWx0ZXJuYXRpb25dLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChHLm1hdGNoLm5hdGl2ZURlZiA9PT0gVS5tYXRjaC5uYXRpdmVEZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEggPSAhMCwgeShVLCBHKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsKEcsIFUsIHUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5KEcsIFUpICYmIChIID0gITAsIF8uc3BsaWNlKF8uaW5kZXhPZihVKSwgMCwgRykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGwoVSwgRywgdSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkoVSwgRyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUSA9IFUsICEwID09PSAoVyA9IEcpLm1hdGNoLnN0YXRpYyAmJiAhMCAhPT0gUS5tYXRjaC5zdGF0aWMgJiYgUS5tYXRjaC5mbi50ZXN0KFcubWF0Y2guZGVmLCBzLCBlLCAhMSwgdSwgITEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiKEcsIFUpIHx8IHZvaWQgMCAhPT0gYy5pbnB1dG1hc2sudXNlck9wdGlvbnMua2VlcFN0YXRpYyA/IHkoRywgVSkgJiYgKEggPSAhMCwgXy5zcGxpY2UoXy5pbmRleE9mKFUpLCAwLCBHKSkgOiB1LmtlZXBTdGF0aWMgPSAhMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSCB8fCBfLnB1c2goRyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IE0uY29uY2F0KF8pLCBkID0gZSwgdiA9IGgubGVuZ3RoID4gMCwgbiA9IF8ubGVuZ3RoID4gMCwgYSA9IEQuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBuID0gbyhTLm1hdGNoZXNbVF0gfHwgdC5tYXRjaGVzW1RdLCBbIFQgXS5jb25jYXQociksIGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4pIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuLmlzUXVhbnRpZmllciAmJiBmICE9PSB0Lm1hdGNoZXNbdC5tYXRjaGVzLmluZGV4T2YobikgLSAxXSkgZm9yICh2YXIgJCA9IG4sIHogPSBhLmxlbmd0aCA+IDAgPyBhLnNoaWZ0KCkgOiAwOyB6IDwgKGlzTmFOKCQucXVhbnRpZmllci5tYXgpID8geiArIDEgOiAkLnF1YW50aWZpZXIubWF4KSAmJiBkIDw9IGU7IHorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSB0Lm1hdGNoZXNbdC5tYXRjaGVzLmluZGV4T2YoJCkgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID0gbyhxLCBbIHogXS5jb25jYXQociksIHEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpID0gaFtoLmxlbmd0aCAtIDFdLm1hdGNoKS5vcHRpb25hbFF1YW50aWZpZXIgPSB6ID49ICQucXVhbnRpZmllci5taW4sIGkuaml0ID0gKHogKyAxKSAqIChxLm1hdGNoZXMuaW5kZXhPZihpKSArIDEpID4gJC5xdWFudGlmaWVyLmppdCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaS5vcHRpb25hbFF1YW50aWZpZXIgJiYgcChpLCBxKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gITAsIGQgPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkuaml0ICYmIChzLmppdE9mZnNldFtlXSA9IHEubWF0Y2hlcy5sZW5ndGggLSBxLm1hdGNoZXMuaW5kZXhPZihpKSksICEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG4gPSBnKG4sIGEsIHIsIGYpKSByZXR1cm4gITA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVywgUTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGYgPSBhLmxlbmd0aCA+IDAgPyBhLnNoaWZ0KCkgOiAwOyBmIDwgdC5tYXRjaGVzLmxlbmd0aDsgZisrKSBpZiAoITAgIT09IHQubWF0Y2hlc1tmXS5pc1F1YW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IG8odC5tYXRjaGVzW2ZdLCBbIGYgXS5jb25jYXQobiksIHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwICYmIGQgPT09IGUpIHJldHVybiBwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkID4gZSkgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGUgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCA9PT0gdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGssIHkgPSBlIC0gMTsgdm9pZCAwID09PSAoayA9IHMudmFsaWRQb3NpdGlvbnNbeV0gfHwgcy50ZXN0c1t5XSkgJiYgeSA+IC0xOyApIHktLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIDAgIT09IGsgJiYgeSA+IC0xICYmIChwID0gZnVuY3Rpb24oZSwgdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSwgaSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0KSB8fCAodCA9IFsgdCBdKSwgdC5sZW5ndGggPiAwICYmICh2b2lkIDAgPT09IHRbMF0uYWx0ZXJuYXRpb24gfHwgITAgPT09IHUua2VlcFN0YXRpYyA/IDAgPT09IChpID0gby5jYWxsKG4sIGUsIHQuc2xpY2UoKSkubG9jYXRvci5zbGljZSgpKS5sZW5ndGggJiYgKGkgPSB0WzBdLmxvY2F0b3Iuc2xpY2UoKSkgOiB0LmZvckVhY2goKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXCIgIT09IGUuZGVmICYmICgwID09PSBpLmxlbmd0aCA/IChhID0gZS5hbHRlcm5hdGlvbiwgaSA9IGUubG9jYXRvci5zbGljZSgpKSA6IGUubG9jYXRvclthXSAmJiAtMSA9PT0gaVthXS50b1N0cmluZygpLmluZGV4T2YoZS5sb2NhdG9yW2FdKSAmJiAoaVthXSArPSBcIixcIiArIGUubG9jYXRvclthXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSkpLCBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0oeSwgayksIG0gPSBwLmpvaW4oXCJcIiksIGQgPSB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzLnRlc3RzW2VdICYmIHMudGVzdHNbZV1bMF0uY2QgPT09IG0pIHJldHVybiBzLnRlc3RzW2VdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYiA9IHAuc2hpZnQoKTsgYiA8IGYubGVuZ3RoOyBiKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZyhmW2JdLCBwLCBbIGIgXSkgJiYgZCA9PT0gZSB8fCBkID4gZSkgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwID09PSBoLmxlbmd0aCB8fCB2KSAmJiBoLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2g6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWM6ICEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmFsaXR5OiAhMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNpbmc6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRvcjogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICBtbG9jOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNkOiBtXG4gICAgICAgICAgICAgICAgICAgIH0pLCB2b2lkIDAgIT09IHQgJiYgcy50ZXN0c1tlXSA/IHIuZXh0ZW5kKCEwLCBbXSwgaCkgOiAocy50ZXN0c1tlXSA9IHIuZXh0ZW5kKCEwLCBbXSwgaCksIFxuICAgICAgICAgICAgICAgICAgICBzLnRlc3RzW2VdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAhMFxuICAgICAgICAgICAgICAgIH0pLCB0LmRldGVybWluZVRlc3RUZW1wbGF0ZSA9IG8sIHQuZ2V0RGVjaXNpb25UYWtlciA9IGksIHQuZ2V0TWFza1RlbXBsYXRlID0gZnVuY3Rpb24oZSwgdCwgYSwgaSwgcykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IHRoaXMsIGMgPSB0aGlzLm9wdHMsIGYgPSB0aGlzLm1hc2tzZXQsIGQgPSBjLmdyZWVkeTtcbiAgICAgICAgICAgICAgICAgICAgcyAmJiAoYy5ncmVlZHkgPSAhMSk7XG4gICAgICAgICAgICAgICAgICAgIHQgPSB0IHx8IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwLCBoLCB2LCBtLCBnID0gW10sIGsgPSAwO1xuICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoITAgPT09IGUgJiYgZi52YWxpZFBvc2l0aW9uc1trXSkgdiA9IHMgJiYgITAgPT09IGYudmFsaWRQb3NpdGlvbnNba10ubWF0Y2gub3B0aW9uYWxpdHkgJiYgdm9pZCAwID09PSBmLnZhbGlkUG9zaXRpb25zW2sgKyAxXSAmJiAoITAgPT09IGYudmFsaWRQb3NpdGlvbnNba10uZ2VuZXJhdGVkSW5wdXQgfHwgZi52YWxpZFBvc2l0aW9uc1trXS5pbnB1dCA9PSBjLnNraXBPcHRpb25hbFBhcnRDaGFyYWN0ZXIgJiYgayA+IDApID8gby5jYWxsKGwsIGssIHUuY2FsbChsLCBrLCBwLCBrIC0gMSkpIDogZi52YWxpZFBvc2l0aW9uc1trXSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBoID0gdi5tYXRjaCwgcCA9IHYubG9jYXRvci5zbGljZSgpLCBnLnB1c2goITAgPT09IGEgPyB2LmlucHV0IDogITEgPT09IGEgPyBoLm5hdGl2ZURlZiA6IG4uY2FsbChsLCBrLCBoKSk7IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSByLmNhbGwobCwgaywgcCwgayAtIDEpLCBoID0gdi5tYXRjaCwgcCA9IHYubG9jYXRvci5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5ID0gITAgIT09IGkgJiYgKCExICE9PSBjLmppdE1hc2tpbmcgPyBjLmppdE1hc2tpbmcgOiBoLmppdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG0gPSAobSAmJiBoLnN0YXRpYyAmJiBoLmRlZiAhPT0gYy5ncm91cFNlcGFyYXRvciAmJiBudWxsID09PSBoLmZuIHx8IGYudmFsaWRQb3NpdGlvbnNbayAtIDFdICYmIGguc3RhdGljICYmIGguZGVmICE9PSBjLmdyb3VwU2VwYXJhdG9yICYmIG51bGwgPT09IGguZm4pICYmIGYudGVzdHNba10gJiYgMSA9PT0gZi50ZXN0c1trXS5sZW5ndGgpIHx8ICExID09PSB5IHx8IHZvaWQgMCA9PT0geSB8fCBcIm51bWJlclwiID09IHR5cGVvZiB5ICYmIGlzRmluaXRlKHkpICYmIHkgPiBrID8gZy5wdXNoKCExID09PSBhID8gaC5uYXRpdmVEZWYgOiBuLmNhbGwobCwgaywgaCkpIDogbSA9ICExO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICghMCAhPT0gaC5zdGF0aWMgfHwgXCJcIiAhPT0gaC5kZWYgfHwgdCA+IGspO1xuICAgICAgICAgICAgICAgICAgICBcIlwiID09PSBnW2cubGVuZ3RoIC0gMV0gJiYgZy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgITEgPT09IGEgJiYgdm9pZCAwICE9PSBmLm1hc2tMZW5ndGggfHwgKGYubWFza0xlbmd0aCA9IGsgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGMuZ3JlZWR5ID0gZCwgZztcbiAgICAgICAgICAgICAgICB9LCB0LmdldFBsYWNlaG9sZGVyID0gbiwgdC5nZXRUZXN0ID0gcywgdC5nZXRUZXN0cyA9IHUsIHQuZ2V0VGVzdFRlbXBsYXRlID0gciwgdC5pc1N1YnNldE9mID0gbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA3MjE1OiBmdW5jdGlvbihlLCB0LCBhKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAhMFxuICAgICAgICAgICAgICAgIH0pLCB0LmFsdGVybmF0ZSA9IGwsIHQuY2hlY2tBbHRlcm5hdGlvbk1hdGNoID0gZnVuY3Rpb24oZSwgdCwgYSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpLCBuID0gdGhpcy5vcHRzLmdyZWVkeSA/IHQgOiB0LnNsaWNlKDAsIDEpLCByID0gITEsIG8gPSB2b2lkIDAgIT09IGEgPyBhLnNwbGl0KFwiLFwiKSA6IFtdLCBzID0gMDsgcyA8IG8ubGVuZ3RoOyBzKyspIC0xICE9PSAoaSA9IGUuaW5kZXhPZihvW3NdKSkgJiYgZS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGwgPSAwOyBsIDwgZS5sZW5ndGg7IGwrKykgaWYgKG4uaW5jbHVkZXMoZVtsXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAhMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgICAgIH0sIHQuaXNDb21wbGV0ZSA9IGMsIHQuaXNWYWxpZCA9IGYsIHQucmVmcmVzaEZyb21CdWZmZXIgPSBwLCB0LnJldmFsaWRhdGVNYXNrID0gdiwgXG4gICAgICAgICAgICAgICAgdC5oYW5kbGVSZW1vdmUgPSBmdW5jdGlvbihlLCB0LCBhLCBpLCBzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1ID0gdGhpcywgYyA9IHRoaXMubWFza3NldCwgZiA9IHRoaXMub3B0cztcbiAgICAgICAgICAgICAgICAgICAgaWYgKChmLm51bWVyaWNJbnB1dCB8fCB1LmlzUlRMKSAmJiAodCA9PT0gci5kZWZhdWx0LkJBQ0tTUEFDRSA/IHQgPSByLmRlZmF1bHQuREVMRVRFIDogdCA9PT0gci5kZWZhdWx0LkRFTEVURSAmJiAodCA9IHIuZGVmYXVsdC5CQUNLU1BBQ0UpLCBcbiAgICAgICAgICAgICAgICAgICAgdS5pc1JUTCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gYS5lbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBhLmVuZCA9IGEuYmVnaW4sIGEuYmVnaW4gPSBkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciBwLCBoID0gby5nZXRMYXN0VmFsaWRQb3NpdGlvbi5jYWxsKHUsIHZvaWQgMCwgITApO1xuICAgICAgICAgICAgICAgICAgICBhLmVuZCA+PSBvLmdldEJ1ZmZlci5jYWxsKHUpLmxlbmd0aCAmJiBoID49IGEuZW5kICYmIChhLmVuZCA9IGggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgdCA9PT0gci5kZWZhdWx0LkJBQ0tTUEFDRSA/IGEuZW5kIC0gYS5iZWdpbiA8IDEgJiYgKGEuYmVnaW4gPSBvLnNlZWtQcmV2aW91cy5jYWxsKHUsIGEuYmVnaW4pKSA6IHQgPT09IHIuZGVmYXVsdC5ERUxFVEUgJiYgYS5iZWdpbiA9PT0gYS5lbmQgJiYgKGEuZW5kID0gby5pc01hc2suY2FsbCh1LCBhLmVuZCwgITAsICEwKSA/IGEuZW5kICsgMSA6IG8uc2Vla05leHQuY2FsbCh1LCBhLmVuZCkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCExICE9PSAocCA9IHYuY2FsbCh1LCBhKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghMCAhPT0gaSAmJiAhMSAhPT0gZi5rZWVwU3RhdGljIHx8IG51bGwgIT09IGYucmVnZXggJiYgLTEgIT09IG4uZ2V0VGVzdC5jYWxsKHUsIGEuYmVnaW4pLm1hdGNoLmRlZi5pbmRleE9mKFwifFwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtID0gbC5jYWxsKHUsICEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZyA9IHZvaWQgMCAhPT0gbS5jYXJldCA/IG0uY2FyZXQgOiBtLnBvcyA/IG8uc2Vla05leHQuY2FsbCh1LCBtLnBvcy5iZWdpbiA/IG0ucG9zLmJlZ2luIDogbS5wb3MpIDogby5nZXRMYXN0VmFsaWRQb3NpdGlvbi5jYWxsKHUsIC0xLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ICE9PSByLmRlZmF1bHQuREVMRVRFIHx8IGEuYmVnaW4gPiBnKSAmJiBhLmJlZ2luO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICEwICE9PSBpICYmIChjLnAgPSB0ID09PSByLmRlZmF1bHQuREVMRVRFID8gYS5iZWdpbiArIHAgOiBhLmJlZ2luLCBjLnAgPSBvLmRldGVybWluZU5ld0NhcmV0UG9zaXRpb24uY2FsbCh1LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46IGMucCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IGMucFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgITEpLmJlZ2luKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdmFyIGksIG4gPSBhKDQ3MTMpLCByID0gKGkgPSBhKDQ1MjgpKSAmJiBpLl9fZXNNb2R1bGUgPyBpIDoge1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBpXG4gICAgICAgICAgICAgICAgfSwgbyA9IGEoODcxMSksIHMgPSBhKDYwMzApO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGwoZSwgdCwgYSwgaSwgciwgcykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdSwgYywgZCwgcCwgaCwgdiwgbSwgZywgaywgeSwgYiwgeCA9IHRoaXMsIFAgPSB0aGlzLmRlcGVuZGVuY3lMaWIsIEUgPSB0aGlzLm9wdHMsIFMgPSB4Lm1hc2tzZXQsIF8gPSBQLmV4dGVuZCghMCwge30sIFMudmFsaWRQb3NpdGlvbnMpLCBNID0gUC5leHRlbmQoITAsIHt9LCBTLnRlc3RzKSwgdyA9ICExLCBPID0gITEsIFQgPSB2b2lkIDAgIT09IHIgPyByIDogby5nZXRMYXN0VmFsaWRQb3NpdGlvbi5jYWxsKHgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocyAmJiAoeSA9IHMuYmVnaW4sIGIgPSBzLmVuZCwgcy5iZWdpbiA+IHMuZW5kICYmICh5ID0gcy5lbmQsIGIgPSBzLmJlZ2luKSksIFxuICAgICAgICAgICAgICAgICAgICAtMSA9PT0gVCAmJiB2b2lkIDAgPT09IHIpIHUgPSAwLCBjID0gKHAgPSBuLmdldFRlc3QuY2FsbCh4LCB1KSkuYWx0ZXJuYXRpb247IGVsc2UgZm9yICg7VCA+PSAwOyBULS0pIGlmICgoZCA9IFMudmFsaWRQb3NpdGlvbnNbVF0pICYmIHZvaWQgMCAhPT0gZC5hbHRlcm5hdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgJiYgcC5sb2NhdG9yW2QuYWx0ZXJuYXRpb25dICE9PSBkLmxvY2F0b3JbZC5hbHRlcm5hdGlvbl0pIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgdSA9IFQsIGMgPSBTLnZhbGlkUG9zaXRpb25zW3VdLmFsdGVybmF0aW9uLCBwID0gZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodm9pZCAwICE9PSBjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtID0gcGFyc2VJbnQodSksIFMuZXhjbHVkZXNbbV0gPSBTLmV4Y2x1ZGVzW21dIHx8IFtdLCAhMCAhPT0gZSAmJiBTLmV4Y2x1ZGVzW21dLnB1c2goKDAsIFxuICAgICAgICAgICAgICAgICAgICAgICAgbi5nZXREZWNpc2lvblRha2VyKShwKSArIFwiOlwiICsgcC5hbHRlcm5hdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQyA9IFtdLCBBID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGggPSBtOyBoIDwgby5nZXRMYXN0VmFsaWRQb3NpdGlvbi5jYWxsKHgsIHZvaWQgMCwgITApICsgMTsgaCsrKSAtMSA9PT0gQSAmJiBlIDw9IGggJiYgdm9pZCAwICE9PSB0ICYmIChDLnB1c2godCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgQSA9IEMubGVuZ3RoIC0gMSksICh2ID0gUy52YWxpZFBvc2l0aW9uc1toXSkgJiYgITAgIT09IHYuZ2VuZXJhdGVkSW5wdXQgJiYgKHZvaWQgMCA9PT0gcyB8fCBoIDwgeSB8fCBoID49IGIpICYmIEMucHVzaCh2LmlucHV0KSwgXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgUy52YWxpZFBvc2l0aW9uc1toXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoLTEgPT09IEEgJiYgdm9pZCAwICE9PSB0ICYmIChDLnB1c2godCksIEEgPSBDLmxlbmd0aCAtIDEpOyB2b2lkIDAgIT09IFMuZXhjbHVkZXNbbV0gJiYgUy5leGNsdWRlc1ttXS5sZW5ndGggPCAxMDsgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChTLnRlc3RzID0ge30sIG8ucmVzZXRNYXNrU2V0LmNhbGwoeCwgITApLCB3ID0gITAsIGggPSAwOyBoIDwgQy5sZW5ndGggJiYgKGcgPSB3LmNhcmV0IHx8IG8uZ2V0TGFzdFZhbGlkUG9zaXRpb24uY2FsbCh4LCB2b2lkIDAsICEwKSArIDEsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBDW2hdLCB3ID0gZi5jYWxsKHgsIGcsIGssICExLCBpLCAhMCkpOyBoKyspIGggPT09IEEgJiYgKE8gPSB3KSwgMSA9PSBlICYmIHcgJiYgKE8gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmV0UG9zOiBoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHcpIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvLnJlc2V0TWFza1NldC5jYWxsKHgpLCBwID0gbi5nZXRUZXN0LmNhbGwoeCwgbSksIFMudmFsaWRQb3NpdGlvbnMgPSBQLmV4dGVuZCghMCwge30sIF8pLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTLnRlc3RzID0gUC5leHRlbmQoITAsIHt9LCBNKSwgIVMuZXhjbHVkZXNbbV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTyA9IGwuY2FsbCh4LCBlLCB0LCBhLCBpLCBtIC0gMSwgcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgRCA9ICgwLCBuLmdldERlY2lzaW9uVGFrZXIpKHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtMSAhPT0gUy5leGNsdWRlc1ttXS5pbmRleE9mKEQgKyBcIjpcIiArIHAuYWx0ZXJuYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8gPSBsLmNhbGwoeCwgZSwgdCwgYSwgaSwgbSAtIDEsIHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChTLmV4Y2x1ZGVzW21dLnB1c2goRCArIFwiOlwiICsgcC5hbHRlcm5hdGlvbiksIGggPSBtOyBoIDwgby5nZXRMYXN0VmFsaWRQb3NpdGlvbi5jYWxsKHgsIHZvaWQgMCwgITApICsgMTsgaCsrKSBkZWxldGUgUy52YWxpZFBvc2l0aW9uc1toXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTyAmJiAhMSA9PT0gRS5rZWVwU3RhdGljIHx8IGRlbGV0ZSBTLmV4Y2x1ZGVzW21dLCBPO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB1KGUsIHQsIGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSB0aGlzLm9wdHMsIG4gPSB0aGlzLm1hc2tzZXQ7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoaS5jYXNpbmcgfHwgdC5jYXNpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwidXBwZXJcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBlLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJsb3dlclwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IGUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInRpdGxlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IG4udmFsaWRQb3NpdGlvbnNbYSAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZSA9IDAgPT09IGEgfHwgbyAmJiBvLmlucHV0ID09PSBTdHJpbmcuZnJvbUNoYXJDb2RlKHIuZGVmYXVsdC5TUEFDRSkgPyBlLnRvVXBwZXJDYXNlKCkgOiBlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBpLmNhc2luZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLnB1c2gobi52YWxpZFBvc2l0aW9ucyksIGUgPSBpLmNhc2luZy5hcHBseSh0aGlzLCBzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYyhlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0ID0gdGhpcywgYSA9IHRoaXMub3B0cywgaSA9IHRoaXMubWFza3NldDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgYS5pc0NvbXBsZXRlKSByZXR1cm4gYS5pc0NvbXBsZXRlKGUsIGEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXCIqXCIgIT09IGEucmVwZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA9ICExLCBzID0gby5kZXRlcm1pbmVMYXN0UmVxdWlyZWRQb3NpdGlvbi5jYWxsKHQsICEwKSwgbCA9IG8uc2Vla1ByZXZpb3VzLmNhbGwodCwgcy5sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgPT09IHMuZGVmIHx8IHMuZGVmLm5ld0Jsb2NrTWFya2VyIHx8IHMuZGVmLm9wdGlvbmFsaXR5IHx8IHMuZGVmLm9wdGlvbmFsUXVhbnRpZmllcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAhMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB1ID0gMDsgdSA8PSBsOyB1KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBuLmdldFRlc3RUZW1wbGF0ZS5jYWxsKHQsIHUpLm1hdGNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoITAgIT09IGMuc3RhdGljICYmIHZvaWQgMCA9PT0gaS52YWxpZFBvc2l0aW9uc1t1XSAmJiAhMCAhPT0gYy5vcHRpb25hbGl0eSAmJiAhMCAhPT0gYy5vcHRpb25hbFF1YW50aWZpZXIgfHwgITAgPT09IGMuc3RhdGljICYmIGVbdV0gIT09IG4uZ2V0UGxhY2Vob2xkZXIuY2FsbCh0LCB1LCBjKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9ICExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBmKGUsIHQsIGEsIGksIHIsIHMsIGQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSB0aGlzLCBnID0gdGhpcy5kZXBlbmRlbmN5TGliLCBrID0gdGhpcy5vcHRzLCB5ID0gbS5tYXNrc2V0O1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBiKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtLmlzUlRMID8gZS5iZWdpbiAtIGUuZW5kID4gMSB8fCBlLmJlZ2luIC0gZS5lbmQgPT0gMSA6IGUuZW5kIC0gZS5iZWdpbiA+IDEgfHwgZS5lbmQgLSBlLmJlZ2luID09IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYSA9ICEwID09PSBhO1xuICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IGU7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IGUucmVtb3ZlICYmIChBcnJheS5pc0FycmF5KGUucmVtb3ZlKSB8fCAoZS5yZW1vdmUgPSBbIGUucmVtb3ZlIF0pLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnJlbW92ZS5zb3J0KChmdW5jdGlvbihlLCB0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0LnBvcyAtIGUucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKS5mb3JFYWNoKChmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYuY2FsbChtLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbjogZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogZSArIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLCBlLnJlbW92ZSA9IHZvaWQgMCksIHZvaWQgMCAhPT0gZS5pbnNlcnQgJiYgKEFycmF5LmlzQXJyYXkoZS5pbnNlcnQpIHx8IChlLmluc2VydCA9IFsgZS5pbnNlcnQgXSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuaW5zZXJ0LnNvcnQoKGZ1bmN0aW9uKGUsIHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGUucG9zIC0gdC5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLmZvckVhY2goKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcIiAhPT0gZS5jICYmIGYuY2FsbChtLCBlLnBvcywgZS5jLCB2b2lkIDAgPT09IGUuc3RyaWN0IHx8IGUuc3RyaWN0LCB2b2lkIDAgIT09IGUuZnJvbUlzVmFsaWQgPyBlLmZyb21Jc1ZhbGlkIDogaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLCBlLmluc2VydCA9IHZvaWQgMCksIGUucmVmcmVzaEZyb21CdWZmZXIgJiYgZS5idWZmZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBlLnJlZnJlc2hGcm9tQnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmNhbGwobSwgITAgPT09IHQgPyB0IDogdC5zdGFydCwgdC5lbmQsIGUuYnVmZmVyKSwgZS5yZWZyZXNoRnJvbUJ1ZmZlciA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAwICE9PSBlLnJld3JpdGVQb3NpdGlvbiAmJiAoeCA9IGUucmV3cml0ZVBvc2l0aW9uLCBlID0gITApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRSh0LCBhLCByKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9ICExO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG4uZ2V0VGVzdHMuY2FsbChtLCB0KS5ldmVyeSgoZnVuY3Rpb24obCwgYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmID0gbC5tYXRjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoby5nZXRCdWZmZXIuY2FsbChtLCAhMCksICExICE9PSAocyA9ICghZi5qaXQgfHwgdm9pZCAwICE9PSB5LnZhbGlkUG9zaXRpb25zW28uc2Vla1ByZXZpb3VzLmNhbGwobSwgdCldKSAmJiAobnVsbCAhPSBmLmZuID8gZi5mbi50ZXN0KGEsIHksIHQsIHIsIGssIGIoZSkpIDogKGEgPT09IGYuZGVmIHx8IGEgPT09IGsuc2tpcE9wdGlvbmFsUGFydENoYXJhY3RlcikgJiYgXCJcIiAhPT0gZi5kZWYgJiYge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjOiBuLmdldFBsYWNlaG9sZGVyLmNhbGwobSwgdCwgZiwgITApIHx8IGYuZGVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3M6IHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSB2b2lkIDAgIT09IHMuYyA/IHMuYyA6IGEsIHAgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZCA9IGQgPT09IGsuc2tpcE9wdGlvbmFsUGFydENoYXJhY3RlciAmJiAhMCA9PT0gZi5zdGF0aWMgPyBuLmdldFBsYWNlaG9sZGVyLmNhbGwobSwgdCwgZiwgITApIHx8IGYuZGVmIDogZCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEwICE9PSAocyA9IFAocykpICYmIHZvaWQgMCAhPT0gcy5wb3MgJiYgcy5wb3MgIT09IHQgJiYgKHAgPSBzLnBvcyksICEwICE9PSBzICYmIHZvaWQgMCA9PT0gcy5wb3MgJiYgdm9pZCAwID09PSBzLmMgPyAhMSA6ICghMSA9PT0gdi5jYWxsKG0sIGUsIGcuZXh0ZW5kKHt9LCBsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogdS5jYWxsKG0sIGQsIGYsIHApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBpLCBwKSAmJiAocyA9ICExKSwgITEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSksIHM7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdm9pZCAwICE9PSBlLmJlZ2luICYmICh4ID0gbS5pc1JUTCA/IGUuZW5kIDogZS5iZWdpbik7XG4gICAgICAgICAgICAgICAgICAgIHZhciBTID0gITAsIF8gPSBnLmV4dGVuZCghMCwge30sIHkudmFsaWRQb3NpdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoITEgPT09IGsua2VlcFN0YXRpYyAmJiB2b2lkIDAgIT09IHkuZXhjbHVkZXNbeF0gJiYgITAgIT09IHIgJiYgITAgIT09IGkpIGZvciAodmFyIE0gPSB4OyBNIDwgKG0uaXNSVEwgPyBlLmJlZ2luIDogZS5lbmQpOyBNKyspIHZvaWQgMCAhPT0geS5leGNsdWRlc1tNXSAmJiAoeS5leGNsdWRlc1tNXSA9IHZvaWQgMCwgXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB5LnRlc3RzW01dKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2Ygay5wcmVWYWxpZGF0aW9uICYmICEwICE9PSBpICYmICEwICE9PSBzICYmIChTID0gUChTID0gay5wcmVWYWxpZGF0aW9uLmNhbGwobSwgby5nZXRCdWZmZXIuY2FsbChtKSwgeCwgdCwgYihlKSwgaywgeSwgZSwgYSB8fCByKSkpLCBcbiAgICAgICAgICAgICAgICAgICAgITAgPT09IFMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTID0gRSh4LCB0LCBhKSwgKCFhIHx8ICEwID09PSBpKSAmJiAhMSA9PT0gUyAmJiAhMCAhPT0gcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3ID0geS52YWxpZFBvc2l0aW9uc1t4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXcgfHwgITAgIT09IHcubWF0Y2guc3RhdGljIHx8IHcubWF0Y2guZGVmICE9PSB0ICYmIHQgIT09IGsuc2tpcE9wdGlvbmFsUGFydENoYXJhY3Rlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoay5pbnNlcnRNb2RlIHx8IHZvaWQgMCA9PT0geS52YWxpZFBvc2l0aW9uc1tvLnNlZWtOZXh0LmNhbGwobSwgeCldIHx8IGUuZW5kID4geCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE8gPSAhMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5LmppdE9mZnNldFt4XSAmJiB2b2lkIDAgPT09IHkudmFsaWRQb3NpdGlvbnNbby5zZWVrTmV4dC5jYWxsKG0sIHgpXSAmJiAhMSAhPT0gKFMgPSBmLmNhbGwobSwgeCArIHkuaml0T2Zmc2V0W3hdLCB0LCAhMCwgITApKSAmJiAoITAgIT09IHIgJiYgKFMuY2FyZXQgPSB4KSwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPID0gITApLCBlLmVuZCA+IHggJiYgKHkudmFsaWRQb3NpdGlvbnNbeF0gPSB2b2lkIDApLCAhTyAmJiAhby5pc01hc2suY2FsbChtLCB4LCBrLmtlZXBTdGF0aWMgJiYgMCA9PT0geCkpIGZvciAodmFyIFQgPSB4ICsgMSwgQyA9IG8uc2Vla05leHQuY2FsbChtLCB4LCAhMSwgMCAhPT0geCk7IFQgPD0gQzsgVCsrKSBpZiAoITEgIT09IChTID0gRShULCB0LCBhKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gaC5jYWxsKG0sIHgsIHZvaWQgMCAhPT0gUy5wb3MgPyBTLnBvcyA6IFQpIHx8IFMsIHggPSBUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIFMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmV0OiBvLnNlZWtOZXh0LmNhbGwobSwgeClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgITEgIT09IFMgfHwgIWsua2VlcFN0YXRpYyB8fCAhYy5jYWxsKG0sIG8uZ2V0QnVmZmVyLmNhbGwobSkpICYmIDAgIT09IHggfHwgYSB8fCAhMCA9PT0gciA/IGIoZSkgJiYgeS50ZXN0c1t4XSAmJiB5LnRlc3RzW3hdLmxlbmd0aCA+IDEgJiYgay5rZWVwU3RhdGljICYmICFhICYmICEwICE9PSByICYmIChTID0gbC5jYWxsKG0sICEwKSkgOiBTID0gbC5jYWxsKG0sIHgsIHQsIGEsIGksIHZvaWQgMCwgZSksIFxuICAgICAgICAgICAgICAgICAgICAgICAgITAgPT09IFMgJiYgKFMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zOiB4XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09IHR5cGVvZiBrLnBvc3RWYWxpZGF0aW9uICYmICEwICE9PSBpICYmICEwICE9PSBzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQSA9IGsucG9zdFZhbGlkYXRpb24uY2FsbChtLCBvLmdldEJ1ZmZlci5jYWxsKG0sICEwKSwgdm9pZCAwICE9PSBlLmJlZ2luID8gbS5pc1JUTCA/IGUuZW5kIDogZS5iZWdpbiA6IGUsIHQsIFMsIGssIHksIGEsIGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAwICE9PSBBICYmIChTID0gITAgPT09IEEgPyBTIDogQSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgUyAmJiB2b2lkIDAgPT09IFMucG9zICYmIChTLnBvcyA9IHgpLCAhMSA9PT0gUyB8fCAhMCA9PT0gcyA/IChvLnJlc2V0TWFza1NldC5jYWxsKG0sICEwKSwgXG4gICAgICAgICAgICAgICAgICAgIHkudmFsaWRQb3NpdGlvbnMgPSBnLmV4dGVuZCghMCwge30sIF8pKSA6IGguY2FsbChtLCB2b2lkIDAsIHgsICEwKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIEQgPSBQKFMpO1xuICAgICAgICAgICAgICAgICAgICB2b2lkIDAgIT09IG0ubWF4TGVuZ3RoICYmIChvLmdldEJ1ZmZlci5jYWxsKG0pLmxlbmd0aCA+IG0ubWF4TGVuZ3RoICYmICFpICYmIChvLnJlc2V0TWFza1NldC5jYWxsKG0sICEwKSwgXG4gICAgICAgICAgICAgICAgICAgIHkudmFsaWRQb3NpdGlvbnMgPSBnLmV4dGVuZCghMCwge30sIF8pLCBEID0gITEpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGQoZSwgdCwgYSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5tYXNrc2V0LCByID0gITEsIG8gPSBuLmdldFRlc3RzLmNhbGwodGhpcywgZSksIHMgPSAwOyBzIDwgby5sZW5ndGg7IHMrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9bc10ubWF0Y2ggJiYgKG9bc10ubWF0Y2gubmF0aXZlRGVmID09PSB0Lm1hdGNoW2Euc2hpZnRQb3NpdGlvbnMgPyBcImRlZlwiIDogXCJuYXRpdmVEZWZcIl0gJiYgKCFhLnNoaWZ0UG9zaXRpb25zIHx8ICF0Lm1hdGNoLnN0YXRpYykgfHwgb1tzXS5tYXRjaC5uYXRpdmVEZWYgPT09IHQubWF0Y2gubmF0aXZlRGVmIHx8IGEucmVnZXggJiYgIW9bc10ubWF0Y2guc3RhdGljICYmIG9bc10ubWF0Y2guZm4udGVzdCh0LmlucHV0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gITA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob1tzXS5tYXRjaCAmJiBvW3NdLm1hdGNoLmRlZiA9PT0gdC5tYXRjaC5uYXRpdmVEZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhMSA9PT0gciAmJiB2b2lkIDAgIT09IGkuaml0T2Zmc2V0W2VdICYmIChyID0gZC5jYWxsKHRoaXMsIGUgKyBpLmppdE9mZnNldFtlXSwgdCwgYSkpLCBcbiAgICAgICAgICAgICAgICAgICAgcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gcChlLCB0LCBhKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpLCBuLCByID0gdGhpcywgbCA9IHRoaXMubWFza3NldCwgdSA9IHRoaXMub3B0cywgYyA9IHRoaXMuZGVwZW5kZW5jeUxpYiwgZiA9IHUuc2tpcE9wdGlvbmFsUGFydENoYXJhY3RlciwgZCA9IHIuaXNSVEwgPyBhLnNsaWNlKCkucmV2ZXJzZSgpIDogYTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHUuc2tpcE9wdGlvbmFsUGFydENoYXJhY3RlciA9IFwiXCIsICEwID09PSBlKSBvLnJlc2V0TWFza1NldC5jYWxsKHIpLCBsLnRlc3RzID0ge30sIFxuICAgICAgICAgICAgICAgICAgICBlID0gMCwgdCA9IGEubGVuZ3RoLCBuID0gby5kZXRlcm1pbmVOZXdDYXJldFBvc2l0aW9uLmNhbGwociwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IDBcbiAgICAgICAgICAgICAgICAgICAgfSwgITEpLmJlZ2luOyBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGU7IGkgPCB0OyBpKyspIGRlbGV0ZSBsLnZhbGlkUG9zaXRpb25zW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBuZXcgYy5FdmVudChcImtleXByZXNzXCIpO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBlOyBpIDwgdDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwLndoaWNoID0gZFtpXS50b1N0cmluZygpLmNoYXJDb2RlQXQoMCksIHIuaWdub3JhYmxlID0gITE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaCA9IHMuRXZlbnRIYW5kbGVycy5rZXlwcmVzc0V2ZW50LmNhbGwociwgcCwgITAsICExLCAhMSwgbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAhMSAhPT0gaCAmJiB2b2lkIDAgIT09IGggJiYgKG4gPSBoLmZvcndhcmRQb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdS5za2lwT3B0aW9uYWxQYXJ0Q2hhcmFjdGVyID0gZjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaChlLCB0LCBhKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpID0gdGhpcywgciA9IHRoaXMubWFza3NldCwgcyA9IHRoaXMuZGVwZW5kZW5jeUxpYjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCA9PT0gZSkgZm9yIChlID0gdCAtIDE7IGUgPiAwICYmICFyLnZhbGlkUG9zaXRpb25zW2VdOyBlLS0pIDtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IGU7IGwgPCB0OyBsKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2b2lkIDAgPT09IHIudmFsaWRQb3NpdGlvbnNbbF0gJiYgIW8uaXNNYXNrLmNhbGwoaSwgbCwgITEpKSBpZiAoMCA9PSBsID8gbi5nZXRUZXN0LmNhbGwoaSwgbCkgOiByLnZhbGlkUG9zaXRpb25zW2wgLSAxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1ID0gbi5nZXRUZXN0cy5jYWxsKGksIGwpLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcIiA9PT0gdVt1Lmxlbmd0aCAtIDFdLm1hdGNoLmRlZiAmJiB1LnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjLCBkID0gbi5kZXRlcm1pbmVUZXN0VGVtcGxhdGUuY2FsbChpLCBsLCB1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZCAmJiAoITAgIT09IGQubWF0Y2guaml0IHx8IFwibWFzdGVyXCIgPT09IGQubWF0Y2gubmV3QmxvY2tNYXJrZXIgJiYgKGMgPSByLnZhbGlkUG9zaXRpb25zW2wgKyAxXSkgJiYgITAgPT09IGMubWF0Y2gub3B0aW9uYWxRdWFudGlmaWVyKSAmJiAoKGQgPSBzLmV4dGVuZCh7fSwgZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogbi5nZXRQbGFjZWhvbGRlci5jYWxsKGksIGwsIGQubWF0Y2gsICEwKSB8fCBkLm1hdGNoLmRlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKS5nZW5lcmF0ZWRJbnB1dCA9ICEwLCB2LmNhbGwoaSwgbCwgZCwgITApLCAhMCAhPT0gYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSByLnZhbGlkUG9zaXRpb25zW3RdLmlucHV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gci52YWxpZFBvc2l0aW9uc1t0XSA9IHZvaWQgMCwgZi5jYWxsKGksIHQsIHAsICEwLCAhMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHYoZSwgdCwgYSwgaSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgciA9IHRoaXMsIHMgPSB0aGlzLm1hc2tzZXQsIGwgPSB0aGlzLm9wdHMsIHUgPSB0aGlzLmRlcGVuZGVuY3lMaWI7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGMoZSwgdCwgYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSB0W2VdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gaSAmJiAhMCA9PT0gaS5tYXRjaC5zdGF0aWMgJiYgITAgIT09IGkubWF0Y2gub3B0aW9uYWxpdHkgJiYgKHZvaWQgMCA9PT0gdFswXSB8fCB2b2lkIDAgPT09IHRbMF0uYWx0ZXJuYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBhLmJlZ2luIDw9IGUgLSAxID8gdFtlIC0gMV0gJiYgITAgPT09IHRbZSAtIDFdLm1hdGNoLnN0YXRpYyAmJiB0W2UgLSAxXSA6IHRbZSAtIDFdLCByID0gYS5lbmQgPiBlICsgMSA/IHRbZSArIDFdICYmICEwID09PSB0W2UgKyAxXS5tYXRjaC5zdGF0aWMgJiYgdFtlICsgMV0gOiB0W2UgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiAmJiByO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHZhciBwID0gMCwgaCA9IHZvaWQgMCAhPT0gZS5iZWdpbiA/IGUuYmVnaW4gOiBlLCB2ID0gdm9pZCAwICE9PSBlLmVuZCA/IGUuZW5kIDogZSwgbSA9ICEwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS5iZWdpbiA+IGUuZW5kICYmIChoID0gZS5lbmQsIHYgPSBlLmJlZ2luKSwgaSA9IHZvaWQgMCAhPT0gaSA/IGkgOiBoLCBoICE9PSB2IHx8IGwuaW5zZXJ0TW9kZSAmJiB2b2lkIDAgIT09IHMudmFsaWRQb3NpdGlvbnNbaV0gJiYgdm9pZCAwID09PSBhIHx8IHZvaWQgMCA9PT0gdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGcsIGsgPSB1LmV4dGVuZCghMCwge30sIHMudmFsaWRQb3NpdGlvbnMpLCB5ID0gby5nZXRMYXN0VmFsaWRQb3NpdGlvbi5jYWxsKHIsIHZvaWQgMCwgITApO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzLnAgPSBoLCBnID0geTsgZyA+PSBoOyBnLS0pIGRlbGV0ZSBzLnZhbGlkUG9zaXRpb25zW2ddLCB2b2lkIDAgPT09IHQgJiYgZGVsZXRlIHMudGVzdHNbZyArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIsIHgsIFAgPSBpLCBFID0gUDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodCAmJiAocy52YWxpZFBvc2l0aW9uc1tpXSA9IHUuZXh0ZW5kKCEwLCB7fSwgdCksIEUrKywgUCsrKSwgZyA9IHQgPyB2IDogdiAtIDE7IGcgPD0geTsgZysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gKGIgPSBrW2ddKSAmJiAhMCAhPT0gYi5nZW5lcmF0ZWRJbnB1dCAmJiAoZyA+PSB2IHx8IGcgPj0gaCAmJiBjKGcsIGssIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46IGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDtcIlwiICE9PSBuLmdldFRlc3QuY2FsbChyLCBFKS5tYXRjaC5kZWY7ICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCExICE9PSAoeCA9IGQuY2FsbChyLCBFLCBiLCBsKSkgfHwgXCIrXCIgPT09IGIubWF0Y2guZGVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIrXCIgPT09IGIubWF0Y2guZGVmICYmIG8uZ2V0QnVmZmVyLmNhbGwociwgITApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBTID0gZi5jYWxsKHIsIEUsIGIuaW5wdXQsIFwiK1wiICE9PSBiLm1hdGNoLmRlZiwgITApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtID0gITEgIT09IFMsIFAgPSAoUy5wb3MgfHwgRSkgKyAxLCAhbSAmJiB4KSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBtID0gITE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgMCA9PT0gdCAmJiBiLm1hdGNoLnN0YXRpYyAmJiBnID09PSBlLmJlZ2luICYmIHArKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbSAmJiBFID4gcy5tYXNrTGVuZ3RoKSBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlwiID09IG4uZ2V0VGVzdC5jYWxsKHIsIEUpLm1hdGNoLmRlZiAmJiAobSA9ICExKSwgRSA9IFA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbSkgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW0pIHJldHVybiBzLnZhbGlkUG9zaXRpb25zID0gdS5leHRlbmQoITAsIHt9LCBrKSwgby5yZXNldE1hc2tTZXQuY2FsbChyLCAhMCksIFxuICAgICAgICAgICAgICAgICAgICAgICAgITE7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB0ICYmIG4uZ2V0VGVzdC5jYWxsKHIsIGkpLm1hdGNoLmNkID09PSB0Lm1hdGNoLmNkICYmIChzLnZhbGlkUG9zaXRpb25zW2ldID0gdS5leHRlbmQoITAsIHt9LCB0KSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvLnJlc2V0TWFza1NldC5jYWxsKHIsICEwKSwgcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHQgPSB7fTtcbiAgICAgICAgZnVuY3Rpb24gYShpKSB7XG4gICAgICAgICAgICB2YXIgbiA9IHRbaV07XG4gICAgICAgICAgICBpZiAodm9pZCAwICE9PSBuKSByZXR1cm4gbi5leHBvcnRzO1xuICAgICAgICAgICAgdmFyIHIgPSB0W2ldID0ge1xuICAgICAgICAgICAgICAgIGV4cG9ydHM6IHt9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIGVbaV0ociwgci5leHBvcnRzLCBhKSwgci5leHBvcnRzO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpID0ge307XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBlLCB0ID0gaTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiAhMFxuICAgICAgICAgICAgfSksIHQuZGVmYXVsdCA9IHZvaWQgMCwgYSgzODUxKSwgYSgyMTkpLCBhKDIwNyksIGEoNTI5Nik7XG4gICAgICAgICAgICB2YXIgbiA9ICgoZSA9IGEoMjM5NCkpICYmIGUuX19lc01vZHVsZSA/IGUgOiB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogZVxuICAgICAgICAgICAgfSkuZGVmYXVsdDtcbiAgICAgICAgICAgIHQuZGVmYXVsdCA9IG47XG4gICAgICAgIH0oKSwgaTtcbiAgICB9KCk7XG59KSk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/inputmask/dist/inputmask.js\n"); /***/ }), /***/ "./node_modules/jquery-nice-select/js/jquery.nice-select.js": /*!******************************************************************!*\ !*** ./node_modules/jquery-nice-select/js/jquery.nice-select.js ***! \******************************************************************/ /*! no static exports found */ /***/ (function(module, exports) { eval("/* jQuery Nice Select - v1.1.0\n https://github.com/hernansartorio/jquery-nice-select\n Made by Hernan Sartorio */\n \n(function($) {\n\n $.fn.niceSelect = function(method) {\n \n // Methods\n if (typeof method == 'string') { \n if (method == 'update') {\n this.each(function() {\n var $select = $(this);\n var $dropdown = $(this).next('.nice-select');\n var open = $dropdown.hasClass('open');\n \n if ($dropdown.length) {\n $dropdown.remove();\n create_nice_select($select);\n \n if (open) {\n $select.next().trigger('click');\n }\n }\n });\n } else if (method == 'destroy') {\n this.each(function() {\n var $select = $(this);\n var $dropdown = $(this).next('.nice-select');\n \n if ($dropdown.length) {\n $dropdown.remove();\n $select.css('display', '');\n }\n });\n if ($('.nice-select').length == 0) {\n $(document).off('.nice_select');\n }\n } else {\n console.log('Method \"' + method + '\" does not exist.')\n }\n return this;\n }\n \n // Hide native select\n this.hide();\n \n // Create custom markup\n this.each(function() {\n var $select = $(this);\n \n if (!$select.next().hasClass('nice-select')) {\n create_nice_select($select);\n }\n });\n \n function create_nice_select($select) {\n $select.after($('
')\n .addClass('nice-select')\n .addClass($select.attr('class') || '')\n .addClass($select.attr('disabled') ? 'disabled' : '')\n .attr('tabindex', $select.attr('disabled') ? null : '0')\n .html('
    ')\n );\n \n var $dropdown = $select.next();\n var $options = $select.find('option');\n var $selected = $select.find('option:selected');\n \n $dropdown.find('.current').html($selected.data('display') || $selected.text());\n \n $options.each(function(i) {\n var $option = $(this);\n var display = $option.data('display');\n\n $dropdown.find('ul').append($('
  • ')\n .attr('data-value', $option.val())\n .attr('data-display', (display || null))\n .addClass('option' +\n ($option.is(':selected') ? ' selected' : '') +\n ($option.is(':disabled') ? ' disabled' : ''))\n .html($option.text())\n );\n });\n }\n \n /* Event listeners */\n \n // Unbind existing events in case that the plugin has been initialized before\n $(document).off('.nice_select');\n \n // Open/close\n $(document).on('click.nice_select', '.nice-select', function(event) {\n var $dropdown = $(this);\n \n $('.nice-select').not($dropdown).removeClass('open');\n $dropdown.toggleClass('open');\n \n if ($dropdown.hasClass('open')) {\n $dropdown.find('.option'); \n $dropdown.find('.focus').removeClass('focus');\n $dropdown.find('.selected').addClass('focus');\n } else {\n $dropdown.focus();\n }\n });\n \n // Close when clicking outside\n $(document).on('click.nice_select', function(event) {\n if ($(event.target).closest('.nice-select').length === 0) {\n $('.nice-select').removeClass('open').find('.option'); \n }\n });\n \n // Option click\n $(document).on('click.nice_select', '.nice-select .option:not(.disabled)', function(event) {\n var $option = $(this);\n var $dropdown = $option.closest('.nice-select');\n \n $dropdown.find('.selected').removeClass('selected');\n $option.addClass('selected');\n \n var text = $option.data('display') || $option.text();\n $dropdown.find('.current').text(text);\n \n $dropdown.prev('select').val($option.data('value')).trigger('change');\n });\n\n // Keyboard events\n $(document).on('keydown.nice_select', '.nice-select', function(event) { \n var $dropdown = $(this);\n var $focused_option = $($dropdown.find('.focus') || $dropdown.find('.list .option.selected'));\n \n // Space or Enter\n if (event.keyCode == 32 || event.keyCode == 13) {\n if ($dropdown.hasClass('open')) {\n $focused_option.trigger('click');\n } else {\n $dropdown.trigger('click');\n }\n return false;\n // Down\n } else if (event.keyCode == 40) {\n if (!$dropdown.hasClass('open')) {\n $dropdown.trigger('click');\n } else {\n var $next = $focused_option.nextAll('.option:not(.disabled)').first();\n if ($next.length > 0) {\n $dropdown.find('.focus').removeClass('focus');\n $next.addClass('focus');\n }\n }\n return false;\n // Up\n } else if (event.keyCode == 38) {\n if (!$dropdown.hasClass('open')) {\n $dropdown.trigger('click');\n } else {\n var $prev = $focused_option.prevAll('.option:not(.disabled)').first();\n if ($prev.length > 0) {\n $dropdown.find('.focus').removeClass('focus');\n $prev.addClass('focus');\n }\n }\n return false;\n // Esc\n } else if (event.keyCode == 27) {\n if ($dropdown.hasClass('open')) {\n $dropdown.trigger('click');\n }\n // Tab\n } else if (event.keyCode == 9) {\n if ($dropdown.hasClass('open')) {\n return false;\n }\n }\n });\n\n // Detect CSS pointer-events support, for IE <= 10. From Modernizr.\n var style = document.createElement('a').style;\n style.cssText = 'pointer-events:auto';\n if (style.pointerEvents !== 'auto') {\n $('html').addClass('no-csspointerevents');\n }\n \n return this;\n\n };\n\n}(jQuery));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvanF1ZXJ5LW5pY2Utc2VsZWN0L2pzL2pxdWVyeS5uaWNlLXNlbGVjdC5qcz8xNTE5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLG9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esa0M7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLDhEO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSwyRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBLENBQUMiLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvanF1ZXJ5LW5pY2Utc2VsZWN0L2pzL2pxdWVyeS5uaWNlLXNlbGVjdC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qICBqUXVlcnkgTmljZSBTZWxlY3QgLSB2MS4xLjBcbiAgICBodHRwczovL2dpdGh1Yi5jb20vaGVybmFuc2FydG9yaW8vanF1ZXJ5LW5pY2Utc2VsZWN0XG4gICAgTWFkZSBieSBIZXJuw6FuIFNhcnRvcmlvICAqL1xuIFxuKGZ1bmN0aW9uKCQpIHtcblxuICAkLmZuLm5pY2VTZWxlY3QgPSBmdW5jdGlvbihtZXRob2QpIHtcbiAgICBcbiAgICAvLyBNZXRob2RzXG4gICAgaWYgKHR5cGVvZiBtZXRob2QgPT0gJ3N0cmluZycpIHsgICAgICBcbiAgICAgIGlmIChtZXRob2QgPT0gJ3VwZGF0ZScpIHtcbiAgICAgICAgdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciAkc2VsZWN0ID0gJCh0aGlzKTtcbiAgICAgICAgICB2YXIgJGRyb3Bkb3duID0gJCh0aGlzKS5uZXh0KCcubmljZS1zZWxlY3QnKTtcbiAgICAgICAgICB2YXIgb3BlbiA9ICRkcm9wZG93bi5oYXNDbGFzcygnb3BlbicpO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmICgkZHJvcGRvd24ubGVuZ3RoKSB7XG4gICAgICAgICAgICAkZHJvcGRvd24ucmVtb3ZlKCk7XG4gICAgICAgICAgICBjcmVhdGVfbmljZV9zZWxlY3QoJHNlbGVjdCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgICAgICAgICRzZWxlY3QubmV4dCgpLnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09ICdkZXN0cm95Jykge1xuICAgICAgICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyICRzZWxlY3QgPSAkKHRoaXMpO1xuICAgICAgICAgIHZhciAkZHJvcGRvd24gPSAkKHRoaXMpLm5leHQoJy5uaWNlLXNlbGVjdCcpO1xuICAgICAgICAgIFxuICAgICAgICAgIGlmICgkZHJvcGRvd24ubGVuZ3RoKSB7XG4gICAgICAgICAgICAkZHJvcGRvd24ucmVtb3ZlKCk7XG4gICAgICAgICAgICAkc2VsZWN0LmNzcygnZGlzcGxheScsICcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoJCgnLm5pY2Utc2VsZWN0JykubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAkKGRvY3VtZW50KS5vZmYoJy5uaWNlX3NlbGVjdCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZygnTWV0aG9kIFwiJyArIG1ldGhvZCArICdcIiBkb2VzIG5vdCBleGlzdC4nKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgICAgXG4gICAgLy8gSGlkZSBuYXRpdmUgc2VsZWN0XG4gICAgdGhpcy5oaWRlKCk7XG4gICAgXG4gICAgLy8gQ3JlYXRlIGN1c3RvbSBtYXJrdXBcbiAgICB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgJHNlbGVjdCA9ICQodGhpcyk7XG4gICAgICBcbiAgICAgIGlmICghJHNlbGVjdC5uZXh0KCkuaGFzQ2xhc3MoJ25pY2Utc2VsZWN0JykpIHtcbiAgICAgICAgY3JlYXRlX25pY2Vfc2VsZWN0KCRzZWxlY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIGZ1bmN0aW9uIGNyZWF0ZV9uaWNlX3NlbGVjdCgkc2VsZWN0KSB7XG4gICAgICAkc2VsZWN0LmFmdGVyKCQoJzxkaXY+PC9kaXY+JylcbiAgICAgICAgLmFkZENsYXNzKCduaWNlLXNlbGVjdCcpXG4gICAgICAgIC5hZGRDbGFzcygkc2VsZWN0LmF0dHIoJ2NsYXNzJykgfHwgJycpXG4gICAgICAgIC5hZGRDbGFzcygkc2VsZWN0LmF0dHIoJ2Rpc2FibGVkJykgPyAnZGlzYWJsZWQnIDogJycpXG4gICAgICAgIC5hdHRyKCd0YWJpbmRleCcsICRzZWxlY3QuYXR0cignZGlzYWJsZWQnKSA/IG51bGwgOiAnMCcpXG4gICAgICAgIC5odG1sKCc8c3BhbiBjbGFzcz1cImN1cnJlbnRcIj48L3NwYW4+PHVsIGNsYXNzPVwibGlzdFwiPjwvdWw+JylcbiAgICAgICk7XG4gICAgICAgIFxuICAgICAgdmFyICRkcm9wZG93biA9ICRzZWxlY3QubmV4dCgpO1xuICAgICAgdmFyICRvcHRpb25zID0gJHNlbGVjdC5maW5kKCdvcHRpb24nKTtcbiAgICAgIHZhciAkc2VsZWN0ZWQgPSAkc2VsZWN0LmZpbmQoJ29wdGlvbjpzZWxlY3RlZCcpO1xuICAgICAgXG4gICAgICAkZHJvcGRvd24uZmluZCgnLmN1cnJlbnQnKS5odG1sKCRzZWxlY3RlZC5kYXRhKCdkaXNwbGF5JykgfHzCoCRzZWxlY3RlZC50ZXh0KCkpO1xuICAgICAgXG4gICAgICAkb3B0aW9ucy5lYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgdmFyICRvcHRpb24gPSAkKHRoaXMpO1xuICAgICAgICB2YXIgZGlzcGxheSA9ICRvcHRpb24uZGF0YSgnZGlzcGxheScpO1xuXG4gICAgICAgICRkcm9wZG93bi5maW5kKCd1bCcpLmFwcGVuZCgkKCc8bGk+PC9saT4nKVxuICAgICAgICAgIC5hdHRyKCdkYXRhLXZhbHVlJywgJG9wdGlvbi52YWwoKSlcbiAgICAgICAgICAuYXR0cignZGF0YS1kaXNwbGF5JywgKGRpc3BsYXkgfHwgbnVsbCkpXG4gICAgICAgICAgLmFkZENsYXNzKCdvcHRpb24nICtcbiAgICAgICAgICAgICgkb3B0aW9uLmlzKCc6c2VsZWN0ZWQnKSA/ICcgc2VsZWN0ZWQnIDogJycpICtcbiAgICAgICAgICAgICgkb3B0aW9uLmlzKCc6ZGlzYWJsZWQnKSA/ICcgZGlzYWJsZWQnIDogJycpKVxuICAgICAgICAgIC5odG1sKCRvcHRpb24udGV4dCgpKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIC8qIEV2ZW50IGxpc3RlbmVycyAqL1xuICAgIFxuICAgIC8vIFVuYmluZCBleGlzdGluZyBldmVudHMgaW4gY2FzZSB0aGF0IHRoZSBwbHVnaW4gaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYmVmb3JlXG4gICAgJChkb2N1bWVudCkub2ZmKCcubmljZV9zZWxlY3QnKTtcbiAgICBcbiAgICAvLyBPcGVuL2Nsb3NlXG4gICAgJChkb2N1bWVudCkub24oJ2NsaWNrLm5pY2Vfc2VsZWN0JywgJy5uaWNlLXNlbGVjdCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICB2YXIgJGRyb3Bkb3duID0gJCh0aGlzKTtcbiAgICAgIFxuICAgICAgJCgnLm5pY2Utc2VsZWN0Jykubm90KCRkcm9wZG93bikucmVtb3ZlQ2xhc3MoJ29wZW4nKTtcbiAgICAgICRkcm9wZG93bi50b2dnbGVDbGFzcygnb3BlbicpO1xuICAgICAgXG4gICAgICBpZiAoJGRyb3Bkb3duLmhhc0NsYXNzKCdvcGVuJykpIHtcbiAgICAgICAgJGRyb3Bkb3duLmZpbmQoJy5vcHRpb24nKTsgIFxuICAgICAgICAkZHJvcGRvd24uZmluZCgnLmZvY3VzJykucmVtb3ZlQ2xhc3MoJ2ZvY3VzJyk7XG4gICAgICAgICRkcm9wZG93bi5maW5kKCcuc2VsZWN0ZWQnKS5hZGRDbGFzcygnZm9jdXMnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICRkcm9wZG93bi5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8vIENsb3NlIHdoZW4gY2xpY2tpbmcgb3V0c2lkZVxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljay5uaWNlX3NlbGVjdCcsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBpZiAoJChldmVudC50YXJnZXQpLmNsb3Nlc3QoJy5uaWNlLXNlbGVjdCcpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAkKCcubmljZS1zZWxlY3QnKS5yZW1vdmVDbGFzcygnb3BlbicpLmZpbmQoJy5vcHRpb24nKTsgIFxuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIC8vIE9wdGlvbiBjbGlja1xuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljay5uaWNlX3NlbGVjdCcsICcubmljZS1zZWxlY3QgLm9wdGlvbjpub3QoLmRpc2FibGVkKScsIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICB2YXIgJG9wdGlvbiA9ICQodGhpcyk7XG4gICAgICB2YXIgJGRyb3Bkb3duID0gJG9wdGlvbi5jbG9zZXN0KCcubmljZS1zZWxlY3QnKTtcbiAgICAgIFxuICAgICAgJGRyb3Bkb3duLmZpbmQoJy5zZWxlY3RlZCcpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgJG9wdGlvbi5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgIFxuICAgICAgdmFyIHRleHQgPSAkb3B0aW9uLmRhdGEoJ2Rpc3BsYXknKSB8fCAkb3B0aW9uLnRleHQoKTtcbiAgICAgICRkcm9wZG93bi5maW5kKCcuY3VycmVudCcpLnRleHQodGV4dCk7XG4gICAgICBcbiAgICAgICRkcm9wZG93bi5wcmV2KCdzZWxlY3QnKS52YWwoJG9wdGlvbi5kYXRhKCd2YWx1ZScpKS50cmlnZ2VyKCdjaGFuZ2UnKTtcbiAgICB9KTtcblxuICAgIC8vIEtleWJvYXJkIGV2ZW50c1xuICAgICQoZG9jdW1lbnQpLm9uKCdrZXlkb3duLm5pY2Vfc2VsZWN0JywgJy5uaWNlLXNlbGVjdCcsIGZ1bmN0aW9uKGV2ZW50KSB7ICAgIFxuICAgICAgdmFyICRkcm9wZG93biA9ICQodGhpcyk7XG4gICAgICB2YXIgJGZvY3VzZWRfb3B0aW9uID0gJCgkZHJvcGRvd24uZmluZCgnLmZvY3VzJykgfHwgJGRyb3Bkb3duLmZpbmQoJy5saXN0IC5vcHRpb24uc2VsZWN0ZWQnKSk7XG4gICAgICBcbiAgICAgIC8vIFNwYWNlIG9yIEVudGVyXG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PSAzMiB8fCBldmVudC5rZXlDb2RlID09IDEzKSB7XG4gICAgICAgIGlmICgkZHJvcGRvd24uaGFzQ2xhc3MoJ29wZW4nKSkge1xuICAgICAgICAgICRmb2N1c2VkX29wdGlvbi50cmlnZ2VyKCdjbGljaycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRkcm9wZG93bi50cmlnZ2VyKCdjbGljaycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIC8vIERvd25cbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PSA0MCkge1xuICAgICAgICBpZiAoISRkcm9wZG93bi5oYXNDbGFzcygnb3BlbicpKSB7XG4gICAgICAgICAgJGRyb3Bkb3duLnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyICRuZXh0ID0gJGZvY3VzZWRfb3B0aW9uLm5leHRBbGwoJy5vcHRpb246bm90KC5kaXNhYmxlZCknKS5maXJzdCgpO1xuICAgICAgICAgIGlmICgkbmV4dC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAkZHJvcGRvd24uZmluZCgnLmZvY3VzJykucmVtb3ZlQ2xhc3MoJ2ZvY3VzJyk7XG4gICAgICAgICAgICAkbmV4dC5hZGRDbGFzcygnZm9jdXMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gVXBcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5Q29kZSA9PSAzOCkge1xuICAgICAgICBpZiAoISRkcm9wZG93bi5oYXNDbGFzcygnb3BlbicpKSB7XG4gICAgICAgICAgJGRyb3Bkb3duLnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyICRwcmV2ID0gJGZvY3VzZWRfb3B0aW9uLnByZXZBbGwoJy5vcHRpb246bm90KC5kaXNhYmxlZCknKS5maXJzdCgpO1xuICAgICAgICAgIGlmICgkcHJldi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAkZHJvcGRvd24uZmluZCgnLmZvY3VzJykucmVtb3ZlQ2xhc3MoJ2ZvY3VzJyk7XG4gICAgICAgICAgICAkcHJldi5hZGRDbGFzcygnZm9jdXMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgLy8gRXNjXG4gICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleUNvZGUgPT0gMjcpIHtcbiAgICAgICAgaWYgKCRkcm9wZG93bi5oYXNDbGFzcygnb3BlbicpKSB7XG4gICAgICAgICAgJGRyb3Bkb3duLnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICAgIH1cbiAgICAgIC8vIFRhYlxuICAgICAgfSBlbHNlIGlmIChldmVudC5rZXlDb2RlID09IDkpIHtcbiAgICAgICAgaWYgKCRkcm9wZG93bi5oYXNDbGFzcygnb3BlbicpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBEZXRlY3QgQ1NTIHBvaW50ZXItZXZlbnRzIHN1cHBvcnQsIGZvciBJRSA8PSAxMC4gRnJvbSBNb2Rlcm5penIuXG4gICAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpLnN0eWxlO1xuICAgIHN0eWxlLmNzc1RleHQgPSAncG9pbnRlci1ldmVudHM6YXV0byc7XG4gICAgaWYgKHN0eWxlLnBvaW50ZXJFdmVudHMgIT09ICdhdXRvJykge1xuICAgICAgJCgnaHRtbCcpLmFkZENsYXNzKCduby1jc3Nwb2ludGVyZXZlbnRzJyk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB0aGlzO1xuXG4gIH07XG5cbn0oalF1ZXJ5KSk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/jquery-nice-select/js/jquery.nice-select.js\n"); /***/ }), /***/ "./node_modules/jquery/dist/jquery.js": /*!********************************************!*\ !*** ./node_modules/jquery/dist/jquery.js ***! \********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n * jQuery JavaScript Library v3.4.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2019-05-01T21:04Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( true && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar document = window.document;\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar concat = arr.concat;\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n // Support: Chrome <=57, Firefox <=52\n // In some browsers, typeof returns \"function\" for HTML elements\n // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n // We don't want to classify *any* DOM node as a function.\n return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n };\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar\n\tversion = \"3.4.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android <=4.0 only\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a global context\n\tglobalEval: function( code, options ) {\n\t\tDOMEval( code, { nonce: options && options.nonce } );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android <=4.0 only\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.3.4\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://js.foundation/\n *\n * Date: 2019-04-08\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// https://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trhtml = /HTML$/i,\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// CSS string/identifier serialization\n\t// https://drafts.csswg.org/cssom/#common-serializing-idioms\n\trcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n\tfcssescape = function( ch, asCodePoint ) {\n\t\tif ( asCodePoint ) {\n\n\t\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\t\tif ( ch === \"\\0\" ) {\n\t\t\t\treturn \"\\uFFFD\";\n\t\t\t}\n\n\t\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t\t}\n\n\t\t// Other potentially-special ASCII characters get backslash-escaped\n\t\treturn \"\\\\\" + ch;\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) &&\n\n\t\t\t\t// Support: IE 8 only\n\t\t\t\t// Exclude object elements\n\t\t\t\t(nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\") ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 && rdescend.test( selector ) ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rcssescape, fcssescape );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = \"#\" + nid + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement(\"fieldset\");\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\ta.sourceIndex - b.sourceIndex;\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\t/* jshint -W018 */\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\tvar namespace = elem.namespaceURI,\n\t\tdocElem = (elem.ownerDocument || elem).documentElement;\n\n\t// Support: IE <=8\n\t// Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n\t// https://bugs.jquery.com/ticket/4833\n\treturn !rhtml.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( preferredDoc !== document &&\n\t\t(subWindow = document.defaultView) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 11, Edge\n\t\tif ( subWindow.addEventListener ) {\n\t\t\tsubWindow.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( subWindow.attachEvent ) {\n\t\t\tsubWindow.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( el ) {\n\t\tel.className = \"i\";\n\t\treturn !el.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( el ) {\n\t\tel.appendChild( document.createComment(\"\") );\n\t\treturn !el.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( el ) {\n\t\tdocElem.appendChild( el ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( (elem = elems[i++]) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode(\"id\");\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See https://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( el ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// https://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( el ).innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( el.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !el.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !el.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( el ) {\n\t\t\tel.innerHTML = \"\" +\n\t\t\t\t\"\";\n\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( el.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( el.querySelectorAll(\":enabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Support: IE9-11+\n\t\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t\tdocElem.appendChild( el ).disabled = true;\n\t\t\tif ( el.querySelectorAll(\":disabled\").length !== 2 ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tel.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( el ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( el, \"*\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( el, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.escape = function( sel ) {\n\treturn (sel + \"\").replace( rcssescape, fcssescape );\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": createDisabledPseudo( false ),\n\t\t\"disabled\": createDisabledPseudo( true ),\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ?\n\t\t\t\targument + length :\n\t\t\t\targument > length ?\n\t\t\t\t\tlength :\n\t\t\t\t\targument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( skip && skip === elem.nodeName.toLowerCase() ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( (oldCache = uniqueCache[ key ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: ) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( el ) {\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement(\"fieldset\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( el ) {\n\tel.innerHTML = \"\";\n\treturn el.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( el ) {\n\tel.innerHTML = \"\";\n\tel.firstChild.setAttribute( \"value\", \"\" );\n\treturn el.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( el ) {\n\treturn el.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\njQuery.escapeSelector = Sizzle.escape;\n\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\n\n\nfunction nodeName( elem, name ) {\n\n return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n};\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( typeof elem.contentDocument !== \"undefined\" ) {\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.stackTrace );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the stack, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.stackTrace = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the master Deferred\n\t\t\tmaster = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tmaster.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( master.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn master.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), master.reject );\n\t\t}\n\n\t\treturn master.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\njQuery.Deferred.exceptionHook = function( error, stack ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message, error.stack, stack );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (#9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE <=9 only\n\toption: [ 1, \"\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting or other required elements.\n\tthead: [ 1, \"\", \"
    \" ],\n\tcol: [ 2, \"\", \"
    \" ],\n\ttr: [ 2, \"\", \"
    \" ],\n\ttd: [ 3, \"\", \"
    \" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\n// Support: IE <=9 only\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (#11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE <=9 - 11+\n// focus() and blur() are asynchronous, except when they are no-op.\n// So expect focus to be synchronous when the element is already active,\n// and blur to be synchronous when the element is not already active.\n// (focus and blur are always synchronous in other supported browsers,\n// this just defines when we can count on it).\nfunction expectSync( elem, type ) {\n\treturn ( elem === safeActiveElement() ) === ( type === \"focus\" );\n}\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tvar event = jQuery.event.fix( nativeEvent );\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\t\t\thandlers = ( dataPriv.get( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", returnTrue );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, expectSync ) {\n\n\t// Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !expectSync ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar notAsync, result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\t// Saved data should be false in such cases, but might be a leftover capture object\n\t\t\t\t// from an async native handler (gh-4350)\n\t\t\t\tif ( !saved.length ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t// focus() and blur() are asynchronous\n\t\t\t\t\tnotAsync = expectSync( this, type );\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tif ( saved !== result || notAsync ) {\n\t\t\t\t\t\tdataPriv.set( this, type, false );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult = {};\n\t\t\t\t\t}\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\treturn result.value;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering the\n\t\t\t\t// native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved.length ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, {\n\t\t\t\t\tvalue: jQuery.event.trigger(\n\n\t\t\t\t\t\t// Support: IE <=9 - 11+\n\t\t\t\t\t\t// Extend with the prototype to reset the above stopImmediatePropagation()\n\t\t\t\t\t\tjQuery.extend( saved[ 0 ], jQuery.Event.prototype ),\n\t\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\t\tthis\n\t\t\t\t\t)\n\t\t\t\t} );\n\n\t\t\t\t// Abort handling of the native event\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (#504, #13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\n\twhich: function( event ) {\n\t\tvar button = event.button;\n\n\t\t// Add which for key events\n\t\tif ( event.which == null && rkeyEvent.test( event.type ) ) {\n\t\t\treturn event.charCode != null ? event.charCode : event.keyCode;\n\t\t}\n\n\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\tif ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {\n\t\t\tif ( button & 1 ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\tif ( button & 2 ) {\n\t\t\t\treturn 3;\n\t\t\t}\n\n\t\t\tif ( button & 4 ) {\n\t\t\t\treturn 2;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn event.which;\n\t}\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, expectSync );\n\n\t\t\t// Return false to allow normal processing in the caller\n\t\t\treturn false;\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t/* eslint-disable max-len */\n\n\t// See https://github.com/eslint/eslint/issues/3229\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n\t/* eslint-enable */\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.set( dest, pdataOld );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdelete pdataCur.handle;\n\t\t\tpdataCur.events = {};\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (#8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, #12537)\n\t// .css('--customProperty) (#3144)\n\tif ( computed ) {\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trcustomProp = /^--/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\tif ( box === \"margin\" ) {\n\t\t\tdelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t// This happens for inline elements with no explicit setting (gh-3571)\n\t// Support: Android <=4.1 - 4.3 only\n\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t// Support: IE 9-11 only\n\t// Also use offsetWidth/offsetHeight for when box sizing is unreliable\n\t// We use getClientRects() to check for hidden/disconnected.\n\t// In those cases, the computed value can be trusted to be border-box\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\t\tval === \"auto\" ||\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"gridArea\": true,\n\t\t\"gridColumn\": true,\n\t\t\"gridColumnEnd\": true,\n\t\t\"gridColumnStart\": true,\n\t\t\"gridRow\": true,\n\t\t\"gridRowEnd\": true,\n\t\t\"gridRowStart\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (#7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclasses = classesToArray( value );\n\n\t\tif ( classes.length ) {\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = classesToArray( value );\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\n// Support: Firefox <=44\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.access( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = dataPriv.access( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\n\nvar nonce = Date.now();\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\n\tif ( !xml || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce++ ) + uncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url, options ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// #1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see #8605, #14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// #14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"