var te=function(){let htmx={onLoad:null,process:null,on:null,off:null,trigger:null,ajax:null,find:null,findAll:null,closest:null,values:function(e,t){return getInputValues(e,t||"post").values},remove:null,addClass:null,removeClass:null,toggleClass:null,takeClass:null,swap:null,defineExtension:null,removeExtension:null,logAll:null,logNone:null,logger:null,config:{historyEnabled:!0,historyCacheSize:10,refreshOnHistoryMiss:!1,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:!0,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:!0,allowScriptTags:!0,inlineScriptNonce:"",inlineStyleNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:!1,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",scrollBehavior:"instant",defaultFocusScroll:!1,getCacheBusterParam:!1,globalViewTransitions:!1,methodsThatUseUrlParams:["get","delete"],selfRequestsOnly:!0,ignoreTitle:!1,scrollIntoViewOnBoost:!0,triggerSpecsCache:null,disableInheritance:!1,responseHandling:[{code:"204",swap:!1},{code:"[23]..",swap:!0},{code:"[45]..",swap:!1,error:!0}],allowNestedOobSwaps:!0},parseInterval:null,_:null,version:"2.0.2"};htmx.onLoad=onLoadHelper,htmx.process=processNode,htmx.on=addEventListenerImpl,htmx.off=removeEventListenerImpl,htmx.trigger=triggerEvent,htmx.ajax=ajaxHelper,htmx.find=find,htmx.findAll=findAll,htmx.closest=closest,htmx.remove=removeElement,htmx.addClass=addClassToElement,htmx.removeClass=removeClassFromElement,htmx.toggleClass=toggleClassOnElement,htmx.takeClass=takeClassForElement,htmx.swap=swap,htmx.defineExtension=defineExtension,htmx.removeExtension=removeExtension,htmx.logAll=logAll,htmx.logNone=logNone,htmx.parseInterval=parseInterval,htmx._=internalEval;let internalAPI={addTriggerHandler,bodyContains,canAccessLocalStorage,findThisElement,filterValues,swap,hasAttribute,getAttributeValue,getClosestAttributeValue,getClosestMatch,getExpressionVars,getHeaders,getInputValues,getInternalData,getSwapSpecification,getTriggerSpecs,getTarget,makeFragment,mergeObjects,makeSettleInfo,oobSwap,querySelectorExt,settleImmediately,shouldCancel,triggerEvent,triggerErrorEvent,withExtensions},VERBS=["get","post","put","delete","patch"],VERB_SELECTOR=VERBS.map(function(e){return "[hx-"+e+"], [data-hx-"+e+"]"}).join(", "),HEAD_TAG_REGEX=makeTagRegEx("head");function makeTagRegEx(e,t=!1){return new RegExp(`<${e}(\\s[^>]*>|>)([\\s\\S]*?)<\\/${e}>`,t?"gim":"im")}function parseInterval(e){if(e==null)return;let t=NaN;return e.slice(-2)=="ms"?t=parseFloat(e.slice(0,-2)):e.slice(-1)=="s"?t=parseFloat(e.slice(0,-1))*1e3:e.slice(-1)=="m"?t=parseFloat(e.slice(0,-1))*1e3*60:t=parseFloat(e),isNaN(t)?void 0:t}function getRawAttribute(e,t){return e instanceof Element&&e.getAttribute(t)}function hasAttribute(e,t){return !!e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function getAttributeValue(e,t){return getRawAttribute(e,t)||getRawAttribute(e,"data-"+t)}function parentElt(e){let t=e.parentElement;return !t&&e.parentNode instanceof ShadowRoot?e.parentNode:t}function getDocument(){return document}function getRootNode(e,t){return e.getRootNode?e.getRootNode({composed:t}):getDocument()}function getClosestMatch(e,t){for(;e&&!t(e);)e=parentElt(e);return e||null}function getAttributeValueWithDisinheritance(e,t,n){let r=getAttributeValue(t,n),o=getAttributeValue(t,"hx-disinherit");var i=getAttributeValue(t,"hx-inherit");if(e!==t){if(htmx.config.disableInheritance)return i&&(i==="*"||i.split(" ").indexOf(n)>=0)?r:null;if(o&&(o==="*"||o.split(" ").indexOf(n)>=0))return "unset"}return r}function getClosestAttributeValue(e,t){let n=null;if(getClosestMatch(e,function(r){return !!(n=getAttributeValueWithDisinheritance(e,asElement(r),t))}),n!=="unset")return n}function matches(e,t){let n=e instanceof Element&&(e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector);return !!n&&n.call(e,t)}function getStartTag(e){let n=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i.exec(e);return n?n[1].toLowerCase():""}function parseHTML(e){return new DOMParser().parseFromString(e,"text/html")}function takeChildrenFor(e,t){for(;t.childNodes.length>0;)e.append(t.childNodes[0]);}function duplicateScript(e){let t=getDocument().createElement("script");return forEach(e.attributes,function(n){t.setAttribute(n.name,n.value);}),t.textContent=e.textContent,t.async=!1,htmx.config.inlineScriptNonce&&(t.nonce=htmx.config.inlineScriptNonce),t}function isJavaScriptScriptNode(e){return e.matches("script")&&(e.type==="text/javascript"||e.type==="module"||e.type==="")}function normalizeScriptTags(e){Array.from(e.querySelectorAll("script")).forEach(t=>{if(isJavaScriptScriptNode(t)){let n=duplicateScript(t),r=t.parentNode;try{r.insertBefore(n,t);}catch(o){logError(o);}finally{t.remove();}}});}function makeFragment(e){let t=e.replace(HEAD_TAG_REGEX,""),n=getStartTag(t),r;if(n==="html"){r=new DocumentFragment;let i=parseHTML(e);takeChildrenFor(r,i.body),r.title=i.title;}else if(n==="body"){r=new DocumentFragment;let i=parseHTML(t);takeChildrenFor(r,i.body),r.title=i.title;}else {let i=parseHTML('
'+t+"");r=i.querySelector("template").content,r.title=i.title;var o=r.querySelector("title");o&&o.parentNode===r&&(o.remove(),r.title=o.innerText);}return r&&(htmx.config.allowScriptTags?normalizeScriptTags(r):r.querySelectorAll("script").forEach(i=>i.remove())),r}function maybeCall(e){e&&e();}function isType(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function isFunction(e){return typeof e=="function"}function isRawObject(e){return isType(e,"Object")}function getInternalData(e){let t="htmx-internal-data",n=e[t];return n||(n=e[t]={}),n}function toArray(e){let t=[];if(e)for(let n=0;n=0}function bodyContains(e){let t=e.getRootNode&&e.getRootNode();return t&&t instanceof window.ShadowRoot?getDocument().body.contains(t.host):getDocument().body.contains(e)}function splitOnWhitespace(e){return e.trim().split(/\s+/)}function mergeObjects(e,t){for(let n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}function parseJSON(e){try{return JSON.parse(e)}catch(t){return logError(t),null}}function canAccessLocalStorage(){let e="htmx:localStorageTest";try{return localStorage.setItem(e,e),localStorage.removeItem(e),!0}catch{return !1}}function normalizePath(e){try{let t=new URL(e);return t&&(e=t.pathname+t.search),/^\/$/.test(e)||(e=e.replace(/\/+$/,"")),e}catch{return e}}function internalEval(str){return maybeEval(getDocument().body,function(){return eval(str)})}function onLoadHelper(e){return htmx.on("htmx:load",function(n){e(n.detail.elt);})}function logAll(){htmx.logger=function(e,t,n){console&&console.log(t,e,n);};}function logNone(){htmx.logger=null;}function find(e,t){return typeof e!="string"?e.querySelector(t):find(getDocument(),e)}function findAll(e,t){return typeof e!="string"?e.querySelectorAll(t):findAll(getDocument(),e)}function getWindow(){return window}function removeElement(e,t){e=resolveTarget(e),t?getWindow().setTimeout(function(){removeElement(e),e=null;},t):parentElt(e).removeChild(e);}function asElement(e){return e instanceof Element?e:null}function asHtmlElement(e){return e instanceof HTMLElement?e:null}function asString(e){return typeof e=="string"?e:null}function asParentNode(e){return e instanceof Element||e instanceof Document||e instanceof DocumentFragment?e:null}function addClassToElement(e,t,n){e=asElement(resolveTarget(e)),e&&(n?getWindow().setTimeout(function(){addClassToElement(e,t),e=null;},n):e.classList&&e.classList.add(t));}function removeClassFromElement(e,t,n){let r=asElement(resolveTarget(e));r&&(n?getWindow().setTimeout(function(){removeClassFromElement(r,t),r=null;},n):r.classList&&(r.classList.remove(t),r.classList.length===0&&r.removeAttribute("class")));}function toggleClassOnElement(e,t){e=resolveTarget(e),e.classList.toggle(t);}function takeClassForElement(e,t){e=resolveTarget(e),forEach(e.parentElement.children,function(n){removeClassFromElement(n,t);}),addClassToElement(asElement(e),t);}function closest(e,t){if(e=asElement(resolveTarget(e)),e&&e.closest)return e.closest(t);do if(e==null||matches(e,t))return e;while(e=e&&asElement(parentElt(e)));return null}function startsWith(e,t){return e.substring(0,t.length)===t}function endsWith(e,t){return e.substring(e.length-t.length)===t}function normalizeSelector(e){let t=e.trim();return startsWith(t,"<")&&endsWith(t,"/>")?t.substring(1,t.length-2):t}function querySelectorAllExt(e,t,n){return e=resolveTarget(e),t.indexOf("closest ")===0?[closest(asElement(e),normalizeSelector(t.substr(8)))]:t.indexOf("find ")===0?[find(asParentNode(e),normalizeSelector(t.substr(5)))]:t==="next"?[asElement(e).nextElementSibling]:t.indexOf("next ")===0?[scanForwardQuery(e,normalizeSelector(t.substr(5)),!!n)]:t==="previous"?[asElement(e).previousElementSibling]:t.indexOf("previous ")===0?[scanBackwardsQuery(e,normalizeSelector(t.substr(9)),!!n)]:t==="document"?[document]:t==="window"?[window]:t==="body"?[document.body]:t==="root"?[getRootNode(e,!!n)]:t.indexOf("global ")===0?querySelectorAllExt(e,t.slice(7),!0):toArray(asParentNode(getRootNode(e,!!n)).querySelectorAll(normalizeSelector(t)))}var scanForwardQuery=function(e,t,n){let r=asParentNode(getRootNode(e,n)).querySelectorAll(t);for(let o=0;o=0;o--){let i=r[o];if(i.compareDocumentPosition(e)===Node.DOCUMENT_POSITION_FOLLOWING)return i}};function querySelectorExt(e,t){return typeof e!="string"?querySelectorAllExt(e,t)[0]:querySelectorAllExt(getDocument().body,e)[0]}function resolveTarget(e,t){return typeof e=="string"?find(asParentNode(t)||document,e):e}function processEventArgs(e,t,n){return isFunction(t)?{target:getDocument().body,event:asString(e),listener:t}:{target:resolveTarget(e),event:asString(t),listener:n}}function addEventListenerImpl(e,t,n){return ready(function(){let o=processEventArgs(e,t,n);o.target.addEventListener(o.event,o.listener);}),isFunction(t)?t:n}function removeEventListenerImpl(e,t,n){return ready(function(){let r=processEventArgs(e,t,n);r.target.removeEventListener(r.event,r.listener);}),isFunction(t)?t:n}let DUMMY_ELT=getDocument().createElement("output");function findAttributeTargets(e,t){let n=getClosestAttributeValue(e,t);if(n){if(n==="this")return [findThisElement(e,t)];{let r=querySelectorAllExt(e,n);return r.length===0?(logError('The selector "'+n+'" on '+t+" returned no matches!"),[DUMMY_ELT]):r}}}function findThisElement(e,t){return asElement(getClosestMatch(e,function(n){return getAttributeValue(asElement(n),t)!=null}))}function getTarget(e){let t=getClosestAttributeValue(e,"hx-target");return t?t==="this"?findThisElement(e,"hx-target"):querySelectorExt(e,t):getInternalData(e).boosted?getDocument().body:e}function shouldSettleAttribute(e){let t=htmx.config.attributesToSettle;for(let n=0;n0?(o=e.substr(0,e.indexOf(":")),r=e.substr(e.indexOf(":")+1,e.length)):o=e);let i=getDocument().querySelectorAll(r);return i?(forEach(i,function(s){let l,a=t.cloneNode(!0);l=getDocument().createDocumentFragment(),l.appendChild(a),isInlineSwap(o,s)||(l=asParentNode(a));let u={shouldSwap:!0,target:s,fragment:l};triggerEvent(s,"htmx:oobBeforeSwap",u)&&(s=u.target,u.shouldSwap&&swapWithStyle(o,s,s,l,n),forEach(n.elts,function(f){triggerEvent(f,"htmx:oobAfterSwap",u);}));}),t.parentNode.removeChild(t)):(t.parentNode.removeChild(t),triggerErrorEvent(getDocument().body,"htmx:oobErrorNoTarget",{content:t})),e}function handlePreservedElements(e){forEach(findAll(e,"[hx-preserve], [data-hx-preserve]"),function(t){let n=getAttributeValue(t,"id"),r=getDocument().getElementById(n);r!=null&&t.parentNode.replaceChild(r,t);});}function handleAttributes(e,t,n){forEach(t.querySelectorAll("[id]"),function(r){let o=getRawAttribute(r,"id");if(o&&o.length>0){let i=o.replace("'","\\'"),s=r.tagName.replace(":","\\:"),l=asParentNode(e),a=l&&l.querySelector(s+"[id='"+i+"']");if(a&&a!==l){let u=r.cloneNode();cloneAttributes(r,a),n.tasks.push(function(){cloneAttributes(r,u);});}}});}function makeAjaxLoadTask(e){return function(){removeClassFromElement(e,htmx.config.addedClass),processNode(asElement(e)),processFocus(asParentNode(e)),triggerEvent(e,"htmx:load");}}function processFocus(e){let t="[autofocus]",n=asHtmlElement(matches(e,t)?e:e.querySelector(t));n?.focus();}function insertNodesBefore(e,t,n,r){for(handleAttributes(e,n,r);n.childNodes.length>0;){let o=n.firstChild;addClassToElement(asElement(o),htmx.config.addedClass),e.insertBefore(o,t),o.nodeType!==Node.TEXT_NODE&&o.nodeType!==Node.COMMENT_NODE&&r.tasks.push(makeAjaxLoadTask(o));}}function stringHash(e,t){let n=0;for(;n0}function swap(e,t,n,r){r||(r={}),e=resolveTarget(e);let o=document.activeElement,i={};try{i={elt:o,start:o?o.selectionStart:null,end:o?o.selectionEnd:null};}catch{}let s=makeSettleInfo(e);if(n.swapStyle==="textContent")e.textContent=t;else {let a=makeFragment(t);if(s.title=a.title,r.selectOOB){let u=r.selectOOB.split(",");for(let f=0;f0?getWindow().setTimeout(l,n.settleDelay):l();}function handleTriggerHeader(e,t,n){let r=e.getResponseHeader(t);if(r.indexOf("{")===0){let o=parseJSON(r);for(let i in o)if(o.hasOwnProperty(i)){let s=o[i];isRawObject(s)?n=s.target!==void 0?s.target:n:s={value:s},triggerEvent(n,i,s);}}else {let o=r.split(",");for(let i=0;i0;){let s=t[0];if(s==="]"){if(r--,r===0){i===null&&(o=o+"true"),t.shift(),o+=")})";try{let l=maybeEval(e,function(){return Function(o)()},function(){return !0});return l.source=o,l}catch(l){return triggerErrorEvent(getDocument().body,"htmx:syntax:error",{error:l,source:o}),null}}}else s==="["&&r++;isPossibleRelativeReference(s,i,n)?o+="(("+n+"."+s+") ? ("+n+"."+s+") : (window."+s+"))":o=o+s,i=t.shift();}}}function consumeUntil(e,t){let n="";for(;e.length>0&&!t.test(e[0]);)n+=e.shift();return n}function consumeCSSSelector(e){let t;return e.length>0&&COMBINED_SELECTOR_START.test(e[0])?(e.shift(),t=consumeUntil(e,COMBINED_SELECTOR_END).trim(),e.shift()):t=consumeUntil(e,WHITESPACE_OR_COMMA),t}let INPUT_SELECTOR="input, textarea, select";function parseAndCacheTrigger(e,t,n){let r=[],o=tokenizeString(t);do{consumeUntil(o,NOT_WHITESPACE);let l=o.length,a=consumeUntil(o,/[,\[\s]/);if(a!=="")if(a==="every"){let u={trigger:"every"};consumeUntil(o,NOT_WHITESPACE),u.pollInterval=parseInterval(consumeUntil(o,/[,\[\s]/)),consumeUntil(o,NOT_WHITESPACE);var i=maybeGenerateConditional(e,o,"event");i&&(u.eventFilter=i),r.push(u);}else {let u={trigger:a};var i=maybeGenerateConditional(e,o,"event");for(i&&(u.eventFilter=i);o.length>0&&o[0]!==",";){consumeUntil(o,NOT_WHITESPACE);let c=o.shift();if(c==="changed")u.changed=!0;else if(c==="once")u.once=!0;else if(c==="consume")u.consume=!0;else if(c==="delay"&&o[0]===":")o.shift(),u.delay=parseInterval(consumeUntil(o,WHITESPACE_OR_COMMA));else if(c==="from"&&o[0]===":"){if(o.shift(),COMBINED_SELECTOR_START.test(o[0]))var s=consumeCSSSelector(o);else {var s=consumeUntil(o,WHITESPACE_OR_COMMA);if(s==="closest"||s==="find"||s==="next"||s==="previous"){o.shift();let b=consumeCSSSelector(o);b.length>0&&(s+=" "+b);}}u.from=s;}else c==="target"&&o[0]===":"?(o.shift(),u.target=consumeCSSSelector(o)):c==="throttle"&&o[0]===":"?(o.shift(),u.throttle=parseInterval(consumeUntil(o,WHITESPACE_OR_COMMA))):c==="queue"&&o[0]===":"?(o.shift(),u.queue=consumeUntil(o,WHITESPACE_OR_COMMA)):c==="root"&&o[0]===":"?(o.shift(),u[c]=consumeCSSSelector(o)):c==="threshold"&&o[0]===":"?(o.shift(),u[c]=consumeUntil(o,WHITESPACE_OR_COMMA)):triggerErrorEvent(e,"htmx:syntax:error",{token:o.shift()});}r.push(u);}o.length===l&&triggerErrorEvent(e,"htmx:syntax:error",{token:o.shift()}),consumeUntil(o,NOT_WHITESPACE);}while(o[0]===","&&o.shift());return n&&(n[t]=r),r}function getTriggerSpecs(e){let t=getAttributeValue(e,"hx-trigger"),n=[];if(t){let r=htmx.config.triggerSpecsCache;n=r&&r[t]||parseAndCacheTrigger(e,t,r);}return n.length>0?n:matches(e,"form")?[{trigger:"submit"}]:matches(e,'input[type="button"], input[type="submit"]')?[{trigger:"click"}]:matches(e,INPUT_SELECTOR)?[{trigger:"change"}]:[{trigger:"click"}]}function cancelPolling(e){getInternalData(e).cancelled=!0;}function processPolling(e,t,n){let r=getInternalData(e);r.timeout=getWindow().setTimeout(function(){bodyContains(e)&&r.cancelled!==!0&&(maybeFilterEvent(n,e,makeEvent("hx:poll:trigger",{triggerSpec:n,target:e}))||t(e),processPolling(e,t,n));},n.pollInterval);}function isLocalLink(e){return location.hostname===e.hostname&&getRawAttribute(e,"href")&&getRawAttribute(e,"href").indexOf("#")!==0}function eltIsDisabled(e){return closest(e,htmx.config.disableSelector)}function boostElement(e,t,n){if(e instanceof HTMLAnchorElement&&isLocalLink(e)&&(e.target===""||e.target==="_self")||e.tagName==="FORM"&&String(getRawAttribute(e,"method")).toLowerCase()!=="dialog"){t.boosted=!0;let r,o;if(e.tagName==="A")r="get",o=getRawAttribute(e,"href");else {let i=getRawAttribute(e,"method");r=i?i.toLowerCase():"get",o=getRawAttribute(e,"action");}n.forEach(function(i){addEventListener(e,function(s,l){let a=asElement(s);if(eltIsDisabled(a)){cleanUpElement(a);return}issueAjaxRequest(r,o,a,l);},t,i,!0);});}}function shouldCancel(e,t){let n=asElement(t);return n?!!((e.type==="submit"||e.type==="click")&&(n.tagName==="FORM"||matches(n,'input[type="submit"], button')&&closest(n,"form")!==null||n instanceof HTMLAnchorElement&&n.href&&(n.getAttribute("href")==="#"||n.getAttribute("href").indexOf("#")!==0))):!1}function ignoreBoostedAnchorCtrlClick(e,t){return getInternalData(e).boosted&&e instanceof HTMLAnchorElement&&t.type==="click"&&(t.ctrlKey||t.metaKey)}function maybeFilterEvent(e,t,n){let r=e.eventFilter;if(r)try{return r.call(t,n)!==!0}catch(o){let i=r.source;return triggerErrorEvent(getDocument().body,"htmx:eventFilter:error",{error:o,source:i}),!0}return !1}function addEventListener(e,t,n,r,o){let i=getInternalData(e),s;r.from?s=querySelectorAllExt(e,r.from):s=[e],r.changed&&s.forEach(function(l){let a=getInternalData(l);a.lastValue=l.value;}),forEach(s,function(l){let a=function(u){if(!bodyContains(e)){l.removeEventListener(r.trigger,a);return}if(ignoreBoostedAnchorCtrlClick(e,u)||((o||shouldCancel(u,e))&&u.preventDefault(),maybeFilterEvent(r,e,u)))return;let f=getInternalData(u);if(f.triggerSpec=r,f.handledFor==null&&(f.handledFor=[]),f.handledFor.indexOf(e)<0){if(f.handledFor.push(e),r.consume&&u.stopPropagation(),r.target&&u.target&&!matches(asElement(u.target),r.target))return;if(r.once){if(i.triggeredOnce)return;i.triggeredOnce=!0;}if(r.changed){let c=getInternalData(l),d=l.value;if(c.lastValue===d)return;c.lastValue=d;}if(i.delayed&&clearTimeout(i.delayed),i.throttle)return;r.throttle>0?i.throttle||(triggerEvent(e,"htmx:trigger"),t(e,u),i.throttle=getWindow().setTimeout(function(){i.throttle=null;},r.throttle)):r.delay>0?i.delayed=getWindow().setTimeout(function(){triggerEvent(e,"htmx:trigger"),t(e,u);},r.delay):(triggerEvent(e,"htmx:trigger"),t(e,u));}};n.listenerInfos==null&&(n.listenerInfos=[]),n.listenerInfos.push({trigger:r.trigger,listener:a,on:l}),l.addEventListener(r.trigger,a);});}let windowIsScrolling=!1,scrollHandler=null;function initScrollHandler(){scrollHandler||(scrollHandler=function(){windowIsScrolling=!0;},window.addEventListener("scroll",scrollHandler),setInterval(function(){windowIsScrolling&&(windowIsScrolling=!1,forEach(getDocument().querySelectorAll("[hx-trigger*='revealed'],[data-hx-trigger*='revealed']"),function(e){maybeReveal(e);}));},200));}function maybeReveal(e){!hasAttribute(e,"data-hx-revealed")&&isScrolledIntoView(e)&&(e.setAttribute("data-hx-revealed","true"),getInternalData(e).initHash?triggerEvent(e,"revealed"):e.addEventListener("htmx:afterProcessNode",function(){triggerEvent(e,"revealed");},{once:!0}));}function loadImmediately(e,t,n,r){let o=function(){n.loaded||(n.loaded=!0,t(e));};r>0?getWindow().setTimeout(o,r):o();}function processVerbs(e,t,n){let r=!1;return forEach(VERBS,function(o){if(hasAttribute(e,"hx-"+o)){let i=getAttributeValue(e,"hx-"+o);r=!0,t.path=i,t.verb=o,n.forEach(function(s){addTriggerHandler(e,s,t,function(l,a){let u=asElement(l);if(closest(u,htmx.config.disableSelector)){cleanUpElement(u);return}issueAjaxRequest(o,i,u,a);});});}}),r}function addTriggerHandler(e,t,n,r){if(t.trigger==="revealed")initScrollHandler(),addEventListener(e,r,n,t),maybeReveal(asElement(e));else if(t.trigger==="intersect"){let o={};t.root&&(o.root=querySelectorExt(e,t.root)),t.threshold&&(o.threshold=parseFloat(t.threshold)),new IntersectionObserver(function(s){for(let l=0;l0?(n.polling=!0,processPolling(asElement(e),r,t)):addEventListener(e,r,n,t);}function shouldProcessHxOn(e){let t=asElement(e);if(!t)return !1;let n=t.attributes;for(let r=0;r", "+i).join(""))}else return []}function maybeSetLastButtonClicked(e){let t=closest(asElement(e.target),"button, input[type='submit']"),n=getRelatedFormData(e);n&&(n.lastButtonClicked=t);}function maybeUnsetLastButtonClicked(e){let t=getRelatedFormData(e);t&&(t.lastButtonClicked=null);}function getRelatedFormData(e){let t=closest(asElement(e.target),"button, input[type='submit']");if(!t)return;let n=resolveTarget("#"+getRawAttribute(t,"form"),t.getRootNode())||closest(t,"form");if(n)return getInternalData(n)}function initButtonTracking(e){e.addEventListener("click",maybeSetLastButtonClicked),e.addEventListener("focusin",maybeSetLastButtonClicked),e.addEventListener("focusout",maybeUnsetLastButtonClicked);}function addHxOnEventHandler(e,t,n){let r=getInternalData(e);Array.isArray(r.onHandlers)||(r.onHandlers=[]);let o,i=function(s){maybeEval(e,function(){eltIsDisabled(e)||(o||(o=new Function("event",n)),o.call(e,s));});};e.addEventListener(t,i),r.onHandlers.push({event:t,listener:i});}function processHxOnWildcard(e){deInitOnHandlers(e);for(let t=0;thtmx.config.historyCacheSize;)i.shift();for(;i.length>0;)try{localStorage.setItem("htmx-history-cache",JSON.stringify(i));break}catch(l){triggerErrorEvent(getDocument().body,"htmx:historyCacheError",{cause:l,cache:i}),i.shift();}}function getCachedHistory(e){if(!canAccessLocalStorage())return null;e=normalizePath(e);let t=parseJSON(localStorage.getItem("htmx-history-cache"))||[];for(let n=0;n=200&&this.status<400){triggerEvent(getDocument().body,"htmx:historyCacheMissLoad",n);let r=makeFragment(this.response),o=r.querySelector("[hx-history-elt],[data-hx-history-elt]")||r,i=getHistoryElement(),s=makeSettleInfo(i);handleTitle(r.title),swapInnerHTML(i,o,s),settleImmediately(s.tasks),currentPathForHistory=e,triggerEvent(getDocument().body,"htmx:historyRestore",{path:e,cacheMiss:!0,serverResponse:this.response});}else triggerErrorEvent(getDocument().body,"htmx:historyCacheMissLoadError",n);},t.send();}function restoreHistory(e){saveCurrentPageToHistory(),e=e||location.pathname+location.search;let t=getCachedHistory(e);if(t){let n=makeFragment(t.content),r=getHistoryElement(),o=makeSettleInfo(r);handleTitle(n.title),swapInnerHTML(r,n,o),settleImmediately(o.tasks),getWindow().setTimeout(function(){window.scrollTo(0,t.scroll);},0),currentPathForHistory=e,triggerEvent(getDocument().body,"htmx:historyRestore",{path:e,item:t});}else htmx.config.refreshOnHistoryMiss?window.location.reload(!0):loadHistoryFromServer(e);}function addRequestIndicatorClasses(e){let t=findAttributeTargets(e,"hx-indicator");return t==null&&(t=[e]),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)+1,n.classList.add.call(n.classList,htmx.config.requestClass);}),t}function disableElements(e){let t=findAttributeTargets(e,"hx-disabled-elt");return t==null&&(t=[]),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)+1,n.setAttribute("disabled",""),n.setAttribute("data-disabled-by-htmx","");}),t}function removeRequestIndicators(e,t){forEach(e,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)-1,r.requestCount===0&&n.classList.remove.call(n.classList,htmx.config.requestClass);}),forEach(t,function(n){let r=getInternalData(n);r.requestCount=(r.requestCount||0)-1,r.requestCount===0&&(n.removeAttribute("disabled"),n.removeAttribute("data-disabled-by-htmx"));});}function haveSeenNode(e,t){for(let n=0;nt.indexOf(o)<0):r=r.filter(o=>o!==t),n.delete(e),forEach(r,o=>n.append(e,o));}}function processInputValue(e,t,n,r,o){if(!(r==null||haveSeenNode(e,r))){if(e.push(r),shouldInclude(r)){let i=getRawAttribute(r,"name"),s=r.value;r instanceof HTMLSelectElement&&r.multiple&&(s=toArray(r.querySelectorAll("option:checked")).map(function(l){return l.value})),r instanceof HTMLInputElement&&r.files&&(s=toArray(r.files)),addValueToFormData(i,s,t),o&&validateElement(r,n);}r instanceof HTMLFormElement&&(forEach(r.elements,function(i){e.indexOf(i)>=0?removeValueFromFormData(i.name,i.value,t):e.push(i),o&&validateElement(i,n);}),new FormData(r).forEach(function(i,s){i instanceof File&&i.name===""||addValueToFormData(s,i,t);}));}}function validateElement(e,t){let n=e;n.willValidate&&(triggerEvent(n,"htmx:validation:validate"),n.checkValidity()||(t.push({elt:n,message:n.validationMessage,validity:n.validity}),triggerEvent(n,"htmx:validation:failed",{message:n.validationMessage,validity:n.validity})));}function overrideFormData(e,t){for(let n of t.keys())e.delete(n);return t.forEach(function(n,r){e.append(r,n);}),e}function getInputValues(e,t){let n=[],r=new FormData,o=new FormData,i=[],s=getInternalData(e);s.lastButtonClicked&&!bodyContains(s.lastButtonClicked)&&(s.lastButtonClicked=null);let l=e instanceof HTMLFormElement&&e.noValidate!==!0||getAttributeValue(e,"hx-validate")==="true";if(s.lastButtonClicked&&(l=l&&s.lastButtonClicked.formNoValidate!==!0),t!=="get"&&processInputValue(n,o,i,closest(e,"form"),l),processInputValue(n,r,i,e,l),s.lastButtonClicked||e.tagName==="BUTTON"||e.tagName==="INPUT"&&getRawAttribute(e,"type")==="submit"){let u=s.lastButtonClicked||e,f=getRawAttribute(u,"name");addValueToFormData(f,u.value,o);}let a=findAttributeTargets(e,"hx-include");return forEach(a,function(u){processInputValue(n,r,i,asElement(u),l),matches(u,"form")||forEach(asParentNode(u).querySelectorAll(INPUT_SELECTOR),function(f){processInputValue(n,r,i,f,l);});}),overrideFormData(r,o),{errors:i,formData:r,values:formDataProxy(r)}}function appendParam(e,t,n){e!==""&&(e+="&"),String(n)==="[object Object]"&&(n=JSON.stringify(n));let r=encodeURIComponent(n);return e+=encodeURIComponent(t)+"="+r,e}function urlEncode(e){e=formDataFromObject(e);let t="";return e.forEach(function(n,r){t=appendParam(t,r,n);}),t}function getHeaders(e,t,n){let r={"HX-Request":"true","HX-Trigger":getRawAttribute(e,"id"),"HX-Trigger-Name":getRawAttribute(e,"name"),"HX-Target":getAttributeValue(t,"id"),"HX-Current-URL":getDocument().location.href};return getValuesForElement(e,"hx-headers",!1,r),n!==void 0&&(r["HX-Prompt"]=n),getInternalData(e).boosted&&(r["HX-Boosted"]="true"),r}function filterValues(e,t){let n=getClosestAttributeValue(t,"hx-params");if(n){if(n==="none")return new FormData;if(n==="*")return e;if(n.indexOf("not ")===0)return forEach(n.substr(4).split(","),function(r){r=r.trim(),e.delete(r);}),e;{let r=new FormData;return forEach(n.split(","),function(o){o=o.trim(),e.has(o)&&e.getAll(o).forEach(function(i){r.append(o,i);});}),r}}else return e}function isAnchorLink(e){return !!getRawAttribute(e,"href")&&getRawAttribute(e,"href").indexOf("#")>=0}function getSwapSpecification(e,t){let n=t||getClosestAttributeValue(e,"hx-swap"),r={swapStyle:getInternalData(e).boosted?"innerHTML":htmx.config.defaultSwapStyle,swapDelay:htmx.config.defaultSwapDelay,settleDelay:htmx.config.defaultSettleDelay};if(htmx.config.scrollIntoViewOnBoost&&getInternalData(e).boosted&&!isAnchorLink(e)&&(r.show="top"),n){let s=splitOnWhitespace(n);if(s.length>0)for(let l=0;l0?o.join(":"):null;r.scroll=f,r.scrollTarget=i;}else if(a.indexOf("show:")===0){var o=a.substr(5).split(":");let c=o.pop();var i=o.length>0?o.join(":"):null;r.show=c,r.showTarget=i;}else if(a.indexOf("focus-scroll:")===0){let u=a.substr(13);r.focusScroll=u=="true";}else l==0?r.swapStyle=a:logError("Unknown modifier in hx-swap: "+a);}}return r}function usesFormData(e){return getClosestAttributeValue(e,"hx-encoding")==="multipart/form-data"||matches(e,"form")&&getRawAttribute(e,"enctype")==="multipart/form-data"}function encodeParamsForBody(e,t,n){let r=null;return withExtensions(t,function(o){r==null&&(r=o.encodeParameters(e,n,t));}),r??(usesFormData(t)?overrideFormData(new FormData,formDataFromObject(n)):urlEncode(n))}function makeSettleInfo(e){return {tasks:[],elts:[e]}}function updateScrollState(e,t){let n=e[0],r=e[e.length-1];if(t.scroll){var o=null;t.scrollTarget&&(o=asElement(querySelectorExt(n,t.scrollTarget))),t.scroll==="top"&&(n||o)&&(o=o||n,o.scrollTop=0),t.scroll==="bottom"&&(r||o)&&(o=o||r,o.scrollTop=o.scrollHeight);}if(t.show){var o=null;if(t.showTarget){let s=t.showTarget;t.showTarget==="window"&&(s="body"),o=asElement(querySelectorExt(n,s));}t.show==="top"&&(n||o)&&(o=o||n,o.scrollIntoView({block:"start",behavior:htmx.config.scrollBehavior})),t.show==="bottom"&&(r||o)&&(o=o||r,o.scrollIntoView({block:"end",behavior:htmx.config.scrollBehavior}));}}function getValuesForElement(e,t,n,r){if(r==null&&(r={}),e==null)return r;let o=getAttributeValue(e,t);if(o){let i=o.trim(),s=n;if(i==="unset")return null;i.indexOf("javascript:")===0?(i=i.substr(11),s=!0):i.indexOf("js:")===0&&(i=i.substr(3),s=!0),i.indexOf("{")!==0&&(i="{"+i+"}");let l;s?l=maybeEval(e,function(){return Function("return ("+i+")")()},{}):l=parseJSON(i);for(let a in l)l.hasOwnProperty(a)&&r[a]==null&&(r[a]=l[a]);}return getValuesForElement(asElement(parentElt(e)),t,n,r)}function maybeEval(e,t,n){return htmx.config.allowEval?t():(triggerErrorEvent(e,"htmx:evalDisallowedError"),n)}function getHXVarsForElement(e,t){return getValuesForElement(e,"hx-vars",!0,t)}function getHXValsForElement(e,t){return getValuesForElement(e,"hx-vals",!1,t)}function getExpressionVars(e){return mergeObjects(getHXVarsForElement(e),getHXValsForElement(e))}function safelySetHeaderValue(e,t,n){if(n!==null)try{e.setRequestHeader(t,n);}catch{e.setRequestHeader(t,encodeURIComponent(n)),e.setRequestHeader(t+"-URI-AutoEncoded","true");}}function getPathFromResponse(e){if(e.responseURL&&typeof URL<"u")try{let t=new URL(e.responseURL);return t.pathname+t.search}catch{triggerErrorEvent(getDocument().body,"htmx:badResponseUrl",{url:e.responseURL});}}function hasHeader(e,t){return t.test(e.getAllResponseHeaders())}function ajaxHelper(e,t,n){return e=e.toLowerCase(),n?n instanceof Element||typeof n=="string"?issueAjaxRequest(e,t,null,null,{targetOverride:resolveTarget(n),returnPromise:!0}):issueAjaxRequest(e,t,resolveTarget(n.source),n.event,{handler:n.handler,headers:n.headers,values:n.values,targetOverride:resolveTarget(n.target),swapOverride:n.swap,select:n.select,returnPromise:!0}):issueAjaxRequest(e,t,null,null,{returnPromise:!0})}function hierarchyForElt(e){let t=[];for(;e;)t.push(e),e=e.parentElement;return t}function verifyPath(e,t,n){let r,o;return typeof URL=="function"?(o=new URL(t,document.location.href),r=document.location.origin===o.origin):(o=t,r=startsWith(t,document.location.origin)),htmx.config.selfRequestsOnly&&!r?!1:triggerEvent(e,"htmx:validateUrl",mergeObjects({url:o,sameHost:r},n))}function formDataFromObject(e){if(e instanceof FormData)return e;let t=new FormData;for(let n in e)e.hasOwnProperty(n)&&(typeof e[n].forEach=="function"?e[n].forEach(function(r){t.append(n,r);}):typeof e[n]=="object"&&!(e[n]instanceof Blob)?t.append(n,JSON.stringify(e[n])):t.append(n,e[n]));return t}function formDataArrayProxy(e,t,n){return new Proxy(n,{get:function(r,o){return typeof o=="number"?r[o]:o==="length"?r.length:o==="push"?function(i){r.push(i),e.append(t,i);}:typeof r[o]=="function"?function(){r[o].apply(r,arguments),e.delete(t),r.forEach(function(i){e.append(t,i);});}:r[o]&&r[o].length===1?r[o][0]:r[o]},set:function(r,o,i){return r[o]=i,e.delete(t),r.forEach(function(s){e.append(t,s);}),!0}})}function formDataProxy(e){return new Proxy(e,{get:function(t,n){if(typeof n=="symbol")return Reflect.get(t,n);if(n==="toJSON")return ()=>Object.fromEntries(e);if(n in t)return typeof t[n]=="function"?function(){return e[n].apply(e,arguments)}:t[n];let r=e.getAll(n);if(r.length!==0)return r.length===1?r[0]:formDataArrayProxy(t,n,r)},set:function(t,n,r){return typeof n!="string"?!1:(t.delete(n),typeof r.forEach=="function"?r.forEach(function(o){t.append(n,o);}):typeof r=="object"&&!(r instanceof Blob)?t.append(n,JSON.stringify(r)):t.append(n,r),!0)},deleteProperty:function(t,n){return typeof n=="string"&&t.delete(n),!0},ownKeys:function(t){return Reflect.ownKeys(Object.fromEntries(t))},getOwnPropertyDescriptor:function(t,n){return Reflect.getOwnPropertyDescriptor(Object.fromEntries(t),n)}})}function issueAjaxRequest(e,t,n,r,o,i){let s=null,l=null;if(o=o??{},o.returnPromise&&typeof Promise<"u")var a=new Promise(function(g,E){s=g,l=E;});n==null&&(n=getDocument().body);let u=o.handler||handleAjaxResponse,f=o.select||null;if(!bodyContains(n))return maybeCall(s),a;let c=o.targetOverride||asElement(getTarget(n));if(c==null||c==DUMMY_ELT)return triggerErrorEvent(n,"htmx:targetError",{target:getAttributeValue(n,"hx-target")}),maybeCall(l),a;let d=getInternalData(n),b=d.lastButtonClicked;if(b){let g=getRawAttribute(b,"formaction");g!=null&&(t=g);let E=getRawAttribute(b,"formmethod");E!=null&&E.toLowerCase()!=="dialog"&&(e=E);}let S=getClosestAttributeValue(n,"hx-confirm");if(i===void 0&&triggerEvent(n,"htmx:confirm",{target:c,elt:n,path:t,verb:e,triggeringEvent:r,etc:o,issueRequest:function(O){return issueAjaxRequest(e,t,n,r,o,!!O)},question:S})===!1)return maybeCall(s),a;let A=n,p=getClosestAttributeValue(n,"hx-sync"),x=null,H=!1;if(p){let g=p.split(":"),E=g[0].trim();if(E==="this"?A=findThisElement(n,"hx-sync"):A=asElement(querySelectorExt(n,E)),p=(g[1]||"drop").trim(),d=getInternalData(A),p==="drop"&&d.xhr&&d.abortable!==!0)return maybeCall(s),a;if(p==="abort"){if(d.xhr)return maybeCall(s),a;H=!0;}else p==="replace"?triggerEvent(A,"htmx:abort"):p.indexOf("queue")===0&&(x=(p.split(" ")[1]||"last").trim());}if(d.xhr)if(d.abortable)triggerEvent(A,"htmx:abort");else {if(x==null){if(r){let g=getInternalData(r);g&&g.triggerSpec&&g.triggerSpec.queue&&(x=g.triggerSpec.queue);}x==null&&(x="last");}return d.queuedRequests==null&&(d.queuedRequests=[]),x==="first"&&d.queuedRequests.length===0?d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o);}):x==="all"?d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o);}):x==="last"&&(d.queuedRequests=[],d.queuedRequests.push(function(){issueAjaxRequest(e,t,n,r,o);})),maybeCall(s),a}let m=new XMLHttpRequest;d.xhr=m,d.abortable=H;let T=function(){d.xhr=null,d.abortable=!1,d.queuedRequests!=null&&d.queuedRequests.length>0&&d.queuedRequests.shift()();},N=getClosestAttributeValue(n,"hx-prompt");if(N){var I=prompt(N);if(I===null||!triggerEvent(n,"htmx:prompt",{prompt:I,target:c}))return maybeCall(s),T(),a}if(S&&!i&&!confirm(S))return maybeCall(s),T(),a;let R=getHeaders(n,c,I);e!=="get"&&!usesFormData(n)&&(R["Content-Type"]="application/x-www-form-urlencoded"),o.headers&&(R=mergeObjects(R,o.headers));let v=getInputValues(n,e),q=v.errors,F=v.formData;o.values&&overrideFormData(F,formDataFromObject(o.values));let _=formDataFromObject(getExpressionVars(n)),W=overrideFormData(F,_),L=filterValues(W,n);htmx.config.getCacheBusterParam&&e==="get"&&L.set("org.htmx.cache-buster",getRawAttribute(c,"id")||"true"),(t==null||t==="")&&(t=getDocument().location.href);let X=getValuesForElement(n,"hx-request"),G=getInternalData(n).boosted,M=htmx.config.methodsThatUseUrlParams.indexOf(e)>=0,w={boosted:G,useUrlParams:M,formData:L,parameters:formDataProxy(L),unfilteredFormData:W,unfilteredParameters:formDataProxy(W),headers:R,target:c,verb:e,errors:q,withCredentials:o.credentials||X.credentials||htmx.config.withCredentials,timeout:o.timeout||X.timeout||htmx.config.timeout,path:t,triggeringEvent:r};if(!triggerEvent(n,"htmx:configRequest",w))return maybeCall(s),T(),a;if(t=w.path,e=w.verb,R=w.headers,L=formDataFromObject(w.parameters),q=w.errors,M=w.useUrlParams,q&&q.length>0)return triggerEvent(n,"htmx:validation:halted",w),maybeCall(s),T(),a;let Y=t.split("#"),Z=Y[0],j=Y[1],D=t;if(M&&(D=Z,!L.keys().next().done&&(D.indexOf("?")<0?D+="?":D+="&",D+=urlEncode(L),j&&(D+="#"+j))),!verifyPath(n,D,w))return triggerErrorEvent(n,"htmx:invalidPath",w),maybeCall(l),a;if(m.open(e.toUpperCase(),D,!0),m.overrideMimeType("text/html"),m.withCredentials=w.withCredentials,m.timeout=w.timeout,!X.noHeaders){for(let g in R)if(R.hasOwnProperty(g)){let E=R[g];safelySetHeaderValue(m,g,E);}}let y={xhr:m,target:c,requestConfig:w,etc:o,boosted:G,select:f,pathInfo:{requestPath:t,finalRequestPath:D,responsePath:null,anchor:j}};if(m.onload=function(){try{let g=hierarchyForElt(n);if(y.pathInfo.responsePath=getPathFromResponse(m),u(n,y),y.keepIndicators!==!0&&removeRequestIndicators(V,k),triggerEvent(n,"htmx:afterRequest",y),triggerEvent(n,"htmx:afterOnLoad",y),!bodyContains(n)){let E=null;for(;g.length>0&&E==null;){let O=g.shift();bodyContains(O)&&(E=O);}E&&(triggerEvent(E,"htmx:afterRequest",y),triggerEvent(E,"htmx:afterOnLoad",y));}maybeCall(s),T();}catch(g){throw triggerErrorEvent(n,"htmx:onLoadError",mergeObjects({error:g},y)),g}},m.onerror=function(){removeRequestIndicators(V,k),triggerErrorEvent(n,"htmx:afterRequest",y),triggerErrorEvent(n,"htmx:sendError",y),maybeCall(l),T();},m.onabort=function(){removeRequestIndicators(V,k),triggerErrorEvent(n,"htmx:afterRequest",y),triggerErrorEvent(n,"htmx:sendAbort",y),maybeCall(l),T();},m.ontimeout=function(){removeRequestIndicators(V,k),triggerErrorEvent(n,"htmx:afterRequest",y),triggerErrorEvent(n,"htmx:timeout",y),maybeCall(l),T();},!triggerEvent(n,"htmx:beforeRequest",y))return maybeCall(s),T(),a;var V=addRequestIndicatorClasses(n),k=disableElements(n);forEach(["loadstart","loadend","progress","abort"],function(g){forEach([m,m.upload],function(E){E.addEventListener(g,function(O){triggerEvent(n,"htmx:xhr:"+g,{lengthComputable:O.lengthComputable,loaded:O.loaded,total:O.total});});});}),triggerEvent(n,"htmx:beforeSend",y);let ee=M?null:encodeParamsForBody(m,n,L);return m.send(ee),a}function determineHistoryUpdates(e,t){let n=t.xhr,r=null,o=null;if(hasHeader(n,/HX-Push:/i)?(r=n.getResponseHeader("HX-Push"),o="push"):hasHeader(n,/HX-Push-Url:/i)?(r=n.getResponseHeader("HX-Push-Url"),o="push"):hasHeader(n,/HX-Replace-Url:/i)&&(r=n.getResponseHeader("HX-Replace-Url"),o="replace"),r)return r==="false"?{}:{type:o,path:r};let i=t.pathInfo.finalRequestPath,s=t.pathInfo.responsePath,l=getClosestAttributeValue(e,"hx-push-url"),a=getClosestAttributeValue(e,"hx-replace-url"),u=getInternalData(e).boosted,f=null,c=null;return l?(f="push",c=l):a?(f="replace",c=a):u&&(f="push",c=s||i),c?c==="false"?{}:(c==="true"&&(c=s||i),t.pathInfo.anchor&&c.indexOf("#")===-1&&(c=c+"#"+t.pathInfo.anchor),{type:f,path:c}):{}}function codeMatches(e,t){var n=new RegExp(e.code);return n.test(t.toString(10))}function resolveResponseHandling(e){for(var t=0;t0?getWindow().setTimeout(I,x.swapDelay):I();}c&&triggerErrorEvent(e,"htmx:responseError",mergeObjects({error:"Response Status Error Code "+n.status+" from "+t.pathInfo.requestPath},t));}}let extensions={};function extensionBase(){return {init:function(e){return null},getSelectors:function(){return null},onEvent:function(e,t){return !0},transformResponse:function(e,t,n){return e},isInlineSwap:function(e){return !1},handleSwap:function(e,t,n,r){return !1},encodeParameters:function(e,t,n){return null}}}function defineExtension(e,t){t.init&&t.init(internalAPI),extensions[e]=mergeObjects(extensionBase(),t);}function removeExtension(e){delete extensions[e];}function getExtensions(e,t,n){if(t==null&&(t=[]),e==null)return t;n==null&&(n=[]);let r=getAttributeValue(e,"hx-ext");return r&&forEach(r.split(","),function(o){if(o=o.replace(/ /g,""),o.slice(0,7)=="ignore:"){n.push(o.slice(7));return}if(n.indexOf(o)<0){let i=extensions[o];i&&t.indexOf(i)<0&&t.push(i);}}),getExtensions(asElement(parentElt(e)),t,n)}var isReady=!1;getDocument().addEventListener("DOMContentLoaded",function(){isReady=!0;});function ready(e){isReady||getDocument().readyState==="complete"?e():getDocument().addEventListener("DOMContentLoaded",e);}function insertIndicatorStyles(){if(htmx.config.includeIndicatorStyles!==!1){let e=htmx.config.inlineStyleNonce?` nonce="${htmx.config.inlineStyleNonce}"`:"";getDocument().head.insertAdjacentHTML("beforeend","");}}function getMetaConfig(){let e=getDocument().querySelector('meta[name="htmx-config"]');return e?parseJSON(e.content):null}function mergeMetaConfig(){let e=getMetaConfig();e&&(htmx.config=mergeObjects(htmx.config,e));}return ready(function(){mergeMetaConfig(),insertIndicatorStyles();let e=getDocument().body;processNode(e);let t=getDocument().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");e.addEventListener("htmx:abort",function(r){let o=r.target,i=getInternalData(o);i&&i.xhr&&i.xhr.abort();});let n=window.onpopstate?window.onpopstate.bind(window):null;window.onpopstate=function(r){r.state&&r.state.htmx?(restoreHistory(),forEach(t,function(o){triggerEvent(o,"htmx:restored",{document:getDocument(),triggerEvent});})):n&&n(r);},getWindow().setTimeout(function(){triggerEvent(e,"htmx:load",{}),e=null;},0);}),htmx}(),h=te;function ne(e,t){if(e==="ignore")return !1;let n=e.split("/"),r=t.split("/");for(let o=0;o{let s=oe(t).replace("htmx:","hx-on::");if(!r.has(o)){if(o.hasAttribute(s)){let l=se(s.replace("hx-on::","htmx:"),n.detail);l.detail.meta="trigger-children",o.dispatchEvent(l),r.add(o);}o.children&&$(o,t,n,r);}});}h.defineExtension("trigger-children",{onEvent:(e,t)=>{if(!(t instanceof CustomEvent)||t.detail.meta==="trigger-children")return !1;let n=new Set,r=t.target||t.detail.target;return $(r,e,t,n),!0},init:function(e){},transformResponse:function(e,t,n){return e},isInlineSwap:function(e){return !1},handleSwap:function(e,t,n,r){return !1},encodeParameters:function(e,t,n){},getSelectors:function(){return null}});h.defineExtension("debug",{onEvent:function(e,t){console.debug?console.debug(e,t):console&&console.log("DEBUG:",e,t);}});var C=h.config,U,ae="hx-target-";function Q(e,t){return e.substring(0,t.length)===t}function le(e,t){if(!e||!t)return null;let n=t.toString(),r=[n,n.substr(0,2)+"*",n.substr(0,2)+"x",n.substr(0,1)+"*",n.substr(0,1)+"x",n.substr(0,1)+"**",n.substr(0,1)+"xx","*","x","***","xxx"];(Q(n,"4")||Q(n,"5"))&&r.push("error");for(let o=0;o{U=e,C.responseTargetUnsetsError===void 0&&(C.responseTargetUnsetsError=!0),C.responseTargetSetsError===void 0&&(C.responseTargetSetsError=!1),C.responseTargetPrefersExisting===void 0&&(C.responseTargetPrefersExisting=!1),C.responseTargetPrefersRetargetHeader===void 0&&(C.responseTargetPrefersRetargetHeader=!0);},onEvent:(e,t)=>{if(!(t instanceof CustomEvent))return !1;if(e==="htmx:beforeSwap"&&t.detail.xhr&&t.detail.xhr.status!==200){if(t.detail.target&&(C.responseTargetPrefersExisting||C.responseTargetPrefersRetargetHeader&&t.detail.xhr.getAllResponseHeaders().match(/HX-Retarget:/i)))return t.detail.shouldSwap=!0,z(t),!0;if(!t.detail.requestConfig)return !0;let n=le(t.detail.requestConfig.elt,t.detail.xhr.status);return n&&(z(t),t.detail.shouldSwap=!0,t.detail.target=n),!0}}});h.defineExtension("mutation-error",{onEvent:(e,t)=>{if(!(t instanceof CustomEvent))return !1;if(e==="htmx:afterRequest"){if(!t.detail||!t.detail.xhr)return;let n=t.detail.xhr.status;n>=400&&h.findAll("[hx-on\\:\\:mutation-error]").forEach(r=>{h.trigger(r,"htmx:mutation-error",{status:n});});}}});var B="";h.defineExtension("livereload",{init:function(){let e=!1;for(let n of Array.from(h.findAll("[hx-ext]")))if(n.getAttribute("hx-ext")?.split(" ").includes("livereload")){e=!0;break}if(!e)return;console.log("livereload extension initialized.");let t=new EventSource("/dev/livereload");t.onmessage=function(n){let r=n.data;B===""&&(B=r),B!==r&&(B=r,ue());},t.onerror=function(n){console.error("EventSource error:",n);};},onEvent:function(e,t){}});function ue(){window.location.reload();}var ce=/__eval_[A-Za-z0-9]+\([a-z]+\)/gm;h.defineExtension("htmgo",{onEvent:function(e,t){e==="htmx:beforeCleanupElement"&&t.target&&J(t.target);}});function J(e){let t=Array.from(e.attributes);for(let n of t){let r=n.value.match(ce)||[];for(let o of r){let i=o.replace("()","").replace("(this)","").replace(";",""),s=document.getElementById(i);s&&s.tagName==="SCRIPT"&&(console.debug("removing associated script with id",i),s.remove());}}}var P=null,K=new Set;h.defineExtension("sse",{init:function(e){P=e;},onEvent:function(e,t){let n=t.target;if(n instanceof HTMLElement&&(e==="htmx:beforeCleanupElement"&&J(n),e==="htmx:beforeProcessNode")){let r=document.querySelectorAll("[sse-connect]");for(let o of Array.from(r)){let i=o.getAttribute("sse-connect");i&&!K.has(i)&&(fe(o,i),K.add(i));}}}});function fe(e,t){if(!t)return;console.info("Connecting to EventSource",t);let n=new EventSource(t);n.addEventListener("close",function(r){h.trigger(e,"htmx:sseClose",{event:r});}),n.onopen=function(r){h.trigger(e,"htmx:sseOpen",{event:r});},n.onerror=function(r){h.trigger(e,"htmx:sseError",{event:r}),n.readyState==EventSource.CLOSED&&h.trigger(e,"htmx:sseClose",{event:r});},n.onmessage=function(r){let o=P.makeSettleInfo(e);h.trigger(e,"htmx:sseBeforeMessage",{event:r});let i=r.data,s=P.makeFragment(i),l=Array.from(s.children);for(let a of l)P.oobSwap(P.getAttributeValue(a,"hx-swap-oob")||"true",a,o),a.tagName==="SCRIPT"&&a.id.startsWith("__eval")&&document.body.appendChild(a);h.trigger(e,"htmx:sseAfterMessage",{event:r});};}function de(e){let t=window.location.href;setInterval(()=>{window.location.href!==t&&(e(t,window.location.href),t=window.location.href);},100);}de((e,t)=>{he(t);});function he(e){let t=new URL(e);document.querySelectorAll("[hx-trigger]").forEach(function(n){let r=n.getAttribute("hx-trigger");if(!r)return;if(r.split(", ").find(i=>i==="url"))h.swap(n,"url",{swapStyle:"outerHTML",swapDelay:0,settleDelay:0});else for(let[i,s]of t.searchParams){let l="qs:"+i;if(r.includes(l)){console.log("triggering",l),h.trigger(n,l,null);break}}}),document.querySelectorAll("[hx-match-qp]").forEach(n=>{let r=!1;for(let o of n.getAttributeNames())if(o.startsWith("hx-match-qp-mapping:")){let i=o.replace("hx-match-qp-mapping:","");if(t.searchParams.get(i)){h.swap(n,n.getAttribute(o)??"",{swapStyle:"innerHTML",swapDelay:0,settleDelay:0}),r=!0;break}}if(!r){let o=n.getAttribute("hx-match-qp-default");o&&h.swap(n,n.getAttribute("hx-match-qp-mapping:"+o)??"",{swapStyle:"innerHTML",swapDelay:0,settleDelay:0});}});}
//# sourceMappingURL=htmgo.js.map
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2pzL25vZGVfbW9kdWxlcy9odG14Lm9yZy9kaXN0L2h0bXguZXNtLmpzIiwiLi4vanMvaHRteGV4dGVuc2lvbnMvcGF0aGRlcHMudHMiLCIuLi9qcy9odG14ZXh0ZW5zaW9ucy90cmlnZ2VyLWNoaWxkcmVuLnRzIiwiLi4vanMvaHRteGV4dGVuc2lvbnMvZGVidWcudHMiLCIuLi9qcy9odG14ZXh0ZW5zaW9ucy9yZXNwb25zZS10YXJnZXRzLnRzIiwiLi4vanMvaHRteGV4dGVuc2lvbnMvbXV0YXRpb24tZXJyb3IudHMiLCIuLi9qcy9odG14ZXh0ZW5zaW9ucy9saXZlcmVsb2FkLnRzIiwiLi4vanMvaHRteGV4dGVuc2lvbnMvaHRtZ28udHMiLCIuLi9qcy9odG14ZXh0ZW5zaW9ucy9zc2UudHMiLCIuLi9qcy9odG1nby50cyJdLCJuYW1lcyI6WyJodG14IiwiZWx0IiwidHlwZSIsInZlcmIiLCJ0YWciLCJnbG9iYWwiLCJzdHIiLCJpbnRlcnZhbCIsIm5hbWUiLCJxdWFsaWZpZWROYW1lIiwicGFyZW50IiwiY29uZGl0aW9uIiwiaW5pdGlhbEVsZW1lbnQiLCJhbmNlc3RvciIsImF0dHJpYnV0ZU5hbWUiLCJhdHRyaWJ1dGVWYWx1ZSIsImRpc2luaGVyaXQiLCJpbmhlcml0IiwiY2xvc2VzdEF0dHIiLCJlIiwic2VsZWN0b3IiLCJtYXRjaGVzRnVuY3Rpb24iLCJtYXRjaCIsInJlc3AiLCJmcmFnbWVudCIsInNjcmlwdCIsIm5ld1NjcmlwdCIsImF0dHIiLCJyZXNwb25zZSIsInJlc3BvbnNlV2l0aE5vSGVhZCIsInN0YXJ0VGFnIiwiZG9jIiwidGl0bGVFbGVtZW50IiwiZnVuYyIsIm8iLCJkYXRhUHJvcCIsImRhdGEiLCJhcnIiLCJyZXR1cm5BcnIiLCJpIiwiZWwiLCJyZWN0IiwiZWxlbVRvcCIsImVsZW1Cb3R0b20iLCJyb290Tm9kZSIsInRyaWdnZXIiLCJvYmoxIiwib2JqMiIsImtleSIsImpTdHJpbmciLCJlcnJvciIsInRlc3QiLCJwYXRoIiwidXJsIiwiY2FsbGJhY2siLCJldnQiLCJldmVudCIsImVsdE9yU2VsZWN0b3IiLCJkZWxheSIsInZhbHVlIiwiY2xhenoiLCJub2RlIiwiY2hpbGQiLCJwcmVmaXgiLCJzdWZmaXgiLCJ0cmltbWVkU2VsZWN0b3IiLCJzdGFydCIsInJlc3VsdHMiLCJjb250ZXh0IiwiYXJnMSIsImFyZzIiLCJhcmczIiwiZXZlbnRBcmdzIiwiYXR0ck5hbWUiLCJhdHRyVGFyZ2V0IiwicmVzdWx0IiwiYXR0cmlidXRlIiwidGFyZ2V0U3RyIiwiYXR0cmlidXRlc1RvU2V0dGxlIiwibWVyZ2VUbyIsIm1lcmdlRnJvbSIsInN3YXBTdHlsZSIsInRhcmdldCIsImV4dGVuc2lvbnMiLCJleHRlbnNpb24iLCJvb2JWYWx1ZSIsIm9vYkVsZW1lbnQiLCJzZXR0bGVJbmZvIiwidGFyZ2V0cyIsIm9vYkVsZW1lbnRDbG9uZSIsImJlZm9yZVN3YXBEZXRhaWxzIiwicHJlc2VydmVkRWx0IiwiaWQiLCJvbGRFbHQiLCJwYXJlbnROb2RlIiwibmV3Tm9kZSIsIm5vcm1hbGl6ZWRJZCIsIm5vcm1hbGl6ZWRUYWciLCJwYXJlbnRFbHQiLCJvbGROb2RlIiwibmV3QXR0cmlidXRlcyIsImF1dG9mb2N1cyIsImF1dG9Gb2N1c2VkRWx0IiwiaW5zZXJ0QmVmb3JlIiwic3RyaW5nIiwiaGFzaCIsImNoYXIiLCJpbnRlcm5hbERhdGEiLCJoYW5kbGVySW5mbyIsImVsZW1lbnQiLCJpbmZvIiwibmV3RWx0IiwiZWx0QmVmb3JlTmV3Q29udGVudCIsImZpcnN0Q2hpbGQiLCJleHQiLCJuZXdFbGVtZW50cyIsImoiLCJvb2JFbHRzIiwiY29udGVudCIsInN3YXBTcGVjIiwic3dhcE9wdGlvbnMiLCJhY3RpdmVFbHQiLCJzZWxlY3Rpb25JbmZvIiwib29iU2VsZWN0VmFsdWVzIiwib29iU2VsZWN0VmFsdWUiLCJ0ZW1wbGF0ZSIsIm5ld0ZyYWdtZW50IiwibmV3QWN0aXZlRWx0IiwiZm9jdXNPcHRpb25zIiwiZG9TZXR0bGUiLCJ0YXNrIiwiYW5jaG9yVGFyZ2V0IiwieGhyIiwiaGVhZGVyIiwidHJpZ2dlckJvZHkiLCJ0cmlnZ2VycyIsImV2ZW50TmFtZSIsImRldGFpbCIsImV2ZW50TmFtZXMiLCJ0b2tlbnMiLCJwb3NpdGlvbiIsInN0YXJ0UG9zaXRpb24iLCJzdGFydENoYXIiLCJzeW1ib2wiLCJ0b2tlbiIsImxhc3QiLCJwYXJhbU5hbWUiLCJicmFja2V0Q291bnQiLCJjb25kaXRpb25hbFNvdXJjZSIsImNvbmRpdGlvbkZ1bmN0aW9uIiwiZXhwbGljaXRUcmlnZ2VyIiwiY2FjaGUiLCJ0cmlnZ2VyU3BlY3MiLCJpbml0aWFsTGVuZ3RoIiwiZXZlcnkiLCJldmVudEZpbHRlciIsInRyaWdnZXJTcGVjIiwiZnJvbV9hcmciLCJoYW5kbGVyIiwic3BlYyIsIm5vZGVEYXRhIiwicmF3QXR0cmlidXRlIiwic291cmNlIiwiZXhwbGljaXRDYW5jZWwiLCJlbGVtZW50RGF0YSIsImVsdHNUb0xpc3Rlbk9uIiwiZWx0VG9MaXN0ZW5PbiIsImVsdFRvTGlzdGVuT25EYXRhIiwiZXZlbnRMaXN0ZW5lciIsImV2ZW50RGF0YSIsImxvYWQiLCJleHBsaWNpdEFjdGlvbiIsIm9ic2VydmVyT3B0aW9ucyIsImVudHJpZXMiLCJhdHRyaWJ1dGVzIiwiZWxlbWVudHMiLCJpdGVyIiwiYm9vc3RlZFNlbGVjdG9yIiwiZXh0ZW5zaW9uU2VsZWN0b3JzIiwic2VsZWN0b3JzIiwicyIsImZvcm0iLCJjb2RlIiwibGlzdGVuZXIiLCJhZnRlck9uUG9zaXRpb24iLCJuZXh0Q2hhciIsInRvRG8iLCJtc2ciLCJldmVudFJlc3VsdCIsImtlYmFiTmFtZSIsImtlYmFiZWRFdmVudCIsInJvb3RFbHQiLCJpbm5lckhUTUwiLCJ0aXRsZSIsInNjcm9sbCIsImhpc3RvcnlDYWNoZSIsIm5ld0hpc3RvcnlJdGVtIiwiY2xhc3NOYW1lIiwiY2xvbmUiLCJkaXNhYmxlSGlzdG9yeUNhY2hlIiwidGFza3MiLCJyZXF1ZXN0IiwiZGV0YWlscyIsImhpc3RvcnlFbGVtZW50IiwiY2FjaGVkIiwiaW5kaWNhdG9ycyIsImljIiwiZGlzYWJsZWRFbHRzIiwiZGlzYWJsZWRFbGVtZW50IiwiZGlzYWJsZWQiLCJwcm9jZXNzZWQiLCJmb3JtRGF0YSIsInYiLCJ2YWx1ZXMiLCJlcnJvcnMiLCJ2YWxpZGF0ZSIsImlucHV0IiwicmVjZWl2ZXIiLCJkb25vciIsInByaW9yaXR5Rm9ybURhdGEiLCJidXR0b24iLCJpbmNsdWRlcyIsImRlc2NlbmRhbnQiLCJyZXR1cm5TdHIiLCJyZWFsVmFsdWUiLCJwcm9tcHQiLCJoZWFkZXJzIiwiaW5wdXRWYWx1ZXMiLCJwYXJhbXNWYWx1ZSIsIm5ld1ZhbHVlcyIsInN3YXBJbmZvT3ZlcnJpZGUiLCJzd2FwSW5mbyIsInNwbGl0Iiwic3BsaXRTcGVjIiwic2Nyb2xsVmFsIiwic2VsZWN0b3JWYWwiLCJzaG93VmFsIiwiZm9jdXNTY3JvbGxWYWwiLCJmaWx0ZXJlZFBhcmFtZXRlcnMiLCJlbmNvZGVkUGFyYW1ldGVycyIsImZpcnN0IiwiZXZhbEFzRGVmYXVsdCIsImV2YWx1YXRlVmFsdWUiLCJ2YXJzVmFsdWVzIiwidG9FdmFsIiwiZGVmYXVsdFZhbCIsImV4cHJlc3Npb25WYXJzIiwiaGVhZGVyVmFsdWUiLCJyZWdleHAiLCJyZXF1ZXN0Q29uZmlnIiwic2FtZUhvc3QiLCJvYmoiLCJhcnJheSIsImluZGV4IiwicHJvcCIsImV0YyIsImNvbmZpcm1lZCIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9taXNlIiwiX3Jlc29sdmUiLCJfcmVqZWN0IiwicmVzcG9uc2VIYW5kbGVyIiwic2VsZWN0IiwiZWx0RGF0YSIsInN1Ym1pdHRlciIsImJ1dHRvblBhdGgiLCJidXR0b25WZXJiIiwiY29uZmlybVF1ZXN0aW9uIiwic2tpcENvbmZpcm1hdGlvbiIsInN5bmNFbHQiLCJzeW5jU3RyYXRlZ3kiLCJxdWV1ZVN0cmF0ZWd5IiwiYWJvcnRhYmxlIiwic3luY1N0cmluZ3MiLCJlbmRSZXF1ZXN0TG9jayIsInByb21wdFF1ZXN0aW9uIiwicHJvbXB0UmVzcG9uc2UiLCJyYXdGb3JtRGF0YSIsImFsbEZvcm1EYXRhIiwiZmlsdGVyZWRGb3JtRGF0YSIsInJlcXVlc3RBdHRyVmFsdWVzIiwiZWx0SXNCb29zdGVkIiwidXNlVXJsUGFyYW1zIiwic3BsaXRQYXRoIiwicGF0aE5vQW5jaG9yIiwiYW5jaG9yIiwiZmluYWxQYXRoIiwicmVzcG9uc2VJbmZvIiwiaGllcmFyY2h5IiwiZGlzYWJsZUVsdHMiLCJzZWNvbmRhcnlUcmlnZ2VyRWx0IiwicGFyZW50RWx0SW5IaWVyYXJjaHkiLCJwYXJhbXMiLCJwYXRoRnJvbUhlYWRlcnMiLCJ0eXBlRnJvbUhlYWRlcnMiLCJyZXF1ZXN0UGF0aCIsInJlc3BvbnNlUGF0aCIsInB1c2hVcmwiLCJyZXBsYWNlVXJsIiwiZWxlbWVudElzQm9vc3RlZCIsInNhdmVUeXBlIiwicmVzcG9uc2VIYW5kbGluZ0NvbmZpZyIsInN0YXR1cyIsInJlZ0V4cCIsInJlc3BvbnNlSGFuZGxpbmdFbGVtZW50IiwidGl0bGVFbHQiLCJyZXNwb25zZUluZm9TZWxlY3QiLCJyZWRpcmVjdFBhdGgiLCJyZWRpcmVjdFN3YXBTcGVjIiwic2hvdWxkUmVmcmVzaCIsImhpc3RvcnlVcGRhdGUiLCJyZXNwb25zZUhhbmRsaW5nIiwic2hvdWxkU3dhcCIsImlzRXJyb3IiLCJpZ25vcmVUaXRsZSIsInNlbGVjdE92ZXJyaWRlIiwic3dhcE92ZXJyaWRlIiwic2VydmVyUmVzcG9uc2UiLCJzZXR0bGVSZXNvbHZlIiwic2V0dGxlUmVqZWN0Iiwic2VsZWN0T09CIiwiZG9Td2FwIiwiZmluYWxFbHQiLCJzaG91bGRUcmFuc2l0aW9uIiwic2V0dGxlUHJvbWlzZSIsImlubmVyRG9Td2FwIiwiYXBpIiwidGV4dCIsInBhcmFtZXRlcnMiLCJleHRlbnNpb25zVG9SZXR1cm4iLCJleHRlbnNpb25zVG9JZ25vcmUiLCJleHRlbnNpb25zRm9yRWxlbWVudCIsImV4dGVuc2lvbk5hbWUiLCJmbiIsIm5vbmNlQXR0cmlidXRlIiwibWV0YUNvbmZpZyIsImJvZHkiLCJyZXN0b3JlZEVsdHMiLCJvcmlnaW5hbFBvcHN0YXRlIiwiaHRteF9lc21fZGVmYXVsdCIsImRlcGVuZHNPbiIsInBhdGhTcGVjIiwiZGVwZW5kZW5jeVBhdGgiLCJ1cmxQYXRoIiwiZGVwZW5kZW5jeUVsZW1lbnQiLCJwYXRoRWxlbWVudCIsInJlZnJlc2hQYXRoIiwiZWx0c1dpdGhEZXBzIiwiY29uZmlnIiwia2ViYWJFdmVudE5hbWUiLCJpZ25vcmVkRXZlbnRzIiwibWFrZUV2ZW50IiwidHJpZ2dlckNoaWxkcmVuIiwidHJpZ2dlcmVkIiwibmV3RXZlbnQiLCJhdHRyUHJlZml4Iiwic3RhcnRzV2l0aCIsImdldFJlc3BDb2RlVGFyZ2V0IiwicmVzcENvZGVOdW1iZXIiLCJyZXNwQ29kZSIsImF0dHJQb3NzaWJpbGl0aWVzIiwiYXR0clZhbHVlIiwiaGFuZGxlRXJyb3JGbGFnIiwiYXBpUmVmIiwibGFzdFZlcnNpb24iLCJlbmFibGVkIiwiZXZlbnRTb3VyY2UiLCJtZXNzYWdlIiwicmVsb2FkIiwiZXZhbEZ1bmNSZWdleCIsInJlbW92ZUFzc29jaWF0ZWRTY3JpcHRzIiwibWF0Y2hlcyIsImVsZSIsImNvbm5lY3RFdmVudFNvdXJjZSIsImNoaWxkcmVuIiwid2F0Y2hVcmwiLCJsYXN0VXJsIiwiXyIsIm5ld1VybCIsIm9uVXJsQ2hhbmdlIiwiaGFzTWF0Y2giLCJkZWZhdWx0S2V5Il0sIm1hcHBpbmdzIjoiQUFBQSxJQUFJQSxFQUFBQSxDQUFRLFVBQVcsQ0FJckIsSUFBTSxJQUFPLENBQUEsQ0FJWCxPQUFRLElBRVIsQ0FBQSxPQUFBLENBQVMsS0FFVCxFQUFJLENBQUEsSUFBQSxDQUVKLElBQUssSUFFTCxDQUFBLE9BQUEsQ0FBUyxLQUVULElBQU0sQ0FBQSxJQUFBLENBR04sS0FBTSxJQUVOLENBQUEsT0FBQSxDQUFTLEtBRVQsT0FBUyxDQUFBLElBQUEsQ0FVVCxPQUFRLFNBQVNDLENBQUFBLENBQUtDLEVBQU0sQ0FFMUIsT0FEb0IsZUFBZUQsQ0FBS0MsQ0FBQUEsQ0FBQUEsRUFBUSxNQUFNLENBQ25D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QUFBQSxDQUFBQSxFQUNGMUMsRUFBSyxJQUNINVMsQ0FBQUEsQ0FBQUEsQ0FDQUEsRUFBRyxZQUFhLENBQUEsc0JBQUEsQ0FBeUJzVixDQUFVLENBQUssRUFBQSxFQUFBLENBQ3hELENBQUUsU0FBVyxDQUFBLFdBQUEsQ0FBYSxVQUFXLENBQUcsQ0FBQSxXQUFBLENBQWEsQ0FBRSxDQUN6RCxFQUVKLENBQ0YsQ0FBQyxFQUNIIiwiZmlsZSI6Imh0bWdvLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGh0bXggPSAoZnVuY3Rpb24oKSB7XG4gICd1c2Ugc3RyaWN0J1xuXG4gIC8vIFB1YmxpYyBBUElcbiAgY29uc3QgaHRteCA9IHtcbiAgICAvLyBUc2MgbWFkbmVzcyBoZXJlLCBhc3NpZ25pbmcgdGhlIGZ1bmN0aW9ucyBkaXJlY3RseSByZXN1bHRzIGluIGFuIGludmFsaWQgVHlwZVNjcmlwdCBvdXRwdXQsIGJ1dCByZWFzc2lnbmluZyBpcyBmaW5lXG4gICAgLyogRXZlbnQgcHJvY2Vzc2luZyAqL1xuICAgIC8qKiBAdHlwZSB7dHlwZW9mIG9uTG9hZEhlbHBlcn0gKi9cbiAgICBvbkxvYWQ6IG51bGwsXG4gICAgLyoqIEB0eXBlIHt0eXBlb2YgcHJvY2Vzc05vZGV9ICovXG4gICAgcHJvY2VzczogbnVsbCxcbiAgICAvKiogQHR5cGUge3R5cGVvZiBhZGRFdmVudExpc3RlbmVySW1wbH0gKi9cbiAgICBvbjogbnVsbCxcbiAgICAvKiogQHR5cGUge3R5cGVvZiByZW1vdmVFdmVudExpc3RlbmVySW1wbH0gKi9cbiAgICBvZmY6IG51bGwsXG4gICAgLyoqIEB0eXBlIHt0eXBlb2YgdHJpZ2dlckV2ZW50fSAqL1xuICAgIHRyaWdnZXI6IG51bGwsXG4gICAgLyoqIEB0eXBlIHt0eXBlb2YgYWpheEhlbHBlcn0gKi9cbiAgICBhamF4OiBudWxsLFxuICAgIC8qIERPTSBxdWVyeWluZyBoZWxwZXJzICovXG4gICAgLyoqIEB0eXBlIHt0eXBlb2YgZmluZH0gKi9cbiAgICBmaW5kOiBudWxsLFxuICAgIC8qKiBAdHlwZSB7dHlwZW9mIGZpbmRBbGx9ICovXG4gICAgZmluZEFsbDogbnVsbCxcbiAgICAvKiogQHR5cGUge3R5cGVvZiBjbG9zZXN0fSAqL1xuICAgIGNsb3Nlc3Q6IG51bGwsXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgaW5wdXQgdmFsdWVzIHRoYXQgd291bGQgcmVzb2x2ZSBmb3IgYSBnaXZlbiBlbGVtZW50IHZpYSB0aGUgaHRteCB2YWx1ZSByZXNvbHV0aW9uIG1lY2hhbmlzbVxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2h0bXgub3JnL2FwaS8jdmFsdWVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdCB0aGUgZWxlbWVudCB0byByZXNvbHZlIHZhbHVlcyBvblxuICAgICAqIEBwYXJhbSB7SHR0cFZlcmJ9IHR5cGUgdGhlIHJlcXVlc3QgdHlwZSAoZS5nLiAqKmdldCoqIG9yICoqcG9zdCoqKSBub24tR0VUJ3Mgd2lsbCBpbmNsdWRlIHRoZSBlbmNsb3NpbmcgZm9ybSBvZiB0aGUgZWxlbWVudC4gRGVmYXVsdHMgdG8gKipwb3N0KipcbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICAqL1xuICAgIHZhbHVlczogZnVuY3Rpb24oZWx0LCB0eXBlKSB7XG4gICAgICBjb25zdCBpbnB1dFZhbHVlcyA9IGdldElucHV0VmFsdWVzKGVsdCwgdHlwZSB8fCAncG9zdCcpXG4gICAgICByZXR1cm4gaW5wdXRWYWx1ZXMudmFsdWVzXG4gICAgfSxcbiAgICAvKiBET00gbWFuaXB1bGF0aW9uIGhlbHBlcnMgKi9cbiAgICAvKiogQHR5cGUge3R5cGVvZiByZW1vdmVFbGVtZW50fSAqL1xuICAgIHJlbW92ZTogbnVsbCxcbiAgICAvKiogQHR5cGUge3R5cGVvZiBhZGRDbGFzc1RvRWxlbWVudH0gKi9cbiAgICBhZGRDbGFzczogbnVsbCxcbiAgICAvKiogQHR5cGUge3R5cGVvZiByZW1vdmVDbGFzc0Zyb21FbGVtZW50fSAqL1xuICAgIHJlbW92ZUNsYXNzOiBudWxsLFxuICAgIC8qKiBAdHlwZSB7dHlwZW9mIHRvZ2dsZUNsYXNzT25FbGVtZW50fSAqL1xuICAgIHRvZ2dsZUNsYXNzOiBudWxsLFxuICAgIC8qKiBAdHlwZSB7dHlwZW9mIHRha2VDbGFzc0ZvckVsZW1lbnR9ICovXG4gICAgdGFrZUNsYXNzOiBudWxsLFxuICAgIC8qKiBAdHlwZSB7dHlwZW9mIHN3YXB9ICovXG4gICAgc3dhcDogbnVsbCxcbiAgICAvKiBFeHRlbnNpb24gZW50cnlwb2ludHMgKi9cbiAgICAvKiogQHR5cGUge3R5cGVvZiBkZWZpbmVFeHRlbnNpb259ICovXG4gICAgZGVmaW5lRXh0ZW5zaW9uOiBudWxsLFxuICAgIC8qKiBAdHlwZSB7dHlwZW9mIHJlbW92ZUV4dGVuc2lvbn0gKi9cbiAgICByZW1vdmVFeHRlbnNpb246IG51bGwsXG4gICAgLyogRGVidWdnaW5nICovXG4gICAgLyoqIEB0eXBlIHt0eXBlb2YgbG9nQWxsfSAqL1xuICAgIGxvZ0FsbDogbnVsbCxcbiAgICAvKiogQHR5cGUge3R5cGVvZiBsb2dOb25lfSAqL1xuICAgIGxvZ05vbmU6IG51bGwsXG4gICAgLyogRGVidWdnaW5nICovXG4gICAgLyoqXG4gICAgICogVGhlIGxvZ2dlciBodG14IHVzZXMgdG8gbG9nIHdpdGhcbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9odG14Lm9yZy9hcGkvI2xvZ2dlclxuICAgICAqL1xuICAgIGxvZ2dlcjogbnVsbCxcbiAgICAvKipcbiAgICAgKiBBIHByb3BlcnR5IGhvbGRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gaHRteCB1c2VzIGF0IHJ1bnRpbWUuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgdXNpbmcgYSBbbWV0YSB0YWddKGh0dHBzOi8vaHRteC5vcmcvZG9jcy8jY29uZmlnKSBpcyB0aGUgcHJlZmVycmVkIG1lY2hhbmlzbSBmb3Igc2V0dGluZyB0aGVzZSBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2h0bXgub3JnL2FwaS8jY29uZmlnXG4gICAgICovXG4gICAgY29uZmlnOiB7XG4gICAgICAvKipcbiAgICAgICAqIFdoZXRoZXIgdG8gdXNlIGhpc3RvcnkuXG4gICAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICAgKi9cbiAgICAgIGhpc3RvcnlFbmFibGVkOiB0cnVlLFxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgbnVtYmVyIG9mIHBhZ2VzIHRvIGtlZXAgaW4gKipsb2NhbFN0b3JhZ2UqKiBmb3IgaGlzdG9yeSBzdXBwb3J0LlxuICAgICAgICogQHR5cGUgbnVtYmVyXG4gICAgICAgKiBAZGVmYXVsdCAxMFxuICAgICAgICovXG4gICAgICBoaXN0b3J5Q2FjaGVTaXplOiAxMCxcbiAgICAgIC8qKlxuICAgICAgICogQHR5cGUgYm9vbGVhblxuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICAgICAgcmVmcmVzaE9uSGlzdG9yeU1pc3M6IGZhbHNlLFxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgZGVmYXVsdCBzd2FwIHN0eWxlIHRvIHVzZSBpZiAqKltoeC1zd2FwXShodHRwczovL2h0bXgub3JnL2F0dHJpYnV0ZXMvaHgtc3dhcCkqKiBpcyBvbWl0dGVkLlxuICAgICAgICogQHR5cGUgSHRteFN3YXBTdHlsZVxuICAgICAgICogQGRlZmF1bHQgJ2lubmVySFRNTCdcbiAgICAgICAqL1xuICAgICAgZGVmYXVsdFN3YXBTdHlsZTogJ2lubmVySFRNTCcsXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBkZWZhdWx0IGRlbGF5IGJldHdlZW4gcmVjZWl2aW5nIGEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyIGFuZCBkb2luZyB0aGUgc3dhcC5cbiAgICAgICAqIEB0eXBlIG51bWJlclxuICAgICAgICogQGRlZmF1bHQgMFxuICAgICAgICovXG4gICAgICBkZWZhdWx0U3dhcERlbGF5OiAwLFxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgZGVmYXVsdCBkZWxheSBiZXR3ZWVuIGNvbXBsZXRpbmcgdGhlIGNvbnRlbnQgc3dhcCBhbmQgc2V0dGxpbmcgYXR0cmlidXRlcy5cbiAgICAgICAqIEB0eXBlIG51bWJlclxuICAgICAgICogQGRlZmF1bHQgMjBcbiAgICAgICAqL1xuICAgICAgZGVmYXVsdFNldHRsZURlbGF5OiAyMCxcbiAgICAgIC8qKlxuICAgICAgICogSWYgdHJ1ZSwgaHRteCB3aWxsIGluamVjdCBhIHNtYWxsIGFtb3VudCBvZiBDU1MgaW50byB0aGUgcGFnZSB0byBtYWtlIGluZGljYXRvcnMgaW52aXNpYmxlIHVubGVzcyB0aGUgKipodG14LWluZGljYXRvcioqIGNsYXNzIGlzIHByZXNlbnQuXG4gICAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICAgKi9cbiAgICAgIGluY2x1ZGVJbmRpY2F0b3JTdHlsZXM6IHRydWUsXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBjbGFzcyB0byBwbGFjZSBvbiBpbmRpY2F0b3JzIHdoZW4gYSByZXF1ZXN0IGlzIGluIGZsaWdodC5cbiAgICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAgICogQGRlZmF1bHQgJ2h0bXgtaW5kaWNhdG9yJ1xuICAgICAgICovXG4gICAgICBpbmRpY2F0b3JDbGFzczogJ2h0bXgtaW5kaWNhdG9yJyxcbiAgICAgIC8qKlxuICAgICAgICogVGhlIGNsYXNzIHRvIHBsYWNlIG9uIHRyaWdnZXJpbmcgZWxlbWVudHMgd2hlbiBhIHJlcXVlc3QgaXMgaW4gZmxpZ2h0LlxuICAgICAgICogQHR5cGUgc3RyaW5nXG4gICAgICAgKiBAZGVmYXVsdCAnaHRteC1yZXF1ZXN0J1xuICAgICAgICovXG4gICAgICByZXF1ZXN0Q2xhc3M6ICdodG14LXJlcXVlc3QnLFxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgY2xhc3MgdG8gdGVtcG9yYXJpbHkgcGxhY2Ugb24gZWxlbWVudHMgdGhhdCBodG14IGhhcyBhZGRlZCB0byB0aGUgRE9NLlxuICAgICAgICogQHR5cGUgc3RyaW5nXG4gICAgICAgKiBAZGVmYXVsdCAnaHRteC1hZGRlZCdcbiAgICAgICAqL1xuICAgICAgYWRkZWRDbGFzczogJ2h0bXgtYWRkZWQnLFxuICAgICAgLyoqXG4gICAgICAgKiBUaGUgY2xhc3MgdG8gcGxhY2Ugb24gdGFyZ2V0IGVsZW1lbnRzIHdoZW4gaHRteCBpcyBpbiB0aGUgc2V0dGxpbmcgcGhhc2UuXG4gICAgICAgKiBAdHlwZSBzdHJpbmdcbiAgICAgICAqIEBkZWZhdWx0ICdodG14LXNldHRsaW5nJ1xuICAgICAgICovXG4gICAgICBzZXR0bGluZ0NsYXNzOiAnaHRteC1zZXR0bGluZycsXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBjbGFzcyB0byBwbGFjZSBvbiB0YXJnZXQgZWxlbWVudHMgd2hlbiBodG14IGlzIGluIHRoZSBzd2FwcGluZyBwaGFzZS5cbiAgICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAgICogQGRlZmF1bHQgJ2h0bXgtc3dhcHBpbmcnXG4gICAgICAgKi9cbiAgICAgIHN3YXBwaW5nQ2xhc3M6ICdodG14LXN3YXBwaW5nJyxcbiAgICAgIC8qKlxuICAgICAgICogQWxsb3dzIHRoZSB1c2Ugb2YgZXZhbC1saWtlIGZ1bmN0aW9uYWxpdHkgaW4gaHRteCwgdG8gZW5hYmxlICoqaHgtdmFycyoqLCB0cmlnZ2VyIGNvbmRpdGlvbnMgJiBzY3JpcHQgdGFnIGV2YWx1YXRpb24uIENhbiBiZSBzZXQgdG8gKipmYWxzZSoqIGZvciBDU1AgY29tcGF0aWJpbGl0eS5cbiAgICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgICAqL1xuICAgICAgYWxsb3dFdmFsOiB0cnVlLFxuICAgICAgLyoqXG4gICAgICAgKiBJZiBzZXQgdG8gZmFsc2UsIGRpc2FibGVzIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBzY3JpcHQgdGFncy5cbiAgICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgICAqL1xuICAgICAgYWxsb3dTY3JpcHRUYWdzOiB0cnVlLFxuICAgICAgLyoqXG4gICAgICAgKiBJZiBzZXQsIHRoZSBub25jZSB3aWxsIGJlIGFkZGVkIHRvIGlubGluZSBzY3JpcHRzLlxuICAgICAgICogQHR5cGUgc3RyaW5nXG4gICAgICAgKiBAZGVmYXVsdCAnJ1xuICAgICAgICovXG4gICAgICBpbmxpbmVTY3JpcHROb25jZTogJycsXG4gICAgICAvKipcbiAgICAgICAqIElmIHNldCwgdGhlIG5vbmNlIHdpbGwgYmUgYWRkZWQgdG8gaW5saW5lIHN0eWxlcy5cbiAgICAgICAqIEB0eXBlIHN0cmluZ1xuICAgICAgICogQGRlZmF1bHQgJydcbiAgICAgICAqL1xuICAgICAgaW5saW5lU3R5bGVOb25jZTogJycsXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBhdHRyaWJ1dGVzIHRvIHNldHRsZSBkdXJpbmcgdGhlIHNldHRsaW5nIHBoYXNlLlxuICAgICAgICogQHR5cGUgc3RyaW5nW11cbiAgICAgICAqIEBkZWZhdWx0IFsnY2xhc3MnLCAnc3R5bGUnLCAnd2lkdGgnLCAnaGVpZ2h0J11cbiAgICAgICAqL1xuICAgICAgYXR0cmlidXRlc1RvU2V0dGxlOiBbJ2NsYXNzJywgJ3N0eWxlJywgJ3dpZHRoJywgJ2hlaWdodCddLFxuICAgICAgLyoqXG4gICAgICAgKiBBbGxvdyBjcm9zcy1zaXRlIEFjY2Vzcy1Db250cm9sIHJlcXVlc3RzIHVzaW5nIGNyZWRlbnRpYWxzIHN1Y2ggYXMgY29va2llcywgYXV0aG9yaXphdGlvbiBoZWFkZXJzIG9yIFRMUyBjbGllbnQgY2VydGlmaWNhdGVzLlxuICAgICAgICogQHR5cGUgYm9vbGVhblxuICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAqL1xuICAgICAgd2l0aENyZWRlbnRpYWxzOiBmYWxzZSxcbiAgICAgIC8qKlxuICAgICAgICogQHR5cGUgbnVtYmVyXG4gICAgICAgKiBAZGVmYXVsdCAwXG4gICAgICAgKi9cbiAgICAgIHRpbWVvdXQ6IDAsXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mICoqZ2V0V2ViU29ja2V0UmVjb25uZWN0RGVsYXkqKiBmb3IgcmVjb25uZWN0aW5nIGFmdGVyIHVuZXhwZWN0ZWQgY29ubmVjdGlvbiBsb3NzIGJ5IHRoZSBldmVudCBjb2RlICoqQWJub3JtYWwgQ2xvc3VyZSoqLCAqKlNlcnZpY2UgUmVzdGFydCoqIG9yICoqVHJ5IEFnYWluIExhdGVyKiouXG4gICAgICAgKiBAdHlwZSB7J2Z1bGwtaml0dGVyJyB8ICgocmV0cnlDb3VudDpudW1iZXIpID0+IG51bWJlcil9XG4gICAgICAgKiBAZGVmYXVsdCBcImZ1bGwtaml0dGVyXCJcbiAgICAgICAqL1xuICAgICAgd3NSZWNvbm5lY3REZWxheTogJ2Z1bGwtaml0dGVyJyxcbiAgICAgIC8qKlxuICAgICAgICogVGhlIHR5cGUgb2YgYmluYXJ5IGRhdGEgYmVpbmcgcmVjZWl2ZWQgb3ZlciB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb25cbiAgICAgICAqIEB0eXBlIEJpbmFyeVR5cGVcbiAgICAgICAqIEBkZWZhdWx0ICdibG9iJ1xuICAgICAgICovXG4gICAgICB3c0JpbmFyeVR5cGU6ICdibG9iJyxcbiAgICAgIC8qKlxuICAgICAgICogQHR5cGUgc3RyaW5nXG4gICAgICAgKiBAZGVmYXVsdCAnW2h4LWRpc2FibGVdLCBbZGF0YS1oeC1kaXNhYmxlXSdcbiAgICAgICAqL1xuICAgICAgZGlzYWJsZVNlbGVjdG9yOiAnW2h4LWRpc2FibGVdLCBbZGF0YS1oeC1kaXNhYmxlXScsXG4gICAgICAvKipcbiAgICAgICAqIEB0eXBlIHsnYXV0bycgfCAnaW5zdGFudCcgfCAnc21vb3RoJ31cbiAgICAgICAqIEBkZWZhdWx0ICdpbnN0YW50J1xuICAgICAgICovXG4gICAgICBzY3JvbGxCZWhhdmlvcjogJ2luc3RhbnQnLFxuICAgICAgLyoqXG4gICAgICAgKiBJZiB0aGUgZm9jdXNlZCBlbGVtZW50IHNob3VsZCBiZSBzY3JvbGxlZCBpbnRvIHZpZXcuXG4gICAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICovXG4gICAgICBkZWZhdWx0Rm9jdXNTY3JvbGw6IGZhbHNlLFxuICAgICAgLyoqXG4gICAgICAgKiBJZiBzZXQgdG8gdHJ1ZSBodG14IHdpbGwgaW5jbHVkZSBhIGNhY2hlLWJ1c3RpbmcgcGFyYW1ldGVyIGluIEdFVCByZXF1ZXN0cyB0byBhdm9pZCBjYWNoaW5nIHBhcnRpYWwgcmVzcG9uc2VzIGJ5IHRoZSBicm93c2VyXG4gICAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICovXG4gICAgICBnZXRDYWNoZUJ1c3RlclBhcmFtOiBmYWxzZSxcbiAgICAgIC8qKlxuICAgICAgICogSWYgc2V0IHRvIHRydWUsIGh0bXggd2lsbCB1c2UgdGhlIFZpZXcgVHJhbnNpdGlvbiBBUEkgd2hlbiBzd2FwcGluZyBpbiBuZXcgY29udGVudC5cbiAgICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgKi9cbiAgICAgIGdsb2JhbFZpZXdUcmFuc2l0aW9uczogZmFsc2UsXG4gICAgICAvKipcbiAgICAgICAqIGh0bXggd2lsbCBmb3JtYXQgcmVxdWVzdHMgd2l0aCB0aGVzZSBtZXRob2RzIGJ5IGVuY29kaW5nIHRoZWlyIHBhcmFtZXRlcnMgaW4gdGhlIFVSTCwgbm90IHRoZSByZXF1ZXN0IGJvZHlcbiAgICAgICAqIEB0eXBlIHsoSHR0cFZlcmIpW119XG4gICAgICAgKiBAZGVmYXVsdCBbJ2dldCcsICdkZWxldGUnXVxuICAgICAgICovXG4gICAgICBtZXRob2RzVGhhdFVzZVVybFBhcmFtczogWydnZXQnLCAnZGVsZXRlJ10sXG4gICAgICAvKipcbiAgICAgICAqIElmIHNldCB0byB0cnVlLCBkaXNhYmxlcyBodG14LWJhc2VkIHJlcXVlc3RzIHRvIG5vbi1vcmlnaW4gaG9zdHMuXG4gICAgICAgKiBAdHlwZSBib29sZWFuXG4gICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICovXG4gICAgICBzZWxmUmVxdWVzdHNPbmx5OiB0cnVlLFxuICAgICAgLyoqXG4gICAgICAgKiBJZiBzZXQgdG8gdHJ1ZSBodG14IHdpbGwgbm90IHVwZGF0ZSB0aGUgdGl0bGUgb2YgdGhlIGRvY3VtZW50IHdoZW4gYSB0aXRsZSB0YWcgaXMgZm91bmQgaW4gbmV3IGNvbnRlbnRcbiAgICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgKi9cbiAgICAgIGlnbm9yZVRpdGxlOiBmYWxzZSxcbiAgICAgIC8qKlxuICAgICAgICogV2hldGhlciB0aGUgdGFyZ2V0IG9mIGEgYm9vc3RlZCBlbGVtZW50IGlzIHNjcm9sbGVkIGludG8gdGhlIHZpZXdwb3J0LlxuICAgICAgICogQHR5cGUgYm9vbGVhblxuICAgICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAgICovXG4gICAgICBzY3JvbGxJbnRvVmlld09uQm9vc3Q6IHRydWUsXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBjYWNoZSB0byBzdG9yZSBldmFsdWF0ZWQgdHJpZ2dlciBzcGVjaWZpY2F0aW9ucyBpbnRvLlxuICAgICAgICogWW91IG1heSBkZWZpbmUgYSBzaW1wbGUgb2JqZWN0IHRvIHVzZSBhIG5ldmVyLWNsZWFyaW5nIGNhY2hlLCBvciBpbXBsZW1lbnQgeW91ciBvd24gc3lzdGVtIHVzaW5nIGEgW3Byb3h5IG9iamVjdF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvUHJveHkpXG4gICAgICAgKiBAdHlwZSB7T2JqZWN0fG51bGx9XG4gICAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICAgKi9cbiAgICAgIHRyaWdnZXJTcGVjc0NhY2hlOiBudWxsLFxuICAgICAgLyoqIEB0eXBlIGJvb2xlYW4gKi9cbiAgICAgIGRpc2FibGVJbmhlcml0YW5jZTogZmFsc2UsXG4gICAgICAvKiogQHR5cGUgSHRteFJlc3BvbnNlSGFuZGxpbmdDb25maWdbXSAqL1xuICAgICAgcmVzcG9uc2VIYW5kbGluZzogW1xuICAgICAgICB7IGNvZGU6ICcyMDQnLCBzd2FwOiBmYWxzZSB9LFxuICAgICAgICB7IGNvZGU6ICdbMjNdLi4nLCBzd2FwOiB0cnVlIH0sXG4gICAgICAgIHsgY29kZTogJ1s0NV0uLicsIHN3YXA6IGZhbHNlLCBlcnJvcjogdHJ1ZSB9XG4gICAgICBdLFxuICAgICAgLyoqXG4gICAgICAgKiBXaGV0aGVyIHRvIHByb2Nlc3MgT09CIHN3YXBzIG9uIGVsZW1lbnRzIHRoYXQgYXJlIG5lc3RlZCB3aXRoaW4gdGhlIG1haW4gcmVzcG9uc2UgZWxlbWVudC5cbiAgICAgICAqIEB0eXBlIGJvb2xlYW5cbiAgICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgICAqL1xuICAgICAgYWxsb3dOZXN0ZWRPb2JTd2FwczogdHJ1ZVxuICAgIH0sXG4gICAgLyoqIEB0eXBlIHt0eXBlb2YgcGFyc2VJbnRlcnZhbH0gKi9cbiAgICBwYXJzZUludGVydmFsOiBudWxsLFxuICAgIC8qKiBAdHlwZSB7dHlwZW9mIGludGVybmFsRXZhbH0gKi9cbiAgICBfOiBudWxsLFxuICAgIHZlcnNpb246ICcyLjAuMidcbiAgfVxuICAvLyBUc2MgbWFkbmVzcyBwYXJ0IDJcbiAgaHRteC5vbkxvYWQgPSBvbkxvYWRIZWxwZXJcbiAgaHRteC5wcm9jZXNzID0gcHJvY2Vzc05vZGVcbiAgaHRteC5vbiA9IGFkZEV2ZW50TGlzdGVuZXJJbXBsXG4gIGh0bXgub2ZmID0gcmVtb3ZlRXZlbnRMaXN0ZW5lckltcGxcbiAgaHRteC50cmlnZ2VyID0gdHJpZ2dlckV2ZW50XG4gIGh0bXguYWpheCA9IGFqYXhIZWxwZXJcbiAgaHRteC5maW5kID0gZmluZFxuICBodG14LmZpbmRBbGwgPSBmaW5kQWxsXG4gIGh0bXguY2xvc2VzdCA9IGNsb3Nlc3RcbiAgaHRteC5yZW1vdmUgPSByZW1vdmVFbGVtZW50XG4gIGh0bXguYWRkQ2xhc3MgPSBhZGRDbGFzc1RvRWxlbWVudFxuICBodG14LnJlbW92ZUNsYXNzID0gcmVtb3ZlQ2xhc3NGcm9tRWxlbWVudFxuICBodG14LnRvZ2dsZUNsYXNzID0gdG9nZ2xlQ2xhc3NPbkVsZW1lbnRcbiAgaHRteC50YWtlQ2xhc3MgPSB0YWtlQ2xhc3NGb3JFbGVtZW50XG4gIGh0bXguc3dhcCA9IHN3YXBcbiAgaHRteC5kZWZpbmVFeHRlbnNpb24gPSBkZWZpbmVFeHRlbnNpb25cbiAgaHRteC5yZW1vdmVFeHRlbnNpb24gPSByZW1vdmVFeHRlbnNpb25cbiAgaHRteC5sb2dBbGwgPSBsb2dBbGxcbiAgaHRteC5sb2dOb25lID0gbG9nTm9uZVxuICBodG14LnBhcnNlSW50ZXJ2YWwgPSBwYXJzZUludGVydmFsXG4gIGh0bXguXyA9IGludGVybmFsRXZhbFxuXG4gIGNvbnN0IGludGVybmFsQVBJID0ge1xuICAgIGFkZFRyaWdnZXJIYW5kbGVyLFxuICAgIGJvZHlDb250YWlucyxcbiAgICBjYW5BY2Nlc3NMb2NhbFN0b3JhZ2UsXG4gICAgZmluZFRoaXNFbGVtZW50LFxuICAgIGZpbHRlclZhbHVlcyxcbiAgICBzd2FwLFxuICAgIGhhc0F0dHJpYnV0ZSxcbiAgICBnZXRBdHRyaWJ1dGVWYWx1ZSxcbiAgICBnZXRDbG9zZXN0QXR0cmlidXRlVmFsdWUsXG4gICAgZ2V0Q2xvc2VzdE1hdGNoLFxuICAgIGdldEV4cHJlc3Npb25WYXJzLFxuICAgIGdldEhlYWRlcnMsXG4gICAgZ2V0SW5wdXRWYWx1ZXMsXG4gICAgZ2V0SW50ZXJuYWxEYXRhLFxuICAgIGdldFN3YXBTcGVjaWZpY2F0aW9uLFxuICAgIGdldFRyaWdnZXJTcGVjcyxcbiAgICBnZXRUYXJnZXQsXG4gICAgbWFrZUZyYWdtZW50LFxuICAgIG1lcmdlT2JqZWN0cyxcbiAgICBtYWtlU2V0dGxlSW5mbyxcbiAgICBvb2JTd2FwLFxuICAgIHF1ZXJ5U2VsZWN0b3JFeHQsXG4gICAgc2V0dGxlSW1tZWRpYXRlbHksXG4gICAgc2hvdWxkQ2FuY2VsLFxuICAgIHRyaWdnZXJFdmVudCxcbiAgICB0cmlnZ2VyRXJyb3JFdmVudCxcbiAgICB3aXRoRXh0ZW5zaW9uc1xuICB9XG5cbiAgY29uc3QgVkVSQlMgPSBbJ2dldCcsICdwb3N0JywgJ3B1dCcsICdkZWxldGUnLCAncGF0Y2gnXVxuICBjb25zdCBWRVJCX1NFTEVDVE9SID0gVkVSQlMubWFwKGZ1bmN0aW9uKHZlcmIpIHtcbiAgICByZXR1cm4gJ1toeC0nICsgdmVyYiArICddLCBbZGF0YS1oeC0nICsgdmVyYiArICddJ1xuICB9KS5qb2luKCcsICcpXG5cbiAgY29uc3QgSEVBRF9UQUdfUkVHRVggPSBtYWtlVGFnUmVnRXgoJ2hlYWQnKVxuXG4gIC8vPSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFV0aWxpdGllc1xuICAvLz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFnXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZ2xvYmFsXG4gICAqIEByZXR1cm5zIHtSZWdFeHB9XG4gICAqL1xuICBmdW5jdGlvbiBtYWtlVGFnUmVnRXgodGFnLCBnbG9iYWwgPSBmYWxzZSkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGA8JHt0YWd9KFxcXFxzW14+XSo+fD4pKFtcXFxcc1xcXFxTXSo/KTxcXFxcLyR7dGFnfT5gLFxuICAgICAgZ2xvYmFsID8gJ2dpbScgOiAnaW0nKVxuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhbiBpbnRlcnZhbCBzdHJpbmcgY29uc2lzdGVudCB3aXRoIHRoZSB3YXkgaHRteCBkb2VzLiBVc2VmdWwgZm9yIHBsdWdpbnMgdGhhdCBoYXZlIHRpbWluZy1yZWxhdGVkIGF0dHJpYnV0ZXMuXG4gICAqXG4gICAqIENhdXRpb246IEFjY2VwdHMgYW4gaW50IGZvbGxvd2VkIGJ5IGVpdGhlciAqKnMqKiBvciAqKm1zKiouIEFsbCBvdGhlciB2YWx1ZXMgdXNlICoqcGFyc2VGbG9hdCoqXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9odG14Lm9yZy9hcGkvI3BhcnNlSW50ZXJ2YWxcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0ciB0aW1pbmcgc3RyaW5nXG4gICAqIEByZXR1cm5zIHtudW1iZXJ8dW5kZWZpbmVkfVxuICAgKi9cbiAgZnVuY3Rpb24gcGFyc2VJbnRlcnZhbChzdHIpIHtcbiAgICBpZiAoc3RyID09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGxldCBpbnRlcnZhbCA9IE5hTlxuICAgIGlmIChzdHIuc2xpY2UoLTIpID09ICdtcycpIHtcbiAgICAgIGludGVydmFsID0gcGFyc2VGbG9hdChzdHIuc2xpY2UoMCwgLTIpKVxuICAgIH0gZWxzZSBpZiAoc3RyLnNsaWNlKC0xKSA9PSAncycpIHtcbiAgICAgIGludGVydmFsID0gcGFyc2VGbG9hdChzdHIuc2xpY2UoMCwgLTEpKSAqIDEwMDBcbiAgICB9IGVsc2UgaWYgKHN0ci5zbGljZSgtMSkgPT0gJ20nKSB7XG4gICAgICBpbnRlcnZhbCA9IHBhcnNlRmxvYXQoc3RyLnNsaWNlKDAsIC0xKSkgKiAxMDAwICogNjBcbiAgICB9IGVsc2Uge1xuICAgICAgaW50ZXJ2YWwgPSBwYXJzZUZsb2F0KHN0cilcbiAgICB9XG4gICAgcmV0dXJuIGlzTmFOKGludGVydmFsKSA/IHVuZGVmaW5lZCA6IGludGVydmFsXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSBlbHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybnMgeyhzdHJpbmcgfCBudWxsKX1cbiAgICovXG4gIGZ1bmN0aW9uIGdldFJhd0F0dHJpYnV0ZShlbHQsIG5hbWUpIHtcbiAgICByZXR1cm4gZWx0IGluc3RhbmNlb2YgRWxlbWVudCAmJiBlbHQuZ2V0QXR0cmlidXRlKG5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHF1YWxpZmllZE5hbWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICAvLyByZXNvbHZlIHdpdGggYm90aCBoeCBhbmQgZGF0YS1oeCBwcmVmaXhlc1xuICBmdW5jdGlvbiBoYXNBdHRyaWJ1dGUoZWx0LCBxdWFsaWZpZWROYW1lKSB7XG4gICAgcmV0dXJuICEhZWx0Lmhhc0F0dHJpYnV0ZSAmJiAoZWx0Lmhhc0F0dHJpYnV0ZShxdWFsaWZpZWROYW1lKSB8fFxuICAgICAgZWx0Lmhhc0F0dHJpYnV0ZSgnZGF0YS0nICsgcXVhbGlmaWVkTmFtZSkpXG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBlbHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHF1YWxpZmllZE5hbWVcbiAgICogQHJldHVybnMgeyhzdHJpbmcgfCBudWxsKX1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZVZhbHVlKGVsdCwgcXVhbGlmaWVkTmFtZSkge1xuICAgIHJldHVybiBnZXRSYXdBdHRyaWJ1dGUoZWx0LCBxdWFsaWZpZWROYW1lKSB8fCBnZXRSYXdBdHRyaWJ1dGUoZWx0LCAnZGF0YS0nICsgcXVhbGlmaWVkTmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IGVsdFxuICAgKiBAcmV0dXJucyB7Tm9kZSB8IG51bGx9XG4gICAqL1xuICBmdW5jdGlvbiBwYXJlbnRFbHQoZWx0KSB7XG4gICAgY29uc3QgcGFyZW50ID0gZWx0LnBhcmVudEVsZW1lbnRcbiAgICBpZiAoIXBhcmVudCAmJiBlbHQucGFyZW50Tm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHJldHVybiBlbHQucGFyZW50Tm9kZVxuICAgIHJldHVybiBwYXJlbnRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7RG9jdW1lbnR9XG4gICAqL1xuICBmdW5jdGlvbiBnZXREb2N1bWVudCgpIHtcbiAgICByZXR1cm4gZG9jdW1lbnRcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IGVsdFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGdsb2JhbFxuICAgKiBAcmV0dXJucyB7Tm9kZXxEb2N1bWVudH1cbiAgICovXG4gIGZ1bmN0aW9uIGdldFJvb3ROb2RlKGVsdCwgZ2xvYmFsKSB7XG4gICAgcmV0dXJuIGVsdC5nZXRSb290Tm9kZSA/IGVsdC5nZXRSb290Tm9kZSh7IGNvbXBvc2VkOiBnbG9iYWwgfSkgOiBnZXREb2N1bWVudCgpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSBlbHRcbiAgICogQHBhcmFtIHsoZTpOb2RlKSA9PiBib29sZWFufSBjb25kaXRpb25cbiAgICogQHJldHVybnMge05vZGUgfCBudWxsfVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0Q2xvc2VzdE1hdGNoKGVsdCwgY29uZGl0aW9uKSB7XG4gICAgd2hpbGUgKGVsdCAmJiAhY29uZGl0aW9uKGVsdCkpIHtcbiAgICAgIGVsdCA9IHBhcmVudEVsdChlbHQpXG4gICAgfVxuXG4gICAgcmV0dXJuIGVsdCB8fCBudWxsXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBpbml0aWFsRWxlbWVudFxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGFuY2VzdG9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVOYW1lXG4gICAqIEByZXR1cm5zIHtzdHJpbmd8bnVsbH1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZVZhbHVlV2l0aERpc2luaGVyaXRhbmNlKGluaXRpYWxFbGVtZW50LCBhbmNlc3RvciwgYXR0cmlidXRlTmFtZSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlVmFsdWUoYW5jZXN0b3IsIGF0dHJpYnV0ZU5hbWUpXG4gICAgY29uc3QgZGlzaW5oZXJpdCA9IGdldEF0dHJpYnV0ZVZhbHVlKGFuY2VzdG9yLCAnaHgtZGlzaW5oZXJpdCcpXG4gICAgdmFyIGluaGVyaXQgPSBnZXRBdHRyaWJ1dGVWYWx1ZShhbmNlc3RvciwgJ2h4LWluaGVyaXQnKVxuICAgIGlmIChpbml0aWFsRWxlbWVudCAhPT0gYW5jZXN0b3IpIHtcbiAgICAgIGlmIChodG14LmNvbmZpZy5kaXNhYmxlSW5oZXJpdGFuY2UpIHtcbiAgICAgICAgaWYgKGluaGVyaXQgJiYgKGluaGVyaXQgPT09ICcqJyB8fCBpbmhlcml0LnNwbGl0KCcgJykuaW5kZXhPZihhdHRyaWJ1dGVOYW1lKSA+PSAwKSkge1xuICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkaXNpbmhlcml0ICYmIChkaXNpbmhlcml0ID09PSAnKicgfHwgZGlzaW5oZXJpdC5zcGxpdCgnICcpLmluZGV4T2YoYXR0cmlidXRlTmFtZSkgPj0gMCkpIHtcbiAgICAgICAgcmV0dXJuICd1bnNldCdcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJpYnV0ZU5hbWVcbiAgICogQHJldHVybnMge3N0cmluZyB8IG51bGx9XG4gICAqL1xuICBmdW5jdGlvbiBnZXRDbG9zZXN0QXR0cmlidXRlVmFsdWUoZWx0LCBhdHRyaWJ1dGVOYW1lKSB7XG4gICAgbGV0IGNsb3Nlc3RBdHRyID0gbnVsbFxuICAgIGdldENsb3Nlc3RNYXRjaChlbHQsIGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiAhIShjbG9zZXN0QXR0ciA9IGdldEF0dHJpYnV0ZVZhbHVlV2l0aERpc2luaGVyaXRhbmNlKGVsdCwgYXNFbGVtZW50KGUpLCBhdHRyaWJ1dGVOYW1lKSlcbiAgICB9KVxuICAgIGlmIChjbG9zZXN0QXR0ciAhPT0gJ3Vuc2V0Jykge1xuICAgICAgcmV0dXJuIGNsb3Nlc3RBdHRyXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gZWx0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIG1hdGNoZXMoZWx0LCBzZWxlY3Rvcikge1xuICAgIC8vIEB0cy1pZ25vcmU6IG5vbi1zdGFuZGFyZCBwcm9wZXJ0aWVzIGZvciBicm93c2VyIGNvbXBhdGliaWxpdHlcbiAgICAvLyBub2luc3BlY3Rpb24gSlNVbnJlc29sdmVkVmFyaWFibGVcbiAgICBjb25zdCBtYXRjaGVzRnVuY3Rpb24gPSBlbHQgaW5zdGFuY2VvZiBFbGVtZW50ICYmIChlbHQubWF0Y2hlcyB8fCBlbHQubWF0Y2hlc1NlbGVjdG9yIHx8IGVsdC5tc01hdGNoZXNTZWxlY3RvciB8fCBlbHQubW96TWF0Y2hlc1NlbGVjdG9yIHx8IGVsdC53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHwgZWx0Lm9NYXRjaGVzU2VsZWN0b3IpXG4gICAgcmV0dXJuICEhbWF0Y2hlc0Z1bmN0aW9uICYmIG1hdGNoZXNGdW5jdGlvbi5jYWxsKGVsdCwgc2VsZWN0b3IpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0U3RhcnRUYWcoc3RyKSB7XG4gICAgY29uc3QgdGFnTWF0Y2hlciA9IC88KFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKikvaVxuICAgIGNvbnN0IG1hdGNoID0gdGFnTWF0Y2hlci5leGVjKHN0cilcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVzcFxuICAgKiBAcmV0dXJucyB7RG9jdW1lbnR9XG4gICAqL1xuICBmdW5jdGlvbiBwYXJzZUhUTUwocmVzcCkge1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBET01QYXJzZXIoKVxuICAgIHJldHVybiBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHJlc3AsICd0ZXh0L2h0bWwnKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RG9jdW1lbnRGcmFnbWVudH0gZnJhZ21lbnRcbiAgICogQHBhcmFtIHtOb2RlfSBlbHRcbiAgICovXG4gIGZ1bmN0aW9uIHRha2VDaGlsZHJlbkZvcihmcmFnbWVudCwgZWx0KSB7XG4gICAgd2hpbGUgKGVsdC5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZyYWdtZW50LmFwcGVuZChlbHQuY2hpbGROb2Rlc1swXSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIVE1MU2NyaXB0RWxlbWVudH0gc2NyaXB0XG4gICAqIEByZXR1cm5zIHtIVE1MU2NyaXB0RWxlbWVudH1cbiAgICovXG4gIGZ1bmN0aW9uIGR1cGxpY2F0ZVNjcmlwdChzY3JpcHQpIHtcbiAgICBjb25zdCBuZXdTY3JpcHQgPSBnZXREb2N1bWVudCgpLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpXG4gICAgZm9yRWFjaChzY3JpcHQuYXR0cmlidXRlcywgZnVuY3Rpb24oYXR0cikge1xuICAgICAgbmV3U2NyaXB0LnNldEF0dHJpYnV0ZShhdHRyLm5hbWUsIGF0dHIudmFsdWUpXG4gICAgfSlcbiAgICBuZXdTY3JpcHQudGV4dENvbnRlbnQgPSBzY3JpcHQudGV4dENvbnRlbnRcbiAgICBuZXdTY3JpcHQuYXN5bmMgPSBmYWxzZVxuICAgIGlmIChodG14LmNvbmZpZy5pbmxpbmVTY3JpcHROb25jZSkge1xuICAgICAgbmV3U2NyaXB0Lm5vbmNlID0gaHRteC5jb25maWcuaW5saW5lU2NyaXB0Tm9uY2VcbiAgICB9XG4gICAgcmV0dXJuIG5ld1NjcmlwdFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTFNjcmlwdEVsZW1lbnR9IHNjcmlwdFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIGlzSmF2YVNjcmlwdFNjcmlwdE5vZGUoc2NyaXB0KSB7XG4gICAgcmV0dXJuIHNjcmlwdC5tYXRjaGVzKCdzY3JpcHQnKSAmJiAoc2NyaXB0LnR5cGUgPT09ICd0ZXh0L2phdmFzY3JpcHQnIHx8IHNjcmlwdC50eXBlID09PSAnbW9kdWxlJyB8fCBzY3JpcHQudHlwZSA9PT0gJycpXG4gIH1cblxuICAvKipcbiAgICogd2UgaGF2ZSB0byBtYWtlIG5ldyBjb3BpZXMgb2Ygc2NyaXB0IHRhZ3MgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gaW5zZXJ0IGJlY2F1c2VcbiAgICogU09NRSBicm93c2VycyAobm90IHNheWluZyB3aG8sIGJ1dCBpdCBpbnZvbHZlcyBhbiBlbGVtZW50IGFuZCBhbiBhbmltYWwpIGRvbid0XG4gICAqIGV4ZWN1dGUgc2NyaXB0cyBjcmVhdGVkIGluIDx0ZW1wbGF0ZT4gdGFncyB3aGVuIHRoZXkgYXJlIGluc2VydGVkIGludG8gdGhlIERPTVxuICAgKiBhbmQgYWxsIHRoZSBvdGhlcnMgZG8gbG1hb1xuICAgKiBAcGFyYW0ge0RvY3VtZW50RnJhZ21lbnR9IGZyYWdtZW50XG4gICAqL1xuICBmdW5jdGlvbiBub3JtYWxpemVTY3JpcHRUYWdzKGZyYWdtZW50KSB7XG4gICAgQXJyYXkuZnJvbShmcmFnbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzY3JpcHQnKSkuZm9yRWFjaCgvKiogQHBhcmFtIHtIVE1MU2NyaXB0RWxlbWVudH0gc2NyaXB0ICovIChzY3JpcHQpID0+IHtcbiAgICAgIGlmIChpc0phdmFTY3JpcHRTY3JpcHROb2RlKHNjcmlwdCkpIHtcbiAgICAgICAgY29uc3QgbmV3U2NyaXB0ID0gZHVwbGljYXRlU2NyaXB0KHNjcmlwdClcbiAgICAgICAgY29uc3QgcGFyZW50ID0gc2NyaXB0LnBhcmVudE5vZGVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld1NjcmlwdCwgc2NyaXB0KVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgbG9nRXJyb3IoZSlcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBzY3JpcHQucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge0RvY3VtZW50RnJhZ21lbnQgJiB7dGl0bGU/OiBzdHJpbmd9fSBEb2N1bWVudEZyYWdtZW50V2l0aFRpdGxlXG4gICAqIEBkZXNjcmlwdGlvbiAgYSBkb2N1bWVudCBmcmFnbWVudCByZXByZXNlbnRpbmcgdGhlIHJlc3BvbnNlIEhUTUwsIGluY2x1ZGluZ1xuICAgKiBhIGB0aXRsZWAgcHJvcGVydHkgZm9yIGFueSB0aXRsZSBpbmZvcm1hdGlvbiBmb3VuZFxuICAgKi9cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHJlc3BvbnNlIEhUTUxcbiAgICogQHJldHVybnMge0RvY3VtZW50RnJhZ21lbnRXaXRoVGl0bGV9XG4gICAqL1xuICBmdW5jdGlvbiBtYWtlRnJhZ21lbnQocmVzcG9uc2UpIHtcbiAgICAvLyBzdHJpcCBoZWFkIHRhZyB0byBkZXRlcm1pbmUgc2hhcGUgb2YgcmVzcG9uc2Ugd2UgYXJlIGRlYWxpbmcgd2l0aFxuICAgIGNvbnN0IHJlc3BvbnNlV2l0aE5vSGVhZCA9IHJlc3BvbnNlLnJlcGxhY2UoSEVBRF9UQUdfUkVHRVgsICcnKVxuICAgIGNvbnN0IHN0YXJ0VGFnID0gZ2V0U3RhcnRUYWcocmVzcG9uc2VXaXRoTm9IZWFkKVxuICAgIC8qKiBAdHlwZSBEb2N1bWVudEZyYWdtZW50V2l0aFRpdGxlICovXG4gICAgbGV0IGZyYWdtZW50XG4gICAgaWYgKHN0YXJ0VGFnID09PSAnaHRtbCcpIHtcbiAgICAgIC8vIGlmIGl0IGlzIGEgZnVsbCBkb2N1bWVudCwgcGFyc2UgaXQgYW5kIHJldHVybiB0aGUgYm9keVxuICAgICAgZnJhZ21lbnQgPSAvKiogQHR5cGUgRG9jdW1lbnRGcmFnbWVudFdpdGhUaXRsZSAqLyAobmV3IERvY3VtZW50RnJhZ21lbnQoKSlcbiAgICAgIGNvbnN0IGRvYyA9IHBhcnNlSFRNTChyZXNwb25zZSlcbiAgICAgIHRha2VDaGlsZHJlbkZvcihmcmFnbWVudCwgZG9jLmJvZHkpXG4gICAgICBmcmFnbWVudC50aXRsZSA9IGRvYy50aXRsZVxuICAgIH0gZWxzZSBpZiAoc3RhcnRUYWcgPT09ICdib2R5Jykge1xuICAgICAgLy8gcGFyc2UgYm9keSB3L28gd3JhcHBpbmcgaW4gdGVtcGxhdGVcbiAgICAgIGZyYWdtZW50ID0gLyoqIEB0eXBlIERvY3VtZW50RnJhZ21lbnRXaXRoVGl0bGUgKi8gKG5ldyBEb2N1bWVudEZyYWdtZW50KCkpXG4gICAgICBjb25zdCBkb2MgPSBwYXJzZUhUTUwocmVzcG9uc2VXaXRoTm9IZWFkKVxuICAgICAgdGFrZUNoaWxkcmVuRm9yKGZyYWdtZW50LCBkb2MuYm9keSlcbiAgICAgIGZyYWdtZW50LnRpdGxlID0gZG9jLnRpdGxlXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG90aGVyd2lzZSB3ZSBoYXZlIG5vbi1ib2R5IHBhcnRpYWwgSFRNTCBjb250ZW50LCBzbyB3cmFwIGl0IGluIGEgdGVtcGxhdGUgdG8gbWF4aW1pemUgcGFyc2luZyBmbGV4aWJpbGl0eVxuICAgICAgY29uc3QgZG9jID0gcGFyc2VIVE1MKCc8Ym9keT48dGVtcGxhdGUgY2xhc3M9XCJpbnRlcm5hbC1odG14LXdyYXBwZXJcIj4nICsgcmVzcG9uc2VXaXRoTm9IZWFkICsgJzwvdGVtcGxhdGU+PC9ib2R5PicpXG4gICAgICBmcmFnbWVudCA9IC8qKiBAdHlwZSBEb2N1bWVudEZyYWdtZW50V2l0aFRpdGxlICovIChkb2MucXVlcnlTZWxlY3RvcigndGVtcGxhdGUnKS5jb250ZW50KVxuICAgICAgLy8gZXh0cmFjdCB0aXRsZSBpbnRvIGZyYWdtZW50IGZvciBsYXRlciBwcm9jZXNzaW5nXG4gICAgICBmcmFnbWVudC50aXRsZSA9IGRvYy50aXRsZVxuXG4gICAgICAvLyBmb3IgbGVnYWN5IHJlYXNvbnMgd2Ugc3VwcG9ydCBhIHRpdGxlIHRhZyBhdCB0aGUgcm9vdCBsZXZlbCBvZiBub24tYm9keSByZXNwb25zZXMsIHNvIHdlIG5lZWQgdG8gaGFuZGxlIGl0XG4gICAgICB2YXIgdGl0bGVFbGVtZW50ID0gZnJhZ21lbnQucXVlcnlTZWxlY3RvcigndGl0bGUnKVxuICAgICAgaWYgKHRpdGxlRWxlbWVudCAmJiB0aXRsZUVsZW1lbnQucGFyZW50Tm9kZSA9PT0gZnJhZ21lbnQpIHtcbiAgICAgICAgdGl0bGVFbGVtZW50LnJlbW92ZSgpXG4gICAgICAgIGZyYWdtZW50LnRpdGxlID0gdGl0bGVFbGVtZW50LmlubmVyVGV4dFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZnJhZ21lbnQpIHtcbiAgICAgIGlmIChodG14LmNvbmZpZy5hbGxvd1NjcmlwdFRhZ3MpIHtcbiAgICAgICAgbm9ybWFsaXplU2NyaXB0VGFncyhmcmFnbWVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHJlbW92ZSBhbGwgc2NyaXB0IHRhZ3MgaWYgc2NyaXB0cyBhcmUgZGlzYWJsZWRcbiAgICAgICAgZnJhZ21lbnQucXVlcnlTZWxlY3RvckFsbCgnc2NyaXB0JykuZm9yRWFjaCgoc2NyaXB0KSA9PiBzY3JpcHQucmVtb3ZlKCkpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmNcbiAgICovXG4gIGZ1bmN0aW9uIG1heWJlQ2FsbChmdW5jKSB7XG4gICAgaWYgKGZ1bmMpIHtcbiAgICAgIGZ1bmMoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2FueX0gb1xuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZnVuY3Rpb24gaXNUeXBlKG8sIHR5cGUpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pID09PSAnW29iamVjdCAnICsgdHlwZSArICddJ1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Kn0gb1xuICAgKiBAcmV0dXJucyB7byBpcyBGdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGlzRnVuY3Rpb24obykge1xuICAgIHJldHVybiB0eXBlb2YgbyA9PT0gJ2Z1bmN0aW9uJ1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Kn0gb1xuICAgKiBAcmV0dXJucyB7byBpcyBPYmplY3R9XG4gICAqL1xuICBmdW5jdGlvbiBpc1Jhd09iamVjdChvKSB7XG4gICAgcmV0dXJuIGlzVHlwZShvLCAnT2JqZWN0JylcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBPbkhhbmRsZXJcbiAgICogQHByb3BlcnR5IHsoa2V5b2YgSFRNTEVsZW1lbnRFdmVudE1hcCl8c3RyaW5nfSBldmVudFxuICAgKiBAcHJvcGVydHkge0V2ZW50TGlzdGVuZXJ9IGxpc3RlbmVyXG4gICAqL1xuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7T2JqZWN0fSBMaXN0ZW5lckluZm9cbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHRyaWdnZXJcbiAgICogQHByb3BlcnR5IHtFdmVudExpc3RlbmVyfSBsaXN0ZW5lclxuICAgKiBAcHJvcGVydHkge0V2ZW50VGFyZ2V0fSBvblxuICAgKi9cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gSHRteE5vZGVJbnRlcm5hbERhdGFcbiAgICogRWxlbWVudCBkYXRhXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbaW5pdEhhc2hdXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2Jvb3N0ZWRdXG4gICAqIEBwcm9wZXJ0eSB7T25IYW5kbGVyW119IFtvbkhhbmRsZXJzXVxuICAgKiBAcHJvcGVydHkge251bWJlcn0gW3RpbWVvdXRdXG4gICAqIEBwcm9wZXJ0eSB7TGlzdGVuZXJJbmZvW119IFtsaXN0ZW5lckluZm9zXVxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjYW5jZWxsZWRdXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3RyaWdnZXJlZE9uY2VdXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbZGVsYXllZF1cbiAgICogQHByb3BlcnR5IHtudW1iZXJ8bnVsbH0gW3Rocm90dGxlXVxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gW2xhc3RWYWx1ZV1cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBbbG9hZGVkXVxuICAgKiBAcHJvcGVydHkge3N0cmluZ30gW3BhdGhdXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdmVyYl1cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBbcG9sbGluZ11cbiAgICogQHByb3BlcnR5IHtIVE1MQnV0dG9uRWxlbWVudHxIVE1MSW5wdXRFbGVtZW50fG51bGx9IFtsYXN0QnV0dG9uQ2xpY2tlZF1cbiAgICogQHByb3BlcnR5IHtudW1iZXJ9IFtyZXF1ZXN0Q291bnRdXG4gICAqIEBwcm9wZXJ0eSB7WE1MSHR0cFJlcXVlc3R9IFt4aHJdXG4gICAqIEBwcm9wZXJ0eSB7KCgpID0+IHZvaWQpW119IFtxdWV1ZWRSZXF1ZXN0c11cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBbYWJvcnRhYmxlXVxuICAgKlxuICAgKiBFdmVudCBkYXRhXG4gICAqIEBwcm9wZXJ0eSB7SHRteFRyaWdnZXJTcGVjaWZpY2F0aW9ufSBbdHJpZ2dlclNwZWNdXG4gICAqIEBwcm9wZXJ0eSB7RXZlbnRUYXJnZXRbXX0gW2hhbmRsZWRGb3JdXG4gICAqL1xuXG4gIC8qKlxuICAgKiBnZXRJbnRlcm5hbERhdGEgcmV0cmlldmVzIFwicHJpdmF0ZVwiIGRhdGEgc3RvcmVkIGJ5IGh0bXggd2l0aGluIGFuIGVsZW1lbnRcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldHxFdmVudH0gZWx0XG4gICAqIEByZXR1cm5zIHtIdG14Tm9kZUludGVybmFsRGF0YX1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEludGVybmFsRGF0YShlbHQpIHtcbiAgICBjb25zdCBkYXRhUHJvcCA9ICdodG14LWludGVybmFsLWRhdGEnXG4gICAgbGV0IGRhdGEgPSBlbHRbZGF0YVByb3BdXG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICBkYXRhID0gZWx0W2RhdGFQcm9wXSA9IHt9XG4gICAgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cblxuICAvKipcbiAgICogdG9BcnJheSBjb252ZXJ0cyBhbiBBcnJheUxpa2Ugb2JqZWN0IGludG8gYSByZWFsIGFycmF5LlxuICAgKiBAdGVtcGxhdGUgVFxuICAgKiBAcGFyYW0ge0FycmF5TGlrZTxUPn0gYXJyXG4gICAqIEByZXR1cm5zIHtUW119XG4gICAqL1xuICBmdW5jdGlvbiB0b0FycmF5KGFycikge1xuICAgIGNvbnN0IHJldHVybkFyciA9IFtdXG4gICAgaWYgKGFycikge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmV0dXJuQXJyLnB1c2goYXJyW2ldKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuQXJyXG4gIH1cblxuICAvKipcbiAgICogQHRlbXBsYXRlIFRcbiAgICogQHBhcmFtIHtUW118TmFtZWROb2RlTWFwfEhUTUxDb2xsZWN0aW9ufEhUTUxGb3JtQ29udHJvbHNDb2xsZWN0aW9ufEFycmF5TGlrZTxUPn0gYXJyXG4gICAqIEBwYXJhbSB7KFQpID0+IHZvaWR9IGZ1bmNcbiAgICovXG4gIGZ1bmN0aW9uIGZvckVhY2goYXJyLCBmdW5jKSB7XG4gICAgaWYgKGFycikge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZnVuYyhhcnJbaV0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWxcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiBpc1Njcm9sbGVkSW50b1ZpZXcoZWwpIHtcbiAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICBjb25zdCBlbGVtVG9wID0gcmVjdC50b3BcbiAgICBjb25zdCBlbGVtQm90dG9tID0gcmVjdC5ib3R0b21cbiAgICByZXR1cm4gZWxlbVRvcCA8IHdpbmRvdy5pbm5lckhlaWdodCAmJiBlbGVtQm90dG9tID49IDBcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IGVsdFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIGJvZHlDb250YWlucyhlbHQpIHtcbiAgICAvLyBJRSBGaXhcbiAgICBjb25zdCByb290Tm9kZSA9IGVsdC5nZXRSb290Tm9kZSAmJiBlbHQuZ2V0Um9vdE5vZGUoKVxuICAgIGlmIChyb290Tm9kZSAmJiByb290Tm9kZSBpbnN0YW5jZW9mIHdpbmRvdy5TaGFkb3dSb290KSB7XG4gICAgICByZXR1cm4gZ2V0RG9jdW1lbnQoKS5ib2R5LmNvbnRhaW5zKHJvb3ROb2RlLmhvc3QpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXREb2N1bWVudCgpLmJvZHkuY29udGFpbnMoZWx0KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHJpZ2dlclxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBmdW5jdGlvbiBzcGxpdE9uV2hpdGVzcGFjZSh0cmlnZ2VyKSB7XG4gICAgcmV0dXJuIHRyaWdnZXIudHJpbSgpLnNwbGl0KC9cXHMrLylcbiAgfVxuXG4gIC8qKlxuICAgKiBtZXJnZU9iamVjdHMgdGFrZXMgYWxsIHRoZSBrZXlzIGZyb21cbiAgICogb2JqMiBhbmQgZHVwbGljYXRlcyB0aGVtIGludG8gb2JqMVxuICAgKiBAdGVtcGxhdGUgVDFcbiAgICogQHRlbXBsYXRlIFQyXG4gICAqIEBwYXJhbSB7VDF9IG9iajFcbiAgICogQHBhcmFtIHtUMn0gb2JqMlxuICAgKiBAcmV0dXJucyB7VDEgJiBUMn1cbiAgICovXG4gIGZ1bmN0aW9uIG1lcmdlT2JqZWN0cyhvYmoxLCBvYmoyKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqMikge1xuICAgICAgaWYgKG9iajIuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAvLyBAdHMtaWdub3JlIHRzYyBkb2Vzbid0IHNlZW0gdG8gcHJvcGVybHkgaGFuZGxlIHR5cGVzIG1lcmdpbmdcbiAgICAgICAgb2JqMVtrZXldID0gb2JqMltrZXldXG4gICAgICB9XG4gICAgfVxuICAgIC8vIEB0cy1pZ25vcmUgdHNjIGRvZXNuJ3Qgc2VlbSB0byBwcm9wZXJseSBoYW5kbGUgdHlwZXMgbWVyZ2luZ1xuICAgIHJldHVybiBvYmoxXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGpTdHJpbmdcbiAgICogQHJldHVybnMge2FueXxudWxsfVxuICAgKi9cbiAgZnVuY3Rpb24gcGFyc2VKU09OKGpTdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoalN0cmluZylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nRXJyb3IoZXJyb3IpXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIGNhbkFjY2Vzc0xvY2FsU3RvcmFnZSgpIHtcbiAgICBjb25zdCB0ZXN0ID0gJ2h0bXg6bG9jYWxTdG9yYWdlVGVzdCdcbiAgICB0cnkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGVzdCwgdGVzdClcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRlc3QpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwYXRoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocGF0aClcbiAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgcGF0aCA9IHVybC5wYXRobmFtZSArIHVybC5zZWFyY2hcbiAgICAgIH1cbiAgICAgIC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaCwgdW5sZXNzIGluZGV4IHBhZ2VcbiAgICAgIGlmICghKC9eXFwvJC8udGVzdChwYXRoKSkpIHtcbiAgICAgICAgcGF0aCA9IHBhdGgucmVwbGFjZSgvXFwvKyQvLCAnJylcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXRoXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gYmUga2luZCB0byBJRTExLCB3aGljaCBkb2Vzbid0IHN1cHBvcnQgVVJMKClcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICB9XG5cbiAgLy89ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIHB1YmxpYyBBUElcbiAgLy89ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHJldHVybnMge2FueX1cbiAgICovXG4gIGZ1bmN0aW9uIGludGVybmFsRXZhbChzdHIpIHtcbiAgICByZXR1cm4gbWF5YmVFdmFsKGdldERvY3VtZW50KCkuYm9keSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZXZhbChzdHIpXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2FsbGJhY2sgZm9yIHRoZSAqKmh0bXg6bG9hZCoqIGV2ZW50LiBUaGlzIGNhbiBiZSB1c2VkIHRvIHByb2Nlc3MgbmV3IGNvbnRlbnQsIGZvciBleGFtcGxlIGluaXRpYWxpemluZyB0aGUgY29udGVudCB3aXRoIGEgamF2YXNjcmlwdCBsaWJyYXJ5XG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9odG14Lm9yZy9hcGkvI29uTG9hZFxuICAgKlxuICAgKiBAcGFyYW0geyhlbHQ6IE5vZGUpID0+IHZvaWR9IGNhbGxiYWNrIHRoZSBjYWxsYmFjayB0byBjYWxsIG9uIG5ld2x5IGxvYWRlZCBjb250ZW50XG4gICAqIEByZXR1cm5zIHtFdmVudExpc3RlbmVyfVxuICAgKi9cbiAgZnVuY3Rpb24gb25Mb2FkSGVscGVyKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgdmFsdWUgPSBodG14Lm9uKCdodG14OmxvYWQnLCAvKiogQHBhcmFtIHtDdXN0b21FdmVudH0gZXZ0ICovIGZ1bmN0aW9uKGV2dCkge1xuICAgICAgY2FsbGJhY2soZXZ0LmRldGFpbC5lbHQpXG4gICAgfSlcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2cgYWxsIGh0bXggZXZlbnRzLCB1c2VmdWwgZm9yIGRlYnVnZ2luZy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2h0bXgub3JnL2FwaS8jbG9nQWxsXG4gICAqL1xuICBmdW5jdGlvbiBsb2dBbGwoKSB7XG4gICAgaHRteC5sb2dnZXIgPSBmdW5jdGlvbihlbHQsIGV2ZW50LCBkYXRhKSB7XG4gICAgICBpZiAoY29uc29sZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhldmVudCwgZWx0LCBkYXRhKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGxvZ05vbmUoKSB7XG4gICAgaHRteC5sb2dnZXIgPSBudWxsXG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYW4gZWxlbWVudCBtYXRjaGluZyB0aGUgc2VsZWN0b3JcbiAgICpcbiAgICogQHNlZSBodHRwczovL2h0bXgub3JnL2FwaS8jZmluZFxuICAgKlxuICAgKiBAcGFyYW0ge1BhcmVudE5vZGV8c3RyaW5nfSBlbHRPclNlbGVjdG9yICB0aGUgcm9vdCBlbGVtZW50IHRvIGZpbmQgdGhlIG1hdGNoaW5nIGVsZW1lbnQgaW4sIGluY2x1c2l2ZSB8IHRoZSBzZWxlY3RvciB0byBtYXRjaFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yXSB0aGUgc2VsZWN0b3IgdG8gbWF0Y2hcbiAgICogQHJldHVybnMge0VsZW1lbnR8bnVsbH1cbiAgICovXG4gIGZ1bmN0aW9uIGZpbmQoZWx0T3JTZWxlY3Rvciwgc2VsZWN0b3IpIHtcbiAgICBpZiAodHlwZW9mIGVsdE9yU2VsZWN0b3IgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZWx0T3JTZWxlY3Rvci5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmluZChnZXREb2N1bWVudCgpLCBlbHRPclNlbGVjdG9yKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBhbGwgZWxlbWVudHMgbWF0Y2hpbmcgdGhlIHNlbGVjdG9yXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9odG14Lm9yZy9hcGkvI2ZpbmRBbGxcbiAgICpcbiAgICogQHBhcmFtIHtQYXJlbnROb2RlfHN0cmluZ30gZWx0T3JTZWxlY3RvciB0aGUgcm9vdCBlbGVtZW50IHRvIGZpbmQgdGhlIG1hdGNoaW5nIGVsZW1lbnRzIGluLCBpbmNsdXNpdmUgfCB0aGUgc2VsZWN0b3IgdG8gbWF0Y2hcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcl0gdGhlIHNlbGVjdG9yIHRvIG1hdGNoXG4gICAqIEByZXR1cm5zIHtOb2RlTGlzdE9mPEVsZW1lbnQ+fVxuICAgKi9cbiAgZnVuY3Rpb24gZmluZEFsbChlbHRPclNlbGVjdG9yLCBzZWxlY3Rvcikge1xuICAgIGlmICh0eXBlb2YgZWx0T3JTZWxlY3RvciAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBlbHRPclNlbGVjdG9yLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaW5kQWxsKGdldERvY3VtZW50KCksIGVsdE9yU2VsZWN0b3IpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIFdpbmRvd1xuICAgKi9cbiAgZnVuY3Rpb24gZ2V0V2luZG93KCkge1xuICAgIHJldHVybiB3aW5kb3dcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFuIGVsZW1lbnQgZnJvbSB0aGUgRE9NXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9odG14Lm9yZy9hcGkvI3JlbW92ZVxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IGVsdFxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RlbGF5XVxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlRWxlbWVudChlbHQsIGRlbGF5KSB7XG4gICAgZWx0ID0gcmVzb2x2ZVRhcmdldChlbHQpXG4gICAgaWYgKGRlbGF5KSB7XG4gICAgICBnZXRXaW5kb3coKS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZW1vdmVFbGVtZW50KGVsdClcbiAgICAgICAgZWx0ID0gbnVsbFxuICAgICAgfSwgZGVsYXkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudEVsdChlbHQpLnJlbW92ZUNoaWxkKGVsdClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHthbnl9IGVsdFxuICAgKiBAcmV0dXJuIHtFbGVtZW50fG51bGx9XG4gICAqL1xuICBmdW5jdGlvbiBhc0VsZW1lbnQoZWx0KSB7XG4gICAgcmV0dXJuIGVsdCBpbnN0YW5jZW9mIEVsZW1lbnQgPyBlbHQgOiBudWxsXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHthbnl9IGVsdFxuICAgKiBAcmV0dXJuIHtIVE1MRWxlbWVudHxudWxsfVxuICAgKi9cbiAgZnVuY3Rpb24gYXNIdG1sRWxlbWVudChlbHQpIHtcbiAgICByZXR1cm4gZWx0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgPyBlbHQgOiBudWxsXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlXG4gICAqIEByZXR1cm4ge3N0cmluZ3xudWxsfVxuICAgKi9cbiAgZnVuY3Rpb24gYXNTdHJpbmcodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IGVsdFxuICAgKiBAcmV0dXJuIHtQYXJlbnROb2RlfG51bGx9XG4gICAqL1xuICBmdW5jdGlvbiBhc1BhcmVudE5vZGUoZWx0KSB7XG4gICAgcmV0dXJuIGVsdCBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgZWx0IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgZWx0IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCA/IGVsdCA6IG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBhZGRzIGEgY2xhc3MgdG8gdGhlIGdpdmVuIGVsZW1lbnQuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9odG14Lm9yZy9hcGkvI2FkZENsYXNzXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudHxzdHJpbmd9IGVsdCB0aGUgZWxlbWVudCB0byBhZGQgdGhlIGNsYXNzIHRvXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGF6eiB0aGUgY2xhc3MgdG8gYWRkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVsYXldIHRoZSBkZWxheSAoaW4gbWlsbGlzZWNvbmRzKSBiZWZvcmUgY2xhc3MgaXMgYWRkZWRcbiAgICovXG4gIGZ1bmN0aW9uIGFkZENsYXNzVG9FbGVtZW50KGVsdCwgY2xhenosIGRlbGF5KSB7XG4gICAgZWx0ID0gYXNFbGVtZW50KHJlc29sdmVUYXJnZXQoZWx0KSlcbiAgICBpZiAoIWVsdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChkZWxheSkge1xuICAgICAgZ2V0V2luZG93KCkuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgYWRkQ2xhc3NUb0VsZW1lbnQoZWx0LCBjbGF6eilcbiAgICAgICAgZWx0ID0gbnVsbFxuICAgICAgfSwgZGVsYXkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGVsdC5jbGFzc0xpc3QgJiYgZWx0LmNsYXNzTGlzdC5hZGQoY2xhenopXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBjbGFzcyBmcm9tIHRoZSBnaXZlbiBlbGVtZW50XG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9odG14Lm9yZy9hcGkvI3JlbW92ZUNsYXNzXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZXxzdHJpbmd9IG5vZGUgZWxlbWVudCB0byByZW1vdmUgdGhlIGNsYXNzIGZyb21cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXp6IHRoZSBjbGFzcyB0byByZW1vdmVcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWxheV0gdGhlIGRlbGF5IChpbiBtaWxsaXNlY29uZHMgYmVmb3JlIGNsYXNzIGlzIHJlbW92ZWQpXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmVDbGFzc0Zyb21FbGVtZW50KG5vZGUsIGNsYXp6LCBkZWxheSkge1xuICAgIGxldCBlbHQgPSBhc0VsZW1lbnQocmVzb2x2ZVRhcmdldChub2RlKSlcbiAgICBpZiAoIWVsdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChkZWxheSkge1xuICAgICAgZ2V0V2luZG93KCkuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgcmVtb3ZlQ2xhc3NGcm9tRWxlbWVudChlbHQsIGNsYXp6KVxuICAgICAgICBlbHQgPSBudWxsXG4gICAgICB9LCBkZWxheSlcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGVsdC5jbGFzc0xpc3QpIHtcbiAgICAgICAgZWx0LmNsYXNzTGlzdC5yZW1vdmUoY2xhenopXG4gICAgICAgIC8vIGlmIHRoZXJlIGFyZSBubyBjbGFzc2VzIGxlZnQsIHJlbW92ZSB0aGUgY2xhc3MgYXR0cmlidXRlXG4gICAgICAgIGlmIChlbHQuY2xhc3NMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGVsdC5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBnaXZlbiBjbGFzcyBvbiBhbiBlbGVtZW50XG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9odG14Lm9yZy9hcGkvI3RvZ2dsZUNsYXNzXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudHxzdHJpbmd9IGVsdCB0aGUgZWxlbWVudCB0byB0b2dnbGUgdGhlIGNsYXNzIG9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbGF6eiB0aGUgY2xhc3MgdG8gdG9nZ2xlXG4gICAqL1xuICBmdW5jdGlvbiB0b2dnbGVDbGFzc09uRWxlbWVudChlbHQsIGNsYXp6KSB7XG4gICAgZWx0ID0gcmVzb2x2ZVRhcmdldChlbHQpXG4gICAgZWx0LmNsYXNzTGlzdC50b2dnbGUoY2xhenopXG4gIH1cblxuICAvKipcbiAgICogVGFrZXMgdGhlIGdpdmVuIGNsYXNzIGZyb20gaXRzIHNpYmxpbmdzLCBzbyB0aGF0IGFtb25nIGl0cyBzaWJsaW5ncywgb25seSB0aGUgZ2l2ZW4gZWxlbWVudCB3aWxsIGhhdmUgdGhlIGNsYXNzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vaHRteC5vcmcvYXBpLyN0YWtlQ2xhc3NcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfHN0cmluZ30gZWx0IHRoZSBlbGVtZW50IHRoYXQgd2lsbCB0YWtlIHRoZSBjbGFzc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY2xhenogdGhlIGNsYXNzIHRvIHRha2VcbiAgICovXG4gIGZ1bmN0aW9uIHRha2VDbGFzc0ZvckVsZW1lbnQoZWx0LCBjbGF6eikge1xuICAgIGVsdCA9IHJlc29sdmVUYXJnZXQoZWx0KVxuICAgIGZvckVhY2goZWx0LnBhcmVudEVsZW1lbnQuY2hpbGRyZW4sIGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICByZW1vdmVDbGFzc0Zyb21FbGVtZW50KGNoaWxkLCBjbGF6eilcbiAgICB9KVxuICAgIGFkZENsYXNzVG9FbGVtZW50KGFzRWxlbWVudChlbHQpLCBjbGF6eilcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgY2xvc2VzdCBtYXRjaGluZyBlbGVtZW50IGluIHRoZSBnaXZlbiBlbGVtZW50cyBwYXJlbnRhZ2UsIGluY2x1c2l2ZSBvZiB0aGUgZWxlbWVudFxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vaHRteC5vcmcvYXBpLyNjbG9zZXN0XG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudHxzdHJpbmd9IGVsdCB0aGUgZWxlbWVudCB0byBmaW5kIHRoZSBzZWxlY3RvciBmcm9tXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvciB0aGUgc2VsZWN0b3IgdG8gZmluZFxuICAgKiBAcmV0dXJucyB7RWxlbWVudHxudWxsfVxuICAgKi9cbiAgZnVuY3Rpb24gY2xvc2VzdChlbHQsIHNlbGVjdG9yKSB7XG4gICAgZWx0ID0gYXNFbGVtZW50KHJlc29sdmVUYXJnZXQoZWx0KSlcbiAgICBpZiAoZWx0ICYmIGVsdC5jbG9zZXN0KSB7XG4gICAgICByZXR1cm4gZWx0LmNsb3Nlc3Qoc2VsZWN0b3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE8gcmVtb3ZlIHdoZW4gSUUgZ29lcyBhd2F5XG4gICAgICBkbyB7XG4gICAgICAgIGlmIChlbHQgPT0gbnVsbCB8fCBtYXRjaGVzKGVsdCwgc2VsZWN0b3IpKSB7XG4gICAgICAgICAgcmV0dXJuIGVsdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB3aGlsZSAoZWx0ID0gZWx0ICYmIGFzRWxlbWVudChwYXJlbnRFbHQoZWx0KSkpXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiBzdGFydHNXaXRoKHN0ciwgcHJlZml4KSB7XG4gICAgcmV0dXJuIHN0ci5zdWJzdHJpbmcoMCwgcHJlZml4Lmxlbmd0aCkgPT09IHByZWZpeFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1ZmZpeFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIGVuZHNXaXRoKHN0ciwgc3VmZml4KSB7XG4gICAgcmV0dXJuIHN0ci5zdWJzdHJpbmcoc3RyLmxlbmd0aCAtIHN1ZmZpeC5sZW5ndGgpID09PSBzdWZmaXhcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZVNlbGVjdG9yKHNlbGVjdG9yKSB7XG4gICAgY29uc3QgdHJpbW1lZFNlbGVjdG9yID0gc2VsZWN0b3IudHJpbSgpXG4gICAgaWYgKHN0YXJ0c1dpdGgodHJpbW1lZFNlbGVjdG9yLCAnPCcpICYmIGVuZHNXaXRoKHRyaW1tZWRTZWxlY3RvciwgJy8+JykpIHtcbiAgICAgIHJldHVybiB0cmltbWVkU2VsZWN0b3Iuc3Vic3RyaW5nKDEsIHRyaW1tZWRTZWxlY3Rvci5sZW5ndGggLSAyKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJpbW1lZFNlbGVjdG9yXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZXxFbGVtZW50fERvY3VtZW50fHN0cmluZ30gZWx0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZWxlY3RvclxuICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBnbG9iYWxcbiAgICogQHJldHVybnMgeyhOb2RlfFdpbmRvdylbXX1cbiAgICovXG4gIGZ1bmN0aW9uIHF1ZXJ5U2VsZWN0b3JBbGxFeHQoZWx0LCBzZWxlY3RvciwgZ2xvYmFsKSB7XG4gICAgZWx0ID0gcmVzb2x2ZVRhcmdldChlbHQpXG4gICAgaWYgKHNlbGVjdG9yLmluZGV4T2YoJ2Nsb3Nlc3QgJykgPT09IDApIHtcbiAgICAgIHJldHVybiBbY2xvc2VzdChhc0VsZW1lbnQoZWx0KSwgbm9ybWFsaXplU2VsZWN0b3Ioc2VsZWN0b3Iuc3Vic3RyKDgpKSldXG4gICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pbmRleE9mKCdmaW5kICcpID09PSAwKSB7XG4gICAgICByZXR1cm4gW2ZpbmQoYXNQYXJlbnROb2RlKGVsdCksIG5vcm1hbGl6ZVNlbGVjdG9yKHNlbGVjdG9yLnN1YnN0cig1KSkpXVxuICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IgPT09ICduZXh0Jykge1xuICAgICAgcmV0dXJuIFthc0VsZW1lbnQoZWx0KS5uZXh0RWxlbWVudFNpYmxpbmddXG4gICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pbmRleE9mKCduZXh0ICcpID09PSAwKSB7XG4gICAgICByZXR1cm4gW3NjYW5Gb3J3YXJkUXVlcnkoZWx0LCBub3JtYWxpemVTZWxlY3RvcihzZWxlY3Rvci5zdWJzdHIoNSkpLCAhIWdsb2JhbCldXG4gICAgfSBlbHNlIGlmIChzZWxlY3RvciA9PT0gJ3ByZXZpb3VzJykge1xuICAgICAgcmV0dXJuIFthc0VsZW1lbnQoZWx0KS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nXVxuICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaW5kZXhPZigncHJldmlvdXMgJykgPT09IDApIHtcbiAgICAgIHJldHVybiBbc2NhbkJhY2t3YXJkc1F1ZXJ5KGVsdCwgbm9ybWFsaXplU2VsZWN0b3Ioc2VsZWN0b3Iuc3Vic3RyKDkpKSwgISFnbG9iYWwpXVxuICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IgPT09ICdkb2N1bWVudCcpIHtcbiAgICAgIHJldHVybiBbZG9jdW1lbnRdXG4gICAgfSBlbHNlIGlmIChzZWxlY3RvciA9PT0gJ3dpbmRvdycpIHtcbiAgICAgIHJldHVybiBbd2luZG93XVxuICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IgPT09ICdib2R5Jykge1xuICAgICAgcmV0dXJuIFtkb2N1bWVudC5ib2R5XVxuICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IgPT09ICdyb290Jykge1xuICAgICAgcmV0dXJuIFtnZXRSb290Tm9kZShlbHQsICEhZ2xvYmFsKV1cbiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmluZGV4T2YoJ2dsb2JhbCAnKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGxFeHQoZWx0LCBzZWxlY3Rvci5zbGljZSg3KSwgdHJ1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRvQXJyYXkoYXNQYXJlbnROb2RlKGdldFJvb3ROb2RlKGVsdCwgISFnbG9iYWwpKS5xdWVyeVNlbGVjdG9yQWxsKG5vcm1hbGl6ZVNlbGVjdG9yKHNlbGVjdG9yKSkpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gc3RhcnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1hdGNoXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZ2xvYmFsXG4gICAqIEByZXR1cm5zIHtFbGVtZW50fVxuICAgKi9cbiAgdmFyIHNjYW5Gb3J3YXJkUXVlcnkgPSBmdW5jdGlvbihzdGFydCwgbWF0Y2gsIGdsb2JhbCkge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhc1BhcmVudE5vZGUoZ2V0Um9vdE5vZGUoc3RhcnQsIGdsb2JhbCkpLnF1ZXJ5U2VsZWN0b3JBbGwobWF0Y2gpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlbHQgPSByZXN1bHRzW2ldXG4gICAgICBpZiAoZWx0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHN0YXJ0KSA9PT0gTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9QUkVDRURJTkcpIHtcbiAgICAgICAgcmV0dXJuIGVsdFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHN0YXJ0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtYXRjaFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGdsb2JhbFxuICAgKiBAcmV0dXJucyB7RWxlbWVudH1cbiAgICovXG4gIHZhciBzY2FuQmFja3dhcmRzUXVlcnkgPSBmdW5jdGlvbihzdGFydCwgbWF0Y2gsIGdsb2JhbCkge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhc1BhcmVudE5vZGUoZ2V0Um9vdE5vZGUoc3RhcnQsIGdsb2JhbCkpLnF1ZXJ5U2VsZWN0b3JBbGwobWF0Y2gpXG4gICAgZm9yIChsZXQgaSA9IHJlc3VsdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGVsdCA9IHJlc3VsdHNbaV1cbiAgICAgIGlmIChlbHQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oc3RhcnQpID09PSBOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0ZPTExPV0lORykge1xuICAgICAgICByZXR1cm4gZWx0XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZXxzdHJpbmd9IGVsdE9yU2VsZWN0b3JcbiAgICogQHBhcmFtIHtzdHJpbmc9fSBzZWxlY3RvclxuICAgKiBAcmV0dXJucyB7Tm9kZXxXaW5kb3d9XG4gICAqL1xuICBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yRXh0KGVsdE9yU2VsZWN0b3IsIHNlbGVjdG9yKSB7XG4gICAgaWYgKHR5cGVvZiBlbHRPclNlbGVjdG9yICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JBbGxFeHQoZWx0T3JTZWxlY3Rvciwgc2VsZWN0b3IpWzBdXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBxdWVyeVNlbGVjdG9yQWxsRXh0KGdldERvY3VtZW50KCkuYm9keSwgZWx0T3JTZWxlY3RvcilbMF1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHRlbXBsYXRlIHtFdmVudFRhcmdldH0gVFxuICAgKiBAcGFyYW0ge1R8c3RyaW5nfSBlbHRPclNlbGVjdG9yXG4gICAqIEBwYXJhbSB7VH0gW2NvbnRleHRdXG4gICAqIEByZXR1cm5zIHtFbGVtZW50fFR8bnVsbH1cbiAgICovXG4gIGZ1bmN0aW9uIHJlc29sdmVUYXJnZXQoZWx0T3JTZWxlY3RvciwgY29udGV4dCkge1xuICAgIGlmICh0eXBlb2YgZWx0T3JTZWxlY3RvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBmaW5kKGFzUGFyZW50Tm9kZShjb250ZXh0KSB8fCBkb2N1bWVudCwgZWx0T3JTZWxlY3RvcilcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVsdE9yU2VsZWN0b3JcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge2tleW9mIEhUTUxFbGVtZW50RXZlbnRNYXB8c3RyaW5nfSBBbnlFdmVudE5hbWVcbiAgICovXG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IEV2ZW50QXJnc1xuICAgKiBAcHJvcGVydHkge0V2ZW50VGFyZ2V0fSB0YXJnZXRcbiAgICogQHByb3BlcnR5IHtBbnlFdmVudE5hbWV9IGV2ZW50XG4gICAqIEBwcm9wZXJ0eSB7RXZlbnRMaXN0ZW5lcn0gbGlzdGVuZXJcbiAgICovXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR8QW55RXZlbnROYW1lfSBhcmcxXG4gICAqIEBwYXJhbSB7QW55RXZlbnROYW1lfEV2ZW50TGlzdGVuZXJ9IGFyZzJcbiAgICogQHBhcmFtIHtFdmVudExpc3RlbmVyfSBbYXJnM11cbiAgICogQHJldHVybnMge0V2ZW50QXJnc31cbiAgICovXG4gIGZ1bmN0aW9uIHByb2Nlc3NFdmVudEFyZ3MoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIGlmIChpc0Z1bmN0aW9uKGFyZzIpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YXJnZXQ6IGdldERvY3VtZW50KCkuYm9keSxcbiAgICAgICAgZXZlbnQ6IGFzU3RyaW5nKGFyZzEpLFxuICAgICAgICBsaXN0ZW5lcjogYXJnMlxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YXJnZXQ6IHJlc29sdmVUYXJnZXQoYXJnMSksXG4gICAgICAgIGV2ZW50OiBhc1N0cmluZyhhcmcyKSxcbiAgICAgICAgbGlzdGVuZXI6IGFyZzNcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBldmVudCBsaXN0ZW5lciB0byBhbiBlbGVtZW50XG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9odG14Lm9yZy9hcGkvI29uXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR8c3RyaW5nfSBhcmcxIHRoZSBlbGVtZW50IHRvIGFkZCB0aGUgbGlzdGVuZXIgdG8gfCB0aGUgZXZlbnQgbmFtZSB0byBhZGQgdGhlIGxpc3RlbmVyIGZvclxuICAgKiBAcGFyYW0ge3N0cmluZ3xFdmVudExpc3RlbmVyfSBhcmcyIHRoZSBldmVudCBuYW1lIHRvIGFkZCB0aGUgbGlzdGVuZXIgZm9yIHwgdGhlIGxpc3RlbmVyIHRvIGFkZFxuICAgKiBAcGFyYW0ge0V2ZW50TGlzdGVuZXJ9IFthcmczXSB0aGUgbGlzdGVuZXIgdG8gYWRkXG4gICAqIEByZXR1cm5zIHtFdmVudExpc3RlbmVyfVxuICAgKi9cbiAgZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lckltcGwoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHJlYWR5KGZ1bmN0aW9uKCkge1xuICAgICAgY29uc3QgZXZlbnRBcmdzID0gcHJvY2Vzc0V2ZW50QXJncyhhcmcxLCBhcmcyLCBhcmczKVxuICAgICAgZXZlbnRBcmdzLnRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50QXJncy5ldmVudCwgZXZlbnRBcmdzLmxpc3RlbmVyKVxuICAgIH0pXG4gICAgY29uc3QgYiA9IGlzRnVuY3Rpb24oYXJnMilcbiAgICByZXR1cm4gYiA/IGFyZzIgOiBhcmczXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhbiBldmVudCBsaXN0ZW5lciBmcm9tIGFuIGVsZW1lbnRcbiAgICpcbiAgICogQHNlZSBodHRwczovL2h0bXgub3JnL2FwaS8jb2ZmXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR8c3RyaW5nfSBhcmcxIHRoZSBlbGVtZW50IHRvIHJlbW92ZSB0aGUgbGlzdGVuZXIgZnJvbSB8IHRoZSBldmVudCBuYW1lIHRvIHJlbW92ZSB0aGUgbGlzdGVuZXIgZnJvbVxuICAgKiBAcGFyYW0ge3N0cmluZ3xFdmVudExpc3RlbmVyfSBhcmcyIHRoZSBldmVudCBuYW1lIHRvIHJlbW92ZSB0aGUgbGlzdGVuZXIgZnJvbSB8IHRoZSBsaXN0ZW5lciB0byByZW1vdmVcbiAgICogQHBhcmFtIHtFdmVudExpc3RlbmVyfSBbYXJnM10gdGhlIGxpc3RlbmVyIHRvIHJlbW92ZVxuICAgKiBAcmV0dXJucyB7RXZlbnRMaXN0ZW5lcn1cbiAgICovXG4gIGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXJJbXBsKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICByZWFkeShmdW5jdGlvbigpIHtcbiAgICAgIGNvbnN0IGV2ZW50QXJncyA9IHByb2Nlc3NFdmVudEFyZ3MoYXJnMSwgYXJnMiwgYXJnMylcbiAgICAgIGV2ZW50QXJncy50YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudEFyZ3MuZXZlbnQsIGV2ZW50QXJncy5saXN0ZW5lcilcbiAgICB9KVxuICAgIHJldHVybiBpc0Z1bmN0aW9uKGFyZzIpID8gYXJnMiA6IGFyZzNcbiAgfVxuXG4gIC8vPSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE5vZGUgcHJvY2Vzc2luZ1xuICAvLz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIGNvbnN0IERVTU1ZX0VMVCA9IGdldERvY3VtZW50KCkuY3JlYXRlRWxlbWVudCgnb3V0cHV0JykgLy8gZHVtbXkgZWxlbWVudCBmb3IgYmFkIHNlbGVjdG9yc1xuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGF0dHJOYW1lXG4gICAqIEByZXR1cm5zIHsoTm9kZXxXaW5kb3cpW119XG4gICAqL1xuICBmdW5jdGlvbiBmaW5kQXR0cmlidXRlVGFyZ2V0cyhlbHQsIGF0dHJOYW1lKSB7XG4gICAgY29uc3QgYXR0clRhcmdldCA9IGdldENsb3Nlc3RBdHRyaWJ1dGVWYWx1ZShlbHQsIGF0dHJOYW1lKVxuICAgIGlmIChhdHRyVGFyZ2V0KSB7XG4gICAgICBpZiAoYXR0clRhcmdldCA9PT0gJ3RoaXMnKSB7XG4gICAgICAgIHJldHVybiBbZmluZFRoaXNFbGVtZW50KGVsdCwgYXR0ck5hbWUpXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcXVlcnlTZWxlY3RvckFsbEV4dChlbHQsIGF0dHJUYXJnZXQpXG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgbG9nRXJyb3IoJ1RoZSBzZWxlY3RvciBcIicgKyBhdHRyVGFyZ2V0ICsgJ1wiIG9uICcgKyBhdHRyTmFtZSArICcgcmV0dXJuZWQgbm8gbWF0Y2hlcyEnKVxuICAgICAgICAgIHJldHVybiBbRFVNTVlfRUxUXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlXG4gICAqIEByZXR1cm5zIHtFbGVtZW50fG51bGx9XG4gICAqL1xuICBmdW5jdGlvbiBmaW5kVGhpc0VsZW1lbnQoZWx0LCBhdHRyaWJ1dGUpIHtcbiAgICByZXR1cm4gYXNFbGVtZW50KGdldENsb3Nlc3RNYXRjaChlbHQsIGZ1bmN0aW9uKGVsdCkge1xuICAgICAgcmV0dXJuIGdldEF0dHJpYnV0ZVZhbHVlKGFzRWxlbWVudChlbHQpLCBhdHRyaWJ1dGUpICE9IG51bGxcbiAgICB9KSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcmV0dXJucyB7Tm9kZXxXaW5kb3d8bnVsbH1cbiAgICovXG4gIGZ1bmN0aW9uIGdldFRhcmdldChlbHQpIHtcbiAgICBjb25zdCB0YXJnZXRTdHIgPSBnZXRDbG9zZXN0QXR0cmlidXRlVmFsdWUoZWx0LCAnaHgtdGFyZ2V0JylcbiAgICBpZiAodGFyZ2V0U3RyKSB7XG4gICAgICBpZiAodGFyZ2V0U3RyID09PSAndGhpcycpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRUaGlzRWxlbWVudChlbHQsICdoeC10YXJnZXQnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHF1ZXJ5U2VsZWN0b3JFeHQoZWx0LCB0YXJnZXRTdHIpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBnZXRJbnRlcm5hbERhdGEoZWx0KVxuICAgICAgaWYgKGRhdGEuYm9vc3RlZCkge1xuICAgICAgICByZXR1cm4gZ2V0RG9jdW1lbnQoKS5ib2R5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZWx0XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gc2hvdWxkU2V0dGxlQXR0cmlidXRlKG5hbWUpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGVzVG9TZXR0bGUgPSBodG14LmNvbmZpZy5hdHRyaWJ1dGVzVG9TZXR0bGVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJpYnV0ZXNUb1NldHRsZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKG5hbWUgPT09IGF0dHJpYnV0ZXNUb1NldHRsZVtpXSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IG1lcmdlVG9cbiAgICogQHBhcmFtIHtFbGVtZW50fSBtZXJnZUZyb21cbiAgICovXG4gIGZ1bmN0aW9uIGNsb25lQXR0cmlidXRlcyhtZXJnZVRvLCBtZXJnZUZyb20pIHtcbiAgICBmb3JFYWNoKG1lcmdlVG8uYXR0cmlidXRlcywgZnVuY3Rpb24oYXR0cikge1xuICAgICAgaWYgKCFtZXJnZUZyb20uaGFzQXR0cmlidXRlKGF0dHIubmFtZSkgJiYgc2hvdWxkU2V0dGxlQXR0cmlidXRlKGF0dHIubmFtZSkpIHtcbiAgICAgICAgbWVyZ2VUby5yZW1vdmVBdHRyaWJ1dGUoYXR0ci5uYW1lKVxuICAgICAgfVxuICAgIH0pXG4gICAgZm9yRWFjaChtZXJnZUZyb20uYXR0cmlidXRlcywgZnVuY3Rpb24oYXR0cikge1xuICAgICAgaWYgKHNob3VsZFNldHRsZUF0dHJpYnV0ZShhdHRyLm5hbWUpKSB7XG4gICAgICAgIG1lcmdlVG8uc2V0QXR0cmlidXRlKGF0dHIubmFtZSwgYXR0ci52YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SHRteFN3YXBTdHlsZX0gc3dhcFN0eWxlXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gaXNJbmxpbmVTd2FwKHN3YXBTdHlsZSwgdGFyZ2V0KSB7XG4gICAgY29uc3QgZXh0ZW5zaW9ucyA9IGdldEV4dGVuc2lvbnModGFyZ2V0KVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uc1tpXVxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGV4dGVuc2lvbi5pc0lubGluZVN3YXAoc3dhcFN0eWxlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nRXJyb3IoZSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN3YXBTdHlsZSA9PT0gJ291dGVySFRNTCdcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb29iVmFsdWVcbiAgICogQHBhcmFtIHtFbGVtZW50fSBvb2JFbGVtZW50XG4gICAqIEBwYXJhbSB7SHRteFNldHRsZUluZm99IHNldHRsZUluZm9cbiAgICogQHJldHVybnNcbiAgICovXG4gIGZ1bmN0aW9uIG9vYlN3YXAob29iVmFsdWUsIG9vYkVsZW1lbnQsIHNldHRsZUluZm8pIHtcbiAgICBsZXQgc2VsZWN0b3IgPSAnIycgKyBnZXRSYXdBdHRyaWJ1dGUob29iRWxlbWVudCwgJ2lkJylcbiAgICAvKiogQHR5cGUgSHRteFN3YXBTdHlsZSAqL1xuICAgIGxldCBzd2FwU3R5bGUgPSAnb3V0ZXJIVE1MJ1xuICAgIGlmIChvb2JWYWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfSBlbHNlIGlmIChvb2JWYWx1ZS5pbmRleE9mKCc6JykgPiAwKSB7XG4gICAgICBzd2FwU3R5bGUgPSBvb2JWYWx1ZS5zdWJzdHIoMCwgb29iVmFsdWUuaW5kZXhPZignOicpKVxuICAgICAgc2VsZWN0b3IgPSBvb2JWYWx1ZS5zdWJzdHIob29iVmFsdWUuaW5kZXhPZignOicpICsgMSwgb29iVmFsdWUubGVuZ3RoKVxuICAgIH0gZWxzZSB7XG4gICAgICBzd2FwU3R5bGUgPSBvb2JWYWx1ZVxuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldHMgPSBnZXREb2N1bWVudCgpLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpXG4gICAgaWYgKHRhcmdldHMpIHtcbiAgICAgIGZvckVhY2goXG4gICAgICAgIHRhcmdldHMsXG4gICAgICAgIGZ1bmN0aW9uKHRhcmdldCkge1xuICAgICAgICAgIGxldCBmcmFnbWVudFxuICAgICAgICAgIGNvbnN0IG9vYkVsZW1lbnRDbG9uZSA9IG9vYkVsZW1lbnQuY2xvbmVOb2RlKHRydWUpXG4gICAgICAgICAgZnJhZ21lbnQgPSBnZXREb2N1bWVudCgpLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKVxuICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKG9vYkVsZW1lbnRDbG9uZSlcbiAgICAgICAgICBpZiAoIWlzSW5saW5lU3dhcChzd2FwU3R5bGUsIHRhcmdldCkpIHtcbiAgICAgICAgICAgIGZyYWdtZW50ID0gYXNQYXJlbnROb2RlKG9vYkVsZW1lbnRDbG9uZSkgLy8gaWYgdGhpcyBpcyBub3QgYW4gaW5saW5lIHN3YXAsIHdlIHVzZSB0aGUgY29udGVudCBvZiB0aGUgbm9kZSwgbm90IHRoZSBub2RlIGl0c2VsZlxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGJlZm9yZVN3YXBEZXRhaWxzID0geyBzaG91bGRTd2FwOiB0cnVlLCB0YXJnZXQsIGZyYWdtZW50IH1cbiAgICAgICAgICBpZiAoIXRyaWdnZXJFdmVudCh0YXJnZXQsICdodG14Om9vYkJlZm9yZVN3YXAnLCBiZWZvcmVTd2FwRGV0YWlscykpIHJldHVyblxuXG4gICAgICAgICAgdGFyZ2V0ID0gYmVmb3JlU3dhcERldGFpbHMudGFyZ2V0IC8vIGFsbG93IHJlLXRhcmdldGluZ1xuICAgICAgICAgIGlmIChiZWZvcmVTd2FwRGV0YWlscy5zaG91bGRTd2FwKSB7XG4gICAgICAgICAgICBzd2FwV2l0aFN0eWxlKHN3YXBTdHlsZSwgdGFyZ2V0LCB0YXJnZXQsIGZyYWdtZW50LCBzZXR0bGVJbmZvKVxuICAgICAgICAgIH1cbiAgICAgICAgICBmb3JFYWNoKHNldHRsZUluZm8uZWx0cywgZnVuY3Rpb24oZWx0KSB7XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoZWx0LCAnaHRteDpvb2JBZnRlclN3YXAnLCBiZWZvcmVTd2FwRGV0YWlscylcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICApXG4gICAgICBvb2JFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob29iRWxlbWVudClcbiAgICB9IGVsc2Uge1xuICAgICAgb29iRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG9vYkVsZW1lbnQpXG4gICAgICB0cmlnZ2VyRXJyb3JFdmVudChnZXREb2N1bWVudCgpLmJvZHksICdodG14Om9vYkVycm9yTm9UYXJnZXQnLCB7IGNvbnRlbnQ6IG9vYkVsZW1lbnQgfSlcbiAgICB9XG4gICAgcmV0dXJuIG9vYlZhbHVlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtEb2N1bWVudEZyYWdtZW50fSBmcmFnbWVudFxuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlUHJlc2VydmVkRWxlbWVudHMoZnJhZ21lbnQpIHtcbiAgICBmb3JFYWNoKGZpbmRBbGwoZnJhZ21lbnQsICdbaHgtcHJlc2VydmVdLCBbZGF0YS1oeC1wcmVzZXJ2ZV0nKSwgZnVuY3Rpb24ocHJlc2VydmVkRWx0KSB7XG4gICAgICBjb25zdCBpZCA9IGdldEF0dHJpYnV0ZVZhbHVlKHByZXNlcnZlZEVsdCwgJ2lkJylcbiAgICAgIGNvbnN0IG9sZEVsdCA9IGdldERvY3VtZW50KCkuZ2V0RWxlbWVudEJ5SWQoaWQpXG4gICAgICBpZiAob2xkRWx0ICE9IG51bGwpIHtcbiAgICAgICAgcHJlc2VydmVkRWx0LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG9sZEVsdCwgcHJlc2VydmVkRWx0KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSBwYXJlbnROb2RlXG4gICAqIEBwYXJhbSB7UGFyZW50Tm9kZX0gZnJhZ21lbnRcbiAgICogQHBhcmFtIHtIdG14U2V0dGxlSW5mb30gc2V0dGxlSW5mb1xuICAgKi9cbiAgZnVuY3Rpb24gaGFuZGxlQXR0cmlidXRlcyhwYXJlbnROb2RlLCBmcmFnbWVudCwgc2V0dGxlSW5mbykge1xuICAgIGZvckVhY2goZnJhZ21lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkXScpLCBmdW5jdGlvbihuZXdOb2RlKSB7XG4gICAgICBjb25zdCBpZCA9IGdldFJhd0F0dHJpYnV0ZShuZXdOb2RlLCAnaWQnKVxuICAgICAgaWYgKGlkICYmIGlkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZElkID0gaWQucmVwbGFjZShcIidcIiwgXCJcXFxcJ1wiKVxuICAgICAgICBjb25zdCBub3JtYWxpemVkVGFnID0gbmV3Tm9kZS50YWdOYW1lLnJlcGxhY2UoJzonLCAnXFxcXDonKVxuICAgICAgICBjb25zdCBwYXJlbnRFbHQgPSBhc1BhcmVudE5vZGUocGFyZW50Tm9kZSlcbiAgICAgICAgY29uc3Qgb2xkTm9kZSA9IHBhcmVudEVsdCAmJiBwYXJlbnRFbHQucXVlcnlTZWxlY3Rvcihub3JtYWxpemVkVGFnICsgXCJbaWQ9J1wiICsgbm9ybWFsaXplZElkICsgXCInXVwiKVxuICAgICAgICBpZiAob2xkTm9kZSAmJiBvbGROb2RlICE9PSBwYXJlbnRFbHQpIHtcbiAgICAgICAgICBjb25zdCBuZXdBdHRyaWJ1dGVzID0gbmV3Tm9kZS5jbG9uZU5vZGUoKVxuICAgICAgICAgIGNsb25lQXR0cmlidXRlcyhuZXdOb2RlLCBvbGROb2RlKVxuICAgICAgICAgIHNldHRsZUluZm8udGFza3MucHVzaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGNsb25lQXR0cmlidXRlcyhuZXdOb2RlLCBuZXdBdHRyaWJ1dGVzKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gY2hpbGRcbiAgICogQHJldHVybnMge0h0bXhTZXR0bGVUYXNrfVxuICAgKi9cbiAgZnVuY3Rpb24gbWFrZUFqYXhMb2FkVGFzayhjaGlsZCkge1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHJlbW92ZUNsYXNzRnJvbUVsZW1lbnQoY2hpbGQsIGh0bXguY29uZmlnLmFkZGVkQ2xhc3MpXG4gICAgICBwcm9jZXNzTm9kZShhc0VsZW1lbnQoY2hpbGQpKVxuICAgICAgcHJvY2Vzc0ZvY3VzKGFzUGFyZW50Tm9kZShjaGlsZCkpXG4gICAgICB0cmlnZ2VyRXZlbnQoY2hpbGQsICdodG14OmxvYWQnKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1BhcmVudE5vZGV9IGNoaWxkXG4gICAqL1xuICBmdW5jdGlvbiBwcm9jZXNzRm9jdXMoY2hpbGQpIHtcbiAgICBjb25zdCBhdXRvZm9jdXMgPSAnW2F1dG9mb2N1c10nXG4gICAgY29uc3QgYXV0b0ZvY3VzZWRFbHQgPSBhc0h0bWxFbGVtZW50KG1hdGNoZXMoY2hpbGQsIGF1dG9mb2N1cykgPyBjaGlsZCA6IGNoaWxkLnF1ZXJ5U2VsZWN0b3IoYXV0b2ZvY3VzKSlcbiAgICBpZiAoYXV0b0ZvY3VzZWRFbHQgIT0gbnVsbCkge1xuICAgICAgYXV0b0ZvY3VzZWRFbHQuZm9jdXMoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHBhcmVudE5vZGVcbiAgICogQHBhcmFtIHtOb2RlfSBpbnNlcnRCZWZvcmVcbiAgICogQHBhcmFtIHtQYXJlbnROb2RlfSBmcmFnbWVudFxuICAgKiBAcGFyYW0ge0h0bXhTZXR0bGVJbmZvfSBzZXR0bGVJbmZvXG4gICAqL1xuICBmdW5jdGlvbiBpbnNlcnROb2Rlc0JlZm9yZShwYXJlbnROb2RlLCBpbnNlcnRCZWZvcmUsIGZyYWdtZW50LCBzZXR0bGVJbmZvKSB7XG4gICAgaGFuZGxlQXR0cmlidXRlcyhwYXJlbnROb2RlLCBmcmFnbWVudCwgc2V0dGxlSW5mbylcbiAgICB3aGlsZSAoZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IGZyYWdtZW50LmZpcnN0Q2hpbGRcbiAgICAgIGFkZENsYXNzVG9FbGVtZW50KGFzRWxlbWVudChjaGlsZCksIGh0bXguY29uZmlnLmFkZGVkQ2xhc3MpXG4gICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShjaGlsZCwgaW5zZXJ0QmVmb3JlKVxuICAgICAgaWYgKGNoaWxkLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSAmJiBjaGlsZC5ub2RlVHlwZSAhPT0gTm9kZS5DT01NRU5UX05PREUpIHtcbiAgICAgICAgc2V0dGxlSW5mby50YXNrcy5wdXNoKG1ha2VBamF4TG9hZFRhc2soY2hpbGQpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBiYXNlZCBvbiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9oeWFtYW1vdG8vZmQ0MzU1MDVkMjllYmZhM2Q5NzE2ZmQyYmU4ZDQyZjAsXG4gICAqIGRlcml2ZWQgZnJvbSBKYXZhJ3Mgc3RyaW5nIGhhc2hjb2RlIGltcGxlbWVudGF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAgICogQHBhcmFtIHtudW1iZXJ9IGhhc2hcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGZ1bmN0aW9uIHN0cmluZ0hhc2goc3RyaW5nLCBoYXNoKSB7XG4gICAgbGV0IGNoYXIgPSAwXG4gICAgd2hpbGUgKGNoYXIgPCBzdHJpbmcubGVuZ3RoKSB7XG4gICAgICBoYXNoID0gKGhhc2ggPDwgNSkgLSBoYXNoICsgc3RyaW5nLmNoYXJDb2RlQXQoY2hhcisrKSB8IDAgLy8gYml0d2lzZSBvciBlbnN1cmVzIHdlIGhhdmUgYSAzMi1iaXQgaW50XG4gICAgfVxuICAgIHJldHVybiBoYXNoXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGZ1bmN0aW9uIGF0dHJpYnV0ZUhhc2goZWx0KSB7XG4gICAgbGV0IGhhc2ggPSAwXG4gICAgLy8gSUUgZml4XG4gICAgaWYgKGVsdC5hdHRyaWJ1dGVzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsdC5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGVsdC5hdHRyaWJ1dGVzW2ldXG4gICAgICAgIGlmIChhdHRyaWJ1dGUudmFsdWUpIHsgLy8gb25seSBpbmNsdWRlIGF0dHJpYnV0ZXMgdy8gYWN0dWFsIHZhbHVlcyAoZW1wdHkgaXMgc2FtZSBhcyBub24tZXhpc3RlbnQpXG4gICAgICAgICAgaGFzaCA9IHN0cmluZ0hhc2goYXR0cmlidXRlLm5hbWUsIGhhc2gpXG4gICAgICAgICAgaGFzaCA9IHN0cmluZ0hhc2goYXR0cmlidXRlLnZhbHVlLCBoYXNoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoYXNoXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH0gZWx0XG4gICAqL1xuICBmdW5jdGlvbiBkZUluaXRPbkhhbmRsZXJzKGVsdCkge1xuICAgIGNvbnN0IGludGVybmFsRGF0YSA9IGdldEludGVybmFsRGF0YShlbHQpXG4gICAgaWYgKGludGVybmFsRGF0YS5vbkhhbmRsZXJzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGludGVybmFsRGF0YS5vbkhhbmRsZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJJbmZvID0gaW50ZXJuYWxEYXRhLm9uSGFuZGxlcnNbaV1cbiAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lckltcGwoZWx0LCBoYW5kbGVySW5mby5ldmVudCwgaGFuZGxlckluZm8ubGlzdGVuZXIpXG4gICAgICB9XG4gICAgICBkZWxldGUgaW50ZXJuYWxEYXRhLm9uSGFuZGxlcnNcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50XG4gICAqL1xuICBmdW5jdGlvbiBkZUluaXROb2RlKGVsZW1lbnQpIHtcbiAgICBjb25zdCBpbnRlcm5hbERhdGEgPSBnZXRJbnRlcm5hbERhdGEoZWxlbWVudClcbiAgICBpZiAoaW50ZXJuYWxEYXRhLnRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dChpbnRlcm5hbERhdGEudGltZW91dClcbiAgICB9XG4gICAgaWYgKGludGVybmFsRGF0YS5saXN0ZW5lckluZm9zKSB7XG4gICAgICBmb3JFYWNoKGludGVybmFsRGF0YS5saXN0ZW5lckluZm9zLCBmdW5jdGlvbihpbmZvKSB7XG4gICAgICAgIGlmIChpbmZvLm9uKSB7XG4gICAgICAgICAgcmVtb3ZlRXZlbnRMaXN0ZW5lckltcGwoaW5mby5vbiwgaW5mby50cmlnZ2VyLCBpbmZvLmxpc3RlbmVyKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICBkZUluaXRPbkhhbmRsZXJzKGVsZW1lbnQpXG4gICAgZm9yRWFjaChPYmplY3Qua2V5cyhpbnRlcm5hbERhdGEpLCBmdW5jdGlvbihrZXkpIHsgZGVsZXRlIGludGVybmFsRGF0YVtrZXldIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSBlbGVtZW50XG4gICAqL1xuICBmdW5jdGlvbiBjbGVhblVwRWxlbWVudChlbGVtZW50KSB7XG4gICAgdHJpZ2dlckV2ZW50KGVsZW1lbnQsICdodG14OmJlZm9yZUNsZWFudXBFbGVtZW50JylcbiAgICBkZUluaXROb2RlKGVsZW1lbnQpXG4gICAgLy8gQHRzLWlnbm9yZSBJRTExIGNvZGVcbiAgICAvLyBub2luc3BlY3Rpb24gSlNVbnJlc29sdmVkUmVmZXJlbmNlXG4gICAgaWYgKGVsZW1lbnQuY2hpbGRyZW4pIHsgLy8gSUVcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGZvckVhY2goZWxlbWVudC5jaGlsZHJlbiwgZnVuY3Rpb24oY2hpbGQpIHsgY2xlYW5VcEVsZW1lbnQoY2hpbGQpIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7UGFyZW50Tm9kZX0gZnJhZ21lbnRcbiAgICogQHBhcmFtIHtIdG14U2V0dGxlSW5mb30gc2V0dGxlSW5mb1xuICAgKi9cbiAgZnVuY3Rpb24gc3dhcE91dGVySFRNTCh0YXJnZXQsIGZyYWdtZW50LCBzZXR0bGVJbmZvKSB7XG4gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgdGFyZ2V0LnRhZ05hbWUgPT09ICdCT0RZJykgeyAvLyBzcGVjaWFsIGNhc2UgdGhlIGJvZHkgdG8gaW5uZXJIVE1MIGJlY2F1c2UgRG9jdW1lbnRGcmFnbWVudHMgY2FuJ3QgY29udGFpbiBhIGJvZHkgZWx0IHVuZm9ydHVuYXRlbHlcbiAgICAgIHJldHVybiBzd2FwSW5uZXJIVE1MKHRhcmdldCwgZnJhZ21lbnQsIHNldHRsZUluZm8pXG4gICAgfVxuICAgIC8qKiBAdHlwZSB7Tm9kZX0gKi9cbiAgICBsZXQgbmV3RWx0XG4gICAgY29uc3QgZWx0QmVmb3JlTmV3Q29udGVudCA9IHRhcmdldC5wcmV2aW91c1NpYmxpbmdcbiAgICBpbnNlcnROb2Rlc0JlZm9yZShwYXJlbnRFbHQodGFyZ2V0KSwgdGFyZ2V0LCBmcmFnbWVudCwgc2V0dGxlSW5mbylcbiAgICBpZiAoZWx0QmVmb3JlTmV3Q29udGVudCA9PSBudWxsKSB7XG4gICAgICBuZXdFbHQgPSBwYXJlbnRFbHQodGFyZ2V0KS5maXJzdENoaWxkXG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0VsdCA9IGVsdEJlZm9yZU5ld0NvbnRlbnQubmV4dFNpYmxpbmdcbiAgICB9XG4gICAgc2V0dGxlSW5mby5lbHRzID0gc2V0dGxlSW5mby5lbHRzLmZpbHRlcihmdW5jdGlvbihlKSB7IHJldHVybiBlICE9PSB0YXJnZXQgfSlcbiAgICAvLyBzY2FuIHRocm91Z2ggYWxsIG5ld2x5IGFkZGVkIGNvbnRlbnQgYW5kIGFkZCBhbGwgZWxlbWVudHMgdG8gdGhlIHNldHRsZSBpbmZvIHNvIHdlIHRyaWdnZXJcbiAgICAvLyBldmVudHMgcHJvcGVybHkgb24gdGhlbVxuICAgIHdoaWxlIChuZXdFbHQgJiYgbmV3RWx0ICE9PSB0YXJnZXQpIHtcbiAgICAgIGlmIChuZXdFbHQgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICAgIHNldHRsZUluZm8uZWx0cy5wdXNoKG5ld0VsdClcbiAgICAgIH1cbiAgICAgIG5ld0VsdCA9IG5ld0VsdC5uZXh0U2libGluZ1xuICAgIH1cbiAgICBjbGVhblVwRWxlbWVudCh0YXJnZXQpXG4gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICAgIHRhcmdldC5yZW1vdmUoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0YXJnZXQpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7UGFyZW50Tm9kZX0gZnJhZ21lbnRcbiAgICogQHBhcmFtIHtIdG14U2V0dGxlSW5mb30gc2V0dGxlSW5mb1xuICAgKi9cbiAgZnVuY3Rpb24gc3dhcEFmdGVyQmVnaW4odGFyZ2V0LCBmcmFnbWVudCwgc2V0dGxlSW5mbykge1xuICAgIHJldHVybiBpbnNlcnROb2Rlc0JlZm9yZSh0YXJnZXQsIHRhcmdldC5maXJzdENoaWxkLCBmcmFnbWVudCwgc2V0dGxlSW5mbylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHRhcmdldFxuICAgKiBAcGFyYW0ge1BhcmVudE5vZGV9IGZyYWdtZW50XG4gICAqIEBwYXJhbSB7SHRteFNldHRsZUluZm99IHNldHRsZUluZm9cbiAgICovXG4gIGZ1bmN0aW9uIHN3YXBCZWZvcmVCZWdpbih0YXJnZXQsIGZyYWdtZW50LCBzZXR0bGVJbmZvKSB7XG4gICAgcmV0dXJuIGluc2VydE5vZGVzQmVmb3JlKHBhcmVudEVsdCh0YXJnZXQpLCB0YXJnZXQsIGZyYWdtZW50LCBzZXR0bGVJbmZvKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm9kZX0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7UGFyZW50Tm9kZX0gZnJhZ21lbnRcbiAgICogQHBhcmFtIHtIdG14U2V0dGxlSW5mb30gc2V0dGxlSW5mb1xuICAgKi9cbiAgZnVuY3Rpb24gc3dhcEJlZm9yZUVuZCh0YXJnZXQsIGZyYWdtZW50LCBzZXR0bGVJbmZvKSB7XG4gICAgcmV0dXJuIGluc2VydE5vZGVzQmVmb3JlKHRhcmdldCwgbnVsbCwgZnJhZ21lbnQsIHNldHRsZUluZm8pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSB0YXJnZXRcbiAgICogQHBhcmFtIHtQYXJlbnROb2RlfSBmcmFnbWVudFxuICAgKiBAcGFyYW0ge0h0bXhTZXR0bGVJbmZvfSBzZXR0bGVJbmZvXG4gICAqL1xuICBmdW5jdGlvbiBzd2FwQWZ0ZXJFbmQodGFyZ2V0LCBmcmFnbWVudCwgc2V0dGxlSW5mbykge1xuICAgIHJldHVybiBpbnNlcnROb2Rlc0JlZm9yZShwYXJlbnRFbHQodGFyZ2V0KSwgdGFyZ2V0Lm5leHRTaWJsaW5nLCBmcmFnbWVudCwgc2V0dGxlSW5mbylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHRhcmdldFxuICAgKi9cbiAgZnVuY3Rpb24gc3dhcERlbGV0ZSh0YXJnZXQpIHtcbiAgICBjbGVhblVwRWxlbWVudCh0YXJnZXQpXG4gICAgcmV0dXJuIHBhcmVudEVsdCh0YXJnZXQpLnJlbW92ZUNoaWxkKHRhcmdldClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IHRhcmdldFxuICAgKiBAcGFyYW0ge1BhcmVudE5vZGV9IGZyYWdtZW50XG4gICAqIEBwYXJhbSB7SHRteFNldHRsZUluZm99IHNldHRsZUluZm9cbiAgICovXG4gIGZ1bmN0aW9uIHN3YXBJbm5lckhUTUwodGFyZ2V0LCBmcmFnbWVudCwgc2V0dGxlSW5mbykge1xuICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSB0YXJnZXQuZmlyc3RDaGlsZFxuICAgIGluc2VydE5vZGVzQmVmb3JlKHRhcmdldCwgZmlyc3RDaGlsZCwgZnJhZ21lbnQsIHNldHRsZUluZm8pXG4gICAgaWYgKGZpcnN0Q2hpbGQpIHtcbiAgICAgIHdoaWxlIChmaXJzdENoaWxkLm5leHRTaWJsaW5nKSB7XG4gICAgICAgIGNsZWFuVXBFbGVtZW50KGZpcnN0Q2hpbGQubmV4dFNpYmxpbmcpXG4gICAgICAgIHRhcmdldC5yZW1vdmVDaGlsZChmaXJzdENoaWxkLm5leHRTaWJsaW5nKVxuICAgICAgfVxuICAgICAgY2xlYW5VcEVsZW1lbnQoZmlyc3RDaGlsZClcbiAgICAgIHRhcmdldC5yZW1vdmVDaGlsZChmaXJzdENoaWxkKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0h0bXhTd2FwU3R5bGV9IHN3YXBTdHlsZVxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcGFyYW0ge05vZGV9IHRhcmdldFxuICAgKiBAcGFyYW0ge1BhcmVudE5vZGV9IGZyYWdtZW50XG4gICAqIEBwYXJhbSB7SHRteFNldHRsZUluZm99IHNldHRsZUluZm9cbiAgICovXG4gIGZ1bmN0aW9uIHN3YXBXaXRoU3R5bGUoc3dhcFN0eWxlLCBlbHQsIHRhcmdldCwgZnJhZ21lbnQsIHNldHRsZUluZm8pIHtcbiAgICBzd2l0Y2ggKHN3YXBTdHlsZSkge1xuICAgICAgY2FzZSAnbm9uZSc6XG4gICAgICAgIHJldHVyblxuICAgICAgY2FzZSAnb3V0ZXJIVE1MJzpcbiAgICAgICAgc3dhcE91dGVySFRNTCh0YXJnZXQsIGZyYWdtZW50LCBzZXR0bGVJbmZvKVxuICAgICAgICByZXR1cm5cbiAgICAgIGNhc2UgJ2FmdGVyYmVnaW4nOlxuICAgICAgICBzd2FwQWZ0ZXJCZWdpbih0YXJnZXQsIGZyYWdtZW50LCBzZXR0bGVJbmZvKVxuICAgICAgICByZXR1cm5cbiAgICAgIGNhc2UgJ2JlZm9yZWJlZ2luJzpcbiAgICAgICAgc3dhcEJlZm9yZUJlZ2luKHRhcmdldCwgZnJhZ21lbnQsIHNldHRsZUluZm8pXG4gICAgICAgIHJldHVyblxuICAgICAgY2FzZSAnYmVmb3JlZW5kJzpcbiAgICAgICAgc3dhcEJlZm9yZUVuZCh0YXJnZXQsIGZyYWdtZW50LCBzZXR0bGVJbmZvKVxuICAgICAgICByZXR1cm5cbiAgICAgIGNhc2UgJ2FmdGVyZW5kJzpcbiAgICAgICAgc3dhcEFmdGVyRW5kKHRhcmdldCwgZnJhZ21lbnQsIHNldHRsZUluZm8pXG4gICAgICAgIHJldHVyblxuICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgc3dhcERlbGV0ZSh0YXJnZXQpXG4gICAgICAgIHJldHVyblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdmFyIGV4dGVuc2lvbnMgPSBnZXRFeHRlbnNpb25zKGVsdClcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleHRlbnNpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZXh0ID0gZXh0ZW5zaW9uc1tpXVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBuZXdFbGVtZW50cyA9IGV4dC5oYW5kbGVTd2FwKHN3YXBTdHlsZSwgdGFyZ2V0LCBmcmFnbWVudCwgc2V0dGxlSW5mbylcbiAgICAgICAgICAgIGlmIChuZXdFbGVtZW50cykge1xuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShuZXdFbGVtZW50cykpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBoYW5kbGVTd2FwIHJldHVybnMgYW4gYXJyYXkgKGxpa2UpIG9mIGVsZW1lbnRzLCB3ZSBoYW5kbGUgdGhlbVxuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbmV3RWxlbWVudHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gbmV3RWxlbWVudHNbal1cbiAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUgJiYgY2hpbGQubm9kZVR5cGUgIT09IE5vZGUuQ09NTUVOVF9OT0RFKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldHRsZUluZm8udGFza3MucHVzaChtYWtlQWpheExvYWRUYXNrKGNoaWxkKSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9nRXJyb3IoZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN3YXBTdHlsZSA9PT0gJ2lubmVySFRNTCcpIHtcbiAgICAgICAgICBzd2FwSW5uZXJIVE1MKHRhcmdldCwgZnJhZ21lbnQsIHNldHRsZUluZm8pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3dhcFdpdGhTdHlsZShodG14LmNvbmZpZy5kZWZhdWx0U3dhcFN0eWxlLCBlbHQsIHRhcmdldCwgZnJhZ21lbnQsIHNldHRsZUluZm8pXG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtEb2N1bWVudEZyYWdtZW50fSBmcmFnbWVudFxuICAgKiBAcGFyYW0ge0h0bXhTZXR0bGVJbmZvfSBzZXR0bGVJbmZvXG4gICAqL1xuICBmdW5jdGlvbiBmaW5kQW5kU3dhcE9vYkVsZW1lbnRzKGZyYWdtZW50LCBzZXR0bGVJbmZvKSB7XG4gICAgdmFyIG9vYkVsdHMgPSBmaW5kQWxsKGZyYWdtZW50LCAnW2h4LXN3YXAtb29iXSwgW2RhdGEtaHgtc3dhcC1vb2JdJylcbiAgICBmb3JFYWNoKG9vYkVsdHMsIGZ1bmN0aW9uKG9vYkVsZW1lbnQpIHtcbiAgICAgIGlmIChodG14LmNvbmZpZy5hbGxvd05lc3RlZE9vYlN3YXBzIHx8IG9vYkVsZW1lbnQucGFyZW50RWxlbWVudCA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCBvb2JWYWx1ZSA9IGdldEF0dHJpYnV0ZVZhbHVlKG9vYkVsZW1lbnQsICdoeC1zd2FwLW9vYicpXG4gICAgICAgIGlmIChvb2JWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgb29iU3dhcChvb2JWYWx1ZSwgb29iRWxlbWVudCwgc2V0dGxlSW5mbylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb29iRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2h4LXN3YXAtb29iJylcbiAgICAgICAgb29iRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtaHgtc3dhcC1vb2InKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIG9vYkVsdHMubGVuZ3RoID4gMFxuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudHMgY29tcGxldGUgc3dhcHBpbmcgcGlwZWxpbmUsIGluY2x1ZGluZzogZm9jdXMgYW5kIHNlbGVjdGlvbiBwcmVzZXJ2YXRpb24sXG4gICAqIHRpdGxlIHVwZGF0ZXMsIHNjcm9sbCwgT09CIHN3YXBwaW5nLCBub3JtYWwgc3dhcHBpbmcgYW5kIHNldHRsaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfEVsZW1lbnR9IHRhcmdldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudFxuICAgKiBAcGFyYW0ge0h0bXhTd2FwU3BlY2lmaWNhdGlvbn0gc3dhcFNwZWNcbiAgICogQHBhcmFtIHtTd2FwT3B0aW9uc30gW3N3YXBPcHRpb25zXVxuICAgKi9cbiAgZnVuY3Rpb24gc3dhcCh0YXJnZXQsIGNvbnRlbnQsIHN3YXBTcGVjLCBzd2FwT3B0aW9ucykge1xuICAgIGlmICghc3dhcE9wdGlvbnMpIHtcbiAgICAgIHN3YXBPcHRpb25zID0ge31cbiAgICB9XG5cbiAgICB0YXJnZXQgPSByZXNvbHZlVGFyZ2V0KHRhcmdldClcblxuICAgIC8vIHByZXNlcnZlIGZvY3VzIGFuZCBzZWxlY3Rpb25cbiAgICBjb25zdCBhY3RpdmVFbHQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50XG4gICAgbGV0IHNlbGVjdGlvbkluZm8gPSB7fVxuICAgIHRyeSB7XG4gICAgICBzZWxlY3Rpb25JbmZvID0ge1xuICAgICAgICBlbHQ6IGFjdGl2ZUVsdCxcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBzdGFydDogYWN0aXZlRWx0ID8gYWN0aXZlRWx0LnNlbGVjdGlvblN0YXJ0IDogbnVsbCxcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBlbmQ6IGFjdGl2ZUVsdCA/IGFjdGl2ZUVsdC5zZWxlY3Rpb25FbmQgOiBudWxsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gc2FmYXJpIGlzc3VlIC0gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvcGxheXdyaWdodC9pc3N1ZXMvNTg5NFxuICAgIH1cbiAgICBjb25zdCBzZXR0bGVJbmZvID0gbWFrZVNldHRsZUluZm8odGFyZ2V0KVxuXG4gICAgLy8gRm9yIHRleHQgY29udGVudCBzd2FwcywgZG9uJ3QgcGFyc2UgdGhlIHJlc3BvbnNlIGFzIEhUTUwsIGp1c3QgaW5zZXJ0IGl0XG4gICAgaWYgKHN3YXBTcGVjLnN3YXBTdHlsZSA9PT0gJ3RleHRDb250ZW50Jykge1xuICAgICAgdGFyZ2V0LnRleHRDb250ZW50ID0gY29udGVudFxuICAgIC8vIE90aGVyd2lzZSwgbWFrZSB0aGUgZnJhZ21lbnQgYW5kIHByb2Nlc3MgaXRcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGZyYWdtZW50ID0gbWFrZUZyYWdtZW50KGNvbnRlbnQpXG5cbiAgICAgIHNldHRsZUluZm8udGl0bGUgPSBmcmFnbWVudC50aXRsZVxuXG4gICAgICAvLyBzZWxlY3Qtb29iIHN3YXBzXG4gICAgICBpZiAoc3dhcE9wdGlvbnMuc2VsZWN0T09CKSB7XG4gICAgICAgIGNvbnN0IG9vYlNlbGVjdFZhbHVlcyA9IHN3YXBPcHRpb25zLnNlbGVjdE9PQi5zcGxpdCgnLCcpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb29iU2VsZWN0VmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qgb29iU2VsZWN0VmFsdWUgPSBvb2JTZWxlY3RWYWx1ZXNbaV0uc3BsaXQoJzonLCAyKVxuICAgICAgICAgIGxldCBpZCA9IG9vYlNlbGVjdFZhbHVlWzBdLnRyaW0oKVxuICAgICAgICAgIGlmIChpZC5pbmRleE9mKCcjJykgPT09IDApIHtcbiAgICAgICAgICAgIGlkID0gaWQuc3Vic3RyaW5nKDEpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG9vYlZhbHVlID0gb29iU2VsZWN0VmFsdWVbMV0gfHwgJ3RydWUnXG4gICAgICAgICAgY29uc3Qgb29iRWxlbWVudCA9IGZyYWdtZW50LnF1ZXJ5U2VsZWN0b3IoJyMnICsgaWQpXG4gICAgICAgICAgaWYgKG9vYkVsZW1lbnQpIHtcbiAgICAgICAgICAgIG9vYlN3YXAob29iVmFsdWUsIG9vYkVsZW1lbnQsIHNldHRsZUluZm8pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBvb2Igc3dhcHNcbiAgICAgIGZpbmRBbmRTd2FwT29iRWxlbWVudHMoZnJhZ21lbnQsIHNldHRsZUluZm8pXG4gICAgICBmb3JFYWNoKGZpbmRBbGwoZnJhZ21lbnQsICd0ZW1wbGF0ZScpLCAvKiogQHBhcmFtIHtIVE1MVGVtcGxhdGVFbGVtZW50fSB0ZW1wbGF0ZSAqL2Z1bmN0aW9uKHRlbXBsYXRlKSB7XG4gICAgICAgIGlmIChmaW5kQW5kU3dhcE9vYkVsZW1lbnRzKHRlbXBsYXRlLmNvbnRlbnQsIHNldHRsZUluZm8pKSB7XG4gICAgICAgICAgLy8gQXZvaWQgcG9sbHV0aW5nIHRoZSBET00gd2l0aCBlbXB0eSB0ZW1wbGF0ZXMgdGhhdCB3ZXJlIG9ubHkgdXNlZCB0byBlbmNhcHN1bGF0ZSBvb2Igc3dhcFxuICAgICAgICAgIHRlbXBsYXRlLnJlbW92ZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIC8vIG5vcm1hbCBzd2FwXG4gICAgICBpZiAoc3dhcE9wdGlvbnMuc2VsZWN0KSB7XG4gICAgICAgIGNvbnN0IG5ld0ZyYWdtZW50ID0gZ2V0RG9jdW1lbnQoKS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KClcbiAgICAgICAgZm9yRWFjaChmcmFnbWVudC5xdWVyeVNlbGVjdG9yQWxsKHN3YXBPcHRpb25zLnNlbGVjdCksIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgICAgICBuZXdGcmFnbWVudC5hcHBlbmRDaGlsZChub2RlKVxuICAgICAgICB9KVxuICAgICAgICBmcmFnbWVudCA9IG5ld0ZyYWdtZW50XG4gICAgICB9XG4gICAgICBoYW5kbGVQcmVzZXJ2ZWRFbGVtZW50cyhmcmFnbWVudClcbiAgICAgIHN3YXBXaXRoU3R5bGUoc3dhcFNwZWMuc3dhcFN0eWxlLCBzd2FwT3B0aW9ucy5jb250ZXh0RWxlbWVudCwgdGFyZ2V0LCBmcmFnbWVudCwgc2V0dGxlSW5mbylcbiAgICB9XG5cbiAgICAvLyBhcHBseSBzYXZlZCBmb2N1cyBhbmQgc2VsZWN0aW9uIGluZm9ybWF0aW9uIHRvIHN3YXBwZWQgY29udGVudFxuICAgIGlmIChzZWxlY3Rpb25JbmZvLmVsdCAmJlxuICAgICAgIWJvZHlDb250YWlucyhzZWxlY3Rpb25JbmZvLmVsdCkgJiZcbiAgICAgIGdldFJhd0F0dHJpYnV0ZShzZWxlY3Rpb25JbmZvLmVsdCwgJ2lkJykpIHtcbiAgICAgIGNvbnN0IG5ld0FjdGl2ZUVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGdldFJhd0F0dHJpYnV0ZShzZWxlY3Rpb25JbmZvLmVsdCwgJ2lkJykpXG4gICAgICBjb25zdCBmb2N1c09wdGlvbnMgPSB7IHByZXZlbnRTY3JvbGw6IHN3YXBTcGVjLmZvY3VzU2Nyb2xsICE9PSB1bmRlZmluZWQgPyAhc3dhcFNwZWMuZm9jdXNTY3JvbGwgOiAhaHRteC5jb25maWcuZGVmYXVsdEZvY3VzU2Nyb2xsIH1cbiAgICAgIGlmIChuZXdBY3RpdmVFbHQpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAoc2VsZWN0aW9uSW5mby5zdGFydCAmJiBuZXdBY3RpdmVFbHQuc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgbmV3QWN0aXZlRWx0LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvbkluZm8uc3RhcnQsIHNlbGVjdGlvbkluZm8uZW5kKVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIHRoZSBzZXRTZWxlY3Rpb25SYW5nZSBtZXRob2QgaXMgcHJlc2VudCBvbiBmaWVsZHMgdGhhdCBkb24ndCBzdXBwb3J0IGl0LCBzbyBqdXN0IGxldCB0aGlzIGZhaWxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV3QWN0aXZlRWx0LmZvY3VzKGZvY3VzT3B0aW9ucylcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0YXJnZXQuY2xhc3NMaXN0LnJlbW92ZShodG14LmNvbmZpZy5zd2FwcGluZ0NsYXNzKVxuICAgIGZvckVhY2goc2V0dGxlSW5mby5lbHRzLCBmdW5jdGlvbihlbHQpIHtcbiAgICAgIGlmIChlbHQuY2xhc3NMaXN0KSB7XG4gICAgICAgIGVsdC5jbGFzc0xpc3QuYWRkKGh0bXguY29uZmlnLnNldHRsaW5nQ2xhc3MpXG4gICAgICB9XG4gICAgICB0cmlnZ2VyRXZlbnQoZWx0LCAnaHRteDphZnRlclN3YXAnLCBzd2FwT3B0aW9ucy5ldmVudEluZm8pXG4gICAgfSlcbiAgICBpZiAoc3dhcE9wdGlvbnMuYWZ0ZXJTd2FwQ2FsbGJhY2spIHtcbiAgICAgIHN3YXBPcHRpb25zLmFmdGVyU3dhcENhbGxiYWNrKClcbiAgICB9XG5cbiAgICAvLyBtZXJnZSBpbiBuZXcgdGl0bGUgYWZ0ZXIgc3dhcCBidXQgYmVmb3JlIHNldHRsZVxuICAgIGlmICghc3dhcFNwZWMuaWdub3JlVGl0bGUpIHtcbiAgICAgIGhhbmRsZVRpdGxlKHNldHRsZUluZm8udGl0bGUpXG4gICAgfVxuXG4gICAgLy8gc2V0dGxlXG4gICAgY29uc3QgZG9TZXR0bGUgPSBmdW5jdGlvbigpIHtcbiAgICAgIGZvckVhY2goc2V0dGxlSW5mby50YXNrcywgZnVuY3Rpb24odGFzaykge1xuICAgICAgICB0YXNrLmNhbGwoKVxuICAgICAgfSlcbiAgICAgIGZvckVhY2goc2V0dGxlSW5mby5lbHRzLCBmdW5jdGlvbihlbHQpIHtcbiAgICAgICAgaWYgKGVsdC5jbGFzc0xpc3QpIHtcbiAgICAgICAgICBlbHQuY2xhc3NMaXN0LnJlbW92ZShodG14LmNvbmZpZy5zZXR0bGluZ0NsYXNzKVxuICAgICAgICB9XG4gICAgICAgIHRyaWdnZXJFdmVudChlbHQsICdodG14OmFmdGVyU2V0dGxlJywgc3dhcE9wdGlvbnMuZXZlbnRJbmZvKVxuICAgICAgfSlcblxuICAgICAgaWYgKHN3YXBPcHRpb25zLmFuY2hvcikge1xuICAgICAgICBjb25zdCBhbmNob3JUYXJnZXQgPSBhc0VsZW1lbnQocmVzb2x2ZVRhcmdldCgnIycgKyBzd2FwT3B0aW9ucy5hbmNob3IpKVxuICAgICAgICBpZiAoYW5jaG9yVGFyZ2V0KSB7XG4gICAgICAgICAgYW5jaG9yVGFyZ2V0LnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdzdGFydCcsIGJlaGF2aW9yOiAnYXV0bycgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGVTY3JvbGxTdGF0ZShzZXR0bGVJbmZvLmVsdHMsIHN3YXBTcGVjKVxuICAgICAgaWYgKHN3YXBPcHRpb25zLmFmdGVyU2V0dGxlQ2FsbGJhY2spIHtcbiAgICAgICAgc3dhcE9wdGlvbnMuYWZ0ZXJTZXR0bGVDYWxsYmFjaygpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN3YXBTcGVjLnNldHRsZURlbGF5ID4gMCkge1xuICAgICAgZ2V0V2luZG93KCkuc2V0VGltZW91dChkb1NldHRsZSwgc3dhcFNwZWMuc2V0dGxlRGVsYXkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGRvU2V0dGxlKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtYTUxIdHRwUmVxdWVzdH0geGhyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH0gZWx0XG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVUcmlnZ2VySGVhZGVyKHhociwgaGVhZGVyLCBlbHQpIHtcbiAgICBjb25zdCB0cmlnZ2VyQm9keSA9IHhoci5nZXRSZXNwb25zZUhlYWRlcihoZWFkZXIpXG4gICAgaWYgKHRyaWdnZXJCb2R5LmluZGV4T2YoJ3snKSA9PT0gMCkge1xuICAgICAgY29uc3QgdHJpZ2dlcnMgPSBwYXJzZUpTT04odHJpZ2dlckJvZHkpXG4gICAgICBmb3IgKGNvbnN0IGV2ZW50TmFtZSBpbiB0cmlnZ2Vycykge1xuICAgICAgICBpZiAodHJpZ2dlcnMuaGFzT3duUHJvcGVydHkoZXZlbnROYW1lKSkge1xuICAgICAgICAgIGxldCBkZXRhaWwgPSB0cmlnZ2Vyc1tldmVudE5hbWVdXG4gICAgICAgICAgaWYgKGlzUmF3T2JqZWN0KGRldGFpbCkpIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIGVsdCA9IGRldGFpbC50YXJnZXQgIT09IHVuZGVmaW5lZCA/IGRldGFpbC50YXJnZXQgOiBlbHRcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGV0YWlsID0geyB2YWx1ZTogZGV0YWlsIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdHJpZ2dlckV2ZW50KGVsdCwgZXZlbnROYW1lLCBkZXRhaWwpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXZlbnROYW1lcyA9IHRyaWdnZXJCb2R5LnNwbGl0KCcsJylcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXZlbnROYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0cmlnZ2VyRXZlbnQoZWx0LCBldmVudE5hbWVzW2ldLnRyaW0oKSwgW10pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgV0hJVEVTUEFDRSA9IC9cXHMvXG4gIGNvbnN0IFdISVRFU1BBQ0VfT1JfQ09NTUEgPSAvW1xccyxdL1xuICBjb25zdCBTWU1CT0xfU1RBUlQgPSAvW18kYS16QS1aXS9cbiAgY29uc3QgU1lNQk9MX0NPTlQgPSAvW18kYS16QS1aMC05XS9cbiAgY29uc3QgU1RSSU5HSVNIX1NUQVJUID0gWydcIicsIFwiJ1wiLCAnLyddXG4gIGNvbnN0IE5PVF9XSElURVNQQUNFID0gL1teXFxzXS9cbiAgY29uc3QgQ09NQklORURfU0VMRUNUT1JfU1RBUlQgPSAvW3soXS9cbiAgY29uc3QgQ09NQklORURfU0VMRUNUT1JfRU5EID0gL1t9KV0vXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxuICAgKi9cbiAgZnVuY3Rpb24gdG9rZW5pemVTdHJpbmcoc3RyKSB7XG4gICAgLyoqIEB0eXBlIHN0cmluZ1tdICovXG4gICAgY29uc3QgdG9rZW5zID0gW11cbiAgICBsZXQgcG9zaXRpb24gPSAwXG4gICAgd2hpbGUgKHBvc2l0aW9uIDwgc3RyLmxlbmd0aCkge1xuICAgICAgaWYgKFNZTUJPTF9TVEFSVC5leGVjKHN0ci5jaGFyQXQocG9zaXRpb24pKSkge1xuICAgICAgICB2YXIgc3RhcnRQb3NpdGlvbiA9IHBvc2l0aW9uXG4gICAgICAgIHdoaWxlIChTWU1CT0xfQ09OVC5leGVjKHN0ci5jaGFyQXQocG9zaXRpb24gKyAxKSkpIHtcbiAgICAgICAgICBwb3NpdGlvbisrXG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5zLnB1c2goc3RyLnN1YnN0cihzdGFydFBvc2l0aW9uLCBwb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24gKyAxKSlcbiAgICAgIH0gZWxzZSBpZiAoU1RSSU5HSVNIX1NUQVJULmluZGV4T2Yoc3RyLmNoYXJBdChwb3NpdGlvbikpICE9PSAtMSkge1xuICAgICAgICBjb25zdCBzdGFydENoYXIgPSBzdHIuY2hhckF0KHBvc2l0aW9uKVxuICAgICAgICB2YXIgc3RhcnRQb3NpdGlvbiA9IHBvc2l0aW9uXG4gICAgICAgIHBvc2l0aW9uKytcbiAgICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgc3RyLmxlbmd0aCAmJiBzdHIuY2hhckF0KHBvc2l0aW9uKSAhPT0gc3RhcnRDaGFyKSB7XG4gICAgICAgICAgaWYgKHN0ci5jaGFyQXQocG9zaXRpb24pID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uKytcbiAgICAgICAgICB9XG4gICAgICAgICAgcG9zaXRpb24rK1xuICAgICAgICB9XG4gICAgICAgIHRva2Vucy5wdXNoKHN0ci5zdWJzdHIoc3RhcnRQb3NpdGlvbiwgcG9zaXRpb24gLSBzdGFydFBvc2l0aW9uICsgMSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzeW1ib2wgPSBzdHIuY2hhckF0KHBvc2l0aW9uKVxuICAgICAgICB0b2tlbnMucHVzaChzeW1ib2wpXG4gICAgICB9XG4gICAgICBwb3NpdGlvbisrXG4gICAgfVxuICAgIHJldHVybiB0b2tlbnNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cbiAgICogQHBhcmFtIHtzdHJpbmd8bnVsbH0gbGFzdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1OYW1lXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gaXNQb3NzaWJsZVJlbGF0aXZlUmVmZXJlbmNlKHRva2VuLCBsYXN0LCBwYXJhbU5hbWUpIHtcbiAgICByZXR1cm4gU1lNQk9MX1NUQVJULmV4ZWModG9rZW4uY2hhckF0KDApKSAmJlxuICAgICAgdG9rZW4gIT09ICd0cnVlJyAmJlxuICAgICAgdG9rZW4gIT09ICdmYWxzZScgJiZcbiAgICAgIHRva2VuICE9PSAndGhpcycgJiZcbiAgICAgIHRva2VuICE9PSBwYXJhbU5hbWUgJiZcbiAgICAgIGxhc3QgIT09ICcuJ1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR8c3RyaW5nfSBlbHRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gdG9rZW5zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbU5hbWVcbiAgICogQHJldHVybnMge0NvbmRpdGlvbmFsRnVuY3Rpb258bnVsbH1cbiAgICovXG4gIGZ1bmN0aW9uIG1heWJlR2VuZXJhdGVDb25kaXRpb25hbChlbHQsIHRva2VucywgcGFyYW1OYW1lKSB7XG4gICAgaWYgKHRva2Vuc1swXSA9PT0gJ1snKSB7XG4gICAgICB0b2tlbnMuc2hpZnQoKVxuICAgICAgbGV0IGJyYWNrZXRDb3VudCA9IDFcbiAgICAgIGxldCBjb25kaXRpb25hbFNvdXJjZSA9ICcgcmV0dXJuIChmdW5jdGlvbignICsgcGFyYW1OYW1lICsgJyl7IHJldHVybiAoJ1xuICAgICAgbGV0IGxhc3QgPSBudWxsXG4gICAgICB3aGlsZSAodG9rZW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbMF1cbiAgICAgICAgLy8gQHRzLWlnbm9yZSBGb3Igc29tZSByZWFzb24gdHNjIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgc2hpZnQgY2FsbCwgYW5kIHRoaW5rcyB3ZSdyZSBjb21wYXJpbmcgdGhlIHNhbWUgdmFsdWUgaGVyZSwgaS5lLiAnWycgdnMgJ10nXG4gICAgICAgIGlmICh0b2tlbiA9PT0gJ10nKSB7XG4gICAgICAgICAgYnJhY2tldENvdW50LS1cbiAgICAgICAgICBpZiAoYnJhY2tldENvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBpZiAobGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBjb25kaXRpb25hbFNvdXJjZSA9IGNvbmRpdGlvbmFsU291cmNlICsgJ3RydWUnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b2tlbnMuc2hpZnQoKVxuICAgICAgICAgICAgY29uZGl0aW9uYWxTb3VyY2UgKz0gJyl9KSdcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbkZ1bmN0aW9uID0gbWF5YmVFdmFsKGVsdCwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uKGNvbmRpdGlvbmFsU291cmNlKSgpXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZSB9KVxuICAgICAgICAgICAgICBjb25kaXRpb25GdW5jdGlvbi5zb3VyY2UgPSBjb25kaXRpb25hbFNvdXJjZVxuICAgICAgICAgICAgICByZXR1cm4gY29uZGl0aW9uRnVuY3Rpb25cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgdHJpZ2dlckVycm9yRXZlbnQoZ2V0RG9jdW1lbnQoKS5ib2R5LCAnaHRteDpzeW50YXg6ZXJyb3InLCB7IGVycm9yOiBlLCBzb3VyY2U6IGNvbmRpdGlvbmFsU291cmNlIH0pXG4gICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRva2VuID09PSAnWycpIHtcbiAgICAgICAgICBicmFja2V0Q291bnQrK1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Bvc3NpYmxlUmVsYXRpdmVSZWZlcmVuY2UodG9rZW4sIGxhc3QsIHBhcmFtTmFtZSkpIHtcbiAgICAgICAgICBjb25kaXRpb25hbFNvdXJjZSArPSAnKCgnICsgcGFyYW1OYW1lICsgJy4nICsgdG9rZW4gKyAnKSA/ICgnICsgcGFyYW1OYW1lICsgJy4nICsgdG9rZW4gKyAnKSA6ICh3aW5kb3cuJyArIHRva2VuICsgJykpJ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbmRpdGlvbmFsU291cmNlID0gY29uZGl0aW9uYWxTb3VyY2UgKyB0b2tlblxuICAgICAgICB9XG4gICAgICAgIGxhc3QgPSB0b2tlbnMuc2hpZnQoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSB0b2tlbnNcbiAgICogQHBhcmFtIHtSZWdFeHB9IG1hdGNoXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBmdW5jdGlvbiBjb25zdW1lVW50aWwodG9rZW5zLCBtYXRjaCkge1xuICAgIGxldCByZXN1bHQgPSAnJ1xuICAgIHdoaWxlICh0b2tlbnMubGVuZ3RoID4gMCAmJiAhbWF0Y2gudGVzdCh0b2tlbnNbMF0pKSB7XG4gICAgICByZXN1bHQgKz0gdG9rZW5zLnNoaWZ0KClcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHRva2Vuc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZnVuY3Rpb24gY29uc3VtZUNTU1NlbGVjdG9yKHRva2Vucykge1xuICAgIGxldCByZXN1bHRcbiAgICBpZiAodG9rZW5zLmxlbmd0aCA+IDAgJiYgQ09NQklORURfU0VMRUNUT1JfU1RBUlQudGVzdCh0b2tlbnNbMF0pKSB7XG4gICAgICB0b2tlbnMuc2hpZnQoKVxuICAgICAgcmVzdWx0ID0gY29uc3VtZVVudGlsKHRva2VucywgQ09NQklORURfU0VMRUNUT1JfRU5EKS50cmltKClcbiAgICAgIHRva2Vucy5zaGlmdCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IGNvbnN1bWVVbnRpbCh0b2tlbnMsIFdISVRFU1BBQ0VfT1JfQ09NTUEpXG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGNvbnN0IElOUFVUX1NFTEVDVE9SID0gJ2lucHV0LCB0ZXh0YXJlYSwgc2VsZWN0J1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwbGljaXRUcmlnZ2VyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBmb3IgdHJpZ2dlciBzcGVjc1xuICAgKiBAcmV0dXJucyB7SHRteFRyaWdnZXJTcGVjaWZpY2F0aW9uW119XG4gICAqL1xuICBmdW5jdGlvbiBwYXJzZUFuZENhY2hlVHJpZ2dlcihlbHQsIGV4cGxpY2l0VHJpZ2dlciwgY2FjaGUpIHtcbiAgICAvKiogQHR5cGUgSHRteFRyaWdnZXJTcGVjaWZpY2F0aW9uW10gKi9cbiAgICBjb25zdCB0cmlnZ2VyU3BlY3MgPSBbXVxuICAgIGNvbnN0IHRva2VucyA9IHRva2VuaXplU3RyaW5nKGV4cGxpY2l0VHJpZ2dlcilcbiAgICBkbyB7XG4gICAgICBjb25zdW1lVW50aWwodG9rZW5zLCBOT1RfV0hJVEVTUEFDRSlcbiAgICAgIGNvbnN0IGluaXRpYWxMZW5ndGggPSB0b2tlbnMubGVuZ3RoXG4gICAgICBjb25zdCB0cmlnZ2VyID0gY29uc3VtZVVudGlsKHRva2VucywgL1ssXFxbXFxzXS8pXG4gICAgICBpZiAodHJpZ2dlciAhPT0gJycpIHtcbiAgICAgICAgaWYgKHRyaWdnZXIgPT09ICdldmVyeScpIHtcbiAgICAgICAgICAvKiogQHR5cGUgSHRteFRyaWdnZXJTcGVjaWZpY2F0aW9uICovXG4gICAgICAgICAgY29uc3QgZXZlcnkgPSB7IHRyaWdnZXI6ICdldmVyeScgfVxuICAgICAgICAgIGNvbnN1bWVVbnRpbCh0b2tlbnMsIE5PVF9XSElURVNQQUNFKVxuICAgICAgICAgIGV2ZXJ5LnBvbGxJbnRlcnZhbCA9IHBhcnNlSW50ZXJ2YWwoY29uc3VtZVVudGlsKHRva2VucywgL1ssXFxbXFxzXS8pKVxuICAgICAgICAgIGNvbnN1bWVVbnRpbCh0b2tlbnMsIE5PVF9XSElURVNQQUNFKVxuICAgICAgICAgIHZhciBldmVudEZpbHRlciA9IG1heWJlR2VuZXJhdGVDb25kaXRpb25hbChlbHQsIHRva2VucywgJ2V2ZW50JylcbiAgICAgICAgICBpZiAoZXZlbnRGaWx0ZXIpIHtcbiAgICAgICAgICAgIGV2ZXJ5LmV2ZW50RmlsdGVyID0gZXZlbnRGaWx0ZXJcbiAgICAgICAgICB9XG4gICAgICAgICAgdHJpZ2dlclNwZWNzLnB1c2goZXZlcnkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLyoqIEB0eXBlIEh0bXhUcmlnZ2VyU3BlY2lmaWNhdGlvbiAqL1xuICAgICAgICAgIGNvbnN0IHRyaWdnZXJTcGVjID0geyB0cmlnZ2VyIH1cbiAgICAgICAgICB2YXIgZXZlbnRGaWx0ZXIgPSBtYXliZUdlbmVyYXRlQ29uZGl0aW9uYWwoZWx0LCB0b2tlbnMsICdldmVudCcpXG4gICAgICAgICAgaWYgKGV2ZW50RmlsdGVyKSB7XG4gICAgICAgICAgICB0cmlnZ2VyU3BlYy5ldmVudEZpbHRlciA9IGV2ZW50RmlsdGVyXG4gICAgICAgICAgfVxuICAgICAgICAgIHdoaWxlICh0b2tlbnMubGVuZ3RoID4gMCAmJiB0b2tlbnNbMF0gIT09ICcsJykge1xuICAgICAgICAgICAgY29uc3VtZVVudGlsKHRva2VucywgTk9UX1dISVRFU1BBQ0UpXG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRva2Vucy5zaGlmdCgpXG4gICAgICAgICAgICBpZiAodG9rZW4gPT09ICdjaGFuZ2VkJykge1xuICAgICAgICAgICAgICB0cmlnZ2VyU3BlYy5jaGFuZ2VkID0gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ29uY2UnKSB7XG4gICAgICAgICAgICAgIHRyaWdnZXJTcGVjLm9uY2UgPSB0cnVlXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuID09PSAnY29uc3VtZScpIHtcbiAgICAgICAgICAgICAgdHJpZ2dlclNwZWMuY29uc3VtZSA9IHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4gPT09ICdkZWxheScgJiYgdG9rZW5zWzBdID09PSAnOicpIHtcbiAgICAgICAgICAgICAgdG9rZW5zLnNoaWZ0KClcbiAgICAgICAgICAgICAgdHJpZ2dlclNwZWMuZGVsYXkgPSBwYXJzZUludGVydmFsKGNvbnN1bWVVbnRpbCh0b2tlbnMsIFdISVRFU1BBQ0VfT1JfQ09NTUEpKVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ2Zyb20nICYmIHRva2Vuc1swXSA9PT0gJzonKSB7XG4gICAgICAgICAgICAgIHRva2Vucy5zaGlmdCgpXG4gICAgICAgICAgICAgIGlmIChDT01CSU5FRF9TRUxFQ1RPUl9TVEFSVC50ZXN0KHRva2Vuc1swXSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZnJvbV9hcmcgPSBjb25zdW1lQ1NTU2VsZWN0b3IodG9rZW5zKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBmcm9tX2FyZyA9IGNvbnN1bWVVbnRpbCh0b2tlbnMsIFdISVRFU1BBQ0VfT1JfQ09NTUEpXG4gICAgICAgICAgICAgICAgaWYgKGZyb21fYXJnID09PSAnY2xvc2VzdCcgfHwgZnJvbV9hcmcgPT09ICdmaW5kJyB8fCBmcm9tX2FyZyA9PT0gJ25leHQnIHx8IGZyb21fYXJnID09PSAncHJldmlvdXMnKSB7XG4gICAgICAgICAgICAgICAgICB0b2tlbnMuc2hpZnQoKVxuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSBjb25zdW1lQ1NTU2VsZWN0b3IodG9rZW5zKVxuICAgICAgICAgICAgICAgICAgLy8gYG5leHRgIGFuZCBgcHJldmlvdXNgIGFsbG93IGEgc2VsZWN0b3ItbGVzcyBzeW50YXhcbiAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZyb21fYXJnICs9ICcgJyArIHNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRyaWdnZXJTcGVjLmZyb20gPSBmcm9tX2FyZ1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ3RhcmdldCcgJiYgdG9rZW5zWzBdID09PSAnOicpIHtcbiAgICAgICAgICAgICAgdG9rZW5zLnNoaWZ0KClcbiAgICAgICAgICAgICAgdHJpZ2dlclNwZWMudGFyZ2V0ID0gY29uc3VtZUNTU1NlbGVjdG9yKHRva2VucylcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4gPT09ICd0aHJvdHRsZScgJiYgdG9rZW5zWzBdID09PSAnOicpIHtcbiAgICAgICAgICAgICAgdG9rZW5zLnNoaWZ0KClcbiAgICAgICAgICAgICAgdHJpZ2dlclNwZWMudGhyb3R0bGUgPSBwYXJzZUludGVydmFsKGNvbnN1bWVVbnRpbCh0b2tlbnMsIFdISVRFU1BBQ0VfT1JfQ09NTUEpKVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0b2tlbiA9PT0gJ3F1ZXVlJyAmJiB0b2tlbnNbMF0gPT09ICc6Jykge1xuICAgICAgICAgICAgICB0b2tlbnMuc2hpZnQoKVxuICAgICAgICAgICAgICB0cmlnZ2VyU3BlYy5xdWV1ZSA9IGNvbnN1bWVVbnRpbCh0b2tlbnMsIFdISVRFU1BBQ0VfT1JfQ09NTUEpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuID09PSAncm9vdCcgJiYgdG9rZW5zWzBdID09PSAnOicpIHtcbiAgICAgICAgICAgICAgdG9rZW5zLnNoaWZ0KClcbiAgICAgICAgICAgICAgdHJpZ2dlclNwZWNbdG9rZW5dID0gY29uc3VtZUNTU1NlbGVjdG9yKHRva2VucylcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4gPT09ICd0aHJlc2hvbGQnICYmIHRva2Vuc1swXSA9PT0gJzonKSB7XG4gICAgICAgICAgICAgIHRva2Vucy5zaGlmdCgpXG4gICAgICAgICAgICAgIHRyaWdnZXJTcGVjW3Rva2VuXSA9IGNvbnN1bWVVbnRpbCh0b2tlbnMsIFdISVRFU1BBQ0VfT1JfQ09NTUEpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0cmlnZ2VyRXJyb3JFdmVudChlbHQsICdodG14OnN5bnRheDplcnJvcicsIHsgdG9rZW46IHRva2Vucy5zaGlmdCgpIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyaWdnZXJTcGVjcy5wdXNoKHRyaWdnZXJTcGVjKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gaW5pdGlhbExlbmd0aCkge1xuICAgICAgICB0cmlnZ2VyRXJyb3JFdmVudChlbHQsICdodG14OnN5bnRheDplcnJvcicsIHsgdG9rZW46IHRva2Vucy5zaGlmdCgpIH0pXG4gICAgICB9XG4gICAgICBjb25zdW1lVW50aWwodG9rZW5zLCBOT1RfV0hJVEVTUEFDRSlcbiAgICB9IHdoaWxlICh0b2tlbnNbMF0gPT09ICcsJyAmJiB0b2tlbnMuc2hpZnQoKSlcbiAgICBpZiAoY2FjaGUpIHtcbiAgICAgIGNhY2hlW2V4cGxpY2l0VHJpZ2dlcl0gPSB0cmlnZ2VyU3BlY3NcbiAgICB9XG4gICAgcmV0dXJuIHRyaWdnZXJTcGVjc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEByZXR1cm5zIHtIdG14VHJpZ2dlclNwZWNpZmljYXRpb25bXX1cbiAgICovXG4gIGZ1bmN0aW9uIGdldFRyaWdnZXJTcGVjcyhlbHQpIHtcbiAgICBjb25zdCBleHBsaWNpdFRyaWdnZXIgPSBnZXRBdHRyaWJ1dGVWYWx1ZShlbHQsICdoeC10cmlnZ2VyJylcbiAgICBsZXQgdHJpZ2dlclNwZWNzID0gW11cbiAgICBpZiAoZXhwbGljaXRUcmlnZ2VyKSB7XG4gICAgICBjb25zdCBjYWNoZSA9IGh0bXguY29uZmlnLnRyaWdnZXJTcGVjc0NhY2hlXG4gICAgICB0cmlnZ2VyU3BlY3MgPSAoY2FjaGUgJiYgY2FjaGVbZXhwbGljaXRUcmlnZ2VyXSkgfHwgcGFyc2VBbmRDYWNoZVRyaWdnZXIoZWx0LCBleHBsaWNpdFRyaWdnZXIsIGNhY2hlKVxuICAgIH1cblxuICAgIGlmICh0cmlnZ2VyU3BlY3MubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRyaWdnZXJTcGVjc1xuICAgIH0gZWxzZSBpZiAobWF0Y2hlcyhlbHQsICdmb3JtJykpIHtcbiAgICAgIHJldHVybiBbeyB0cmlnZ2VyOiAnc3VibWl0JyB9XVxuICAgIH0gZWxzZSBpZiAobWF0Y2hlcyhlbHQsICdpbnB1dFt0eXBlPVwiYnV0dG9uXCJdLCBpbnB1dFt0eXBlPVwic3VibWl0XCJdJykpIHtcbiAgICAgIHJldHVybiBbeyB0cmlnZ2VyOiAnY2xpY2snIH1dXG4gICAgfSBlbHNlIGlmIChtYXRjaGVzKGVsdCwgSU5QVVRfU0VMRUNUT1IpKSB7XG4gICAgICByZXR1cm4gW3sgdHJpZ2dlcjogJ2NoYW5nZScgfV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFt7IHRyaWdnZXI6ICdjbGljaycgfV1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAgICovXG4gIGZ1bmN0aW9uIGNhbmNlbFBvbGxpbmcoZWx0KSB7XG4gICAgZ2V0SW50ZXJuYWxEYXRhKGVsdCkuY2FuY2VsbGVkID0gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEBwYXJhbSB7VHJpZ2dlckhhbmRsZXJ9IGhhbmRsZXJcbiAgICogQHBhcmFtIHtIdG14VHJpZ2dlclNwZWNpZmljYXRpb259IHNwZWNcbiAgICovXG4gIGZ1bmN0aW9uIHByb2Nlc3NQb2xsaW5nKGVsdCwgaGFuZGxlciwgc3BlYykge1xuICAgIGNvbnN0IG5vZGVEYXRhID0gZ2V0SW50ZXJuYWxEYXRhKGVsdClcbiAgICBub2RlRGF0YS50aW1lb3V0ID0gZ2V0V2luZG93KCkuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIGlmIChib2R5Q29udGFpbnMoZWx0KSAmJiBub2RlRGF0YS5jYW5jZWxsZWQgIT09IHRydWUpIHtcbiAgICAgICAgaWYgKCFtYXliZUZpbHRlckV2ZW50KHNwZWMsIGVsdCwgbWFrZUV2ZW50KCdoeDpwb2xsOnRyaWdnZXInLCB7XG4gICAgICAgICAgdHJpZ2dlclNwZWM6IHNwZWMsXG4gICAgICAgICAgdGFyZ2V0OiBlbHRcbiAgICAgICAgfSkpKSB7XG4gICAgICAgICAgaGFuZGxlcihlbHQpXG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc1BvbGxpbmcoZWx0LCBoYW5kbGVyLCBzcGVjKVxuICAgICAgfVxuICAgIH0sIHNwZWMucG9sbEludGVydmFsKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SFRNTEFuY2hvckVsZW1lbnR9IGVsdFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIGlzTG9jYWxMaW5rKGVsdCkge1xuICAgIHJldHVybiBsb2NhdGlvbi5ob3N0bmFtZSA9PT0gZWx0Lmhvc3RuYW1lICYmXG4gICAgICBnZXRSYXdBdHRyaWJ1dGUoZWx0LCAnaHJlZicpICYmXG4gICAgICBnZXRSYXdBdHRyaWJ1dGUoZWx0LCAnaHJlZicpLmluZGV4T2YoJyMnKSAhPT0gMFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqL1xuICBmdW5jdGlvbiBlbHRJc0Rpc2FibGVkKGVsdCkge1xuICAgIHJldHVybiBjbG9zZXN0KGVsdCwgaHRteC5jb25maWcuZGlzYWJsZVNlbGVjdG9yKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEBwYXJhbSB7SHRteE5vZGVJbnRlcm5hbERhdGF9IG5vZGVEYXRhXG4gICAqIEBwYXJhbSB7SHRteFRyaWdnZXJTcGVjaWZpY2F0aW9uW119IHRyaWdnZXJTcGVjc1xuICAgKi9cbiAgZnVuY3Rpb24gYm9vc3RFbGVtZW50KGVsdCwgbm9kZURhdGEsIHRyaWdnZXJTcGVjcykge1xuICAgIGlmICgoZWx0IGluc3RhbmNlb2YgSFRNTEFuY2hvckVsZW1lbnQgJiYgaXNMb2NhbExpbmsoZWx0KSAmJiAoZWx0LnRhcmdldCA9PT0gJycgfHwgZWx0LnRhcmdldCA9PT0gJ19zZWxmJykpIHx8IChlbHQudGFnTmFtZSA9PT0gJ0ZPUk0nICYmIFN0cmluZyhnZXRSYXdBdHRyaWJ1dGUoZWx0LCAnbWV0aG9kJykpLnRvTG93ZXJDYXNlKCkgIT09ICdkaWFsb2cnKSkge1xuICAgICAgbm9kZURhdGEuYm9vc3RlZCA9IHRydWVcbiAgICAgIGxldCB2ZXJiLCBwYXRoXG4gICAgICBpZiAoZWx0LnRhZ05hbWUgPT09ICdBJykge1xuICAgICAgICB2ZXJiID0gJ2dldCdcbiAgICAgICAgcGF0aCA9IGdldFJhd0F0dHJpYnV0ZShlbHQsICdocmVmJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJhd0F0dHJpYnV0ZSA9IGdldFJhd0F0dHJpYnV0ZShlbHQsICdtZXRob2QnKVxuICAgICAgICB2ZXJiID0gcmF3QXR0cmlidXRlID8gcmF3QXR0cmlidXRlLnRvTG93ZXJDYXNlKCkgOiAnZ2V0J1xuICAgICAgICBpZiAodmVyYiA9PT0gJ2dldCcpIHtcbiAgICAgICAgfVxuICAgICAgICBwYXRoID0gZ2V0UmF3QXR0cmlidXRlKGVsdCwgJ2FjdGlvbicpXG4gICAgICB9XG4gICAgICB0cmlnZ2VyU3BlY3MuZm9yRWFjaChmdW5jdGlvbih0cmlnZ2VyU3BlYykge1xuICAgICAgICBhZGRFdmVudExpc3RlbmVyKGVsdCwgZnVuY3Rpb24obm9kZSwgZXZ0KSB7XG4gICAgICAgICAgY29uc3QgZWx0ID0gYXNFbGVtZW50KG5vZGUpXG4gICAgICAgICAgaWYgKGVsdElzRGlzYWJsZWQoZWx0KSkge1xuICAgICAgICAgICAgY2xlYW5VcEVsZW1lbnQoZWx0KVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGlzc3VlQWpheFJlcXVlc3QodmVyYiwgcGF0aCwgZWx0LCBldnQpXG4gICAgICAgIH0sIG5vZGVEYXRhLCB0cmlnZ2VyU3BlYywgdHJ1ZSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2dFxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiBzaG91bGRDYW5jZWwoZXZ0LCBub2RlKSB7XG4gICAgY29uc3QgZWx0ID0gYXNFbGVtZW50KG5vZGUpXG4gICAgaWYgKCFlbHQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBpZiAoZXZ0LnR5cGUgPT09ICdzdWJtaXQnIHx8IGV2dC50eXBlID09PSAnY2xpY2snKSB7XG4gICAgICBpZiAoZWx0LnRhZ05hbWUgPT09ICdGT1JNJykge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKG1hdGNoZXMoZWx0LCAnaW5wdXRbdHlwZT1cInN1Ym1pdFwiXSwgYnV0dG9uJykgJiYgY2xvc2VzdChlbHQsICdmb3JtJykgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChlbHQgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudCAmJiBlbHQuaHJlZiAmJlxuICAgICAgICAoZWx0LmdldEF0dHJpYnV0ZSgnaHJlZicpID09PSAnIycgfHwgZWx0LmdldEF0dHJpYnV0ZSgnaHJlZicpLmluZGV4T2YoJyMnKSAhPT0gMCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSBlbHRcbiAgICogQHBhcmFtIHtFdmVudHxNb3VzZUV2ZW50fEtleWJvYXJkRXZlbnR8VG91Y2hFdmVudH0gZXZ0XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gaWdub3JlQm9vc3RlZEFuY2hvckN0cmxDbGljayhlbHQsIGV2dCkge1xuICAgIHJldHVybiBnZXRJbnRlcm5hbERhdGEoZWx0KS5ib29zdGVkICYmIGVsdCBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50ICYmIGV2dC50eXBlID09PSAnY2xpY2snICYmXG4gICAgICAvLyBAdHMtaWdub3JlIHRoaXMgd2lsbCByZXNvbHZlIHRvIHVuZGVmaW5lZCBmb3IgZXZlbnRzIHRoYXQgZG9uJ3QgZGVmaW5lIHRob3NlIHByb3BlcnRpZXMsIHdoaWNoIGlzIGZpbmVcbiAgICAgIChldnQuY3RybEtleSB8fCBldnQubWV0YUtleSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0h0bXhUcmlnZ2VyU3BlY2lmaWNhdGlvbn0gdHJpZ2dlclNwZWNcbiAgICogQHBhcmFtIHtOb2RlfSBlbHRcbiAgICogQHBhcmFtIHtFdmVudH0gZXZ0XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gbWF5YmVGaWx0ZXJFdmVudCh0cmlnZ2VyU3BlYywgZWx0LCBldnQpIHtcbiAgICBjb25zdCBldmVudEZpbHRlciA9IHRyaWdnZXJTcGVjLmV2ZW50RmlsdGVyXG4gICAgaWYgKGV2ZW50RmlsdGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZXZlbnRGaWx0ZXIuY2FsbChlbHQsIGV2dCkgIT09IHRydWVcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc3Qgc291cmNlID0gZXZlbnRGaWx0ZXIuc291cmNlXG4gICAgICAgIHRyaWdnZXJFcnJvckV2ZW50KGdldERvY3VtZW50KCkuYm9keSwgJ2h0bXg6ZXZlbnRGaWx0ZXI6ZXJyb3InLCB7IGVycm9yOiBlLCBzb3VyY2UgfSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSBlbHRcbiAgICogQHBhcmFtIHtUcmlnZ2VySGFuZGxlcn0gaGFuZGxlclxuICAgKiBAcGFyYW0ge0h0bXhOb2RlSW50ZXJuYWxEYXRhfSBub2RlRGF0YVxuICAgKiBAcGFyYW0ge0h0bXhUcmlnZ2VyU3BlY2lmaWNhdGlvbn0gdHJpZ2dlclNwZWNcbiAgICogQHBhcmFtIHtib29sZWFufSBbZXhwbGljaXRDYW5jZWxdXG4gICAqL1xuICBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKGVsdCwgaGFuZGxlciwgbm9kZURhdGEsIHRyaWdnZXJTcGVjLCBleHBsaWNpdENhbmNlbCkge1xuICAgIGNvbnN0IGVsZW1lbnREYXRhID0gZ2V0SW50ZXJuYWxEYXRhKGVsdClcbiAgICAvKiogQHR5cGUgeyhOb2RlfFdpbmRvdylbXX0gKi9cbiAgICBsZXQgZWx0c1RvTGlzdGVuT25cbiAgICBpZiAodHJpZ2dlclNwZWMuZnJvbSkge1xuICAgICAgZWx0c1RvTGlzdGVuT24gPSBxdWVyeVNlbGVjdG9yQWxsRXh0KGVsdCwgdHJpZ2dlclNwZWMuZnJvbSlcbiAgICB9IGVsc2Uge1xuICAgICAgZWx0c1RvTGlzdGVuT24gPSBbZWx0XVxuICAgIH1cbiAgICAvLyBzdG9yZSB0aGUgaW5pdGlhbCB2YWx1ZXMgb2YgdGhlIGVsZW1lbnRzLCBzbyB3ZSBjYW4gdGVsbCBpZiB0aGV5IGNoYW5nZVxuICAgIGlmICh0cmlnZ2VyU3BlYy5jaGFuZ2VkKSB7XG4gICAgICBlbHRzVG9MaXN0ZW5Pbi5mb3JFYWNoKGZ1bmN0aW9uKGVsdFRvTGlzdGVuT24pIHtcbiAgICAgICAgY29uc3QgZWx0VG9MaXN0ZW5PbkRhdGEgPSBnZXRJbnRlcm5hbERhdGEoZWx0VG9MaXN0ZW5PbilcbiAgICAgICAgLy8gQHRzLWlnbm9yZSB2YWx1ZSB3aWxsIGJlIHVuZGVmaW5lZCBmb3Igbm9uLWlucHV0IGVsZW1lbnRzLCB3aGljaCBpcyBmaW5lXG4gICAgICAgIGVsdFRvTGlzdGVuT25EYXRhLmxhc3RWYWx1ZSA9IGVsdFRvTGlzdGVuT24udmFsdWVcbiAgICAgIH0pXG4gICAgfVxuICAgIGZvckVhY2goZWx0c1RvTGlzdGVuT24sIGZ1bmN0aW9uKGVsdFRvTGlzdGVuT24pIHtcbiAgICAgIC8qKiBAdHlwZSBFdmVudExpc3RlbmVyICovXG4gICAgICBjb25zdCBldmVudExpc3RlbmVyID0gZnVuY3Rpb24oZXZ0KSB7XG4gICAgICAgIGlmICghYm9keUNvbnRhaW5zKGVsdCkpIHtcbiAgICAgICAgICBlbHRUb0xpc3Rlbk9uLnJlbW92ZUV2ZW50TGlzdGVuZXIodHJpZ2dlclNwZWMudHJpZ2dlciwgZXZlbnRMaXN0ZW5lcilcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoaWdub3JlQm9vc3RlZEFuY2hvckN0cmxDbGljayhlbHQsIGV2dCkpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhwbGljaXRDYW5jZWwgfHwgc2hvdWxkQ2FuY2VsKGV2dCwgZWx0KSkge1xuICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heWJlRmlsdGVyRXZlbnQodHJpZ2dlclNwZWMsIGVsdCwgZXZ0KSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IGdldEludGVybmFsRGF0YShldnQpXG4gICAgICAgIGV2ZW50RGF0YS50cmlnZ2VyU3BlYyA9IHRyaWdnZXJTcGVjXG4gICAgICAgIGlmIChldmVudERhdGEuaGFuZGxlZEZvciA9PSBudWxsKSB7XG4gICAgICAgICAgZXZlbnREYXRhLmhhbmRsZWRGb3IgPSBbXVxuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudERhdGEuaGFuZGxlZEZvci5pbmRleE9mKGVsdCkgPCAwKSB7XG4gICAgICAgICAgZXZlbnREYXRhLmhhbmRsZWRGb3IucHVzaChlbHQpXG4gICAgICAgICAgaWYgKHRyaWdnZXJTcGVjLmNvbnN1bWUpIHtcbiAgICAgICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHJpZ2dlclNwZWMudGFyZ2V0ICYmIGV2dC50YXJnZXQpIHtcbiAgICAgICAgICAgIGlmICghbWF0Y2hlcyhhc0VsZW1lbnQoZXZ0LnRhcmdldCksIHRyaWdnZXJTcGVjLnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0cmlnZ2VyU3BlYy5vbmNlKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudERhdGEudHJpZ2dlcmVkT25jZSkge1xuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVsZW1lbnREYXRhLnRyaWdnZXJlZE9uY2UgPSB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0cmlnZ2VyU3BlYy5jaGFuZ2VkKSB7XG4gICAgICAgICAgICBjb25zdCBlbHRUb0xpc3Rlbk9uRGF0YSA9IGdldEludGVybmFsRGF0YShlbHRUb0xpc3Rlbk9uKVxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSB2YWx1ZSB3aWxsIGJlIHVuZGVmaW5lZCBmb3Igbm9uLWlucHV0IGVsZW1lbnRzLCB3aGljaCBpcyBmaW5lXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGVsdFRvTGlzdGVuT24udmFsdWVcbiAgICAgICAgICAgIGlmIChlbHRUb0xpc3Rlbk9uRGF0YS5sYXN0VmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWx0VG9MaXN0ZW5PbkRhdGEubGFzdFZhbHVlID0gdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVsZW1lbnREYXRhLmRlbGF5ZWQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChlbGVtZW50RGF0YS5kZWxheWVkKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZWxlbWVudERhdGEudGhyb3R0bGUpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0cmlnZ2VyU3BlYy50aHJvdHRsZSA+IDApIHtcbiAgICAgICAgICAgIGlmICghZWxlbWVudERhdGEudGhyb3R0bGUpIHtcbiAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KGVsdCwgJ2h0bXg6dHJpZ2dlcicpXG4gICAgICAgICAgICAgIGhhbmRsZXIoZWx0LCBldnQpXG4gICAgICAgICAgICAgIGVsZW1lbnREYXRhLnRocm90dGxlID0gZ2V0V2luZG93KCkuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50RGF0YS50aHJvdHRsZSA9IG51bGxcbiAgICAgICAgICAgICAgfSwgdHJpZ2dlclNwZWMudGhyb3R0bGUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0cmlnZ2VyU3BlYy5kZWxheSA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnREYXRhLmRlbGF5ZWQgPSBnZXRXaW5kb3coKS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoZWx0LCAnaHRteDp0cmlnZ2VyJylcbiAgICAgICAgICAgICAgaGFuZGxlcihlbHQsIGV2dClcbiAgICAgICAgICAgIH0sIHRyaWdnZXJTcGVjLmRlbGF5KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoZWx0LCAnaHRteDp0cmlnZ2VyJylcbiAgICAgICAgICAgIGhhbmRsZXIoZWx0LCBldnQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm9kZURhdGEubGlzdGVuZXJJbmZvcyA9PSBudWxsKSB7XG4gICAgICAgIG5vZGVEYXRhLmxpc3RlbmVySW5mb3MgPSBbXVxuICAgICAgfVxuICAgICAgbm9kZURhdGEubGlzdGVuZXJJbmZvcy5wdXNoKHtcbiAgICAgICAgdHJpZ2dlcjogdHJpZ2dlclNwZWMudHJpZ2dlcixcbiAgICAgICAgbGlzdGVuZXI6IGV2ZW50TGlzdGVuZXIsXG4gICAgICAgIG9uOiBlbHRUb0xpc3Rlbk9uXG4gICAgICB9KVxuICAgICAgZWx0VG9MaXN0ZW5Pbi5hZGRFdmVudExpc3RlbmVyKHRyaWdnZXJTcGVjLnRyaWdnZXIsIGV2ZW50TGlzdGVuZXIpXG4gICAgfSlcbiAgfVxuXG4gIGxldCB3aW5kb3dJc1Njcm9sbGluZyA9IGZhbHNlIC8vIHVzZWQgYnkgaW5pdFNjcm9sbEhhbmRsZXJcbiAgbGV0IHNjcm9sbEhhbmRsZXIgPSBudWxsXG4gIGZ1bmN0aW9uIGluaXRTY3JvbGxIYW5kbGVyKCkge1xuICAgIGlmICghc2Nyb2xsSGFuZGxlcikge1xuICAgICAgc2Nyb2xsSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB3aW5kb3dJc1Njcm9sbGluZyA9IHRydWVcbiAgICAgIH1cbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzY3JvbGxIYW5kbGVyKVxuICAgICAgc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh3aW5kb3dJc1Njcm9sbGluZykge1xuICAgICAgICAgIHdpbmRvd0lzU2Nyb2xsaW5nID0gZmFsc2VcbiAgICAgICAgICBmb3JFYWNoKGdldERvY3VtZW50KCkucXVlcnlTZWxlY3RvckFsbChcIltoeC10cmlnZ2VyKj0ncmV2ZWFsZWQnXSxbZGF0YS1oeC10cmlnZ2VyKj0ncmV2ZWFsZWQnXVwiKSwgZnVuY3Rpb24oZWx0KSB7XG4gICAgICAgICAgICBtYXliZVJldmVhbChlbHQpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSwgMjAwKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKi9cbiAgZnVuY3Rpb24gbWF5YmVSZXZlYWwoZWx0KSB7XG4gICAgaWYgKCFoYXNBdHRyaWJ1dGUoZWx0LCAnZGF0YS1oeC1yZXZlYWxlZCcpICYmIGlzU2Nyb2xsZWRJbnRvVmlldyhlbHQpKSB7XG4gICAgICBlbHQuc2V0QXR0cmlidXRlKCdkYXRhLWh4LXJldmVhbGVkJywgJ3RydWUnKVxuICAgICAgY29uc3Qgbm9kZURhdGEgPSBnZXRJbnRlcm5hbERhdGEoZWx0KVxuICAgICAgaWYgKG5vZGVEYXRhLmluaXRIYXNoKSB7XG4gICAgICAgIHRyaWdnZXJFdmVudChlbHQsICdyZXZlYWxlZCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiB0aGUgbm9kZSBpc24ndCBpbml0aWFsaXplZCwgd2FpdCBmb3IgaXQgYmVmb3JlIHRyaWdnZXJpbmcgdGhlIHJlcXVlc3RcbiAgICAgICAgZWx0LmFkZEV2ZW50TGlzdGVuZXIoJ2h0bXg6YWZ0ZXJQcm9jZXNzTm9kZScsIGZ1bmN0aW9uKCkgeyB0cmlnZ2VyRXZlbnQoZWx0LCAncmV2ZWFsZWQnKSB9LCB7IG9uY2U6IHRydWUgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcGFyYW0ge1RyaWdnZXJIYW5kbGVyfSBoYW5kbGVyXG4gICAqIEBwYXJhbSB7SHRteE5vZGVJbnRlcm5hbERhdGF9IG5vZGVEYXRhXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkZWxheVxuICAgKi9cbiAgZnVuY3Rpb24gbG9hZEltbWVkaWF0ZWx5KGVsdCwgaGFuZGxlciwgbm9kZURhdGEsIGRlbGF5KSB7XG4gICAgY29uc3QgbG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKCFub2RlRGF0YS5sb2FkZWQpIHtcbiAgICAgICAgbm9kZURhdGEubG9hZGVkID0gdHJ1ZVxuICAgICAgICBoYW5kbGVyKGVsdClcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRlbGF5ID4gMCkge1xuICAgICAgZ2V0V2luZG93KCkuc2V0VGltZW91dChsb2FkLCBkZWxheSlcbiAgICB9IGVsc2Uge1xuICAgICAgbG9hZCgpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEBwYXJhbSB7SHRteE5vZGVJbnRlcm5hbERhdGF9IG5vZGVEYXRhXG4gICAqIEBwYXJhbSB7SHRteFRyaWdnZXJTcGVjaWZpY2F0aW9uW119IHRyaWdnZXJTcGVjc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIHByb2Nlc3NWZXJicyhlbHQsIG5vZGVEYXRhLCB0cmlnZ2VyU3BlY3MpIHtcbiAgICBsZXQgZXhwbGljaXRBY3Rpb24gPSBmYWxzZVxuICAgIGZvckVhY2goVkVSQlMsIGZ1bmN0aW9uKHZlcmIpIHtcbiAgICAgIGlmIChoYXNBdHRyaWJ1dGUoZWx0LCAnaHgtJyArIHZlcmIpKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBnZXRBdHRyaWJ1dGVWYWx1ZShlbHQsICdoeC0nICsgdmVyYilcbiAgICAgICAgZXhwbGljaXRBY3Rpb24gPSB0cnVlXG4gICAgICAgIG5vZGVEYXRhLnBhdGggPSBwYXRoXG4gICAgICAgIG5vZGVEYXRhLnZlcmIgPSB2ZXJiXG4gICAgICAgIHRyaWdnZXJTcGVjcy5mb3JFYWNoKGZ1bmN0aW9uKHRyaWdnZXJTcGVjKSB7XG4gICAgICAgICAgYWRkVHJpZ2dlckhhbmRsZXIoZWx0LCB0cmlnZ2VyU3BlYywgbm9kZURhdGEsIGZ1bmN0aW9uKG5vZGUsIGV2dCkge1xuICAgICAgICAgICAgY29uc3QgZWx0ID0gYXNFbGVtZW50KG5vZGUpXG4gICAgICAgICAgICBpZiAoY2xvc2VzdChlbHQsIGh0bXguY29uZmlnLmRpc2FibGVTZWxlY3RvcikpIHtcbiAgICAgICAgICAgICAgY2xlYW5VcEVsZW1lbnQoZWx0KVxuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlzc3VlQWpheFJlcXVlc3QodmVyYiwgcGF0aCwgZWx0LCBldnQpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBleHBsaWNpdEFjdGlvblxuICB9XG5cbiAgLyoqXG4gICAqIEBjYWxsYmFjayBUcmlnZ2VySGFuZGxlclxuICAgKiBAcGFyYW0ge05vZGV9IGVsdFxuICAgKiBAcGFyYW0ge0V2ZW50fSBbZXZ0XVxuICAgKi9cblxuICAvKipcbiAgICogQHBhcmFtIHtOb2RlfSBlbHRcbiAgICogQHBhcmFtIHtIdG14VHJpZ2dlclNwZWNpZmljYXRpb259IHRyaWdnZXJTcGVjXG4gICAqIEBwYXJhbSB7SHRteE5vZGVJbnRlcm5hbERhdGF9IG5vZGVEYXRhXG4gICAqIEBwYXJhbSB7VHJpZ2dlckhhbmRsZXJ9IGhhbmRsZXJcbiAgICovXG4gIGZ1bmN0aW9uIGFkZFRyaWdnZXJIYW5kbGVyKGVsdCwgdHJpZ2dlclNwZWMsIG5vZGVEYXRhLCBoYW5kbGVyKSB7XG4gICAgaWYgKHRyaWdnZXJTcGVjLnRyaWdnZXIgPT09ICdyZXZlYWxlZCcpIHtcbiAgICAgIGluaXRTY3JvbGxIYW5kbGVyKClcbiAgICAgIGFkZEV2ZW50TGlzdGVuZXIoZWx0LCBoYW5kbGVyLCBub2RlRGF0YSwgdHJpZ2dlclNwZWMpXG4gICAgICBtYXliZVJldmVhbChhc0VsZW1lbnQoZWx0KSlcbiAgICB9IGVsc2UgaWYgKHRyaWdnZXJTcGVjLnRyaWdnZXIgPT09ICdpbnRlcnNlY3QnKSB7XG4gICAgICBjb25zdCBvYnNlcnZlck9wdGlvbnMgPSB7fVxuICAgICAgaWYgKHRyaWdnZXJTcGVjLnJvb3QpIHtcbiAgICAgICAgb2JzZXJ2ZXJPcHRpb25zLnJvb3QgPSBxdWVyeVNlbGVjdG9yRXh0KGVsdCwgdHJpZ2dlclNwZWMucm9vdClcbiAgICAgIH1cbiAgICAgIGlmICh0cmlnZ2VyU3BlYy50aHJlc2hvbGQpIHtcbiAgICAgICAgb2JzZXJ2ZXJPcHRpb25zLnRocmVzaG9sZCA9IHBhcnNlRmxvYXQodHJpZ2dlclNwZWMudGhyZXNob2xkKVxuICAgICAgfVxuICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZW50cmllcykge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBlbnRyeSA9IGVudHJpZXNbaV1cbiAgICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChlbHQsICdpbnRlcnNlY3QnKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIG9ic2VydmVyT3B0aW9ucylcbiAgICAgIG9ic2VydmVyLm9ic2VydmUoYXNFbGVtZW50KGVsdCkpXG4gICAgICBhZGRFdmVudExpc3RlbmVyKGFzRWxlbWVudChlbHQpLCBoYW5kbGVyLCBub2RlRGF0YSwgdHJpZ2dlclNwZWMpXG4gICAgfSBlbHNlIGlmICh0cmlnZ2VyU3BlYy50cmlnZ2VyID09PSAnbG9hZCcpIHtcbiAgICAgIGlmICghbWF5YmVGaWx0ZXJFdmVudCh0cmlnZ2VyU3BlYywgZWx0LCBtYWtlRXZlbnQoJ2xvYWQnLCB7IGVsdCB9KSkpIHtcbiAgICAgICAgbG9hZEltbWVkaWF0ZWx5KGFzRWxlbWVudChlbHQpLCBoYW5kbGVyLCBub2RlRGF0YSwgdHJpZ2dlclNwZWMuZGVsYXkpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0cmlnZ2VyU3BlYy5wb2xsSW50ZXJ2YWwgPiAwKSB7XG4gICAgICBub2RlRGF0YS5wb2xsaW5nID0gdHJ1ZVxuICAgICAgcHJvY2Vzc1BvbGxpbmcoYXNFbGVtZW50KGVsdCksIGhhbmRsZXIsIHRyaWdnZXJTcGVjKVxuICAgIH0gZWxzZSB7XG4gICAgICBhZGRFdmVudExpc3RlbmVyKGVsdCwgaGFuZGxlciwgbm9kZURhdGEsIHRyaWdnZXJTcGVjKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiBzaG91bGRQcm9jZXNzSHhPbihub2RlKSB7XG4gICAgY29uc3QgZWx0ID0gYXNFbGVtZW50KG5vZGUpXG4gICAgaWYgKCFlbHQpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gZWx0LmF0dHJpYnV0ZXNcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IGF0dHJOYW1lID0gYXR0cmlidXRlc1tqXS5uYW1lXG4gICAgICBpZiAoc3RhcnRzV2l0aChhdHRyTmFtZSwgJ2h4LW9uOicpIHx8IHN0YXJ0c1dpdGgoYXR0ck5hbWUsICdkYXRhLWh4LW9uOicpIHx8XG4gICAgICAgIHN0YXJ0c1dpdGgoYXR0ck5hbWUsICdoeC1vbi0nKSB8fCBzdGFydHNXaXRoKGF0dHJOYW1lLCAnZGF0YS1oeC1vbi0nKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge05vZGV9IGVsdFxuICAgKiBAcmV0dXJucyB7RWxlbWVudFtdfVxuICAgKi9cbiAgY29uc3QgSFhfT05fUVVFUlkgPSBuZXcgWFBhdGhFdmFsdWF0b3IoKVxuICAgIC5jcmVhdGVFeHByZXNzaW9uKCcuLy8qW0AqWyBzdGFydHMtd2l0aChuYW1lKCksIFwiaHgtb246XCIpIG9yIHN0YXJ0cy13aXRoKG5hbWUoKSwgXCJkYXRhLWh4LW9uOlwiKSBvcicgK1xuICAgICAgJyBzdGFydHMtd2l0aChuYW1lKCksIFwiaHgtb24tXCIpIG9yIHN0YXJ0cy13aXRoKG5hbWUoKSwgXCJkYXRhLWh4LW9uLVwiKSBdXScpXG5cbiAgZnVuY3Rpb24gcHJvY2Vzc0hYT25Sb290KGVsdCwgZWxlbWVudHMpIHtcbiAgICBpZiAoc2hvdWxkUHJvY2Vzc0h4T24oZWx0KSkge1xuICAgICAgZWxlbWVudHMucHVzaChhc0VsZW1lbnQoZWx0KSlcbiAgICB9XG4gICAgY29uc3QgaXRlciA9IEhYX09OX1FVRVJZLmV2YWx1YXRlKGVsdClcbiAgICBsZXQgbm9kZSA9IG51bGxcbiAgICB3aGlsZSAobm9kZSA9IGl0ZXIuaXRlcmF0ZU5leHQoKSkgZWxlbWVudHMucHVzaChhc0VsZW1lbnQobm9kZSkpXG4gIH1cblxuICBmdW5jdGlvbiBmaW5kSHhPbldpbGRjYXJkRWxlbWVudHMoZWx0KSB7XG4gICAgLyoqIEB0eXBlIHtFbGVtZW50W119ICovXG4gICAgY29uc3QgZWxlbWVudHMgPSBbXVxuICAgIGlmIChlbHQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGVsdC5jaGlsZE5vZGVzKSB7XG4gICAgICAgIHByb2Nlc3NIWE9uUm9vdChjaGlsZCwgZWxlbWVudHMpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Nlc3NIWE9uUm9vdChlbHQsIGVsZW1lbnRzKVxuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudHNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcmV0dXJucyB7Tm9kZUxpc3RPZjxFbGVtZW50PnxbXX1cbiAgICovXG4gIGZ1bmN0aW9uIGZpbmRFbGVtZW50c1RvUHJvY2VzcyhlbHQpIHtcbiAgICBpZiAoZWx0LnF1ZXJ5U2VsZWN0b3JBbGwpIHtcbiAgICAgIGNvbnN0IGJvb3N0ZWRTZWxlY3RvciA9ICcsIFtoeC1ib29zdF0gYSwgW2RhdGEtaHgtYm9vc3RdIGEsIGFbaHgtYm9vc3RdLCBhW2RhdGEtaHgtYm9vc3RdJ1xuXG4gICAgICBjb25zdCBleHRlbnNpb25TZWxlY3RvcnMgPSBbXVxuICAgICAgZm9yIChjb25zdCBlIGluIGV4dGVuc2lvbnMpIHtcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uc1tlXVxuICAgICAgICBpZiAoZXh0ZW5zaW9uLmdldFNlbGVjdG9ycykge1xuICAgICAgICAgIHZhciBzZWxlY3RvcnMgPSBleHRlbnNpb24uZ2V0U2VsZWN0b3JzKClcbiAgICAgICAgICBpZiAoc2VsZWN0b3JzKSB7XG4gICAgICAgICAgICBleHRlbnNpb25TZWxlY3RvcnMucHVzaChzZWxlY3RvcnMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBlbHQucXVlcnlTZWxlY3RvckFsbChWRVJCX1NFTEVDVE9SICsgYm9vc3RlZFNlbGVjdG9yICsgXCIsIGZvcm0sIFt0eXBlPSdzdWJtaXQnXSxcIiArXG4gICAgICAgICcgW2h4LWV4dF0sIFtkYXRhLWh4LWV4dF0sIFtoeC10cmlnZ2VyXSwgW2RhdGEtaHgtdHJpZ2dlcl0nICsgZXh0ZW5zaW9uU2VsZWN0b3JzLmZsYXQoKS5tYXAocyA9PiAnLCAnICsgcykuam9pbignJykpXG5cbiAgICAgIHJldHVybiByZXN1bHRzXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgc3VibWl0IGJ1dHRvbnMvaW5wdXRzIHRoYXQgaGF2ZSB0aGUgZm9ybSBhdHRyaWJ1dGUgc2V0XG4gICAqIHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2dFxuICAgKi9cbiAgZnVuY3Rpb24gbWF5YmVTZXRMYXN0QnV0dG9uQ2xpY2tlZChldnQpIHtcbiAgICBjb25zdCBlbHQgPSAvKiogQHR5cGUge0hUTUxCdXR0b25FbGVtZW50fEhUTUxJbnB1dEVsZW1lbnR9ICovIChjbG9zZXN0KGFzRWxlbWVudChldnQudGFyZ2V0KSwgXCJidXR0b24sIGlucHV0W3R5cGU9J3N1Ym1pdCddXCIpKVxuICAgIGNvbnN0IGludGVybmFsRGF0YSA9IGdldFJlbGF0ZWRGb3JtRGF0YShldnQpXG4gICAgaWYgKGludGVybmFsRGF0YSkge1xuICAgICAgaW50ZXJuYWxEYXRhLmxhc3RCdXR0b25DbGlja2VkID0gZWx0XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2dFxuICAgKi9cbiAgZnVuY3Rpb24gbWF5YmVVbnNldExhc3RCdXR0b25DbGlja2VkKGV2dCkge1xuICAgIGNvbnN0IGludGVybmFsRGF0YSA9IGdldFJlbGF0ZWRGb3JtRGF0YShldnQpXG4gICAgaWYgKGludGVybmFsRGF0YSkge1xuICAgICAgaW50ZXJuYWxEYXRhLmxhc3RCdXR0b25DbGlja2VkID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0V2ZW50fSBldnRcbiAgICogQHJldHVybnMge0h0bXhOb2RlSW50ZXJuYWxEYXRhfHVuZGVmaW5lZH1cbiAgICovXG4gIGZ1bmN0aW9uIGdldFJlbGF0ZWRGb3JtRGF0YShldnQpIHtcbiAgICBjb25zdCBlbHQgPSBjbG9zZXN0KGFzRWxlbWVudChldnQudGFyZ2V0KSwgXCJidXR0b24sIGlucHV0W3R5cGU9J3N1Ym1pdCddXCIpXG4gICAgaWYgKCFlbHQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBmb3JtID0gcmVzb2x2ZVRhcmdldCgnIycgKyBnZXRSYXdBdHRyaWJ1dGUoZWx0LCAnZm9ybScpLCBlbHQuZ2V0Um9vdE5vZGUoKSkgfHwgY2xvc2VzdChlbHQsICdmb3JtJylcbiAgICBpZiAoIWZvcm0pIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxEYXRhKGZvcm0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldH0gZWx0XG4gICAqL1xuICBmdW5jdGlvbiBpbml0QnV0dG9uVHJhY2tpbmcoZWx0KSB7XG4gICAgLy8gbmVlZCB0byBoYW5kbGUgYm90aCBjbGljayBhbmQgZm9jdXMgaW46XG4gICAgLy8gICBmb2N1c2luIC0gaW4gY2FzZSBzb21lb25lIHRhYnMgaW4gdG8gYSBidXR0b24gYW5kIGhpdHMgdGhlIHNwYWNlIGJhclxuICAgIC8vICAgY2xpY2sgLSBvbiBPU1ggYnV0dG9ucyBkbyBub3QgZm9jdXMgb24gY2xpY2sgc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzcyNFxuICAgIGVsdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG1heWJlU2V0TGFzdEJ1dHRvbkNsaWNrZWQpXG4gICAgZWx0LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBtYXliZVNldExhc3RCdXR0b25DbGlja2VkKVxuICAgIGVsdC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIG1heWJlVW5zZXRMYXN0QnV0dG9uQ2xpY2tlZClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlXG4gICAqL1xuICBmdW5jdGlvbiBhZGRIeE9uRXZlbnRIYW5kbGVyKGVsdCwgZXZlbnROYW1lLCBjb2RlKSB7XG4gICAgY29uc3Qgbm9kZURhdGEgPSBnZXRJbnRlcm5hbERhdGEoZWx0KVxuICAgIGlmICghQXJyYXkuaXNBcnJheShub2RlRGF0YS5vbkhhbmRsZXJzKSkge1xuICAgICAgbm9kZURhdGEub25IYW5kbGVycyA9IFtdXG4gICAgfVxuICAgIGxldCBmdW5jXG4gICAgLyoqIEB0eXBlIEV2ZW50TGlzdGVuZXIgKi9cbiAgICBjb25zdCBsaXN0ZW5lciA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIG1heWJlRXZhbChlbHQsIGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoZWx0SXNEaXNhYmxlZChlbHQpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmdW5jKSB7XG4gICAgICAgICAgZnVuYyA9IG5ldyBGdW5jdGlvbignZXZlbnQnLCBjb2RlKVxuICAgICAgICB9XG4gICAgICAgIGZ1bmMuY2FsbChlbHQsIGUpXG4gICAgICB9KVxuICAgIH1cbiAgICBlbHQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGxpc3RlbmVyKVxuICAgIG5vZGVEYXRhLm9uSGFuZGxlcnMucHVzaCh7IGV2ZW50OiBldmVudE5hbWUsIGxpc3RlbmVyIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAgICovXG4gIGZ1bmN0aW9uIHByb2Nlc3NIeE9uV2lsZGNhcmQoZWx0KSB7XG4gICAgLy8gd2lwZSBhbnkgcHJldmlvdXMgb24gaGFuZGxlcnMgc28gdGhhdCB0aGlzIGZ1bmN0aW9uIHRha2VzIHByZWNlZGVuY2VcbiAgICBkZUluaXRPbkhhbmRsZXJzKGVsdClcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWx0LmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBlbHQuYXR0cmlidXRlc1tpXS5uYW1lXG4gICAgICBjb25zdCB2YWx1ZSA9IGVsdC5hdHRyaWJ1dGVzW2ldLnZhbHVlXG4gICAgICBpZiAoc3RhcnRzV2l0aChuYW1lLCAnaHgtb24nKSB8fCBzdGFydHNXaXRoKG5hbWUsICdkYXRhLWh4LW9uJykpIHtcbiAgICAgICAgY29uc3QgYWZ0ZXJPblBvc2l0aW9uID0gbmFtZS5pbmRleE9mKCctb24nKSArIDNcbiAgICAgICAgY29uc3QgbmV4dENoYXIgPSBuYW1lLnNsaWNlKGFmdGVyT25Qb3NpdGlvbiwgYWZ0ZXJPblBvc2l0aW9uICsgMSlcbiAgICAgICAgaWYgKG5leHRDaGFyID09PSAnLScgfHwgbmV4dENoYXIgPT09ICc6Jykge1xuICAgICAgICAgIGxldCBldmVudE5hbWUgPSBuYW1lLnNsaWNlKGFmdGVyT25Qb3NpdGlvbiArIDEpXG4gICAgICAgICAgLy8gaWYgdGhlIGV2ZW50TmFtZSBzdGFydHMgd2l0aCBhIGNvbG9uIG9yIGRhc2gsIHByZXBlbmQgXCJodG14XCIgZm9yIHNob3J0aGFuZCBzdXBwb3J0XG4gICAgICAgICAgaWYgKHN0YXJ0c1dpdGgoZXZlbnROYW1lLCAnOicpKSB7XG4gICAgICAgICAgICBldmVudE5hbWUgPSAnaHRteCcgKyBldmVudE5hbWVcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0c1dpdGgoZXZlbnROYW1lLCAnLScpKSB7XG4gICAgICAgICAgICBldmVudE5hbWUgPSAnaHRteDonICsgZXZlbnROYW1lLnNsaWNlKDEpXG4gICAgICAgICAgfSBlbHNlIGlmIChzdGFydHNXaXRoKGV2ZW50TmFtZSwgJ2h0bXgtJykpIHtcbiAgICAgICAgICAgIGV2ZW50TmFtZSA9ICdodG14OicgKyBldmVudE5hbWUuc2xpY2UoNSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhZGRIeE9uRXZlbnRIYW5kbGVyKGVsdCwgZXZlbnROYW1lLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR8SFRNTElucHV0RWxlbWVudH0gZWx0XG4gICAqL1xuICBmdW5jdGlvbiBpbml0Tm9kZShlbHQpIHtcbiAgICBpZiAoY2xvc2VzdChlbHQsIGh0bXguY29uZmlnLmRpc2FibGVTZWxlY3RvcikpIHtcbiAgICAgIGNsZWFuVXBFbGVtZW50KGVsdClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBub2RlRGF0YSA9IGdldEludGVybmFsRGF0YShlbHQpXG4gICAgaWYgKG5vZGVEYXRhLmluaXRIYXNoICE9PSBhdHRyaWJ1dGVIYXNoKGVsdCkpIHtcbiAgICAgIC8vIGNsZWFuIHVwIGFueSBwcmV2aW91c2x5IHByb2Nlc3NlZCBpbmZvXG4gICAgICBkZUluaXROb2RlKGVsdClcblxuICAgICAgbm9kZURhdGEuaW5pdEhhc2ggPSBhdHRyaWJ1dGVIYXNoKGVsdClcblxuICAgICAgdHJpZ2dlckV2ZW50KGVsdCwgJ2h0bXg6YmVmb3JlUHJvY2Vzc05vZGUnKVxuXG4gICAgICAvLyBAdHMtaWdub3JlIHZhbHVlIHdpbGwgYmUgdW5kZWZpbmVkIGZvciBub24taW5wdXQgZWxlbWVudHMsIHdoaWNoIGlzIGZpbmVcbiAgICAgIGlmIChlbHQudmFsdWUpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBub2RlRGF0YS5sYXN0VmFsdWUgPSBlbHQudmFsdWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHJpZ2dlclNwZWNzID0gZ2V0VHJpZ2dlclNwZWNzKGVsdClcbiAgICAgIGNvbnN0IGhhc0V4cGxpY2l0SHR0cEFjdGlvbiA9IHByb2Nlc3NWZXJicyhlbHQsIG5vZGVEYXRhLCB0cmlnZ2VyU3BlY3MpXG5cbiAgICAgIGlmICghaGFzRXhwbGljaXRIdHRwQWN0aW9uKSB7XG4gICAgICAgIGlmIChnZXRDbG9zZXN0QXR0cmlidXRlVmFsdWUoZWx0LCAnaHgtYm9vc3QnKSA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgYm9vc3RFbGVtZW50KGVsdCwgbm9kZURhdGEsIHRyaWdnZXJTcGVjcylcbiAgICAgICAgfSBlbHNlIGlmIChoYXNBdHRyaWJ1dGUoZWx0LCAnaHgtdHJpZ2dlcicpKSB7XG4gICAgICAgICAgdHJpZ2dlclNwZWNzLmZvckVhY2goZnVuY3Rpb24odHJpZ2dlclNwZWMpIHtcbiAgICAgICAgICAgIC8vIEZvciBcIm5ha2VkXCIgdHJpZ2dlcnMsIGRvbid0IGRvIGFueXRoaW5nIGF0IGFsbFxuICAgICAgICAgICAgYWRkVHJpZ2dlckhhbmRsZXIoZWx0LCB0cmlnZ2VyU3BlYywgbm9kZURhdGEsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBzdWJtaXQgYnV0dG9ucy9pbnB1dHMgdGhhdCBoYXZlIHRoZSBmb3JtIGF0dHJpYnV0ZSBzZXRcbiAgICAgIC8vIHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvYnV0dG9uXG4gICAgICBpZiAoZWx0LnRhZ05hbWUgPT09ICdGT1JNJyB8fCAoZ2V0UmF3QXR0cmlidXRlKGVsdCwgJ3R5cGUnKSA9PT0gJ3N1Ym1pdCcgJiYgaGFzQXR0cmlidXRlKGVsdCwgJ2Zvcm0nKSkpIHtcbiAgICAgICAgaW5pdEJ1dHRvblRyYWNraW5nKGVsdClcbiAgICAgIH1cblxuICAgICAgdHJpZ2dlckV2ZW50KGVsdCwgJ2h0bXg6YWZ0ZXJQcm9jZXNzTm9kZScpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3NlcyBuZXcgY29udGVudCwgZW5hYmxpbmcgaHRteCBiZWhhdmlvci4gVGhpcyBjYW4gYmUgdXNlZnVsIGlmIHlvdSBoYXZlIGNvbnRlbnQgdGhhdCBpcyBhZGRlZCB0byB0aGUgRE9NIG91dHNpZGUgb2YgdGhlIG5vcm1hbCBodG14IHJlcXVlc3QgY3ljbGUgYnV0IHN0aWxsIHdhbnQgaHRteCBhdHRyaWJ1dGVzIHRvIHdvcmsuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9odG14Lm9yZy9hcGkvI3Byb2Nlc3NcbiAgICpcbiAgICogQHBhcmFtIHtFbGVtZW50fHN0cmluZ30gZWx0IGVsZW1lbnQgdG8gcHJvY2Vzc1xuICAgKi9cbiAgZnVuY3Rpb24gcHJvY2Vzc05vZGUoZWx0KSB7XG4gICAgZWx0ID0gcmVzb2x2ZVRhcmdldChlbHQpXG4gICAgaWYgKGNsb3Nlc3QoZWx0LCBodG14LmNvbmZpZy5kaXNhYmxlU2VsZWN0b3IpKSB7XG4gICAgICBjbGVhblVwRWxlbWVudChlbHQpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaW5pdE5vZGUoZWx0KVxuICAgIGZvckVhY2goZmluZEVsZW1lbnRzVG9Qcm9jZXNzKGVsdCksIGZ1bmN0aW9uKGNoaWxkKSB7IGluaXROb2RlKGNoaWxkKSB9KVxuICAgIGZvckVhY2goZmluZEh4T25XaWxkY2FyZEVsZW1lbnRzKGVsdCksIHByb2Nlc3NIeE9uV2lsZGNhcmQpXG4gIH1cblxuICAvLz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBFdmVudC9Mb2cgU3VwcG9ydFxuICAvLz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBmdW5jdGlvbiBrZWJhYkV2ZW50TmFtZShzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbYS16MC05XSkoW0EtWl0pL2csICckMS0kMicpLnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gICAqIEBwYXJhbSB7YW55fSBkZXRhaWxcbiAgICogQHJldHVybnMge0N1c3RvbUV2ZW50fVxuICAgKi9cbiAgZnVuY3Rpb24gbWFrZUV2ZW50KGV2ZW50TmFtZSwgZGV0YWlsKSB7XG4gICAgbGV0IGV2dFxuICAgIGlmICh3aW5kb3cuQ3VzdG9tRXZlbnQgJiYgdHlwZW9mIHdpbmRvdy5DdXN0b21FdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gVE9ETzogYGNvbXBvc2VkOiB0cnVlYCBoZXJlIGlzIGEgaGFjayB0byBtYWtlIGdsb2JhbCBldmVudCBoYW5kbGVycyB3b3JrIHdpdGggZXZlbnRzIGluIHNoYWRvdyBET01cbiAgICAgIC8vIFRoaXMgYnJlYWtzIGV4cGVjdGVkIGVuY2Fwc3VsYXRpb24gYnV0IG5lZWRzIHRvIGJlIGhlcmUgdW50aWwgZGVjaWRlZCBvdGhlcndpc2UgYnkgY29yZSBkZXZzXG4gICAgICBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoZXZlbnROYW1lLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGNvbXBvc2VkOiB0cnVlLCBkZXRhaWwgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgZXZ0ID0gZ2V0RG9jdW1lbnQoKS5jcmVhdGVFdmVudCgnQ3VzdG9tRXZlbnQnKVxuICAgICAgZXZ0LmluaXRDdXN0b21FdmVudChldmVudE5hbWUsIHRydWUsIHRydWUsIGRldGFpbClcbiAgICB9XG4gICAgcmV0dXJuIGV2dFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR8c3RyaW5nfSBlbHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICAgKiBAcGFyYW0ge2FueT19IGRldGFpbFxuICAgKi9cbiAgZnVuY3Rpb24gdHJpZ2dlckVycm9yRXZlbnQoZWx0LCBldmVudE5hbWUsIGRldGFpbCkge1xuICAgIHRyaWdnZXJFdmVudChlbHQsIGV2ZW50TmFtZSwgbWVyZ2VPYmplY3RzKHsgZXJyb3I6IGV2ZW50TmFtZSB9LCBkZXRhaWwpKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiBpZ25vcmVFdmVudEZvckxvZ2dpbmcoZXZlbnROYW1lKSB7XG4gICAgcmV0dXJuIGV2ZW50TmFtZSA9PT0gJ2h0bXg6YWZ0ZXJQcm9jZXNzTm9kZSdcbiAgfVxuXG4gIC8qKlxuICAgKiBgd2l0aEV4dGVuc2lvbnNgIGxvY2F0ZXMgYWxsIGFjdGl2ZSBleHRlbnNpb25zIGZvciBhIHByb3ZpZGVkIGVsZW1lbnQsIHRoZW5cbiAgICogZXhlY3V0ZXMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHVzaW5nIGVhY2ggb2YgdGhlIGFjdGl2ZSBleHRlbnNpb25zLiAgSXQgc2hvdWxkXG4gICAqIGJlIGNhbGxlZCBpbnRlcm5hbGx5IGF0IGV2ZXJ5IGV4dGVuZGFibGUgZXhlY3V0aW9uIHBvaW50IGluIGh0bXguXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEBwYXJhbSB7KGV4dGVuc2lvbjpIdG14RXh0ZW5zaW9uKSA9PiB2b2lkfSB0b0RvXG4gICAqIEByZXR1cm5zIHZvaWRcbiAgICovXG4gIGZ1bmN0aW9uIHdpdGhFeHRlbnNpb25zKGVsdCwgdG9Ebykge1xuICAgIGZvckVhY2goZ2V0RXh0ZW5zaW9ucyhlbHQpLCBmdW5jdGlvbihleHRlbnNpb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRvRG8oZXh0ZW5zaW9uKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dFcnJvcihlKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmdW5jdGlvbiBsb2dFcnJvcihtc2cpIHtcbiAgICBpZiAoY29uc29sZS5lcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihtc2cpXG4gICAgfSBlbHNlIGlmIChjb25zb2xlLmxvZykge1xuICAgICAgY29uc29sZS5sb2coJ0VSUk9SOiAnLCBtc2cpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgZ2l2ZW4gZXZlbnQgb24gYW4gZWxlbWVudFxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vaHRteC5vcmcvYXBpLyN0cmlnZ2VyXG4gICAqXG4gICAqIEBwYXJhbSB7RXZlbnRUYXJnZXR8c3RyaW5nfSBlbHQgdGhlIGVsZW1lbnQgdG8gdHJpZ2dlciB0aGUgZXZlbnQgb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZSB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgdG8gdHJpZ2dlclxuICAgKiBAcGFyYW0ge2FueT19IGRldGFpbCBkZXRhaWxzIGZvciB0aGUgZXZlbnRcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBmdW5jdGlvbiB0cmlnZ2VyRXZlbnQoZWx0LCBldmVudE5hbWUsIGRldGFpbCkge1xuICAgIGVsdCA9IHJlc29sdmVUYXJnZXQoZWx0KVxuICAgIGlmIChkZXRhaWwgPT0gbnVsbCkge1xuICAgICAgZGV0YWlsID0ge31cbiAgICB9XG4gICAgZGV0YWlsLmVsdCA9IGVsdFxuICAgIGNvbnN0IGV2ZW50ID0gbWFrZUV2ZW50KGV2ZW50TmFtZSwgZGV0YWlsKVxuICAgIGlmIChodG14LmxvZ2dlciAmJiAhaWdub3JlRXZlbnRGb3JMb2dnaW5nKGV2ZW50TmFtZSkpIHtcbiAgICAgIGh0bXgubG9nZ2VyKGVsdCwgZXZlbnROYW1lLCBkZXRhaWwpXG4gICAgfVxuICAgIGlmIChkZXRhaWwuZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKGRldGFpbC5lcnJvcilcbiAgICAgIHRyaWdnZXJFdmVudChlbHQsICdodG14OmVycm9yJywgeyBlcnJvckluZm86IGRldGFpbCB9KVxuICAgIH1cbiAgICBsZXQgZXZlbnRSZXN1bHQgPSBlbHQuZGlzcGF0Y2hFdmVudChldmVudClcbiAgICBjb25zdCBrZWJhYk5hbWUgPSBrZWJhYkV2ZW50TmFtZShldmVudE5hbWUpXG4gICAgaWYgKGV2ZW50UmVzdWx0ICYmIGtlYmFiTmFtZSAhPT0gZXZlbnROYW1lKSB7XG4gICAgICBjb25zdCBrZWJhYmVkRXZlbnQgPSBtYWtlRXZlbnQoa2ViYWJOYW1lLCBldmVudC5kZXRhaWwpXG4gICAgICBldmVudFJlc3VsdCA9IGV2ZW50UmVzdWx0ICYmIGVsdC5kaXNwYXRjaEV2ZW50KGtlYmFiZWRFdmVudClcbiAgICB9XG4gICAgd2l0aEV4dGVuc2lvbnMoYXNFbGVtZW50KGVsdCksIGZ1bmN0aW9uKGV4dGVuc2lvbikge1xuICAgICAgZXZlbnRSZXN1bHQgPSBldmVudFJlc3VsdCAmJiAoZXh0ZW5zaW9uLm9uRXZlbnQoZXZlbnROYW1lLCBldmVudCkgIT09IGZhbHNlICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKVxuICAgIH0pXG4gICAgcmV0dXJuIGV2ZW50UmVzdWx0XG4gIH1cblxuICAvLz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBIaXN0b3J5IFN1cHBvcnRcbiAgLy89ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgbGV0IGN1cnJlbnRQYXRoRm9ySGlzdG9yeSA9IGxvY2F0aW9uLnBhdGhuYW1lICsgbG9jYXRpb24uc2VhcmNoXG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtFbGVtZW50fVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SGlzdG9yeUVsZW1lbnQoKSB7XG4gICAgY29uc3QgaGlzdG9yeUVsdCA9IGdldERvY3VtZW50KCkucXVlcnlTZWxlY3RvcignW2h4LWhpc3RvcnktZWx0XSxbZGF0YS1oeC1oaXN0b3J5LWVsdF0nKVxuICAgIHJldHVybiBoaXN0b3J5RWx0IHx8IGdldERvY3VtZW50KCkuYm9keVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtFbGVtZW50fSByb290RWx0XG4gICAqL1xuICBmdW5jdGlvbiBzYXZlVG9IaXN0b3J5Q2FjaGUodXJsLCByb290RWx0KSB7XG4gICAgaWYgKCFjYW5BY2Nlc3NMb2NhbFN0b3JhZ2UoKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gZ2V0IHN0YXRlIHRvIHNhdmVcbiAgICBjb25zdCBpbm5lckhUTUwgPSBjbGVhbklubmVySHRtbEZvckhpc3Rvcnkocm9vdEVsdClcbiAgICBjb25zdCB0aXRsZSA9IGdldERvY3VtZW50KCkudGl0bGVcbiAgICBjb25zdCBzY3JvbGwgPSB3aW5kb3cuc2Nyb2xsWVxuXG4gICAgaWYgKGh0bXguY29uZmlnLmhpc3RvcnlDYWNoZVNpemUgPD0gMCkge1xuICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgYW4gZXZlbnR1YWxseSBhbHJlYWR5IGV4aXN0aW5nIGNhY2hlIGlzIHB1cmdlZFxuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2h0bXgtaGlzdG9yeS1jYWNoZScpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB1cmwgPSBub3JtYWxpemVQYXRoKHVybClcblxuICAgIGNvbnN0IGhpc3RvcnlDYWNoZSA9IHBhcnNlSlNPTihsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaHRteC1oaXN0b3J5LWNhY2hlJykpIHx8IFtdXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoaXN0b3J5Q2FjaGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChoaXN0b3J5Q2FjaGVbaV0udXJsID09PSB1cmwpIHtcbiAgICAgICAgaGlzdG9yeUNhY2hlLnNwbGljZShpLCAxKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAdHlwZSBIdG14SGlzdG9yeUl0ZW0gKi9cbiAgICBjb25zdCBuZXdIaXN0b3J5SXRlbSA9IHsgdXJsLCBjb250ZW50OiBpbm5lckhUTUwsIHRpdGxlLCBzY3JvbGwgfVxuXG4gICAgdHJpZ2dlckV2ZW50KGdldERvY3VtZW50KCkuYm9keSwgJ2h0bXg6aGlzdG9yeUl0ZW1DcmVhdGVkJywgeyBpdGVtOiBuZXdIaXN0b3J5SXRlbSwgY2FjaGU6IGhpc3RvcnlDYWNoZSB9KVxuXG4gICAgaGlzdG9yeUNhY2hlLnB1c2gobmV3SGlzdG9yeUl0ZW0pXG4gICAgd2hpbGUgKGhpc3RvcnlDYWNoZS5sZW5ndGggPiBodG14LmNvbmZpZy5oaXN0b3J5Q2FjaGVTaXplKSB7XG4gICAgICBoaXN0b3J5Q2FjaGUuc2hpZnQoKVxuICAgIH1cblxuICAgIC8vIGtlZXAgdHJ5aW5nIHRvIHNhdmUgdGhlIGNhY2hlIHVudGlsIGl0IHN1Y2NlZWRzIG9yIGlzIGVtcHR5XG4gICAgd2hpbGUgKGhpc3RvcnlDYWNoZS5sZW5ndGggPiAwKSB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaHRteC1oaXN0b3J5LWNhY2hlJywgSlNPTi5zdHJpbmdpZnkoaGlzdG9yeUNhY2hlKSlcbiAgICAgICAgYnJlYWtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJpZ2dlckVycm9yRXZlbnQoZ2V0RG9jdW1lbnQoKS5ib2R5LCAnaHRteDpoaXN0b3J5Q2FjaGVFcnJvcicsIHsgY2F1c2U6IGUsIGNhY2hlOiBoaXN0b3J5Q2FjaGUgfSlcbiAgICAgICAgaGlzdG9yeUNhY2hlLnNoaWZ0KCkgLy8gc2hyaW5rIHRoZSBjYWNoZSBhbmQgcmV0cnlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYge09iamVjdH0gSHRteEhpc3RvcnlJdGVtXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmxcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IGNvbnRlbnRcbiAgICogQHByb3BlcnR5IHtzdHJpbmd9IHRpdGxlXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzY3JvbGxcbiAgICovXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHJldHVybnMge0h0bXhIaXN0b3J5SXRlbXxudWxsfVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0Q2FjaGVkSGlzdG9yeSh1cmwpIHtcbiAgICBpZiAoIWNhbkFjY2Vzc0xvY2FsU3RvcmFnZSgpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHVybCA9IG5vcm1hbGl6ZVBhdGgodXJsKVxuXG4gICAgY29uc3QgaGlzdG9yeUNhY2hlID0gcGFyc2VKU09OKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdodG14LWhpc3RvcnktY2FjaGUnKSkgfHwgW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhpc3RvcnlDYWNoZS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGhpc3RvcnlDYWNoZVtpXS51cmwgPT09IHVybCkge1xuICAgICAgICByZXR1cm4gaGlzdG9yeUNhY2hlW2ldXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIGNsZWFuSW5uZXJIdG1sRm9ySGlzdG9yeShlbHQpIHtcbiAgICBjb25zdCBjbGFzc05hbWUgPSBodG14LmNvbmZpZy5yZXF1ZXN0Q2xhc3NcbiAgICBjb25zdCBjbG9uZSA9IC8qKiBAdHlwZSBFbGVtZW50ICovIChlbHQuY2xvbmVOb2RlKHRydWUpKVxuICAgIGZvckVhY2goZmluZEFsbChjbG9uZSwgJy4nICsgY2xhc3NOYW1lKSwgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgIHJlbW92ZUNsYXNzRnJvbUVsZW1lbnQoY2hpbGQsIGNsYXNzTmFtZSlcbiAgICB9KVxuICAgIC8vIHJlbW92ZSB0aGUgZGlzYWJsZWQgYXR0cmlidXRlIGZvciBhbnkgZWxlbWVudCBkaXNhYmxlZCBkdWUgdG8gYW4gaHRteCByZXF1ZXN0XG4gICAgZm9yRWFjaChmaW5kQWxsKGNsb25lLCAnW2RhdGEtZGlzYWJsZWQtYnktaHRteF0nKSwgZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgIGNoaWxkLnJlbW92ZUF0dHJpYnV0ZSgnZGlzYWJsZWQnKVxuICAgIH0pXG4gICAgcmV0dXJuIGNsb25lLmlubmVySFRNTFxuICB9XG5cbiAgZnVuY3Rpb24gc2F2ZUN1cnJlbnRQYWdlVG9IaXN0b3J5KCkge1xuICAgIGNvbnN0IGVsdCA9IGdldEhpc3RvcnlFbGVtZW50KClcbiAgICBjb25zdCBwYXRoID0gY3VycmVudFBhdGhGb3JIaXN0b3J5IHx8IGxvY2F0aW9uLnBhdGhuYW1lICsgbG9jYXRpb24uc2VhcmNoXG5cbiAgICAvLyBBbGxvdyBoaXN0b3J5IHNuYXBzaG90IGZlYXR1cmUgdG8gYmUgZGlzYWJsZWQgd2hlcmUgaHgtaGlzdG9yeT1cImZhbHNlXCJcbiAgICAvLyBpcyBwcmVzZW50ICphbnl3aGVyZSogaW4gdGhlIGN1cnJlbnQgZG9jdW1lbnQgd2UncmUgYWJvdXQgdG8gc2F2ZSxcbiAgICAvLyBzbyB3ZSBjYW4gcHJldmVudCBwcml2aWxlZ2VkIGRhdGEgZW50ZXJpbmcgdGhlIGNhY2hlLlxuICAgIC8vIFRoZSBwYWdlIHdpbGwgc3RpbGwgYmUgcmVhY2hhYmxlIGFzIGEgaGlzdG9yeSBlbnRyeSwgYnV0IGh0bXggd2lsbCBmZXRjaCBpdFxuICAgIC8vIGxpdmUgZnJvbSB0aGUgc2VydmVyIG9ucG9wc3RhdGUgcmF0aGVyIHRoYW4gbG9vayBpbiB0aGUgbG9jYWxTdG9yYWdlIGNhY2hlXG4gICAgbGV0IGRpc2FibGVIaXN0b3J5Q2FjaGVcbiAgICB0cnkge1xuICAgICAgZGlzYWJsZUhpc3RvcnlDYWNoZSA9IGdldERvY3VtZW50KCkucXVlcnlTZWxlY3RvcignW2h4LWhpc3Rvcnk9XCJmYWxzZVwiIGldLFtkYXRhLWh4LWhpc3Rvcnk9XCJmYWxzZVwiIGldJylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSUUxMTogaW5zZW5zaXRpdmUgbW9kaWZpZXIgbm90IHN1cHBvcnRlZCBzbyBmYWxsYmFjayB0byBjYXNlIHNlbnNpdGl2ZSBzZWxlY3RvclxuICAgICAgZGlzYWJsZUhpc3RvcnlDYWNoZSA9IGdldERvY3VtZW50KCkucXVlcnlTZWxlY3RvcignW2h4LWhpc3Rvcnk9XCJmYWxzZVwiXSxbZGF0YS1oeC1oaXN0b3J5PVwiZmFsc2VcIl0nKVxuICAgIH1cbiAgICBpZiAoIWRpc2FibGVIaXN0b3J5Q2FjaGUpIHtcbiAgICAgIHRyaWdnZXJFdmVudChnZXREb2N1bWVudCgpLmJvZHksICdodG14OmJlZm9yZUhpc3RvcnlTYXZlJywgeyBwYXRoLCBoaXN0b3J5RWx0OiBlbHQgfSlcbiAgICAgIHNhdmVUb0hpc3RvcnlDYWNoZShwYXRoLCBlbHQpXG4gICAgfVxuXG4gICAgaWYgKGh0bXguY29uZmlnLmhpc3RvcnlFbmFibGVkKSBoaXN0b3J5LnJlcGxhY2VTdGF0ZSh7IGh0bXg6IHRydWUgfSwgZ2V0RG9jdW1lbnQoKS50aXRsZSwgd2luZG93LmxvY2F0aW9uLmhyZWYpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIGZ1bmN0aW9uIHB1c2hVcmxJbnRvSGlzdG9yeShwYXRoKSB7XG4gIC8vIHJlbW92ZSB0aGUgY2FjaGUgYnVzdGVyIHBhcmFtZXRlciwgaWYgYW55XG4gICAgaWYgKGh0bXguY29uZmlnLmdldENhY2hlQnVzdGVyUGFyYW0pIHtcbiAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL29yZ1xcLmh0bXhcXC5jYWNoZS1idXN0ZXI9W14mXSomPy8sICcnKVxuICAgICAgaWYgKGVuZHNXaXRoKHBhdGgsICcmJykgfHwgZW5kc1dpdGgocGF0aCwgJz8nKSkge1xuICAgICAgICBwYXRoID0gcGF0aC5zbGljZSgwLCAtMSlcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGh0bXguY29uZmlnLmhpc3RvcnlFbmFibGVkKSB7XG4gICAgICBoaXN0b3J5LnB1c2hTdGF0ZSh7IGh0bXg6IHRydWUgfSwgJycsIHBhdGgpXG4gICAgfVxuICAgIGN1cnJlbnRQYXRoRm9ySGlzdG9yeSA9IHBhdGhcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgZnVuY3Rpb24gcmVwbGFjZVVybEluSGlzdG9yeShwYXRoKSB7XG4gICAgaWYgKGh0bXguY29uZmlnLmhpc3RvcnlFbmFibGVkKSBoaXN0b3J5LnJlcGxhY2VTdGF0ZSh7IGh0bXg6IHRydWUgfSwgJycsIHBhdGgpXG4gICAgY3VycmVudFBhdGhGb3JIaXN0b3J5ID0gcGF0aFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7SHRteFNldHRsZVRhc2tbXX0gdGFza3NcbiAgICovXG4gIGZ1bmN0aW9uIHNldHRsZUltbWVkaWF0ZWx5KHRhc2tzKSB7XG4gICAgZm9yRWFjaCh0YXNrcywgZnVuY3Rpb24odGFzaykge1xuICAgICAgdGFzay5jYWxsKHVuZGVmaW5lZClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBmdW5jdGlvbiBsb2FkSGlzdG9yeUZyb21TZXJ2ZXIocGF0aCkge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuICAgIGNvbnN0IGRldGFpbHMgPSB7IHBhdGgsIHhocjogcmVxdWVzdCB9XG4gICAgdHJpZ2dlckV2ZW50KGdldERvY3VtZW50KCkuYm9keSwgJ2h0bXg6aGlzdG9yeUNhY2hlTWlzcycsIGRldGFpbHMpXG4gICAgcmVxdWVzdC5vcGVuKCdHRVQnLCBwYXRoLCB0cnVlKVxuICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcignSFgtUmVxdWVzdCcsICd0cnVlJylcbiAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoJ0hYLUhpc3RvcnktUmVzdG9yZS1SZXF1ZXN0JywgJ3RydWUnKVxuICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcignSFgtQ3VycmVudC1VUkwnLCBnZXREb2N1bWVudCgpLmxvY2F0aW9uLmhyZWYpXG4gICAgcmVxdWVzdC5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLnN0YXR1cyA+PSAyMDAgJiYgdGhpcy5zdGF0dXMgPCA0MDApIHtcbiAgICAgICAgdHJpZ2dlckV2ZW50KGdldERvY3VtZW50KCkuYm9keSwgJ2h0bXg6aGlzdG9yeUNhY2hlTWlzc0xvYWQnLCBkZXRhaWxzKVxuICAgICAgICBjb25zdCBmcmFnbWVudCA9IG1ha2VGcmFnbWVudCh0aGlzLnJlc3BvbnNlKVxuICAgICAgICAvKiogQHR5cGUgUGFyZW50Tm9kZSAqL1xuICAgICAgICBjb25zdCBjb250ZW50ID0gZnJhZ21lbnQucXVlcnlTZWxlY3RvcignW2h4LWhpc3RvcnktZWx0XSxbZGF0YS1oeC1oaXN0b3J5LWVsdF0nKSB8fCBmcmFnbWVudFxuICAgICAgICBjb25zdCBoaXN0b3J5RWxlbWVudCA9IGdldEhpc3RvcnlFbGVtZW50KClcbiAgICAgICAgY29uc3Qgc2V0dGxlSW5mbyA9IG1ha2VTZXR0bGVJbmZvKGhpc3RvcnlFbGVtZW50KVxuICAgICAgICBoYW5kbGVUaXRsZShmcmFnbWVudC50aXRsZSlcblxuICAgICAgICBzd2FwSW5uZXJIVE1MKGhpc3RvcnlFbGVtZW50LCBjb250ZW50LCBzZXR0bGVJbmZvKVxuICAgICAgICBzZXR0bGVJbW1lZGlhdGVseShzZXR0bGVJbmZvLnRhc2tzKVxuICAgICAgICBjdXJyZW50UGF0aEZvckhpc3RvcnkgPSBwYXRoXG4gICAgICAgIHRyaWdnZXJFdmVudChnZXREb2N1bWVudCgpLmJvZHksICdodG14Omhpc3RvcnlSZXN0b3JlJywgeyBwYXRoLCBjYWNoZU1pc3M6IHRydWUsIHNlcnZlclJlc3BvbnNlOiB0aGlzLnJlc3BvbnNlIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmlnZ2VyRXJyb3JFdmVudChnZXREb2N1bWVudCgpLmJvZHksICdodG14Omhpc3RvcnlDYWNoZU1pc3NMb2FkRXJyb3InLCBkZXRhaWxzKVxuICAgICAgfVxuICAgIH1cbiAgICByZXF1ZXN0LnNlbmQoKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGF0aF1cbiAgICovXG4gIGZ1bmN0aW9uIHJlc3RvcmVIaXN0b3J5KHBhdGgpIHtcbiAgICBzYXZlQ3VycmVudFBhZ2VUb0hpc3RvcnkoKVxuICAgIHBhdGggPSBwYXRoIHx8IGxvY2F0aW9uLnBhdGhuYW1lICsgbG9jYXRpb24uc2VhcmNoXG4gICAgY29uc3QgY2FjaGVkID0gZ2V0Q2FjaGVkSGlzdG9yeShwYXRoKVxuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIGNvbnN0IGZyYWdtZW50ID0gbWFrZUZyYWdtZW50KGNhY2hlZC5jb250ZW50KVxuICAgICAgY29uc3QgaGlzdG9yeUVsZW1lbnQgPSBnZXRIaXN0b3J5RWxlbWVudCgpXG4gICAgICBjb25zdCBzZXR0bGVJbmZvID0gbWFrZVNldHRsZUluZm8oaGlzdG9yeUVsZW1lbnQpXG4gICAgICBoYW5kbGVUaXRsZShmcmFnbWVudC50aXRsZSlcbiAgICAgIHN3YXBJbm5lckhUTUwoaGlzdG9yeUVsZW1lbnQsIGZyYWdtZW50LCBzZXR0bGVJbmZvKVxuICAgICAgc2V0dGxlSW1tZWRpYXRlbHkoc2V0dGxlSW5mby50YXNrcylcbiAgICAgIGdldFdpbmRvdygpLnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCBjYWNoZWQuc2Nyb2xsKVxuICAgICAgfSwgMCkgLy8gbmV4dCAndGljaycsIHNvIGJyb3dzZXIgaGFzIHRpbWUgdG8gcmVuZGVyIGxheW91dFxuICAgICAgY3VycmVudFBhdGhGb3JIaXN0b3J5ID0gcGF0aFxuICAgICAgdHJpZ2dlckV2ZW50KGdldERvY3VtZW50KCkuYm9keSwgJ2h0bXg6aGlzdG9yeVJlc3RvcmUnLCB7IHBhdGgsIGl0ZW06IGNhY2hlZCB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaHRteC5jb25maWcucmVmcmVzaE9uSGlzdG9yeU1pc3MpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZTogb3B0aW9uYWwgcGFyYW1ldGVyIGluIHJlbG9hZCgpIGZ1bmN0aW9uIHRocm93cyBlcnJvclxuICAgICAgICAvLyBub2luc3BlY3Rpb24gSlNVbnJlc29sdmVkUmVmZXJlbmNlXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQodHJ1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvYWRIaXN0b3J5RnJvbVNlcnZlcihwYXRoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcmV0dXJucyB7RWxlbWVudFtdfVxuICAgKi9cbiAgZnVuY3Rpb24gYWRkUmVxdWVzdEluZGljYXRvckNsYXNzZXMoZWx0KSB7XG4gICAgbGV0IGluZGljYXRvcnMgPSAvKiogQHR5cGUgRWxlbWVudFtdICovIChmaW5kQXR0cmlidXRlVGFyZ2V0cyhlbHQsICdoeC1pbmRpY2F0b3InKSlcbiAgICBpZiAoaW5kaWNhdG9ycyA9PSBudWxsKSB7XG4gICAgICBpbmRpY2F0b3JzID0gW2VsdF1cbiAgICB9XG4gICAgZm9yRWFjaChpbmRpY2F0b3JzLCBmdW5jdGlvbihpYykge1xuICAgICAgY29uc3QgaW50ZXJuYWxEYXRhID0gZ2V0SW50ZXJuYWxEYXRhKGljKVxuICAgICAgaW50ZXJuYWxEYXRhLnJlcXVlc3RDb3VudCA9IChpbnRlcm5hbERhdGEucmVxdWVzdENvdW50IHx8IDApICsgMVxuICAgICAgaWMuY2xhc3NMaXN0LmFkZC5jYWxsKGljLmNsYXNzTGlzdCwgaHRteC5jb25maWcucmVxdWVzdENsYXNzKVxuICAgIH0pXG4gICAgcmV0dXJuIGluZGljYXRvcnNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcmV0dXJucyB7RWxlbWVudFtdfVxuICAgKi9cbiAgZnVuY3Rpb24gZGlzYWJsZUVsZW1lbnRzKGVsdCkge1xuICAgIGxldCBkaXNhYmxlZEVsdHMgPSAvKiogQHR5cGUgRWxlbWVudFtdICovIChmaW5kQXR0cmlidXRlVGFyZ2V0cyhlbHQsICdoeC1kaXNhYmxlZC1lbHQnKSlcbiAgICBpZiAoZGlzYWJsZWRFbHRzID09IG51bGwpIHtcbiAgICAgIGRpc2FibGVkRWx0cyA9IFtdXG4gICAgfVxuICAgIGZvckVhY2goZGlzYWJsZWRFbHRzLCBmdW5jdGlvbihkaXNhYmxlZEVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGludGVybmFsRGF0YSA9IGdldEludGVybmFsRGF0YShkaXNhYmxlZEVsZW1lbnQpXG4gICAgICBpbnRlcm5hbERhdGEucmVxdWVzdENvdW50ID0gKGludGVybmFsRGF0YS5yZXF1ZXN0Q291bnQgfHwgMCkgKyAxXG4gICAgICBkaXNhYmxlZEVsZW1lbnQuc2V0QXR0cmlidXRlKCdkaXNhYmxlZCcsICcnKVxuICAgICAgZGlzYWJsZWRFbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1kaXNhYmxlZC1ieS1odG14JywgJycpXG4gICAgfSlcbiAgICByZXR1cm4gZGlzYWJsZWRFbHRzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50W119IGluZGljYXRvcnNcbiAgICogQHBhcmFtIHtFbGVtZW50W119IGRpc2FibGVkXG4gICAqL1xuICBmdW5jdGlvbiByZW1vdmVSZXF1ZXN0SW5kaWNhdG9ycyhpbmRpY2F0b3JzLCBkaXNhYmxlZCkge1xuICAgIGZvckVhY2goaW5kaWNhdG9ycywgZnVuY3Rpb24oaWMpIHtcbiAgICAgIGNvbnN0IGludGVybmFsRGF0YSA9IGdldEludGVybmFsRGF0YShpYylcbiAgICAgIGludGVybmFsRGF0YS5yZXF1ZXN0Q291bnQgPSAoaW50ZXJuYWxEYXRhLnJlcXVlc3RDb3VudCB8fCAwKSAtIDFcbiAgICAgIGlmIChpbnRlcm5hbERhdGEucmVxdWVzdENvdW50ID09PSAwKSB7XG4gICAgICAgIGljLmNsYXNzTGlzdC5yZW1vdmUuY2FsbChpYy5jbGFzc0xpc3QsIGh0bXguY29uZmlnLnJlcXVlc3RDbGFzcylcbiAgICAgIH1cbiAgICB9KVxuICAgIGZvckVhY2goZGlzYWJsZWQsIGZ1bmN0aW9uKGRpc2FibGVkRWxlbWVudCkge1xuICAgICAgY29uc3QgaW50ZXJuYWxEYXRhID0gZ2V0SW50ZXJuYWxEYXRhKGRpc2FibGVkRWxlbWVudClcbiAgICAgIGludGVybmFsRGF0YS5yZXF1ZXN0Q291bnQgPSAoaW50ZXJuYWxEYXRhLnJlcXVlc3RDb3VudCB8fCAwKSAtIDFcbiAgICAgIGlmIChpbnRlcm5hbERhdGEucmVxdWVzdENvdW50ID09PSAwKSB7XG4gICAgICAgIGRpc2FibGVkRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2Rpc2FibGVkJylcbiAgICAgICAgZGlzYWJsZWRFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1kaXNhYmxlZC1ieS1odG14JylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLy89ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gSW5wdXQgVmFsdWUgUHJvY2Vzc2luZ1xuICAvLz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnRbXX0gcHJvY2Vzc2VkXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gaGF2ZVNlZW5Ob2RlKHByb2Nlc3NlZCwgZWx0KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9jZXNzZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBwcm9jZXNzZWRbaV1cbiAgICAgIGlmIChub2RlLmlzU2FtZU5vZGUoZWx0KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIHNob3VsZEluY2x1ZGUoZWxlbWVudCkge1xuICAgIC8vIENhc3QgdG8gdHJpY2sgdHNjLCB1bmRlZmluZWQgdmFsdWVzIHdpbGwgd29yayBmaW5lIGhlcmVcbiAgICBjb25zdCBlbHQgPSAvKiogQHR5cGUge0hUTUxJbnB1dEVsZW1lbnR9ICovIChlbGVtZW50KVxuICAgIGlmIChlbHQubmFtZSA9PT0gJycgfHwgZWx0Lm5hbWUgPT0gbnVsbCB8fCBlbHQuZGlzYWJsZWQgfHwgY2xvc2VzdChlbHQsICdmaWVsZHNldFtkaXNhYmxlZF0nKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIC8vIGlnbm9yZSBcInN1Ym1pdHRlclwiIHR5cGVzIChzZWUgalF1ZXJ5IHNyYy9zZXJpYWxpemUuanMpXG4gICAgaWYgKGVsdC50eXBlID09PSAnYnV0dG9uJyB8fCBlbHQudHlwZSA9PT0gJ3N1Ym1pdCcgfHwgZWx0LnRhZ05hbWUgPT09ICdpbWFnZScgfHwgZWx0LnRhZ05hbWUgPT09ICdyZXNldCcgfHwgZWx0LnRhZ05hbWUgPT09ICdmaWxlJykge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGlmIChlbHQudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBlbHQudHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgcmV0dXJuIGVsdC5jaGVja2VkXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKiogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd8QXJyYXl8Rm9ybURhdGFFbnRyeVZhbHVlfSB2YWx1ZVxuICAgKiBAcGFyYW0ge0Zvcm1EYXRhfSBmb3JtRGF0YSAqL1xuICBmdW5jdGlvbiBhZGRWYWx1ZVRvRm9ybURhdGEobmFtZSwgdmFsdWUsIGZvcm1EYXRhKSB7XG4gICAgaWYgKG5hbWUgIT0gbnVsbCAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbih2KSB7IGZvcm1EYXRhLmFwcGVuZChuYW1lLCB2KSB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xBcnJheX0gdmFsdWVcbiAgICogQHBhcmFtIHtGb3JtRGF0YX0gZm9ybURhdGEgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlVmFsdWVGcm9tRm9ybURhdGEobmFtZSwgdmFsdWUsIGZvcm1EYXRhKSB7XG4gICAgaWYgKG5hbWUgIT0gbnVsbCAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgICBsZXQgdmFsdWVzID0gZm9ybURhdGEuZ2V0QWxsKG5hbWUpXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzLmZpbHRlcih2ID0+IHZhbHVlLmluZGV4T2YodikgPCAwKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWVzID0gdmFsdWVzLmZpbHRlcih2ID0+IHYgIT09IHZhbHVlKVxuICAgICAgfVxuICAgICAgZm9ybURhdGEuZGVsZXRlKG5hbWUpXG4gICAgICBmb3JFYWNoKHZhbHVlcywgdiA9PiBmb3JtRGF0YS5hcHBlbmQobmFtZSwgdikpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudFtdfSBwcm9jZXNzZWRcbiAgICogQHBhcmFtIHtGb3JtRGF0YX0gZm9ybURhdGFcbiAgICogQHBhcmFtIHtIdG14RWxlbWVudFZhbGlkYXRpb25FcnJvcltdfSBlcnJvcnNcbiAgICogQHBhcmFtIHtFbGVtZW50fEhUTUxJbnB1dEVsZW1lbnR8SFRNTFNlbGVjdEVsZW1lbnR8SFRNTEZvcm1FbGVtZW50fSBlbHRcbiAgICogQHBhcmFtIHtib29sZWFufSB2YWxpZGF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gcHJvY2Vzc0lucHV0VmFsdWUocHJvY2Vzc2VkLCBmb3JtRGF0YSwgZXJyb3JzLCBlbHQsIHZhbGlkYXRlKSB7XG4gICAgaWYgKGVsdCA9PSBudWxsIHx8IGhhdmVTZWVuTm9kZShwcm9jZXNzZWQsIGVsdCkpIHtcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzZWQucHVzaChlbHQpXG4gICAgfVxuICAgIGlmIChzaG91bGRJbmNsdWRlKGVsdCkpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBnZXRSYXdBdHRyaWJ1dGUoZWx0LCAnbmFtZScpXG4gICAgICAvLyBAdHMtaWdub3JlIHZhbHVlIHdpbGwgYmUgdW5kZWZpbmVkIGZvciBub24taW5wdXQgZWxlbWVudHMsIHdoaWNoIGlzIGZpbmVcbiAgICAgIGxldCB2YWx1ZSA9IGVsdC52YWx1ZVxuICAgICAgaWYgKGVsdCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50ICYmIGVsdC5tdWx0aXBsZSkge1xuICAgICAgICB2YWx1ZSA9IHRvQXJyYXkoZWx0LnF1ZXJ5U2VsZWN0b3JBbGwoJ29wdGlvbjpjaGVja2VkJykpLm1hcChmdW5jdGlvbihlKSB7IHJldHVybiAoLyoqIEB0eXBlIEhUTUxPcHRpb25FbGVtZW50ICovKGUpKS52YWx1ZSB9KVxuICAgICAgfVxuICAgICAgLy8gaW5jbHVkZSBmaWxlIGlucHV0c1xuICAgICAgaWYgKGVsdCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgZWx0LmZpbGVzKSB7XG4gICAgICAgIHZhbHVlID0gdG9BcnJheShlbHQuZmlsZXMpXG4gICAgICB9XG4gICAgICBhZGRWYWx1ZVRvRm9ybURhdGEobmFtZSwgdmFsdWUsIGZvcm1EYXRhKVxuICAgICAgaWYgKHZhbGlkYXRlKSB7XG4gICAgICAgIHZhbGlkYXRlRWxlbWVudChlbHQsIGVycm9ycylcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVsdCBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCkge1xuICAgICAgZm9yRWFjaChlbHQuZWxlbWVudHMsIGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIGlmIChwcm9jZXNzZWQuaW5kZXhPZihpbnB1dCkgPj0gMCkge1xuICAgICAgICAgIC8vIFRoZSBpbnB1dCBoYXMgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCBhbmQgYWRkZWQgdG8gdGhlIHZhbHVlcywgYnV0IHRoZSBGb3JtRGF0YSB0aGF0IHdpbGwgYmVcbiAgICAgICAgICAvLyAgY29uc3RydWN0ZWQgcmlnaHQgYWZ0ZXIgb24gdGhlIGZvcm0sIHdpbGwgaW5jbHVkZSBpdCBvbmNlIGFnYWluLiBTbyByZW1vdmUgdGhhdCBpbnB1dCdzIHZhbHVlXG4gICAgICAgICAgLy8gIG5vdyB0byBhdm9pZCBkdXBsaWNhdGVzXG4gICAgICAgICAgcmVtb3ZlVmFsdWVGcm9tRm9ybURhdGEoaW5wdXQubmFtZSwgaW5wdXQudmFsdWUsIGZvcm1EYXRhKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb2Nlc3NlZC5wdXNoKGlucHV0KVxuICAgICAgICB9XG4gICAgICAgIGlmICh2YWxpZGF0ZSkge1xuICAgICAgICAgIHZhbGlkYXRlRWxlbWVudChpbnB1dCwgZXJyb3JzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgbmV3IEZvcm1EYXRhKGVsdCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGaWxlICYmIHZhbHVlLm5hbWUgPT09ICcnKSB7XG4gICAgICAgICAgcmV0dXJuIC8vIGlnbm9yZSBuby1uYW1lIGZpbGVzXG4gICAgICAgIH1cbiAgICAgICAgYWRkVmFsdWVUb0Zvcm1EYXRhKG5hbWUsIHZhbHVlLCBmb3JtRGF0YSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEBwYXJhbSB7SHRteEVsZW1lbnRWYWxpZGF0aW9uRXJyb3JbXX0gZXJyb3JzXG4gICAqL1xuICBmdW5jdGlvbiB2YWxpZGF0ZUVsZW1lbnQoZWx0LCBlcnJvcnMpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gLyoqIEB0eXBlIHtIVE1MRWxlbWVudCAmIEVsZW1lbnRJbnRlcm5hbHN9ICovIChlbHQpXG4gICAgaWYgKGVsZW1lbnQud2lsbFZhbGlkYXRlKSB7XG4gICAgICB0cmlnZ2VyRXZlbnQoZWxlbWVudCwgJ2h0bXg6dmFsaWRhdGlvbjp2YWxpZGF0ZScpXG4gICAgICBpZiAoIWVsZW1lbnQuY2hlY2tWYWxpZGl0eSgpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHsgZWx0OiBlbGVtZW50LCBtZXNzYWdlOiBlbGVtZW50LnZhbGlkYXRpb25NZXNzYWdlLCB2YWxpZGl0eTogZWxlbWVudC52YWxpZGl0eSB9KVxuICAgICAgICB0cmlnZ2VyRXZlbnQoZWxlbWVudCwgJ2h0bXg6dmFsaWRhdGlvbjpmYWlsZWQnLCB7IG1lc3NhZ2U6IGVsZW1lbnQudmFsaWRhdGlvbk1lc3NhZ2UsIHZhbGlkaXR5OiBlbGVtZW50LnZhbGlkaXR5IH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlIHZhbHVlcyBpbiB0aGUgb25lIEZvcm1EYXRhIHdpdGggdGhvc2UgZnJvbSBhbm90aGVyLlxuICAgKiBAcGFyYW0ge0Zvcm1EYXRhfSByZWNlaXZlciB0aGUgZm9ybWRhdGEgdGhhdCB3aWxsIGJlIG11dGF0ZWRcbiAgICogQHBhcmFtIHtGb3JtRGF0YX0gZG9ub3IgdGhlIGZvcm1kYXRhIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBvdmVycmlkaW5nIHZhbHVlc1xuICAgKiBAcmV0dXJucyB7Rm9ybURhdGF9IHRoZSB7QGxpbmtjb2RlIHJlY2VpdmVyfVxuICAgKi9cbiAgZnVuY3Rpb24gb3ZlcnJpZGVGb3JtRGF0YShyZWNlaXZlciwgZG9ub3IpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBkb25vci5rZXlzKCkpIHtcbiAgICAgIHJlY2VpdmVyLmRlbGV0ZShrZXkpXG4gICAgfVxuICAgIGRvbm9yLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgcmVjZWl2ZXIuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgfSlcbiAgICByZXR1cm4gcmVjZWl2ZXJcbiAgfVxuXG4gIC8qKlxuICogQHBhcmFtIHtFbGVtZW50fEhUTUxGb3JtRWxlbWVudH0gZWx0XG4gKiBAcGFyYW0ge0h0dHBWZXJifSB2ZXJiXG4gKiBAcmV0dXJucyB7e2Vycm9yczogSHRteEVsZW1lbnRWYWxpZGF0aW9uRXJyb3JbXSwgZm9ybURhdGE6IEZvcm1EYXRhLCB2YWx1ZXM6IE9iamVjdH19XG4gKi9cbiAgZnVuY3Rpb24gZ2V0SW5wdXRWYWx1ZXMoZWx0LCB2ZXJiKSB7XG4gICAgLyoqIEB0eXBlIEVsZW1lbnRbXSAqL1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IFtdXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKVxuICAgIGNvbnN0IHByaW9yaXR5Rm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKVxuICAgIC8qKiBAdHlwZSBIdG14RWxlbWVudFZhbGlkYXRpb25FcnJvcltdICovXG4gICAgY29uc3QgZXJyb3JzID0gW11cbiAgICBjb25zdCBpbnRlcm5hbERhdGEgPSBnZXRJbnRlcm5hbERhdGEoZWx0KVxuICAgIGlmIChpbnRlcm5hbERhdGEubGFzdEJ1dHRvbkNsaWNrZWQgJiYgIWJvZHlDb250YWlucyhpbnRlcm5hbERhdGEubGFzdEJ1dHRvbkNsaWNrZWQpKSB7XG4gICAgICBpbnRlcm5hbERhdGEubGFzdEJ1dHRvbkNsaWNrZWQgPSBudWxsXG4gICAgfVxuXG4gICAgLy8gb25seSB2YWxpZGF0ZSB3aGVuIGZvcm0gaXMgZGlyZWN0bHkgc3VibWl0dGVkIGFuZCBub3ZhbGlkYXRlIG9yIGZvcm1ub3ZhbGlkYXRlIGFyZSBub3Qgc2V0XG4gICAgLy8gb3IgaWYgdGhlIGVsZW1lbnQgaGFzIGFuIGV4cGxpY2l0IGh4LXZhbGlkYXRlPVwidHJ1ZVwiIG9uIGl0XG4gICAgbGV0IHZhbGlkYXRlID0gKGVsdCBpbnN0YW5jZW9mIEhUTUxGb3JtRWxlbWVudCAmJiBlbHQubm9WYWxpZGF0ZSAhPT0gdHJ1ZSkgfHwgZ2V0QXR0cmlidXRlVmFsdWUoZWx0LCAnaHgtdmFsaWRhdGUnKSA9PT0gJ3RydWUnXG4gICAgaWYgKGludGVybmFsRGF0YS5sYXN0QnV0dG9uQ2xpY2tlZCkge1xuICAgICAgdmFsaWRhdGUgPSB2YWxpZGF0ZSAmJiBpbnRlcm5hbERhdGEubGFzdEJ1dHRvbkNsaWNrZWQuZm9ybU5vVmFsaWRhdGUgIT09IHRydWVcbiAgICB9XG5cbiAgICAvLyBmb3IgYSBub24tR0VUIGluY2x1ZGUgdGhlIGNsb3Nlc3QgZm9ybVxuICAgIGlmICh2ZXJiICE9PSAnZ2V0Jykge1xuICAgICAgcHJvY2Vzc0lucHV0VmFsdWUocHJvY2Vzc2VkLCBwcmlvcml0eUZvcm1EYXRhLCBlcnJvcnMsIGNsb3Nlc3QoZWx0LCAnZm9ybScpLCB2YWxpZGF0ZSlcbiAgICB9XG5cbiAgICAvLyBpbmNsdWRlIHRoZSBlbGVtZW50IGl0c2VsZlxuICAgIHByb2Nlc3NJbnB1dFZhbHVlKHByb2Nlc3NlZCwgZm9ybURhdGEsIGVycm9ycywgZWx0LCB2YWxpZGF0ZSlcblxuICAgIC8vIGlmIGEgYnV0dG9uIG9yIHN1Ym1pdCB3YXMgY2xpY2tlZCBsYXN0LCBpbmNsdWRlIGl0cyB2YWx1ZVxuICAgIGlmIChpbnRlcm5hbERhdGEubGFzdEJ1dHRvbkNsaWNrZWQgfHwgZWx0LnRhZ05hbWUgPT09ICdCVVRUT04nIHx8XG4gICAgKGVsdC50YWdOYW1lID09PSAnSU5QVVQnICYmIGdldFJhd0F0dHJpYnV0ZShlbHQsICd0eXBlJykgPT09ICdzdWJtaXQnKSkge1xuICAgICAgY29uc3QgYnV0dG9uID0gaW50ZXJuYWxEYXRhLmxhc3RCdXR0b25DbGlja2VkIHx8ICgvKiogQHR5cGUgSFRNTElucHV0RWxlbWVudHxIVE1MQnV0dG9uRWxlbWVudCAqLyhlbHQpKVxuICAgICAgY29uc3QgbmFtZSA9IGdldFJhd0F0dHJpYnV0ZShidXR0b24sICduYW1lJylcbiAgICAgIGFkZFZhbHVlVG9Gb3JtRGF0YShuYW1lLCBidXR0b24udmFsdWUsIHByaW9yaXR5Rm9ybURhdGEpXG4gICAgfVxuXG4gICAgLy8gaW5jbHVkZSBhbnkgZXhwbGljaXQgaW5jbHVkZXNcbiAgICBjb25zdCBpbmNsdWRlcyA9IGZpbmRBdHRyaWJ1dGVUYXJnZXRzKGVsdCwgJ2h4LWluY2x1ZGUnKVxuICAgIGZvckVhY2goaW5jbHVkZXMsIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHByb2Nlc3NJbnB1dFZhbHVlKHByb2Nlc3NlZCwgZm9ybURhdGEsIGVycm9ycywgYXNFbGVtZW50KG5vZGUpLCB2YWxpZGF0ZSlcbiAgICAgIC8vIGlmIGEgbm9uLWZvcm0gaXMgaW5jbHVkZWQsIGluY2x1ZGUgYW55IGlucHV0IHZhbHVlcyB3aXRoaW4gaXRcbiAgICAgIGlmICghbWF0Y2hlcyhub2RlLCAnZm9ybScpKSB7XG4gICAgICAgIGZvckVhY2goYXNQYXJlbnROb2RlKG5vZGUpLnF1ZXJ5U2VsZWN0b3JBbGwoSU5QVVRfU0VMRUNUT1IpLCBmdW5jdGlvbihkZXNjZW5kYW50KSB7XG4gICAgICAgICAgcHJvY2Vzc0lucHV0VmFsdWUocHJvY2Vzc2VkLCBmb3JtRGF0YSwgZXJyb3JzLCBkZXNjZW5kYW50LCB2YWxpZGF0ZSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gdmFsdWVzIGZyb20gYSA8Zm9ybT4gdGFrZSBwcmVjZWRlbmNlLCBvdmVycmlkaW5nIHRoZSByZWd1bGFyIHZhbHVlc1xuICAgIG92ZXJyaWRlRm9ybURhdGEoZm9ybURhdGEsIHByaW9yaXR5Rm9ybURhdGEpXG5cbiAgICByZXR1cm4geyBlcnJvcnMsIGZvcm1EYXRhLCB2YWx1ZXM6IGZvcm1EYXRhUHJveHkoZm9ybURhdGEpIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmV0dXJuU3RyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7YW55fSByZWFsVmFsdWVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGZ1bmN0aW9uIGFwcGVuZFBhcmFtKHJldHVyblN0ciwgbmFtZSwgcmVhbFZhbHVlKSB7XG4gICAgaWYgKHJldHVyblN0ciAhPT0gJycpIHtcbiAgICAgIHJldHVyblN0ciArPSAnJidcbiAgICB9XG4gICAgaWYgKFN0cmluZyhyZWFsVmFsdWUpID09PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgcmVhbFZhbHVlID0gSlNPTi5zdHJpbmdpZnkocmVhbFZhbHVlKVxuICAgIH1cbiAgICBjb25zdCBzID0gZW5jb2RlVVJJQ29tcG9uZW50KHJlYWxWYWx1ZSlcbiAgICByZXR1cm5TdHIgKz0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpICsgJz0nICsgc1xuICAgIHJldHVybiByZXR1cm5TdHJcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0Zvcm1EYXRhfE9iamVjdH0gdmFsdWVzXG4gICAqIEByZXR1cm5zIHN0cmluZ1xuICAgKi9cbiAgZnVuY3Rpb24gdXJsRW5jb2RlKHZhbHVlcykge1xuICAgIHZhbHVlcyA9IGZvcm1EYXRhRnJvbU9iamVjdCh2YWx1ZXMpXG4gICAgbGV0IHJldHVyblN0ciA9ICcnXG4gICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgcmV0dXJuU3RyID0gYXBwZW5kUGFyYW0ocmV0dXJuU3RyLCBrZXksIHZhbHVlKVxuICAgIH0pXG4gICAgcmV0dXJuIHJldHVyblN0clxuICB9XG5cbiAgLy89ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gQWpheFxuICAvLz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAqIEBwYXJhbSB7RWxlbWVudH0gdGFyZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvbXB0XG4gKiBAcmV0dXJucyB7SHRteEhlYWRlclNwZWNpZmljYXRpb259XG4gKi9cbiAgZnVuY3Rpb24gZ2V0SGVhZGVycyhlbHQsIHRhcmdldCwgcHJvbXB0KSB7XG4gICAgLyoqIEB0eXBlIEh0bXhIZWFkZXJTcGVjaWZpY2F0aW9uICovXG4gICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICdIWC1SZXF1ZXN0JzogJ3RydWUnLFxuICAgICAgJ0hYLVRyaWdnZXInOiBnZXRSYXdBdHRyaWJ1dGUoZWx0LCAnaWQnKSxcbiAgICAgICdIWC1UcmlnZ2VyLU5hbWUnOiBnZXRSYXdBdHRyaWJ1dGUoZWx0LCAnbmFtZScpLFxuICAgICAgJ0hYLVRhcmdldCc6IGdldEF0dHJpYnV0ZVZhbHVlKHRhcmdldCwgJ2lkJyksXG4gICAgICAnSFgtQ3VycmVudC1VUkwnOiBnZXREb2N1bWVudCgpLmxvY2F0aW9uLmhyZWZcbiAgICB9XG4gICAgZ2V0VmFsdWVzRm9yRWxlbWVudChlbHQsICdoeC1oZWFkZXJzJywgZmFsc2UsIGhlYWRlcnMpXG4gICAgaWYgKHByb21wdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoZWFkZXJzWydIWC1Qcm9tcHQnXSA9IHByb21wdFxuICAgIH1cbiAgICBpZiAoZ2V0SW50ZXJuYWxEYXRhKGVsdCkuYm9vc3RlZCkge1xuICAgICAgaGVhZGVyc1snSFgtQm9vc3RlZCddID0gJ3RydWUnXG4gICAgfVxuICAgIHJldHVybiBoZWFkZXJzXG4gIH1cblxuICAvKipcbiAqIGZpbHRlclZhbHVlcyB0YWtlcyBhbiBvYmplY3QgY29udGFpbmluZyBmb3JtIGlucHV0IHZhbHVlc1xuICogYW5kIHJldHVybnMgYSBuZXcgb2JqZWN0IHRoYXQgb25seSBjb250YWlucyBrZXlzIHRoYXQgYXJlXG4gKiBzcGVjaWZpZWQgYnkgdGhlIGNsb3Nlc3QgXCJoeC1wYXJhbXNcIiBhdHRyaWJ1dGVcbiAqIEBwYXJhbSB7Rm9ybURhdGF9IGlucHV0VmFsdWVzXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICogQHJldHVybnMge0Zvcm1EYXRhfVxuICovXG4gIGZ1bmN0aW9uIGZpbHRlclZhbHVlcyhpbnB1dFZhbHVlcywgZWx0KSB7XG4gICAgY29uc3QgcGFyYW1zVmFsdWUgPSBnZXRDbG9zZXN0QXR0cmlidXRlVmFsdWUoZWx0LCAnaHgtcGFyYW1zJylcbiAgICBpZiAocGFyYW1zVmFsdWUpIHtcbiAgICAgIGlmIChwYXJhbXNWYWx1ZSA9PT0gJ25vbmUnKSB7XG4gICAgICAgIHJldHVybiBuZXcgRm9ybURhdGEoKVxuICAgICAgfSBlbHNlIGlmIChwYXJhbXNWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgIHJldHVybiBpbnB1dFZhbHVlc1xuICAgICAgfSBlbHNlIGlmIChwYXJhbXNWYWx1ZS5pbmRleE9mKCdub3QgJykgPT09IDApIHtcbiAgICAgICAgZm9yRWFjaChwYXJhbXNWYWx1ZS5zdWJzdHIoNCkuc3BsaXQoJywnKSwgZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgIG5hbWUgPSBuYW1lLnRyaW0oKVxuICAgICAgICAgIGlucHV0VmFsdWVzLmRlbGV0ZShuYW1lKVxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gaW5wdXRWYWx1ZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlcyA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICAgIGZvckVhY2gocGFyYW1zVmFsdWUuc3BsaXQoJywnKSwgZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgIG5hbWUgPSBuYW1lLnRyaW0oKVxuICAgICAgICAgIGlmIChpbnB1dFZhbHVlcy5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIGlucHV0VmFsdWVzLmdldEFsbChuYW1lKS5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7IG5ld1ZhbHVlcy5hcHBlbmQobmFtZSwgdmFsdWUpIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gbmV3VmFsdWVzXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpbnB1dFZhbHVlc1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gaXNBbmNob3JMaW5rKGVsdCkge1xuICAgIHJldHVybiAhIWdldFJhd0F0dHJpYnV0ZShlbHQsICdocmVmJykgJiYgZ2V0UmF3QXR0cmlidXRlKGVsdCwgJ2hyZWYnKS5pbmRleE9mKCcjJykgPj0gMFxuICB9XG5cbiAgLyoqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICogQHBhcmFtIHtIdG14U3dhcFN0eWxlfSBbc3dhcEluZm9PdmVycmlkZV1cbiAqIEByZXR1cm5zIHtIdG14U3dhcFNwZWNpZmljYXRpb259XG4gKi9cbiAgZnVuY3Rpb24gZ2V0U3dhcFNwZWNpZmljYXRpb24oZWx0LCBzd2FwSW5mb092ZXJyaWRlKSB7XG4gICAgY29uc3Qgc3dhcEluZm8gPSBzd2FwSW5mb092ZXJyaWRlIHx8IGdldENsb3Nlc3RBdHRyaWJ1dGVWYWx1ZShlbHQsICdoeC1zd2FwJylcbiAgICAvKiogQHR5cGUgSHRteFN3YXBTcGVjaWZpY2F0aW9uICovXG4gICAgY29uc3Qgc3dhcFNwZWMgPSB7XG4gICAgICBzd2FwU3R5bGU6IGdldEludGVybmFsRGF0YShlbHQpLmJvb3N0ZWQgPyAnaW5uZXJIVE1MJyA6IGh0bXguY29uZmlnLmRlZmF1bHRTd2FwU3R5bGUsXG4gICAgICBzd2FwRGVsYXk6IGh0bXguY29uZmlnLmRlZmF1bHRTd2FwRGVsYXksXG4gICAgICBzZXR0bGVEZWxheTogaHRteC5jb25maWcuZGVmYXVsdFNldHRsZURlbGF5XG4gICAgfVxuICAgIGlmIChodG14LmNvbmZpZy5zY3JvbGxJbnRvVmlld09uQm9vc3QgJiYgZ2V0SW50ZXJuYWxEYXRhKGVsdCkuYm9vc3RlZCAmJiAhaXNBbmNob3JMaW5rKGVsdCkpIHtcbiAgICAgIHN3YXBTcGVjLnNob3cgPSAndG9wJ1xuICAgIH1cbiAgICBpZiAoc3dhcEluZm8pIHtcbiAgICAgIGNvbnN0IHNwbGl0ID0gc3BsaXRPbldoaXRlc3BhY2Uoc3dhcEluZm8pXG4gICAgICBpZiAoc3BsaXQubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwbGl0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBzcGxpdFtpXVxuICAgICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKCdzd2FwOicpID09PSAwKSB7XG4gICAgICAgICAgICBzd2FwU3BlYy5zd2FwRGVsYXkgPSBwYXJzZUludGVydmFsKHZhbHVlLnN1YnN0cig1KSlcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmluZGV4T2YoJ3NldHRsZTonKSA9PT0gMCkge1xuICAgICAgICAgICAgc3dhcFNwZWMuc2V0dGxlRGVsYXkgPSBwYXJzZUludGVydmFsKHZhbHVlLnN1YnN0cig3KSlcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmluZGV4T2YoJ3RyYW5zaXRpb246JykgPT09IDApIHtcbiAgICAgICAgICAgIHN3YXBTcGVjLnRyYW5zaXRpb24gPSB2YWx1ZS5zdWJzdHIoMTEpID09PSAndHJ1ZSdcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmluZGV4T2YoJ2lnbm9yZVRpdGxlOicpID09PSAwKSB7XG4gICAgICAgICAgICBzd2FwU3BlYy5pZ25vcmVUaXRsZSA9IHZhbHVlLnN1YnN0cigxMikgPT09ICd0cnVlJ1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUuaW5kZXhPZignc2Nyb2xsOicpID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxTcGVjID0gdmFsdWUuc3Vic3RyKDcpXG4gICAgICAgICAgICB2YXIgc3BsaXRTcGVjID0gc2Nyb2xsU3BlYy5zcGxpdCgnOicpXG4gICAgICAgICAgICBjb25zdCBzY3JvbGxWYWwgPSBzcGxpdFNwZWMucG9wKClcbiAgICAgICAgICAgIHZhciBzZWxlY3RvclZhbCA9IHNwbGl0U3BlYy5sZW5ndGggPiAwID8gc3BsaXRTcGVjLmpvaW4oJzonKSA6IG51bGxcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIHN3YXBTcGVjLnNjcm9sbCA9IHNjcm9sbFZhbFxuICAgICAgICAgICAgc3dhcFNwZWMuc2Nyb2xsVGFyZ2V0ID0gc2VsZWN0b3JWYWxcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmluZGV4T2YoJ3Nob3c6JykgPT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHNob3dTcGVjID0gdmFsdWUuc3Vic3RyKDUpXG4gICAgICAgICAgICB2YXIgc3BsaXRTcGVjID0gc2hvd1NwZWMuc3BsaXQoJzonKVxuICAgICAgICAgICAgY29uc3Qgc2hvd1ZhbCA9IHNwbGl0U3BlYy5wb3AoKVxuICAgICAgICAgICAgdmFyIHNlbGVjdG9yVmFsID0gc3BsaXRTcGVjLmxlbmd0aCA+IDAgPyBzcGxpdFNwZWMuam9pbignOicpIDogbnVsbFxuICAgICAgICAgICAgc3dhcFNwZWMuc2hvdyA9IHNob3dWYWxcbiAgICAgICAgICAgIHN3YXBTcGVjLnNob3dUYXJnZXQgPSBzZWxlY3RvclZhbFxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUuaW5kZXhPZignZm9jdXMtc2Nyb2xsOicpID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBmb2N1c1Njcm9sbFZhbCA9IHZhbHVlLnN1YnN0cignZm9jdXMtc2Nyb2xsOicubGVuZ3RoKVxuICAgICAgICAgICAgc3dhcFNwZWMuZm9jdXNTY3JvbGwgPSBmb2N1c1Njcm9sbFZhbCA9PSAndHJ1ZSdcbiAgICAgICAgICB9IGVsc2UgaWYgKGkgPT0gMCkge1xuICAgICAgICAgICAgc3dhcFNwZWMuc3dhcFN0eWxlID0gdmFsdWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9nRXJyb3IoJ1Vua25vd24gbW9kaWZpZXIgaW4gaHgtc3dhcDogJyArIHZhbHVlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3dhcFNwZWNcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gdXNlc0Zvcm1EYXRhKGVsdCkge1xuICAgIHJldHVybiBnZXRDbG9zZXN0QXR0cmlidXRlVmFsdWUoZWx0LCAnaHgtZW5jb2RpbmcnKSA9PT0gJ211bHRpcGFydC9mb3JtLWRhdGEnIHx8XG4gICAgKG1hdGNoZXMoZWx0LCAnZm9ybScpICYmIGdldFJhd0F0dHJpYnV0ZShlbHQsICdlbmN0eXBlJykgPT09ICdtdWx0aXBhcnQvZm9ybS1kYXRhJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1hNTEh0dHBSZXF1ZXN0fSB4aHJcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAgICogQHBhcmFtIHtGb3JtRGF0YX0gZmlsdGVyZWRQYXJhbWV0ZXJzXG4gICAqIEByZXR1cm5zIHsqfHN0cmluZ3xudWxsfVxuICAgKi9cbiAgZnVuY3Rpb24gZW5jb2RlUGFyYW1zRm9yQm9keSh4aHIsIGVsdCwgZmlsdGVyZWRQYXJhbWV0ZXJzKSB7XG4gICAgbGV0IGVuY29kZWRQYXJhbWV0ZXJzID0gbnVsbFxuICAgIHdpdGhFeHRlbnNpb25zKGVsdCwgZnVuY3Rpb24oZXh0ZW5zaW9uKSB7XG4gICAgICBpZiAoZW5jb2RlZFBhcmFtZXRlcnMgPT0gbnVsbCkge1xuICAgICAgICBlbmNvZGVkUGFyYW1ldGVycyA9IGV4dGVuc2lvbi5lbmNvZGVQYXJhbWV0ZXJzKHhociwgZmlsdGVyZWRQYXJhbWV0ZXJzLCBlbHQpXG4gICAgICB9XG4gICAgfSlcbiAgICBpZiAoZW5jb2RlZFBhcmFtZXRlcnMgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGVuY29kZWRQYXJhbWV0ZXJzXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh1c2VzRm9ybURhdGEoZWx0KSkge1xuICAgICAgICAvLyBGb3JjZSBjb252ZXJzaW9uIHRvIGFuIGFjdHVhbCBGb3JtRGF0YSBvYmplY3QgaW4gY2FzZSBmaWx0ZXJlZFBhcmFtZXRlcnMgaXMgYSBmb3JtRGF0YVByb3h5XG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYmlnc2t5c29mdHdhcmUvaHRteC9pc3N1ZXMvMjMxN1xuICAgICAgICByZXR1cm4gb3ZlcnJpZGVGb3JtRGF0YShuZXcgRm9ybURhdGEoKSwgZm9ybURhdGFGcm9tT2JqZWN0KGZpbHRlcmVkUGFyYW1ldGVycykpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdXJsRW5jb2RlKGZpbHRlcmVkUGFyYW1ldGVycylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IHRhcmdldFxuICogQHJldHVybnMge0h0bXhTZXR0bGVJbmZvfVxuICovXG4gIGZ1bmN0aW9uIG1ha2VTZXR0bGVJbmZvKHRhcmdldCkge1xuICAgIHJldHVybiB7IHRhc2tzOiBbXSwgZWx0czogW3RhcmdldF0gfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudFtdfSBjb250ZW50XG4gICAqIEBwYXJhbSB7SHRteFN3YXBTcGVjaWZpY2F0aW9ufSBzd2FwU3BlY1xuICAgKi9cbiAgZnVuY3Rpb24gdXBkYXRlU2Nyb2xsU3RhdGUoY29udGVudCwgc3dhcFNwZWMpIHtcbiAgICBjb25zdCBmaXJzdCA9IGNvbnRlbnRbMF1cbiAgICBjb25zdCBsYXN0ID0gY29udGVudFtjb250ZW50Lmxlbmd0aCAtIDFdXG4gICAgaWYgKHN3YXBTcGVjLnNjcm9sbCkge1xuICAgICAgdmFyIHRhcmdldCA9IG51bGxcbiAgICAgIGlmIChzd2FwU3BlYy5zY3JvbGxUYXJnZXQpIHtcbiAgICAgICAgdGFyZ2V0ID0gYXNFbGVtZW50KHF1ZXJ5U2VsZWN0b3JFeHQoZmlyc3QsIHN3YXBTcGVjLnNjcm9sbFRhcmdldCkpXG4gICAgICB9XG4gICAgICBpZiAoc3dhcFNwZWMuc2Nyb2xsID09PSAndG9wJyAmJiAoZmlyc3QgfHwgdGFyZ2V0KSkge1xuICAgICAgICB0YXJnZXQgPSB0YXJnZXQgfHwgZmlyc3RcbiAgICAgICAgdGFyZ2V0LnNjcm9sbFRvcCA9IDBcbiAgICAgIH1cbiAgICAgIGlmIChzd2FwU3BlYy5zY3JvbGwgPT09ICdib3R0b20nICYmIChsYXN0IHx8IHRhcmdldCkpIHtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0IHx8IGxhc3RcbiAgICAgICAgdGFyZ2V0LnNjcm9sbFRvcCA9IHRhcmdldC5zY3JvbGxIZWlnaHRcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN3YXBTcGVjLnNob3cpIHtcbiAgICAgIHZhciB0YXJnZXQgPSBudWxsXG4gICAgICBpZiAoc3dhcFNwZWMuc2hvd1RhcmdldCkge1xuICAgICAgICBsZXQgdGFyZ2V0U3RyID0gc3dhcFNwZWMuc2hvd1RhcmdldFxuICAgICAgICBpZiAoc3dhcFNwZWMuc2hvd1RhcmdldCA9PT0gJ3dpbmRvdycpIHtcbiAgICAgICAgICB0YXJnZXRTdHIgPSAnYm9keSdcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXQgPSBhc0VsZW1lbnQocXVlcnlTZWxlY3RvckV4dChmaXJzdCwgdGFyZ2V0U3RyKSlcbiAgICAgIH1cbiAgICAgIGlmIChzd2FwU3BlYy5zaG93ID09PSAndG9wJyAmJiAoZmlyc3QgfHwgdGFyZ2V0KSkge1xuICAgICAgICB0YXJnZXQgPSB0YXJnZXQgfHwgZmlyc3RcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBGb3Igc29tZSByZWFzb24gdHNjIGRvZXNuJ3QgcmVjb2duaXplIFwiaW5zdGFudFwiIGFzIGEgdmFsaWQgb3B0aW9uIGZvciBub3dcbiAgICAgICAgdGFyZ2V0LnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdzdGFydCcsIGJlaGF2aW9yOiBodG14LmNvbmZpZy5zY3JvbGxCZWhhdmlvciB9KVxuICAgICAgfVxuICAgICAgaWYgKHN3YXBTcGVjLnNob3cgPT09ICdib3R0b20nICYmIChsYXN0IHx8IHRhcmdldCkpIHtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0IHx8IGxhc3RcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBGb3Igc29tZSByZWFzb24gdHNjIGRvZXNuJ3QgcmVjb2duaXplIFwiaW5zdGFudFwiIGFzIGEgdmFsaWQgb3B0aW9uIGZvciBub3dcbiAgICAgICAgdGFyZ2V0LnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdlbmQnLCBiZWhhdmlvcjogaHRteC5jb25maWcuc2Nyb2xsQmVoYXZpb3IgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXR0clxuICogQHBhcmFtIHtib29sZWFuPX0gZXZhbEFzRGVmYXVsdFxuICogQHBhcmFtIHtPYmplY3Q9fSB2YWx1ZXNcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbiAgZnVuY3Rpb24gZ2V0VmFsdWVzRm9yRWxlbWVudChlbHQsIGF0dHIsIGV2YWxBc0RlZmF1bHQsIHZhbHVlcykge1xuICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkge1xuICAgICAgdmFsdWVzID0ge31cbiAgICB9XG4gICAgaWYgKGVsdCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdmFsdWVzXG4gICAgfVxuICAgIGNvbnN0IGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlVmFsdWUoZWx0LCBhdHRyKVxuICAgIGlmIChhdHRyaWJ1dGVWYWx1ZSkge1xuICAgICAgbGV0IHN0ciA9IGF0dHJpYnV0ZVZhbHVlLnRyaW0oKVxuICAgICAgbGV0IGV2YWx1YXRlVmFsdWUgPSBldmFsQXNEZWZhdWx0XG4gICAgICBpZiAoc3RyID09PSAndW5zZXQnKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICBpZiAoc3RyLmluZGV4T2YoJ2phdmFzY3JpcHQ6JykgPT09IDApIHtcbiAgICAgICAgc3RyID0gc3RyLnN1YnN0cigxMSlcbiAgICAgICAgZXZhbHVhdGVWYWx1ZSA9IHRydWVcbiAgICAgIH0gZWxzZSBpZiAoc3RyLmluZGV4T2YoJ2pzOicpID09PSAwKSB7XG4gICAgICAgIHN0ciA9IHN0ci5zdWJzdHIoMylcbiAgICAgICAgZXZhbHVhdGVWYWx1ZSA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmIChzdHIuaW5kZXhPZigneycpICE9PSAwKSB7XG4gICAgICAgIHN0ciA9ICd7JyArIHN0ciArICd9J1xuICAgICAgfVxuICAgICAgbGV0IHZhcnNWYWx1ZXNcbiAgICAgIGlmIChldmFsdWF0ZVZhbHVlKSB7XG4gICAgICAgIHZhcnNWYWx1ZXMgPSBtYXliZUV2YWwoZWx0LCBmdW5jdGlvbigpIHsgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gKCcgKyBzdHIgKyAnKScpKCkgfSwge30pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXJzVmFsdWVzID0gcGFyc2VKU09OKHN0cilcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHZhcnNWYWx1ZXMpIHtcbiAgICAgICAgaWYgKHZhcnNWYWx1ZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIGlmICh2YWx1ZXNba2V5XSA9PSBudWxsKSB7XG4gICAgICAgICAgICB2YWx1ZXNba2V5XSA9IHZhcnNWYWx1ZXNba2V5XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZ2V0VmFsdWVzRm9yRWxlbWVudChhc0VsZW1lbnQocGFyZW50RWx0KGVsdCkpLCBhdHRyLCBldmFsQXNEZWZhdWx0LCB2YWx1ZXMpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFdmVudFRhcmdldHxzdHJpbmd9IGVsdFxuICAgKiBAcGFyYW0geygpID0+IGFueX0gdG9FdmFsXG4gICAqIEBwYXJhbSB7YW55PX0gZGVmYXVsdFZhbFxuICAgKiBAcmV0dXJucyB7YW55fVxuICAgKi9cbiAgZnVuY3Rpb24gbWF5YmVFdmFsKGVsdCwgdG9FdmFsLCBkZWZhdWx0VmFsKSB7XG4gICAgaWYgKGh0bXguY29uZmlnLmFsbG93RXZhbCkge1xuICAgICAgcmV0dXJuIHRvRXZhbCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRyaWdnZXJFcnJvckV2ZW50KGVsdCwgJ2h0bXg6ZXZhbERpc2FsbG93ZWRFcnJvcicpXG4gICAgICByZXR1cm4gZGVmYXVsdFZhbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAqIEBwYXJhbSB7Kj99IGV4cHJlc3Npb25WYXJzXG4gKiBAcmV0dXJuc1xuICovXG4gIGZ1bmN0aW9uIGdldEhYVmFyc0ZvckVsZW1lbnQoZWx0LCBleHByZXNzaW9uVmFycykge1xuICAgIHJldHVybiBnZXRWYWx1ZXNGb3JFbGVtZW50KGVsdCwgJ2h4LXZhcnMnLCB0cnVlLCBleHByZXNzaW9uVmFycylcbiAgfVxuXG4gIC8qKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAqIEBwYXJhbSB7Kj99IGV4cHJlc3Npb25WYXJzXG4gKiBAcmV0dXJuc1xuICovXG4gIGZ1bmN0aW9uIGdldEhYVmFsc0ZvckVsZW1lbnQoZWx0LCBleHByZXNzaW9uVmFycykge1xuICAgIHJldHVybiBnZXRWYWx1ZXNGb3JFbGVtZW50KGVsdCwgJ2h4LXZhbHMnLCBmYWxzZSwgZXhwcmVzc2lvblZhcnMpXG4gIH1cblxuICAvKipcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gKiBAcmV0dXJucyB7Rm9ybURhdGF9XG4gKi9cbiAgZnVuY3Rpb24gZ2V0RXhwcmVzc2lvblZhcnMoZWx0KSB7XG4gICAgcmV0dXJuIG1lcmdlT2JqZWN0cyhnZXRIWFZhcnNGb3JFbGVtZW50KGVsdCksIGdldEhYVmFsc0ZvckVsZW1lbnQoZWx0KSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1hNTEh0dHBSZXF1ZXN0fSB4aHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlclxuICAgKiBAcGFyYW0ge3N0cmluZ3xudWxsfSBoZWFkZXJWYWx1ZVxuICAgKi9cbiAgZnVuY3Rpb24gc2FmZWx5U2V0SGVhZGVyVmFsdWUoeGhyLCBoZWFkZXIsIGhlYWRlclZhbHVlKSB7XG4gICAgaWYgKGhlYWRlclZhbHVlICE9PSBudWxsKSB7XG4gICAgICB0cnkge1xuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihoZWFkZXIsIGhlYWRlclZhbHVlKVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gT24gYW4gZXhjZXB0aW9uLCB0cnkgdG8gc2V0IHRoZSBoZWFkZXIgVVJJIGVuY29kZWQgaW5zdGVhZFxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihoZWFkZXIsIGVuY29kZVVSSUNvbXBvbmVudChoZWFkZXJWYWx1ZSkpXG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGhlYWRlciArICctVVJJLUF1dG9FbmNvZGVkJywgJ3RydWUnKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1hNTEh0dHBSZXF1ZXN0fSB4aHJcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0UGF0aEZyb21SZXNwb25zZSh4aHIpIHtcbiAgLy8gTkI6IElFMTEgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIHN0dWZmXG4gICAgaWYgKHhoci5yZXNwb25zZVVSTCAmJiB0eXBlb2YgKFVSTCkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHhoci5yZXNwb25zZVVSTClcbiAgICAgICAgcmV0dXJuIHVybC5wYXRobmFtZSArIHVybC5zZWFyY2hcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJpZ2dlckVycm9yRXZlbnQoZ2V0RG9jdW1lbnQoKS5ib2R5LCAnaHRteDpiYWRSZXNwb25zZVVybCcsIHsgdXJsOiB4aHIucmVzcG9uc2VVUkwgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtYTUxIdHRwUmVxdWVzdH0geGhyXG4gICAqIEBwYXJhbSB7UmVnRXhwfSByZWdleHBcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIGhhc0hlYWRlcih4aHIsIHJlZ2V4cCkge1xuICAgIHJldHVybiByZWdleHAudGVzdCh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpXG4gIH1cblxuICAvKipcbiAgICogSXNzdWVzIGFuIGh0bXgtc3R5bGUgQUpBWCByZXF1ZXN0XG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9odG14Lm9yZy9hcGkvI2FqYXhcbiAgICpcbiAgICogQHBhcmFtIHtIdHRwVmVyYn0gdmVyYlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aCB0aGUgVVJMIHBhdGggdG8gbWFrZSB0aGUgQUpBWFxuICAgKiBAcGFyYW0ge0VsZW1lbnR8c3RyaW5nfEh0bXhBamF4SGVscGVyQ29udGV4dH0gY29udGV4dCB0aGUgZWxlbWVudCB0byB0YXJnZXQgKGRlZmF1bHRzIHRvIHRoZSAqKmJvZHkqKikgfCBhIHNlbGVjdG9yIGZvciB0aGUgdGFyZ2V0IHwgYSBjb250ZXh0IG9iamVjdCB0aGF0IGNvbnRhaW5zIGFueSBvZiB0aGUgZm9sbG93aW5nXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IFByb21pc2UgdGhhdCByZXNvbHZlcyBpbW1lZGlhdGVseSBpZiBubyByZXF1ZXN0IGlzIHNlbnQsIG9yIHdoZW4gdGhlIHJlcXVlc3QgaXMgY29tcGxldGVcbiAgICovXG4gIGZ1bmN0aW9uIGFqYXhIZWxwZXIodmVyYiwgcGF0aCwgY29udGV4dCkge1xuICAgIHZlcmIgPSAoLyoqIEB0eXBlIEh0dHBWZXJiICovKHZlcmIudG9Mb3dlckNhc2UoKSkpXG4gICAgaWYgKGNvbnRleHQpIHtcbiAgICAgIGlmIChjb250ZXh0IGluc3RhbmNlb2YgRWxlbWVudCB8fCB0eXBlb2YgY29udGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGlzc3VlQWpheFJlcXVlc3QodmVyYiwgcGF0aCwgbnVsbCwgbnVsbCwge1xuICAgICAgICAgIHRhcmdldE92ZXJyaWRlOiByZXNvbHZlVGFyZ2V0KGNvbnRleHQpLFxuICAgICAgICAgIHJldHVyblByb21pc2U6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpc3N1ZUFqYXhSZXF1ZXN0KHZlcmIsIHBhdGgsIHJlc29sdmVUYXJnZXQoY29udGV4dC5zb3VyY2UpLCBjb250ZXh0LmV2ZW50LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhhbmRsZXI6IGNvbnRleHQuaGFuZGxlcixcbiAgICAgICAgICAgIGhlYWRlcnM6IGNvbnRleHQuaGVhZGVycyxcbiAgICAgICAgICAgIHZhbHVlczogY29udGV4dC52YWx1ZXMsXG4gICAgICAgICAgICB0YXJnZXRPdmVycmlkZTogcmVzb2x2ZVRhcmdldChjb250ZXh0LnRhcmdldCksXG4gICAgICAgICAgICBzd2FwT3ZlcnJpZGU6IGNvbnRleHQuc3dhcCxcbiAgICAgICAgICAgIHNlbGVjdDogY29udGV4dC5zZWxlY3QsXG4gICAgICAgICAgICByZXR1cm5Qcm9taXNlOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGlzc3VlQWpheFJlcXVlc3QodmVyYiwgcGF0aCwgbnVsbCwgbnVsbCwge1xuICAgICAgICByZXR1cm5Qcm9taXNlOiB0cnVlXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcmV0dXJuIHtFbGVtZW50W119XG4gICAqL1xuICBmdW5jdGlvbiBoaWVyYXJjaHlGb3JFbHQoZWx0KSB7XG4gICAgY29uc3QgYXJyID0gW11cbiAgICB3aGlsZSAoZWx0KSB7XG4gICAgICBhcnIucHVzaChlbHQpXG4gICAgICBlbHQgPSBlbHQucGFyZW50RWxlbWVudFxuICAgIH1cbiAgICByZXR1cm4gYXJyXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtFbGVtZW50fSBlbHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICogQHBhcmFtIHtIdG14UmVxdWVzdENvbmZpZ30gcmVxdWVzdENvbmZpZ1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gdmVyaWZ5UGF0aChlbHQsIHBhdGgsIHJlcXVlc3RDb25maWcpIHtcbiAgICBsZXQgc2FtZUhvc3RcbiAgICBsZXQgdXJsXG4gICAgaWYgKHR5cGVvZiBVUkwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHVybCA9IG5ldyBVUkwocGF0aCwgZG9jdW1lbnQubG9jYXRpb24uaHJlZilcbiAgICAgIGNvbnN0IG9yaWdpbiA9IGRvY3VtZW50LmxvY2F0aW9uLm9yaWdpblxuICAgICAgc2FtZUhvc3QgPSBvcmlnaW4gPT09IHVybC5vcmlnaW5cbiAgICB9IGVsc2Uge1xuICAgIC8vIElFMTEgZG9lc24ndCBzdXBwb3J0IFVSTFxuICAgICAgdXJsID0gcGF0aFxuICAgICAgc2FtZUhvc3QgPSBzdGFydHNXaXRoKHBhdGgsIGRvY3VtZW50LmxvY2F0aW9uLm9yaWdpbilcbiAgICB9XG5cbiAgICBpZiAoaHRteC5jb25maWcuc2VsZlJlcXVlc3RzT25seSkge1xuICAgICAgaWYgKCFzYW1lSG9zdCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRyaWdnZXJFdmVudChlbHQsICdodG14OnZhbGlkYXRlVXJsJywgbWVyZ2VPYmplY3RzKHsgdXJsLCBzYW1lSG9zdCB9LCByZXF1ZXN0Q29uZmlnKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09iamVjdHxGb3JtRGF0YX0gb2JqXG4gICAqIEByZXR1cm4ge0Zvcm1EYXRhfVxuICAgKi9cbiAgZnVuY3Rpb24gZm9ybURhdGFGcm9tT2JqZWN0KG9iaikge1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBGb3JtRGF0YSkgcmV0dXJuIG9ialxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBpZiAodHlwZW9mIG9ialtrZXldLmZvckVhY2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvYmpba2V5XS5mb3JFYWNoKGZ1bmN0aW9uKHYpIHsgZm9ybURhdGEuYXBwZW5kKGtleSwgdikgfSlcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqW2tleV0gPT09ICdvYmplY3QnICYmICEob2JqW2tleV0gaW5zdGFuY2VvZiBCbG9iKSkge1xuICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIEpTT04uc3RyaW5naWZ5KG9ialtrZXldKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBvYmpba2V5XSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm9ybURhdGFcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0Zvcm1EYXRhfSBmb3JtRGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqL1xuICBmdW5jdGlvbiBmb3JtRGF0YUFycmF5UHJveHkoZm9ybURhdGEsIG5hbWUsIGFycmF5KSB7XG4gICAgLy8gbXV0YXRpbmcgdGhlIGFycmF5IHNob3VsZCBtdXRhdGUgdGhlIHVuZGVybHlpbmcgZm9ybSBkYXRhXG4gICAgcmV0dXJuIG5ldyBQcm94eShhcnJheSwge1xuICAgICAgZ2V0OiBmdW5jdGlvbih0YXJnZXQsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ251bWJlcicpIHJldHVybiB0YXJnZXRba2V5XVxuICAgICAgICBpZiAoa2V5ID09PSAnbGVuZ3RoJykgcmV0dXJuIHRhcmdldC5sZW5ndGhcbiAgICAgICAgaWYgKGtleSA9PT0gJ3B1c2gnKSB7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICB0YXJnZXQucHVzaCh2YWx1ZSlcbiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXRba2V5XSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHRhcmdldFtrZXldLmFwcGx5KHRhcmdldCwgYXJndW1lbnRzKVxuICAgICAgICAgICAgZm9ybURhdGEuZGVsZXRlKG5hbWUpXG4gICAgICAgICAgICB0YXJnZXQuZm9yRWFjaChmdW5jdGlvbih2KSB7IGZvcm1EYXRhLmFwcGVuZChuYW1lLCB2KSB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXRba2V5XSAmJiB0YXJnZXRba2V5XS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gdGFyZ2V0W2tleV1bMF1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGFyZ2V0W2tleV1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odGFyZ2V0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgICAgdGFyZ2V0W2luZGV4XSA9IHZhbHVlXG4gICAgICAgIGZvcm1EYXRhLmRlbGV0ZShuYW1lKVxuICAgICAgICB0YXJnZXQuZm9yRWFjaChmdW5jdGlvbih2KSB7IGZvcm1EYXRhLmFwcGVuZChuYW1lLCB2KSB9KVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtGb3JtRGF0YX0gZm9ybURhdGFcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG4gIGZ1bmN0aW9uIGZvcm1EYXRhUHJveHkoZm9ybURhdGEpIHtcbiAgICByZXR1cm4gbmV3IFByb3h5KGZvcm1EYXRhLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKHRhcmdldCwgbmFtZSkge1xuICAgICAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgLy8gRm9yd2FyZCBzeW1ib2wgY2FsbHMgdG8gdGhlIEZvcm1EYXRhIGl0c2VsZiBkaXJlY3RseVxuICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIG5hbWUpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWUgPT09ICd0b0pTT04nKSB7XG4gICAgICAgICAgLy8gU3VwcG9ydCBKU09OLnN0cmluZ2lmeSBjYWxsIG9uIHByb3h5XG4gICAgICAgICAgcmV0dXJuICgpID0+IE9iamVjdC5mcm9tRW50cmllcyhmb3JtRGF0YSlcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZSBpbiB0YXJnZXQpIHtcbiAgICAgICAgICAvLyBXcmFwIGluIGZ1bmN0aW9uIHdpdGggYXBwbHkgdG8gY29ycmVjdGx5IGJpbmQgdGhlIEZvcm1EYXRhIGNvbnRleHQsIGFzIGEgZGlyZWN0IGNhbGwgd291bGQgcmVzdWx0IGluIGFuIGlsbGVnYWwgaW52b2NhdGlvbiBlcnJvclxuICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0W25hbWVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb3JtRGF0YVtuYW1lXS5hcHBseShmb3JtRGF0YSwgYXJndW1lbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0W25hbWVdXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFycmF5ID0gZm9ybURhdGEuZ2V0QWxsKG5hbWUpXG4gICAgICAgIC8vIFRob3NlIDIgdW5kZWZpbmVkICYgc2luZ2xlIHZhbHVlIHJldHVybnMgYXJlIGZvciByZXRyby1jb21wYXRpYmlsaXR5IGFzIHdlIHdlcmVuJ3QgdXNpbmcgRm9ybURhdGEgYmVmb3JlXG4gICAgICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgIH0gZWxzZSBpZiAoYXJyYXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIGFycmF5WzBdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZvcm1EYXRhQXJyYXlQcm94eSh0YXJnZXQsIG5hbWUsIGFycmF5KVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbih0YXJnZXQsIG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXQuZGVsZXRlKG5hbWUpXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUuZm9yRWFjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24odikgeyB0YXJnZXQuYXBwZW5kKG5hbWUsIHYpIH0pXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhKHZhbHVlIGluc3RhbmNlb2YgQmxvYikpIHtcbiAgICAgICAgICB0YXJnZXQuYXBwZW5kKG5hbWUsIEpTT04uc3RyaW5naWZ5KHZhbHVlKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YXJnZXQuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9LFxuICAgICAgZGVsZXRlUHJvcGVydHk6IGZ1bmN0aW9uKHRhcmdldCwgbmFtZSkge1xuICAgICAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGFyZ2V0LmRlbGV0ZShuYW1lKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9LFxuICAgICAgLy8gU3VwcG9ydCBPYmplY3QuYXNzaWduIGNhbGwgZnJvbSBwcm94eVxuICAgICAgb3duS2V5czogZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiBSZWZsZWN0Lm93bktleXMoT2JqZWN0LmZyb21FbnRyaWVzKHRhcmdldCkpXG4gICAgICB9LFxuICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbih0YXJnZXQsIHByb3ApIHtcbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5mcm9tRW50cmllcyh0YXJnZXQpLCBwcm9wKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtIdHRwVmVyYn0gdmVyYlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcGFyYW0ge0V2ZW50fSBldmVudFxuICAgKiBAcGFyYW0ge0h0bXhBamF4RXRjfSBbZXRjXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb25maXJtZWRdXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBmdW5jdGlvbiBpc3N1ZUFqYXhSZXF1ZXN0KHZlcmIsIHBhdGgsIGVsdCwgZXZlbnQsIGV0YywgY29uZmlybWVkKSB7XG4gICAgbGV0IHJlc29sdmUgPSBudWxsXG4gICAgbGV0IHJlamVjdCA9IG51bGxcbiAgICBldGMgPSBldGMgIT0gbnVsbCA/IGV0YyA6IHt9XG4gICAgaWYgKGV0Yy5yZXR1cm5Qcm9taXNlICYmIHR5cGVvZiBQcm9taXNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihfcmVzb2x2ZSwgX3JlamVjdCkge1xuICAgICAgICByZXNvbHZlID0gX3Jlc29sdmVcbiAgICAgICAgcmVqZWN0ID0gX3JlamVjdFxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKGVsdCA9PSBudWxsKSB7XG4gICAgICBlbHQgPSBnZXREb2N1bWVudCgpLmJvZHlcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2VIYW5kbGVyID0gZXRjLmhhbmRsZXIgfHwgaGFuZGxlQWpheFJlc3BvbnNlXG4gICAgY29uc3Qgc2VsZWN0ID0gZXRjLnNlbGVjdCB8fCBudWxsXG5cbiAgICBpZiAoIWJvZHlDb250YWlucyhlbHQpKSB7XG4gICAgLy8gZG8gbm90IGlzc3VlIHJlcXVlc3RzIGZvciBlbGVtZW50cyByZW1vdmVkIGZyb20gdGhlIERPTVxuICAgICAgbWF5YmVDYWxsKHJlc29sdmUpXG4gICAgICByZXR1cm4gcHJvbWlzZVxuICAgIH1cbiAgICBjb25zdCB0YXJnZXQgPSBldGMudGFyZ2V0T3ZlcnJpZGUgfHwgYXNFbGVtZW50KGdldFRhcmdldChlbHQpKVxuICAgIGlmICh0YXJnZXQgPT0gbnVsbCB8fCB0YXJnZXQgPT0gRFVNTVlfRUxUKSB7XG4gICAgICB0cmlnZ2VyRXJyb3JFdmVudChlbHQsICdodG14OnRhcmdldEVycm9yJywgeyB0YXJnZXQ6IGdldEF0dHJpYnV0ZVZhbHVlKGVsdCwgJ2h4LXRhcmdldCcpIH0pXG4gICAgICBtYXliZUNhbGwocmVqZWN0KVxuICAgICAgcmV0dXJuIHByb21pc2VcbiAgICB9XG5cbiAgICBsZXQgZWx0RGF0YSA9IGdldEludGVybmFsRGF0YShlbHQpXG4gICAgY29uc3Qgc3VibWl0dGVyID0gZWx0RGF0YS5sYXN0QnV0dG9uQ2xpY2tlZFxuXG4gICAgaWYgKHN1Ym1pdHRlcikge1xuICAgICAgY29uc3QgYnV0dG9uUGF0aCA9IGdldFJhd0F0dHJpYnV0ZShzdWJtaXR0ZXIsICdmb3JtYWN0aW9uJylcbiAgICAgIGlmIChidXR0b25QYXRoICE9IG51bGwpIHtcbiAgICAgICAgcGF0aCA9IGJ1dHRvblBhdGhcbiAgICAgIH1cblxuICAgICAgY29uc3QgYnV0dG9uVmVyYiA9IGdldFJhd0F0dHJpYnV0ZShzdWJtaXR0ZXIsICdmb3JtbWV0aG9kJylcbiAgICAgIGlmIChidXR0b25WZXJiICE9IG51bGwpIHtcbiAgICAgIC8vIGlnbm9yZSBidXR0b25zIHdpdGggZm9ybW1ldGhvZD1cImRpYWxvZ1wiXG4gICAgICAgIGlmIChidXR0b25WZXJiLnRvTG93ZXJDYXNlKCkgIT09ICdkaWFsb2cnKSB7XG4gICAgICAgICAgdmVyYiA9ICgvKiogQHR5cGUgSHR0cFZlcmIgKi8oYnV0dG9uVmVyYikpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb25maXJtUXVlc3Rpb24gPSBnZXRDbG9zZXN0QXR0cmlidXRlVmFsdWUoZWx0LCAnaHgtY29uZmlybScpXG4gICAgLy8gYWxsb3cgZXZlbnQtYmFzZWQgY29uZmlybWF0aW9uIHcvIGEgY2FsbGJhY2tcbiAgICBpZiAoY29uZmlybWVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGlzc3VlUmVxdWVzdCA9IGZ1bmN0aW9uKHNraXBDb25maXJtYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIGlzc3VlQWpheFJlcXVlc3QodmVyYiwgcGF0aCwgZWx0LCBldmVudCwgZXRjLCAhIXNraXBDb25maXJtYXRpb24pXG4gICAgICB9XG4gICAgICBjb25zdCBjb25maXJtRGV0YWlscyA9IHsgdGFyZ2V0LCBlbHQsIHBhdGgsIHZlcmIsIHRyaWdnZXJpbmdFdmVudDogZXZlbnQsIGV0YywgaXNzdWVSZXF1ZXN0LCBxdWVzdGlvbjogY29uZmlybVF1ZXN0aW9uIH1cbiAgICAgIGlmICh0cmlnZ2VyRXZlbnQoZWx0LCAnaHRteDpjb25maXJtJywgY29uZmlybURldGFpbHMpID09PSBmYWxzZSkge1xuICAgICAgICBtYXliZUNhbGwocmVzb2x2ZSlcbiAgICAgICAgcmV0dXJuIHByb21pc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgc3luY0VsdCA9IGVsdFxuICAgIGxldCBzeW5jU3RyYXRlZ3kgPSBnZXRDbG9zZXN0QXR0cmlidXRlVmFsdWUoZWx0LCAnaHgtc3luYycpXG4gICAgbGV0IHF1ZXVlU3RyYXRlZ3kgPSBudWxsXG4gICAgbGV0IGFib3J0YWJsZSA9IGZhbHNlXG4gICAgaWYgKHN5bmNTdHJhdGVneSkge1xuICAgICAgY29uc3Qgc3luY1N0cmluZ3MgPSBzeW5jU3RyYXRlZ3kuc3BsaXQoJzonKVxuICAgICAgY29uc3Qgc2VsZWN0b3IgPSBzeW5jU3RyaW5nc1swXS50cmltKClcbiAgICAgIGlmIChzZWxlY3RvciA9PT0gJ3RoaXMnKSB7XG4gICAgICAgIHN5bmNFbHQgPSBmaW5kVGhpc0VsZW1lbnQoZWx0LCAnaHgtc3luYycpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzeW5jRWx0ID0gYXNFbGVtZW50KHF1ZXJ5U2VsZWN0b3JFeHQoZWx0LCBzZWxlY3RvcikpXG4gICAgICB9XG4gICAgICAvLyBkZWZhdWx0IHRvIHRoZSBkcm9wIHN0cmF0ZWd5XG4gICAgICBzeW5jU3RyYXRlZ3kgPSAoc3luY1N0cmluZ3NbMV0gfHwgJ2Ryb3AnKS50cmltKClcbiAgICAgIGVsdERhdGEgPSBnZXRJbnRlcm5hbERhdGEoc3luY0VsdClcbiAgICAgIGlmIChzeW5jU3RyYXRlZ3kgPT09ICdkcm9wJyAmJiBlbHREYXRhLnhociAmJiBlbHREYXRhLmFib3J0YWJsZSAhPT0gdHJ1ZSkge1xuICAgICAgICBtYXliZUNhbGwocmVzb2x2ZSlcbiAgICAgICAgcmV0dXJuIHByb21pc2VcbiAgICAgIH0gZWxzZSBpZiAoc3luY1N0cmF0ZWd5ID09PSAnYWJvcnQnKSB7XG4gICAgICAgIGlmIChlbHREYXRhLnhocikge1xuICAgICAgICAgIG1heWJlQ2FsbChyZXNvbHZlKVxuICAgICAgICAgIHJldHVybiBwcm9taXNlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWJvcnRhYmxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHN5bmNTdHJhdGVneSA9PT0gJ3JlcGxhY2UnKSB7XG4gICAgICAgIHRyaWdnZXJFdmVudChzeW5jRWx0LCAnaHRteDphYm9ydCcpIC8vIGFib3J0IHRoZSBjdXJyZW50IHJlcXVlc3QgYW5kIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgaWYgKHN5bmNTdHJhdGVneS5pbmRleE9mKCdxdWV1ZScpID09PSAwKSB7XG4gICAgICAgIGNvbnN0IHF1ZXVlU3RyQXJyYXkgPSBzeW5jU3RyYXRlZ3kuc3BsaXQoJyAnKVxuICAgICAgICBxdWV1ZVN0cmF0ZWd5ID0gKHF1ZXVlU3RyQXJyYXlbMV0gfHwgJ2xhc3QnKS50cmltKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZWx0RGF0YS54aHIpIHtcbiAgICAgIGlmIChlbHREYXRhLmFib3J0YWJsZSkge1xuICAgICAgICB0cmlnZ2VyRXZlbnQoc3luY0VsdCwgJ2h0bXg6YWJvcnQnKSAvLyBhYm9ydCB0aGUgY3VycmVudCByZXF1ZXN0IGFuZCBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHF1ZXVlU3RyYXRlZ3kgPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgY29uc3QgZXZlbnREYXRhID0gZ2V0SW50ZXJuYWxEYXRhKGV2ZW50KVxuICAgICAgICAgICAgaWYgKGV2ZW50RGF0YSAmJiBldmVudERhdGEudHJpZ2dlclNwZWMgJiYgZXZlbnREYXRhLnRyaWdnZXJTcGVjLnF1ZXVlKSB7XG4gICAgICAgICAgICAgIHF1ZXVlU3RyYXRlZ3kgPSBldmVudERhdGEudHJpZ2dlclNwZWMucXVldWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHF1ZXVlU3RyYXRlZ3kgPT0gbnVsbCkge1xuICAgICAgICAgICAgcXVldWVTdHJhdGVneSA9ICdsYXN0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZWx0RGF0YS5xdWV1ZWRSZXF1ZXN0cyA9PSBudWxsKSB7XG4gICAgICAgICAgZWx0RGF0YS5xdWV1ZWRSZXF1ZXN0cyA9IFtdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHF1ZXVlU3RyYXRlZ3kgPT09ICdmaXJzdCcgJiYgZWx0RGF0YS5xdWV1ZWRSZXF1ZXN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBlbHREYXRhLnF1ZXVlZFJlcXVlc3RzLnB1c2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpc3N1ZUFqYXhSZXF1ZXN0KHZlcmIsIHBhdGgsIGVsdCwgZXZlbnQsIGV0YylcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYgKHF1ZXVlU3RyYXRlZ3kgPT09ICdhbGwnKSB7XG4gICAgICAgICAgZWx0RGF0YS5xdWV1ZWRSZXF1ZXN0cy5wdXNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaXNzdWVBamF4UmVxdWVzdCh2ZXJiLCBwYXRoLCBlbHQsIGV2ZW50LCBldGMpXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIGlmIChxdWV1ZVN0cmF0ZWd5ID09PSAnbGFzdCcpIHtcbiAgICAgICAgICBlbHREYXRhLnF1ZXVlZFJlcXVlc3RzID0gW10gLy8gZHVtcCBleGlzdGluZyBxdWV1ZVxuICAgICAgICAgIGVsdERhdGEucXVldWVkUmVxdWVzdHMucHVzaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlzc3VlQWpheFJlcXVlc3QodmVyYiwgcGF0aCwgZWx0LCBldmVudCwgZXRjKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgbWF5YmVDYWxsKHJlc29sdmUpXG4gICAgICAgIHJldHVybiBwcm9taXNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KClcbiAgICBlbHREYXRhLnhociA9IHhoclxuICAgIGVsdERhdGEuYWJvcnRhYmxlID0gYWJvcnRhYmxlXG4gICAgY29uc3QgZW5kUmVxdWVzdExvY2sgPSBmdW5jdGlvbigpIHtcbiAgICAgIGVsdERhdGEueGhyID0gbnVsbFxuICAgICAgZWx0RGF0YS5hYm9ydGFibGUgPSBmYWxzZVxuICAgICAgaWYgKGVsdERhdGEucXVldWVkUmVxdWVzdHMgIT0gbnVsbCAmJlxuICAgICAgZWx0RGF0YS5xdWV1ZWRSZXF1ZXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHF1ZXVlZFJlcXVlc3QgPSBlbHREYXRhLnF1ZXVlZFJlcXVlc3RzLnNoaWZ0KClcbiAgICAgICAgcXVldWVkUmVxdWVzdCgpXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHByb21wdFF1ZXN0aW9uID0gZ2V0Q2xvc2VzdEF0dHJpYnV0ZVZhbHVlKGVsdCwgJ2h4LXByb21wdCcpXG4gICAgaWYgKHByb21wdFF1ZXN0aW9uKSB7XG4gICAgICB2YXIgcHJvbXB0UmVzcG9uc2UgPSBwcm9tcHQocHJvbXB0UXVlc3Rpb24pXG4gICAgICAvLyBwcm9tcHQgcmV0dXJucyBudWxsIGlmIGNhbmNlbGxlZCBhbmQgZW1wdHkgc3RyaW5nIGlmIGFjY2VwdGVkIHdpdGggbm8gZW50cnlcbiAgICAgIGlmIChwcm9tcHRSZXNwb25zZSA9PT0gbnVsbCB8fFxuICAgICAgIXRyaWdnZXJFdmVudChlbHQsICdodG14OnByb21wdCcsIHsgcHJvbXB0OiBwcm9tcHRSZXNwb25zZSwgdGFyZ2V0IH0pKSB7XG4gICAgICAgIG1heWJlQ2FsbChyZXNvbHZlKVxuICAgICAgICBlbmRSZXF1ZXN0TG9jaygpXG4gICAgICAgIHJldHVybiBwcm9taXNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpcm1RdWVzdGlvbiAmJiAhY29uZmlybWVkKSB7XG4gICAgICBpZiAoIWNvbmZpcm0oY29uZmlybVF1ZXN0aW9uKSkge1xuICAgICAgICBtYXliZUNhbGwocmVzb2x2ZSlcbiAgICAgICAgZW5kUmVxdWVzdExvY2soKVxuICAgICAgICByZXR1cm4gcHJvbWlzZVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBoZWFkZXJzID0gZ2V0SGVhZGVycyhlbHQsIHRhcmdldCwgcHJvbXB0UmVzcG9uc2UpXG5cbiAgICBpZiAodmVyYiAhPT0gJ2dldCcgJiYgIXVzZXNGb3JtRGF0YShlbHQpKSB7XG4gICAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG4gICAgfVxuXG4gICAgaWYgKGV0Yy5oZWFkZXJzKSB7XG4gICAgICBoZWFkZXJzID0gbWVyZ2VPYmplY3RzKGhlYWRlcnMsIGV0Yy5oZWFkZXJzKVxuICAgIH1cbiAgICBjb25zdCByZXN1bHRzID0gZ2V0SW5wdXRWYWx1ZXMoZWx0LCB2ZXJiKVxuICAgIGxldCBlcnJvcnMgPSByZXN1bHRzLmVycm9yc1xuICAgIGNvbnN0IHJhd0Zvcm1EYXRhID0gcmVzdWx0cy5mb3JtRGF0YVxuICAgIGlmIChldGMudmFsdWVzKSB7XG4gICAgICBvdmVycmlkZUZvcm1EYXRhKHJhd0Zvcm1EYXRhLCBmb3JtRGF0YUZyb21PYmplY3QoZXRjLnZhbHVlcykpXG4gICAgfVxuICAgIGNvbnN0IGV4cHJlc3Npb25WYXJzID0gZm9ybURhdGFGcm9tT2JqZWN0KGdldEV4cHJlc3Npb25WYXJzKGVsdCkpXG4gICAgY29uc3QgYWxsRm9ybURhdGEgPSBvdmVycmlkZUZvcm1EYXRhKHJhd0Zvcm1EYXRhLCBleHByZXNzaW9uVmFycylcbiAgICBsZXQgZmlsdGVyZWRGb3JtRGF0YSA9IGZpbHRlclZhbHVlcyhhbGxGb3JtRGF0YSwgZWx0KVxuXG4gICAgaWYgKGh0bXguY29uZmlnLmdldENhY2hlQnVzdGVyUGFyYW0gJiYgdmVyYiA9PT0gJ2dldCcpIHtcbiAgICAgIGZpbHRlcmVkRm9ybURhdGEuc2V0KCdvcmcuaHRteC5jYWNoZS1idXN0ZXInLCBnZXRSYXdBdHRyaWJ1dGUodGFyZ2V0LCAnaWQnKSB8fCAndHJ1ZScpXG4gICAgfVxuXG4gICAgLy8gYmVoYXZpb3Igb2YgYW5jaG9ycyB3LyBlbXB0eSBocmVmIGlzIHRvIHVzZSB0aGUgY3VycmVudCBVUkxcbiAgICBpZiAocGF0aCA9PSBudWxsIHx8IHBhdGggPT09ICcnKSB7XG4gICAgICBwYXRoID0gZ2V0RG9jdW1lbnQoKS5sb2NhdGlvbi5ocmVmXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge09iamVjdH1cbiAgICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjcmVkZW50aWFsc11cbiAgICAgKiBAcHJvcGVydHkge251bWJlcn0gW3RpbWVvdXRdXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBbbm9IZWFkZXJzXVxuICAgICAqL1xuICAgIGNvbnN0IHJlcXVlc3RBdHRyVmFsdWVzID0gZ2V0VmFsdWVzRm9yRWxlbWVudChlbHQsICdoeC1yZXF1ZXN0JylcblxuICAgIGNvbnN0IGVsdElzQm9vc3RlZCA9IGdldEludGVybmFsRGF0YShlbHQpLmJvb3N0ZWRcblxuICAgIGxldCB1c2VVcmxQYXJhbXMgPSBodG14LmNvbmZpZy5tZXRob2RzVGhhdFVzZVVybFBhcmFtcy5pbmRleE9mKHZlcmIpID49IDBcblxuICAgIC8qKiBAdHlwZSBIdG14UmVxdWVzdENvbmZpZyAqL1xuICAgIGNvbnN0IHJlcXVlc3RDb25maWcgPSB7XG4gICAgICBib29zdGVkOiBlbHRJc0Jvb3N0ZWQsXG4gICAgICB1c2VVcmxQYXJhbXMsXG4gICAgICBmb3JtRGF0YTogZmlsdGVyZWRGb3JtRGF0YSxcbiAgICAgIHBhcmFtZXRlcnM6IGZvcm1EYXRhUHJveHkoZmlsdGVyZWRGb3JtRGF0YSksXG4gICAgICB1bmZpbHRlcmVkRm9ybURhdGE6IGFsbEZvcm1EYXRhLFxuICAgICAgdW5maWx0ZXJlZFBhcmFtZXRlcnM6IGZvcm1EYXRhUHJveHkoYWxsRm9ybURhdGEpLFxuICAgICAgaGVhZGVycyxcbiAgICAgIHRhcmdldCxcbiAgICAgIHZlcmIsXG4gICAgICBlcnJvcnMsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IGV0Yy5jcmVkZW50aWFscyB8fCByZXF1ZXN0QXR0clZhbHVlcy5jcmVkZW50aWFscyB8fCBodG14LmNvbmZpZy53aXRoQ3JlZGVudGlhbHMsXG4gICAgICB0aW1lb3V0OiBldGMudGltZW91dCB8fCByZXF1ZXN0QXR0clZhbHVlcy50aW1lb3V0IHx8IGh0bXguY29uZmlnLnRpbWVvdXQsXG4gICAgICBwYXRoLFxuICAgICAgdHJpZ2dlcmluZ0V2ZW50OiBldmVudFxuICAgIH1cblxuICAgIGlmICghdHJpZ2dlckV2ZW50KGVsdCwgJ2h0bXg6Y29uZmlnUmVxdWVzdCcsIHJlcXVlc3RDb25maWcpKSB7XG4gICAgICBtYXliZUNhbGwocmVzb2x2ZSlcbiAgICAgIGVuZFJlcXVlc3RMb2NrKClcbiAgICAgIHJldHVybiBwcm9taXNlXG4gICAgfVxuXG4gICAgLy8gY29weSBvdXQgaW4gY2FzZSB0aGUgb2JqZWN0IHdhcyBvdmVyd3JpdHRlblxuICAgIHBhdGggPSByZXF1ZXN0Q29uZmlnLnBhdGhcbiAgICB2ZXJiID0gcmVxdWVzdENvbmZpZy52ZXJiXG4gICAgaGVhZGVycyA9IHJlcXVlc3RDb25maWcuaGVhZGVyc1xuICAgIGZpbHRlcmVkRm9ybURhdGEgPSBmb3JtRGF0YUZyb21PYmplY3QocmVxdWVzdENvbmZpZy5wYXJhbWV0ZXJzKVxuICAgIGVycm9ycyA9IHJlcXVlc3RDb25maWcuZXJyb3JzXG4gICAgdXNlVXJsUGFyYW1zID0gcmVxdWVzdENvbmZpZy51c2VVcmxQYXJhbXNcblxuICAgIGlmIChlcnJvcnMgJiYgZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRyaWdnZXJFdmVudChlbHQsICdodG14OnZhbGlkYXRpb246aGFsdGVkJywgcmVxdWVzdENvbmZpZylcbiAgICAgIG1heWJlQ2FsbChyZXNvbHZlKVxuICAgICAgZW5kUmVxdWVzdExvY2soKVxuICAgICAgcmV0dXJuIHByb21pc2VcbiAgICB9XG5cbiAgICBjb25zdCBzcGxpdFBhdGggPSBwYXRoLnNwbGl0KCcjJylcbiAgICBjb25zdCBwYXRoTm9BbmNob3IgPSBzcGxpdFBhdGhbMF1cbiAgICBjb25zdCBhbmNob3IgPSBzcGxpdFBhdGhbMV1cblxuICAgIGxldCBmaW5hbFBhdGggPSBwYXRoXG4gICAgaWYgKHVzZVVybFBhcmFtcykge1xuICAgICAgZmluYWxQYXRoID0gcGF0aE5vQW5jaG9yXG4gICAgICBjb25zdCBoYXNWYWx1ZXMgPSAhZmlsdGVyZWRGb3JtRGF0YS5rZXlzKCkubmV4dCgpLmRvbmVcbiAgICAgIGlmIChoYXNWYWx1ZXMpIHtcbiAgICAgICAgaWYgKGZpbmFsUGF0aC5pbmRleE9mKCc/JykgPCAwKSB7XG4gICAgICAgICAgZmluYWxQYXRoICs9ICc/J1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpbmFsUGF0aCArPSAnJidcbiAgICAgICAgfVxuICAgICAgICBmaW5hbFBhdGggKz0gdXJsRW5jb2RlKGZpbHRlcmVkRm9ybURhdGEpXG4gICAgICAgIGlmIChhbmNob3IpIHtcbiAgICAgICAgICBmaW5hbFBhdGggKz0gJyMnICsgYW5jaG9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXZlcmlmeVBhdGgoZWx0LCBmaW5hbFBhdGgsIHJlcXVlc3RDb25maWcpKSB7XG4gICAgICB0cmlnZ2VyRXJyb3JFdmVudChlbHQsICdodG14OmludmFsaWRQYXRoJywgcmVxdWVzdENvbmZpZylcbiAgICAgIG1heWJlQ2FsbChyZWplY3QpXG4gICAgICByZXR1cm4gcHJvbWlzZVxuICAgIH1cblxuICAgIHhoci5vcGVuKHZlcmIudG9VcHBlckNhc2UoKSwgZmluYWxQYXRoLCB0cnVlKVxuICAgIHhoci5vdmVycmlkZU1pbWVUeXBlKCd0ZXh0L2h0bWwnKVxuICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSByZXF1ZXN0Q29uZmlnLndpdGhDcmVkZW50aWFsc1xuICAgIHhoci50aW1lb3V0ID0gcmVxdWVzdENvbmZpZy50aW1lb3V0XG5cbiAgICAvLyByZXF1ZXN0IGhlYWRlcnNcbiAgICBpZiAocmVxdWVzdEF0dHJWYWx1ZXMubm9IZWFkZXJzKSB7XG4gICAgLy8gaWdub3JlIGFsbCBoZWFkZXJzXG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgaGVhZGVyIGluIGhlYWRlcnMpIHtcbiAgICAgICAgaWYgKGhlYWRlcnMuaGFzT3duUHJvcGVydHkoaGVhZGVyKSkge1xuICAgICAgICAgIGNvbnN0IGhlYWRlclZhbHVlID0gaGVhZGVyc1toZWFkZXJdXG4gICAgICAgICAgc2FmZWx5U2V0SGVhZGVyVmFsdWUoeGhyLCBoZWFkZXIsIGhlYWRlclZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtIdG14UmVzcG9uc2VJbmZvfSAqL1xuICAgIGNvbnN0IHJlc3BvbnNlSW5mbyA9IHtcbiAgICAgIHhocixcbiAgICAgIHRhcmdldCxcbiAgICAgIHJlcXVlc3RDb25maWcsXG4gICAgICBldGMsXG4gICAgICBib29zdGVkOiBlbHRJc0Jvb3N0ZWQsXG4gICAgICBzZWxlY3QsXG4gICAgICBwYXRoSW5mbzoge1xuICAgICAgICByZXF1ZXN0UGF0aDogcGF0aCxcbiAgICAgICAgZmluYWxSZXF1ZXN0UGF0aDogZmluYWxQYXRoLFxuICAgICAgICByZXNwb25zZVBhdGg6IG51bGwsXG4gICAgICAgIGFuY2hvclxuICAgICAgfVxuICAgIH1cblxuICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGhpZXJhcmNoeSA9IGhpZXJhcmNoeUZvckVsdChlbHQpXG4gICAgICAgIHJlc3BvbnNlSW5mby5wYXRoSW5mby5yZXNwb25zZVBhdGggPSBnZXRQYXRoRnJvbVJlc3BvbnNlKHhocilcbiAgICAgICAgcmVzcG9uc2VIYW5kbGVyKGVsdCwgcmVzcG9uc2VJbmZvKVxuICAgICAgICBpZiAocmVzcG9uc2VJbmZvLmtlZXBJbmRpY2F0b3JzICE9PSB0cnVlKSB7XG4gICAgICAgICAgcmVtb3ZlUmVxdWVzdEluZGljYXRvcnMoaW5kaWNhdG9ycywgZGlzYWJsZUVsdHMpXG4gICAgICAgIH1cbiAgICAgICAgdHJpZ2dlckV2ZW50KGVsdCwgJ2h0bXg6YWZ0ZXJSZXF1ZXN0JywgcmVzcG9uc2VJbmZvKVxuICAgICAgICB0cmlnZ2VyRXZlbnQoZWx0LCAnaHRteDphZnRlck9uTG9hZCcsIHJlc3BvbnNlSW5mbylcbiAgICAgICAgLy8gaWYgdGhlIGJvZHkgbm8gbG9uZ2VyIGNvbnRhaW5zIHRoZSBlbGVtZW50LCB0cmlnZ2VyIHRoZSBldmVudCBvbiB0aGUgY2xvc2VzdCBwYXJlbnRcbiAgICAgICAgLy8gcmVtYWluaW5nIGluIHRoZSBET01cbiAgICAgICAgaWYgKCFib2R5Q29udGFpbnMoZWx0KSkge1xuICAgICAgICAgIGxldCBzZWNvbmRhcnlUcmlnZ2VyRWx0ID0gbnVsbFxuICAgICAgICAgIHdoaWxlIChoaWVyYXJjaHkubGVuZ3RoID4gMCAmJiBzZWNvbmRhcnlUcmlnZ2VyRWx0ID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudEVsdEluSGllcmFyY2h5ID0gaGllcmFyY2h5LnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChib2R5Q29udGFpbnMocGFyZW50RWx0SW5IaWVyYXJjaHkpKSB7XG4gICAgICAgICAgICAgIHNlY29uZGFyeVRyaWdnZXJFbHQgPSBwYXJlbnRFbHRJbkhpZXJhcmNoeVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2Vjb25kYXJ5VHJpZ2dlckVsdCkge1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KHNlY29uZGFyeVRyaWdnZXJFbHQsICdodG14OmFmdGVyUmVxdWVzdCcsIHJlc3BvbnNlSW5mbylcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChzZWNvbmRhcnlUcmlnZ2VyRWx0LCAnaHRteDphZnRlck9uTG9hZCcsIHJlc3BvbnNlSW5mbylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbWF5YmVDYWxsKHJlc29sdmUpXG4gICAgICAgIGVuZFJlcXVlc3RMb2NrKClcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJpZ2dlckVycm9yRXZlbnQoZWx0LCAnaHRteDpvbkxvYWRFcnJvcicsIG1lcmdlT2JqZWN0cyh7IGVycm9yOiBlIH0sIHJlc3BvbnNlSW5mbykpXG4gICAgICAgIHRocm93IGVcbiAgICAgIH1cbiAgICB9XG4gICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJlbW92ZVJlcXVlc3RJbmRpY2F0b3JzKGluZGljYXRvcnMsIGRpc2FibGVFbHRzKVxuICAgICAgdHJpZ2dlckVycm9yRXZlbnQoZWx0LCAnaHRteDphZnRlclJlcXVlc3QnLCByZXNwb25zZUluZm8pXG4gICAgICB0cmlnZ2VyRXJyb3JFdmVudChlbHQsICdodG14OnNlbmRFcnJvcicsIHJlc3BvbnNlSW5mbylcbiAgICAgIG1heWJlQ2FsbChyZWplY3QpXG4gICAgICBlbmRSZXF1ZXN0TG9jaygpXG4gICAgfVxuICAgIHhoci5vbmFib3J0ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZW1vdmVSZXF1ZXN0SW5kaWNhdG9ycyhpbmRpY2F0b3JzLCBkaXNhYmxlRWx0cylcbiAgICAgIHRyaWdnZXJFcnJvckV2ZW50KGVsdCwgJ2h0bXg6YWZ0ZXJSZXF1ZXN0JywgcmVzcG9uc2VJbmZvKVxuICAgICAgdHJpZ2dlckVycm9yRXZlbnQoZWx0LCAnaHRteDpzZW5kQWJvcnQnLCByZXNwb25zZUluZm8pXG4gICAgICBtYXliZUNhbGwocmVqZWN0KVxuICAgICAgZW5kUmVxdWVzdExvY2soKVxuICAgIH1cbiAgICB4aHIub250aW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZW1vdmVSZXF1ZXN0SW5kaWNhdG9ycyhpbmRpY2F0b3JzLCBkaXNhYmxlRWx0cylcbiAgICAgIHRyaWdnZXJFcnJvckV2ZW50KGVsdCwgJ2h0bXg6YWZ0ZXJSZXF1ZXN0JywgcmVzcG9uc2VJbmZvKVxuICAgICAgdHJpZ2dlckVycm9yRXZlbnQoZWx0LCAnaHRteDp0aW1lb3V0JywgcmVzcG9uc2VJbmZvKVxuICAgICAgbWF5YmVDYWxsKHJlamVjdClcbiAgICAgIGVuZFJlcXVlc3RMb2NrKClcbiAgICB9XG4gICAgaWYgKCF0cmlnZ2VyRXZlbnQoZWx0LCAnaHRteDpiZWZvcmVSZXF1ZXN0JywgcmVzcG9uc2VJbmZvKSkge1xuICAgICAgbWF5YmVDYWxsKHJlc29sdmUpXG4gICAgICBlbmRSZXF1ZXN0TG9jaygpXG4gICAgICByZXR1cm4gcHJvbWlzZVxuICAgIH1cbiAgICB2YXIgaW5kaWNhdG9ycyA9IGFkZFJlcXVlc3RJbmRpY2F0b3JDbGFzc2VzKGVsdClcbiAgICB2YXIgZGlzYWJsZUVsdHMgPSBkaXNhYmxlRWxlbWVudHMoZWx0KVxuXG4gICAgZm9yRWFjaChbJ2xvYWRzdGFydCcsICdsb2FkZW5kJywgJ3Byb2dyZXNzJywgJ2Fib3J0J10sIGZ1bmN0aW9uKGV2ZW50TmFtZSkge1xuICAgICAgZm9yRWFjaChbeGhyLCB4aHIudXBsb2FkXSwgZnVuY3Rpb24odGFyZ2V0KSB7XG4gICAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICB0cmlnZ2VyRXZlbnQoZWx0LCAnaHRteDp4aHI6JyArIGV2ZW50TmFtZSwge1xuICAgICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSxcbiAgICAgICAgICAgIGxvYWRlZDogZXZlbnQubG9hZGVkLFxuICAgICAgICAgICAgdG90YWw6IGV2ZW50LnRvdGFsXG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgICB0cmlnZ2VyRXZlbnQoZWx0LCAnaHRteDpiZWZvcmVTZW5kJywgcmVzcG9uc2VJbmZvKVxuICAgIGNvbnN0IHBhcmFtcyA9IHVzZVVybFBhcmFtcyA/IG51bGwgOiBlbmNvZGVQYXJhbXNGb3JCb2R5KHhociwgZWx0LCBmaWx0ZXJlZEZvcm1EYXRhKVxuICAgIHhoci5zZW5kKHBhcmFtcylcbiAgICByZXR1cm4gcHJvbWlzZVxuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHtPYmplY3R9IEh0bXhIaXN0b3J5VXBkYXRlXG4gICAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IFt0eXBlXVxuICAgKiBAcHJvcGVydHkge3N0cmluZ3xudWxsfSBbcGF0aF1cbiAgICovXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEBwYXJhbSB7SHRteFJlc3BvbnNlSW5mb30gcmVzcG9uc2VJbmZvXG4gICAqIEByZXR1cm4ge0h0bXhIaXN0b3J5VXBkYXRlfVxuICAgKi9cbiAgZnVuY3Rpb24gZGV0ZXJtaW5lSGlzdG9yeVVwZGF0ZXMoZWx0LCByZXNwb25zZUluZm8pIHtcbiAgICBjb25zdCB4aHIgPSByZXNwb25zZUluZm8ueGhyXG5cbiAgICAvLz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gRmlyc3QgY29uc3VsdCByZXNwb25zZSBoZWFkZXJzXG4gICAgLy89ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGxldCBwYXRoRnJvbUhlYWRlcnMgPSBudWxsXG4gICAgbGV0IHR5cGVGcm9tSGVhZGVycyA9IG51bGxcbiAgICBpZiAoaGFzSGVhZGVyKHhociwgL0hYLVB1c2g6L2kpKSB7XG4gICAgICBwYXRoRnJvbUhlYWRlcnMgPSB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ0hYLVB1c2gnKVxuICAgICAgdHlwZUZyb21IZWFkZXJzID0gJ3B1c2gnXG4gICAgfSBlbHNlIGlmIChoYXNIZWFkZXIoeGhyLCAvSFgtUHVzaC1Vcmw6L2kpKSB7XG4gICAgICBwYXRoRnJvbUhlYWRlcnMgPSB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ0hYLVB1c2gtVXJsJylcbiAgICAgIHR5cGVGcm9tSGVhZGVycyA9ICdwdXNoJ1xuICAgIH0gZWxzZSBpZiAoaGFzSGVhZGVyKHhociwgL0hYLVJlcGxhY2UtVXJsOi9pKSkge1xuICAgICAgcGF0aEZyb21IZWFkZXJzID0geGhyLmdldFJlc3BvbnNlSGVhZGVyKCdIWC1SZXBsYWNlLVVybCcpXG4gICAgICB0eXBlRnJvbUhlYWRlcnMgPSAncmVwbGFjZSdcbiAgICB9XG5cbiAgICAvLyBpZiB0aGVyZSB3YXMgYSByZXNwb25zZSBoZWFkZXIsIHRoYXQgaGFzIHByaW9yaXR5XG4gICAgaWYgKHBhdGhGcm9tSGVhZGVycykge1xuICAgICAgaWYgKHBhdGhGcm9tSGVhZGVycyA9PT0gJ2ZhbHNlJykge1xuICAgICAgICByZXR1cm4ge31cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogdHlwZUZyb21IZWFkZXJzLFxuICAgICAgICAgIHBhdGg6IHBhdGhGcm9tSGVhZGVyc1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy89ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIE5leHQgcmVzb2x2ZSB2aWEgRE9NIHZhbHVlc1xuICAgIC8vPSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IHJlc3BvbnNlSW5mby5wYXRoSW5mby5maW5hbFJlcXVlc3RQYXRoXG4gICAgY29uc3QgcmVzcG9uc2VQYXRoID0gcmVzcG9uc2VJbmZvLnBhdGhJbmZvLnJlc3BvbnNlUGF0aFxuXG4gICAgY29uc3QgcHVzaFVybCA9IGdldENsb3Nlc3RBdHRyaWJ1dGVWYWx1ZShlbHQsICdoeC1wdXNoLXVybCcpXG4gICAgY29uc3QgcmVwbGFjZVVybCA9IGdldENsb3Nlc3RBdHRyaWJ1dGVWYWx1ZShlbHQsICdoeC1yZXBsYWNlLXVybCcpXG4gICAgY29uc3QgZWxlbWVudElzQm9vc3RlZCA9IGdldEludGVybmFsRGF0YShlbHQpLmJvb3N0ZWRcblxuICAgIGxldCBzYXZlVHlwZSA9IG51bGxcbiAgICBsZXQgcGF0aCA9IG51bGxcblxuICAgIGlmIChwdXNoVXJsKSB7XG4gICAgICBzYXZlVHlwZSA9ICdwdXNoJ1xuICAgICAgcGF0aCA9IHB1c2hVcmxcbiAgICB9IGVsc2UgaWYgKHJlcGxhY2VVcmwpIHtcbiAgICAgIHNhdmVUeXBlID0gJ3JlcGxhY2UnXG4gICAgICBwYXRoID0gcmVwbGFjZVVybFxuICAgIH0gZWxzZSBpZiAoZWxlbWVudElzQm9vc3RlZCkge1xuICAgICAgc2F2ZVR5cGUgPSAncHVzaCdcbiAgICAgIHBhdGggPSByZXNwb25zZVBhdGggfHwgcmVxdWVzdFBhdGggLy8gaWYgdGhlcmUgaXMgbm8gcmVzcG9uc2UgcGF0aCwgZ28gd2l0aCB0aGUgb3JpZ2luYWwgcmVxdWVzdCBwYXRoXG4gICAgfVxuXG4gICAgaWYgKHBhdGgpIHtcbiAgICAvLyBmYWxzZSBpbmRpY2F0ZXMgbm8gcHVzaCwgcmV0dXJuIGVtcHR5IG9iamVjdFxuICAgICAgaWYgKHBhdGggPT09ICdmYWxzZScpIHtcbiAgICAgICAgcmV0dXJuIHt9XG4gICAgICB9XG5cbiAgICAgIC8vIHRydWUgaW5kaWNhdGVzIHdlIHdhbnQgdG8gZm9sbG93IHdoZXJldmVyIHRoZSBzZXJ2ZXIgZW5kZWQgdXAgc2VuZGluZyB1c1xuICAgICAgaWYgKHBhdGggPT09ICd0cnVlJykge1xuICAgICAgICBwYXRoID0gcmVzcG9uc2VQYXRoIHx8IHJlcXVlc3RQYXRoIC8vIGlmIHRoZXJlIGlzIG5vIHJlc3BvbnNlIHBhdGgsIGdvIHdpdGggdGhlIG9yaWdpbmFsIHJlcXVlc3QgcGF0aFxuICAgICAgfVxuXG4gICAgICAvLyByZXN0b3JlIGFueSBhbmNob3IgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0XG4gICAgICBpZiAocmVzcG9uc2VJbmZvLnBhdGhJbmZvLmFuY2hvciAmJiBwYXRoLmluZGV4T2YoJyMnKSA9PT0gLTEpIHtcbiAgICAgICAgcGF0aCA9IHBhdGggKyAnIycgKyByZXNwb25zZUluZm8ucGF0aEluZm8uYW5jaG9yXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IHNhdmVUeXBlLFxuICAgICAgICBwYXRoXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7fVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0h0bXhSZXNwb25zZUhhbmRsaW5nQ29uZmlnfSByZXNwb25zZUhhbmRsaW5nQ29uZmlnXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGF0dXNcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIGNvZGVNYXRjaGVzKHJlc3BvbnNlSGFuZGxpbmdDb25maWcsIHN0YXR1cykge1xuICAgIHZhciByZWdFeHAgPSBuZXcgUmVnRXhwKHJlc3BvbnNlSGFuZGxpbmdDb25maWcuY29kZSlcbiAgICByZXR1cm4gcmVnRXhwLnRlc3Qoc3RhdHVzLnRvU3RyaW5nKDEwKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1hNTEh0dHBSZXF1ZXN0fSB4aHJcbiAgICogQHJldHVybiB7SHRteFJlc3BvbnNlSGFuZGxpbmdDb25maWd9XG4gICAqL1xuICBmdW5jdGlvbiByZXNvbHZlUmVzcG9uc2VIYW5kbGluZyh4aHIpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGh0bXguY29uZmlnLnJlc3BvbnNlSGFuZGxpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8qKiBAdHlwZSBIdG14UmVzcG9uc2VIYW5kbGluZ0NvbmZpZyAqL1xuICAgICAgdmFyIHJlc3BvbnNlSGFuZGxpbmdFbGVtZW50ID0gaHRteC5jb25maWcucmVzcG9uc2VIYW5kbGluZ1tpXVxuICAgICAgaWYgKGNvZGVNYXRjaGVzKHJlc3BvbnNlSGFuZGxpbmdFbGVtZW50LCB4aHIuc3RhdHVzKSkge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2VIYW5kbGluZ0VsZW1lbnRcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gbm8gbWF0Y2hlcywgcmV0dXJuIG5vIHN3YXBcbiAgICByZXR1cm4ge1xuICAgICAgc3dhcDogZmFsc2VcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlXG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVUaXRsZSh0aXRsZSkge1xuICAgIGlmICh0aXRsZSkge1xuICAgICAgY29uc3QgdGl0bGVFbHQgPSBmaW5kKCd0aXRsZScpXG4gICAgICBpZiAodGl0bGVFbHQpIHtcbiAgICAgICAgdGl0bGVFbHQuaW5uZXJIVE1MID0gdGl0bGVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC50aXRsZSA9IHRpdGxlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RWxlbWVudH0gZWx0XG4gICAqIEBwYXJhbSB7SHRteFJlc3BvbnNlSW5mb30gcmVzcG9uc2VJbmZvXG4gICAqL1xuICBmdW5jdGlvbiBoYW5kbGVBamF4UmVzcG9uc2UoZWx0LCByZXNwb25zZUluZm8pIHtcbiAgICBjb25zdCB4aHIgPSByZXNwb25zZUluZm8ueGhyXG4gICAgbGV0IHRhcmdldCA9IHJlc3BvbnNlSW5mby50YXJnZXRcbiAgICBjb25zdCBldGMgPSByZXNwb25zZUluZm8uZXRjXG4gICAgY29uc3QgcmVzcG9uc2VJbmZvU2VsZWN0ID0gcmVzcG9uc2VJbmZvLnNlbGVjdFxuXG4gICAgaWYgKCF0cmlnZ2VyRXZlbnQoZWx0LCAnaHRteDpiZWZvcmVPbkxvYWQnLCByZXNwb25zZUluZm8pKSByZXR1cm5cblxuICAgIGlmIChoYXNIZWFkZXIoeGhyLCAvSFgtVHJpZ2dlcjovaSkpIHtcbiAgICAgIGhhbmRsZVRyaWdnZXJIZWFkZXIoeGhyLCAnSFgtVHJpZ2dlcicsIGVsdClcbiAgICB9XG5cbiAgICBpZiAoaGFzSGVhZGVyKHhociwgL0hYLUxvY2F0aW9uOi9pKSkge1xuICAgICAgc2F2ZUN1cnJlbnRQYWdlVG9IaXN0b3J5KClcbiAgICAgIGxldCByZWRpcmVjdFBhdGggPSB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ0hYLUxvY2F0aW9uJylcbiAgICAgIC8qKiBAdHlwZSB7SHRteEFqYXhIZWxwZXJDb250ZXh0JntwYXRoOnN0cmluZ319ICovXG4gICAgICB2YXIgcmVkaXJlY3RTd2FwU3BlY1xuICAgICAgaWYgKHJlZGlyZWN0UGF0aC5pbmRleE9mKCd7JykgPT09IDApIHtcbiAgICAgICAgcmVkaXJlY3RTd2FwU3BlYyA9IHBhcnNlSlNPTihyZWRpcmVjdFBhdGgpXG4gICAgICAgIC8vIHdoYXQncyB0aGUgYmVzdCB3YXkgdG8gdGhyb3cgYW4gZXJyb3IgaWYgdGhlIHVzZXIgZGlkbid0IGluY2x1ZGUgdGhpc1xuICAgICAgICByZWRpcmVjdFBhdGggPSByZWRpcmVjdFN3YXBTcGVjLnBhdGhcbiAgICAgICAgZGVsZXRlIHJlZGlyZWN0U3dhcFNwZWMucGF0aFxuICAgICAgfVxuICAgICAgYWpheEhlbHBlcignZ2V0JywgcmVkaXJlY3RQYXRoLCByZWRpcmVjdFN3YXBTcGVjKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICBwdXNoVXJsSW50b0hpc3RvcnkocmVkaXJlY3RQYXRoKVxuICAgICAgfSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZFJlZnJlc2ggPSBoYXNIZWFkZXIoeGhyLCAvSFgtUmVmcmVzaDovaSkgJiYgeGhyLmdldFJlc3BvbnNlSGVhZGVyKCdIWC1SZWZyZXNoJykgPT09ICd0cnVlJ1xuXG4gICAgaWYgKGhhc0hlYWRlcih4aHIsIC9IWC1SZWRpcmVjdDovaSkpIHtcbiAgICAgIHJlc3BvbnNlSW5mby5rZWVwSW5kaWNhdG9ycyA9IHRydWVcbiAgICAgIGxvY2F0aW9uLmhyZWYgPSB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ0hYLVJlZGlyZWN0JylcbiAgICAgIHNob3VsZFJlZnJlc2ggJiYgbG9jYXRpb24ucmVsb2FkKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChzaG91bGRSZWZyZXNoKSB7XG4gICAgICByZXNwb25zZUluZm8ua2VlcEluZGljYXRvcnMgPSB0cnVlXG4gICAgICBsb2NhdGlvbi5yZWxvYWQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGhhc0hlYWRlcih4aHIsIC9IWC1SZXRhcmdldDovaSkpIHtcbiAgICAgIGlmICh4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ0hYLVJldGFyZ2V0JykgPT09ICd0aGlzJykge1xuICAgICAgICByZXNwb25zZUluZm8udGFyZ2V0ID0gZWx0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZUluZm8udGFyZ2V0ID0gYXNFbGVtZW50KHF1ZXJ5U2VsZWN0b3JFeHQoZWx0LCB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ0hYLVJldGFyZ2V0JykpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhpc3RvcnlVcGRhdGUgPSBkZXRlcm1pbmVIaXN0b3J5VXBkYXRlcyhlbHQsIHJlc3BvbnNlSW5mbylcblxuICAgIGNvbnN0IHJlc3BvbnNlSGFuZGxpbmcgPSByZXNvbHZlUmVzcG9uc2VIYW5kbGluZyh4aHIpXG4gICAgY29uc3Qgc2hvdWxkU3dhcCA9IHJlc3BvbnNlSGFuZGxpbmcuc3dhcFxuICAgIGxldCBpc0Vycm9yID0gISFyZXNwb25zZUhhbmRsaW5nLmVycm9yXG4gICAgbGV0IGlnbm9yZVRpdGxlID0gaHRteC5jb25maWcuaWdub3JlVGl0bGUgfHwgcmVzcG9uc2VIYW5kbGluZy5pZ25vcmVUaXRsZVxuICAgIGxldCBzZWxlY3RPdmVycmlkZSA9IHJlc3BvbnNlSGFuZGxpbmcuc2VsZWN0XG4gICAgaWYgKHJlc3BvbnNlSGFuZGxpbmcudGFyZ2V0KSB7XG4gICAgICByZXNwb25zZUluZm8udGFyZ2V0ID0gYXNFbGVtZW50KHF1ZXJ5U2VsZWN0b3JFeHQoZWx0LCByZXNwb25zZUhhbmRsaW5nLnRhcmdldCkpXG4gICAgfVxuICAgIHZhciBzd2FwT3ZlcnJpZGUgPSBldGMuc3dhcE92ZXJyaWRlXG4gICAgaWYgKHN3YXBPdmVycmlkZSA9PSBudWxsICYmIHJlc3BvbnNlSGFuZGxpbmcuc3dhcE92ZXJyaWRlKSB7XG4gICAgICBzd2FwT3ZlcnJpZGUgPSByZXNwb25zZUhhbmRsaW5nLnN3YXBPdmVycmlkZVxuICAgIH1cblxuICAgIC8vIHJlc3BvbnNlIGhlYWRlcnMgb3ZlcnJpZGUgcmVzcG9uc2UgaGFuZGxpbmcgY29uZmlnXG4gICAgaWYgKGhhc0hlYWRlcih4aHIsIC9IWC1SZXRhcmdldDovaSkpIHtcbiAgICAgIGlmICh4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ0hYLVJldGFyZ2V0JykgPT09ICd0aGlzJykge1xuICAgICAgICByZXNwb25zZUluZm8udGFyZ2V0ID0gZWx0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZUluZm8udGFyZ2V0ID0gYXNFbGVtZW50KHF1ZXJ5U2VsZWN0b3JFeHQoZWx0LCB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ0hYLVJldGFyZ2V0JykpKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaGFzSGVhZGVyKHhociwgL0hYLVJlc3dhcDovaSkpIHtcbiAgICAgIHN3YXBPdmVycmlkZSA9IHhoci5nZXRSZXNwb25zZUhlYWRlcignSFgtUmVzd2FwJylcbiAgICB9XG5cbiAgICB2YXIgc2VydmVyUmVzcG9uc2UgPSB4aHIucmVzcG9uc2VcbiAgICAvKiogQHR5cGUgSHRteEJlZm9yZVN3YXBEZXRhaWxzICovXG4gICAgdmFyIGJlZm9yZVN3YXBEZXRhaWxzID0gbWVyZ2VPYmplY3RzKHtcbiAgICAgIHNob3VsZFN3YXAsXG4gICAgICBzZXJ2ZXJSZXNwb25zZSxcbiAgICAgIGlzRXJyb3IsXG4gICAgICBpZ25vcmVUaXRsZSxcbiAgICAgIHNlbGVjdE92ZXJyaWRlXG4gICAgfSwgcmVzcG9uc2VJbmZvKVxuXG4gICAgaWYgKHJlc3BvbnNlSGFuZGxpbmcuZXZlbnQgJiYgIXRyaWdnZXJFdmVudCh0YXJnZXQsIHJlc3BvbnNlSGFuZGxpbmcuZXZlbnQsIGJlZm9yZVN3YXBEZXRhaWxzKSkgcmV0dXJuXG5cbiAgICBpZiAoIXRyaWdnZXJFdmVudCh0YXJnZXQsICdodG14OmJlZm9yZVN3YXAnLCBiZWZvcmVTd2FwRGV0YWlscykpIHJldHVyblxuXG4gICAgdGFyZ2V0ID0gYmVmb3JlU3dhcERldGFpbHMudGFyZ2V0IC8vIGFsbG93IHJlLXRhcmdldGluZ1xuICAgIHNlcnZlclJlc3BvbnNlID0gYmVmb3JlU3dhcERldGFpbHMuc2VydmVyUmVzcG9uc2UgLy8gYWxsb3cgdXBkYXRpbmcgY29udGVudFxuICAgIGlzRXJyb3IgPSBiZWZvcmVTd2FwRGV0YWlscy5pc0Vycm9yIC8vIGFsbG93IHVwZGF0aW5nIGVycm9yXG4gICAgaWdub3JlVGl0bGUgPSBiZWZvcmVTd2FwRGV0YWlscy5pZ25vcmVUaXRsZSAvLyBhbGxvdyB1cGRhdGluZyBpZ25vcmluZyB0aXRsZVxuICAgIHNlbGVjdE92ZXJyaWRlID0gYmVmb3JlU3dhcERldGFpbHMuc2VsZWN0T3ZlcnJpZGUgLy8gYWxsb3cgdXBkYXRpbmcgc2VsZWN0IG92ZXJyaWRlXG5cbiAgICByZXNwb25zZUluZm8udGFyZ2V0ID0gdGFyZ2V0IC8vIE1ha2UgdXBkYXRlZCB0YXJnZXQgYXZhaWxhYmxlIHRvIHJlc3BvbnNlIGV2ZW50c1xuICAgIHJlc3BvbnNlSW5mby5mYWlsZWQgPSBpc0Vycm9yIC8vIE1ha2UgZmFpbGVkIHByb3BlcnR5IGF2YWlsYWJsZSB0byByZXNwb25zZSBldmVudHNcbiAgICByZXNwb25zZUluZm8uc3VjY2Vzc2Z1bCA9ICFpc0Vycm9yIC8vIE1ha2Ugc3VjY2Vzc2Z1bCBwcm9wZXJ0eSBhdmFpbGFibGUgdG8gcmVzcG9uc2UgZXZlbnRzXG5cbiAgICBpZiAoYmVmb3JlU3dhcERldGFpbHMuc2hvdWxkU3dhcCkge1xuICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDI4Nikge1xuICAgICAgICBjYW5jZWxQb2xsaW5nKGVsdClcbiAgICAgIH1cblxuICAgICAgd2l0aEV4dGVuc2lvbnMoZWx0LCBmdW5jdGlvbihleHRlbnNpb24pIHtcbiAgICAgICAgc2VydmVyUmVzcG9uc2UgPSBleHRlbnNpb24udHJhbnNmb3JtUmVzcG9uc2Uoc2VydmVyUmVzcG9uc2UsIHhociwgZWx0KVxuICAgICAgfSlcblxuICAgICAgLy8gU2F2ZSBjdXJyZW50IHBhZ2UgaWYgdGhlcmUgd2lsbCBiZSBhIGhpc3RvcnkgdXBkYXRlXG4gICAgICBpZiAoaGlzdG9yeVVwZGF0ZS50eXBlKSB7XG4gICAgICAgIHNhdmVDdXJyZW50UGFnZVRvSGlzdG9yeSgpXG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNIZWFkZXIoeGhyLCAvSFgtUmVzd2FwOi9pKSkge1xuICAgICAgICBzd2FwT3ZlcnJpZGUgPSB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ0hYLVJlc3dhcCcpXG4gICAgICB9XG4gICAgICB2YXIgc3dhcFNwZWMgPSBnZXRTd2FwU3BlY2lmaWNhdGlvbihlbHQsIHN3YXBPdmVycmlkZSlcblxuICAgICAgaWYgKCFzd2FwU3BlYy5oYXNPd25Qcm9wZXJ0eSgnaWdub3JlVGl0bGUnKSkge1xuICAgICAgICBzd2FwU3BlYy5pZ25vcmVUaXRsZSA9IGlnbm9yZVRpdGxlXG4gICAgICB9XG5cbiAgICAgIHRhcmdldC5jbGFzc0xpc3QuYWRkKGh0bXguY29uZmlnLnN3YXBwaW5nQ2xhc3MpXG5cbiAgICAgIC8vIG9wdGlvbmFsIHRyYW5zaXRpb24gQVBJIHByb21pc2UgY2FsbGJhY2tzXG4gICAgICBsZXQgc2V0dGxlUmVzb2x2ZSA9IG51bGxcbiAgICAgIGxldCBzZXR0bGVSZWplY3QgPSBudWxsXG5cbiAgICAgIGlmIChyZXNwb25zZUluZm9TZWxlY3QpIHtcbiAgICAgICAgc2VsZWN0T3ZlcnJpZGUgPSByZXNwb25zZUluZm9TZWxlY3RcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc0hlYWRlcih4aHIsIC9IWC1SZXNlbGVjdDovaSkpIHtcbiAgICAgICAgc2VsZWN0T3ZlcnJpZGUgPSB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ0hYLVJlc2VsZWN0JylcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VsZWN0T09CID0gZ2V0Q2xvc2VzdEF0dHJpYnV0ZVZhbHVlKGVsdCwgJ2h4LXNlbGVjdC1vb2InKVxuICAgICAgY29uc3Qgc2VsZWN0ID0gZ2V0Q2xvc2VzdEF0dHJpYnV0ZVZhbHVlKGVsdCwgJ2h4LXNlbGVjdCcpXG5cbiAgICAgIGxldCBkb1N3YXAgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBpZiB3ZSBuZWVkIHRvIHNhdmUgaGlzdG9yeSwgZG8gc28sIGJlZm9yZSBzd2FwcGluZyBzbyB0aGF0IHJlbGF0aXZlIHJlc291cmNlcyBoYXZlIHRoZSBjb3JyZWN0IGJhc2UgVVJMXG4gICAgICAgICAgaWYgKGhpc3RvcnlVcGRhdGUudHlwZSkge1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KGdldERvY3VtZW50KCkuYm9keSwgJ2h0bXg6YmVmb3JlSGlzdG9yeVVwZGF0ZScsIG1lcmdlT2JqZWN0cyh7IGhpc3Rvcnk6IGhpc3RvcnlVcGRhdGUgfSwgcmVzcG9uc2VJbmZvKSlcbiAgICAgICAgICAgIGlmIChoaXN0b3J5VXBkYXRlLnR5cGUgPT09ICdwdXNoJykge1xuICAgICAgICAgICAgICBwdXNoVXJsSW50b0hpc3RvcnkoaGlzdG9yeVVwZGF0ZS5wYXRoKVxuICAgICAgICAgICAgICB0cmlnZ2VyRXZlbnQoZ2V0RG9jdW1lbnQoKS5ib2R5LCAnaHRteDpwdXNoZWRJbnRvSGlzdG9yeScsIHsgcGF0aDogaGlzdG9yeVVwZGF0ZS5wYXRoIH0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXBsYWNlVXJsSW5IaXN0b3J5KGhpc3RvcnlVcGRhdGUucGF0aClcbiAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KGdldERvY3VtZW50KCkuYm9keSwgJ2h0bXg6cmVwbGFjZWRJbkhpc3RvcnknLCB7IHBhdGg6IGhpc3RvcnlVcGRhdGUucGF0aCB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHN3YXAodGFyZ2V0LCBzZXJ2ZXJSZXNwb25zZSwgc3dhcFNwZWMsIHtcbiAgICAgICAgICAgIHNlbGVjdDogc2VsZWN0T3ZlcnJpZGUgfHwgc2VsZWN0LFxuICAgICAgICAgICAgc2VsZWN0T09CLFxuICAgICAgICAgICAgZXZlbnRJbmZvOiByZXNwb25zZUluZm8sXG4gICAgICAgICAgICBhbmNob3I6IHJlc3BvbnNlSW5mby5wYXRoSW5mby5hbmNob3IsXG4gICAgICAgICAgICBjb250ZXh0RWxlbWVudDogZWx0LFxuICAgICAgICAgICAgYWZ0ZXJTd2FwQ2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBpZiAoaGFzSGVhZGVyKHhociwgL0hYLVRyaWdnZXItQWZ0ZXItU3dhcDovaSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgZmluYWxFbHQgPSBlbHRcbiAgICAgICAgICAgICAgICBpZiAoIWJvZHlDb250YWlucyhlbHQpKSB7XG4gICAgICAgICAgICAgICAgICBmaW5hbEVsdCA9IGdldERvY3VtZW50KCkuYm9keVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoYW5kbGVUcmlnZ2VySGVhZGVyKHhociwgJ0hYLVRyaWdnZXItQWZ0ZXItU3dhcCcsIGZpbmFsRWx0KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYWZ0ZXJTZXR0bGVDYWxsYmFjazogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGlmIChoYXNIZWFkZXIoeGhyLCAvSFgtVHJpZ2dlci1BZnRlci1TZXR0bGU6L2kpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbmFsRWx0ID0gZWx0XG4gICAgICAgICAgICAgICAgaWYgKCFib2R5Q29udGFpbnMoZWx0KSkge1xuICAgICAgICAgICAgICAgICAgZmluYWxFbHQgPSBnZXREb2N1bWVudCgpLmJvZHlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaGFuZGxlVHJpZ2dlckhlYWRlcih4aHIsICdIWC1UcmlnZ2VyLUFmdGVyLVNldHRsZScsIGZpbmFsRWx0KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG1heWJlQ2FsbChzZXR0bGVSZXNvbHZlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0cmlnZ2VyRXJyb3JFdmVudChlbHQsICdodG14OnN3YXBFcnJvcicsIHJlc3BvbnNlSW5mbylcbiAgICAgICAgICBtYXliZUNhbGwoc2V0dGxlUmVqZWN0KVxuICAgICAgICAgIHRocm93IGVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgc2hvdWxkVHJhbnNpdGlvbiA9IGh0bXguY29uZmlnLmdsb2JhbFZpZXdUcmFuc2l0aW9uc1xuICAgICAgaWYgKHN3YXBTcGVjLmhhc093blByb3BlcnR5KCd0cmFuc2l0aW9uJykpIHtcbiAgICAgICAgc2hvdWxkVHJhbnNpdGlvbiA9IHN3YXBTcGVjLnRyYW5zaXRpb25cbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFRyYW5zaXRpb24gJiZcbiAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KGVsdCwgJ2h0bXg6YmVmb3JlVHJhbnNpdGlvbicsIHJlc3BvbnNlSW5mbykgJiZcbiAgICAgICAgICAgICAgdHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmUgZXhwZXJpbWVudGFsIGZlYXR1cmUgYXRtXG4gICAgICAgICAgICAgIGRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24pIHtcbiAgICAgICAgY29uc3Qgc2V0dGxlUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKF9yZXNvbHZlLCBfcmVqZWN0KSB7XG4gICAgICAgICAgc2V0dGxlUmVzb2x2ZSA9IF9yZXNvbHZlXG4gICAgICAgICAgc2V0dGxlUmVqZWN0ID0gX3JlamVjdFxuICAgICAgICB9KVxuICAgICAgICAvLyB3cmFwIHRoZSBvcmlnaW5hbCBkb1N3YXAoKSBpbiBhIGNhbGwgdG8gc3RhcnRWaWV3VHJhbnNpdGlvbigpXG4gICAgICAgIGNvbnN0IGlubmVyRG9Td2FwID0gZG9Td2FwXG4gICAgICAgIGRvU3dhcCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIC8vIEB0cy1pZ25vcmUgZXhwZXJpbWVudGFsIGZlYXR1cmUgYXRtXG4gICAgICAgICAgZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlubmVyRG9Td2FwKClcbiAgICAgICAgICAgIHJldHVybiBzZXR0bGVQcm9taXNlXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3dhcFNwZWMuc3dhcERlbGF5ID4gMCkge1xuICAgICAgICBnZXRXaW5kb3coKS5zZXRUaW1lb3V0KGRvU3dhcCwgc3dhcFNwZWMuc3dhcERlbGF5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9Td2FwKClcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzRXJyb3IpIHtcbiAgICAgIHRyaWdnZXJFcnJvckV2ZW50KGVsdCwgJ2h0bXg6cmVzcG9uc2VFcnJvcicsIG1lcmdlT2JqZWN0cyh7IGVycm9yOiAnUmVzcG9uc2UgU3RhdHVzIEVycm9yIENvZGUgJyArIHhoci5zdGF0dXMgKyAnIGZyb20gJyArIHJlc3BvbnNlSW5mby5wYXRoSW5mby5yZXF1ZXN0UGF0aCB9LCByZXNwb25zZUluZm8pKVxuICAgIH1cbiAgfVxuXG4gIC8vPSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEV4dGVuc2lvbnMgQVBJXG4gIC8vPSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqIEB0eXBlIHtPYmplY3Q8c3RyaW5nLCBIdG14RXh0ZW5zaW9uPn0gKi9cbiAgY29uc3QgZXh0ZW5zaW9ucyA9IHt9XG5cbiAgLyoqXG4gICAqIGV4dGVuc2lvbkJhc2UgZGVmaW5lcyB0aGUgZGVmYXVsdCBmdW5jdGlvbnMgZm9yIGFsbCBleHRlbnNpb25zLlxuICAgKiBAcmV0dXJucyB7SHRteEV4dGVuc2lvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGV4dGVuc2lvbkJhc2UoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGluaXQ6IGZ1bmN0aW9uKGFwaSkgeyByZXR1cm4gbnVsbCB9LFxuICAgICAgZ2V0U2VsZWN0b3JzOiBmdW5jdGlvbigpIHsgcmV0dXJuIG51bGwgfSxcbiAgICAgIG9uRXZlbnQ6IGZ1bmN0aW9uKG5hbWUsIGV2dCkgeyByZXR1cm4gdHJ1ZSB9LFxuICAgICAgdHJhbnNmb3JtUmVzcG9uc2U6IGZ1bmN0aW9uKHRleHQsIHhociwgZWx0KSB7IHJldHVybiB0ZXh0IH0sXG4gICAgICBpc0lubGluZVN3YXA6IGZ1bmN0aW9uKHN3YXBTdHlsZSkgeyByZXR1cm4gZmFsc2UgfSxcbiAgICAgIGhhbmRsZVN3YXA6IGZ1bmN0aW9uKHN3YXBTdHlsZSwgdGFyZ2V0LCBmcmFnbWVudCwgc2V0dGxlSW5mbykgeyByZXR1cm4gZmFsc2UgfSxcbiAgICAgIGVuY29kZVBhcmFtZXRlcnM6IGZ1bmN0aW9uKHhociwgcGFyYW1ldGVycywgZWx0KSB7IHJldHVybiBudWxsIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZGVmaW5lRXh0ZW5zaW9uIGluaXRpYWxpemVzIHRoZSBleHRlbnNpb24gYW5kIGFkZHMgaXQgdG8gdGhlIGh0bXggcmVnaXN0cnlcbiAgICpcbiAgICogQHNlZSBodHRwczovL2h0bXgub3JnL2FwaS8jZGVmaW5lRXh0ZW5zaW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIHRoZSBleHRlbnNpb24gbmFtZVxuICAgKiBAcGFyYW0ge0h0bXhFeHRlbnNpb259IGV4dGVuc2lvbiB0aGUgZXh0ZW5zaW9uIGRlZmluaXRpb25cbiAgICovXG4gIGZ1bmN0aW9uIGRlZmluZUV4dGVuc2lvbihuYW1lLCBleHRlbnNpb24pIHtcbiAgICBpZiAoZXh0ZW5zaW9uLmluaXQpIHtcbiAgICAgIGV4dGVuc2lvbi5pbml0KGludGVybmFsQVBJKVxuICAgIH1cbiAgICBleHRlbnNpb25zW25hbWVdID0gbWVyZ2VPYmplY3RzKGV4dGVuc2lvbkJhc2UoKSwgZXh0ZW5zaW9uKVxuICB9XG5cbiAgLyoqXG4gICAqIHJlbW92ZUV4dGVuc2lvbiByZW1vdmVzIGFuIGV4dGVuc2lvbiBmcm9tIHRoZSBodG14IHJlZ2lzdHJ5XG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9odG14Lm9yZy9hcGkvI3JlbW92ZUV4dGVuc2lvblxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKi9cbiAgZnVuY3Rpb24gcmVtb3ZlRXh0ZW5zaW9uKG5hbWUpIHtcbiAgICBkZWxldGUgZXh0ZW5zaW9uc1tuYW1lXVxuICB9XG5cbiAgLyoqXG4gICAqIGdldEV4dGVuc2lvbnMgc2VhcmNoZXMgdXAgdGhlIERPTSB0cmVlIHRvIHJldHVybiBhbGwgZXh0ZW5zaW9ucyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIGEgZ2l2ZW4gZWxlbWVudFxuICAgKlxuICAgKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICAgKiBAcGFyYW0ge0h0bXhFeHRlbnNpb25bXT19IGV4dGVuc2lvbnNUb1JldHVyblxuICAgKiBAcGFyYW0ge3N0cmluZ1tdPX0gZXh0ZW5zaW9uc1RvSWdub3JlXG4gICAqIEByZXR1cm5zIHtIdG14RXh0ZW5zaW9uW119XG4gICAqL1xuICBmdW5jdGlvbiBnZXRFeHRlbnNpb25zKGVsdCwgZXh0ZW5zaW9uc1RvUmV0dXJuLCBleHRlbnNpb25zVG9JZ25vcmUpIHtcbiAgICBpZiAoZXh0ZW5zaW9uc1RvUmV0dXJuID09IHVuZGVmaW5lZCkge1xuICAgICAgZXh0ZW5zaW9uc1RvUmV0dXJuID0gW11cbiAgICB9XG4gICAgaWYgKGVsdCA9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBleHRlbnNpb25zVG9SZXR1cm5cbiAgICB9XG4gICAgaWYgKGV4dGVuc2lvbnNUb0lnbm9yZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV4dGVuc2lvbnNUb0lnbm9yZSA9IFtdXG4gICAgfVxuICAgIGNvbnN0IGV4dGVuc2lvbnNGb3JFbGVtZW50ID0gZ2V0QXR0cmlidXRlVmFsdWUoZWx0LCAnaHgtZXh0JylcbiAgICBpZiAoZXh0ZW5zaW9uc0ZvckVsZW1lbnQpIHtcbiAgICAgIGZvckVhY2goZXh0ZW5zaW9uc0ZvckVsZW1lbnQuc3BsaXQoJywnKSwgZnVuY3Rpb24oZXh0ZW5zaW9uTmFtZSkge1xuICAgICAgICBleHRlbnNpb25OYW1lID0gZXh0ZW5zaW9uTmFtZS5yZXBsYWNlKC8gL2csICcnKVxuICAgICAgICBpZiAoZXh0ZW5zaW9uTmFtZS5zbGljZSgwLCA3KSA9PSAnaWdub3JlOicpIHtcbiAgICAgICAgICBleHRlbnNpb25zVG9JZ25vcmUucHVzaChleHRlbnNpb25OYW1lLnNsaWNlKDcpKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChleHRlbnNpb25zVG9JZ25vcmUuaW5kZXhPZihleHRlbnNpb25OYW1lKSA8IDApIHtcbiAgICAgICAgICBjb25zdCBleHRlbnNpb24gPSBleHRlbnNpb25zW2V4dGVuc2lvbk5hbWVdXG4gICAgICAgICAgaWYgKGV4dGVuc2lvbiAmJiBleHRlbnNpb25zVG9SZXR1cm4uaW5kZXhPZihleHRlbnNpb24pIDwgMCkge1xuICAgICAgICAgICAgZXh0ZW5zaW9uc1RvUmV0dXJuLnB1c2goZXh0ZW5zaW9uKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGdldEV4dGVuc2lvbnMoYXNFbGVtZW50KHBhcmVudEVsdChlbHQpKSwgZXh0ZW5zaW9uc1RvUmV0dXJuLCBleHRlbnNpb25zVG9JZ25vcmUpXG4gIH1cblxuICAvLz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBJbml0aWFsaXphdGlvblxuICAvLz0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICB2YXIgaXNSZWFkeSA9IGZhbHNlXG4gIGdldERvY3VtZW50KCkuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCkge1xuICAgIGlzUmVhZHkgPSB0cnVlXG4gIH0pXG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBmdW5jdGlvbiBub3cgaWYgRE9NQ29udGVudExvYWRlZCBoYXMgZmlyZWQsIG90aGVyd2lzZSBsaXN0ZW4gZm9yIGl0LlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHVzZXMgaXNSZWFkeSBiZWNhdXNlIHRoZXJlIGlzIG5vIHJlbGlhYmxlIHdheSB0byBhc2sgdGhlIGJyb3dzZXIgd2hldGhlclxuICAgKiB0aGUgRE9NQ29udGVudExvYWRlZCBldmVudCBoYXMgYWxyZWFkeSBiZWVuIGZpcmVkOyB0aGVyZSdzIGEgZ2FwIGJldHdlZW4gRE9NQ29udGVudExvYWRlZFxuICAgKiBmaXJpbmcgYW5kIHJlYWR5c3RhdGU9Y29tcGxldGUuXG4gICAqL1xuICBmdW5jdGlvbiByZWFkeShmbikge1xuICAgIC8vIENoZWNraW5nIHJlYWR5U3RhdGUgaGVyZSBpcyBhIGZhaWxzYWZlIGluIGNhc2UgdGhlIGh0bXggc2NyaXB0IHRhZyBlbnRlcmVkIHRoZSBET00gYnlcbiAgICAvLyBzb21lIG1lYW5zIG90aGVyIHRoYW4gdGhlIGluaXRpYWwgcGFnZSBsb2FkLlxuICAgIGlmIChpc1JlYWR5IHx8IGdldERvY3VtZW50KCkucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgZm4oKVxuICAgIH0gZWxzZSB7XG4gICAgICBnZXREb2N1bWVudCgpLmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBmbilcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbnNlcnRJbmRpY2F0b3JTdHlsZXMoKSB7XG4gICAgaWYgKGh0bXguY29uZmlnLmluY2x1ZGVJbmRpY2F0b3JTdHlsZXMgIT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBub25jZUF0dHJpYnV0ZSA9IGh0bXguY29uZmlnLmlubGluZVN0eWxlTm9uY2UgPyBgIG5vbmNlPVwiJHtodG14LmNvbmZpZy5pbmxpbmVTdHlsZU5vbmNlfVwiYCA6ICcnXG4gICAgICBnZXREb2N1bWVudCgpLmhlYWQuaW5zZXJ0QWRqYWNlbnRIVE1MKCdiZWZvcmVlbmQnLFxuICAgICAgICAnPHN0eWxlJyArIG5vbmNlQXR0cmlidXRlICsgJz5cXFxuICAgICAgLicgKyBodG14LmNvbmZpZy5pbmRpY2F0b3JDbGFzcyArICd7b3BhY2l0eTowfVxcXG4gICAgICAuJyArIGh0bXguY29uZmlnLnJlcXVlc3RDbGFzcyArICcgLicgKyBodG14LmNvbmZpZy5pbmRpY2F0b3JDbGFzcyArICd7b3BhY2l0eToxOyB0cmFuc2l0aW9uOiBvcGFjaXR5IDIwMG1zIGVhc2UtaW47fVxcXG4gICAgICAuJyArIGh0bXguY29uZmlnLnJlcXVlc3RDbGFzcyArICcuJyArIGh0bXguY29uZmlnLmluZGljYXRvckNsYXNzICsgJ3tvcGFjaXR5OjE7IHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXMgZWFzZS1pbjt9XFxcbiAgICAgIDwvc3R5bGU+JylcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBnZXRNZXRhQ29uZmlnKCkge1xuICAgIC8qKiBAdHlwZSBIVE1MTWV0YUVsZW1lbnQgKi9cbiAgICBjb25zdCBlbGVtZW50ID0gZ2V0RG9jdW1lbnQoKS5xdWVyeVNlbGVjdG9yKCdtZXRhW25hbWU9XCJodG14LWNvbmZpZ1wiXScpXG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBwYXJzZUpTT04oZWxlbWVudC5jb250ZW50KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1lcmdlTWV0YUNvbmZpZygpIHtcbiAgICBjb25zdCBtZXRhQ29uZmlnID0gZ2V0TWV0YUNvbmZpZygpXG4gICAgaWYgKG1ldGFDb25maWcpIHtcbiAgICAgIGh0bXguY29uZmlnID0gbWVyZ2VPYmplY3RzKGh0bXguY29uZmlnLCBtZXRhQ29uZmlnKVxuICAgIH1cbiAgfVxuXG4gIC8vIGluaXRpYWxpemUgdGhlIGRvY3VtZW50XG4gIHJlYWR5KGZ1bmN0aW9uKCkge1xuICAgIG1lcmdlTWV0YUNvbmZpZygpXG4gICAgaW5zZXJ0SW5kaWNhdG9yU3R5bGVzKClcbiAgICBsZXQgYm9keSA9IGdldERvY3VtZW50KCkuYm9keVxuICAgIHByb2Nlc3NOb2RlKGJvZHkpXG4gICAgY29uc3QgcmVzdG9yZWRFbHRzID0gZ2V0RG9jdW1lbnQoKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgXCJbaHgtdHJpZ2dlcj0ncmVzdG9yZWQnXSxbZGF0YS1oeC10cmlnZ2VyPSdyZXN0b3JlZCddXCJcbiAgICApXG4gICAgYm9keS5hZGRFdmVudExpc3RlbmVyKCdodG14OmFib3J0JywgZnVuY3Rpb24oZXZ0KSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldnQudGFyZ2V0XG4gICAgICBjb25zdCBpbnRlcm5hbERhdGEgPSBnZXRJbnRlcm5hbERhdGEodGFyZ2V0KVxuICAgICAgaWYgKGludGVybmFsRGF0YSAmJiBpbnRlcm5hbERhdGEueGhyKSB7XG4gICAgICAgIGludGVybmFsRGF0YS54aHIuYWJvcnQoKVxuICAgICAgfVxuICAgIH0pXG4gICAgLyoqIEB0eXBlIHsoZXY6IFBvcFN0YXRlRXZlbnQpID0+IGFueX0gKi9cbiAgICBjb25zdCBvcmlnaW5hbFBvcHN0YXRlID0gd2luZG93Lm9ucG9wc3RhdGUgPyB3aW5kb3cub25wb3BzdGF0ZS5iaW5kKHdpbmRvdykgOiBudWxsXG4gICAgLyoqIEB0eXBlIHsoZXY6IFBvcFN0YXRlRXZlbnQpID0+IGFueX0gKi9cbiAgICB3aW5kb3cub25wb3BzdGF0ZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQuc3RhdGUgJiYgZXZlbnQuc3RhdGUuaHRteCkge1xuICAgICAgICByZXN0b3JlSGlzdG9yeSgpXG4gICAgICAgIGZvckVhY2gocmVzdG9yZWRFbHRzLCBmdW5jdGlvbihlbHQpIHtcbiAgICAgICAgICB0cmlnZ2VyRXZlbnQoZWx0LCAnaHRteDpyZXN0b3JlZCcsIHtcbiAgICAgICAgICAgIGRvY3VtZW50OiBnZXREb2N1bWVudCgpLFxuICAgICAgICAgICAgdHJpZ2dlckV2ZW50XG4gICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvcmlnaW5hbFBvcHN0YXRlKSB7XG4gICAgICAgICAgb3JpZ2luYWxQb3BzdGF0ZShldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBnZXRXaW5kb3coKS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgdHJpZ2dlckV2ZW50KGJvZHksICdodG14OmxvYWQnLCB7fSkgLy8gZ2l2ZSByZWFkeSBoYW5kbGVycyBhIGNoYW5jZSB0byBsb2FkIHVwIGJlZm9yZSBmaXJpbmcgdGhpcyBldmVudFxuICAgICAgYm9keSA9IG51bGwgLy8ga2lsbCByZWZlcmVuY2UgZm9yIGdjXG4gICAgfSwgMClcbiAgfSlcblxuICByZXR1cm4gaHRteFxufSkoKVxuXG4vKiogQHR5cGVkZWYgeydnZXQnfCdoZWFkJ3wncG9zdCd8J3B1dCd8J2RlbGV0ZSd8J2Nvbm5lY3QnfCdvcHRpb25zJ3wndHJhY2UnfCdwYXRjaCd9IEh0dHBWZXJiICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gU3dhcE9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2VsZWN0XVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzZWxlY3RPT0JdXG4gKiBAcHJvcGVydHkgeyp9IFtldmVudEluZm9dXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2FuY2hvcl1cbiAqIEBwcm9wZXJ0eSB7RWxlbWVudH0gW2NvbnRleHRFbGVtZW50XVxuICogQHByb3BlcnR5IHtzd2FwQ2FsbGJhY2t9IFthZnRlclN3YXBDYWxsYmFja11cbiAqIEBwcm9wZXJ0eSB7c3dhcENhbGxiYWNrfSBbYWZ0ZXJTZXR0bGVDYWxsYmFja11cbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBzd2FwQ2FsbGJhY2tcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsnaW5uZXJIVE1MJyB8ICdvdXRlckhUTUwnIHwgJ2JlZm9yZWJlZ2luJyB8ICdhZnRlcmJlZ2luJyB8ICdiZWZvcmVlbmQnIHwgJ2FmdGVyZW5kJyB8ICdkZWxldGUnIHwgJ25vbmUnIHwgc3RyaW5nfSBIdG14U3dhcFN0eWxlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBIdG14U3dhcFNwZWNpZmljYXRpb25cbiAqIEBwcm9wZXJ0eSB7SHRteFN3YXBTdHlsZX0gc3dhcFN0eWxlXG4gKiBAcHJvcGVydHkge251bWJlcn0gc3dhcERlbGF5XG4gKiBAcHJvcGVydHkge251bWJlcn0gc2V0dGxlRGVsYXlcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3RyYW5zaXRpb25dXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpZ25vcmVUaXRsZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbaGVhZF1cbiAqIEBwcm9wZXJ0eSB7J3RvcCcgfCAnYm90dG9tJ30gW3Njcm9sbF1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2Nyb2xsVGFyZ2V0XVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzaG93XVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzaG93VGFyZ2V0XVxuICogQHByb3BlcnR5IHtib29sZWFufSBbZm9jdXNTY3JvbGxdXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7KCh0aGlzOk5vZGUsIGV2dDpFdmVudCkgPT4gYm9vbGVhbikgJiB7c291cmNlOiBzdHJpbmd9fSBDb25kaXRpb25hbEZ1bmN0aW9uXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBIdG14VHJpZ2dlclNwZWNpZmljYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0cmlnZ2VyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW3BvbGxJbnRlcnZhbF1cbiAqIEBwcm9wZXJ0eSB7Q29uZGl0aW9uYWxGdW5jdGlvbn0gW2V2ZW50RmlsdGVyXVxuICogQHByb3BlcnR5IHtib29sZWFufSBbY2hhbmdlZF1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW29uY2VdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtjb25zdW1lXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtkZWxheV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZnJvbV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdGFyZ2V0XVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFt0aHJvdHRsZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbcXVldWVdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3Jvb3RdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3RocmVzaG9sZF1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHt7ZWx0OiBFbGVtZW50LCBtZXNzYWdlOiBzdHJpbmcsIHZhbGlkaXR5OiBWYWxpZGl0eVN0YXRlfX0gSHRteEVsZW1lbnRWYWxpZGF0aW9uRXJyb3JcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBIdG14SGVhZGVyU3BlY2lmaWNhdGlvblxuICogQHByb3BlcnR5IHsndHJ1ZSd9IEhYLVJlcXVlc3RcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IEhYLVRyaWdnZXJcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfG51bGx9IEhYLVRyaWdnZXItTmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmd8bnVsbH0gSFgtVGFyZ2V0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gSFgtQ3VycmVudC1VUkxcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbSFgtUHJvbXB0XVxuICogQHByb3BlcnR5IHsndHJ1ZSd9IFtIWC1Cb29zdGVkXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtDb250ZW50LVR5cGVdXG4gKiBAcHJvcGVydHkgeyd0cnVlJ30gW0hYLUhpc3RvcnktUmVzdG9yZS1SZXF1ZXN0XVxuICovXG5cbi8qKiBAdHlwZWRlZiBIdG14QWpheEhlbHBlckNvbnRleHRcbiAqIEBwcm9wZXJ0eSB7RWxlbWVudHxzdHJpbmd9IFtzb3VyY2VdXG4gKiBAcHJvcGVydHkge0V2ZW50fSBbZXZlbnRdXG4gKiBAcHJvcGVydHkge0h0bXhBamF4SGFuZGxlcn0gW2hhbmRsZXJdXG4gKiBAcHJvcGVydHkge0VsZW1lbnR8c3RyaW5nfSBbdGFyZ2V0XVxuICogQHByb3BlcnR5IHtIdG14U3dhcFN0eWxlfSBbc3dhcF1cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fEZvcm1EYXRhfSBbdmFsdWVzXVxuICogQHByb3BlcnR5IHtSZWNvcmQ8c3RyaW5nLHN0cmluZz59IFtoZWFkZXJzXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtzZWxlY3RdXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBIdG14UmVxdWVzdENvbmZpZ1xuICogQHByb3BlcnR5IHtib29sZWFufSBib29zdGVkXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHVzZVVybFBhcmFtc1xuICogQHByb3BlcnR5IHtGb3JtRGF0YX0gZm9ybURhdGFcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBwYXJhbWV0ZXJzIGZvcm1EYXRhIHByb3h5XG4gKiBAcHJvcGVydHkge0Zvcm1EYXRhfSB1bmZpbHRlcmVkRm9ybURhdGFcbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB1bmZpbHRlcmVkUGFyYW1ldGVycyB1bmZpbHRlcmVkRm9ybURhdGEgcHJveHlcbiAqIEBwcm9wZXJ0eSB7SHRteEhlYWRlclNwZWNpZmljYXRpb259IGhlYWRlcnNcbiAqIEBwcm9wZXJ0eSB7RWxlbWVudH0gdGFyZ2V0XG4gKiBAcHJvcGVydHkge0h0dHBWZXJifSB2ZXJiXG4gKiBAcHJvcGVydHkge0h0bXhFbGVtZW50VmFsaWRhdGlvbkVycm9yW119IGVycm9yc1xuICogQHByb3BlcnR5IHtib29sZWFufSB3aXRoQ3JlZGVudGlhbHNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB0aW1lb3V0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGF0aFxuICogQHByb3BlcnR5IHtFdmVudH0gdHJpZ2dlcmluZ0V2ZW50XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBIdG14UmVzcG9uc2VJbmZvXG4gKiBAcHJvcGVydHkge1hNTEh0dHBSZXF1ZXN0fSB4aHJcbiAqIEBwcm9wZXJ0eSB7RWxlbWVudH0gdGFyZ2V0XG4gKiBAcHJvcGVydHkge0h0bXhSZXF1ZXN0Q29uZmlnfSByZXF1ZXN0Q29uZmlnXG4gKiBAcHJvcGVydHkge0h0bXhBamF4RXRjfSBldGNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gYm9vc3RlZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNlbGVjdFxuICogQHByb3BlcnR5IHt7cmVxdWVzdFBhdGg6IHN0cmluZywgZmluYWxSZXF1ZXN0UGF0aDogc3RyaW5nLCByZXNwb25zZVBhdGg6IHN0cmluZ3xudWxsLCBhbmNob3I6IHN0cmluZ319IHBhdGhJbmZvXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtmYWlsZWRdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtzdWNjZXNzZnVsXVxuICogQHByb3BlcnR5IHtib29sZWFufSBba2VlcEluZGljYXRvcnNdXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBIdG14QWpheEV0Y1xuICogQHByb3BlcnR5IHtib29sZWFufSBbcmV0dXJuUHJvbWlzZV1cbiAqIEBwcm9wZXJ0eSB7SHRteEFqYXhIYW5kbGVyfSBbaGFuZGxlcl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2VsZWN0XVxuICogQHByb3BlcnR5IHtFbGVtZW50fSBbdGFyZ2V0T3ZlcnJpZGVdXG4gKiBAcHJvcGVydHkge0h0bXhTd2FwU3R5bGV9IFtzd2FwT3ZlcnJpZGVdXG4gKiBAcHJvcGVydHkge1JlY29yZDxzdHJpbmcsc3RyaW5nPn0gW2hlYWRlcnNdXG4gKiBAcHJvcGVydHkge09iamVjdHxGb3JtRGF0YX0gW3ZhbHVlc11cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2NyZWRlbnRpYWxzXVxuICogQHByb3BlcnR5IHtudW1iZXJ9IFt0aW1lb3V0XVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gSHRteFJlc3BvbnNlSGFuZGxpbmdDb25maWdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbY29kZV1cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3dhcFxuICogQHByb3BlcnR5IHtib29sZWFufSBbZXJyb3JdXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtpZ25vcmVUaXRsZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbc2VsZWN0XVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFt0YXJnZXRdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW3N3YXBPdmVycmlkZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZXZlbnRdXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7SHRteFJlc3BvbnNlSW5mbyAmIHtzaG91bGRTd2FwOiBib29sZWFuLCBzZXJ2ZXJSZXNwb25zZTogYW55LCBpc0Vycm9yOiBib29sZWFuLCBpZ25vcmVUaXRsZTogYm9vbGVhbiwgc2VsZWN0T3ZlcnJpZGU6c3RyaW5nfX0gSHRteEJlZm9yZVN3YXBEZXRhaWxzXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgSHRteEFqYXhIYW5kbGVyXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsdFxuICogQHBhcmFtIHtIdG14UmVzcG9uc2VJbmZvfSByZXNwb25zZUluZm9cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHsoKCkgPT4gdm9pZCl9IEh0bXhTZXR0bGVUYXNrXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBIdG14U2V0dGxlSW5mb1xuICogQHByb3BlcnR5IHtIdG14U2V0dGxlVGFza1tdfSB0YXNrc1xuICogQHByb3BlcnR5IHtFbGVtZW50W119IGVsdHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbdGl0bGVdXG4gKi9cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9iaWdza3lzb2Z0d2FyZS9odG14LWV4dGVuc2lvbnMvYmxvYi9tYWluL1JFQURNRS5tZFxuICogQHR5cGVkZWYge09iamVjdH0gSHRteEV4dGVuc2lvblxuICogQHByb3BlcnR5IHsoYXBpOiBhbnkpID0+IHZvaWR9IGluaXRcbiAqIEBwcm9wZXJ0eSB7KG5hbWU6IHN0cmluZywgZXZlbnQ6IEV2ZW50fEN1c3RvbUV2ZW50KSA9PiBib29sZWFufSBvbkV2ZW50XG4gKiBAcHJvcGVydHkgeyh0ZXh0OiBzdHJpbmcsIHhocjogWE1MSHR0cFJlcXVlc3QsIGVsdDogRWxlbWVudCkgPT4gc3RyaW5nfSB0cmFuc2Zvcm1SZXNwb25zZVxuICogQHByb3BlcnR5IHsoc3dhcFN0eWxlOiBIdG14U3dhcFN0eWxlKSA9PiBib29sZWFufSBpc0lubGluZVN3YXBcbiAqIEBwcm9wZXJ0eSB7KHN3YXBTdHlsZTogSHRteFN3YXBTdHlsZSwgdGFyZ2V0OiBOb2RlLCBmcmFnbWVudDogTm9kZSwgc2V0dGxlSW5mbzogSHRteFNldHRsZUluZm8pID0+IGJvb2xlYW58Tm9kZVtdfSBoYW5kbGVTd2FwXG4gKiBAcHJvcGVydHkgeyh4aHI6IFhNTEh0dHBSZXF1ZXN0LCBwYXJhbWV0ZXJzOiBGb3JtRGF0YSwgZWx0OiBOb2RlKSA9PiAqfHN0cmluZ3xudWxsfSBlbmNvZGVQYXJhbWV0ZXJzXG4gKiBAcHJvcGVydHkgeygpID0+IHN0cmluZ1tdfG51bGx9IGdldFNlbGVjdG9yc1xuICovXG5leHBvcnQgZGVmYXVsdCBodG14XG4iLCJpbXBvcnQgaHRteCBmcm9tIFwiaHRteC5vcmdcIjtcblxuZnVuY3Rpb24gZGVwZW5kc09uKHBhdGhTcGVjOiBhbnksIHVybDogc3RyaW5nKSB7XG4gIGlmIChwYXRoU3BlYyA9PT0gXCJpZ25vcmVcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBkZXBlbmRlbmN5UGF0aCA9IHBhdGhTcGVjLnNwbGl0KFwiL1wiKTtcbiAgY29uc3QgdXJsUGF0aCA9IHVybC5zcGxpdChcIi9cIik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdXJsUGF0aC5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGRlcGVuZGVuY3lFbGVtZW50ID0gZGVwZW5kZW5jeVBhdGguc2hpZnQoKTtcbiAgICBjb25zdCBwYXRoRWxlbWVudCA9IHVybFBhdGhbaV07XG4gICAgaWYgKGRlcGVuZGVuY3lFbGVtZW50ICE9PSBwYXRoRWxlbWVudCAmJiBkZXBlbmRlbmN5RWxlbWVudCAhPT0gXCIqXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgZGVwZW5kZW5jeVBhdGgubGVuZ3RoID09PSAwIHx8XG4gICAgICAoZGVwZW5kZW5jeVBhdGgubGVuZ3RoID09PSAxICYmIGRlcGVuZGVuY3lQYXRoWzBdID09PSBcIlwiKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcmVmcmVzaFBhdGgocGF0aDogc3RyaW5nKSB7XG4gIGNvbnN0IGVsdHNXaXRoRGVwcyA9IGh0bXguZmluZEFsbChcIltwYXRoLWRlcHNdXCIpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGVsdHNXaXRoRGVwcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGVsdCA9IGVsdHNXaXRoRGVwc1tpXTtcbiAgICBpZiAoZGVwZW5kc09uKGVsdC5nZXRBdHRyaWJ1dGUoXCJwYXRoLWRlcHNcIiksIHBhdGgpKSB7XG4gICAgICBodG14LnRyaWdnZXIoZWx0LCBcInBhdGgtZGVwc1wiLCBudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuaHRteC5kZWZpbmVFeHRlbnNpb24oXCJwYXRoLWRlcHNcIiwge1xuICAvLyBAdHMtaWdub3JlXG4gIG9uRXZlbnQ6IGZ1bmN0aW9uIChuYW1lLCBldnQpIHtcbiAgICBpZiAoIShldnQgaW5zdGFuY2VvZiBDdXN0b21FdmVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG5hbWUgPT09IFwiaHRteDpiZWZvcmVPbkxvYWRcIikge1xuICAgICAgY29uc3QgY29uZmlnID0gZXZ0LmRldGFpbC5yZXF1ZXN0Q29uZmlnO1xuICAgICAgLy8gbXV0YXRpbmcgY2FsbFxuICAgICAgaWYgKFxuICAgICAgICBjb25maWcgJiZcbiAgICAgICAgY29uZmlnLnZlcmIgIT09IFwiZ2V0XCIgJiZcbiAgICAgICAgZXZ0LnRhcmdldCAhPSBudWxsICYmXG4gICAgICAgIGV2dC50YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50ICYmXG4gICAgICAgIGV2dC50YXJnZXQuZ2V0QXR0cmlidXRlKFwicGF0aC1kZXBzXCIpICE9PSBcImlnbm9yZVwiXG4gICAgICApIHtcbiAgICAgICAgcmVmcmVzaFBhdGgoY29uZmlnLnBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn0pO1xuIiwiaW1wb3J0IGh0bXgsIHtIdG14U2V0dGxlSW5mbywgSHRteFN3YXBTdHlsZX0gZnJvbSBcImh0bXgub3JnXCI7XG5cbmZ1bmN0aW9uIGtlYmFiRXZlbnROYW1lKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCAnJDEtJDInKS50b0xvd2VyQ2FzZSgpXG59XG5cbmNvbnN0IGlnbm9yZWRFdmVudHMgPSBbJ2h0bXg6YmVmb3JlUHJvY2Vzc05vZGUnLCAnaHRteDphZnRlclByb2Nlc3NOb2RlJywgJ2h0bXg6YmVmb3JlU3dhcCcsICdodG14OmFmdGVyU3dhcCcsICdodG14OmJlZm9yZU9uTG9hZCcsICdodG14OmFmdGVyT25Mb2FkJywgJ2h0bXg6Y29uZmlnUmVxdWVzdCcsICdodG14OmNvbmZpZ1Jlc3BvbnNlJywgJ2h0bXg6cmVzcG9uc2VFcnJvciddO1xuXG5mdW5jdGlvbiBtYWtlRXZlbnQoZXZlbnROYW1lOiBzdHJpbmcsIGRldGFpbDogYW55KSB7XG4gICAgbGV0IGV2dFxuICAgIGlmICh3aW5kb3cuQ3VzdG9tRXZlbnQgJiYgdHlwZW9mIHdpbmRvdy5DdXN0b21FdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUT0RPOiBgY29tcG9zZWQ6IHRydWVgIGhlcmUgaXMgYSBoYWNrIHRvIG1ha2UgZ2xvYmFsIGV2ZW50IGhhbmRsZXJzIHdvcmsgd2l0aCBldmVudHMgaW4gc2hhZG93IERPTVxuICAgICAgICBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoZXZlbnROYW1lLCB7IGJ1YmJsZXM6IGZhbHNlLCBjYW5jZWxhYmxlOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSwgZGV0YWlsIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0N1c3RvbUV2ZW50JylcbiAgICAgICAgZXZ0LmluaXRDdXN0b21FdmVudChldmVudE5hbWUsIHRydWUsIHRydWUsIGRldGFpbClcbiAgICB9XG4gICAgcmV0dXJuIGV2dFxufVxuXG5mdW5jdGlvbiB0cmlnZ2VyQ2hpbGRyZW4odGFyZ2V0OiBIVE1MRWxlbWVudCwgbmFtZTogc3RyaW5nLCBldmVudDogQ3VzdG9tRXZlbnQsIHRyaWdnZXJlZDogU2V0PEhUTUxFbGVtZW50Pikge1xuICAgIGlmKGlnbm9yZWRFdmVudHMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0LmNoaWxkcmVuKSB7XG4gICAgICAgIEFycmF5LmZyb20odGFyZ2V0LmNoaWxkcmVuKS5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZWhhYiA9IGtlYmFiRXZlbnROYW1lKG5hbWUpO1xuICAgICAgICAgICAgY29uc3QgZXZlbnROYW1lID0ga2VoYWIucmVwbGFjZShcImh0bXg6XCIsIFwiaHgtb246OlwiKVxuICAgICAgICAgICAgaWYgKCF0cmlnZ2VyZWQuaGFzKGUgYXMgSFRNTEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgaWYoZS5oYXNBdHRyaWJ1dGUoZXZlbnROYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdFdmVudCA9IG1ha2VFdmVudChldmVudE5hbWUucmVwbGFjZShcImh4LW9uOjpcIiwgXCJodG14OlwiKSwgZXZlbnQuZGV0YWlsKVxuICAgICAgICAgICAgICAgICAgICBuZXdFdmVudC5kZXRhaWwubWV0YSA9ICd0cmlnZ2VyLWNoaWxkcmVuJ1xuICAgICAgICAgICAgICAgICAgICBlLmRpc3BhdGNoRXZlbnQobmV3RXZlbnQpXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJlZC5hZGQoZSBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJDaGlsZHJlbihlIGFzIEhUTUxFbGVtZW50LCBuYW1lLCBldmVudCwgdHJpZ2dlcmVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuXG5odG14LmRlZmluZUV4dGVuc2lvbihcInRyaWdnZXItY2hpbGRyZW5cIiwge1xuICAgIG9uRXZlbnQ6IChuYW1lLCBldnQ6IEV2ZW50IHwgQ3VzdG9tRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCEoZXZ0IGluc3RhbmNlb2YgQ3VzdG9tRXZlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYoZXZ0LmRldGFpbC5tZXRhID09PSAndHJpZ2dlci1jaGlsZHJlbicpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0cmlnZ2VyZWQgPSBuZXcgU2V0PEhUTUxFbGVtZW50PigpO1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50IHx8IGV2dC5kZXRhaWwudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICB0cmlnZ2VyQ2hpbGRyZW4odGFyZ2V0LCBuYW1lLCBldnQsIHRyaWdnZXJlZCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgaW5pdDogZnVuY3Rpb24gKGFwaTogYW55KTogdm9pZCB7XG4gICAgfSxcbiAgICB0cmFuc2Zvcm1SZXNwb25zZTogZnVuY3Rpb24gKFxuICAgICAgICB0ZXh0OiBzdHJpbmcsXG4gICAgICAgIHhocjogWE1MSHR0cFJlcXVlc3QsXG4gICAgICAgIGVsdDogRWxlbWVudCxcbiAgICApOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9LFxuICAgIGlzSW5saW5lU3dhcDogZnVuY3Rpb24gKHN3YXBTdHlsZTogSHRteFN3YXBTdHlsZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBoYW5kbGVTd2FwOiBmdW5jdGlvbiAoXG4gICAgICAgIHN3YXBTdHlsZTogSHRteFN3YXBTdHlsZSxcbiAgICAgICAgdGFyZ2V0OiBOb2RlLFxuICAgICAgICBmcmFnbWVudDogTm9kZSxcbiAgICAgICAgc2V0dGxlSW5mbzogSHRteFNldHRsZUluZm8sXG4gICAgKTogYm9vbGVhbiB8IE5vZGVbXSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGVuY29kZVBhcmFtZXRlcnM6IGZ1bmN0aW9uIChcbiAgICAgICAgeGhyOiBYTUxIdHRwUmVxdWVzdCxcbiAgICAgICAgcGFyYW1ldGVyczogRm9ybURhdGEsXG4gICAgICAgIGVsdDogTm9kZSxcbiAgICApIHtcbiAgICB9LFxuICAgIGdldFNlbGVjdG9yczogZnVuY3Rpb24gKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG59KTtcbiIsImltcG9ydCBodG14IGZyb20gXCJodG14Lm9yZ1wiO1xuXG5odG14LmRlZmluZUV4dGVuc2lvbihcImRlYnVnXCIsIHtcbiAgLy8gQHRzLWlnbm9yZVxuICBvbkV2ZW50OiBmdW5jdGlvbiAobmFtZSwgZXZ0KSB7XG4gICAgaWYgKGNvbnNvbGUuZGVidWcpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcobmFtZSwgZXZ0KTtcbiAgICB9IGVsc2UgaWYgKGNvbnNvbGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiREVCVUc6XCIsIG5hbWUsIGV2dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5vb3BcbiAgICB9XG4gIH0sXG59KTtcbiIsImltcG9ydCBodG14IGZyb20gXCJodG14Lm9yZ1wiO1xuY29uc3QgY29uZmlnOiBhbnkgPSBodG14LmNvbmZpZztcblxuLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9odG14XCIpLkh0bXhJbnRlcm5hbEFwaX0gKi9cbmxldCBhcGk6IGFueTtcblxuY29uc3QgYXR0clByZWZpeCA9IFwiaHgtdGFyZ2V0LVwiO1xuXG4vLyBJRTExIGRvZXNuJ3Qgc3VwcG9ydCBzdHJpbmcuc3RhcnRzV2l0aFxuZnVuY3Rpb24gc3RhcnRzV2l0aChzdHI6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0ci5zdWJzdHJpbmcoMCwgcHJlZml4Lmxlbmd0aCkgPT09IHByZWZpeDtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbHRcbiAqIEBwYXJhbSByZXNwQ29kZU51bWJlclxuICogQHJldHVybnMge0hUTUxFbGVtZW50IHwgbnVsbH1cbiAqL1xuZnVuY3Rpb24gZ2V0UmVzcENvZGVUYXJnZXQoZWx0OiBFbGVtZW50LCByZXNwQ29kZU51bWJlcjogbnVtYmVyKSB7XG4gIGlmICghZWx0IHx8ICFyZXNwQ29kZU51bWJlcikgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgcmVzcENvZGUgPSByZXNwQ29kZU51bWJlci50b1N0cmluZygpO1xuXG4gIC8vICcqJyBpcyB0aGUgb3JpZ2luYWwgc3ludGF4LCBhcyB0aGUgb2J2aW91cyBjaGFyYWN0ZXIgZm9yIGEgd2lsZGNhcmQuXG4gIC8vIFRoZSAneCcgYWx0ZXJuYXRpdmUgd2FzIGFkZGVkIGZvciBtYXhpbXVtIGNvbXBhdGliaWxpdHkgd2l0aCBIVE1MXG4gIC8vIHRlbXBsYXRpbmcgZW5naW5lcywgZHVlIHRvIGFtYmlndWl0eSBhcm91bmQgd2hpY2ggY2hhcmFjdGVycyBhcmVcbiAgLy8gc3VwcG9ydGVkIGluIEhUTUwgYXR0cmlidXRlcy5cbiAgLy9cbiAgLy8gU3RhcnQgd2l0aCB0aGUgbW9zdCBzcGVjaWZpYyBwb3NzaWJsZSBhdHRyaWJ1dGUgYW5kIGdlbmVyYWxpemUgZnJvbVxuICAvLyB0aGVyZS5cbiAgY29uc3QgYXR0clBvc3NpYmlsaXRpZXMgPSBbXG4gICAgcmVzcENvZGUsXG5cbiAgICByZXNwQ29kZS5zdWJzdHIoMCwgMikgKyBcIipcIixcbiAgICByZXNwQ29kZS5zdWJzdHIoMCwgMikgKyBcInhcIixcblxuICAgIHJlc3BDb2RlLnN1YnN0cigwLCAxKSArIFwiKlwiLFxuICAgIHJlc3BDb2RlLnN1YnN0cigwLCAxKSArIFwieFwiLFxuICAgIHJlc3BDb2RlLnN1YnN0cigwLCAxKSArIFwiKipcIixcbiAgICByZXNwQ29kZS5zdWJzdHIoMCwgMSkgKyBcInh4XCIsXG5cbiAgICBcIipcIixcbiAgICBcInhcIixcbiAgICBcIioqKlwiLFxuICAgIFwieHh4XCIsXG4gIF07XG4gIGlmIChzdGFydHNXaXRoKHJlc3BDb2RlLCBcIjRcIikgfHwgc3RhcnRzV2l0aChyZXNwQ29kZSwgXCI1XCIpKSB7XG4gICAgYXR0clBvc3NpYmlsaXRpZXMucHVzaChcImVycm9yXCIpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRyUG9zc2liaWxpdGllcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGF0dHIgPSBhdHRyUHJlZml4ICsgYXR0clBvc3NpYmlsaXRpZXNbaV07XG4gICAgY29uc3QgYXR0clZhbHVlID0gYXBpLmdldENsb3Nlc3RBdHRyaWJ1dGVWYWx1ZShlbHQsIGF0dHIpO1xuICAgIGlmIChhdHRyVmFsdWUpIHtcbiAgICAgIGlmIChhdHRyVmFsdWUgPT09IFwidGhpc1wiKSB7XG4gICAgICAgIHJldHVybiBhcGkuZmluZFRoaXNFbGVtZW50KGVsdCwgYXR0cik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYXBpLnF1ZXJ5U2VsZWN0b3JFeHQoZWx0LCBhdHRyVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKiogQHBhcmFtIHtFdmVudH0gZXZ0ICovXG5mdW5jdGlvbiBoYW5kbGVFcnJvckZsYWcoZXZ0OiBDdXN0b21FdmVudCkge1xuICBpZiAoZXZ0LmRldGFpbC5pc0Vycm9yKSB7XG4gICAgaWYgKGNvbmZpZy5yZXNwb25zZVRhcmdldFVuc2V0c0Vycm9yKSB7XG4gICAgICBldnQuZGV0YWlsLmlzRXJyb3IgPSBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29uZmlnLnJlc3BvbnNlVGFyZ2V0U2V0c0Vycm9yKSB7XG4gICAgZXZ0LmRldGFpbC5pc0Vycm9yID0gdHJ1ZTtcbiAgfVxufVxuXG5odG14LmRlZmluZUV4dGVuc2lvbihcInJlc3BvbnNlLXRhcmdldHNcIiwge1xuICAvLyBAdHMtaWdub3JlXG4gIGluaXQ6IChhcGlSZWYpID0+IHtcbiAgICBhcGkgPSBhcGlSZWY7XG5cbiAgICBpZiAoY29uZmlnLnJlc3BvbnNlVGFyZ2V0VW5zZXRzRXJyb3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uZmlnLnJlc3BvbnNlVGFyZ2V0VW5zZXRzRXJyb3IgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnJlc3BvbnNlVGFyZ2V0U2V0c0Vycm9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbmZpZy5yZXNwb25zZVRhcmdldFNldHNFcnJvciA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnJlc3BvbnNlVGFyZ2V0UHJlZmVyc0V4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbmZpZy5yZXNwb25zZVRhcmdldFByZWZlcnNFeGlzdGluZyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnJlc3BvbnNlVGFyZ2V0UHJlZmVyc1JldGFyZ2V0SGVhZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbmZpZy5yZXNwb25zZVRhcmdldFByZWZlcnNSZXRhcmdldEhlYWRlciA9IHRydWU7XG4gICAgfVxuICB9LFxuXG4gIC8vIEB0cy1pZ25vcmVcbiAgb25FdmVudDogKG5hbWUsIGV2dCkgPT4ge1xuICAgIGlmICghKGV2dCBpbnN0YW5jZW9mIEN1c3RvbUV2ZW50KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBuYW1lID09PSBcImh0bXg6YmVmb3JlU3dhcFwiICYmXG4gICAgICBldnQuZGV0YWlsLnhociAmJlxuICAgICAgZXZ0LmRldGFpbC54aHIuc3RhdHVzICE9PSAyMDBcbiAgICApIHtcbiAgICAgIGlmIChldnQuZGV0YWlsLnRhcmdldCkge1xuICAgICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVGFyZ2V0UHJlZmVyc0V4aXN0aW5nKSB7XG4gICAgICAgICAgZXZ0LmRldGFpbC5zaG91bGRTd2FwID0gdHJ1ZTtcbiAgICAgICAgICBoYW5kbGVFcnJvckZsYWcoZXZ0KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29uZmlnLnJlc3BvbnNlVGFyZ2V0UHJlZmVyc1JldGFyZ2V0SGVhZGVyICYmXG4gICAgICAgICAgZXZ0LmRldGFpbC54aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkubWF0Y2goL0hYLVJldGFyZ2V0Oi9pKVxuICAgICAgICApIHtcbiAgICAgICAgICBldnQuZGV0YWlsLnNob3VsZFN3YXAgPSB0cnVlO1xuICAgICAgICAgIGhhbmRsZUVycm9yRmxhZyhldnQpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWV2dC5kZXRhaWwucmVxdWVzdENvbmZpZykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhcmdldCA9IGdldFJlc3BDb2RlVGFyZ2V0KFxuICAgICAgICBldnQuZGV0YWlsLnJlcXVlc3RDb25maWcuZWx0LFxuICAgICAgICBldnQuZGV0YWlsLnhoci5zdGF0dXMsXG4gICAgICApO1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBoYW5kbGVFcnJvckZsYWcoZXZ0KTtcbiAgICAgICAgZXZ0LmRldGFpbC5zaG91bGRTd2FwID0gdHJ1ZTtcbiAgICAgICAgZXZ0LmRldGFpbC50YXJnZXQgPSB0YXJnZXQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0sXG59KTtcbiIsImltcG9ydCBodG14IGZyb20gXCJodG14Lm9yZ1wiO1xuXG5odG14LmRlZmluZUV4dGVuc2lvbihcIm11dGF0aW9uLWVycm9yXCIsIHtcbiAgLy8gQHRzLWlnbm9yZVxuICBvbkV2ZW50OiAobmFtZSwgZXZ0KSA9PiB7XG4gICAgaWYgKCEoZXZ0IGluc3RhbmNlb2YgQ3VzdG9tRXZlbnQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChuYW1lID09PSBcImh0bXg6YWZ0ZXJSZXF1ZXN0XCIpIHtcbiAgICAgIGlmICghZXZ0LmRldGFpbCB8fCAhZXZ0LmRldGFpbC54aHIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhdHVzID0gZXZ0LmRldGFpbC54aHIuc3RhdHVzO1xuICAgICAgaWYgKHN0YXR1cyA+PSA0MDApIHtcbiAgICAgICAgaHRteC5maW5kQWxsKFwiW2h4LW9uXFxcXDpcXFxcOm11dGF0aW9uLWVycm9yXVwiKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgaHRteC50cmlnZ2VyKGVsZW1lbnQsIFwiaHRteDptdXRhdGlvbi1lcnJvclwiLCB7IHN0YXR1cyB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxufSk7XG4iLCJpbXBvcnQgaHRteCBmcm9tIFwiaHRteC5vcmdcIjtcbmltcG9ydCB7Y3JlYXRlV2ViU29ja2V0Q2xpZW50fSBmcm9tIFwiLi4vdXRpbC93c1wiO1xuXG5sZXQgbGFzdFZlcnNpb24gPSBcIlwiO1xuXG5odG14LmRlZmluZUV4dGVuc2lvbihcImxpdmVyZWxvYWRcIiwge1xuICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBsZXQgZW5hYmxlZCA9IGZhbHNlXG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBBcnJheS5mcm9tKGh0bXguZmluZEFsbChcIltoeC1leHRdXCIpKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImh4LWV4dFwiKTtcbiAgICAgICAgICAgIGlmKHZhbHVlPy5zcGxpdChcIiBcIikuaW5jbHVkZXMoXCJsaXZlcmVsb2FkXCIpKSB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZCA9IHRydWVcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFlbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKCdsaXZlcmVsb2FkIGV4dGVuc2lvbiBpbml0aWFsaXplZC4nKTtcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IEV2ZW50U291cmNlIG9iamVjdCBhbmQgcG9pbnQgaXQgdG8geW91ciBTU0UgZW5kcG9pbnRcbiAgICAgICAgY29uc3QgZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2UoJy9kZXYvbGl2ZXJlbG9hZCcpO1xuICAgICAgICAvLyBMaXN0ZW4gZm9yIG1lc3NhZ2VzIGZyb20gdGhlIHNlcnZlclxuICAgICAgICBldmVudFNvdXJjZS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGV2ZW50LmRhdGFcbiAgICAgICAgICAgIC8vIExvZyB0aGUgbWVzc2FnZSBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlclxuICAgICAgICAgICAgaWYobGFzdFZlcnNpb24gPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICBsYXN0VmVyc2lvbiA9IG1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihsYXN0VmVyc2lvbiAhPT0gbWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGxhc3RWZXJzaW9uID0gbWVzc2FnZTtcbiAgICAgICAgICAgICAgICByZWxvYWQoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBIYW5kbGUgZXJyb3JzIChlLmcuLCB3aGVuIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZClcbiAgICAgICAgZXZlbnRTb3VyY2Uub25lcnJvciA9IGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFdmVudFNvdXJjZSBlcnJvcjonLCBlcnJvcik7XG4gICAgICAgIH07XG5cbiAgICB9LFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBvbkV2ZW50OiBmdW5jdGlvbiAobmFtZSwgZXZ0KSB7XG5cbiAgICB9LFxufSk7XG5cbmZ1bmN0aW9uIHJlbG9hZCgpIHtcbiAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcbn0iLCJpbXBvcnQgaHRteCBmcm9tIFwiaHRteC5vcmdcIjtcblxuY29uc3QgZXZhbEZ1bmNSZWdleCA9L19fZXZhbF9bQS1aYS16MC05XStcXChbYS16XStcXCkvZ21cblxuaHRteC5kZWZpbmVFeHRlbnNpb24oXCJodG1nb1wiLCB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIG9uRXZlbnQ6IGZ1bmN0aW9uIChuYW1lLCBldnQpIHtcbiAgICAgICBpZihuYW1lID09PSBcImh0bXg6YmVmb3JlQ2xlYW51cEVsZW1lbnRcIiAmJiBldnQudGFyZ2V0KSB7XG4gICAgICAgICAgIHJlbW92ZUFzc29jaWF0ZWRTY3JpcHRzKGV2dC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgIH1cbiAgICB9LFxufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVBc3NvY2lhdGVkU2NyaXB0cyhlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgY29uc3QgYXR0cmlidXRlcyA9IEFycmF5LmZyb20oZWxlbWVudC5hdHRyaWJ1dGVzKVxuICAgIGZvciAobGV0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgY29uc3QgbWF0Y2hlcyA9IGF0dHJpYnV0ZS52YWx1ZS5tYXRjaChldmFsRnVuY1JlZ2V4KSB8fCBbXVxuICAgICAgICBmb3IgKGxldCBtYXRjaCBvZiBtYXRjaGVzKSB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IG1hdGNoLnJlcGxhY2UoXCIoKVwiLCBcIlwiKS5yZXBsYWNlKFwiKHRoaXMpXCIsIFwiXCIpLnJlcGxhY2UoXCI7XCIsIFwiXCIpXG4gICAgICAgICAgICBjb25zdCBlbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZClcbiAgICAgICAgICAgIGlmKGVsZSAmJiBlbGUudGFnTmFtZSA9PT0gXCJTQ1JJUFRcIikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJyZW1vdmluZyBhc3NvY2lhdGVkIHNjcmlwdCB3aXRoIGlkXCIsIGlkKVxuICAgICAgICAgICAgICAgIGVsZS5yZW1vdmUoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IGh0bXggZnJvbSAnaHRteC5vcmcnXG5pbXBvcnQge3JlbW92ZUFzc29jaWF0ZWRTY3JpcHRzfSBmcm9tIFwiLi9odG1nb1wiO1xuXG5sZXQgYXBpIDogYW55ID0gbnVsbDtcbmxldCBwcm9jZXNzZWQgPSBuZXcgU2V0PHN0cmluZz4oKVxuXG5odG14LmRlZmluZUV4dGVuc2lvbihcInNzZVwiLCB7XG4gICAgaW5pdDogZnVuY3Rpb24gKGFwaVJlZikge1xuICAgICAgICBhcGkgPSBhcGlSZWY7XG4gICAgfSxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgb25FdmVudDogZnVuY3Rpb24gKG5hbWUsIGV2dCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldnQudGFyZ2V0O1xuICAgICAgICBpZighKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZihuYW1lID09PSAnaHRteDpiZWZvcmVDbGVhbnVwRWxlbWVudCcpIHtcbiAgICAgICAgICAgIHJlbW92ZUFzc29jaWF0ZWRTY3JpcHRzKHRhcmdldCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihuYW1lID09PSAnaHRteDpiZWZvcmVQcm9jZXNzTm9kZScpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW3NzZS1jb25uZWN0XScpO1xuICAgICAgICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBBcnJheS5mcm9tKGVsZW1lbnRzKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwic3NlLWNvbm5lY3RcIikhO1xuICAgICAgICAgICAgICAgIGlmKHVybCAmJiAhcHJvY2Vzc2VkLmhhcyh1cmwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbm5lY3RFdmVudFNvdXJjZShlbGVtZW50LCB1cmwpXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZC5hZGQodXJsKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pXG5cbmZ1bmN0aW9uIGNvbm5lY3RFdmVudFNvdXJjZShlbGU6IEVsZW1lbnQsIHVybDogc3RyaW5nKSB7XG4gICAgaWYoIXVybCkge1xuICAgICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc29sZS5pbmZvKCdDb25uZWN0aW5nIHRvIEV2ZW50U291cmNlJywgdXJsKVxuICAgIGNvbnN0IGV2ZW50U291cmNlID0gbmV3IEV2ZW50U291cmNlKHVybCk7XG5cbiAgICBldmVudFNvdXJjZS5hZGRFdmVudExpc3RlbmVyKFwiY2xvc2VcIiwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgaHRteC50cmlnZ2VyKGVsZSwgXCJodG14OnNzZUNsb3NlXCIsIHtldmVudDogZXZlbnR9KTtcbiAgICB9KVxuXG4gICAgZXZlbnRTb3VyY2Uub25vcGVuID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgaHRteC50cmlnZ2VyKGVsZSwgXCJodG14OnNzZU9wZW5cIiwge2V2ZW50OiBldmVudH0pO1xuICAgIH1cblxuICAgIGV2ZW50U291cmNlLm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICBodG14LnRyaWdnZXIoZWxlLCBcImh0bXg6c3NlRXJyb3JcIiwge2V2ZW50OiBldmVudH0pO1xuICAgICAgICBpZiAoZXZlbnRTb3VyY2UucmVhZHlTdGF0ZSA9PSBFdmVudFNvdXJjZS5DTE9TRUQpIHtcbiAgICAgICAgICAgIGh0bXgudHJpZ2dlcihlbGUsIFwiaHRteDpzc2VDbG9zZVwiLCB7ZXZlbnQ6IGV2ZW50fSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBldmVudFNvdXJjZS5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICBjb25zdCBzZXR0bGVJbmZvID0gYXBpLm1ha2VTZXR0bGVJbmZvKGVsZSk7XG4gICAgICAgIGh0bXgudHJpZ2dlcihlbGUsIFwiaHRteDpzc2VCZWZvcmVNZXNzYWdlXCIsIHtldmVudDogZXZlbnR9KTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBldmVudC5kYXRhXG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gYXBpLm1ha2VGcmFnbWVudChyZXNwb25zZSkgYXMgRG9jdW1lbnRGcmFnbWVudDtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBBcnJheS5mcm9tKGZyYWdtZW50LmNoaWxkcmVuKTtcbiAgICAgICAgZm9yIChsZXQgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGFwaS5vb2JTd2FwKGFwaS5nZXRBdHRyaWJ1dGVWYWx1ZShjaGlsZCwgJ2h4LXN3YXAtb29iJykgfHwgJ3RydWUnLCBjaGlsZCwgc2V0dGxlSW5mbyk7XG4gICAgICAgICAgICAvLyBzdXBwb3J0IGh0bWdvIGV2YWxfXyBzY3JpcHRzXG4gICAgICAgICAgICBpZihjaGlsZC50YWdOYW1lID09PSAnU0NSSVBUJyAmJiBjaGlsZC5pZC5zdGFydHNXaXRoKFwiX19ldmFsXCIpKSB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaHRteC50cmlnZ2VyKGVsZSwgXCJodG14OnNzZUFmdGVyTWVzc2FnZVwiLCB7ZXZlbnQ6IGV2ZW50fSk7XG4gICAgfVxufVxuIiwiaW1wb3J0IGh0bXggZnJvbSBcImh0bXgub3JnXCI7XG5pbXBvcnQgXCIuL2h0bXhleHRlbnNpb25zL3BhdGhkZXBzXCI7XG5pbXBvcnQgXCIuL2h0bXhleHRlbnNpb25zL3RyaWdnZXItY2hpbGRyZW5cIjtcbmltcG9ydCBcIi4vaHRteGV4dGVuc2lvbnMvZGVidWdcIjtcbmltcG9ydCBcIi4vaHRteGV4dGVuc2lvbnMvcmVzcG9uc2UtdGFyZ2V0c1wiO1xuaW1wb3J0IFwiLi9odG14ZXh0ZW5zaW9ucy9tdXRhdGlvbi1lcnJvclwiO1xuaW1wb3J0IFwiLi9odG14ZXh0ZW5zaW9ucy9saXZlcmVsb2FkXCJcbmltcG9ydCBcIi4vaHRteGV4dGVuc2lvbnMvaHRtZ29cIjtcbmltcG9ydCBcIi4vaHRteGV4dGVuc2lvbnMvc3NlXCJcblxuZnVuY3Rpb24gd2F0Y2hVcmwoY2FsbGJhY2s6IChvbGRVcmw6IHN0cmluZywgbmV3VXJsOiBzdHJpbmcpID0+IHZvaWQpIHtcbiAgbGV0IGxhc3RVcmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIGlmICh3aW5kb3cubG9jYXRpb24uaHJlZiAhPT0gbGFzdFVybCkge1xuICAgICAgY2FsbGJhY2sobGFzdFVybCwgd2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgICAgbGFzdFVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgIH1cbiAgfSwgMTAwKTtcbn1cblxud2F0Y2hVcmwoKF8sIG5ld1VybCkgPT4ge1xuICBvblVybENoYW5nZShuZXdVcmwpO1xufSk7XG5cbmZ1bmN0aW9uIG9uVXJsQ2hhbmdlKG5ld1VybDogc3RyaW5nKSB7XG4gIGxldCB1cmwgPSBuZXcgVVJMKG5ld1VybCk7XG5cbiAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIltoeC10cmlnZ2VyXVwiKS5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgY29uc3QgdHJpZ2dlcnMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcImh4LXRyaWdnZXJcIik7XG4gICAgaWYgKCF0cmlnZ2Vycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzcGxpdCA9IHRyaWdnZXJzLnNwbGl0KFwiLCBcIik7XG4gICAgaWYgKHNwbGl0LmZpbmQoKHMpID0+IHMgPT09IFwidXJsXCIpKSB7XG4gICAgICBodG14LnN3YXAoZWxlbWVudCwgXCJ1cmxcIiwge1xuICAgICAgICBzd2FwU3R5bGU6IFwib3V0ZXJIVE1MXCIsXG4gICAgICAgIHN3YXBEZWxheTogMCxcbiAgICAgICAgc2V0dGxlRGVsYXk6IDAsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVzXSBvZiB1cmwuc2VhcmNoUGFyYW1zKSB7XG4gICAgICAgIGxldCBldmVudE5hbWUgPSBcInFzOlwiICsga2V5O1xuICAgICAgICBpZiAodHJpZ2dlcnMuaW5jbHVkZXMoZXZlbnROYW1lKSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwidHJpZ2dlcmluZ1wiLCBldmVudE5hbWUpO1xuICAgICAgICAgIGh0bXgudHJpZ2dlcihlbGVtZW50LCBldmVudE5hbWUsIG51bGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiW2h4LW1hdGNoLXFwXVwiKS5mb3JFYWNoKChlbCkgPT4ge1xuICAgIGxldCBoYXNNYXRjaCA9IGZhbHNlO1xuICAgIGZvciAobGV0IG5hbWUgb2YgZWwuZ2V0QXR0cmlidXRlTmFtZXMoKSkge1xuICAgICAgaWYgKG5hbWUuc3RhcnRzV2l0aChcImh4LW1hdGNoLXFwLW1hcHBpbmc6XCIpKSB7XG4gICAgICAgIGxldCBtYXRjaCA9IG5hbWUucmVwbGFjZShcImh4LW1hdGNoLXFwLW1hcHBpbmc6XCIsIFwiXCIpO1xuICAgICAgICBsZXQgdmFsdWUgPSB1cmwuc2VhcmNoUGFyYW1zLmdldChtYXRjaCk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGh0bXguc3dhcChlbCwgZWwuZ2V0QXR0cmlidXRlKG5hbWUpID8/IFwiXCIsIHtcbiAgICAgICAgICAgIHN3YXBTdHlsZTogXCJpbm5lckhUTUxcIixcbiAgICAgICAgICAgIHN3YXBEZWxheTogMCxcbiAgICAgICAgICAgIHNldHRsZURlbGF5OiAwLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGhhc01hdGNoID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWhhc01hdGNoKSB7XG4gICAgICBsZXQgZGVmYXVsdEtleSA9IGVsLmdldEF0dHJpYnV0ZShcImh4LW1hdGNoLXFwLWRlZmF1bHRcIik7XG4gICAgICBpZiAoZGVmYXVsdEtleSkge1xuICAgICAgICBodG14LnN3YXAoXG4gICAgICAgICAgZWwsXG4gICAgICAgICAgZWwuZ2V0QXR0cmlidXRlKFwiaHgtbWF0Y2gtcXAtbWFwcGluZzpcIiArIGRlZmF1bHRLZXkpID8/IFwiXCIsXG4gICAgICAgICAgeyBzd2FwU3R5bGU6IFwiaW5uZXJIVE1MXCIsIHN3YXBEZWxheTogMCwgc2V0dGxlRGVsYXk6IDAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuIl19