This script should not be not be installed directly. It is a library for other scripts to include with the meta directive // @require https://update.greasyfork.org/scripts/440237/1019741/book.js
/*! For license information please see book.js.LICENSE.txt */
(()=>{var e={2152:function(e){var t;t=function(){return function(){var e={686:function(e,t,n){"use strict";n.d(t,{default:function(){return A}});var r=n(279),o=n.n(r),i=n(370),a=n.n(i),s=n(817),l=n.n(s);function u(e){try{return document.execCommand(e)}catch(e){return!1}}var c=function(e){var t=l()(e);return u("cut"),t};function p(e){var t="rtl"===document.documentElement.getAttribute("dir"),n=document.createElement("textarea");n.style.fontSize="12pt",n.style.border="0",n.style.padding="0",n.style.margin="0",n.style.position="absolute",n.style[t?"right":"left"]="-9999px";var r=window.pageYOffset||document.documentElement.scrollTop;return n.style.top="".concat(r,"px"),n.setAttribute("readonly",""),n.value=e,n}var f=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{container:document.body},n="";if("string"==typeof e){var r=p(e);t.container.appendChild(r),n=l()(r),u("copy"),r.remove()}else n=l()(e),u("copy");return n};function d(e){return(d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function h(e){return(h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function g(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function y(e,t){return(y=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function m(e,t){return!t||"object"!==h(t)&&"function"!=typeof t?function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e):t}function v(e){return(v=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function b(e,t){var n="data-clipboard-".concat(e);if(t.hasAttribute(n))return t.getAttribute(n)}var A=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&y(e,t)}(l,e);var t,n,r,o,i,s=(o=l,i=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,t=v(o);if(i){var n=v(this).constructor;e=Reflect.construct(t,arguments,n)}else e=t.apply(this,arguments);return m(this,e)});function l(e,t){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,l),(n=s.call(this)).resolveOptions(t),n.listenClick(e),n}return t=l,r=[{key:"copy",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{container:document.body};return f(e,t)}},{key:"cut",value:function(e){return c(e)}},{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach((function(e){n=n&&!!document.queryCommandSupported(e)})),n}}],(n=[{key:"resolveOptions",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===h(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var t=this;this.listener=a()(e,"click",(function(e){return t.onClick(e)}))}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget,n=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.action,n=void 0===t?"copy":t,r=e.container,o=e.target,i=e.text;if("copy"!==n&&"cut"!==n)throw new Error('Invalid "action" value, use either "copy" or "cut"');if(void 0!==o){if(!o||"object"!==d(o)||1!==o.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===n&&o.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===n&&(o.hasAttribute("readonly")||o.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes')}return i?f(i,{container:r}):o?"cut"===n?c(o):f(o,{container:r}):void 0}({action:this.action(t),container:this.container,target:this.target(t),text:this.text(t)});this.emit(n?"success":"error",{action:this.action,text:n,trigger:t,clearSelection:function(){t&&t.focus(),document.activeElement.blur(),window.getSelection().removeAllRanges()}})}},{key:"defaultAction",value:function(e){return b("action",e)}},{key:"defaultTarget",value:function(e){var t=b("target",e);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return b("text",e)}},{key:"destroy",value:function(){this.listener.destroy()}}])&&g(t.prototype,n),r&&g(t,r),l}(o())},828:function(e){if("undefined"!=typeof Element&&!Element.prototype.matches){var t=Element.prototype;t.matches=t.matchesSelector||t.mozMatchesSelector||t.msMatchesSelector||t.oMatchesSelector||t.webkitMatchesSelector}e.exports=function(e,t){for(;e&&9!==e.nodeType;){if("function"==typeof e.matches&&e.matches(t))return e;e=e.parentNode}}},438:function(e,t,n){var r=n(828);function o(e,t,n,r,o){var a=i.apply(this,arguments);return e.addEventListener(n,a,o),{destroy:function(){e.removeEventListener(n,a,o)}}}function i(e,t,n,o){return function(n){n.delegateTarget=r(n.target,t),n.delegateTarget&&o.call(e,n)}}e.exports=function(e,t,n,r,i){return"function"==typeof e.addEventListener?o.apply(null,arguments):"function"==typeof n?o.bind(null,document).apply(null,arguments):("string"==typeof e&&(e=document.querySelectorAll(e)),Array.prototype.map.call(e,(function(e){return o(e,t,n,r,i)})))}},879:function(e,t){t.node=function(e){return void 0!==e&&e instanceof HTMLElement&&1===e.nodeType},t.nodeList=function(e){var n=Object.prototype.toString.call(e);return void 0!==e&&("[object NodeList]"===n||"[object HTMLCollection]"===n)&&"length"in e&&(0===e.length||t.node(e[0]))},t.string=function(e){return"string"==typeof e||e instanceof String},t.fn=function(e){return"[object Function]"===Object.prototype.toString.call(e)}},370:function(e,t,n){var r=n(879),o=n(438);e.exports=function(e,t,n){if(!e&&!t&&!n)throw new Error("Missing required arguments");if(!r.string(t))throw new TypeError("Second argument must be a String");if(!r.fn(n))throw new TypeError("Third argument must be a Function");if(r.node(e))return function(e,t,n){return e.addEventListener(t,n),{destroy:function(){e.removeEventListener(t,n)}}}(e,t,n);if(r.nodeList(e))return function(e,t,n){return Array.prototype.forEach.call(e,(function(e){e.addEventListener(t,n)})),{destroy:function(){Array.prototype.forEach.call(e,(function(e){e.removeEventListener(t,n)}))}}}(e,t,n);if(r.string(e))return function(e,t,n){return o(document.body,e,t,n)}(e,t,n);throw new TypeError("First argument must be a String, HTMLElement, HTMLCollection, or NodeList")}},817:function(e){e.exports=function(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var r=window.getSelection(),o=document.createRange();o.selectNodeContents(e),r.removeAllRanges(),r.addRange(o),t=r.toString()}return t}},279:function(e){function t(){}t.prototype={on:function(e,t,n){var r=this.e||(this.e={});return(r[e]||(r[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){var r=this;function o(){r.off(e,o),t.apply(n,arguments)}return o._=t,this.on(e,o,n)},emit:function(e){for(var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),r=0,o=n.length;r<o;r++)n[r].fn.apply(n[r].ctx,t);return this},off:function(e,t){var n=this.e||(this.e={}),r=n[e],o=[];if(r&&t)for(var i=0,a=r.length;i<a;i++)r[i].fn!==t&&r[i].fn._!==t&&o.push(r[i]);return o.length?n[e]=o:delete n[e],this}},e.exports=t,e.exports.TinyEmitter=t}},t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={exports:{}};return e[r](o,o.exports,n),o.exports}return n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,{a:t}),t},n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n(686)}().default},e.exports=t()},9755:function(e,t){var n;!function(t,n){"use strict";"object"==typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return n(e)}:n(t)}("undefined"!=typeof window?window:this,(function(r,o){"use strict";var i=[],a=Object.getPrototypeOf,s=i.slice,l=i.flat?function(e){return i.flat.call(e)}:function(e){return i.concat.apply([],e)},u=i.push,c=i.indexOf,p={},f=p.toString,d=p.hasOwnProperty,h=d.toString,g=h.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},v=function(e){return null!=e&&e===e.window},b=r.document,A={type:!0,src:!0,nonce:!0,noModule:!0};function x(e,t,n){var r,o,i=(n=n||b).createElement("script");if(i.text=e,t)for(r in A)(o=t[r]||t.getAttribute&&t.getAttribute(r))&&i.setAttribute(r,o);n.head.appendChild(i).parentNode.removeChild(i)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?p[f.call(e)]||"object":typeof e}var C="3.6.0",T=function(e,t){return new T.fn.init(e,t)};function E(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!v(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}T.fn=T.prototype={jquery:C,constructor:T,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=T.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return T.each(this,e)},map:function(e){return this.pushStack(T.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(T.grep(this,(function(e,t){return(t+1)%2})))},odd:function(){return this.pushStack(T.grep(this,(function(e,t){return t%2})))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:i.sort,splice:i.splice},T.extend=T.fn.extend=function(){var e,t,n,r,o,i,a=arguments[0]||{},s=1,l=arguments.length,u=!1;for("boolean"==typeof a&&(u=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===l&&(a=this,s--);s<l;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(u&&r&&(T.isPlainObject(r)||(o=Array.isArray(r)))?(n=a[t],i=o&&!Array.isArray(n)?[]:o||T.isPlainObject(n)?n:{},o=!1,a[t]=T.extend(u,i,r)):void 0!==r&&(a[t]=r));return a},T.extend({expando:"jQuery"+(C+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==f.call(e)||(t=a(e))&&("function"!=typeof(n=d.call(t,"constructor")&&t.constructor)||h.call(n)!==g))},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){x(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(E(e))for(n=e.length;r<n&&!1!==t.call(e[r],r,e[r]);r++);else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(E(Object(e))?T.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:c.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,o=e.length;r<n;r++)e[o++]=t[r];return e.length=o,e},grep:function(e,t,n){for(var r=[],o=0,i=e.length,a=!n;o<i;o++)!t(e[o],o)!==a&&r.push(e[o]);return r},map:function(e,t,n){var r,o,i=0,a=[];if(E(e))for(r=e.length;i<r;i++)null!=(o=t(e[i],i,n))&&a.push(o);else for(i in e)null!=(o=t(e[i],i,n))&&a.push(o);return l(a)},guid:1,support:y}),"function"==typeof Symbol&&(T.fn[Symbol.iterator]=i[Symbol.iterator]),T.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),(function(e,t){p["[object "+t+"]"]=t.toLowerCase()}));var _=function(e){var t,n,r,o,i,a,s,l,u,c,p,f,d,h,g,y,m,v,b,A="sizzle"+1*new Date,x=e.document,w=0,C=0,T=le(),E=le(),_=le(),S=le(),k=function(e,t){return e===t&&(p=!0),0},j={}.hasOwnProperty,I=[],N=I.pop,B=I.push,L=I.push,D=I.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},O="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",H="[\\x20\\t\\r\\n\\f]",M="(?:\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",R="\\[[\\x20\\t\\r\\n\\f]*("+M+")(?:"+H+"*([*^$|!~]?=)"+H+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+H+"*\\]",q=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+R+")*)|.*)\\)|)",W=new RegExp(H+"+","g"),F=new RegExp("^[\\x20\\t\\r\\n\\f]+|((?:^|[^\\\\])(?:\\\\.)*)[\\x20\\t\\r\\n\\f]+$","g"),$=new RegExp("^[\\x20\\t\\r\\n\\f]*,[\\x20\\t\\r\\n\\f]*"),z=new RegExp("^[\\x20\\t\\r\\n\\f]*([>+~]|[\\x20\\t\\r\\n\\f])[\\x20\\t\\r\\n\\f]*"),U=new RegExp(H+"|>"),Y=new RegExp(q),X=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+R),PSEUDO:new RegExp("^"+q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\([\\x20\\t\\r\\n\\f]*(even|odd|(([+-]|)(\\d*)n|)[\\x20\\t\\r\\n\\f]*(?:([+-]|)[\\x20\\t\\r\\n\\f]*(\\d+)|))[\\x20\\t\\r\\n\\f]*\\)|)","i"),bool:new RegExp("^(?:"+O+")$","i"),needsContext:new RegExp("^[\\x20\\t\\r\\n\\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\([\\x20\\t\\r\\n\\f]*((?:-\\d)?\\d*)[\\x20\\t\\r\\n\\f]*\\)|)(?=[^-]|$)","i")},G=/HTML$/i,Z=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,oe=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},ie=function(){f()},ae=Ae((function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()}),{dir:"parentNode",next:"legend"});try{L.apply(I=D.call(x.childNodes),x.childNodes),I[x.childNodes.length].nodeType}catch(e){L={apply:I.length?function(e,t){B.apply(e,D.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function se(e,t,r,o){var i,s,u,c,p,h,m,v=t&&t.ownerDocument,x=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==x&&9!==x&&11!==x)return r;if(!o&&(f(t),t=t||d,g)){if(11!==x&&(p=J.exec(e)))if(i=p[1]){if(9===x){if(!(u=t.getElementById(i)))return r;if(u.id===i)return r.push(u),r}else if(v&&(u=v.getElementById(i))&&b(t,u)&&u.id===i)return r.push(u),r}else{if(p[2])return L.apply(r,t.getElementsByTagName(e)),r;if((i=p[3])&&n.getElementsByClassName&&t.getElementsByClassName)return L.apply(r,t.getElementsByClassName(i)),r}if(n.qsa&&!S[e+" "]&&(!y||!y.test(e))&&(1!==x||"object"!==t.nodeName.toLowerCase())){if(m=e,v=t,1===x&&(U.test(e)||z.test(e))){for((v=ee.test(e)&&me(t.parentNode)||t)===t&&n.scope||((c=t.getAttribute("id"))?c=c.replace(re,oe):t.setAttribute("id",c=A)),s=(h=a(e)).length;s--;)h[s]=(c?"#"+c:":scope")+" "+be(h[s]);m=h.join(",")}try{return L.apply(r,v.querySelectorAll(m)),r}catch(t){S(e,!0)}finally{c===A&&t.removeAttribute("id")}}}return l(e.replace(F,"$1"),t,r,o)}function le(){var e=[];return function t(n,o){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=o}}function ue(e){return e[A]=!0,e}function ce(e){var t=d.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function pe(e,t){for(var n=e.split("|"),o=n.length;o--;)r.attrHandle[n[o]]=t}function fe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function de(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function he(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ge(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ae(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function ye(e){return ue((function(t){return t=+t,ue((function(n,r){for(var o,i=e([],n.length,t),a=i.length;a--;)n[o=i[a]]&&(n[o]=!(r[o]=n[o]))}))}))}function me(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!G.test(t||n&&n.nodeName||"HTML")},f=se.setDocument=function(e){var t,o,a=e?e.ownerDocument||e:x;return a!=d&&9===a.nodeType&&a.documentElement?(h=(d=a).documentElement,g=!i(d),x!=d&&(o=d.defaultView)&&o.top!==o&&(o.addEventListener?o.addEventListener("unload",ie,!1):o.attachEvent&&o.attachEvent("onunload",ie)),n.scope=ce((function(e){return h.appendChild(e).appendChild(d.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length})),n.attributes=ce((function(e){return e.className="i",!e.getAttribute("className")})),n.getElementsByTagName=ce((function(e){return e.appendChild(d.createComment("")),!e.getElementsByTagName("*").length})),n.getElementsByClassName=K.test(d.getElementsByClassName),n.getById=ce((function(e){return h.appendChild(e).id=A,!d.getElementsByName||!d.getElementsByName(A).length})),n.getById?(r.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(te,ne);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&g){var n,r,o,i=t.getElementById(e);if(i){if((n=i.getAttributeNode("id"))&&n.value===e)return[i];for(o=t.getElementsByName(e),r=0;i=o[r++];)if((n=i.getAttributeNode("id"))&&n.value===e)return[i]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],o=0,i=t.getElementsByTagName(e);if("*"===e){for(;n=i[o++];)1===n.nodeType&&r.push(n);return r}return i},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&g)return t.getElementsByClassName(e)},m=[],y=[],(n.qsa=K.test(d.querySelectorAll))&&(ce((function(e){var t;h.appendChild(e).innerHTML="<a id='"+A+"'></a><select id='"+A+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]=[\\x20\\t\\r\\n\\f]*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\[[\\x20\\t\\r\\n\\f]*(?:value|"+O+")"),e.querySelectorAll("[id~="+A+"-]").length||y.push("~="),(t=d.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\[[\\x20\\t\\r\\n\\f]*name[\\x20\\t\\r\\n\\f]*=[\\x20\\t\\r\\n\\f]*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+A+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")})),ce((function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=d.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name[\\x20\\t\\r\\n\\f]*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")}))),(n.matchesSelector=K.test(v=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ce((function(e){n.disconnectedMatch=v.call(e,"*"),v.call(e,"[s!='']:x"),m.push("!=",q)})),y=y.length&&new RegExp(y.join("|")),m=m.length&&new RegExp(m.join("|")),t=K.test(h.compareDocumentPosition),b=t||K.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},k=t?function(e,t){if(e===t)return p=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e==d||e.ownerDocument==x&&b(x,e)?-1:t==d||t.ownerDocument==x&&b(x,t)?1:c?P(c,e)-P(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return p=!0,0;var n,r=0,o=e.parentNode,i=t.parentNode,a=[e],s=[t];if(!o||!i)return e==d?-1:t==d?1:o?-1:i?1:c?P(c,e)-P(c,t):0;if(o===i)return fe(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;a[r]===s[r];)r++;return r?fe(a[r],s[r]):a[r]==x?-1:s[r]==x?1:0},d):d},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(f(e),n.matchesSelector&&g&&!S[t+" "]&&(!m||!m.test(t))&&(!y||!y.test(t)))try{var r=v.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){S(t,!0)}return se(t,d,null,[e]).length>0},se.contains=function(e,t){return(e.ownerDocument||e)!=d&&f(e),b(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=d&&f(e);var o=r.attrHandle[t.toLowerCase()],i=o&&j.call(r.attrHandle,t.toLowerCase())?o(e,t,!g):void 0;return void 0!==i?i:n.attributes||!g?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null},se.escape=function(e){return(e+"").replace(re,oe)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,r=[],o=0,i=0;if(p=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(k),p){for(;t=e[i++];)t===e[i]&&(o=r.push(i));for(;o--;)e.splice(r[o],1)}return c=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=o(t);return n},(r=se.selectors={cacheLength:50,createPseudo:ue,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return V.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&Y.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=T[e+" "];return t||(t=new RegExp("(^|[\\x20\\t\\r\\n\\f])"+e+"("+H+"|$)"))&&T(e,(function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")}))},ATTR:function(e,t,n){return function(r){var o=se.attr(r,e);return null==o?"!="===t:!t||(o+="","="===t?o===n:"!="===t?o!==n:"^="===t?n&&0===o.indexOf(n):"*="===t?n&&o.indexOf(n)>-1:"$="===t?n&&o.slice(-n.length)===n:"~="===t?(" "+o.replace(W," ")+" ").indexOf(n)>-1:"|="===t&&(o===n||o.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,o){var i="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===o?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=i!==a?"nextSibling":"previousSibling",y=t.parentNode,m=s&&t.nodeName.toLowerCase(),v=!l&&!s,b=!1;if(y){if(i){for(;g;){for(f=t;f=f[g];)if(s?f.nodeName.toLowerCase()===m:1===f.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?y.firstChild:y.lastChild],a&&v){for(b=(d=(u=(c=(p=(f=y)[A]||(f[A]={}))[f.uniqueID]||(p[f.uniqueID]={}))[e]||[])[0]===w&&u[1])&&u[2],f=d&&y.childNodes[d];f=++d&&f&&f[g]||(b=d=0)||h.pop();)if(1===f.nodeType&&++b&&f===t){c[e]=[w,d,b];break}}else if(v&&(b=d=(u=(c=(p=(f=t)[A]||(f[A]={}))[f.uniqueID]||(p[f.uniqueID]={}))[e]||[])[0]===w&&u[1]),!1===b)for(;(f=++d&&f&&f[g]||(b=d=0)||h.pop())&&((s?f.nodeName.toLowerCase()!==m:1!==f.nodeType)||!++b||(v&&((c=(p=f[A]||(f[A]={}))[f.uniqueID]||(p[f.uniqueID]={}))[e]=[w,b]),f!==t)););return(b-=o)===r||b%r==0&&b/r>=0}}},PSEUDO:function(e,t){var n,o=r.pseudos[e]||r.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return o[A]?o(t):o.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?ue((function(e,n){for(var r,i=o(e,t),a=i.length;a--;)e[r=P(e,i[a])]=!(n[r]=i[a])})):function(e){return o(e,0,n)}):o}},pseudos:{not:ue((function(e){var t=[],n=[],r=s(e.replace(F,"$1"));return r[A]?ue((function(e,t,n,o){for(var i,a=r(e,null,o,[]),s=e.length;s--;)(i=a[s])&&(e[s]=!(t[s]=i))})):function(e,o,i){return t[0]=e,r(t,null,i,n),t[0]=null,!n.pop()}})),has:ue((function(e){return function(t){return se(e,t).length>0}})),contains:ue((function(e){return e=e.replace(te,ne),function(t){return(t.textContent||o(t)).indexOf(e)>-1}})),lang:ue((function(e){return X.test(e||"")||se.error("unsupported lang: "+e),e=e.replace(te,ne).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}})),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===d.activeElement&&(!d.hasFocus||d.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return Z.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ye((function(){return[0]})),last:ye((function(e,t){return[t-1]})),eq:ye((function(e,t,n){return[n<0?n+t:n]})),even:ye((function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e})),odd:ye((function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e})),lt:ye((function(e,t,n){for(var r=n<0?n+t:n>t?t:n;--r>=0;)e.push(r);return e})),gt:ye((function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e}))}}).pseudos.nth=r.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=de(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=he(t);function ve(){}function be(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function Ae(e,t,n){var r=t.dir,o=t.next,i=o||r,a=n&&"parentNode"===i,s=C++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||a)return e(t,n,o);return!1}:function(t,n,l){var u,c,p,f=[w,s];if(l){for(;t=t[r];)if((1===t.nodeType||a)&&e(t,n,l))return!0}else for(;t=t[r];)if(1===t.nodeType||a)if(c=(p=t[A]||(t[A]={}))[t.uniqueID]||(p[t.uniqueID]={}),o&&o===t.nodeName.toLowerCase())t=t[r]||t;else{if((u=c[i])&&u[0]===w&&u[1]===s)return f[2]=u[2];if(c[i]=f,f[2]=e(t,n,l))return!0}return!1}}function xe(e){return e.length>1?function(t,n,r){for(var o=e.length;o--;)if(!e[o](t,n,r))return!1;return!0}:e[0]}function we(e,t,n,r,o){for(var i,a=[],s=0,l=e.length,u=null!=t;s<l;s++)(i=e[s])&&(n&&!n(i,r,o)||(a.push(i),u&&t.push(s)));return a}function Ce(e,t,n,r,o,i){return r&&!r[A]&&(r=Ce(r)),o&&!o[A]&&(o=Ce(o,i)),ue((function(i,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=i||function(e,t,n){for(var r=0,o=t.length;r<o;r++)se(e,t[r],n);return n}(t||"*",s.nodeType?[s]:s,[]),y=!e||!i&&t?g:we(g,f,e,s,l),m=n?o||(i?e:h||r)?[]:a:y;if(n&&n(y,m,s,l),r)for(u=we(m,d),r(u,[],s,l),c=u.length;c--;)(p=u[c])&&(m[d[c]]=!(y[d[c]]=p));if(i){if(o||e){if(o){for(u=[],c=m.length;c--;)(p=m[c])&&u.push(y[c]=p);o(null,m=[],u,l)}for(c=m.length;c--;)(p=m[c])&&(u=o?P(i,p):f[c])>-1&&(i[u]=!(a[u]=p))}}else m=we(m===a?m.splice(h,m.length):m),o?o(null,a,m,l):L.apply(a,m)}))}function Te(e){for(var t,n,o,i=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],l=a?1:0,c=Ae((function(e){return e===t}),s,!0),p=Ae((function(e){return P(t,e)>-1}),s,!0),f=[function(e,n,r){var o=!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r));return t=null,o}];l<i;l++)if(n=r.relative[e[l].type])f=[Ae(xe(f),n)];else{if((n=r.filter[e[l].type].apply(null,e[l].matches))[A]){for(o=++l;o<i&&!r.relative[e[o].type];o++);return Ce(l>1&&xe(f),l>1&&be(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(F,"$1"),n,l<o&&Te(e.slice(l,o)),o<i&&Te(e=e.slice(o)),o<i&&be(e))}f.push(n)}return xe(f)}return ve.prototype=r.filters=r.pseudos,r.setFilters=new ve,a=se.tokenize=function(e,t){var n,o,i,a,s,l,u,c=E[e+" "];if(c)return t?0:c.slice(0);for(s=e,l=[],u=r.preFilter;s;){for(a in n&&!(o=$.exec(s))||(o&&(s=s.slice(o[0].length)||s),l.push(i=[])),n=!1,(o=z.exec(s))&&(n=o.shift(),i.push({value:n,type:o[0].replace(F," ")}),s=s.slice(n.length)),r.filter)!(o=V[a].exec(s))||u[a]&&!(o=u[a](o))||(n=o.shift(),i.push({value:n,type:a,matches:o}),s=s.slice(n.length));if(!n)break}return t?s.length:s?se.error(e):E(e,l).slice(0)},s=se.compile=function(e,t){var n,o=[],i=[],s=_[e+" "];if(!s){for(t||(t=a(e)),n=t.length;n--;)(s=Te(t[n]))[A]?o.push(s):i.push(s);(s=_(e,function(e,t){var n=t.length>0,o=e.length>0,i=function(i,a,s,l,c){var p,h,y,m=0,v="0",b=i&&[],A=[],x=u,C=i||o&&r.find.TAG("*",c),T=w+=null==x?1:Math.random()||.1,E=C.length;for(c&&(u=a==d||a||c);v!==E&&null!=(p=C[v]);v++){if(o&&p){for(h=0,a||p.ownerDocument==d||(f(p),s=!g);y=e[h++];)if(y(p,a||d,s)){l.push(p);break}c&&(w=T)}n&&((p=!y&&p)&&m--,i&&b.push(p))}if(m+=v,n&&v!==m){for(h=0;y=t[h++];)y(b,A,a,s);if(i){if(m>0)for(;v--;)b[v]||A[v]||(A[v]=N.call(l));A=we(A)}L.apply(l,A),c&&!i&&A.length>0&&m+t.length>1&&se.uniqueSort(l)}return c&&(w=T,u=x),b};return n?ue(i):i}(i,o))).selector=e}return s},l=se.select=function(e,t,n,o){var i,l,u,c,p,f="function"==typeof e&&e,d=!o&&a(e=f.selector||e);if(n=n||[],1===d.length){if((l=d[0]=d[0].slice(0)).length>2&&"ID"===(u=l[0]).type&&9===t.nodeType&&g&&r.relative[l[1].type]){if(!(t=(r.find.ID(u.matches[0].replace(te,ne),t)||[])[0]))return n;f&&(t=t.parentNode),e=e.slice(l.shift().value.length)}for(i=V.needsContext.test(e)?0:l.length;i--&&(u=l[i],!r.relative[c=u.type]);)if((p=r.find[c])&&(o=p(u.matches[0].replace(te,ne),ee.test(l[0].type)&&me(t.parentNode)||t))){if(l.splice(i,1),!(e=o.length&&be(l)))return L.apply(n,o),n;break}}return(f||s(e,d))(o,t,!g,n,!t||ee.test(e)&&me(t.parentNode)||t),n},n.sortStable=A.split("").sort(k).join("")===A,n.detectDuplicates=!!p,f(),n.sortDetached=ce((function(e){return 1&e.compareDocumentPosition(d.createElement("fieldset"))})),ce((function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")}))||pe("type|href|height|width",(function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)})),n.attributes&&ce((function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}))||pe("value",(function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue})),ce((function(e){return null==e.getAttribute("disabled")}))||pe(O,(function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null})),se}(r);T.find=_,T.expr=_.selectors,T.expr[":"]=T.expr.pseudos,T.uniqueSort=T.unique=_.uniqueSort,T.text=_.getText,T.isXMLDoc=_.isXML,T.contains=_.contains,T.escapeSelector=_.escape;var S=function(e,t,n){for(var r=[],o=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(o&&T(e).is(n))break;r.push(e)}return r},k=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},j=T.expr.match.needsContext;function I(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function B(e,t,n){return m(t)?T.grep(e,(function(e,r){return!!t.call(e,r,e)!==n})):t.nodeType?T.grep(e,(function(e){return e===t!==n})):"string"!=typeof t?T.grep(e,(function(e){return c.call(t,e)>-1!==n})):T.filter(t,e,n)}T.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?T.find.matchesSelector(r,e)?[r]:[]:T.find.matches(e,T.grep(t,(function(e){return 1===e.nodeType})))},T.fn.extend({find:function(e){var t,n,r=this.length,o=this;if("string"!=typeof e)return this.pushStack(T(e).filter((function(){for(t=0;t<r;t++)if(T.contains(o[t],this))return!0})));for(n=this.pushStack([]),t=0;t<r;t++)T.find(e,o[t],n);return r>1?T.uniqueSort(n):n},filter:function(e){return this.pushStack(B(this,e||[],!1))},not:function(e){return this.pushStack(B(this,e||[],!0))},is:function(e){return!!B(this,"string"==typeof e&&j.test(e)?T(e):e||[],!1).length}});var L,D=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(T.fn.init=function(e,t,n){var r,o;if(!e)return this;if(n=n||L,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:D.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof T?t[0]:t,T.merge(this,T.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:b,!0)),N.test(r[1])&&T.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(o=b.getElementById(r[2]))&&(this[0]=o,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(T):T.makeArray(e,this)}).prototype=T.fn,L=T(b);var P=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function H(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}T.fn.extend({has:function(e){var t=T(e,this),n=t.length;return this.filter((function(){for(var e=0;e<n;e++)if(T.contains(this,t[e]))return!0}))},closest:function(e,t){var n,r=0,o=this.length,i=[],a="string"!=typeof e&&T(e);if(!j.test(e))for(;r<o;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&T.find.matchesSelector(n,e))){i.push(n);break}return this.pushStack(i.length>1?T.uniqueSort(i):i)},index:function(e){return e?"string"==typeof e?c.call(T(e),this[0]):c.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(T.uniqueSort(T.merge(this.get(),T(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),T.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return S(e,"parentNode")},parentsUntil:function(e,t,n){return S(e,"parentNode",n)},next:function(e){return H(e,"nextSibling")},prev:function(e){return H(e,"previousSibling")},nextAll:function(e){return S(e,"nextSibling")},prevAll:function(e){return S(e,"previousSibling")},nextUntil:function(e,t,n){return S(e,"nextSibling",n)},prevUntil:function(e,t,n){return S(e,"previousSibling",n)},siblings:function(e){return k((e.parentNode||{}).firstChild,e)},children:function(e){return k(e.firstChild)},contents:function(e){return null!=e.contentDocument&&a(e.contentDocument)?e.contentDocument:(I(e,"template")&&(e=e.content||e),T.merge([],e.childNodes))}},(function(e,t){T.fn[e]=function(n,r){var o=T.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(o=T.filter(r,o)),this.length>1&&(O[e]||T.uniqueSort(o),P.test(e)&&o.reverse()),this.pushStack(o)}}));var M=/[^\x20\t\r\n\f]+/g;function R(e){return e}function q(e){throw e}function W(e,t,n,r){var o;try{e&&m(o=e.promise)?o.call(e).done(t).fail(n):e&&m(o=e.then)?o.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}T.Callbacks=function(e){e="string"==typeof e?function(e){var t={};return T.each(e.match(M)||[],(function(e,n){t[n]=!0})),t}(e):T.extend({},e);var t,n,r,o,i=[],a=[],s=-1,l=function(){for(o=o||e.once,r=t=!0;a.length;s=-1)for(n=a.shift();++s<i.length;)!1===i[s].apply(n[0],n[1])&&e.stopOnFalse&&(s=i.length,n=!1);e.memory||(n=!1),t=!1,o&&(i=n?[]:"")},u={add:function(){return i&&(n&&!t&&(s=i.length-1,a.push(n)),function t(n){T.each(n,(function(n,r){m(r)?e.unique&&u.has(r)||i.push(r):r&&r.length&&"string"!==w(r)&&t(r)}))}(arguments),n&&!t&&l()),this},remove:function(){return T.each(arguments,(function(e,t){for(var n;(n=T.inArray(t,i,n))>-1;)i.splice(n,1),n<=s&&s--})),this},has:function(e){return e?T.inArray(e,i)>-1:i.length>0},empty:function(){return i&&(i=[]),this},disable:function(){return o=a=[],i=n="",this},disabled:function(){return!i},lock:function(){return o=a=[],n||t||(i=n=""),this},locked:function(){return!!o},fireWith:function(e,n){return o||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||l()),this},fire:function(){return u.fireWith(this,arguments),this},fired:function(){return!!r}};return u},T.extend({Deferred:function(e){var t=[["notify","progress",T.Callbacks("memory"),T.Callbacks("memory"),2],["resolve","done",T.Callbacks("once memory"),T.Callbacks("once memory"),0,"resolved"],["reject","fail",T.Callbacks("once memory"),T.Callbacks("once memory"),1,"rejected"]],n="pending",o={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},catch:function(e){return o.then(null,e)},pipe:function(){var e=arguments;return T.Deferred((function(n){T.each(t,(function(t,r){var o=m(e[r[4]])&&e[r[4]];i[r[1]]((function(){var e=o&&o.apply(this,arguments);e&&m(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+"With"](this,o?[e]:arguments)}))})),e=null})).promise()},then:function(e,n,o){var i=0;function a(e,t,n,o){return function(){var s=this,l=arguments,u=function(){var r,u;if(!(e<i)){if((r=n.apply(s,l))===t.promise())throw new TypeError("Thenable self-resolution");u=r&&("object"==typeof r||"function"==typeof r)&&r.then,m(u)?o?u.call(r,a(i,t,R,o),a(i,t,q,o)):(i++,u.call(r,a(i,t,R,o),a(i,t,q,o),a(i,t,R,t.notifyWith))):(n!==R&&(s=void 0,l=[r]),(o||t.resolveWith)(s,l))}},c=o?u:function(){try{u()}catch(r){T.Deferred.exceptionHook&&T.Deferred.exceptionHook(r,c.stackTrace),e+1>=i&&(n!==q&&(s=void 0,l=[r]),t.rejectWith(s,l))}};e?c():(T.Deferred.getStackHook&&(c.stackTrace=T.Deferred.getStackHook()),r.setTimeout(c))}}return T.Deferred((function(r){t[0][3].add(a(0,r,m(o)?o:R,r.notifyWith)),t[1][3].add(a(0,r,m(e)?e:R)),t[2][3].add(a(0,r,m(n)?n:q))})).promise()},promise:function(e){return null!=e?T.extend(e,o):o}},i={};return T.each(t,(function(e,r){var a=r[2],s=r[5];o[r[1]]=a.add,s&&a.add((function(){n=s}),t[3-e][2].disable,t[3-e][3].disable,t[0][2].lock,t[0][3].lock),a.add(r[3].fire),i[r[0]]=function(){return i[r[0]+"With"](this===i?void 0:this,arguments),this},i[r[0]+"With"]=a.fireWith})),o.promise(i),e&&e.call(i,i),i},when:function(e){var t=arguments.length,n=t,r=Array(n),o=s.call(arguments),i=T.Deferred(),a=function(e){return function(n){r[e]=this,o[e]=arguments.length>1?s.call(arguments):n,--t||i.resolveWith(r,o)}};if(t<=1&&(W(e,i.done(a(n)).resolve,i.reject,!t),"pending"===i.state()||m(o[n]&&o[n].then)))return i.then();for(;n--;)W(o[n],a(n),i.reject);return i.promise()}});var F=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;T.Deferred.exceptionHook=function(e,t){r.console&&r.console.warn&&e&&F.test(e.name)&&r.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},T.readyException=function(e){r.setTimeout((function(){throw e}))};var $=T.Deferred();function z(){b.removeEventListener("DOMContentLoaded",z),r.removeEventListener("load",z),T.ready()}T.fn.ready=function(e){return $.then(e).catch((function(e){T.readyException(e)})),this},T.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--T.readyWait:T.isReady)||(T.isReady=!0,!0!==e&&--T.readyWait>0||$.resolveWith(b,[T]))}}),T.ready.then=$.then,"complete"===b.readyState||"loading"!==b.readyState&&!b.documentElement.doScroll?r.setTimeout(T.ready):(b.addEventListener("DOMContentLoaded",z),r.addEventListener("load",z));var U=function(e,t,n,r,o,i,a){var s=0,l=e.length,u=null==n;if("object"===w(n))for(s in o=!0,n)U(e,t,s,n[s],!0,i,a);else if(void 0!==r&&(o=!0,m(r)||(a=!0),u&&(a?(t.call(e,r),t=null):(u=t,t=function(e,t,n){return u.call(T(e),n)})),t))for(;s<l;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return o?e:u?t.call(e):l?t(e[0],n):i},Y=/^-ms-/,X=/-([a-z])/g;function V(e,t){return t.toUpperCase()}function G(e){return e.replace(Y,"ms-").replace(X,V)}var Z=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Q(){this.expando=T.expando+Q.uid++}Q.uid=1,Q.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Z(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,o=this.cache(e);if("string"==typeof t)o[G(t)]=n;else for(r in t)o[G(r)]=t[r];return o},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][G(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(G):(t=G(t))in r?[t]:t.match(M)||[]).length;for(;n--;)delete r[t[n]]}(void 0===t||T.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!T.isEmptyObject(t)}};var K=new Q,J=new Q,ee=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,te=/[A-Z]/g;function ne(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(te,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n=function(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:ee.test(e)?JSON.parse(e):e)}(n)}catch(e){}J.set(e,t,n)}else n=void 0;return n}T.extend({hasData:function(e){return J.hasData(e)||K.hasData(e)},data:function(e,t,n){return J.access(e,t,n)},removeData:function(e,t){J.remove(e,t)},_data:function(e,t,n){return K.access(e,t,n)},_removeData:function(e,t){K.remove(e,t)}}),T.fn.extend({data:function(e,t){var n,r,o,i=this[0],a=i&&i.attributes;if(void 0===e){if(this.length&&(o=J.get(i),1===i.nodeType&&!K.get(i,"hasDataAttrs"))){for(n=a.length;n--;)a[n]&&0===(r=a[n].name).indexOf("data-")&&(r=G(r.slice(5)),ne(i,r,o[r]));K.set(i,"hasDataAttrs",!0)}return o}return"object"==typeof e?this.each((function(){J.set(this,e)})):U(this,(function(t){var n;if(i&&void 0===t)return void 0!==(n=J.get(i,e))||void 0!==(n=ne(i,e))?n:void 0;this.each((function(){J.set(this,e,t)}))}),null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each((function(){J.remove(this,e)}))}}),T.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=K.get(e,t),n&&(!r||Array.isArray(n)?r=K.access(e,t,T.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=T.queue(e,t),r=n.length,o=n.shift(),i=T._queueHooks(e,t);"inprogress"===o&&(o=n.shift(),r--),o&&("fx"===t&&n.unshift("inprogress"),delete i.stop,o.call(e,(function(){T.dequeue(e,t)}),i)),!r&&i&&i.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return K.get(e,n)||K.access(e,n,{empty:T.Callbacks("once memory").add((function(){K.remove(e,[t+"queue",n])}))})}}),T.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?T.queue(this[0],e):void 0===t?this:this.each((function(){var n=T.queue(this,e,t);T._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&T.dequeue(this,e)}))},dequeue:function(e){return this.each((function(){T.dequeue(this,e)}))},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,o=T.Deferred(),i=this,a=this.length,s=function(){--r||o.resolveWith(i,[i])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";a--;)(n=K.get(i[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),o.promise(t)}});var re=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,oe=new RegExp("^(?:([+-])=|)("+re+")([a-z%]*)$","i"),ie=["Top","Right","Bottom","Left"],ae=b.documentElement,se=function(e){return T.contains(e.ownerDocument,e)},le={composed:!0};ae.getRootNode&&(se=function(e){return T.contains(e.ownerDocument,e)||e.getRootNode(le)===e.ownerDocument});var ue=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&se(e)&&"none"===T.css(e,"display")};function ce(e,t,n,r){var o,i,a=20,s=r?function(){return r.cur()}:function(){return T.css(e,t,"")},l=s(),u=n&&n[3]||(T.cssNumber[t]?"":"px"),c=e.nodeType&&(T.cssNumber[t]||"px"!==u&&+l)&&oe.exec(T.css(e,t));if(c&&c[3]!==u){for(l/=2,u=u||c[3],c=+l||1;a--;)T.style(e,t,c+u),(1-i)*(1-(i=s()/l||.5))<=0&&(a=0),c/=i;c*=2,T.style(e,t,c+u),n=n||[]}return n&&(c=+c||+l||0,o=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=u,r.start=c,r.end=o)),o}var pe={};function fe(e){var t,n=e.ownerDocument,r=e.nodeName,o=pe[r];return o||(t=n.body.appendChild(n.createElement(r)),o=T.css(t,"display"),t.parentNode.removeChild(t),"none"===o&&(o="block"),pe[r]=o,o)}function de(e,t){for(var n,r,o=[],i=0,a=e.length;i<a;i++)(r=e[i]).style&&(n=r.style.display,t?("none"===n&&(o[i]=K.get(r,"display")||null,o[i]||(r.style.display="")),""===r.style.display&&ue(r)&&(o[i]=fe(r))):"none"!==n&&(o[i]="none",K.set(r,"display",n)));for(i=0;i<a;i++)null!=o[i]&&(e[i].style.display=o[i]);return e}T.fn.extend({show:function(){return de(this,!0)},hide:function(){return de(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each((function(){ue(this)?T(this).show():T(this).hide()}))}});var he,ge,ye=/^(?:checkbox|radio)$/i,me=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,ve=/^$|^module$|\/(?:java|ecma)script/i;he=b.createDocumentFragment().appendChild(b.createElement("div")),(ge=b.createElement("input")).setAttribute("type","radio"),ge.setAttribute("checked","checked"),ge.setAttribute("name","t"),he.appendChild(ge),y.checkClone=he.cloneNode(!0).cloneNode(!0).lastChild.checked,he.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!he.cloneNode(!0).lastChild.defaultValue,he.innerHTML="<option></option>",y.option=!!he.lastChild;var be={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function Ae(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&I(e,t)?T.merge([e],n):n}function xe(e,t){for(var n=0,r=e.length;n<r;n++)K.set(e[n],"globalEval",!t||K.get(t[n],"globalEval"))}be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,y.option||(be.optgroup=be.option=[1,"<select multiple='multiple'>","</select>"]);var we=/<|&#?\w+;/;function Ce(e,t,n,r,o){for(var i,a,s,l,u,c,p=t.createDocumentFragment(),f=[],d=0,h=e.length;d<h;d++)if((i=e[d])||0===i)if("object"===w(i))T.merge(f,i.nodeType?[i]:i);else if(we.test(i)){for(a=a||p.appendChild(t.createElement("div")),s=(me.exec(i)||["",""])[1].toLowerCase(),l=be[s]||be._default,a.innerHTML=l[1]+T.htmlPrefilter(i)+l[2],c=l[0];c--;)a=a.lastChild;T.merge(f,a.childNodes),(a=p.firstChild).textContent=""}else f.push(t.createTextNode(i));for(p.textContent="",d=0;i=f[d++];)if(r&&T.inArray(i,r)>-1)o&&o.push(i);else if(u=se(i),a=Ae(p.appendChild(i),"script"),u&&xe(a),n)for(c=0;i=a[c++];)ve.test(i.type||"")&&n.push(i);return p}var Te=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function _e(){return!1}function Se(e,t){return e===function(){try{return b.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,n,r,o,i){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],i);return e}if(null==r&&null==o?(o=n,r=n=void 0):null==o&&("string"==typeof n?(o=r,r=void 0):(o=r,r=n,n=void 0)),!1===o)o=_e;else if(!o)return e;return 1===i&&(a=o,(o=function(e){return T().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=T.guid++)),e.each((function(){T.event.add(this,t,o,r,n)}))}function je(e,t,n){n?(K.set(e,t,!1),T.event.add(e,t,{namespace:!1,handler:function(e){var r,o,i=K.get(this,t);if(1&e.isTrigger&&this[t]){if(i.length)(T.event.special[t]||{}).delegateType&&e.stopPropagation();else if(i=s.call(arguments),K.set(this,t,i),r=n(this,t),this[t](),i!==(o=K.get(this,t))||r?K.set(this,t,!1):o={},i!==o)return e.stopImmediatePropagation(),e.preventDefault(),o&&o.value}else i.length&&(K.set(this,t,{value:T.event.trigger(T.extend(i[0],T.Event.prototype),i.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===K.get(e,t)&&T.event.add(e,t,Ee)}T.event={global:{},add:function(e,t,n,r,o){var i,a,s,l,u,c,p,f,d,h,g,y=K.get(e);if(Z(e))for(n.handler&&(n=(i=n).handler,o=i.selector),o&&T.find.matchesSelector(ae,o),n.guid||(n.guid=T.guid++),(l=y.events)||(l=y.events=Object.create(null)),(a=y.handle)||(a=y.handle=function(t){return void 0!==T&&T.event.triggered!==t.type?T.event.dispatch.apply(e,arguments):void 0}),u=(t=(t||"").match(M)||[""]).length;u--;)d=g=(s=Te.exec(t[u])||[])[1],h=(s[2]||"").split(".").sort(),d&&(p=T.event.special[d]||{},d=(o?p.delegateType:p.bindType)||d,p=T.event.special[d]||{},c=T.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:o,needsContext:o&&T.expr.match.needsContext.test(o),namespace:h.join(".")},i),(f=l[d])||((f=l[d]=[]).delegateCount=0,p.setup&&!1!==p.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),p.add&&(p.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),o?f.splice(f.delegateCount++,0,c):f.push(c),T.event.global[d]=!0)},remove:function(e,t,n,r,o){var i,a,s,l,u,c,p,f,d,h,g,y=K.hasData(e)&&K.get(e);if(y&&(l=y.events)){for(u=(t=(t||"").match(M)||[""]).length;u--;)if(d=g=(s=Te.exec(t[u])||[])[1],h=(s[2]||"").split(".").sort(),d){for(p=T.event.special[d]||{},f=l[d=(r?p.delegateType:p.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=i=f.length;i--;)c=f[i],!o&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(f.splice(i,1),c.selector&&f.delegateCount--,p.remove&&p.remove.call(e,c));a&&!f.length&&(p.teardown&&!1!==p.teardown.call(e,h,y.handle)||T.removeEvent(e,d,y.handle),delete l[d])}else for(d in l)T.event.remove(e,d+t[u],n,r,!0);T.isEmptyObject(l)&&K.remove(e,"handle events")}},dispatch:function(e){var t,n,r,o,i,a,s=new Array(arguments.length),l=T.event.fix(e),u=(K.get(this,"events")||Object.create(null))[l.type]||[],c=T.event.special[l.type]||{};for(s[0]=l,t=1;t<arguments.length;t++)s[t]=arguments[t];if(l.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,l)){for(a=T.event.handlers.call(this,l,u),t=0;(o=a[t++])&&!l.isPropagationStopped();)for(l.currentTarget=o.elem,n=0;(i=o.handlers[n++])&&!l.isImmediatePropagationStopped();)l.rnamespace&&!1!==i.namespace&&!l.rnamespace.test(i.namespace)||(l.handleObj=i,l.data=i.data,void 0!==(r=((T.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,s))&&!1===(l.result=r)&&(l.preventDefault(),l.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,l),l.result}},handlers:function(e,t){var n,r,o,i,a,s=[],l=t.delegateCount,u=e.target;if(l&&u.nodeType&&!("click"===e.type&&e.button>=1))for(;u!==this;u=u.parentNode||this)if(1===u.nodeType&&("click"!==e.type||!0!==u.disabled)){for(i=[],a={},n=0;n<l;n++)void 0===a[o=(r=t[n]).selector+" "]&&(a[o]=r.needsContext?T(o,this).index(u)>-1:T.find(o,this,null,[u]).length),a[o]&&i.push(r);i.length&&s.push({elem:u,handlers:i})}return u=this,l<t.length&&s.push({elem:u,handlers:t.slice(l)}),s},addProp:function(e,t){Object.defineProperty(T.Event.prototype,e,{enumerable:!0,configurable:!0,get:m(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[T.expando]?e:new T.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return ye.test(t.type)&&t.click&&I(t,"input")&&je(t,"click",Ee),!1},trigger:function(e){var t=this||e;return ye.test(t.type)&&t.click&&I(t,"input")&&je(t,"click"),!0},_default:function(e){var t=e.target;return ye.test(t.type)&&t.click&&I(t,"input")&&K.get(t,"click")||I(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},T.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},T.Event=function(e,t){if(!(this instanceof T.Event))return new T.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ee:_e,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&T.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[T.expando]=!0},T.Event.prototype={constructor:T.Event,isDefaultPrevented:_e,isPropagationStopped:_e,isImmediatePropagationStopped:_e,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ee,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ee,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ee,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},T.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},T.event.addProp),T.each({focus:"focusin",blur:"focusout"},(function(e,t){T.event.special[e]={setup:function(){return je(this,e,Se),!1},trigger:function(){return je(this,e),!0},_default:function(){return!0},delegateType:t}})),T.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},(function(e,t){T.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,o=e.relatedTarget,i=e.handleObj;return o&&(o===r||T.contains(r,o))||(e.type=i.origType,n=i.handler.apply(this,arguments),e.type=t),n}}})),T.fn.extend({on:function(e,t,n,r){return ke(this,e,t,n,r)},one:function(e,t,n,r){return ke(this,e,t,n,r,1)},off:function(e,t,n){var r,o;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,T(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(o in e)this.off(o,t,e[o]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=_e),this.each((function(){T.event.remove(this,e,n,t)}))}});var Ie=/<script|<style|<link/i,Ne=/checked\s*(?:[^=]|=\s*.checked.)/i,Be=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Le(e,t){return I(e,"table")&&I(11!==t.nodeType?t:t.firstChild,"tr")&&T(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Pe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,o,i,a,s;if(1===t.nodeType){if(K.hasData(e)&&(s=K.get(e).events))for(o in K.remove(t,"handle events"),s)for(n=0,r=s[o].length;n<r;n++)T.event.add(t,o,s[o][n]);J.hasData(e)&&(i=J.access(e),a=T.extend({},i),J.set(t,a))}}function He(e,t){var n=t.nodeName.toLowerCase();"input"===n&&ye.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function Me(e,t,n,r){t=l(t);var o,i,a,s,u,c,p=0,f=e.length,d=f-1,h=t[0],g=m(h);if(g||f>1&&"string"==typeof h&&!y.checkClone&&Ne.test(h))return e.each((function(o){var i=e.eq(o);g&&(t[0]=h.call(this,o,i.html())),Me(i,t,n,r)}));if(f&&(i=(o=Ce(t,e[0].ownerDocument,!1,e,r)).firstChild,1===o.childNodes.length&&(o=i),i||r)){for(s=(a=T.map(Ae(o,"script"),De)).length;p<f;p++)u=o,p!==d&&(u=T.clone(u,!0,!0),s&&T.merge(a,Ae(u,"script"))),n.call(e[p],u,p);if(s)for(c=a[a.length-1].ownerDocument,T.map(a,Pe),p=0;p<s;p++)u=a[p],ve.test(u.type||"")&&!K.access(u,"globalEval")&&T.contains(c,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?T._evalUrl&&!u.noModule&&T._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},c):x(u.textContent.replace(Be,""),u,c))}return e}function Re(e,t,n){for(var r,o=t?T.filter(t,e):e,i=0;null!=(r=o[i]);i++)n||1!==r.nodeType||T.cleanData(Ae(r)),r.parentNode&&(n&&se(r)&&xe(Ae(r,"script")),r.parentNode.removeChild(r));return e}T.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,o,i,a,s=e.cloneNode(!0),l=se(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||T.isXMLDoc(e)))for(a=Ae(s),r=0,o=(i=Ae(e)).length;r<o;r++)He(i[r],a[r]);if(t)if(n)for(i=i||Ae(e),a=a||Ae(s),r=0,o=i.length;r<o;r++)Oe(i[r],a[r]);else Oe(e,s);return(a=Ae(s,"script")).length>0&&xe(a,!l&&Ae(e,"script")),s},cleanData:function(e){for(var t,n,r,o=T.event.special,i=0;void 0!==(n=e[i]);i++)if(Z(n)){if(t=n[K.expando]){if(t.events)for(r in t.events)o[r]?T.event.remove(n,r):T.removeEvent(n,r,t.handle);n[K.expando]=void 0}n[J.expando]&&(n[J.expando]=void 0)}}}),T.fn.extend({detach:function(e){return Re(this,e,!0)},remove:function(e){return Re(this,e)},text:function(e){return U(this,(function(e){return void 0===e?T.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)}))}),null,e,arguments.length)},append:function(){return Me(this,arguments,(function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)}))},prepend:function(){return Me(this,arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return Me(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return Me(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(T.cleanData(Ae(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return T.clone(this,e,t)}))},html:function(e){return U(this,(function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ie.test(e)&&!be[(me.exec(e)||["",""])[1].toLowerCase()]){e=T.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(T.cleanData(Ae(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)}),null,e,arguments.length)},replaceWith:function(){var e=[];return Me(this,arguments,(function(t){var n=this.parentNode;T.inArray(this,e)<0&&(T.cleanData(Ae(this)),n&&n.replaceChild(t,this))}),e)}}),T.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},(function(e,t){T.fn[e]=function(e){for(var n,r=[],o=T(e),i=o.length-1,a=0;a<=i;a++)n=a===i?this:this.clone(!0),T(o[a])[t](n),u.apply(r,n.get());return this.pushStack(r)}}));var qe=new RegExp("^("+re+")(?!px)[a-z%]+$","i"),We=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=r),t.getComputedStyle(e)},Fe=function(e,t,n){var r,o,i={};for(o in t)i[o]=e.style[o],e.style[o]=t[o];for(o in r=n.call(e),t)e.style[o]=i[o];return r},$e=new RegExp(ie.join("|"),"i");function ze(e,t,n){var r,o,i,a,s=e.style;return(n=n||We(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||se(e)||(a=T.style(e,t)),!y.pixelBoxStyles()&&qe.test(a)&&$e.test(t)&&(r=s.width,o=s.minWidth,i=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=o,s.maxWidth=i)),void 0!==a?a+"":a}function Ue(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(c){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",c.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",ae.appendChild(u).appendChild(c);var e=r.getComputedStyle(c);n="1%"!==e.top,l=12===t(e.marginLeft),c.style.right="60%",a=36===t(e.right),o=36===t(e.width),c.style.position="absolute",i=12===t(c.offsetWidth/3),ae.removeChild(u),c=null}}function t(e){return Math.round(parseFloat(e))}var n,o,i,a,s,l,u=b.createElement("div"),c=b.createElement("div");c.style&&(c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===c.style.backgroundClip,T.extend(y,{boxSizingReliable:function(){return e(),o},pixelBoxStyles:function(){return e(),a},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),l},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,o;return null==s&&(e=b.createElement("table"),t=b.createElement("tr"),n=b.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",ae.appendChild(e).appendChild(t).appendChild(n),o=r.getComputedStyle(t),s=parseInt(o.height,10)+parseInt(o.borderTopWidth,10)+parseInt(o.borderBottomWidth,10)===t.offsetHeight,ae.removeChild(e)),s}}))}();var Ye=["Webkit","Moz","ms"],Xe=b.createElement("div").style,Ve={};function Ge(e){return T.cssProps[e]||Ve[e]||(e in Xe?e:Ve[e]=function(e){for(var t=e[0].toUpperCase()+e.slice(1),n=Ye.length;n--;)if((e=Ye[n]+t)in Xe)return e}(e)||e)}var Ze=/^(none|table(?!-c[ea]).+)/,Qe=/^--/,Ke={position:"absolute",visibility:"hidden",display:"block"},Je={letterSpacing:"0",fontWeight:"400"};function et(e,t,n){var r=oe.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function tt(e,t,n,r,o,i){var a="width"===t?1:0,s=0,l=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(l+=T.css(e,n+ie[a],!0,o)),r?("content"===n&&(l-=T.css(e,"padding"+ie[a],!0,o)),"margin"!==n&&(l-=T.css(e,"border"+ie[a]+"Width",!0,o))):(l+=T.css(e,"padding"+ie[a],!0,o),"padding"!==n?l+=T.css(e,"border"+ie[a]+"Width",!0,o):s+=T.css(e,"border"+ie[a]+"Width",!0,o));return!r&&i>=0&&(l+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-i-l-s-.5))||0),l}function nt(e,t,n){var r=We(e),o=(!y.boxSizingReliable()||n)&&"border-box"===T.css(e,"boxSizing",!1,r),i=o,a=ze(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(qe.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&o||!y.reliableTrDimensions()&&I(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===T.css(e,"display",!1,r))&&e.getClientRects().length&&(o="border-box"===T.css(e,"boxSizing",!1,r),(i=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+tt(e,t,n||(o?"border":"content"),i,r,a)+"px"}function rt(e,t,n,r,o){return new rt.prototype.init(e,t,n,r,o)}T.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=ze(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,i,a,s=G(t),l=Qe.test(t),u=e.style;if(l||(t=Ge(s)),a=T.cssHooks[t]||T.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(o=a.get(e,!1,r))?o:u[t];"string"==(i=typeof n)&&(o=oe.exec(n))&&o[1]&&(n=ce(e,t,o),i="number"),null!=n&&n==n&&("number"!==i||l||(n+=o&&o[3]||(T.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(l?u.setProperty(t,n):u[t]=n))}},css:function(e,t,n,r){var o,i,a,s=G(t);return Qe.test(t)||(t=Ge(s)),(a=T.cssHooks[t]||T.cssHooks[s])&&"get"in a&&(o=a.get(e,!0,n)),void 0===o&&(o=ze(e,t,r)),"normal"===o&&t in Je&&(o=Je[t]),""===n||n?(i=parseFloat(o),!0===n||isFinite(i)?i||0:o):o}}),T.each(["height","width"],(function(e,t){T.cssHooks[t]={get:function(e,n,r){if(n)return!Ze.test(T.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?nt(e,t,r):Fe(e,Ke,(function(){return nt(e,t,r)}))},set:function(e,n,r){var o,i=We(e),a=!y.scrollboxSize()&&"absolute"===i.position,s=(a||r)&&"border-box"===T.css(e,"boxSizing",!1,i),l=r?tt(e,t,r,s,i):0;return s&&a&&(l-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(i[t])-tt(e,t,"border",!1,i)-.5)),l&&(o=oe.exec(n))&&"px"!==(o[3]||"px")&&(e.style[t]=n,n=T.css(e,t)),et(0,n,l)}}})),T.cssHooks.marginLeft=Ue(y.reliableMarginLeft,(function(e,t){if(t)return(parseFloat(ze(e,"marginLeft"))||e.getBoundingClientRect().left-Fe(e,{marginLeft:0},(function(){return e.getBoundingClientRect().left})))+"px"})),T.each({margin:"",padding:"",border:"Width"},(function(e,t){T.cssHooks[e+t]={expand:function(n){for(var r=0,o={},i="string"==typeof n?n.split(" "):[n];r<4;r++)o[e+ie[r]+t]=i[r]||i[r-2]||i[0];return o}},"margin"!==e&&(T.cssHooks[e+t].set=et)})),T.fn.extend({css:function(e,t){return U(this,(function(e,t,n){var r,o,i={},a=0;if(Array.isArray(t)){for(r=We(e),o=t.length;a<o;a++)i[t[a]]=T.css(e,t[a],!1,r);return i}return void 0!==n?T.style(e,t,n):T.css(e,t)}),e,t,arguments.length>1)}}),T.Tween=rt,rt.prototype={constructor:rt,init:function(e,t,n,r,o,i){this.elem=e,this.prop=n,this.easing=o||T.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=i||(T.cssNumber[n]?"":"px")},cur:function(){var e=rt.propHooks[this.prop];return e&&e.get?e.get(this):rt.propHooks._default.get(this)},run:function(e){var t,n=rt.propHooks[this.prop];return this.options.duration?this.pos=t=T.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rt.propHooks._default.set(this),this}},rt.prototype.init.prototype=rt.prototype,rt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=T.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){T.fx.step[e.prop]?T.fx.step[e.prop](e):1!==e.elem.nodeType||!T.cssHooks[e.prop]&&null==e.elem.style[Ge(e.prop)]?e.elem[e.prop]=e.now:T.style(e.elem,e.prop,e.now+e.unit)}}},rt.propHooks.scrollTop=rt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},T.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},T.fx=rt.prototype.init,T.fx.step={};var ot,it,at=/^(?:toggle|show|hide)$/,st=/queueHooks$/;function lt(){it&&(!1===b.hidden&&r.requestAnimationFrame?r.requestAnimationFrame(lt):r.setTimeout(lt,T.fx.interval),T.fx.tick())}function ut(){return r.setTimeout((function(){ot=void 0})),ot=Date.now()}function ct(e,t){var n,r=0,o={height:e};for(t=t?1:0;r<4;r+=2-t)o["margin"+(n=ie[r])]=o["padding"+n]=e;return t&&(o.opacity=o.width=e),o}function pt(e,t,n){for(var r,o=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),i=0,a=o.length;i<a;i++)if(r=o[i].call(n,t,e))return r}function ft(e,t,n){var r,o,i=0,a=ft.prefilters.length,s=T.Deferred().always((function(){delete l.elem})),l=function(){if(o)return!1;for(var t=ot||ut(),n=Math.max(0,u.startTime+u.duration-t),r=1-(n/u.duration||0),i=0,a=u.tweens.length;i<a;i++)u.tweens[i].run(r);return s.notifyWith(e,[u,r,n]),r<1&&a?n:(a||s.notifyWith(e,[u,1,0]),s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:T.extend({},t),opts:T.extend(!0,{specialEasing:{},easing:T.easing._default},n),originalProperties:t,originalOptions:n,startTime:ot||ut(),duration:n.duration,tweens:[],createTween:function(t,n){var r=T.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(o)return this;for(o=!0;n<r;n++)u.tweens[n].run(1);return t?(s.notifyWith(e,[u,1,0]),s.resolveWith(e,[u,t])):s.rejectWith(e,[u,t]),this}}),c=u.props;for(function(e,t){var n,r,o,i,a;for(n in e)if(o=t[r=G(n)],i=e[n],Array.isArray(i)&&(o=i[1],i=e[n]=i[0]),n!==r&&(e[r]=i,delete e[n]),(a=T.cssHooks[r])&&"expand"in a)for(n in i=a.expand(i),delete e[r],i)n in e||(e[n]=i[n],t[n]=o);else t[r]=o}(c,u.opts.specialEasing);i<a;i++)if(r=ft.prefilters[i].call(u,e,c,u.opts))return m(r.stop)&&(T._queueHooks(u.elem,u.opts.queue).stop=r.stop.bind(r)),r;return T.map(c,pt,u),m(u.opts.start)&&u.opts.start.call(e,u),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always),T.fx.timer(T.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u}T.Animation=T.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return ce(n.elem,e,oe.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(M);for(var n,r=0,o=e.length;r<o;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,o,i,a,s,l,u,c,p="width"in t||"height"in t,f=this,d={},h=e.style,g=e.nodeType&&ue(e),y=K.get(e,"fxshow");for(r in n.queue||(null==(a=T._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,f.always((function(){f.always((function(){a.unqueued--,T.queue(e,"fx").length||a.empty.fire()}))}))),t)if(o=t[r],at.test(o)){if(delete t[r],i=i||"toggle"===o,o===(g?"hide":"show")){if("show"!==o||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||T.style(e,r)}if((l=!T.isEmptyObject(t))||!T.isEmptyObject(d))for(r in p&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(u=y&&y.display)&&(u=K.get(e,"display")),"none"===(c=T.css(e,"display"))&&(u?c=u:(de([e],!0),u=e.style.display||u,c=T.css(e,"display"),de([e]))),("inline"===c||"inline-block"===c&&null!=u)&&"none"===T.css(e,"float")&&(l||(f.done((function(){h.display=u})),null==u&&(c=h.display,u="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",f.always((function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]}))),l=!1,d)l||(y?"hidden"in y&&(g=y.hidden):y=K.access(e,"fxshow",{display:u}),i&&(y.hidden=!g),g&&de([e],!0),f.done((function(){for(r in g||de([e]),K.remove(e,"fxshow"),d)T.style(e,r,d[r])}))),l=pt(g?y[r]:0,r,f),r in y||(y[r]=l.start,g&&(l.end=l.start,l.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),T.speed=function(e,t,n){var r=e&&"object"==typeof e?T.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return T.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in T.fx.speeds?r.duration=T.fx.speeds[r.duration]:r.duration=T.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&T.dequeue(this,r.queue)},r},T.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ue).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var o=T.isEmptyObject(e),i=T.speed(t,n,r),a=function(){var t=ft(this,T.extend({},e),i);(o||K.get(this,"finish"))&&t.stop(!0)};return a.finish=a,o||!1===i.queue?this.each(a):this.queue(i.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&this.queue(e||"fx",[]),this.each((function(){var t=!0,o=null!=e&&e+"queueHooks",i=T.timers,a=K.get(this);if(o)a[o]&&a[o].stop&&r(a[o]);else for(o in a)a[o]&&a[o].stop&&st.test(o)&&r(a[o]);for(o=i.length;o--;)i[o].elem!==this||null!=e&&i[o].queue!==e||(i[o].anim.stop(n),t=!1,i.splice(o,1));!t&&n||T.dequeue(this,e)}))},finish:function(e){return!1!==e&&(e=e||"fx"),this.each((function(){var t,n=K.get(this),r=n[e+"queue"],o=n[e+"queueHooks"],i=T.timers,a=r?r.length:0;for(n.finish=!0,T.queue(this,e,[]),o&&o.stop&&o.stop.call(this,!0),t=i.length;t--;)i[t].elem===this&&i[t].queue===e&&(i[t].anim.stop(!0),i.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish}))}}),T.each(["toggle","show","hide"],(function(e,t){var n=T.fn[t];T.fn[t]=function(e,r,o){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ct(t,!0),e,r,o)}})),T.each({slideDown:ct("show"),slideUp:ct("hide"),slideToggle:ct("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},(function(e,t){T.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}})),T.timers=[],T.fx.tick=function(){var e,t=0,n=T.timers;for(ot=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||T.fx.stop(),ot=void 0},T.fx.timer=function(e){T.timers.push(e),T.fx.start()},T.fx.interval=13,T.fx.start=function(){it||(it=!0,lt())},T.fx.stop=function(){it=null},T.fx.speeds={slow:600,fast:200,_default:400},T.fn.delay=function(e,t){return e=T.fx&&T.fx.speeds[e]||e,t=t||"fx",this.queue(t,(function(t,n){var o=r.setTimeout(t,e);n.stop=function(){r.clearTimeout(o)}}))},function(){var e=b.createElement("input"),t=b.createElement("select").appendChild(b.createElement("option"));e.type="checkbox",y.checkOn=""!==e.value,y.optSelected=t.selected,(e=b.createElement("input")).value="t",e.type="radio",y.radioValue="t"===e.value}();var dt,ht=T.expr.attrHandle;T.fn.extend({attr:function(e,t){return U(this,T.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each((function(){T.removeAttr(this,e)}))}}),T.extend({attr:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return void 0===e.getAttribute?T.prop(e,t,n):(1===i&&T.isXMLDoc(e)||(o=T.attrHooks[t.toLowerCase()]||(T.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void T.removeAttr(e,t):o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:(e.setAttribute(t,n+""),n):o&&"get"in o&&null!==(r=o.get(e,t))?r:null==(r=T.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&I(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,o=t&&t.match(M);if(o&&1===e.nodeType)for(;n=o[r++];)e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?T.removeAttr(e,n):e.setAttribute(n,n),n}},T.each(T.expr.match.bool.source.match(/\w+/g),(function(e,t){var n=ht[t]||T.find.attr;ht[t]=function(e,t,r){var o,i,a=t.toLowerCase();return r||(i=ht[a],ht[a]=o,o=null!=n(e,t,r)?a:null,ht[a]=i),o}}));var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;function mt(e){return(e.match(M)||[]).join(" ")}function vt(e){return e.getAttribute&&e.getAttribute("class")||""}function bt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(M)||[]}T.fn.extend({prop:function(e,t){return U(this,T.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[T.propFix[e]||e]}))}}),T.extend({prop:function(e,t,n){var r,o,i=e.nodeType;if(3!==i&&8!==i&&2!==i)return 1===i&&T.isXMLDoc(e)||(t=T.propFix[t]||t,o=T.propHooks[t]),void 0!==n?o&&"set"in o&&void 0!==(r=o.set(e,n,t))?r:e[t]=n:o&&"get"in o&&null!==(r=o.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=T.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),y.optSelected||(T.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),T.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){T.propFix[this.toLowerCase()]=this})),T.fn.extend({addClass:function(e){var t,n,r,o,i,a,s,l=0;if(m(e))return this.each((function(t){T(this).addClass(e.call(this,t,vt(this)))}));if((t=bt(e)).length)for(;n=this[l++];)if(o=vt(n),r=1===n.nodeType&&" "+mt(o)+" "){for(a=0;i=t[a++];)r.indexOf(" "+i+" ")<0&&(r+=i+" ");o!==(s=mt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,o,i,a,s,l=0;if(m(e))return this.each((function(t){T(this).removeClass(e.call(this,t,vt(this)))}));if(!arguments.length)return this.attr("class","");if((t=bt(e)).length)for(;n=this[l++];)if(o=vt(n),r=1===n.nodeType&&" "+mt(o)+" "){for(a=0;i=t[a++];)for(;r.indexOf(" "+i+" ")>-1;)r=r.replace(" "+i+" "," ");o!==(s=mt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):m(e)?this.each((function(n){T(this).toggleClass(e.call(this,n,vt(this),t),t)})):this.each((function(){var t,o,i,a;if(r)for(o=0,i=T(this),a=bt(e);t=a[o++];)i.hasClass(t)?i.removeClass(t):i.addClass(t);else void 0!==e&&"boolean"!==n||((t=vt(this))&&K.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":K.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+mt(vt(n))+" ").indexOf(t)>-1)return!0;return!1}});var At=/\r/g;T.fn.extend({val:function(e){var t,n,r,o=this[0];return arguments.length?(r=m(e),this.each((function(n){var o;1===this.nodeType&&(null==(o=r?e.call(this,n,T(this).val()):e)?o="":"number"==typeof o?o+="":Array.isArray(o)&&(o=T.map(o,(function(e){return null==e?"":e+""}))),(t=T.valHooks[this.type]||T.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,o,"value")||(this.value=o))}))):o?(t=T.valHooks[o.type]||T.valHooks[o.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(o,"value"))?n:"string"==typeof(n=o.value)?n.replace(At,""):null==n?"":n:void 0}}),T.extend({valHooks:{option:{get:function(e){var t=T.find.attr(e,"value");return null!=t?t:mt(T.text(e))}},select:{get:function(e){var t,n,r,o=e.options,i=e.selectedIndex,a="select-one"===e.type,s=a?null:[],l=a?i+1:o.length;for(r=i<0?l:a?i:0;r<l;r++)if(((n=o[r]).selected||r===i)&&!n.disabled&&(!n.parentNode.disabled||!I(n.parentNode,"optgroup"))){if(t=T(n).val(),a)return t;s.push(t)}return s},set:function(e,t){for(var n,r,o=e.options,i=T.makeArray(t),a=o.length;a--;)((r=o[a]).selected=T.inArray(T.valHooks.option.get(r),i)>-1)&&(n=!0);return n||(e.selectedIndex=-1),i}}}}),T.each(["radio","checkbox"],(function(){T.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=T.inArray(T(e).val(),t)>-1}},y.checkOn||(T.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})})),y.focusin="onfocusin"in r;var xt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};T.extend(T.event,{trigger:function(e,t,n,o){var i,a,s,l,u,c,p,f,h=[n||b],g=d.call(e,"type")?e.type:e,y=d.call(e,"namespace")?e.namespace.split("."):[];if(a=f=s=n=n||b,3!==n.nodeType&&8!==n.nodeType&&!xt.test(g+T.event.triggered)&&(g.indexOf(".")>-1&&(y=g.split("."),g=y.shift(),y.sort()),u=g.indexOf(":")<0&&"on"+g,(e=e[T.expando]?e:new T.Event(g,"object"==typeof e&&e)).isTrigger=o?2:3,e.namespace=y.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+y.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:T.makeArray(t,[e]),p=T.event.special[g]||{},o||!p.trigger||!1!==p.trigger.apply(n,t))){if(!o&&!p.noBubble&&!v(n)){for(l=p.delegateType||g,xt.test(l+g)||(a=a.parentNode);a;a=a.parentNode)h.push(a),s=a;s===(n.ownerDocument||b)&&h.push(s.defaultView||s.parentWindow||r)}for(i=0;(a=h[i++])&&!e.isPropagationStopped();)f=a,e.type=i>1?l:p.bindType||g,(c=(K.get(a,"events")||Object.create(null))[e.type]&&K.get(a,"handle"))&&c.apply(a,t),(c=u&&a[u])&&c.apply&&Z(a)&&(e.result=c.apply(a,t),!1===e.result&&e.preventDefault());return e.type=g,o||e.isDefaultPrevented()||p._default&&!1!==p._default.apply(h.pop(),t)||!Z(n)||u&&m(n[g])&&!v(n)&&((s=n[u])&&(n[u]=null),T.event.triggered=g,e.isPropagationStopped()&&f.addEventListener(g,wt),n[g](),e.isPropagationStopped()&&f.removeEventListener(g,wt),T.event.triggered=void 0,s&&(n[u]=s)),e.result}},simulate:function(e,t,n){var r=T.extend(new T.Event,n,{type:e,isSimulated:!0});T.event.trigger(r,null,t)}}),T.fn.extend({trigger:function(e,t){return this.each((function(){T.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];if(n)return T.event.trigger(e,t,n,!0)}}),y.focusin||T.each({focus:"focusin",blur:"focusout"},(function(e,t){var n=function(e){T.event.simulate(t,e.target,T.event.fix(e))};T.event.special[t]={setup:function(){var r=this.ownerDocument||this.document||this,o=K.access(r,t);o||r.addEventListener(e,n,!0),K.access(r,t,(o||0)+1)},teardown:function(){var r=this.ownerDocument||this.document||this,o=K.access(r,t)-1;o?K.access(r,t,o):(r.removeEventListener(e,n,!0),K.remove(r,t))}}}));var Ct=r.location,Tt={guid:Date.now()},Et=/\?/;T.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new r.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||T.error("Invalid XML: "+(n?T.map(n.childNodes,(function(e){return e.textContent})).join("\n"):e)),t};var _t=/\[\]$/,St=/\r?\n/g,kt=/^(?:submit|button|image|reset|file)$/i,jt=/^(?:input|select|textarea|keygen)/i;function It(e,t,n,r){var o;if(Array.isArray(t))T.each(t,(function(t,o){n||_t.test(e)?r(e,o):It(e+"["+("object"==typeof o&&null!=o?t:"")+"]",o,n,r)}));else if(n||"object"!==w(t))r(e,t);else for(o in t)It(e+"["+o+"]",t[o],n,r)}T.param=function(e,t){var n,r=[],o=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!T.isPlainObject(e))T.each(e,(function(){o(this.name,this.value)}));else for(n in e)It(n,e[n],t,o);return r.join("&")},T.fn.extend({serialize:function(){return T.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=T.prop(this,"elements");return e?T.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!T(this).is(":disabled")&&jt.test(this.nodeName)&&!kt.test(e)&&(this.checked||!ye.test(e))})).map((function(e,t){var n=T(this).val();return null==n?null:Array.isArray(n)?T.map(n,(function(e){return{name:t.name,value:e.replace(St,"\r\n")}})):{name:t.name,value:n.replace(St,"\r\n")}})).get()}});var Nt=/%20/g,Bt=/#.*$/,Lt=/([?&])_=[^&]*/,Dt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:GET|HEAD)$/,Ot=/^\/\//,Ht={},Mt={},Rt="*/".concat("*"),qt=b.createElement("a");function Wt(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,o=0,i=t.toLowerCase().match(M)||[];if(m(n))for(;r=i[o++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function Ft(e,t,n,r){var o={},i=e===Mt;function a(s){var l;return o[s]=!0,T.each(e[s]||[],(function(e,s){var u=s(t,n,r);return"string"!=typeof u||i||o[u]?i?!(l=u):void 0:(t.dataTypes.unshift(u),a(u),!1)})),l}return a(t.dataTypes[0])||!o["*"]&&a("*")}function $t(e,t){var n,r,o=T.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((o[n]?e:r||(r={}))[n]=t[n]);return r&&T.extend(!0,e,r),e}qt.href=Ct.href,T.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Rt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":T.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,T.ajaxSettings),t):$t(T.ajaxSettings,e)},ajaxPrefilter:Wt(Ht),ajaxTransport:Wt(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var n,o,i,a,s,l,u,c,p,f,d=T.ajaxSetup({},t),h=d.context||d,g=d.context&&(h.nodeType||h.jquery)?T(h):T.event,y=T.Deferred(),m=T.Callbacks("once memory"),v=d.statusCode||{},A={},x={},w="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(u){if(!a)for(a={};t=Dt.exec(i);)a[t[1].toLowerCase()+" "]=(a[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=a[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return u?i:null},setRequestHeader:function(e,t){return null==u&&(e=x[e.toLowerCase()]=x[e.toLowerCase()]||e,A[e]=t),this},overrideMimeType:function(e){return null==u&&(d.mimeType=e),this},statusCode:function(e){var t;if(e)if(u)C.always(e[C.status]);else for(t in e)v[t]=[v[t],e[t]];return this},abort:function(e){var t=e||w;return n&&n.abort(t),E(0,t),this}};if(y.promise(C),d.url=((e||d.url||Ct.href)+"").replace(Ot,Ct.protocol+"//"),d.type=t.method||t.type||d.method||d.type,d.dataTypes=(d.dataType||"*").toLowerCase().match(M)||[""],null==d.crossDomain){l=b.createElement("a");try{l.href=d.url,l.href=l.href,d.crossDomain=qt.protocol+"//"+qt.host!=l.protocol+"//"+l.host}catch(e){d.crossDomain=!0}}if(d.data&&d.processData&&"string"!=typeof d.data&&(d.data=T.param(d.data,d.traditional)),Ft(Ht,d,t,C),u)return C;for(p in(c=T.event&&d.global)&&0==T.active++&&T.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Pt.test(d.type),o=d.url.replace(Bt,""),d.hasContent?d.data&&d.processData&&0===(d.contentType||"").indexOf("application/x-www-form-urlencoded")&&(d.data=d.data.replace(Nt,"+")):(f=d.url.slice(o.length),d.data&&(d.processData||"string"==typeof d.data)&&(o+=(Et.test(o)?"&":"?")+d.data,delete d.data),!1===d.cache&&(o=o.replace(Lt,"$1"),f=(Et.test(o)?"&":"?")+"_="+Tt.guid+++f),d.url=o+f),d.ifModified&&(T.lastModified[o]&&C.setRequestHeader("If-Modified-Since",T.lastModified[o]),T.etag[o]&&C.setRequestHeader("If-None-Match",T.etag[o])),(d.data&&d.hasContent&&!1!==d.contentType||t.contentType)&&C.setRequestHeader("Content-Type",d.contentType),C.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+Rt+"; q=0.01":""):d.accepts["*"]),d.headers)C.setRequestHeader(p,d.headers[p]);if(d.beforeSend&&(!1===d.beforeSend.call(h,C,d)||u))return C.abort();if(w="abort",m.add(d.complete),C.done(d.success),C.fail(d.error),n=Ft(Mt,d,t,C)){if(C.readyState=1,c&&g.trigger("ajaxSend",[C,d]),u)return C;d.async&&d.timeout>0&&(s=r.setTimeout((function(){C.abort("timeout")}),d.timeout));try{u=!1,n.send(A,E)}catch(e){if(u)throw e;E(-1,e)}}else E(-1,"No Transport");function E(e,t,a,l){var p,f,b,A,x,w=t;u||(u=!0,s&&r.clearTimeout(s),n=void 0,i=l||"",C.readyState=e>0?4:0,p=e>=200&&e<300||304===e,a&&(A=function(e,t,n){for(var r,o,i,a,s=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(o in s)if(s[o]&&s[o].test(r)){l.unshift(o);break}if(l[0]in n)i=l[0];else{for(o in n){if(!l[0]||e.converters[o+" "+l[0]]){i=o;break}a||(a=o)}i=i||a}if(i)return i!==l[0]&&l.unshift(i),n[i]}(d,C,a)),!p&&T.inArray("script",d.dataTypes)>-1&&T.inArray("json",d.dataTypes)<0&&(d.converters["text script"]=function(){}),A=function(e,t,n,r){var o,i,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];for(i=c.shift();i;)if(e.responseFields[i]&&(n[e.responseFields[i]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=i,i=c.shift())if("*"===i)i=l;else if("*"!==l&&l!==i){if(!(a=u[l+" "+i]||u["* "+i]))for(o in u)if((s=o.split(" "))[1]===i&&(a=u[l+" "+s[0]]||u["* "+s[0]])){!0===a?a=u[o]:!0!==u[o]&&(i=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+l+" to "+i}}}return{state:"success",data:t}}(d,A,C,p),p?(d.ifModified&&((x=C.getResponseHeader("Last-Modified"))&&(T.lastModified[o]=x),(x=C.getResponseHeader("etag"))&&(T.etag[o]=x)),204===e||"HEAD"===d.type?w="nocontent":304===e?w="notmodified":(w=A.state,f=A.data,p=!(b=A.error))):(b=w,!e&&w||(w="error",e<0&&(e=0))),C.status=e,C.statusText=(t||w)+"",p?y.resolveWith(h,[f,w,C]):y.rejectWith(h,[C,w,b]),C.statusCode(v),v=void 0,c&&g.trigger(p?"ajaxSuccess":"ajaxError",[C,d,p?f:b]),m.fireWith(h,[C,w]),c&&(g.trigger("ajaxComplete",[C,d]),--T.active||T.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return T.get(e,t,n,"json")},getScript:function(e,t){return T.get(e,void 0,t,"script")}}),T.each(["get","post"],(function(e,t){T[t]=function(e,n,r,o){return m(n)&&(o=o||r,r=n,n=void 0),T.ajax(T.extend({url:e,type:t,dataType:o,data:n,success:r},T.isPlainObject(e)&&e))}})),T.ajaxPrefilter((function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")})),T._evalUrl=function(e,t,n){return T.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){T.globalEval(e,t,n)}})},T.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=T(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map((function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e})).append(this)),this},wrapInner:function(e){return m(e)?this.each((function(t){T(this).wrapInner(e.call(this,t))})):this.each((function(){var t=T(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)}))},wrap:function(e){var t=m(e);return this.each((function(n){T(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(e){return this.parent(e).not("body").each((function(){T(this).replaceWith(this.childNodes)})),this}}),T.expr.pseudos.hidden=function(e){return!T.expr.pseudos.visible(e)},T.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},T.ajaxSettings.xhr=function(){try{return new r.XMLHttpRequest}catch(e){}};var zt={0:200,1223:204},Ut=T.ajaxSettings.xhr();y.cors=!!Ut&&"withCredentials"in Ut,y.ajax=Ut=!!Ut,T.ajaxTransport((function(e){var t,n;if(y.cors||Ut&&!e.crossDomain)return{send:function(o,i){var a,s=e.xhr();if(s.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(a in e.xhrFields)s[a]=e.xhrFields[a];for(a in e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),e.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest"),o)s.setRequestHeader(a,o[a]);t=function(e){return function(){t&&(t=n=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?i(0,"error"):i(s.status,s.statusText):i(zt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=t(),n=s.onerror=s.ontimeout=t("error"),void 0!==s.onabort?s.onabort=n:s.onreadystatechange=function(){4===s.readyState&&r.setTimeout((function(){t&&n()}))},t=t("abort");try{s.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}})),T.ajaxPrefilter((function(e){e.crossDomain&&(e.contents.script=!1)})),T.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return T.globalEval(e),e}}}),T.ajaxPrefilter("script",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")})),T.ajaxTransport("script",(function(e){var t,n;if(e.crossDomain||e.scriptAttrs)return{send:function(r,o){t=T("<script>").attr(e.scriptAttrs||{}).prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&o("error"===e.type?404:200,e.type)}),b.head.appendChild(t[0])},abort:function(){n&&n()}}}));var Yt,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;T.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||T.expando+"_"+Tt.guid++;return this[e]=!0,e}}),T.ajaxPrefilter("json jsonp",(function(e,t,n){var o,i,a,s=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(s||"jsonp"===e.dataTypes[0])return o=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,s?e[s]=e[s].replace(Vt,"$1"+o):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+o),e.converters["script json"]=function(){return a||T.error(o+" was not called"),a[0]},e.dataTypes[0]="json",i=r[o],r[o]=function(){a=arguments},n.always((function(){void 0===i?T(r).removeProp(o):r[o]=i,e[o]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(o)),a&&m(i)&&i(a[0]),a=i=void 0})),"script"})),y.createHTMLDocument=((Yt=b.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Yt.childNodes.length),T.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=b.implementation.createHTMLDocument("")).createElement("base")).href=b.location.href,t.head.appendChild(r)):t=b),i=!n&&[],(o=N.exec(e))?[t.createElement(o[1])]:(o=Ce([e],t,i),i&&i.length&&T(i).remove(),T.merge([],o.childNodes)));var r,o,i},T.fn.load=function(e,t,n){var r,o,i,a=this,s=e.indexOf(" ");return s>-1&&(r=mt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(o="POST"),a.length>0&&T.ajax({url:e,type:o||"GET",dataType:"html",data:t}).done((function(e){i=arguments,a.html(r?T("<div>").append(T.parseHTML(e)).find(r):e)})).always(n&&function(e,t){a.each((function(){n.apply(this,i||[e.responseText,t,e])}))}),this},T.expr.pseudos.animated=function(e){return T.grep(T.timers,(function(t){return e===t.elem})).length},T.offset={setOffset:function(e,t,n){var r,o,i,a,s,l,u=T.css(e,"position"),c=T(e),p={};"static"===u&&(e.style.position="relative"),s=c.offset(),i=T.css(e,"top"),l=T.css(e,"left"),("absolute"===u||"fixed"===u)&&(i+l).indexOf("auto")>-1?(a=(r=c.position()).top,o=r.left):(a=parseFloat(i)||0,o=parseFloat(l)||0),m(t)&&(t=t.call(e,n,T.extend({},s))),null!=t.top&&(p.top=t.top-s.top+a),null!=t.left&&(p.left=t.left-s.left+o),"using"in t?t.using.call(e,p):c.css(p)}},T.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each((function(t){T.offset.setOffset(this,e,t)}));var t,n,r=this[0];return r?r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],o={top:0,left:0};if("fixed"===T.css(r,"position"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===T.css(e,"position");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&((o=T(e).offset()).top+=T.css(e,"borderTopWidth",!0),o.left+=T.css(e,"borderLeftWidth",!0))}return{top:t.top-o.top-T.css(r,"marginTop",!0),left:t.left-o.left-T.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map((function(){for(var e=this.offsetParent;e&&"static"===T.css(e,"position");)e=e.offsetParent;return e||ae}))}}),T.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},(function(e,t){var n="pageYOffset"===t;T.fn[e]=function(r){return U(this,(function(e,r,o){var i;if(v(e)?i=e:9===e.nodeType&&(i=e.defaultView),void 0===o)return i?i[t]:e[r];i?i.scrollTo(n?i.pageXOffset:o,n?o:i.pageYOffset):e[r]=o}),e,r,arguments.length)}})),T.each(["top","left"],(function(e,t){T.cssHooks[t]=Ue(y.pixelPosition,(function(e,n){if(n)return n=ze(e,t),qe.test(n)?T(e).position()[t]+"px":n}))})),T.each({Height:"height",Width:"width"},(function(e,t){T.each({padding:"inner"+e,content:t,"":"outer"+e},(function(n,r){T.fn[r]=function(o,i){var a=arguments.length&&(n||"boolean"!=typeof o),s=n||(!0===o||!0===i?"margin":"border");return U(this,(function(t,n,o){var i;return v(t)?0===r.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(i=t.documentElement,Math.max(t.body["scroll"+e],i["scroll"+e],t.body["offset"+e],i["offset"+e],i["client"+e])):void 0===o?T.css(t,n,s):T.style(t,n,o,s)}),t,a?o:void 0,a)}}))})),T.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],(function(e,t){T.fn[t]=function(e){return this.on(t,e)}})),T.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),T.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),(function(e,t){T.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}));var Gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;T.proxy=function(e,t){var n,r,o;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(o=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||T.guid++,o},T.holdReady=function(e){e?T.readyWait++:T.ready(!0)},T.isArray=Array.isArray,T.parseJSON=JSON.parse,T.nodeName=I,T.isFunction=m,T.isWindow=v,T.camelCase=G,T.type=w,T.now=Date.now,T.isNumeric=function(e){var t=T.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},T.trim=function(e){return null==e?"":(e+"").replace(Gt,"")},void 0===(n=function(){return T}.apply(t,[]))||(e.exports=n);var Zt=r.jQuery,Qt=r.$;return T.noConflict=function(e){return r.$===T&&(r.$=Qt),e&&r.jQuery===T&&(r.jQuery=Zt),T},void 0===o&&(r.jQuery=r.$=T),T}))},8552:(e,t,n)=>{var r=n(852)(n(5639),"DataView");e.exports=r},1989:(e,t,n)=>{var r=n(1789),o=n(401),i=n(7667),a=n(1327),s=n(1866);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=o,l.prototype.get=i,l.prototype.has=a,l.prototype.set=s,e.exports=l},6425:(e,t,n)=>{var r=n(3118),o=n(9435);function i(e){this.__wrapped__=e,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}i.prototype=r(o.prototype),i.prototype.constructor=i,e.exports=i},8407:(e,t,n)=>{var r=n(7040),o=n(4125),i=n(2117),a=n(7518),s=n(4705);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=o,l.prototype.get=i,l.prototype.has=a,l.prototype.set=s,e.exports=l},7548:(e,t,n)=>{var r=n(3118),o=n(9435);function i(e,t){this.__wrapped__=e,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=void 0}i.prototype=r(o.prototype),i.prototype.constructor=i,e.exports=i},7071:(e,t,n)=>{var r=n(852)(n(5639),"Map");e.exports=r},3369:(e,t,n)=>{var r=n(4785),o=n(1285),i=n(6e3),a=n(9916),s=n(5265);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}l.prototype.clear=r,l.prototype.delete=o,l.prototype.get=i,l.prototype.has=a,l.prototype.set=s,e.exports=l},3818:(e,t,n)=>{var r=n(852)(n(5639),"Promise");e.exports=r},3720:(e,t,n)=>{var r=n(852)(n(5639),"Set");e.exports=r},2705:(e,t,n)=>{var r=n(5639).Symbol;e.exports=r},577:(e,t,n)=>{var r=n(852)(n(5639),"WeakMap");e.exports=r},6874:e=>{e.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},4636:(e,t,n)=>{var r=n(2545),o=n(5694),i=n(1469),a=n(4144),s=n(5776),l=n(6719),u=Object.prototype.hasOwnProperty;e.exports=function(e,t){var n=i(e),c=!n&&o(e),p=!n&&!c&&a(e),f=!n&&!c&&!p&&l(e),d=n||c||p||f,h=d?r(e.length,String):[],g=h.length;for(var y in e)!t&&!u.call(e,y)||d&&("length"==y||p&&("offset"==y||"parent"==y)||f&&("buffer"==y||"byteLength"==y||"byteOffset"==y)||s(y,g))||h.push(y);return h}},9932:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=Array(r);++n<r;)o[n]=t(e[n],n,e);return o}},2488:e=>{e.exports=function(e,t){for(var n=-1,r=t.length,o=e.length;++n<r;)e[o+n]=t[n];return e}},2663:e=>{e.exports=function(e,t,n,r){var o=-1,i=null==e?0:e.length;for(r&&i&&(n=e[++o]);++o<i;)n=t(n,e[o],o,e);return n}},4286:e=>{e.exports=function(e){return e.split("")}},8470:(e,t,n)=>{var r=n(7813);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},6484:(e,t,n)=>{var r=n(7361);e.exports=function(e,t){for(var n=-1,o=t.length,i=Array(o),a=null==e;++n<o;)i[n]=a?void 0:r(e,t[n]);return i}},3118:(e,t,n)=>{var r=n(3218),o=Object.create,i=function(){function e(){}return function(t){if(!r(t))return{};if(o)return o(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();e.exports=i},1078:(e,t,n)=>{var r=n(2488),o=n(7285);e.exports=function e(t,n,i,a,s){var l=-1,u=t.length;for(i||(i=o),s||(s=[]);++l<u;){var c=t[l];n>0&&i(c)?n>1?e(c,n-1,i,a,s):r(s,c):a||(s[s.length]=c)}return s}},7786:(e,t,n)=>{var r=n(1811),o=n(327);e.exports=function(e,t){for(var n=0,i=(t=r(t,e)).length;null!=e&&n<i;)e=e[o(t[n++])];return n&&n==i?e:void 0}},4239:(e,t,n)=>{var r=n(2705),o=n(9607),i=n(2333),a=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":a&&a in Object(e)?o(e):i(e)}},9454:(e,t,n)=>{var r=n(4239),o=n(7005);e.exports=function(e){return o(e)&&"[object Arguments]"==r(e)}},8458:(e,t,n)=>{var r=n(3560),o=n(5346),i=n(3218),a=n(346),s=/^\[object .+?Constructor\]$/,l=Function.prototype,u=Object.prototype,c=l.toString,p=u.hasOwnProperty,f=RegExp("^"+c.call(p).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!i(e)||o(e))&&(r(e)?f:s).test(a(e))}},8749:(e,t,n)=>{var r=n(4239),o=n(1780),i=n(7005),a={};a["[object Float32Array]"]=a["[object Float64Array]"]=a["[object Int8Array]"]=a["[object Int16Array]"]=a["[object Int32Array]"]=a["[object Uint8Array]"]=a["[object Uint8ClampedArray]"]=a["[object Uint16Array]"]=a["[object Uint32Array]"]=!0,a["[object Arguments]"]=a["[object Array]"]=a["[object ArrayBuffer]"]=a["[object Boolean]"]=a["[object DataView]"]=a["[object Date]"]=a["[object Error]"]=a["[object Function]"]=a["[object Map]"]=a["[object Number]"]=a["[object Object]"]=a["[object RegExp]"]=a["[object Set]"]=a["[object String]"]=a["[object WeakMap]"]=!1,e.exports=function(e){return i(e)&&o(e.length)&&!!a[r(e)]}},280:(e,t,n)=>{var r=n(5726),o=n(6916),i=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return o(e);var t=[];for(var n in Object(e))i.call(e,n)&&"constructor"!=n&&t.push(n);return t}},9435:e=>{e.exports=function(){}},6560:(e,t,n)=>{var r=n(5703),o=n(8777),i=n(6557),a=o?function(e,t){return o(e,"toString",{configurable:!0,enumerable:!1,value:r(t),writable:!0})}:i;e.exports=a},2545:e=>{e.exports=function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}},531:(e,t,n)=>{var r=n(2705),o=n(9932),i=n(1469),a=n(3448),s=r?r.prototype:void 0,l=s?s.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(i(t))return o(t,e)+"";if(a(t))return l?l.call(t):"";var n=t+"";return"0"==n&&1/t==-1/0?"-0":n}},1717:e=>{e.exports=function(e){return function(t){return e(t)}}},7415:(e,t,n)=>{var r=n(9932);e.exports=function(e,t){return r(t,(function(t){return e[t]}))}},8923:(e,t,n)=>{var r=n(6425),o=n(2488),i=n(2663);e.exports=function(e,t){var n=e;return n instanceof r&&(n=n.value()),i(t,(function(e,t){return t.func.apply(t.thisArg,o([e],t.args))}),n)}},1811:(e,t,n)=>{var r=n(1469),o=n(5403),i=n(5514),a=n(9833);e.exports=function(e,t){return r(e)?e:o(e,t)?[e]:i(a(e))}},278:e=>{e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}},4429:(e,t,n)=>{var r=n(5639)["__core-js_shared__"];e.exports=r},8777:(e,t,n)=>{var r=n(852),o=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();e.exports=o},9021:(e,t,n)=>{var r=n(5564),o=n(5357),i=n(61);e.exports=function(e){return i(o(e,void 0,r),e+"")}},1957:(e,t,n)=>{var r="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=r},5050:(e,t,n)=>{var r=n(7019);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},852:(e,t,n)=>{var r=n(8458),o=n(7801);e.exports=function(e,t){var n=o(e,t);return r(n)?n:void 0}},9607:(e,t,n)=>{var r=n(2705),o=Object.prototype,i=o.hasOwnProperty,a=o.toString,s=r?r.toStringTag:void 0;e.exports=function(e){var t=i.call(e,s),n=e[s];try{e[s]=void 0;var r=!0}catch(e){}var o=a.call(e);return r&&(t?e[s]=n:delete e[s]),o}},4160:(e,t,n)=>{var r=n(8552),o=n(7071),i=n(3818),a=n(3720),s=n(577),l=n(4239),u=n(346),c="[object Map]",p="[object Promise]",f="[object Set]",d="[object WeakMap]",h="[object DataView]",g=u(r),y=u(o),m=u(i),v=u(a),b=u(s),A=l;(r&&A(new r(new ArrayBuffer(1)))!=h||o&&A(new o)!=c||i&&A(i.resolve())!=p||a&&A(new a)!=f||s&&A(new s)!=d)&&(A=function(e){var t=l(e),n="[object Object]"==t?e.constructor:void 0,r=n?u(n):"";if(r)switch(r){case g:return h;case y:return c;case m:return p;case v:return f;case b:return d}return t}),e.exports=A},7801:e=>{e.exports=function(e,t){return null==e?void 0:e[t]}},2689:e=>{var t=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");e.exports=function(e){return t.test(e)}},1789:(e,t,n)=>{var r=n(4536);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},401:e=>{e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},7667:(e,t,n)=>{var r=n(4536),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return o.call(t,e)?t[e]:void 0}},1327:(e,t,n)=>{var r=n(4536),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:o.call(t,e)}},1866:(e,t,n)=>{var r=n(4536);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?"__lodash_hash_undefined__":t,this}},7285:(e,t,n)=>{var r=n(2705),o=n(5694),i=n(1469),a=r?r.isConcatSpreadable:void 0;e.exports=function(e){return i(e)||o(e)||!!(a&&e&&e[a])}},5776:e=>{var t=/^(?:0|[1-9]\d*)$/;e.exports=function(e,n){var r=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==r||"symbol"!=r&&t.test(e))&&e>-1&&e%1==0&&e<n}},5403:(e,t,n)=>{var r=n(1469),o=n(3448),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!o(e))||a.test(e)||!i.test(e)||null!=t&&e in Object(t)}},7019:e=>{e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},5346:(e,t,n)=>{var r,o=n(4429),i=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!i&&i in e}},5726:e=>{var t=Object.prototype;e.exports=function(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||t)}},59:e=>{e.exports=function(e){for(var t,n=[];!(t=e.next()).done;)n.push(t.value);return n}},7040:e=>{e.exports=function(){this.__data__=[],this.size=0}},4125:(e,t,n)=>{var r=n(8470),o=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0||(n==t.length-1?t.pop():o.call(t,n,1),--this.size,0))}},2117:(e,t,n)=>{var r=n(8470);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},7518:(e,t,n)=>{var r=n(8470);e.exports=function(e){return r(this.__data__,e)>-1}},4705:(e,t,n)=>{var r=n(8470);e.exports=function(e,t){var n=this.__data__,o=r(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this}},4785:(e,t,n)=>{var r=n(1989),o=n(8407),i=n(7071);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(i||o),string:new r}}},1285:(e,t,n)=>{var r=n(5050);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},6e3:(e,t,n)=>{var r=n(5050);e.exports=function(e){return r(this,e).get(e)}},9916:(e,t,n)=>{var r=n(5050);e.exports=function(e){return r(this,e).has(e)}},5265:(e,t,n)=>{var r=n(5050);e.exports=function(e,t){var n=r(this,e),o=n.size;return n.set(e,t),this.size+=n.size==o?0:1,this}},8776:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}},4523:(e,t,n)=>{var r=n(8306);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},4536:(e,t,n)=>{var r=n(852)(Object,"create");e.exports=r},6916:(e,t,n)=>{var r=n(5569)(Object.keys,Object);e.exports=r},1167:(e,t,n)=>{e=n.nmd(e);var r=n(1957),o=t&&!t.nodeType&&t,i=o&&e&&!e.nodeType&&e,a=i&&i.exports===o&&r.process,s=function(){try{return i&&i.require&&i.require("util").types||a&&a.binding&&a.binding("util")}catch(e){}}();e.exports=s},2333:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},5569:e=>{e.exports=function(e,t){return function(n){return e(t(n))}}},5357:(e,t,n)=>{var r=n(6874),o=Math.max;e.exports=function(e,t,n){return t=o(void 0===t?e.length-1:t,0),function(){for(var i=arguments,a=-1,s=o(i.length-t,0),l=Array(s);++a<s;)l[a]=i[t+a];a=-1;for(var u=Array(t+1);++a<t;)u[a]=i[a];return u[t]=n(l),r(e,this,u)}}},5639:(e,t,n)=>{var r=n(1957),o="object"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function("return this")();e.exports=i},1814:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}},61:(e,t,n)=>{var r=n(6560),o=n(1275)(r);e.exports=o},1275:e=>{var t=Date.now;e.exports=function(e){var n=0,r=0;return function(){var o=t(),i=16-(o-r);if(r=o,i>0){if(++n>=800)return arguments[0]}else n=0;return e.apply(void 0,arguments)}}},3140:(e,t,n)=>{var r=n(4286),o=n(2689),i=n(676);e.exports=function(e){return o(e)?i(e):r(e)}},5514:(e,t,n)=>{var r=n(4523),o=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,i=/\\(\\)?/g,a=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(o,(function(e,n,r,o){t.push(r?o.replace(i,"$1"):n||e)})),t}));e.exports=a},327:(e,t,n)=>{var r=n(3448);e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}},346:e=>{var t=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return t.call(e)}catch(e){}try{return e+""}catch(e){}}return""}},676:e=>{var t="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",n="\\ud83c[\\udffb-\\udfff]",r="[^\\ud800-\\udfff]",o="(?:\\ud83c[\\udde6-\\uddff]){2}",i="[\\ud800-\\udbff][\\udc00-\\udfff]",a="(?:"+t+"|"+n+")?",s="[\\ufe0e\\ufe0f]?",l=s+a+"(?:\\u200d(?:"+[r,o,i].join("|")+")"+s+a+")*",u="(?:"+[r+t+"?",t,o,i,"[\\ud800-\\udfff]"].join("|")+")",c=RegExp(n+"(?="+n+")|"+u+l,"g");e.exports=function(e){return e.match(c)||[]}},1913:(e,t,n)=>{var r=n(6425),o=n(7548),i=n(278);e.exports=function(e){if(e instanceof r)return e.clone();var t=new o(e.__wrapped__,e.__chain__);return t.__actions__=i(e.__actions__),t.__index__=e.__index__,t.__values__=e.__values__,t}},1263:(e,t,n)=>{var r=n(8111);e.exports=function(e){var t=r(e);return t.__chain__=!0,t}},9663:(e,t,n)=>{var r=n(7548);e.exports=function(){return new r(this.value(),this.__chain__)}},5703:e=>{e.exports=function(e){return function(){return e}}},7813:e=>{e.exports=function(e,t){return e===t||e!=e&&t!=t}},5564:(e,t,n)=>{var r=n(1078);e.exports=function(e){return null!=e&&e.length?r(e,1):[]}},7361:(e,t,n)=>{var r=n(7786);e.exports=function(e,t,n){var o=null==e?void 0:r(e,t);return void 0===o?n:o}},6557:e=>{e.exports=function(e){return e}},5694:(e,t,n)=>{var r=n(9454),o=n(7005),i=Object.prototype,a=i.hasOwnProperty,s=i.propertyIsEnumerable,l=r(function(){return arguments}())?r:function(e){return o(e)&&a.call(e,"callee")&&!s.call(e,"callee")};e.exports=l},1469:e=>{var t=Array.isArray;e.exports=t},8612:(e,t,n)=>{var r=n(3560),o=n(1780);e.exports=function(e){return null!=e&&o(e.length)&&!r(e)}},4144:(e,t,n)=>{e=n.nmd(e);var r=n(5639),o=n(5062),i=t&&!t.nodeType&&t,a=i&&e&&!e.nodeType&&e,s=a&&a.exports===i?r.Buffer:void 0,l=(s?s.isBuffer:void 0)||o;e.exports=l},3560:(e,t,n)=>{var r=n(4239),o=n(3218);e.exports=function(e){if(!o(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},1780:e=>{e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},3218:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},7005:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},7037:(e,t,n)=>{var r=n(4239),o=n(1469),i=n(7005);e.exports=function(e){return"string"==typeof e||!o(e)&&i(e)&&"[object String]"==r(e)}},3448:(e,t,n)=>{var r=n(4239),o=n(7005);e.exports=function(e){return"symbol"==typeof e||o(e)&&"[object Symbol]"==r(e)}},6719:(e,t,n)=>{var r=n(8749),o=n(1717),i=n(1167),a=i&&i.isTypedArray,s=a?o(a):r;e.exports=s},3674:(e,t,n)=>{var r=n(4636),o=n(280),i=n(8612);e.exports=function(e){return i(e)?r(e):o(e)}},8306:(e,t,n)=>{var r=n(3369);function o(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var a=e.apply(this,r);return n.cache=i.set(o,a)||i,a};return n.cache=new(o.Cache||r),n}o.Cache=r,e.exports=o},8506:(e,t,n)=>{var r=n(1581);e.exports=function(){void 0===this.__values__&&(this.__values__=r(this.value()));var e=this.__index__>=this.__values__.length;return{done:e,value:e?void 0:this.__values__[this.__index__++]}}},9270:(e,t,n)=>{var r=n(9435),o=n(1913);e.exports=function(e){for(var t,n=this;n instanceof r;){var i=o(n);i.__index__=0,i.__values__=void 0,t?a.__wrapped__=i:t=i;var a=i;n=n.__wrapped__}return a.__wrapped__=e,t}},1351:e=>{var t=Array.prototype.reverse;e.exports=function(e){return null==e?e:t.call(e)}},6353:(e,t,n)=>{e.exports={at:n(8192),chain:n(1263),commit:n(9663),lodash:n(8111),next:n(8506),plant:n(9270),reverse:n(8879),tap:n(1962),thru:n(4313),toIterator:n(4827),toJSON:n(6710),value:n(6339),valueOf:n(1574),wrapperChain:n(5177)}},5062:e=>{e.exports=function(){return!1}},1962:e=>{e.exports=function(e,t){return t(e),e}},4313:e=>{e.exports=function(e,t){return t(e)}},1581:(e,t,n)=>{var r=n(2705),o=n(278),i=n(4160),a=n(8612),s=n(7037),l=n(59),u=n(8776),c=n(1814),p=n(3140),f=n(2628),d=r?r.iterator:void 0;e.exports=function(e){if(!e)return[];if(a(e))return s(e)?p(e):o(e);if(d&&e[d])return l(e[d]());var t=i(e);return("[object Map]"==t?u:"[object Set]"==t?c:f)(e)}},4827:e=>{e.exports=function(){return this}},6710:(e,t,n)=>{e.exports=n(6339)},9833:(e,t,n)=>{var r=n(531);e.exports=function(e){return null==e?"":r(e)}},1574:(e,t,n)=>{e.exports=n(6339)},2628:(e,t,n)=>{var r=n(7415),o=n(3674);e.exports=function(e){return null==e?[]:r(e,o(e))}},8192:(e,t,n)=>{var r=n(6425),o=n(7548),i=n(6484),a=n(9021),s=n(5776),l=n(4313),u=a((function(e){var t=e.length,n=t?e[0]:0,a=this.__wrapped__,u=function(t){return i(t,e)};return!(t>1||this.__actions__.length)&&a instanceof r&&s(n)?((a=a.slice(n,+n+(t?1:0))).__actions__.push({func:l,args:[u],thisArg:void 0}),new o(a,this.__chain__).thru((function(e){return t&&!e.length&&e.push(void 0),e}))):this.thru(u)}));e.exports=u},5177:(e,t,n)=>{var r=n(1263);e.exports=function(){return r(this)}},8111:(e,t,n)=>{var r=n(6425),o=n(7548),i=n(9435),a=n(1469),s=n(7005),l=n(1913),u=Object.prototype.hasOwnProperty;function c(e){if(s(e)&&!a(e)&&!(e instanceof r)){if(e instanceof o)return e;if(u.call(e,"__wrapped__"))return l(e)}return new o(e)}c.prototype=i.prototype,c.prototype.constructor=c,e.exports=c},8879:(e,t,n)=>{var r=n(6425),o=n(7548),i=n(1351),a=n(4313);e.exports=function(){var e=this.__wrapped__;if(e instanceof r){var t=e;return this.__actions__.length&&(t=new r(this)),(t=t.reverse()).__actions__.push({func:a,args:[i],thisArg:void 0}),new o(t,this.__chain__)}return this.thru(i)}},6339:(e,t,n)=>{var r=n(8923);e.exports=function(){return r(this.__wrapped__,this.__actions__)}},4763:()=>{let e=document.getElementsByTagName("tbody");Array.from(e).forEach((e=>{Array.from(e.children).forEach((e=>{Array.from(e.children).forEach(((e,t)=>{0===t&&e.setAttribute("class","notranslate")}))}))}))},2979:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var r=n(994),o=n.n(r),i=n(3476),a=n.n(i)()(o());a.push([e.id,"li{\r\n list-style: none;\r\n}\r\n\r\n.header a{\r\n color:black;\r\n font-family: 'Ubuntu Mono';\r\n}\r\n\r\na{\r\n color:black;\r\n font-family: 'Ubuntu Mono';\r\n}\r\n.selectDom a{\r\n color: black;\r\n}\r\n.originalText{\r\n display: none;\r\n margin: 0;\r\n}\r\n.pl-token {\r\n background: #ffea7f;\r\n /*padding: 1px 0 ;*/\r\n\r\n}\r\n.pl-token > a{\r\n background: #ffea7f;\r\n color: #000;\r\n}\r\n\r\n.suspension {\r\n position: absolute;\r\n width: auto;\r\n height: auto;\r\n z-index:999999;\r\n left:0px;\r\n top:100%;\r\n padding: 10px;\r\n font-size: 14px;\r\n font-weight: 500;\r\n box-shadow: 2px 2px 2px #888888;\r\n border-radius: 5px;\r\n background: linear-gradient(0.25turn, #a9c3d7, #d2bba3);\r\n color: #000;\r\n font-family: 'Georgia';\r\n}\r\n.suspension p{\r\n background: linear-gradient(0.25turn, #a9c3d7, #d2bba3)!important;\r\n color: #000 !important;\r\n font-family: 'Georgia';\r\n}\r\n\r\n.suspension a{\r\n color: #000;\r\n font-size: 14px;\r\n font-weight: 500;\r\n font-family: 'Georgia';\r\n}\r\n.hoverele{\r\n position: relative;\r\n\r\n color: #000;\r\n}\r\n.hoverele a{\r\n color: #000!important;\r\n}\r\npre{\r\n font-weight: 500;\r\n word-wrap: break-word;\r\n}\r\np{\r\n color: black;\r\n font-family: 'Georgia' !important;\r\n word-wrap: break-word;\r\n}\r\n\r\n.show{\r\n visibility: visible;\r\n opacity: 1;\r\n transition: all 0.3s linear;\r\n}\r\n\r\n.hidden{\r\n visibility: hidden;\r\n opacity: 0;\r\n}\r\n\r\n#toc1 a{\r\n display: block;\r\n text-decoration:none;\r\n}\r\n\r\n.fm-code-listing-caption{\r\n background: transparent !important;\r\n}\r\n .pre1, .pre2, .pre{\r\n background: white !important;\r\n font-size: 14px;\r\n padding: 5px;\r\n}\r\n\r\n#sbo-rt-content{\r\n max-width: 100%!important;\r\n }\r\n","",{version:3,sources:["webpack://./src/css/common.css"],names:[],mappings:"AAAA;IACI,gBAAgB;AACpB;;AAEA;IACI,WAAW;IACX,0BAA0B;AAC9B;;AAEA;IACI,WAAW;IACX,0BAA0B;AAC9B;AACA;IACI,YAAY;AAChB;AACA;IACI,aAAa;IACb,SAAS;AACb;AACA;IACI,mBAAmB;IACnB,mBAAmB;;AAEvB;AACA;IACI,mBAAmB;IACnB,WAAW;AACf;;AAEA;IACI,kBAAkB;IAClB,WAAW;IACX,YAAY;IACZ,cAAc;IACd,QAAQ;IACR,QAAQ;IACR,aAAa;IACb,eAAe;IACf,gBAAgB;IAChB,+BAA+B;IAC/B,kBAAkB;IAClB,uDAAuD;IACvD,WAAW;IACX,sBAAsB;AAC1B;AACA;IACI,iEAAiE;IACjE,sBAAsB;IACtB,sBAAsB;AAC1B;;AAEA;IACI,WAAW;IACX,eAAe;IACf,gBAAgB;IAChB,sBAAsB;AAC1B;AACA;IACI,kBAAkB;;IAElB,WAAW;AACf;AACA;IACI,qBAAqB;AACzB;AACA;IACI,gBAAgB;IAChB,qBAAqB;AACzB;AACA;IACI,YAAY;IACZ,iCAAiC;IACjC,qBAAqB;AACzB;;AAEA;IACI,mBAAmB;IACnB,UAAU;IACV,2BAA2B;AAC/B;;AAEA;IACI,kBAAkB;IAClB,UAAU;AACd;;AAEA;IACI,cAAc;IACd,oBAAoB;AACxB;;AAEA;IACI,kCAAkC;AACtC;CACC;IACG,4BAA4B;IAC5B,eAAe;IACf,YAAY;AAChB;;AAEA;MACM,yBAAyB;EAC7B",sourcesContent:["li{\r\n list-style: none;\r\n}\r\n\r\n.header a{\r\n color:black;\r\n font-family: 'Ubuntu Mono';\r\n}\r\n\r\na{\r\n color:black;\r\n font-family: 'Ubuntu Mono';\r\n}\r\n.selectDom a{\r\n color: black;\r\n}\r\n.originalText{\r\n display: none;\r\n margin: 0;\r\n}\r\n.pl-token {\r\n background: #ffea7f;\r\n /*padding: 1px 0 ;*/\r\n\r\n}\r\n.pl-token > a{\r\n background: #ffea7f;\r\n color: #000;\r\n}\r\n\r\n.suspension {\r\n position: absolute;\r\n width: auto;\r\n height: auto;\r\n z-index:999999;\r\n left:0px;\r\n top:100%;\r\n padding: 10px;\r\n font-size: 14px;\r\n font-weight: 500;\r\n box-shadow: 2px 2px 2px #888888;\r\n border-radius: 5px;\r\n background: linear-gradient(0.25turn, #a9c3d7, #d2bba3);\r\n color: #000;\r\n font-family: 'Georgia';\r\n}\r\n.suspension p{\r\n background: linear-gradient(0.25turn, #a9c3d7, #d2bba3)!important;\r\n color: #000 !important;\r\n font-family: 'Georgia';\r\n}\r\n\r\n.suspension a{\r\n color: #000;\r\n font-size: 14px;\r\n font-weight: 500;\r\n font-family: 'Georgia';\r\n}\r\n.hoverele{\r\n position: relative;\r\n\r\n color: #000;\r\n}\r\n.hoverele a{\r\n color: #000!important;\r\n}\r\npre{\r\n font-weight: 500;\r\n word-wrap: break-word;\r\n}\r\np{\r\n color: black;\r\n font-family: 'Georgia' !important;\r\n word-wrap: break-word;\r\n}\r\n\r\n.show{\r\n visibility: visible;\r\n opacity: 1;\r\n transition: all 0.3s linear;\r\n}\r\n\r\n.hidden{\r\n visibility: hidden;\r\n opacity: 0;\r\n}\r\n\r\n#toc1 a{\r\n display: block;\r\n text-decoration:none;\r\n}\r\n\r\n.fm-code-listing-caption{\r\n background: transparent !important;\r\n}\r\n .pre1, .pre2, .pre{\r\n background: white !important;\r\n font-size: 14px;\r\n padding: 5px;\r\n}\r\n\r\n#sbo-rt-content{\r\n max-width: 100%!important;\r\n }\r\n"],sourceRoot:""}]);const s=a},8525:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var r=n(994),o=n.n(r),i=n(3476),a=n.n(i)()(o());a.push([e.id,".panel {\r\n height: auto;\r\n width: 100px;\r\n position: fixed;\r\n top: 20px;\r\n right: 20px;\r\n z-index: 999999;\r\n line-height: 50px;\r\n text-align: center;\r\n background: #EEEEEE;\r\n border: 1px solid #87D0F0;\r\n border-radius:12%;\r\n\r\n}\r\n.subPanel:not(.subPanel:last-child){\r\n border-bottom: 1px solid #87D0F0;\r\n}\r\n.subPanel {\r\n height: 30px;\r\n line-height: 30px;\r\n display: block;\r\n text-align: center;\r\n font-size:10px;\r\n}\r\n\r\n","",{version:3,sources:["webpack://./src/css/panel.css"],names:[],mappings:"AAAA;IACI,YAAY;IACZ,YAAY;IACZ,eAAe;IACf,SAAS;IACT,WAAW;IACX,eAAe;IACf,iBAAiB;IACjB,kBAAkB;IAClB,mBAAmB;IACnB,yBAAyB;IACzB,iBAAiB;;AAErB;AACA;IACI,gCAAgC;AACpC;AACA;IACI,YAAY;IACZ,iBAAiB;IACjB,cAAc;IACd,kBAAkB;IAClB,cAAc;AAClB",sourcesContent:[".panel {\r\n height: auto;\r\n width: 100px;\r\n position: fixed;\r\n top: 20px;\r\n right: 20px;\r\n z-index: 999999;\r\n line-height: 50px;\r\n text-align: center;\r\n background: #EEEEEE;\r\n border: 1px solid #87D0F0;\r\n border-radius:12%;\r\n\r\n}\r\n.subPanel:not(.subPanel:last-child){\r\n border-bottom: 1px solid #87D0F0;\r\n}\r\n.subPanel {\r\n height: 30px;\r\n line-height: 30px;\r\n display: block;\r\n text-align: center;\r\n font-size:10px;\r\n}\r\n\r\n"],sourceRoot:""}]);const s=a},6869:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var r=n(994),o=n.n(r),i=n(3476),a=n.n(i)()(o());a.push([e.id,"#toc1{\r\n left: 0;\r\n position: fixed;\r\n overflow-x: hidden;\r\n overflow-y: scroll;\r\n top: 0;\r\n color: #0366d6;\r\n width: 350px;\r\n background: #EEEEEE;\r\n white-space:nowrap;\r\n}\r\n\r\n#toc1::-webkit-scrollbar {\r\n width: 8px;\r\n height: 8px;\r\n}\r\n\r\n#toc1::-webkit-scrollbar-thumb {\r\n border-radius: 8px;\r\n -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2);\r\n box-shadow: inset 0 0 5px rgba(0,0,0,0.2);\r\n background-color: #96C2F1;\r\n background-image: linear-gradient(\r\n 45deg,\r\n rgba(255, 255, 255, 0.2) 25%,\r\n transparent 25%,\r\n transparent 50%,\r\n rgba(255, 255, 255, 0.2) 50%,\r\n rgba(255, 255, 255, 0.2) 75%,\r\n transparent 75%,\r\n transparent\r\n );\r\n}\r\n#toc1::-webkit-scrollbar-track {\r\n -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.1);\r\n box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.1);\r\n border-radius: 8px 8px 0 0;\r\n background: #EFF7FF;\r\n}\r\n","",{version:3,sources:["webpack://./src/css/toc.css"],names:[],mappings:"AAAA;IACI,OAAO;IACP,eAAe;IACf,kBAAkB;IAClB,kBAAkB;IAClB,MAAM;IACN,cAAc;IACd,YAAY;IACZ,mBAAmB;IACnB,kBAAkB;AACtB;;AAEA;IACI,UAAU;IACV,WAAW;AACf;;AAEA;IACI,kBAAkB;IAClB,iDAAiD;IACjD,yCAAyC;IACzC,yBAAyB;IACzB;;;;;;;;;KASC;AACL;AACA;IACI,oDAAoD;IACpD,4CAA4C;IAC5C,0BAA0B;IAC1B,mBAAmB;AACvB",sourcesContent:["#toc1{\r\n left: 0;\r\n position: fixed;\r\n overflow-x: hidden;\r\n overflow-y: scroll;\r\n top: 0;\r\n color: #0366d6;\r\n width: 350px;\r\n background: #EEEEEE;\r\n white-space:nowrap;\r\n}\r\n\r\n#toc1::-webkit-scrollbar {\r\n width: 8px;\r\n height: 8px;\r\n}\r\n\r\n#toc1::-webkit-scrollbar-thumb {\r\n border-radius: 8px;\r\n -webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2);\r\n box-shadow: inset 0 0 5px rgba(0,0,0,0.2);\r\n background-color: #96C2F1;\r\n background-image: linear-gradient(\r\n 45deg,\r\n rgba(255, 255, 255, 0.2) 25%,\r\n transparent 25%,\r\n transparent 50%,\r\n rgba(255, 255, 255, 0.2) 50%,\r\n rgba(255, 255, 255, 0.2) 75%,\r\n transparent 75%,\r\n transparent\r\n );\r\n}\r\n#toc1::-webkit-scrollbar-track {\r\n -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.1);\r\n box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.1);\r\n border-radius: 8px 8px 0 0;\r\n background: #EFF7FF;\r\n}\r\n"],sourceRoot:""}]);const s=a},3264:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var r=n(994),o=n.n(r),i=n(3476),a=n.n(i)()(o());a.push([e.id,"pre{\r\n font-size:16px;\r\n color:black;\r\n background:#fff;\r\n padding:10px;\r\n}\r\n.ProgramCode{\r\n background:#fff;\r\n padding:5px;\r\n\r\n}\r\ncode{\r\n font-size:16px;\r\n color:black;\r\n display:inline;\r\n margin:0;\r\n border:0px;\r\n padding:0;\r\n}\r\n.notranslate{\r\n\r\n}\r\npre.programlisting.con{\r\n background-color:#fafafa!important;\r\n}\r\n#sbo-rt-content table{\r\n white-space:nowrap!important;\r\n}\r\ntr td{\r\n max-height: 50px!important;\r\n}\r\n","",{version:3,sources:["webpack://./src/css/url.css"],names:[],mappings:"AAAA;IACI,cAAc;IACd,WAAW;IACX,eAAe;IACf,YAAY;AAChB;AACA;IACI,eAAe;IACf,WAAW;;AAEf;AACA;IACI,cAAc;IACd,WAAW;IACX,cAAc;IACd,QAAQ;IACR,UAAU;IACV,SAAS;AACb;AACA;;AAEA;AACA;IACI,kCAAkC;AACtC;AACA;IACI,4BAA4B;AAChC;AACA;IACI,0BAA0B;AAC9B",sourcesContent:["pre{\r\n font-size:16px;\r\n color:black;\r\n background:#fff;\r\n padding:10px;\r\n}\r\n.ProgramCode{\r\n background:#fff;\r\n padding:5px;\r\n\r\n}\r\ncode{\r\n font-size:16px;\r\n color:black;\r\n display:inline;\r\n margin:0;\r\n border:0px;\r\n padding:0;\r\n}\r\n.notranslate{\r\n\r\n}\r\npre.programlisting.con{\r\n background-color:#fafafa!important;\r\n}\r\n#sbo-rt-content table{\r\n white-space:nowrap!important;\r\n}\r\ntr td{\r\n max-height: 50px!important;\r\n}\r\n"],sourceRoot:""}]);const s=a},3476:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=e(t);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n})).join("")},t.i=function(e,n,r){"string"==typeof e&&(e=[[null,e,""]]);var o={};if(r)for(var i=0;i<this.length;i++){var a=this[i][0];null!=a&&(o[a]=!0)}for(var s=0;s<e.length;s++){var l=[].concat(e[s]);r&&o[l[0]]||(n&&(l[2]?l[2]="".concat(n," and ").concat(l[2]):l[2]=n),t.push(l))}},t}},994:e=>{"use strict";function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}e.exports=function(e){var n=function(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{r||null==s.return||s.return()}finally{if(o)throw i}}return n}}(e,n)||function(e,n){if(e){if("string"==typeof e)return t(e,n);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(e,n):void 0}}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(e,4),r=n[1],o=n[3];if("function"==typeof btoa){var i=btoa(unescape(encodeURIComponent(JSON.stringify(o)))),a="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(i),s="/*# ".concat(a," */"),l=o.sources.map((function(e){return"/*# sourceURL=".concat(o.sourceRoot||"").concat(e," */")}));return[r].concat(l).concat([s]).join("\n")}return[r].join("\n")}},1892:(e,t,n)=>{"use strict";var r,o=function(){var e={};return function(t){if(void 0===e[t]){var n=document.querySelector(t);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}e[t]=n}return e[t]}}(),i=[];function a(e){for(var t=-1,n=0;n<i.length;n++)if(i[n].identifier===e){t=n;break}return t}function s(e,t){for(var n={},r=[],o=0;o<e.length;o++){var s=e[o],l=t.base?s[0]+t.base:s[0],u=n[l]||0,c="".concat(l," ").concat(u);n[l]=u+1;var p=a(c),f={css:s[1],media:s[2],sourceMap:s[3]};-1!==p?(i[p].references++,i[p].updater(f)):i.push({identifier:c,updater:g(f,t),references:1}),r.push(c)}return r}function l(e){var t=document.createElement("style"),r=e.attributes||{};if(void 0===r.nonce){var i=n.nc;i&&(r.nonce=i)}if(Object.keys(r).forEach((function(e){t.setAttribute(e,r[e])})),"function"==typeof e.insert)e.insert(t);else{var a=o(e.insert||"head");if(!a)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");a.appendChild(t)}return t}var u,c=(u=[],function(e,t){return u[e]=t,u.filter(Boolean).join("\n")});function p(e,t,n,r){var o=n?"":r.media?"@media ".concat(r.media," {").concat(r.css,"}"):r.css;if(e.styleSheet)e.styleSheet.cssText=c(t,o);else{var i=document.createTextNode(o),a=e.childNodes;a[t]&&e.removeChild(a[t]),a.length?e.insertBefore(i,a[t]):e.appendChild(i)}}function f(e,t,n){var r=n.css,o=n.media,i=n.sourceMap;if(o?e.setAttribute("media",o):e.removeAttribute("media"),i&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),e.styleSheet)e.styleSheet.cssText=r;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(r))}}var d=null,h=0;function g(e,t){var n,r,o;if(t.singleton){var i=h++;n=d||(d=l(t)),r=p.bind(null,n,i,!1),o=p.bind(null,n,i,!0)}else n=l(t),r=f.bind(null,n,t),o=function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(n)};return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else o()}}e.exports=function(e,t){(t=t||{}).singleton||"boolean"==typeof t.singleton||(t.singleton=(void 0===r&&(r=Boolean(window&&document&&document.all&&!window.atob)),r));var n=s(e=e||[],t);return function(e){if(e=e||[],"[object Array]"===Object.prototype.toString.call(e)){for(var r=0;r<n.length;r++){var o=a(n[r]);i[o].references--}for(var l=s(e,t),u=0;u<n.length;u++){var c=a(n[u]);0===i[c].references&&(i[c].updater(),i.splice(c,1))}n=l}}}}},t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={id:r,loaded:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{"use strict";var e=n(1892),t=n.n(e),r=n(6869);function o(e,t){let n=e.tocRequired_properties.style,r=t.genStyle(n),o=document.getElementById("toc1");if(o){let e=o.getAttribute("style");e=t.ReplaceSameProperty(";",e,["width","height"]),o.setAttribute("style",`${e}${r};;`)}else{o=document.createElement("div"),o.setAttribute("id","toc1"),o.style.cssText=r;let n={head:e.allHeader,body:e.body,toc:o};t.generate_catalog(n),e.body.appendChild(o)}let i={ReplaceSameProperty:t.ReplaceSameProperty};return t.tocChange({toc:o},i),o}t()(r.Z,{insert:"head",singleton:!1}),r.Z.locals;var a=n(2979);function s(e,t){for(let n=0;n<e.length;n++)t(e[n])}t()(a.Z,{insert:"head",singleton:!1}),a.Z.locals;let l={};function u(e){l.TypesTranslationKey=localStorage.getItem("TypesTranslation");let t=document.getElementsByTagName("code"),n=document.getElementsByTagName("kbd"),r=document.getElementsByTagName("p");c(t,"code"),c(n,"kbd"),function(e){(function(e){s(e,(e=>{e.setAttribute("render","null"),e.setAttribute("key",1e9*Math.random())}))})(e),s(e,(e=>{p(e)})),s(e,(e=>{if("true"===e.getAttribute("render")){let t=e.getAttribute("class");e.setAttribute("class","hoverele "+t);let n=h(e);e.setAttribute("class",t+" notranslate originalText");let r=e.outerHTML+n;e.outerHTML=r,e.setAttribute("class",t)}}));let t=document.getElementsByClassName("hoverele"),n={currentPointer:null,prePointer:null,hashMap:{}};var r;r=e=>{e.stopPropagation();for(const e in n.hashMap){let t=n.hashMap[e],r=t.getAttribute("class").replaceAll(" show","").replaceAll(" hidden","");t.setAttribute("class",r?r+" hidden":"hidden")}},document.getElementsByTagName("html")[0].addEventListener("click",r),s(t,(e=>{if(function(e){let t=e.getElementsByTagName("img");t&&t.length>0&&s(t,(e=>{let t=e.getAttribute("src").replaceAll('\\"',"");e.setAttribute("src",t)}))}(e),"true"===e.getAttribute("render").trim()){let t=e.getAttribute("class");e.setAttribute("class",t?t+" hoverele":"hoverele"),e.addEventListener("mouseenter",(t=>{t.stopPropagation();let n=e.getAttribute("class");e.setAttribute("class",n?n+" pl-token":"pl-token"),e.setAttribute("enter","true")})),e.addEventListener("click",(t=>{if(t.stopPropagation(),"true"===e.getAttribute("enter")){let t=e.getAttribute("key").trim(),r=n.hashMap[t];if(n.currentPointer=t,null!==n.prePointer){let e=n.hashMap[n.prePointer];if(n.prePointer===n.currentPointer){let e=r.getAttribute("class");if(e.includes("hidden")){let t=e.replaceAll(" hidden","");t.includes("show")||r.setAttribute("class",t?t+" show":"show")}return}{let t=e.getAttribute("class").replaceAll(" show","");t.includes("hidden")||e.setAttribute("class",t?t+" hidden":"hidden"),n.prePointer=null}}if(r){let e=r.getAttribute("class").replaceAll(" hidden","");e.includes("show")||r.setAttribute("class",e?e+" show":"show"),n.prePointer=n.currentPointer}else r=document.createElement("div"),r.setAttribute("class","notranslate suspension show"),r.innerHTML=h(e.previousSibling).replaceAll("originalText",""),e.append(r),e.setAttribute("enter","false"),n.hashMap[n.currentPointer]=r,n.prePointer=n.currentPointer}else e.getAttribute("enter")})),e.addEventListener("mouseleave",(t=>{t.stopPropagation();let n=e.getAttribute("class");e.setAttribute("class",n?n.replaceAll(" pl-token",""):n.replaceAll("pl-token","")),e.removeAttribute("enter")}))}}))}(r),function(){let e=document.querySelectorAll("pre strong"),t=document.querySelectorAll("pre span");e.length&&e.length>0&&s(e,(e=>{g(e,"strong")})),t.length&&t.length>0&&s(e,(e=>{g(e,"strong")}))}()}function c(e,t){let n=e.length,r=0;if(n>0)for(let o=0;o<2;o++){let i="",a=e[o].outerHTML;if(i="kbd"===t?a.replace(/<kbd/,'<span class="notranslate"').replace(/<\/kbd>/,"</span>"):a.replace(/<code/,'<span class="notranslate"').replace(/<\/code>/,"</span>"),e[o].outerHTML=i,o--,r++,r===n)break}}let p=e=>{if("true"!==e.getAttribute("render")&&"false"!==e.getAttribute("render")&&"null"===e.getAttribute("render")){e.setAttribute("render","true");let t=[];f(e,t),t.forEach(((t,n)=>{0===n?"null"===e.getAttribute("render")&&t.setAttribute("render","true"):t.setAttribute("render","false"),e.setAttribute("render","false")})),d(e)}};function f(e,t){let n=e.parentNode,r=n.nodeName;if("BODY"===r)return"已经到达BODY";"P"!==r||(t.unshift(n),"true"!==e.getAttribute("render")&&"false"!==e.getAttribute("render"))?f(n,t):t.unshift(n)}function d(e){let t=e.children;for(let e=0;e<t.length;e++){let n=t[e];"P"===n.nodeName&&n.setAttribute("render","false"),d(n)}}function h(e){return JSON.stringify(e.outerHTML).replaceAll(/(\\\")/g,' " ').replaceAll("\\n","").replaceAll(/( a |A )/g," one ").replaceAll('>"',">").replaceAll('"<',"<").replaceAll('class=\\"','class="')}function g(e,t,n){let r="";if(r=e.outerHTML.replace(`<${t}>`,"").replace(`</${t}>`,""),e.outerHTML)try{e.outerHTML=r}catch(e){console.log("e:",e)}}function y(e){let{head:t,body:n,toc:r}=e,o=/[hH][1-4]/,i=document.createElement("div");function a(e){let t="";for(let n=0;n<e.length;n++)">"===e[n]?t+=">":"<"===e[n]?t+="<":t+=e[n];return t}let s={H1:0,H2:1,H3:2,H4:3,H5:4,H6:5},l={current:0,pre:0},u=[0,0,0,0,0,0],c=e=>{u.forEach(((t,n)=>{n>e&&(u[n]=0)}))};for(let e=0;e<t.length;e++){let n=t[e],r=n.nodeName;if(n.setAttribute("id",e),o.test(r)){let n=s[r];l.current=n,l.current<l.pre&&c(n),u[n]++,l.pre=n;let o=u.filter((e=>e)),p=t[e].innerText,f=p.match(/\d/g);p=a(p);let d="";o.splice(s[r]+1),f||(d=o.join(".")+" ");let h=document.createElement(r);h.setAttribute("class","header"),h.setAttribute("style","margin:5px 0 0 0;font-size:14px;font-size:90%;border-bottom:1px solid blue;padding-left:10px;margin:5px;"),h.innerHTML=`<a href="#${e}">`+d+p+"</a>",i.appendChild(h)}}r.innerHTML=i.innerHTML,i=null}let m=null,v=null;function b(e,t){null!==e&&null!==t&&(m=e,v=t)}function A(e,t,n){e&&void 0!==t[e]&&(t[n]!==t[e]?x(t[e],1):x(t[n],0))}function x(e,t){let n=e.getAttribute("style");n=v.ReplaceSameProperty(";",n,"background-color"),n=v.ReplaceSameProperty(";",n,"color"),t?(e.setAttribute("style",`${n}color:black`),e.setAttribute("class","header")):e.setAttribute("style",`${n};background-color:brown;`)}function w(e,t){let n=e.getAttribute("style");n=v.ReplaceSameProperty(";",n,"background-color"),n=v.ReplaceSameProperty(";",n,"color"),e.setAttribute("style",`${n}background-color:hsl(201, 100%, 86%);color:white;`),e.setAttribute("class","selectDom"),localStorage.setItem("prevHead",t)}var C=n(9755),T=n.n(C),E=n(8525);t()(E.Z,{insert:"head",singleton:!1}),E.Z.locals;let _=null,S={body:null,URL:null,html:null,panel:null,tocElement:null,subPanels:[]},k=function(){const e={panel_status:function(e){let t={panel_status:e,subPanels:S.subPanels},n={ReplaceSameProperty:_.ReplaceSameProperty};_.panelStatus(t,n)},Types_of_translation:function(e){let t={Types_of_translation:e},n={ReplaceSameProperty:_.ReplaceSameProperty};_.TypesTranslation(t,n)},percentage:function(e){let t={percentage:e};_.show(t)},Submenu_status:function(e){let t={Submenu_status:e,tocElement:S.tocElement,body:S.body,html:S.html,URL:S.URL},n={ReplaceSameProperty:_.ReplaceSameProperty,styleBody:_.styleBody};_.Submenu_status(t,n)},Main_menu_status:function(e){}};return{panelCall:function(t,n){return e[n]&&e[n](t)}}}(),j={percentage:null};function I(e){let{percentage:t}=e;j.percentage=t,t.setAttribute("contenteditable",!0),t.addEventListener("keydown",(function(e){if("Enter"===e.key){let e=t.innerText.split("-"),n=Number(e[0])*document.documentElement.getBoundingClientRect().height*1e4/1e6;document.documentElement.scrollTo(0,n),t.blur()}})),t.addEventListener("blur",(function(e){let n=t.innerText.split("-"),r=t.getAttribute("placeholder").split("-");if(n[0]!==r[0]){let e=Number(n[0])*document.documentElement.getBoundingClientRect().height*1e4/1e6;document.documentElement.scrollTo(0,e)}else t.innerText=t.getAttribute("placeholder")})),t.addEventListener("focus",(function(e){let n=t.innerText;t.setAttribute("placeholder",n)})),N()}function N(){if(null===j.percentage)return;let e=document.documentElement.clientHeight;e>window.innerHeight&&(e=document.body.clientHeight);let t=document.documentElement.getBoundingClientRect();location.href.includes("npm")&&(t=document.getElementsByTagName("main")[0].getBoundingClientRect());let n=Math.floor(Math.abs(t.top)/t.height*1e4)/100,r=Math.floor((Math.abs(t.top)+e)/t.height*1e4)/100;return j.percentage.innerText=n+"--"+r+"%",Math.abs(t.top)}let B=null,L=null;function D(e,t){L=t,B=e;let n=localStorage.getItem("Submenu_status");null===n&&(localStorage.setItem("Submenu_status",1),B.Submenu_status.innerText="菜单打开"),"1"===n?B.Submenu_status.innerText="菜单打开":(O("display:none;"),B.Submenu_status.innerText="菜单收拢"),B.Submenu_status.addEventListener("click",P)}function P(){console.log("...."),"1"===localStorage.getItem("Submenu_status")?(console.log("菜单受控的状态"),O("display:none;"),localStorage.setItem("Submenu_status",0),B.Submenu_status.innerText="菜单收拢",L.styleBody(B.body,B.html,B.URL,{padding:"0"})):(console.log("菜单打开"),O("display:block;"),localStorage.setItem("Submenu_status",1),B.Submenu_status.innerText="菜单打开",L.styleBody(B.body,B.html,B.URL,{padding:"0 5% 0 18%"}))}function O(e){let t=B.tocElement.getAttribute("style");t=L.ReplaceSameProperty(";",t,"display"),B.tocElement.setAttribute("style",`${t}${e};`)}let H={panelStatusType:null,panel_status:null,subPanels:null},M=null;function R(e,t){let{panel_status:n,subPanels:r}=e;M=t,H.panel_status=n,H.subPanels=r;let o=localStorage.getItem("panelStatus");null===o&&(localStorage.setItem("panelStatus",1),o="1",H.panel_status.innerText="已展开面板"),H.panelStatusType=o,"1"===H.panelStatusType?H.panel_status.innerText="已展开面板":($("display:none;"),H.panel_status.innerText="已合上面板",H.panel_status.setAttribute("draggable",!0),H.panel_status.addEventListener("dragend",W,!1),H.panel_status.addEventListener("drag",q,!1)),n.addEventListener("click",F)}function q(e){e.preventDefault(),"panel_status"===e.target.id&&(e.target.parentElement.style.left=e.clientX+"px",e.target.parentElement.style.top=e.clientY+"px")}function W(e){e.preventDefault(),"panel_status"===e.target.id&&(e.target.parentElement.style.left=e.clientX+"px",e.target.parentElement.style.top=e.clientY+"px")}function F(){H.panelStatusType=localStorage.getItem("panelStatus"),"1"===H.panelStatusType?($("display:none;"),H.panel_status.innerText="已合上面板",H.panel_status.setAttribute("draggable",!0),H.panel_status.addEventListener("dragend",W,!1),H.panel_status.addEventListener("drag",q,!1),localStorage.setItem("panelStatus",0)):($("display:block;"),H.panel_status.innerText="已展开面板",localStorage.setItem("panelStatus",1))}function $(e){for(let t=1;t<H.subPanels.length;t++){let n=H.subPanels[t].getAttribute("style");n=M.ReplaceSameProperty(";",n,"display"),H.subPanels[t].setAttribute("style",`${n}${e};;`)}}var z=n(2152),U=n.n(z);let Y=null,X=null;function V(e,t){Y=e,X=t,Y.Types_of_translation.innerText="复制全文",new(U())(Y.Types_of_translation,{container:document.getElementsByTagName("body")[0]})}n(6353);var G=n(3264);t()(G.Z,{insert:"head",singleton:!1}),G.Z.locals;class Z{constructor(e){this.id=new Date,this.subs=[]}defined(){Z.watch.add(this)}notify(){this.subs.forEach(((e,t)=>{if("function"==typeof e.update)try{e.update.apply(e)}catch(e){console.warr(e)}}))}}Z.watch=null;class Q{constructor(e,t){this.name=e,this.id=new Date,this.callBack=t}add(e){e.subs.push(this)}update(){(0,this.callBack)(this.name)}}var K,J=(K=new Z,function(e){if("historychange"===e)return function(e,t){var n=new Q(e,t);Z.watch=n,K.defined(),Z.watch=null};if("pushState"===e||"replaceState"===e){var t=history[e];return function(){t.apply(history,arguments),K.notify()}}});const ee=JSON.parse('{"man7":{"site":"https://man7.org/","wildcard":"*","Code":{"tag":["h2","pre"],"className":[],"id":[],"selector":["pre b","pre i"]},"function":{"generateClass":{"tag":[{"pre":"fontWeight"}]}},"Table":{"noHead":{}}},"linux":{"site":"https://linux.die.net/","wildcard":"*","Code":{"tag":["h2"],"className":[],"id":[],"selector":["dl dt","#content i"]},"function":{"generateClass":{"tag":[{"pre":"fontWeight"}]}},"Table":{"noHead":{}}},"pythonDocs":{"site":"https://docs.python.org/","wildcard":"*","Code":{"tag":["h2"],"className":[],"id":[],"selector":["dl dt","#content i"]},"function":{"generateClass":{"tag":[{"pre":"fontWeight"}]}},"Table":{"noHead":{}}},"npmjs":{"site":"https://www.npmjs.com/","wildcard":"*","Code":{"tag":["pre"],"className":[],"id":[],"selector":["dl dt","#content i"]},"Table":{"noHead":{}}},"docsSpring":{"site":"https://docs.spring.io","wildcard":"*","Code":{"tag":["pre","b"],"className":["hdlist1","colFirst","inheritance"],"id":[],"selector":["dt span","dd a"]},"Table":{"noHead":{}}},"Apress":{"site":"Apress","wildcard":"*","Pre":{"className":["ProgramCode"]},"Code":{"tag":["pre"],"className":["source-code","EmphasisFontCategoryNonProportional"],"id":[],"selector":["dt span","dd a","p strong"]},"Table":{"noHead":{}}},"Manning":{"site":"Manning","wildcard":"*","Code":{"tag":["pre"],"className":[],"id":[],"selector":["dt span","dd a"]},"Table":["mannTable"]},"Packt":{"site":"Packt","wildcard":"*","Code":{"tag":["pre","strong"],"className":["source-code","source-inline"],"id":[],"selector":[]},"Table":{"noHead":{}}},"github":{"site":"https://github.com/","wildcard":"*","Code":{"tag":["pre"],"className":["calibre6"],"id":[],"selector":["dt span","dd a"]},"Table":{"noHead":{}}},"npmdocs":{"site":"docs.npmjs","wildcard":"*","Code":{"tag":["pre"],"className":["kSYjyK"],"id":[],"selector":["dt span","dd a"]},"Table":{"noHead":{}}},"jetbrains":{"site":"https://www.jetbrains.com/","wildcard":"*","Code":{"tag":[],"className":["menupath","control ","keyword ","link"],"id":[],"selector":[]},"Table":{"noHead":{}}},"yargs":{"site":"http://yargs.js.org/","wildcard":"*","Code":{"tag":["h2"],"className":["menupath","control ","keyword ","link"],"id":["api-reference-item"],"selector":[]},"Table":{"noHead":{}}},"Reilly":{"site":"Reilly","wildcard":"*","Code":{"tag":["pre"],"className":["menupath","control ","keyword ","link"],"id":["api-reference-item"],"selector":[]},"Table":["mannTable"]},"test":{"site":"test.html","wildcard":"*","Code":{"tag":[],"className":[],"id":[],"selector":[]},"Table":{"noHead":{}}},"Pearson":{"site":"Pearson","wildcard":"*","Code":{"tag":["pre"],"className":["pre","pre1","pre2"],"id":[],"selector":[]},"Table":{"noHead":{}}},"mybatis":{"site":"https://mybatis.org","wildcard":"*","Code":{"tag":[],"className":[],"id":[],"selector":[]},"toc":true},"snapsvg":{"site":"http://snapsvg.io","wildcard":"*","Code":{"tag":[],"className":["dr-param","dr-type","dr-json-key"],"id":["dr-toc"],"selector":[]}},"mozilla":{"site":"https://developer.mozilla.org/","wildcard":"*","Code":{"tag":[],"className":[],"id":[],"selector":[]}},"redis":{"site":"https://redis.io/","wildcard":"*","Code":{"tag":[],"className":["command","example"],"id":[],"selector":[]}},"Weily":{"site":"Weily","wildcard":"*","Code":{"tag":[],"className":["command","example"],"id":[],"selector":[]}},"neat-reader":{"site":"neat-reader","wildcard":"*","Code":{"tag":["pre"],"className":["command","example"],"id":[],"selector":[]}}}');let te=null,ne=null,re={tag:e=>document.getElementsByTagName(e),selector:e=>document.querySelectorAll(e),id:e=>document.getElementById(e),className:e=>document.getElementsByClassName(e),Table:e=>ne.handleTable(e)},oe={tag:e=>document.getElementsByTagName(e),selector:e=>document.querySelectorAll(e),id:e=>document.getElementById(e),className:e=>document.getElementsByClassName(e),Table:e=>ne.handleTable(e)};window.addHistoryListener=J("historychange"),history.pushState=J("pushState"),history.replaceState=J("replaceState");let ie={};function ae(e){ie.TypesTranslationKey=localStorage.getItem("TypesTranslation");for(let t=0;t<e.length;t++)se(e[t])}function se(e){let t=document.createElement("li"),n="";for(let r=0;r<e.childNodes.length;r++)if("PRE"===e.childNodes[r].nodeName){if(n){let e=document.createElement("p");e.innerHTML=n,t.appendChild(e),n=""}t.appendChild(e.childNodes[r])}else if(e.childNodes[r].childNodes.length>1)for(let t=0;t<e.childNodes[r].childNodes.length;t++)n+=le(e.childNodes[r].childNodes[t],"");else n+=le(e.childNodes[r],"");let r=document.createElement("p");r.innerHTML=n,t.appendChild(r),t.innerHTML||console.log(i+"没有生成");let o=e.getAttribute("style");e.innerHTML="",e.innerHTML=t.innerHTML,e.setAttribute("style",`${o};list-style-type:none;`)}function le(e,t){return 3===e.nodeType?e.nodeValue&&(t="."!==e.nodeValue[0]||!e.previousSibling||"CODE"!==e.previousSibling.nodeName&&"KBD"!==e.previousSibling.nodeName?e.nodeValue:e.nodeValue.slice(1)):1===e.nodeType?e.innerHTML&&("CODE"===e.nodeName&&("1"===ie.TypesTranslationKey?(e.setAttribute("style","color:blue;margin:0"),function(e){e.nextSibling&&3===e.nextSibling.nodeType&&("."!==e.nextSibling.nodeValue[0]&&","!==e.nextSibling[0]||(e.innerText+="."))}(e)):e.setAttribute("style","color:green;margin:0")),t=e.outerHTML):alert("出现的特殊情况!"),t}location.href.includes("localhost");let ue={};function ce(e){if(ue.TypesTranslationKey=localStorage.getItem("TypesTranslation"),e)if(0!==e.length&&void 0!==e.length)for(let t=0;t<e.length;t++)pe(e[t]);else 1===e.nodeType&&e.innerHTML&&pe(e)}function pe(e){if(e){let t=e.getAttribute("class");e.setAttribute("class",`${t} notranslate`)}}var fe=n(4763);const de={mannTable:n.n(fe)()};function he(e=null){e&&de[e]()}let ge={};function ye(e){if(ge.TypesTranslationKey=localStorage.getItem("TypesTranslation"),e)if(0!==e.length&&void 0!==e.length)for(let t=0;t<e.length;t++)me(e[t]);else 1===e.nodeType&&e.innerHTML&&me(e)}function me(e){if(e){let t=e.innerHTML,n=null;n=document.createElement("pre");let r=e.getAttribute("class");ge.TypesTranslationKey,e.setAttribute("class",`${r||""} notranslate`),n.innerHTML=t,e.innerHTML="",e.appendChild(n)}}function ve(){let e=document.documentElement.clientHeight;return e>window.innerHeight&&(e=document.body.clientHeight),e}function be(e){let t="";for(const n in e)t+=`${n}:${e[n]};`;return t}function Ae(e="toc"){let t=window.innerWidth;return"toc"===e.toLowerCase()&&(t*=.17),t}function xe(e,t,n,r=null){if(n.includes("localhost")||n.includes("127.0.0.1")){let n=window.matchMedia("(max-width: 1200px)").matches,o="background:#F2EEE5;";e.style.cssText=`${o}color:black`,r?(console.log("style:",r),t.style.cssText=`padding:${r.padding};font-size:14px;border-bottom:3px;${o}letter-spacing:1px;color:black`):t.style.cssText=!0===n?`padding:0;font-size:14px;border-bottom:3px;${o}letter-spacing:1px;color:black`:`padding:0 5% 0 18%;font-size:14px;border-bottom:3px;${o}letter-spacing:1px;color:black`}}function we(e,t=null,n){if(null!==t){if("string"==typeof t){let r=t.split(e),o="";for(let e=0;e<r.length;e++){for(let e=0;e<n.length;e++);r[e].split(":")[0]===n||""!==r[e]&&(o+=r[e]+";")}return o}throw new Error("传递的属性不是String,可能传错了属性,请查看代码,否则请修改该函数!")}return""}let Ce=[];Object.entries(ee).forEach((e=>{let t=e[0];!0===e[1]?.toc&&Ce.push(t)}));let Te=location.href,Ee=Te.split("/"),_e=document.getElementsByTagName("body")[0],Se=document.getElementsByTagName("html")[0],ke=T()(":header"),je={panel_status:"面板状态",Types_of_translation:"翻译类型",percentage:"百分比",Submenu_status:"子菜单状态"},Ie={style:{height:ve()+"px",width:Ae()+"px"}},Ne=e=>Ce.some((t=>e.includes(t)));window.onload=function(){if(console.log("checkSite(URL):",Ne(Te)),Te.includes("localhost")||Te.includes("127.0.0.1")||Ne(Te)){xe(_e,Se,Te);let e=o({body:_e,tocRequired_properties:Ie,allHeader:ke},{genStyle:be,generate_catalog:y,tocChange:b,ReplaceSameProperty:we});!function(e,t,n){let{body:r,html:o,URL:i,tocElement:a}=e;_=n,S.body=r,S.html=o,S.URL=i,S.tocElement=a;let s=document.createElement("div");s.setAttribute("class","panel"),S.panel=s;for(const e in t){let t=document.createElement("div");t.setAttribute("class","notranslate subPanel cyxy-trs-target"),t.setAttribute("id",e),"percentage"!==e&&t.setAttribute("onselectstart","return false"),s.appendChild(t),S.subPanels.push(t),k.panelCall(t,e)}k.panelCall(S.subPanels[0],"panel_status"),r.appendChild(s)}({body:_e,html:Se,URL:Te,tocElement:e},je,{styleBody:xe,show:I,Submenu_status:D,panelStatus:R,ReplaceSameProperty:we,TypesTranslation:V})}var e;te={URL:Te,URLarr:Ee,allHeader:ke},ne={code:ce,addli:ae,Generate_backup:u,handleTable:he,createPre:ye},te.URL.includes("localhost")||te.URL.includes("127.0.0.1")?ne.code(te.allHeader):ne.code(te.allHeader,!0),e=te.URL,Object.entries(ee).forEach(((t,n)=>{let r=t[1];e.includes(r.site)&&((e.includes("locahost")||e.includes("127.0.0.1"))&&function(){const e=document.getElementsByTagName("p");ne.Generate_backup(e)}(),Object.entries(r.Pre||{}).forEach((e=>{let t=e[0];e[1].forEach((e=>{let n=oe[t](e);ne.createPre(n)}))})),Object.entries(r.Code||{}).forEach((e=>{let t=e[0];e[1].forEach((e=>{console.log("tag:",e);let n=re[t](e);console.log("selectedTag:",n),ne.code(n)}))})))})),(Te.includes("localhost")||Te.includes("127.0.0.1"))&&(window.onscroll=function(){N(),function(){let e=localStorage.getItem("prevHead"),t=[],n=[],r=[],o=[],i=document.getElementById("toc1");for(let e=0;e<i.children.length;e++){let r=i.children[e].children[0].getAttribute("href");if(r){let o=r.replace("#",""),a=document.getElementById(o);t.push(a.getBoundingClientRect().top),n.push(i.children[e])}}if(t.every((e=>e>0)))e&&void 0!==n[e]&&x(n[e],1),0!==n.length&&w(n[0],0);else{for(let e=0;e<t.length;e++)t[e]>0&&r.push(t[e]),t[e]<0&&o.push(Math.abs(t[e]));for(let i=0;i<t.length;i++){let a=Math.min(...r),s=Math.min(...o);a<s||(a=s),Math.abs(t[i])===a&&(A(e,n,i),0!==n.length&&w(n[i],i))}}}()},window.onresize=function(){Ie.style.height=ve()+"px",Ie.style.width=Ae()+"px",xe(_e,Se,Te),o({body:_e,tocRequired_properties:Ie},{genStyle:be,tocChange:b,ReplaceSameProperty:we})})},document.read=()=>{console.log("change:")}})()})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9jbGlwYm9hcmQvZGlzdC9jbGlwYm9hcmQuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvanF1ZXJ5L2Rpc3QvanF1ZXJ5LmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fRGF0YVZpZXcuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19IYXNoLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTGF6eVdyYXBwZXIuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19Mb2Rhc2hXcmFwcGVyLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19Qcm9taXNlLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0LmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FwcGx5LmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlMaWtlS2V5cy5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlQdXNoLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlSZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc2NpaVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc3NvY0luZGV4T2YuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQXQuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlQ3JlYXRlLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZsYXR0ZW4uanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0LmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldFRhZy5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hdGl2ZS5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc1R5cGVkQXJyYXkuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5cy5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VMb2Rhc2guanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2V0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVGltZXMuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5hcnkuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVmFsdWVzLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVdyYXBwZXJWYWx1ZS5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RQYXRoLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZmxhdFJlc3QuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFRhZy5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzVW5pY29kZS5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hEZWxldGUuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoR2V0LmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hTZXQuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0ZsYXR0ZW5hYmxlLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5LmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNLZXlhYmxlLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1Byb3RvdHlwZS5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2l0ZXJhdG9yVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlRGVsZXRlLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlU2V0LmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlRGVsZXRlLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlU2V0LmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21lbW9pemVDYXBwZWQuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVDcmVhdGUuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbm9kZVV0aWwuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb0FycmF5LmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zaG9ydE91dC5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb1BhdGguanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdW5pY29kZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL193cmFwcGVyQ2xvbmUuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NoYWluLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jb21taXQuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9lcS5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmxhdHRlbi5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZ2V0LmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0J1ZmZlci5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdExpa2UuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU3RyaW5nLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9tZW1vaXplLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9uZXh0LmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9wbGFudC5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvcmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvc2VxLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RhcC5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdGhydS5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9BcnJheS5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9JdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9KU09OLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1N0cmluZy5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdmFsdWVPZi5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdmFsdWVzLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC93cmFwcGVyQXQuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL3dyYXBwZXJDaGFpbi5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvd3JhcHBlckxvZGFzaC5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvd3JhcHBlclJldmVyc2UuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL3dyYXBwZXJWYWx1ZS5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL3NyYy9oYW5kbGVUYWJsZS9tYW5uVGFibGUuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9zcmMvY3NzL2NvbW1vbi5jc3MiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9zcmMvY3NzL3BhbmVsLmNzcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL3NyYy9jc3MvdG9jLmNzcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL3NyYy9jc3MvdXJsLmNzcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL1RvdWlzdF9SZWFkL3dlYnBhY2svcnVudGltZS9ub2RlIG1vZHVsZSBkZWNvcmF0b3IiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9zcmMvdG9jL3RvYy5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL3NyYy9jc3MvdG9jLmNzcz8wMGU0Iiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vc3JjL3V0aWwvRG9tRW50cmllcy5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL3NyYy9jc3MvY29tbW9uLmNzcz85YzBhIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vc3JjL21vZGlmeS9nZW5lcmF0ZUJpbGluZ3VhbC5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL3NyYy9tb2RpZnkvZ29vZ2xlRXZlbnRMaXN0ZW5lci5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL3NyYy90b2MvZ2VuX3RvYy5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL3NyYy90b2MvdG9jQ2hhbmdlLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vc3JjL2Nzcy9wYW5lbC5jc3M/ODM1ZiIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL3NyYy9wYW5lbC9wYW5lbC5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL3NyYy9wYW5lbC9wZXJjZW50YWdlLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vc3JjL3BhbmVsL1N1Ym1lbnVfc3RhdHVzLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vc3JjL3BhbmVsL3BhbmVsU3RhdHVzLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vc3JjL3BhbmVsL1R5cGVzVHJhbnNsYXRpb24uanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9zcmMvY3NzL3VybC5jc3M/YWMzNCIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL3NyYy9Nb25pdG9yUm91dGUvbW9uaXRvclJvdXRlLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vc3JjL0xvYWRJbml0L2xvYWRVcmwuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9zcmMvbW9kaWZ5L2ludGVncmF0aW9uX3ByZS5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL3NyYy92YXJpYWJsZS5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL3NyYy9tb2RpZnkvY2hhbmdlX2NvZGUuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9zcmMvaGFuZGxlVGFibGUvVGFibGVVdGlscy5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL3NyYy9tb2RpZnkvdGFibGUuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9zcmMvbW9kaWZ5L2NyZWF0ZV9wcmUuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9zcmMvdXRpbC9jbGllbnRIZWlnaHQuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9zcmMvc3R5bGUvZ2VuX3N0eWxlLmpzIiwid2VicGFjazovL1RvdWlzdF9SZWFkLy4vc3JjL3V0aWwvY2xpZW50V2lkdGguanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9zcmMvc3R5bGUvYm9keS5qcyIsIndlYnBhY2s6Ly9Ub3Vpc3RfUmVhZC8uL3NyYy9zdHlsZS9zdHlsZV9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vVG91aXN0X1JlYWQvLi9zcmMvaW5kZXguanMiXSwibmFtZXMiOlsiZmFjdG9yeSIsIl9fd2VicGFja19tb2R1bGVzX18iLCI2ODYiLCJfX3VudXNlZF93ZWJwYWNrX21vZHVsZSIsIl9fd2VicGFja19leHBvcnRzX18iLCJkIiwiY2xpcGJvYXJkIiwidGlueV9lbWl0dGVyIiwidGlueV9lbWl0dGVyX2RlZmF1bHQiLCJuIiwibGlzdGVuIiwibGlzdGVuX2RlZmF1bHQiLCJzcmNfc2VsZWN0Iiwic2VsZWN0X2RlZmF1bHQiLCJjb21tYW5kIiwidHlwZSIsImRvY3VtZW50IiwiZXhlY0NvbW1hbmQiLCJlcnIiLCJhY3Rpb25zX2N1dCIsInRhcmdldCIsInNlbGVjdGVkVGV4dCIsImNyZWF0ZUZha2VFbGVtZW50IiwidmFsdWUiLCJpc1JUTCIsImRvY3VtZW50RWxlbWVudCIsImdldEF0dHJpYnV0ZSIsImZha2VFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsInN0eWxlIiwiZm9udFNpemUiLCJib3JkZXIiLCJwYWRkaW5nIiwibWFyZ2luIiwicG9zaXRpb24iLCJ5UG9zaXRpb24iLCJ3aW5kb3ciLCJwYWdlWU9mZnNldCIsInNjcm9sbFRvcCIsInRvcCIsImNvbmNhdCIsInNldEF0dHJpYnV0ZSIsImFjdGlvbnNfY29weSIsIm9wdGlvbnMiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJjb250YWluZXIiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJyZW1vdmUiLCJfdHlwZW9mIiwib2JqIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSIsImNsaXBib2FyZF90eXBlb2YiLCJfZGVmaW5lUHJvcGVydGllcyIsInByb3BzIiwiaSIsImRlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImtleSIsIl9zZXRQcm90b3R5cGVPZiIsIm8iLCJwIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsInNlbGYiLCJjYWxsIiwiUmVmZXJlbmNlRXJyb3IiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiX2dldFByb3RvdHlwZU9mIiwiZ2V0UHJvdG90eXBlT2YiLCJnZXRBdHRyaWJ1dGVWYWx1ZSIsInN1ZmZpeCIsImVsZW1lbnQiLCJhdHRyaWJ1dGUiLCJoYXNBdHRyaWJ1dGUiLCJfRW1pdHRlciIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsIlR5cGVFcnJvciIsImNyZWF0ZSIsIl9pbmhlcml0cyIsIkNsaXBib2FyZCIsIkNvbnN0cnVjdG9yIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwiRGVyaXZlZCIsImhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJfc3VwZXIiLCJSZWZsZWN0IiwiY29uc3RydWN0Iiwic2hhbSIsIlByb3h5IiwiRGF0ZSIsInRvU3RyaW5nIiwiZSIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJyZXN1bHQiLCJTdXBlciIsIk5ld1RhcmdldCIsInRoaXMiLCJhcHBseSIsInRyaWdnZXIiLCJfdGhpcyIsImluc3RhbmNlIiwiX2NsYXNzQ2FsbENoZWNrIiwicmVzb2x2ZU9wdGlvbnMiLCJsaXN0ZW5DbGljayIsImFjdGlvbiIsImFjdGlvbnMiLCJzdXBwb3J0IiwicXVlcnlDb21tYW5kU3VwcG9ydGVkIiwiZm9yRWFjaCIsImRlZmF1bHRBY3Rpb24iLCJkZWZhdWx0VGFyZ2V0IiwidGV4dCIsImRlZmF1bHRUZXh0IiwiX3RoaXMyIiwibGlzdGVuZXIiLCJvbkNsaWNrIiwiZGVsZWdhdGVUYXJnZXQiLCJjdXJyZW50VGFyZ2V0IiwiX29wdGlvbnMkYWN0aW9uIiwiRXJyb3IiLCJub2RlVHlwZSIsImFjdGlvbnNfZGVmYXVsdCIsImVtaXQiLCJjbGVhclNlbGVjdGlvbiIsImZvY3VzIiwiYWN0aXZlRWxlbWVudCIsImJsdXIiLCJnZXRTZWxlY3Rpb24iLCJyZW1vdmVBbGxSYW5nZXMiLCJzZWxlY3RvciIsInF1ZXJ5U2VsZWN0b3IiLCJkZXN0cm95IiwiODI4IiwibW9kdWxlIiwiRWxlbWVudCIsIm1hdGNoZXMiLCJwcm90byIsIm1hdGNoZXNTZWxlY3RvciIsIm1vek1hdGNoZXNTZWxlY3RvciIsIm1zTWF0Y2hlc1NlbGVjdG9yIiwib01hdGNoZXNTZWxlY3RvciIsIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsImV4cG9ydHMiLCJwYXJlbnROb2RlIiwiNDM4IiwiX191bnVzZWRfd2VicGFja19leHBvcnRzIiwiY2xvc2VzdCIsIl9kZWxlZ2F0ZSIsImNhbGxiYWNrIiwidXNlQ2FwdHVyZSIsImxpc3RlbmVyRm4iLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImVsZW1lbnRzIiwiYmluZCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJBcnJheSIsIm1hcCIsIjg3OSIsIm5vZGUiLCJIVE1MRWxlbWVudCIsIm5vZGVMaXN0Iiwic3RyaW5nIiwiU3RyaW5nIiwiZm4iLCIzNzAiLCJpcyIsImRlbGVnYXRlIiwibGlzdGVuTm9kZSIsImxpc3Rlbk5vZGVMaXN0IiwibGlzdGVuU2VsZWN0b3IiLCI4MTciLCJub2RlTmFtZSIsImlzUmVhZE9ubHkiLCJzZWxlY3QiLCJzZXRTZWxlY3Rpb25SYW5nZSIsInJlbW92ZUF0dHJpYnV0ZSIsInNlbGVjdGlvbiIsInJhbmdlIiwiY3JlYXRlUmFuZ2UiLCJzZWxlY3ROb2RlQ29udGVudHMiLCJhZGRSYW5nZSIsIjI3OSIsIkUiLCJvbiIsIm5hbWUiLCJjdHgiLCJwdXNoIiwib25jZSIsIm9mZiIsIl8iLCJkYXRhIiwic2xpY2UiLCJldnRBcnIiLCJsZW4iLCJldnRzIiwibGl2ZUV2ZW50cyIsIlRpbnlFbWl0dGVyIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwibW9kdWxlSWQiLCJnZXR0ZXIiLCJfX2VzTW9kdWxlIiwiYSIsImRlZmluaXRpb24iLCJnZXQiLCJwcm9wIiwiaGFzT3duUHJvcGVydHkiLCJkZWZhdWx0IiwiZ2xvYmFsIiwidyIsIm5vR2xvYmFsIiwiYXJyIiwiZ2V0UHJvdG8iLCJmbGF0IiwiYXJyYXkiLCJpbmRleE9mIiwiY2xhc3MydHlwZSIsImhhc093biIsImZuVG9TdHJpbmciLCJPYmplY3RGdW5jdGlvblN0cmluZyIsImlzRnVuY3Rpb24iLCJpdGVtIiwiaXNXaW5kb3ciLCJwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzIiwic3JjIiwibm9uY2UiLCJub01vZHVsZSIsIkRPTUV2YWwiLCJjb2RlIiwiZG9jIiwidmFsIiwic2NyaXB0IiwiaGVhZCIsInJlbW92ZUNoaWxkIiwidG9UeXBlIiwidmVyc2lvbiIsImpRdWVyeSIsImNvbnRleHQiLCJpbml0IiwiaXNBcnJheUxpa2UiLCJqcXVlcnkiLCJ0b0FycmF5IiwibnVtIiwicHVzaFN0YWNrIiwiZWxlbXMiLCJyZXQiLCJtZXJnZSIsInByZXZPYmplY3QiLCJlYWNoIiwiZWxlbSIsImZpcnN0IiwiZXEiLCJsYXN0IiwiZXZlbiIsImdyZXAiLCJfZWxlbSIsIm9kZCIsImoiLCJlbmQiLCJzb3J0Iiwic3BsaWNlIiwiZXh0ZW5kIiwiY29weSIsImNvcHlJc0FycmF5IiwiY2xvbmUiLCJkZWVwIiwiaXNQbGFpbk9iamVjdCIsImlzQXJyYXkiLCJleHBhbmRvIiwiTWF0aCIsInJhbmRvbSIsInJlcGxhY2UiLCJpc1JlYWR5IiwiZXJyb3IiLCJtc2ciLCJub29wIiwiQ3RvciIsImlzRW1wdHlPYmplY3QiLCJnbG9iYWxFdmFsIiwibWFrZUFycmF5IiwicmVzdWx0cyIsImluQXJyYXkiLCJzZWNvbmQiLCJpbnZlcnQiLCJjYWxsYmFja0V4cGVjdCIsImFyZyIsImd1aWQiLCJzcGxpdCIsIl9pIiwidG9Mb3dlckNhc2UiLCJTaXp6bGUiLCJFeHByIiwiZ2V0VGV4dCIsImlzWE1MIiwidG9rZW5pemUiLCJjb21waWxlIiwib3V0ZXJtb3N0Q29udGV4dCIsInNvcnRJbnB1dCIsImhhc0R1cGxpY2F0ZSIsInNldERvY3VtZW50IiwiZG9jRWxlbSIsImRvY3VtZW50SXNIVE1MIiwicmJ1Z2d5UVNBIiwicmJ1Z2d5TWF0Y2hlcyIsImNvbnRhaW5zIiwicHJlZmVycmVkRG9jIiwiZGlycnVucyIsImRvbmUiLCJjbGFzc0NhY2hlIiwiY3JlYXRlQ2FjaGUiLCJ0b2tlbkNhY2hlIiwiY29tcGlsZXJDYWNoZSIsIm5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUiLCJzb3J0T3JkZXIiLCJiIiwicG9wIiwicHVzaE5hdGl2ZSIsImxpc3QiLCJib29sZWFucyIsIndoaXRlc3BhY2UiLCJpZGVudGlmaWVyIiwiYXR0cmlidXRlcyIsInBzZXVkb3MiLCJyd2hpdGVzcGFjZSIsIlJlZ0V4cCIsInJ0cmltIiwicmNvbW1hIiwicmNvbWJpbmF0b3JzIiwicmRlc2NlbmQiLCJycHNldWRvIiwicmlkZW50aWZpZXIiLCJtYXRjaEV4cHIiLCJyaHRtbCIsInJpbnB1dHMiLCJyaGVhZGVyIiwicm5hdGl2ZSIsInJxdWlja0V4cHIiLCJyc2libGluZyIsInJ1bmVzY2FwZSIsImZ1bmVzY2FwZSIsImVzY2FwZSIsIm5vbkhleCIsImhpZ2giLCJmcm9tQ2hhckNvZGUiLCJyY3NzZXNjYXBlIiwiZmNzc2VzY2FwZSIsImNoIiwiYXNDb2RlUG9pbnQiLCJjaGFyQ29kZUF0IiwidW5sb2FkSGFuZGxlciIsImluRGlzYWJsZWRGaWVsZHNldCIsImFkZENvbWJpbmF0b3IiLCJkaXNhYmxlZCIsImRpciIsIm5leHQiLCJjaGlsZE5vZGVzIiwiZWxzIiwic2VlZCIsIm0iLCJuaWQiLCJtYXRjaCIsImdyb3VwcyIsIm5ld1NlbGVjdG9yIiwibmV3Q29udGV4dCIsIm93bmVyRG9jdW1lbnQiLCJleGVjIiwiZ2V0RWxlbWVudEJ5SWQiLCJpZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsInFzYSIsInRlc3QiLCJ0ZXN0Q29udGV4dCIsInNjb3BlIiwidG9TZWxlY3RvciIsImpvaW4iLCJxc2FFcnJvciIsImtleXMiLCJjYWNoZSIsImNhY2hlTGVuZ3RoIiwic2hpZnQiLCJtYXJrRnVuY3Rpb24iLCJhc3NlcnQiLCJlbCIsImFkZEhhbmRsZSIsImF0dHJzIiwiaGFuZGxlciIsImF0dHJIYW5kbGUiLCJzaWJsaW5nQ2hlY2siLCJjdXIiLCJkaWZmIiwic291cmNlSW5kZXgiLCJuZXh0U2libGluZyIsImNyZWF0ZUlucHV0UHNldWRvIiwiY3JlYXRlQnV0dG9uUHNldWRvIiwiY3JlYXRlRGlzYWJsZWRQc2V1ZG8iLCJpc0Rpc2FibGVkIiwiY3JlYXRlUG9zaXRpb25hbFBzZXVkbyIsImFyZ3VtZW50IiwibWF0Y2hJbmRleGVzIiwibmFtZXNwYWNlIiwibmFtZXNwYWNlVVJJIiwiaGFzQ29tcGFyZSIsInN1YldpbmRvdyIsImRlZmF1bHRWaWV3IiwiYXR0YWNoRXZlbnQiLCJjbGFzc05hbWUiLCJjcmVhdGVDb21tZW50IiwiZ2V0QnlJZCIsImdldEVsZW1lbnRzQnlOYW1lIiwiZmlsdGVyIiwiYXR0cklkIiwiZmluZCIsImdldEF0dHJpYnV0ZU5vZGUiLCJ0YWciLCJ0bXAiLCJpbnB1dCIsImlubmVySFRNTCIsImRpc2Nvbm5lY3RlZE1hdGNoIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJhZG93biIsImJ1cCIsImNvbXBhcmUiLCJzb3J0RGV0YWNoZWQiLCJhdXAiLCJhcCIsImJwIiwidW5zaGlmdCIsImV4cHIiLCJhdHRyIiwic3BlY2lmaWVkIiwic2VsIiwidW5pcXVlU29ydCIsImR1cGxpY2F0ZXMiLCJkZXRlY3REdXBsaWNhdGVzIiwic29ydFN0YWJsZSIsInRleHRDb250ZW50IiwiZmlyc3RDaGlsZCIsIm5vZGVWYWx1ZSIsInNlbGVjdG9ycyIsImNyZWF0ZVBzZXVkbyIsInJlbGF0aXZlIiwicHJlRmlsdGVyIiwiZXhjZXNzIiwidW5xdW90ZWQiLCJub2RlTmFtZVNlbGVjdG9yIiwicGF0dGVybiIsIm9wZXJhdG9yIiwiY2hlY2siLCJ3aGF0IiwiX2FyZ3VtZW50Iiwic2ltcGxlIiwiZm9yd2FyZCIsIm9mVHlwZSIsIl9jb250ZXh0IiwieG1sIiwidW5pcXVlQ2FjaGUiLCJvdXRlckNhY2hlIiwibm9kZUluZGV4Iiwic3RhcnQiLCJwYXJlbnQiLCJ1c2VDYWNoZSIsImxhc3RDaGlsZCIsInVuaXF1ZUlEIiwicHNldWRvIiwiYXJncyIsInNldEZpbHRlcnMiLCJpZHgiLCJtYXRjaGVkIiwibWF0Y2hlciIsInVubWF0Y2hlZCIsImxhbmciLCJlbGVtTGFuZyIsImhhc2giLCJsb2NhdGlvbiIsImhhc0ZvY3VzIiwiaHJlZiIsInRhYkluZGV4IiwiY2hlY2tlZCIsInNlbGVjdGVkIiwic2VsZWN0ZWRJbmRleCIsIl9tYXRjaEluZGV4ZXMiLCJyYWRpbyIsImNoZWNrYm94IiwiZmlsZSIsInBhc3N3b3JkIiwiaW1hZ2UiLCJzdWJtaXQiLCJyZXNldCIsInRva2VucyIsImNvbWJpbmF0b3IiLCJiYXNlIiwic2tpcCIsImNoZWNrTm9uRWxlbWVudHMiLCJkb25lTmFtZSIsIm9sZENhY2hlIiwibmV3Q2FjaGUiLCJlbGVtZW50TWF0Y2hlciIsIm1hdGNoZXJzIiwiY29uZGVuc2UiLCJuZXdVbm1hdGNoZWQiLCJtYXBwZWQiLCJzZXRNYXRjaGVyIiwicG9zdEZpbHRlciIsInBvc3RGaW5kZXIiLCJwb3N0U2VsZWN0b3IiLCJ0ZW1wIiwicHJlTWFwIiwicG9zdE1hcCIsInByZWV4aXN0aW5nIiwiY29udGV4dHMiLCJtdWx0aXBsZUNvbnRleHRzIiwibWF0Y2hlckluIiwibWF0Y2hlck91dCIsIm1hdGNoZXJGcm9tVG9rZW5zIiwiY2hlY2tDb250ZXh0IiwibGVhZGluZ1JlbGF0aXZlIiwiaW1wbGljaXRSZWxhdGl2ZSIsIm1hdGNoQ29udGV4dCIsIm1hdGNoQW55Q29udGV4dCIsImZpbHRlcnMiLCJwYXJzZU9ubHkiLCJzb0ZhciIsInByZUZpbHRlcnMiLCJjYWNoZWQiLCJzZXRNYXRjaGVycyIsImVsZW1lbnRNYXRjaGVycyIsImJ5U2V0IiwiYnlFbGVtZW50Iiwic3VwZXJNYXRjaGVyIiwib3V0ZXJtb3N0IiwibWF0Y2hlZENvdW50Iiwic2V0TWF0Y2hlZCIsImNvbnRleHRCYWNrdXAiLCJkaXJydW5zVW5pcXVlIiwibWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzIiwidG9rZW4iLCJjb21waWxlZCIsIl9uYW1lIiwiZGVmYXVsdFZhbHVlIiwidW5pcXVlIiwiaXNYTUxEb2MiLCJlc2NhcGVTZWxlY3RvciIsInVudGlsIiwidHJ1bmNhdGUiLCJzaWJsaW5ncyIsInJuZWVkc0NvbnRleHQiLCJuZWVkc0NvbnRleHQiLCJyc2luZ2xlVGFnIiwid2lubm93IiwicXVhbGlmaWVyIiwibm90Iiwicm9vdGpRdWVyeSIsInJvb3QiLCJwYXJzZUhUTUwiLCJyZWFkeSIsInJwYXJlbnRzcHJldiIsImd1YXJhbnRlZWRVbmlxdWUiLCJjaGlsZHJlbiIsImNvbnRlbnRzIiwicHJldiIsInNpYmxpbmciLCJoYXMiLCJ0YXJnZXRzIiwibCIsImluZGV4IiwicHJldkFsbCIsImFkZCIsImFkZEJhY2siLCJwYXJlbnRzIiwicGFyZW50c1VudGlsIiwibmV4dEFsbCIsIm5leHRVbnRpbCIsInByZXZVbnRpbCIsImNvbnRlbnREb2N1bWVudCIsImNvbnRlbnQiLCJyZXZlcnNlIiwicm5vdGh0bWx3aGl0ZSIsIklkZW50aXR5IiwidiIsIlRocm93ZXIiLCJleCIsImFkb3B0VmFsdWUiLCJyZXNvbHZlIiwicmVqZWN0Iiwibm9WYWx1ZSIsIm1ldGhvZCIsInByb21pc2UiLCJmYWlsIiwidGhlbiIsIkNhbGxiYWNrcyIsIm9iamVjdCIsImZsYWciLCJjcmVhdGVPcHRpb25zIiwiZmlyaW5nIiwibWVtb3J5IiwiZmlyZWQiLCJsb2NrZWQiLCJxdWV1ZSIsImZpcmluZ0luZGV4IiwiZmlyZSIsInN0b3BPbkZhbHNlIiwiZW1wdHkiLCJkaXNhYmxlIiwibG9jayIsImZpcmVXaXRoIiwiRGVmZXJyZWQiLCJmdW5jIiwidHVwbGVzIiwic3RhdGUiLCJhbHdheXMiLCJkZWZlcnJlZCIsInBpcGUiLCJmbnMiLCJuZXdEZWZlciIsInR1cGxlIiwicmV0dXJuZWQiLCJwcm9ncmVzcyIsIm5vdGlmeSIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsIm9uUHJvZ3Jlc3MiLCJtYXhEZXB0aCIsImRlcHRoIiwic3BlY2lhbCIsInRoYXQiLCJtaWdodFRocm93Iiwibm90aWZ5V2l0aCIsInJlc29sdmVXaXRoIiwicHJvY2VzcyIsImV4Y2VwdGlvbkhvb2siLCJzdGFja1RyYWNlIiwicmVqZWN0V2l0aCIsImdldFN0YWNrSG9vayIsInNldFRpbWVvdXQiLCJzdGF0ZVN0cmluZyIsIndoZW4iLCJzaW5nbGVWYWx1ZSIsInJlbWFpbmluZyIsInJlc29sdmVDb250ZXh0cyIsInJlc29sdmVWYWx1ZXMiLCJwcmltYXJ5IiwidXBkYXRlRnVuYyIsInJlcnJvck5hbWVzIiwic3RhY2siLCJjb25zb2xlIiwid2FybiIsIm1lc3NhZ2UiLCJyZWFkeUV4Y2VwdGlvbiIsInJlYWR5TGlzdCIsImNvbXBsZXRlZCIsImNhdGNoIiwicmVhZHlXYWl0Iiwid2FpdCIsInJlYWR5U3RhdGUiLCJkb1Njcm9sbCIsImFjY2VzcyIsImNoYWluYWJsZSIsImVtcHR5R2V0IiwicmF3IiwiYnVsayIsIl9rZXkiLCJybXNQcmVmaXgiLCJyZGFzaEFscGhhIiwiZmNhbWVsQ2FzZSIsIl9hbGwiLCJsZXR0ZXIiLCJ0b1VwcGVyQ2FzZSIsImNhbWVsQ2FzZSIsImFjY2VwdERhdGEiLCJvd25lciIsIkRhdGEiLCJ1aWQiLCJzZXQiLCJoYXNEYXRhIiwiZGF0YVByaXYiLCJkYXRhVXNlciIsInJicmFjZSIsInJtdWx0aURhc2giLCJkYXRhQXR0ciIsIkpTT04iLCJwYXJzZSIsImdldERhdGEiLCJyZW1vdmVEYXRhIiwiX2RhdGEiLCJfcmVtb3ZlRGF0YSIsImRlcXVldWUiLCJzdGFydExlbmd0aCIsImhvb2tzIiwiX3F1ZXVlSG9va3MiLCJzdG9wIiwic2V0dGVyIiwiY2xlYXJRdWV1ZSIsImNvdW50IiwiZGVmZXIiLCJwbnVtIiwic291cmNlIiwicmNzc051bSIsImNzc0V4cGFuZCIsImlzQXR0YWNoZWQiLCJjb21wb3NlZCIsImdldFJvb3ROb2RlIiwiaXNIaWRkZW5XaXRoaW5UcmVlIiwiZGlzcGxheSIsImNzcyIsImFkanVzdENTUyIsInZhbHVlUGFydHMiLCJ0d2VlbiIsImFkanVzdGVkIiwic2NhbGUiLCJtYXhJdGVyYXRpb25zIiwiY3VycmVudFZhbHVlIiwiaW5pdGlhbCIsInVuaXQiLCJjc3NOdW1iZXIiLCJpbml0aWFsSW5Vbml0IiwiZGVmYXVsdERpc3BsYXlNYXAiLCJnZXREZWZhdWx0RGlzcGxheSIsInNob3dIaWRlIiwic2hvdyIsInZhbHVlcyIsImhpZGUiLCJ0b2dnbGUiLCJkaXYiLCJyY2hlY2thYmxlVHlwZSIsInJ0YWdOYW1lIiwicnNjcmlwdFR5cGUiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiY2hlY2tDbG9uZSIsImNsb25lTm9kZSIsIm5vQ2xvbmVDaGVja2VkIiwib3B0aW9uIiwid3JhcE1hcCIsInRoZWFkIiwiY29sIiwidHIiLCJ0ZCIsIl9kZWZhdWx0IiwiZ2V0QWxsIiwic2V0R2xvYmFsRXZhbCIsInJlZkVsZW1lbnRzIiwidGJvZHkiLCJ0Zm9vdCIsImNvbGdyb3VwIiwiY2FwdGlvbiIsInRoIiwib3B0Z3JvdXAiLCJidWlsZEZyYWdtZW50Iiwic2NyaXB0cyIsImlnbm9yZWQiLCJ3cmFwIiwiYXR0YWNoZWQiLCJmcmFnbWVudCIsIm5vZGVzIiwiaHRtbFByZWZpbHRlciIsImNyZWF0ZVRleHROb2RlIiwicnR5cGVuYW1lc3BhY2UiLCJyZXR1cm5UcnVlIiwicmV0dXJuRmFsc2UiLCJleHBlY3RTeW5jIiwic2FmZUFjdGl2ZUVsZW1lbnQiLCJ0eXBlcyIsIm9uZSIsIm9yaWdGbiIsImV2ZW50IiwibGV2ZXJhZ2VOYXRpdmUiLCJub3RBc3luYyIsInNhdmVkIiwiaXNUcmlnZ2VyIiwiZGVsZWdhdGVUeXBlIiwic3RvcFByb3BhZ2F0aW9uIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJFdmVudCIsImhhbmRsZU9iakluIiwiZXZlbnRIYW5kbGUiLCJldmVudHMiLCJ0IiwiaGFuZGxlT2JqIiwiaGFuZGxlcnMiLCJuYW1lc3BhY2VzIiwib3JpZ1R5cGUiLCJlbGVtRGF0YSIsImhhbmRsZSIsInRyaWdnZXJlZCIsImRpc3BhdGNoIiwiYmluZFR5cGUiLCJkZWxlZ2F0ZUNvdW50Iiwic2V0dXAiLCJtYXBwZWRUeXBlcyIsIm9yaWdDb3VudCIsInRlYXJkb3duIiwicmVtb3ZlRXZlbnQiLCJuYXRpdmVFdmVudCIsImhhbmRsZXJRdWV1ZSIsImZpeCIsInByZURpc3BhdGNoIiwiaXNQcm9wYWdhdGlvblN0b3BwZWQiLCJpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCIsInJuYW1lc3BhY2UiLCJwb3N0RGlzcGF0Y2giLCJtYXRjaGVkSGFuZGxlcnMiLCJtYXRjaGVkU2VsZWN0b3JzIiwiYnV0dG9uIiwiYWRkUHJvcCIsImhvb2siLCJvcmlnaW5hbEV2ZW50IiwibG9hZCIsIm5vQnViYmxlIiwiY2xpY2siLCJiZWZvcmV1bmxvYWQiLCJyZXR1cm5WYWx1ZSIsImlzRGVmYXVsdFByZXZlbnRlZCIsImRlZmF1bHRQcmV2ZW50ZWQiLCJyZWxhdGVkVGFyZ2V0IiwidGltZVN0YW1wIiwibm93IiwiaXNTaW11bGF0ZWQiLCJhbHRLZXkiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsImNoYW5nZWRUb3VjaGVzIiwiY3RybEtleSIsImRldGFpbCIsImV2ZW50UGhhc2UiLCJtZXRhS2V5IiwicGFnZVgiLCJwYWdlWSIsInNoaWZ0S2V5IiwidmlldyIsImNoYXJDb2RlIiwia2V5Q29kZSIsImJ1dHRvbnMiLCJjbGllbnRYIiwiY2xpZW50WSIsIm9mZnNldFgiLCJvZmZzZXRZIiwicG9pbnRlcklkIiwicG9pbnRlclR5cGUiLCJzY3JlZW5YIiwic2NyZWVuWSIsInRhcmdldFRvdWNoZXMiLCJ0b0VsZW1lbnQiLCJ0b3VjaGVzIiwid2hpY2giLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsInBvaW50ZXJlbnRlciIsInBvaW50ZXJsZWF2ZSIsIm9yaWciLCJyZWxhdGVkIiwicm5vSW5uZXJodG1sIiwicmNoZWNrZWQiLCJyY2xlYW5TY3JpcHQiLCJtYW5pcHVsYXRpb25UYXJnZXQiLCJkaXNhYmxlU2NyaXB0IiwicmVzdG9yZVNjcmlwdCIsImNsb25lQ29weUV2ZW50IiwiZGVzdCIsInVkYXRhT2xkIiwidWRhdGFDdXIiLCJmaXhJbnB1dCIsImRvbU1hbmlwIiwiY29sbGVjdGlvbiIsImhhc1NjcmlwdHMiLCJpTm9DbG9uZSIsInZhbHVlSXNGdW5jdGlvbiIsImh0bWwiLCJfZXZhbFVybCIsImtlZXBEYXRhIiwiY2xlYW5EYXRhIiwiZGF0YUFuZEV2ZW50cyIsImRlZXBEYXRhQW5kRXZlbnRzIiwic3JjRWxlbWVudHMiLCJkZXN0RWxlbWVudHMiLCJpblBhZ2UiLCJkZXRhY2giLCJhcHBlbmQiLCJwcmVwZW5kIiwiaW5zZXJ0QmVmb3JlIiwiYmVmb3JlIiwiYWZ0ZXIiLCJyZXBsYWNlV2l0aCIsInJlcGxhY2VDaGlsZCIsImFwcGVuZFRvIiwicHJlcGVuZFRvIiwiaW5zZXJ0QWZ0ZXIiLCJyZXBsYWNlQWxsIiwib3JpZ2luYWwiLCJpbnNlcnQiLCJybnVtbm9ucHgiLCJnZXRTdHlsZXMiLCJvcGVuZXIiLCJnZXRDb21wdXRlZFN0eWxlIiwic3dhcCIsIm9sZCIsInJib3hTdHlsZSIsImN1ckNTUyIsImNvbXB1dGVkIiwid2lkdGgiLCJtaW5XaWR0aCIsIm1heFdpZHRoIiwiZ2V0UHJvcGVydHlWYWx1ZSIsInBpeGVsQm94U3R5bGVzIiwiYWRkR2V0SG9va0lmIiwiY29uZGl0aW9uRm4iLCJob29rRm4iLCJjb21wdXRlU3R5bGVUZXN0cyIsImNzc1RleHQiLCJkaXZTdHlsZSIsInBpeGVsUG9zaXRpb25WYWwiLCJyZWxpYWJsZU1hcmdpbkxlZnRWYWwiLCJyb3VuZFBpeGVsTWVhc3VyZXMiLCJtYXJnaW5MZWZ0IiwicmlnaHQiLCJwaXhlbEJveFN0eWxlc1ZhbCIsImJveFNpemluZ1JlbGlhYmxlVmFsIiwic2Nyb2xsYm94U2l6ZVZhbCIsIm9mZnNldFdpZHRoIiwibWVhc3VyZSIsInJvdW5kIiwicGFyc2VGbG9hdCIsInJlbGlhYmxlVHJEaW1lbnNpb25zVmFsIiwiYmFja2dyb3VuZENsaXAiLCJjbGVhckNsb25lU3R5bGUiLCJib3hTaXppbmdSZWxpYWJsZSIsInBpeGVsUG9zaXRpb24iLCJyZWxpYWJsZU1hcmdpbkxlZnQiLCJzY3JvbGxib3hTaXplIiwicmVsaWFibGVUckRpbWVuc2lvbnMiLCJ0YWJsZSIsInRyQ2hpbGQiLCJ0clN0eWxlIiwiaGVpZ2h0IiwicGFyc2VJbnQiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwib2Zmc2V0SGVpZ2h0IiwiY3NzUHJlZml4ZXMiLCJlbXB0eVN0eWxlIiwidmVuZG9yUHJvcHMiLCJmaW5hbFByb3BOYW1lIiwiY3NzUHJvcHMiLCJjYXBOYW1lIiwidmVuZG9yUHJvcE5hbWUiLCJyZGlzcGxheXN3YXAiLCJyY3VzdG9tUHJvcCIsImNzc1Nob3ciLCJ2aXNpYmlsaXR5IiwiY3NzTm9ybWFsVHJhbnNmb3JtIiwibGV0dGVyU3BhY2luZyIsImZvbnRXZWlnaHQiLCJzZXRQb3NpdGl2ZU51bWJlciIsInN1YnRyYWN0IiwibWF4IiwiYm94TW9kZWxBZGp1c3RtZW50IiwiZGltZW5zaW9uIiwiYm94IiwiaXNCb3JkZXJCb3giLCJzdHlsZXMiLCJjb21wdXRlZFZhbCIsImV4dHJhIiwiZGVsdGEiLCJjZWlsIiwiZ2V0V2lkdGhPckhlaWdodCIsInZhbHVlSXNCb3JkZXJCb3giLCJvZmZzZXRQcm9wIiwiZ2V0Q2xpZW50UmVjdHMiLCJUd2VlbiIsImVhc2luZyIsImNzc0hvb2tzIiwib3BhY2l0eSIsIm9yaWdOYW1lIiwiaXNDdXN0b21Qcm9wIiwic2V0UHJvcGVydHkiLCJpc0Zpbml0ZSIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInNjcm9sbGJveFNpemVCdWdneSIsImxlZnQiLCJwcmVmaXgiLCJleHBhbmQiLCJleHBhbmRlZCIsInBhcnRzIiwicHJvcEhvb2tzIiwicnVuIiwicGVyY2VudCIsImVhc2VkIiwiZHVyYXRpb24iLCJwb3MiLCJzdGVwIiwiZngiLCJzY3JvbGxMZWZ0IiwibGluZWFyIiwic3dpbmciLCJjb3MiLCJQSSIsImZ4Tm93IiwiaW5Qcm9ncmVzcyIsInJmeHR5cGVzIiwicnJ1biIsInNjaGVkdWxlIiwiaGlkZGVuIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiaW50ZXJ2YWwiLCJ0aWNrIiwiY3JlYXRlRnhOb3ciLCJnZW5GeCIsImluY2x1ZGVXaWR0aCIsImNyZWF0ZVR3ZWVuIiwiYW5pbWF0aW9uIiwiQW5pbWF0aW9uIiwidHdlZW5lcnMiLCJwcm9wZXJ0aWVzIiwic3RvcHBlZCIsInByZWZpbHRlcnMiLCJjdXJyZW50VGltZSIsInN0YXJ0VGltZSIsInR3ZWVucyIsIm9wdHMiLCJzcGVjaWFsRWFzaW5nIiwib3JpZ2luYWxQcm9wZXJ0aWVzIiwib3JpZ2luYWxPcHRpb25zIiwiZ290b0VuZCIsInByb3BGaWx0ZXIiLCJjb21wbGV0ZSIsInRpbWVyIiwiYW5pbSIsInR3ZWVuZXIiLCJvbGRmaXJlIiwicHJvcFR3ZWVuIiwicmVzdG9yZURpc3BsYXkiLCJpc0JveCIsImRhdGFTaG93IiwidW5xdWV1ZWQiLCJvdmVyZmxvdyIsIm92ZXJmbG93WCIsIm92ZXJmbG93WSIsInByZWZpbHRlciIsInNwZWVkIiwib3B0Iiwic3BlZWRzIiwiZmFkZVRvIiwidG8iLCJhbmltYXRlIiwib3B0YWxsIiwiZG9BbmltYXRpb24iLCJmaW5pc2giLCJzdG9wUXVldWUiLCJ0aW1lcnMiLCJjc3NGbiIsInNsaWRlRG93biIsInNsaWRlVXAiLCJzbGlkZVRvZ2dsZSIsImZhZGVJbiIsImZhZGVPdXQiLCJmYWRlVG9nZ2xlIiwic2xvdyIsImZhc3QiLCJkZWxheSIsInRpbWUiLCJ0aW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiY2hlY2tPbiIsIm9wdFNlbGVjdGVkIiwicmFkaW9WYWx1ZSIsImJvb2xIb29rIiwicmVtb3ZlQXR0ciIsIm5UeXBlIiwiYXR0ckhvb2tzIiwiYm9vbCIsImF0dHJOYW1lcyIsImxvd2VyY2FzZU5hbWUiLCJyZm9jdXNhYmxlIiwicmNsaWNrYWJsZSIsInN0cmlwQW5kQ29sbGFwc2UiLCJnZXRDbGFzcyIsImNsYXNzZXNUb0FycmF5IiwicmVtb3ZlUHJvcCIsInByb3BGaXgiLCJ0YWJpbmRleCIsImFkZENsYXNzIiwiY2xhc3NlcyIsImN1clZhbHVlIiwiY2xhenoiLCJmaW5hbFZhbHVlIiwicmVtb3ZlQ2xhc3MiLCJ0b2dnbGVDbGFzcyIsInN0YXRlVmFsIiwiaXNWYWxpZFZhbHVlIiwiY2xhc3NOYW1lcyIsImhhc0NsYXNzIiwicnJldHVybiIsInZhbEhvb2tzIiwib3B0aW9uU2V0IiwiZm9jdXNpbiIsInJmb2N1c01vcnBoIiwic3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2siLCJvbmx5SGFuZGxlcnMiLCJidWJibGVUeXBlIiwib250eXBlIiwibGFzdEVsZW1lbnQiLCJldmVudFBhdGgiLCJwYXJlbnRXaW5kb3ciLCJzaW11bGF0ZSIsInRyaWdnZXJIYW5kbGVyIiwiYXR0YWNoZXMiLCJycXVlcnkiLCJwYXJzZVhNTCIsInBhcnNlckVycm9yRWxlbSIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyIsInJicmFja2V0IiwickNSTEYiLCJyc3VibWl0dGVyVHlwZXMiLCJyc3VibWl0dGFibGUiLCJidWlsZFBhcmFtcyIsInRyYWRpdGlvbmFsIiwicGFyYW0iLCJzIiwidmFsdWVPckZ1bmN0aW9uIiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwic2VyaWFsaXplIiwic2VyaWFsaXplQXJyYXkiLCJyMjAiLCJyaGFzaCIsInJhbnRpQ2FjaGUiLCJyaGVhZGVycyIsInJub0NvbnRlbnQiLCJycHJvdG9jb2wiLCJ0cmFuc3BvcnRzIiwiYWxsVHlwZXMiLCJvcmlnaW5BbmNob3IiLCJhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMiLCJzdHJ1Y3R1cmUiLCJkYXRhVHlwZUV4cHJlc3Npb24iLCJkYXRhVHlwZSIsImRhdGFUeXBlcyIsImluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzIiwianFYSFIiLCJpbnNwZWN0ZWQiLCJzZWVraW5nVHJhbnNwb3J0IiwiaW5zcGVjdCIsInByZWZpbHRlck9yRmFjdG9yeSIsImRhdGFUeXBlT3JUcmFuc3BvcnQiLCJhamF4RXh0ZW5kIiwiZmxhdE9wdGlvbnMiLCJhamF4U2V0dGluZ3MiLCJhY3RpdmUiLCJsYXN0TW9kaWZpZWQiLCJldGFnIiwidXJsIiwiaXNMb2NhbCIsInByb3RvY29sIiwicHJvY2Vzc0RhdGEiLCJhc3luYyIsImNvbnRlbnRUeXBlIiwiYWNjZXB0cyIsImpzb24iLCJyZXNwb25zZUZpZWxkcyIsImNvbnZlcnRlcnMiLCJhamF4U2V0dXAiLCJzZXR0aW5ncyIsImFqYXhQcmVmaWx0ZXIiLCJhamF4VHJhbnNwb3J0IiwiYWpheCIsInRyYW5zcG9ydCIsImNhY2hlVVJMIiwicmVzcG9uc2VIZWFkZXJzU3RyaW5nIiwicmVzcG9uc2VIZWFkZXJzIiwidGltZW91dFRpbWVyIiwidXJsQW5jaG9yIiwiZmlyZUdsb2JhbHMiLCJ1bmNhY2hlZCIsImNhbGxiYWNrQ29udGV4dCIsImdsb2JhbEV2ZW50Q29udGV4dCIsImNvbXBsZXRlRGVmZXJyZWQiLCJzdGF0dXNDb2RlIiwicmVxdWVzdEhlYWRlcnMiLCJyZXF1ZXN0SGVhZGVyc05hbWVzIiwic3RyQWJvcnQiLCJnZXRSZXNwb25zZUhlYWRlciIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInNldFJlcXVlc3RIZWFkZXIiLCJvdmVycmlkZU1pbWVUeXBlIiwibWltZVR5cGUiLCJzdGF0dXMiLCJhYm9ydCIsInN0YXR1c1RleHQiLCJmaW5hbFRleHQiLCJjcm9zc0RvbWFpbiIsImhvc3QiLCJoYXNDb250ZW50IiwiaWZNb2RpZmllZCIsImhlYWRlcnMiLCJiZWZvcmVTZW5kIiwic3VjY2VzcyIsInNlbmQiLCJuYXRpdmVTdGF0dXNUZXh0IiwicmVzcG9uc2VzIiwiaXNTdWNjZXNzIiwicmVzcG9uc2UiLCJtb2RpZmllZCIsImN0IiwiZmluYWxEYXRhVHlwZSIsImZpcnN0RGF0YVR5cGUiLCJhamF4SGFuZGxlUmVzcG9uc2VzIiwiY29udjIiLCJjdXJyZW50IiwiY29udiIsImRhdGFGaWx0ZXIiLCJ0aHJvd3MiLCJhamF4Q29udmVydCIsImdldEpTT04iLCJnZXRTY3JpcHQiLCJ3cmFwQWxsIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJ3cmFwSW5uZXIiLCJodG1sSXNGdW5jdGlvbiIsInVud3JhcCIsInZpc2libGUiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsInhoclN1Y2Nlc3NTdGF0dXMiLCIwIiwiMTIyMyIsInhoclN1cHBvcnRlZCIsImNvcnMiLCJlcnJvckNhbGxiYWNrIiwib3BlbiIsInVzZXJuYW1lIiwieGhyRmllbGRzIiwib25sb2FkIiwib25lcnJvciIsIm9uYWJvcnQiLCJvbnRpbWVvdXQiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZXNwb25zZVR5cGUiLCJyZXNwb25zZVRleHQiLCJiaW5hcnkiLCJzY3JpcHRBdHRycyIsImNoYXJzZXQiLCJzY3JpcHRDaGFyc2V0IiwiZXZ0Iiwib2xkQ2FsbGJhY2tzIiwicmpzb25wIiwianNvbnAiLCJqc29ucENhbGxiYWNrIiwib3JpZ2luYWxTZXR0aW5ncyIsImNhbGxiYWNrTmFtZSIsIm92ZXJ3cml0dGVuIiwicmVzcG9uc2VDb250YWluZXIiLCJqc29uUHJvcCIsImNyZWF0ZUhUTUxEb2N1bWVudCIsImltcGxlbWVudGF0aW9uIiwia2VlcFNjcmlwdHMiLCJwYXJzZWQiLCJwYXJhbXMiLCJhbmltYXRlZCIsIm9mZnNldCIsInNldE9mZnNldCIsImN1clBvc2l0aW9uIiwiY3VyTGVmdCIsImN1ckNTU1RvcCIsImN1clRvcCIsImN1ck9mZnNldCIsImN1ckNTU0xlZnQiLCJjdXJFbGVtIiwidXNpbmciLCJyZWN0Iiwid2luIiwicGFnZVhPZmZzZXQiLCJvZmZzZXRQYXJlbnQiLCJwYXJlbnRPZmZzZXQiLCJzY3JvbGxUbyIsIkhlaWdodCIsIldpZHRoIiwiZGVmYXVsdEV4dHJhIiwiZnVuY05hbWUiLCJ1bmJpbmQiLCJ1bmRlbGVnYXRlIiwiaG92ZXIiLCJmbk92ZXIiLCJmbk91dCIsInByb3h5IiwiaG9sZFJlYWR5IiwiaG9sZCIsInBhcnNlSlNPTiIsImlzTnVtZXJpYyIsImlzTmFOIiwidHJpbSIsIl9qUXVlcnkiLCJfJCIsIiQiLCJub0NvbmZsaWN0IiwiRGF0YVZpZXciLCJnZXROYXRpdmUiLCJoYXNoQ2xlYXIiLCJoYXNoRGVsZXRlIiwiaGFzaEdldCIsImhhc2hIYXMiLCJoYXNoU2V0IiwiSGFzaCIsImVudHJpZXMiLCJjbGVhciIsImVudHJ5IiwiYmFzZUNyZWF0ZSIsImJhc2VMb2Rhc2giLCJMYXp5V3JhcHBlciIsIl9fd3JhcHBlZF9fIiwiX19hY3Rpb25zX18iLCJfX2Rpcl9fIiwiX19maWx0ZXJlZF9fIiwiX19pdGVyYXRlZXNfXyIsIl9fdGFrZUNvdW50X18iLCJfX3ZpZXdzX18iLCJsaXN0Q2FjaGVDbGVhciIsImxpc3RDYWNoZURlbGV0ZSIsImxpc3RDYWNoZUdldCIsImxpc3RDYWNoZUhhcyIsImxpc3RDYWNoZVNldCIsIkxpc3RDYWNoZSIsIkxvZGFzaFdyYXBwZXIiLCJjaGFpbkFsbCIsIl9fY2hhaW5fXyIsIl9faW5kZXhfXyIsIl9fdmFsdWVzX18iLCJNYXAiLCJtYXBDYWNoZUNsZWFyIiwibWFwQ2FjaGVEZWxldGUiLCJtYXBDYWNoZUdldCIsIm1hcENhY2hlSGFzIiwibWFwQ2FjaGVTZXQiLCJNYXBDYWNoZSIsIlByb21pc2UiLCJTZXQiLCJXZWFrTWFwIiwidGhpc0FyZyIsImJhc2VUaW1lcyIsImlzQXJndW1lbnRzIiwiaXNCdWZmZXIiLCJpc0luZGV4IiwiaXNUeXBlZEFycmF5IiwiaW5oZXJpdGVkIiwiaXNBcnIiLCJpc0FyZyIsImlzQnVmZiIsImlzVHlwZSIsInNraXBJbmRleGVzIiwiaXRlcmF0ZWUiLCJhY2N1bXVsYXRvciIsImluaXRBY2N1bSIsInBhdGhzIiwiaXNPYmplY3QiLCJvYmplY3RDcmVhdGUiLCJhcnJheVB1c2giLCJpc0ZsYXR0ZW5hYmxlIiwiYmFzZUZsYXR0ZW4iLCJwcmVkaWNhdGUiLCJpc1N0cmljdCIsImNhc3RQYXRoIiwidG9LZXkiLCJwYXRoIiwiZ2V0UmF3VGFnIiwib2JqZWN0VG9TdHJpbmciLCJzeW1Ub1N0cmluZ1RhZyIsInRvU3RyaW5nVGFnIiwiYmFzZUdldFRhZyIsImlzT2JqZWN0TGlrZSIsImlzTWFza2VkIiwidG9Tb3VyY2UiLCJyZUlzSG9zdEN0b3IiLCJmdW5jUHJvdG8iLCJGdW5jdGlvbiIsIm9iamVjdFByb3RvIiwiZnVuY1RvU3RyaW5nIiwicmVJc05hdGl2ZSIsImlzTGVuZ3RoIiwidHlwZWRBcnJheVRhZ3MiLCJpc1Byb3RvdHlwZSIsIm5hdGl2ZUtleXMiLCJjb25zdGFudCIsImlkZW50aXR5IiwiYmFzZVNldFRvU3RyaW5nIiwiYXJyYXlNYXAiLCJpc1N5bWJvbCIsInN5bWJvbFByb3RvIiwic3ltYm9sVG9TdHJpbmciLCJiYXNlVG9TdHJpbmciLCJhcnJheVJlZHVjZSIsImlzS2V5Iiwic3RyaW5nVG9QYXRoIiwiY29yZUpzRGF0YSIsImZsYXR0ZW4iLCJvdmVyUmVzdCIsInNldFRvU3RyaW5nIiwiZnJlZUdsb2JhbCIsImciLCJpc0tleWFibGUiLCJfX2RhdGFfXyIsImJhc2VJc05hdGl2ZSIsImdldFZhbHVlIiwibmF0aXZlT2JqZWN0VG9TdHJpbmciLCJpc093biIsInVubWFza2VkIiwibWFwVGFnIiwicHJvbWlzZVRhZyIsInNldFRhZyIsIndlYWtNYXBUYWciLCJkYXRhVmlld1RhZyIsImRhdGFWaWV3Q3RvclN0cmluZyIsIm1hcEN0b3JTdHJpbmciLCJwcm9taXNlQ3RvclN0cmluZyIsInNldEN0b3JTdHJpbmciLCJ3ZWFrTWFwQ3RvclN0cmluZyIsImdldFRhZyIsIkFycmF5QnVmZmVyIiwiY3RvclN0cmluZyIsInJlSGFzVW5pY29kZSIsIm5hdGl2ZUNyZWF0ZSIsInNpemUiLCJzcHJlYWRhYmxlU3ltYm9sIiwiaXNDb25jYXRTcHJlYWRhYmxlIiwicmVJc1VpbnQiLCJyZUlzRGVlcFByb3AiLCJyZUlzUGxhaW5Qcm9wIiwibWFza1NyY0tleSIsIklFX1BST1RPIiwiYXNzb2NJbmRleE9mIiwiZ2V0TWFwRGF0YSIsIm1lbW9pemUiLCJvdmVyQXJnIiwiZnJlZUV4cG9ydHMiLCJmcmVlTW9kdWxlIiwiZnJlZVByb2Nlc3MiLCJub2RlVXRpbCIsInJlcXVpcmUiLCJiaW5kaW5nIiwidHJhbnNmb3JtIiwibmF0aXZlTWF4Iiwib3RoZXJBcmdzIiwiZnJlZVNlbGYiLCJzaG9ydE91dCIsIm5hdGl2ZU5vdyIsImxhc3RDYWxsZWQiLCJzdGFtcCIsImFzY2lpVG9BcnJheSIsImhhc1VuaWNvZGUiLCJ1bmljb2RlVG9BcnJheSIsIm1lbW9pemVDYXBwZWQiLCJyZVByb3BOYW1lIiwicmVFc2NhcGVDaGFyIiwibnVtYmVyIiwicXVvdGUiLCJzdWJTdHJpbmciLCJyc0NvbWJvIiwicnNGaXR6IiwicnNOb25Bc3RyYWwiLCJyc1JlZ2lvbmFsIiwicnNTdXJyUGFpciIsInJlT3B0TW9kIiwicnNNb2RpZmllciIsInJzT3B0VmFyIiwicnNTZXEiLCJyc1N5bWJvbCIsInJlVW5pY29kZSIsImNvcHlBcnJheSIsIndyYXBwZXIiLCJsb2Rhc2giLCJvdGhlciIsImJhc2VHZXQiLCJiYXNlSXNBcmd1bWVudHMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInN0dWJGYWxzZSIsIkJ1ZmZlciIsImJhc2VJc1R5cGVkQXJyYXkiLCJiYXNlVW5hcnkiLCJub2RlSXNUeXBlZEFycmF5IiwiYXJyYXlMaWtlS2V5cyIsImJhc2VLZXlzIiwicmVzb2x2ZXIiLCJtZW1vaXplZCIsIkNhY2hlIiwid3JhcHBlckNsb25lIiwicHJldmlvdXMiLCJuYXRpdmVSZXZlcnNlIiwiaW50ZXJjZXB0b3IiLCJpc1N0cmluZyIsIml0ZXJhdG9yVG9BcnJheSIsIm1hcFRvQXJyYXkiLCJzZXRUb0FycmF5Iiwic3RyaW5nVG9BcnJheSIsInN5bUl0ZXJhdG9yIiwiYmFzZVZhbHVlcyIsImJhc2VBdCIsImZsYXRSZXN0IiwidGhydSIsIndyYXBwZXJBdCIsImNoYWluIiwid3JhcHBlZCIsImJhc2VXcmFwcGVyVmFsdWUiLCJ0Ym9keXMiLCJmcm9tIiwiX19fQ1NTX0xPQURFUl9FWFBPUlRfX18iLCJjc3NXaXRoTWFwcGluZ1RvU3RyaW5nIiwibW9kdWxlcyIsIm1lZGlhUXVlcnkiLCJkZWR1cGUiLCJhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJhcnIyIiwiX2l0ZW0iLCJfYXJyYXlXaXRoSG9sZXMiLCJfYXJyIiwiX24iLCJfZCIsIl9lIiwiX3MiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJtaW5MZW4iLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiX3NsaWNlZFRvQXJyYXkiLCJjc3NNYXBwaW5nIiwiYnRvYSIsImJhc2U2NCIsInVuZXNjYXBlIiwic3RyaW5naWZ5Iiwic291cmNlTWFwcGluZyIsInNvdXJjZVVSTHMiLCJzb3VyY2VzIiwic291cmNlUm9vdCIsIm1lbW8iLCJnZXRUYXJnZXQiLCJzdHlsZVRhcmdldCIsIkhUTUxJRnJhbWVFbGVtZW50Iiwic3R5bGVzSW5Eb20iLCJnZXRJbmRleEJ5SWRlbnRpZmllciIsIm1vZHVsZXNUb0RvbSIsImlkQ291bnRNYXAiLCJpZGVudGlmaWVycyIsIm1lZGlhIiwic291cmNlTWFwIiwicmVmZXJlbmNlcyIsInVwZGF0ZXIiLCJhZGRTdHlsZSIsImluc2VydFN0eWxlRWxlbWVudCIsInRleHRTdG9yZSIsInJlcGxhY2VUZXh0IiwicmVwbGFjZW1lbnQiLCJCb29sZWFuIiwiYXBwbHlUb1NpbmdsZXRvblRhZyIsInN0eWxlU2hlZXQiLCJjc3NOb2RlIiwiYXBwbHlUb1RhZyIsInNpbmdsZXRvbiIsInNpbmdsZXRvbkNvdW50ZXIiLCJ1cGRhdGUiLCJzdHlsZUluZGV4IiwicmVtb3ZlU3R5bGVFbGVtZW50IiwibmV3T2JqIiwiYWxsIiwiYXRvYiIsImxhc3RJZGVudGlmaWVycyIsIm5ld0xpc3QiLCJuZXdMYXN0SWRlbnRpZmllcnMiLCJfaW5kZXgiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibG9hZGVkIiwiZ2xvYmFsVGhpcyIsIm5tZCIsInRvY0FjY2VwdGVkIiwidXRpbEZ1bmN0aW9uIiwidG9jU3R5bGUiLCJ0b2NSZXF1aXJlZF9wcm9wZXJ0aWVzIiwiZ2VuVG9jU3R5bGUiLCJnZW5TdHlsZSIsInRvYyIsIlJlcGxhY2VTYW1lUHJvcGVydHkiLCJtYXRjaGluZ19jb21wb25lbnQiLCJhbGxIZWFkZXIiLCJnZW5lcmF0ZV9jYXRhbG9nIiwiY29tcG9uZW50X2Z1bmN0aW9uIiwidG9jQ2hhbmdlIiwiZm9yRWFjaERvbSIsImFsbFBhcmFtIiwiRG9tRnVuY3Rpb24iLCJjb21wb25lbnRfZGF0YSIsIkdlbmVyYXRlX2JhY2t1cCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJjb2RlTGlzdHMiLCJrYmRMaXN0cyIsImdlbmVyYXRlQ29kZSIsInRyZWVJbml0IiwiVmlldyIsIk9yaWdpbmFsQXR0cmlidXRlIiwibmV3RG9tIiwiaGFuZGxlRE9NIiwib3V0ZXJIVE1MIiwiaG92ZXJlbGUiLCJET01SZW5kZXIiLCJjdXJyZW50UG9pbnRlciIsInByZVBvaW50ZXIiLCJoYXNoTWFwIiwiaGFzaE1hcEtleSIsImltZyIsImNvcnJlY3RTcmMiLCJoYW5kbGVJTUciLCJBdHRyaWJ1dGUiLCJzdXNwZW5zaW9uIiwicHJlRWxlbWVudCIsImluY2x1ZGVzIiwicHJldmlvdXNTaWJsaW5nIiwiR2VuZXJhdGVCaWxpbmd1YWwiLCJzdHJvbmciLCJzcGFuIiwiUmVwbGFjZUVsZW1lbnQiLCJoYW5kbGVQcmVTdHJvbmciLCJjb2RlTGlzdCIsImNvZGVDb250ZW50IiwiY3VycmVudENvbnRlbnQiLCJwYXJlbnRRdWV1ZSIsImNoZWNrUGFyZW50Iiwic29uIiwiY2hlY2tDaGlsZCIsInNvbkVsZW1lbnQiLCJyZXBsYWNlRG9tIiwidGFnTmFtZSIsImdlbmVyYXRlRG9tIiwibG9nIiwicmVnRXhwIiwiY2F0YWxvZyIsImlubmVyVGV4dEZ1biIsImlubmVyVGV4dCIsImlubmVyVGV4dG9uZSIsImhOdW1iZXIiLCJIMSIsIkgyIiwiSDMiLCJINCIsIkg1IiwiSDYiLCJsYXN0S2V5IiwicHJlIiwiSW5kZXhBcnIiLCJjbGVhckRhdGEiLCJrZXlJbmRleCIsIkFyckluZGV4IiwiSW5kZXhOdW1iZXJBcnJheSIsInRpdGxlIiwiQUhUTUwiLCJpc19leGlzdF9Gcm9udCIsInByZXZIZWFkIiwiaGVhZF9hcnJheSIsIklzX2V4aXN0IiwiaGVhZF9hcnJheV9wcmUiLCJpc19leGlzdCIsImF0dHJpYnV0ZTEiLCJjYXRhbG9nX2NvZGVfc3R5bGUiLCJoZWFkX2FycmF5X2kiLCJzZXRJdGVtIiwiY29tcG9uZW50X21ldGhvZHMiLCJVUkwiLCJwYW5lbCIsInRvY0VsZW1lbnQiLCJzdWJQYW5lbHMiLCJwYW5lbEhhbmRsZUV2ZW50IiwicGFuZWxfdHlwZSIsInBhbmVsX3N0YXR1cyIsImNvbXBvbmVudF9lbGVtZW50IiwicGFuZWxTdGF0dXMiLCJUeXBlc19vZl90cmFuc2xhdGlvbiIsIlR5cGVzVHJhbnNsYXRpb24iLCJwZXJjZW50YWdlIiwiU3VibWVudV9zdGF0dXMiLCJzdHlsZUJvZHkiLCJNYWluX21lbnVfc3RhdHVzIiwicGFuZWxDYWxsIiwic3ViUGFuZWwiLCJwYW5lbFByb2plY3RLZXkiLCJ5IiwiTnVtYmVyIiwibGFzdG51bSIsInNob3dfY29kZSIsImluaXRfaGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiaW5uZXJIZWlnaHQiLCJwZXJjZW50X2JlZ2luIiwiZmxvb3IiLCJhYnMiLCJwZXJjZW50X2VuZCIsIlN1Ym1lbnVfc3RhdHVzS2V5Iiwic2hvd1RvYyIsImhhbmRsZVN1Ym1lbnVfc3RhdHVzIiwibmVlZFNldFN0eWxlIiwicGFuZWxTdGF0dXNUeXBlIiwiZWFjaE1hcCIsImhhbmRsZURyYWdFbmQiLCJoYW5kbGVEcm9wIiwiaGFuZGxlUGFuZWxTdGF0dXMiLCJwYXJlbnRFbGVtZW50IiwiRGVwIiwic3VicyIsIndhdGNoIiwid2FyciIsIldhdGNoIiwiY2FsbEJhY2siLCJkZXAiLCJjYiIsImhpc3RvcnlEZXAiLCJhZGRIaXN0b3J5TWV0aG9kIiwiZGVmaW5lZCIsImhpc3RvcnkiLCJjb2RlVHlwZSIsIlRhYmxlIiwiaXRlbU5hbWUiLCJoYW5kbGVUYWJsZSIsInByZVR5cGUiLCJhZGRIaXN0b3J5TGlzdGVuZXIiLCJwdXNoU3RhdGUiLCJyZXBsYWNlU3RhdGUiLCJsaSIsInNpbmdsZWxpIiwibGl0d28iLCJwYXJhZ3JhbSIsImsiLCJhZGRfbGlzdCIsInBhcmFncmFtMSIsInRoaXNfbGkiLCJoYW5kbGVHb29nbGVGbHVlbnQiLCJhbGVydCIsImZvbnQiLCJoYXNDbGFzc0F0dHJpYnV0ZSIsIm1hbm5UYWJsZSIsInV0aWxOYW1lIiwiVGFibGVVdGlscyIsImNyZWF0ZVByZSIsImNyZWF0ZVByZV90ZW1wbGF0ZSIsInByZWxlbWVudCIsIlR5cGVzVHJhbnNsYXRpb25LZXkiLCJzdHlsZVN0cmluZyIsInN0eWxlS2V5IiwiY2xpZW50V2lkdGgiLCJwYXJ0IiwiaW5uZXJXaWR0aCIsIm1xbCIsIm1hdGNoTWVkaWEiLCJiYWNrZ3JvdW5kIiwiRmlsdGVyIiwiTmVlZF9GaWx0ZXIiLCJuZXdfYXR0cmlidXRlcyIsInRvY0FyciIsIkl0ZW0iLCJVUkxhcnIiLCJwYW5lbFByb2plY3QiLCJjaGVja1NpdGUiLCJzb21lIiwiTG9jYXRpb25faHJlZiIsInNpdGVWYWx1ZSIsInNpdGUiLCJoYW5kbGVDb21tb24iLCJQcmUiLCJqc29uSXRlbSIsInNlbGVjdGVkVGFnIiwiQ29kZSIsIm9uc2Nyb2xsIiwiaWRfYXJyYXkiLCJsYXRlbHlfYXJyYXkiLCJsYXRlbHlfYXJyYXlfbmVnYXRpdmUiLCJlbGVtZW50QnlJZCIsImV2ZXJ5IiwibWluIiwibmVnYXRpdmVfbWluIiwibWluX2hlYWQiLCJvbnJlc2l6ZSIsInJlYWQiXSwibWFwcGluZ3MiOiI7OEJBTUEsSUFBaURBLElBU3hDLFdBQ1QsT0FBZ0IsV0FDTixJQUFJQyxFQUFzQixDQUU5QkMsSUFDQSxTQUFVQyxFQUF5QkMsRUFBcUIsR0FFOUQsYUFHQSxFQUFvQkMsRUFBRUQsRUFBcUIsQ0FDekMsUUFBVyxXQUFhLE9BQXFCRSxLQUkvQyxJQUFJQyxFQUFlLEVBQW9CLEtBQ25DQyxFQUFvQyxFQUFvQkMsRUFBRUYsR0FFMURHLEVB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LE1BQU1tM0IsTUFBUTIwQixLQUFnQixLQUNyRG5FLEdBQVV4bUQsR0FBTWcwQixHQUFNLElBQ3RCLEVBQ0ksQ0FBRWgwQixRQUFNa2dELDJCQUNSLENBQUVFLFNBQVVBLEdBQVVPLFVBQVMsc0JBQXFCLFFBSzlEM2lELFNBQVM0dUQsS0FBTyxLQUNkMW1DLFFBQVF3OUIsSUFBSSxhIiwiZmlsZSI6ImJvb2suanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIGNsaXBib2FyZC5qcyB2Mi4wLjlcbiAqIGh0dHBzOi8vY2xpcGJvYXJkanMuY29tL1xuICpcbiAqIExpY2Vuc2VkIE1JVCDCqSBaZW5vIFJvY2hhXG4gKi9cbihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIkNsaXBib2FyZEpTXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIkNsaXBib2FyZEpTXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKCkgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfbW9kdWxlc19fID0gKHtcblxuLyoqKi8gNjg2OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblwidXNlIHN0cmljdFwiO1xuXG4vLyBFWFBPUlRTXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xuICBcImRlZmF1bHRcIjogZnVuY3Rpb24oKSB7IHJldHVybiAvKiBiaW5kaW5nICovIGNsaXBib2FyZDsgfVxufSk7XG5cbi8vIEVYVEVSTkFMIE1PRFVMRTogLi9ub2RlX21vZHVsZXMvdGlueS1lbWl0dGVyL2luZGV4LmpzXG52YXIgdGlueV9lbWl0dGVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNzkpO1xudmFyIHRpbnlfZW1pdHRlcl9kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubih0aW55X2VtaXR0ZXIpO1xuLy8gRVhURVJOQUwgTU9EVUxFOiAuL25vZGVfbW9kdWxlcy9nb29kLWxpc3RlbmVyL3NyYy9saXN0ZW4uanNcbnZhciBsaXN0ZW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3MCk7XG52YXIgbGlzdGVuX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGxpc3Rlbik7XG4vLyBFWFRFUk5BTCBNT0RVTEU6IC4vbm9kZV9tb2R1bGVzL3NlbGVjdC9zcmMvc2VsZWN0LmpzXG52YXIgc3JjX3NlbGVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oODE3KTtcbnZhciBzZWxlY3RfZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oc3JjX3NlbGVjdCk7XG47Ly8gQ09OQ0FURU5BVEVEIE1PRFVMRTogLi9zcmMvY29tbW9uL2NvbW1hbmQuanNcbi8qKlxuICogRXhlY3V0ZXMgYSBnaXZlbiBvcGVyYXRpb24gdHlwZS5cbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBjb21tYW5kKHR5cGUpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZXhlY0NvbW1hbmQodHlwZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2FjdGlvbnMvY3V0LmpzXG5cblxuLyoqXG4gKiBDdXQgYWN0aW9uIHdyYXBwZXIuXG4gKiBAcGFyYW0ge1N0cmluZ3xIVE1MRWxlbWVudH0gdGFyZ2V0XG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cblxudmFyIENsaXBib2FyZEFjdGlvbkN1dCA9IGZ1bmN0aW9uIENsaXBib2FyZEFjdGlvbkN1dCh0YXJnZXQpIHtcbiAgdmFyIHNlbGVjdGVkVGV4dCA9IHNlbGVjdF9kZWZhdWx0KCkodGFyZ2V0KTtcbiAgY29tbWFuZCgnY3V0Jyk7XG4gIHJldHVybiBzZWxlY3RlZFRleHQ7XG59O1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBhY3Rpb25zX2N1dCA9IChDbGlwYm9hcmRBY3Rpb25DdXQpO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2NvbW1vbi9jcmVhdGUtZmFrZS1lbGVtZW50LmpzXG4vKipcbiAqIENyZWF0ZXMgYSBmYWtlIHRleHRhcmVhIGVsZW1lbnQgd2l0aCBhIHZhbHVlLlxuICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtIVE1MRWxlbWVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmFrZUVsZW1lbnQodmFsdWUpIHtcbiAgdmFyIGlzUlRMID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlyJykgPT09ICdydGwnO1xuICB2YXIgZmFrZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpOyAvLyBQcmV2ZW50IHpvb21pbmcgb24gaU9TXG5cbiAgZmFrZUVsZW1lbnQuc3R5bGUuZm9udFNpemUgPSAnMTJwdCc7IC8vIFJlc2V0IGJveCBtb2RlbFxuXG4gIGZha2VFbGVtZW50LnN0eWxlLmJvcmRlciA9ICcwJztcbiAgZmFrZUVsZW1lbnQuc3R5bGUucGFkZGluZyA9ICcwJztcbiAgZmFrZUVsZW1lbnQuc3R5bGUubWFyZ2luID0gJzAnOyAvLyBNb3ZlIGVsZW1lbnQgb3V0IG9mIHNjcmVlbiBob3Jpem9udGFsbHlcblxuICBmYWtlRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gIGZha2VFbGVtZW50LnN0eWxlW2lzUlRMID8gJ3JpZ2h0JyA6ICdsZWZ0J10gPSAnLTk5OTlweCc7IC8vIE1vdmUgZWxlbWVudCB0byB0aGUgc2FtZSBwb3NpdGlvbiB2ZXJ0aWNhbGx5XG5cbiAgdmFyIHlQb3NpdGlvbiA9IHdpbmRvdy5wYWdlWU9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wO1xuICBmYWtlRWxlbWVudC5zdHlsZS50b3AgPSBcIlwiLmNvbmNhdCh5UG9zaXRpb24sIFwicHhcIik7XG4gIGZha2VFbGVtZW50LnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAnJyk7XG4gIGZha2VFbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gIHJldHVybiBmYWtlRWxlbWVudDtcbn1cbjsvLyBDT05DQVRFTkFURUQgTU9EVUxFOiAuL3NyYy9hY3Rpb25zL2NvcHkuanNcblxuXG5cbi8qKlxuICogQ29weSBhY3Rpb24gd3JhcHBlci5cbiAqIEBwYXJhbSB7U3RyaW5nfEhUTUxFbGVtZW50fSB0YXJnZXRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cblxudmFyIENsaXBib2FyZEFjdGlvbkNvcHkgPSBmdW5jdGlvbiBDbGlwYm9hcmRBY3Rpb25Db3B5KHRhcmdldCkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgIGNvbnRhaW5lcjogZG9jdW1lbnQuYm9keVxuICB9O1xuICB2YXIgc2VsZWN0ZWRUZXh0ID0gJyc7XG5cbiAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIGZha2VFbGVtZW50ID0gY3JlYXRlRmFrZUVsZW1lbnQodGFyZ2V0KTtcbiAgICBvcHRpb25zLmNvbnRhaW5lci5hcHBlbmRDaGlsZChmYWtlRWxlbWVudCk7XG4gICAgc2VsZWN0ZWRUZXh0ID0gc2VsZWN0X2RlZmF1bHQoKShmYWtlRWxlbWVudCk7XG4gICAgY29tbWFuZCgnY29weScpO1xuICAgIGZha2VFbGVtZW50LnJlbW92ZSgpO1xuICB9IGVsc2Uge1xuICAgIHNlbGVjdGVkVGV4dCA9IHNlbGVjdF9kZWZhdWx0KCkodGFyZ2V0KTtcbiAgICBjb21tYW5kKCdjb3B5Jyk7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0ZWRUZXh0O1xufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYWN0aW9uc19jb3B5ID0gKENsaXBib2FyZEFjdGlvbkNvcHkpO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2FjdGlvbnMvZGVmYXVsdC5qc1xuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5cblxuLyoqXG4gKiBJbm5lciBmdW5jdGlvbiB3aGljaCBwZXJmb3JtcyBzZWxlY3Rpb24gZnJvbSBlaXRoZXIgYHRleHRgIG9yIGB0YXJnZXRgXG4gKiBwcm9wZXJ0aWVzIGFuZCB0aGVuIGV4ZWN1dGVzIGNvcHkgb3IgY3V0IG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5cbnZhciBDbGlwYm9hcmRBY3Rpb25EZWZhdWx0ID0gZnVuY3Rpb24gQ2xpcGJvYXJkQWN0aW9uRGVmYXVsdCgpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAvLyBEZWZpbmVzIGJhc2UgcHJvcGVydGllcyBwYXNzZWQgZnJvbSBjb25zdHJ1Y3Rvci5cbiAgdmFyIF9vcHRpb25zJGFjdGlvbiA9IG9wdGlvbnMuYWN0aW9uLFxuICAgICAgYWN0aW9uID0gX29wdGlvbnMkYWN0aW9uID09PSB2b2lkIDAgPyAnY29weScgOiBfb3B0aW9ucyRhY3Rpb24sXG4gICAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcixcbiAgICAgIHRhcmdldCA9IG9wdGlvbnMudGFyZ2V0LFxuICAgICAgdGV4dCA9IG9wdGlvbnMudGV4dDsgLy8gU2V0cyB0aGUgYGFjdGlvbmAgdG8gYmUgcGVyZm9ybWVkIHdoaWNoIGNhbiBiZSBlaXRoZXIgJ2NvcHknIG9yICdjdXQnLlxuXG4gIGlmIChhY3Rpb24gIT09ICdjb3B5JyAmJiBhY3Rpb24gIT09ICdjdXQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFwiYWN0aW9uXCIgdmFsdWUsIHVzZSBlaXRoZXIgXCJjb3B5XCIgb3IgXCJjdXRcIicpO1xuICB9IC8vIFNldHMgdGhlIGB0YXJnZXRgIHByb3BlcnR5IHVzaW5nIGFuIGVsZW1lbnQgdGhhdCB3aWxsIGJlIGhhdmUgaXRzIGNvbnRlbnQgY29waWVkLlxuXG5cbiAgaWYgKHRhcmdldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHRhcmdldCAmJiBfdHlwZW9mKHRhcmdldCkgPT09ICdvYmplY3QnICYmIHRhcmdldC5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgaWYgKGFjdGlvbiA9PT0gJ2NvcHknICYmIHRhcmdldC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFwidGFyZ2V0XCIgYXR0cmlidXRlLiBQbGVhc2UgdXNlIFwicmVhZG9ubHlcIiBpbnN0ZWFkIG9mIFwiZGlzYWJsZWRcIiBhdHRyaWJ1dGUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGlvbiA9PT0gJ2N1dCcgJiYgKHRhcmdldC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykgfHwgdGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFwidGFyZ2V0XCIgYXR0cmlidXRlLiBZb3UgY2FuXFwndCBjdXQgdGV4dCBmcm9tIGVsZW1lbnRzIHdpdGggXCJyZWFkb25seVwiIG9yIFwiZGlzYWJsZWRcIiBhdHRyaWJ1dGVzJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBcInRhcmdldFwiIHZhbHVlLCB1c2UgYSB2YWxpZCBFbGVtZW50Jyk7XG4gICAgfVxuICB9IC8vIERlZmluZSBzZWxlY3Rpb24gc3RyYXRlZ3kgYmFzZWQgb24gYHRleHRgIHByb3BlcnR5LlxuXG5cbiAgaWYgKHRleHQpIHtcbiAgICByZXR1cm4gYWN0aW9uc19jb3B5KHRleHQsIHtcbiAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyXG4gICAgfSk7XG4gIH0gLy8gRGVmaW5lcyB3aGljaCBzZWxlY3Rpb24gc3RyYXRlZ3kgYmFzZWQgb24gYHRhcmdldGAgcHJvcGVydHkuXG5cblxuICBpZiAodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGFjdGlvbiA9PT0gJ2N1dCcgPyBhY3Rpb25zX2N1dCh0YXJnZXQpIDogYWN0aW9uc19jb3B5KHRhcmdldCwge1xuICAgICAgY29udGFpbmVyOiBjb250YWluZXJcbiAgICB9KTtcbiAgfVxufTtcblxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgYWN0aW9uc19kZWZhdWx0ID0gKENsaXBib2FyZEFjdGlvbkRlZmF1bHQpO1xuOy8vIENPTkNBVEVOQVRFRCBNT0RVTEU6IC4vc3JjL2NsaXBib2FyZC5qc1xuZnVuY3Rpb24gY2xpcGJvYXJkX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgY2xpcGJvYXJkX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBjbGlwYm9hcmRfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIGNsaXBib2FyZF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7IHZhciBoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0ID0gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpOyByZXR1cm4gZnVuY3Rpb24gX2NyZWF0ZVN1cGVySW50ZXJuYWwoKSB7IHZhciBTdXBlciA9IF9nZXRQcm90b3R5cGVPZihEZXJpdmVkKSwgcmVzdWx0OyBpZiAoaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCkgeyB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yOyByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpOyB9IGVsc2UgeyByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9IHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpOyB9OyB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKGNsaXBib2FyZF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTsgcmV0dXJuIHRydWU7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIGZhbHNlOyB9IH1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5cblxuXG5cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gcmV0cmlldmUgYXR0cmlidXRlIHZhbHVlLlxuICogQHBhcmFtIHtTdHJpbmd9IHN1ZmZpeFxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKi9cblxuZnVuY3Rpb24gZ2V0QXR0cmlidXRlVmFsdWUoc3VmZml4LCBlbGVtZW50KSB7XG4gIHZhciBhdHRyaWJ1dGUgPSBcImRhdGEtY2xpcGJvYXJkLVwiLmNvbmNhdChzdWZmaXgpO1xuXG4gIGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xufVxuLyoqXG4gKiBCYXNlIGNsYXNzIHdoaWNoIHRha2VzIG9uZSBvciBtb3JlIGVsZW1lbnRzLCBhZGRzIGV2ZW50IGxpc3RlbmVycyB0byB0aGVtLFxuICogYW5kIGluc3RhbnRpYXRlcyBhIG5ldyBgQ2xpcGJvYXJkQWN0aW9uYCBvbiBlYWNoIGNsaWNrLlxuICovXG5cblxudmFyIENsaXBib2FyZCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX0VtaXR0ZXIpIHtcbiAgX2luaGVyaXRzKENsaXBib2FyZCwgX0VtaXR0ZXIpO1xuXG4gIHZhciBfc3VwZXIgPSBfY3JlYXRlU3VwZXIoQ2xpcGJvYXJkKTtcblxuICAvKipcbiAgICogQHBhcmFtIHtTdHJpbmd8SFRNTEVsZW1lbnR8SFRNTENvbGxlY3Rpb258Tm9kZUxpc3R9IHRyaWdnZXJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICovXG4gIGZ1bmN0aW9uIENsaXBib2FyZCh0cmlnZ2VyLCBvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENsaXBib2FyZCk7XG5cbiAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpO1xuXG4gICAgX3RoaXMucmVzb2x2ZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICBfdGhpcy5saXN0ZW5DbGljayh0cmlnZ2VyKTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuICAvKipcbiAgICogRGVmaW5lcyBpZiBhdHRyaWJ1dGVzIHdvdWxkIGJlIHJlc29sdmVkIHVzaW5nIGludGVybmFsIHNldHRlciBmdW5jdGlvbnNcbiAgICogb3IgY3VzdG9tIGZ1bmN0aW9ucyB0aGF0IHdlcmUgcGFzc2VkIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICovXG5cblxuICBfY3JlYXRlQ2xhc3MoQ2xpcGJvYXJkLCBbe1xuICAgIGtleTogXCJyZXNvbHZlT3B0aW9uc1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNvbHZlT3B0aW9ucygpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAgIHRoaXMuYWN0aW9uID0gdHlwZW9mIG9wdGlvbnMuYWN0aW9uID09PSAnZnVuY3Rpb24nID8gb3B0aW9ucy5hY3Rpb24gOiB0aGlzLmRlZmF1bHRBY3Rpb247XG4gICAgICB0aGlzLnRhcmdldCA9IHR5cGVvZiBvcHRpb25zLnRhcmdldCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMudGFyZ2V0IDogdGhpcy5kZWZhdWx0VGFyZ2V0O1xuICAgICAgdGhpcy50ZXh0ID0gdHlwZW9mIG9wdGlvbnMudGV4dCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdGlvbnMudGV4dCA6IHRoaXMuZGVmYXVsdFRleHQ7XG4gICAgICB0aGlzLmNvbnRhaW5lciA9IGNsaXBib2FyZF90eXBlb2Yob3B0aW9ucy5jb250YWluZXIpID09PSAnb2JqZWN0JyA/IG9wdGlvbnMuY29udGFpbmVyIDogZG9jdW1lbnQuYm9keTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGNsaWNrIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBwYXNzZWQgdHJpZ2dlci5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xIVE1MRWxlbWVudHxIVE1MQ29sbGVjdGlvbnxOb2RlTGlzdH0gdHJpZ2dlclxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwibGlzdGVuQ2xpY2tcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gbGlzdGVuQ2xpY2sodHJpZ2dlcikge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5fZGVmYXVsdCgpKHRyaWdnZXIsICdjbGljaycsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHJldHVybiBfdGhpczIub25DbGljayhlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGEgbmV3IGBDbGlwYm9hcmRBY3Rpb25gIG9uIGVhY2ggY2xpY2sgZXZlbnQuXG4gICAgICogQHBhcmFtIHtFdmVudH0gZVxuICAgICAqL1xuXG4gIH0sIHtcbiAgICBrZXk6IFwib25DbGlja1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBvbkNsaWNrKGUpIHtcbiAgICAgIHZhciB0cmlnZ2VyID0gZS5kZWxlZ2F0ZVRhcmdldCB8fCBlLmN1cnJlbnRUYXJnZXQ7XG4gICAgICB2YXIgc2VsZWN0ZWRUZXh0ID0gYWN0aW9uc19kZWZhdWx0KHtcbiAgICAgICAgYWN0aW9uOiB0aGlzLmFjdGlvbih0cmlnZ2VyKSxcbiAgICAgICAgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5lcixcbiAgICAgICAgdGFyZ2V0OiB0aGlzLnRhcmdldCh0cmlnZ2VyKSxcbiAgICAgICAgdGV4dDogdGhpcy50ZXh0KHRyaWdnZXIpXG4gICAgICB9KTsgLy8gRmlyZXMgYW4gZXZlbnQgYmFzZWQgb24gdGhlIGNvcHkgb3BlcmF0aW9uIHJlc3VsdC5cblxuICAgICAgdGhpcy5lbWl0KHNlbGVjdGVkVGV4dCA/ICdzdWNjZXNzJyA6ICdlcnJvcicsIHtcbiAgICAgICAgYWN0aW9uOiB0aGlzLmFjdGlvbixcbiAgICAgICAgdGV4dDogc2VsZWN0ZWRUZXh0LFxuICAgICAgICB0cmlnZ2VyOiB0cmlnZ2VyLFxuICAgICAgICBjbGVhclNlbGVjdGlvbjogZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXIpIHtcbiAgICAgICAgICAgIHRyaWdnZXIuZm9jdXMoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IGBhY3Rpb25gIGxvb2t1cCBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRyaWdnZXJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImRlZmF1bHRBY3Rpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGVmYXVsdEFjdGlvbih0cmlnZ2VyKSB7XG4gICAgICByZXR1cm4gZ2V0QXR0cmlidXRlVmFsdWUoJ2FjdGlvbicsIHRyaWdnZXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZhdWx0IGB0YXJnZXRgIGxvb2t1cCBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0ge0VsZW1lbnR9IHRyaWdnZXJcbiAgICAgKi9cblxuICB9LCB7XG4gICAga2V5OiBcImRlZmF1bHRUYXJnZXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZGVmYXVsdFRhcmdldCh0cmlnZ2VyKSB7XG4gICAgICB2YXIgc2VsZWN0b3IgPSBnZXRBdHRyaWJ1dGVWYWx1ZSgndGFyZ2V0JywgdHJpZ2dlcik7XG5cbiAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFsbG93IGZpcmUgcHJvZ3JhbW1hdGljYWxseSBhIGNvcHkgYWN0aW9uXG4gICAgICogQHBhcmFtIHtTdHJpbmd8SFRNTEVsZW1lbnR9IHRhcmdldFxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAgICogQHJldHVybnMgVGV4dCBjb3BpZWQuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJkZWZhdWx0VGV4dFwiLFxuXG4gICAgLyoqXG4gICAgICogRGVmYXVsdCBgdGV4dGAgbG9va3VwIGZ1bmN0aW9uLlxuICAgICAqIEBwYXJhbSB7RWxlbWVudH0gdHJpZ2dlclxuICAgICAqL1xuICAgIHZhbHVlOiBmdW5jdGlvbiBkZWZhdWx0VGV4dCh0cmlnZ2VyKSB7XG4gICAgICByZXR1cm4gZ2V0QXR0cmlidXRlVmFsdWUoJ3RleHQnLCB0cmlnZ2VyKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVzdHJveSBsaWZlY3ljbGUuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJkZXN0cm95XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB0aGlzLmxpc3RlbmVyLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJjb3B5XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvcHkodGFyZ2V0KSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge1xuICAgICAgICBjb250YWluZXI6IGRvY3VtZW50LmJvZHlcbiAgICAgIH07XG4gICAgICByZXR1cm4gYWN0aW9uc19jb3B5KHRhcmdldCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFsbG93IGZpcmUgcHJvZ3JhbW1hdGljYWxseSBhIGN1dCBhY3Rpb25cbiAgICAgKiBAcGFyYW0ge1N0cmluZ3xIVE1MRWxlbWVudH0gdGFyZ2V0XG4gICAgICogQHJldHVybnMgVGV4dCBjdXR0ZWQuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJjdXRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gY3V0KHRhcmdldCkge1xuICAgICAgcmV0dXJuIGFjdGlvbnNfY3V0KHRhcmdldCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHN1cHBvcnQgb2YgdGhlIGdpdmVuIGFjdGlvbiwgb3IgYWxsIGFjdGlvbnMgaWYgbm8gYWN0aW9uIGlzXG4gICAgICogZ2l2ZW4uXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IFthY3Rpb25dXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJpc1N1cHBvcnRlZFwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBpc1N1cHBvcnRlZCgpIHtcbiAgICAgIHZhciBhY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFsnY29weScsICdjdXQnXTtcbiAgICAgIHZhciBhY3Rpb25zID0gdHlwZW9mIGFjdGlvbiA9PT0gJ3N0cmluZycgPyBbYWN0aW9uXSA6IGFjdGlvbjtcbiAgICAgIHZhciBzdXBwb3J0ID0gISFkb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQ7XG4gICAgICBhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICBzdXBwb3J0ID0gc3VwcG9ydCAmJiAhIWRvY3VtZW50LnF1ZXJ5Q29tbWFuZFN1cHBvcnRlZChhY3Rpb24pO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gc3VwcG9ydDtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gQ2xpcGJvYXJkO1xufSgodGlueV9lbWl0dGVyX2RlZmF1bHQoKSkpO1xuXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBjbGlwYm9hcmQgPSAoQ2xpcGJvYXJkKTtcblxuLyoqKi8gfSksXG5cbi8qKiovIDgyODpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxudmFyIERPQ1VNRU5UX05PREVfVFlQRSA9IDk7XG5cbi8qKlxuICogQSBwb2x5ZmlsbCBmb3IgRWxlbWVudC5tYXRjaGVzKClcbiAqL1xuaWYgKHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiAhRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcykge1xuICAgIHZhciBwcm90byA9IEVsZW1lbnQucHJvdG90eXBlO1xuXG4gICAgcHJvdG8ubWF0Y2hlcyA9IHByb3RvLm1hdGNoZXNTZWxlY3RvciB8fFxuICAgICAgICAgICAgICAgICAgICBwcm90by5tb3pNYXRjaGVzU2VsZWN0b3IgfHxcbiAgICAgICAgICAgICAgICAgICAgcHJvdG8ubXNNYXRjaGVzU2VsZWN0b3IgfHxcbiAgICAgICAgICAgICAgICAgICAgcHJvdG8ub01hdGNoZXNTZWxlY3RvciB8fFxuICAgICAgICAgICAgICAgICAgICBwcm90by53ZWJraXRNYXRjaGVzU2VsZWN0b3I7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGNsb3Nlc3QgcGFyZW50IHRoYXQgbWF0Y2hlcyBhIHNlbGVjdG9yLlxuICpcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtTdHJpbmd9IHNlbGVjdG9yXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gY2xvc2VzdCAoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICB3aGlsZSAoZWxlbWVudCAmJiBlbGVtZW50Lm5vZGVUeXBlICE9PSBET0NVTUVOVF9OT0RFX1RZUEUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbGVtZW50Lm1hdGNoZXMgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICAgIGVsZW1lbnQubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnROb2RlO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbG9zZXN0O1xuXG5cbi8qKiovIH0pLFxuXG4vKioqLyA0Mzg6XG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxudmFyIGNsb3Nlc3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgyOCk7XG5cbi8qKlxuICogRGVsZWdhdGVzIGV2ZW50IHRvIGEgc2VsZWN0b3IuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtCb29sZWFufSB1c2VDYXB0dXJlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIF9kZWxlZ2F0ZShlbGVtZW50LCBzZWxlY3RvciwgdHlwZSwgY2FsbGJhY2ssIHVzZUNhcHR1cmUpIHtcbiAgICB2YXIgbGlzdGVuZXJGbiA9IGxpc3RlbmVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXJGbiwgdXNlQ2FwdHVyZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBkZXN0cm95OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lckZuLCB1c2VDYXB0dXJlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBEZWxlZ2F0ZXMgZXZlbnQgdG8gYSBzZWxlY3Rvci5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR8U3RyaW5nfEFycmF5fSBbZWxlbWVudHNdXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtCb29sZWFufSB1c2VDYXB0dXJlXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGRlbGVnYXRlKGVsZW1lbnRzLCBzZWxlY3RvciwgdHlwZSwgY2FsbGJhY2ssIHVzZUNhcHR1cmUpIHtcbiAgICAvLyBIYW5kbGUgdGhlIHJlZ3VsYXIgRWxlbWVudCB1c2FnZVxuICAgIGlmICh0eXBlb2YgZWxlbWVudHMuYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gX2RlbGVnYXRlLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIEVsZW1lbnQtbGVzcyB1c2FnZSwgaXQgZGVmYXVsdHMgdG8gZ2xvYmFsIGRlbGVnYXRpb25cbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVXNlIGBkb2N1bWVudGAgYXMgdGhlIGZpcnN0IHBhcmFtZXRlciwgdGhlbiBhcHBseSBhcmd1bWVudHNcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNob3J0IHdheSB0byAudW5zaGlmdCBgYXJndW1lbnRzYCB3aXRob3V0IHJ1bm5pbmcgaW50byBkZW9wdGltaXphdGlvbnNcbiAgICAgICAgcmV0dXJuIF9kZWxlZ2F0ZS5iaW5kKG51bGwsIGRvY3VtZW50KS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBTZWxlY3Rvci1iYXNlZCB1c2FnZVxuICAgIGlmICh0eXBlb2YgZWxlbWVudHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGVsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlbGVtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIEFycmF5LWxpa2UgYmFzZWQgdXNhZ2VcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGVsZW1lbnRzLCBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gX2RlbGVnYXRlKGVsZW1lbnQsIHNlbGVjdG9yLCB0eXBlLCBjYWxsYmFjaywgdXNlQ2FwdHVyZSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogRmluZHMgY2xvc2VzdCBtYXRjaCBhbmQgaW52b2tlcyBjYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWxlY3RvclxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gbGlzdGVuZXIoZWxlbWVudCwgc2VsZWN0b3IsIHR5cGUsIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgZS5kZWxlZ2F0ZVRhcmdldCA9IGNsb3Nlc3QoZS50YXJnZXQsIHNlbGVjdG9yKTtcblxuICAgICAgICBpZiAoZS5kZWxlZ2F0ZVRhcmdldCkge1xuICAgICAgICAgICAgY2FsbGJhY2suY2FsbChlbGVtZW50LCBlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkZWxlZ2F0ZTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gODc5OlxuLyoqKi8gKGZ1bmN0aW9uKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSB7XG5cbi8qKlxuICogQ2hlY2sgaWYgYXJndW1lbnQgaXMgYSBIVE1MIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbHVlXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5leHBvcnRzLm5vZGUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICYmIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnRcbiAgICAgICAgJiYgdmFsdWUubm9kZVR5cGUgPT09IDE7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGFyZ3VtZW50IGlzIGEgbGlzdCBvZiBIVE1MIGVsZW1lbnRzLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZXhwb3J0cy5ub2RlTGlzdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xuXG4gICAgcmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgJiYgKHR5cGUgPT09ICdbb2JqZWN0IE5vZGVMaXN0XScgfHwgdHlwZSA9PT0gJ1tvYmplY3QgSFRNTENvbGxlY3Rpb25dJylcbiAgICAgICAgJiYgKCdsZW5ndGgnIGluIHZhbHVlKVxuICAgICAgICAmJiAodmFsdWUubGVuZ3RoID09PSAwIHx8IGV4cG9ydHMubm9kZSh2YWx1ZVswXSkpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBhcmd1bWVudCBpcyBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsdWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmV4cG9ydHMuc3RyaW5nID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgICB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZztcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgYXJndW1lbnQgaXMgYSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsdWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmV4cG9ydHMuZm4gPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKTtcblxuICAgIHJldHVybiB0eXBlID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufTtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMzcwOlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX191bnVzZWRfd2VicGFja19leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cbnZhciBpcyA9IF9fd2VicGFja19yZXF1aXJlX18oODc5KTtcbnZhciBkZWxlZ2F0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oNDM4KTtcblxuLyoqXG4gKiBWYWxpZGF0ZXMgYWxsIHBhcmFtcyBhbmQgY2FsbHMgdGhlIHJpZ2h0XG4gKiBsaXN0ZW5lciBmdW5jdGlvbiBiYXNlZCBvbiBpdHMgdGFyZ2V0IHR5cGUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8SFRNTEVsZW1lbnR8SFRNTENvbGxlY3Rpb258Tm9kZUxpc3R9IHRhcmdldFxuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGxpc3Rlbih0YXJnZXQsIHR5cGUsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0YXJnZXQgJiYgIXR5cGUgJiYgIWNhbGxiYWNrKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCBhcmd1bWVudHMnKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzLnN0cmluZyh0eXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhIFN0cmluZycpO1xuICAgIH1cblxuICAgIGlmICghaXMuZm4oY2FsbGJhY2spKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoaXJkIGFyZ3VtZW50IG11c3QgYmUgYSBGdW5jdGlvbicpO1xuICAgIH1cblxuICAgIGlmIChpcy5ub2RlKHRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuIGxpc3Rlbk5vZGUodGFyZ2V0LCB0eXBlLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzLm5vZGVMaXN0KHRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuIGxpc3Rlbk5vZGVMaXN0KHRhcmdldCwgdHlwZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBlbHNlIGlmIChpcy5zdHJpbmcodGFyZ2V0KSkge1xuICAgICAgICByZXR1cm4gbGlzdGVuU2VsZWN0b3IodGFyZ2V0LCB0eXBlLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgU3RyaW5nLCBIVE1MRWxlbWVudCwgSFRNTENvbGxlY3Rpb24sIG9yIE5vZGVMaXN0Jyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEFkZHMgYW4gZXZlbnQgbGlzdGVuZXIgdG8gYSBIVE1MIGVsZW1lbnRcbiAqIGFuZCByZXR1cm5zIGEgcmVtb3ZlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBsaXN0ZW5Ob2RlKG5vZGUsIHR5cGUsIGNhbGxiYWNrKSB7XG4gICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKTtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBBZGQgYW4gZXZlbnQgbGlzdGVuZXIgdG8gYSBsaXN0IG9mIEhUTUwgZWxlbWVudHNcbiAqIGFuZCByZXR1cm5zIGEgcmVtb3ZlIGxpc3RlbmVyIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7Tm9kZUxpc3R8SFRNTENvbGxlY3Rpb259IG5vZGVMaXN0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gbGlzdGVuTm9kZUxpc3Qobm9kZUxpc3QsIHR5cGUsIGNhbGxiYWNrKSB7XG4gICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChub2RlTGlzdCwgZnVuY3Rpb24obm9kZSkge1xuICAgICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgY2FsbGJhY2spO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGVzdHJveTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKG5vZGVMaXN0LCBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEFkZCBhbiBldmVudCBsaXN0ZW5lciB0byBhIHNlbGVjdG9yXG4gKiBhbmQgcmV0dXJucyBhIHJlbW92ZSBsaXN0ZW5lciBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VsZWN0b3JcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5mdW5jdGlvbiBsaXN0ZW5TZWxlY3RvcihzZWxlY3RvciwgdHlwZSwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gZGVsZWdhdGUoZG9jdW1lbnQuYm9keSwgc2VsZWN0b3IsIHR5cGUsIGNhbGxiYWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0ZW47XG5cblxuLyoqKi8gfSksXG5cbi8qKiovIDgxNzpcbi8qKiovIChmdW5jdGlvbihtb2R1bGUpIHtcblxuZnVuY3Rpb24gc2VsZWN0KGVsZW1lbnQpIHtcbiAgICB2YXIgc2VsZWN0ZWRUZXh0O1xuXG4gICAgaWYgKGVsZW1lbnQubm9kZU5hbWUgPT09ICdTRUxFQ1QnKSB7XG4gICAgICAgIGVsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgICBzZWxlY3RlZFRleHQgPSBlbGVtZW50LnZhbHVlO1xuICAgIH1cbiAgICBlbHNlIGlmIChlbGVtZW50Lm5vZGVOYW1lID09PSAnSU5QVVQnIHx8IGVsZW1lbnQubm9kZU5hbWUgPT09ICdURVhUQVJFQScpIHtcbiAgICAgICAgdmFyIGlzUmVhZE9ubHkgPSBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKTtcblxuICAgICAgICBpZiAoIWlzUmVhZE9ubHkpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdyZWFkb25seScsICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsZW1lbnQuc2VsZWN0KCk7XG4gICAgICAgIGVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgZWxlbWVudC52YWx1ZS5sZW5ndGgpO1xuXG4gICAgICAgIGlmICghaXNSZWFkT25seSkge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3JlYWRvbmx5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBzZWxlY3RlZFRleHQgPSBlbGVtZW50LnZhbHVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnKSkge1xuICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblxuICAgICAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudCk7XG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcblxuICAgICAgICBzZWxlY3RlZFRleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZWN0ZWRUZXh0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNlbGVjdDtcblxuXG4vKioqLyB9KSxcblxuLyoqKi8gMjc5OlxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG5mdW5jdGlvbiBFICgpIHtcbiAgLy8gS2VlcCB0aGlzIGVtcHR5IHNvIGl0J3MgZWFzaWVyIHRvIGluaGVyaXQgZnJvbVxuICAvLyAodmlhIGh0dHBzOi8vZ2l0aHViLmNvbS9saXBzbWFjayBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zY290dGNvcmdhbi90aW55LWVtaXR0ZXIvaXNzdWVzLzMpXG59XG5cbkUucHJvdG90eXBlID0ge1xuICBvbjogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBjdHgpIHtcbiAgICB2YXIgZSA9IHRoaXMuZSB8fCAodGhpcy5lID0ge30pO1xuXG4gICAgKGVbbmFtZV0gfHwgKGVbbmFtZV0gPSBbXSkpLnB1c2goe1xuICAgICAgZm46IGNhbGxiYWNrLFxuICAgICAgY3R4OiBjdHhcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIG9uY2U6IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaywgY3R4KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGZ1bmN0aW9uIGxpc3RlbmVyICgpIHtcbiAgICAgIHNlbGYub2ZmKG5hbWUsIGxpc3RlbmVyKTtcbiAgICAgIGNhbGxiYWNrLmFwcGx5KGN0eCwgYXJndW1lbnRzKTtcbiAgICB9O1xuXG4gICAgbGlzdGVuZXIuXyA9IGNhbGxiYWNrXG4gICAgcmV0dXJuIHRoaXMub24obmFtZSwgbGlzdGVuZXIsIGN0eCk7XG4gIH0sXG5cbiAgZW1pdDogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgZGF0YSA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICB2YXIgZXZ0QXJyID0gKCh0aGlzLmUgfHwgKHRoaXMuZSA9IHt9KSlbbmFtZV0gfHwgW10pLnNsaWNlKCk7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBsZW4gPSBldnRBcnIubGVuZ3RoO1xuXG4gICAgZm9yIChpOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGV2dEFycltpXS5mbi5hcHBseShldnRBcnJbaV0uY3R4LCBkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICBvZmY6IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaykge1xuICAgIHZhciBlID0gdGhpcy5lIHx8ICh0aGlzLmUgPSB7fSk7XG4gICAgdmFyIGV2dHMgPSBlW25hbWVdO1xuICAgIHZhciBsaXZlRXZlbnRzID0gW107XG5cbiAgICBpZiAoZXZ0cyAmJiBjYWxsYmFjaykge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV2dHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGV2dHNbaV0uZm4gIT09IGNhbGxiYWNrICYmIGV2dHNbaV0uZm4uXyAhPT0gY2FsbGJhY2spXG4gICAgICAgICAgbGl2ZUV2ZW50cy5wdXNoKGV2dHNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBldmVudCBmcm9tIHF1ZXVlIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtcbiAgICAvLyBTdWdnZXN0ZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2xhemRcbiAgICAvLyBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9zY290dGNvcmdhbi90aW55LWVtaXR0ZXIvY29tbWl0L2M2ZWJmYWE5YmM5NzNiMzNkMTEwYTg0YTMwNzc0MmI3Y2Y5NGM5NTMjY29tbWl0Y29tbWVudC01MDI0OTEwXG5cbiAgICAobGl2ZUV2ZW50cy5sZW5ndGgpXG4gICAgICA/IGVbbmFtZV0gPSBsaXZlRXZlbnRzXG4gICAgICA6IGRlbGV0ZSBlW25hbWVdO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRTtcbm1vZHVsZS5leHBvcnRzLlRpbnlFbWl0dGVyID0gRTtcblxuXG4vKioqLyB9KVxuXG4vKioqKioqLyBcdH0pO1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSkge1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcbi8qKioqKiovIFx0XHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi8gXHRcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0ICovXG4vKioqKioqLyBcdCFmdW5jdGlvbigpIHtcbi8qKioqKiovIFx0XHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuLyoqKioqKi8gXHRcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuLyoqKioqKi8gXHRcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4vKioqKioqLyBcdFx0XHRcdGZ1bmN0aW9uKCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuLyoqKioqKi8gXHRcdFx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbi8qKioqKiovIFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuLyoqKioqKi8gXHRcdFx0cmV0dXJuIGdldHRlcjtcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHR9KCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMgKi9cbi8qKioqKiovIFx0IWZ1bmN0aW9uKCkge1xuLyoqKioqKi8gXHRcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBkZWZpbml0aW9uKSB7XG4vKioqKioqLyBcdFx0XHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG4vKioqKioqLyBcdFx0XHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuLyoqKioqKi8gXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG4vKioqKioqLyBcdFx0XHRcdH1cbi8qKioqKiovIFx0XHRcdH1cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHR9KCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kICovXG4vKioqKioqLyBcdCFmdW5jdGlvbigpIHtcbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmosIHByb3ApIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOyB9XG4vKioqKioqLyBcdH0oKTtcbi8qKioqKiovIFx0XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHQvLyBtb2R1bGUgZXhwb3J0cyBtdXN0IGJlIHJldHVybmVkIGZyb20gcnVudGltZSBzbyBlbnRyeSBpbmxpbmluZyBpcyBkaXNhYmxlZFxuLyoqKioqKi8gXHQvLyBzdGFydHVwXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyg2ODYpO1xuLyoqKioqKi8gfSkoKVxuLmRlZmF1bHQ7XG59KTsiLCIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNi4wXG4gKiBodHRwczovL2pxdWVyeS5jb20vXG4gKlxuICogSW5jbHVkZXMgU2l6emxlLmpzXG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMjEtMDMtMDJUMTc6MDhaXG4gKi9cbiggZnVuY3Rpb24oIGdsb2JhbCwgZmFjdG9yeSApIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRpZiAoIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gRm9yIENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciBgd2luZG93YFxuXHRcdC8vIGlzIHByZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuXG5cdFx0Ly8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBkb2N1bWVudGBcblx0XHQvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBtb2R1bGUuZXhwb3J0cy5cblx0XHQvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSByZWFsIGB3aW5kb3dgLlxuXHRcdC8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUoXCJqcXVlcnlcIikod2luZG93KTtcblx0XHQvLyBTZWUgdGlja2V0ICMxNDU0OSBmb3IgbW9yZSBpbmZvLlxuXHRcdG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID9cblx0XHRcdGZhY3RvcnkoIGdsb2JhbCwgdHJ1ZSApIDpcblx0XHRcdGZ1bmN0aW9uKCB3ICkge1xuXHRcdFx0XHRpZiAoICF3LmRvY3VtZW50ICkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvciggXCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50XCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeSggdyApO1xuXHRcdFx0fTtcblx0fSBlbHNlIHtcblx0XHRmYWN0b3J5KCBnbG9iYWwgKTtcblx0fVxuXG4vLyBQYXNzIHRoaXMgaWYgd2luZG93IGlzIG5vdCBkZWZpbmVkIHlldFxufSApKCB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24oIHdpbmRvdywgbm9HbG9iYWwgKSB7XG5cbi8vIEVkZ2UgPD0gMTIgLSAxMyssIEZpcmVmb3ggPD0xOCAtIDQ1KywgSUUgMTAgLSAxMSwgU2FmYXJpIDUuMSAtIDkrLCBpT1MgNiAtIDkuMVxuLy8gdGhyb3cgZXhjZXB0aW9ucyB3aGVuIG5vbi1zdHJpY3QgY29kZSAoZS5nLiwgQVNQLk5FVCA0LjUpIGFjY2Vzc2VzIHN0cmljdCBtb2RlXG4vLyBhcmd1bWVudHMuY2FsbGVlLmNhbGxlciAodHJhYy0xMzMzNSkuIEJ1dCBhcyBvZiBqUXVlcnkgMy4wICgyMDE2KSwgc3RyaWN0IG1vZGUgc2hvdWxkIGJlIGNvbW1vblxuLy8gZW5vdWdoIHRoYXQgYWxsIHN1Y2ggYXR0ZW1wdHMgYXJlIGd1YXJkZWQgaW4gYSB0cnkgYmxvY2suXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGFyciA9IFtdO1xuXG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG5cbnZhciBzbGljZSA9IGFyci5zbGljZTtcblxudmFyIGZsYXQgPSBhcnIuZmxhdCA/IGZ1bmN0aW9uKCBhcnJheSApIHtcblx0cmV0dXJuIGFyci5mbGF0LmNhbGwoIGFycmF5ICk7XG59IDogZnVuY3Rpb24oIGFycmF5ICkge1xuXHRyZXR1cm4gYXJyLmNvbmNhdC5hcHBseSggW10sIGFycmF5ICk7XG59O1xuXG5cbnZhciBwdXNoID0gYXJyLnB1c2g7XG5cbnZhciBpbmRleE9mID0gYXJyLmluZGV4T2Y7XG5cbnZhciBjbGFzczJ0eXBlID0ge307XG5cbnZhciB0b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmc7XG5cbnZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgZm5Ub1N0cmluZyA9IGhhc093bi50b1N0cmluZztcblxudmFyIE9iamVjdEZ1bmN0aW9uU3RyaW5nID0gZm5Ub1N0cmluZy5jYWxsKCBPYmplY3QgKTtcblxudmFyIHN1cHBvcnQgPSB7fTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiBpc0Z1bmN0aW9uKCBvYmogKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD01NywgRmlyZWZveCA8PTUyXG5cdFx0Ly8gSW4gc29tZSBicm93c2VycywgdHlwZW9mIHJldHVybnMgXCJmdW5jdGlvblwiIGZvciBIVE1MIDxvYmplY3Q+IGVsZW1lbnRzXG5cdFx0Ly8gKGkuZS4sIGB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvYmplY3RcIiApID09PSBcImZ1bmN0aW9uXCJgKS5cblx0XHQvLyBXZSBkb24ndCB3YW50IHRvIGNsYXNzaWZ5ICphbnkqIERPTSBub2RlIGFzIGEgZnVuY3Rpb24uXG5cdFx0Ly8gU3VwcG9ydDogUXRXZWIgPD0zLjguNSwgV2ViS2l0IDw9NTM0LjM0LCB3a2h0bWx0b3BkZiB0b29sIDw9MC4xMi41XG5cdFx0Ly8gUGx1cyBmb3Igb2xkIFdlYktpdCwgdHlwZW9mIHJldHVybnMgXCJmdW5jdGlvblwiIGZvciBIVE1MIGNvbGxlY3Rpb25zXG5cdFx0Ly8gKGUuZy4sIGB0eXBlb2YgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJkaXZcIikgPT09IFwiZnVuY3Rpb25cImApLiAoZ2gtNDc1Nilcblx0XHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBvYmoubm9kZVR5cGUgIT09IFwibnVtYmVyXCIgJiZcblx0XHRcdHR5cGVvZiBvYmouaXRlbSAhPT0gXCJmdW5jdGlvblwiO1xuXHR9O1xuXG5cbnZhciBpc1dpbmRvdyA9IGZ1bmN0aW9uIGlzV2luZG93KCBvYmogKSB7XG5cdFx0cmV0dXJuIG9iaiAhPSBudWxsICYmIG9iaiA9PT0gb2JqLndpbmRvdztcblx0fTtcblxuXG52YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG5cblxuXG5cdHZhciBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzID0ge1xuXHRcdHR5cGU6IHRydWUsXG5cdFx0c3JjOiB0cnVlLFxuXHRcdG5vbmNlOiB0cnVlLFxuXHRcdG5vTW9kdWxlOiB0cnVlXG5cdH07XG5cblx0ZnVuY3Rpb24gRE9NRXZhbCggY29kZSwgbm9kZSwgZG9jICkge1xuXHRcdGRvYyA9IGRvYyB8fCBkb2N1bWVudDtcblxuXHRcdHZhciBpLCB2YWwsXG5cdFx0XHRzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudCggXCJzY3JpcHRcIiApO1xuXG5cdFx0c2NyaXB0LnRleHQgPSBjb2RlO1xuXHRcdGlmICggbm9kZSApIHtcblx0XHRcdGZvciAoIGkgaW4gcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDY0KywgRWRnZSAxOCtcblx0XHRcdFx0Ly8gU29tZSBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSBcIm5vbmNlXCIgcHJvcGVydHkgb24gc2NyaXB0cy5cblx0XHRcdFx0Ly8gT24gdGhlIG90aGVyIGhhbmQsIGp1c3QgdXNpbmcgYGdldEF0dHJpYnV0ZWAgaXMgbm90IGVub3VnaCBhc1xuXHRcdFx0XHQvLyB0aGUgYG5vbmNlYCBhdHRyaWJ1dGUgaXMgcmVzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIHdoZW5ldmVyIGl0XG5cdFx0XHRcdC8vIGJlY29tZXMgYnJvd3NpbmctY29udGV4dCBjb25uZWN0ZWQuXG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvaXNzdWVzLzIzNjlcblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI25vbmNlLWF0dHJpYnV0ZXNcblx0XHRcdFx0Ly8gVGhlIGBub2RlLmdldEF0dHJpYnV0ZWAgY2hlY2sgd2FzIGFkZGVkIGZvciB0aGUgc2FrZSBvZlxuXHRcdFx0XHQvLyBgalF1ZXJ5Lmdsb2JhbEV2YWxgIHNvIHRoYXQgaXQgY2FuIGZha2UgYSBub25jZS1jb250YWluaW5nIG5vZGVcblx0XHRcdFx0Ly8gdmlhIGFuIG9iamVjdC5cblx0XHRcdFx0dmFsID0gbm9kZVsgaSBdIHx8IG5vZGUuZ2V0QXR0cmlidXRlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCBpICk7XG5cdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoIGksIHZhbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGRvYy5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIHRvVHlwZSggb2JqICkge1xuXHRpZiAoIG9iaiA9PSBudWxsICkge1xuXHRcdHJldHVybiBvYmogKyBcIlwiO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5IChmdW5jdGlvbmlzaCBSZWdFeHApXG5cdHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiA/XG5cdFx0Y2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbCggb2JqICkgXSB8fCBcIm9iamVjdFwiIDpcblx0XHR0eXBlb2Ygb2JqO1xufVxuLyogZ2xvYmFsIFN5bWJvbCAqL1xuLy8gRGVmaW5pbmcgdGhpcyBnbG9iYWwgaW4gLmVzbGludHJjLmpzb24gd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5nIHRoZSBnbG9iYWxcbi8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBkZWZpbmUgZ2xvYmFsIG9ubHkgZm9yIHRoaXMgbW9kdWxlXG5cblxuXG52YXJcblx0dmVyc2lvbiA9IFwiMy42LjBcIixcblxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxuXHRqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH07XG5cbmpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7XG5cblx0Ly8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZFxuXHRqcXVlcnk6IHZlcnNpb24sXG5cblx0Y29uc3RydWN0b3I6IGpRdWVyeSxcblxuXHQvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDBcblx0bGVuZ3RoOiAwLFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdH0sXG5cblx0Ly8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUlxuXHQvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheVxuXHRnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7XG5cblx0XHQvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5XG5cdFx0aWYgKCBudW0gPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldFxuXHRcdHJldHVybiBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdO1xuXHR9LFxuXG5cdC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2tcblx0Ly8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpXG5cdHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkge1xuXG5cdFx0Ly8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXRcblx0XHR2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7XG5cblx0XHQvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKVxuXHRcdHJldC5wcmV2T2JqZWN0ID0gdGhpcztcblxuXHRcdC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0XG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHQvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LlxuXHRlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdHNsaWNlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApO1xuXHR9LFxuXG5cdGZpcnN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggMCApO1xuXHR9LFxuXG5cdGxhc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAtMSApO1xuXHR9LFxuXG5cdGV2ZW46IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAoIGkgKyAxICkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdG9kZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkuZ3JlcCggdGhpcywgZnVuY3Rpb24oIF9lbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdGVxOiBmdW5jdGlvbiggaSApIHtcblx0XHR2YXIgbGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApO1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTtcblx0fSxcblxuXHRlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpO1xuXHR9LFxuXG5cdC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS5cblx0Ly8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuXG5cdHB1c2g6IHB1c2gsXG5cdHNvcnQ6IGFyci5zb3J0LFxuXHRzcGxpY2U6IGFyci5zcGxpY2Vcbn07XG5cbmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIDAgXSB8fCB7fSxcblx0XHRpID0gMSxcblx0XHRsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICggdHlwZW9mIHRhcmdldCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0ZGVlcCA9IHRhcmdldDtcblxuXHRcdC8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIGkgXSB8fCB7fTtcblx0XHRpKys7XG5cdH1cblxuXHQvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSlcblx0aWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiICYmICFpc0Z1bmN0aW9uKCB0YXJnZXQgKSApIHtcblx0XHR0YXJnZXQgPSB7fTtcblx0fVxuXG5cdC8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZFxuXHRpZiAoIGkgPT09IGxlbmd0aCApIHtcblx0XHR0YXJnZXQgPSB0aGlzO1xuXHRcdGktLTtcblx0fVxuXG5cdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xuXHRcdGlmICggKCBvcHRpb25zID0gYXJndW1lbnRzWyBpIF0gKSAhPSBudWxsICkge1xuXG5cdFx0XHQvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XG5cdFx0XHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRcdGNvcHkgPSBvcHRpb25zWyBuYW1lIF07XG5cblx0XHRcdFx0Ly8gUHJldmVudCBPYmplY3QucHJvdG90eXBlIHBvbGx1dGlvblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICggbmFtZSA9PT0gXCJfX3Byb3RvX19cIiB8fCB0YXJnZXQgPT09IGNvcHkgKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0aWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29weSApIHx8XG5cdFx0XHRcdFx0KCBjb3B5SXNBcnJheSA9IEFycmF5LmlzQXJyYXkoIGNvcHkgKSApICkgKSB7XG5cdFx0XHRcdFx0c3JjID0gdGFyZ2V0WyBuYW1lIF07XG5cblx0XHRcdFx0XHQvLyBFbnN1cmUgcHJvcGVyIHR5cGUgZm9yIHRoZSBzb3VyY2UgdmFsdWVcblx0XHRcdFx0XHRpZiAoIGNvcHlJc0FycmF5ICYmICFBcnJheS5pc0FycmF5KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0gW107XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggIWNvcHlJc0FycmF5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHt9O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblxuXHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcblxuXHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGNvcHk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZVxuXHRleHBhbmRvOiBcImpRdWVyeVwiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cXEQvZywgXCJcIiApLFxuXG5cdC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlXG5cdGlzUmVhZHk6IHRydWUsXG5cblx0ZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCBtc2cgKTtcblx0fSxcblxuXHRub29wOiBmdW5jdGlvbigpIHt9LFxuXG5cdGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIHByb3RvLCBDdG9yO1xuXG5cdFx0Ly8gRGV0ZWN0IG9idmlvdXMgbmVnYXRpdmVzXG5cdFx0Ly8gVXNlIHRvU3RyaW5nIGluc3RlYWQgb2YgalF1ZXJ5LnR5cGUgdG8gY2F0Y2ggaG9zdCBvYmplY3RzXG5cdFx0aWYgKCAhb2JqIHx8IHRvU3RyaW5nLmNhbGwoIG9iaiApICE9PSBcIltvYmplY3QgT2JqZWN0XVwiICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHByb3RvID0gZ2V0UHJvdG8oIG9iaiApO1xuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIG5vIHByb3RvdHlwZSAoZS5nLiwgYE9iamVjdC5jcmVhdGUoIG51bGwgKWApIGFyZSBwbGFpblxuXHRcdGlmICggIXByb3RvICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIHByb3RvdHlwZSBhcmUgcGxhaW4gaWZmIHRoZXkgd2VyZSBjb25zdHJ1Y3RlZCBieSBhIGdsb2JhbCBPYmplY3QgZnVuY3Rpb25cblx0XHRDdG9yID0gaGFzT3duLmNhbGwoIHByb3RvLCBcImNvbnN0cnVjdG9yXCIgKSAmJiBwcm90by5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBmblRvU3RyaW5nLmNhbGwoIEN0b3IgKSA9PT0gT2JqZWN0RnVuY3Rpb25TdHJpbmc7XG5cdH0sXG5cblx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgbmFtZTtcblxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBwcm92aWRlZCBjb250ZXh0OyBmYWxscyBiYWNrIHRvIHRoZSBnbG9iYWwgb25lXG5cdC8vIGlmIG5vdCBzcGVjaWZpZWQuXG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlLCBvcHRpb25zLCBkb2MgKSB7XG5cdFx0RE9NRXZhbCggY29kZSwgeyBub25jZTogb3B0aW9ucyAmJiBvcHRpb25zLm5vbmNlIH0sIGRvYyApO1xuXHR9LFxuXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkge1xuXHRcdHZhciBsZW5ndGgsIGkgPSAwO1xuXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7XG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0Ly8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7XG5cdFx0dmFyIHJldCA9IHJlc3VsdHMgfHwgW107XG5cblx0XHRpZiAoIGFyciAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBpc0FycmF5TGlrZSggT2JqZWN0KCBhcnIgKSApICkge1xuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHJldCxcblx0XHRcdFx0XHR0eXBlb2YgYXJyID09PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFsgYXJyIF0gOiBhcnJcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guY2FsbCggcmV0LCBhcnIgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnIsIGkgKSB7XG5cdFx0cmV0dXJuIGFyciA9PSBudWxsID8gLTEgOiBpbmRleE9mLmNhbGwoIGFyciwgZWxlbSwgaSApO1xuXHR9LFxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdG1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHtcblx0XHR2YXIgbGVuID0gK3NlY29uZC5sZW5ndGgsXG5cdFx0XHRqID0gMCxcblx0XHRcdGkgPSBmaXJzdC5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdO1xuXHRcdH1cblxuXHRcdGZpcnN0Lmxlbmd0aCA9IGk7XG5cblx0XHRyZXR1cm4gZmlyc3Q7XG5cdH0sXG5cblx0Z3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ZXJ0ICkge1xuXHRcdHZhciBjYWxsYmFja0ludmVyc2UsXG5cdFx0XHRtYXRjaGVzID0gW10sXG5cdFx0XHRpID0gMCxcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aCxcblx0XHRcdGNhbGxiYWNrRXhwZWN0ID0gIWludmVydDtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXNcblx0XHQvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvblxuXHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0Y2FsbGJhY2tJbnZlcnNlID0gIWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7XG5cdFx0XHRpZiAoIGNhbGxiYWNrSW52ZXJzZSAhPT0gY2FsbGJhY2tFeHBlY3QgKSB7XG5cdFx0XHRcdG1hdGNoZXMucHVzaCggZWxlbXNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBtYXRjaGVzO1xuXHR9LFxuXG5cdC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHtcblx0XHR2YXIgbGVuZ3RoLCB2YWx1ZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0cmV0ID0gW107XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIgbmV3IHZhbHVlc1xuXHRcdGlmICggaXNBcnJheUxpa2UoIGVsZW1zICkgKSB7XG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIGVsZW1zICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdFx0cmV0dXJuIGZsYXQoIHJldCApO1xuXHR9LFxuXG5cdC8vIEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0c1xuXHRndWlkOiAxLFxuXG5cdC8vIGpRdWVyeS5zdXBwb3J0IGlzIG5vdCB1c2VkIGluIENvcmUgYnV0IG90aGVyIHByb2plY3RzIGF0dGFjaCB0aGVpclxuXHQvLyBwcm9wZXJ0aWVzIHRvIGl0IHNvIGl0IG5lZWRzIHRvIGV4aXN0LlxuXHRzdXBwb3J0OiBzdXBwb3J0XG59ICk7XG5cbmlmICggdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICkge1xuXHRqUXVlcnkuZm5bIFN5bWJvbC5pdGVyYXRvciBdID0gYXJyWyBTeW1ib2wuaXRlcmF0b3IgXTtcbn1cblxuLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwXG5qUXVlcnkuZWFjaCggXCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbFwiLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdFx0Y2xhc3MydHlwZVsgXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdH0gKTtcblxuZnVuY3Rpb24gaXNBcnJheUxpa2UoIG9iaiApIHtcblxuXHQvLyBTdXBwb3J0OiByZWFsIGlPUyA4LjIgb25seSAobm90IHJlcHJvZHVjaWJsZSBpbiBzaW11bGF0b3IpXG5cdC8vIGBpbmAgY2hlY2sgdXNlZCB0byBwcmV2ZW50IEpJVCBlcnJvciAoZ2gtMjE0NSlcblx0Ly8gaGFzT3duIGlzbid0IHVzZWQgaGVyZSBkdWUgdG8gZmFsc2UgbmVnYXRpdmVzXG5cdC8vIHJlZ2FyZGluZyBOb2RlbGlzdCBsZW5ndGggaW4gSUVcblx0dmFyIGxlbmd0aCA9ICEhb2JqICYmIFwibGVuZ3RoXCIgaW4gb2JqICYmIG9iai5sZW5ndGgsXG5cdFx0dHlwZSA9IHRvVHlwZSggb2JqICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBvYmogKSB8fCBpc1dpbmRvdyggb2JqICkgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHR5cGUgPT09IFwiYXJyYXlcIiB8fCBsZW5ndGggPT09IDAgfHxcblx0XHR0eXBlb2YgbGVuZ3RoID09PSBcIm51bWJlclwiICYmIGxlbmd0aCA+IDAgJiYgKCBsZW5ndGggLSAxICkgaW4gb2JqO1xufVxudmFyIFNpenpsZSA9XG4vKiFcbiAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lIHYyLjMuNlxuICogaHR0cHM6Ly9zaXp6bGVqcy5jb20vXG4gKlxuICogQ29weXJpZ2h0IEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwczovL2pzLmZvdW5kYXRpb24vXG4gKlxuICogRGF0ZTogMjAyMS0wMi0xNlxuICovXG4oIGZ1bmN0aW9uKCB3aW5kb3cgKSB7XG52YXIgaSxcblx0c3VwcG9ydCxcblx0RXhwcixcblx0Z2V0VGV4dCxcblx0aXNYTUwsXG5cdHRva2VuaXplLFxuXHRjb21waWxlLFxuXHRzZWxlY3QsXG5cdG91dGVybW9zdENvbnRleHQsXG5cdHNvcnRJbnB1dCxcblx0aGFzRHVwbGljYXRlLFxuXG5cdC8vIExvY2FsIGRvY3VtZW50IHZhcnNcblx0c2V0RG9jdW1lbnQsXG5cdGRvY3VtZW50LFxuXHRkb2NFbGVtLFxuXHRkb2N1bWVudElzSFRNTCxcblx0cmJ1Z2d5UVNBLFxuXHRyYnVnZ3lNYXRjaGVzLFxuXHRtYXRjaGVzLFxuXHRjb250YWlucyxcblxuXHQvLyBJbnN0YW5jZS1zcGVjaWZpYyBkYXRhXG5cdGV4cGFuZG8gPSBcInNpenpsZVwiICsgMSAqIG5ldyBEYXRlKCksXG5cdHByZWZlcnJlZERvYyA9IHdpbmRvdy5kb2N1bWVudCxcblx0ZGlycnVucyA9IDAsXG5cdGRvbmUgPSAwLFxuXHRjbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0dG9rZW5DYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdGNvbXBpbGVyQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRub25uYXRpdmVTZWxlY3RvckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH0sXG5cblx0Ly8gSW5zdGFuY2UgbWV0aG9kc1xuXHRoYXNPd24gPSAoIHt9ICkuaGFzT3duUHJvcGVydHksXG5cdGFyciA9IFtdLFxuXHRwb3AgPSBhcnIucG9wLFxuXHRwdXNoTmF0aXZlID0gYXJyLnB1c2gsXG5cdHB1c2ggPSBhcnIucHVzaCxcblx0c2xpY2UgPSBhcnIuc2xpY2UsXG5cblx0Ly8gVXNlIGEgc3RyaXBwZWQtZG93biBpbmRleE9mIGFzIGl0J3MgZmFzdGVyIHRoYW4gbmF0aXZlXG5cdC8vIGh0dHBzOi8vanNwZXJmLmNvbS90aG9yLWluZGV4b2YtdnMtZm9yLzVcblx0aW5kZXhPZiA9IGZ1bmN0aW9uKCBsaXN0LCBlbGVtICkge1xuXHRcdHZhciBpID0gMCxcblx0XHRcdGxlbiA9IGxpc3QubGVuZ3RoO1xuXHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0aWYgKCBsaXN0WyBpIF0gPT09IGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5cblx0Ym9vbGVhbnMgPSBcImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxcIiArXG5cdFx0XCJpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkXCIsXG5cblx0Ly8gUmVndWxhciBleHByZXNzaW9uc1xuXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNwYWNlXG5cdHdoaXRlc3BhY2UgPSBcIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCIsXG5cblx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1zeW50YXgtMy8jaWRlbnQtdG9rZW4tZGlhZ3JhbVxuXHRpZGVudGlmaWVyID0gXCIoPzpcXFxcXFxcXFtcXFxcZGEtZkEtRl17MSw2fVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XCI/fFxcXFxcXFxcW15cXFxcclxcXFxuXFxcXGZdfFtcXFxcdy1dfFteXFwwLVxcXFx4N2ZdKStcIixcblxuXHQvLyBBdHRyaWJ1dGUgc2VsZWN0b3JzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnNcblx0YXR0cmlidXRlcyA9IFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XCIgKyB3aGl0ZXNwYWNlICtcblxuXHRcdC8vIE9wZXJhdG9yIChjYXB0dXJlIDIpXG5cdFx0XCIqKFsqXiR8IX5dPz0pXCIgKyB3aGl0ZXNwYWNlICtcblxuXHRcdC8vIFwiQXR0cmlidXRlIHZhbHVlcyBtdXN0IGJlIENTUyBpZGVudGlmaWVycyBbY2FwdHVyZSA1XVxuXHRcdC8vIG9yIHN0cmluZ3MgW2NhcHR1cmUgMyBvciBjYXB0dXJlIDRdXCJcblx0XHRcIiooPzonKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCJ8KFwiICsgaWRlbnRpZmllciArIFwiKSl8KVwiICtcblx0XHR3aGl0ZXNwYWNlICsgXCIqXFxcXF1cIixcblxuXHRwc2V1ZG9zID0gXCI6KFwiICsgaWRlbnRpZmllciArIFwiKSg/OlxcXFwoKFwiICtcblxuXHRcdC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBwcmVGaWx0ZXIsIHByZWZlciBhcmd1bWVudHM6XG5cdFx0Ly8gMS4gcXVvdGVkIChjYXB0dXJlIDM7IGNhcHR1cmUgNCBvciBjYXB0dXJlIDUpXG5cdFx0XCIoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXxcIiArXG5cblx0XHQvLyAyLiBzaW1wbGUgKGNhcHR1cmUgNilcblx0XHRcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpW1xcXFxdXXxcIiArIGF0dHJpYnV0ZXMgKyBcIikqKXxcIiArXG5cblx0XHQvLyAzLiBhbnl0aGluZyBlbHNlIChjYXB0dXJlIDIpXG5cdFx0XCIuKlwiICtcblx0XHRcIilcXFxcKXwpXCIsXG5cblx0Ly8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcgdGhlIGxhdHRlclxuXHRyd2hpdGVzcGFjZSA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcIitcIiwgXCJnXCIgKSxcblx0cnRyaW0gPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIit8KCg/Ol58W15cXFxcXFxcXF0pKD86XFxcXFxcXFwuKSopXCIgK1xuXHRcdHdoaXRlc3BhY2UgKyBcIiskXCIsIFwiZ1wiICksXG5cblx0cmNvbW1hID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqLFwiICsgd2hpdGVzcGFjZSArIFwiKlwiICksXG5cdHJjb21iaW5hdG9ycyA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKihbPit+XXxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiKlwiICksXG5cdHJkZXNjZW5kID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwifD5cIiApLFxuXG5cdHJwc2V1ZG8gPSBuZXcgUmVnRXhwKCBwc2V1ZG9zICksXG5cdHJpZGVudGlmaWVyID0gbmV3IFJlZ0V4cCggXCJeXCIgKyBpZGVudGlmaWVyICsgXCIkXCIgKSxcblxuXHRtYXRjaEV4cHIgPSB7XG5cdFx0XCJJRFwiOiBuZXcgUmVnRXhwKCBcIl4jKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJDTEFTU1wiOiBuZXcgUmVnRXhwKCBcIl5cXFxcLihcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiVEFHXCI6IG5ldyBSZWdFeHAoIFwiXihcIiArIGlkZW50aWZpZXIgKyBcInxbKl0pXCIgKSxcblx0XHRcIkFUVFJcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBhdHRyaWJ1dGVzICksXG5cdFx0XCJQU0VVRE9cIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBwc2V1ZG9zICksXG5cdFx0XCJDSElMRFwiOiBuZXcgUmVnRXhwKCBcIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcXFwoXCIgK1xuXHRcdFx0d2hpdGVzcGFjZSArIFwiKihldmVufG9kZHwoKFsrLV18KShcXFxcZCopbnwpXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86KFsrLV18KVwiICtcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooXFxcXGQrKXwpKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfClcIiwgXCJpXCIgKSxcblx0XHRcImJvb2xcIjogbmV3IFJlZ0V4cCggXCJeKD86XCIgKyBib29sZWFucyArIFwiKSRcIiwgXCJpXCIgKSxcblxuXHRcdC8vIEZvciB1c2UgaW4gbGlicmFyaWVzIGltcGxlbWVudGluZyAuaXMoKVxuXHRcdC8vIFdlIHVzZSB0aGlzIGZvciBQT1MgbWF0Y2hpbmcgaW4gYHNlbGVjdGBcblx0XHRcIm5lZWRzQ29udGV4dFwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXFxcKFwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIiooKD86LVxcXFxkKT9cXFxcZCopXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KSg/PVteLV18JClcIiwgXCJpXCIgKVxuXHR9LFxuXG5cdHJodG1sID0gL0hUTUwkL2ksXG5cdHJpbnB1dHMgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyaGVhZGVyID0gL15oXFxkJC9pLFxuXG5cdHJuYXRpdmUgPSAvXltee10rXFx7XFxzKlxcW25hdGl2ZSBcXHcvLFxuXG5cdC8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9yc1xuXHRycXVpY2tFeHByID0gL14oPzojKFtcXHctXSspfChcXHcrKXxcXC4oW1xcdy1dKykpJC8sXG5cblx0cnNpYmxpbmcgPSAvWyt+XS8sXG5cblx0Ly8gQ1NTIGVzY2FwZXNcblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVyc1xuXHRydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCBcIlxcXFxcXFxcW1xcXFxkYS1mQS1GXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICsgXCI/fFxcXFxcXFxcKFteXFxcXHJcXFxcblxcXFxmXSlcIiwgXCJnXCIgKSxcblx0ZnVuZXNjYXBlID0gZnVuY3Rpb24oIGVzY2FwZSwgbm9uSGV4ICkge1xuXHRcdHZhciBoaWdoID0gXCIweFwiICsgZXNjYXBlLnNsaWNlKCAxICkgLSAweDEwMDAwO1xuXG5cdFx0cmV0dXJuIG5vbkhleCA/XG5cblx0XHRcdC8vIFN0cmlwIHRoZSBiYWNrc2xhc2ggcHJlZml4IGZyb20gYSBub24taGV4IGVzY2FwZSBzZXF1ZW5jZVxuXHRcdFx0bm9uSGV4IDpcblxuXHRcdFx0Ly8gUmVwbGFjZSBhIGhleGFkZWNpbWFsIGVzY2FwZSBzZXF1ZW5jZSB3aXRoIHRoZSBlbmNvZGVkIFVuaWNvZGUgY29kZSBwb2ludFxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMStcblx0XHRcdC8vIEZvciB2YWx1ZXMgb3V0c2lkZSB0aGUgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lIChCTVApLCBtYW51YWxseSBjb25zdHJ1Y3QgYVxuXHRcdFx0Ly8gc3Vycm9nYXRlIHBhaXJcblx0XHRcdGhpZ2ggPCAwID9cblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCArIDB4MTAwMDAgKSA6XG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApO1xuXHR9LFxuXG5cdC8vIENTUyBzdHJpbmcvaWRlbnRpZmllciBzZXJpYWxpemF0aW9uXG5cdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jY29tbW9uLXNlcmlhbGl6aW5nLWlkaW9tc1xuXHRyY3NzZXNjYXBlID0gLyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFwwLVxceDFmXFx4N2YtXFx1RkZGRlxcdy1dL2csXG5cdGZjc3Nlc2NhcGUgPSBmdW5jdGlvbiggY2gsIGFzQ29kZVBvaW50ICkge1xuXHRcdGlmICggYXNDb2RlUG9pbnQgKSB7XG5cblx0XHRcdC8vIFUrMDAwMCBOVUxMIGJlY29tZXMgVStGRkZEIFJFUExBQ0VNRU5UIENIQVJBQ1RFUlxuXHRcdFx0aWYgKCBjaCA9PT0gXCJcXDBcIiApIHtcblx0XHRcdFx0cmV0dXJuIFwiXFx1RkZGRFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb250cm9sIGNoYXJhY3RlcnMgYW5kIChkZXBlbmRlbnQgdXBvbiBwb3NpdGlvbikgbnVtYmVycyBnZXQgZXNjYXBlZCBhcyBjb2RlIHBvaW50c1xuXHRcdFx0cmV0dXJuIGNoLnNsaWNlKCAwLCAtMSApICsgXCJcXFxcXCIgK1xuXHRcdFx0XHRjaC5jaGFyQ29kZUF0KCBjaC5sZW5ndGggLSAxICkudG9TdHJpbmcoIDE2ICkgKyBcIiBcIjtcblx0XHR9XG5cblx0XHQvLyBPdGhlciBwb3RlbnRpYWxseS1zcGVjaWFsIEFTQ0lJIGNoYXJhY3RlcnMgZ2V0IGJhY2tzbGFzaC1lc2NhcGVkXG5cdFx0cmV0dXJuIFwiXFxcXFwiICsgY2g7XG5cdH0sXG5cblx0Ly8gVXNlZCBmb3IgaWZyYW1lc1xuXHQvLyBTZWUgc2V0RG9jdW1lbnQoKVxuXHQvLyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSBcIlBlcm1pc3Npb24gRGVuaWVkXCJcblx0Ly8gZXJyb3IgaW4gSUVcblx0dW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuXHRcdHNldERvY3VtZW50KCk7XG5cdH0sXG5cblx0aW5EaXNhYmxlZEZpZWxkc2V0ID0gYWRkQ29tYmluYXRvcihcblx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJmaWVsZHNldFwiO1xuXHRcdH0sXG5cdFx0eyBkaXI6IFwicGFyZW50Tm9kZVwiLCBuZXh0OiBcImxlZ2VuZFwiIH1cblx0KTtcblxuLy8gT3B0aW1pemUgZm9yIHB1c2guYXBwbHkoIF8sIE5vZGVMaXN0IClcbnRyeSB7XG5cdHB1c2guYXBwbHkoXG5cdFx0KCBhcnIgPSBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2MuY2hpbGROb2RlcyApICksXG5cdFx0cHJlZmVycmVkRG9jLmNoaWxkTm9kZXNcblx0KTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMFxuXHQvLyBEZXRlY3Qgc2lsZW50bHkgZmFpbGluZyBwdXNoLmFwcGx5XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0YXJyWyBwcmVmZXJyZWREb2MuY2hpbGROb2Rlcy5sZW5ndGggXS5ub2RlVHlwZTtcbn0gY2F0Y2ggKCBlICkge1xuXHRwdXNoID0geyBhcHBseTogYXJyLmxlbmd0aCA/XG5cblx0XHQvLyBMZXZlcmFnZSBzbGljZSBpZiBwb3NzaWJsZVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHB1c2hOYXRpdmUuYXBwbHkoIHRhcmdldCwgc2xpY2UuY2FsbCggZWxzICkgKTtcblx0XHR9IDpcblxuXHRcdC8vIFN1cHBvcnQ6IElFPDlcblx0XHQvLyBPdGhlcndpc2UgYXBwZW5kIGRpcmVjdGx5XG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0dmFyIGogPSB0YXJnZXQubGVuZ3RoLFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0Ly8gQ2FuJ3QgdHJ1c3QgTm9kZUxpc3QubGVuZ3RoXG5cdFx0XHR3aGlsZSAoICggdGFyZ2V0WyBqKysgXSA9IGVsc1sgaSsrIF0gKSApIHt9XG5cdFx0XHR0YXJnZXQubGVuZ3RoID0gaiAtIDE7XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgbSwgaSwgZWxlbSwgbmlkLCBtYXRjaCwgZ3JvdXBzLCBuZXdTZWxlY3Rvcixcblx0XHRuZXdDb250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQsXG5cblx0XHQvLyBub2RlVHlwZSBkZWZhdWx0cyB0byA5LCBzaW5jZSBjb250ZXh0IGRlZmF1bHRzIHRvIGRvY3VtZW50XG5cdFx0bm9kZVR5cGUgPSBjb250ZXh0ID8gY29udGV4dC5ub2RlVHlwZSA6IDk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGZyb20gY2FsbHMgd2l0aCBpbnZhbGlkIHNlbGVjdG9yIG9yIGNvbnRleHRcblx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgfHwgIXNlbGVjdG9yIHx8XG5cdFx0bm9kZVR5cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgJiYgbm9kZVR5cGUgIT09IDExICkge1xuXG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH1cblxuXHQvLyBUcnkgdG8gc2hvcnRjdXQgZmluZCBvcGVyYXRpb25zIChhcyBvcHBvc2VkIHRvIGZpbHRlcnMpIGluIEhUTUwgZG9jdW1lbnRzXG5cdGlmICggIXNlZWQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0XHRjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDtcblxuXHRcdGlmICggZG9jdW1lbnRJc0hUTUwgKSB7XG5cblx0XHRcdC8vIElmIHRoZSBzZWxlY3RvciBpcyBzdWZmaWNpZW50bHkgc2ltcGxlLCB0cnkgdXNpbmcgYSBcImdldCpCeSpcIiBET00gbWV0aG9kXG5cdFx0XHQvLyAoZXhjZXB0aW5nIERvY3VtZW50RnJhZ21lbnQgY29udGV4dCwgd2hlcmUgdGhlIG1ldGhvZHMgZG9uJ3QgZXhpc3QpXG5cdFx0XHRpZiAoIG5vZGVUeXBlICE9PSAxMSAmJiAoIG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApICkgKSB7XG5cblx0XHRcdFx0Ly8gSUQgc2VsZWN0b3Jcblx0XHRcdFx0aWYgKCAoIG0gPSBtYXRjaFsgMSBdICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb2N1bWVudCBjb250ZXh0XG5cdFx0XHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0XHRpZiAoIGVsZW0uaWQgPT09IG0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRWxlbWVudCBjb250ZXh0XG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgJiYgKCBlbGVtID0gbmV3Q29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApICkgJiZcblx0XHRcdFx0XHRcdFx0Y29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJlxuXHRcdFx0XHRcdFx0XHRlbGVtLmlkID09PSBtICkge1xuXG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHlwZSBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFsgMiBdICkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHNlbGVjdG9yICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0XHQvLyBDbGFzcyBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCAoIG0gPSBtYXRjaFsgMyBdICkgJiYgc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmXG5cdFx0XHRcdFx0Y29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUYWtlIGFkdmFudGFnZSBvZiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHRpZiAoIHN1cHBvcnQucXNhICYmXG5cdFx0XHRcdCFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF0gJiZcblx0XHRcdFx0KCAhcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSApICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOCBvbmx5XG5cdFx0XHRcdC8vIEV4Y2x1ZGUgb2JqZWN0IGVsZW1lbnRzXG5cdFx0XHRcdCggbm9kZVR5cGUgIT09IDEgfHwgY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIm9iamVjdFwiICkgKSB7XG5cblx0XHRcdFx0bmV3U2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0XHRcdFx0bmV3Q29udGV4dCA9IGNvbnRleHQ7XG5cblx0XHRcdFx0Ly8gcVNBIGNvbnNpZGVycyBlbGVtZW50cyBvdXRzaWRlIGEgc2NvcGluZyByb290IHdoZW4gZXZhbHVhdGluZyBjaGlsZCBvclxuXHRcdFx0XHQvLyBkZXNjZW5kYW50IGNvbWJpbmF0b3JzLCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50LlxuXHRcdFx0XHQvLyBJbiBzdWNoIGNhc2VzLCB3ZSB3b3JrIGFyb3VuZCB0aGUgYmVoYXZpb3IgYnkgcHJlZml4aW5nIGV2ZXJ5IHNlbGVjdG9yIGluIHRoZVxuXHRcdFx0XHQvLyBsaXN0IHdpdGggYW4gSUQgc2VsZWN0b3IgcmVmZXJlbmNpbmcgdGhlIHNjb3BlIGNvbnRleHQuXG5cdFx0XHRcdC8vIFRoZSB0ZWNobmlxdWUgaGFzIHRvIGJlIHVzZWQgYXMgd2VsbCB3aGVuIGEgbGVhZGluZyBjb21iaW5hdG9yIGlzIHVzZWRcblx0XHRcdFx0Ly8gYXMgc3VjaCBzZWxlY3RvcnMgYXJlIG5vdCByZWNvZ25pemVkIGJ5IHF1ZXJ5U2VsZWN0b3JBbGwuXG5cdFx0XHRcdC8vIFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGlzIHRlY2huaXF1ZS5cblx0XHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdCggcmRlc2NlbmQudGVzdCggc2VsZWN0b3IgKSB8fCByY29tYmluYXRvcnMudGVzdCggc2VsZWN0b3IgKSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRXhwYW5kIGNvbnRleHQgZm9yIHNpYmxpbmcgc2VsZWN0b3JzXG5cdFx0XHRcdFx0bmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8XG5cdFx0XHRcdFx0XHRjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gV2UgY2FuIHVzZSA6c2NvcGUgaW5zdGVhZCBvZiB0aGUgSUQgaGFjayBpZiB0aGUgYnJvd3NlclxuXHRcdFx0XHRcdC8vIHN1cHBvcnRzIGl0ICYgaWYgd2UncmUgbm90IGNoYW5naW5nIHRoZSBjb250ZXh0LlxuXHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAhPT0gY29udGV4dCB8fCAhc3VwcG9ydC5zY29wZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2FwdHVyZSB0aGUgY29udGV4dCBJRCwgc2V0dGluZyBpdCBmaXJzdCBpZiBuZWNlc3Nhcnlcblx0XHRcdFx0XHRcdGlmICggKCBuaWQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggXCJpZFwiICkgKSApIHtcblx0XHRcdFx0XHRcdFx0bmlkID0gbmlkLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHQuc2V0QXR0cmlidXRlKCBcImlkXCIsICggbmlkID0gZXhwYW5kbyApICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJlZml4IGV2ZXJ5IHNlbGVjdG9yIGluIHRoZSBsaXN0XG5cdFx0XHRcdFx0Z3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0XHRcdFx0aSA9IGdyb3Vwcy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRncm91cHNbIGkgXSA9ICggbmlkID8gXCIjXCIgKyBuaWQgOiBcIjpzY29wZVwiICkgKyBcIiBcIiArXG5cdFx0XHRcdFx0XHRcdHRvU2VsZWN0b3IoIGdyb3Vwc1sgaSBdICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oIFwiLFwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsXG5cdFx0XHRcdFx0XHRuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yIClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9IGNhdGNoICggcXNhRXJyb3IgKSB7XG5cdFx0XHRcdFx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRpZiAoIG5pZCA9PT0gZXhwYW5kbyApIHtcblx0XHRcdFx0XHRcdGNvbnRleHQucmVtb3ZlQXR0cmlidXRlKCBcImlkXCIgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBbGwgb3RoZXJzXG5cdHJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApO1xufVxuXG4vKipcbiAqIENyZWF0ZSBrZXktdmFsdWUgY2FjaGVzIG9mIGxpbWl0ZWQgc2l6ZVxuICogQHJldHVybnMge2Z1bmN0aW9uKHN0cmluZywgb2JqZWN0KX0gUmV0dXJucyB0aGUgT2JqZWN0IGRhdGEgYWZ0ZXIgc3RvcmluZyBpdCBvbiBpdHNlbGYgd2l0aFxuICpcdHByb3BlcnR5IG5hbWUgdGhlIChzcGFjZS1zdWZmaXhlZCkgc3RyaW5nIGFuZCAoaWYgdGhlIGNhY2hlIGlzIGxhcmdlciB0aGFuIEV4cHIuY2FjaGVMZW5ndGgpXG4gKlx0ZGVsZXRpbmcgdGhlIG9sZGVzdCBlbnRyeVxuICovXG5mdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHtcblx0dmFyIGtleXMgPSBbXTtcblxuXHRmdW5jdGlvbiBjYWNoZSgga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIFVzZSAoa2V5ICsgXCIgXCIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMxNTcpXG5cdFx0aWYgKCBrZXlzLnB1c2goIGtleSArIFwiIFwiICkgPiBFeHByLmNhY2hlTGVuZ3RoICkge1xuXG5cdFx0XHQvLyBPbmx5IGtlZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXNcblx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5cy5zaGlmdCgpIF07XG5cdFx0fVxuXHRcdHJldHVybiAoIGNhY2hlWyBrZXkgKyBcIiBcIiBdID0gdmFsdWUgKTtcblx0fVxuXHRyZXR1cm4gY2FjaGU7XG59XG5cbi8qKlxuICogTWFyayBhIGZ1bmN0aW9uIGZvciBzcGVjaWFsIHVzZSBieSBTaXp6bGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBtYXJrXG4gKi9cbmZ1bmN0aW9uIG1hcmtGdW5jdGlvbiggZm4gKSB7XG5cdGZuWyBleHBhbmRvIF0gPSB0cnVlO1xuXHRyZXR1cm4gZm47XG59XG5cbi8qKlxuICogU3VwcG9ydCB0ZXN0aW5nIHVzaW5nIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUgY3JlYXRlZCBlbGVtZW50IGFuZCByZXR1cm5zIGEgYm9vbGVhbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0KCBmbiApIHtcblx0dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJmaWVsZHNldFwiICk7XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gISFmbiggZWwgKTtcblx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGZpbmFsbHkge1xuXG5cdFx0Ly8gUmVtb3ZlIGZyb20gaXRzIHBhcmVudCBieSBkZWZhdWx0XG5cdFx0aWYgKCBlbC5wYXJlbnROb2RlICkge1xuXHRcdFx0ZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWwgKTtcblx0XHR9XG5cblx0XHQvLyByZWxlYXNlIG1lbW9yeSBpbiBJRVxuXHRcdGVsID0gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIEFkZHMgdGhlIHNhbWUgaGFuZGxlciBmb3IgYWxsIG9mIHRoZSBzcGVjaWZpZWQgYXR0cnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBhdHRycyBQaXBlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgVGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgYXBwbGllZFxuICovXG5mdW5jdGlvbiBhZGRIYW5kbGUoIGF0dHJzLCBoYW5kbGVyICkge1xuXHR2YXIgYXJyID0gYXR0cnMuc3BsaXQoIFwifFwiICksXG5cdFx0aSA9IGFyci5sZW5ndGg7XG5cblx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0RXhwci5hdHRySGFuZGxlWyBhcnJbIGkgXSBdID0gaGFuZGxlcjtcblx0fVxufVxuXG4vKipcbiAqIENoZWNrcyBkb2N1bWVudCBvcmRlciBvZiB0d28gc2libGluZ3NcbiAqIEBwYXJhbSB7RWxlbWVudH0gYVxuICogQHBhcmFtIHtFbGVtZW50fSBiXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBSZXR1cm5zIGxlc3MgdGhhbiAwIGlmIGEgcHJlY2VkZXMgYiwgZ3JlYXRlciB0aGFuIDAgaWYgYSBmb2xsb3dzIGJcbiAqL1xuZnVuY3Rpb24gc2libGluZ0NoZWNrKCBhLCBiICkge1xuXHR2YXIgY3VyID0gYiAmJiBhLFxuXHRcdGRpZmYgPSBjdXIgJiYgYS5ub2RlVHlwZSA9PT0gMSAmJiBiLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRhLnNvdXJjZUluZGV4IC0gYi5zb3VyY2VJbmRleDtcblxuXHQvLyBVc2UgSUUgc291cmNlSW5kZXggaWYgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXNcblx0aWYgKCBkaWZmICkge1xuXHRcdHJldHVybiBkaWZmO1xuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgYiBmb2xsb3dzIGFcblx0aWYgKCBjdXIgKSB7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGN1ci5uZXh0U2libGluZyApICkge1xuXHRcdFx0aWYgKCBjdXIgPT09IGIgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYSA/IDEgOiAtMTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9uc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuICggbmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCIgKSAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciA6ZW5hYmxlZC86ZGlzYWJsZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZGlzYWJsZWQgdHJ1ZSBmb3IgOmRpc2FibGVkOyBmYWxzZSBmb3IgOmVuYWJsZWRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGRpc2FibGVkICkge1xuXG5cdC8vIEtub3duIDpkaXNhYmxlZCBmYWxzZSBwb3NpdGl2ZXM6IGZpZWxkc2V0W2Rpc2FibGVkXSA+IGxlZ2VuZDpudGgtb2YtdHlwZShuKzIpIDpjYW4tZGlzYWJsZVxuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBPbmx5IGNlcnRhaW4gZWxlbWVudHMgY2FuIG1hdGNoIDplbmFibGVkIG9yIDpkaXNhYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWVuYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1kaXNhYmxlZFxuXHRcdGlmICggXCJmb3JtXCIgaW4gZWxlbSApIHtcblxuXHRcdFx0Ly8gQ2hlY2sgZm9yIGluaGVyaXRlZCBkaXNhYmxlZG5lc3Mgb24gcmVsZXZhbnQgbm9uLWRpc2FibGVkIGVsZW1lbnRzOlxuXHRcdFx0Ly8gKiBsaXN0ZWQgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgZmllbGRzZXRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjYXRlZ29yeS1saXN0ZWRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LWZlLWRpc2FibGVkXG5cdFx0XHQvLyAqIG9wdGlvbiBlbGVtZW50cyBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1vcHRpb24tZGlzYWJsZWRcblx0XHRcdC8vIEFsbCBzdWNoIGVsZW1lbnRzIGhhdmUgYSBcImZvcm1cIiBwcm9wZXJ0eS5cblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICYmIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdC8vIE9wdGlvbiBlbGVtZW50cyBkZWZlciB0byBhIHBhcmVudCBvcHRncm91cCBpZiBwcmVzZW50XG5cdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0ucGFyZW50Tm9kZS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gMTFcblx0XHRcdFx0Ly8gVXNlIHRoZSBpc0Rpc2FibGVkIHNob3J0Y3V0IHByb3BlcnR5IHRvIGNoZWNrIGZvciBkaXNhYmxlZCBmaWVsZHNldCBhbmNlc3RvcnNcblx0XHRcdFx0cmV0dXJuIGVsZW0uaXNEaXNhYmxlZCA9PT0gZGlzYWJsZWQgfHxcblxuXHRcdFx0XHRcdC8vIFdoZXJlIHRoZXJlIGlzIG5vIGlzRGlzYWJsZWQsIGNoZWNrIG1hbnVhbGx5XG5cdFx0XHRcdFx0LyoganNoaW50IC1XMDE4ICovXG5cdFx0XHRcdFx0ZWxlbS5pc0Rpc2FibGVkICE9PSAhZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRpbkRpc2FibGVkRmllbGRzZXQoIGVsZW0gKSA9PT0gZGlzYWJsZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblxuXHRcdC8vIFRyeSB0byB3aW5ub3cgb3V0IGVsZW1lbnRzIHRoYXQgY2FuJ3QgYmUgZGlzYWJsZWQgYmVmb3JlIHRydXN0aW5nIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eS5cblx0XHQvLyBTb21lIHZpY3RpbXMgZ2V0IGNhdWdodCBpbiBvdXIgbmV0IChsYWJlbCwgbGVnZW5kLCBtZW51LCB0cmFjayksIGJ1dCBpdCBzaG91bGRuJ3Rcblx0XHQvLyBldmVuIGV4aXN0IG9uIHRoZW0sIGxldCBhbG9uZSBoYXZlIGEgYm9vbGVhbiB2YWx1ZS5cblx0XHR9IGVsc2UgaWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHR9XG5cblx0XHQvLyBSZW1haW5pbmcgZWxlbWVudHMgYXJlIG5laXRoZXIgOmVuYWJsZWQgbm9yIDpkaXNhYmxlZFxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICovXG5mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmbiApIHtcblx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGFyZ3VtZW50ICkge1xuXHRcdGFyZ3VtZW50ID0gK2FyZ3VtZW50O1xuXHRcdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0dmFyIGosXG5cdFx0XHRcdG1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksXG5cdFx0XHRcdGkgPSBtYXRjaEluZGV4ZXMubGVuZ3RoO1xuXG5cdFx0XHQvLyBNYXRjaCBlbGVtZW50cyBmb3VuZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4ZXNcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoIHNlZWRbICggaiA9IG1hdGNoSW5kZXhlc1sgaSBdICkgXSApIHtcblx0XHRcdFx0XHRzZWVkWyBqIF0gPSAhKCBtYXRjaGVzWyBqIF0gPSBzZWVkWyBqIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSApO1xufVxuXG4vKipcbiAqIENoZWNrcyBhIG5vZGUgZm9yIHZhbGlkaXR5IGFzIGEgU2l6emxlIGNvbnRleHRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3Q9fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7RWxlbWVudHxPYmplY3R8Qm9vbGVhbn0gVGhlIGlucHV0IG5vZGUgaWYgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIGEgZmFsc3kgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdGVzdENvbnRleHQoIGNvbnRleHQgKSB7XG5cdHJldHVybiBjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnRleHQ7XG59XG5cbi8vIEV4cG9zZSBzdXBwb3J0IHZhcnMgZm9yIGNvbnZlbmllbmNlXG5zdXBwb3J0ID0gU2l6emxlLnN1cHBvcnQgPSB7fTtcblxuLyoqXG4gKiBEZXRlY3RzIFhNTCBub2Rlc1xuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gZWxlbSBBbiBlbGVtZW50IG9yIGEgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmZiBlbGVtIGlzIGEgbm9uLUhUTUwgWE1MIG5vZGVcbiAqL1xuaXNYTUwgPSBTaXp6bGUuaXNYTUwgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0dmFyIG5hbWVzcGFjZSA9IGVsZW0gJiYgZWxlbS5uYW1lc3BhY2VVUkksXG5cdFx0ZG9jRWxlbSA9IGVsZW0gJiYgKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApLmRvY3VtZW50RWxlbWVudDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PThcblx0Ly8gQXNzdW1lIEhUTUwgd2hlbiBkb2N1bWVudEVsZW1lbnQgZG9lc24ndCB5ZXQgZXhpc3QsIHN1Y2ggYXMgaW5zaWRlIGxvYWRpbmcgaWZyYW1lc1xuXHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvNDgzM1xuXHRyZXR1cm4gIXJodG1sLnRlc3QoIG5hbWVzcGFjZSB8fCBkb2NFbGVtICYmIGRvY0VsZW0ubm9kZU5hbWUgfHwgXCJIVE1MXCIgKTtcbn07XG5cbi8qKlxuICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudFxuICovXG5zZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2RlICkge1xuXHR2YXIgaGFzQ29tcGFyZSwgc3ViV2luZG93LFxuXHRcdGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYztcblxuXHQvLyBSZXR1cm4gZWFybHkgaWYgZG9jIGlzIGludmFsaWQgb3IgYWxyZWFkeSBzZWxlY3RlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoIGRvYyA9PSBkb2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50O1xuXHR9XG5cblx0Ly8gVXBkYXRlIGdsb2JhbCB2YXJpYWJsZXNcblx0ZG9jdW1lbnQgPSBkb2M7XG5cdGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdGRvY3VtZW50SXNIVE1MID0gIWlzWE1MKCBkb2N1bWVudCApO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCtcblx0Ly8gQWNjZXNzaW5nIGlmcmFtZSBkb2N1bWVudHMgYWZ0ZXIgdW5sb2FkIHRocm93cyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3JzIChqUXVlcnkgIzEzOTM2KVxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoIHByZWZlcnJlZERvYyAhPSBkb2N1bWVudCAmJlxuXHRcdCggc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcgKSAmJiBzdWJXaW5kb3cudG9wICE9PSBzdWJXaW5kb3cgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMSwgRWRnZVxuXHRcdGlmICggc3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJ1bmxvYWRcIiwgdW5sb2FkSGFuZGxlciwgZmFsc2UgKTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMCBvbmx5XG5cdFx0fSBlbHNlIGlmICggc3ViV2luZG93LmF0dGFjaEV2ZW50ICkge1xuXHRcdFx0c3ViV2luZG93LmF0dGFjaEV2ZW50KCBcIm9udW5sb2FkXCIsIHVubG9hZEhhbmRsZXIgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gMTErLCBFZGdlIDEyIC0gMTgrLCBDaHJvbWUgPD0xNiAtIDI1IG9ubHksIEZpcmVmb3ggPD0zLjYgLSAzMSBvbmx5LFxuXHQvLyBTYWZhcmkgNCAtIDUgb25seSwgT3BlcmEgPD0xMS42IC0gMTIueCBvbmx5XG5cdC8vIElFL0VkZ2UgJiBvbGRlciBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSA6c2NvcGUgcHNldWRvLWNsYXNzLlxuXHQvLyBTdXBwb3J0OiBTYWZhcmkgNi4wIG9ubHlcblx0Ly8gU2FmYXJpIDYuMCBzdXBwb3J0cyA6c2NvcGUgYnV0IGl0J3MgYW4gYWxpYXMgb2YgOnJvb3QgdGhlcmUuXG5cdHN1cHBvcnQuc2NvcGUgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblx0XHRyZXR1cm4gdHlwZW9mIGVsLnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdCFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpzY29wZSBmaWVsZHNldCBkaXZcIiApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8qIEF0dHJpYnV0ZXNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFN1cHBvcnQ6IElFPDhcblx0Ly8gVmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSByZXR1cm5zIGF0dHJpYnV0ZXMgYW5kIG5vdCBwcm9wZXJ0aWVzXG5cdC8vIChleGNlcHRpbmcgSUU4IGJvb2xlYW5zKVxuXHRzdXBwb3J0LmF0dHJpYnV0ZXMgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5jbGFzc05hbWUgPSBcImlcIjtcblx0XHRyZXR1cm4gIWVsLmdldEF0dHJpYnV0ZSggXCJjbGFzc05hbWVcIiApO1xuXHR9ICk7XG5cblx0LyogZ2V0RWxlbWVudChzKUJ5KlxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpIHJldHVybnMgb25seSBlbGVtZW50c1xuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZWwuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIFwiXCIgKSApO1xuXHRcdHJldHVybiAhZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwiKlwiICkubGVuZ3RoO1xuXHR9ICk7XG5cblx0Ly8gU3VwcG9ydDogSUU8OVxuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKTtcblxuXHQvLyBTdXBwb3J0OiBJRTwxMFxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWVcblx0Ly8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbW1hdGljYWxseS1zZXQgbmFtZXMsXG5cdC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdFxuXHRzdXBwb3J0LmdldEJ5SWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlkID0gZXhwYW5kbztcblx0XHRyZXR1cm4gIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lIHx8ICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSggZXhwYW5kbyApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8vIElEIGZpbHRlciBhbmQgZmluZFxuXHRpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHtcblx0XHRFeHByLmZpbHRlclsgXCJJRFwiIF0gPSBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBcImlkXCIgKSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdEV4cHIuZmluZFsgXCJJRFwiIF0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cdFx0XHRcdHJldHVybiBlbGVtID8gWyBlbGVtIF0gOiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdEV4cHIuZmlsdGVyWyBcIklEXCIgXSA9ICBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBcImlkXCIgKTtcblx0XHRcdFx0cmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDcgb25seVxuXHRcdC8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXRcblx0XHRFeHByLmZpbmRbIFwiSURcIiBdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIG5vZGUsIGksIGVsZW1zLFxuXHRcdFx0XHRcdGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXG5cdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdC8vIFZlcmlmeSB0aGUgaWQgYXR0cmlidXRlXG5cdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZhbGwgYmFjayBvbiBnZXRFbGVtZW50c0J5TmFtZVxuXHRcdFx0XHRcdGVsZW1zID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSggaWQgKTtcblx0XHRcdFx0XHRpID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1zWyBpKysgXSApICkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8vIFRhZ1xuXHRFeHByLmZpbmRbIFwiVEFHXCIgXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgP1xuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTlxuXHRcdFx0fSBlbHNlIGlmICggc3VwcG9ydC5xc2EgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApO1xuXHRcdFx0fVxuXHRcdH0gOlxuXG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHR0bXAgPSBbXSxcblx0XHRcdFx0aSA9IDAsXG5cblx0XHRcdFx0Ly8gQnkgaGFwcHkgY29pbmNpZGVuY2UsIGEgKGJyb2tlbikgZ0VCVE4gYXBwZWFycyBvbiBEb2N1bWVudEZyYWdtZW50IG5vZGVzIHRvb1xuXHRcdFx0XHRyZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHNcblx0XHRcdGlmICggdGFnID09PSBcIipcIiApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSByZXN1bHRzWyBpKysgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdHRtcC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRtcDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdH07XG5cblx0Ly8gQ2xhc3Ncblx0RXhwci5maW5kWyBcIkNMQVNTXCIgXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkge1xuXHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XG5cblx0Ly8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSlcblx0cmJ1Z2d5TWF0Y2hlcyA9IFtdO1xuXG5cdC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChDaHJvbWUgMjEpXG5cdC8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJvclxuXHQvLyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZyYW1lXG5cdC8vIFNvLCB3ZSBhbGxvdyA6Zm9jdXMgdG8gcGFzcyB0aHJvdWdoIFFTQSBhbGwgdGhlIHRpbWUgdG8gYXZvaWQgdGhlIElFIGVycm9yXG5cdC8vIFNlZSBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzNzhcblx0cmJ1Z2d5UVNBID0gW107XG5cblx0aWYgKCAoIHN1cHBvcnQucXNhID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkgKSApIHtcblxuXHRcdC8vIEJ1aWxkIFFTQSByZWdleFxuXHRcdC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmlcblx0XHRhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHRcdFx0dmFyIGlucHV0O1xuXG5cdFx0XHQvLyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlXG5cdFx0XHQvLyBUaGlzIGlzIHRvIHRlc3QgSUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxpY2l0bHlcblx0XHRcdC8vIHNldHRpbmcgYSBib29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLFxuXHRcdFx0Ly8gc2luY2UgaXRzIHByZXNlbmNlIHNob3VsZCBiZSBlbm91Z2hcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OVxuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pbm5lckhUTUwgPSBcIjxhIGlkPSdcIiArIGV4cGFuZG8gKyBcIic+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGlkPSdcIiArIGV4cGFuZG8gKyBcIi1cXHJcXFxcJyBtc2FsbG93Y2FwdHVyZT0nJz5cIiArXG5cdFx0XHRcdFwiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4LCBPcGVyYSAxMS0xMi4xNlxuXHRcdFx0Ly8gTm90aGluZyBzaG91bGQgYmUgc2VsZWN0ZWQgd2hlbiBlbXB0eSBzdHJpbmdzIGZvbGxvdyBePSBvciAkPSBvciAqPVxuXHRcdFx0Ly8gVGhlIHRlc3QgYXR0cmlidXRlIG11c3QgYmUgdW5rbm93biBpbiBPcGVyYSBidXQgXCJzYWZlXCIgZm9yIFdpblJUXG5cdFx0XHQvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2hoNDY1Mzg4LmFzcHgjYXR0cmlidXRlX3NlY3Rpb25cblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbXNhbGxvd2NhcHR1cmVePScnXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbKl4kXT1cIiArIHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEJvb2xlYW4gYXR0cmlidXRlcyBhbmQgXCJ2YWx1ZVwiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHlcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW3NlbGVjdGVkXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKig/OnZhbHVlfFwiICsgYm9vbGVhbnMgKyBcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWU8MjksIEFuZHJvaWQ8NC40LCBTYWZhcmk8Ny4wKywgaU9TPDcuMCssIFBoYW50b21KUzwxLjkuOCtcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW2lkfj1cIiArIGV4cGFuZG8gKyBcIi1dXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIn49XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0XHQvLyBJRSAxMS9FZGdlIGRvbid0IGZpbmQgZWxlbWVudHMgb24gYSBgW25hbWU9JyddYCBxdWVyeSBpbiBzb21lIGNhc2VzLlxuXHRcdFx0Ly8gQWRkaW5nIGEgdGVtcG9yYXJ5IGF0dHJpYnV0ZSB0byB0aGUgZG9jdW1lbnQgYmVmb3JlIHRoZSBzZWxlY3Rpb24gd29ya3Ncblx0XHRcdC8vIGFyb3VuZCB0aGUgaXNzdWUuXG5cdFx0XHQvLyBJbnRlcmVzdGluZ2x5LCBJRSAxMCAmIG9sZGVyIGRvbid0IHNlZW0gdG8gaGF2ZSB0aGUgaXNzdWUuXG5cdFx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJcIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltuYW1lPScnXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIio9XCIgK1xuXHRcdFx0XHRcdHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBXZWJraXQvT3BlcmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbiBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpjaGVja2VkXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjpjaGVja2VkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrLCBpT1MgOCtcblx0XHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTFcblx0XHRcdC8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmxpbmctY29tYmluYXRvciBzZWxlY3RvcmAgZmFpbHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiYSNcIiArIGV4cGFuZG8gKyBcIisqXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIi4jLitbK35dXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTMuNiAtIDUgb25seVxuXHRcdFx0Ly8gT2xkIEZpcmVmb3ggZG9lc24ndCB0aHJvdyBvbiBhIGJhZGx5LWVzY2FwZWQgaWRlbnRpZmllci5cblx0XHRcdGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiXFxcXFxcZlwiICk7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbXFxcXHJcXFxcblxcXFxmXVwiICk7XG5cdFx0fSApO1xuXG5cdFx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+XCIgK1xuXHRcdFx0XHRcIjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogV2luZG93cyA4IE5hdGl2ZSBBcHBzXG5cdFx0XHQvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRyaWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnRcblx0XHRcdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJoaWRkZW5cIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJEXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBFbmZvcmNlIGNhc2Utc2Vuc2l0aXZpdHkgb2YgbmFtZSBhdHRyaWJ1dGVcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbmFtZT1kXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqWypeJHwhfl0/PVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjplbmFibGVkXCIgKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU5LTExK1xuXHRcdFx0Ly8gSUUncyA6ZGlzYWJsZWQgc2VsZWN0b3IgZG9lcyBub3QgcGljayB1cCB0aGUgY2hpbGRyZW4gb2YgZGlzYWJsZWQgZmllbGRzZXRzXG5cdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCI6ZGlzYWJsZWRcIiApLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBPcGVyYSAxMCAtIDExIG9ubHlcblx0XHRcdC8vIE9wZXJhIDEwLTExIGRvZXMgbm90IHRocm93IG9uIHBvc3QtY29tbWEgaW52YWxpZCBwc2V1ZG9zXG5cdFx0XHRlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIiosOnhcIiApO1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiLC4qOlwiICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50ZXN0KCAoIG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXMgfHxcblx0XHRkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvciApICkgKSApIHtcblxuXHRcdGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdFx0XHQvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3Jcblx0XHRcdC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpXG5cdFx0XHRzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBlbCwgXCIqXCIgKTtcblxuXHRcdFx0Ly8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvblxuXHRcdFx0Ly8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2UgaW5zdGVhZFxuXHRcdFx0bWF0Y2hlcy5jYWxsKCBlbCwgXCJbcyE9JyddOnhcIiApO1xuXHRcdFx0cmJ1Z2d5TWF0Y2hlcy5wdXNoKCBcIiE9XCIsIHBzZXVkb3MgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKCBcInxcIiApICk7XG5cdHJidWdneU1hdGNoZXMgPSByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oIFwifFwiICkgKTtcblxuXHQvKiBDb250YWluc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cdGhhc0NvbXBhcmUgPSBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gKTtcblxuXHQvLyBFbGVtZW50IGNvbnRhaW5zIGFub3RoZXJcblx0Ly8gUHVycG9zZWZ1bGx5IHNlbGYtZXhjbHVzaXZlXG5cdC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmXG5cdGNvbnRhaW5zID0gaGFzQ29tcGFyZSB8fCBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29udGFpbnMgKSA/XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHR2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLFxuXHRcdFx0XHRidXAgPSBiICYmIGIucGFyZW50Tm9kZTtcblx0XHRcdHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRhZG93bi5jb250YWlucyA/XG5cdFx0XHRcdFx0YWRvd24uY29udGFpbnMoIGJ1cCApIDpcblx0XHRcdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTZcblx0XHRcdCkgKTtcblx0XHR9IDpcblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdGlmICggYiApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGIgPSBiLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdFx0XHRpZiAoIGIgPT09IGEgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdC8qIFNvcnRpbmdcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0c29ydE9yZGVyID0gaGFzQ29tcGFyZSA/XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRmxhZyBmb3IgZHVwbGljYXRlIHJlbW92YWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Ly8gU29ydCBvbiBtZXRob2QgZXhpc3RlbmNlIGlmIG9ubHkgb25lIGlucHV0IGhhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuXHRcdHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtcblx0XHRpZiAoIGNvbXBhcmUgKSB7XG5cdFx0XHRyZXR1cm4gY29tcGFyZTtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50XG5cdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRjb21wYXJlID0gKCBhLm93bmVyRG9jdW1lbnQgfHwgYSApID09ICggYi5vd25lckRvY3VtZW50IHx8IGIgKSA/XG5cdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWRcblx0XHRcdDE7XG5cblx0XHQvLyBEaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRpZiAoIGNvbXBhcmUgJiAxIHx8XG5cdFx0XHQoICFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUgKSApIHtcblxuXHRcdFx0Ly8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJlZmVycmVkIGRvY3VtZW50XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0aWYgKCBhID09IGRvY3VtZW50IHx8IGEub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiZcblx0XHRcdFx0Y29udGFpbnMoIHByZWZlcnJlZERvYywgYSApICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRpZiAoIGIgPT0gZG9jdW1lbnQgfHwgYi5vd25lckRvY3VtZW50ID09IHByZWZlcnJlZERvYyAmJlxuXHRcdFx0XHRjb250YWlucyggcHJlZmVycmVkRG9jLCBiICkgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlclxuXHRcdFx0cmV0dXJuIHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7XG5cdH0gOlxuXHRmdW5jdGlvbiggYSwgYiApIHtcblxuXHRcdC8vIEV4aXQgZWFybHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0YXVwID0gYS5wYXJlbnROb2RlLFxuXHRcdFx0YnVwID0gYi5wYXJlbnROb2RlLFxuXHRcdFx0YXAgPSBbIGEgXSxcblx0XHRcdGJwID0gWyBiIF07XG5cblx0XHQvLyBQYXJlbnRsZXNzIG5vZGVzIGFyZSBlaXRoZXIgZG9jdW1lbnRzIG9yIGRpc2Nvbm5lY3RlZFxuXHRcdGlmICggIWF1cCB8fCAhYnVwICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG5cdFx0XHRyZXR1cm4gYSA9PSBkb2N1bWVudCA/IC0xIDpcblx0XHRcdFx0YiA9PSBkb2N1bWVudCA/IDEgOlxuXHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIGVxZXFlcSAqL1xuXHRcdFx0XHRhdXAgPyAtMSA6XG5cdFx0XHRcdGJ1cCA/IDEgOlxuXHRcdFx0XHRzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cblx0XHQvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzLCB3ZSBjYW4gZG8gYSBxdWljayBjaGVja1xuXHRcdH0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkge1xuXHRcdFx0cmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSB3ZSBuZWVkIGZ1bGwgbGlzdHMgb2YgdGhlaXIgYW5jZXN0b3JzIGZvciBjb21wYXJpc29uXG5cdFx0Y3VyID0gYTtcblx0XHR3aGlsZSAoICggY3VyID0gY3VyLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdGFwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblx0XHRjdXIgPSBiO1xuXHRcdHdoaWxlICggKCBjdXIgPSBjdXIucGFyZW50Tm9kZSApICkge1xuXHRcdFx0YnAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3lcblx0XHR3aGlsZSAoIGFwWyBpIF0gPT09IGJwWyBpIF0gKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGkgP1xuXG5cdFx0XHQvLyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3Jcblx0XHRcdHNpYmxpbmdDaGVjayggYXBbIGkgXSwgYnBbIGkgXSApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIG5vZGVzIGluIG91ciBkb2N1bWVudCBzb3J0IGZpcnN0XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG5cdFx0XHRhcFsgaSBdID09IHByZWZlcnJlZERvYyA/IC0xIDpcblx0XHRcdGJwWyBpIF0gPT0gcHJlZmVycmVkRG9jID8gMSA6XG5cdFx0XHQvKiBlc2xpbnQtZW5hYmxlIGVxZXFlcSAqL1xuXHRcdFx0MDtcblx0fTtcblxuXHRyZXR1cm4gZG9jdW1lbnQ7XG59O1xuXG5TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHtcblx0cmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTtcbn07XG5cblNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHtcblx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblxuXHRpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJlxuXHRcdCggIXJidWdneVFTQSAgICAgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7XG5cblx0XHRcdC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRcdGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcblxuXHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHQvLyBmcmFnbWVudCBpbiBJRSA5XG5cdFx0XHRcdGVsZW0uZG9jdW1lbnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBleHByLCB0cnVlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFNpenpsZSggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDtcbn07XG5cblNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkge1xuXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHR9XG5cdHJldHVybiBjb250YWlucyggY29udGV4dCwgZWxlbSApO1xufTtcblxuU2l6emxlLmF0dHIgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblxuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sXG5cblx0XHQvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoalF1ZXJ5ICMxMzgwNylcblx0XHR2YWwgPSBmbiAmJiBoYXNPd24uY2FsbCggRXhwci5hdHRySGFuZGxlLCBuYW1lLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRmbiggZWxlbSwgbmFtZSwgIWRvY3VtZW50SXNIVE1MICkgOlxuXHRcdFx0dW5kZWZpbmVkO1xuXG5cdHJldHVybiB2YWwgIT09IHVuZGVmaW5lZCA/XG5cdFx0dmFsIDpcblx0XHRzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWRvY3VtZW50SXNIVE1MID9cblx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICkgOlxuXHRcdFx0KCB2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSApICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xufTtcblxuU2l6emxlLmVzY2FwZSA9IGZ1bmN0aW9uKCBzZWwgKSB7XG5cdHJldHVybiAoIHNlbCArIFwiXCIgKS5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG59O1xuXG5TaXp6bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkge1xuXHR0aHJvdyBuZXcgRXJyb3IoIFwiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogXCIgKyBtc2cgKTtcbn07XG5cbi8qKlxuICogRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlc1xuICogQHBhcmFtIHtBcnJheUxpa2V9IHJlc3VsdHNcbiAqL1xuU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHtcblx0dmFyIGVsZW0sXG5cdFx0ZHVwbGljYXRlcyA9IFtdLFxuXHRcdGogPSAwLFxuXHRcdGkgPSAwO1xuXG5cdC8vIFVubGVzcyB3ZSAqa25vdyogd2UgY2FuIGRldGVjdCBkdXBsaWNhdGVzLCBhc3N1bWUgdGhlaXIgcHJlc2VuY2Vcblx0aGFzRHVwbGljYXRlID0gIXN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcztcblx0c29ydElucHV0ID0gIXN1cHBvcnQuc29ydFN0YWJsZSAmJiByZXN1bHRzLnNsaWNlKCAwICk7XG5cdHJlc3VsdHMuc29ydCggc29ydE9yZGVyICk7XG5cblx0aWYgKCBoYXNEdXBsaWNhdGUgKSB7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSByZXN1bHRzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG4gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW1cbiAqL1xuZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBub2RlLFxuXHRcdHJldCA9IFwiXCIsXG5cdFx0aSA9IDAsXG5cdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdGlmICggIW5vZGVUeXBlICkge1xuXG5cdFx0Ly8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXlcblx0XHR3aGlsZSAoICggbm9kZSA9IGVsZW1bIGkrKyBdICkgKSB7XG5cblx0XHRcdC8vIERvIG5vdCB0cmF2ZXJzZSBjb21tZW50IG5vZGVzXG5cdFx0XHRyZXQgKz0gZ2V0VGV4dCggbm9kZSApO1xuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDkgfHwgbm9kZVR5cGUgPT09IDExICkge1xuXG5cdFx0Ly8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50c1xuXHRcdC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5jeSBvZiBuZXcgbGluZXMgKGpRdWVyeSAjMTExNTMpXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLnRleHRDb250ZW50O1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdHJldCArPSBnZXRUZXh0KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdH1cblxuXHQvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gbm9kZXNcblxuXHRyZXR1cm4gcmV0O1xufTtcblxuRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7XG5cblx0Ly8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyXG5cdGNhY2hlTGVuZ3RoOiA1MCxcblxuXHRjcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbixcblxuXHRtYXRjaDogbWF0Y2hFeHByLFxuXG5cdGF0dHJIYW5kbGU6IHt9LFxuXG5cdGZpbmQ6IHt9LFxuXG5cdHJlbGF0aXZlOiB7XG5cdFx0XCI+XCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIiBcIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiIH0sXG5cdFx0XCIrXCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiflwiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiB9XG5cdH0sXG5cblx0cHJlRmlsdGVyOiB7XG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdG1hdGNoWyAxIF0gPSBtYXRjaFsgMSBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXG5cdFx0XHRtYXRjaFsgMyBdID0gKCBtYXRjaFsgMyBdIHx8IG1hdGNoWyA0IF0gfHxcblx0XHRcdFx0bWF0Y2hbIDUgXSB8fCBcIlwiICkucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsgMiBdID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdG1hdGNoWyAzIF0gPSBcIiBcIiArIG1hdGNoWyAzIF0gKyBcIiBcIjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXG5cdFx0XHQvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByW1wiQ0hJTERcIl1cblx0XHRcdFx0MSB0eXBlIChvbmx5fG50aHwuLi4pXG5cdFx0XHRcdDIgd2hhdCAoY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0MyBhcmd1bWVudCAoZXZlbnxvZGR8XFxkKnxcXGQqbihbKy1dXFxkKyk/fC4uLilcblx0XHRcdFx0NCB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cXGQqbnwpXG5cdFx0XHRcdDUgc2lnbiBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NiB4IG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ3IHNpZ24gb2YgeS1jb21wb25lbnRcblx0XHRcdFx0OCB5IG9mIHktY29tcG9uZW50XG5cdFx0XHQqL1xuXHRcdFx0bWF0Y2hbIDEgXSA9IG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsgMSBdLnNsaWNlKCAwLCAzICkgPT09IFwibnRoXCIgKSB7XG5cblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcblx0XHRcdFx0aWYgKCAhbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWyAwIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRFxuXHRcdFx0XHQvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xXG5cdFx0XHRcdG1hdGNoWyA0IF0gPSArKCBtYXRjaFsgNCBdID9cblx0XHRcdFx0XHRtYXRjaFsgNSBdICsgKCBtYXRjaFsgNiBdIHx8IDEgKSA6XG5cdFx0XHRcdFx0MiAqICggbWF0Y2hbIDMgXSA9PT0gXCJldmVuXCIgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApICk7XG5cdFx0XHRcdG1hdGNoWyA1IF0gPSArKCAoIG1hdGNoWyA3IF0gKyBtYXRjaFsgOCBdICkgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHRcdC8vIG90aGVyIHR5cGVzIHByb2hpYml0IGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaDtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbIDYgXSAmJiBtYXRjaFsgMiBdO1xuXG5cdFx0XHRpZiAoIG1hdGNoRXhwclsgXCJDSElMRFwiIF0udGVzdCggbWF0Y2hbIDAgXSApICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWNjZXB0IHF1b3RlZCBhcmd1bWVudHMgYXMtaXNcblx0XHRcdGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0bWF0Y2hbIDIgXSA9IG1hdGNoWyA0IF0gfHwgbWF0Y2hbIDUgXSB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmXG5cblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KCBleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSApICYmXG5cblx0XHRcdFx0Ly8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzXG5cdFx0XHRcdCggZXhjZXNzID0gdW5xdW90ZWQuaW5kZXhPZiggXCIpXCIsIHVucXVvdGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoICkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbIDAgXSA9IG1hdGNoWyAwIF0uc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0XHRtYXRjaFsgMiBdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFwiVEFHXCI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xuXHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbm9kZU5hbWU7XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0xBU1NcIjogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHtcblx0XHRcdHZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgY2xhc3NOYW1lICsgXCIgXCIgXTtcblxuXHRcdFx0cmV0dXJuIHBhdHRlcm4gfHxcblx0XHRcdFx0KCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XHRcdFwiKVwiICsgY2xhc3NOYW1lICsgXCIoXCIgKyB3aGl0ZXNwYWNlICsgXCJ8JClcIiApICkgJiYgY2xhc3NDYWNoZShcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBwYXR0ZXJuLnRlc3QoXG5cdFx0XHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsZW0uY2xhc3NOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHxcblx0XHRcdFx0XHRcdFx0XHRcIlwiXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gKTtcblx0XHR9LFxuXG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cblx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIj1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiE9XCIgPyByZXN1bHQgIT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJePVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIio9XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIkPVwiID8gY2hlY2sgJiYgcmVzdWx0LnNsaWNlKCAtY2hlY2subGVuZ3RoICkgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ+PVwiID8gKCBcIiBcIiArIHJlc3VsdC5yZXBsYWNlKCByd2hpdGVzcGFjZSwgXCIgXCIgKSArIFwiIFwiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ8PVwiID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyBcIi1cIiA6XG5cdFx0XHRcdFx0ZmFsc2U7XG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuXG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCB0eXBlLCB3aGF0LCBfYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkge1xuXHRcdFx0dmFyIHNpbXBsZSA9IHR5cGUuc2xpY2UoIDAsIDMgKSAhPT0gXCJudGhcIixcblx0XHRcdFx0Zm9yd2FyZCA9IHR5cGUuc2xpY2UoIC00ICkgIT09IFwibGFzdFwiLFxuXHRcdFx0XHRvZlR5cGUgPSB3aGF0ID09PSBcIm9mLXR5cGVcIjtcblxuXHRcdFx0cmV0dXJuIGZpcnN0ID09PSAxICYmIGxhc3QgPT09IDAgP1xuXG5cdFx0XHRcdC8vIFNob3J0Y3V0IGZvciA6bnRoLSoobilcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEhZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0XHR9IDpcblxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgY2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gbm9kZVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gUmV2ZXJzZSBkaXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnQgPSBkaXIgPSB0eXBlID09PSBcIm9ubHlcIiAmJiAhc3RhcnQgJiYgXCJuZXh0U2libGluZ1wiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRzdGFydCA9IFsgZm9yd2FyZCA/IHBhcmVudC5maXJzdENoaWxkIDogcGFyZW50Lmxhc3RDaGlsZCBdO1xuXG5cdFx0XHRcdFx0XHQvLyBub24teG1sIDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2FjaGUgZGF0YSBvbiBgcGFyZW50YFxuXHRcdFx0XHRcdFx0aWYgKCBmb3J3YXJkICYmIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91c2x5LWNhY2hlZCBpbmRleFxuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0bm9kZSA9IHBhcmVudDtcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAoIG5vZGVbIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXggJiYgY2FjaGVbIDIgXTtcblx0XHRcdFx0XHRcdFx0bm9kZSA9IG5vZGVJbmRleCAmJiBwYXJlbnQuY2hpbGROb2Rlc1sgbm9kZUluZGV4IF07XG5cblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdCggZGlmZiA9IG5vZGVJbmRleCA9IDAgKSB8fCBzdGFydC5wb3AoKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFVzZSBwcmV2aW91c2x5LWNhY2hlZCBlbGVtZW50IGluZGV4IGlmIGF2YWlsYWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHRjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXg7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyB4bWwgOm50aC1jaGlsZCguLi4pXG5cdFx0XHRcdFx0XHRcdC8vIG9yIDpudGgtbGFzdC1jaGlsZCguLi4pIG9yIDpudGgoLWxhc3QpPy1vZi10eXBlKC4uLilcblx0XHRcdFx0XHRcdFx0aWYgKCBkaWZmID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFVzZSB0aGUgc2FtZSBsb29wIGFzIGFib3ZlIHRvIHNlZWsgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQoIGRpZmYgPSBub2RlSW5kZXggPSAwICkgfHwgc3RhcnQucG9wKCkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQrK2RpZmYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FjaGUgdGhlIGluZGV4IG9mIGVhY2ggZW5jb3VudGVyZWQgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggbm9kZVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkge1xuXG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XG5cblx0XHRcdC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXRcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXG5cdFx0XHQvLyBqdXN0IGFzIFNpenpsZSBkb2VzXG5cdFx0XHRpZiAoIGZuWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXG5cdFx0XHRpZiAoIGZuLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHRcdGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCBcIlwiLCBhcmd1bWVudCBdO1xuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cblx0XHRcdFx0XHRtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0XHRcdFx0dmFyIGlkeCxcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLFxuXHRcdFx0XHRcdFx0XHRpID0gbWF0Y2hlZC5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWR4ID0gaW5kZXhPZiggc2VlZCwgbWF0Y2hlZFsgaSBdICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkWyBpIF0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cblx0XHQvLyBQb3RlbnRpYWxseSBjb21wbGV4IHBzZXVkb3Ncblx0XHRcIm5vdFwiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblxuXHRcdFx0Ly8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGVcblx0XHRcdC8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG5cdFx0XHQvLyBzcGFjZXMgYXMgY29tYmluYXRvcnNcblx0XHRcdHZhciBpbnB1dCA9IFtdLFxuXHRcdFx0XHRyZXN1bHRzID0gW10sXG5cdFx0XHRcdG1hdGNoZXIgPSBjb21waWxlKCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICkgKTtcblxuXHRcdFx0cmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/XG5cdFx0XHRcdG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksXG5cdFx0XHRcdFx0XHRpID0gc2VlZC5sZW5ndGg7XG5cblx0XHRcdFx0XHQvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IHVubWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGkgXSA9ICEoIG1hdGNoZXNbIGkgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdGlucHV0WyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTtcblxuXHRcdFx0XHRcdC8vIERvbid0IGtlZXAgdGhlIGVsZW1lbnQgKGlzc3VlICMyOTkpXG5cdFx0XHRcdFx0aW5wdXRbIDAgXSA9IG51bGw7XG5cdFx0XHRcdFx0cmV0dXJuICFyZXN1bHRzLnBvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdFwiaGFzXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdFwiY29udGFpbnNcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0udGV4dENvbnRlbnQgfHwgZ2V0VGV4dCggZWxlbSApICkuaW5kZXhPZiggdGV4dCApID4gLTE7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxuXHRcdC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxuXHRcdC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0XCJsYW5nXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7XG5cblx0XHRcdC8vIGxhbmcgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXJcblx0XHRcdGlmICggIXJpZGVudGlmaWVyLnRlc3QoIGxhbmcgfHwgXCJcIiApICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XG5cdFx0XHR9XG5cdFx0XHRsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBlbGVtTGFuZztcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtTGFuZyA9IGRvY3VtZW50SXNIVE1MID9cblx0XHRcdFx0XHRcdGVsZW0ubGFuZyA6XG5cdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJ4bWw6bGFuZ1wiICkgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoIFwibGFuZ1wiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0ZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5nLmluZGV4T2YoIGxhbmcgKyBcIi1cIiApID09PSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoICggZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSApICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHQvLyBNaXNjZWxsYW5lb3VzXG5cdFx0XCJ0YXJnZXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHRcdHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDtcblx0XHR9LFxuXG5cdFx0XCJyb290XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY0VsZW07XG5cdFx0fSxcblxuXHRcdFwiZm9jdXNcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJlxuXHRcdFx0XHQoICFkb2N1bWVudC5oYXNGb2N1cyB8fCBkb2N1bWVudC5oYXNGb2N1cygpICkgJiZcblx0XHRcdFx0ISEoIGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXggKTtcblx0XHR9LFxuXG5cdFx0Ly8gQm9vbGVhbiBwcm9wZXJ0aWVzXG5cdFx0XCJlbmFibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCBmYWxzZSApLFxuXHRcdFwiZGlzYWJsZWRcIjogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIHRydWUgKSxcblxuXHRcdFwiY2hlY2tlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0dmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiAhIWVsZW0uY2hlY2tlZCApIHx8XG5cdFx0XHRcdCggbm9kZU5hbWUgPT09IFwib3B0aW9uXCIgJiYgISFlbGVtLnNlbGVjdGVkICk7XG5cdFx0fSxcblxuXHRcdFwic2VsZWN0ZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHRcblx0XHRcdC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHlcblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gQ29udGVudHNcblx0XHRcImVtcHR5XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkb1xuXHRcdFx0Ly8gOmVtcHR5IGlzIG5lZ2F0ZWQgYnkgZWxlbWVudCAoMSkgb3IgY29udGVudCBub2RlcyAodGV4dDogMzsgY2RhdGE6IDQ7IGVudGl0eSByZWY6IDUpLFxuXHRcdFx0Ly8gICBidXQgbm90IGJ5IG90aGVycyAoY29tbWVudDogODsgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbjogNzsgZXRjLilcblx0XHRcdC8vIG5vZGVUeXBlIDwgNiB3b3JrcyBiZWNhdXNlIGF0dHJpYnV0ZXMgKDIpIGRvIG5vdCBhcHBlYXIgYXMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPCA2ICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdFwicGFyZW50XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICFFeHByLnBzZXVkb3NbIFwiZW1wdHlcIiBdKCBlbGVtICk7XG5cdFx0fSxcblxuXHRcdC8vIEVsZW1lbnQvaW5wdXQgdHlwZXNcblx0XHRcImhlYWRlclwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJpbnB1dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJidXR0b25cIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSBcImJ1dHRvblwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCI7XG5cdFx0fSxcblxuXHRcdFwidGV4dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBhdHRyO1xuXHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICYmXG5cdFx0XHRcdGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCIgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTw4XG5cdFx0XHRcdC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCBcInNlYXJjaFwiKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUgPT09IFwidGV4dFwiXG5cdFx0XHRcdCggKCBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgKSA9PSBudWxsIHx8XG5cdFx0XHRcdFx0YXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiApO1xuXHRcdH0sXG5cblx0XHQvLyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uXG5cdFx0XCJmaXJzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBbIDAgXTtcblx0XHR9ICksXG5cblx0XHRcImxhc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIF9tYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHJldHVybiBbIGxlbmd0aCAtIDEgXTtcblx0XHR9ICksXG5cblx0XHRcImVxXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBfbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0cmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdO1xuXHRcdH0gKSxcblxuXHRcdFwiZXZlblwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApLFxuXG5cdFx0XCJvZGRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdFwibHRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID9cblx0XHRcdFx0YXJndW1lbnQgKyBsZW5ndGggOlxuXHRcdFx0XHRhcmd1bWVudCA+IGxlbmd0aCA/XG5cdFx0XHRcdFx0bGVuZ3RoIDpcblx0XHRcdFx0XHRhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgLS1pID49IDA7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRcImd0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7ICsraSA8IGxlbmd0aDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKVxuXHR9XG59O1xuXG5FeHByLnBzZXVkb3NbIFwibnRoXCIgXSA9IEV4cHIucHNldWRvc1sgXCJlcVwiIF07XG5cbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXG5mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xufVxuZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcbn1cblxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cbnNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zO1xuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcblxudG9rZW5pemUgPSBTaXp6bGUudG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8ICggbWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSApICkge1xuXHRcdFx0aWYgKCBtYXRjaCApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZFxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFsgMCBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICggdG9rZW5zID0gW10gKSApO1xuXHRcdH1cblxuXHRcdG1hdGNoZWQgPSBmYWxzZTtcblxuXHRcdC8vIENvbWJpbmF0b3JzXG5cdFx0aWYgKCAoIG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkgKSApIHtcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXG5cdFx0XHRcdHR5cGU6IG1hdGNoWyAwIF0ucmVwbGFjZSggcnRyaW0sIFwiIFwiIClcblx0XHRcdH0gKTtcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmlsdGVyc1xuXHRcdGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7XG5cdFx0XHRpZiAoICggbWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApICkgJiYgKCAhcHJlRmlsdGVyc1sgdHlwZSBdIHx8XG5cdFx0XHRcdCggbWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkgKSApICkge1xuXHRcdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRcdG1hdGNoZXM6IG1hdGNoXG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0cmV0dXJuIHBhcnNlT25seSA/XG5cdFx0c29GYXIubGVuZ3RoIDpcblx0XHRzb0ZhciA/XG5cdFx0XHRTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHQvLyBDYWNoZSB0aGUgdG9rZW5zXG5cdFx0XHR0b2tlbkNhY2hlKCBzZWxlY3RvciwgZ3JvdXBzICkuc2xpY2UoIDAgKTtcbn07XG5cbmZ1bmN0aW9uIHRvU2VsZWN0b3IoIHRva2VucyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0c2VsZWN0b3IgPSBcIlwiO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRzZWxlY3RvciArPSB0b2tlbnNbIGkgXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7XG5cdHZhciBkaXIgPSBjb21iaW5hdG9yLmRpcixcblx0XHRza2lwID0gY29tYmluYXRvci5uZXh0LFxuXHRcdGtleSA9IHNraXAgfHwgZGlyLFxuXHRcdGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGtleSA9PT0gXCJwYXJlbnROb2RlXCIsXG5cdFx0ZG9uZU5hbWUgPSBkb25lKys7XG5cblx0cmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgP1xuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSA6XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHNcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIG9sZENhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSxcblx0XHRcdFx0bmV3Q2FjaGUgPSBbIGRpcnJ1bnMsIGRvbmVOYW1lIF07XG5cblx0XHRcdC8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGNvbWJpbmF0b3IgY2FjaGluZ1xuXHRcdFx0aWYgKCB4bWwgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoIGVsZW1bIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHNraXAgJiYgc2tpcCA9PT0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRlbGVtID0gZWxlbVsgZGlyIF0gfHwgZWxlbTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoICggb2xkQ2FjaGUgPSB1bmlxdWVDYWNoZVsga2V5IF0gKSAmJlxuXHRcdFx0XHRcdFx0XHRvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHJldHVybiAoIG5ld0NhY2hlWyAyIF0gPSBvbGRDYWNoZVsgMiBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFJldXNlIG5ld2NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIGtleSBdID0gbmV3Q2FjaGU7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nXG5cdFx0XHRcdFx0XHRcdGlmICggKCBuZXdDYWNoZVsgMiBdID0gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1sgaSBdKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gOlxuXHRcdG1hdGNoZXJzWyAwIF07XG59XG5cbmZ1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0U2l6emxlKCBzZWxlY3RvciwgY29udGV4dHNbIGkgXSwgcmVzdWx0cyApO1xuXHR9XG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xuXHR2YXIgZWxlbSxcblx0XHRuZXdVbm1hdGNoZWQgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLFxuXHRcdG1hcHBlZCA9IG1hcCAhPSBudWxsO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKCBlbGVtID0gdW5tYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRuZXdVbm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRpZiAoIG1hcHBlZCApIHtcblx0XHRcdFx0XHRtYXAucHVzaCggaSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG5ld1VubWF0Y2hlZDtcbn1cblxuZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkge1xuXHRpZiAoIHBvc3RGaWx0ZXIgJiYgIXBvc3RGaWx0ZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApO1xuXHR9XG5cdGlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTtcblx0fVxuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgcmVzdWx0cywgY29udGV4dCwgeG1sICkge1xuXHRcdHZhciB0ZW1wLCBpLCBlbGVtLFxuXHRcdFx0cHJlTWFwID0gW10sXG5cdFx0XHRwb3N0TWFwID0gW10sXG5cdFx0XHRwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dFxuXHRcdFx0ZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29udGV4dHMoXG5cdFx0XHRcdHNlbGVjdG9yIHx8IFwiKlwiLFxuXHRcdFx0XHRjb250ZXh0Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LFxuXHRcdFx0XHRbXVxuXHRcdFx0KSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcyxcblxuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXIgP1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2VlZCBwb3N0RmlsdGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsXG5cdFx0XHRcdHBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlciApID9cblxuXHRcdFx0XHRcdC8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFtdIDpcblxuXHRcdFx0XHRcdC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseVxuXHRcdFx0XHRcdHJlc3VsdHMgOlxuXHRcdFx0XHRtYXRjaGVySW47XG5cblx0XHQvLyBGaW5kIHByaW1hcnkgbWF0Y2hlc1xuXHRcdGlmICggbWF0Y2hlciApIHtcblx0XHRcdG1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcG9zdEZpbHRlclxuXHRcdGlmICggcG9zdEZpbHRlciApIHtcblx0XHRcdHRlbXAgPSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApO1xuXHRcdFx0cG9zdEZpbHRlciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApO1xuXG5cdFx0XHQvLyBVbi1tYXRjaCBmYWlsaW5nIGVsZW1lbnRzIGJ5IG1vdmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluXG5cdFx0XHRpID0gdGVtcC5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAoIGVsZW0gPSB0ZW1wWyBpIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwWyBpIF0gXSA9ICEoIG1hdGNoZXJJblsgcG9zdE1hcFsgaSBdIF0gPSBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cblx0XHRcdFx0XHQvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHNcblx0XHRcdFx0XHR0ZW1wID0gW107XG5cdFx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBtYXRjaGVyT3V0WyBpIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXN0b3JlIG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlzIG5vdCB5ZXQgYSBmaW5hbCBtYXRjaFxuXHRcdFx0XHRcdFx0XHR0ZW1wLnB1c2goICggbWF0Y2hlckluWyBpIF0gPSBlbGVtICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKCBtYXRjaGVyT3V0ID0gW10gKSwgdGVtcCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZFxuXHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtID0gbWF0Y2hlck91dFsgaSBdICkgJiZcblx0XHRcdFx0XHRcdCggdGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbIGkgXSApID4gLTEgKSB7XG5cblx0XHRcdFx0XHRcdHNlZWRbIHRlbXAgXSA9ICEoIHJlc3VsdHNbIHRlbXAgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyT3V0ID0gY29uZGVuc2UoXG5cdFx0XHRcdG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgP1xuXHRcdFx0XHRcdG1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6XG5cdFx0XHRcdFx0bWF0Y2hlck91dFxuXHRcdFx0KTtcblx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91dCwgeG1sICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMgKSB7XG5cdHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRsZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIDAgXS50eXBlIF0sXG5cdFx0aW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyBcIiBcIiBdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoIGNoZWNrQ29udGV4dCA9IGNvbnRleHQgKS5ub2RlVHlwZSA/XG5cdFx0XHRcdFx0bWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdFx0bWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApO1xuXG5cdFx0XHQvLyBBdm9pZCBoYW5naW5nIG9udG8gZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdGNoZWNrQ29udGV4dCA9IG51bGw7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0gXTtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoICggbWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaSBdLnR5cGUgXSApICkge1xuXHRcdFx0bWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyICkgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbIGkgXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1sgaSBdLm1hdGNoZXMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNoZXJcblx0XHRcdGlmICggbWF0Y2hlclsgZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZ1xuXHRcdFx0XHRqID0gKytpO1xuXHRcdFx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaiBdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXG5cdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcblx0XHRcdFx0XHR0b2tlbnNcblx0XHRcdFx0XHRcdC5zbGljZSggMCwgaSAtIDEgKVxuXHRcdFx0XHRcdFx0LmNvbmNhdCggeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0gKVxuXHRcdFx0XHRcdCkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLFxuXHRcdFx0XHRcdG1hdGNoZXIsXG5cdFx0XHRcdFx0aSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKCB0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cblx0XHRcdFx0Ly8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBvdXRlcm1vc3QgY29udGV4dFxuXHRcdFx0XHRlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZFsgXCJUQUdcIiBdKCBcIipcIiwgb3V0ZXJtb3N0ICksXG5cblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9ICggZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEgKSxcblx0XHRcdFx0bGVuID0gZWxlbXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCA9PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1lbnRzIGJ5IGlkXG5cdFx0XHRmb3IgKCA7IGkgIT09IGxlbiAmJiAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGJ5RWxlbWVudCAmJiBlbGVtICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdFx0XHRpZiAoICFjb250ZXh0ICYmIGVsZW0ub3duZXJEb2N1bWVudCAhPSBkb2N1bWVudCApIHtcblx0XHRcdFx0XHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdFx0XHRcdFx0XHR4bWwgPSAhZG9jdW1lbnRJc0hUTUw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0IHx8IGRvY3VtZW50LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcblx0XHRcdFx0aWYgKCBieVNldCApIHtcblxuXHRcdFx0XHRcdC8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnNcblx0XHRcdFx0XHRpZiAoICggZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0gKSApIHtcblx0XHRcdFx0XHRcdG1hdGNoZWRDb3VudC0tO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIExlbmd0aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVudCwgbWF0Y2hlZCBvciBub3Rcblx0XHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBgaWAgaXMgbm93IHRoZSBjb3VudCBvZiBlbGVtZW50cyB2aXNpdGVkIGFib3ZlLCBhbmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBtYWtlcyB0aGUgbGF0dGVyIG5vbm5lZ2F0aXZlLlxuXHRcdFx0bWF0Y2hlZENvdW50ICs9IGk7XG5cblx0XHRcdC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50c1xuXHRcdFx0Ly8gTk9URTogVGhpcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVyZSBhcmUgbm8gdW5tYXRjaGVkIGVsZW1lbnRzIChpLmUuLCBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gZXF1YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRuJ3QgdmlzaXQgX2FueV8gZWxlbWVudHMgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZlXG5cdFx0XHQvLyBubyBlbGVtZW50IG1hdGNoZXJzIGFuZCBubyBzZWVkLlxuXHRcdFx0Ly8gSW5jcmVtZW50aW5nIGFuIGluaXRpYWxseS1zdHJpbmcgXCIwXCIgYGlgIGFsbG93cyBgaWAgdG8gcmVtYWluIGEgc3RyaW5nIG9ubHkgaW4gdGhhdFxuXHRcdFx0Ly8gY2FzZSwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBcIjAwXCIgYG1hdGNoZWRDb3VudGAgdGhhdCBkaWZmZXJzIGZyb20gYGlgIGJ1dCBpcyBhbHNvXG5cdFx0XHQvLyBudW1lcmljYWxseSB6ZXJvLlxuXHRcdFx0aWYgKCBieVNldCAmJiBpICE9PSBtYXRjaGVkQ291bnQgKSB7XG5cdFx0XHRcdGogPSAwO1xuXHRcdFx0XHR3aGlsZSAoICggbWF0Y2hlciA9IHNldE1hdGNoZXJzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nXG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkQ291bnQgPiAwICkge1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggISggdW5tYXRjaGVkWyBpIF0gfHwgc2V0TWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0TWF0Y2hlZFsgaSBdID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTtcblxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcblx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7XG5cblx0XHRcdFx0XHRTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVyc1xuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVubWF0Y2hlZDtcblx0XHR9O1xuXG5cdHJldHVybiBieVNldCA/XG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XG5cdFx0c3VwZXJNYXRjaGVyO1xufVxuXG5jb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cblx0XHQvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnRcblx0XHRpZiAoICFtYXRjaCApIHtcblx0XHRcdG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0fVxuXHRcdGkgPSBtYXRjaC5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRjYWNoZWQgPSBtYXRjaGVyRnJvbVRva2VucyggbWF0Y2hbIGkgXSApO1xuXHRcdFx0aWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0c2V0TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZShcblx0XHRcdHNlbGVjdG9yLFxuXHRcdFx0bWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzIClcblx0XHQpO1xuXG5cdFx0Ly8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uXG5cdFx0Y2FjaGVkLnNlbGVjdG9yID0gc2VsZWN0b3I7XG5cdH1cblx0cmV0dXJuIGNhY2hlZDtcbn07XG5cbi8qKlxuICogQSBsb3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBTaXp6bGUncyBjb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbiBidWlsdCB3aXRoIFNpenpsZS5jb21waWxlXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHRcbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXVxuICogQHBhcmFtIHtBcnJheX0gW3NlZWRdIEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3RcbiAqL1xuc2VsZWN0ID0gU2l6emxlLnNlbGVjdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIGksIHRva2VucywgdG9rZW4sIHR5cGUsIGZpbmQsXG5cdFx0Y29tcGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBzZWxlY3Rvcixcblx0XHRtYXRjaCA9ICFzZWVkICYmIHRva2VuaXplKCAoIHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IgKSApO1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkXG5cdC8vICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJhbnRlZXMgdXMgY29udGV4dClcblx0aWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7XG5cblx0XHQvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBpcyBhbiBJRFxuXHRcdHRva2VucyA9IG1hdGNoWyAwIF0gPSBtYXRjaFsgMCBdLnNsaWNlKCAwICk7XG5cdFx0aWYgKCB0b2tlbnMubGVuZ3RoID4gMiAmJiAoIHRva2VuID0gdG9rZW5zWyAwIF0gKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJc0hUTUwgJiYgRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyAxIF0udHlwZSBdICkge1xuXG5cdFx0XHRjb250ZXh0ID0gKCBFeHByLmZpbmRbIFwiSURcIiBdKCB0b2tlbi5tYXRjaGVzWyAwIF1cblx0XHRcdFx0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksIGNvbnRleHQgKSB8fCBbXSApWyAwIF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByWyBcIm5lZWRzQ29udGV4dFwiIF0udGVzdCggc2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG9rZW4gPSB0b2tlbnNbIGkgXTtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvclxuXHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyAoIHR5cGUgPSB0b2tlbi50eXBlICkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICggZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdICkgKSB7XG5cblx0XHRcdFx0Ly8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzXG5cdFx0XHRcdGlmICggKCBzZWVkID0gZmluZChcblx0XHRcdFx0XHR0b2tlbi5tYXRjaGVzWyAwIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0XHRyc2libGluZy50ZXN0KCB0b2tlbnNbIDAgXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8XG5cdFx0XHRcdFx0XHRjb250ZXh0XG5cdFx0XHRcdCkgKSApIHtcblxuXHRcdFx0XHRcdC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBlYXJseVxuXHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoIGksIDEgKTtcblx0XHRcdFx0XHRzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyApO1xuXHRcdFx0XHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2VlZCApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDb21waWxlIGFuZCBleGVjdXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uIGlmIG9uZSBpcyBub3QgcHJvdmlkZWRcblx0Ly8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZVxuXHQoIGNvbXBpbGVkIHx8IGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCApICkoXG5cdFx0c2VlZCxcblx0XHRjb250ZXh0LFxuXHRcdCFkb2N1bWVudElzSFRNTCxcblx0XHRyZXN1bHRzLFxuXHRcdCFjb250ZXh0IHx8IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0KTtcblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vLyBPbmUtdGltZSBhc3NpZ25tZW50c1xuXG4vLyBTb3J0IHN0YWJpbGl0eVxuc3VwcG9ydC5zb3J0U3RhYmxlID0gZXhwYW5kby5zcGxpdCggXCJcIiApLnNvcnQoIHNvcnRPcmRlciApLmpvaW4oIFwiXCIgKSA9PT0gZXhwYW5kbztcblxuLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1K1xuLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvblxuc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7XG5cbi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudFxuc2V0RG9jdW1lbnQoKTtcblxuLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNylcbi8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKlxuc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHQvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZylcblx0cmV0dXJuIGVsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImZpZWxkc2V0XCIgKSApICYgMTtcbn0gKTtcblxuLy8gU3VwcG9ydDogSUU8OFxuLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgXCJpbnRlcnBvbGF0aW9uXCJcbi8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4XG5pZiAoICFhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScjJz48L2E+XCI7XG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSggXCJocmVmXCIgKSA9PT0gXCIjXCI7XG59ICkgKSB7XG5cdGFkZEhhbmRsZSggXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInR5cGVcIiA/IDEgOiAyICk7XG5cdFx0fVxuXHR9ICk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBkZWZhdWx0VmFsdWUgaW4gcGxhY2Ugb2YgZ2V0QXR0cmlidXRlKFwidmFsdWVcIilcbmlmICggIXN1cHBvcnQuYXR0cmlidXRlcyB8fCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdGVsLmlubmVySFRNTCA9IFwiPGlucHV0Lz5cIjtcblx0ZWwuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiwgXCJcIiApO1xuXHRyZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBcIlwiO1xufSApICkge1xuXHRhZGRIYW5kbGUoIFwidmFsdWVcIiwgZnVuY3Rpb24oIGVsZW0sIF9uYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLmRlZmF1bHRWYWx1ZTtcblx0XHR9XG5cdH0gKTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGdldEF0dHJpYnV0ZU5vZGUgdG8gZmV0Y2ggYm9vbGVhbnMgd2hlbiBnZXRBdHRyaWJ1dGUgbGllc1xuaWYgKCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoIFwiZGlzYWJsZWRcIiApID09IG51bGw7XG59ICkgKSB7XG5cdGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgdmFsO1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6XG5cdFx0XHRcdCggdmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkgKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRcdG51bGw7XG5cdFx0fVxuXHR9ICk7XG59XG5cbnJldHVybiBTaXp6bGU7XG5cbn0gKSggd2luZG93ICk7XG5cblxuXG5qUXVlcnkuZmluZCA9IFNpenpsZTtcbmpRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9ycztcblxuLy8gRGVwcmVjYXRlZFxualF1ZXJ5LmV4cHJbIFwiOlwiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zO1xualF1ZXJ5LnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7XG5qUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0O1xualF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MO1xualF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zO1xualF1ZXJ5LmVzY2FwZVNlbGVjdG9yID0gU2l6emxlLmVzY2FwZTtcblxuXG5cblxudmFyIGRpciA9IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdLFxuXHRcdHRydW5jYXRlID0gdW50aWwgIT09IHVuZGVmaW5lZDtcblxuXHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgJiYgZWxlbS5ub2RlVHlwZSAhPT0gOSApIHtcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRpZiAoIHRydW5jYXRlICYmIGpRdWVyeSggZWxlbSApLmlzKCB1bnRpbCApICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdG1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHNpYmxpbmdzID0gZnVuY3Rpb24oIG4sIGVsZW0gKSB7XG5cdHZhciBtYXRjaGVkID0gW107XG5cblx0Zm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHtcblx0XHRpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHtcblx0XHRcdG1hdGNoZWQucHVzaCggbiApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtcblxuXG5cbmZ1bmN0aW9uIG5vZGVOYW1lKCBlbGVtLCBuYW1lICkge1xuXG5cdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG59XG52YXIgcnNpbmdsZVRhZyA9ICggL148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2kgKTtcblxuXG5cbi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90XG5mdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHtcblx0aWYgKCBpc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBTaW5nbGUgZWxlbWVudFxuXHRpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gQXJyYXlsaWtlIG9mIGVsZW1lbnRzIChqUXVlcnksIGFyZ3VtZW50cywgQXJyYXkpXG5cdGlmICggdHlwZW9mIHF1YWxpZmllciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAtMSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRmlsdGVyZWQgZGlyZWN0bHkgZm9yIGJvdGggc2ltcGxlIGFuZCBjb21wbGV4IHNlbGVjdG9yc1xuXHRyZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7XG59XG5cbmpRdWVyeS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHtcblx0dmFyIGVsZW0gPSBlbGVtc1sgMCBdO1xuXG5cdGlmICggbm90ICkge1xuXHRcdGV4cHIgPSBcIjpub3QoXCIgKyBleHByICsgXCIpXCI7XG5cdH1cblxuXHRpZiAoIGVsZW1zLmxlbmd0aCA9PT0gMSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxlbSBdIDogW107XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTtcblx0fSApICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgaSwgcmV0LFxuXHRcdFx0bGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRzZWxmID0gdGhpcztcblxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKSApO1xuXHRcdH1cblxuXHRcdHJldCA9IHRoaXMucHVzaFN0YWNrKCBbXSApO1xuXG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGpRdWVyeS5maW5kKCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbGVuID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCByZXQgKSA6IHJldDtcblx0fSxcblx0ZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCBmYWxzZSApICk7XG5cdH0sXG5cdG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgdHJ1ZSApICk7XG5cdH0sXG5cdGlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuICEhd2lubm93KFxuXHRcdFx0dGhpcyxcblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldFxuXHRcdFx0Ly8gc28gJChcInA6Zmlyc3RcIikuaXMoXCJwOmxhc3RcIikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvIFwicFwiLlxuXHRcdFx0dHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICYmIHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGpRdWVyeSggc2VsZWN0b3IgKSA6XG5cdFx0XHRcdHNlbGVjdG9yIHx8IFtdLFxuXHRcdFx0ZmFsc2Vcblx0XHQpLmxlbmd0aDtcblx0fVxufSApO1xuXG5cbi8vIEluaXRpYWxpemUgYSBqUXVlcnkgb2JqZWN0XG5cblxuLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpXG52YXIgcm9vdGpRdWVyeSxcblxuXHQvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5nc1xuXHQvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpXG5cdC8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uICgjMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KVxuXHQvLyBTaG9ydGN1dCBzaW1wbGUgI2lkIGNhc2UgZm9yIHNwZWVkXG5cdHJxdWlja0V4cHIgPSAvXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0rKSkkLyxcblxuXHRpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3QgKSB7XG5cdFx0dmFyIG1hdGNoLCBlbGVtO1xuXG5cdFx0Ly8gSEFORExFOiAkKFwiXCIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpXG5cdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHQvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnlcblx0XHQvLyBzbyBtaWdyYXRlIGNhbiBzdXBwb3J0IGpRdWVyeS5zdWIgKGdoLTIxMDEpXG5cdFx0cm9vdCA9IHJvb3QgfHwgcm9vdGpRdWVyeTtcblxuXHRcdC8vIEhhbmRsZSBIVE1MIHN0cmluZ3Ncblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGlmICggc2VsZWN0b3JbIDAgXSA9PT0gXCI8XCIgJiZcblx0XHRcdFx0c2VsZWN0b3JbIHNlbGVjdG9yLmxlbmd0aCAtIDEgXSA9PT0gXCI+XCIgJiZcblx0XHRcdFx0c2VsZWN0b3IubGVuZ3RoID49IDMgKSB7XG5cblx0XHRcdFx0Ly8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2tcblx0XHRcdFx0bWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkXG5cdFx0XHRpZiAoIG1hdGNoICYmICggbWF0Y2hbIDEgXSB8fCAhY29udGV4dCApICkge1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KVxuXHRcdFx0XHRpZiAoIG1hdGNoWyAxIF0gKSB7XG5cdFx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WyAwIF0gOiBjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gT3B0aW9uIHRvIHJ1biBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWxseSBsZXQgdGhlIGVycm9yIGJlIHRocm93biBpZiBwYXJzZUhUTUwgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5wYXJzZUhUTUwoXG5cdFx0XHRcdFx0XHRtYXRjaFsgMSBdLFxuXHRcdFx0XHRcdFx0Y29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpICk7XG5cblx0XHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpXG5cdFx0XHRcdFx0aWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkge1xuXHRcdFx0XHRcdFx0Zm9yICggbWF0Y2ggaW4gY29udGV4dCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXNbIG1hdGNoIF0oIGNvbnRleHRbIG1hdGNoIF0gKTtcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hdHRyKCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKCNpZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTtcblxuXHRcdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3Rcblx0XHRcdFx0XHRcdHRoaXNbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpXG5cdFx0XHR9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHtcblx0XHRcdFx0cmV0dXJuICggY29udGV4dCB8fCByb290ICkuZmluZCggc2VsZWN0b3IgKTtcblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpXG5cdFx0XHQvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcilcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdC8vIEhBTkRMRTogJChET01FbGVtZW50KVxuXHRcdH0gZWxzZSBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkge1xuXHRcdFx0dGhpc1sgMCBdID0gc2VsZWN0b3I7XG5cdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdC8vIEhBTkRMRTogJChmdW5jdGlvbilcblx0XHQvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHlcblx0XHR9IGVsc2UgaWYgKCBpc0Z1bmN0aW9uKCBzZWxlY3RvciApICkge1xuXHRcdFx0cmV0dXJuIHJvb3QucmVhZHkgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHJvb3QucmVhZHkoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIEV4ZWN1dGUgaW1tZWRpYXRlbHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0c2VsZWN0b3IoIGpRdWVyeSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApO1xuXHR9O1xuXG4vLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uXG5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjtcblxuLy8gSW5pdGlhbGl6ZSBjZW50cmFsIHJlZmVyZW5jZVxucm9vdGpRdWVyeSA9IGpRdWVyeSggZG9jdW1lbnQgKTtcblxuXG52YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sXG5cblx0Ly8gTWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXRcblx0Z3VhcmFudGVlZFVuaXF1ZSA9IHtcblx0XHRjaGlsZHJlbjogdHJ1ZSxcblx0XHRjb250ZW50czogdHJ1ZSxcblx0XHRuZXh0OiB0cnVlLFxuXHRcdHByZXY6IHRydWVcblx0fTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRoYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XG5cdFx0dmFyIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdldCwgdGhpcyApLFxuXHRcdFx0bCA9IHRhcmdldHMubGVuZ3RoO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbIGkgXSApICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7XG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0bWF0Y2hlZCA9IFtdLFxuXHRcdFx0dGFyZ2V0cyA9IHR5cGVvZiBzZWxlY3RvcnMgIT09IFwic3RyaW5nXCIgJiYgalF1ZXJ5KCBzZWxlY3RvcnMgKTtcblxuXHRcdC8vIFBvc2l0aW9uYWwgc2VsZWN0b3JzIG5ldmVyIG1hdGNoLCBzaW5jZSB0aGVyZSdzIG5vIF9zZWxlY3Rpb25fIGNvbnRleHRcblx0XHRpZiAoICFybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9ycyApICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmb3IgKCBjdXIgPSB0aGlzWyBpIF07IGN1ciAmJiBjdXIgIT09IGNvbnRleHQ7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXG5cdFx0XHRcdFx0Ly8gQWx3YXlzIHNraXAgZG9jdW1lbnQgZnJhZ21lbnRzXG5cdFx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPCAxMSAmJiAoIHRhcmdldHMgP1xuXHRcdFx0XHRcdFx0dGFyZ2V0cy5pbmRleCggY3VyICkgPiAtMSA6XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRvIFNpenpsZVxuXHRcdFx0XHRcdFx0Y3VyLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSApICkge1xuXG5cdFx0XHRcdFx0XHRtYXRjaGVkLnB1c2goIGN1ciApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApO1xuXHR9LFxuXG5cdC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldFxuXHRpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudFxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7XG5cdFx0fVxuXG5cdFx0Ly8gSW5kZXggaW4gc2VsZWN0b3Jcblx0XHRpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApO1xuXHRcdH1cblxuXHRcdC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudFxuXHRcdHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsXG5cblx0XHRcdC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZFxuXHRcdFx0ZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtXG5cdFx0KTtcblx0fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soXG5cdFx0XHRqUXVlcnkudW5pcXVlU29ydChcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/XG5cdFx0XHR0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApXG5cdFx0KTtcblx0fVxufSApO1xuXG5mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHtcblx0d2hpbGUgKCAoIGN1ciA9IGN1clsgZGlyIF0gKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fVxuXHRyZXR1cm4gY3VyO1xufVxuXG5qUXVlcnkuZWFjaCgge1xuXHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0cmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDtcblx0fSxcblx0cGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIgKTtcblx0fSxcblx0cGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiLCB1bnRpbCApO1xuXHR9LFxuXHRuZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXY6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHByZXZVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTtcblx0fSxcblx0Y2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7XG5cdH0sXG5cdGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRpZiAoIGVsZW0uY29udGVudERvY3VtZW50ICE9IG51bGwgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErXG5cdFx0XHQvLyA8b2JqZWN0PiBlbGVtZW50cyB3aXRoIG5vIGBkYXRhYCBhdHRyaWJ1dGUgaGFzIGFuIG9iamVjdFxuXHRcdFx0Ly8gYGNvbnRlbnREb2N1bWVudGAgd2l0aCBhIGBudWxsYCBwcm90b3R5cGUuXG5cdFx0XHRnZXRQcm90byggZWxlbS5jb250ZW50RG9jdW1lbnQgKSApIHtcblxuXHRcdFx0cmV0dXJuIGVsZW0uY29udGVudERvY3VtZW50O1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5LCBpT1MgNyBvbmx5LCBBbmRyb2lkIEJyb3dzZXIgPD00LjMgb25seVxuXHRcdC8vIFRyZWF0IHRoZSB0ZW1wbGF0ZSBlbGVtZW50IGFzIGEgcmVndWxhciBvbmUgaW4gYnJvd3NlcnMgdGhhdFxuXHRcdC8vIGRvbid0IHN1cHBvcnQgaXQuXG5cdFx0aWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0ZW1wbGF0ZVwiICkgKSB7XG5cdFx0XHRlbGVtID0gZWxlbS5jb250ZW50IHx8IGVsZW07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGROb2RlcyApO1xuXHR9XG59LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxlY3RvciApIHtcblx0XHR2YXIgbWF0Y2hlZCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1bnRpbCApO1xuXG5cdFx0aWYgKCBuYW1lLnNsaWNlKCAtNSApICE9PSBcIlVudGlsXCIgKSB7XG5cdFx0XHRzZWxlY3RvciA9IHVudGlsO1xuXHRcdH1cblxuXHRcdGlmICggc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0bWF0Y2hlZCA9IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBtYXRjaGVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmxlbmd0aCA+IDEgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBkdXBsaWNhdGVzXG5cdFx0XHRpZiAoICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldmVyc2Ugb3JkZXIgZm9yIHBhcmVudHMqIGFuZCBwcmV2LWRlcml2YXRpdmVzXG5cdFx0XHRpZiAoIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7XG5cdFx0XHRcdG1hdGNoZWQucmV2ZXJzZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZCApO1xuXHR9O1xufSApO1xudmFyIHJub3RodG1sd2hpdGUgPSAoIC9bXlxceDIwXFx0XFxyXFxuXFxmXSsvZyApO1xuXG5cblxuLy8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVkIG9wdGlvbnMgaW50byBPYmplY3QtZm9ybWF0dGVkIG9uZXNcbmZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7XG5cdHZhciBvYmplY3QgPSB7fTtcblx0alF1ZXJ5LmVhY2goIG9wdGlvbnMubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSwgZnVuY3Rpb24oIF8sIGZsYWcgKSB7XG5cdFx0b2JqZWN0WyBmbGFnIF0gPSB0cnVlO1xuXHR9ICk7XG5cdHJldHVybiBvYmplY3Q7XG59XG5cbi8qXG4gKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbiAqXG4gKlx0b3B0aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdpbGwgY2hhbmdlIGhvd1xuICpcdFx0XHR0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzIG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0XG4gKlxuICogQnkgZGVmYXVsdCBhIGNhbGxiYWNrIGxpc3Qgd2lsbCBhY3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBjYW4gYmVcbiAqIFwiZmlyZWRcIiBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBQb3NzaWJsZSBvcHRpb25zOlxuICpcbiAqXHRvbmNlOlx0XHRcdHdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0bWVtb3J5Olx0XHRcdHdpbGwga2VlcCB0cmFjayBvZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2FsbCBhbnkgY2FsbGJhY2sgYWRkZWRcbiAqXHRcdFx0XHRcdGFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0IFwibWVtb3JpemVkXCJcbiAqXHRcdFx0XHRcdHZhbHVlcyAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHR1bmlxdWU6XHRcdFx0d2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpXG4gKlxuICpcdHN0b3BPbkZhbHNlOlx0aW50ZXJydXB0IGNhbGxpbmdzIHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlXG4gKlxuICovXG5qUXVlcnkuQ2FsbGJhY2tzID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0Ly8gQ29udmVydCBvcHRpb25zIGZyb20gU3RyaW5nLWZvcm1hdHRlZCB0byBPYmplY3QtZm9ybWF0dGVkIGlmIG5lZWRlZFxuXHQvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpXG5cdG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0Y3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIDpcblx0XHRqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0aW9ucyApO1xuXG5cdHZhciAvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nXG5cdFx0ZmlyaW5nLFxuXG5cdFx0Ly8gTGFzdCBmaXJlIHZhbHVlIGZvciBub24tZm9yZ2V0dGFibGUgbGlzdHNcblx0XHRtZW1vcnksXG5cblx0XHQvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZFxuXHRcdGZpcmVkLFxuXG5cdFx0Ly8gRmxhZyB0byBwcmV2ZW50IGZpcmluZ1xuXHRcdGxvY2tlZCxcblxuXHRcdC8vIEFjdHVhbCBjYWxsYmFjayBsaXN0XG5cdFx0bGlzdCA9IFtdLFxuXG5cdFx0Ly8gUXVldWUgb2YgZXhlY3V0aW9uIGRhdGEgZm9yIHJlcGVhdGFibGUgbGlzdHNcblx0XHRxdWV1ZSA9IFtdLFxuXG5cdFx0Ly8gSW5kZXggb2YgY3VycmVudGx5IGZpcmluZyBjYWxsYmFjayAobW9kaWZpZWQgYnkgYWRkL3JlbW92ZSBhcyBuZWVkZWQpXG5cdFx0ZmlyaW5nSW5kZXggPSAtMSxcblxuXHRcdC8vIEZpcmUgY2FsbGJhY2tzXG5cdFx0ZmlyZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbmZvcmNlIHNpbmdsZS1maXJpbmdcblx0XHRcdGxvY2tlZCA9IGxvY2tlZCB8fCBvcHRpb25zLm9uY2U7XG5cblx0XHRcdC8vIEV4ZWN1dGUgY2FsbGJhY2tzIGZvciBhbGwgcGVuZGluZyBleGVjdXRpb25zLFxuXHRcdFx0Ly8gcmVzcGVjdGluZyBmaXJpbmdJbmRleCBvdmVycmlkZXMgYW5kIHJ1bnRpbWUgY2hhbmdlc1xuXHRcdFx0ZmlyZWQgPSBmaXJpbmcgPSB0cnVlO1xuXHRcdFx0Zm9yICggOyBxdWV1ZS5sZW5ndGg7IGZpcmluZ0luZGV4ID0gLTEgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRcdHdoaWxlICggKytmaXJpbmdJbmRleCA8IGxpc3QubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gUnVuIGNhbGxiYWNrIGFuZCBjaGVjayBmb3IgZWFybHkgdGVybWluYXRpb25cblx0XHRcdFx0XHRpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09PSBmYWxzZSAmJlxuXHRcdFx0XHRcdFx0b3B0aW9ucy5zdG9wT25GYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3QgcmUtZmlyZVxuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aDtcblx0XHRcdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3JnZXQgdGhlIGRhdGEgaWYgd2UncmUgZG9uZSB3aXRoIGl0XG5cdFx0XHRpZiAoICFvcHRpb25zLm1lbW9yeSApIHtcblx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGZpcmluZyA9IGZhbHNlO1xuXG5cdFx0XHQvLyBDbGVhbiB1cCBpZiB3ZSdyZSBkb25lIGZpcmluZyBmb3IgZ29vZFxuXHRcdFx0aWYgKCBsb2NrZWQgKSB7XG5cblx0XHRcdFx0Ly8gS2VlcCBhbiBlbXB0eSBsaXN0IGlmIHdlIGhhdmUgZGF0YSBmb3IgZnV0dXJlIGFkZCBjYWxsc1xuXHRcdFx0XHRpZiAoIG1lbW9yeSApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCB0aGlzIG9iamVjdCBpcyBzcGVudFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxpc3QgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0XG5cdFx0c2VsZiA9IHtcblxuXHRcdFx0Ly8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdFxuXHRcdFx0YWRkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBtZW1vcnkgZnJvbSBhIHBhc3QgcnVuLCB3ZSBzaG91bGQgZmlyZSBhZnRlciBhZGRpbmdcblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aCAtIDE7XG5cdFx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBtZW1vcnkgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQoIGZ1bmN0aW9uIGFkZCggYXJncyApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggIW9wdGlvbnMudW5pcXVlIHx8ICFzZWxmLmhhcyggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsaXN0LnB1c2goIGFyZyApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggYXJnICYmIGFyZy5sZW5ndGggJiYgdG9UeXBlKCBhcmcgKSAhPT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEluc3BlY3QgcmVjdXJzaXZlbHlcblx0XHRcdFx0XHRcdFx0XHRhZGQoIGFyZyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0fSApKCBhcmd1bWVudHMgKTtcblxuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdFxuXHRcdFx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHR2YXIgaW5kZXg7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGluZGV4ID0galF1ZXJ5LmluQXJyYXkoIGFyZywgbGlzdCwgaW5kZXggKSApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRsaXN0LnNwbGljZSggaW5kZXgsIDEgKTtcblxuXHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGZpcmluZyBpbmRleGVzXG5cdFx0XHRcdFx0XHRpZiAoIGluZGV4IDw9IGZpcmluZ0luZGV4ICkge1xuXHRcdFx0XHRcdFx0XHRmaXJpbmdJbmRleC0tO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENoZWNrIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QuXG5cdFx0XHQvLyBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IGxpc3QgaGFzIGNhbGxiYWNrcyBhdHRhY2hlZC5cblx0XHRcdGhhczogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRyZXR1cm4gZm4gP1xuXHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBmbiwgbGlzdCApID4gLTEgOlxuXHRcdFx0XHRcdGxpc3QubGVuZ3RoID4gMDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3Rcblx0XHRcdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmUgYW5kIC5hZGRcblx0XHRcdC8vIEFib3J0IGFueSBjdXJyZW50L3BlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0Ly8gQ2xlYXIgYWxsIGNhbGxiYWNrcyBhbmQgdmFsdWVzXG5cdFx0XHRkaXNhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGRpc2FibGVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICFsaXN0O1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZVxuXHRcdFx0Ly8gQWxzbyBkaXNhYmxlIC5hZGQgdW5sZXNzIHdlIGhhdmUgbWVtb3J5IChzaW5jZSBpdCB3b3VsZCBoYXZlIG5vIGVmZmVjdClcblx0XHRcdC8vIEFib3J0IGFueSBwZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdGxvY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRpZiAoICFtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRsb2NrZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFsb2NrZWQ7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzXG5cdFx0XHRmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7XG5cdFx0XHRcdGlmICggIWxvY2tlZCApIHtcblx0XHRcdFx0XHRhcmdzID0gYXJncyB8fCBbXTtcblx0XHRcdFx0XHRhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNsaWNlID8gYXJncy5zbGljZSgpIDogYXJncyBdO1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGFyZ3MgKTtcblx0XHRcdFx0XHRpZiAoICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHNcblx0XHRcdGZpcmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzZWxmLmZpcmVXaXRoKCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2Vcblx0XHRcdGZpcmVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhZmlyZWQ7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRyZXR1cm4gc2VsZjtcbn07XG5cblxuZnVuY3Rpb24gSWRlbnRpdHkoIHYgKSB7XG5cdHJldHVybiB2O1xufVxuZnVuY3Rpb24gVGhyb3dlciggZXggKSB7XG5cdHRocm93IGV4O1xufVxuXG5mdW5jdGlvbiBhZG9wdFZhbHVlKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0LCBub1ZhbHVlICkge1xuXHR2YXIgbWV0aG9kO1xuXG5cdHRyeSB7XG5cblx0XHQvLyBDaGVjayBmb3IgcHJvbWlzZSBhc3BlY3QgZmlyc3QgdG8gcHJpdmlsZWdlIHN5bmNocm9ub3VzIGJlaGF2aW9yXG5cdFx0aWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnByb21pc2UgKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlICkuZG9uZSggcmVzb2x2ZSApLmZhaWwoIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgdGhlbmFibGVzXG5cdFx0fSBlbHNlIGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS50aGVuICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciBub24tdGhlbmFibGVzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29udHJvbCBgcmVzb2x2ZWAgYXJndW1lbnRzIGJ5IGxldHRpbmcgQXJyYXkjc2xpY2UgY2FzdCBib29sZWFuIGBub1ZhbHVlYCB0byBpbnRlZ2VyOlxuXHRcdFx0Ly8gKiBmYWxzZTogWyB2YWx1ZSBdLnNsaWNlKCAwICkgPT4gcmVzb2x2ZSggdmFsdWUgKVxuXHRcdFx0Ly8gKiB0cnVlOiBbIHZhbHVlIF0uc2xpY2UoIDEgKSA9PiByZXNvbHZlKClcblx0XHRcdHJlc29sdmUuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdLnNsaWNlKCBub1ZhbHVlICkgKTtcblx0XHR9XG5cblx0Ly8gRm9yIFByb21pc2VzL0ErLCBjb252ZXJ0IGV4Y2VwdGlvbnMgaW50byByZWplY3Rpb25zXG5cdC8vIFNpbmNlIGpRdWVyeS53aGVuIGRvZXNuJ3QgdW53cmFwIHRoZW5hYmxlcywgd2UgY2FuIHNraXAgdGhlIGV4dHJhIGNoZWNrcyBhcHBlYXJpbmcgaW5cblx0Ly8gRGVmZXJyZWQjdGhlbiB0byBjb25kaXRpb25hbGx5IHN1cHByZXNzIHJlamVjdGlvbi5cblx0fSBjYXRjaCAoIHZhbHVlICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgb25seVxuXHRcdC8vIFN0cmljdCBtb2RlIGZ1bmN0aW9ucyBpbnZva2VkIHdpdGhvdXQgLmNhbGwvLmFwcGx5IGdldCBnbG9iYWwtb2JqZWN0IGNvbnRleHRcblx0XHRyZWplY3QuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdICk7XG5cdH1cbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdERlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHtcblx0XHR2YXIgdHVwbGVzID0gW1xuXG5cdFx0XHRcdC8vIGFjdGlvbiwgYWRkIGxpc3RlbmVyLCBjYWxsYmFja3MsXG5cdFx0XHRcdC8vIC4uLiAudGhlbiBoYW5kbGVycywgYXJndW1lbnQgaW5kZXgsIFtmaW5hbCBzdGF0ZV1cblx0XHRcdFx0WyBcIm5vdGlmeVwiLCBcInByb2dyZXNzXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksIDIgXSxcblx0XHRcdFx0WyBcInJlc29sdmVcIiwgXCJkb25lXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAwLCBcInJlc29sdmVkXCIgXSxcblx0XHRcdFx0WyBcInJlamVjdFwiLCBcImZhaWxcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDEsIFwicmVqZWN0ZWRcIiBdXG5cdFx0XHRdLFxuXHRcdFx0c3RhdGUgPSBcInBlbmRpbmdcIixcblx0XHRcdHByb21pc2UgPSB7XG5cdFx0XHRcdHN0YXRlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3RhdGU7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFsd2F5czogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQuZG9uZSggYXJndW1lbnRzICkuZmFpbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwiY2F0Y2hcIjogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRcdHJldHVybiBwcm9taXNlLnRoZW4oIG51bGwsIGZuICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gS2VlcCBwaXBlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRwaXBlOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWwsIGZuUHJvZ3Jlc3MgKi8gKSB7XG5cdFx0XHRcdFx0dmFyIGZucyA9IGFyZ3VtZW50cztcblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBfaSwgdHVwbGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTWFwIHR1cGxlcyAocHJvZ3Jlc3MsIGRvbmUsIGZhaWwpIHRvIGFyZ3VtZW50cyAoZG9uZSwgZmFpbCwgcHJvZ3Jlc3MpXG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGlzRnVuY3Rpb24oIGZuc1sgdHVwbGVbIDQgXSBdICkgJiYgZm5zWyB0dXBsZVsgNCBdIF07XG5cblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQucHJvZ3Jlc3MoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIubm90aWZ5IH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmRvbmUoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVzb2x2ZSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5mYWlsKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlamVjdCB9KVxuXHRcdFx0XHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCAmJiBpc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC5wcm9taXNlKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXJbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBvblByb2dyZXNzICkge1xuXHRcdFx0XHRcdHZhciBtYXhEZXB0aCA9IDA7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gcmVzb2x2ZSggZGVwdGgsIGRlZmVycmVkLCBoYW5kbGVyLCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0YXJncyA9IGFyZ3VtZW50cyxcblx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQsIHRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4zXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01OVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIGRvdWJsZS1yZXNvbHV0aW9uIGF0dGVtcHRzXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoIDwgbWF4RGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5KCB0aGF0LCBhcmdzICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjFcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkID09PSBkZWZlcnJlZC5wcm9taXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoIFwiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uXCIgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMuMSwgMy41XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01NFxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNzVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2Vcblx0XHRcdFx0XHRcdFx0XHRcdHRoZW4gPSByZXR1cm5lZCAmJlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBjaGVjayBvYmplY3RzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZW5hYmlsaXR5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggdHlwZW9mIHJldHVybmVkID09PSBcIm9iamVjdFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHJldHVybmVkID09PSBcImZ1bmN0aW9uXCIgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC50aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYSByZXR1cm5lZCB0aGVuYWJsZVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGVuICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBwcm9jZXNzb3JzIChub3RpZnkpIGp1c3Qgd2FpdCBmb3IgcmVzb2x1dGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGFsc28gaG9vayBpbnRvIHByb2dyZXNzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgZGlzcmVnYXJkIG9sZGVyIHJlc29sdXRpb24gdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4RGVwdGgrKztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhbGwgb3RoZXIgcmV0dXJuZWQgdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gSWRlbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyByZXR1cm5lZCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUHJvY2VzcyB0aGUgdmFsdWUocylcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmYXVsdCBwcm9jZXNzIGlzIHJlc29sdmVcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCBzcGVjaWFsIHx8IGRlZmVycmVkLnJlc29sdmVXaXRoICkoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBub3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgY2F0Y2ggYW5kIHJlamVjdCBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcyA9IHNwZWNpYWwgP1xuXHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKCBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuNC4xXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgcG9zdC1yZXNvbHV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICsgMSA+PSBtYXhEZXB0aCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IFRocm93ZXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIGUgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuMVxuXHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01N1xuXHRcdFx0XHRcdFx0XHQvLyBSZS1yZXNvbHZlIHByb21pc2VzIGltbWVkaWF0ZWx5IHRvIGRvZGdlIGZhbHNlIHJlamVjdGlvbiBmcm9tXG5cdFx0XHRcdFx0XHRcdC8vIHN1YnNlcXVlbnQgZXJyb3JzXG5cdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcygpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FsbCBhbiBvcHRpb25hbCBob29rIHRvIHJlY29yZCB0aGUgc3RhY2ssIGluIGNhc2Ugb2YgZXhjZXB0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc2luY2UgaXQncyBvdGhlcndpc2UgbG9zdCB3aGVuIGV4ZWN1dGlvbiBnb2VzIGFzeW5jXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlID0galF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggcHJvY2VzcyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblxuXHRcdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblByb2dyZXNzICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25Qcm9ncmVzcyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlci5ub3RpZnlXaXRoXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDEgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uRnVsZmlsbGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25GdWxmaWxsZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHlcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAyIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblJlamVjdGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25SZWplY3RlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRUaHJvd2VyXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3Rcblx0XHRcdFx0cHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRcdFx0XHRyZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWZlcnJlZCA9IHt9O1xuXG5cdFx0Ly8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kc1xuXHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblx0XHRcdHZhciBsaXN0ID0gdHVwbGVbIDIgXSxcblx0XHRcdFx0c3RhdGVTdHJpbmcgPSB0dXBsZVsgNSBdO1xuXG5cdFx0XHQvLyBwcm9taXNlLnByb2dyZXNzID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZG9uZSA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmZhaWwgPSBsaXN0LmFkZFxuXHRcdFx0cHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7XG5cblx0XHRcdC8vIEhhbmRsZSBzdGF0ZVxuXHRcdFx0aWYgKCBzdGF0ZVN0cmluZyApIHtcblx0XHRcdFx0bGlzdC5hZGQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZXNvbHZlZFwiIChpLmUuLCBmdWxmaWxsZWQpXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVqZWN0ZWRcIlxuXHRcdFx0XHRcdFx0c3RhdGUgPSBzdGF0ZVN0cmluZztcblx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDIgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAzIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2NhbGxiYWNrcy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDIgXS5sb2NrLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0ubG9ja1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5maXJlXG5cdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0bGlzdC5hZGQoIHR1cGxlWyAzIF0uZmlyZSApO1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnkgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQubm90aWZ5V2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmUgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVzb2x2ZVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3QgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVqZWN0V2l0aCguLi4pIH1cblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHVuZGVmaW5lZCA6IHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH07XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlV2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdFdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0gPSBsaXN0LmZpcmVXaXRoO1xuXHRcdH0gKTtcblxuXHRcdC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZVxuXHRcdHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTtcblxuXHRcdC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnlcblx0XHRpZiAoIGZ1bmMgKSB7XG5cdFx0XHRmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBkb25lIVxuXHRcdHJldHVybiBkZWZlcnJlZDtcblx0fSxcblxuXHQvLyBEZWZlcnJlZCBoZWxwZXJcblx0d2hlbjogZnVuY3Rpb24oIHNpbmdsZVZhbHVlICkge1xuXHRcdHZhclxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXNcblx0XHRcdHJlbWFpbmluZyA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cblx0XHRcdC8vIGNvdW50IG9mIHVucHJvY2Vzc2VkIGFyZ3VtZW50c1xuXHRcdFx0aSA9IHJlbWFpbmluZyxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgZnVsZmlsbG1lbnQgZGF0YVxuXHRcdFx0cmVzb2x2ZUNvbnRleHRzID0gQXJyYXkoIGkgKSxcblx0XHRcdHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcblxuXHRcdFx0Ly8gdGhlIHByaW1hcnkgRGVmZXJyZWRcblx0XHRcdHByaW1hcnkgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgY2FsbGJhY2sgZmFjdG9yeVxuXHRcdFx0dXBkYXRlRnVuYyA9IGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJlc29sdmVDb250ZXh0c1sgaSBdID0gdGhpcztcblx0XHRcdFx0XHRyZXNvbHZlVmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApIDogdmFsdWU7XG5cdFx0XHRcdFx0aWYgKCAhKCAtLXJlbWFpbmluZyApICkge1xuXHRcdFx0XHRcdFx0cHJpbWFyeS5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdC8vIFNpbmdsZS0gYW5kIGVtcHR5IGFyZ3VtZW50cyBhcmUgYWRvcHRlZCBsaWtlIFByb21pc2UucmVzb2x2ZVxuXHRcdGlmICggcmVtYWluaW5nIDw9IDEgKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCBzaW5nbGVWYWx1ZSwgcHJpbWFyeS5kb25lKCB1cGRhdGVGdW5jKCBpICkgKS5yZXNvbHZlLCBwcmltYXJ5LnJlamVjdCxcblx0XHRcdFx0IXJlbWFpbmluZyApO1xuXG5cdFx0XHQvLyBVc2UgLnRoZW4oKSB0byB1bndyYXAgc2Vjb25kYXJ5IHRoZW5hYmxlcyAoY2YuIGdoLTMwMDApXG5cdFx0XHRpZiAoIHByaW1hcnkuc3RhdGUoKSA9PT0gXCJwZW5kaW5nXCIgfHxcblx0XHRcdFx0aXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIHJlc29sdmVWYWx1ZXNbIGkgXS50aGVuICkgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHByaW1hcnkudGhlbigpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGFyZ3VtZW50cyBhcmUgYWdncmVnYXRlZCBsaWtlIFByb21pc2UuYWxsIGFycmF5IGVsZW1lbnRzXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCByZXNvbHZlVmFsdWVzWyBpIF0sIHVwZGF0ZUZ1bmMoIGkgKSwgcHJpbWFyeS5yZWplY3QgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJpbWFyeS5wcm9taXNlKCk7XG5cdH1cbn0gKTtcblxuXG4vLyBUaGVzZSB1c3VhbGx5IGluZGljYXRlIGEgcHJvZ3JhbW1lciBtaXN0YWtlIGR1cmluZyBkZXZlbG9wbWVudCxcbi8vIHdhcm4gYWJvdXQgdGhlbSBBU0FQIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcgdGhlbSBieSBkZWZhdWx0LlxudmFyIHJlcnJvck5hbWVzID0gL14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87XG5cbmpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24oIGVycm9yLCBzdGFjayApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gOSBvbmx5XG5cdC8vIENvbnNvbGUgZXhpc3RzIHdoZW4gZGV2IHRvb2xzIGFyZSBvcGVuLCB3aGljaCBjYW4gaGFwcGVuIGF0IGFueSB0aW1lXG5cdGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUud2FybiAmJiBlcnJvciAmJiByZXJyb3JOYW1lcy50ZXN0KCBlcnJvci5uYW1lICkgKSB7XG5cdFx0d2luZG93LmNvbnNvbGUud2FybiggXCJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9uOiBcIiArIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBzdGFjayApO1xuXHR9XG59O1xuXG5cblxuXG5qUXVlcnkucmVhZHlFeGNlcHRpb24gPSBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHR0aHJvdyBlcnJvcjtcblx0fSApO1xufTtcblxuXG5cblxuLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5XG52YXIgcmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7XG5cbmpRdWVyeS5mbi5yZWFkeSA9IGZ1bmN0aW9uKCBmbiApIHtcblxuXHRyZWFkeUxpc3Rcblx0XHQudGhlbiggZm4gKVxuXG5cdFx0Ly8gV3JhcCBqUXVlcnkucmVhZHlFeGNlcHRpb24gaW4gYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBsb29rdXBcblx0XHQvLyBoYXBwZW5zIGF0IHRoZSB0aW1lIG9mIGVycm9yIGhhbmRsaW5nIGluc3RlYWQgb2YgY2FsbGJhY2tcblx0XHQvLyByZWdpc3RyYXRpb24uXG5cdFx0LmNhdGNoKCBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdFx0XHRqUXVlcnkucmVhZHlFeGNlcHRpb24oIGVycm9yICk7XG5cdFx0fSApO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuXG5cdGlzUmVhZHk6IGZhbHNlLFxuXG5cdC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmVcblx0Ly8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODFcblx0cmVhZHlXYWl0OiAxLFxuXG5cdC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHlcblx0cmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkge1xuXG5cdFx0Ly8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeVxuXHRcdGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeVxuXHRcdGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTtcblxuXHRcdC8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlXG5cdFx0aWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZVxuXHRcdHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkucmVhZHkudGhlbiA9IHJlYWR5TGlzdC50aGVuO1xuXG4vLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZFxuZnVuY3Rpb24gY29tcGxldGVkKCkge1xuXHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG5cdGpRdWVyeS5yZWFkeSgpO1xufVxuXG4vLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZFxuLy8gYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMCBvbmx5XG4vLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyBcImludGVyYWN0aXZlXCIgdG9vIHNvb25cbmlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiIHx8XG5cdCggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gXCJsb2FkaW5nXCIgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCApICkge1xuXG5cdC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeVxuXHR3aW5kb3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7XG5cbn0gZWxzZSB7XG5cblx0Ly8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFja1xuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cblx0Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcbn1cblxuXG5cblxuLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgb2YgYSBjb2xsZWN0aW9uXG4vLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb25cbnZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBlbGVtcy5sZW5ndGgsXG5cdFx0YnVsayA9IGtleSA9PSBudWxsO1xuXG5cdC8vIFNldHMgbWFueSB2YWx1ZXNcblx0aWYgKCB0b1R5cGUoIGtleSApID09PSBcIm9iamVjdFwiICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cdFx0Zm9yICggaSBpbiBrZXkgKSB7XG5cdFx0XHRhY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5WyBpIF0sIHRydWUsIGVtcHR5R2V0LCByYXcgKTtcblx0XHR9XG5cblx0Ly8gU2V0cyBvbmUgdmFsdWVcblx0fSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXG5cdFx0aWYgKCAhaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJhdyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBidWxrICkge1xuXG5cdFx0XHQvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXRcblx0XHRcdGlmICggcmF3ICkge1xuXHRcdFx0XHRmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTtcblx0XHRcdFx0Zm4gPSBudWxsO1xuXG5cdFx0XHQvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWxrID0gZm47XG5cdFx0XHRcdGZuID0gZnVuY3Rpb24oIGVsZW0sIF9rZXksIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiBidWxrLmNhbGwoIGpRdWVyeSggZWxlbSApLCB2YWx1ZSApO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0Zm4oXG5cdFx0XHRcdFx0ZWxlbXNbIGkgXSwga2V5LCByYXcgP1xuXHRcdFx0XHRcdFx0dmFsdWUgOlxuXHRcdFx0XHRcdFx0dmFsdWUuY2FsbCggZWxlbXNbIGkgXSwgaSwgZm4oIGVsZW1zWyBpIF0sIGtleSApIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIGNoYWluYWJsZSApIHtcblx0XHRyZXR1cm4gZWxlbXM7XG5cdH1cblxuXHQvLyBHZXRzXG5cdGlmICggYnVsayApIHtcblx0XHRyZXR1cm4gZm4uY2FsbCggZWxlbXMgKTtcblx0fVxuXG5cdHJldHVybiBsZW4gPyBmbiggZWxlbXNbIDAgXSwga2V5ICkgOiBlbXB0eUdldDtcbn07XG5cblxuLy8gTWF0Y2hlcyBkYXNoZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nXG52YXIgcm1zUHJlZml4ID0gL14tbXMtLyxcblx0cmRhc2hBbHBoYSA9IC8tKFthLXpdKS9nO1xuXG4vLyBVc2VkIGJ5IGNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKClcbmZ1bmN0aW9uIGZjYW1lbENhc2UoIF9hbGwsIGxldHRlciApIHtcblx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xufVxuXG4vLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG4vLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpXG5mdW5jdGlvbiBjYW1lbENhc2UoIHN0cmluZyApIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG59XG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0cmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xufVxuXG5EYXRhLnVpZCA9IDE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXG5cdGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS5cblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBvd25lciApICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHRcdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHRcdFx0Ly8gZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBkYXRhICkgXSA9IHZhbHVlO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCB7IHByb3BlcnRpZXMgfSBdIGFyZ3Ncblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdFxuXHRcdFx0Zm9yICggcHJvcCBpbiBkYXRhICkge1xuXHRcdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBwcm9wICkgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzLmNhY2hlKCBvd25lciApIDpcblxuXHRcdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsgY2FtZWxDYXNlKCBrZXkgKSBdO1xuXHR9LFxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWRcblx0XHQvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWRcblx0XHQvL1xuXHRcdC8vIFRha2UgdGhlIFwicmVhZFwiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZVxuXHRcdC8vIHdoaWNoIHZhbHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3Rcblx0XHQvLyAgIDIuIFRoZSBkYXRhIHN0b3JlZCBhdCB0aGUga2V5XG5cdFx0Ly9cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0KCBvd25lciwga2V5ICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWVcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXNcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vXG5cdFx0dGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcblx0XHQvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl1cblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHZhciBpLFxuXHRcdFx0Y2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHRpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSgga2V5ICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYga2V5IGlzIGFuIGFycmF5IG9mIGtleXMuLi5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHNldCBjYW1lbENhc2Uga2V5cywgc28gcmVtb3ZlIHRoYXQuXG5cdFx0XHRcdGtleSA9IGtleS5tYXAoIGNhbWVsQ2FzZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdGtleSA9IGtleSBpbiBjYWNoZSA/XG5cdFx0XHRcdFx0WyBrZXkgXSA6XG5cdFx0XHRcdFx0KCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0ga2V5Lmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgdGhlcmUncyBubyBtb3JlIGRhdGFcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1XG5cdFx0XHQvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllc1xuXHRcdFx0Ly8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3IChidWcgcmVzdHJpY3RlZClcblx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cdFx0dmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTtcblx0fVxufTtcbnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7XG5cbnZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvW0EtWl0vZztcblxuZnVuY3Rpb24gZ2V0RGF0YSggZGF0YSApIHtcblx0aWYgKCBkYXRhID09PSBcInRydWVcIiApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJmYWxzZVwiICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJudWxsXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZ1xuXHRpZiAoIGRhdGEgPT09ICtkYXRhICsgXCJcIiApIHtcblx0XHRyZXR1cm4gK2RhdGE7XG5cdH1cblxuXHRpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkgKSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKTtcblx0fVxuXG5cdHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xuXHR2YXIgbmFtZTtcblxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJCZcIiApLnRvTG93ZXJDYXNlKCk7XG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0YSA9IGdldERhdGEoIGRhdGEgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTtcblx0fSxcblxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0YXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlcztcblxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBUaGUgYXR0cnMgZWxlbWVudHMgY2FuIGJlIG51bGwgKCMxNDg5NClcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBuYW1lLmluZGV4T2YoIFwiZGF0YS1cIiApID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBjYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhO1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YVxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCB0aGUgZGF0YS4uLlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc3RvcmUgdGhlIGNhbWVsQ2FzZWQga2V5XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBxdWV1ZTtcblxuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXG5cdFx0XHRpZiAoIGRhdGEgKSB7XG5cdFx0XHRcdGlmICggIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG5cblx0dmFyIGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXHRcdH0sXG5cdFx0Y29tcG9zZWQgPSB7IGNvbXBvc2VkOiB0cnVlIH07XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4KywgaU9TIDEwLjAgLSAxMC4yIG9ubHlcblx0Ly8gQ2hlY2sgYXR0YWNobWVudCBhY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyaWVzIHdoZW4gcG9zc2libGUgKGdoLTM1MDQpXG5cdC8vIFN1cHBvcnQ6IGlPUyAxMC4wLTEwLjIgb25seVxuXHQvLyBFYXJseSBpT1MgMTAgdmVyc2lvbnMgc3VwcG9ydCBgYXR0YWNoU2hhZG93YCBidXQgbm90IGBnZXRSb290Tm9kZWAsXG5cdC8vIGxlYWRpbmcgdG8gZXJyb3JzLiBXZSBuZWVkIHRvIGNoZWNrIGZvciBgZ2V0Um9vdE5vZGVgLlxuXHRpZiAoIGRvY3VtZW50RWxlbWVudC5nZXRSb290Tm9kZSApIHtcblx0XHRpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSB8fFxuXHRcdFx0XHRlbGVtLmdldFJvb3ROb2RlKCBjb21wb3NlZCApID09PSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0fTtcblx0fVxudmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHtcblxuXHRcdC8vIGlzSGlkZGVuV2l0aGluVHJlZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxuXHRcdGVsZW0gPSBlbCB8fCBlbGVtO1xuXG5cdFx0Ly8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGxcblx0XHRyZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fFxuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmXG5cblx0XHRcdC8vIE90aGVyd2lzZSwgY2hlY2sgY29tcHV0ZWQgc3R5bGVcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MyAtIDQ1XG5cdFx0XHQvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhhdmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXNcblx0XHRcdC8vIGluIHRoZSBkb2N1bWVudC5cblx0XHRcdGlzQXR0YWNoZWQoIGVsZW0gKSAmJlxuXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApID09PSBcIm5vbmVcIjtcblx0fTtcblxuXG5cbmZ1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7XG5cdHZhciBhZGp1c3RlZCwgc2NhbGUsXG5cdFx0bWF4SXRlcmF0aW9ucyA9IDIwLFxuXHRcdGN1cnJlbnRWYWx1ZSA9IHR3ZWVuID9cblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uY3VyKCk7XG5cdFx0XHR9IDpcblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgcHJvcCwgXCJcIiApO1xuXHRcdFx0fSxcblx0XHRpbml0aWFsID0gY3VycmVudFZhbHVlKCksXG5cdFx0dW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApLFxuXG5cdFx0Ly8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXNcblx0XHRpbml0aWFsSW5Vbml0ID0gZWxlbS5ub2RlVHlwZSAmJlxuXHRcdFx0KCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gXCJweFwiICYmICtpbml0aWFsICkgJiZcblx0XHRcdHJjc3NOdW0uZXhlYyggalF1ZXJ5LmNzcyggZWxlbSwgcHJvcCApICk7XG5cblx0aWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0gdW5pdCApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHRcdC8vIEhhbHZlIHRoZSBpdGVyYXRpb24gdGFyZ2V0IHZhbHVlIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlIGZyb20gQ1NTIHVwcGVyIGJvdW5kcyAoZ2gtMjE0NClcblx0XHRpbml0aWFsID0gaW5pdGlhbCAvIDI7XG5cblx0XHQvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBqUXVlcnkuY3NzXG5cdFx0dW5pdCA9IHVuaXQgfHwgaW5pdGlhbEluVW5pdFsgMyBdO1xuXG5cdFx0Ly8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnRcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTtcblxuXHRcdHdoaWxlICggbWF4SXRlcmF0aW9ucy0tICkge1xuXG5cdFx0XHQvLyBFdmFsdWF0ZSBhbmQgdXBkYXRlIG91ciBiZXN0IGd1ZXNzIChkb3VibGluZyBndWVzc2VzIHRoYXQgemVybyBvdXQpLlxuXHRcdFx0Ly8gRmluaXNoIGlmIHRoZSBzY2FsZSBlcXVhbHMgb3IgY3Jvc3NlcyAxIChtYWtpbmcgdGhlIG9sZCpuZXcgcHJvZHVjdCBub24tcG9zaXRpdmUpLlxuXHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXHRcdFx0aWYgKCAoIDEgLSBzY2FsZSApICogKCAxIC0gKCBzY2FsZSA9IGN1cnJlbnRWYWx1ZSgpIC8gaW5pdGlhbCB8fCAwLjUgKSApIDw9IDAgKSB7XG5cdFx0XHRcdG1heEl0ZXJhdGlvbnMgPSAwO1xuXHRcdFx0fVxuXHRcdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTtcblxuXHRcdH1cblxuXHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0ICogMjtcblx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uXG5cdFx0dmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107XG5cdH1cblxuXHRpZiAoIHZhbHVlUGFydHMgKSB7XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsSW5Vbml0IHx8ICtpbml0aWFsIHx8IDA7XG5cblx0XHQvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWRcblx0XHRhZGp1c3RlZCA9IHZhbHVlUGFydHNbIDEgXSA/XG5cdFx0XHRpbml0aWFsSW5Vbml0ICsgKCB2YWx1ZVBhcnRzWyAxIF0gKyAxICkgKiB2YWx1ZVBhcnRzWyAyIF0gOlxuXHRcdFx0K3ZhbHVlUGFydHNbIDIgXTtcblx0XHRpZiAoIHR3ZWVuICkge1xuXHRcdFx0dHdlZW4udW5pdCA9IHVuaXQ7XG5cdFx0XHR0d2Vlbi5zdGFydCA9IGluaXRpYWxJblVuaXQ7XG5cdFx0XHR0d2Vlbi5lbmQgPSBhZGp1c3RlZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFkanVzdGVkO1xufVxuXG5cbnZhciBkZWZhdWx0RGlzcGxheU1hcCA9IHt9O1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApIHtcblx0dmFyIHRlbXAsXG5cdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50LFxuXHRcdG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSxcblx0XHRkaXNwbGF5ID0gZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF07XG5cblx0aWYgKCBkaXNwbGF5ICkge1xuXHRcdHJldHVybiBkaXNwbGF5O1xuXHR9XG5cblx0dGVtcCA9IGRvYy5ib2R5LmFwcGVuZENoaWxkKCBkb2MuY3JlYXRlRWxlbWVudCggbm9kZU5hbWUgKSApO1xuXHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGVtcCwgXCJkaXNwbGF5XCIgKTtcblxuXHR0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRlbXAgKTtcblxuXHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdGRpc3BsYXkgPSBcImJsb2NrXCI7XG5cdH1cblx0ZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF0gPSBkaXNwbGF5O1xuXG5cdHJldHVybiBkaXNwbGF5O1xufVxuXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XG5cdHZhciBkaXNwbGF5LCBlbGVtLFxuXHRcdHZhbHVlcyA9IFtdLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cblx0Ly8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5O1xuXHRcdGlmICggc2hvdyApIHtcblxuXHRcdFx0Ly8gU2luY2Ugd2UgZm9yY2UgdmlzaWJpbGl0eSB1cG9uIGNhc2NhZGUtaGlkZGVuIGVsZW1lbnRzLCBhbiBpbW1lZGlhdGUgKGFuZCBzbG93KVxuXHRcdFx0Ly8gY2hlY2sgaXMgcmVxdWlyZWQgaW4gdGhpcyBmaXJzdCBsb29wIHVubGVzcyB3ZSBoYXZlIGEgbm9uZW1wdHkgZGlzcGxheSB2YWx1ZSAoZWl0aGVyXG5cdFx0XHQvLyBpbmxpbmUgb3IgYWJvdXQtdG8tYmUtcmVzdG9yZWQpXG5cdFx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICkgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCAhdmFsdWVzWyBpbmRleCBdICkge1xuXHRcdFx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIGRpc3BsYXkgIT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBcIm5vbmVcIjtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB3aGF0IHdlJ3JlIG92ZXJ3cml0aW5nXG5cdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJkaXNwbGF5XCIsIGRpc3BsYXkgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTZXQgdGhlIGRpc3BsYXkgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AgdG8gYXZvaWQgY29uc3RhbnQgcmVmbG93XG5cdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCB2YWx1ZXNbIGluZGV4IF0gIT0gbnVsbCApIHtcblx0XHRcdGVsZW1lbnRzWyBpbmRleCBdLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZXNbIGluZGV4IF07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRzO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApO1xuXHR9LFxuXHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTtcblx0fSxcblx0dG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNIaWRkZW5XaXRoaW5UcmVlKCB0aGlzICkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnNob3coKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcbnZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTtcblxudmFyIHJ0YWdOYW1lID0gKCAvPChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSopL2kgKTtcblxudmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8Xm1vZHVsZSR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0ZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApLFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seVxuXHQvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAoIzExMjE3KVxuXHQvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpXG5cdC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKVxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcInJhZGlvXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJ0XCIgKTtcblxuXHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSBvbmx5XG5cdC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50c1xuXHRzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkXG5cdGRpdi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIjtcblx0c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0Ly8gSUUgPD05IHJlcGxhY2VzIDxvcHRpb24+IHRhZ3Mgd2l0aCB0aGVpciBjb250ZW50cyB3aGVuIGluc2VydGVkIG91dHNpZGUgb2Zcblx0Ly8gdGhlIHNlbGVjdCBlbGVtZW50LlxuXHRkaXYuaW5uZXJIVE1MID0gXCI8b3B0aW9uPjwvb3B0aW9uPlwiO1xuXHRzdXBwb3J0Lm9wdGlvbiA9ICEhZGl2Lmxhc3RDaGlsZDtcbn0gKSgpO1xuXG5cbi8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApXG52YXIgd3JhcE1hcCA9IHtcblxuXHQvLyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZVxuXHQvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuXG5cdC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1aXJlZCBlbGVtZW50cy5cblx0dGhlYWQ6IFsgMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIiBdLFxuXHRjb2w6IFsgMiwgXCI8dGFibGU+PGNvbGdyb3VwPlwiLCBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIiBdLFxuXHR0cjogWyAyLCBcIjx0YWJsZT48dGJvZHk+XCIsIFwiPC90Ym9keT48L3RhYmxlPlwiIF0sXG5cdHRkOiBbIDMsIFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsIFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCIgXSxcblxuXHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cbn07XG5cbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbmlmICggIXN1cHBvcnQub3B0aW9uICkge1xuXHR3cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb24gPSBbIDEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiIF07XG59XG5cblxuZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBVc2UgdHlwZW9mIHRvIGF2b2lkIHplcm8tYXJndW1lbnQgbWV0aG9kIGludm9jYXRpb24gb24gaG9zdCBvYmplY3RzICgjMTUxNTEpXG5cdHZhciByZXQ7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2UgaWYgKCB0eXBlb2YgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIHtcblx0XHRyZXQgPSBbXTtcblx0fVxuXG5cdGlmICggdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIG5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICk7XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufVxuXG5cbi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZFxuZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZGF0YVByaXYuc2V0KFxuXHRcdFx0ZWxlbXNbIGkgXSxcblx0XHRcdFwiZ2xvYmFsRXZhbFwiLFxuXHRcdFx0IXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgXCJnbG9iYWxFdmFsXCIgKVxuXHRcdCk7XG5cdH1cbn1cblxuXG52YXIgcmh0bWwgPSAvPHwmIz9cXHcrOy87XG5cbmZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7XG5cdHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgYXR0YWNoZWQsIGosXG5cdFx0ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRub2RlcyA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGVsZW0gPSBlbGVtc1sgaSBdO1xuXG5cdFx0aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7XG5cblx0XHRcdC8vIEFkZCBub2RlcyBkaXJlY3RseVxuXHRcdFx0aWYgKCB0b1R5cGUoIGVsZW0gKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCBlbGVtLm5vZGVUeXBlID8gWyBlbGVtIF0gOiBlbGVtICk7XG5cblx0XHRcdC8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRleHQgbm9kZVxuXHRcdFx0fSBlbHNlIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHtcblx0XHRcdFx0bm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7XG5cblx0XHRcdC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2Rlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXG5cdFx0XHRcdC8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25cblx0XHRcdFx0dGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0O1xuXHRcdFx0XHR0bXAuaW5uZXJIVE1MID0gd3JhcFsgMSBdICsgalF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIGVsZW0gKSArIHdyYXBbIDIgXTtcblxuXHRcdFx0XHQvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnRcblx0XHRcdFx0aiA9IHdyYXBbIDAgXTtcblx0XHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdFx0dG1wID0gdG1wLmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXJcblx0XHRcdFx0dG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdFx0XHQvLyBFbnN1cmUgdGhlIGNyZWF0ZWQgbm9kZXMgYXJlIG9ycGhhbmVkICgjMTIzOTIpXG5cdFx0XHRcdHRtcC50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBmcmFnbWVudFxuXHRmcmFnbWVudC50ZXh0Q29udGVudCA9IFwiXCI7XG5cblx0aSA9IDA7XG5cdHdoaWxlICggKCBlbGVtID0gbm9kZXNbIGkrKyBdICkgKSB7XG5cblx0XHQvLyBTa2lwIGVsZW1lbnRzIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgY29sbGVjdGlvbiAodHJhYy00MDg3KVxuXHRcdGlmICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSA+IC0xICkge1xuXHRcdFx0aWYgKCBpZ25vcmVkICkge1xuXHRcdFx0XHRpZ25vcmVkLnB1c2goIGVsZW0gKTtcblx0XHRcdH1cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGF0dGFjaGVkID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gQXBwZW5kIHRvIGZyYWdtZW50XG5cdFx0dG1wID0gZ2V0QWxsKCBmcmFnbWVudC5hcHBlbmRDaGlsZCggZWxlbSApLCBcInNjcmlwdFwiICk7XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0aWYgKCBhdHRhY2hlZCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIHRtcCApO1xuXHRcdH1cblxuXHRcdC8vIENhcHR1cmUgZXhlY3V0YWJsZXNcblx0XHRpZiAoIHNjcmlwdHMgKSB7XG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdG1wWyBqKysgXSApICkge1xuXHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdFx0c2NyaXB0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZnJhZ21lbnQ7XG59XG5cblxudmFyIHJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSopKD86XFwuKC4rKXwpLztcblxuZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJldHVybkZhbHNlKCkge1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuLy8gZm9jdXMoKSBhbmQgYmx1cigpIGFyZSBhc3luY2hyb25vdXMsIGV4Y2VwdCB3aGVuIHRoZXkgYXJlIG5vLW9wLlxuLy8gU28gZXhwZWN0IGZvY3VzIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSBhY3RpdmUsXG4vLyBhbmQgYmx1ciB0byBiZSBzeW5jaHJvbm91cyB3aGVuIHRoZSBlbGVtZW50IGlzIG5vdCBhbHJlYWR5IGFjdGl2ZS5cbi8vIChmb2N1cyBhbmQgYmx1ciBhcmUgYWx3YXlzIHN5bmNocm9ub3VzIGluIG90aGVyIHN1cHBvcnRlZCBicm93c2Vycyxcbi8vIHRoaXMganVzdCBkZWZpbmVzIHdoZW4gd2UgY2FuIGNvdW50IG9uIGl0KS5cbmZ1bmN0aW9uIGV4cGVjdFN5bmMoIGVsZW0sIHR5cGUgKSB7XG5cdHJldHVybiAoIGVsZW0gPT09IHNhZmVBY3RpdmVFbGVtZW50KCkgKSA9PT0gKCB0eXBlID09PSBcImZvY3VzXCIgKTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIEFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGNhbiB0aHJvdyB1bmV4cGVjdGVkbHlcbi8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM5M1xuZnVuY3Rpb24gc2FmZUFjdGl2ZUVsZW1lbnQoKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdH0gY2F0Y2ggKCBlcnIgKSB7IH1cbn1cblxuZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHtcblx0dmFyIG9yaWdGbiwgdHlwZTtcblxuXHQvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnNcblx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKVxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApXG5cdFx0XHRkYXRhID0gZGF0YSB8fCBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0b24oIGVsZW0sIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xuXG5cdFx0Ly8gKCB0eXBlcywgZm4gKVxuXHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0ZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkge1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBkYXRhLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0fSBlbHNlIGlmICggIWZuICkge1xuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBvbmUgPT09IDEgKSB7XG5cdFx0b3JpZ0ZuID0gZm47XG5cdFx0Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mb1xuXHRcdFx0alF1ZXJ5KCkub2ZmKCBldmVudCApO1xuXHRcdFx0cmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fTtcblxuXHRcdC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuXG5cdFx0Zm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7XG5cdH1cblx0cmV0dXJuIGVsZW0uZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0alF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApO1xuXHR9ICk7XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG4gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLlxuICovXG5qUXVlcnkuZXZlbnQgPSB7XG5cblx0Z2xvYmFsOiB7fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7XG5cblx0XHR2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHQvLyBPbmx5IGF0dGFjaCBldmVudHMgdG8gb2JqZWN0cyB0aGF0IGFjY2VwdCBkYXRhXG5cdFx0aWYgKCAhYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlclxuXHRcdGlmICggaGFuZGxlci5oYW5kbGVyICkge1xuXHRcdFx0aGFuZGxlT2JqSW4gPSBoYW5kbGVyO1xuXHRcdFx0aGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7XG5cdFx0XHRzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSB0aGF0IGludmFsaWQgc2VsZWN0b3JzIHRocm93IGV4Y2VwdGlvbnMgYXQgYXR0YWNoIHRpbWVcblx0XHQvLyBFdmFsdWF0ZSBhZ2FpbnN0IGRvY3VtZW50RWxlbWVudCBpbiBjYXNlIGVsZW0gaXMgYSBub24tZWxlbWVudCBub2RlIChlLmcuLCBkb2N1bWVudClcblx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBkb2N1bWVudEVsZW1lbnQsIHNlbGVjdG9yICk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyXG5cdFx0aWYgKCAhaGFuZGxlci5ndWlkICkge1xuXHRcdFx0aGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKztcblx0XHR9XG5cblx0XHQvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG5cdFx0aWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IE9iamVjdC5jcmVhdGUoIG51bGwgKTtcblx0XHR9XG5cdFx0aWYgKCAhKCBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSApICkge1xuXHRcdFx0ZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHtcblxuXHRcdFx0XHQvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZFxuXHRcdFx0XHQvLyB3aGVuIGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSA/XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZVxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBUaGVyZSAqbXVzdCogYmUgYSB0eXBlLCBubyBhdHRhY2hpbmcgbmFtZXNwYWNlLW9ubHkgaGFuZGxlcnNcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGVcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblxuXHRcdFx0Ly8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzXG5cdFx0XHRoYW5kbGVPYmogPSBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdG9yaWdUeXBlOiBvcmlnVHlwZSxcblx0XHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdFx0aGFuZGxlcjogaGFuZGxlcixcblx0XHRcdFx0Z3VpZDogaGFuZGxlci5ndWlkLFxuXHRcdFx0XHRzZWxlY3Rvcjogc2VsZWN0b3IsXG5cdFx0XHRcdG5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksXG5cdFx0XHRcdG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApXG5cdFx0XHR9LCBoYW5kbGVPYmpJbiApO1xuXG5cdFx0XHQvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdFxuXHRcdFx0aWYgKCAhKCBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdICkgKSB7XG5cdFx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTtcblx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7XG5cblx0XHRcdFx0Ly8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlXG5cdFx0XHRcdGlmICggIXNwZWNpYWwuc2V0dXAgfHxcblx0XHRcdFx0XHRzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggc3BlY2lhbC5hZGQgKSB7XG5cdFx0XHRcdHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXG5cdFx0XHRcdGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udFxuXHRcdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb25cblx0XHRcdGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7XG5cdFx0fVxuXG5cdH0sXG5cblx0Ly8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50XG5cdHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7XG5cblx0XHR2YXIgaiwgb3JpZ0NvdW50LCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0aWYgKCAhZWxlbURhdGEgfHwgISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZFxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhpcyBuYW1lc3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnRcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBlc1sgdCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107XG5cdFx0XHR0bXAgPSB0bXBbIDIgXSAmJlxuXHRcdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKTtcblxuXHRcdFx0Ly8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50c1xuXHRcdFx0b3JpZ0NvdW50ID0gaiA9IGhhbmRsZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBdO1xuXG5cdFx0XHRcdGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiZcblx0XHRcdFx0XHQoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJlxuXHRcdFx0XHRcdCggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiZcblx0XHRcdFx0XHQoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8XG5cdFx0XHRcdFx0XHRzZWxlY3RvciA9PT0gXCIqKlwiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkge1xuXHRcdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaiwgMSApO1xuXG5cdFx0XHRcdFx0aWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc3BlY2lhbC5yZW1vdmUgKSB7XG5cdFx0XHRcdFx0XHRzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdFxuXHRcdFx0Ly8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpXG5cdFx0XHRpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGVsZXRlIGV2ZW50c1sgdHlwZSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSBkYXRhIGFuZCB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkXG5cdFx0aWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdGRpc3BhdGNoOiBmdW5jdGlvbiggbmF0aXZlRXZlbnQgKSB7XG5cblx0XHR2YXIgaSwgaiwgcmV0LCBtYXRjaGVkLCBoYW5kbGVPYmosIGhhbmRsZXJRdWV1ZSxcblx0XHRcdGFyZ3MgPSBuZXcgQXJyYXkoIGFyZ3VtZW50cy5sZW5ndGggKSxcblxuXHRcdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0XHRldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICksXG5cblx0XHRcdGhhbmRsZXJzID0gKFxuXHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsIClcblx0XHRcdClbIGV2ZW50LnR5cGUgXSB8fCBbXSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9O1xuXG5cdFx0Ly8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnRcblx0XHRhcmdzWyAwIF0gPSBldmVudDtcblxuXHRcdGZvciAoIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0YXJnc1sgaSBdID0gYXJndW1lbnRzWyBpIF07XG5cdFx0fVxuXG5cdFx0ZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzO1xuXG5cdFx0Ly8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZFxuXHRcdGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBoYW5kbGVyc1xuXHRcdGhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTtcblxuXHRcdC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtO1xuXG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSApICYmXG5cdFx0XHRcdCFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZSBldmVudCBpcyBuYW1lc3BhY2VkLCB0aGVuIGVhY2ggaGFuZGxlciBpcyBvbmx5IGludm9rZWQgaWYgaXQgaXNcblx0XHRcdFx0Ly8gc3BlY2lhbGx5IHVuaXZlcnNhbCBvciBpdHMgbmFtZXNwYWNlcyBhcmUgYSBzdXBlcnNldCBvZiB0aGUgZXZlbnQncy5cblx0XHRcdFx0aWYgKCAhZXZlbnQucm5hbWVzcGFjZSB8fCBoYW5kbGVPYmoubmFtZXNwYWNlID09PSBmYWxzZSB8fFxuXHRcdFx0XHRcdGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkge1xuXG5cdFx0XHRcdFx0ZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqO1xuXHRcdFx0XHRcdGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTtcblxuXHRcdFx0XHRcdHJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHxcblx0XHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApO1xuXG5cdFx0XHRcdFx0aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdGlmICggKCBldmVudC5yZXN1bHQgPSByZXQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGVcblx0XHRpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkge1xuXHRcdFx0c3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdGhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkge1xuXHRcdHZhciBpLCBoYW5kbGVPYmosIHNlbCwgbWF0Y2hlZEhhbmRsZXJzLCBtYXRjaGVkU2VsZWN0b3JzLFxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXG5cdFx0XHRkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCxcblx0XHRcdGN1ciA9IGV2ZW50LnRhcmdldDtcblxuXHRcdC8vIEZpbmQgZGVsZWdhdGUgaGFuZGxlcnNcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05XG5cdFx0XHQvLyBCbGFjay1ob2xlIFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAodHJhYy0xMzE4MClcblx0XHRcdGN1ci5ub2RlVHlwZSAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDJcblx0XHRcdC8vIFN1cHByZXNzIHNwZWMtdmlvbGF0aW5nIGNsaWNrcyBpbmRpY2F0aW5nIGEgbm9uLXByaW1hcnkgcG9pbnRlciBidXR0b24gKHRyYWMtMzg2MSlcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50LXR5cGUtY2xpY2tcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdC8vIC4uLmJ1dCBub3QgYXJyb3cga2V5IFwiY2xpY2tzXCIgb2YgcmFkaW8gaW5wdXRzLCB3aGljaCBjYW4gaGF2ZSBgYnV0dG9uYCAtMSAoZ2gtMjM0Mylcblx0XHRcdCEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBldmVudC5idXR0b24gPj0gMSApICkge1xuXG5cdFx0XHRmb3IgKCA7IGN1ciAhPT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKCMxMzIwOClcblx0XHRcdFx0Ly8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKCM2OTExLCAjODE2NSwgIzExMzgyLCAjMTE3NjQpXG5cdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlID09PSAxICYmICEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBjdXIuZGlzYWJsZWQgPT09IHRydWUgKSApIHtcblx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMgPSBbXTtcblx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzID0ge307XG5cdFx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdO1xuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBjb25mbGljdCB3aXRoIE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoIzEzMjAzKVxuXHRcdFx0XHRcdFx0c2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgXCIgXCI7XG5cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID9cblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+IC0xIDpcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRIYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVkSGFuZGxlcnMgfSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnNcblx0XHRjdXIgPSB0aGlzO1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBoYW5kbGVyUXVldWU7XG5cdH0sXG5cblx0YWRkUHJvcDogZnVuY3Rpb24oIG5hbWUsIGhvb2sgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBqUXVlcnkuRXZlbnQucHJvdG90eXBlLCBuYW1lLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXG5cdFx0XHRnZXQ6IGlzRnVuY3Rpb24oIGhvb2sgKSA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGhvb2soIHRoaXMub3JpZ2luYWxFdmVudCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFsgbmFtZSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgbmFtZSwge1xuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGZpeDogZnVuY3Rpb24oIG9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0cmV0dXJuIG9yaWdpbmFsRXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0b3JpZ2luYWxFdmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7XG5cdH0sXG5cblx0c3BlY2lhbDoge1xuXHRcdGxvYWQ6IHtcblxuXHRcdFx0Ly8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZFxuXHRcdFx0bm9CdWJibGU6IHRydWVcblx0XHR9LFxuXHRcdGNsaWNrOiB7XG5cblx0XHRcdC8vIFV0aWxpemUgbmF0aXZlIGV2ZW50IHRvIGVuc3VyZSBjb3JyZWN0IHN0YXRlIGZvciBjaGVja2FibGUgaW5wdXRzXG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oIGRhdGEgKSB7XG5cblx0XHRcdFx0Ly8gRm9yIG11dHVhbCBjb21wcmVzc2liaWxpdHkgd2l0aCBfZGVmYXVsdCwgcmVwbGFjZSBgdGhpc2AgYWNjZXNzIHdpdGggYSBsb2NhbCB2YXIuXG5cdFx0XHRcdC8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uXG5cdFx0XHRcdHZhciBlbCA9IHRoaXMgfHwgZGF0YTtcblxuXHRcdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHQvLyBkYXRhUHJpdi5zZXQoIGVsLCBcImNsaWNrXCIsIC4uLiApXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIsIHJldHVyblRydWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyaW5nIGEgY2xpY2tcblx0XHRcdFx0aWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiZcblx0XHRcdFx0XHRlbC5jbGljayAmJiBub2RlTmFtZSggZWwsIFwiaW5wdXRcIiApICkge1xuXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBub24tZmFsc2UgdG8gYWxsb3cgbm9ybWFsIGV2ZW50LXBhdGggcHJvcGFnYXRpb25cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBGb3IgY3Jvc3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgc3VwcHJlc3MgbmF0aXZlIC5jbGljaygpIG9uIGxpbmtzXG5cdFx0XHQvLyBBbHNvIHByZXZlbnQgaXQgaWYgd2UncmUgY3VycmVudGx5IGluc2lkZSBhIGxldmVyYWdlZCBuYXRpdmUtZXZlbnQgc3RhY2tcblx0XHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRcdHJldHVybiByY2hlY2thYmxlVHlwZS50ZXN0KCB0YXJnZXQudHlwZSApICYmXG5cdFx0XHRcdFx0dGFyZ2V0LmNsaWNrICYmIG5vZGVOYW1lKCB0YXJnZXQsIFwiaW5wdXRcIiApICYmXG5cdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0YXJnZXQsIFwiY2xpY2tcIiApIHx8XG5cdFx0XHRcdFx0bm9kZU5hbWUoIHRhcmdldCwgXCJhXCIgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0YmVmb3JldW5sb2FkOiB7XG5cdFx0XHRwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDIwK1xuXHRcdFx0XHQvLyBGaXJlZm94IGRvZXNuJ3QgYWxlcnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxkIGlzIG5vdCBzZXQuXG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBFbnN1cmUgdGhlIHByZXNlbmNlIG9mIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgaGFuZGxlcyBtYW51YWxseS10cmlnZ2VyZWRcbi8vIHN5bnRoZXRpYyBldmVudHMgYnkgaW50ZXJydXB0aW5nIHByb2dyZXNzIHVudGlsIHJlaW52b2tlZCBpbiByZXNwb25zZSB0b1xuLy8gKm5hdGl2ZSogZXZlbnRzIHRoYXQgaXQgZmlyZXMgZGlyZWN0bHksIGVuc3VyaW5nIHRoYXQgc3RhdGUgY2hhbmdlcyBoYXZlXG4vLyBhbHJlYWR5IG9jY3VycmVkIGJlZm9yZSBvdGhlciBsaXN0ZW5lcnMgYXJlIGludm9rZWQuXG5mdW5jdGlvbiBsZXZlcmFnZU5hdGl2ZSggZWwsIHR5cGUsIGV4cGVjdFN5bmMgKSB7XG5cblx0Ly8gTWlzc2luZyBleHBlY3RTeW5jIGluZGljYXRlcyBhIHRyaWdnZXIgY2FsbCwgd2hpY2ggbXVzdCBmb3JjZSBzZXR1cCB0aHJvdWdoIGpRdWVyeS5ldmVudC5hZGRcblx0aWYgKCAhZXhwZWN0U3luYyApIHtcblx0XHRpZiAoIGRhdGFQcml2LmdldCggZWwsIHR5cGUgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHJldHVyblRydWUgKTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUmVnaXN0ZXIgdGhlIGNvbnRyb2xsZXIgYXMgYSBzcGVjaWFsIHVuaXZlcnNhbCBoYW5kbGVyIGZvciBhbGwgZXZlbnQgbmFtZXNwYWNlc1xuXHRkYXRhUHJpdi5zZXQoIGVsLCB0eXBlLCBmYWxzZSApO1xuXHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwge1xuXHRcdG5hbWVzcGFjZTogZmFsc2UsXG5cdFx0aGFuZGxlcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIG5vdEFzeW5jLCByZXN1bHQsXG5cdFx0XHRcdHNhdmVkID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdGlmICggKCBldmVudC5pc1RyaWdnZXIgJiAxICkgJiYgdGhpc1sgdHlwZSBdICkge1xuXG5cdFx0XHRcdC8vIEludGVycnVwdCBwcm9jZXNzaW5nIG9mIHRoZSBvdXRlciBzeW50aGV0aWMgLnRyaWdnZXIoKWVkIGV2ZW50XG5cdFx0XHRcdC8vIFNhdmVkIGRhdGEgc2hvdWxkIGJlIGZhbHNlIGluIHN1Y2ggY2FzZXMsIGJ1dCBtaWdodCBiZSBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0XG5cdFx0XHRcdC8vIGZyb20gYW4gYXN5bmMgbmF0aXZlIGhhbmRsZXIgKGdoLTQzNTApXG5cdFx0XHRcdGlmICggIXNhdmVkLmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGFyZ3VtZW50cyBmb3IgdXNlIHdoZW4gaGFuZGxpbmcgdGhlIGlubmVyIG5hdGl2ZSBldmVudFxuXHRcdFx0XHRcdC8vIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAoYW4gZXZlbnQgb2JqZWN0KSwgc28gdGhpcyBhcnJheVxuXHRcdFx0XHRcdC8vIHdpbGwgbm90IGJlIGNvbmZ1c2VkIHdpdGggYSBsZWZ0b3ZlciBjYXB0dXJlIG9iamVjdC5cblx0XHRcdFx0XHRzYXZlZCA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgc2F2ZWQgKTtcblxuXHRcdFx0XHRcdC8vIFRyaWdnZXIgdGhlIG5hdGl2ZSBldmVudCBhbmQgY2FwdHVyZSBpdHMgcmVzdWx0XG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTErXG5cdFx0XHRcdFx0Ly8gZm9jdXMoKSBhbmQgYmx1cigpIGFyZSBhc3luY2hyb25vdXNcblx0XHRcdFx0XHRub3RBc3luYyA9IGV4cGVjdFN5bmMoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0XHR0aGlzWyB0eXBlIF0oKTtcblx0XHRcdFx0XHRyZXN1bHQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgfHwgbm90QXN5bmMgKSB7XG5cdFx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIGZhbHNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIENhbmNlbCB0aGUgb3V0ZXIgc3ludGhldGljIGV2ZW50XG5cdFx0XHRcdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA4Nitcblx0XHRcdFx0XHRcdC8vIEluIENocm9tZSwgaWYgYW4gZWxlbWVudCBoYXZpbmcgYSBmb2N1c291dCBoYW5kbGVyIGlzIGJsdXJyZWQgYnlcblx0XHRcdFx0XHRcdC8vIGNsaWNraW5nIG91dHNpZGUgb2YgaXQsIGl0IGludm9rZXMgdGhlIGhhbmRsZXIgc3luY2hyb25vdXNseS4gSWZcblx0XHRcdFx0XHRcdC8vIHRoYXQgaGFuZGxlciBjYWxscyBgLnJlbW92ZSgpYCBvbiB0aGUgZWxlbWVudCwgdGhlIGRhdGEgaXMgY2xlYXJlZCxcblx0XHRcdFx0XHRcdC8vIGxlYXZpbmcgYHJlc3VsdGAgdW5kZWZpbmVkLiBXZSBuZWVkIHRvIGd1YXJkIGFnYWluc3QgdGhpcy5cblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQgJiYgcmVzdWx0LnZhbHVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGlzIGlzIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCBmb3IgYW4gZXZlbnQgd2l0aCBhIGJ1YmJsaW5nIHN1cnJvZ2F0ZVxuXHRcdFx0XHQvLyAoZm9jdXMgb3IgYmx1ciksIGFzc3VtZSB0aGF0IHRoZSBzdXJyb2dhdGUgYWxyZWFkeSBwcm9wYWdhdGVkIGZyb20gdHJpZ2dlcmluZyB0aGVcblx0XHRcdFx0Ly8gbmF0aXZlIGV2ZW50IGFuZCBwcmV2ZW50IHRoYXQgZnJvbSBoYXBwZW5pbmcgYWdhaW4gaGVyZS5cblx0XHRcdFx0Ly8gVGhpcyB0ZWNobmljYWxseSBnZXRzIHRoZSBvcmRlcmluZyB3cm9uZyB3LnIudC4gdG8gYC50cmlnZ2VyKClgIChpbiB3aGljaCB0aGVcblx0XHRcdFx0Ly8gYnViYmxpbmcgc3Vycm9nYXRlIHByb3BhZ2F0ZXMgKmFmdGVyKiB0aGUgbm9uLWJ1YmJsaW5nIGJhc2UpLCBidXQgdGhhdCBzZWVtc1xuXHRcdFx0XHQvLyBsZXNzIGJhZCB0aGFuIGR1cGxpY2F0aW9uLlxuXHRcdFx0XHR9IGVsc2UgaWYgKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge30gKS5kZWxlZ2F0ZVR5cGUgKSB7XG5cdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIG5hdGl2ZSBldmVudCB0cmlnZ2VyZWQgYWJvdmUsIGV2ZXJ5dGhpbmcgaXMgbm93IGluIG9yZGVyXG5cdFx0XHQvLyBGaXJlIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCB3aXRoIHRoZSBvcmlnaW5hbCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIHNhdmVkLmxlbmd0aCApIHtcblxuXHRcdFx0XHQvLyAuLi5hbmQgY2FwdHVyZSB0aGUgcmVzdWx0XG5cdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwge1xuXHRcdFx0XHRcdHZhbHVlOiBqUXVlcnkuZXZlbnQudHJpZ2dlcihcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTErXG5cdFx0XHRcdFx0XHQvLyBFeHRlbmQgd2l0aCB0aGUgcHJvdG90eXBlIHRvIHJlc2V0IHRoZSBhYm92ZSBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmV4dGVuZCggc2F2ZWRbIDAgXSwgalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSApLFxuXHRcdFx0XHRcdFx0c2F2ZWQuc2xpY2UoIDEgKSxcblx0XHRcdFx0XHRcdHRoaXNcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0gKTtcblxuXHRcdFx0XHQvLyBBYm9ydCBoYW5kbGluZyBvZiB0aGUgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSApO1xufVxuXG5qUXVlcnkucmVtb3ZlRXZlbnQgPSBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkge1xuXG5cdC8vIFRoaXMgXCJpZlwiIGlzIG5lZWRlZCBmb3IgcGxhaW4gb2JqZWN0c1xuXHRpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHtcblx0XHRlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGhhbmRsZSApO1xuXHR9XG59O1xuXG5qUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHtcblxuXHQvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmRcblx0aWYgKCAhKCB0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50ICkgKSB7XG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuRXZlbnQoIHNyYywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIEV2ZW50IG9iamVjdFxuXHRpZiAoIHNyYyAmJiBzcmMudHlwZSApIHtcblx0XHR0aGlzLm9yaWdpbmFsRXZlbnQgPSBzcmM7XG5cdFx0dGhpcy50eXBlID0gc3JjLnR5cGU7XG5cblx0XHQvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZFxuXHRcdC8vIGJ5IGEgaGFuZGxlciBsb3dlciBkb3duIHRoZSB0cmVlOyByZWZsZWN0IHRoZSBjb3JyZWN0IHZhbHVlLlxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHxcblx0XHRcdFx0c3JjLmRlZmF1bHRQcmV2ZW50ZWQgPT09IHVuZGVmaW5lZCAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seVxuXHRcdFx0XHRzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlID9cblx0XHRcdHJldHVyblRydWUgOlxuXHRcdFx0cmV0dXJuRmFsc2U7XG5cblx0XHQvLyBDcmVhdGUgdGFyZ2V0IHByb3BlcnRpZXNcblx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgPD02IC0gNyBvbmx5XG5cdFx0Ly8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKCM1MDQsICMxMzE0Mylcblx0XHR0aGlzLnRhcmdldCA9ICggc3JjLnRhcmdldCAmJiBzcmMudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkgP1xuXHRcdFx0c3JjLnRhcmdldC5wYXJlbnROb2RlIDpcblx0XHRcdHNyYy50YXJnZXQ7XG5cblx0XHR0aGlzLmN1cnJlbnRUYXJnZXQgPSBzcmMuY3VycmVudFRhcmdldDtcblx0XHR0aGlzLnJlbGF0ZWRUYXJnZXQgPSBzcmMucmVsYXRlZFRhcmdldDtcblxuXHQvLyBFdmVudCB0eXBlXG5cdH0gZWxzZSB7XG5cdFx0dGhpcy50eXBlID0gc3JjO1xuXHR9XG5cblx0Ly8gUHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3Rcblx0aWYgKCBwcm9wcyApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmVcblx0dGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuXG5cdC8vIE1hcmsgaXQgYXMgZml4ZWRcblx0dGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7XG59O1xuXG4vLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmdcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWxcbmpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBqUXVlcnkuRXZlbnQsXG5cdGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsXG5cdGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc1NpbXVsYXRlZDogZmFsc2UsXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fSxcblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdG9wUHJvcGFnYXRpb24oKTtcblx0fVxufTtcblxuLy8gSW5jbHVkZXMgYWxsIGNvbW1vbiBldmVudCBwcm9wcyBpbmNsdWRpbmcgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQgc3BlY2lmaWMgcHJvcHNcbmpRdWVyeS5lYWNoKCB7XG5cdGFsdEtleTogdHJ1ZSxcblx0YnViYmxlczogdHJ1ZSxcblx0Y2FuY2VsYWJsZTogdHJ1ZSxcblx0Y2hhbmdlZFRvdWNoZXM6IHRydWUsXG5cdGN0cmxLZXk6IHRydWUsXG5cdGRldGFpbDogdHJ1ZSxcblx0ZXZlbnRQaGFzZTogdHJ1ZSxcblx0bWV0YUtleTogdHJ1ZSxcblx0cGFnZVg6IHRydWUsXG5cdHBhZ2VZOiB0cnVlLFxuXHRzaGlmdEtleTogdHJ1ZSxcblx0dmlldzogdHJ1ZSxcblx0XCJjaGFyXCI6IHRydWUsXG5cdGNvZGU6IHRydWUsXG5cdGNoYXJDb2RlOiB0cnVlLFxuXHRrZXk6IHRydWUsXG5cdGtleUNvZGU6IHRydWUsXG5cdGJ1dHRvbjogdHJ1ZSxcblx0YnV0dG9uczogdHJ1ZSxcblx0Y2xpZW50WDogdHJ1ZSxcblx0Y2xpZW50WTogdHJ1ZSxcblx0b2Zmc2V0WDogdHJ1ZSxcblx0b2Zmc2V0WTogdHJ1ZSxcblx0cG9pbnRlcklkOiB0cnVlLFxuXHRwb2ludGVyVHlwZTogdHJ1ZSxcblx0c2NyZWVuWDogdHJ1ZSxcblx0c2NyZWVuWTogdHJ1ZSxcblx0dGFyZ2V0VG91Y2hlczogdHJ1ZSxcblx0dG9FbGVtZW50OiB0cnVlLFxuXHR0b3VjaGVzOiB0cnVlLFxuXHR3aGljaDogdHJ1ZVxufSwgalF1ZXJ5LmV2ZW50LmFkZFByb3AgKTtcblxualF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIHR5cGUsIGRlbGVnYXRlVHlwZSApIHtcblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSA9IHtcblxuXHRcdC8vIFV0aWxpemUgbmF0aXZlIGV2ZW50IGlmIHBvc3NpYmxlIHNvIGJsdXIvZm9jdXMgc2VxdWVuY2UgaXMgY29ycmVjdFxuXHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2xhaW0gdGhlIGZpcnN0IGhhbmRsZXJcblx0XHRcdC8vIGRhdGFQcml2LnNldCggdGhpcywgXCJmb2N1c1wiLCAuLi4gKVxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImJsdXJcIiwgLi4uIClcblx0XHRcdGxldmVyYWdlTmF0aXZlKCB0aGlzLCB0eXBlLCBleHBlY3RTeW5jICk7XG5cblx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHR0cmlnZ2VyOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJcblx0XHRcdGxldmVyYWdlTmF0aXZlKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdC8vIFJldHVybiBub24tZmFsc2UgdG8gYWxsb3cgbm9ybWFsIGV2ZW50LXBhdGggcHJvcGFnYXRpb25cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHQvLyBTdXBwcmVzcyBuYXRpdmUgZm9jdXMgb3IgYmx1ciBhcyBpdCdzIGFscmVhZHkgYmVpbmcgZmlyZWRcblx0XHQvLyBpbiBsZXZlcmFnZU5hdGl2ZS5cblx0XHRfZGVmYXVsdDogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0ZGVsZWdhdGVUeXBlOiBkZWxlZ2F0ZVR5cGVcblx0fTtcbn0gKTtcblxuLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzXG4vLyBzbyB0aGF0IGV2ZW50IGRlbGVnYXRpb24gd29ya3MgaW4galF1ZXJ5LlxuLy8gRG8gdGhlIHNhbWUgZm9yIHBvaW50ZXJlbnRlci9wb2ludGVybGVhdmUgYW5kIHBvaW50ZXJvdmVyL3BvaW50ZXJvdXRcbi8vXG4vLyBTdXBwb3J0OiBTYWZhcmkgNyBvbmx5XG4vLyBTYWZhcmkgc2VuZHMgbW91c2VlbnRlciB0b28gb2Z0ZW47IHNlZTpcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ3MDI1OFxuLy8gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYnVnIChpdCBleGlzdGVkIGluIG9sZGVyIENocm9tZSB2ZXJzaW9ucyBhcyB3ZWxsKS5cbmpRdWVyeS5lYWNoKCB7XG5cdG1vdXNlZW50ZXI6IFwibW91c2VvdmVyXCIsXG5cdG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIixcblx0cG9pbnRlcmVudGVyOiBcInBvaW50ZXJvdmVyXCIsXG5cdHBvaW50ZXJsZWF2ZTogXCJwb2ludGVyb3V0XCJcbn0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7XG5cdFx0ZGVsZWdhdGVUeXBlOiBmaXgsXG5cdFx0YmluZFR5cGU6IGZpeCxcblxuXHRcdGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHJldCxcblx0XHRcdFx0dGFyZ2V0ID0gdGhpcyxcblx0XHRcdFx0cmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsXG5cdFx0XHRcdGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajtcblxuXHRcdFx0Ly8gRm9yIG1vdXNlZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC5cblx0XHRcdC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93XG5cdFx0XHRpZiAoICFyZWxhdGVkIHx8ICggcmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApICkgKSB7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7XG5cdFx0XHRcdHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGZpeDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0b246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHRvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApO1xuXHR9LFxuXHRvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkge1xuXHRcdHZhciBoYW5kbGVPYmosIHR5cGU7XG5cdFx0aWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7XG5cblx0XHRcdC8vICggZXZlbnQgKSAgZGlzcGF0Y2hlZCBqUXVlcnkuRXZlbnRcblx0XHRcdGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajtcblx0XHRcdGpRdWVyeSggdHlwZXMuZGVsZWdhdGVUYXJnZXQgKS5vZmYoXG5cdFx0XHRcdGhhbmRsZU9iai5uYW1lc3BhY2UgP1xuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSArIFwiLlwiICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlLFxuXHRcdFx0XHRoYW5kbGVPYmouc2VsZWN0b3IsXG5cdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKVxuXHRcdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdFx0dGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMgWywgZm5dIClcblx0XHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5cGVzLCBmbiwgc2VsZWN0b3IgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG52YXJcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEsIEVkZ2UgMTIgLSAxMyBvbmx5XG5cdC8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXggZ3JvdXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMuXG5cdC8vIFNlZSBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzE3MzY1MTIvXG5cdHJub0lubmVyaHRtbCA9IC88c2NyaXB0fDxzdHlsZXw8bGluay9pLFxuXG5cdC8vIGNoZWNrZWQ9XCJjaGVja2VkXCIgb3IgY2hlY2tlZFxuXHRyY2hlY2tlZCA9IC9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksXG5cdHJjbGVhblNjcmlwdCA9IC9eXFxzKjwhKD86XFxbQ0RBVEFcXFt8LS0pfCg/OlxcXVxcXXwtLSk+XFxzKiQvZztcblxuLy8gUHJlZmVyIGEgdGJvZHkgb3ZlciBpdHMgcGFyZW50IHRhYmxlIGZvciBjb250YWluaW5nIG5ldyByb3dzXG5mdW5jdGlvbiBtYW5pcHVsYXRpb25UYXJnZXQoIGVsZW0sIGNvbnRlbnQgKSB7XG5cdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGFibGVcIiApICYmXG5cdFx0bm9kZU5hbWUoIGNvbnRlbnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6IGNvbnRlbnQuZmlyc3RDaGlsZCwgXCJ0clwiICkgKSB7XG5cblx0XHRyZXR1cm4galF1ZXJ5KCBlbGVtICkuY2hpbGRyZW4oIFwidGJvZHlcIiApWyAwIF0gfHwgZWxlbTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG4vLyBSZXBsYWNlL3Jlc3RvcmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBmb3Igc2FmZSBET00gbWFuaXB1bGF0aW9uXG5mdW5jdGlvbiBkaXNhYmxlU2NyaXB0KCBlbGVtICkge1xuXHRlbGVtLnR5cGUgPSAoIGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICE9PSBudWxsICkgKyBcIi9cIiArIGVsZW0udHlwZTtcblx0cmV0dXJuIGVsZW07XG59XG5mdW5jdGlvbiByZXN0b3JlU2NyaXB0KCBlbGVtICkge1xuXHRpZiAoICggZWxlbS50eXBlIHx8IFwiXCIgKS5zbGljZSggMCwgNSApID09PSBcInRydWUvXCIgKSB7XG5cdFx0ZWxlbS50eXBlID0gZWxlbS50eXBlLnNsaWNlKCA1ICk7XG5cdH0gZWxzZSB7XG5cdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIFwidHlwZVwiICk7XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHtcblx0dmFyIGksIGwsIHR5cGUsIHBkYXRhT2xkLCB1ZGF0YU9sZCwgdWRhdGFDdXIsIGV2ZW50cztcblxuXHRpZiAoIGRlc3Qubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gMS4gQ29weSBwcml2YXRlIGRhdGE6IGV2ZW50cywgaGFuZGxlcnMsIGV0Yy5cblx0aWYgKCBkYXRhUHJpdi5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHRwZGF0YU9sZCA9IGRhdGFQcml2LmdldCggc3JjICk7XG5cdFx0ZXZlbnRzID0gcGRhdGFPbGQuZXZlbnRzO1xuXG5cdFx0aWYgKCBldmVudHMgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGRlc3QsIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cblx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBkZXN0LCB0eXBlLCBldmVudHNbIHR5cGUgXVsgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyAyLiBDb3B5IHVzZXIgZGF0YVxuXHRpZiAoIGRhdGFVc2VyLmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHVkYXRhT2xkID0gZGF0YVVzZXIuYWNjZXNzKCBzcmMgKTtcblx0XHR1ZGF0YUN1ciA9IGpRdWVyeS5leHRlbmQoIHt9LCB1ZGF0YU9sZCApO1xuXG5cdFx0ZGF0YVVzZXIuc2V0KCBkZXN0LCB1ZGF0YUN1ciApO1xuXHR9XG59XG5cbi8vIEZpeCBJRSBidWdzLCBzZWUgc3VwcG9ydCB0ZXN0c1xuZnVuY3Rpb24gZml4SW5wdXQoIHNyYywgZGVzdCApIHtcblx0dmFyIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdC8vIEZhaWxzIHRvIHBlcnNpc3QgdGhlIGNoZWNrZWQgc3RhdGUgb2YgYSBjbG9uZWQgY2hlY2tib3ggb3IgcmFkaW8gYnV0dG9uLlxuXHRpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgcmNoZWNrYWJsZVR5cGUudGVzdCggc3JjLnR5cGUgKSApIHtcblx0XHRkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDtcblxuXHQvLyBGYWlscyB0byByZXR1cm4gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZGVmYXVsdCBzZWxlY3RlZCBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9uc1xuXHR9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5vZGVOYW1lID09PSBcInRleHRhcmVhXCIgKSB7XG5cdFx0ZGVzdC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGRvbU1hbmlwKCBjb2xsZWN0aW9uLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApIHtcblxuXHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdGFyZ3MgPSBmbGF0KCBhcmdzICk7XG5cblx0dmFyIGZyYWdtZW50LCBmaXJzdCwgc2NyaXB0cywgaGFzU2NyaXB0cywgbm9kZSwgZG9jLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBjb2xsZWN0aW9uLmxlbmd0aCxcblx0XHRpTm9DbG9uZSA9IGwgLSAxLFxuXHRcdHZhbHVlID0gYXJnc1sgMCBdLFxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0Ly8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0XG5cdGlmICggdmFsdWVJc0Z1bmN0aW9uIHx8XG5cdFx0XHQoIGwgPiAxICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc3VwcG9ydC5jaGVja0Nsb25lICYmIHJjaGVja2VkLnRlc3QoIHZhbHVlICkgKSApIHtcblx0XHRyZXR1cm4gY29sbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggaW5kZXggKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGNvbGxlY3Rpb24uZXEoIGluZGV4ICk7XG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0YXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHNlbGYuaHRtbCgpICk7XG5cdFx0XHR9XG5cdFx0XHRkb21NYW5pcCggc2VsZiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRpZiAoIGwgKSB7XG5cdFx0ZnJhZ21lbnQgPSBidWlsZEZyYWdtZW50KCBhcmdzLCBjb2xsZWN0aW9uWyAwIF0ub3duZXJEb2N1bWVudCwgZmFsc2UsIGNvbGxlY3Rpb24sIGlnbm9yZWQgKTtcblx0XHRmaXJzdCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICkge1xuXHRcdFx0ZnJhZ21lbnQgPSBmaXJzdDtcblx0XHR9XG5cblx0XHQvLyBSZXF1aXJlIGVpdGhlciBuZXcgY29udGVudCBvciBhbiBpbnRlcmVzdCBpbiBpZ25vcmVkIGVsZW1lbnRzIHRvIGludm9rZSB0aGUgY2FsbGJhY2tcblx0XHRpZiAoIGZpcnN0IHx8IGlnbm9yZWQgKSB7XG5cdFx0XHRzY3JpcHRzID0galF1ZXJ5Lm1hcCggZ2V0QWxsKCBmcmFnbWVudCwgXCJzY3JpcHRcIiApLCBkaXNhYmxlU2NyaXB0ICk7XG5cdFx0XHRoYXNTY3JpcHRzID0gc2NyaXB0cy5sZW5ndGg7XG5cblx0XHRcdC8vIFVzZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgZm9yIHRoZSBsYXN0IGl0ZW1cblx0XHRcdC8vIGluc3RlYWQgb2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cFxuXHRcdFx0Ly8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKCM4MDcwKS5cblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0bm9kZSA9IGZyYWdtZW50O1xuXG5cdFx0XHRcdGlmICggaSAhPT0gaU5vQ2xvbmUgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IGpRdWVyeS5jbG9uZSggbm9kZSwgdHJ1ZSwgdHJ1ZSApO1xuXG5cdFx0XHRcdFx0Ly8gS2VlcCByZWZlcmVuY2VzIHRvIGNsb25lZCBzY3JpcHRzIGZvciBsYXRlciByZXN0b3JhdGlvblxuXHRcdFx0XHRcdGlmICggaGFzU2NyaXB0cyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHNjcmlwdHMsIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2FsbGJhY2suY2FsbCggY29sbGVjdGlvblsgaSBdLCBub2RlLCBpICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaGFzU2NyaXB0cyApIHtcblx0XHRcdFx0ZG9jID0gc2NyaXB0c1sgc2NyaXB0cy5sZW5ndGggLSAxIF0ub3duZXJEb2N1bWVudDtcblxuXHRcdFx0XHQvLyBSZWVuYWJsZSBzY3JpcHRzXG5cdFx0XHRcdGpRdWVyeS5tYXAoIHNjcmlwdHMsIHJlc3RvcmVTY3JpcHQgKTtcblxuXHRcdFx0XHQvLyBFdmFsdWF0ZSBleGVjdXRhYmxlIHNjcmlwdHMgb24gZmlyc3QgZG9jdW1lbnQgaW5zZXJ0aW9uXG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgaGFzU2NyaXB0czsgaSsrICkge1xuXHRcdFx0XHRcdG5vZGUgPSBzY3JpcHRzWyBpIF07XG5cdFx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBub2RlLnR5cGUgfHwgXCJcIiApICYmXG5cdFx0XHRcdFx0XHQhZGF0YVByaXYuYWNjZXNzKCBub2RlLCBcImdsb2JhbEV2YWxcIiApICYmXG5cdFx0XHRcdFx0XHRqUXVlcnkuY29udGFpbnMoIGRvYywgbm9kZSApICkge1xuXG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUuc3JjICYmICggbm9kZS50eXBlIHx8IFwiXCIgKS50b0xvd2VyQ2FzZSgpICAhPT0gXCJtb2R1bGVcIiApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBPcHRpb25hbCBBSkFYIGRlcGVuZGVuY3ksIGJ1dCB3b24ndCBydW4gc2NyaXB0cyBpZiBub3QgcHJlc2VudFxuXHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5fZXZhbFVybCAmJiAhbm9kZS5ub01vZHVsZSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuX2V2YWxVcmwoIG5vZGUuc3JjLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRub25jZTogbm9kZS5ub25jZSB8fCBub2RlLmdldEF0dHJpYnV0ZSggXCJub25jZVwiIClcblx0XHRcdFx0XHRcdFx0XHR9LCBkb2MgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0RE9NRXZhbCggbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKCByY2xlYW5TY3JpcHQsIFwiXCIgKSwgbm9kZSwgZG9jICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNvbGxlY3Rpb247XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSggZWxlbSwgc2VsZWN0b3IsIGtlZXBEYXRhICkge1xuXHR2YXIgbm9kZSxcblx0XHRub2RlcyA9IHNlbGVjdG9yID8galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIGVsZW0gKSA6IGVsZW0sXG5cdFx0aSA9IDA7XG5cblx0Zm9yICggOyAoIG5vZGUgPSBub2Rlc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdGlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIG5vZGUgKSApO1xuXHRcdH1cblxuXHRcdGlmICggbm9kZS5wYXJlbnROb2RlICkge1xuXHRcdFx0aWYgKCBrZWVwRGF0YSAmJiBpc0F0dGFjaGVkKCBub2RlICkgKSB7XG5cdFx0XHRcdHNldEdsb2JhbEV2YWwoIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHR9XG5cdFx0XHRub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRodG1sUHJlZmlsdGVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRyZXR1cm4gaHRtbDtcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdHZhciBpLCBsLCBzcmNFbGVtZW50cywgZGVzdEVsZW1lbnRzLFxuXHRcdFx0Y2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApLFxuXHRcdFx0aW5QYWdlID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gRml4IElFIGNsb25pbmcgaXNzdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCAmJiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEgKSAmJlxuXHRcdFx0XHQhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIFdlIGVzY2hldyBTaXp6bGUgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczogaHR0cHM6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1zaXp6bGUvMlxuXHRcdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApO1xuXHRcdFx0c3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTtcblxuXHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZpeElucHV0KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmVcblx0XHRpZiAoIGRhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0XHRzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFsbCggZWxlbSApO1xuXHRcdFx0XHRkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSApO1xuXG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGNsb25lQ29weUV2ZW50KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSwgXCJzY3JpcHRcIiApO1xuXHRcdGlmICggZGVzdEVsZW1lbnRzLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBhZ2UgJiYgZ2V0QWxsKCBlbGVtLCBcInNjcmlwdFwiICkgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXRcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0Y2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cdFx0dmFyIGRhdGEsIGVsZW0sIHR5cGUsXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9PSB1bmRlZmluZWQ7IGkrKyApIHtcblx0XHRcdGlmICggYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0XHRpZiAoICggZGF0YSA9IGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSApICkge1xuXHRcdFx0XHRcdGlmICggZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZFxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yICk7XG5cdH0sXG5cblx0dGV4dDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnRleHQoIHRoaXMgKSA6XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHByZXBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoIGVsZW0sIHRhcmdldC5maXJzdENoaWxkICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGJlZm9yZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YWZ0ZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gUHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXNcblx0XHRcdFx0ZWxlbS50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzO1xuXHRcdGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50cztcblxuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sXG5cdFx0XHRcdGkgPSAwLFxuXHRcdFx0XHRsID0gdGhpcy5sZW5ndGg7XG5cblx0XHRcdGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pbm5lckhUTUw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUxcblx0XHRcdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJlxuXHRcdFx0XHQhd3JhcE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpIF0gKSB7XG5cblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuaHRtbFByZWZpbHRlciggdmFsdWUgKTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRcdGVsZW0gPSB0aGlzWyBpIF0gfHwge307XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblx0XHRcdFx0XHRcdFx0ZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtID0gMDtcblxuXHRcdFx0XHQvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2Rcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7XG5cdFx0XHR9XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRyZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGlnbm9yZWQgPSBbXTtcblxuXHRcdC8vIE1ha2UgdGhlIGNoYW5nZXMsIHJlcGxhY2luZyBlYWNoIG5vbi1pZ25vcmVkIGNvbnRleHQgZWxlbWVudCB3aXRoIHRoZSBuZXcgY29udGVudFxuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG5cblx0XHRcdGlmICggalF1ZXJ5LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7XG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggdGhpcyApICk7XG5cdFx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRcdHBhcmVudC5yZXBsYWNlQ2hpbGQoIGVsZW0sIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gRm9yY2UgY2FsbGJhY2sgaW52b2NhdGlvblxuXHRcdH0sIGlnbm9yZWQgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCgge1xuXHRhcHBlbmRUbzogXCJhcHBlbmRcIixcblx0cHJlcGVuZFRvOiBcInByZXBlbmRcIixcblx0aW5zZXJ0QmVmb3JlOiBcImJlZm9yZVwiLFxuXHRpbnNlcnRBZnRlcjogXCJhZnRlclwiLFxuXHRyZXBsYWNlQWxsOiBcInJlcGxhY2VXaXRoXCJcbn0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGVsZW1zLFxuXHRcdFx0cmV0ID0gW10sXG5cdFx0XHRpbnNlcnQgPSBqUXVlcnkoIHNlbGVjdG9yICksXG5cdFx0XHRsYXN0ID0gaW5zZXJ0Lmxlbmd0aCAtIDEsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7XG5cdFx0XHRlbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApO1xuXHRcdFx0alF1ZXJ5KCBpbnNlcnRbIGkgXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdC8vIC5nZXQoKSBiZWNhdXNlIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdHB1c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0KCkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCApO1xuXHR9O1xufSApO1xudmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoIFwiXihcIiArIHBudW0gKyBcIikoPyFweClbYS16JV0rJFwiLCBcImlcIiApO1xuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHksIEZpcmVmb3ggPD0zMCAoIzE1MDk4LCAjMTQxNTApXG5cdFx0Ly8gSUUgdGhyb3dzIG9uIGVsZW1lbnRzIGNyZWF0ZWQgaW4gcG9wdXBzXG5cdFx0Ly8gRkYgbWVhbndoaWxlIHRocm93cyBvbiBmcmFtZSBlbGVtZW50cyB0aHJvdWdoIFwiZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZVwiXG5cdFx0dmFyIHZpZXcgPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cblx0XHRpZiAoICF2aWV3IHx8ICF2aWV3Lm9wZW5lciApIHtcblx0XHRcdHZpZXcgPSB3aW5kb3c7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSApO1xuXHR9O1xuXG52YXIgc3dhcCA9IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBjYWxsYmFjayApIHtcblx0dmFyIHJldCwgbmFtZSxcblx0XHRvbGQgPSB7fTtcblxuXHQvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdG9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdO1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9wdGlvbnNbIG5hbWUgXTtcblx0fVxuXG5cdHJldCA9IGNhbGxiYWNrLmNhbGwoIGVsZW0gKTtcblxuXHQvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn07XG5cblxudmFyIHJib3hTdHlsZSA9IG5ldyBSZWdFeHAoIGNzc0V4cGFuZC5qb2luKCBcInxcIiApLCBcImlcIiApO1xuXG5cblxuKCBmdW5jdGlvbigpIHtcblxuXHQvLyBFeGVjdXRpbmcgYm90aCBwaXhlbFBvc2l0aW9uICYgYm94U2l6aW5nUmVsaWFibGUgdGVzdHMgcmVxdWlyZSBvbmx5IG9uZSBsYXlvdXRcblx0Ly8gc28gdGhleSdyZSBleGVjdXRlZCBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgdGhlIHNlY29uZCBjb21wdXRhdGlvbi5cblx0ZnVuY3Rpb24gY29tcHV0ZVN0eWxlVGVzdHMoKSB7XG5cblx0XHQvLyBUaGlzIGlzIGEgc2luZ2xldG9uLCB3ZSBuZWVkIHRvIGV4ZWN1dGUgaXQgb25seSBvbmNlXG5cdFx0aWYgKCAhZGl2ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O3dpZHRoOjYwcHg7XCIgK1xuXHRcdFx0XCJtYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjBcIjtcblx0XHRkaXYuc3R5bGUuY3NzVGV4dCA9XG5cdFx0XHRcInBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OnNjcm9sbDtcIiArXG5cdFx0XHRcIm1hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7XCIgK1xuXHRcdFx0XCJ3aWR0aDo2MCU7dG9wOjElXCI7XG5cdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBjb250YWluZXIgKS5hcHBlbmRDaGlsZCggZGl2ICk7XG5cblx0XHR2YXIgZGl2U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2ICk7XG5cdFx0cGl4ZWxQb3NpdGlvblZhbCA9IGRpdlN0eWxlLnRvcCAhPT0gXCIxJVwiO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgRmlyZWZveCA8PTMgLSA0NFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdFZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUubWFyZ2luTGVmdCApID09PSAxMjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIFNhZmFyaSA8PTkuMSAtIDEwLjEsIGlPUyA8PTcuMCAtIDkuM1xuXHRcdC8vIFNvbWUgc3R5bGVzIGNvbWUgYmFjayB3aXRoIHBlcmNlbnRhZ2UgdmFsdWVzLCBldmVuIHRob3VnaCB0aGV5IHNob3VsZG4ndFxuXHRcdGRpdi5zdHlsZS5yaWdodCA9IFwiNjAlXCI7XG5cdFx0cGl4ZWxCb3hTdHlsZXNWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLnJpZ2h0ICkgPT09IDM2O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0XHQvLyBEZXRlY3QgbWlzcmVwb3J0aW5nIG9mIGNvbnRlbnQgZGltZW5zaW9ucyBmb3IgYm94LXNpemluZzpib3JkZXItYm94IGVsZW1lbnRzXG5cdFx0Ym94U2l6aW5nUmVsaWFibGVWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLndpZHRoICkgPT09IDM2O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG92ZXJmbG93OnNjcm9sbCBzY3Jld2luZXNzIChnaC0zNjk5KVxuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTY0XG5cdFx0Ly8gRG9uJ3QgZ2V0IHRyaWNrZWQgd2hlbiB6b29tIGFmZmVjdHMgb2Zmc2V0V2lkdGggKGdoLTQwMjkpXG5cdFx0ZGl2LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXHRcdHNjcm9sbGJveFNpemVWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdi5vZmZzZXRXaWR0aCAvIDMgKSA9PT0gMTI7XG5cblx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApO1xuXG5cdFx0Ly8gTnVsbGlmeSB0aGUgZGl2IHNvIGl0IHdvdWxkbid0IGJlIHN0b3JlZCBpbiB0aGUgbWVtb3J5IGFuZFxuXHRcdC8vIGl0IHdpbGwgYWxzbyBiZSBhIHNpZ24gdGhhdCBjaGVja3MgYWxyZWFkeSBwZXJmb3JtZWRcblx0XHRkaXYgPSBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gcm91bmRQaXhlbE1lYXN1cmVzKCBtZWFzdXJlICkge1xuXHRcdHJldHVybiBNYXRoLnJvdW5kKCBwYXJzZUZsb2F0KCBtZWFzdXJlICkgKTtcblx0fVxuXG5cdHZhciBwaXhlbFBvc2l0aW9uVmFsLCBib3hTaXppbmdSZWxpYWJsZVZhbCwgc2Nyb2xsYm94U2l6ZVZhbCwgcGl4ZWxCb3hTdHlsZXNWYWwsXG5cdFx0cmVsaWFibGVUckRpbWVuc2lvbnNWYWwsIHJlbGlhYmxlTWFyZ2luTGVmdFZhbCxcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICksXG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdC8vIEZpbmlzaCBlYXJseSBpbiBsaW1pdGVkIChub24tYnJvd3NlcikgZW52aXJvbm1lbnRzXG5cdGlmICggIWRpdi5zdHlsZSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFN0eWxlIG9mIGNsb25lZCBlbGVtZW50IGFmZmVjdHMgc291cmNlIGVsZW1lbnQgY2xvbmVkICgjODkwOClcblx0ZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJjb250ZW50LWJveFwiO1xuXHRkaXYuY2xvbmVOb2RlKCB0cnVlICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcIlwiO1xuXHRzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gXCJjb250ZW50LWJveFwiO1xuXG5cdGpRdWVyeS5leHRlbmQoIHN1cHBvcnQsIHtcblx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxCb3hTdHlsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbEJveFN0eWxlc1ZhbDtcblx0XHR9LFxuXHRcdHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbFBvc2l0aW9uVmFsO1xuXHRcdH0sXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsO1xuXHRcdH0sXG5cdFx0c2Nyb2xsYm94U2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHNjcm9sbGJveFNpemVWYWw7XG5cdFx0fSxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTUgLSAxOCtcblx0XHQvLyBJRS9FZGdlIG1pc3JlcG9ydCBgZ2V0Q29tcHV0ZWRTdHlsZWAgb2YgdGFibGUgcm93cyB3aXRoIHdpZHRoL2hlaWdodFxuXHRcdC8vIHNldCBpbiBDU1Mgd2hpbGUgYG9mZnNldCpgIHByb3BlcnRpZXMgcmVwb3J0IGNvcnJlY3QgdmFsdWVzLlxuXHRcdC8vIEJlaGF2aW9yIGluIElFIDkgaXMgbW9yZSBzdWJ0bGUgdGhhbiBpbiBuZXdlciB2ZXJzaW9ucyAmIGl0IHBhc3Nlc1xuXHRcdC8vIHNvbWUgdmVyc2lvbnMgb2YgdGhpcyB0ZXN0OyBtYWtlIHN1cmUgbm90IHRvIG1ha2UgaXQgcGFzcyB0aGVyZSFcblx0XHQvL1xuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNzArXG5cdFx0Ly8gT25seSBGaXJlZm94IGluY2x1ZGVzIGJvcmRlciB3aWR0aHNcblx0XHQvLyBpbiBjb21wdXRlZCBkaW1lbnNpb25zLiAoZ2gtNDUyOSlcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uczogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdGFibGUsIHRyLCB0ckNoaWxkLCB0clN0eWxlO1xuXHRcdFx0aWYgKCByZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwidGFibGVcIiApO1xuXHRcdFx0XHR0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwidHJcIiApO1xuXHRcdFx0XHR0ckNoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdFx0XHRcdHRhYmxlLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlXCI7XG5cdFx0XHRcdHRyLnN0eWxlLmNzc1RleHQgPSBcImJvcmRlcjoxcHggc29saWRcIjtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgODYrXG5cdFx0XHRcdC8vIEhlaWdodCBzZXQgdGhyb3VnaCBjc3NUZXh0IGRvZXMgbm90IGdldCBhcHBsaWVkLlxuXHRcdFx0XHQvLyBDb21wdXRlZCBoZWlnaHQgdGhlbiBjb21lcyBiYWNrIGFzIDAuXG5cdFx0XHRcdHRyLnN0eWxlLmhlaWdodCA9IFwiMXB4XCI7XG5cdFx0XHRcdHRyQ2hpbGQuc3R5bGUuaGVpZ2h0ID0gXCI5cHhcIjtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDggQ2hyb21lIDg2K1xuXHRcdFx0XHQvLyBJbiBvdXIgYm9keUJhY2tncm91bmQuaHRtbCBpZnJhbWUsXG5cdFx0XHRcdC8vIGRpc3BsYXkgZm9yIGFsbCBkaXYgZWxlbWVudHMgaXMgc2V0IHRvIFwiaW5saW5lXCIsXG5cdFx0XHRcdC8vIHdoaWNoIGNhdXNlcyBhIHByb2JsZW0gb25seSBpbiBBbmRyb2lkIDggQ2hyb21lIDg2LlxuXHRcdFx0XHQvLyBFbnN1cmluZyB0aGUgZGl2IGlzIGRpc3BsYXk6IGJsb2NrXG5cdFx0XHRcdC8vIGdldHMgYXJvdW5kIHRoaXMgaXNzdWUuXG5cdFx0XHRcdHRyQ2hpbGQuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblxuXHRcdFx0XHRkb2N1bWVudEVsZW1lbnRcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRhYmxlIClcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRyIClcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRyQ2hpbGQgKTtcblxuXHRcdFx0XHR0clN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIHRyICk7XG5cdFx0XHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsID0gKCBwYXJzZUludCggdHJTdHlsZS5oZWlnaHQsIDEwICkgK1xuXHRcdFx0XHRcdHBhcnNlSW50KCB0clN0eWxlLmJvcmRlclRvcFdpZHRoLCAxMCApICtcblx0XHRcdFx0XHRwYXJzZUludCggdHJTdHlsZS5ib3JkZXJCb3R0b21XaWR0aCwgMTAgKSApID09PSB0ci5vZmZzZXRIZWlnaHQ7XG5cblx0XHRcdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCB0YWJsZSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsO1xuXHRcdH1cblx0fSApO1xufSApKCk7XG5cblxuZnVuY3Rpb24gY3VyQ1NTKCBlbGVtLCBuYW1lLCBjb21wdXRlZCApIHtcblx0dmFyIHdpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgsIHJldCxcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNTErXG5cdFx0Ly8gUmV0cmlldmluZyBzdHlsZSBiZWZvcmUgY29tcHV0ZWQgc29tZWhvd1xuXHRcdC8vIGZpeGVzIGFuIGlzc3VlIHdpdGggZ2V0dGluZyB3cm9uZyB2YWx1ZXNcblx0XHQvLyBvbiBkZXRhY2hlZCBlbGVtZW50c1xuXHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRjb21wdXRlZCA9IGNvbXB1dGVkIHx8IGdldFN0eWxlcyggZWxlbSApO1xuXG5cdC8vIGdldFByb3BlcnR5VmFsdWUgaXMgbmVlZGVkIGZvcjpcblx0Ly8gICAuY3NzKCdmaWx0ZXInKSAoSUUgOSBvbmx5LCAjMTI1MzcpXG5cdC8vICAgLmNzcygnLS1jdXN0b21Qcm9wZXJ0eSkgKCMzMTQ0KVxuXHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdHJldCA9IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsgbmFtZSBdO1xuXG5cdFx0aWYgKCByZXQgPT09IFwiXCIgJiYgIWlzQXR0YWNoZWQoIGVsZW0gKSApIHtcblx0XHRcdHJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEEgdHJpYnV0ZSB0byB0aGUgXCJhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzXCJcblx0XHQvLyBBbmRyb2lkIEJyb3dzZXIgcmV0dXJucyBwZXJjZW50YWdlIGZvciBzb21lIHZhbHVlcyxcblx0XHQvLyBidXQgd2lkdGggc2VlbXMgdG8gYmUgcmVsaWFibHkgcGl4ZWxzLlxuXHRcdC8vIFRoaXMgaXMgYWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzpcblx0XHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI3Jlc29sdmVkLXZhbHVlc1xuXHRcdGlmICggIXN1cHBvcnQucGl4ZWxCb3hTdHlsZXMoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcmJveFN0eWxlLnRlc3QoIG5hbWUgKSApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlc1xuXHRcdFx0d2lkdGggPSBzdHlsZS53aWR0aDtcblx0XHRcdG1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7XG5cdFx0XHRtYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoO1xuXG5cdFx0XHQvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7XG5cdFx0XHRyZXQgPSBjb21wdXRlZC53aWR0aDtcblxuXHRcdFx0Ly8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlc1xuXHRcdFx0c3R5bGUud2lkdGggPSB3aWR0aDtcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7XG5cdFx0XHRzdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0Ly8gSUUgcmV0dXJucyB6SW5kZXggdmFsdWUgYXMgYW4gaW50ZWdlci5cblx0XHRyZXQgKyBcIlwiIDpcblx0XHRyZXQ7XG59XG5cblxuZnVuY3Rpb24gYWRkR2V0SG9va0lmKCBjb25kaXRpb25GbiwgaG9va0ZuICkge1xuXG5cdC8vIERlZmluZSB0aGUgaG9vaywgd2UnbGwgY2hlY2sgb24gdGhlIGZpcnN0IHJ1biBpZiBpdCdzIHJlYWxseSBuZWVkZWQuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggY29uZGl0aW9uRm4oKSApIHtcblxuXHRcdFx0XHQvLyBIb29rIG5vdCBuZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBpdCBkdWVcblx0XHRcdFx0Ly8gdG8gbWlzc2luZyBkZXBlbmRlbmN5KSwgcmVtb3ZlIGl0LlxuXHRcdFx0XHRkZWxldGUgdGhpcy5nZXQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSG9vayBuZWVkZWQ7IHJlZGVmaW5lIGl0IHNvIHRoYXQgdGhlIHN1cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0ZWQgYWdhaW4uXG5cdFx0XHRyZXR1cm4gKCB0aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9XG5cdH07XG59XG5cblxudmFyIGNzc1ByZWZpeGVzID0gWyBcIldlYmtpdFwiLCBcIk1velwiLCBcIm1zXCIgXSxcblx0ZW1wdHlTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKS5zdHlsZSxcblx0dmVuZG9yUHJvcHMgPSB7fTtcblxuLy8gUmV0dXJuIGEgdmVuZG9yLXByZWZpeGVkIHByb3BlcnR5IG9yIHVuZGVmaW5lZFxuZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB7XG5cblx0Ly8gQ2hlY2sgZm9yIHZlbmRvciBwcmVmaXhlZCBuYW1lc1xuXHR2YXIgY2FwTmFtZSA9IG5hbWVbIDAgXS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSggMSApLFxuXHRcdGkgPSBjc3NQcmVmaXhlcy5sZW5ndGg7XG5cblx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0bmFtZSA9IGNzc1ByZWZpeGVzWyBpIF0gKyBjYXBOYW1lO1xuXHRcdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xuXHRcdFx0cmV0dXJuIG5hbWU7XG5cdFx0fVxuXHR9XG59XG5cbi8vIFJldHVybiBhIHBvdGVudGlhbGx5LW1hcHBlZCBqUXVlcnkuY3NzUHJvcHMgb3IgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5XG5mdW5jdGlvbiBmaW5hbFByb3BOYW1lKCBuYW1lICkge1xuXHR2YXIgZmluYWwgPSBqUXVlcnkuY3NzUHJvcHNbIG5hbWUgXSB8fCB2ZW5kb3JQcm9wc1sgbmFtZSBdO1xuXG5cdGlmICggZmluYWwgKSB7XG5cdFx0cmV0dXJuIGZpbmFsO1xuXHR9XG5cdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xuXHRcdHJldHVybiBuYW1lO1xuXHR9XG5cdHJldHVybiB2ZW5kb3JQcm9wc1sgbmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB8fCBuYW1lO1xufVxuXG5cbnZhclxuXG5cdC8vIFN3YXBwYWJsZSBpZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3RhcnRzIHdpdGggdGFibGVcblx0Ly8gZXhjZXB0IFwidGFibGVcIiwgXCJ0YWJsZS1jZWxsXCIsIG9yIFwidGFibGUtY2FwdGlvblwiXG5cdC8vIFNlZSBoZXJlIGZvciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvZGlzcGxheVxuXHRyZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sXG5cdHJjdXN0b21Qcm9wID0gL14tLS8sXG5cdGNzc1Nob3cgPSB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsIGRpc3BsYXk6IFwiYmxvY2tcIiB9LFxuXHRjc3NOb3JtYWxUcmFuc2Zvcm0gPSB7XG5cdFx0bGV0dGVyU3BhY2luZzogXCIwXCIsXG5cdFx0Zm9udFdlaWdodDogXCI0MDBcIlxuXHR9O1xuXG5mdW5jdGlvbiBzZXRQb3NpdGl2ZU51bWJlciggX2VsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHtcblxuXHQvLyBBbnkgcmVsYXRpdmUgKCsvLSkgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuXG5cdC8vIG5vcm1hbGl6ZWQgYXQgdGhpcyBwb2ludFxuXHR2YXIgbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKTtcblx0cmV0dXJuIG1hdGNoZXMgP1xuXG5cdFx0Ly8gR3VhcmQgYWdhaW5zdCB1bmRlZmluZWQgXCJzdWJ0cmFjdFwiLCBlLmcuLCB3aGVuIHVzZWQgYXMgaW4gY3NzSG9va3Ncblx0XHRNYXRoLm1heCggMCwgbWF0Y2hlc1sgMiBdIC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApIDpcblx0XHR2YWx1ZTtcbn1cblxuZnVuY3Rpb24gYm94TW9kZWxBZGp1c3RtZW50KCBlbGVtLCBkaW1lbnNpb24sIGJveCwgaXNCb3JkZXJCb3gsIHN0eWxlcywgY29tcHV0ZWRWYWwgKSB7XG5cdHZhciBpID0gZGltZW5zaW9uID09PSBcIndpZHRoXCIgPyAxIDogMCxcblx0XHRleHRyYSA9IDAsXG5cdFx0ZGVsdGEgPSAwO1xuXG5cdC8vIEFkanVzdG1lbnQgbWF5IG5vdCBiZSBuZWNlc3Nhcnlcblx0aWYgKCBib3ggPT09ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiApIHtcblxuXHRcdC8vIEJvdGggYm94IG1vZGVscyBleGNsdWRlIG1hcmdpblxuXHRcdGlmICggYm94ID09PSBcIm1hcmdpblwiICkge1xuXHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgYm94ICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBjb250ZW50LWJveCwgd2UncmUgc2Vla2luZyBcInBhZGRpbmdcIiBvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCJcblx0XHRpZiAoICFpc0JvcmRlckJveCApIHtcblxuXHRcdFx0Ly8gQWRkIHBhZGRpbmdcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBGb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiLCBhZGQgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJwYWRkaW5nXCIgKSB7XG5cdFx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEJ1dCBzdGlsbCBrZWVwIHRyYWNrIG9mIGl0IG90aGVyd2lzZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZXh0cmEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBib3JkZXItYm94IChjb250ZW50ICsgcGFkZGluZyArIGJvcmRlciksIHdlJ3JlIHNlZWtpbmcgXCJjb250ZW50XCIgb3Jcblx0XHQvLyBcInBhZGRpbmdcIiBvciBcIm1hcmdpblwiXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiLCBzdWJ0cmFjdCBwYWRkaW5nXG5cdFx0XHRpZiAoIGJveCA9PT0gXCJjb250ZW50XCIgKSB7XG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIgb3IgXCJwYWRkaW5nXCIsIHN1YnRyYWN0IGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWNjb3VudCBmb3IgcG9zaXRpdmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlciB3aGVuIHJlcXVlc3RlZCBieSBwcm92aWRpbmcgY29tcHV0ZWRWYWxcblx0aWYgKCAhaXNCb3JkZXJCb3ggJiYgY29tcHV0ZWRWYWwgPj0gMCApIHtcblxuXHRcdC8vIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBpcyBhIHJvdW5kZWQgc3VtIG9mIGNvbnRlbnQsIHBhZGRpbmcsIHNjcm9sbCBndXR0ZXIsIGFuZCBib3JkZXJcblx0XHQvLyBBc3N1bWluZyBpbnRlZ2VyIHNjcm9sbCBndXR0ZXIsIHN1YnRyYWN0IHRoZSByZXN0IGFuZCByb3VuZCBkb3duXG5cdFx0ZGVsdGEgKz0gTWF0aC5tYXgoIDAsIE1hdGguY2VpbChcblx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRjb21wdXRlZFZhbCAtXG5cdFx0XHRkZWx0YSAtXG5cdFx0XHRleHRyYSAtXG5cdFx0XHQwLjVcblxuXHRcdC8vIElmIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBpcyB1bmtub3duLCB0aGVuIHdlIGNhbid0IGRldGVybWluZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyXG5cdFx0Ly8gVXNlIGFuIGV4cGxpY2l0IHplcm8gdG8gYXZvaWQgTmFOIChnaC0zOTY0KVxuXHRcdCkgKSB8fCAwO1xuXHR9XG5cblx0cmV0dXJuIGRlbHRhO1xufVxuXG5mdW5jdGlvbiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICkge1xuXG5cdC8vIFN0YXJ0IHdpdGggY29tcHV0ZWQgc3R5bGVcblx0dmFyIHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLFxuXG5cdFx0Ly8gVG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdywgb25seSBmZXRjaCBib3hTaXppbmcgaWYgd2UgbmVlZCBpdCAoZ2gtNDMyMikuXG5cdFx0Ly8gRmFrZSBjb250ZW50LWJveCB1bnRpbCB3ZSBrbm93IGl0J3MgbmVlZGVkIHRvIGtub3cgdGhlIHRydWUgdmFsdWUuXG5cdFx0Ym94U2l6aW5nTmVlZGVkID0gIXN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSB8fCBleHRyYSxcblx0XHRpc0JvcmRlckJveCA9IGJveFNpemluZ05lZWRlZCAmJlxuXHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gaXNCb3JkZXJCb3gsXG5cblx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIGRpbWVuc2lvbiwgc3R5bGVzICksXG5cdFx0b2Zmc2V0UHJvcCA9IFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICk7XG5cblx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdC8vIFJldHVybiBhIGNvbmZvdW5kaW5nIG5vbi1waXhlbCB2YWx1ZSBvciBmZWlnbiBpZ25vcmFuY2UsIGFzIGFwcHJvcHJpYXRlLlxuXHRpZiAoIHJudW1ub25weC50ZXN0KCB2YWwgKSApIHtcblx0XHRpZiAoICFleHRyYSApIHtcblx0XHRcdHJldHVybiB2YWw7XG5cdFx0fVxuXHRcdHZhbCA9IFwiYXV0b1wiO1xuXHR9XG5cblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHQvLyBVc2Ugb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGZvciB3aGVuIGJveCBzaXppbmcgaXMgdW5yZWxpYWJsZS5cblx0Ly8gSW4gdGhvc2UgY2FzZXMsIHRoZSBjb21wdXRlZCB2YWx1ZSBjYW4gYmUgdHJ1c3RlZCB0byBiZSBib3JkZXItYm94LlxuXHRpZiAoICggIXN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSAmJiBpc0JvcmRlckJveCB8fFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTAgLSAxMSssIEVkZ2UgMTUgLSAxOCtcblx0XHQvLyBJRS9FZGdlIG1pc3JlcG9ydCBgZ2V0Q29tcHV0ZWRTdHlsZWAgb2YgdGFibGUgcm93cyB3aXRoIHdpZHRoL2hlaWdodFxuXHRcdC8vIHNldCBpbiBDU1Mgd2hpbGUgYG9mZnNldCpgIHByb3BlcnRpZXMgcmVwb3J0IGNvcnJlY3QgdmFsdWVzLlxuXHRcdC8vIEludGVyZXN0aW5nbHksIGluIHNvbWUgY2FzZXMgSUUgOSBkb2Vzbid0IHN1ZmZlciBmcm9tIHRoaXMgaXNzdWUuXG5cdFx0IXN1cHBvcnQucmVsaWFibGVUckRpbWVuc2lvbnMoKSAmJiBub2RlTmFtZSggZWxlbSwgXCJ0clwiICkgfHxcblxuXHRcdC8vIEZhbGwgYmFjayB0byBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgd2hlbiB2YWx1ZSBpcyBcImF1dG9cIlxuXHRcdC8vIFRoaXMgaGFwcGVucyBmb3IgaW5saW5lIGVsZW1lbnRzIHdpdGggbm8gZXhwbGljaXQgc2V0dGluZyAoZ2gtMzU3MSlcblx0XHR2YWwgPT09IFwiYXV0b1wiIHx8XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIC0gNC4zIG9ubHlcblx0XHQvLyBBbHNvIHVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIG1pc3JlcG9ydGVkIGlubGluZSBkaW1lbnNpb25zIChnaC0zNjAyKVxuXHRcdCFwYXJzZUZsb2F0KCB2YWwgKSAmJiBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImlubGluZVwiICkgJiZcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyB2aXNpYmxlICYgY29ubmVjdGVkXG5cdFx0ZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblxuXHRcdGlzQm9yZGVyQm94ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIjtcblxuXHRcdC8vIFdoZXJlIGF2YWlsYWJsZSwgb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGFwcHJveGltYXRlIGJvcmRlciBib3ggZGltZW5zaW9ucy5cblx0XHQvLyBXaGVyZSBub3QgYXZhaWxhYmxlIChlLmcuLCBTVkcpLCBhc3N1bWUgdW5yZWxpYWJsZSBib3gtc2l6aW5nIGFuZCBpbnRlcnByZXQgdGhlXG5cdFx0Ly8gcmV0cmlldmVkIHZhbHVlIGFzIGEgY29udGVudCBib3ggZGltZW5zaW9uLlxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBvZmZzZXRQcm9wIGluIGVsZW07XG5cdFx0aWYgKCB2YWx1ZUlzQm9yZGVyQm94ICkge1xuXHRcdFx0dmFsID0gZWxlbVsgb2Zmc2V0UHJvcCBdO1xuXHRcdH1cblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBcIlwiIGFuZCBhdXRvXG5cdHZhbCA9IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7XG5cblx0Ly8gQWRqdXN0IGZvciB0aGUgZWxlbWVudCdzIGJveCBtb2RlbFxuXHRyZXR1cm4gKCB2YWwgK1xuXHRcdGJveE1vZGVsQWRqdXN0bWVudChcblx0XHRcdGVsZW0sXG5cdFx0XHRkaW1lbnNpb24sXG5cdFx0XHRleHRyYSB8fCAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICksXG5cdFx0XHR2YWx1ZUlzQm9yZGVyQm94LFxuXHRcdFx0c3R5bGVzLFxuXG5cdFx0XHQvLyBQcm92aWRlIHRoZSBjdXJyZW50IGNvbXB1dGVkIHNpemUgdG8gcmVxdWVzdCBzY3JvbGwgZ3V0dGVyIGNhbGN1bGF0aW9uIChnaC0zNTg5KVxuXHRcdFx0dmFsXG5cdFx0KVxuXHQpICsgXCJweFwiO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQWRkIGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5nIHRoZSBkZWZhdWx0XG5cdC8vIGJlaGF2aW9yIG9mIGdldHRpbmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eVxuXHRjc3NIb29rczoge1xuXHRcdG9wYWNpdHk6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdFx0Ly8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHlcblx0XHRcdFx0XHR2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCBcIm9wYWNpdHlcIiApO1xuXHRcdFx0XHRcdHJldHVybiByZXQgPT09IFwiXCIgPyBcIjFcIiA6IHJldDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvLyBEb24ndCBhdXRvbWF0aWNhbGx5IGFkZCBcInB4XCIgdG8gdGhlc2UgcG9zc2libHktdW5pdGxlc3MgcHJvcGVydGllc1xuXHRjc3NOdW1iZXI6IHtcblx0XHRcImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50XCI6IHRydWUsXG5cdFx0XCJjb2x1bW5Db3VudFwiOiB0cnVlLFxuXHRcdFwiZmlsbE9wYWNpdHlcIjogdHJ1ZSxcblx0XHRcImZsZXhHcm93XCI6IHRydWUsXG5cdFx0XCJmbGV4U2hyaW5rXCI6IHRydWUsXG5cdFx0XCJmb250V2VpZ2h0XCI6IHRydWUsXG5cdFx0XCJncmlkQXJlYVwiOiB0cnVlLFxuXHRcdFwiZ3JpZENvbHVtblwiOiB0cnVlLFxuXHRcdFwiZ3JpZENvbHVtbkVuZFwiOiB0cnVlLFxuXHRcdFwiZ3JpZENvbHVtblN0YXJ0XCI6IHRydWUsXG5cdFx0XCJncmlkUm93XCI6IHRydWUsXG5cdFx0XCJncmlkUm93RW5kXCI6IHRydWUsXG5cdFx0XCJncmlkUm93U3RhcnRcIjogdHJ1ZSxcblx0XHRcImxpbmVIZWlnaHRcIjogdHJ1ZSxcblx0XHRcIm9wYWNpdHlcIjogdHJ1ZSxcblx0XHRcIm9yZGVyXCI6IHRydWUsXG5cdFx0XCJvcnBoYW5zXCI6IHRydWUsXG5cdFx0XCJ3aWRvd3NcIjogdHJ1ZSxcblx0XHRcInpJbmRleFwiOiB0cnVlLFxuXHRcdFwiem9vbVwiOiB0cnVlXG5cdH0sXG5cblx0Ly8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2UgbmFtZXMgeW91IHdpc2ggdG8gZml4IGJlZm9yZVxuXHQvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhlIHZhbHVlXG5cdGNzc1Byb3BzOiB7fSxcblxuXHQvLyBHZXQgYW5kIHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9kZVxuXHRzdHlsZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlLCBleHRyYSApIHtcblxuXHRcdC8vIERvbid0IHNldCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuXHRcdGlmICggIWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4IHx8ICFlbGVtLnN0eWxlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZVxuXHRcdHZhciByZXQsIHR5cGUsIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBjYW1lbENhc2UoIG5hbWUgKSxcblx0XHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKSxcblx0XHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3Rcblx0XHQvLyB3YW50IHRvIHF1ZXJ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0cyBob29rIGZvciB0aGUgcHJlZml4ZWQgdmVyc2lvbiwgdGhlbiB1bnByZWZpeGVkIHZlcnNpb25cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcblxuXHRcdC8vIENoZWNrIGlmIHdlJ3JlIHNldHRpbmcgYSB2YWx1ZVxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHR5cGUgPSB0eXBlb2YgdmFsdWU7XG5cblx0XHRcdC8vIENvbnZlcnQgXCIrPVwiIG9yIFwiLT1cIiB0byByZWxhdGl2ZSBudW1iZXJzICgjNzM0NSlcblx0XHRcdGlmICggdHlwZSA9PT0gXCJzdHJpbmdcIiAmJiAoIHJldCA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmIHJldFsgMSBdICkge1xuXHRcdFx0XHR2YWx1ZSA9IGFkanVzdENTUyggZWxlbSwgbmFtZSwgcmV0ICk7XG5cblx0XHRcdFx0Ly8gRml4ZXMgYnVnICM5MjM3XG5cdFx0XHRcdHR5cGUgPSBcIm51bWJlclwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCBudWxsIGFuZCBOYU4gdmFsdWVzIGFyZW4ndCBzZXQgKCM3MTE2KVxuXHRcdFx0aWYgKCB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlICE9PSB2YWx1ZSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIG51bWJlciB3YXMgcGFzc2VkIGluLCBhZGQgdGhlIHVuaXQgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVydGllcylcblx0XHRcdC8vIFRoZSBpc0N1c3RvbVByb3AgY2hlY2sgY2FuIGJlIHJlbW92ZWQgaW4galF1ZXJ5IDQuMCB3aGVuIHdlIG9ubHkgYXV0by1hcHBlbmRcblx0XHRcdC8vIFwicHhcIiB0byBhIGZldyBoYXJkY29kZWQgdmFsdWVzLlxuXHRcdFx0aWYgKCB0eXBlID09PSBcIm51bWJlclwiICYmICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRcdHZhbHVlICs9IHJldCAmJiByZXRbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIG9yaWdOYW1lIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGJhY2tncm91bmQtKiBwcm9wcyBhZmZlY3Qgb3JpZ2luYWwgY2xvbmUncyB2YWx1ZXNcblx0XHRcdGlmICggIXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlICYmIHZhbHVlID09PSBcIlwiICYmIG5hbWUuaW5kZXhPZiggXCJiYWNrZ3JvdW5kXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IFwiaW5oZXJpdFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWVcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fFxuXHRcdFx0XHQoIHZhbHVlID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0aWYgKCBpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRcdFx0c3R5bGUuc2V0UHJvcGVydHkoIG5hbWUsIHZhbHVlICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE90aGVyd2lzZSBqdXN0IGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0XG5cdFx0XHRyZXR1cm4gc3R5bGVbIG5hbWUgXTtcblx0XHR9XG5cdH0sXG5cblx0Y3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZXh0cmEsIHN0eWxlcyApIHtcblx0XHR2YXIgdmFsLCBudW0sIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBjYW1lbENhc2UoIG5hbWUgKSxcblx0XHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3Rcblx0XHQvLyB3YW50IHRvIG1vZGlmeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIFRyeSBwcmVmaXhlZCBuYW1lIGZvbGxvd2VkIGJ5IHRoZSB1bnByZWZpeGVkIG5hbWVcblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcblxuXHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0XG5cdFx0aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBcIm5vcm1hbFwiIHRvIGNvbXB1dGVkIHZhbHVlXG5cdFx0aWYgKCB2YWwgPT09IFwibm9ybWFsXCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxUcmFuc2Zvcm0gKSB7XG5cdFx0XHR2YWwgPSBjc3NOb3JtYWxUcmFuc2Zvcm1bIG5hbWUgXTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIG51bWVyaWMgaWYgZm9yY2VkIG9yIGEgcXVhbGlmaWVyIHdhcyBwcm92aWRlZCBhbmQgdmFsIGxvb2tzIG51bWVyaWNcblx0XHRpZiAoIGV4dHJhID09PSBcIlwiIHx8IGV4dHJhICkge1xuXHRcdFx0bnVtID0gcGFyc2VGbG9hdCggdmFsICk7XG5cdFx0XHRyZXR1cm4gZXh0cmEgPT09IHRydWUgfHwgaXNGaW5pdGUoIG51bSApID8gbnVtIHx8IDAgOiB2YWw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbDtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImhlaWdodFwiLCBcIndpZHRoXCIgXSwgZnVuY3Rpb24oIF9pLCBkaW1lbnNpb24gKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgZGltZW5zaW9uIF0gPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHQvLyBDZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlmIHdlIGludmlzaWJseSBzaG93IHRoZW1cblx0XHRcdFx0Ly8gYnV0IGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXRcblx0XHRcdFx0cmV0dXJuIHJkaXNwbGF5c3dhcC50ZXN0KCBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApICkgJiZcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4K1xuXHRcdFx0XHRcdC8vIFRhYmxlIGNvbHVtbnMgaW4gU2FmYXJpIGhhdmUgbm9uLXplcm8gb2Zmc2V0V2lkdGggJiB6ZXJvXG5cdFx0XHRcdFx0Ly8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggdW5sZXNzIGRpc3BsYXkgaXMgY2hhbmdlZC5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHRcdFx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlXG5cdFx0XHRcdFx0Ly8gaW4gSUUgdGhyb3dzIGFuIGVycm9yLlxuXHRcdFx0XHRcdCggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggfHwgIWVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKSA/XG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0XHRcdH0gKSA6XG5cdFx0XHRcdFx0Z2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7XG5cdFx0XHR2YXIgbWF0Y2hlcyxcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHRcdFx0Ly8gT25seSByZWFkIHN0eWxlcy5wb3NpdGlvbiBpZiB0aGUgdGVzdCBoYXMgYSBjaGFuY2UgdG8gZmFpbFxuXHRcdFx0XHQvLyB0byBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LlxuXHRcdFx0XHRzY3JvbGxib3hTaXplQnVnZ3kgPSAhc3VwcG9ydC5zY3JvbGxib3hTaXplKCkgJiZcblx0XHRcdFx0XHRzdHlsZXMucG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIixcblxuXHRcdFx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC0zOTkxKVxuXHRcdFx0XHRib3hTaXppbmdOZWVkZWQgPSBzY3JvbGxib3hTaXplQnVnZ3kgfHwgZXh0cmEsXG5cdFx0XHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0c3VidHJhY3QgPSBleHRyYSA/XG5cdFx0XHRcdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0XHRcdFx0ZWxlbSxcblx0XHRcdFx0XHRcdGRpbWVuc2lvbixcblx0XHRcdFx0XHRcdGV4dHJhLFxuXHRcdFx0XHRcdFx0aXNCb3JkZXJCb3gsXG5cdFx0XHRcdFx0XHRzdHlsZXNcblx0XHRcdFx0XHQpIDpcblx0XHRcdFx0XHQwO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB1bnJlbGlhYmxlIGJvcmRlci1ib3ggZGltZW5zaW9ucyBieSBjb21wYXJpbmcgb2Zmc2V0KiB0byBjb21wdXRlZCBhbmRcblx0XHRcdC8vIGZha2luZyBhIGNvbnRlbnQtYm94IHRvIGdldCBib3JkZXIgYW5kIHBhZGRpbmcgKGdoLTM2OTkpXG5cdFx0XHRpZiAoIGlzQm9yZGVyQm94ICYmIHNjcm9sbGJveFNpemVCdWdneSApIHtcblx0XHRcdFx0c3VidHJhY3QgLT0gTWF0aC5jZWlsKFxuXHRcdFx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRcdFx0cGFyc2VGbG9hdCggc3R5bGVzWyBkaW1lbnNpb24gXSApIC1cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgXCJib3JkZXJcIiwgZmFsc2UsIHN0eWxlcyApIC1cblx0XHRcdFx0XHQwLjVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCB0byBwaXhlbHMgaWYgdmFsdWUgYWRqdXN0bWVudCBpcyBuZWVkZWRcblx0XHRcdGlmICggc3VidHJhY3QgJiYgKCBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiZcblx0XHRcdFx0KCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgIT09IFwicHhcIiApIHtcblxuXHRcdFx0XHRlbGVtLnN0eWxlWyBkaW1lbnNpb24gXSA9IHZhbHVlO1xuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIGRpbWVuc2lvbiApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApO1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmNzc0hvb2tzLm1hcmdpbkxlZnQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5MZWZ0LFxuXHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdHJldHVybiAoIHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIgKSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtXG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgeyBtYXJnaW5MZWZ0OiAwIH0sIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblx0XHRcdFx0XHR9IClcblx0XHRcdCkgKyBcInB4XCI7XG5cdFx0fVxuXHR9XG4pO1xuXG4vLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9wZXJ0aWVzXG5qUXVlcnkuZWFjaCgge1xuXHRtYXJnaW46IFwiXCIsXG5cdHBhZGRpbmc6IFwiXCIsXG5cdGJvcmRlcjogXCJXaWR0aFwiXG59LCBmdW5jdGlvbiggcHJlZml4LCBzdWZmaXggKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7XG5cdFx0ZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgaSA9IDAsXG5cdFx0XHRcdGV4cGFuZGVkID0ge30sXG5cblx0XHRcdFx0Ly8gQXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nXG5cdFx0XHRcdHBhcnRzID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUuc3BsaXQoIFwiIFwiICkgOiBbIHZhbHVlIF07XG5cblx0XHRcdGZvciAoIDsgaSA8IDQ7IGkrKyApIHtcblx0XHRcdFx0ZXhwYW5kZWRbIHByZWZpeCArIGNzc0V4cGFuZFsgaSBdICsgc3VmZml4IF0gPVxuXHRcdFx0XHRcdHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGV4cGFuZGVkO1xuXHRcdH1cblx0fTtcblxuXHRpZiAoIHByZWZpeCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdLnNldCA9IHNldFBvc2l0aXZlTnVtYmVyO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0Y3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0dmFyIHN0eWxlcywgbGVuLFxuXHRcdFx0XHRtYXAgPSB7fSxcblx0XHRcdFx0aSA9IDA7XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggbmFtZSApICkge1xuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKTtcblx0XHRcdFx0bGVuID0gbmFtZS5sZW5ndGg7XG5cblx0XHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0bWFwWyBuYW1lWyBpIF0gXSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWVbIGkgXSwgZmFsc2UsIHN0eWxlcyApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG1hcDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOlxuXHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7XG5cdFx0fSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH1cbn0gKTtcblxuXG5mdW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKSB7XG5cdHJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7XG59XG5qUXVlcnkuVHdlZW4gPSBUd2VlbjtcblxuVHdlZW4ucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogVHdlZW4sXG5cdGluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZywgdW5pdCApIHtcblx0XHR0aGlzLmVsZW0gPSBlbGVtO1xuXHRcdHRoaXMucHJvcCA9IHByb3A7XG5cdFx0dGhpcy5lYXNpbmcgPSBlYXNpbmcgfHwgalF1ZXJ5LmVhc2luZy5fZGVmYXVsdDtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuc3RhcnQgPSB0aGlzLm5vdyA9IHRoaXMuY3VyKCk7XG5cdFx0dGhpcy5lbmQgPSBlbmQ7XG5cdFx0dGhpcy51bml0ID0gdW5pdCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0fSxcblx0Y3VyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0cmV0dXJuIGhvb2tzICYmIGhvb2tzLmdldCA/XG5cdFx0XHRob29rcy5nZXQoIHRoaXMgKSA6XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KCB0aGlzICk7XG5cdH0sXG5cdHJ1bjogZnVuY3Rpb24oIHBlcmNlbnQgKSB7XG5cdFx0dmFyIGVhc2VkLFxuXHRcdFx0aG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0galF1ZXJ5LmVhc2luZ1sgdGhpcy5lYXNpbmcgXShcblx0XHRcdFx0cGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0gcGVyY2VudDtcblx0XHR9XG5cdFx0dGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhpcy5zdGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0O1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuc3RlcCApIHtcblx0XHRcdHRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnNldCApIHtcblx0XHRcdGhvb2tzLnNldCggdGhpcyApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KCB0aGlzICk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59O1xuXG5Ud2Vlbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGUgPSBUd2Vlbi5wcm90b3R5cGU7XG5cblR3ZWVuLnByb3BIb29rcyA9IHtcblx0X2RlZmF1bHQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRcdHZhciByZXN1bHQ7XG5cblx0XHRcdC8vIFVzZSBhIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGRpcmVjdGx5IHdoZW4gaXQgaXMgbm90IGEgRE9NIGVsZW1lbnQsXG5cdFx0XHQvLyBvciB3aGVuIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHN0eWxlIHByb3BlcnR5IHRoYXQgZXhpc3RzLlxuXHRcdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICE9PSAxIHx8XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSAhPSBudWxsICYmIHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVuLnByb3AgXSA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQYXNzaW5nIGFuIGVtcHR5IHN0cmluZyBhcyBhIDNyZCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2FsbHlcblx0XHRcdC8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmluZyBpZiB0aGUgcGFyc2UgZmFpbHMuXG5cdFx0XHQvLyBTaW1wbGUgdmFsdWVzIHN1Y2ggYXMgXCIxMHB4XCIgYXJlIHBhcnNlZCB0byBGbG9hdDtcblx0XHRcdC8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMgXCJyb3RhdGUoMXJhZClcIiBhcmUgcmV0dXJuZWQgYXMtaXMuXG5cdFx0XHRyZXN1bHQgPSBqUXVlcnkuY3NzKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCBcIlwiICk7XG5cblx0XHRcdC8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgXCJhdXRvXCIgYXJlIGNvbnZlcnRlZCB0byAwLlxuXHRcdFx0cmV0dXJuICFyZXN1bHQgfHwgcmVzdWx0ID09PSBcImF1dG9cIiA/IDAgOiByZXN1bHQ7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblxuXHRcdFx0Ly8gVXNlIHN0ZXAgaG9vayBmb3IgYmFjayBjb21wYXQuXG5cdFx0XHQvLyBVc2UgY3NzSG9vayBpZiBpdHMgdGhlcmUuXG5cdFx0XHQvLyBVc2UgLnN0eWxlIGlmIGF2YWlsYWJsZSBhbmQgdXNlIHBsYWluIHByb3BlcnRpZXMgd2hlcmUgYXZhaWxhYmxlLlxuXHRcdFx0aWYgKCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkge1xuXHRcdFx0XHRqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApO1xuXHRcdFx0fSBlbHNlIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cdFx0XHRcdGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdIHx8XG5cdFx0XHRcdFx0dHdlZW4uZWxlbS5zdHlsZVsgZmluYWxQcm9wTmFtZSggdHdlZW4ucHJvcCApIF0gIT0gbnVsbCApICkge1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblR3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHtcblx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5lYXNpbmcgPSB7XG5cdGxpbmVhcjogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIHA7XG5cdH0sXG5cdHN3aW5nOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJICkgLyAyO1xuXHR9LFxuXHRfZGVmYXVsdDogXCJzd2luZ1wiXG59O1xuXG5qUXVlcnkuZnggPSBUd2Vlbi5wcm90b3R5cGUuaW5pdDtcblxuLy8gQmFjayBjb21wYXQgPDEuOCBleHRlbnNpb24gcG9pbnRcbmpRdWVyeS5meC5zdGVwID0ge307XG5cblxuXG5cbnZhclxuXHRmeE5vdywgaW5Qcm9ncmVzcyxcblx0cmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sXG5cdHJydW4gPSAvcXVldWVIb29rcyQvO1xuXG5mdW5jdGlvbiBzY2hlZHVsZSgpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdGlmICggZG9jdW1lbnQuaGlkZGVuID09PSBmYWxzZSAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lICkge1xuXHRcdFx0d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSggc2NoZWR1bGUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHNjaGVkdWxlLCBqUXVlcnkuZnguaW50ZXJ2YWwgKTtcblx0XHR9XG5cblx0XHRqUXVlcnkuZngudGljaygpO1xuXHR9XG59XG5cbi8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHlcbmZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0ZnhOb3cgPSB1bmRlZmluZWQ7XG5cdH0gKTtcblx0cmV0dXJuICggZnhOb3cgPSBEYXRlLm5vdygpICk7XG59XG5cbi8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uXG5mdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkge1xuXHR2YXIgd2hpY2gsXG5cdFx0aSA9IDAsXG5cdFx0YXR0cnMgPSB7IGhlaWdodDogdHlwZSB9O1xuXG5cdC8vIElmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcyxcblx0Ly8gb3RoZXJ3aXNlIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVmdCBhbmQgUmlnaHRcblx0aW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoID8gMSA6IDA7XG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHtcblx0XHR3aGljaCA9IGNzc0V4cGFuZFsgaSBdO1xuXHRcdGF0dHJzWyBcIm1hcmdpblwiICsgd2hpY2ggXSA9IGF0dHJzWyBcInBhZGRpbmdcIiArIHdoaWNoIF0gPSB0eXBlO1xuXHR9XG5cblx0aWYgKCBpbmNsdWRlV2lkdGggKSB7XG5cdFx0YXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTtcblx0fVxuXG5cdHJldHVybiBhdHRycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlVHdlZW4oIHZhbHVlLCBwcm9wLCBhbmltYXRpb24gKSB7XG5cdHZhciB0d2Vlbixcblx0XHRjb2xsZWN0aW9uID0gKCBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXSApLmNvbmNhdCggQW5pbWF0aW9uLnR3ZWVuZXJzWyBcIipcIiBdICksXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggKCB0d2VlbiA9IGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBwcm9wLCB2YWx1ZSApICkgKSB7XG5cblx0XHRcdC8vIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkge1xuXHR2YXIgcHJvcCwgdmFsdWUsIHRvZ2dsZSwgaG9va3MsIG9sZGZpcmUsIHByb3BUd2VlbiwgcmVzdG9yZURpc3BsYXksIGRpc3BsYXksXG5cdFx0aXNCb3ggPSBcIndpZHRoXCIgaW4gcHJvcHMgfHwgXCJoZWlnaHRcIiBpbiBwcm9wcyxcblx0XHRhbmltID0gdGhpcyxcblx0XHRvcmlnID0ge30sXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlLFxuXHRcdGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICksXG5cdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZnhzaG93XCIgKTtcblxuXHQvLyBRdWV1ZS1za2lwcGluZyBhbmltYXRpb25zIGhpamFjayB0aGUgZnggaG9va3Ncblx0aWYgKCAhb3B0cy5xdWV1ZSApIHtcblx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgXCJmeFwiICk7XG5cdFx0aWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkge1xuXHRcdFx0aG9va3MudW5xdWV1ZWQgPSAwO1xuXHRcdFx0b2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggIWhvb2tzLnVucXVldWVkICkge1xuXHRcdFx0XHRcdG9sZGZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aG9va3MudW5xdWV1ZWQrKztcblxuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5zdXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVyIGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXNcblx0XHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aG9va3MudW5xdWV1ZWQtLTtcblx0XHRcdFx0aWYgKCAhalF1ZXJ5LnF1ZXVlKCBlbGVtLCBcImZ4XCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRGV0ZWN0IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdGZvciAoIHByb3AgaW4gcHJvcHMgKSB7XG5cdFx0dmFsdWUgPSBwcm9wc1sgcHJvcCBdO1xuXHRcdGlmICggcmZ4dHlwZXMudGVzdCggdmFsdWUgKSApIHtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgcHJvcCBdO1xuXHRcdFx0dG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSBcInRvZ2dsZVwiO1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gKCBoaWRkZW4gPyBcImhpZGVcIiA6IFwic2hvd1wiICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJldGVuZCB0byBiZSBoaWRkZW4gaWYgdGhpcyBpcyBhIFwic2hvd1wiIGFuZFxuXHRcdFx0XHQvLyB0aGVyZSBpcyBzdGlsbCBkYXRhIGZyb20gYSBzdG9wcGVkIHNob3cvaGlkZVxuXHRcdFx0XHRpZiAoIHZhbHVlID09PSBcInNob3dcIiAmJiBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gdHJ1ZTtcblxuXHRcdFx0XHQvLyBJZ25vcmUgYWxsIG90aGVyIG5vLW9wIHNob3cvaGlkZSBkYXRhXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG9yaWdbIHByb3AgXSA9IGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQmFpbCBvdXQgaWYgdGhpcyBpcyBhIG5vLW9wIGxpa2UgLmhpZGUoKS5oaWRlKClcblx0cHJvcFR3ZWVuID0gIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wcyApO1xuXHRpZiAoICFwcm9wVHdlZW4gJiYgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9yaWcgKSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZXN0cmljdCBcIm92ZXJmbG93XCIgYW5kIFwiZGlzcGxheVwiIHN0eWxlcyBkdXJpbmcgYm94IGFuaW1hdGlvbnNcblx0aWYgKCBpc0JveCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdC8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9lcyBub3QgaW5mZXIgdGhlIHNob3J0aGFuZFxuXHRcdC8vIGZyb20gaWRlbnRpY2FsbHktdmFsdWVkIG92ZXJmbG93WCBhbmQgb3ZlcmZsb3dZIGFuZCBFZGdlIGp1c3QgbWlycm9yc1xuXHRcdC8vIHRoZSBvdmVyZmxvd1ggdmFsdWUgdGhlcmUuXG5cdFx0b3B0cy5vdmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUub3ZlcmZsb3dZIF07XG5cblx0XHQvLyBJZGVudGlmeSBhIGRpc3BsYXkgdHlwZSwgcHJlZmVycmluZyBvbGQgc2hvdy9oaWRlIGRhdGEgb3ZlciB0aGUgQ1NTIGNhc2NhZGVcblx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFTaG93ICYmIGRhdGFTaG93LmRpc3BsYXk7XG5cdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0fVxuXHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ICkge1xuXHRcdFx0XHRkaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEdldCBub25lbXB0eSB2YWx1ZShzKSBieSB0ZW1wb3JhcmlseSBmb3JjaW5nIHZpc2liaWxpdHlcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5IHx8IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQW5pbWF0ZSBpbmxpbmUgZWxlbWVudHMgYXMgaW5saW5lLWJsb2NrXG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcImlubGluZVwiIHx8IGRpc3BsYXkgPT09IFwiaW5saW5lLWJsb2NrXCIgJiYgcmVzdG9yZURpc3BsYXkgIT0gbnVsbCApIHtcblx0XHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJmbG9hdFwiICkgPT09IFwibm9uZVwiICkge1xuXG5cdFx0XHRcdC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGRpc3BsYXkgdmFsdWUgYXQgdGhlIGVuZCBvZiBwdXJlIHNob3cvaGlkZSBhbmltYXRpb25zXG5cdFx0XHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5ID0gc3R5bGUuZGlzcGxheTtcblx0XHRcdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGlzcGxheSA9PT0gXCJub25lXCIgPyBcIlwiIDogZGlzcGxheTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBvcHRzLm92ZXJmbG93ICkge1xuXHRcdHN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRzdHlsZS5vdmVyZmxvdyA9IG9wdHMub3ZlcmZsb3dbIDAgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBJbXBsZW1lbnQgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0cHJvcFR3ZWVuID0gZmFsc2U7XG5cdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblxuXHRcdC8vIEdlbmVyYWwgc2hvdy9oaWRlIHNldHVwIGZvciB0aGlzIGVsZW1lbnQgYW5pbWF0aW9uXG5cdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0aWYgKCBkYXRhU2hvdyApIHtcblx0XHRcdFx0aWYgKCBcImhpZGRlblwiIGluIGRhdGFTaG93ICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIFwiZnhzaG93XCIsIHsgZGlzcGxheTogcmVzdG9yZURpc3BsYXkgfSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdG9yZSBoaWRkZW4vdmlzaWJsZSBmb3IgdG9nZ2xlIHNvIGAuc3RvcCgpLnRvZ2dsZSgpYCBcInJldmVyc2VzXCJcblx0XHRcdGlmICggdG9nZ2xlICkge1xuXHRcdFx0XHRkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTaG93IGVsZW1lbnRzIGJlZm9yZSBhbmltYXRpbmcgdGhlbVxuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRcdC8vIFRoZSBmaW5hbCBzdGVwIG9mIGEgXCJoaWRlXCIgYW5pbWF0aW9uIGlzIGFjdHVhbGx5IGhpZGluZyB0aGUgZWxlbWVudFxuXHRcdFx0XHRpZiAoICFoaWRkZW4gKSB7XG5cdFx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cdFx0XHRcdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Ly8gUGVyLXByb3BlcnR5IHNldHVwXG5cdFx0cHJvcFR3ZWVuID0gY3JlYXRlVHdlZW4oIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0gOiAwLCBwcm9wLCBhbmltICk7XG5cdFx0aWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7XG5cdFx0XHRkYXRhU2hvd1sgcHJvcCBdID0gcHJvcFR3ZWVuLnN0YXJ0O1xuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHByb3BUd2Vlbi5lbmQgPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRcdHByb3BUd2Vlbi5zdGFydCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkge1xuXHR2YXIgaW5kZXgsIG5hbWUsIGVhc2luZywgdmFsdWUsIGhvb2tzO1xuXG5cdC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sgcGFzc1xuXHRmb3IgKCBpbmRleCBpbiBwcm9wcyApIHtcblx0XHRuYW1lID0gY2FtZWxDYXNlKCBpbmRleCApO1xuXHRcdGVhc2luZyA9IHNwZWNpYWxFYXNpbmdbIG5hbWUgXTtcblx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdO1xuXHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdGVhc2luZyA9IHZhbHVlWyAxIF07XG5cdFx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdID0gdmFsdWVbIDAgXTtcblx0XHR9XG5cblx0XHRpZiAoIGluZGV4ICE9PSBuYW1lICkge1xuXHRcdFx0cHJvcHNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBpbmRleCBdO1xuXHRcdH1cblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07XG5cdFx0aWYgKCBob29rcyAmJiBcImV4cGFuZFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsdWUgPSBob29rcy5leHBhbmQoIHZhbHVlICk7XG5cdFx0XHRkZWxldGUgcHJvcHNbIG5hbWUgXTtcblxuXHRcdFx0Ly8gTm90IHF1aXRlICQuZXh0ZW5kLCB0aGlzIHdvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBrZXlzLlxuXHRcdFx0Ly8gUmV1c2luZyAnaW5kZXgnIGJlY2F1c2Ugd2UgaGF2ZSB0aGUgY29ycmVjdCBcIm5hbWVcIlxuXHRcdFx0Zm9yICggaW5kZXggaW4gdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggISggaW5kZXggaW4gcHJvcHMgKSApIHtcblx0XHRcdFx0XHRwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyBpbmRleCBdO1xuXHRcdFx0XHRcdHNwZWNpYWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3BlY2lhbEVhc2luZ1sgbmFtZSBdID0gZWFzaW5nO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBBbmltYXRpb24oIGVsZW0sIHByb3BlcnRpZXMsIG9wdGlvbnMgKSB7XG5cdHZhciByZXN1bHQsXG5cdFx0c3RvcHBlZCxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gQW5pbWF0aW9uLnByZWZpbHRlcnMubGVuZ3RoLFxuXHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRG9uJ3QgbWF0Y2ggZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNlbGVjdG9yXG5cdFx0XHRkZWxldGUgdGljay5lbGVtO1xuXHRcdH0gKSxcblx0XHR0aWNrID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHZhciBjdXJyZW50VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRcdHJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSxcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDIuMyBvbmx5XG5cdFx0XHRcdC8vIEFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVzIHRvIHVzZSBgMSAtICggMC41IHx8IDAgKWAgKCMxMjQ5Nylcblx0XHRcdFx0dGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLFxuXHRcdFx0XHRwZXJjZW50ID0gMSAtIHRlbXAsXG5cdFx0XHRcdGluZGV4ID0gMCxcblx0XHRcdFx0bGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7XG5cblx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSApO1xuXG5cdFx0XHQvLyBJZiB0aGVyZSdzIG1vcmUgdG8gZG8sIHlpZWxkXG5cdFx0XHRpZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHtcblx0XHRcdFx0cmV0dXJuIHJlbWFpbmluZztcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyB3YXMgYW4gZW1wdHkgYW5pbWF0aW9uLCBzeW50aGVzaXplIGEgZmluYWwgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uXG5cdFx0XHRpZiAoICFsZW5ndGggKSB7XG5cdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVzb2x2ZSB0aGUgYW5pbWF0aW9uIGFuZCByZXBvcnQgaXRzIGNvbmNsdXNpb25cblx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBdICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9taXNlKCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0cHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksXG5cdFx0XHRvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7XG5cdFx0XHRcdHNwZWNpYWxFYXNpbmc6IHt9LFxuXHRcdFx0XHRlYXNpbmc6IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHRcblx0XHRcdH0sIG9wdGlvbnMgKSxcblx0XHRcdG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcyxcblx0XHRcdG9yaWdpbmFsT3B0aW9uczogb3B0aW9ucyxcblx0XHRcdHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLFxuXHRcdFx0dHdlZW5zOiBbXSxcblx0XHRcdGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkge1xuXHRcdFx0XHR2YXIgdHdlZW4gPSBqUXVlcnkuVHdlZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBwcm9wLCBlbmQsXG5cdFx0XHRcdFx0YW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApO1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7XG5cdFx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHRcdH0sXG5cdFx0XHRzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHtcblx0XHRcdFx0dmFyIGluZGV4ID0gMCxcblxuXHRcdFx0XHRcdC8vIElmIHdlIGFyZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwgdGhlIHR3ZWVuc1xuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydFxuXHRcdFx0XHRcdGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7XG5cdFx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0XHRzdG9wcGVkID0gdHJ1ZTtcblx0XHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3Rcblx0XHRcdFx0aWYgKCBnb3RvRW5kICkge1xuXHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9ICksXG5cdFx0cHJvcHMgPSBhbmltYXRpb24ucHJvcHM7XG5cblx0cHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTtcblxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdHJlc3VsdCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7XG5cdFx0aWYgKCByZXN1bHQgKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHJlc3VsdC5zdG9wICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9XG5cdFx0XHRcdFx0cmVzdWx0LnN0b3AuYmluZCggcmVzdWx0ICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdGpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkge1xuXHRcdGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApO1xuXHR9XG5cblx0Ly8gQXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9wdGlvbnNcblx0YW5pbWF0aW9uXG5cdFx0LnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApXG5cdFx0LmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlIClcblx0XHQuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApXG5cdFx0LmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7XG5cblx0alF1ZXJ5LmZ4LnRpbWVyKFxuXHRcdGpRdWVyeS5leHRlbmQoIHRpY2ssIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRhbmltOiBhbmltYXRpb24sXG5cdFx0XHRxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWVcblx0XHR9IClcblx0KTtcblxuXHRyZXR1cm4gYW5pbWF0aW9uO1xufVxuXG5qUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7XG5cblx0dHdlZW5lcnM6IHtcblx0XHRcIipcIjogWyBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApO1xuXHRcdFx0YWRqdXN0Q1NTKCB0d2Vlbi5lbGVtLCBwcm9wLCByY3NzTnVtLmV4ZWMoIHZhbHVlICksIHR3ZWVuICk7XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fSBdXG5cdH0sXG5cblx0dHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIHByb3BzICkgKSB7XG5cdFx0XHRjYWxsYmFjayA9IHByb3BzO1xuXHRcdFx0cHJvcHMgPSBbIFwiKlwiIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BzID0gcHJvcHMubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblx0XHR9XG5cblx0XHR2YXIgcHJvcCxcblx0XHRcdGluZGV4ID0gMCxcblx0XHRcdGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRwcm9wID0gcHJvcHNbIGluZGV4IF07XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSA9IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH0sXG5cblx0cHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sXG5cblx0cHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7XG5cdFx0aWYgKCBwcmVwZW5kICkge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkge1xuXHR2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSBcIm9iamVjdFwiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7XG5cdFx0Y29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHxcblx0XHRcdGlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsXG5cdFx0ZHVyYXRpb246IHNwZWVkLFxuXHRcdGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nXG5cdH07XG5cblx0Ly8gR28gdG8gdGhlIGVuZCBzdGF0ZSBpZiBmeCBhcmUgb2ZmXG5cdGlmICggalF1ZXJ5LmZ4Lm9mZiApIHtcblx0XHRvcHQuZHVyYXRpb24gPSAwO1xuXG5cdH0gZWxzZSB7XG5cdFx0aWYgKCB0eXBlb2Ygb3B0LmR1cmF0aW9uICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0aWYgKCBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyApIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gXCJmeFwiXG5cdGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkge1xuXHRcdG9wdC5xdWV1ZSA9IFwiZnhcIjtcblx0fVxuXG5cdC8vIFF1ZXVlaW5nXG5cdG9wdC5vbGQgPSBvcHQuY29tcGxldGU7XG5cblx0b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7XG5cdFx0XHRvcHQub2xkLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdC5xdWV1ZSApIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIG9wdDtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXG5cdFx0Ly8gU2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbldpdGhpblRyZWUgKS5jc3MoIFwib3BhY2l0eVwiLCAwICkuc2hvdygpXG5cblx0XHRcdC8vIEFuaW1hdGUgdG8gdGhlIHZhbHVlIHNwZWNpZmllZFxuXHRcdFx0LmVuZCgpLmFuaW1hdGUoIHsgb3BhY2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fSxcblx0YW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksXG5cdFx0XHRvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksXG5cdFx0XHRkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0XG5cdFx0XHRcdHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCApLCBvcHRhbGwgKTtcblxuXHRcdFx0XHQvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHlcblx0XHRcdFx0aWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZmluaXNoXCIgKSApIHtcblx0XHRcdFx0XHRhbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uO1xuXG5cdFx0cmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0dGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDpcblx0XHRcdHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7XG5cdFx0dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHtcblx0XHRcdHZhciBzdG9wID0gaG9va3Muc3RvcDtcblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0c3RvcCggZ290b0VuZCApO1xuXHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Z290b0VuZCA9IGNsZWFyUXVldWU7XG5cdFx0XHRjbGVhclF1ZXVlID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xlYXJRdWV1ZSApIHtcblx0XHRcdHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRlcXVldWUgPSB0cnVlLFxuXHRcdFx0XHRpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgXCJxdWV1ZUhvb2tzXCIsXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTtcblxuXHRcdFx0aWYgKCBpbmRleCApIHtcblx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHtcblx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yICggaW5kZXggaW4gZGF0YSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHtcblx0XHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmXG5cdFx0XHRcdFx0KCB0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7XG5cblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7XG5cdFx0XHRcdFx0ZGVxdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZC5cblx0XHRcdC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2hcblx0XHRcdC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC5cblx0XHRcdGlmICggZGVxdWV1ZSB8fCAhZ290b0VuZCApIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0aWYgKCB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW5kZXgsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSxcblx0XHRcdFx0cXVldWUgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZVwiIF0sXG5cdFx0XHRcdGhvb2tzID0gZGF0YVsgdHlwZSArIFwicXVldWVIb29rc1wiIF0sXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDtcblxuXHRcdFx0Ly8gRW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YVxuXHRcdFx0ZGF0YS5maW5pc2ggPSB0cnVlO1xuXG5cdFx0XHQvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3Rcblx0XHRcdGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTtcblxuXHRcdFx0aWYgKCBob29rcyAmJiBob29rcy5zdG9wICkge1xuXHRcdFx0XHRob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkge1xuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRleCBdLmZpbmlzaCApIHtcblx0XHRcdFx0XHRxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnXG5cdFx0XHRkZWxldGUgZGF0YS5maW5pc2g7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwidG9nZ2xlXCIsIFwic2hvd1wiLCBcImhpZGVcIiBdLCBmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdO1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09IFwiYm9vbGVhblwiID9cblx0XHRcdGNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6XG5cdFx0XHR0aGlzLmFuaW1hdGUoIGdlbkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbi8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnNcbmpRdWVyeS5lYWNoKCB7XG5cdHNsaWRlRG93bjogZ2VuRngoIFwic2hvd1wiICksXG5cdHNsaWRlVXA6IGdlbkZ4KCBcImhpZGVcIiApLFxuXHRzbGlkZVRvZ2dsZTogZ2VuRngoIFwidG9nZ2xlXCIgKSxcblx0ZmFkZUluOiB7IG9wYWNpdHk6IFwic2hvd1wiIH0sXG5cdGZhZGVPdXQ6IHsgb3BhY2l0eTogXCJoaWRlXCIgfSxcblx0ZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiBcInRvZ2dsZVwiIH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS50aW1lcnMgPSBbXTtcbmpRdWVyeS5meC50aWNrID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lcixcblx0XHRpID0gMCxcblx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzO1xuXG5cdGZ4Tm93ID0gRGF0ZS5ub3coKTtcblxuXHRmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7XG5cdFx0dGltZXIgPSB0aW1lcnNbIGkgXTtcblxuXHRcdC8vIFJ1biB0aGUgdGltZXIgYW5kIHNhZmVseSByZW1vdmUgaXQgd2hlbiBkb25lIChhbGxvd2luZyBmb3IgZXh0ZXJuYWwgcmVtb3ZhbClcblx0XHRpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHtcblx0XHRcdHRpbWVycy5zcGxpY2UoIGktLSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdGlmICggIXRpbWVycy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5LmZ4LnN0b3AoKTtcblx0fVxuXHRmeE5vdyA9IHVuZGVmaW5lZDtcbn07XG5cbmpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHtcblx0alF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApO1xuXHRqUXVlcnkuZnguc3RhcnQoKTtcbn07XG5cbmpRdWVyeS5meC5pbnRlcnZhbCA9IDEzO1xualF1ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24oKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpblByb2dyZXNzID0gdHJ1ZTtcblx0c2NoZWR1bGUoKTtcbn07XG5cbmpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdGluUHJvZ3Jlc3MgPSBudWxsO1xufTtcblxualF1ZXJ5LmZ4LnNwZWVkcyA9IHtcblx0c2xvdzogNjAwLFxuXHRmYXN0OiAyMDAsXG5cblx0Ly8gRGVmYXVsdCBzcGVlZFxuXHRfZGVmYXVsdDogNDAwXG59O1xuXG5cbi8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGggcGVybWlzc2lvbi5cbi8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDEwMDMyNDAxNDc0Ny9odHRwOi8vYmxpbmRzaWduYWxzLmNvbS9pbmRleC5waHAvMjAwOS8wNy9qcXVlcnktZGVsYXkvXG5qUXVlcnkuZm4uZGVsYXkgPSBmdW5jdGlvbiggdGltZSwgdHlwZSApIHtcblx0dGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTtcblx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlLCBmdW5jdGlvbiggbmV4dCwgaG9va3MgKSB7XG5cdFx0dmFyIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCggbmV4dCwgdGltZSApO1xuXHRcdGhvb2tzLnN0b3AgPSBmdW5jdGlvbigpIHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0XHR9O1xuXHR9ICk7XG59O1xuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApLFxuXHRcdHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwic2VsZWN0XCIgKSxcblx0XHRvcHQgPSBzZWxlY3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib3B0aW9uXCIgKSApO1xuXG5cdGlucHV0LnR5cGUgPSBcImNoZWNrYm94XCI7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMyBvbmx5XG5cdC8vIERlZmF1bHQgdmFsdWUgZm9yIGEgY2hlY2tib3ggc2hvdWxkIGJlIFwib25cIlxuXHRzdXBwb3J0LmNoZWNrT24gPSBpbnB1dC52YWx1ZSAhPT0gXCJcIjtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTXVzdCBhY2Nlc3Mgc2VsZWN0ZWRJbmRleCB0byBtYWtlIGRlZmF1bHQgb3B0aW9ucyBzZWxlY3Rcblx0c3VwcG9ydC5vcHRTZWxlY3RlZCA9IG9wdC5zZWxlY3RlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gQW4gaW5wdXQgbG9zZXMgaXRzIHZhbHVlIGFmdGVyIGJlY29taW5nIGEgcmFkaW9cblx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0aW5wdXQudmFsdWUgPSBcInRcIjtcblx0aW5wdXQudHlwZSA9IFwicmFkaW9cIjtcblx0c3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09IFwidFwiO1xufSApKCk7XG5cblxudmFyIGJvb2xIb29rLFxuXHRhdHRySGFuZGxlID0galF1ZXJ5LmV4cHIuYXR0ckhhbmRsZTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIHRoaXMsIG5hbWUgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdGlmICggdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlID09PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdC8vIEF0dHJpYnV0ZSBob29rcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgbG93ZXJjYXNlIHZlcnNpb25cblx0XHQvLyBHcmFiIG5lY2Vzc2FyeSBob29rIGlmIG9uZSBpcyBkZWZpbmVkXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5hdHRySG9va3NbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8XG5cdFx0XHRcdCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC50ZXN0KCBuYW1lICkgPyBib29sSG9vayA6IHVuZGVmaW5lZCApO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdmFsdWUgPT09IG51bGwgKSB7XG5cdFx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgXCJcIiApO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkXG5cdFx0cmV0dXJuIHJldCA9PSBudWxsID8gdW5kZWZpbmVkIDogcmV0O1xuXHR9LFxuXG5cdGF0dHJIb29rczoge1xuXHRcdHR5cGU6IHtcblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICFzdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09IFwicmFkaW9cIiAmJlxuXHRcdFx0XHRcdG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSApIHtcblx0XHRcdFx0XHR2YXIgdmFsID0gZWxlbS52YWx1ZTtcblx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIHZhbHVlICk7XG5cdFx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnZhbHVlID0gdmFsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdHZhciBuYW1lLFxuXHRcdFx0aSA9IDAsXG5cblx0XHRcdC8vIEF0dHJpYnV0ZSBuYW1lcyBjYW4gY29udGFpbiBub24tSFRNTCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnNcblx0XHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2F0dHJpYnV0ZXMtMlxuXHRcdFx0YXR0ck5hbWVzID0gdmFsdWUgJiYgdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblxuXHRcdGlmICggYXR0ck5hbWVzICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHR3aGlsZSAoICggbmFtZSA9IGF0dHJOYW1lc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIG5hbWUgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSG9va3MgZm9yIGJvb2xlYW4gYXR0cmlidXRlc1xuYm9vbEhvb2sgPSB7XG5cdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkge1xuXHRcdGlmICggdmFsdWUgPT09IGZhbHNlICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNlXG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gbmFtZTtcblx0fVxufTtcblxualF1ZXJ5LmVhY2goIGpRdWVyeS5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKCAvXFx3Ky9nICksIGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0dmFyIGdldHRlciA9IGF0dHJIYW5kbGVbIG5hbWUgXSB8fCBqUXVlcnkuZmluZC5hdHRyO1xuXG5cdGF0dHJIYW5kbGVbIG5hbWUgXSA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgcmV0LCBoYW5kbGUsXG5cdFx0XHRsb3dlcmNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cblx0XHRcdC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3AgYnkgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRoZSBnZXR0ZXJcblx0XHRcdGhhbmRsZSA9IGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXTtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IHJldDtcblx0XHRcdHJldCA9IGdldHRlciggZWxlbSwgbmFtZSwgaXNYTUwgKSAhPSBudWxsID9cblx0XHRcdFx0bG93ZXJjYXNlTmFtZSA6XG5cdFx0XHRcdG51bGw7XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSBoYW5kbGU7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG59ICk7XG5cblxuXG5cbnZhciByZm9jdXNhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmNsaWNrYWJsZSA9IC9eKD86YXxhcmVhKSQvaTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZVByb3A6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGVsZXRlIHRoaXNbIGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZSBdO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzXG5cdFx0XHRuYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lO1xuXHRcdFx0aG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICggZWxlbVsgbmFtZSBdID0gdmFsdWUgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZWxlbVsgbmFtZSBdO1xuXHR9LFxuXG5cdHByb3BIb29rczoge1xuXHRcdHRhYkluZGV4OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHRcdFx0Ly8gZWxlbS50YWJJbmRleCBkb2Vzbid0IGFsd2F5cyByZXR1cm4gdGhlXG5cdFx0XHRcdC8vIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNldFxuXHRcdFx0XHQvLyBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNDExMTYyMzMzNDcvaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvYmxvZy8yMDA4LzAxLzA5L2dldHRpbmctc2V0dGluZy1hbmQtcmVtb3ZpbmctdGFiaW5kZXgtdmFsdWVzLXdpdGgtamF2YXNjcmlwdC9cblx0XHRcdFx0Ly8gVXNlIHByb3BlciBhdHRyaWJ1dGUgcmV0cmlldmFsKCMxMjA3Milcblx0XHRcdFx0dmFyIHRhYmluZGV4ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ0YWJpbmRleFwiICk7XG5cblx0XHRcdFx0aWYgKCB0YWJpbmRleCApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoIHRhYmluZGV4LCAxMCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHJmb2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8XG5cdFx0XHRcdFx0cmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiZcblx0XHRcdFx0XHRlbGVtLmhyZWZcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHByb3BGaXg6IHtcblx0XHRcImZvclwiOiBcImh0bWxGb3JcIixcblx0XHRcImNsYXNzXCI6IFwiY2xhc3NOYW1lXCJcblx0fVxufSApO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcbi8vIEFjY2Vzc2luZyB0aGUgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eVxuLy8gZm9yY2VzIHRoZSBicm93c2VyIHRvIHJlc3BlY3Qgc2V0dGluZyBzZWxlY3RlZFxuLy8gb24gdGhlIG9wdGlvblxuLy8gVGhlIGdldHRlciBlbnN1cmVzIGEgZGVmYXVsdCBvcHRpb24gaXMgc2VsZWN0ZWRcbi8vIHdoZW4gaW4gYW4gb3B0Z3JvdXBcbi8vIGVzbGludCBydWxlIFwibm8tdW51c2VkLWV4cHJlc3Npb25zXCIgaXMgZGlzYWJsZWQgZm9yIHRoaXMgY29kZVxuLy8gc2luY2UgaXQgY29uc2lkZXJzIHN1Y2ggYWNjZXNzaW9ucyBub29wXG5pZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVkICkge1xuXHRqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICYmIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0cGFyZW50LnNlbGVjdGVkSW5kZXg7XG5cblx0XHRcdFx0aWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5qUXVlcnkuZWFjaCggW1xuXHRcInRhYkluZGV4XCIsXG5cdFwicmVhZE9ubHlcIixcblx0XCJtYXhMZW5ndGhcIixcblx0XCJjZWxsU3BhY2luZ1wiLFxuXHRcImNlbGxQYWRkaW5nXCIsXG5cdFwicm93U3BhblwiLFxuXHRcImNvbFNwYW5cIixcblx0XCJ1c2VNYXBcIixcblx0XCJmcmFtZUJvcmRlclwiLFxuXHRcImNvbnRlbnRFZGl0YWJsZVwiXG5dLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnByb3BGaXhbIHRoaXMudG9Mb3dlckNhc2UoKSBdID0gdGhpcztcbn0gKTtcblxuXG5cblxuXHQvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZSBhY2NvcmRpbmcgdG8gSFRNTCBzcGVjXG5cdC8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2UtYXNjaWktd2hpdGVzcGFjZVxuXHRmdW5jdGlvbiBzdHJpcEFuZENvbGxhcHNlKCB2YWx1ZSApIHtcblx0XHR2YXIgdG9rZW5zID0gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0XHRyZXR1cm4gdG9rZW5zLmpvaW4oIFwiIFwiICk7XG5cdH1cblxuXG5mdW5jdGlvbiBnZXRDbGFzcyggZWxlbSApIHtcblx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fCBcIlwiO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VzVG9BcnJheSggdmFsdWUgKSB7XG5cdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdH1cblx0cmV0dXJuIFtdO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGFkZENsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGNsYXNzZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3Nlcy5sZW5ndGggKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTtcblx0XHRcdFx0Y3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRcdGlmICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhenogKyBcIiBcIiApIDwgMCApIHtcblx0XHRcdFx0XHRcdFx0Y3VyICs9IGNsYXp6ICsgXCIgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy5cblx0XHRcdFx0XHRmaW5hbFZhbHVlID0gc3RyaXBBbmRDb2xsYXBzZSggY3VyICk7XG5cdFx0XHRcdFx0aWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHtcblx0XHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsIGZpbmFsVmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYXR0ciggXCJjbGFzc1wiLCBcIlwiICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NlcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc2VzLmxlbmd0aCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApO1xuXG5cdFx0XHRcdC8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJlIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5IChzZWUgYWRkQ2xhc3MpXG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSAqYWxsKiBpbnN0YW5jZXNcblx0XHRcdFx0XHRcdHdoaWxlICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhenogKyBcIiBcIiApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciA9IGN1ci5yZXBsYWNlKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIsIFwiIFwiICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy5cblx0XHRcdFx0XHRmaW5hbFZhbHVlID0gc3RyaXBBbmRDb2xsYXBzZSggY3VyICk7XG5cdFx0XHRcdFx0aWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHtcblx0XHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsIGZpbmFsVmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0b2dnbGVDbGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHtcblx0XHR2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZSxcblx0XHRcdGlzVmFsaWRWYWx1ZSA9IHR5cGUgPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggdHlwZW9mIHN0YXRlVmFsID09PSBcImJvb2xlYW5cIiAmJiBpc1ZhbGlkVmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGVWYWwgPyB0aGlzLmFkZENsYXNzKCB2YWx1ZSApIDogdGhpcy5yZW1vdmVDbGFzcyggdmFsdWUgKTtcblx0XHR9XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3MoXG5cdFx0XHRcdFx0dmFsdWUuY2FsbCggdGhpcywgaSwgZ2V0Q2xhc3MoIHRoaXMgKSwgc3RhdGVWYWwgKSxcblx0XHRcdFx0XHRzdGF0ZVZhbFxuXHRcdFx0XHQpO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGNsYXNzTmFtZSwgaSwgc2VsZiwgY2xhc3NOYW1lcztcblxuXHRcdFx0aWYgKCBpc1ZhbGlkVmFsdWUgKSB7XG5cblx0XHRcdFx0Ly8gVG9nZ2xlIGluZGl2aWR1YWwgY2xhc3MgbmFtZXNcblx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdHNlbGYgPSBqUXVlcnkoIHRoaXMgKTtcblx0XHRcdFx0Y2xhc3NOYW1lcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0XHRcdHdoaWxlICggKCBjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpKysgXSApICkge1xuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0XG5cdFx0XHRcdFx0aWYgKCBzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKSApIHtcblx0XHRcdFx0XHRcdHNlbGYucmVtb3ZlQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZWxmLmFkZENsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gVG9nZ2xlIHdob2xlIGNsYXNzIG5hbWVcblx0XHRcdH0gZWxzZSBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRcdGNsYXNzTmFtZSA9IGdldENsYXNzKCB0aGlzICk7XG5cdFx0XHRcdGlmICggY2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgY2xhc3NOYW1lIGlmIHNldFxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIsIGNsYXNzTmFtZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGVsZW1lbnQgaGFzIGEgY2xhc3MgbmFtZSBvciBpZiB3ZSdyZSBwYXNzZWQgYGZhbHNlYCxcblx0XHRcdFx0Ly8gdGhlbiByZW1vdmUgdGhlIHdob2xlIGNsYXNzbmFtZSAoaWYgdGhlcmUgd2FzIG9uZSwgdGhlIGFib3ZlIHNhdmVkIGl0KS5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlmIGFueXRoaW5nKSxcblx0XHRcdFx0Ly8gZmFsbGluZyBiYWNrIHRvIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm90aGluZyB3YXMgc3RvcmVkLlxuXHRcdFx0XHRpZiAoIHRoaXMuc2V0QXR0cmlidXRlICkge1xuXHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID9cblx0XHRcdFx0XHRcdFx0XCJcIiA6XG5cdFx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdldENsYXNzKCBlbGVtICkgKSArIFwiIFwiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBycmV0dXJuID0gL1xcci9nO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHZhbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBob29rcywgcmV0LCB2YWx1ZUlzRnVuY3Rpb24sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0XHRpZiAoIGhvb2tzICYmXG5cdFx0XHRcdFx0XCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSApICE9PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldCA9IGVsZW0udmFsdWU7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlc1xuXHRcdFx0XHRpZiAoIHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldC5yZXBsYWNlKCBycmV0dXJuLCBcIlwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXJcblx0XHRcdFx0cmV0dXJuIHJldCA9PSBudWxsID8gXCJcIiA6IHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdHZhciB2YWw7XG5cblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0dmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyBcIlwiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR2YWwgPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHR2YWwgKz0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIjtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0Ly8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmdcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgXCJ2YWx1ZVwiICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbDtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHR2YWxIb29rczoge1xuXHRcdG9wdGlvbjoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHR2YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ2YWx1ZVwiICk7XG5cdFx0XHRcdHJldHVybiB2YWwgIT0gbnVsbCA/XG5cdFx0XHRcdFx0dmFsIDpcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSBvbmx5XG5cdFx0XHRcdFx0Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKCMxNDY4NiwgIzE0ODU4KVxuXHRcdFx0XHRcdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2Vcblx0XHRcdFx0XHRzdHJpcEFuZENvbGxhcHNlKCBqUXVlcnkudGV4dCggZWxlbSApICk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzZWxlY3Q6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciB2YWx1ZSwgb3B0aW9uLCBpLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0aW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsXG5cdFx0XHRcdFx0b25lID0gZWxlbS50eXBlID09PSBcInNlbGVjdC1vbmVcIixcblx0XHRcdFx0XHR2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sXG5cdFx0XHRcdFx0bWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0aWYgKCBpbmRleCA8IDAgKSB7XG5cdFx0XHRcdFx0aSA9IG1heDtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGkgPSBvbmUgPyBpbmRleCA6IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zXG5cdFx0XHRcdGZvciAoIDsgaSA8IG1heDsgaSsrICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0Ly8gSUU4LTkgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAoIzI1NTEpXG5cdFx0XHRcdFx0aWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmXG5cblx0XHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0XHRcdFx0XHQhb3B0aW9uLmRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRcdCggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8XG5cdFx0XHRcdFx0XHRcdFx0IW5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgXCJvcHRncm91cFwiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvblxuXHRcdFx0XHRcdFx0dmFsdWUgPSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0c1xuXHRcdFx0XHRcdFx0aWYgKCBvbmUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXlcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIG9wdGlvblNldCwgb3B0aW9uLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0dmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKSxcblx0XHRcdFx0XHRpID0gb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi9cblxuXHRcdFx0XHRcdGlmICggb3B0aW9uLnNlbGVjdGVkID1cblx0XHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTFcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9wdGlvblNldCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXRcblx0XHRcdFx0aWYgKCAhb3B0aW9uU2V0ICkge1xuXHRcdFx0XHRcdGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyXG5qUXVlcnkuZWFjaCggWyBcInJhZGlvXCIsIFwiY2hlY2tib3hcIiBdLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7XG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7XG5cdFx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBudWxsID8gXCJvblwiIDogZWxlbS52YWx1ZTtcblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb25cblxuXG5zdXBwb3J0LmZvY3VzaW4gPSBcIm9uZm9jdXNpblwiIGluIHdpbmRvdztcblxuXG52YXIgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sXG5cdHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24oIGUgKSB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fTtcblxualF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7XG5cblx0XHR2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLCBsYXN0RWxlbWVudCxcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxuXHRcdFx0dHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgXCJ0eXBlXCIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCxcblx0XHRcdG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwibmFtZXNwYWNlXCIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCggXCIuXCIgKSA6IFtdO1xuXG5cdFx0Y3VyID0gbGFzdEVsZW1lbnQgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDtcblxuXHRcdC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93XG5cdFx0aWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZS5pbmRleE9mKCBcIi5cIiApID4gLTEgKSB7XG5cblx0XHRcdC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKClcblx0XHRcdG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCBcIi5cIiApO1xuXHRcdFx0dHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTtcblx0XHRcdG5hbWVzcGFjZXMuc29ydCgpO1xuXHRcdH1cblx0XHRvbnR5cGUgPSB0eXBlLmluZGV4T2YoIFwiOlwiICkgPCAwICYmIFwib25cIiArIHR5cGU7XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmdcblx0XHRldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdGV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gXCJvYmplY3RcIiAmJiBldmVudCApO1xuXG5cdFx0Ly8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKVxuXHRcdGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzO1xuXHRcdGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKTtcblx0XHRldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID9cblx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApIDpcblx0XHRcdG51bGw7XG5cblx0XHQvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWRcblx0XHRldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7XG5cdFx0aWYgKCAhZXZlbnQudGFyZ2V0ICkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZWxlbTtcblx0XHR9XG5cblx0XHQvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0XG5cdFx0ZGF0YSA9IGRhdGEgPT0gbnVsbCA/XG5cdFx0XHRbIGV2ZW50IF0gOlxuXHRcdFx0alF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7XG5cblx0XHQvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzXG5cdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAoIzk5NTEpXG5cdFx0Ly8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNClcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlO1xuXHRcdFx0aWYgKCAhcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSApIHtcblx0XHRcdFx0Y3VyID0gY3VyLnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKCA7IGN1cjsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0dG1wID0gY3VyO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPbmx5IGFkZCB3aW5kb3cgaWYgd2UgZ290IHRvIGRvY3VtZW50IChlLmcuLCBub3QgcGxhaW4gb2JqIG9yIGRldGFjaGVkIERPTSlcblx0XHRcdGlmICggdG1wID09PSAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCApICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmlyZSBoYW5kbGVycyBvbiB0aGUgZXZlbnQgcGF0aFxuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBjdXIgPSBldmVudFBhdGhbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRsYXN0RWxlbWVudCA9IGN1cjtcblx0XHRcdGV2ZW50LnR5cGUgPSBpID4gMSA/XG5cdFx0XHRcdGJ1YmJsZVR5cGUgOlxuXHRcdFx0XHRzcGVjaWFsLmJpbmRUeXBlIHx8IHR5cGU7XG5cblx0XHRcdC8vIGpRdWVyeSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSAoIGRhdGFQcml2LmdldCggY3VyLCBcImV2ZW50c1wiICkgfHwgT2JqZWN0LmNyZWF0ZSggbnVsbCApIClbIGV2ZW50LnR5cGUgXSAmJlxuXHRcdFx0XHRkYXRhUHJpdi5nZXQoIGN1ciwgXCJoYW5kbGVcIiApO1xuXHRcdFx0aWYgKCBoYW5kbGUgKSB7XG5cdFx0XHRcdGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE5hdGl2ZSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTtcblx0XHRcdGlmICggaGFuZGxlICYmIGhhbmRsZS5hcHBseSAmJiBhY2NlcHREYXRhKCBjdXIgKSApIHtcblx0XHRcdFx0ZXZlbnQucmVzdWx0ID0gaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZXZlbnQudHlwZSA9IHR5cGU7XG5cblx0XHQvLyBJZiBub2JvZHkgcHJldmVudGVkIHRoZSBkZWZhdWx0IGFjdGlvbiwgZG8gaXQgbm93XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHtcblxuXHRcdFx0aWYgKCAoICFzcGVjaWFsLl9kZWZhdWx0IHx8XG5cdFx0XHRcdHNwZWNpYWwuX2RlZmF1bHQuYXBwbHkoIGV2ZW50UGF0aC5wb3AoKSwgZGF0YSApID09PSBmYWxzZSApICYmXG5cdFx0XHRcdGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblxuXHRcdFx0XHQvLyBDYWxsIGEgbmF0aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGV2ZW50LlxuXHRcdFx0XHQvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xvYmFsIHZhcmlhYmxlcyBiZSAoIzYxNzApXG5cdFx0XHRcdGlmICggb250eXBlICYmIGlzRnVuY3Rpb24oIGVsZW1bIHR5cGUgXSApICYmICFpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZFxuXHRcdFx0XHRcdHRtcCA9IGVsZW1bIG9udHlwZSBdO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IG51bGw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJldmVudCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5IGJ1YmJsZWQgaXQgYWJvdmVcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdHlwZTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbVsgdHlwZSBdKCk7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gdG1wO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0Ly8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lXG5cdC8vIFVzZWQgb25seSBmb3IgYGZvY3VzKGluIHwgb3V0KWAgZXZlbnRzXG5cdHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQgKSB7XG5cdFx0dmFyIGUgPSBqUXVlcnkuZXh0ZW5kKFxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCgpLFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdGlzU2ltdWxhdGVkOiB0cnVlXG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7XG5cdH1cblxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApO1xuXHRcdH0gKTtcblx0fSxcblx0dHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBlbGVtID0gdGhpc1sgMCBdO1xuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgZWxlbSwgdHJ1ZSApO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbi8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00NFxuLy8gRmlyZWZveCBkb2Vzbid0IGhhdmUgZm9jdXMoaW4gfCBvdXQpIGV2ZW50c1xuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc3ODdcbi8vXG4vLyBTdXBwb3J0OiBDaHJvbWUgPD00OCAtIDQ5LCBTYWZhcmkgPD05LjAgLSA5LjFcbi8vIGZvY3VzKGluIHwgb3V0KSBldmVudHMgZmlyZSBhZnRlciBmb2N1cyAmIGJsdXIgZXZlbnRzLFxuLy8gd2hpY2ggaXMgc3BlYyB2aW9sYXRpb24gLSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1mb2N1c2V2ZW50LWV2ZW50LW9yZGVyXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0OTg1N1xuaWYgKCAhc3VwcG9ydC5mb2N1c2luICkge1xuXHRqUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXG5cdFx0Ly8gQXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudCB3aGlsZSBzb21lb25lIHdhbnRzIGZvY3VzaW4vZm9jdXNvdXRcblx0XHR2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC5zaW11bGF0ZSggZml4LCBldmVudC50YXJnZXQsIGpRdWVyeS5ldmVudC5maXgoIGV2ZW50ICkgKTtcblx0XHR9O1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGZpeCBdID0ge1xuXHRcdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIEhhbmRsZTogcmVndWxhciBub2RlcyAodmlhIGB0aGlzLm93bmVyRG9jdW1lbnRgKSwgd2luZG93XG5cdFx0XHRcdC8vICh2aWEgYHRoaXMuZG9jdW1lbnRgKSAmIGRvY3VtZW50ICh2aWEgYHRoaXNgKS5cblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLmRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICk7XG5cblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0ZG9jLmFkZEV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTtcblx0XHRcdH0sXG5cdFx0XHR0ZWFyZG93bjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5kb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApIC0gMTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZG9jLCBmaXggKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsIGF0dGFjaGVzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9ICk7XG59XG52YXIgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG5cbnZhciBub25jZSA9IHsgZ3VpZDogRGF0ZS5ub3coKSB9O1xuXG52YXIgcnF1ZXJ5ID0gKCAvXFw/LyApO1xuXG5cblxuLy8gQ3Jvc3MtYnJvd3NlciB4bWwgcGFyc2luZ1xualF1ZXJ5LnBhcnNlWE1MID0gZnVuY3Rpb24oIGRhdGEgKSB7XG5cdHZhciB4bWwsIHBhcnNlckVycm9yRWxlbTtcblx0aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIElFIHRocm93cyBvbiBwYXJzZUZyb21TdHJpbmcgd2l0aCBpbnZhbGlkIGlucHV0LlxuXHR0cnkge1xuXHRcdHhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgXCJ0ZXh0L3htbFwiICk7XG5cdH0gY2F0Y2ggKCBlICkge31cblxuXHRwYXJzZXJFcnJvckVsZW0gPSB4bWwgJiYgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcInBhcnNlcmVycm9yXCIgKVsgMCBdO1xuXHRpZiAoICF4bWwgfHwgcGFyc2VyRXJyb3JFbGVtICkge1xuXHRcdGpRdWVyeS5lcnJvciggXCJJbnZhbGlkIFhNTDogXCIgKyAoXG5cdFx0XHRwYXJzZXJFcnJvckVsZW0gP1xuXHRcdFx0XHRqUXVlcnkubWFwKCBwYXJzZXJFcnJvckVsZW0uY2hpbGROb2RlcywgZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0XHRcdHJldHVybiBlbC50ZXh0Q29udGVudDtcblx0XHRcdFx0fSApLmpvaW4oIFwiXFxuXCIgKSA6XG5cdFx0XHRcdGRhdGFcblx0XHQpICk7XG5cdH1cblx0cmV0dXJuIHhtbDtcbn07XG5cblxudmFyXG5cdHJicmFja2V0ID0gL1xcW1xcXSQvLFxuXHRyQ1JMRiA9IC9cXHI/XFxuL2csXG5cdHJzdWJtaXR0ZXJUeXBlcyA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxcblx0cnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO1xuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7XG5cdHZhciBuYW1lO1xuXG5cdGlmICggQXJyYXkuaXNBcnJheSggb2JqICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS5cblx0XHRqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHtcblx0XHRcdGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7XG5cblx0XHRcdFx0Ly8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLlxuXHRcdFx0XHRhZGQoIHByZWZpeCwgdiApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cyBudW1lcmljIGluZGV4LlxuXHRcdFx0XHRidWlsZFBhcmFtcyhcblx0XHRcdFx0XHRwcmVmaXggKyBcIltcIiArICggdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPSBudWxsID8gaSA6IFwiXCIgKSArIFwiXVwiLFxuXHRcdFx0XHRcdHYsXG5cdFx0XHRcdFx0dHJhZGl0aW9uYWwsXG5cdFx0XHRcdFx0YWRkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdH0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiB0b1R5cGUoIG9iaiApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIG9iamVjdCBpdGVtLlxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCArIFwiW1wiICsgbmFtZSArIFwiXVwiLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHNjYWxhciBpdGVtLlxuXHRcdGFkZCggcHJlZml4LCBvYmogKTtcblx0fVxufVxuXG4vLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZlxuLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nXG5qUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7XG5cdHZhciBwcmVmaXgsXG5cdFx0cyA9IFtdLFxuXHRcdGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlT3JGdW5jdGlvbiApIHtcblxuXHRcdFx0Ly8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCB1c2UgaXRzIHJldHVybiB2YWx1ZVxuXHRcdFx0dmFyIHZhbHVlID0gaXNGdW5jdGlvbiggdmFsdWVPckZ1bmN0aW9uICkgP1xuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb24oKSA6XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbjtcblxuXHRcdFx0c1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyBcIj1cIiArXG5cdFx0XHRcdGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSApO1xuXHRcdH07XG5cblx0aWYgKCBhID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLlxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApO1xuXHRcdH0gKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApO1xuXHR9LFxuXHRzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgXCJlbGVtZW50c1wiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50c1xuXHRcdFx0dmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsIFwiZWxlbWVudHNcIiApO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XG5cdFx0fSApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdFx0Ly8gVXNlIC5pcyggXCI6ZGlzYWJsZWRcIiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzXG5cdFx0XHRyZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggXCI6ZGlzYWJsZWRcIiApICYmXG5cdFx0XHRcdHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiZcblx0XHRcdFx0KCB0aGlzLmNoZWNrZWQgfHwgIXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApO1xuXHRcdH0gKS5tYXAoIGZ1bmN0aW9uKCBfaSwgZWxlbSApIHtcblx0XHRcdHZhciB2YWwgPSBqUXVlcnkoIHRoaXMgKS52YWwoKTtcblxuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdH0gKS5nZXQoKTtcblx0fVxufSApO1xuXG5cbnZhclxuXHRyMjAgPSAvJTIwL2csXG5cdHJoYXNoID0gLyMuKiQvLFxuXHRyYW50aUNhY2hlID0gLyhbPyZdKV89W14mXSovLFxuXHRyaGVhZGVycyA9IC9eKC4qPyk6WyBcXHRdKihbXlxcclxcbl0qKSQvbWcsXG5cblx0Ly8gIzc2NTMsICM4MTI1LCAjODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uXG5cdHJsb2NhbFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sXG5cdHJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLFxuXHRycHJvdG9jb2wgPSAvXlxcL1xcLy8sXG5cblx0LyogUHJlZmlsdGVyc1xuXHQgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKVxuXHQgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOlxuXHQgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0XG5cdCAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSlcblx0ICogMykga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHRwcmVmaWx0ZXJzID0ge30sXG5cblx0LyogVHJhbnNwb3J0cyBiaW5kaW5nc1xuXHQgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHR0cmFuc3BvcnRzID0ge30sXG5cblx0Ly8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uXG5cdGFsbFR5cGVzID0gXCIqL1wiLmNvbmNhdCggXCIqXCIgKSxcblxuXHQvLyBBbmNob3IgdGFnIGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b3JpZ2luQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxub3JpZ2luQW5jaG9yLmhyZWYgPSBsb2NhdGlvbi5ocmVmO1xuXG4vLyBCYXNlIFwiY29uc3RydWN0b3JcIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0XG5mdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHtcblxuXHQvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIFwiKlwiXG5cdHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkge1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjtcblx0XHRcdGRhdGFUeXBlRXhwcmVzc2lvbiA9IFwiKlwiO1xuXHRcdH1cblxuXHRcdHZhciBkYXRhVHlwZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0ZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggZnVuYyApICkge1xuXG5cdFx0XHQvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uXG5cdFx0XHR3aGlsZSAoICggZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJlcGVuZCBpZiByZXF1ZXN0ZWRcblx0XHRcdFx0aWYgKCBkYXRhVHlwZVsgMCBdID09PSBcIitcIiApIHtcblx0XHRcdFx0XHRkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNlKCAxICkgfHwgXCIqXCI7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS51bnNoaWZ0KCBmdW5jICk7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkucHVzaCggZnVuYyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRyYW5zcG9ydHNcbmZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKSB7XG5cblx0dmFyIGluc3BlY3RlZCA9IHt9LFxuXHRcdHNlZWtpbmdUcmFuc3BvcnQgPSAoIHN0cnVjdHVyZSA9PT0gdHJhbnNwb3J0cyApO1xuXG5cdGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBlICkge1xuXHRcdHZhciBzZWxlY3RlZDtcblx0XHRpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlO1xuXHRcdGpRdWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9uKCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7XG5cdFx0XHR2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApO1xuXHRcdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0gKSB7XG5cblx0XHRcdFx0b3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRpbnNwZWN0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7XG5cdFx0XHRcdHJldHVybiAhKCBzZWxlY3RlZCA9IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIHNlbGVjdGVkO1xuXHR9XG5cblx0cmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAwIF0gKSB8fCAhaW5zcGVjdGVkWyBcIipcIiBdICYmIGluc3BlY3QoIFwiKlwiICk7XG59XG5cbi8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9uc1xuLy8gdGhhdCB0YWtlcyBcImZsYXRcIiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZClcbi8vIEZpeGVzICM5ODg3XG5mdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHtcblx0dmFyIGtleSwgZGVlcCxcblx0XHRmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307XG5cblx0Zm9yICgga2V5IGluIHNyYyApIHtcblx0XHRpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdCggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07XG5cdFx0fVxuXHR9XG5cdGlmICggZGVlcCApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTtcblx0fVxuXG5cdHJldHVybiB0YXJnZXQ7XG59XG5cbi8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDpcbiAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpXG4gKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHtcblxuXHR2YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0YVR5cGUsXG5cdFx0Y29udGVudHMgPSBzLmNvbnRlbnRzLFxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzO1xuXG5cdC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzXG5cdHdoaWxlICggZGF0YVR5cGVzWyAwIF0gPT09IFwiKlwiICkge1xuXHRcdGRhdGFUeXBlcy5zaGlmdCgpO1xuXHRcdGlmICggY3QgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJDb250ZW50LVR5cGVcIiApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZVxuXHRpZiAoIGN0ICkge1xuXHRcdGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7XG5cdFx0XHRpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkge1xuXHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGVcblx0aWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7XG5cdFx0ZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdO1xuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlc1xuXHRcdGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkge1xuXHRcdFx0aWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgXCIgXCIgKyBkYXRhVHlwZXNbIDAgXSBdICkge1xuXHRcdFx0XHRmaW5hbERhdGFUeXBlID0gdHlwZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICFmaXJzdERhdGFUeXBlICkge1xuXHRcdFx0XHRmaXJzdERhdGFUeXBlID0gdHlwZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmVcblx0XHRmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlO1xuXHR9XG5cblx0Ly8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZVxuXHQvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZFxuXHQvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG5cdGlmICggZmluYWxEYXRhVHlwZSApIHtcblx0XHRpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkge1xuXHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdO1xuXHR9XG59XG5cbi8qIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9uc2VcbiAqIEFsc28gc2V0cyB0aGUgcmVzcG9uc2VYWFggZmllbGRzIG9uIHRoZSBqcVhIUiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKSB7XG5cdHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LFxuXHRcdGNvbnZlcnRlcnMgPSB7fSxcblxuXHRcdC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb25cblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpO1xuXG5cdC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5c1xuXHRpZiAoIGRhdGFUeXBlc1sgMSBdICkge1xuXHRcdGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkge1xuXHRcdFx0Y29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTtcblx0XHR9XG5cdH1cblxuXHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0Ly8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGVcblx0d2hpbGUgKCBjdXJyZW50ICkge1xuXG5cdFx0aWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7XG5cdFx0XHRqcVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZFxuXHRcdGlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHtcblx0XHRcdHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApO1xuXHRcdH1cblxuXHRcdHByZXYgPSBjdXJyZW50O1xuXHRcdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHRcdGlmICggY3VycmVudCApIHtcblxuXHRcdFx0Ly8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRhVHlwZSBpcyBub24tYXV0b1xuXHRcdFx0aWYgKCBjdXJyZW50ID09PSBcIipcIiApIHtcblxuXHRcdFx0XHRjdXJyZW50ID0gcHJldjtcblxuXHRcdFx0Ly8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudFxuXHRcdFx0fSBlbHNlIGlmICggcHJldiAhPT0gXCIqXCIgJiYgcHJldiAhPT0gY3VycmVudCApIHtcblxuXHRcdFx0XHQvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlclxuXHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgY3VycmVudCBdIHx8IGNvbnZlcnRlcnNbIFwiKiBcIiArIGN1cnJlbnQgXTtcblxuXHRcdFx0XHQvLyBJZiBub25lIGZvdW5kLCBzZWVrIGEgcGFpclxuXHRcdFx0XHRpZiAoICFjb252ICkge1xuXHRcdFx0XHRcdGZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudFxuXHRcdFx0XHRcdFx0dG1wID0gY29udjIuc3BsaXQoIFwiIFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRlZCBpbnB1dFxuXHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgdG1wWyAwIF0gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlcnNbIFwiKiBcIiArIHRtcFsgMCBdIF07XG5cdFx0XHRcdFx0XHRcdGlmICggY29udiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgPT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgY29udjIgXTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgaW5zZXJ0IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGVcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudCA9IHRtcFsgMCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpXG5cdFx0XHRcdGlmICggY29udiAhPT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW1cblx0XHRcdFx0XHRpZiAoIGNvbnYgJiYgcy50aHJvd3MgKSB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlOiBcInBhcnNlcmVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGNvbnYgPyBlIDogXCJObyBjb252ZXJzaW9uIGZyb20gXCIgKyBwcmV2ICsgXCIgdG8gXCIgKyBjdXJyZW50XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgc3RhdGU6IFwic3VjY2Vzc1wiLCBkYXRhOiByZXNwb25zZSB9O1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzXG5cdGFjdGl2ZTogMCxcblxuXHQvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0XG5cdGxhc3RNb2RpZmllZDoge30sXG5cdGV0YWc6IHt9LFxuXG5cdGFqYXhTZXR0aW5nczoge1xuXHRcdHVybDogbG9jYXRpb24uaHJlZixcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGlzTG9jYWw6IHJsb2NhbFByb3RvY29sLnRlc3QoIGxvY2F0aW9uLnByb3RvY29sICksXG5cdFx0Z2xvYmFsOiB0cnVlLFxuXHRcdHByb2Nlc3NEYXRhOiB0cnVlLFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLFxuXG5cdFx0Lypcblx0XHR0aW1lb3V0OiAwLFxuXHRcdGRhdGE6IG51bGwsXG5cdFx0ZGF0YVR5cGU6IG51bGwsXG5cdFx0dXNlcm5hbWU6IG51bGwsXG5cdFx0cGFzc3dvcmQ6IG51bGwsXG5cdFx0Y2FjaGU6IG51bGwsXG5cdFx0dGhyb3dzOiBmYWxzZSxcblx0XHR0cmFkaXRpb25hbDogZmFsc2UsXG5cdFx0aGVhZGVyczoge30sXG5cdFx0Ki9cblxuXHRcdGFjY2VwdHM6IHtcblx0XHRcdFwiKlwiOiBhbGxUeXBlcyxcblx0XHRcdHRleHQ6IFwidGV4dC9wbGFpblwiLFxuXHRcdFx0aHRtbDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdHhtbDogXCJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sXCIsXG5cdFx0XHRqc29uOiBcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdFwiXG5cdFx0fSxcblxuXHRcdGNvbnRlbnRzOiB7XG5cdFx0XHR4bWw6IC9cXGJ4bWxcXGIvLFxuXHRcdFx0aHRtbDogL1xcYmh0bWwvLFxuXHRcdFx0anNvbjogL1xcYmpzb25cXGIvXG5cdFx0fSxcblxuXHRcdHJlc3BvbnNlRmllbGRzOiB7XG5cdFx0XHR4bWw6IFwicmVzcG9uc2VYTUxcIixcblx0XHRcdHRleHQ6IFwicmVzcG9uc2VUZXh0XCIsXG5cdFx0XHRqc29uOiBcInJlc3BvbnNlSlNPTlwiXG5cdFx0fSxcblxuXHRcdC8vIERhdGEgY29udmVydGVyc1xuXHRcdC8vIEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRjaGFsbCBcIipcIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2Vcblx0XHRjb252ZXJ0ZXJzOiB7XG5cblx0XHRcdC8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dFxuXHRcdFx0XCIqIHRleHRcIjogU3RyaW5nLFxuXG5cdFx0XHQvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbilcblx0XHRcdFwidGV4dCBodG1sXCI6IHRydWUsXG5cblx0XHRcdC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb25cblx0XHRcdFwidGV4dCBqc29uXCI6IEpTT04ucGFyc2UsXG5cblx0XHRcdC8vIFBhcnNlIHRleHQgYXMgeG1sXG5cdFx0XHRcInRleHQgeG1sXCI6IGpRdWVyeS5wYXJzZVhNTFxuXHRcdH0sXG5cblx0XHQvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOlxuXHRcdC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWZcblx0XHQvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZVxuXHRcdC8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKVxuXHRcdGZsYXRPcHRpb25zOiB7XG5cdFx0XHR1cmw6IHRydWUsXG5cdFx0XHRjb250ZXh0OiB0cnVlXG5cdFx0fVxuXHR9LFxuXG5cdC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0XG5cdC8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy5cblx0Ly8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy5cblx0YWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHtcblx0XHRyZXR1cm4gc2V0dGluZ3MgP1xuXG5cdFx0XHQvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVjdFxuXHRcdFx0YWpheEV4dGVuZCggYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICksIHNldHRpbmdzICkgOlxuXG5cdFx0XHQvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzXG5cdFx0XHRhamF4RXh0ZW5kKCBqUXVlcnkuYWpheFNldHRpbmdzLCB0YXJnZXQgKTtcblx0fSxcblxuXHRhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSxcblx0YWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksXG5cblx0Ly8gTWFpbiBtZXRob2Rcblx0YWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHtcblxuXHRcdC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJlXG5cdFx0aWYgKCB0eXBlb2YgdXJsID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0b3B0aW9ucyA9IHVybDtcblx0XHRcdHVybCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdFxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0dmFyIHRyYW5zcG9ydCxcblxuXHRcdFx0Ly8gVVJMIHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbVxuXHRcdFx0Y2FjaGVVUkwsXG5cblx0XHRcdC8vIFJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyxcblx0XHRcdHJlc3BvbnNlSGVhZGVycyxcblxuXHRcdFx0Ly8gdGltZW91dCBoYW5kbGVcblx0XHRcdHRpbWVvdXRUaW1lcixcblxuXHRcdFx0Ly8gVXJsIGNsZWFudXAgdmFyXG5cdFx0XHR1cmxBbmNob3IsXG5cblx0XHRcdC8vIFJlcXVlc3Qgc3RhdGUgKGJlY29tZXMgZmFsc2UgdXBvbiBzZW5kIGFuZCB0cnVlIHVwb24gY29tcGxldGlvbilcblx0XHRcdGNvbXBsZXRlZCxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkXG5cdFx0XHRmaXJlR2xvYmFscyxcblxuXHRcdFx0Ly8gTG9vcCB2YXJpYWJsZVxuXHRcdFx0aSxcblxuXHRcdFx0Ly8gdW5jYWNoZWQgcGFydCBvZiB0aGUgdXJsXG5cdFx0XHR1bmNhY2hlZCxcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdFxuXHRcdFx0cyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksXG5cblx0XHRcdC8vIENhbGxiYWNrcyBjb250ZXh0XG5cdFx0XHRjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcyxcblxuXHRcdFx0Ly8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29sbGVjdGlvblxuXHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmXG5cdFx0XHRcdCggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/XG5cdFx0XHRcdGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOlxuXHRcdFx0XHRqUXVlcnkuZXZlbnQsXG5cblx0XHRcdC8vIERlZmVycmVkc1xuXHRcdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sXG5cblx0XHRcdC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpXG5cdFx0XHRyZXF1ZXN0SGVhZGVycyA9IHt9LFxuXHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LFxuXG5cdFx0XHQvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2Vcblx0XHRcdHN0ckFib3J0ID0gXCJjYW5jZWxlZFwiLFxuXG5cdFx0XHQvLyBGYWtlIHhoclxuXHRcdFx0anFYSFIgPSB7XG5cdFx0XHRcdHJlYWR5U3RhdGU6IDAsXG5cblx0XHRcdFx0Ly8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZFxuXHRcdFx0XHRnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2g7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSA9XG5cdFx0XHRcdFx0XHRcdFx0XHQoIHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSB8fCBbXSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5jb25jYXQoIG1hdGNoWyAyIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoID09IG51bGwgPyBudWxsIDogbWF0Y2guam9pbiggXCIsIFwiICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gUmF3IHN0cmluZ1xuXHRcdFx0XHRnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBjb21wbGV0ZWQgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxsO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhY2hlcyB0aGUgaGVhZGVyXG5cdFx0XHRcdHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0bmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdID1cblx0XHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwgbmFtZTtcblx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXJcblx0XHRcdFx0b3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdHMubWltZVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0XHRzdGF0dXNDb2RlOiBmdW5jdGlvbiggbWFwICkge1xuXHRcdFx0XHRcdHZhciBjb2RlO1xuXHRcdFx0XHRcdGlmICggbWFwICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2tzXG5cdFx0XHRcdFx0XHRcdGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBMYXp5LWFkZCB0aGUgbmV3IGNhbGxiYWNrcyBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lc1xuXHRcdFx0XHRcdFx0XHRmb3IgKCBjb2RlIGluIG1hcCApIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2RlIF0gXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYW5jZWwgdGhlIHJlcXVlc3Rcblx0XHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHZhciBmaW5hbFRleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFib3J0O1xuXHRcdFx0XHRcdGlmICggdHJhbnNwb3J0ICkge1xuXHRcdFx0XHRcdFx0dHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZG9uZSggMCwgZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHQvLyBBdHRhY2ggZGVmZXJyZWRzXG5cdFx0ZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKTtcblxuXHRcdC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKHByZWZpbHRlcnMgbWlnaHQgZXhwZWN0IGl0KVxuXHRcdC8vIEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAoIzEwMDkzOiBjb25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpXG5cdFx0Ly8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlXG5cdFx0cy51cmwgPSAoICggdXJsIHx8IHMudXJsIHx8IGxvY2F0aW9uLmhyZWYgKSArIFwiXCIgKVxuXHRcdFx0LnJlcGxhY2UoIHJwcm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKTtcblxuXHRcdC8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0ICMxMjAwNFxuXHRcdHMudHlwZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5cGU7XG5cblx0XHQvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0XG5cdFx0cy5kYXRhVHlwZXMgPSAoIHMuZGF0YVR5cGUgfHwgXCIqXCIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cblx0XHQvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gdGhlIG9yaWdpbiBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IG9yaWdpbi5cblx0XHRpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHtcblx0XHRcdHVybEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHRcdC8vIElFIHRocm93cyBleGNlcHRpb24gb24gYWNjZXNzaW5nIHRoZSBocmVmIHByb3BlcnR5IGlmIHVybCBpcyBtYWxmb3JtZWQsXG5cdFx0XHQvLyBlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbTo4MHgvXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHMudXJsO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExIG9ubHlcblx0XHRcdFx0Ly8gQW5jaG9yJ3MgaG9zdCBwcm9wZXJ0eSBpc24ndCBjb3JyZWN0bHkgc2V0IHdoZW4gcy51cmwgaXMgcmVsYXRpdmVcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNob3IuaHJlZjtcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IG9yaWdpbkFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PVxuXHRcdFx0XHRcdHVybEFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIHVybEFuY2hvci5ob3N0O1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgVVJMLCBhc3N1bWUgaXQgaXMgY3Jvc3NEb21haW4sXG5cdFx0XHRcdC8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGludmFsaWRcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nXG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwcmVmaWx0ZXJzXG5cdFx0aW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZVxuXHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdH1cblxuXHRcdC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvXG5cdFx0Ly8gRG9uJ3QgZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBBTUQtdXNhZ2Ugc2NlbmFyaW8gKCMxNTExOClcblx0XHRmaXJlR2xvYmFscyA9IGpRdWVyeS5ldmVudCAmJiBzLmdsb2JhbDtcblxuXHRcdC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHNcblx0XHRpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdGFydFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gVXBwZXJjYXNlIHRoZSB0eXBlXG5cdFx0cy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHQvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudFxuXHRcdHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApO1xuXG5cdFx0Ly8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlXG5cdFx0Ly8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uXG5cdFx0Ly8gUmVtb3ZlIGhhc2ggdG8gc2ltcGxpZnkgdXJsIG1hbmlwdWxhdGlvblxuXHRcdGNhY2hlVVJMID0gcy51cmwucmVwbGFjZSggcmhhc2gsIFwiXCIgKTtcblxuXHRcdC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50XG5cdFx0aWYgKCAhcy5oYXNDb250ZW50ICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgaGFzaCBzbyB3ZSBjYW4gcHV0IGl0IGJhY2tcblx0XHRcdHVuY2FjaGVkID0gcy51cmwuc2xpY2UoIGNhY2hlVVJMLmxlbmd0aCApO1xuXG5cdFx0XHQvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCwgYXBwZW5kIGRhdGEgdG8gdXJsXG5cdFx0XHRpZiAoIHMuZGF0YSAmJiAoIHMucHJvY2Vzc0RhdGEgfHwgdHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiApICkge1xuXHRcdFx0XHRjYWNoZVVSTCArPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgcy5kYXRhO1xuXG5cdFx0XHRcdC8vICM5NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnlcblx0XHRcdFx0ZGVsZXRlIHMuZGF0YTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIG9yIHVwZGF0ZSBhbnRpLWNhY2hlIHBhcmFtIGlmIG5lZWRlZFxuXHRcdFx0aWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgPSBjYWNoZVVSTC5yZXBsYWNlKCByYW50aUNhY2hlLCBcIiQxXCIgKTtcblx0XHRcdFx0dW5jYWNoZWQgPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgXCJfPVwiICsgKCBub25jZS5ndWlkKysgKSArXG5cdFx0XHRcdFx0dW5jYWNoZWQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFB1dCBoYXNoIGFuZCBhbnRpLWNhY2hlIG9uIHRoZSBVUkwgdGhhdCB3aWxsIGJlIHJlcXVlc3RlZCAoZ2gtMTczMilcblx0XHRcdHMudXJsID0gY2FjaGVVUkwgKyB1bmNhY2hlZDtcblxuXHRcdC8vIENoYW5nZSAnJTIwJyB0byAnKycgaWYgdGhpcyBpcyBlbmNvZGVkIGZvcm0gYm9keSBjb250ZW50IChnaC0yNjU4KVxuXHRcdH0gZWxzZSBpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmXG5cdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApLmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCApIHtcblx0XHRcdHMuZGF0YSA9IHMuZGF0YS5yZXBsYWNlKCByMjAsIFwiK1wiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdGlmICggalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Nb2RpZmllZC1TaW5jZVwiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU5vbmUtTWF0Y2hcIiwgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIGNvcnJlY3QgaGVhZGVyLCBpZiBkYXRhIGlzIGJlaW5nIHNlbnRcblx0XHRpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250ZW50VHlwZSAhPT0gZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIsIHMuY29udGVudFR5cGUgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFUeXBlXG5cdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlcihcblx0XHRcdFwiQWNjZXB0XCIsXG5cdFx0XHRzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdID9cblx0XHRcdFx0cy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gK1xuXHRcdFx0XHRcdCggcy5kYXRhVHlwZXNbIDAgXSAhPT0gXCIqXCIgPyBcIiwgXCIgKyBhbGxUeXBlcyArIFwiOyBxPTAuMDFcIiA6IFwiXCIgKSA6XG5cdFx0XHRcdHMuYWNjZXB0c1sgXCIqXCIgXVxuXHRcdCk7XG5cblx0XHQvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb25cblx0XHRmb3IgKCBpIGluIHMuaGVhZGVycyApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGksIHMuaGVhZGVyc1sgaSBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsb3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJseSBhYm9ydFxuXHRcdGlmICggcy5iZWZvcmVTZW5kICYmXG5cdFx0XHQoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IGNvbXBsZXRlZCApICkge1xuXG5cdFx0XHQvLyBBYm9ydCBpZiBub3QgZG9uZSBhbHJlYWR5IGFuZCByZXR1cm5cblx0XHRcdHJldHVybiBqcVhIUi5hYm9ydCgpO1xuXHRcdH1cblxuXHRcdC8vIEFib3J0aW5nIGlzIG5vIGxvbmdlciBhIGNhbmNlbGxhdGlvblxuXHRcdHN0ckFib3J0ID0gXCJhYm9ydFwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzXG5cdFx0Y29tcGxldGVEZWZlcnJlZC5hZGQoIHMuY29tcGxldGUgKTtcblx0XHRqcVhIUi5kb25lKCBzLnN1Y2Nlc3MgKTtcblx0XHRqcVhIUi5mYWlsKCBzLmVycm9yICk7XG5cblx0XHQvLyBHZXQgdHJhbnNwb3J0XG5cdFx0dHJhbnNwb3J0ID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiBubyB0cmFuc3BvcnQsIHdlIGF1dG8tYWJvcnRcblx0XHRpZiAoICF0cmFuc3BvcnQgKSB7XG5cdFx0XHRkb25lKCAtMSwgXCJObyBUcmFuc3BvcnRcIiApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gMTtcblxuXHRcdFx0Ly8gU2VuZCBnbG9iYWwgZXZlbnRcblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhTZW5kXCIsIFsganFYSFIsIHMgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhamF4U2VuZCwgc3RvcCB0aGVyZVxuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybiBqcVhIUjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGltZW91dFxuXHRcdFx0aWYgKCBzLmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7XG5cdFx0XHRcdHRpbWVvdXRUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRqcVhIUi5hYm9ydCggXCJ0aW1lb3V0XCIgKTtcblx0XHRcdFx0fSwgcy50aW1lb3V0ICk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbXBsZXRlZCA9IGZhbHNlO1xuXHRcdFx0XHR0cmFuc3BvcnQuc2VuZCggcmVxdWVzdEhlYWRlcnMsIGRvbmUgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIFJldGhyb3cgcG9zdC1jb21wbGV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFByb3BhZ2F0ZSBvdGhlcnMgYXMgcmVzdWx0c1xuXHRcdFx0XHRkb25lKCAtMSwgZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZVxuXHRcdGZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVzcG9uc2VzLCBoZWFkZXJzICkge1xuXHRcdFx0dmFyIGlzU3VjY2Vzcywgc3VjY2VzcywgZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCxcblx0XHRcdFx0c3RhdHVzVGV4dCA9IG5hdGl2ZVN0YXR1c1RleHQ7XG5cblx0XHRcdC8vIElnbm9yZSByZXBlYXQgaW52b2NhdGlvbnNcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbXBsZXRlZCA9IHRydWU7XG5cblx0XHRcdC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhpc3RzXG5cdFx0XHRpZiAoIHRpbWVvdXRUaW1lciApIHtcblx0XHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dFRpbWVyICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIERlcmVmZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uXG5cdFx0XHQvLyAobm8gbWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKVxuXHRcdFx0dHJhbnNwb3J0ID0gdW5kZWZpbmVkO1xuXG5cdFx0XHQvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcgPSBoZWFkZXJzIHx8IFwiXCI7XG5cblx0XHRcdC8vIFNldCByZWFkeVN0YXRlXG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwO1xuXG5cdFx0XHQvLyBEZXRlcm1pbmUgaWYgc3VjY2Vzc2Z1bFxuXHRcdFx0aXNTdWNjZXNzID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQ7XG5cblx0XHRcdC8vIEdldCByZXNwb25zZSBkYXRhXG5cdFx0XHRpZiAoIHJlc3BvbnNlcyApIHtcblx0XHRcdFx0cmVzcG9uc2UgPSBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFVzZSBhIG5vb3AgY29udmVydGVyIGZvciBtaXNzaW5nIHNjcmlwdCBidXQgbm90IGlmIGpzb25wXG5cdFx0XHRpZiAoICFpc1N1Y2Nlc3MgJiZcblx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIFwic2NyaXB0XCIsIHMuZGF0YVR5cGVzICkgPiAtMSAmJlxuXHRcdFx0XHRqUXVlcnkuaW5BcnJheSggXCJqc29uXCIsIHMuZGF0YVR5cGVzICkgPCAwICkge1xuXHRcdFx0XHRzLmNvbnZlcnRlcnNbIFwidGV4dCBzY3JpcHRcIiBdID0gZnVuY3Rpb24oKSB7fTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KVxuXHRcdFx0cmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTtcblxuXHRcdFx0Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmdcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXG5cdFx0XHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0XHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiTGFzdC1Nb2RpZmllZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJldGFnXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpZiBubyBjb250ZW50XG5cdFx0XHRcdGlmICggc3RhdHVzID09PSAyMDQgfHwgcy50eXBlID09PSBcIkhFQURcIiApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub2NvbnRlbnRcIjtcblxuXHRcdFx0XHQvLyBpZiBub3QgbW9kaWZpZWRcblx0XHRcdFx0fSBlbHNlIGlmICggc3RhdHVzID09PSAzMDQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm90bW9kaWZpZWRcIjtcblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7XG5cdFx0XHRcdFx0c3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0ZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRpc1N1Y2Nlc3MgPSAhZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5kIG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0c1xuXHRcdFx0XHRlcnJvciA9IHN0YXR1c1RleHQ7XG5cdFx0XHRcdGlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcImVycm9yXCI7XG5cdFx0XHRcdFx0aWYgKCBzdGF0dXMgPCAwICkge1xuXHRcdFx0XHRcdFx0c3RhdHVzID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3Rcblx0XHRcdGpxWEhSLnN0YXR1cyA9IHN0YXR1cztcblx0XHRcdGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgXCJcIjtcblxuXHRcdFx0Ly8gU3VjY2Vzcy9FcnJvclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7XG5cdFx0XHRzdGF0dXNDb2RlID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gXCJhamF4U3VjY2Vzc1wiIDogXCJhamF4RXJyb3JcIixcblx0XHRcdFx0XHRbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb21wbGV0ZVxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheENvbXBsZXRlXCIsIFsganFYSFIsIHMgXSApO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlclxuXHRcdFx0XHRpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdG9wXCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBqcVhIUjtcblx0fSxcblxuXHRnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgXCJqc29uXCIgKTtcblx0fSxcblxuXHRnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssIFwic2NyaXB0XCIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImdldFwiLCBcInBvc3RcIiBdLCBmdW5jdGlvbiggX2ksIG1ldGhvZCApIHtcblx0alF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkge1xuXG5cdFx0Ly8gU2hpZnQgYXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWRcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGRhdGEgKSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrO1xuXHRcdFx0Y2FsbGJhY2sgPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBUaGUgdXJsIGNhbiBiZSBhbiBvcHRpb25zIG9iamVjdCAod2hpY2ggdGhlbiBtdXN0IGhhdmUgLnVybClcblx0XHRyZXR1cm4galF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdHVybDogdXJsLFxuXHRcdFx0dHlwZTogbWV0aG9kLFxuXHRcdFx0ZGF0YVR5cGU6IHR5cGUsXG5cdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0c3VjY2VzczogY2FsbGJhY2tcblx0XHR9LCBqUXVlcnkuaXNQbGFpbk9iamVjdCggdXJsICkgJiYgdXJsICkgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHR2YXIgaTtcblx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0aWYgKCBpLnRvTG93ZXJDYXNlKCkgPT09IFwiY29udGVudC10eXBlXCIgKSB7XG5cdFx0XHRzLmNvbnRlbnRUeXBlID0gcy5oZWFkZXJzWyBpIF0gfHwgXCJcIjtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsLCBvcHRpb25zLCBkb2MgKSB7XG5cdHJldHVybiBqUXVlcnkuYWpheCgge1xuXHRcdHVybDogdXJsLFxuXG5cdFx0Ly8gTWFrZSB0aGlzIGV4cGxpY2l0LCBzaW5jZSB1c2VyIGNhbiBvdmVycmlkZSB0aGlzIHRocm91Z2ggYWpheFNldHVwICgjMTEyNjQpXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRkYXRhVHlwZTogXCJzY3JpcHRcIixcblx0XHRjYWNoZTogdHJ1ZSxcblx0XHRhc3luYzogZmFsc2UsXG5cdFx0Z2xvYmFsOiBmYWxzZSxcblxuXHRcdC8vIE9ubHkgZXZhbHVhdGUgdGhlIHJlc3BvbnNlIGlmIGl0IGlzIHN1Y2Nlc3NmdWwgKGdoLTQxMjYpXG5cdFx0Ly8gZGF0YUZpbHRlciBpcyBub3QgaW52b2tlZCBmb3IgZmFpbHVyZSByZXNwb25zZXMsIHNvIHVzaW5nIGl0IGluc3RlYWRcblx0XHQvLyBvZiB0aGUgZGVmYXVsdCBjb252ZXJ0ZXIgaXMga2x1ZGd5IGJ1dCBpdCB3b3Jrcy5cblx0XHRjb252ZXJ0ZXJzOiB7XG5cdFx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCkge31cblx0XHR9LFxuXHRcdGRhdGFGaWx0ZXI6IGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCByZXNwb25zZSwgb3B0aW9ucywgZG9jICk7XG5cdFx0fVxuXHR9ICk7XG59O1xuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0d3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIHdyYXA7XG5cblx0XHRpZiAoIHRoaXNbIDAgXSApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0XHRodG1sID0gaHRtbC5jYWxsKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmRcblx0XHRcdHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSApO1xuXG5cdFx0XHRpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR3cmFwLmluc2VydEJlZm9yZSggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHdyYXAubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGVsZW0gPSB0aGlzO1xuXG5cdFx0XHRcdHdoaWxlICggZWxlbS5maXJzdEVsZW1lbnRDaGlsZCApIHtcblx0XHRcdFx0XHRlbGVtID0gZWxlbS5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbGVtO1xuXHRcdFx0fSApLmFwcGVuZCggdGhpcyApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcElubmVyKCBodG1sLmNhbGwoIHRoaXMsIGkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSxcblx0XHRcdFx0Y29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7XG5cblx0XHRcdGlmICggY29udGVudHMubGVuZ3RoICkge1xuXHRcdFx0XHRjb250ZW50cy53cmFwQWxsKCBodG1sICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuYXBwZW5kKCBodG1sICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHdyYXA6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciBodG1sSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIGh0bWwgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaHRtbElzRnVuY3Rpb24gPyBodG1sLmNhbGwoIHRoaXMsIGkgKSA6IGh0bWwgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0dW53cmFwOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dGhpcy5wYXJlbnQoIHNlbGVjdG9yICkubm90KCBcImJvZHlcIiApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApO1xuXHRcdH0gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhalF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlKCBlbGVtICk7XG59O1xualF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhISggZWxlbS5vZmZzZXRXaWR0aCB8fCBlbGVtLm9mZnNldEhlaWdodCB8fCBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICk7XG59O1xuXG5cblxuXG5qUXVlcnkuYWpheFNldHRpbmdzLnhociA9IGZ1bmN0aW9uKCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG5cdH0gY2F0Y2ggKCBlICkge31cbn07XG5cbnZhciB4aHJTdWNjZXNzU3RhdHVzID0ge1xuXG5cdFx0Ly8gRmlsZSBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyBjb2RlIDAsIGFzc3VtZSAyMDBcblx0XHQwOiAyMDAsXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdC8vICMxNDUwOiBzb21ldGltZXMgSUUgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIwNFxuXHRcdDEyMjM6IDIwNFxuXHR9LFxuXHR4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpO1xuXG5zdXBwb3J0LmNvcnMgPSAhIXhoclN1cHBvcnRlZCAmJiAoIFwid2l0aENyZWRlbnRpYWxzXCIgaW4geGhyU3VwcG9ydGVkICk7XG5zdXBwb3J0LmFqYXggPSB4aHJTdXBwb3J0ZWQgPSAhIXhoclN1cHBvcnRlZDtcblxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHR2YXIgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2s7XG5cblx0Ly8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdFxuXHRpZiAoIHN1cHBvcnQuY29ycyB8fCB4aHJTdXBwb3J0ZWQgJiYgIW9wdGlvbnMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0dmFyIGksXG5cdFx0XHRcdFx0eGhyID0gb3B0aW9ucy54aHIoKTtcblxuXHRcdFx0XHR4aHIub3Blbihcblx0XHRcdFx0XHRvcHRpb25zLnR5cGUsXG5cdFx0XHRcdFx0b3B0aW9ucy51cmwsXG5cdFx0XHRcdFx0b3B0aW9ucy5hc3luYyxcblx0XHRcdFx0XHRvcHRpb25zLnVzZXJuYW1lLFxuXHRcdFx0XHRcdG9wdGlvbnMucGFzc3dvcmRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHQvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0Zm9yICggaSBpbiBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRcdHhoclsgaSBdID0gb3B0aW9ucy54aHJGaWVsZHNbIGkgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHtcblx0XHRcdFx0XHR4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlwZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXJcblx0XHRcdFx0Ly8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZVxuXHRcdFx0XHQvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLlxuXHRcdFx0XHQvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cClcblx0XHRcdFx0Ly8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuXG5cdFx0XHRcdGlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gKSB7XG5cdFx0XHRcdFx0aGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSA9IFwiWE1MSHR0cFJlcXVlc3RcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNldCBoZWFkZXJzXG5cdFx0XHRcdGZvciAoIGkgaW4gaGVhZGVycyApIHtcblx0XHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrID0gZXJyb3JDYWxsYmFjayA9IHhoci5vbmxvYWQgPVxuXHRcdFx0XHRcdFx0XHRcdHhoci5vbmVycm9yID0geGhyLm9uYWJvcnQgPSB4aHIub250aW1lb3V0ID1cblx0XHRcdFx0XHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdHlwZSA9PT0gXCJhYm9ydFwiICkge1xuXHRcdFx0XHRcdFx0XHRcdHhoci5hYm9ydCgpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSBcImVycm9yXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIE9uIGEgbWFudWFsIG5hdGl2ZSBhYm9ydCwgSUU5IHRocm93c1xuXHRcdFx0XHRcdFx0XHRcdC8vIGVycm9ycyBvbiBhbnkgcHJvcGVydHkgYWNjZXNzIHRoYXQgaXMgbm90IHJlYWR5U3RhdGVcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHR5cGVvZiB4aHIuc3RhdHVzICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIDAsIFwiZXJyb3JcIiApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyAwOyBzZWUgIzg2MDUsICMxNDIwN1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0gfHwgeGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0LFxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSUU5IGhhcyBubyBYSFIyIGJ1dCB0aHJvd3Mgb24gYmluYXJ5ICh0cmFjLTExNDI2KVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIFhIUjIgbm9uLXRleHQsIGxldCB0aGUgY2FsbGVyIGhhbmRsZSBpdCAoZ2gtMjQ5OClcblx0XHRcdFx0XHRcdFx0XHRcdCggeGhyLnJlc3BvbnNlVHlwZSB8fCBcInRleHRcIiApICE9PSBcInRleHRcIiAgfHxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ICE9PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBiaW5hcnk6IHhoci5yZXNwb25zZSB9IDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyB0ZXh0OiB4aHIucmVzcG9uc2VUZXh0IH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBMaXN0ZW4gdG8gZXZlbnRzXG5cdFx0XHRcdHhoci5vbmxvYWQgPSBjYWxsYmFjaygpO1xuXHRcdFx0XHRlcnJvckNhbGxiYWNrID0geGhyLm9uZXJyb3IgPSB4aHIub250aW1lb3V0ID0gY2FsbGJhY2soIFwiZXJyb3JcIiApO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdFx0XHQvLyBVc2Ugb25yZWFkeXN0YXRlY2hhbmdlIHRvIHJlcGxhY2Ugb25hYm9ydFxuXHRcdFx0XHQvLyB0byBoYW5kbGUgdW5jYXVnaHQgYWJvcnRzXG5cdFx0XHRcdGlmICggeGhyLm9uYWJvcnQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR4aHIub25hYm9ydCA9IGVycm9yQ2FsbGJhY2s7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBDaGVjayByZWFkeVN0YXRlIGJlZm9yZSB0aW1lb3V0IGFzIGl0IGNoYW5nZXNcblx0XHRcdFx0XHRcdGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQWxsb3cgb25lcnJvciB0byBiZSBjYWxsZWQgZmlyc3QsXG5cdFx0XHRcdFx0XHRcdC8vIGJ1dCB0aGF0IHdpbGwgbm90IGhhbmRsZSBhIG5hdGl2ZSBhYm9ydFxuXHRcdFx0XHRcdFx0XHQvLyBBbHNvLCBzYXZlIGVycm9yQ2FsbGJhY2sgdG8gYSB2YXJpYWJsZVxuXHRcdFx0XHRcdFx0XHQvLyBhcyB4aHIub25lcnJvciBjYW5ub3QgYmUgYWNjZXNzZWRcblx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBjYWxsYmFjayggXCJhYm9ydFwiICk7XG5cblx0XHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRcdC8vIERvIHNlbmQgdGhlIHJlcXVlc3QgKHRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbilcblx0XHRcdFx0XHR4aHIuc2VuZCggb3B0aW9ucy5oYXNDb250ZW50ICYmIG9wdGlvbnMuZGF0YSB8fCBudWxsICk7XG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0Ly8gIzE0NjgzOiBPbmx5IHJldGhyb3cgaWYgdGhpcyBoYXNuJ3QgYmVlbiBub3RpZmllZCBhcyBhbiBlcnJvciB5ZXRcblx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBQcmV2ZW50IGF1dG8tZXhlY3V0aW9uIG9mIHNjcmlwdHMgd2hlbiBubyBleHBsaWNpdCBkYXRhVHlwZSB3YXMgcHJvdmlkZWQgKFNlZSBnaC0yNDMyKVxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy5jb250ZW50cy5zY3JpcHQgPSBmYWxzZTtcblx0fVxufSApO1xuXG4vLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZVxualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRhY2NlcHRzOiB7XG5cdFx0c2NyaXB0OiBcInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgXCIgK1xuXHRcdFx0XCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIlxuXHR9LFxuXHRjb250ZW50czoge1xuXHRcdHNjcmlwdDogL1xcYig/OmphdmF8ZWNtYSlzY3JpcHRcXGIvXG5cdH0sXG5cdGNvbnZlcnRlcnM6IHtcblx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTtcblx0XHRcdHJldHVybiB0ZXh0O1xuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGNyb3NzRG9tYWluXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdHMuY2FjaGUgPSBmYWxzZTtcblx0fVxuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy50eXBlID0gXCJHRVRcIjtcblx0fVxufSApO1xuXG4vLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnRcbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblxuXHQvLyBUaGlzIHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWluIG9yIGZvcmNlZC1ieS1hdHRycyByZXF1ZXN0c1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gfHwgcy5zY3JpcHRBdHRycyApIHtcblx0XHR2YXIgc2NyaXB0LCBjYWxsYmFjaztcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIF8sIGNvbXBsZXRlICkge1xuXHRcdFx0XHRzY3JpcHQgPSBqUXVlcnkoIFwiPHNjcmlwdD5cIiApXG5cdFx0XHRcdFx0LmF0dHIoIHMuc2NyaXB0QXR0cnMgfHwge30gKVxuXHRcdFx0XHRcdC5wcm9wKCB7IGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNldCwgc3JjOiBzLnVybCB9IClcblx0XHRcdFx0XHQub24oIFwibG9hZCBlcnJvclwiLCBjYWxsYmFjayA9IGZ1bmN0aW9uKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRzY3JpcHQucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRjYWxsYmFjayA9IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAoIGV2dCApIHtcblx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIGV2dC50eXBlID09PSBcImVycm9yXCIgPyA0MDQgOiAyMDAsIGV2dC50eXBlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2VyeVxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHRbIDAgXSApO1xuXHRcdFx0fSxcblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgb2xkQ2FsbGJhY2tzID0gW10sXG5cdHJqc29ucCA9IC8oPSlcXD8oPz0mfCQpfFxcP1xcPy87XG5cbi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3NcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0anNvbnA6IFwiY2FsbGJhY2tcIixcblx0anNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyBcIl9cIiArICggbm9uY2UuZ3VpZCsrICkgKTtcblx0XHR0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTtcblx0XHRyZXR1cm4gY2FsbGJhY2s7XG5cdH1cbn0gKTtcblxuLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJqc29uIGpzb25wXCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHtcblxuXHR2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsXG5cdFx0anNvblByb3AgPSBzLmpzb25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVybCApID9cblx0XHRcdFwidXJsXCIgOlxuXHRcdFx0dHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApXG5cdFx0XHRcdFx0LmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCAmJlxuXHRcdFx0XHRyanNvbnAudGVzdCggcy5kYXRhICkgJiYgXCJkYXRhXCJcblx0XHQpO1xuXG5cdC8vIEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyBcImpzb25wXCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXRcblx0aWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sgMCBdID09PSBcImpzb25wXCIgKSB7XG5cblx0XHQvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0XG5cdFx0Y2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0gaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgP1xuXHRcdFx0cy5qc29ucENhbGxiYWNrKCkgOlxuXHRcdFx0cy5qc29ucENhbGxiYWNrO1xuXG5cdFx0Ly8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YVxuXHRcdGlmICgganNvblByb3AgKSB7XG5cdFx0XHRzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsIFwiJDFcIiArIGNhbGxiYWNrTmFtZSApO1xuXHRcdH0gZWxzZSBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkge1xuXHRcdFx0cy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuanNvbnAgKyBcIj1cIiArIGNhbGxiYWNrTmFtZTtcblx0XHR9XG5cblx0XHQvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uXG5cdFx0cy5jb252ZXJ0ZXJzWyBcInNjcmlwdCBqc29uXCIgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7XG5cdFx0XHRcdGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgXCIgd2FzIG5vdCBjYWxsZWRcIiApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07XG5cdFx0fTtcblxuXHRcdC8vIEZvcmNlIGpzb24gZGF0YVR5cGVcblx0XHRzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrXG5cdFx0b3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdO1xuXHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzO1xuXHRcdH07XG5cblx0XHQvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycylcblx0XHRqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXRcblx0XHRcdGlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0alF1ZXJ5KCB3aW5kb3cgKS5yZW1vdmVQcm9wKCBjYWxsYmFja05hbWUgKTtcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWVcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2F2ZSBiYWNrIGFzIGZyZWVcblx0XHRcdGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7XG5cblx0XHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kXG5cdFx0XHRcdHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjaztcblxuXHRcdFx0XHQvLyBTYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUgdXNlXG5cdFx0XHRcdG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlXG5cdFx0XHRpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7XG5cdFx0XHRcdG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7XG5cdFx0fSApO1xuXG5cdFx0Ly8gRGVsZWdhdGUgdG8gc2NyaXB0XG5cdFx0cmV0dXJuIFwic2NyaXB0XCI7XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gU3VwcG9ydDogU2FmYXJpIDggb25seVxuLy8gSW4gU2FmYXJpIDggZG9jdW1lbnRzIGNyZWF0ZWQgdmlhIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudFxuLy8gY29sbGFwc2Ugc2libGluZyBmb3JtczogdGhlIHNlY29uZCBvbmUgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBmaXJzdCBvbmUuXG4vLyBCZWNhdXNlIG9mIHRoYXQsIHRoaXMgc2VjdXJpdHkgbWVhc3VyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gU2FmYXJpIDguXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzM3XG5zdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCA9ICggZnVuY3Rpb24oKSB7XG5cdHZhciBib2R5ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICkuYm9keTtcblx0Ym9keS5pbm5lckhUTUwgPSBcIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+XCI7XG5cdHJldHVybiBib2R5LmNoaWxkTm9kZXMubGVuZ3RoID09PSAyO1xufSApKCk7XG5cblxuLy8gQXJndW1lbnQgXCJkYXRhXCIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sXG4vLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsXG4vLyBkZWZhdWx0cyB0byBkb2N1bWVudFxuLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZ1xualF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHtcblx0aWYgKCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0a2VlcFNjcmlwdHMgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQgPSBmYWxzZTtcblx0fVxuXG5cdHZhciBiYXNlLCBwYXJzZWQsIHNjcmlwdHM7XG5cblx0aWYgKCAhY29udGV4dCApIHtcblxuXHRcdC8vIFN0b3Agc2NyaXB0cyBvciBpbmxpbmUgZXZlbnQgaGFuZGxlcnMgZnJvbSBiZWluZyBleGVjdXRlZCBpbW1lZGlhdGVseVxuXHRcdC8vIGJ5IHVzaW5nIGRvY3VtZW50LmltcGxlbWVudGF0aW9uXG5cdFx0aWYgKCBzdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCApIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKTtcblxuXHRcdFx0Ly8gU2V0IHRoZSBiYXNlIGhyZWYgZm9yIHRoZSBjcmVhdGVkIGRvY3VtZW50XG5cdFx0XHQvLyBzbyBhbnkgcGFyc2VkIGVsZW1lbnRzIHdpdGggVVJMc1xuXHRcdFx0Ly8gYXJlIGJhc2VkIG9uIHRoZSBkb2N1bWVudCdzIFVSTCAoZ2gtMjk2NSlcblx0XHRcdGJhc2UgPSBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiYmFzZVwiICk7XG5cdFx0XHRiYXNlLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0Y29udGV4dC5oZWFkLmFwcGVuZENoaWxkKCBiYXNlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudDtcblx0XHR9XG5cdH1cblxuXHRwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKTtcblx0c2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTtcblxuXHQvLyBTaW5nbGUgdGFnXG5cdGlmICggcGFyc2VkICkge1xuXHRcdHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWyAxIF0gKSBdO1xuXHR9XG5cblx0cGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTtcblxuXHRpZiAoIHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTtcbn07XG5cblxuLyoqXG4gKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlXG4gKi9cbmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHtcblx0dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSxcblx0XHRzZWxmID0gdGhpcyxcblx0XHRvZmYgPSB1cmwuaW5kZXhPZiggXCIgXCIgKTtcblxuXHRpZiAoIG9mZiA+IC0xICkge1xuXHRcdHNlbGVjdG9yID0gc3RyaXBBbmRDb2xsYXBzZSggdXJsLnNsaWNlKCBvZmYgKSApO1xuXHRcdHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7XG5cdH1cblxuXHQvLyBJZiBpdCdzIGEgZnVuY3Rpb25cblx0aWYgKCBpc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHtcblxuXHRcdC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrXG5cdFx0Y2FsbGJhY2sgPSBwYXJhbXM7XG5cdFx0cGFyYW1zID0gdW5kZWZpbmVkO1xuXG5cdC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmdcblx0fSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0dHlwZSA9IFwiUE9TVFwiO1xuXHR9XG5cblx0Ly8gSWYgd2UgaGF2ZSBlbGVtZW50cyB0byBtb2RpZnksIG1ha2UgdGhlIHJlcXVlc3Rcblx0aWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7XG5cdFx0alF1ZXJ5LmFqYXgoIHtcblx0XHRcdHVybDogdXJsLFxuXG5cdFx0XHQvLyBJZiBcInR5cGVcIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gXCJHRVRcIiBtZXRob2Qgd2lsbCBiZSB1c2VkLlxuXHRcdFx0Ly8gTWFrZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGV4cGxpY2l0IHNpbmNlXG5cdFx0XHQvLyB1c2VyIGNhbiBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2Rcblx0XHRcdHR5cGU6IHR5cGUgfHwgXCJHRVRcIixcblx0XHRcdGRhdGFUeXBlOiBcImh0bWxcIixcblx0XHRcdGRhdGE6IHBhcmFtc1xuXHRcdH0gKS5kb25lKCBmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkge1xuXG5cdFx0XHQvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2tcblx0XHRcdHJlc3BvbnNlID0gYXJndW1lbnRzO1xuXG5cdFx0XHRzZWxmLmh0bWwoIHNlbGVjdG9yID9cblxuXHRcdFx0XHQvLyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXZcblx0XHRcdFx0Ly8gRXhjbHVkZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzXG5cdFx0XHRcdGpRdWVyeSggXCI8ZGl2PlwiICkuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0XG5cdFx0XHRcdHJlc3BvbnNlVGV4dCApO1xuXG5cdFx0Ly8gSWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImRhdGFcIiwgXCJzdGF0dXNcIiwgXCJqcVhIUlwiXG5cdFx0Ly8gYnV0IHRoZXkgYXJlIGlnbm9yZWQgYmVjYXVzZSByZXNwb25zZSB3YXMgc2V0IGFib3ZlLlxuXHRcdC8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJqcVhIUlwiLCBcInN0YXR1c1wiLCBcImVycm9yXCJcblx0XHR9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHtcblx0XHRcdHNlbGYuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5cblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiBlbGVtID09PSBmbi5lbGVtO1xuXHR9ICkubGVuZ3RoO1xufTtcblxuXG5cblxualF1ZXJ5Lm9mZnNldCA9IHtcblx0c2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHtcblx0XHR2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLFxuXHRcdFx0cG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSxcblx0XHRcdHByb3BzID0ge307XG5cblx0XHQvLyBTZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVuIG9uIHN0YXRpYyBlbGVtXG5cdFx0aWYgKCBwb3NpdGlvbiA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdGVsZW0uc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG5cdFx0fVxuXG5cdFx0Y3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTtcblx0XHRjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCBcInRvcFwiICk7XG5cdFx0Y3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwibGVmdFwiICk7XG5cdFx0Y2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIiApICYmXG5cdFx0XHQoIGN1ckNTU1RvcCArIGN1ckNTU0xlZnQgKS5pbmRleE9mKCBcImF1dG9cIiApID4gLTE7XG5cblx0XHQvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlclxuXHRcdC8vIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZFxuXHRcdGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7XG5cdFx0XHRjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTtcblx0XHRcdGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDtcblx0XHRcdGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0O1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7XG5cdFx0XHRjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7XG5cblx0XHRcdC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KVxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xuXHRcdH1cblxuXHRcdGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyRWxlbS5jc3MoIHByb3BzICk7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0Ly8gb2Zmc2V0KCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgYm9yZGVyIGJveCB0byB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9mZnNldDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBQcmVzZXJ2ZSBjaGFpbmluZyBmb3Igc2V0dGVyXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHRoaXMgOlxuXHRcdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRcdGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7XG5cdFx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHR2YXIgcmVjdCwgd2luLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXTtcblxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHplcm9zIGZvciBkaXNjb25uZWN0ZWQgYW5kIGhpZGRlbiAoZGlzcGxheTogbm9uZSkgZWxlbWVudHMgKGdoLTIzMTApXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYVxuXHRcdC8vIGRpc2Nvbm5lY3RlZCBub2RlIGluIElFIHRocm93cyBhbiBlcnJvclxuXHRcdGlmICggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblx0XHR9XG5cblx0XHQvLyBHZXQgZG9jdW1lbnQtcmVsYXRpdmUgcG9zaXRpb24gYnkgYWRkaW5nIHZpZXdwb3J0IHNjcm9sbCB0byB2aWV3cG9ydC1yZWxhdGl2ZSBnQkNSXG5cdFx0cmVjdCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0d2luID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IHJlY3QudG9wICsgd2luLnBhZ2VZT2Zmc2V0LFxuXHRcdFx0bGVmdDogcmVjdC5sZWZ0ICsgd2luLnBhZ2VYT2Zmc2V0XG5cdFx0fTtcblx0fSxcblxuXHQvLyBwb3NpdGlvbigpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIG1hcmdpbiBib3ggdG8gaXRzIG9mZnNldCBwYXJlbnQncyBwYWRkaW5nIGJveFxuXHQvLyBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBiZWhhdmlvciBvZiBDU1MgYWJzb2x1dGUgcG9zaXRpb25pbmdcblx0cG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggIXRoaXNbIDAgXSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsIGRvYyxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRwYXJlbnRPZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuXG5cdFx0Ly8gcG9zaXRpb246Zml4ZWQgZWxlbWVudHMgYXJlIG9mZnNldCBmcm9tIHRoZSB2aWV3cG9ydCwgd2hpY2ggaXRzZWxmIGFsd2F5cyBoYXMgemVybyBvZmZzZXRcblx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApID09PSBcImZpeGVkXCIgKSB7XG5cblx0XHRcdC8vIEFzc3VtZSBwb3NpdGlvbjpmaXhlZCBpbXBsaWVzIGF2YWlsYWJpbGl0eSBvZiBnZXRCb3VuZGluZ0NsaWVudFJlY3Rcblx0XHRcdG9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0b2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTtcblxuXHRcdFx0Ly8gQWNjb3VudCBmb3IgdGhlICpyZWFsKiBvZmZzZXQgcGFyZW50LCB3aGljaCBjYW4gYmUgdGhlIGRvY3VtZW50IG9yIGl0cyByb290IGVsZW1lbnRcblx0XHRcdC8vIHdoZW4gYSBzdGF0aWNhbGx5IHBvc2l0aW9uZWQgZWxlbWVudCBpcyBpZGVudGlmaWVkXG5cdFx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0XHRvZmZzZXRQYXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudCB8fCBkb2MuZG9jdW1lbnRFbGVtZW50O1xuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiZcblx0XHRcdFx0KCBvZmZzZXRQYXJlbnQgPT09IGRvYy5ib2R5IHx8IG9mZnNldFBhcmVudCA9PT0gZG9jLmRvY3VtZW50RWxlbWVudCApICYmXG5cdFx0XHRcdGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQgIT09IGVsZW0gJiYgb2Zmc2V0UGFyZW50Lm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIEluY29ycG9yYXRlIGJvcmRlcnMgaW50byBpdHMgb2Zmc2V0LCBzaW5jZSB0aGV5IGFyZSBvdXRzaWRlIGl0cyBjb250ZW50IG9yaWdpblxuXHRcdFx0XHRwYXJlbnRPZmZzZXQgPSBqUXVlcnkoIG9mZnNldFBhcmVudCApLm9mZnNldCgpO1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQudG9wICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJUb3BXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJMZWZ0V2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnNcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBvZmZzZXQudG9wIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luVG9wXCIsIHRydWUgKSxcblx0XHRcdGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiwgdHJ1ZSApXG5cdFx0fTtcblx0fSxcblxuXHQvLyBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBkb2N1bWVudEVsZW1lbnQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly8gMSkgRm9yIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgaWZyYW1lIHdpdGhvdXQgb2Zmc2V0UGFyZW50LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVyblxuXHQvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3dcblx0Ly8gMikgRm9yIHRoZSBoaWRkZW4gb3IgZGV0YWNoZWQgZWxlbWVudFxuXHQvLyAzKSBGb3IgYm9keSBvciBodG1sIGVsZW1lbnQsIGkuZS4gaW4gY2FzZSBvZiB0aGUgaHRtbCBub2RlIC0gaXQgd2lsbCByZXR1cm4gaXRzZWxmXG5cdC8vXG5cdC8vIGJ1dCB0aG9zZSBleGNlcHRpb25zIHdlcmUgbmV2ZXIgcHJlc2VudGVkIGFzIGEgcmVhbCBsaWZlIHVzZS1jYXNlc1xuXHQvLyBhbmQgbWlnaHQgYmUgY29uc2lkZXJlZCBhcyBtb3JlIHByZWZlcmFibGUgcmVzdWx0cy5cblx0Ly9cblx0Ly8gVGhpcyBsb2dpYywgaG93ZXZlciwgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGNhbiBjaGFuZ2UgYXQgYW55IHBvaW50IGluIHRoZSBmdXR1cmVcblx0b2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50O1xuXG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJiBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0OiBcInBhZ2VYT2Zmc2V0XCIsIHNjcm9sbFRvcDogXCJwYWdlWU9mZnNldFwiIH0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7XG5cdHZhciB0b3AgPSBcInBhZ2VZT2Zmc2V0XCIgPT09IHByb3A7XG5cblx0alF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwgdmFsICkge1xuXG5cdFx0XHQvLyBDb2FsZXNjZSBkb2N1bWVudHMgYW5kIHdpbmRvd3Ncblx0XHRcdHZhciB3aW47XG5cdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW07XG5cdFx0XHR9IGVsc2UgaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtLmRlZmF1bHRWaWV3O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB3aW4gKSB7XG5cdFx0XHRcdHdpbi5zY3JvbGxUbyhcblx0XHRcdFx0XHQhdG9wID8gdmFsIDogd2luLnBhZ2VYT2Zmc2V0LFxuXHRcdFx0XHRcdHRvcCA/IHZhbCA6IHdpbi5wYWdlWU9mZnNldFxuXHRcdFx0XHQpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtWyBtZXRob2QgXSA9IHZhbDtcblx0XHRcdH1cblx0XHR9LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9O1xufSApO1xuXG4vLyBTdXBwb3J0OiBTYWZhcmkgPD03IC0gOS4xLCBDaHJvbWUgPD0zNyAtIDQ5XG4vLyBBZGQgdGhlIHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5nIGpRdWVyeS5mbi5wb3NpdGlvblxuLy8gV2Via2l0IGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDg0XG4vLyBCbGluayBidWc6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTU4OTM0N1xuLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodDtcbi8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNzcyBtb2R1bGUgZGVwZW5kIG9uIHRoZSBvZmZzZXQgbW9kdWxlLCBqdXN0IGNoZWNrIGZvciBpdCBoZXJlXG5qUXVlcnkuZWFjaCggWyBcInRvcFwiLCBcImxlZnRcIiBdLCBmdW5jdGlvbiggX2ksIHByb3AgKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJvcCBdID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnBpeGVsUG9zaXRpb24sXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdFx0Y29tcHV0ZWQgPSBjdXJDU1MoIGVsZW0sIHByb3AgKTtcblxuXHRcdFx0XHQvLyBJZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXRcblx0XHRcdFx0cmV0dXJuIHJudW1ub25weC50ZXN0KCBjb21wdXRlZCApID9cblx0XHRcdFx0XHRqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyBcInB4XCIgOlxuXHRcdFx0XHRcdGNvbXB1dGVkO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn0gKTtcblxuXG4vLyBDcmVhdGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IEhlaWdodDogXCJoZWlnaHRcIiwgV2lkdGg6IFwid2lkdGhcIiB9LCBmdW5jdGlvbiggbmFtZSwgdHlwZSApIHtcblx0alF1ZXJ5LmVhY2goIHtcblx0XHRwYWRkaW5nOiBcImlubmVyXCIgKyBuYW1lLFxuXHRcdGNvbnRlbnQ6IHR5cGUsXG5cdFx0XCJcIjogXCJvdXRlclwiICsgbmFtZVxuXHR9LCBmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHtcblxuXHRcdC8vIE1hcmdpbiBpcyBvbmx5IGZvciBvdXRlckhlaWdodCwgb3V0ZXJXaWR0aFxuXHRcdGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkge1xuXHRcdFx0dmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gXCJib29sZWFuXCIgKSxcblx0XHRcdFx0ZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyBcIm1hcmdpblwiIDogXCJib3JkZXJcIiApO1xuXG5cdFx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBkb2M7XG5cblx0XHRcdFx0aWYgKCBpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gJCggd2luZG93ICkub3V0ZXJXaWR0aC9IZWlnaHQgcmV0dXJuIHcvaCBpbmNsdWRpbmcgc2Nyb2xsYmFycyAoZ2gtMTcyOSlcblx0XHRcdFx0XHRyZXR1cm4gZnVuY05hbWUuaW5kZXhPZiggXCJvdXRlclwiICkgPT09IDAgP1xuXHRcdFx0XHRcdFx0ZWxlbVsgXCJpbm5lclwiICsgbmFtZSBdIDpcblx0XHRcdFx0XHRcdGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBcImNsaWVudFwiICsgbmFtZSBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodFxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0ZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHQvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sXG5cdFx0XHRcdFx0Ly8gd2hpY2hldmVyIGlzIGdyZWF0ZXN0XG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcInNjcm9sbFwiICsgbmFtZSBdLCBkb2NbIFwic2Nyb2xsXCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwib2Zmc2V0XCIgKyBuYW1lIF0sIGRvY1sgXCJvZmZzZXRcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGRvY1sgXCJjbGllbnRcIiArIG5hbWUgXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cblx0XHRcdFx0XHQvLyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0XG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6XG5cblx0XHRcdFx0XHQvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTtcblx0XHRcdH0sIHR5cGUsIGNoYWluYWJsZSA/IG1hcmdpbiA6IHVuZGVmaW5lZCwgY2hhaW5hYmxlICk7XG5cdFx0fTtcblx0fSApO1xufSApO1xuXG5cbmpRdWVyeS5lYWNoKCBbXG5cdFwiYWpheFN0YXJ0XCIsXG5cdFwiYWpheFN0b3BcIixcblx0XCJhamF4Q29tcGxldGVcIixcblx0XCJhamF4RXJyb3JcIixcblx0XCJhamF4U3VjY2Vzc1wiLFxuXHRcImFqYXhTZW5kXCJcbl0sIGZ1bmN0aW9uKCBfaSwgdHlwZSApIHtcblx0alF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGUsIGZuICk7XG5cdH07XG59ICk7XG5cblxuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgbnVsbCwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7XG5cdH0sXG5cblx0ZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkge1xuXG5cdFx0Ly8gKCBuYW1lc3BhY2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKVxuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID9cblx0XHRcdHRoaXMub2ZmKCBzZWxlY3RvciwgXCIqKlwiICkgOlxuXHRcdFx0dGhpcy5vZmYoIHR5cGVzLCBzZWxlY3RvciB8fCBcIioqXCIsIGZuICk7XG5cdH0sXG5cblx0aG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkge1xuXHRcdHJldHVybiB0aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZuT3V0IHx8IGZuT3ZlciApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKFxuXHQoIFwiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgXCIgK1xuXHRcIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIFwiICtcblx0XCJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51XCIgKS5zcGxpdCggXCIgXCIgKSxcblx0ZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXG5cdFx0Ly8gSGFuZGxlIGV2ZW50IGJpbmRpbmdcblx0XHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBkYXRhLCBmbiApIHtcblx0XHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/XG5cdFx0XHRcdHRoaXMub24oIG5hbWUsIG51bGwsIGRhdGEsIGZuICkgOlxuXHRcdFx0XHR0aGlzLnRyaWdnZXIoIG5hbWUgKTtcblx0XHR9O1xuXHR9XG4pO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHlcbi8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUFxudmFyIHJ0cmltID0gL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nO1xuXG4vLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnlcbi8vIGFyZ3VtZW50cy5cbi8vIGpRdWVyeS5wcm94eSBpcyBkZXByZWNhdGVkIHRvIHByb21vdGUgc3RhbmRhcmRzIChzcGVjaWZpY2FsbHkgRnVuY3Rpb24jYmluZClcbi8vIEhvd2V2ZXIsIGl0IGlzIG5vdCBzbGF0ZWQgZm9yIHJlbW92YWwgYW55IHRpbWUgc29vblxualF1ZXJ5LnByb3h5ID0gZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkge1xuXHR2YXIgdG1wLCBhcmdzLCBwcm94eTtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdHRtcCA9IGZuWyBjb250ZXh0IF07XG5cdFx0Y29udGV4dCA9IGZuO1xuXHRcdGZuID0gdG1wO1xuXHR9XG5cblx0Ly8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWNcblx0Ly8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC5cblx0aWYgKCAhaXNGdW5jdGlvbiggZm4gKSApIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gU2ltdWxhdGVkIGJpbmRcblx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApO1xuXHRwcm94eSA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApO1xuXHR9O1xuXG5cdC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZFxuXHRwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKztcblxuXHRyZXR1cm4gcHJveHk7XG59O1xuXG5qUXVlcnkuaG9sZFJlYWR5ID0gZnVuY3Rpb24oIGhvbGQgKSB7XG5cdGlmICggaG9sZCApIHtcblx0XHRqUXVlcnkucmVhZHlXYWl0Kys7XG5cdH0gZWxzZSB7XG5cdFx0alF1ZXJ5LnJlYWR5KCB0cnVlICk7XG5cdH1cbn07XG5qUXVlcnkuaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5qUXVlcnkucGFyc2VKU09OID0gSlNPTi5wYXJzZTtcbmpRdWVyeS5ub2RlTmFtZSA9IG5vZGVOYW1lO1xualF1ZXJ5LmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xualF1ZXJ5LmlzV2luZG93ID0gaXNXaW5kb3c7XG5qUXVlcnkuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xualF1ZXJ5LnR5cGUgPSB0b1R5cGU7XG5cbmpRdWVyeS5ub3cgPSBEYXRlLm5vdztcblxualF1ZXJ5LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKCBvYmogKSB7XG5cblx0Ly8gQXMgb2YgalF1ZXJ5IDMuMCwgaXNOdW1lcmljIGlzIGxpbWl0ZWQgdG9cblx0Ly8gc3RyaW5ncyBhbmQgbnVtYmVycyAocHJpbWl0aXZlcyBvciBvYmplY3RzKVxuXHQvLyB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIGZpbml0ZSBudW1iZXJzIChnaC0yNjYyKVxuXHR2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTtcblx0cmV0dXJuICggdHlwZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlID09PSBcInN0cmluZ1wiICkgJiZcblxuXHRcdC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChcIlwiKVxuXHRcdC8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKFwiMHguLi5cIilcblx0XHQvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU5cblx0XHQhaXNOYU4oIG9iaiAtIHBhcnNlRmxvYXQoIG9iaiApICk7XG59O1xuXG5qUXVlcnkudHJpbSA9IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRyZXR1cm4gdGV4dCA9PSBudWxsID9cblx0XHRcIlwiIDpcblx0XHQoIHRleHQgKyBcIlwiICkucmVwbGFjZSggcnRyaW0sIFwiXCIgKTtcbn07XG5cblxuXG4vLyBSZWdpc3RlciBhcyBhIG5hbWVkIEFNRCBtb2R1bGUsIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXJcbi8vIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXRcbi8vIHVuZGVyc3RhbmRzIGFub255bW91cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdFxuLy8gd2F5IHRvIHJlZ2lzdGVyLiBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFyZVxuLy8gZGVyaXZlZCBmcm9tIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlXG4vLyBmaWxlIG5hbWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHNcbi8vIHRvIGNhbGwgbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnksIGl0IHdpbGwgd29yay5cblxuLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGpRdWVyeSBzaG91bGRcbi8vIGRlY2xhcmUgdGhlbXNlbHZlcyBhcyBhbm9ueW1vdXMgbW9kdWxlcywgYW5kIGF2b2lkIHNldHRpbmcgYSBnbG9iYWwgaWYgYW5cbi8vIEFNRCBsb2FkZXIgaXMgcHJlc2VudC4galF1ZXJ5IGlzIGEgc3BlY2lhbCBjYXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvd2lraS9VcGRhdGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9uXG5cbmlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cdGRlZmluZSggXCJqcXVlcnlcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnk7XG5cdH0gKTtcbn1cblxuXG5cblxudmFyXG5cblx0Ly8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LFxuXG5cdC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF8kID0gd2luZG93LiQ7XG5cbmpRdWVyeS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oIGRlZXAgKSB7XG5cdGlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cuJCA9IF8kO1xuXHR9XG5cblx0aWYgKCBkZWVwICYmIHdpbmRvdy5qUXVlcnkgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnk7XG59O1xuXG4vLyBFeHBvc2UgalF1ZXJ5IGFuZCAkIGlkZW50aWZpZXJzLCBldmVuIGluIEFNRFxuLy8gKCM3MTAyI2NvbW1lbnQ6MTAsIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNTU3KVxuLy8gYW5kIENvbW1vbkpTIGZvciBicm93c2VyIGVtdWxhdG9ycyAoIzEzNTY2KVxuaWYgKCB0eXBlb2Ygbm9HbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdHdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTtcbn1cblxuXG5cblxucmV0dXJuIGpRdWVyeTtcbn0gKTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgRGF0YVZpZXcgPSBnZXROYXRpdmUocm9vdCwgJ0RhdGFWaWV3Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGF0YVZpZXc7XG4iLCJ2YXIgaGFzaENsZWFyID0gcmVxdWlyZSgnLi9faGFzaENsZWFyJyksXG4gICAgaGFzaERlbGV0ZSA9IHJlcXVpcmUoJy4vX2hhc2hEZWxldGUnKSxcbiAgICBoYXNoR2V0ID0gcmVxdWlyZSgnLi9faGFzaEdldCcpLFxuICAgIGhhc2hIYXMgPSByZXF1aXJlKCcuL19oYXNoSGFzJyksXG4gICAgaGFzaFNldCA9IHJlcXVpcmUoJy4vX2hhc2hTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjtcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IGhhc2hEZWxldGU7XG5IYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhcztcbkhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaDtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGJhc2VMb2Rhc2ggPSByZXF1aXJlKCcuL19iYXNlTG9kYXNoJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHRoZSBtYXhpbXVtIGxlbmd0aCBhbmQgaW5kZXggb2YgYW4gYXJyYXkuICovXG52YXIgTUFYX0FSUkFZX0xFTkdUSCA9IDQyOTQ5NjcyOTU7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGxhenkgd3JhcHBlciBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgbGF6eSBldmFsdWF0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gKi9cbmZ1bmN0aW9uIExhenlXcmFwcGVyKHZhbHVlKSB7XG4gIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgdGhpcy5fX2FjdGlvbnNfXyA9IFtdO1xuICB0aGlzLl9fZGlyX18gPSAxO1xuICB0aGlzLl9fZmlsdGVyZWRfXyA9IGZhbHNlO1xuICB0aGlzLl9faXRlcmF0ZWVzX18gPSBbXTtcbiAgdGhpcy5fX3Rha2VDb3VudF9fID0gTUFYX0FSUkFZX0xFTkdUSDtcbiAgdGhpcy5fX3ZpZXdzX18gPSBbXTtcbn1cblxuLy8gRW5zdXJlIGBMYXp5V3JhcHBlcmAgaXMgYW4gaW5zdGFuY2Ugb2YgYGJhc2VMb2Rhc2hgLlxuTGF6eVdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG5MYXp5V3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMYXp5V3JhcHBlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBMYXp5V3JhcHBlcjtcbiIsInZhciBsaXN0Q2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUNsZWFyJyksXG4gICAgbGlzdENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlRGVsZXRlJyksXG4gICAgbGlzdENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlR2V0JyksXG4gICAgbGlzdENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlSGFzJyksXG4gICAgbGlzdENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXN0Q2FjaGU7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGNvbnN0cnVjdG9yIGZvciBjcmVhdGluZyBgbG9kYXNoYCB3cmFwcGVyIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtjaGFpbkFsbF0gRW5hYmxlIGV4cGxpY2l0IG1ldGhvZCBjaGFpbiBzZXF1ZW5jZXMuXG4gKi9cbmZ1bmN0aW9uIExvZGFzaFdyYXBwZXIodmFsdWUsIGNoYWluQWxsKSB7XG4gIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgdGhpcy5fX2FjdGlvbnNfXyA9IFtdO1xuICB0aGlzLl9fY2hhaW5fXyA9ICEhY2hhaW5BbGw7XG4gIHRoaXMuX19pbmRleF9fID0gMDtcbiAgdGhpcy5fX3ZhbHVlc19fID0gdW5kZWZpbmVkO1xufVxuXG5Mb2Rhc2hXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpO1xuTG9kYXNoV3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2Rhc2hXcmFwcGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvZGFzaFdyYXBwZXI7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIE1hcCA9IGdldE5hdGl2ZShyb290LCAnTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwO1xuIiwidmFyIG1hcENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19tYXBDYWNoZUNsZWFyJyksXG4gICAgbWFwQ2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19tYXBDYWNoZURlbGV0ZScpLFxuICAgIG1hcENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVHZXQnKSxcbiAgICBtYXBDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX21hcENhY2hlSGFzJyksXG4gICAgbWFwQ2FjaGVTZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTWFwQ2FjaGVgLlxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBDYWNoZURlbGV0ZTtcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBtYXBDYWNoZUdldDtcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXBDYWNoZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0O1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgV2Vha01hcCA9IGdldE5hdGl2ZShyb290LCAnV2Vha01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFdlYWtNYXA7XG4iLCIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TWFwO1xuIiwiLyoqXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtBcnJheX0gdmFsdWVzIFRoZSB2YWx1ZXMgdG8gYXBwZW5kLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5UHVzaChhcnJheSwgdmFsdWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcbiAgICAgIG9mZnNldCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W29mZnNldCArIGluZGV4XSA9IHZhbHVlc1tpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5UHVzaDtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnJlZHVjZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHsqfSBbYWNjdW11bGF0b3JdIFRoZSBpbml0aWFsIHZhbHVlLlxuICogQHBhcmFtIHtib29sZWFufSBbaW5pdEFjY3VtXSBTcGVjaWZ5IHVzaW5nIHRoZSBmaXJzdCBlbGVtZW50IG9mIGBhcnJheWAgYXNcbiAqICB0aGUgaW5pdGlhbCB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBhY2N1bXVsYXRlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlSZWR1Y2UoYXJyYXksIGl0ZXJhdGVlLCBhY2N1bXVsYXRvciwgaW5pdEFjY3VtKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKGluaXRBY2N1bSAmJiBsZW5ndGgpIHtcbiAgICBhY2N1bXVsYXRvciA9IGFycmF5WysraW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpO1xuICB9XG4gIHJldHVybiBhY2N1bXVsYXRvcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVJlZHVjZTtcbiIsIi8qKlxuICogQ29udmVydHMgYW4gQVNDSUkgYHN0cmluZ2AgdG8gYW4gYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFzY2lpVG9BcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5zcGxpdCgnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNjaWlUb0FycmF5O1xuIiwidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc29jSW5kZXhPZjtcbiIsInZhciBnZXQgPSByZXF1aXJlKCcuL2dldCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmF0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGluZGl2aWR1YWwgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRocyBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcGlja2VkIGVsZW1lbnRzLlxuICovXG5mdW5jdGlvbiBiYXNlQXQob2JqZWN0LCBwYXRocykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGhzLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCksXG4gICAgICBza2lwID0gb2JqZWN0ID09IG51bGw7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICByZXN1bHRbaW5kZXhdID0gc2tpcCA/IHVuZGVmaW5lZCA6IGdldChvYmplY3QsIHBhdGhzW2luZGV4XSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQXQ7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdENyZWF0ZSA9IE9iamVjdC5jcmVhdGU7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uY3JlYXRlYCB3aXRob3V0IHN1cHBvcnQgZm9yIGFzc2lnbmluZ1xuICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKi9cbnZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBvYmplY3QoKSB7fVxuICByZXR1cm4gZnVuY3Rpb24ocHJvdG8pIHtcbiAgICBpZiAoIWlzT2JqZWN0KHByb3RvKSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0Q3JlYXRlKHByb3RvKTtcbiAgICB9XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xuICAgIHZhciByZXN1bHQgPSBuZXcgb2JqZWN0O1xuICAgIG9iamVjdC5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUNyZWF0ZTtcbiIsInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0ZsYXR0ZW5hYmxlID0gcmVxdWlyZSgnLi9faXNGbGF0dGVuYWJsZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZsYXR0ZW5gIHdpdGggc3VwcG9ydCBmb3IgcmVzdHJpY3RpbmcgZmxhdHRlbmluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcGFyYW0ge251bWJlcn0gZGVwdGggVGhlIG1heGltdW0gcmVjdXJzaW9uIGRlcHRoLlxuICogQHBhcmFtIHtib29sZWFufSBbcHJlZGljYXRlPWlzRmxhdHRlbmFibGVdIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc1N0cmljdF0gUmVzdHJpY3QgdG8gdmFsdWVzIHRoYXQgcGFzcyBgcHJlZGljYXRlYCBjaGVja3MuXG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0PVtdXSBUaGUgaW5pdGlhbCByZXN1bHQgdmFsdWUuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGbGF0dGVuKGFycmF5LCBkZXB0aCwgcHJlZGljYXRlLCBpc1N0cmljdCwgcmVzdWx0KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHByZWRpY2F0ZSB8fCAocHJlZGljYXRlID0gaXNGbGF0dGVuYWJsZSk7XG4gIHJlc3VsdCB8fCAocmVzdWx0ID0gW10pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChkZXB0aCA+IDAgJiYgcHJlZGljYXRlKHZhbHVlKSkge1xuICAgICAgaWYgKGRlcHRoID4gMSkge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBmbGF0dGVuIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgICAgICBiYXNlRmxhdHRlbih2YWx1ZSwgZGVwdGggLSAxLCBwcmVkaWNhdGUsIGlzU3RyaWN0LCByZXN1bHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXJyYXlQdXNoKHJlc3VsdCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWlzU3RyaWN0KSB7XG4gICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRmxhdHRlbjtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXQ7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgZ2V0UmF3VGFnID0gcmVxdWlyZSgnLi9fZ2V0UmF3VGFnJyksXG4gICAgb2JqZWN0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19vYmplY3RUb1N0cmluZycpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbnVsbFRhZyA9ICdbb2JqZWN0IE51bGxdJyxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xuICB9XG4gIHJldHVybiAoc3ltVG9TdHJpbmdUYWcgJiYgc3ltVG9TdHJpbmdUYWcgaW4gT2JqZWN0KHZhbHVlKSlcbiAgICA/IGdldFJhd1RhZyh2YWx1ZSlcbiAgICA6IG9iamVjdFRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0VGFnO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxuICovXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gYXJnc1RhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNBcmd1bWVudHM7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1R5cGVkQXJyYXk7XG4iLCJ2YXIgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIG5hdGl2ZUtleXMgPSByZXF1aXJlKCcuL19uYXRpdmVLZXlzJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICovXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSAmJiBrZXkgIT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlS2V5cztcbiIsIi8qKlxuICogVGhlIGZ1bmN0aW9uIHdob3NlIHByb3RvdHlwZSBjaGFpbiBzZXF1ZW5jZSB3cmFwcGVycyBpbmhlcml0IGZyb20uXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gYmFzZUxvZGFzaCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTG9kYXNoO1xuIiwidmFyIGNvbnN0YW50ID0gcmVxdWlyZSgnLi9jb25zdGFudCcpLFxuICAgIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fZGVmaW5lUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldFRvU3RyaW5nID0gIWRlZmluZVByb3BlcnR5ID8gaWRlbnRpdHkgOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmMsICd0b1N0cmluZycsIHtcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxuICAgICd2YWx1ZSc6IGNvbnN0YW50KHN0cmluZyksXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNldFRvU3RyaW5nO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVGltZXM7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVG9TdHJpbmc7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuYXJ5O1xuIiwidmFyIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy52YWx1ZXNgIGFuZCBgXy52YWx1ZXNJbmAgd2hpY2ggY3JlYXRlcyBhblxuICogYXJyYXkgb2YgYG9iamVjdGAgcHJvcGVydHkgdmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3BlcnR5IG5hbWVzXG4gKiBvZiBgcHJvcHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgbmFtZXMgdG8gZ2V0IHZhbHVlcyBmb3IuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VWYWx1ZXMob2JqZWN0LCBwcm9wcykge1xuICByZXR1cm4gYXJyYXlNYXAocHJvcHMsIGZ1bmN0aW9uKGtleSkge1xuICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVZhbHVlcztcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgYXJyYXlSZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheVJlZHVjZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGB3cmFwcGVyVmFsdWVgIHdoaWNoIHJldHVybnMgdGhlIHJlc3VsdCBvZlxuICogcGVyZm9ybWluZyBhIHNlcXVlbmNlIG9mIGFjdGlvbnMgb24gdGhlIHVud3JhcHBlZCBgdmFsdWVgLCB3aGVyZSBlYWNoXG4gKiBzdWNjZXNzaXZlIGFjdGlvbiBpcyBzdXBwbGllZCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwcmV2aW91cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdW53cmFwcGVkIHZhbHVlLlxuICogQHBhcmFtIHtBcnJheX0gYWN0aW9ucyBBY3Rpb25zIHRvIHBlcmZvcm0gdG8gcmVzb2x2ZSB0aGUgdW53cmFwcGVkIHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlV3JhcHBlclZhbHVlKHZhbHVlLCBhY3Rpb25zKSB7XG4gIHZhciByZXN1bHQgPSB2YWx1ZTtcbiAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7XG4gICAgcmVzdWx0ID0gcmVzdWx0LnZhbHVlKCk7XG4gIH1cbiAgcmV0dXJuIGFycmF5UmVkdWNlKGFjdGlvbnMsIGZ1bmN0aW9uKHJlc3VsdCwgYWN0aW9uKSB7XG4gICAgcmV0dXJuIGFjdGlvbi5mdW5jLmFwcGx5KGFjdGlvbi50aGlzQXJnLCBhcnJheVB1c2goW3Jlc3VsdF0sIGFjdGlvbi5hcmdzKSk7XG4gIH0sIHJlc3VsdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVdyYXBwZXJWYWx1ZTtcbiIsInZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIHN0cmluZ1RvUGF0aCA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvUGF0aCcpLFxuICAgIHRvU3RyaW5nID0gcmVxdWlyZSgnLi90b1N0cmluZycpO1xuXG4vKipcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3QgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2FzdFBhdGgodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGlzS2V5KHZhbHVlLCBvYmplY3QpID8gW3ZhbHVlXSA6IHN0cmluZ1RvUGF0aCh0b1N0cmluZyh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhc3RQYXRoO1xuIiwiLyoqXG4gKiBDb3BpZXMgdGhlIHZhbHVlcyBvZiBgc291cmNlYCB0byBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBzb3VyY2UgVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIGZyb20uXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG5cbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29weUFycmF5O1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbm1vZHVsZS5leHBvcnRzID0gY29yZUpzRGF0YTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCJ2YXIgZmxhdHRlbiA9IHJlcXVpcmUoJy4vZmxhdHRlbicpLFxuICAgIG92ZXJSZXN0ID0gcmVxdWlyZSgnLi9fb3ZlclJlc3QnKSxcbiAgICBzZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFRvU3RyaW5nJyk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggZmxhdHRlbnMgdGhlIHJlc3QgYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gZmxhdFJlc3QoZnVuYykge1xuICByZXR1cm4gc2V0VG9TdHJpbmcob3ZlclJlc3QoZnVuYywgdW5kZWZpbmVkLCBmbGF0dGVuKSwgZnVuYyArICcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0UmVzdDtcbiIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsInZhciBpc0tleWFibGUgPSByZXF1aXJlKCcuL19pc0tleWFibGUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICA6IGRhdGEubWFwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE1hcERhdGE7XG4iLCJ2YXIgYmFzZUlzTmF0aXZlID0gcmVxdWlyZSgnLi9fYmFzZUlzTmF0aXZlJyksXG4gICAgZ2V0VmFsdWUgPSByZXF1aXJlKCcuL19nZXRWYWx1ZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5hdGl2ZTtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsInZhciBEYXRhVmlldyA9IHJlcXVpcmUoJy4vX0RhdGFWaWV3JyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgUHJvbWlzZSA9IHJlcXVpcmUoJy4vX1Byb21pc2UnKSxcbiAgICBTZXQgPSByZXF1aXJlKCcuL19TZXQnKSxcbiAgICBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpLFxuICAgIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcHJvbWlzZVRhZyA9ICdbb2JqZWN0IFByb21pc2VdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgbWFwcywgc2V0cywgYW5kIHdlYWttYXBzLiAqL1xudmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IHRvU291cmNlKERhdGFWaWV3KSxcbiAgICBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwKSxcbiAgICBwcm9taXNlQ3RvclN0cmluZyA9IHRvU291cmNlKFByb21pc2UpLFxuICAgIHNldEN0b3JTdHJpbmcgPSB0b1NvdXJjZShTZXQpLFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcCk7XG5cbi8qKlxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbnZhciBnZXRUYWcgPSBiYXNlR2V0VGFnO1xuXG4vLyBGYWxsYmFjayBmb3IgZGF0YSB2aWV3cywgbWFwcywgc2V0cywgYW5kIHdlYWsgbWFwcyBpbiBJRSAxMSBhbmQgcHJvbWlzZXMgaW4gTm9kZS5qcyA8IDYuXG5pZiAoKERhdGFWaWV3ICYmIGdldFRhZyhuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XG4gICAgKE1hcCAmJiBnZXRUYWcobmV3IE1hcCkgIT0gbWFwVGFnKSB8fFxuICAgIChQcm9taXNlICYmIGdldFRhZyhQcm9taXNlLnJlc29sdmUoKSkgIT0gcHJvbWlzZVRhZykgfHxcbiAgICAoU2V0ICYmIGdldFRhZyhuZXcgU2V0KSAhPSBzZXRUYWcpIHx8XG4gICAgKFdlYWtNYXAgJiYgZ2V0VGFnKG5ldyBXZWFrTWFwKSAhPSB3ZWFrTWFwVGFnKSkge1xuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHZhciByZXN1bHQgPSBiYXNlR2V0VGFnKHZhbHVlKSxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgY3RvclN0cmluZyA9IEN0b3IgPyB0b1NvdXJjZShDdG9yKSA6ICcnO1xuXG4gICAgaWYgKGN0b3JTdHJpbmcpIHtcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xuICAgICAgICBjYXNlIG1hcEN0b3JTdHJpbmc6IHJldHVybiBtYXBUYWc7XG4gICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XG4gICAgICAgIGNhc2Ugd2Vha01hcEN0b3JTdHJpbmc6IHJldHVybiB3ZWFrTWFwVGFnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFRhZztcbiIsIi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFZhbHVlO1xuIiwiLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNoYXJhY3RlciBjbGFzc2VzLiAqL1xudmFyIHJzQXN0cmFsUmFuZ2UgPSAnXFxcXHVkODAwLVxcXFx1ZGZmZicsXG4gICAgcnNDb21ib01hcmtzUmFuZ2UgPSAnXFxcXHUwMzAwLVxcXFx1MDM2ZicsXG4gICAgcmVDb21ib0hhbGZNYXJrc1JhbmdlID0gJ1xcXFx1ZmUyMC1cXFxcdWZlMmYnLFxuICAgIHJzQ29tYm9TeW1ib2xzUmFuZ2UgPSAnXFxcXHUyMGQwLVxcXFx1MjBmZicsXG4gICAgcnNDb21ib1JhbmdlID0gcnNDb21ib01hcmtzUmFuZ2UgKyByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgKyByc0NvbWJvU3ltYm9sc1JhbmdlLFxuICAgIHJzVmFyUmFuZ2UgPSAnXFxcXHVmZTBlXFxcXHVmZTBmJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNhcHR1cmUgZ3JvdXBzLiAqL1xudmFyIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBzdHJpbmdzIHdpdGggW3plcm8td2lkdGggam9pbmVycyBvciBjb2RlIHBvaW50cyBmcm9tIHRoZSBhc3RyYWwgcGxhbmVzXShodHRwOi8vZWV2LmVlL2Jsb2cvMjAxNS8wOS8xMi9kYXJrLWNvcm5lcnMtb2YtdW5pY29kZS8pLiAqL1xudmFyIHJlSGFzVW5pY29kZSA9IFJlZ0V4cCgnWycgKyByc1pXSiArIHJzQXN0cmFsUmFuZ2UgICsgcnNDb21ib1JhbmdlICsgcnNWYXJSYW5nZSArICddJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBzdHJpbmdgIGNvbnRhaW5zIFVuaWNvZGUgc3ltYm9scy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSBzeW1ib2wgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzVW5pY29kZShzdHJpbmcpIHtcbiAgcmV0dXJuIHJlSGFzVW5pY29kZS50ZXN0KHN0cmluZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzVW5pY29kZTtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEdldDtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hIYXM7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcHJlYWRhYmxlU3ltYm9sID0gU3ltYm9sID8gU3ltYm9sLmlzQ29uY2F0U3ByZWFkYWJsZSA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGZsYXR0ZW5hYmxlIGBhcmd1bWVudHNgIG9iamVjdCBvciBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmbGF0dGVuYWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0ZsYXR0ZW5hYmxlKHZhbHVlKSB7XG4gIHJldHVybiBpc0FycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkgfHxcbiAgICAhIShzcHJlYWRhYmxlU3ltYm9sICYmIHZhbHVlICYmIHZhbHVlW3NwcmVhZGFibGVTeW1ib2xdKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0ZsYXR0ZW5hYmxlO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXk7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwidmFyIGNvcmVKc0RhdGEgPSByZXF1aXJlKCcuL19jb3JlSnNEYXRhJyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXNrZWQ7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCIvKipcbiAqIENvbnZlcnRzIGBpdGVyYXRvcmAgdG8gYW4gYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpdGVyYXRvciBUaGUgaXRlcmF0b3IgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBpdGVyYXRvclRvQXJyYXkoaXRlcmF0b3IpIHtcbiAgdmFyIGRhdGEsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoIShkYXRhID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgcmVzdWx0LnB1c2goZGF0YS52YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpdGVyYXRvclRvQXJyYXk7XG4iLCIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVTZXQ7XG4iLCJ2YXIgSGFzaCA9IHJlcXVpcmUoJy4vX0hhc2gnKSxcbiAgICBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlQ2xlYXI7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVEZWxldGU7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlR2V0O1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVIYXM7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlU2V0O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBUb0FycmF5O1xuIiwidmFyIG1lbW9pemUgPSByZXF1aXJlKCcuL21lbW9pemUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xudmFyIE1BWF9NRU1PSVpFX1NJWkUgPSA1MDA7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1lbW9pemVgIHdoaWNoIGNsZWFycyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24nc1xuICogY2FjaGUgd2hlbiBpdCBleGNlZWRzIGBNQVhfTUVNT0laRV9TSVpFYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYykge1xuICB2YXIgcmVzdWx0ID0gbWVtb2l6ZShmdW5jLCBmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoY2FjaGUuc2l6ZSA9PT0gTUFYX01FTU9JWkVfU0laRSkge1xuICAgICAgY2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfSk7XG5cbiAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemVDYXBwZWQ7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwidmFyIG92ZXJBcmcgPSByZXF1aXJlKCcuL19vdmVyQXJnJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVLZXlzID0gb3ZlckFyZyhPYmplY3Qua2V5cywgT2JqZWN0KTtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXRpdmVLZXlzO1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbm9kZVV0aWw7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvYmplY3RUb1N0cmluZztcbiIsIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJBcmc7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb0FycmF5O1xuIiwidmFyIGJhc2VTZXRUb1N0cmluZyA9IHJlcXVpcmUoJy4vX2Jhc2VTZXRUb1N0cmluZycpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgZnVuY2AgdG8gcmV0dXJuIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldFRvU3RyaW5nID0gc2hvcnRPdXQoYmFzZVNldFRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb1N0cmluZztcbiIsIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG9ydE91dDtcbiIsInZhciBhc2NpaVRvQXJyYXkgPSByZXF1aXJlKCcuL19hc2NpaVRvQXJyYXknKSxcbiAgICBoYXNVbmljb2RlID0gcmVxdWlyZSgnLi9faGFzVW5pY29kZScpLFxuICAgIHVuaWNvZGVUb0FycmF5ID0gcmVxdWlyZSgnLi9fdW5pY29kZVRvQXJyYXknKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5nVG9BcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIGhhc1VuaWNvZGUoc3RyaW5nKVxuICAgID8gdW5pY29kZVRvQXJyYXkoc3RyaW5nKVxuICAgIDogYXNjaWlUb0FycmF5KHN0cmluZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9BcnJheTtcbiIsInZhciBtZW1vaXplQ2FwcGVkID0gcmVxdWlyZSgnLi9fbWVtb2l6ZUNhcHBlZCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9QYXRoO1xuIiwidmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcga2V5IGlmIGl0J3Mgbm90IGEgc3RyaW5nIG9yIHN5bWJvbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0tleTtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsIi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjaGFyYWN0ZXIgY2xhc3Nlcy4gKi9cbnZhciByc0FzdHJhbFJhbmdlID0gJ1xcXFx1ZDgwMC1cXFxcdWRmZmYnLFxuICAgIHJzQ29tYm9NYXJrc1JhbmdlID0gJ1xcXFx1MDMwMC1cXFxcdTAzNmYnLFxuICAgIHJlQ29tYm9IYWxmTWFya3NSYW5nZSA9ICdcXFxcdWZlMjAtXFxcXHVmZTJmJyxcbiAgICByc0NvbWJvU3ltYm9sc1JhbmdlID0gJ1xcXFx1MjBkMC1cXFxcdTIwZmYnLFxuICAgIHJzQ29tYm9SYW5nZSA9IHJzQ29tYm9NYXJrc1JhbmdlICsgcmVDb21ib0hhbGZNYXJrc1JhbmdlICsgcnNDb21ib1N5bWJvbHNSYW5nZSxcbiAgICByc1ZhclJhbmdlID0gJ1xcXFx1ZmUwZVxcXFx1ZmUwZic7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSBjYXB0dXJlIGdyb3Vwcy4gKi9cbnZhciByc0FzdHJhbCA9ICdbJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgcnNDb21ibyA9ICdbJyArIHJzQ29tYm9SYW5nZSArICddJyxcbiAgICByc0ZpdHogPSAnXFxcXHVkODNjW1xcXFx1ZGZmYi1cXFxcdWRmZmZdJyxcbiAgICByc01vZGlmaWVyID0gJyg/OicgKyByc0NvbWJvICsgJ3wnICsgcnNGaXR6ICsgJyknLFxuICAgIHJzTm9uQXN0cmFsID0gJ1teJyArIHJzQXN0cmFsUmFuZ2UgKyAnXScsXG4gICAgcnNSZWdpb25hbCA9ICcoPzpcXFxcdWQ4M2NbXFxcXHVkZGU2LVxcXFx1ZGRmZl0pezJ9JyxcbiAgICByc1N1cnJQYWlyID0gJ1tcXFxcdWQ4MDAtXFxcXHVkYmZmXVtcXFxcdWRjMDAtXFxcXHVkZmZmXScsXG4gICAgcnNaV0ogPSAnXFxcXHUyMDBkJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIHJlZ2V4ZXMuICovXG52YXIgcmVPcHRNb2QgPSByc01vZGlmaWVyICsgJz8nLFxuICAgIHJzT3B0VmFyID0gJ1snICsgcnNWYXJSYW5nZSArICddPycsXG4gICAgcnNPcHRKb2luID0gJyg/OicgKyByc1pXSiArICcoPzonICsgW3JzTm9uQXN0cmFsLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyXS5qb2luKCd8JykgKyAnKScgKyByc09wdFZhciArIHJlT3B0TW9kICsgJykqJyxcbiAgICByc1NlcSA9IHJzT3B0VmFyICsgcmVPcHRNb2QgKyByc09wdEpvaW4sXG4gICAgcnNTeW1ib2wgPSAnKD86JyArIFtyc05vbkFzdHJhbCArIHJzQ29tYm8gKyAnPycsIHJzQ29tYm8sIHJzUmVnaW9uYWwsIHJzU3VyclBhaXIsIHJzQXN0cmFsXS5qb2luKCd8JykgKyAnKSc7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIFtzdHJpbmcgc3ltYm9sc10oaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtdW5pY29kZSkuICovXG52YXIgcmVVbmljb2RlID0gUmVnRXhwKHJzRml0eiArICcoPz0nICsgcnNGaXR6ICsgJyl8JyArIHJzU3ltYm9sICsgcnNTZXEsICdnJyk7XG5cbi8qKlxuICogQ29udmVydHMgYSBVbmljb2RlIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiB1bmljb2RlVG9BcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5tYXRjaChyZVVuaWNvZGUpIHx8IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVuaWNvZGVUb0FycmF5O1xuIiwidmFyIExhenlXcmFwcGVyID0gcmVxdWlyZSgnLi9fTGF6eVdyYXBwZXInKSxcbiAgICBMb2Rhc2hXcmFwcGVyID0gcmVxdWlyZSgnLi9fTG9kYXNoV3JhcHBlcicpLFxuICAgIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiBgd3JhcHBlcmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB3cmFwcGVyIFRoZSB3cmFwcGVyIHRvIGNsb25lLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHdyYXBwZXIuXG4gKi9cbmZ1bmN0aW9uIHdyYXBwZXJDbG9uZSh3cmFwcGVyKSB7XG4gIGlmICh3cmFwcGVyIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICByZXR1cm4gd3JhcHBlci5jbG9uZSgpO1xuICB9XG4gIHZhciByZXN1bHQgPSBuZXcgTG9kYXNoV3JhcHBlcih3cmFwcGVyLl9fd3JhcHBlZF9fLCB3cmFwcGVyLl9fY2hhaW5fXyk7XG4gIHJlc3VsdC5fX2FjdGlvbnNfXyA9IGNvcHlBcnJheSh3cmFwcGVyLl9fYWN0aW9uc19fKTtcbiAgcmVzdWx0Ll9faW5kZXhfXyAgPSB3cmFwcGVyLl9faW5kZXhfXztcbiAgcmVzdWx0Ll9fdmFsdWVzX18gPSB3cmFwcGVyLl9fdmFsdWVzX187XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd3JhcHBlckNsb25lO1xuIiwidmFyIGxvZGFzaCA9IHJlcXVpcmUoJy4vd3JhcHBlckxvZGFzaCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlIHRoYXQgd3JhcHMgYHZhbHVlYCB3aXRoIGV4cGxpY2l0IG1ldGhvZFxuICogY2hhaW4gc2VxdWVuY2VzIGVuYWJsZWQuIFRoZSByZXN1bHQgb2Ygc3VjaCBzZXF1ZW5jZXMgbXVzdCBiZSB1bndyYXBwZWRcbiAqIHdpdGggYF8jdmFsdWVgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMS4zLjBcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWdlJzogMzYgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwIH0sXG4gKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxIH1cbiAqIF07XG4gKlxuICogdmFyIHlvdW5nZXN0ID0gX1xuICogICAuY2hhaW4odXNlcnMpXG4gKiAgIC5zb3J0QnkoJ2FnZScpXG4gKiAgIC5tYXAoZnVuY3Rpb24obykge1xuICogICAgIHJldHVybiBvLnVzZXIgKyAnIGlzICcgKyBvLmFnZTtcbiAqICAgfSlcbiAqICAgLmhlYWQoKVxuICogICAudmFsdWUoKTtcbiAqIC8vID0+ICdwZWJibGVzIGlzIDEnXG4gKi9cbmZ1bmN0aW9uIGNoYWluKHZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSBsb2Rhc2godmFsdWUpO1xuICByZXN1bHQuX19jaGFpbl9fID0gdHJ1ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjaGFpbjtcbiIsInZhciBMb2Rhc2hXcmFwcGVyID0gcmVxdWlyZSgnLi9fTG9kYXNoV3JhcHBlcicpO1xuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBjaGFpbiBzZXF1ZW5jZSBhbmQgcmV0dXJucyB0aGUgd3JhcHBlZCByZXN1bHQuXG4gKlxuICogQG5hbWUgY29tbWl0XG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMi4wXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFycmF5ID0gWzEsIDJdO1xuICogdmFyIHdyYXBwZWQgPSBfKGFycmF5KS5wdXNoKDMpO1xuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHdyYXBwZWQgPSB3cmFwcGVkLmNvbW1pdCgpO1xuICogY29uc29sZS5sb2coYXJyYXkpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKlxuICogd3JhcHBlZC5sYXN0KCk7XG4gKiAvLyA9PiAzXG4gKlxuICogY29uc29sZS5sb2coYXJyYXkpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKi9cbmZ1bmN0aW9uIHdyYXBwZXJDb21taXQoKSB7XG4gIHJldHVybiBuZXcgTG9kYXNoV3JhcHBlcih0aGlzLnZhbHVlKCksIHRoaXMuX19jaGFpbl9fKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3cmFwcGVyQ29tbWl0O1xuIiwiLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGB2YWx1ZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHJldHVybiBmcm9tIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xuICpcbiAqIGNvbnNvbGUubG9nKG9iamVjdHMpO1xuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0c1swXSA9PT0gb2JqZWN0c1sxXSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGNvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29uc3RhbnQ7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsInZhciBiYXNlRmxhdHRlbiA9IHJlcXVpcmUoJy4vX2Jhc2VGbGF0dGVuJyk7XG5cbi8qKlxuICogRmxhdHRlbnMgYGFycmF5YCBhIHNpbmdsZSBsZXZlbCBkZWVwLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGZsYXR0ZW4uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmbGF0dGVuZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZmxhdHRlbihbMSwgWzIsIFszLCBbNF1dLCA1XV0pO1xuICogLy8gPT4gWzEsIDIsIFszLCBbNF1dLCA1XVxuICovXG5mdW5jdGlvbiBmbGF0dGVuKGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuIGxlbmd0aCA/IGJhc2VGbGF0dGVuKGFycmF5LCAxKSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW47XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjcuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldDtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLCJ2YXIgYmFzZUlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9fYmFzZUlzQXJndW1lbnRzJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcmd1bWVudHM7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5O1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2U7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGVuZ3RoO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3RyaW5nYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3RyaW5nLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTdHJpbmcoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTdHJpbmcoMSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8XG4gICAgKCFpc0FycmF5KHZhbHVlKSAmJiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN0cmluZ1RhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTdHJpbmc7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTeW1ib2w7XG4iLCJ2YXIgYmFzZUlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Jhc2VJc1R5cGVkQXJyYXknKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVHlwZWRBcnJheTtcbiIsInZhciBhcnJheUxpa2VLZXlzID0gcmVxdWlyZSgnLi9fYXJyYXlMaWtlS2V5cycpLFxuICAgIGJhc2VLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUtleXMnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLmtleXMobmV3IEZvbyk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogXy5rZXlzKCdoaScpO1xuICogLy8gPT4gWycwJywgJzEnXVxuICovXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xuICByZXR1cm4gaXNBcnJheUxpa2Uob2JqZWN0KSA/IGFycmF5TGlrZUtleXMob2JqZWN0KSA6IGJhc2VLZXlzKG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ga2V5cztcbiIsInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cbnZhciBGVU5DX0VSUk9SX1RFWFQgPSAnRXhwZWN0ZWQgYSBmdW5jdGlvbic7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgbWVtb2l6ZXMgdGhlIHJlc3VsdCBvZiBgZnVuY2AuIElmIGByZXNvbHZlcmAgaXNcbiAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxuICogcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uIGlzIHVzZWQgYXMgdGhlIG1hcCBjYWNoZSBrZXkuIFRoZSBgZnVuY2BcbiAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxuICpcbiAqICoqTm90ZToqKiBUaGUgY2FjaGUgaXMgZXhwb3NlZCBhcyB0aGUgYGNhY2hlYCBwcm9wZXJ0eSBvbiB0aGUgbWVtb2l6ZWRcbiAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcbiAqIFtgTWFwYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcHJvcGVydGllcy1vZi10aGUtbWFwLXByb3RvdHlwZS1vYmplY3QpXG4gKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEsICdiJzogMiB9O1xuICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xuICpcbiAqIHZhciB2YWx1ZXMgPSBfLm1lbW9pemUoXy52YWx1ZXMpO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiB2YWx1ZXMob3RoZXIpO1xuICogLy8gPT4gWzMsIDRdXG4gKlxuICogb2JqZWN0LmEgPSAyO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbMSwgMl1cbiAqXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cbiAqIHZhbHVlcy5jYWNoZS5zZXQob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWydhJywgJ2InXVxuICpcbiAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xuICovXG5mdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cbm1lbW9pemUuQ2FjaGUgPSBNYXBDYWNoZTtcblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplO1xuIiwidmFyIHRvQXJyYXkgPSByZXF1aXJlKCcuL3RvQXJyYXknKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuZXh0IHZhbHVlIG9uIGEgd3JhcHBlZCBvYmplY3QgZm9sbG93aW5nIHRoZVxuICogW2l0ZXJhdG9yIHByb3RvY29sXShodHRwczovL21kbi5pby9pdGVyYXRpb25fcHJvdG9jb2xzI2l0ZXJhdG9yKS5cbiAqXG4gKiBAbmFtZSBuZXh0XG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXh0IGl0ZXJhdG9yIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgd3JhcHBlZCA9IF8oWzEsIDJdKTtcbiAqXG4gKiB3cmFwcGVkLm5leHQoKTtcbiAqIC8vID0+IHsgJ2RvbmUnOiBmYWxzZSwgJ3ZhbHVlJzogMSB9XG4gKlxuICogd3JhcHBlZC5uZXh0KCk7XG4gKiAvLyA9PiB7ICdkb25lJzogZmFsc2UsICd2YWx1ZSc6IDIgfVxuICpcbiAqIHdyYXBwZWQubmV4dCgpO1xuICogLy8gPT4geyAnZG9uZSc6IHRydWUsICd2YWx1ZSc6IHVuZGVmaW5lZCB9XG4gKi9cbmZ1bmN0aW9uIHdyYXBwZXJOZXh0KCkge1xuICBpZiAodGhpcy5fX3ZhbHVlc19fID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9fdmFsdWVzX18gPSB0b0FycmF5KHRoaXMudmFsdWUoKSk7XG4gIH1cbiAgdmFyIGRvbmUgPSB0aGlzLl9faW5kZXhfXyA+PSB0aGlzLl9fdmFsdWVzX18ubGVuZ3RoLFxuICAgICAgdmFsdWUgPSBkb25lID8gdW5kZWZpbmVkIDogdGhpcy5fX3ZhbHVlc19fW3RoaXMuX19pbmRleF9fKytdO1xuXG4gIHJldHVybiB7ICdkb25lJzogZG9uZSwgJ3ZhbHVlJzogdmFsdWUgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3cmFwcGVyTmV4dDtcbiIsInZhciBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpLFxuICAgIHdyYXBwZXJDbG9uZSA9IHJlcXVpcmUoJy4vX3dyYXBwZXJDbG9uZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiB0aGUgY2hhaW4gc2VxdWVuY2UgcGxhbnRpbmcgYHZhbHVlYCBhcyB0aGUgd3JhcHBlZCB2YWx1ZS5cbiAqXG4gKiBAbmFtZSBwbGFudFxuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjIuMFxuICogQGNhdGVnb3J5IFNlcVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcGxhbnQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAqICAgcmV0dXJuIG4gKiBuO1xuICogfVxuICpcbiAqIHZhciB3cmFwcGVkID0gXyhbMSwgMl0pLm1hcChzcXVhcmUpO1xuICogdmFyIG90aGVyID0gd3JhcHBlZC5wbGFudChbMywgNF0pO1xuICpcbiAqIG90aGVyLnZhbHVlKCk7XG4gKiAvLyA9PiBbOSwgMTZdXG4gKlxuICogd3JhcHBlZC52YWx1ZSgpO1xuICogLy8gPT4gWzEsIDRdXG4gKi9cbmZ1bmN0aW9uIHdyYXBwZXJQbGFudCh2YWx1ZSkge1xuICB2YXIgcmVzdWx0LFxuICAgICAgcGFyZW50ID0gdGhpcztcblxuICB3aGlsZSAocGFyZW50IGluc3RhbmNlb2YgYmFzZUxvZGFzaCkge1xuICAgIHZhciBjbG9uZSA9IHdyYXBwZXJDbG9uZShwYXJlbnQpO1xuICAgIGNsb25lLl9faW5kZXhfXyA9IDA7XG4gICAgY2xvbmUuX192YWx1ZXNfXyA9IHVuZGVmaW5lZDtcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICBwcmV2aW91cy5fX3dyYXBwZWRfXyA9IGNsb25lO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBjbG9uZTtcbiAgICB9XG4gICAgdmFyIHByZXZpb3VzID0gY2xvbmU7XG4gICAgcGFyZW50ID0gcGFyZW50Ll9fd3JhcHBlZF9fO1xuICB9XG4gIHByZXZpb3VzLl9fd3JhcHBlZF9fID0gdmFsdWU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd3JhcHBlclBsYW50O1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVSZXZlcnNlID0gYXJyYXlQcm90by5yZXZlcnNlO1xuXG4vKipcbiAqIFJldmVyc2VzIGBhcnJheWAgc28gdGhhdCB0aGUgZmlyc3QgZWxlbWVudCBiZWNvbWVzIHRoZSBsYXN0LCB0aGUgc2Vjb25kXG4gKiBlbGVtZW50IGJlY29tZXMgdGhlIHNlY29uZCB0byBsYXN0LCBhbmQgc28gb24uXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYGFycmF5YCBhbmQgaXMgYmFzZWQgb25cbiAqIFtgQXJyYXkjcmV2ZXJzZWBdKGh0dHBzOi8vbWRuLmlvL0FycmF5L3JldmVyc2UpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXkgPSBbMSwgMiwgM107XG4gKlxuICogXy5yZXZlcnNlKGFycmF5KTtcbiAqIC8vID0+IFszLCAyLCAxXVxuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAqIC8vID0+IFszLCAyLCAxXVxuICovXG5mdW5jdGlvbiByZXZlcnNlKGFycmF5KSB7XG4gIHJldHVybiBhcnJheSA9PSBudWxsID8gYXJyYXkgOiBuYXRpdmVSZXZlcnNlLmNhbGwoYXJyYXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJldmVyc2U7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgJ2F0JzogcmVxdWlyZSgnLi93cmFwcGVyQXQnKSxcbiAgJ2NoYWluJzogcmVxdWlyZSgnLi9jaGFpbicpLFxuICAnY29tbWl0JzogcmVxdWlyZSgnLi9jb21taXQnKSxcbiAgJ2xvZGFzaCc6IHJlcXVpcmUoJy4vd3JhcHBlckxvZGFzaCcpLFxuICAnbmV4dCc6IHJlcXVpcmUoJy4vbmV4dCcpLFxuICAncGxhbnQnOiByZXF1aXJlKCcuL3BsYW50JyksXG4gICdyZXZlcnNlJzogcmVxdWlyZSgnLi93cmFwcGVyUmV2ZXJzZScpLFxuICAndGFwJzogcmVxdWlyZSgnLi90YXAnKSxcbiAgJ3RocnUnOiByZXF1aXJlKCcuL3RocnUnKSxcbiAgJ3RvSXRlcmF0b3InOiByZXF1aXJlKCcuL3RvSXRlcmF0b3InKSxcbiAgJ3RvSlNPTic6IHJlcXVpcmUoJy4vdG9KU09OJyksXG4gICd2YWx1ZSc6IHJlcXVpcmUoJy4vd3JhcHBlclZhbHVlJyksXG4gICd2YWx1ZU9mJzogcmVxdWlyZSgnLi92YWx1ZU9mJyksXG4gICd3cmFwcGVyQ2hhaW4nOiByZXF1aXJlKCcuL3dyYXBwZXJDaGFpbicpXG59O1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcbiAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gKi9cbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJGYWxzZTtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgaW52b2tlcyBgaW50ZXJjZXB0b3JgIGFuZCByZXR1cm5zIGB2YWx1ZWAuIFRoZSBpbnRlcmNlcHRvclxuICogaXMgaW52b2tlZCB3aXRoIG9uZSBhcmd1bWVudDsgKHZhbHVlKS4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG9cbiAqIFwidGFwIGludG9cIiBhIG1ldGhvZCBjaGFpbiBzZXF1ZW5jZSBpbiBvcmRlciB0byBtb2RpZnkgaW50ZXJtZWRpYXRlIHJlc3VsdHMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IFNlcVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvdmlkZSB0byBgaW50ZXJjZXB0b3JgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaW50ZXJjZXB0b3IgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8oWzEsIDIsIDNdKVxuICogIC50YXAoZnVuY3Rpb24oYXJyYXkpIHtcbiAqICAgIC8vIE11dGF0ZSBpbnB1dCBhcnJheS5cbiAqICAgIGFycmF5LnBvcCgpO1xuICogIH0pXG4gKiAgLnJldmVyc2UoKVxuICogIC52YWx1ZSgpO1xuICogLy8gPT4gWzIsIDFdXG4gKi9cbmZ1bmN0aW9uIHRhcCh2YWx1ZSwgaW50ZXJjZXB0b3IpIHtcbiAgaW50ZXJjZXB0b3IodmFsdWUpO1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdGFwO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLnRhcGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGBpbnRlcmNlcHRvcmAuXG4gKiBUaGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBcInBhc3MgdGhydVwiIHZhbHVlcyByZXBsYWNpbmcgaW50ZXJtZWRpYXRlXG4gKiByZXN1bHRzIGluIGEgbWV0aG9kIGNoYWluIHNlcXVlbmNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb3ZpZGUgdG8gYGludGVyY2VwdG9yYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGludGVyY2VwdG9yIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBpbnRlcmNlcHRvcmAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8oJyAgYWJjICAnKVxuICogIC5jaGFpbigpXG4gKiAgLnRyaW0oKVxuICogIC50aHJ1KGZ1bmN0aW9uKHZhbHVlKSB7XG4gKiAgICByZXR1cm4gW3ZhbHVlXTtcbiAqICB9KVxuICogIC52YWx1ZSgpO1xuICogLy8gPT4gWydhYmMnXVxuICovXG5mdW5jdGlvbiB0aHJ1KHZhbHVlLCBpbnRlcmNlcHRvcikge1xuICByZXR1cm4gaW50ZXJjZXB0b3IodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRocnU7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgY29weUFycmF5ID0gcmVxdWlyZSgnLi9fY29weUFycmF5JyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAgaXNTdHJpbmcgPSByZXF1aXJlKCcuL2lzU3RyaW5nJyksXG4gICAgaXRlcmF0b3JUb0FycmF5ID0gcmVxdWlyZSgnLi9faXRlcmF0b3JUb0FycmF5JyksXG4gICAgbWFwVG9BcnJheSA9IHJlcXVpcmUoJy4vX21hcFRvQXJyYXknKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpLFxuICAgIHN0cmluZ1RvQXJyYXkgPSByZXF1aXJlKCcuL19zdHJpbmdUb0FycmF5JyksXG4gICAgdmFsdWVzID0gcmVxdWlyZSgnLi92YWx1ZXMnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1JdGVyYXRvciA9IFN5bWJvbCA/IFN5bWJvbC5pdGVyYXRvciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9BcnJheSh7ICdhJzogMSwgJ2InOiAyIH0pO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogXy50b0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxuICpcbiAqIF8udG9BcnJheSgxKTtcbiAqIC8vID0+IFtdXG4gKlxuICogXy50b0FycmF5KG51bGwpO1xuICogLy8gPT4gW11cbiAqL1xuZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGlmIChpc0FycmF5TGlrZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gaXNTdHJpbmcodmFsdWUpID8gc3RyaW5nVG9BcnJheSh2YWx1ZSkgOiBjb3B5QXJyYXkodmFsdWUpO1xuICB9XG4gIGlmIChzeW1JdGVyYXRvciAmJiB2YWx1ZVtzeW1JdGVyYXRvcl0pIHtcbiAgICByZXR1cm4gaXRlcmF0b3JUb0FycmF5KHZhbHVlW3N5bUl0ZXJhdG9yXSgpKTtcbiAgfVxuICB2YXIgdGFnID0gZ2V0VGFnKHZhbHVlKSxcbiAgICAgIGZ1bmMgPSB0YWcgPT0gbWFwVGFnID8gbWFwVG9BcnJheSA6ICh0YWcgPT0gc2V0VGFnID8gc2V0VG9BcnJheSA6IHZhbHVlcyk7XG5cbiAgcmV0dXJuIGZ1bmModmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvQXJyYXk7XG4iLCIvKipcbiAqIEVuYWJsZXMgdGhlIHdyYXBwZXIgdG8gYmUgaXRlcmFibGUuXG4gKlxuICogQG5hbWUgU3ltYm9sLml0ZXJhdG9yXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSB3cmFwcGVyIG9iamVjdC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyXSk7XG4gKlxuICogd3JhcHBlZFtTeW1ib2wuaXRlcmF0b3JdKCkgPT09IHdyYXBwZWQ7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogQXJyYXkuZnJvbSh3cmFwcGVkKTtcbiAqIC8vID0+IFsxLCAyXVxuICovXG5mdW5jdGlvbiB3cmFwcGVyVG9JdGVyYXRvcigpIHtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gd3JhcHBlclRvSXRlcmF0b3I7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vd3JhcHBlclZhbHVlJyk7XG4iLCJ2YXIgYmFzZVRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVRvU3RyaW5nJyk7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcbiAqIGFuZCBgdW5kZWZpbmVkYCB2YWx1ZXMuIFRoZSBzaWduIG9mIGAtMGAgaXMgcHJlc2VydmVkLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b1N0cmluZyhudWxsKTtcbiAqIC8vID0+ICcnXG4gKlxuICogXy50b1N0cmluZygtMCk7XG4gKiAvLyA9PiAnLTAnXG4gKlxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xuICogLy8gPT4gJzEsMiwzJ1xuICovXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogYmFzZVRvU3RyaW5nKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1N0cmluZztcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi93cmFwcGVyVmFsdWUnKTtcbiIsInZhciBiYXNlVmFsdWVzID0gcmVxdWlyZSgnLi9fYmFzZVZhbHVlcycpLFxuICAgIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydHkgdmFsdWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgdmFsdWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBGb28oKSB7XG4gKiAgIHRoaXMuYSA9IDE7XG4gKiAgIHRoaXMuYiA9IDI7XG4gKiB9XG4gKlxuICogRm9vLnByb3RvdHlwZS5jID0gMztcbiAqXG4gKiBfLnZhbHVlcyhuZXcgRm9vKTtcbiAqIC8vID0+IFsxLCAyXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8udmFsdWVzKCdoaScpO1xuICogLy8gPT4gWydoJywgJ2knXVxuICovXG5mdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IFtdIDogYmFzZVZhbHVlcyhvYmplY3QsIGtleXMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmFsdWVzO1xuIiwidmFyIExhenlXcmFwcGVyID0gcmVxdWlyZSgnLi9fTGF6eVdyYXBwZXInKSxcbiAgICBMb2Rhc2hXcmFwcGVyID0gcmVxdWlyZSgnLi9fTG9kYXNoV3JhcHBlcicpLFxuICAgIGJhc2VBdCA9IHJlcXVpcmUoJy4vX2Jhc2VBdCcpLFxuICAgIGZsYXRSZXN0ID0gcmVxdWlyZSgnLi9fZmxhdFJlc3QnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIHRocnUgPSByZXF1aXJlKCcuL3RocnUnKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB0aGUgd3JhcHBlciB2ZXJzaW9uIG9mIGBfLmF0YC5cbiAqXG4gKiBAbmFtZSBhdFxuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAxLjAuMFxuICogQGNhdGVnb3J5IFNlcVxuICogQHBhcmFtIHsuLi4oc3RyaW5nfHN0cmluZ1tdKX0gW3BhdGhzXSBUaGUgcHJvcGVydHkgcGF0aHMgdG8gcGljay5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9LCA0XSB9O1xuICpcbiAqIF8ob2JqZWN0KS5hdChbJ2FbMF0uYi5jJywgJ2FbMV0nXSkudmFsdWUoKTtcbiAqIC8vID0+IFszLCA0XVxuICovXG52YXIgd3JhcHBlckF0ID0gZmxhdFJlc3QoZnVuY3Rpb24ocGF0aHMpIHtcbiAgdmFyIGxlbmd0aCA9IHBhdGhzLmxlbmd0aCxcbiAgICAgIHN0YXJ0ID0gbGVuZ3RoID8gcGF0aHNbMF0gOiAwLFxuICAgICAgdmFsdWUgPSB0aGlzLl9fd3JhcHBlZF9fLFxuICAgICAgaW50ZXJjZXB0b3IgPSBmdW5jdGlvbihvYmplY3QpIHsgcmV0dXJuIGJhc2VBdChvYmplY3QsIHBhdGhzKTsgfTtcblxuICBpZiAobGVuZ3RoID4gMSB8fCB0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCB8fFxuICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB8fCAhaXNJbmRleChzdGFydCkpIHtcbiAgICByZXR1cm4gdGhpcy50aHJ1KGludGVyY2VwdG9yKTtcbiAgfVxuICB2YWx1ZSA9IHZhbHVlLnNsaWNlKHN0YXJ0LCArc3RhcnQgKyAobGVuZ3RoID8gMSA6IDApKTtcbiAgdmFsdWUuX19hY3Rpb25zX18ucHVzaCh7XG4gICAgJ2Z1bmMnOiB0aHJ1LFxuICAgICdhcmdzJzogW2ludGVyY2VwdG9yXSxcbiAgICAndGhpc0FyZyc6IHVuZGVmaW5lZFxuICB9KTtcbiAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHZhbHVlLCB0aGlzLl9fY2hhaW5fXykudGhydShmdW5jdGlvbihhcnJheSkge1xuICAgIGlmIChsZW5ndGggJiYgIWFycmF5Lmxlbmd0aCkge1xuICAgICAgYXJyYXkucHVzaCh1bmRlZmluZWQpO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXk7XG4gIH0pO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gd3JhcHBlckF0O1xuIiwidmFyIGNoYWluID0gcmVxdWlyZSgnLi9jaGFpbicpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlIHdpdGggZXhwbGljaXQgbWV0aG9kIGNoYWluIHNlcXVlbmNlcyBlbmFibGVkLlxuICpcbiAqIEBuYW1lIGNoYWluXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiB9LFxuICogICB7ICd1c2VyJzogJ2ZyZWQnLCAgICdhZ2UnOiA0MCB9XG4gKiBdO1xuICpcbiAqIC8vIEEgc2VxdWVuY2Ugd2l0aG91dCBleHBsaWNpdCBjaGFpbmluZy5cbiAqIF8odXNlcnMpLmhlYWQoKTtcbiAqIC8vID0+IHsgJ3VzZXInOiAnYmFybmV5JywgJ2FnZSc6IDM2IH1cbiAqXG4gKiAvLyBBIHNlcXVlbmNlIHdpdGggZXhwbGljaXQgY2hhaW5pbmcuXG4gKiBfKHVzZXJzKVxuICogICAuY2hhaW4oKVxuICogICAuaGVhZCgpXG4gKiAgIC5waWNrKCd1c2VyJylcbiAqICAgLnZhbHVlKCk7XG4gKiAvLyA9PiB7ICd1c2VyJzogJ2Jhcm5leScgfVxuICovXG5mdW5jdGlvbiB3cmFwcGVyQ2hhaW4oKSB7XG4gIHJldHVybiBjaGFpbih0aGlzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3cmFwcGVyQ2hhaW47XG4iLCJ2YXIgTGF6eVdyYXBwZXIgPSByZXF1aXJlKCcuL19MYXp5V3JhcHBlcicpLFxuICAgIExvZGFzaFdyYXBwZXIgPSByZXF1aXJlKCcuL19Mb2Rhc2hXcmFwcGVyJyksXG4gICAgYmFzZUxvZGFzaCA9IHJlcXVpcmUoJy4vX2Jhc2VMb2Rhc2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKSxcbiAgICB3cmFwcGVyQ2xvbmUgPSByZXF1aXJlKCcuL193cmFwcGVyQ2xvbmUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgYGxvZGFzaGAgb2JqZWN0IHdoaWNoIHdyYXBzIGB2YWx1ZWAgdG8gZW5hYmxlIGltcGxpY2l0IG1ldGhvZFxuICogY2hhaW4gc2VxdWVuY2VzLiBNZXRob2RzIHRoYXQgb3BlcmF0ZSBvbiBhbmQgcmV0dXJuIGFycmF5cywgY29sbGVjdGlvbnMsXG4gKiBhbmQgZnVuY3Rpb25zIGNhbiBiZSBjaGFpbmVkIHRvZ2V0aGVyLiBNZXRob2RzIHRoYXQgcmV0cmlldmUgYSBzaW5nbGUgdmFsdWVcbiAqIG9yIG1heSByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUgd2lsbCBhdXRvbWF0aWNhbGx5IGVuZCB0aGUgY2hhaW4gc2VxdWVuY2VcbiAqIGFuZCByZXR1cm4gdGhlIHVud3JhcHBlZCB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgdmFsdWUgbXVzdCBiZSB1bndyYXBwZWRcbiAqIHdpdGggYF8jdmFsdWVgLlxuICpcbiAqIEV4cGxpY2l0IGNoYWluIHNlcXVlbmNlcywgd2hpY2ggbXVzdCBiZSB1bndyYXBwZWQgd2l0aCBgXyN2YWx1ZWAsIG1heSBiZVxuICogZW5hYmxlZCB1c2luZyBgXy5jaGFpbmAuXG4gKlxuICogVGhlIGV4ZWN1dGlvbiBvZiBjaGFpbmVkIG1ldGhvZHMgaXMgbGF6eSwgdGhhdCBpcywgaXQncyBkZWZlcnJlZCB1bnRpbFxuICogYF8jdmFsdWVgIGlzIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBjYWxsZWQuXG4gKlxuICogTGF6eSBldmFsdWF0aW9uIGFsbG93cyBzZXZlcmFsIG1ldGhvZHMgdG8gc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24uXG4gKiBTaG9ydGN1dCBmdXNpb24gaXMgYW4gb3B0aW1pemF0aW9uIHRvIG1lcmdlIGl0ZXJhdGVlIGNhbGxzOyB0aGlzIGF2b2lkc1xuICogdGhlIGNyZWF0aW9uIG9mIGludGVybWVkaWF0ZSBhcnJheXMgYW5kIGNhbiBncmVhdGx5IHJlZHVjZSB0aGUgbnVtYmVyIG9mXG4gKiBpdGVyYXRlZSBleGVjdXRpb25zLiBTZWN0aW9ucyBvZiBhIGNoYWluIHNlcXVlbmNlIHF1YWxpZnkgZm9yIHNob3J0Y3V0XG4gKiBmdXNpb24gaWYgdGhlIHNlY3Rpb24gaXMgYXBwbGllZCB0byBhbiBhcnJheSBhbmQgaXRlcmF0ZWVzIGFjY2VwdCBvbmx5XG4gKiBvbmUgYXJndW1lbnQuIFRoZSBoZXVyaXN0aWMgZm9yIHdoZXRoZXIgYSBzZWN0aW9uIHF1YWxpZmllcyBmb3Igc2hvcnRjdXRcbiAqIGZ1c2lvbiBpcyBzdWJqZWN0IHRvIGNoYW5nZS5cbiAqXG4gKiBDaGFpbmluZyBpcyBzdXBwb3J0ZWQgaW4gY3VzdG9tIGJ1aWxkcyBhcyBsb25nIGFzIHRoZSBgXyN2YWx1ZWAgbWV0aG9kIGlzXG4gKiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluY2x1ZGVkIGluIHRoZSBidWlsZC5cbiAqXG4gKiBJbiBhZGRpdGlvbiB0byBsb2Rhc2ggbWV0aG9kcywgd3JhcHBlcnMgaGF2ZSBgQXJyYXlgIGFuZCBgU3RyaW5nYCBtZXRob2RzLlxuICpcbiAqIFRoZSB3cmFwcGVyIGBBcnJheWAgbWV0aG9kcyBhcmU6XG4gKiBgY29uY2F0YCwgYGpvaW5gLCBgcG9wYCwgYHB1c2hgLCBgc2hpZnRgLCBgc29ydGAsIGBzcGxpY2VgLCBhbmQgYHVuc2hpZnRgXG4gKlxuICogVGhlIHdyYXBwZXIgYFN0cmluZ2AgbWV0aG9kcyBhcmU6XG4gKiBgcmVwbGFjZWAgYW5kIGBzcGxpdGBcbiAqXG4gKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgc3VwcG9ydCBzaG9ydGN1dCBmdXNpb24gYXJlOlxuICogYGF0YCwgYGNvbXBhY3RgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZHJvcFdoaWxlYCwgYGZpbHRlcmAsIGBmaW5kYCxcbiAqIGBmaW5kTGFzdGAsIGBoZWFkYCwgYGluaXRpYWxgLCBgbGFzdGAsIGBtYXBgLCBgcmVqZWN0YCwgYHJldmVyc2VgLCBgc2xpY2VgLFxuICogYHRhaWxgLCBgdGFrZWAsIGB0YWtlUmlnaHRgLCBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYW5kIGB0b0FycmF5YFxuICpcbiAqIFRoZSBjaGFpbmFibGUgd3JhcHBlciBtZXRob2RzIGFyZTpcbiAqIGBhZnRlcmAsIGBhcnlgLCBgYXNzaWduYCwgYGFzc2lnbkluYCwgYGFzc2lnbkluV2l0aGAsIGBhc3NpZ25XaXRoYCwgYGF0YCxcbiAqIGBiZWZvcmVgLCBgYmluZGAsIGBiaW5kQWxsYCwgYGJpbmRLZXlgLCBgY2FzdEFycmF5YCwgYGNoYWluYCwgYGNodW5rYCxcbiAqIGBjb21taXRgLCBgY29tcGFjdGAsIGBjb25jYXRgLCBgY29uZm9ybXNgLCBgY29uc3RhbnRgLCBgY291bnRCeWAsIGBjcmVhdGVgLFxuICogYGN1cnJ5YCwgYGRlYm91bmNlYCwgYGRlZmF1bHRzYCwgYGRlZmF1bHRzRGVlcGAsIGBkZWZlcmAsIGBkZWxheWAsXG4gKiBgZGlmZmVyZW5jZWAsIGBkaWZmZXJlbmNlQnlgLCBgZGlmZmVyZW5jZVdpdGhgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLFxuICogYGRyb3BSaWdodFdoaWxlYCwgYGRyb3BXaGlsZWAsIGBleHRlbmRgLCBgZXh0ZW5kV2l0aGAsIGBmaWxsYCwgYGZpbHRlcmAsXG4gKiBgZmxhdE1hcGAsIGBmbGF0TWFwRGVlcGAsIGBmbGF0TWFwRGVwdGhgLCBgZmxhdHRlbmAsIGBmbGF0dGVuRGVlcGAsXG4gKiBgZmxhdHRlbkRlcHRoYCwgYGZsaXBgLCBgZmxvd2AsIGBmbG93UmlnaHRgLCBgZnJvbVBhaXJzYCwgYGZ1bmN0aW9uc2AsXG4gKiBgZnVuY3Rpb25zSW5gLCBgZ3JvdXBCeWAsIGBpbml0aWFsYCwgYGludGVyc2VjdGlvbmAsIGBpbnRlcnNlY3Rpb25CeWAsXG4gKiBgaW50ZXJzZWN0aW9uV2l0aGAsIGBpbnZlcnRgLCBgaW52ZXJ0QnlgLCBgaW52b2tlTWFwYCwgYGl0ZXJhdGVlYCwgYGtleUJ5YCxcbiAqIGBrZXlzYCwgYGtleXNJbmAsIGBtYXBgLCBgbWFwS2V5c2AsIGBtYXBWYWx1ZXNgLCBgbWF0Y2hlc2AsIGBtYXRjaGVzUHJvcGVydHlgLFxuICogYG1lbW9pemVgLCBgbWVyZ2VgLCBgbWVyZ2VXaXRoYCwgYG1ldGhvZGAsIGBtZXRob2RPZmAsIGBtaXhpbmAsIGBuZWdhdGVgLFxuICogYG50aEFyZ2AsIGBvbWl0YCwgYG9taXRCeWAsIGBvbmNlYCwgYG9yZGVyQnlgLCBgb3ZlcmAsIGBvdmVyQXJnc2AsXG4gKiBgb3ZlckV2ZXJ5YCwgYG92ZXJTb21lYCwgYHBhcnRpYWxgLCBgcGFydGlhbFJpZ2h0YCwgYHBhcnRpdGlvbmAsIGBwaWNrYCxcbiAqIGBwaWNrQnlgLCBgcGxhbnRgLCBgcHJvcGVydHlgLCBgcHJvcGVydHlPZmAsIGBwdWxsYCwgYHB1bGxBbGxgLCBgcHVsbEFsbEJ5YCxcbiAqIGBwdWxsQWxsV2l0aGAsIGBwdWxsQXRgLCBgcHVzaGAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlYXJnYCwgYHJlamVjdGAsXG4gKiBgcmVtb3ZlYCwgYHJlc3RgLCBgcmV2ZXJzZWAsIGBzYW1wbGVTaXplYCwgYHNldGAsIGBzZXRXaXRoYCwgYHNodWZmbGVgLFxuICogYHNsaWNlYCwgYHNvcnRgLCBgc29ydEJ5YCwgYHNwbGljZWAsIGBzcHJlYWRgLCBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsXG4gKiBgdGFrZVJpZ2h0V2hpbGVgLCBgdGFrZVdoaWxlYCwgYHRhcGAsIGB0aHJvdHRsZWAsIGB0aHJ1YCwgYHRvQXJyYXlgLFxuICogYHRvUGFpcnNgLCBgdG9QYWlyc0luYCwgYHRvUGF0aGAsIGB0b1BsYWluT2JqZWN0YCwgYHRyYW5zZm9ybWAsIGB1bmFyeWAsXG4gKiBgdW5pb25gLCBgdW5pb25CeWAsIGB1bmlvbldpdGhgLCBgdW5pcWAsIGB1bmlxQnlgLCBgdW5pcVdpdGhgLCBgdW5zZXRgLFxuICogYHVuc2hpZnRgLCBgdW56aXBgLCBgdW56aXBXaXRoYCwgYHVwZGF0ZWAsIGB1cGRhdGVXaXRoYCwgYHZhbHVlc2AsXG4gKiBgdmFsdWVzSW5gLCBgd2l0aG91dGAsIGB3cmFwYCwgYHhvcmAsIGB4b3JCeWAsIGB4b3JXaXRoYCwgYHppcGAsXG4gKiBgemlwT2JqZWN0YCwgYHppcE9iamVjdERlZXBgLCBhbmQgYHppcFdpdGhgXG4gKlxuICogVGhlIHdyYXBwZXIgbWV0aG9kcyB0aGF0IGFyZSAqKm5vdCoqIGNoYWluYWJsZSBieSBkZWZhdWx0IGFyZTpcbiAqIGBhZGRgLCBgYXR0ZW1wdGAsIGBjYW1lbENhc2VgLCBgY2FwaXRhbGl6ZWAsIGBjZWlsYCwgYGNsYW1wYCwgYGNsb25lYCxcbiAqIGBjbG9uZURlZXBgLCBgY2xvbmVEZWVwV2l0aGAsIGBjbG9uZVdpdGhgLCBgY29uZm9ybXNUb2AsIGBkZWJ1cnJgLFxuICogYGRlZmF1bHRUb2AsIGBkaXZpZGVgLCBgZWFjaGAsIGBlYWNoUmlnaHRgLCBgZW5kc1dpdGhgLCBgZXFgLCBgZXNjYXBlYCxcbiAqIGBlc2NhcGVSZWdFeHBgLCBgZXZlcnlgLCBgZmluZGAsIGBmaW5kSW5kZXhgLCBgZmluZEtleWAsIGBmaW5kTGFzdGAsXG4gKiBgZmluZExhc3RJbmRleGAsIGBmaW5kTGFzdEtleWAsIGBmaXJzdGAsIGBmbG9vcmAsIGBmb3JFYWNoYCwgYGZvckVhY2hSaWdodGAsXG4gKiBgZm9ySW5gLCBgZm9ySW5SaWdodGAsIGBmb3JPd25gLCBgZm9yT3duUmlnaHRgLCBgZ2V0YCwgYGd0YCwgYGd0ZWAsIGBoYXNgLFxuICogYGhhc0luYCwgYGhlYWRgLCBgaWRlbnRpdHlgLCBgaW5jbHVkZXNgLCBgaW5kZXhPZmAsIGBpblJhbmdlYCwgYGludm9rZWAsXG4gKiBgaXNBcmd1bWVudHNgLCBgaXNBcnJheWAsIGBpc0FycmF5QnVmZmVyYCwgYGlzQXJyYXlMaWtlYCwgYGlzQXJyYXlMaWtlT2JqZWN0YCxcbiAqIGBpc0Jvb2xlYW5gLCBgaXNCdWZmZXJgLCBgaXNEYXRlYCwgYGlzRWxlbWVudGAsIGBpc0VtcHR5YCwgYGlzRXF1YWxgLFxuICogYGlzRXF1YWxXaXRoYCwgYGlzRXJyb3JgLCBgaXNGaW5pdGVgLCBgaXNGdW5jdGlvbmAsIGBpc0ludGVnZXJgLCBgaXNMZW5ndGhgLFxuICogYGlzTWFwYCwgYGlzTWF0Y2hgLCBgaXNNYXRjaFdpdGhgLCBgaXNOYU5gLCBgaXNOYXRpdmVgLCBgaXNOaWxgLCBgaXNOdWxsYCxcbiAqIGBpc051bWJlcmAsIGBpc09iamVjdGAsIGBpc09iamVjdExpa2VgLCBgaXNQbGFpbk9iamVjdGAsIGBpc1JlZ0V4cGAsXG4gKiBgaXNTYWZlSW50ZWdlcmAsIGBpc1NldGAsIGBpc1N0cmluZ2AsIGBpc1VuZGVmaW5lZGAsIGBpc1R5cGVkQXJyYXlgLFxuICogYGlzV2Vha01hcGAsIGBpc1dlYWtTZXRgLCBgam9pbmAsIGBrZWJhYkNhc2VgLCBgbGFzdGAsIGBsYXN0SW5kZXhPZmAsXG4gKiBgbG93ZXJDYXNlYCwgYGxvd2VyRmlyc3RgLCBgbHRgLCBgbHRlYCwgYG1heGAsIGBtYXhCeWAsIGBtZWFuYCwgYG1lYW5CeWAsXG4gKiBgbWluYCwgYG1pbkJ5YCwgYG11bHRpcGx5YCwgYG5vQ29uZmxpY3RgLCBgbm9vcGAsIGBub3dgLCBgbnRoYCwgYHBhZGAsXG4gKiBgcGFkRW5kYCwgYHBhZFN0YXJ0YCwgYHBhcnNlSW50YCwgYHBvcGAsIGByYW5kb21gLCBgcmVkdWNlYCwgYHJlZHVjZVJpZ2h0YCxcbiAqIGByZXBlYXRgLCBgcmVzdWx0YCwgYHJvdW5kYCwgYHJ1bkluQ29udGV4dGAsIGBzYW1wbGVgLCBgc2hpZnRgLCBgc2l6ZWAsXG4gKiBgc25ha2VDYXNlYCwgYHNvbWVgLCBgc29ydGVkSW5kZXhgLCBgc29ydGVkSW5kZXhCeWAsIGBzb3J0ZWRMYXN0SW5kZXhgLFxuICogYHNvcnRlZExhc3RJbmRleEJ5YCwgYHN0YXJ0Q2FzZWAsIGBzdGFydHNXaXRoYCwgYHN0dWJBcnJheWAsIGBzdHViRmFsc2VgLFxuICogYHN0dWJPYmplY3RgLCBgc3R1YlN0cmluZ2AsIGBzdHViVHJ1ZWAsIGBzdWJ0cmFjdGAsIGBzdW1gLCBgc3VtQnlgLFxuICogYHRlbXBsYXRlYCwgYHRpbWVzYCwgYHRvRmluaXRlYCwgYHRvSW50ZWdlcmAsIGB0b0pTT05gLCBgdG9MZW5ndGhgLFxuICogYHRvTG93ZXJgLCBgdG9OdW1iZXJgLCBgdG9TYWZlSW50ZWdlcmAsIGB0b1N0cmluZ2AsIGB0b1VwcGVyYCwgYHRyaW1gLFxuICogYHRyaW1FbmRgLCBgdHJpbVN0YXJ0YCwgYHRydW5jYXRlYCwgYHVuZXNjYXBlYCwgYHVuaXF1ZUlkYCwgYHVwcGVyQ2FzZWAsXG4gKiBgdXBwZXJGaXJzdGAsIGB2YWx1ZWAsIGFuZCBgd29yZHNgXG4gKlxuICogQG5hbWUgX1xuICogQGNvbnN0cnVjdG9yXG4gKiBAY2F0ZWdvcnkgU2VxXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwIGluIGEgYGxvZGFzaGAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgYGxvZGFzaGAgd3JhcHBlciBpbnN0YW5jZS5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gc3F1YXJlKG4pIHtcbiAqICAgcmV0dXJuIG4gKiBuO1xuICogfVxuICpcbiAqIHZhciB3cmFwcGVkID0gXyhbMSwgMiwgM10pO1xuICpcbiAqIC8vIFJldHVybnMgYW4gdW53cmFwcGVkIHZhbHVlLlxuICogd3JhcHBlZC5yZWR1Y2UoXy5hZGQpO1xuICogLy8gPT4gNlxuICpcbiAqIC8vIFJldHVybnMgYSB3cmFwcGVkIHZhbHVlLlxuICogdmFyIHNxdWFyZXMgPSB3cmFwcGVkLm1hcChzcXVhcmUpO1xuICpcbiAqIF8uaXNBcnJheShzcXVhcmVzKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KHNxdWFyZXMudmFsdWUoKSk7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGxvZGFzaCh2YWx1ZSkge1xuICBpZiAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNBcnJheSh2YWx1ZSkgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIExvZGFzaFdyYXBwZXIpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdfX3dyYXBwZWRfXycpKSB7XG4gICAgICByZXR1cm4gd3JhcHBlckNsb25lKHZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHZhbHVlKTtcbn1cblxuLy8gRW5zdXJlIHdyYXBwZXJzIGFyZSBpbnN0YW5jZXMgb2YgYGJhc2VMb2Rhc2hgLlxubG9kYXNoLnByb3RvdHlwZSA9IGJhc2VMb2Rhc2gucHJvdG90eXBlO1xubG9kYXNoLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGxvZGFzaDtcblxubW9kdWxlLmV4cG9ydHMgPSBsb2Rhc2g7XG4iLCJ2YXIgTGF6eVdyYXBwZXIgPSByZXF1aXJlKCcuL19MYXp5V3JhcHBlcicpLFxuICAgIExvZGFzaFdyYXBwZXIgPSByZXF1aXJlKCcuL19Mb2Rhc2hXcmFwcGVyJyksXG4gICAgcmV2ZXJzZSA9IHJlcXVpcmUoJy4vcmV2ZXJzZScpLFxuICAgIHRocnUgPSByZXF1aXJlKCcuL3RocnUnKTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB0aGUgd3JhcHBlciB2ZXJzaW9uIG9mIGBfLnJldmVyc2VgLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBtdXRhdGVzIHRoZSB3cmFwcGVkIGFycmF5LlxuICpcbiAqIEBuYW1lIHJldmVyc2VcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXkgPSBbMSwgMiwgM107XG4gKlxuICogXyhhcnJheSkucmV2ZXJzZSgpLnZhbHVlKClcbiAqIC8vID0+IFszLCAyLCAxXVxuICpcbiAqIGNvbnNvbGUubG9nKGFycmF5KTtcbiAqIC8vID0+IFszLCAyLCAxXVxuICovXG5mdW5jdGlvbiB3cmFwcGVyUmV2ZXJzZSgpIHtcbiAgdmFyIHZhbHVlID0gdGhpcy5fX3dyYXBwZWRfXztcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpIHtcbiAgICB2YXIgd3JhcHBlZCA9IHZhbHVlO1xuICAgIGlmICh0aGlzLl9fYWN0aW9uc19fLmxlbmd0aCkge1xuICAgICAgd3JhcHBlZCA9IG5ldyBMYXp5V3JhcHBlcih0aGlzKTtcbiAgICB9XG4gICAgd3JhcHBlZCA9IHdyYXBwZWQucmV2ZXJzZSgpO1xuICAgIHdyYXBwZWQuX19hY3Rpb25zX18ucHVzaCh7XG4gICAgICAnZnVuYyc6IHRocnUsXG4gICAgICAnYXJncyc6IFtyZXZlcnNlXSxcbiAgICAgICd0aGlzQXJnJzogdW5kZWZpbmVkXG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBMb2Rhc2hXcmFwcGVyKHdyYXBwZWQsIHRoaXMuX19jaGFpbl9fKTtcbiAgfVxuICByZXR1cm4gdGhpcy50aHJ1KHJldmVyc2UpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXBwZXJSZXZlcnNlO1xuIiwidmFyIGJhc2VXcmFwcGVyVmFsdWUgPSByZXF1aXJlKCcuL19iYXNlV3JhcHBlclZhbHVlJyk7XG5cbi8qKlxuICogRXhlY3V0ZXMgdGhlIGNoYWluIHNlcXVlbmNlIHRvIHJlc29sdmUgdGhlIHVud3JhcHBlZCB2YWx1ZS5cbiAqXG4gKiBAbmFtZSB2YWx1ZVxuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGFsaWFzIHRvSlNPTiwgdmFsdWVPZlxuICogQGNhdGVnb3J5IFNlcVxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHVud3JhcHBlZCB2YWx1ZS5cbiAqIEBleGFtcGxlXG4gKlxuICogXyhbMSwgMiwgM10pLnZhbHVlKCk7XG4gKiAvLyA9PiBbMSwgMiwgM11cbiAqL1xuZnVuY3Rpb24gd3JhcHBlclZhbHVlKCkge1xuICByZXR1cm4gYmFzZVdyYXBwZXJWYWx1ZSh0aGlzLl9fd3JhcHBlZF9fLCB0aGlzLl9fYWN0aW9uc19fKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3cmFwcGVyVmFsdWU7XG4iLCJsZXQgdGJvZHlzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ0Ym9keVwiKTtcclxuQXJyYXkuZnJvbSh0Ym9keXMpLmZvckVhY2godGJvZHk9PntcclxuICAgIEFycmF5LmZyb20odGJvZHkuY2hpbGRyZW4pLmZvckVhY2godHI9PntcclxuICAgICAgICBBcnJheS5mcm9tKHRyLmNoaWxkcmVuKS5mb3JFYWNoKCh0ZCxpbmRleCk9PntcclxuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwKXRkLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCdub3RyYW5zbGF0ZScpXHJcblxyXG4gICAgICAgIH0pXHJcbiAgICB9KVxyXG59KVxyXG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcImxpe1xcclxcbiAgICBsaXN0LXN0eWxlOiBub25lO1xcclxcbn1cXHJcXG5cXHJcXG4uaGVhZGVyICBhe1xcclxcbiAgICBjb2xvcjpibGFjaztcXHJcXG4gICAgZm9udC1mYW1pbHk6ICdVYnVudHUgTW9ubyc7XFxyXFxufVxcclxcblxcclxcbmF7XFxyXFxuICAgIGNvbG9yOmJsYWNrO1xcclxcbiAgICBmb250LWZhbWlseTogJ1VidW50dSBNb25vJztcXHJcXG59XFxyXFxuLnNlbGVjdERvbSBhe1xcclxcbiAgICBjb2xvcjogYmxhY2s7XFxyXFxufVxcclxcbi5vcmlnaW5hbFRleHR7XFxyXFxuICAgIGRpc3BsYXk6IG5vbmU7XFxyXFxuICAgIG1hcmdpbjogMDtcXHJcXG59XFxyXFxuLnBsLXRva2VuIHtcXHJcXG4gICAgYmFja2dyb3VuZDogI2ZmZWE3ZjtcXHJcXG4gICAgLypwYWRkaW5nOiAxcHggMCA7Ki9cXHJcXG5cXHJcXG59XFxyXFxuLnBsLXRva2VuID4gYXtcXHJcXG4gICAgYmFja2dyb3VuZDogI2ZmZWE3ZjtcXHJcXG4gICAgY29sb3I6ICMwMDA7XFxyXFxufVxcclxcblxcclxcbi5zdXNwZW5zaW9uIHtcXHJcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcclxcbiAgICB3aWR0aDogYXV0bztcXHJcXG4gICAgaGVpZ2h0OiBhdXRvO1xcclxcbiAgICB6LWluZGV4Ojk5OTk5OTtcXHJcXG4gICAgbGVmdDowcHg7XFxyXFxuICAgIHRvcDoxMDAlO1xcclxcbiAgICBwYWRkaW5nOiAxMHB4O1xcclxcbiAgICBmb250LXNpemU6IDE0cHg7XFxyXFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxyXFxuICAgIGJveC1zaGFkb3c6IDJweCAycHggMnB4ICM4ODg4ODg7XFxyXFxuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcXHJcXG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDAuMjV0dXJuLCAjYTljM2Q3LCAjZDJiYmEzKTtcXHJcXG4gICAgY29sb3I6ICMwMDA7XFxyXFxuICAgIGZvbnQtZmFtaWx5OiAnR2VvcmdpYSc7XFxyXFxufVxcclxcbi5zdXNwZW5zaW9uIHB7XFxyXFxuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwLjI1dHVybiwgI2E5YzNkNywgI2QyYmJhMykhaW1wb3J0YW50O1xcclxcbiAgICBjb2xvcjogIzAwMCAhaW1wb3J0YW50O1xcclxcbiAgICBmb250LWZhbWlseTogJ0dlb3JnaWEnO1xcclxcbn1cXHJcXG5cXHJcXG4uc3VzcGVuc2lvbiBhe1xcclxcbiAgICBjb2xvcjogIzAwMDtcXHJcXG4gICAgZm9udC1zaXplOiAxNHB4O1xcclxcbiAgICBmb250LXdlaWdodDogNTAwO1xcclxcbiAgICBmb250LWZhbWlseTogJ0dlb3JnaWEnO1xcclxcbn1cXHJcXG4uaG92ZXJlbGV7XFxyXFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG5cXHJcXG4gICAgY29sb3I6ICMwMDA7XFxyXFxufVxcclxcbi5ob3ZlcmVsZSBhe1xcclxcbiAgICBjb2xvcjogIzAwMCFpbXBvcnRhbnQ7XFxyXFxufVxcclxcbnByZXtcXHJcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXHJcXG4gICAgd29yZC13cmFwOiBicmVhay13b3JkO1xcclxcbn1cXHJcXG5we1xcclxcbiAgICBjb2xvcjogYmxhY2s7XFxyXFxuICAgIGZvbnQtZmFtaWx5OiAnR2VvcmdpYScgIWltcG9ydGFudDtcXHJcXG4gICAgd29yZC13cmFwOiBicmVhay13b3JkO1xcclxcbn1cXHJcXG5cXHJcXG4uc2hvd3tcXHJcXG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcXHJcXG4gICAgb3BhY2l0eTogMTtcXHJcXG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgbGluZWFyO1xcclxcbn1cXHJcXG5cXHJcXG4uaGlkZGVue1xcclxcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XFxyXFxuICAgIG9wYWNpdHk6IDA7XFxyXFxufVxcclxcblxcclxcbiN0b2MxIGF7XFxyXFxuICAgIGRpc3BsYXk6IGJsb2NrO1xcclxcbiAgICB0ZXh0LWRlY29yYXRpb246bm9uZTtcXHJcXG59XFxyXFxuXFxyXFxuLmZtLWNvZGUtbGlzdGluZy1jYXB0aW9ue1xcclxcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcclxcbn1cXHJcXG4gLnByZTEsICAucHJlMiwgIC5wcmV7XFxyXFxuICAgIGJhY2tncm91bmQ6IHdoaXRlICFpbXBvcnRhbnQ7XFxyXFxuICAgIGZvbnQtc2l6ZTogMTRweDtcXHJcXG4gICAgcGFkZGluZzogNXB4O1xcclxcbn1cXHJcXG5cXHJcXG4jc2JvLXJ0LWNvbnRlbnR7XFxyXFxuICAgICAgbWF4LXdpZHRoOiAxMDAlIWltcG9ydGFudDtcXHJcXG4gIH1cXHJcXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zcmMvY3NzL2NvbW1vbi5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7SUFDSSxnQkFBZ0I7QUFDcEI7O0FBRUE7SUFDSSxXQUFXO0lBQ1gsMEJBQTBCO0FBQzlCOztBQUVBO0lBQ0ksV0FBVztJQUNYLDBCQUEwQjtBQUM5QjtBQUNBO0lBQ0ksWUFBWTtBQUNoQjtBQUNBO0lBQ0ksYUFBYTtJQUNiLFNBQVM7QUFDYjtBQUNBO0lBQ0ksbUJBQW1CO0lBQ25CLG1CQUFtQjs7QUFFdkI7QUFDQTtJQUNJLG1CQUFtQjtJQUNuQixXQUFXO0FBQ2Y7O0FBRUE7SUFDSSxrQkFBa0I7SUFDbEIsV0FBVztJQUNYLFlBQVk7SUFDWixjQUFjO0lBQ2QsUUFBUTtJQUNSLFFBQVE7SUFDUixhQUFhO0lBQ2IsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQiwrQkFBK0I7SUFDL0Isa0JBQWtCO0lBQ2xCLHVEQUF1RDtJQUN2RCxXQUFXO0lBQ1gsc0JBQXNCO0FBQzFCO0FBQ0E7SUFDSSxpRUFBaUU7SUFDakUsc0JBQXNCO0lBQ3RCLHNCQUFzQjtBQUMxQjs7QUFFQTtJQUNJLFdBQVc7SUFDWCxlQUFlO0lBQ2YsZ0JBQWdCO0lBQ2hCLHNCQUFzQjtBQUMxQjtBQUNBO0lBQ0ksa0JBQWtCOztJQUVsQixXQUFXO0FBQ2Y7QUFDQTtJQUNJLHFCQUFxQjtBQUN6QjtBQUNBO0lBQ0ksZ0JBQWdCO0lBQ2hCLHFCQUFxQjtBQUN6QjtBQUNBO0lBQ0ksWUFBWTtJQUNaLGlDQUFpQztJQUNqQyxxQkFBcUI7QUFDekI7O0FBRUE7SUFDSSxtQkFBbUI7SUFDbkIsVUFBVTtJQUNWLDJCQUEyQjtBQUMvQjs7QUFFQTtJQUNJLGtCQUFrQjtJQUNsQixVQUFVO0FBQ2Q7O0FBRUE7SUFDSSxjQUFjO0lBQ2Qsb0JBQW9CO0FBQ3hCOztBQUVBO0lBQ0ksa0NBQWtDO0FBQ3RDO0NBQ0M7SUFDRyw0QkFBNEI7SUFDNUIsZUFBZTtJQUNmLFlBQVk7QUFDaEI7O0FBRUE7TUFDTSx5QkFBeUI7RUFDN0JcIixcInNvdXJjZXNDb250ZW50XCI6W1wibGl7XFxyXFxuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XFxyXFxufVxcclxcblxcclxcbi5oZWFkZXIgIGF7XFxyXFxuICAgIGNvbG9yOmJsYWNrO1xcclxcbiAgICBmb250LWZhbWlseTogJ1VidW50dSBNb25vJztcXHJcXG59XFxyXFxuXFxyXFxuYXtcXHJcXG4gICAgY29sb3I6YmxhY2s7XFxyXFxuICAgIGZvbnQtZmFtaWx5OiAnVWJ1bnR1IE1vbm8nO1xcclxcbn1cXHJcXG4uc2VsZWN0RG9tIGF7XFxyXFxuICAgIGNvbG9yOiBibGFjaztcXHJcXG59XFxyXFxuLm9yaWdpbmFsVGV4dHtcXHJcXG4gICAgZGlzcGxheTogbm9uZTtcXHJcXG4gICAgbWFyZ2luOiAwO1xcclxcbn1cXHJcXG4ucGwtdG9rZW4ge1xcclxcbiAgICBiYWNrZ3JvdW5kOiAjZmZlYTdmO1xcclxcbiAgICAvKnBhZGRpbmc6IDFweCAwIDsqL1xcclxcblxcclxcbn1cXHJcXG4ucGwtdG9rZW4gPiBhe1xcclxcbiAgICBiYWNrZ3JvdW5kOiAjZmZlYTdmO1xcclxcbiAgICBjb2xvcjogIzAwMDtcXHJcXG59XFxyXFxuXFxyXFxuLnN1c3BlbnNpb24ge1xcclxcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuICAgIHdpZHRoOiBhdXRvO1xcclxcbiAgICBoZWlnaHQ6IGF1dG87XFxyXFxuICAgIHotaW5kZXg6OTk5OTk5O1xcclxcbiAgICBsZWZ0OjBweDtcXHJcXG4gICAgdG9wOjEwMCU7XFxyXFxuICAgIHBhZGRpbmc6IDEwcHg7XFxyXFxuICAgIGZvbnQtc2l6ZTogMTRweDtcXHJcXG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcXHJcXG4gICAgYm94LXNoYWRvdzogMnB4IDJweCAycHggIzg4ODg4ODtcXHJcXG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xcclxcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMC4yNXR1cm4sICNhOWMzZDcsICNkMmJiYTMpO1xcclxcbiAgICBjb2xvcjogIzAwMDtcXHJcXG4gICAgZm9udC1mYW1pbHk6ICdHZW9yZ2lhJztcXHJcXG59XFxyXFxuLnN1c3BlbnNpb24gcHtcXHJcXG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDAuMjV0dXJuLCAjYTljM2Q3LCAjZDJiYmEzKSFpbXBvcnRhbnQ7XFxyXFxuICAgIGNvbG9yOiAjMDAwICFpbXBvcnRhbnQ7XFxyXFxuICAgIGZvbnQtZmFtaWx5OiAnR2VvcmdpYSc7XFxyXFxufVxcclxcblxcclxcbi5zdXNwZW5zaW9uIGF7XFxyXFxuICAgIGNvbG9yOiAjMDAwO1xcclxcbiAgICBmb250LXNpemU6IDE0cHg7XFxyXFxuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XFxyXFxuICAgIGZvbnQtZmFtaWx5OiAnR2VvcmdpYSc7XFxyXFxufVxcclxcbi5ob3ZlcmVsZXtcXHJcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcclxcblxcclxcbiAgICBjb2xvcjogIzAwMDtcXHJcXG59XFxyXFxuLmhvdmVyZWxlIGF7XFxyXFxuICAgIGNvbG9yOiAjMDAwIWltcG9ydGFudDtcXHJcXG59XFxyXFxucHJle1xcclxcbiAgICBmb250LXdlaWdodDogNTAwO1xcclxcbiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XFxyXFxufVxcclxcbnB7XFxyXFxuICAgIGNvbG9yOiBibGFjaztcXHJcXG4gICAgZm9udC1mYW1pbHk6ICdHZW9yZ2lhJyAhaW1wb3J0YW50O1xcclxcbiAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XFxyXFxufVxcclxcblxcclxcbi5zaG93e1xcclxcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xcclxcbiAgICBvcGFjaXR5OiAxO1xcclxcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBsaW5lYXI7XFxyXFxufVxcclxcblxcclxcbi5oaWRkZW57XFxyXFxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcXHJcXG4gICAgb3BhY2l0eTogMDtcXHJcXG59XFxyXFxuXFxyXFxuI3RvYzEgYXtcXHJcXG4gICAgZGlzcGxheTogYmxvY2s7XFxyXFxuICAgIHRleHQtZGVjb3JhdGlvbjpub25lO1xcclxcbn1cXHJcXG5cXHJcXG4uZm0tY29kZS1saXN0aW5nLWNhcHRpb257XFxyXFxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxyXFxufVxcclxcbiAucHJlMSwgIC5wcmUyLCAgLnByZXtcXHJcXG4gICAgYmFja2dyb3VuZDogd2hpdGUgIWltcG9ydGFudDtcXHJcXG4gICAgZm9udC1zaXplOiAxNHB4O1xcclxcbiAgICBwYWRkaW5nOiA1cHg7XFxyXFxufVxcclxcblxcclxcbiNzYm8tcnQtY29udGVudHtcXHJcXG4gICAgICBtYXgtd2lkdGg6IDEwMCUhaW1wb3J0YW50O1xcclxcbiAgfVxcclxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi5wYW5lbCB7XFxyXFxuICAgIGhlaWdodDogYXV0bztcXHJcXG4gICAgd2lkdGg6IDEwMHB4O1xcclxcbiAgICBwb3NpdGlvbjogZml4ZWQ7XFxyXFxuICAgIHRvcDogMjBweDtcXHJcXG4gICAgcmlnaHQ6IDIwcHg7XFxyXFxuICAgIHotaW5kZXg6IDk5OTk5OTtcXHJcXG4gICAgbGluZS1oZWlnaHQ6IDUwcHg7XFxyXFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXHJcXG4gICAgYmFja2dyb3VuZDogI0VFRUVFRTtcXHJcXG4gICAgYm9yZGVyOiAxcHggc29saWQgIzg3RDBGMDtcXHJcXG4gICAgYm9yZGVyLXJhZGl1czoxMiU7XFxyXFxuXFxyXFxufVxcclxcbi5zdWJQYW5lbDpub3QoLnN1YlBhbmVsOmxhc3QtY2hpbGQpe1xcclxcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzg3RDBGMDtcXHJcXG59XFxyXFxuLnN1YlBhbmVsIHtcXHJcXG4gICAgaGVpZ2h0OiAzMHB4O1xcclxcbiAgICBsaW5lLWhlaWdodDogMzBweDtcXHJcXG4gICAgZGlzcGxheTogYmxvY2s7XFxyXFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXHJcXG4gICAgZm9udC1zaXplOjEwcHg7XFxyXFxufVxcclxcblxcclxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3NyYy9jc3MvcGFuZWwuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0lBQ0ksWUFBWTtJQUNaLFlBQVk7SUFDWixlQUFlO0lBQ2YsU0FBUztJQUNULFdBQVc7SUFDWCxlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIseUJBQXlCO0lBQ3pCLGlCQUFpQjs7QUFFckI7QUFDQTtJQUNJLGdDQUFnQztBQUNwQztBQUNBO0lBQ0ksWUFBWTtJQUNaLGlCQUFpQjtJQUNqQixjQUFjO0lBQ2Qsa0JBQWtCO0lBQ2xCLGNBQWM7QUFDbEJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLnBhbmVsIHtcXHJcXG4gICAgaGVpZ2h0OiBhdXRvO1xcclxcbiAgICB3aWR0aDogMTAwcHg7XFxyXFxuICAgIHBvc2l0aW9uOiBmaXhlZDtcXHJcXG4gICAgdG9wOiAyMHB4O1xcclxcbiAgICByaWdodDogMjBweDtcXHJcXG4gICAgei1pbmRleDogOTk5OTk5O1xcclxcbiAgICBsaW5lLWhlaWdodDogNTBweDtcXHJcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcclxcbiAgICBiYWNrZ3JvdW5kOiAjRUVFRUVFO1xcclxcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjODdEMEYwO1xcclxcbiAgICBib3JkZXItcmFkaXVzOjEyJTtcXHJcXG5cXHJcXG59XFxyXFxuLnN1YlBhbmVsOm5vdCguc3ViUGFuZWw6bGFzdC1jaGlsZCl7XFxyXFxuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjODdEMEYwO1xcclxcbn1cXHJcXG4uc3ViUGFuZWwge1xcclxcbiAgICBoZWlnaHQ6IDMwcHg7XFxyXFxuICAgIGxpbmUtaGVpZ2h0OiAzMHB4O1xcclxcbiAgICBkaXNwbGF5OiBibG9jaztcXHJcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcclxcbiAgICBmb250LXNpemU6MTBweDtcXHJcXG59XFxyXFxuXFxyXFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiI3RvYzF7XFxyXFxuICAgIGxlZnQ6IDA7XFxyXFxuICAgIHBvc2l0aW9uOiBmaXhlZDtcXHJcXG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xcclxcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XFxyXFxuICAgIHRvcDogMDtcXHJcXG4gICAgY29sb3I6ICMwMzY2ZDY7XFxyXFxuICAgIHdpZHRoOiAzNTBweDtcXHJcXG4gICAgYmFja2dyb3VuZDogI0VFRUVFRTtcXHJcXG4gICAgd2hpdGUtc3BhY2U6bm93cmFwO1xcclxcbn1cXHJcXG5cXHJcXG4jdG9jMTo6LXdlYmtpdC1zY3JvbGxiYXIge1xcclxcbiAgICB3aWR0aDogOHB4O1xcclxcbiAgICBoZWlnaHQ6IDhweDtcXHJcXG59XFxyXFxuXFxyXFxuI3RvYzE6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcXHJcXG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xcclxcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMCA1cHggcmdiYSgwLDAsMCwwLjIpO1xcclxcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgNXB4IHJnYmEoMCwwLDAsMC4yKTtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzk2QzJGMTtcXHJcXG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxcclxcbiAgICAgICAgICAgIDQ1ZGVnLFxcclxcbiAgICAgICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSAyNSUsXFxyXFxuICAgICAgICAgICAgdHJhbnNwYXJlbnQgMjUlLFxcclxcbiAgICAgICAgICAgIHRyYW5zcGFyZW50IDUwJSxcXHJcXG4gICAgICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikgNTAlLFxcclxcbiAgICAgICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSA3NSUsXFxyXFxuICAgICAgICAgICAgdHJhbnNwYXJlbnQgNzUlLFxcclxcbiAgICAgICAgICAgIHRyYW5zcGFyZW50XFxyXFxuICAgICk7XFxyXFxufVxcclxcbiN0b2MxOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XFxyXFxuICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDVweCByZ2JhKDAsIDAsIDAsIDAuMSk7XFxyXFxuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCA1cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xcclxcbiAgICBib3JkZXItcmFkaXVzOiA4cHggOHB4IDAgMDtcXHJcXG4gICAgYmFja2dyb3VuZDogI0VGRjdGRjtcXHJcXG59XFxyXFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL2Nzcy90b2MuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0lBQ0ksT0FBTztJQUNQLGVBQWU7SUFDZixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLE1BQU07SUFDTixjQUFjO0lBQ2QsWUFBWTtJQUNaLG1CQUFtQjtJQUNuQixrQkFBa0I7QUFDdEI7O0FBRUE7SUFDSSxVQUFVO0lBQ1YsV0FBVztBQUNmOztBQUVBO0lBQ0ksa0JBQWtCO0lBQ2xCLGlEQUFpRDtJQUNqRCx5Q0FBeUM7SUFDekMseUJBQXlCO0lBQ3pCOzs7Ozs7Ozs7S0FTQztBQUNMO0FBQ0E7SUFDSSxvREFBb0Q7SUFDcEQsNENBQTRDO0lBQzVDLDBCQUEwQjtJQUMxQixtQkFBbUI7QUFDdkJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiI3RvYzF7XFxyXFxuICAgIGxlZnQ6IDA7XFxyXFxuICAgIHBvc2l0aW9uOiBmaXhlZDtcXHJcXG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xcclxcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XFxyXFxuICAgIHRvcDogMDtcXHJcXG4gICAgY29sb3I6ICMwMzY2ZDY7XFxyXFxuICAgIHdpZHRoOiAzNTBweDtcXHJcXG4gICAgYmFja2dyb3VuZDogI0VFRUVFRTtcXHJcXG4gICAgd2hpdGUtc3BhY2U6bm93cmFwO1xcclxcbn1cXHJcXG5cXHJcXG4jdG9jMTo6LXdlYmtpdC1zY3JvbGxiYXIge1xcclxcbiAgICB3aWR0aDogOHB4O1xcclxcbiAgICBoZWlnaHQ6IDhweDtcXHJcXG59XFxyXFxuXFxyXFxuI3RvYzE6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcXHJcXG4gICAgYm9yZGVyLXJhZGl1czogOHB4O1xcclxcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6IGluc2V0IDAgMCA1cHggcmdiYSgwLDAsMCwwLjIpO1xcclxcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgNXB4IHJnYmEoMCwwLDAsMC4yKTtcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzk2QzJGMTtcXHJcXG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxcclxcbiAgICAgICAgICAgIDQ1ZGVnLFxcclxcbiAgICAgICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSAyNSUsXFxyXFxuICAgICAgICAgICAgdHJhbnNwYXJlbnQgMjUlLFxcclxcbiAgICAgICAgICAgIHRyYW5zcGFyZW50IDUwJSxcXHJcXG4gICAgICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikgNTAlLFxcclxcbiAgICAgICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSA3NSUsXFxyXFxuICAgICAgICAgICAgdHJhbnNwYXJlbnQgNzUlLFxcclxcbiAgICAgICAgICAgIHRyYW5zcGFyZW50XFxyXFxuICAgICk7XFxyXFxufVxcclxcbiN0b2MxOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XFxyXFxuICAgIC13ZWJraXQtYm94LXNoYWRvdzogaW5zZXQgMCAwIDVweCByZ2JhKDAsIDAsIDAsIDAuMSk7XFxyXFxuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCA1cHggcmdiYSgwLCAwLCAwLCAwLjEpO1xcclxcbiAgICBib3JkZXItcmFkaXVzOiA4cHggOHB4IDAgMDtcXHJcXG4gICAgYmFja2dyb3VuZDogI0VGRjdGRjtcXHJcXG59XFxyXFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwicHJle1xcclxcbiAgICBmb250LXNpemU6MTZweDtcXHJcXG4gICAgY29sb3I6YmxhY2s7XFxyXFxuICAgIGJhY2tncm91bmQ6I2ZmZjtcXHJcXG4gICAgcGFkZGluZzoxMHB4O1xcclxcbn1cXHJcXG4uUHJvZ3JhbUNvZGV7XFxyXFxuICAgIGJhY2tncm91bmQ6I2ZmZjtcXHJcXG4gICAgcGFkZGluZzo1cHg7XFxyXFxuXFxyXFxufVxcclxcbmNvZGV7XFxyXFxuICAgIGZvbnQtc2l6ZToxNnB4O1xcclxcbiAgICBjb2xvcjpibGFjaztcXHJcXG4gICAgZGlzcGxheTppbmxpbmU7XFxyXFxuICAgIG1hcmdpbjowO1xcclxcbiAgICBib3JkZXI6MHB4O1xcclxcbiAgICBwYWRkaW5nOjA7XFxyXFxufVxcclxcbi5ub3RyYW5zbGF0ZXtcXHJcXG5cXHJcXG59XFxyXFxucHJlLnByb2dyYW1saXN0aW5nLmNvbntcXHJcXG4gICAgYmFja2dyb3VuZC1jb2xvcjojZmFmYWZhIWltcG9ydGFudDtcXHJcXG59XFxyXFxuI3Niby1ydC1jb250ZW50IHRhYmxle1xcclxcbiAgICB3aGl0ZS1zcGFjZTpub3dyYXAhaW1wb3J0YW50O1xcclxcbn1cXHJcXG50ciB0ZHtcXHJcXG4gICAgbWF4LWhlaWdodDogNTBweCFpbXBvcnRhbnQ7XFxyXFxufVxcclxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3NyYy9jc3MvdXJsLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtJQUNJLGNBQWM7SUFDZCxXQUFXO0lBQ1gsZUFBZTtJQUNmLFlBQVk7QUFDaEI7QUFDQTtJQUNJLGVBQWU7SUFDZixXQUFXOztBQUVmO0FBQ0E7SUFDSSxjQUFjO0lBQ2QsV0FBVztJQUNYLGNBQWM7SUFDZCxRQUFRO0lBQ1IsVUFBVTtJQUNWLFNBQVM7QUFDYjtBQUNBOztBQUVBO0FBQ0E7SUFDSSxrQ0FBa0M7QUFDdEM7QUFDQTtJQUNJLDRCQUE0QjtBQUNoQztBQUNBO0lBQ0ksMEJBQTBCO0FBQzlCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcInByZXtcXHJcXG4gICAgZm9udC1zaXplOjE2cHg7XFxyXFxuICAgIGNvbG9yOmJsYWNrO1xcclxcbiAgICBiYWNrZ3JvdW5kOiNmZmY7XFxyXFxuICAgIHBhZGRpbmc6MTBweDtcXHJcXG59XFxyXFxuLlByb2dyYW1Db2Rle1xcclxcbiAgICBiYWNrZ3JvdW5kOiNmZmY7XFxyXFxuICAgIHBhZGRpbmc6NXB4O1xcclxcblxcclxcbn1cXHJcXG5jb2Rle1xcclxcbiAgICBmb250LXNpemU6MTZweDtcXHJcXG4gICAgY29sb3I6YmxhY2s7XFxyXFxuICAgIGRpc3BsYXk6aW5saW5lO1xcclxcbiAgICBtYXJnaW46MDtcXHJcXG4gICAgYm9yZGVyOjBweDtcXHJcXG4gICAgcGFkZGluZzowO1xcclxcbn1cXHJcXG4ubm90cmFuc2xhdGV7XFxyXFxuXFxyXFxufVxcclxcbnByZS5wcm9ncmFtbGlzdGluZy5jb257XFxyXFxuICAgIGJhY2tncm91bmQtY29sb3I6I2ZhZmFmYSFpbXBvcnRhbnQ7XFxyXFxufVxcclxcbiNzYm8tcnQtY29udGVudCB0YWJsZXtcXHJcXG4gICAgd2hpdGUtc3BhY2U6bm93cmFwIWltcG9ydGFudDtcXHJcXG59XFxyXFxudHIgdGR7XFxyXFxuICAgIG1heC1oZWlnaHQ6IDUwcHghaW1wb3J0YW50O1xcclxcbn1cXHJcXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTsgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgcmV0dXJuIFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChjb250ZW50LCBcIn1cIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oJycpO1xuICB9OyAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXG5cbiAgbGlzdC5pID0gZnVuY3Rpb24gKG1vZHVsZXMsIG1lZGlhUXVlcnksIGRlZHVwZSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgJyddXTtcbiAgICB9XG5cbiAgICB2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuXG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgICAgICB2YXIgaWQgPSB0aGlzW2ldWzBdO1xuXG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG1vZHVsZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19pXSk7XG5cbiAgICAgIGlmIChkZWR1cGUgJiYgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udGludWVcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZWRpYVF1ZXJ5KSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYVF1ZXJ5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMl0gPSBcIlwiLmNvbmNhdChtZWRpYVF1ZXJ5LCBcIiBhbmQgXCIpLmNvbmNhdChpdGVtWzJdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBsaXN0O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pIHtcbiAgdmFyIF9pdGVtID0gX3NsaWNlZFRvQXJyYXkoaXRlbSwgNCksXG4gICAgICBjb250ZW50ID0gX2l0ZW1bMV0sXG4gICAgICBjc3NNYXBwaW5nID0gX2l0ZW1bM107XG5cbiAgaWYgKHR5cGVvZiBidG9hID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICB2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwiLyojIHNvdXJjZVVSTD1cIi5jb25jYXQoY3NzTWFwcGluZy5zb3VyY2VSb290IHx8ICcnKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIHJldHVybiBbY29udGVudF0uam9pbignXFxuJyk7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgaXNPbGRJRSA9IGZ1bmN0aW9uIGlzT2xkSUUoKSB7XG4gIHZhciBtZW1vO1xuICByZXR1cm4gZnVuY3Rpb24gbWVtb3JpemUoKSB7XG4gICAgaWYgKHR5cGVvZiBtZW1vID09PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gVGVzdCBmb3IgSUUgPD0gOSBhcyBwcm9wb3NlZCBieSBCcm93c2VyaGFja3NcbiAgICAgIC8vIEBzZWUgaHR0cDovL2Jyb3dzZXJoYWNrcy5jb20vI2hhY2stZTcxZDg2OTJmNjUzMzQxNzNmZWU3MTVjMjIyY2I4MDVcbiAgICAgIC8vIFRlc3RzIGZvciBleGlzdGVuY2Ugb2Ygc3RhbmRhcmQgZ2xvYmFscyBpcyB0byBhbGxvdyBzdHlsZS1sb2FkZXJcbiAgICAgIC8vIHRvIG9wZXJhdGUgY29ycmVjdGx5IGludG8gbm9uLXN0YW5kYXJkIGVudmlyb25tZW50c1xuICAgICAgLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlci9pc3N1ZXMvMTc3XG4gICAgICBtZW1vID0gQm9vbGVhbih3aW5kb3cgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWxsICYmICF3aW5kb3cuYXRvYik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG59KCk7XG5cbnZhciBnZXRUYXJnZXQgPSBmdW5jdGlvbiBnZXRUYXJnZXQoKSB7XG4gIHZhciBtZW1vID0ge307XG4gIHJldHVybiBmdW5jdGlvbiBtZW1vcml6ZSh0YXJnZXQpIHtcbiAgICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblxuICAgICAgaWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgICAgLy8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcbiAgICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbW9bdGFyZ2V0XTtcbiAgfTtcbn0oKTtcblxudmFyIHN0eWxlc0luRG9tID0gW107XG5cbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5Eb20ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5Eb21baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXVxuICAgIH07XG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRvbVtpbmRleF0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5Eb21baW5kZXhdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVzSW5Eb20ucHVzaCh7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IGFkZFN0eWxlKG9iaiwgb3B0aW9ucyksXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlkZW50aWZpZXJzLnB1c2goaWRlbnRpZmllcik7XG4gIH1cblxuICByZXR1cm4gaWRlbnRpZmllcnM7XG59XG5cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHZhciBhdHRyaWJ1dGVzID0gb3B0aW9ucy5hdHRyaWJ1dGVzIHx8IHt9O1xuXG4gIGlmICh0eXBlb2YgYXR0cmlidXRlcy5ub25jZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09ICd1bmRlZmluZWQnID8gX193ZWJwYWNrX25vbmNlX18gOiBudWxsO1xuXG4gICAgaWYgKG5vbmNlKSB7XG4gICAgICBhdHRyaWJ1dGVzLm5vbmNlID0gbm9uY2U7XG4gICAgfVxuICB9XG5cbiAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgc3R5bGUuc2V0QXR0cmlidXRlKGtleSwgYXR0cmlidXRlc1trZXldKTtcbiAgfSk7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmluc2VydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdGlvbnMuaW5zZXJ0KHN0eWxlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdGFyZ2V0ID0gZ2V0VGFyZ2V0KG9wdGlvbnMuaW5zZXJ0IHx8ICdoZWFkJyk7XG5cbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgICB9XG5cbiAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgcmV0dXJuIHN0eWxlO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3R5bGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZSk7XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG52YXIgcmVwbGFjZVRleHQgPSBmdW5jdGlvbiByZXBsYWNlVGV4dCgpIHtcbiAgdmFyIHRleHRTdG9yZSA9IFtdO1xuICByZXR1cm4gZnVuY3Rpb24gcmVwbGFjZShpbmRleCwgcmVwbGFjZW1lbnQpIHtcbiAgICB0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XG4gICAgcmV0dXJuIHRleHRTdG9yZS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJyk7XG4gIH07XG59KCk7XG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcoc3R5bGUsIGluZGV4LCByZW1vdmUsIG9iaikge1xuICB2YXIgY3NzID0gcmVtb3ZlID8gJycgOiBvYmoubWVkaWEgPyBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpLmNvbmNhdChvYmouY3NzLCBcIn1cIikgOiBvYmouY3NzOyAvLyBGb3Igb2xkIElFXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpO1xuICAgIHZhciBjaGlsZE5vZGVzID0gc3R5bGUuY2hpbGROb2RlcztcblxuICAgIGlmIChjaGlsZE5vZGVzW2luZGV4XSkge1xuICAgICAgc3R5bGUucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pO1xuICAgIH1cblxuICAgIGlmIChjaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgc3R5bGUuaW5zZXJ0QmVmb3JlKGNzc05vZGUsIGNoaWxkTm9kZXNbaW5kZXhdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGUuYXBwZW5kQ2hpbGQoY3NzTm9kZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VG9UYWcoc3R5bGUsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gb2JqLmNzcztcbiAgdmFyIG1lZGlhID0gb2JqLm1lZGlhO1xuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuICBpZiAobWVkaWEpIHtcbiAgICBzdHlsZS5zZXRBdHRyaWJ1dGUoJ21lZGlhJywgbWVkaWEpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgnbWVkaWEnKTtcbiAgfVxuXG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH0gLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZS5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZS5yZW1vdmVDaGlsZChzdHlsZS5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG52YXIgc2luZ2xldG9uID0gbnVsbDtcbnZhciBzaW5nbGV0b25Db3VudGVyID0gMDtcblxuZnVuY3Rpb24gYWRkU3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBzdHlsZTtcbiAgdmFyIHVwZGF0ZTtcbiAgdmFyIHJlbW92ZTtcblxuICBpZiAob3B0aW9ucy5zaW5nbGV0b24pIHtcbiAgICB2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrKztcbiAgICBzdHlsZSA9IHNpbmdsZXRvbiB8fCAoc2luZ2xldG9uID0gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpKTtcbiAgICB1cGRhdGUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIGZhbHNlKTtcbiAgICByZW1vdmUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlID0gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuICAgIHVwZGF0ZSA9IGFwcGx5VG9UYWcuYmluZChudWxsLCBzdHlsZSwgb3B0aW9ucyk7XG5cbiAgICByZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuICAgIH07XG4gIH1cblxuICB1cGRhdGUob2JqKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZVN0eWxlKG5ld09iaikge1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGlmIChuZXdPYmouY3NzID09PSBvYmouY3NzICYmIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmIG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlKCk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OyAvLyBGb3JjZSBzaW5nbGUtdGFnIHNvbHV0aW9uIG9uIElFNi05LCB3aGljaCBoYXMgYSBoYXJkIGxpbWl0IG9uIHRoZSAjIG9mIDxzdHlsZT5cbiAgLy8gdGFncyBpdCB3aWxsIGFsbG93IG9uIGEgcGFnZVxuXG4gIGlmICghb3B0aW9ucy5zaW5nbGV0b24gJiYgdHlwZW9mIG9wdGlvbnMuc2luZ2xldG9uICE9PSAnYm9vbGVhbicpIHtcbiAgICBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcbiAgfVxuXG4gIGxpc3QgPSBsaXN0IHx8IFtdO1xuICB2YXIgbGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpO1xuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlKG5ld0xpc3QpIHtcbiAgICBuZXdMaXN0ID0gbmV3TGlzdCB8fCBbXTtcblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3TGlzdCkgIT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbaV07XG4gICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICAgIHN0eWxlc0luRG9tW2luZGV4XS5yZWZlcmVuY2VzLS07XG4gICAgfVxuXG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuXG4gICAgICB2YXIgX2luZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoX2lkZW50aWZpZXIpO1xuXG4gICAgICBpZiAoc3R5bGVzSW5Eb21bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRG9tW19pbmRleF0udXBkYXRlcigpO1xuXG4gICAgICAgIHN0eWxlc0luRG9tLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxhc3RJZGVudGlmaWVycyA9IG5ld0xhc3RJZGVudGlmaWVycztcbiAgfTtcbn07IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0aWYoX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSkge1xuXHRcdHJldHVybiBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuXHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IG1vZHVsZVsnZGVmYXVsdCddIDpcblx0XHQoKSA9PiBtb2R1bGU7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5ubWQgPSAobW9kdWxlKSA9PiB7XG5cdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdHJldHVybiBtb2R1bGU7XG59OyIsIiAgIGltcG9ydCBcIi4uL2Nzcy90b2MuY3NzXCI7XG5cbi8qXG50b2NBY2NlcHRlZDrmjqXlj5flsZ7mgKflkozlhYPntKBcbnV0aWxGdW5jdGlvbjrmjqXlj5fpnIDopoHnmoTlt6Xlhbflh73mlbBcbiovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvYyh0b2NBY2NlcHRlZCwgdXRpbEZ1bmN0aW9uKSB7XG4gIGxldCB0b2NTdHlsZSA9IHRvY0FjY2VwdGVkLnRvY1JlcXVpcmVkX3Byb3BlcnRpZXMuc3R5bGU7XG4gIGxldCBnZW5Ub2NTdHlsZSA9IHV0aWxGdW5jdGlvbi5nZW5TdHlsZSh0b2NTdHlsZSk7XG4gIGxldCB0b2MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInRvYzFcIik7XG4gIC8v5rKh5pyJ5Yib5bu655qE5YWD57Sg5bCx5pivbnVsbFxuICBpZiAodG9jKSB7XG4gICAgbGV0IGF0dHJpYnV0ZSA9IHRvYy5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcbiAgICBhdHRyaWJ1dGUgPSB1dGlsRnVuY3Rpb24uUmVwbGFjZVNhbWVQcm9wZXJ0eShcIjtcIiwgYXR0cmlidXRlLCBbXG4gICAgICBcIndpZHRoXCIsXG4gICAgICBcImhlaWdodFwiLFxuICAgIF0pO1xuICAgIHRvYy5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBgJHthdHRyaWJ1dGV9JHtnZW5Ub2NTdHlsZX07O2ApO1xuICB9IGVsc2Uge1xuICAgIHRvYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdG9jLnNldEF0dHJpYnV0ZShcImlkXCIsIFwidG9jMVwiKTtcbiAgICB0b2Muc3R5bGUuY3NzVGV4dCA9IGdlblRvY1N0eWxlO1xuICAgIC8v55Sf5oiQ55uu5b2VXG4gICAgbGV0IG1hdGNoaW5nX2NvbXBvbmVudCA9IHtcbiAgICAgIGhlYWQ6IHRvY0FjY2VwdGVkLmFsbEhlYWRlcixcbiAgICAgIGJvZHk6IHRvY0FjY2VwdGVkLmJvZHksXG4gICAgICB0b2MsXG4gICAgfTtcbiAgICB1dGlsRnVuY3Rpb24uZ2VuZXJhdGVfY2F0YWxvZyhtYXRjaGluZ19jb21wb25lbnQpO1xuICAgIHRvY0FjY2VwdGVkLmJvZHkuYXBwZW5kQ2hpbGQodG9jKTtcbiAgfVxuICBsZXQgY29tcG9uZW50X2Z1bmN0aW9uID0ge1xuICAgIFJlcGxhY2VTYW1lUHJvcGVydHk6IHV0aWxGdW5jdGlvbi5SZXBsYWNlU2FtZVByb3BlcnR5LFxuICB9O1xuICB1dGlsRnVuY3Rpb24udG9jQ2hhbmdlKHsgdG9jIH0sIGNvbXBvbmVudF9mdW5jdGlvbik7XG4gIHJldHVybiB0b2M7XG59XG4iLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3RvYy5jc3NcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiLCJcclxuLy/pgY3ljobnsbvmlbDnu4RcclxuZnVuY3Rpb24gICBmb3JFYWNoRG9tKGFsbFBhcmFtLERvbUZ1bmN0aW9uKXtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsUGFyYW0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgIGl0ZW0gICA9IGFsbFBhcmFtW2ldXHJcbiAgICAgICAgRG9tRnVuY3Rpb24oaXRlbSlcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHtcclxuICAgIGZvckVhY2hEb21cclxufVxyXG4iLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2NvbW1vbi5jc3NcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiLCJpbXBvcnQgJy4uL2Nzcy9jb21tb24uY3NzJ1xuLy8gaW1wb3J0IHtcbi8vICAgaGFzX3BfY2hpbGRyZW4sXG4vLyB9IGZyb20gXCIuL2dvb2dsZV9zdHJydWN0dXJlX2FycmFuZ2VtZW50XCI7XG5pbXBvcnQge2ZvckVhY2hEb219IGZyb20gXCIuLi91dGlsL0RvbUVudHJpZXNcIjtcbmltcG9ydCB7Ym9keUV2ZW50LGh0bWxFdmVudH0gZnJvbSBcIi4vZ29vZ2xlRXZlbnRMaXN0ZW5lclwiO1xuXG5sZXQgY29tcG9uZW50X2RhdGEgPSB7fTtcbmV4cG9ydCAgZnVuY3Rpb24gR2VuZXJhdGVfYmFja3VwKHApIHtcbiAgY29tcG9uZW50X2RhdGFbXCJUeXBlc1RyYW5zbGF0aW9uS2V5XCJdID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXG4gICAgICBcIlR5cGVzVHJhbnNsYXRpb25cIlxuICApO1xuXG4gIC8vIOaaguWBnOS/ruaUuVxuICAvLyBmb3IgKGxldCBpID0gMDsgaSA8ICBwLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgbGV0IGhhc19jaGlsZHJlbl9wID0gMDtcbiAgLy8gICAvL+ino+WGs+S4pOWxgueahFDmoIfnrb4s6ISR5a2Q5LiN5aSq5q2j5bi45omN5pyJ5LiJ5bGCLOiHs+S6juWbm+WxgizpgLzmiJHnlKjpgJLlvZJcbiAgLy8gICBoYXNfY2hpbGRyZW5fcCA9IGhhc19wX2NoaWxkcmVuKHBbaV0sIGhhc19jaGlsZHJlbl9wKTtcbiAgLy8gICBpZiAoIWhhc19jaGlsZHJlbl9wKSB7XG4gIC8vICAgICAvL+i/m+WFpeacgOW6leWxgueahFDmoIfnrb5cbiAgLy8gICAgICBoYW5kbGVQYXJhbWV0ZXIocFtpXSk7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgbGV0ICBjb2RlTGlzdHMgPSAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjb2RlXCIpXG4gIGxldCAga2JkTGlzdHMgPSAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJrYmRcIilcbiAgbGV0ICBhbGxQYXJhbSAgPSAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3AnKTtcblxuICBnZW5lcmF0ZUNvZGUoY29kZUxpc3RzLFwiY29kZVwiKVxuICBnZW5lcmF0ZUNvZGUoa2JkTGlzdHMsXCJrYmRcIilcbiAgR2VuZXJhdGVCaWxpbmd1YWwoYWxsUGFyYW0pXG4gIGhhbmRsZVByZVN0cm9uZygpXG59XG5cbmZ1bmN0aW9uIGhhbmRsZVBhcmFtZXRlcih0aGlzX3ApIHtcbiAgLy/lpITnkIYg54m55q6K55qE5paH5pysXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpc19wLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgb25lQ2hpbGROb2RlID0gdGhpc19wLmNoaWxkTm9kZXNbaV1cbiAgICBpZiAob25lQ2hpbGROb2RlKSB7XG4gICAgICBpZiAob25lQ2hpbGROb2RlLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICB9IGVsc2UgaWYgKG9uZUNoaWxkTm9kZS5ub2RlVHlwZSA9PT0gMykge1xuICAgICAgICBsZXQgY29kZUNvbnRlbnQgPSBcIlwiO1xuICAgICAgICBsZXQgY3VycmVudENvbnRlbnQgPSBvbmVDaGlsZE5vZGUubm9kZVZhbHVlO1xuICAgICAgICBsZXQgVVJMID0gbG9jYXRpb24uaHJlZjtcbiAgICAgICAgaWYgKFVSTC5pbmNsdWRlcyhcImxvY2FsaG9zdFwiKXx8VVJMLmluY2x1ZGVzKFwiMTI3LjAuMC4xXCIpKXtcbiAgICAgICAgICBjb2RlQ29udGVudCA9IGN1cnJlbnRDb250ZW50LnJlcGxhY2VBbGwoLyggYSB8QSApL2csIFwiIG9uZSBcIik7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIGNvZGVDb250ZW50PSBjdXJyZW50Q29udGVudFxuICAgICAgICB9XG4gICAgICAgIG9uZUNoaWxkTm9kZS5ub2RlVmFsdWUgPWNvZGVDb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cblxuXG5cbi8v5bCGY29kZSDmoIfnrb7ovazmjaLkuLpLYmTmoIfnrb4sXG5mdW5jdGlvbiBnZW5lcmF0ZUNvZGUoY29kZUxpc3QsdHlwZSkge1xuICAvL+WkhOeQhmNvZGUg5ZKMa2JkXG4gIGxldCAgbGVuZ3RoID0gY29kZUxpc3QubGVuZ3RoXG4gIGxldCAgbSA9IDBcbiAgaWYgKGxlbmd0aD4wKXtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI7IGkrKykge1xuICAgICAgbGV0IGNvZGVDb250ZW50ID0gXCJcIjtcbiAgICAgIGxldCBjdXJyZW50Q29udGVudCA9IGNvZGVMaXN0W2ldLm91dGVySFRNTDtcbiAgICBpZiAodHlwZSA9PT0gXCJrYmRcIil7XG4gICAgICBsZXQgVGFyZ2V0Q29udGVudCA9IGN1cnJlbnRDb250ZW50LnJlcGxhY2UoLzxrYmQvLCAnPHNwYW4gICBjbGFzcz1cIm5vdHJhbnNsYXRlXCInKTtcbiAgICAgIGNvZGVDb250ZW50ID0gVGFyZ2V0Q29udGVudC5yZXBsYWNlKC88XFwva2JkPi8sIFwiPC9zcGFuPlwiKTtcbiAgICB9ZWxzZXtcbiAgICAgIGxldCBUYXJnZXRDb250ZW50ID0gY3VycmVudENvbnRlbnQucmVwbGFjZSgvPGNvZGUvLCAnPHNwYW4gICBjbGFzcz1cIm5vdHJhbnNsYXRlXCInKTtcbiAgICAgIGNvZGVDb250ZW50ID0gVGFyZ2V0Q29udGVudC5yZXBsYWNlKC88XFwvY29kZT4vLCBcIjwvc3Bhbj5cIik7XG4gICAgfVxuICAgICAgY29kZUxpc3RbaV0ub3V0ZXJIVE1MID1jb2RlQ29udGVudDtcbiAgICAgIGkgLS1cbiAgICAgIG0gKytcbiAgICAgIGlmIChtID09PWxlbmd0aCl7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuZXhwb3J0ICBmdW5jdGlvbiAgR2VuZXJhdGVCaWxpbmd1YWwgKGFsbFBhcmFtKXtcblxuICB0cmVlSW5pdChhbGxQYXJhbSk7XG4gIGZvckVhY2hEb20oYWxsUGFyYW0sKGl0ZW0pPT57XG4gICAgVmlldyhpdGVtKVxuICB9KVxuICBmb3JFYWNoRG9tKGFsbFBhcmFtLChpdGVtKT0+e1xuICAgIGlmICggaXRlbS5nZXRBdHRyaWJ1dGUoJ3JlbmRlcicpID09PSAndHJ1ZScpe1xuICAgICAgbGV0ICBPcmlnaW5hbEF0dHJpYnV0ZSA9ICAgaXRlbS5nZXRBdHRyaWJ1dGUoJ2NsYXNzJyk7XG4gICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCdob3ZlcmVsZSAnK09yaWdpbmFsQXR0cmlidXRlKVxuICAgICAgbGV0IG5ld0RvbSA9IGhhbmRsZURPTShpdGVtKTtcbiAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdjbGFzcycsT3JpZ2luYWxBdHRyaWJ1dGUrJyAnKydub3RyYW5zbGF0ZSBvcmlnaW5hbFRleHQnKVxuICAgICAgbGV0IGNvbmNhdCAgPSAgIGl0ZW0ub3V0ZXJIVE1MICsgbmV3RG9tXG4gICAgICBpdGVtLm91dGVySFRNTCAgPSBjb25jYXQ7XG4gICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnY2xhc3MnLE9yaWdpbmFsQXR0cmlidXRlKVxuICAgIH1cblxuICB9KVxuICBmdW5jdGlvbiBoYW5kbGVEcmFnRW5kKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgZS50YXJnZXQucGFyZW50RWxlbWVudC5zdHlsZS5sZWZ0ID0gZS5jbGllbnRYICsgXCJweFwiO1xuICAgICAgZS50YXJnZXQucGFyZW50RWxlbWVudC5zdHlsZS50b3AgPSBlLmNsaWVudFkgKyBcInB4XCI7XG4gIH1cblxuICBsZXQgIGhvdmVyZWxlICA9ICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdob3ZlcmVsZScpO1xuICBsZXQgIERPTVJlbmRlciA9IHtcbiAgICBjdXJyZW50UG9pbnRlcjpudWxsLFxuICAgIHByZVBvaW50ZXI6bnVsbCxcbiAgICBoYXNoTWFwOntcblxuICAgIH1cbiAgfVxuXG5cbiAgaHRtbEV2ZW50KChlKT0+e1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZm9yIChjb25zdCBoYXNoTWFwS2V5IGluIERPTVJlbmRlci5oYXNoTWFwKSB7XG4gICAgICBsZXQgaXRlbSA9ICBET01SZW5kZXIuaGFzaE1hcFtoYXNoTWFwS2V5XTtcbiAgICAgIGxldCAgYXR0cmlidXRlID0gIGl0ZW0uZ2V0QXR0cmlidXRlKCdjbGFzcycpO1xuICAgICAgbGV0IHJlcGxhY2VBbGwgPSBhdHRyaWJ1dGUucmVwbGFjZUFsbCgnIHNob3cnLCAnJykucmVwbGFjZUFsbCgnIGhpZGRlbicsICcnKTtcbiAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdjbGFzcycscmVwbGFjZUFsbD9yZXBsYWNlQWxsK1wiIGhpZGRlblwiOlwiaGlkZGVuXCIpXG4gICAgfVxuICB9KVxuLy/ngrnlh7vmn6XnnIvlhYPntKBcbiAgZm9yRWFjaERvbShob3ZlcmVsZSwoaXRlbSk9PntcbiAgICBoYW5kbGVJTUcoaXRlbSlcbiAgICBpZiAoaXRlbS5nZXRBdHRyaWJ1dGUoJ3JlbmRlcicpLnRyaW0oKSA9PT0gJ3RydWUnKXtcbiAgICAgIC8v54S25ZCO55Sf5oiQ5YWD57SgXG4gICAgICBsZXQgIE9yaWdpbmFsQXR0cmlidXRlID0gICBpdGVtLmdldEF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdjbGFzcycsT3JpZ2luYWxBdHRyaWJ1dGU/T3JpZ2luYWxBdHRyaWJ1dGUrXCIgaG92ZXJlbGVcIjonaG92ZXJlbGUnKVxuXG4gICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLChlKT0+e1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIGxldCAgQXR0cmlidXRlID0gICBpdGVtLmdldEF0dHJpYnV0ZSgnY2xhc3MnKTtcbiAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJyxBdHRyaWJ1dGU/QXR0cmlidXRlK1wiIHBsLXRva2VuXCI6J3BsLXRva2VuJylcbiAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2VudGVyJywndHJ1ZScpXG4gICAgICB9KVxuXG4gICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywoZSk9PntcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICBpZiAoaXRlbS5nZXRBdHRyaWJ1dGUoJ2VudGVyJykgPT09ICd0cnVlJyl7XG4gICAgICAgICAgLy/ojrflj5blvZPliY3pnIDopoHkvb/nlKjnmoTmlbDmja5cbiAgICAgICAgICBsZXQgICBrZXkgID0gIGl0ZW0uZ2V0QXR0cmlidXRlKCdrZXknKS50cmltKClcbiAgICAgICAgICBsZXQgc3VzcGVuc2lvbiA9IERPTVJlbmRlci5oYXNoTWFwW2tleV1cbiAgICAgICAgICBET01SZW5kZXIuY3VycmVudFBvaW50ZXIgPSBrZXlcbiAgICAgICAgICBpZihET01SZW5kZXIucHJlUG9pbnRlciAhPT0gbnVsbCl7XG4gICAgICAgICAgICAvL+makOiXj+eUn+aIkOeahOWFg+e0oFxuICAgICAgICAgICAgbGV0IHByZUVsZW1lbnQgID0gIERPTVJlbmRlci5oYXNoTWFwW0RPTVJlbmRlci5wcmVQb2ludGVyXTtcbiAgICAgICAgICAgIGlmIChET01SZW5kZXIucHJlUG9pbnRlciAhPT0gRE9NUmVuZGVyLmN1cnJlbnRQb2ludGVyKXtcbiAgICAgICAgICAgICAgbGV0ICBhdHRyaWJ1dGUgPSAgIHByZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdjbGFzcycpO1xuICAgICAgICAgICAgICAvL+enu+mZpOmakOiXj+eahOWxnuaAp1xuICAgICAgICAgICAgICBsZXQgcmVwbGFjZUFsbCA9IGF0dHJpYnV0ZS5yZXBsYWNlQWxsKCcgc2hvdycsICcnKTtcbiAgICAgICAgICAgICAgaWYgKCFyZXBsYWNlQWxsLmluY2x1ZGVzKCdoaWRkZW4nKSlcbiAgICAgICAgICAgICAgICBwcmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLHJlcGxhY2VBbGw/cmVwbGFjZUFsbCtcIiBoaWRkZW5cIjpcImhpZGRlblwiKVxuICAgICAgICAgICAgICAvL+iuvue9ruaMh+mSiFxuICAgICAgICAgICAgICBET01SZW5kZXIucHJlUG9pbnRlciA9IG51bGw7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgbGV0ICBhdHRyaWJ1dGUgPSAgIHN1c3BlbnNpb24uZ2V0QXR0cmlidXRlKCdjbGFzcycpO1xuICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlLmluY2x1ZGVzKCdoaWRkZW4nKSkge1xuICAgICAgICAgICAgICAgIGxldCByZXBsYWNlQWxsID0gYXR0cmlidXRlLnJlcGxhY2VBbGwoJyBoaWRkZW4nLCAnJyk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXBsYWNlQWxsLmluY2x1ZGVzKCdzaG93JykpXG4gICAgICAgICAgICAgICAgICBzdXNwZW5zaW9uLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCByZXBsYWNlQWxsID8gcmVwbGFjZUFsbCArIFwiIHNob3dcIiA6IFwic2hvd1wiKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN1c3BlbnNpb24pe1xuICAgICAgICAgICAgICAvL+a/gOa0u+mYn+WIl+S4reeahOWFg+e0oFxuICAgICAgICAgICAgICBsZXQgIGF0dHJpYnV0ZSA9ICAgc3VzcGVuc2lvbi5nZXRBdHRyaWJ1dGUoJ2NsYXNzJyk7XG4gICAgICAgICAgICAgIC8v56e76Zmk6ZqQ6JeP55qE5bGe5oCnXG4gICAgICAgICAgICAgIGxldCByZXBsYWNlQWxsID0gYXR0cmlidXRlLnJlcGxhY2VBbGwoJyBoaWRkZW4nLCAnJyk7XG4gICAgICAgICAgICAgIGlmICghcmVwbGFjZUFsbC5pbmNsdWRlcygnc2hvdycpKVxuICAgICAgICAgICAgICAgIHN1c3BlbnNpb24uc2V0QXR0cmlidXRlKCdjbGFzcycscmVwbGFjZUFsbD9yZXBsYWNlQWxsK1wiIHNob3dcIjpcInNob3dcIilcbiAgICAgICAgICAgICAgRE9NUmVuZGVyLnByZVBvaW50ZXIgPSAgRE9NUmVuZGVyLmN1cnJlbnRQb2ludGVyXG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgLy/nlJ/miJDlhYPntKBcbiAgICAgICAgICAgICAgc3VzcGVuc2lvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICBzdXNwZW5zaW9uLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCdub3RyYW5zbGF0ZSBzdXNwZW5zaW9uIHNob3cnKVxuICAgICAgICAgICAgICBzdXNwZW5zaW9uLmlubmVySFRNTCA9IGhhbmRsZURPTShpdGVtLnByZXZpb3VzU2libGluZykucmVwbGFjZUFsbCgnb3JpZ2luYWxUZXh0JywnJyk7XG5cbiAgICAgICAgICAgICAgaXRlbS5hcHBlbmQoc3VzcGVuc2lvbilcbiAgICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2VudGVyJywnZmFsc2UnKVxuICAgICAgICAgICAgICBET01SZW5kZXIuaGFzaE1hcFtET01SZW5kZXIuY3VycmVudFBvaW50ZXJdID0gICBzdXNwZW5zaW9uO1xuICAgICAgICAgICAgICBET01SZW5kZXIucHJlUG9pbnRlciA9ICBET01SZW5kZXIuY3VycmVudFBvaW50ZXJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2UgaWYoaXRlbS5nZXRBdHRyaWJ1dGUoJ2VudGVyJykgPT09ICdmYWxzZScpe1xuXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsKGUpPT57XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgbGV0ICBBdHRyaWJ1dGUgPSAgIGl0ZW0uZ2V0QXR0cmlidXRlKCdjbGFzcycpO1xuICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnY2xhc3MnLEF0dHJpYnV0ZT9BdHRyaWJ1dGUucmVwbGFjZUFsbCgnIHBsLXRva2VuJywnJyk6QXR0cmlidXRlLnJlcGxhY2VBbGwoJ3BsLXRva2VuJywnJykpXG4gICAgICAgIGl0ZW0ucmVtb3ZlQXR0cmlidXRlKCdlbnRlcicpXG4gICAgICB9KVxuICAgIH1cbiAgfSlcbn1cblxuLy/liJ3lp4vljJZcbmZ1bmN0aW9uICB0cmVlSW5pdChhbGxQYXJhbSl7XG4gIGZvckVhY2hEb20oYWxsUGFyYW0sKGl0ZW0pPT57XG4gICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ3JlbmRlcicsJ251bGwnKTtcbiAgICBpdGVtLnNldEF0dHJpYnV0ZSgna2V5JyxNYXRoLnJhbmRvbSgpKjEwMDAwMDAwMDApXG4gIH0pXG59XG5cbmxldCAgVmlldyA9ICAoaXRlbSk9PntcbiAgaWYgKGl0ZW0uZ2V0QXR0cmlidXRlKCdyZW5kZXInKSA9PT0gJ3RydWUnfHxpdGVtLmdldEF0dHJpYnV0ZSgncmVuZGVyJykgPT09ICdmYWxzZScpe1xuICAgIC8qKlxuICAgICAqIOato+W4uOWSjOW8guW4uOivtOaYjumDveW3sue7j+agh+W/l+i/h+S6hiznm7TmjqXot7Pov4dcbiAgICAgKiAqL1xuICAgIHJldHVyblxuICB9ZWxzZSBpZiAoaXRlbS5nZXRBdHRyaWJ1dGUoJ3JlbmRlcicpID09PSAnbnVsbCcpe1xuICAgIC8qKlxuICAgICAqIGNoZWNrUGFyZW50KCnlhYjmo4Dmn6XniLbnuqcs6YGN5Y6G5YiwYm9keSAsXG4gICAgICog6ZyA6KaB5LiA5Liq6Zif5YiXLOe7meacgOWQjui/m+adpeeahOaJk3RydWUs5YW25LuW6YO95pivZmFsc2UsXG4gICAgICog5aaC5p6c5YW25Lit5pyJ5LiA5Liq5pivdHJ1ZSzmlLbpm4bnmoTlhajpg6jmiZPkuIpmYWxzZSxcbiAgICAgKiDlpoLmnpzlhbbkuK3mnInkuIDkuKrmmK9mYWxzZSzkuZ/lhajpg6jpg73miZPkuIpmYWxzZVxuICAgICAqICovXG4gICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ3JlbmRlcicsJ3RydWUnKVxuICAgIGxldCBwYXJlbnRRdWV1ZSA9IFtdXG4gICAgY2hlY2tQYXJlbnQoaXRlbSxwYXJlbnRRdWV1ZSlcbiAgICAvL+WkhOeQhumYn+WIl1xuICAgIHBhcmVudFF1ZXVlLmZvckVhY2goKHNvbixpbmRleCk9PntcbiAgICAgIGlmIChpbmRleCA9PT0gMCl7XG4gICAgICAgIGlmIChpdGVtLmdldEF0dHJpYnV0ZSgncmVuZGVyJykgPT09ICdudWxsJylcbiAgICAgICAgICBzb24uc2V0QXR0cmlidXRlKCdyZW5kZXInLCd0cnVlJylcbiAgICAgIH1lbHNle1xuICAgICAgICBzb24uc2V0QXR0cmlidXRlKCdyZW5kZXInLCdmYWxzZScpXG4gICAgICB9XG4gICAgICAvL+WPquimgeaciemYn+WIlyzov5nkuIDpobnogq/lrprlsLHmmK9mYWxzZVxuICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ3JlbmRlcicsJ2ZhbHNlJylcbiAgICB9KVxuICAgIGNoZWNrQ2hpbGQoaXRlbSlcbiAgfVxufVxuLy/pgY3ljobmiYDmnInnmoTniLblhYPntKAs55u05Yiw6YGN5Y6G5YiwYm9keVxuZnVuY3Rpb24gIGNoZWNrUGFyZW50KGl0ZW0scGFyZW50UXVldWUpe1xuICBsZXQgIHBhcmVudCAgICA9ICAgaXRlbS5wYXJlbnROb2RlO1xuICBsZXQgIG5vZGVOYW1lID0gICBwYXJlbnQubm9kZU5hbWU7XG4gIGlmICggbm9kZU5hbWUgPT09ICdCT0RZJyl7XG4gICAgcmV0dXJuICflt7Lnu4/liLDovr5CT0RZJztcbiAgfWVsc2V7XG4gICAgaWYgKG5vZGVOYW1lID09PSAnUCcpe1xuICAgICAgcGFyZW50UXVldWUudW5zaGlmdChwYXJlbnQpO1xuICAgICAgaWYgKGl0ZW0uZ2V0QXR0cmlidXRlKCdyZW5kZXInKSA9PT0gJ3RydWUnfHxcbiAgICAgICAgICBpdGVtLmdldEF0dHJpYnV0ZSgncmVuZGVyJykgPT09ICdmYWxzZScpe1xuICAgICAgICAgIHBhcmVudFF1ZXVlLnVuc2hpZnQocGFyZW50KTtcbiAgICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tQYXJlbnQocGFyZW50LHBhcmVudFF1ZXVlKVxuICB9XG59XG5cbi8v5LiA5Liq6YGN5Y6G5omA5pyJ55qE5a2Q5YWD57SgLOebtOWIsOaXoOazlemBjeWOhlxuZnVuY3Rpb24gIGNoZWNrQ2hpbGQoaXRlbSl7XG4gIGxldCAgY2hpbGRyZW4gICAgPSAgIGl0ZW0uY2hpbGRyZW47XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgc29uRWxlbWVudCA9ICBjaGlsZHJlbltpXTtcbiAgICBsZXQgIG5vZGVOYW1lID0gICBzb25FbGVtZW50Lm5vZGVOYW1lO1xuICAgIGlmIChub2RlTmFtZSA9PT0gJ1AnKXtcbiAgICAgIHNvbkVsZW1lbnQuc2V0QXR0cmlidXRlKCdyZW5kZXInLCdmYWxzZScpXG4gICAgfVxuICAgIGNoZWNrQ2hpbGQoc29uRWxlbWVudCk7XG4gIH1cbn1cblxuXG4vLyDlpITnkIZET03lhYPntKBcbmZ1bmN0aW9uICAgaGFuZGxlRE9NKGl0ZW0pe1xuICBsZXQgIG5ld0RvbSAgPSAgSlNPTi5zdHJpbmdpZnkoaXRlbS5vdXRlckhUTUwpO1xuICAvLyBsZXQgcmVnRXhwTWF0Y2hBcnJheSA9IG5ld0RvbS5tYXRjaCgvKFxcXFxcXFwiKS9nKTtcbiAgLy8gY29uc29sZS5sb2coYG5ld0RvbTpgLCBuZXdEb20pXG4gIGxldCAgcmV0dXJuRG9tID0gICAgbmV3RG9tXG4gICAgICAucmVwbGFjZUFsbCgvKFxcXFxcXFwiKS9nLFwiIFxcXCIgXCIpXG4gICAgICAucmVwbGFjZUFsbCgnXFxcXG4nLCcnKVxuICAgICAgLnJlcGxhY2VBbGwoLyggYSB8QSApL2csIFwiIG9uZSBcIilcbiAgICAgIC5yZXBsYWNlQWxsKCc+XFxcIicsJz4nKVxuICAgICAgLnJlcGxhY2VBbGwoJ1xcXCI8JywnPCcpXG4gICAgICAucmVwbGFjZUFsbChcImNsYXNzPVxcXFxcXFwiXCIsXCJjbGFzcz1cXFwiXCIpXG5cbiAgLy8gY29uc29sZS5sb2coYG5ld0RvbTpgLCBuZXdEb20pXG4gIC8vIGNvbnNvbGUubG9nKGByZXR1cm5Eb206YCwgcmV0dXJuRG9tKVxuICByZXR1cm4gIHJldHVybkRvbVxufVxuXG4vL+WkhOeQhmltZyDnmoRTcmNcbmZ1bmN0aW9uICBoYW5kbGVJTUcoaXRlbSl7XG4gIGxldCBpbWcgICA9ICBpdGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKTtcbiAgaWYgKGltZyYmaW1nLmxlbmd0aD4wKXtcbiAgICBmb3JFYWNoRG9tKGltZywoaXRlbSk9PntcbiAgICAgIGxldCBzcmMgPSAgaXRlbS5nZXRBdHRyaWJ1dGUoJ3NyYycpO1xuICAgICAgbGV0ICBjb3JyZWN0U3JjID1zcmMucmVwbGFjZUFsbCgnXFxcXFxcXCInLCcnKTtcbiAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdzcmMnLGNvcnJlY3RTcmMpXG4gICAgfSlcbiAgfVxuICAvLyBsZXQgaW1nU3RyICA9ICAgaXRlbS5tYXRjaCgvKHNyYz0pKC4qKShcXFwiPikvZylcbiAgLy8gaWYgKEFycmF5LmlzQXJyYXkoaW1nU3RyKSl7XG4gIC8vICAgbGV0ICB1cmwgPSBpbWdTdHJbMF0ucmVwbGFjZUFsbCgnXFxcXFxcXCInLCcnKVxuICAvLyAgIGNvbnNvbGUubG9nKGB1cmw6YCwgdXJsKVxuICAvLyAgIG5ld0RvbS5yZXBsYWNlQWxsKC8oc3JjPSkoLiopKFxcXCI+KS9nLHVybCsnPicpXG4gIC8vICAgY29uc29sZS5sb2coYG5ld0RvbTpgLCBuZXdEb20pXG4gIC8vIH1cbn1cblxuLy8g5aSE55CGcHJl5Lit55qEc3Ryb25nXG5mdW5jdGlvbiAgaGFuZGxlUHJlU3Ryb25nKCl7XG4gIGxldCBzdHJvbmcgID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgncHJlIHN0cm9uZycpO1xuICBsZXQgc3BhbiAgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdwcmUgc3BhbicpO1xuICBpZiAoc3Ryb25nLmxlbmd0aCYmc3Ryb25nLmxlbmd0aD4wKXtcbiAgICAgIGZvckVhY2hEb20oc3Ryb25nLChpdGVtKT0+e1xuICAgICAgICBSZXBsYWNlRWxlbWVudChpdGVtLCdzdHJvbmcnLCdjb2RlJylcbiAgICAgIH0pXG4gICAgfVxuICAgIGlmIChzcGFuLmxlbmd0aCYmc3Bhbi5sZW5ndGg+MCl7XG4gICAgICBmb3JFYWNoRG9tKHN0cm9uZywoaXRlbSk9PntcbiAgICAgICAgUmVwbGFjZUVsZW1lbnQoaXRlbSwnc3Ryb25nJywnY29kZScpXG4gICAgICB9KVxuICAgIH1cbn1cblxuZnVuY3Rpb24gUmVwbGFjZUVsZW1lbnQocmVwbGFjZURvbSx0YWdOYW1lLGdlbmVyYXRlRG9tKXtcbiAgbGV0IGNvZGVDb250ZW50ID0gXCJcIjtcbiAgbGV0IGN1cnJlbnRDb250ZW50ID0gcmVwbGFjZURvbS5vdXRlckhUTUw7XG5cbiAgbGV0IFRhcmdldENvbnRlbnQgPSBjdXJyZW50Q29udGVudC5yZXBsYWNlKGA8JHt0YWdOYW1lfT5gLCBgYCk7XG4gIGNvZGVDb250ZW50ID0gVGFyZ2V0Q29udGVudC5yZXBsYWNlKGA8LyR7dGFnTmFtZX0+YCwgYGApO1xuXG4gIGlmICghcmVwbGFjZURvbS5vdXRlckhUTUwpe1xuXG4gIH1lbHNle1xuICAgIHRyeSB7XG4gICAgICAvLyBjb25zb2xlLmxvZyhgcmVwbGFjZURvbTpgLCByZXBsYWNlRG9tKVxuXG4gICAgICByZXBsYWNlRG9tLm91dGVySFRNTCA9IGNvZGVDb250ZW50O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBlOmAsIGUpXG5cblxuICAgIH1cblxuICB9XG5cbn1cbiIsIlxyXG5cclxuZnVuY3Rpb24gIGJvZHlFdmVudCAoY2FsbCl7XHJcbiAgICBsZXQgIGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdO1xyXG4gICAgYm9keS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgY2FsbClcclxufVxyXG5cclxuXHJcbmZ1bmN0aW9uICBodG1sRXZlbnQgKGNhbGwpe1xyXG4gICAgbGV0ICBodG1sID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2h0bWwnKVswXTtcclxuICAgIGh0bWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGNhbGwpXHJcbn1cclxuXHJcbmV4cG9ydCB7XHJcbiAgICBib2R5RXZlbnQsXHJcbiAgICBodG1sRXZlbnRcclxufVxyXG4iLCJpbXBvcnQge0dlbmVyYXRlQmlsaW5ndWFsfSBmcm9tIFwiLi4vbW9kaWZ5L2dlbmVyYXRlQmlsaW5ndWFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdlbmVyYXRlX2NhdGFsb2coXG4gIGVsZW1lbnRzLFxuKSB7XG4gIGxldCB7IGhlYWQsIGJvZHksIHRvYyB9ID0gZWxlbWVudHM7XG4gIGxldCByZWdFeHAgPSAvW2hIXVsxLTRdLztcbiAgbGV0IGNhdGFsb2cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgbGV0ICAgbWluZGV4ID0gMFxuXG4gIGxldCBzdHlsZSA9YG1hcmdpbjo1cHggMCAwIDA7Zm9udC1zaXplOjE0cHg7Zm9udC1zaXplOjkwJTtib3JkZXItYm90dG9tOjFweCBzb2xpZCBibHVlO3BhZGRpbmctbGVmdDoxMHB4O21hcmdpbjo1cHg7YFxuICBmdW5jdGlvbiBpbm5lclRleHRGdW4oaW5uZXJUZXh0KSB7XG4gICAgbGV0IGlubmVyVGV4dG9uZSA9IFwiXCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbm5lclRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChpbm5lclRleHRbaV0gPT09IFwiPlwiKSB7XG4gICAgICAgIGlubmVyVGV4dG9uZSArPSBcIiZndDtcIjtcbiAgICAgIH0gZWxzZSBpZiAoaW5uZXJUZXh0W2ldID09PSBcIjxcIikge1xuICAgICAgICBpbm5lclRleHRvbmUgKz0gXCImbHQ7XCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbm5lclRleHRvbmUgKz0gaW5uZXJUZXh0W2ldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaW5uZXJUZXh0b25lO1xuICB9XG5cbmxldCAgaE51bWJlciA9IHtcbiAgICBIMTowLFxuICAgIEgyOjEsXG4gICAgSDM6MixcbiAgICBINDozLFxuICAgIEg1OjQsXG4gICAgSDY6NSxcbn1cblxubGV0ICBsYXN0S2V5ID17XG4gICAgY3VycmVudDowLFxuICAgIHByZTowXG59XG5cbmxldCAgIEluZGV4QXJyID1bMCwwLDAsMCwwLDBdXG5cbiAgbGV0IGNsZWFyRGF0YSA9IChpbmRleCk9PntcbiAgICBJbmRleEFyci5mb3JFYWNoKChpdGVtLGtleUluZGV4KT0+e1xuICAgICAgaWYgKGtleUluZGV4ID5pbmRleCl7XG4gICAgICAgIEluZGV4QXJyW2tleUluZGV4XSA9IDBcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkLmxlbmd0aDsgaSsrKSB7XG4gICAgLy/mtYvor5XmmK/kuI3mmK9oMS1oNuS5i+mXtFxuICAgIGxldCBub2RlID0gaGVhZFtpXTtcbiAgICBsZXQgbmFtZSA9IG5vZGUubm9kZU5hbWU7XG4gICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2lkJyxpKVxuICAgIGxldCBSZWdFeHBFZCA9IHJlZ0V4cC50ZXN0KG5hbWUpO1xuICAgIC8v6buY6K6k5bCx5piv5LuO5pyA5aSn5byA5aeLLOW8gOWxgOeahOmCo+S4quiCr+WumuaYr+acgOWkp+eahFxuICAgIGlmIChSZWdFeHBFZCkge1xuICAgICAgLy/lhYjojrflj5blvZPliY3nmoRjdXJyZW50XG4gICAgICBsZXQgIEFyckluZGV4ID0gaE51bWJlcltuYW1lXVxuICAgICAgbGFzdEtleS5jdXJyZW50ID0gQXJySW5kZXhcblxuICAgICAgaWYgKGxhc3RLZXkuY3VycmVudCA8IGxhc3RLZXkucHJlKXtcbiAgICAgICAgY2xlYXJEYXRhKEFyckluZGV4KVxuICAgICAgfVxuXG4gICAgICBJbmRleEFycltBcnJJbmRleF0gKytcbiAgICAgIGxhc3RLZXkucHJlID1BcnJJbmRleFxuXG4gICAgICBsZXQgSW5kZXhOdW1iZXJBcnJheSA9SW5kZXhBcnIuZmlsdGVyKGl0ZW09PntcbiAgICAgICAgcmV0dXJuIGl0ZW1cbiAgICAgIH0pXG4gICAgICBsZXQgaW5uZXJUZXh0ID0gaGVhZFtpXS5pbm5lclRleHQ7XG4gICAgICBsZXQgbWF0Y2ggPSBpbm5lclRleHQubWF0Y2goL1xcZC9nKTtcbiAgICAgIGlubmVyVGV4dCA9IGlubmVyVGV4dEZ1bihpbm5lclRleHQpO1xuICAgICAgbGV0IHRpdGxlID0gJydcbiAgICAgIEluZGV4TnVtYmVyQXJyYXkuc3BsaWNlKGhOdW1iZXJbbmFtZV0rMSlcbiAgICAgIGlmICghbWF0Y2gpdGl0bGUgPSBJbmRleE51bWJlckFycmF5LmpvaW4oJy4nKSsgJyAnO1xuICAgICAgICBsZXQgQUhUTUwgPSAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuYW1lKTtcbiAgICAgIEFIVE1MLnNldEF0dHJpYnV0ZSgnY2xhc3MnLGBoZWFkZXJgKVxuICAgICAgQUhUTUwuc2V0QXR0cmlidXRlKCdzdHlsZScsc3R5bGUpXG4gICAgICBBSFRNTC5pbm5lckhUTUwgPVwiPFwiICtcbiAgICAgICAgICAnYScgK1xuICAgICAgICAgIFwiIFwiICtcbiAgICAgICAgICBgaHJlZj1cIiMke2l9XCJgK1xuICAgICAgICAgIFwiPlwiICtcbiAgICAgICAgICB0aXRsZStcblxuICAgICAgICAgIGlubmVyVGV4dCArXG4gICAgICAgICAgXCI8L1wiICtcbiAgICAgICAgICAnYScgK1xuICAgICAgICAgIFwiPlwiXG4gICAgICBjYXRhbG9nLmFwcGVuZENoaWxkKEFIVE1MKVxuICAgICAgICBtaW5kZXgrK1xuICAgIH1cblxuICB9XG4gIC8v5L2/55So5a2X56ym5Liy55Sf5oiQ55qE5YWD57SgLOS4jemepeS9v+eUqOWFg+e0oOeahOacrOWcsOaWueazlVxuICB0b2MuaW5uZXJIVE1MID0gY2F0YWxvZy5pbm5lckhUTUw7XG5cbiAgY2F0YWxvZyA9IG51bGw7XG4gIC8vIEdlbmVyYXRlQmlsaW5ndWFsKGhlYWQpXG59XG4iLCJsZXQgY29tcG9uZW50X2RhdGEgPSBudWxsO1xuLy/mm7TmlrDkvY3nva5cbmxldCBjb21wb25lbnRfZnVuY3Rpb24gPSBudWxsO1xuXG5mdW5jdGlvbiB0b2NDaGFuZ2UoZWxlbWVudCwgdXRpbEZ1bmN0aW9uKSB7XG4gIGlmIChlbGVtZW50ICE9PSBudWxsICYmIHV0aWxGdW5jdGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbXBvbmVudF9kYXRhID0gZWxlbWVudDtcbiAgICBjb21wb25lbnRfZnVuY3Rpb24gPSB1dGlsRnVuY3Rpb247XG4gIH1cbn1cbmZ1bmN0aW9uIG1pbl9oZWFkKCkge1xuICAvL+WIqeeUqOmXreWMhei+vuaIkOWCqOWtmOacrOWcsOeahCzkuI3og73nlKjliKTmlq3or63lj6Us5YaN5Y675Yik5patLOWNs+S9v+i/meagtyzkuZ/kvJrlr7zoh7TlsZ7mgKfnmoTkuKLlpLFcbiAgbGV0IHByZXZIZWFkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJwcmV2SGVhZFwiKTtcbiAgbGV0IGlkX2FycmF5ID0gW107XG4gIGxldCBoZWFkX2FycmF5ID0gW107XG4gIC8vIOi3neemu+acgOi/keeahOeul+azlVxuICBsZXQgbGF0ZWx5X2FycmF5ID0gW107XG4gIGxldCBsYXRlbHlfYXJyYXlfbmVnYXRpdmUgPSBbXTtcbiAgbGV0IHRvYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidG9jMVwiKVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHRvYy5jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIGxldCAgIHRhcmdldERvbSAgPSAgIHRvYy5jaGlsZHJlbltpXS5jaGlsZHJlblswXVxuICAgIGxldCBocmVmID10YXJnZXREb20uZ2V0QXR0cmlidXRlKFwiaHJlZlwiKTtcbiAgICBpZiAoaHJlZikge1xuICAgICAgbGV0IGlkID0gaHJlZi5yZXBsYWNlKFwiI1wiLCBcIlwiKTtcbiAgICAgIGxldCBlbGVtZW50QnlJZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcbiAgICAgIGlkX2FycmF5LnB1c2goZWxlbWVudEJ5SWQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wKTtcbiAgICAgIGhlYWRfYXJyYXkucHVzaCh0b2MuY2hpbGRyZW5baV0pO1xuICAgIH1cbiAgfVxuICBsZXQgZXZlcnkgPSBpZF9hcnJheS5ldmVyeSgoY3VycmVudFZhbHVlKSA9PiBjdXJyZW50VmFsdWUgPiAwKTtcblxuICBpZiAoIWV2ZXJ5KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpZF9hcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGlkX2FycmF5W2ldID4gMCkge1xuICAgICAgICBsYXRlbHlfYXJyYXkucHVzaChpZF9hcnJheVtpXSk7XG4gICAgICB9XG4gICAgICBpZiAoaWRfYXJyYXlbaV0gPCAwKSB7XG4gICAgICAgIGxhdGVseV9hcnJheV9uZWdhdGl2ZS5wdXNoKE1hdGguYWJzKGlkX2FycmF5W2ldKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaWRfYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBtaW4gPSBNYXRoLm1pbiguLi5sYXRlbHlfYXJyYXkpO1xuICAgICAgbGV0IG5lZ2F0aXZlX21pbiA9IE1hdGgubWluKC4uLmxhdGVseV9hcnJheV9uZWdhdGl2ZSk7XG4gICAgICAvL+ajgOafpeWJjeWQjuWtmOS4jeWtmOWcqOi/meS4qnByZWhlYWQs5YmN6Z2i55So6L+H5LqGXG4gICAgICBpZiAobWluIDwgbmVnYXRpdmVfbWluKSB7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtaW4gPSBuZWdhdGl2ZV9taW47XG4gICAgICB9XG4gICAgICBpZiAoTWF0aC5hYnMoaWRfYXJyYXlbaV0pID09PSBtaW4pIHtcblxuICAgICAgICBpc19leGlzdF9Gcm9udChwcmV2SGVhZCwgaGVhZF9hcnJheSwgaSk7XG4gICAgICAgIC8v6K6+572u5b2T5YmN55qE5qC35byPXG4gICAgICAgIGlmIChoZWFkX2FycmF5Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIGNhdGFsb2dfY29kZV9zdHlsZShoZWFkX2FycmF5W2ldLCBpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvL+S4gOW8gOWni+WKoOi9vemDveaYr+ato+aVsOeahOaXtuWAmVxuICAgIGlmIChwcmV2SGVhZCAmJiBoZWFkX2FycmF5W3ByZXZIZWFkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBJc19leGlzdChoZWFkX2FycmF5W3ByZXZIZWFkXSwgMSk7XG4gICAgfVxuICAgIGlmIChoZWFkX2FycmF5Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgY2F0YWxvZ19jb2RlX3N0eWxlKGhlYWRfYXJyYXlbMF0sIDApO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gaXNfZXhpc3RfRnJvbnQocHJldkhlYWQsIGhlYWRfYXJyYXksIGkpIHtcbiAgLy/liY3pnaLlrZjlnKjov5nkuKrlgLws5pyJ5Lik56eN5Y+v6IO9LFxuICAvLyAxLuWtmOWcqOagt+W8jywyLuS4jeWtmOWcqOagt+W8j1xuICAvLyAxLuWtmOWcqHByZWhlYWQgMi7kuI3lrZjlnKhwcmVoZWFkXG4gIC8vIDEucHJlaGVhZOaYr+W9k+WJjeWFg+e0oCAyLnByZWhlYWQg5LiN5piv5b2T5YmN5YWD57SgXG4gIGlmIChwcmV2SGVhZCAmJiBoZWFkX2FycmF5W3ByZXZIZWFkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy/pppblhYjmuIXpmaTliY3kuIDkuKrnmoTlhYPntKBcblxuICAgIGlmIChoZWFkX2FycmF5W2ldICE9PSBoZWFkX2FycmF5W3ByZXZIZWFkXSkge1xuICAgICAgLy8gcHJlaGVhZCDkuI3mmK/lvZPliY3lhYPntKBcbiAgICAgIC8vIGNvbnNvbGUubG9nKGhlYWRfYXJyYXlbcHJldkhlYWRdKVxuICAgICAgSXNfZXhpc3QoaGVhZF9hcnJheVtwcmV2SGVhZF0sIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDnm7TmjqXnva4wLOmHjeaWsOa4suafk+agt+W8jyxwcmVoZWFk5piv5b2T5YmN5YWD57SgXG4gICAgICAvLyBjb25zb2xlLmxvZyhoZWFkX2FycmF5W2ldKVxuICAgICAgSXNfZXhpc3QoaGVhZF9hcnJheVtpXSwgMCk7XG4gICAgfVxuICAgIC8vIOWPquimgWxvY2Fsc3RyYWdl5Lit5pyJ6L+Z5Lqb55qE5Luj56CBXG4gIH0gZWxzZSB7XG4gIH1cbiAgLy/lpoLmnpzlrZDlh73mlbDlhoXpg6jmsqHmnInnm7jlupTnmoTmlbDmja5cbn1cblxuZnVuY3Rpb24gSXNfZXhpc3QoaGVhZF9hcnJheV9wcmUsIGlzX2V4aXN0KSB7XG4gIC8v5LiN5YWz5p2R5LiN5a2Y5ZyoLOWFqOmDqOa4hemZpOWxnuaAp1xuICBsZXQgYXR0cmlidXRlMSA9IGhlYWRfYXJyYXlfcHJlLmdldEF0dHJpYnV0ZShcInN0eWxlXCIpO1xuICBhdHRyaWJ1dGUxID0gY29tcG9uZW50X2Z1bmN0aW9uLlJlcGxhY2VTYW1lUHJvcGVydHkoXG4gICAgXCI7XCIsXG4gICAgYXR0cmlidXRlMSxcbiAgICBcImJhY2tncm91bmQtY29sb3JcIlxuICApO1xuICBhdHRyaWJ1dGUxID0gY29tcG9uZW50X2Z1bmN0aW9uLlJlcGxhY2VTYW1lUHJvcGVydHkoXCI7XCIsIGF0dHJpYnV0ZTEsIFwiY29sb3JcIik7XG5cbiAgaWYgKCFpc19leGlzdCkge1xuXG4gICAgaGVhZF9hcnJheV9wcmUuc2V0QXR0cmlidXRlKFxuICAgICAgXCJzdHlsZVwiLFxuICAgICAgYCR7YXR0cmlidXRlMX07YmFja2dyb3VuZC1jb2xvcjpicm93bjtgXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBoZWFkX2FycmF5X3ByZS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBgJHthdHRyaWJ1dGUxfWNvbG9yOmJsYWNrYCk7XG4gICAgaGVhZF9hcnJheV9wcmUuc2V0QXR0cmlidXRlKFxuICAgICAgICBcImNsYXNzXCIsXG4gICAgICAgIGBoZWFkZXJgXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYXRhbG9nX2NvZGVfc3R5bGUoaGVhZF9hcnJheV9pLCBpKSB7XG4gIGxldCBhdHRyaWJ1dGUgPSBoZWFkX2FycmF5X2kuZ2V0QXR0cmlidXRlKFwic3R5bGVcIik7XG4gIGF0dHJpYnV0ZSA9IGNvbXBvbmVudF9mdW5jdGlvbi5SZXBsYWNlU2FtZVByb3BlcnR5KFxuICAgIFwiO1wiLFxuICAgIGF0dHJpYnV0ZSxcbiAgICBcImJhY2tncm91bmQtY29sb3JcIlxuICApO1xuICBhdHRyaWJ1dGUgPSBjb21wb25lbnRfZnVuY3Rpb24uUmVwbGFjZVNhbWVQcm9wZXJ0eShcIjtcIiwgYXR0cmlidXRlLCBcImNvbG9yXCIpO1xuICBoZWFkX2FycmF5X2kuc2V0QXR0cmlidXRlKFxuICAgIFwic3R5bGVcIixcbiAgICBgJHthdHRyaWJ1dGV9YmFja2dyb3VuZC1jb2xvcjpoc2woMjAxLCAxMDAlLCA4NiUpO2NvbG9yOndoaXRlO2BcbiAgKTtcbiAgaGVhZF9hcnJheV9pLnNldEF0dHJpYnV0ZShcbiAgICAgIFwiY2xhc3NcIixcbiAgICAgIFwic2VsZWN0RG9tXCJcbiAgKTtcbiAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJwcmV2SGVhZFwiLCBpKTtcbn1cblxuZXhwb3J0IHsgdG9jQ2hhbmdlLCBtaW5faGVhZCB9O1xuIiwiaW1wb3J0IGFwaSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgICAgICAgaW1wb3J0IGNvbnRlbnQgZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9wYW5lbC5jc3NcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiLCIvKlxuMS7orr7nva5cbiAqL1xuaW1wb3J0IFwiLi4vY3NzL3BhbmVsLmNzc1wiO1xubGV0IGNvbXBvbmVudF9tZXRob2RzID0gbnVsbDtcbmxldCBjb21wb25lbnRfZGF0YSA9IHtcbiAgYm9keTogbnVsbCxcbiAgVVJMOiBudWxsLFxuICBodG1sOiBudWxsLFxuICBwYW5lbDogbnVsbCxcbiAgdG9jRWxlbWVudDogbnVsbCxcbiAgc3ViUGFuZWxzOiBbXSxcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYW5lbChlbGVtZW50cywgcGFuZWxQcm9qZWN0LCB1dGlsRnVuY3Rpb24pIHtcbiAgbGV0IHsgYm9keSxodG1sLFVSTCwgdG9jRWxlbWVudCB9ID0gZWxlbWVudHM7XG4gIGNvbXBvbmVudF9tZXRob2RzID0gdXRpbEZ1bmN0aW9uO1xuICBjb21wb25lbnRfZGF0YS5ib2R5ID0gYm9keTtcbiAgY29tcG9uZW50X2RhdGEuaHRtbCA9IGh0bWw7XG4gIGNvbXBvbmVudF9kYXRhLlVSTCA9IFVSTDtcbiAgY29tcG9uZW50X2RhdGEudG9jRWxlbWVudCA9IHRvY0VsZW1lbnQ7XG4gIC8v5Yib5bu66Z2i5p2/XG4gIGxldCBwYW5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIHBhbmVsLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwicGFuZWxcIik7XG4gIGNvbXBvbmVudF9kYXRhLnBhbmVsID0gcGFuZWw7XG4gIC8vIOeUn+aIkHBhbmVs5Lit55qE6aG555uuXG4gIGZvciAoY29uc3QgcGFuZWxQcm9qZWN0S2V5IGluIHBhbmVsUHJvamVjdCkge1xuICAgIGxldCBzdWJQYW5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgc3ViUGFuZWwuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgYG5vdHJhbnNsYXRlIHN1YlBhbmVsIGN5eHktdHJzLXRhcmdldGApO1xuICAgIHN1YlBhbmVsLnNldEF0dHJpYnV0ZShcImlkXCIsIHBhbmVsUHJvamVjdEtleSk7XG4gICAgaWYgKHBhbmVsUHJvamVjdEtleSAhPT0gXCJwZXJjZW50YWdlXCIpIHtcbiAgICAgIHN1YlBhbmVsLnNldEF0dHJpYnV0ZShcIm9uc2VsZWN0c3RhcnRcIiwgXCJyZXR1cm4gZmFsc2VcIik7XG4gICAgfVxuICAgIHBhbmVsLmFwcGVuZENoaWxkKHN1YlBhbmVsKTtcbiAgICBjb21wb25lbnRfZGF0YS5zdWJQYW5lbHMucHVzaChzdWJQYW5lbCk7XG4gICAgcGFuZWxIYW5kbGVFdmVudC5wYW5lbENhbGwoc3ViUGFuZWwsIHBhbmVsUHJvamVjdEtleSk7XG4gIH1cbiAgLy/nsbvkvLzkuo7lnKjmlbDmja7muLLmn5PlkI7lho3mrKHosIPnlKhcbiAgcGFuZWxIYW5kbGVFdmVudC5wYW5lbENhbGwoY29tcG9uZW50X2RhdGEuc3ViUGFuZWxzWzBdLCBcInBhbmVsX3N0YXR1c1wiKTtcbiAgYm9keS5hcHBlbmRDaGlsZChwYW5lbCk7XG5cbiAgcmV0dXJuIHBhbmVsO1xufVxuXG5sZXQgcGFuZWxIYW5kbGVFdmVudCA9IChmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHBhbmVsX3R5cGUgPSB7XG4gICAgLy/pnaLmnb/nirbmgIFcbiAgICBwYW5lbF9zdGF0dXM6IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICBsZXQgY29tcG9uZW50X2VsZW1lbnQgPSB7XG4gICAgICAgIHBhbmVsX3N0YXR1czogZWxlbWVudCxcbiAgICAgICAgc3ViUGFuZWxzOiBjb21wb25lbnRfZGF0YS5zdWJQYW5lbHMsXG4gICAgICB9O1xuICAgICAgbGV0IGNvbXBvbmVudF9mdW5jdGlvbiA9IHtcbiAgICAgICAgUmVwbGFjZVNhbWVQcm9wZXJ0eTogY29tcG9uZW50X21ldGhvZHMuUmVwbGFjZVNhbWVQcm9wZXJ0eSxcbiAgICAgIH07XG4gICAgICBjb21wb25lbnRfbWV0aG9kcy5wYW5lbFN0YXR1cyhjb21wb25lbnRfZWxlbWVudCwgY29tcG9uZW50X2Z1bmN0aW9uKTtcbiAgICB9LFxuICAgIC8v6YKj56eN57+76K+RIG3msqHmnInov5nnp43lip/og73kuoZcbiAgICBUeXBlc19vZl90cmFuc2xhdGlvbjogZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgIGxldCBjb21wb25lbnRfZWxlbWVudCA9IHtcbiAgICAgICAgVHlwZXNfb2ZfdHJhbnNsYXRpb246IGVsZW1lbnQsXG4gICAgICB9O1xuICAgICAgbGV0IGNvbXBvbmVudF9mdW5jdGlvbiA9IHtcbiAgICAgICAgUmVwbGFjZVNhbWVQcm9wZXJ0eTogY29tcG9uZW50X21ldGhvZHMuUmVwbGFjZVNhbWVQcm9wZXJ0eSxcbiAgICAgIH07XG4gICAgICBjb21wb25lbnRfbWV0aG9kcy5UeXBlc1RyYW5zbGF0aW9uKGNvbXBvbmVudF9lbGVtZW50LCBjb21wb25lbnRfZnVuY3Rpb24pO1xuICAgIH0sXG4gICAgLy/pobXpnaLov5vluqbnmb7liIbmr5RcbiAgICBwZXJjZW50YWdlOiBmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgICAgbGV0IGNvbXBvbmVudF9lbGVtZW50ID0ge1xuICAgICAgICBwZXJjZW50YWdlOiBlbGVtZW50LFxuICAgICAgfTtcbiAgICAgIGNvbXBvbmVudF9tZXRob2RzLnNob3coY29tcG9uZW50X2VsZW1lbnQpO1xuICAgIH0sXG4gICAgLy/lrZDoj5zljZVcbiAgICBTdWJtZW51X3N0YXR1czogZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICAgIGxldCBjb21wb25lbnRfZWxlbWVudCA9IHtcbiAgICAgICAgU3VibWVudV9zdGF0dXM6IGVsZW1lbnQsXG4gICAgICAgIHRvY0VsZW1lbnQ6IGNvbXBvbmVudF9kYXRhLnRvY0VsZW1lbnQsXG4gICAgICAgIGJvZHk6Y29tcG9uZW50X2RhdGEuYm9keSxcbiAgICAgICAgaHRtbDogY29tcG9uZW50X2RhdGEuaHRtbCxcbiAgICAgICAgVVJMOmNvbXBvbmVudF9kYXRhLlVSTFxuICAgICAgfTtcbiAgICAgIGxldCBjb21wb25lbnRfZnVuY3Rpb24gPSB7XG4gICAgICAgIFJlcGxhY2VTYW1lUHJvcGVydHk6IGNvbXBvbmVudF9tZXRob2RzLlJlcGxhY2VTYW1lUHJvcGVydHksXG4gICAgICAgIHN0eWxlQm9keTpjb21wb25lbnRfbWV0aG9kcy5zdHlsZUJvZHlcbiAgICAgIH07XG4gICAgICBjb21wb25lbnRfbWV0aG9kcy5TdWJtZW51X3N0YXR1cyhjb21wb25lbnRfZWxlbWVudCwgY29tcG9uZW50X2Z1bmN0aW9uKTtcbiAgICB9LFxuICAgIC8v5Li76I+c5Y2VXG4gICAgTWFpbl9tZW51X3N0YXR1czogZnVuY3Rpb24gKGVsZW1lbnQpIHt9LFxuICAgIC8v5Lit6Iux5paH5a+554WnIOayoeaciei/meS4quWKn+iDveS6hlxuICAgIC8vIENoaW5lc2VfYW5kX0VuZ2xpc2g6IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgLy8gICBsZXQgY29tcG9uZW50X2VsZW1lbnQgPSB7XG4gICAgLy8gICAgIENoaW5lc2VfYW5kX0VuZ2xpc2g6IGVsZW1lbnQsXG4gICAgLy8gICB9O1xuICAgIC8vICAgbGV0IGNvbXBvbmVudF9mdW5jdGlvbiA9IHtcbiAgICAvLyAgICAgUmVwbGFjZVNhbWVQcm9wZXJ0eTogY29tcG9uZW50X21ldGhvZHMuUmVwbGFjZVNhbWVQcm9wZXJ0eSxcbiAgICAvLyAgIH07XG4gICAgLy8gICBjb21wb25lbnRfbWV0aG9kcy5CaWxpbmd1YWwoY29tcG9uZW50X2VsZW1lbnQsIGNvbXBvbmVudF9mdW5jdGlvbik7XG4gICAgLy8gfSxcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBwYW5lbENhbGw6IGZ1bmN0aW9uIChzdWJQYW5lbCwgcGFuZWxQcm9qZWN0S2V5KSB7XG4gICAgICAvL+S9v+eUqGUudGFyZ2V0LmlkIOadpeiuvue9ruWvueW6lOeahCzlnKhhZGRFdmVudExpc3RlbmVy5LitLOaIkeS7rOWPr+S7peS9v+eUqGXkuK3luKbmnInngrnlsZ7mgKcs5p2l6K6+572u5LiN5ZCM562W55Wl5Lit55qE5Ye95pWw5ZCNLOS7peWunueOsOWQiuW9seWvueW6lOeahOaWueazlVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgcGFuZWxfdHlwZVtwYW5lbFByb2plY3RLZXldICYmIHBhbmVsX3R5cGVbcGFuZWxQcm9qZWN0S2V5XShzdWJQYW5lbClcbiAgICAgICk7XG4gICAgfSxcbiAgfTtcbn0pKCk7XG4iLCIvL3Nob3flsZXnpLrnmb7liIbmr5RcbmxldCBjb21wb25lbnRfZGF0YSA9IHtcbiAgcGVyY2VudGFnZTogbnVsbCxcbn07XG5mdW5jdGlvbiBzaG93KGVsZW1lbnRzKSB7XG4gIGxldCB7IHBlcmNlbnRhZ2UgfSA9IGVsZW1lbnRzO1xuICBjb21wb25lbnRfZGF0YS5wZXJjZW50YWdlID0gcGVyY2VudGFnZTtcbiAgcGVyY2VudGFnZS5zZXRBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIiwgdHJ1ZSk7XG4gIHBlcmNlbnRhZ2UuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKSB7XG4gICAgICBsZXQgbnVtID0gcGVyY2VudGFnZS5pbm5lclRleHQuc3BsaXQoXCItXCIpO1xuICAgICAgbGV0IHkgPVxuICAgICAgICAoTnVtYmVyKG51bVswXSkgKlxuICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgKlxuICAgICAgICAgIDEwMDAwKSAvXG4gICAgICAgIDEwMDAwMDA7XG4gICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG8oMCwgeSk7XG4gICAgICBwZXJjZW50YWdlLmJsdXIoKTtcbiAgICB9XG4gIH0pO1xuXG4gIHBlcmNlbnRhZ2UuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgbGV0IG51bSA9IHBlcmNlbnRhZ2UuaW5uZXJUZXh0LnNwbGl0KFwiLVwiKTtcbiAgICBsZXQgbGFzdG51bSA9IHBlcmNlbnRhZ2UuZ2V0QXR0cmlidXRlKFwicGxhY2Vob2xkZXJcIikuc3BsaXQoXCItXCIpO1xuXG4gICAgaWYgKG51bVswXSAhPT0gbGFzdG51bVswXSkge1xuICAgICAgbGV0IHkgPVxuICAgICAgICAoTnVtYmVyKG51bVswXSkgKlxuICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgKlxuICAgICAgICAgIDEwMDAwKSAvXG4gICAgICAgIDEwMDAwMDA7XG4gICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG8oMCwgeSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlcmNlbnRhZ2UuaW5uZXJUZXh0ID0gcGVyY2VudGFnZS5nZXRBdHRyaWJ1dGUoXCJwbGFjZWhvbGRlclwiKTtcbiAgICB9XG4gIH0pO1xuXG4gIHBlcmNlbnRhZ2UuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGxldCBudW0gPSBwZXJjZW50YWdlLmlubmVyVGV4dDtcbiAgICBwZXJjZW50YWdlLnNldEF0dHJpYnV0ZShcInBsYWNlaG9sZGVyXCIsIG51bSk7XG4gIH0pO1xuXG4gIHNob3dfY29kZSgpO1xufVxuXG4vL+aYvuekuueZvuWIhuavlCFcbmZ1bmN0aW9uIHNob3dfY29kZSgpIHtcbiAgaWYgKGNvbXBvbmVudF9kYXRhLnBlcmNlbnRhZ2UgPT09IG51bGwpIHJldHVybjtcbiAgbGV0IGluaXRfaGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgaWYgKGluaXRfaGVpZ2h0ID4gd2luZG93LmlubmVySGVpZ2h0KSB7XG4gICAgaW5pdF9oZWlnaHQgPSBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDtcbiAgfVxuICBsZXQgbm93ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBpZiAobG9jYXRpb24uaHJlZi5pbmNsdWRlcyhcIm5wbVwiKSkge1xuICAgIG5vdyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwibWFpblwiKVswXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgfVxuICBsZXQgcGVyY2VudF9iZWdpbiA9XG4gICAgTWF0aC5mbG9vcigoTWF0aC5hYnMobm93LnRvcCkgLyBub3cuaGVpZ2h0KSAqIDEwMDAwKSAvIDEwMDtcbiAgbGV0IHBlcmNlbnRfZW5kID1cbiAgICBNYXRoLmZsb29yKCgoTWF0aC5hYnMobm93LnRvcCkgKyBpbml0X2hlaWdodCkgLyBub3cuaGVpZ2h0KSAqIDEwMDAwKSAvIDEwMDtcbiAgY29tcG9uZW50X2RhdGEucGVyY2VudGFnZS5pbm5lclRleHQgPVxuICAgIHBlcmNlbnRfYmVnaW4gKyBcIi0tXCIgKyBwZXJjZW50X2VuZCArIFwiJVwiO1xuICByZXR1cm4gTWF0aC5hYnMobm93LnRvcCk7XG59XG5cbmV4cG9ydCB7IHNob3csIHNob3dfY29kZSB9O1xuIiwibGV0IGNvbXBvbmVudF9kYXRhID0gbnVsbFxubGV0IGNvbXBvbmVudF9tZXRob2RzID0gbnVsbDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gU3VibWVudV9zdGF0dXMoZWxlbWVudHMsIHV0aWxGdW5jdGlvbikge1xuICBjb21wb25lbnRfbWV0aG9kcyA9IHV0aWxGdW5jdGlvbjtcbiAgY29tcG9uZW50X2RhdGEgPSBlbGVtZW50cztcbiAgLy/kuIDlvIDlp4vkvb/nlKjkuI3lrZjlnKgs6L+b6KGM6K6+572uXG4gIGxldCBTdWJtZW51X3N0YXR1c0tleSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiU3VibWVudV9zdGF0dXNcIik7XG4gIGlmIChTdWJtZW51X3N0YXR1c0tleSA9PT0gbnVsbCkge1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiU3VibWVudV9zdGF0dXNcIiwgMSk7XG4gICAgY29tcG9uZW50X2RhdGEuU3VibWVudV9zdGF0dXMuaW5uZXJUZXh0ID0gXCLoj5zljZXmiZPlvIBcIjtcbiAgfVxuICAvL+W3sue7j+WtmOWcqOWwseivu+WPllxuICBpZiAoU3VibWVudV9zdGF0dXNLZXkgPT09IFwiMVwiKSB7XG4gICAgY29tcG9uZW50X2RhdGEuU3VibWVudV9zdGF0dXMuaW5uZXJUZXh0ID0gXCLoj5zljZXmiZPlvIBcIjtcbiAgfSBlbHNlIHtcbiAgICBzaG93VG9jKGBkaXNwbGF5Om5vbmU7YCk7XG4gICAgY29tcG9uZW50X2RhdGEuU3VibWVudV9zdGF0dXMuaW5uZXJUZXh0ID0gXCLoj5zljZXmlLbmi6JcIjtcbiAgfVxuICBjb21wb25lbnRfZGF0YS5TdWJtZW51X3N0YXR1cy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaGFuZGxlU3VibWVudV9zdGF0dXMpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVTdWJtZW51X3N0YXR1cygpIHtcbiAgY29uc29sZS5sb2coXCIuLi4uXCIpO1xuICBsZXQgU3VibWVudV9zdGF0dXNLZXkgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlN1Ym1lbnVfc3RhdHVzXCIpO1xuICBpZiAoU3VibWVudV9zdGF0dXNLZXkgPT09IFwiMVwiKSB7XG4gICAgY29uc29sZS5sb2coXCLoj5zljZXlj5fmjqfnmoTnirbmgIFcIik7XG4gICAgc2hvd1RvYyhgZGlzcGxheTpub25lO2ApO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiU3VibWVudV9zdGF0dXNcIiwgMCk7XG4gICAgY29tcG9uZW50X2RhdGEuU3VibWVudV9zdGF0dXMuaW5uZXJUZXh0ID0gXCLoj5zljZXmlLbmi6JcIjtcbiAgICBjb21wb25lbnRfbWV0aG9kcy5zdHlsZUJvZHkoY29tcG9uZW50X2RhdGEuYm9keSwgY29tcG9uZW50X2RhdGEuaHRtbCwgY29tcG9uZW50X2RhdGEuVVJMLHtwYWRkaW5nOlwiMFwifSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coXCLoj5zljZXmiZPlvIBcIik7XG4gICAgc2hvd1RvYyhgZGlzcGxheTpibG9jaztgKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIlN1Ym1lbnVfc3RhdHVzXCIsIDEpO1xuICAgIGNvbXBvbmVudF9kYXRhLlN1Ym1lbnVfc3RhdHVzLmlubmVyVGV4dCA9IFwi6I+c5Y2V5omT5byAXCI7XG4gICAgY29tcG9uZW50X21ldGhvZHMuc3R5bGVCb2R5KGNvbXBvbmVudF9kYXRhLmJvZHksIGNvbXBvbmVudF9kYXRhLmh0bWwsIGNvbXBvbmVudF9kYXRhLlVSTCx7cGFkZGluZzpcIjAgNSUgMCAxOCVcIn0pO1xuICB9XG59XG5mdW5jdGlvbiBzaG93VG9jKG5lZWRTZXRTdHlsZSkge1xuICBsZXQgYXR0cmlidXRlID0gY29tcG9uZW50X2RhdGEudG9jRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcbiAgYXR0cmlidXRlID0gY29tcG9uZW50X21ldGhvZHMuUmVwbGFjZVNhbWVQcm9wZXJ0eShcIjtcIiwgYXR0cmlidXRlLCBcImRpc3BsYXlcIik7XG4gIGNvbXBvbmVudF9kYXRhLnRvY0VsZW1lbnQuc2V0QXR0cmlidXRlKFxuICAgIFwic3R5bGVcIixcbiAgICBgJHthdHRyaWJ1dGV9JHtuZWVkU2V0U3R5bGV9O2BcbiAgKTtcbn1cbiIsImxldCBjb21wb25lbnRfZGF0YSA9IHtcbiAgcGFuZWxTdGF0dXNUeXBlOiBudWxsLFxuICBwYW5lbF9zdGF0dXM6IG51bGwsXG4gIHN1YlBhbmVsczogbnVsbCxcbn07XG5sZXQgY29tcG9uZW50X21ldGhvZHMgPSBudWxsO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFuZWxTdGF0dXMoZWxlbWVudHMsIHV0aWxGdW5jdGlvbikge1xuICBsZXQgeyBwYW5lbF9zdGF0dXMsIHN1YlBhbmVscyB9ID0gZWxlbWVudHM7XG4gIGNvbXBvbmVudF9tZXRob2RzID0gdXRpbEZ1bmN0aW9uO1xuICBjb21wb25lbnRfZGF0YS5wYW5lbF9zdGF0dXMgPSBwYW5lbF9zdGF0dXM7XG4gIGNvbXBvbmVudF9kYXRhLnN1YlBhbmVscyA9IHN1YlBhbmVscztcbiAgbGV0IHBhbmVsU3RhdHVzVHlwZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwicGFuZWxTdGF0dXNcIik7XG4gIGlmIChwYW5lbFN0YXR1c1R5cGUgPT09IG51bGwpIHtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInBhbmVsU3RhdHVzXCIsIDEpO1xuICAgIHBhbmVsU3RhdHVzVHlwZSA9IFwiMVwiO1xuICAgIGNvbXBvbmVudF9kYXRhLnBhbmVsX3N0YXR1cy5pbm5lclRleHQgPSBcIuW3suWxleW8gOmdouadv1wiO1xuICB9XG4gIGNvbXBvbmVudF9kYXRhLnBhbmVsU3RhdHVzVHlwZSA9IHBhbmVsU3RhdHVzVHlwZTtcbiAgaWYgKGNvbXBvbmVudF9kYXRhLnBhbmVsU3RhdHVzVHlwZSA9PT0gXCIxXCIpIHtcbiAgICBjb21wb25lbnRfZGF0YS5wYW5lbF9zdGF0dXMuaW5uZXJUZXh0ID0gXCLlt7LlsZXlvIDpnaLmnb9cIjtcbiAgfSBlbHNlIHtcbiAgICBlYWNoTWFwKGBkaXNwbGF5Om5vbmU7YCk7XG4gICAgY29tcG9uZW50X2RhdGEucGFuZWxfc3RhdHVzLmlubmVyVGV4dCA9IFwi5bey5ZCI5LiK6Z2i5p2/XCI7XG4gICAgY29tcG9uZW50X2RhdGEucGFuZWxfc3RhdHVzLnNldEF0dHJpYnV0ZShcImRyYWdnYWJsZVwiLCB0cnVlKTtcbiAgICBjb21wb25lbnRfZGF0YS5wYW5lbF9zdGF0dXMuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgIFwiZHJhZ2VuZFwiLFxuICAgICAgaGFuZGxlRHJhZ0VuZCxcbiAgICAgIGZhbHNlXG4gICAgKTtcbiAgICBjb21wb25lbnRfZGF0YS5wYW5lbF9zdGF0dXMuYWRkRXZlbnRMaXN0ZW5lcihcImRyYWdcIiwgaGFuZGxlRHJvcCwgZmFsc2UpO1xuICB9XG5cbiAgcGFuZWxfc3RhdHVzLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVQYW5lbFN0YXR1cyk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZURyb3AoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgLy8gbW92ZSBkcmFnZ2VkIGVsZW0gdG8gdGhlIHNlbGVjdGVkIGRyb3AgdGFyZ2V0XG4gIGlmIChldmVudC50YXJnZXQuaWQgPT09IFwicGFuZWxfc3RhdHVzXCIpIHtcbiAgICBldmVudC50YXJnZXQucGFyZW50RWxlbWVudC5zdHlsZS5sZWZ0ID0gZXZlbnQuY2xpZW50WCArIFwicHhcIjtcbiAgICBldmVudC50YXJnZXQucGFyZW50RWxlbWVudC5zdHlsZS50b3AgPSBldmVudC5jbGllbnRZICsgXCJweFwiO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZURyYWdFbmQoZSkge1xuICBlLnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChlLnRhcmdldC5pZCA9PT0gXCJwYW5lbF9zdGF0dXNcIikge1xuICAgIGUudGFyZ2V0LnBhcmVudEVsZW1lbnQuc3R5bGUubGVmdCA9IGUuY2xpZW50WCArIFwicHhcIjtcbiAgICBlLnRhcmdldC5wYXJlbnRFbGVtZW50LnN0eWxlLnRvcCA9IGUuY2xpZW50WSArIFwicHhcIjtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVQYW5lbFN0YXR1cygpIHtcbiAgY29tcG9uZW50X2RhdGEucGFuZWxTdGF0dXNUeXBlID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJwYW5lbFN0YXR1c1wiKTtcbiAgLy/nu5HlrprnmoTkuovku7blh73mlbAs6ZyA6KaB6KKr5o+Q5pep6KKr6K6+572u5YC8XG4gIGlmIChjb21wb25lbnRfZGF0YS5wYW5lbFN0YXR1c1R5cGUgPT09IFwiMVwiKSB7XG4gICAgZWFjaE1hcChgZGlzcGxheTpub25lO2ApO1xuICAgIGNvbXBvbmVudF9kYXRhLnBhbmVsX3N0YXR1cy5pbm5lclRleHQgPSBcIuW3suWQiOS4iumdouadv1wiO1xuICAgIGNvbXBvbmVudF9kYXRhLnBhbmVsX3N0YXR1cy5zZXRBdHRyaWJ1dGUoXCJkcmFnZ2FibGVcIiwgdHJ1ZSk7XG4gICAgY29tcG9uZW50X2RhdGEucGFuZWxfc3RhdHVzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICBcImRyYWdlbmRcIixcbiAgICAgIGhhbmRsZURyYWdFbmQsXG4gICAgICBmYWxzZVxuICAgICk7XG4gICAgY29tcG9uZW50X2RhdGEucGFuZWxfc3RhdHVzLmFkZEV2ZW50TGlzdGVuZXIoXCJkcmFnXCIsIGhhbmRsZURyb3AsIGZhbHNlKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInBhbmVsU3RhdHVzXCIsIDApO1xuICB9IGVsc2Uge1xuICAgIGVhY2hNYXAoYGRpc3BsYXk6YmxvY2s7YCk7XG4gICAgY29tcG9uZW50X2RhdGEucGFuZWxfc3RhdHVzLmlubmVyVGV4dCA9IFwi5bey5bGV5byA6Z2i5p2/XCI7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJwYW5lbFN0YXR1c1wiLCAxKTtcbiAgfVxufVxuZnVuY3Rpb24gZWFjaE1hcChuZWVkU2V0U3R5bGUpIHtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBjb21wb25lbnRfZGF0YS5zdWJQYW5lbHMubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgYXR0cmlidXRlID0gY29tcG9uZW50X2RhdGEuc3ViUGFuZWxzW2ldLmdldEF0dHJpYnV0ZShcInN0eWxlXCIpO1xuICAgIGF0dHJpYnV0ZSA9IGNvbXBvbmVudF9tZXRob2RzLlJlcGxhY2VTYW1lUHJvcGVydHkoXG4gICAgICBcIjtcIixcbiAgICAgIGF0dHJpYnV0ZSxcbiAgICAgIFwiZGlzcGxheVwiXG4gICAgKTtcbiAgICBjb21wb25lbnRfZGF0YS5zdWJQYW5lbHNbaV0uc2V0QXR0cmlidXRlKFxuICAgICAgXCJzdHlsZVwiLFxuICAgICAgYCR7YXR0cmlidXRlfSR7bmVlZFNldFN0eWxlfTs7YFxuICAgICk7XG4gIH1cbn1cbiIsIi8v5qOA5p+l5piv5ZCm5piv5ZyoZ29nb2xlICB0cmFuc2xhdGXkuK3ov5vooYznmoRcblxuaW1wb3J0IENsaXBib2FyZEpTIGZyb20gXCJjbGlwYm9hcmRcIjtcblxubGV0IGNvbXBvbmVudF9kYXRhID0gbnVsbDtcbmxldCBjb21wb25lbnRfZnVuY3Rpb24gPSBudWxsO1xuZnVuY3Rpb24gVHlwZXNUcmFuc2xhdGlvbihlbGVtZW50cywgdXRpbEZ1bmN0aW9uKSB7XG4gIGNvbXBvbmVudF9kYXRhID0gZWxlbWVudHM7XG4gIGNvbXBvbmVudF9mdW5jdGlvbiA9IHV0aWxGdW5jdGlvbjtcbiAgLy/lnKjkuIDlvIDlp4vov5vljrvlsLHov5vooYzorr7nva5cbiAgY29tcG9uZW50X2RhdGEuVHlwZXNfb2ZfdHJhbnNsYXRpb24uaW5uZXJUZXh0ID0gIFwi5aSN5Yi25YWo5paHXCJcbiAgbmV3IENsaXBib2FyZEpTKGNvbXBvbmVudF9kYXRhLlR5cGVzX29mX3RyYW5zbGF0aW9uLCB7XG4gICAgY29udGFpbmVyOiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdXG4gIH0pO1xuXG4gIC8vIGNvbXBvbmVudF9kYXRhLlR5cGVzX29mX3RyYW5zbGF0aW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxjaGFuZ2VUcmFuc2xhdGlvbilcbiAgLy8gY2hhbmdlVHJhbnNsYXRpb24oKTtcbn1cblxuZnVuY3Rpb24gY2hhbmdlVHJhbnNsYXRpb24oKSB7XG4gIGNvbXBvbmVudF9kYXRhLlR5cGVzX29mX3RyYW5zbGF0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgbGV0IFR5cGVzVHJhbnNsYXRpb25LZXkgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlR5cGVzVHJhbnNsYXRpb25cIik7XG5cbiAgICBpZiAoVHlwZXNUcmFuc2xhdGlvbktleSA9PT0gXCIxXCIpIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiVHlwZXNUcmFuc2xhdGlvblwiLCAwKTtcbiAgICAgIGNvbXBvbmVudF9kYXRhLlR5cGVzX29mX3RyYW5zbGF0aW9uLmlubmVyVGV4dCA9IFwi5b2p5LqR5bCP6K+RXCI7XG4gICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJUeXBlc1RyYW5zbGF0aW9uXCIsIDEpO1xuICAgICAgY29tcG9uZW50X2RhdGEuVHlwZXNfb2ZfdHJhbnNsYXRpb24uaW5uZXJUZXh0ID0gXCJHb29nbGXnv7vor5FcIjtcbiAgICAgIGxvY2F0aW9uLnJlbG9hZCgpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCB7IFR5cGVzVHJhbnNsYXRpb24gfTtcbiIsImltcG9ydCBhcGkgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgICAgICAgIGltcG9ydCBjb250ZW50IGZyb20gXCIhIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vdXJsLmNzc1wiO1xuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IGFwaShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbnRlbnQubG9jYWxzIHx8IHt9OyIsImNsYXNzIERlcCB7ICAgICAgICAgICAgICAgICAgLy8g6K6i6ZiF5rGgXHJcbiAgICBjb25zdHJ1Y3RvcihuYW1lKXtcclxuICAgICAgICB0aGlzLmlkID0gbmV3IERhdGUoKSAvL+i/memHjOeugOWNleeahOi/kOeUqOaXtumXtOaIs+WBmuiuoumYheaxoOeahElEXHJcbiAgICAgICAgdGhpcy5zdWJzID0gW10gICAgICAgLy/or6Xkuovku7bkuIvooqvorqLpmIXlr7nosaHnmoTpm4blkIhcclxuICAgIH1cclxuICAgIGRlZmluZWQoKXsgICAgICAgICAgICAgIC8vIOa3u+WKoOiuoumYheiAhVxyXG4gICAgICAgIERlcC53YXRjaC5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgICBub3RpZnkoKSB7ICAgICAgICAgICAgICAvL+mAmuefpeiuoumYheiAheacieWPmOWMllxyXG4gICAgICAgIHRoaXMuc3Vicy5mb3JFYWNoKChlLCBpKSA9PiB7XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiBlLnVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyl7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGUudXBkYXRlLmFwcGx5KGUpICAvL+inpuWPkeiuoumYheiAheabtOaWsOWHveaVsFxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaChlcnIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FycihlcnIpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxufVxyXG5EZXAud2F0Y2ggPSBudWxsO1xyXG5cclxuY2xhc3MgV2F0Y2gge1xyXG4gICAgY29uc3RydWN0b3IobmFtZSwgZm4pe1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7ICAgICAgIC8v6K6i6ZiF5raI5oGv55qE5ZCN56ewXHJcbiAgICAgICAgdGhpcy5pZCA9IG5ldyBEYXRlKCk7ICAgLy/ov5nph4znroDljZXnmoTov5DnlKjml7bpl7TmiLPlgZrorqLpmIXogIXnmoRJRFxyXG4gICAgICAgIHRoaXMuY2FsbEJhY2sgPSBmbjsgICAgIC8v6K6i6ZiF5raI5oGv5Y+R6YCB5pS55Y+Y5pe2LT7orqLpmIXogIXmiafooYznmoTlm57osIPlh73mlbBcclxuICAgIH1cclxuICAgIGFkZChkZXApIHsgICAgICAgICAgICAgICAgICAvL+WwhuiuoumYheiAheaUvuWFpWRlcOiuoumYheaxoFxyXG4gICAgICAgIGRlcC5zdWJzLnB1c2godGhpcyk7XHJcbiAgICB9XHJcbiAgICB1cGRhdGUoKSB7ICAgICAgICAgICAgICAgICAgLy/lsIborqLpmIXogIXmm7TmlrDmlrnms5VcclxuICAgICAgICB2YXIgY2IgPSB0aGlzLmNhbGxCYWNrOyAvL+i1i+WAvOS4uuS6huS4jeaUueWPmOWHveaVsOWGheiwg+eUqOeahHRoaXNcclxuICAgICAgICBjYih0aGlzLm5hbWUpO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxudmFyIGFkZEhpc3RvcnlNZXRob2QgPSAoZnVuY3Rpb24oKXtcclxuICAgIHZhciBoaXN0b3J5RGVwID0gbmV3IERlcCgpO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgICAgICBpZihuYW1lID09PSAnaGlzdG9yeWNoYW5nZScpe1xyXG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24obmFtZSwgZm4pe1xyXG4gICAgICAgICAgICAgICAgdmFyIGV2ZW50ID0gbmV3IFdhdGNoKG5hbWUsIGZuKVxyXG4gICAgICAgICAgICAgICAgRGVwLndhdGNoID0gZXZlbnQ7XHJcbiAgICAgICAgICAgICAgICBoaXN0b3J5RGVwLmRlZmluZWQoKTtcclxuICAgICAgICAgICAgICAgIERlcC53YXRjaCA9IG51bGw7ICAgICAgIC8v572u56m65L6b5LiL5LiA5Liq6K6i6ZiF6ICF5L2/55SoXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYobmFtZSA9PT0gJ3B1c2hTdGF0ZScgfHwgbmFtZSA9PT0gJ3JlcGxhY2VTdGF0ZScpIHtcclxuICAgICAgICAgICAgdmFyIG1ldGhvZCA9IGhpc3RvcnlbbmFtZV07XHJcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgbWV0aG9kLmFwcGx5KGhpc3RvcnksIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICBoaXN0b3J5RGVwLm5vdGlmeSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxufSgpKVxyXG5cclxuZnVuY3Rpb24gaGlzdG9yeU1vbml0b3IoKXtcclxuICAgIHdpbmRvdy5hZGRIaXN0b3J5TGlzdGVuZXIgPSBhZGRIaXN0b3J5TWV0aG9kKCdoaXN0b3J5Y2hhbmdlJyk7XHJcbiAgICBoaXN0b3J5LnB1c2hTdGF0ZSA9ICBhZGRIaXN0b3J5TWV0aG9kKCdwdXNoU3RhdGUnKTtcclxuICAgIGhpc3RvcnkucmVwbGFjZVN0YXRlID0gIGFkZEhpc3RvcnlNZXRob2QoJ3JlcGxhY2VTdGF0ZScpO1xyXG59XHJcblxyXG5leHBvcnQgIHtoaXN0b3J5TW9uaXRvcn1cclxuIiwiaW1wb3J0IHt2YWx1ZX0gZnJvbSBcImxvZGFzaC9zZXFcIjtcclxuXHJcbmxldCBjb21wb25lbnRfZGF0YSA9IG51bGw7XHJcbmxldCBjb21wb25lbnRfZnVuY3Rpb24gPSBudWxsO1xyXG5pbXBvcnQgXCIuLi9jc3MvdXJsLmNzc1wiO1xyXG5pbXBvcnQgICB7aGlzdG9yeU1vbml0b3J9IGZyb20gICcuLi9Nb25pdG9yUm91dGUvbW9uaXRvclJvdXRlJ1xyXG5pbXBvcnQgSlNPTkRhdGEgIGZyb20gICAnLi4vc291cmNlQ29uZmlnL2xvYWRVUkwuanNvbic7XHJcbi8v5a+85YWl6ZyA6KaB55qE5Ye95pWwXHJcbmxldCAgY29kZVR5cGUgPXtcclxuICAgIHRhZzoodGFnKT0+ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKSxcclxuICAgIHNlbGVjdG9yOihzZWxlY3Rvcik9PmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpLFxyXG4gICAgaWQ6KGlkKT0+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLFxyXG4gICAgY2xhc3NOYW1lOihjbGFzc05hbWUpPT5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSksXHJcbiAgICBUYWJsZTooaXRlbU5hbWUpPT5jb21wb25lbnRfZnVuY3Rpb24uaGFuZGxlVGFibGUoaXRlbU5hbWUpXHJcbn1cclxubGV0ICBwcmVUeXBlID17XHJcbiAgICB0YWc6KHRhZyk9PmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZyksXHJcbiAgICBzZWxlY3Rvcjooc2VsZWN0b3IpPT5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSxcclxuICAgIGlkOihpZCk9PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSxcclxuICAgIGNsYXNzTmFtZTooY2xhc3NOYW1lKT0+ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpLFxyXG4gICAgVGFibGU6KGl0ZW1OYW1lKT0+Y29tcG9uZW50X2Z1bmN0aW9uLmhhbmRsZVRhYmxlKGl0ZW1OYW1lKVxyXG59XHJcblxyXG5cclxuaGlzdG9yeU1vbml0b3IoKVxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjbG9zdXJlVVJMX0xvYWRpbmcoZWxlbWVudHMsIHV0aWxGdW5jdGlvbikge1xyXG4gICAgY29tcG9uZW50X2RhdGEgPSBlbGVtZW50cztcclxuICAgIGNvbXBvbmVudF9mdW5jdGlvbiA9IHV0aWxGdW5jdGlvbjtcclxuICAgIC8v57uZ5q+P5LiA5LiqSGVhZGVy6K6+572uY29kZSzlubborr7nva7popzoibJcclxuICAgIGlmIChjb21wb25lbnRfZGF0YS5VUkwuaW5jbHVkZXMoXCJsb2NhbGhvc3RcIil8fGNvbXBvbmVudF9kYXRhLlVSTC5pbmNsdWRlcyhcIjEyNy4wLjAuMVwiKSkge1xyXG4gICAgICAgIGNvbXBvbmVudF9mdW5jdGlvbi5jb2RlKGNvbXBvbmVudF9kYXRhLmFsbEhlYWRlcik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbXBvbmVudF9mdW5jdGlvbi5jb2RlKGNvbXBvbmVudF9kYXRhLmFsbEhlYWRlciwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBVUkxfTG9hZGluZyhjb21wb25lbnRfZGF0YS5VUkwpO1xyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gVVJMX0xvYWRpbmcoTG9jYXRpb25faHJlZikge1xyXG4gICAgT2JqZWN0LmVudHJpZXMoSlNPTkRhdGEpLmZvckVhY2goKGl0ZW0saW5kZXgpPT57XHJcbiAgICAgICAgbGV0IHNpdGVWYWx1ZSA9ICAgIGl0ZW1bMV07XHJcbiAgICAgICAgaWYgKExvY2F0aW9uX2hyZWYuaW5jbHVkZXMoc2l0ZVZhbHVlLnNpdGUpKXtcclxuICAgICAgICAgICAgaWYgKExvY2F0aW9uX2hyZWYuaW5jbHVkZXMoJ2xvY2Fob3N0Jyl8fExvY2F0aW9uX2hyZWYuaW5jbHVkZXMoJzEyNy4wLjAuMScpKXtcclxuICAgICAgICAgICAgICAgIGhhbmRsZUNvbW1vbihMb2NhdGlvbl9ocmVmKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhzaXRlVmFsdWUuUHJlfHx7fSkuZm9yRWFjaChqc29uSXRlbT0+e1xyXG4gICAgICAgICAgICAgICAgbGV0IGtleSA9ICBqc29uSXRlbVswXTtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9ICAgIGpzb25JdGVtWzFdO1xyXG4gICAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCh0YWc9PntcclxuICAgICAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWRUYWcgPSBwcmVUeXBlW2tleV0odGFnKTtcclxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRfZnVuY3Rpb24uY3JlYXRlUHJlKHNlbGVjdGVkVGFnKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHNpdGVWYWx1ZS5Db2RlfHx7fSkuZm9yRWFjaChqc29uSXRlbT0+e1xyXG4gICAgICAgICAgICAgICAgbGV0IGtleSA9ICBqc29uSXRlbVswXTtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9ICAgIGpzb25JdGVtWzFdO1xyXG4gICAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCh0YWc9PntcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgdGFnOmAsIHRhZylcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkVGFnID0gY29kZVR5cGVba2V5XSh0YWcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBzZWxlY3RlZFRhZzpgLCBzZWxlY3RlZFRhZylcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50X2Z1bmN0aW9uLmNvZGUoc2VsZWN0ZWRUYWcpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG59XHJcblxyXG5mdW5jdGlvbiAgIGhhbmRsZUNvbW1vbigpe1xyXG4gICAgY29uc3QgcCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwicFwiKTtcclxuICAgIGNvbXBvbmVudF9mdW5jdGlvbi5HZW5lcmF0ZV9iYWNrdXAocCk7XHJcblxyXG59XHJcbiIsIi8v5pW05ZCI5Li6UOagh+etvlxuXG5sZXQgY29tcG9uZW50X2RhdGEgPSB7fTtcblxuZnVuY3Rpb24gYWRkbGkobGkpIHtcbiAgY29tcG9uZW50X2RhdGFbXCJUeXBlc1RyYW5zbGF0aW9uS2V5XCJdID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXG4gICAgXCJUeXBlc1RyYW5zbGF0aW9uXCJcbiAgKTtcbiAgLy8gY29uc29sZS5sb2cobGkpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IHNpbmdsZWxpID0gbGlbaV07XG4gICAgc2luZ2xlX2xpKHNpbmdsZWxpKTtcbiAgfVxufVxuXG4vL+WkhOeQhuWNleS4qmFkZF9saVxuZnVuY3Rpb24gc2luZ2xlX2xpKHNpbmdsZWxpKSB7XG4gIGxldCBsaXR3byA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKTtcbiAgbGV0IGNvbnRlbnQgPSBcIlwiO1xuICBmb3IgKGxldCBqID0gMDsgaiA8IHNpbmdsZWxpLmNoaWxkTm9kZXMubGVuZ3RoOyBqKyspIHtcbiAgICBpZiAoc2luZ2xlbGkuY2hpbGROb2Rlc1tqXS5ub2RlTmFtZSA9PT0gXCJQUkVcIikge1xuICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgbGV0IHBhcmFncmFtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XG4gICAgICAgIHBhcmFncmFtLmlubmVySFRNTCA9IGNvbnRlbnQ7XG4gICAgICAgIGxpdHdvLmFwcGVuZENoaWxkKHBhcmFncmFtKTtcbiAgICAgICAgY29udGVudCA9IFwiXCI7XG4gICAgICB9XG4gICAgICAvL+eEtuiAjOS4jeeuoeaYr+WTquS4gOenjeaDheWGtemDveimgeWwhnByZei/meS4quacrOi6q+WKoOS4ilxuICAgICAgbGl0d28uYXBwZW5kQ2hpbGQoc2luZ2xlbGkuY2hpbGROb2Rlc1tqXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8v5Y+q6KaB5oqK6L+Z5Lqb5Lic6KW/5Yqg6L+b5Y675bCx5Y+v5Lul5LqGLOaKinDlhYPntKDljIXoo7nmlL7lnKjlhbbku5bnjq/oioLkuK1cbiAgICAgIGlmIChzaW5nbGVsaS5jaGlsZE5vZGVzW2pdLmNoaWxkTm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IHNpbmdsZWxpLmNoaWxkTm9kZXNbal0uY2hpbGROb2Rlcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgIGxldCB0aGlzX2xpID0gc2luZ2xlbGkuY2hpbGROb2Rlc1tqXS5jaGlsZE5vZGVzW2tdO1xuICAgICAgICAgIC8v5Lyg5YC86ZyA6KaB5Lyg56m65YC8XG4gICAgICAgICAgLy8tLS0gLS0tIC0tLSDov5nkuIDlsYLlj6DliqBcbiAgICAgICAgICAvL3x8fCB8fHwgfHx8IOi/meS4gOWxguWwseaYryDojrflj5blsIbkvKDov5vmnaXnmoTljZXkuKrlgLzov5vooYzlpITnkIZcbiAgICAgICAgICBjb250ZW50ICs9IGFkZF9saXN0KHRoaXNfbGksIFwiXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgdGhpc19saSA9IHNpbmdsZWxpLmNoaWxkTm9kZXNbal07XG4gICAgICAgIGNvbnRlbnQgKz0gYWRkX2xpc3QodGhpc19saSwgXCJcIik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8v5b2TcHJlICwodGV4dCxlbGUpIOeahOaDheWGteS4iyAgICxjb250ZW50IOa3u+WKoOS6hizkvYbmmK/nlLHkuo7msqHmnInmlrDnmoRQUkUs5oiR5Lus6ZyA6KaB5Zyo5pyA5ZCO6K+lbGnnmoTlvqrnjq/lkajmnJ/lhoUs5bCGY29udGVudCzmt7vliqDov5vljrsuXG4gIC8vIOi/meagt+eahOWGmeazlei/mOino+WGs+eahOWNleS4gCh0ZXh0LGVsZSnnmoTmg4XlhrVcblxuICBsZXQgcGFyYWdyYW0xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XG4gIHBhcmFncmFtMS5pbm5lckhUTUwgPSBjb250ZW50O1xuXG4gIGxpdHdvLmFwcGVuZENoaWxkKHBhcmFncmFtMSk7XG5cbiAgaWYgKCFsaXR3by5pbm5lckhUTUwpIHtcbiAgICBjb25zb2xlLmxvZyhpICsgXCLmsqHmnInnlJ/miJBcIik7XG4gIH1cbiAgbGV0IGF0dHJpYnV0ZSA9IHNpbmdsZWxpLmdldEF0dHJpYnV0ZShcInN0eWxlXCIpO1xuICBzaW5nbGVsaS5pbm5lckhUTUwgPSBcIlwiO1xuXG4gIHNpbmdsZWxpLmlubmVySFRNTCA9IGxpdHdvLmlubmVySFRNTDtcbiAgc2luZ2xlbGkuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgYCR7YXR0cmlidXRlfTtsaXN0LXN0eWxlLXR5cGU6bm9uZTtgKTtcblxuICAvLyByZXR1cm4gc2luZ2xlbGk7XG59XG5cbi8v55Sf5oiQYWRkX2xpc3Qs5Lul5Y+K5aSE55CGY29udGVudFxuZnVuY3Rpb24gYWRkX2xpc3QodGhpc19saSwgY29udGVudCkge1xuICBpZiAodGhpc19saS5ub2RlVHlwZSA9PT0gMykge1xuICAgIGlmICh0aGlzX2xpLm5vZGVWYWx1ZSkge1xuICAgICAgaWYgKHRoaXNfbGkubm9kZVZhbHVlWzBdID09PSBcIi5cIikge1xuICAgICAgICBpZiAodGhpc19saS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzX2xpLnByZXZpb3VzU2libGluZy5ub2RlTmFtZSA9PT0gXCJDT0RFXCIgfHxcbiAgICAgICAgICAgIHRoaXNfbGkucHJldmlvdXNTaWJsaW5nLm5vZGVOYW1lID09PSBcIktCRFwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb250ZW50ID0gdGhpc19saS5ub2RlVmFsdWUuc2xpY2UoMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSB0aGlzX2xpLm5vZGVWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGVudCA9IHRoaXNfbGkubm9kZVZhbHVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhjb250ZW50KTtcbiAgICAgICAgY29udGVudCA9IHRoaXNfbGkubm9kZVZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0aGlzX2xpLm5vZGVUeXBlID09PSAxKSB7XG4gICAgaWYgKHRoaXNfbGkuaW5uZXJIVE1MKSB7XG4gICAgICBpZiAodGhpc19saS5ub2RlTmFtZSA9PT0gXCJDT0RFXCIpIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudF9kYXRhW1wiVHlwZXNUcmFuc2xhdGlvbktleVwiXSA9PT0gXCIxXCIpIHtcbiAgICAgICAgICB0aGlzX2xpLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiY29sb3I6Ymx1ZTttYXJnaW46MFwiKTtcbiAgICAgICAgICAvL+WkhOeQhkdvb2dsZSBCVUdcbiAgICAgICAgICAvL2dvb2dsZSAg57+76K+RICAs5a+55LqOPGNvZGU+5qCH562+5ZCO6Z2i6Lef5paH5pys5qCH54K5LOWwseS8muWwhuWug+S7rOS4gOi1t+ecgeeVpSzlho3nu4boh7TkuIDngrks5bCx5piv5LiA5q616K+d5Lit6LaF6L+H5LiA5LiqLuWwseS8muW8leWPkei/meenjemXrumimFxuICAgICAgICAgIC8v6L+Z6YeM6ZyA6KaB5YqgLiAgICDlm6DkuLpub2RlVmFsdWUg5piv5Y+q6K+75bGe5oCnLOWPquiDveWcqOS4iumdouWvueaWh+acrOiKgueCueeahOaTjeS9nOi/m+ihjOS/ruaUuVxuICAgICAgICAgIC8v5aaC5p6c5piv5paH5pys6IqC54K555u05o6l5L2/55SobmV4dFNpYmxpbmcsXG4gICAgICAgICAgaGFuZGxlR29vZ2xlRmx1ZW50KHRoaXNfbGkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpc19saS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImNvbG9yOmdyZWVuO21hcmdpbjowXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgfVxuICAgICAgY29udGVudCA9IHRoaXNfbGkub3V0ZXJIVE1MO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvL+WkhOeQhuWFtuS7lueahOaDheWGteaXtuWAmSznm67liY3ov5jkuI3mmI7mnJcs5L2g5Y+v5Lul5qC55o2ubm9kZXR5cGXljrvliKTmlq1cbiAgICBhbGVydChcIuWHuueOsOeahOeJueauiuaDheWGtSFcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cblxuZnVuY3Rpb24gaGFuZGxlR29vZ2xlRmx1ZW50KHRoaXNfbGkpe1xuICBpZiAodGhpc19saS5uZXh0U2libGluZykge1xuICAgIGlmICh0aGlzX2xpLm5leHRTaWJsaW5nLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICBpZiAoXG4gICAgICAgICAgdGhpc19saS5uZXh0U2libGluZy5ub2RlVmFsdWVbMF0gPT09IFwiLlwiIHx8XG4gICAgICAgICAgdGhpc19saS5uZXh0U2libGluZ1swXSA9PT0gXCIsXCJcbiAgICAgICkge1xuICAgICAgICB0aGlzX2xpLmlubmVyVGV4dCArPSBcIi5cIjtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgIH1cbiAgfVxufVxuZXhwb3J0IHsgYWRkbGksIHNpbmdsZV9saSB9O1xuIiwibGV0IFVSTCA9IGxvY2F0aW9uLmhyZWY7XG5cbmxldCBsb2NhbCA9IFVSTC5pbmNsdWRlcyhcImxvY2FsaG9zdFwiKTtcblxuZXhwb3J0IHsgVVJMLCBsb2NhbCB9O1xuIiwiLy8gIOa3u+WKoENvZGXog73lipsg5Y+Y5oiQY29kZeS7o+eggVxuaW1wb3J0IHsgaGFzX3BfY2hpbGRyZW4sIGhhc19wX3BhcmVudCB9IGZyb20gXCIuL2dvb2dsZV9zdHJydWN0dXJlX2FycmFuZ2VtZW50XCI7XG5pbXBvcnQgeyBsb2NhbCwgVVJMIH0gZnJvbSBcIi4uL3ZhcmlhYmxlXCI7XG5cbmxldCBjb21wb25lbnRfZGF0YSA9IHt9O1xuZnVuY3Rpb24gY29kZShmb250KSB7XG4gIGNvbXBvbmVudF9kYXRhW1wiVHlwZXNUcmFuc2xhdGlvbktleVwiXSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFxuICAgIFwiVHlwZXNUcmFuc2xhdGlvblwiXG4gICk7XG4gIC8vR29vZ2xl57+76K+RXG4gIGlmIChmb250KSB7XG4gICAgaWYgKGZvbnQubGVuZ3RoICE9PSAwICYmIGZvbnQubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8v5aSE55CG5YWD57Sg576kXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29kZV90ZW1wbGF0ZShmb250W2ldKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy/lpITnkIbljZXkuKrlhYPntKBcbiAgICAgIGlmIChmb250Lm5vZGVUeXBlID09PSAxICYmIGZvbnQuaW5uZXJIVE1MKSB7XG4gICAgICAgIGNvZGVfdGVtcGxhdGUoZm9udCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuLy9nb29nbGUg55Sf5oiQbm90cmFuc2xhdGXljbPlj68sICDlvankupHnlJ/miJBjeXh5LXRycy1zb3VyY2UtdGVkXG5mdW5jdGlvbiBjb2RlX3RlbXBsYXRlKGZvbnQpIHtcbiAgaWYgKGZvbnQpIHtcbiAgICAgIGxldCBoYXNDbGFzc0F0dHJpYnV0ZSA9IGZvbnQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIik7XG4gICAgICAgICAgZm9udC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLGAke2hhc0NsYXNzQXR0cmlidXRlfSBub3RyYW5zbGF0ZWApXG4gICAgICAgIH1cbn1cblxuZXhwb3J0IHsgY29kZSwgY29kZV90ZW1wbGF0ZSB9O1xuIiwiaW1wb3J0ICBtYW5uVGFibGUgZnJvbSAgICcuL21hbm5UYWJsZS5qcydcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIG1hbm5UYWJsZVxyXG59XHJcbiIsImltcG9ydCB7IGNvZGVfdGVtcGxhdGUsIGNvZGUgfSBmcm9tIFwiLi9jaGFuZ2VfY29kZVwiO1xuaW1wb3J0IHsgYWRkbGkgfSBmcm9tIFwiLi9pbnRlZ3JhdGlvbl9wcmVcIjtcbmltcG9ydCBUYWJsZVV0aWxzIGZyb20gXCIuLi9oYW5kbGVUYWJsZS9UYWJsZVV0aWxzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYW5kbGVUYWJsZSh1dGlsTmFtZT1udWxsKSB7XG5cbiAgaWYgKHV0aWxOYW1lKXtcbiAgICBUYWJsZVV0aWxzW3V0aWxOYW1lXSgpXG4gIH1cbiAgLy8gbGV0IHRib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJ0Ym9keVwiKTtcbiAgLy9cbiAgLy8gaWYgKHRib2R5Lmxlbmd0aCAhPT0gMCAmJiB0Ym9keS5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAvLyAgIC8v5Y+q5pyJ5a2Y5ZyodGJvZHnnmoTkuIDkuKrmg4XlhrXkuIss5omN6IO96L+b5YWl6L+Z6YeMXG4gIC8vICAgZm9yIChsZXQgdCA9IDA7IHQgPCB0Ym9keS5sZW5ndGg7IHQrKykge1xuICAvLyAgICAgbGV0IGN1cnJlbnRUYm9keSA9IHRib2R5W3RdO1xuICAvLyAgICAgbGV0IHRhYmxlID0gY3VycmVudFRib2R5LnBhcmVudE5vZGU7XG4gIC8vICAgICAvLyDojrflj5bmr4/kuIDkuKp0Ym9keeeahOeItuWFg+e0oHRhYmxl5YWD57SgXG4gIC8vICAgICAvL3RhYmxl5a2Y5ZyoLOiAjOS4jeaYr+WPquacieS4gOS4qmJvZHlcbiAgLy8gICAgIGlmICh0YWJsZSkge1xuICAvLyAgICAgICAvLyBsZXQgdGJvZHkgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInRib2R5XCIpWzBdO1xuICAvLyAgICAgICBsZXQgdGhlYWQgPSB0YWJsZS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInRoZWFkXCIpWzBdO1xuICAvLyAgICAgICBpZiAodGhlYWQhPT11bmRlZmluZWQmJnRoZWFkJiZ0aGVhZC5jaGlsZE5vZGVzLmxlbmd0aD4wKSB7XG4gIC8vICAgICAgICAgLy8g56ys5LiA56eN5pa55qGIXG4gIC8vICAgICAgICAgdGFibGVfb3BlcmF0aW9uKGN1cnJlbnRUYm9keSwgdGhlYWQpO1xuICAvLyAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgIC8vIOesrOS6jOenjeaWueahiFxuICAvLyAgICAgICAgIHRoZWFkID0gXCJcIjtcbiAgLy8gICAgICAgICB0YWJsZV9vcGVyYXRpb24oY3VycmVudFRib2R5LCB0aGVhZCk7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG59XG5cbmZ1bmN0aW9uIHRhYmxlX29wZXJhdGlvbih0Ym9keSwgdGhlYWQpIHtcbiAgdGJvZHkuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJiYWNrZ3JvdW5kLWNvbG9yOndoaXRlXCIpO1xuICBsZXQgYWRkbGlfdGQgPSBbXTtcbiAgLy/lsIblpLTpg6jnmoTlhYPntKDov5vooYxw5qCH562+5YyWXG4gIGxldCBhZGRsaV9oZWFkID0gW107XG4gIGZvciAobGV0IGogPSAwOyBqIDwgdGJvZHkuY2hpbGRyZW4ubGVuZ3RoOyBqKyspIHtcbiAgICBsZXQgZGJ0ciA9IHRib2R5LmNoaWxkcmVuW2pdXG4gICAgLy8gdGhlYWQg5Lit55qEdHLlj6rmnInkuIDmnaFcbiAgICBmb3IgKGxldCBrID0gMDsgayA8IGRidHIuY2hpbGRyZW4ubGVuZ3RoOyBrKyspIHtcbiAgICAgIGxldCBkYnRkID0gZGJ0ci5jaGlsZHJlbltrXVxuICAgICAgaWYgKHRoZWFkICE9PSAnJykge1xuICAgICAgICBsZXQgdGh0ZCA9IHRoZWFkLmNoaWxkcmVuWzBdLmNoaWxkcmVuW2tdXG4gICAgICAgIHRoZWFkcyh0aHRkLCBkYnRkLCBhZGRsaV90ZCwgYWRkbGlfaGVhZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgZGJ0ZC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLFwiY3l4eS10cnMtc291cmNlIGN5eHktdHJzLXRhcmdldFwiKVxuICAgICAgICBsZXQgaGFuZGxlVGQgPSBIYW5kbGVUZChkYnRkKTtcbiAgICAgICAgIGlmIChoYW5kbGVUZCl7XG5cbiAgICAgICAgIH1lbHNle1xuICAgICAgICAgICBjb2RlX3RlbXBsYXRlKGRidGQsdHJ1ZSk7XG4gICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHRoZWFkICE9PSAnJyl7XG4gICAgbGV0ICB0ckhlYWQgPSB0aGVhZC5jaGlsZHJlblswXTtcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRySGVhZC5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuICAgICAgbGV0IHRydGQgPSB0ckhlYWQuY2hpbGRyZW5bal1cbiAgICAgIHRydGQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixcImN5eHktdHJzLXRhcmdldFwiKVxuICAgICAgY29kZV90ZW1wbGF0ZSh0cnRkKTtcbiAgICB9XG4gIH1cbiAgYWRkbGkoYWRkbGlfdGQpO1xufVxuXG5cbi8v5aSE55CG5aS06YOoXG5mdW5jdGlvbiB0aGVhZHMoaGVhZCwgdGQsIGFkZGxpX3RkKSB7XG4gIGxldCBoZWFkX3RleHQgPSBoZWFkPy5pbm5lclRleHQ/LnRvTG93ZXJDYXNlKCk/P1wiXCI7XG4gIGlmIChcbiAgICBoZWFkX3RleHQuaW5jbHVkZXMoXCJjb21tZW50c1wiKSB8fFxuICAgIGhlYWRfdGV4dC5pbmNsdWRlcyhcImRlc2NyaXB0aW9uXCIpIHx8XG4gICAgaGVhZF90ZXh0LmluY2x1ZGVzKFwibm90ZXNcIikgfHxcbiAgICBoZWFkX3RleHQuaW5jbHVkZXMoXCJrZXkgY29uY2VwdHNcIikgfHxcbiAgICBoZWFkX3RleHQuaW5jbHVkZXMoXCJ0b3BpY1wiKSB8fFxuICAgIGhlYWRfdGV4dC5pbmNsdWRlcyhcInJlc3VsdFwiKSB8fFxuICAgIGhlYWRfdGV4dC5pbmNsdWRlcyhcIm1lYW5pbmdcIikgfHxcbiAgICBoZWFkX3RleHQuaW5jbHVkZXMoXCJlZmZlY3RcIilcbiAgKSB7XG4gICAgLy/lpITnkIbmj4/ov7DmgKfmloflrZdcbiAgICBhZGRsaV90ZC5wdXNoKHRkKTtcbiAgfSBlbHNlIHtcbiAgICB0ZC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLFwiY3l4eS10cnMtdGFyZ2V0XCIpXG4gICAgbGV0IGhhbmRsZVRkID0gSGFuZGxlVGQodGQpO1xuICAgIGlmIChoYW5kbGVUZCl7XG5cbiAgICB9ZWxzZXtcbiAgICAgIGNvZGVfdGVtcGxhdGUodGQsdHJ1ZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIEhhbmRsZVRkKHRkY2VpbCl7XG4gIGlmICh0ZGNlaWwuY2hpbGROb2Rlcyl7XG4gICAgbGV0IG11biA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZGNlaWwuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGNoaWxkID0gdGRjZWlsLmNoaWxkTm9kZXNbaV07XG4gICAgICBpZiAoY2hpbGQubm9kZVR5cGUgPT09IDEpe1xuICAgICAgICBtdW4gKytcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG11biA+IDE7XG4gIH1cbn1cbiIsIi8vICDmt7vliqDkuLvopoHkuLrkuobkuI3nv7vor5Hnm67lvZXog73lipsg5Y+Y5oiQcHJl5Luj56CBXG5sZXQgY29tcG9uZW50X2RhdGEgPSB7fTtcbmZ1bmN0aW9uIGNyZWF0ZVByZShmb250KSB7XG4gIGNvbXBvbmVudF9kYXRhW1wiVHlwZXNUcmFuc2xhdGlvbktleVwiXSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFxuICAgICAgXCJUeXBlc1RyYW5zbGF0aW9uXCJcbiAgKTtcbiAgaWYgKGZvbnQpIHtcbiAgICBpZiAoZm9udC5sZW5ndGggIT09IDAgJiYgZm9udC5sZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy/lpITnkIblhYPntKDnvqRcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZm9udC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjcmVhdGVQcmVfdGVtcGxhdGUoZm9udFtpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8v5aSE55CG5Y2V5Liq5YWD57SgXG4gICAgICBpZiAoZm9udC5ub2RlVHlwZSA9PT0gMSAmJiBmb250LmlubmVySFRNTCkge1xuICAgICAgICBjcmVhdGVQcmVfdGVtcGxhdGUoZm9udCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8v6L2s5o2iUHJl5qih5p2/6YeN55SoXG5mdW5jdGlvbiBjcmVhdGVQcmVfdGVtcGxhdGUoZm9udCkge1xuICBpZiAoZm9udCkge1xuICAgIC8vIOW9k+mdnuacrOWcsOaDheWGteS4i+eahOaXtuWAmSxoYXNfY2hpbGRyZW5fcOWSjGhhc19wYXJlbnRfcOS4jemAgueUqCzlj6/ku6Xnm7TmjqXov5vlhaXkuIvpnaLnmoTor63lj6VcbiAgICBsZXQgY29udGVudCA9IGZvbnQuaW5uZXJIVE1MO1xuICAgIC8v5qC55o2u5LiN5ZCM55qE57+76K+R5qih5byPLOiuvue9ruS4jeWQjOeahGNvZGXlhYPntKAs5Lul5Y+K5LiN5ZCM55qE6aKc6Imy5qC35byPXG4gICAgbGV0IHByZWxlbWVudCA9IG51bGw7XG4gICAgcHJlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInByZVwiKTtcbiAgICBsZXQgaGFzQ2xhc3NBdHRyaWJ1dGUgPSBmb250LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpO1xuICAgIGlmIChjb21wb25lbnRfZGF0YS5UeXBlc1RyYW5zbGF0aW9uS2V5ID09PSBcIjFcIikge1xuICAgICAgZm9udC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLGAkeyEhaGFzQ2xhc3NBdHRyaWJ1dGU/aGFzQ2xhc3NBdHRyaWJ1dGU6Jyd9IG5vdHJhbnNsYXRlYClcbiAgICB9IGVsc2Uge1xuICAgICAgZm9udC5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLGAkeyEhaGFzQ2xhc3NBdHRyaWJ1dGU/aGFzQ2xhc3NBdHRyaWJ1dGU6Jyd9IG5vdHJhbnNsYXRlYClcbiAgICB9XG4gICAgcHJlbGVtZW50LmlubmVySFRNTCA9IGNvbnRlbnQ7XG4gICAgZm9udC5pbm5lckhUTUwgPSBcIlwiO1xuICAgIGZvbnQuYXBwZW5kQ2hpbGQocHJlbGVtZW50KTtcbiAgfVxufVxuXG5leHBvcnQgeyBjcmVhdGVQcmUsIGNyZWF0ZVByZV90ZW1wbGF0ZSB9O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2xpZW50SGVpZ2h0KCkge1xuICBsZXQgY2xpZW50SGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgaWYgKGNsaWVudEhlaWdodCA+IHdpbmRvdy5pbm5lckhlaWdodCkge1xuICAgIGNsaWVudEhlaWdodCA9IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0O1xuICB9XG4gIHJldHVybiBjbGllbnRIZWlnaHQ7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZW5TdHlsZShzdHlsZSkge1xuICBsZXQgc3R5bGVTdHJpbmcgPSBcIlwiO1xuICBmb3IgKGNvbnN0IHN0eWxlS2V5IGluIHN0eWxlKSB7XG4gICAgc3R5bGVTdHJpbmcgKz0gYCR7c3R5bGVLZXl9OiR7c3R5bGVbc3R5bGVLZXldfTtgO1xuICB9XG5cbiAgcmV0dXJuIHN0eWxlU3RyaW5nO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2xpZW50V2lkdGgocGFydCA9IFwidG9jXCIpIHtcbiAgbGV0IGNsaWVudFdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gIGlmIChwYXJ0LnRvTG93ZXJDYXNlKCkgPT09IFwidG9jXCIpIHtcbiAgICBjbGllbnRXaWR0aCA9IGNsaWVudFdpZHRoICogMC4xNztcbiAgfVxuICByZXR1cm4gY2xpZW50V2lkdGg7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdHlsZUJvZHkoYm9keSwgaHRtbCwgVVJMLHN0eWxlPW51bGwpIHtcbiAgaWYgKFVSTC5pbmNsdWRlcyhcImxvY2FsaG9zdFwiKXx8VVJMLmluY2x1ZGVzKFwiMTI3LjAuMC4xXCIpKSB7XG4gICAgbGV0IG1xbCA9IHdpbmRvdy5tYXRjaE1lZGlhKFwiKG1heC13aWR0aDogMTIwMHB4KVwiKS5tYXRjaGVzO1xuICAgIGxldCAgYmFja2dyb3VuZCA9ICBgYmFja2dyb3VuZDojRjJFRUU1O2BcbiAgICBib2R5LnN0eWxlLmNzc1RleHQgPSBgJHtiYWNrZ3JvdW5kfWNvbG9yOmJsYWNrYDtcbiAgICBpZiAoc3R5bGUpe1xuICAgICAgY29uc29sZS5sb2coYHN0eWxlOmAsIHN0eWxlKVxuXG4gICAgICBodG1sLnN0eWxlLmNzc1RleHQgPVxuICAgICAgICAgIGBwYWRkaW5nOiR7c3R5bGUucGFkZGluZ307Zm9udC1zaXplOjE0cHg7Ym9yZGVyLWJvdHRvbTozcHg7JHtiYWNrZ3JvdW5kfWxldHRlci1zcGFjaW5nOjFweDtjb2xvcjpibGFja2A7XG4gICAgfWVsc2V7XG4gICAgICBpZiAobXFsID09PSB0cnVlKSB7XG4gICAgICAgIGh0bWwuc3R5bGUuY3NzVGV4dCA9XG4gICAgICAgICAgICBgcGFkZGluZzowO2ZvbnQtc2l6ZToxNHB4O2JvcmRlci1ib3R0b206M3B4OyR7YmFja2dyb3VuZH1sZXR0ZXItc3BhY2luZzoxcHg7Y29sb3I6YmxhY2tgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaHRtbC5zdHlsZS5jc3NUZXh0ID1cbiAgICAgICAgICAgIGBwYWRkaW5nOjAgNSUgMCAxOCU7Zm9udC1zaXplOjE0cHg7Ym9yZGVyLWJvdHRvbTozcHg7JHtiYWNrZ3JvdW5kfWxldHRlci1zcGFjaW5nOjFweDtjb2xvcjpibGFja2A7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXBsYWNlU2FtZVByb3BlcnR5KFxuICBGaWx0ZXIsXG4gIGF0dHJpYnV0ZSA9IG51bGwsXG4gIE5lZWRfRmlsdGVyXG4pIHtcbiAgaWYgKGF0dHJpYnV0ZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgYXR0cmlidXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBsZXQgYXR0cmlidXRlcyA9IGF0dHJpYnV0ZS5zcGxpdChGaWx0ZXIpO1xuICAgICAgbGV0IG5ld19hdHRyaWJ1dGVzID0gXCJcIjtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IE5lZWRfRmlsdGVyLmxlbmd0aDsgaisrKSB7fVxuICAgICAgICBsZXQgTmVlZF9GaWx0ZXJfc3RyaW5ncyA9IGF0dHJpYnV0ZXNbaV0uc3BsaXQoXCI6XCIpWzBdO1xuICAgICAgICBpZiAoTmVlZF9GaWx0ZXJfc3RyaW5ncyA9PT0gTmVlZF9GaWx0ZXIpIHtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoYXR0cmlidXRlc1tpXSAhPT0gXCJcIikge1xuICAgICAgICAgICAgbmV3X2F0dHJpYnV0ZXMgKz0gYXR0cmlidXRlc1tpXSArIFwiO1wiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld19hdHRyaWJ1dGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwi5Lyg6YCS55qE5bGe5oCn5LiN5pivU3RyaW5nLOWPr+iDveS8oOmUmeS6huWxnuaApyzor7fmn6XnnIvku6PnoIEs5ZCm5YiZ6K+35L+u5pS56K+l5Ye95pWwIVwiXG4gICAgICApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxufVxuIiwiLy/oj5zljZVcbmltcG9ydCB0b2MgZnJvbSBcIi4vdG9jL3RvY1wiO1xuaW1wb3J0IGdlbmVyYXRlX2NhdGFsb2cgZnJvbSBcIi4vdG9jL2dlbl90b2NcIjtcbmltcG9ydCB7IHRvY0NoYW5nZSwgbWluX2hlYWQgfSBmcm9tIFwiLi90b2MvdG9jQ2hhbmdlXCI7XG5pbXBvcnQgJCBmcm9tIFwianF1ZXJ5XCI7XG4vL+mdouadv1xuaW1wb3J0IHBhbmVsIGZyb20gXCIuL3BhbmVsL3BhbmVsXCI7XG5pbXBvcnQgeyBzaG93LCBzaG93X2NvZGUgfSBmcm9tIFwiLi9wYW5lbC9wZXJjZW50YWdlXCI7XG5pbXBvcnQgU3VibWVudV9zdGF0dXMgZnJvbSBcIi4vcGFuZWwvU3VibWVudV9zdGF0dXNcIjtcbmltcG9ydCBwYW5lbFN0YXR1cyBmcm9tIFwiLi9wYW5lbC9wYW5lbFN0YXR1c1wiO1xuaW1wb3J0IHsgVHlwZXNUcmFuc2xhdGlvbiB9IGZyb20gXCIuL3BhbmVsL1R5cGVzVHJhbnNsYXRpb25cIjtcblxuLy/kv67mlLnmlofmnKxcbmltcG9ydCBjbG9zdXJlVVJMX0xvYWRpbmcgZnJvbSBcIi4vTG9hZEluaXQvbG9hZFVybFwiO1xuaW1wb3J0IHsgY29kZSwgZ2VuZXJhdGVfY29kZSB9IGZyb20gXCIuL21vZGlmeS9jaGFuZ2VfY29kZVwiO1xuaW1wb3J0IHsgYWRkbGkgfSBmcm9tIFwiLi9tb2RpZnkvaW50ZWdyYXRpb25fcHJlXCI7XG5pbXBvcnQge0dlbmVyYXRlX2JhY2t1cH0gZnJvbSBcIi4vbW9kaWZ5L2dlbmVyYXRlQmlsaW5ndWFsXCI7XG5pbXBvcnQgaGFuZGxlVGFibGUgZnJvbSBcIi4vbW9kaWZ5L3RhYmxlXCI7XG5pbXBvcnQgUHJlU3R5bGUgZnJvbSBcIi4vbW9kaWZ5L3ByZV9zdHlsZVwiO1xuaW1wb3J0IHsgY3JlYXRlUHJlIH0gZnJvbSBcIi4vbW9kaWZ5L2NyZWF0ZV9wcmVcIjtcblxuLy/lt6XlhbdcbmltcG9ydCBjbGllbnRIZWlnaHQgZnJvbSBcIi4vdXRpbC9jbGllbnRIZWlnaHRcIjtcbmltcG9ydCBnZW5TdHlsZSBmcm9tIFwiLi9zdHlsZS9nZW5fc3R5bGVcIjtcbmltcG9ydCBjbGllbnRXaWR0aCBmcm9tIFwiLi91dGlsL2NsaWVudFdpZHRoXCI7XG5pbXBvcnQgc3R5bGVCb2R5IGZyb20gXCIuL3N0eWxlL2JvZHlcIjtcbmltcG9ydCBSZXBsYWNlU2FtZVByb3BlcnR5IGZyb20gXCIuL3N0eWxlL3N0eWxlX2ZpbHRlclwiO1xuXG5cblxuLy/phY3nva7mlofku7ZcbmltcG9ydCAgbG9hZFVSTCAgICBmcm9tICAnLi9zb3VyY2VDb25maWcvbG9hZFVSTC5qc29uJ1xuXG5cbmxldCAgdG9jQXJyID0gW11cblxubGV0IGhhbmRsZUNoZWNrU2l0ZSA9ICgpPT57XG4gIE9iamVjdC5lbnRyaWVzKGxvYWRVUkwpLmZvckVhY2goSXRlbT0+e1xuICAgIGxldCBrZXkgPSBJdGVtWzBdO1xuICAgIGxldCBpdGVtID0gSXRlbVsxXTtcbiAgICBpdGVtPy50b2MgPT09dHJ1ZT90b2NBcnIucHVzaChrZXkpOicnXG4gIH0pXG59XG5oYW5kbGVDaGVja1NpdGUoKVxuXG5sZXQgVVJMID0gbG9jYXRpb24uaHJlZjtcbmxldCBVUkxhcnIgPSBVUkwuc3BsaXQoXCIvXCIpO1xubGV0IGJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJvZHlcIilbMF07XG5sZXQgaHRtbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaHRtbFwiKVswXTtcbmxldCBhbGxIZWFkZXIgPSAkKFwiOmhlYWRlclwiKTtcbmxldCBwYW5lbFByb2plY3QgPSB7XG4gIHBhbmVsX3N0YXR1czogXCLpnaLmnb/nirbmgIFcIixcbiAgVHlwZXNfb2ZfdHJhbnNsYXRpb246IFwi57+76K+R57G75Z6LXCIsXG4gIHBlcmNlbnRhZ2U6IFwi55m+5YiG5q+UXCIsXG4gIFN1Ym1lbnVfc3RhdHVzOiBcIuWtkOiPnOWNleeKtuaAgVwiLFxuICAvLyBNYWluX21lbnVfc3RhdHVzOiBcIuS4u+iPnOWNleeKtuaAgVwiLFxuICAvLyBDaGluZXNlX2FuZF9FbmdsaXNoOiBcIuS4reiLseaWh+WvueeFp1wiLFxufTtcbmxldCBjbGllbnRfaGVpZ2h0ID0gY2xpZW50SGVpZ2h0KCk7XG5sZXQgY2xpZW50X3dpZHRoID0gY2xpZW50V2lkdGgoKTtcblxubGV0IHRvY1JlcXVpcmVkX3Byb3BlcnRpZXMgPSB7XG4gIHN0eWxlOiB7XG4gICAgaGVpZ2h0OiBjbGllbnRfaGVpZ2h0ICsgXCJweFwiLFxuICAgIHdpZHRoOiBjbGllbnRfd2lkdGggKyBcInB4XCIsXG4gIH0sXG59O1xuXG5sZXQgY2hlY2tTaXRlID0gKFVSTCk9PntcbiByZXR1cm4gIHRvY0Fyci5zb21lKGl0ZW09PlxuICAgIFVSTC5pbmNsdWRlcyhpdGVtKVxuICApXG59XG5cbndpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gIC8qXG4gIDEu6K6+572u5qC35byPXG4gIDIu6K+75Y+WdG9j55Sf5oiQXG4gIDMu6K6+572u6Z2i5p2/LOS4uuS7gOS5iOmdouadv+WcqOivu+WPllVSTOaJp+ihjOWJjemdoixcbiAgKDEpLuiuvue9rmxvY2Fsc3RvcmFnZeS4reeahOWxnuaApyzlrZjlnKjmsqHmnInorr7nva7nmoTmg4XlhrUsKOaYr+WQpuW8gOWQr+WPjOivreWSjOS9v+eUqOS4jeWQjOeahOe/u+ivkSlcbiAgKDIpLlVSbOeahOacrOi6qyzpmYTluKYxLua3u+WKoGNvZGUsMi7nlJ/miJBQ5qCH562+LDMu55Sf5oiQ5Y+M6K+tLDQu6K6+572u5qC35byPXG4gIDQu6K6+572uVVJMLOmcgOimgeWcqFxuICAgKi9cbiAgY29uc29sZS5sb2coYGNoZWNrU2l0ZShVUkwpOmAsIGNoZWNrU2l0ZShVUkwpKVxuXG4gIGlmIChVUkwuaW5jbHVkZXMoXCJsb2NhbGhvc3RcIil8fFVSTC5pbmNsdWRlcyhcIjEyNy4wLjAuMVwiKXx8Y2hlY2tTaXRlKFVSTCkpe1xuICAgIHN0eWxlQm9keShib2R5LGh0bWwgLCBVUkwpO1xuICAgIGxldCB0b2NFbGVtZW50ID0gdG9jKFxuICAgICAgICB7IGJvZHksIHRvY1JlcXVpcmVkX3Byb3BlcnRpZXMsIGFsbEhlYWRlciB9LFxuICAgICAgICB7XG4gICAgICAgICAgZ2VuU3R5bGUsXG4gICAgICAgICAgZ2VuZXJhdGVfY2F0YWxvZyxcbiAgICAgICAgICB0b2NDaGFuZ2UsXG4gICAgICAgICAgUmVwbGFjZVNhbWVQcm9wZXJ0eSxcbiAgICAgICAgfVxuICAgICk7XG4gICAgcGFuZWwoeyBib2R5LCBodG1sICwgVVJMLHRvY0VsZW1lbnQgfSwgcGFuZWxQcm9qZWN0LCB7XG4gICAgICBzdHlsZUJvZHksXG4gICAgICBzaG93LFxuICAgICAgU3VibWVudV9zdGF0dXMsXG4gICAgICBwYW5lbFN0YXR1cyxcbiAgICAgIFJlcGxhY2VTYW1lUHJvcGVydHksXG4gICAgICBUeXBlc1RyYW5zbGF0aW9uLFxuICAgIH0pO1xuICB9XG4gIGNsb3N1cmVVUkxfTG9hZGluZyhcbiAgICB7IFVSTCwgVVJMYXJyLCBhbGxIZWFkZXIgfSxcbiAgICB7IGNvZGUsIGFkZGxpLCBHZW5lcmF0ZV9iYWNrdXAsIGhhbmRsZVRhYmxlLCBjcmVhdGVQcmUgfVxuICApO1xuXG4gIGlmIChVUkwuaW5jbHVkZXMoXCJsb2NhbGhvc3RcIil8fFVSTC5pbmNsdWRlcyhcIjEyNy4wLjAuMVwiKSl7XG4gICAgd2luZG93Lm9uc2Nyb2xsID0gZnVuY3Rpb24gKCkge1xuICAgICAgc2hvd19jb2RlKCk7XG4gICAgICBtaW5faGVhZCgpO1xuICAgIH07XG4gICAgd2luZG93Lm9ucmVzaXplID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy/orr7nva50b2Ppmo/nnYDlsY/luZXnmoTmlLnlj5jogIzlj5jljJYhXG4gICAgICB0b2NSZXF1aXJlZF9wcm9wZXJ0aWVzLnN0eWxlLmhlaWdodCA9IGNsaWVudEhlaWdodCgpICsgXCJweFwiO1xuICAgICAgdG9jUmVxdWlyZWRfcHJvcGVydGllcy5zdHlsZS53aWR0aCA9IGNsaWVudFdpZHRoKCkgKyBcInB4XCI7XG4gICAgICBzdHlsZUJvZHkoYm9keSwgaHRtbCwgVVJMKTtcbiAgICAgIHRvYyhcbiAgICAgICAgICB7IGJvZHksIHRvY1JlcXVpcmVkX3Byb3BlcnRpZXMgfSxcbiAgICAgICAgICB7IGdlblN0eWxlOiBnZW5TdHlsZSwgdG9jQ2hhbmdlLCBSZXBsYWNlU2FtZVByb3BlcnR5IH1cbiAgICAgICk7XG4gICAgfTtcbiAgfVxufTtcbmRvY3VtZW50LnJlYWQgPSAoKT0+e1xuICBjb25zb2xlLmxvZyhgY2hhbmdlOmApXG5cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=